forked from extern/egroupware
Customfield validation fixes
- customfield did not pass required setting on to widgets - link entry did not support required
This commit is contained in:
parent
1a969c4cfc
commit
374ba994a4
@ -10,7 +10,7 @@
|
|||||||
import {css, html, LitElement, PropertyValues, SlotMixin} from "@lion/core";
|
import {css, html, LitElement, PropertyValues, SlotMixin} from "@lion/core";
|
||||||
import {Et2LinkAppSelect} from "./Et2LinkAppSelect";
|
import {Et2LinkAppSelect} from "./Et2LinkAppSelect";
|
||||||
import {Et2InputWidget} from "../Et2InputWidget/Et2InputWidget";
|
import {Et2InputWidget} from "../Et2InputWidget/Et2InputWidget";
|
||||||
import {FormControlMixin, ValidateMixin} from "@lion/form-core";
|
import {FormControlMixin} from "@lion/form-core";
|
||||||
import {Et2LinkSearch} from "./Et2LinkSearch";
|
import {Et2LinkSearch} from "./Et2LinkSearch";
|
||||||
import {Et2Link, LinkInfo} from "./Et2Link";
|
import {Et2Link, LinkInfo} from "./Et2Link";
|
||||||
|
|
||||||
@ -19,22 +19,24 @@ import {Et2Link, LinkInfo} from "./Et2Link";
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export class Et2LinkEntry extends Et2InputWidget(FormControlMixin(ValidateMixin(SlotMixin(LitElement))))
|
export class Et2LinkEntry extends Et2InputWidget(FormControlMixin(SlotMixin(LitElement)))
|
||||||
{
|
{
|
||||||
static get styles()
|
static get styles()
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
...super.styles,
|
...super.styles,
|
||||||
css`
|
css`
|
||||||
:host {
|
:host {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
:host(.hideApp) ::slotted([slot="app"]) {
|
|
||||||
|
:host(.hideApp) ::slotted([slot="app"]) {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.input-group__input {
|
|
||||||
|
.input-group__input {
|
||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
`
|
`
|
||||||
];
|
];
|
||||||
@ -155,6 +157,10 @@ export class Et2LinkEntry extends Et2InputWidget(FormControlMixin(ValidateMixin(
|
|||||||
updated(changedProperties : PropertyValues)
|
updated(changedProperties : PropertyValues)
|
||||||
{
|
{
|
||||||
super.updated(changedProperties);
|
super.updated(changedProperties);
|
||||||
|
if(changedProperties.has("required"))
|
||||||
|
{
|
||||||
|
this._searchNode.required = this.required;
|
||||||
|
}
|
||||||
if(changedProperties.has("readonly"))
|
if(changedProperties.has("readonly"))
|
||||||
{
|
{
|
||||||
this._appNode.readonly = this.readonly;
|
this._appNode.readonly = this.readonly;
|
||||||
@ -266,6 +272,8 @@ export class Et2LinkEntry extends Et2InputWidget(FormControlMixin(ValidateMixin(
|
|||||||
this._searchNode.value = "";
|
this._searchNode.value = "";
|
||||||
this._searchNode.clearSearch();
|
this._searchNode.clearSearch();
|
||||||
this._searchNode.focus();
|
this._searchNode.focus();
|
||||||
|
|
||||||
|
this.requestUpdate('value');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -277,6 +285,9 @@ export class Et2LinkEntry extends Et2InputWidget(FormControlMixin(ValidateMixin(
|
|||||||
{
|
{
|
||||||
this.classList.add("hideApp");
|
this.classList.add("hideApp");
|
||||||
this.dispatchEvent(new Event("change"));
|
this.dispatchEvent(new Event("change"));
|
||||||
|
this.requestUpdate('value');
|
||||||
|
|
||||||
|
this.validate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -291,6 +302,9 @@ export class Et2LinkEntry extends Et2InputWidget(FormControlMixin(ValidateMixin(
|
|||||||
this._searchNode.focus();
|
this._searchNode.focus();
|
||||||
|
|
||||||
this.dispatchEvent(new Event("change"));
|
this.dispatchEvent(new Event("change"));
|
||||||
|
this.requestUpdate('value');
|
||||||
|
|
||||||
|
this.validate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -388,7 +402,7 @@ export class Et2LinkEntry extends Et2InputWidget(FormControlMixin(ValidateMixin(
|
|||||||
_inputGroupInputTemplate()
|
_inputGroupInputTemplate()
|
||||||
{
|
{
|
||||||
return html`
|
return html`
|
||||||
<div class="input-group__input">
|
<div class="input-group__input" part="control">
|
||||||
<slot name="app"></slot>
|
<slot name="app"></slot>
|
||||||
<slot name="select"></slot>
|
<slot name="select"></slot>
|
||||||
</div>
|
</div>
|
||||||
|
@ -133,6 +133,11 @@ export class Et2LinkSearch extends Et2Select
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public validate()
|
||||||
|
{
|
||||||
|
// Do not validate
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// @ts-ignore TypeScript is not recognizing that this widget is a LitElement
|
// @ts-ignore TypeScript is not recognizing that this widget is a LitElement
|
||||||
|
@ -295,8 +295,8 @@ class Customfields extends Transformer
|
|||||||
$type = 'link-to';
|
$type = 'link-to';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$xml = '<'.$type.' type="'.$type.'" id="'.self::$prefix.$fname.'"/>';
|
$xml = '<' . $type . ' type="' . $type . '" id="' . self::$prefix . $fname . '" required="' . $field['needed'] . '"/>';
|
||||||
$widget = self::factory($type, $xml, self::$prefix.$fname);
|
$widget = self::factory($type, $xml, self::$prefix . $fname);
|
||||||
$widget->id = self::$prefix.$fname;
|
$widget->id = self::$prefix.$fname;
|
||||||
$widget->attrs['type'] = $type;
|
$widget->attrs['type'] = $type;
|
||||||
$widget->set_attrs($xml);
|
$widget->set_attrs($xml);
|
||||||
|
@ -358,10 +358,6 @@ class Link extends Etemplate\Widget
|
|||||||
*
|
*
|
||||||
* Following attributes get checked:
|
* Following attributes get checked:
|
||||||
* - needed: value must NOT be empty
|
* - needed: value must NOT be empty
|
||||||
* - min, max: int and float widget only
|
|
||||||
* - maxlength: maximum length of string (longer strings get truncated to allowed size)
|
|
||||||
* - preg: perl regular expression incl. delimiters (set by default for int, float and colorpicker)
|
|
||||||
* - int and float get casted to their type
|
|
||||||
*
|
*
|
||||||
* @param string $cname current namespace
|
* @param string $cname current namespace
|
||||||
* @param array $expand values for keys 'c', 'row', 'c_', 'row_', 'cont'
|
* @param array $expand values for keys 'c', 'row', 'c_', 'row_', 'cont'
|
||||||
@ -377,23 +373,30 @@ class Link extends Etemplate\Widget
|
|||||||
$value = $value_in =& self::get_array($content, $form_name);
|
$value = $value_in =& self::get_array($content, $form_name);
|
||||||
|
|
||||||
// keep values added into request by other ajax-functions, eg. files draged into htmlarea (Vfs)
|
// keep values added into request by other ajax-functions, eg. files draged into htmlarea (Vfs)
|
||||||
if ((!$value || is_array($value) && !$value['to_id']) && is_array($expand['cont'][$this->id]) && !empty($expand['cont'][$this->id]['to_id']))
|
if((!$value || is_array($value) && !$value['to_id']) && is_array($expand['cont'][$this->id]) && !empty($expand['cont'][$this->id]['to_id']))
|
||||||
{
|
{
|
||||||
if (!is_array($value)) $value = array(
|
if(!is_array($value))
|
||||||
'to_app' => $expand['cont'][$this->id]['to_app'],
|
{
|
||||||
);
|
$value = array(
|
||||||
|
'to_app' => $expand['cont'][$this->id]['to_app'],
|
||||||
|
);
|
||||||
|
}
|
||||||
$value['to_id'] = $expand['cont'][$this->id]['to_id'];
|
$value['to_id'] = $expand['cont'][$this->id]['to_id'];
|
||||||
}
|
}
|
||||||
|
if((string)$value === '' && $this->required)
|
||||||
|
{
|
||||||
|
self::set_validation_error($form_name, lang('Field must not be empty !!!'), '');
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Link widgets can share IDs, make sure to preserve values from others
|
// Link widgets can share IDs, make sure to preserve values from others
|
||||||
$already = self::get_array($validated,$form_name);
|
$already = self::get_array($validated, $form_name);
|
||||||
if($already != null)
|
if($already != null)
|
||||||
{
|
{
|
||||||
$value = array_merge((array)$value, $already);
|
$value = array_merge((array)$value, $already);
|
||||||
}
|
}
|
||||||
// Automatically do link if user selected entry but didn't click 'Link' button
|
// Automatically do link if user selected entry but didn't click 'Link' button
|
||||||
$link = self::get_array($content, self::form_name($cname, $this->id . '_link_entry'));
|
$link = self::get_array($content, self::form_name($cname, $this->id . '_link_entry'));
|
||||||
if($this->type =='link-to' && is_array($link) && $link['app'] && $link['id'] )
|
if($this->type == 'link-to' && is_array($link) && $link['app'] && $link['id'])
|
||||||
{
|
{
|
||||||
// Do we have enough information to link automatically?
|
// Do we have enough information to link automatically?
|
||||||
if(is_array($value) && $value['to_id'])
|
if(is_array($value) && $value['to_id'])
|
||||||
|
Loading…
Reference in New Issue
Block a user