diff --git a/client/common/configuration/elements/templates/channel-configuration.ts b/client/common/configuration/elements/templates/channel-configuration.ts index 916391ec..ce6c1c5c 100644 --- a/client/common/configuration/elements/templates/channel-configuration.ts +++ b/client/common/configuration/elements/templates/channel-configuration.ts @@ -62,7 +62,7 @@ export function tplChannelConfiguration (el: ChannelConfigurationElement): Templ entries: { inputType: 'tags', default: [], - separators: ['\n', '\t', ';'] + separator: '\n' }, regexp: { inputType: 'checkbox', @@ -87,9 +87,9 @@ export function tplChannelConfiguration (el: ChannelConfigurationElement): Templ }, quotes: { messages: { - inputType: 'tags', + inputType: 'textarea', default: [], - separators: ['\n', '\t', ';'] + separator: '\n' }, delay: { inputType: 'number', diff --git a/client/common/lib/elements/dynamic-table-form.ts b/client/common/lib/elements/dynamic-table-form.ts index d899d0f2..7d9cb872 100644 --- a/client/common/lib/elements/dynamic-table-form.ts +++ b/client/common/lib/elements/dynamic-table-form.ts @@ -67,7 +67,7 @@ interface CellDataSchema { label?: TemplateResult | string options?: { [key: string]: string } datalist?: DynamicTableAcceptedTypes[] - separators?: string[] + separator?: string inputType?: DynamicTableAcceptedInputTypes default?: DynamicTableAcceptedTypes colClassList?: string[] // CSS classes to add to the element. @@ -148,7 +148,9 @@ export class DynamicTableFormElement extends LivechatElement { // Note: we make multiple querySelector, to be sure to not get a nested table. // We want the top level table associated tr. const input = this.querySelector('table')?.querySelector( - '&>tbody>tr:last-child>td input:not([type=hidden]),&>tbody>tr:last-child>td livechat-tags-input' + '&>tbody>tr:last-child>td input:not([type=hidden]),' + + '&>tbody>tr:last-child>td livechat-tags-input,' + + '&>tbody>tr:last-child>td textarea' ) if (input) { (input as HTMLElement).focus() @@ -462,7 +464,7 @@ export class DynamicTableFormElement extends LivechatElement { inputName, propertyName, propertySchema, - (propertyValue)?.join(propertySchema.separators?.[0] ?? ',') ?? + (propertyValue)?.join(propertySchema.separator ?? ',') ?? propertyValue ?? propertySchema.default ?? '', originalIndex)} ${feedback} @@ -477,7 +479,7 @@ export class DynamicTableFormElement extends LivechatElement { inputName, propertyName, propertySchema, - (propertyValue)?.join(propertySchema.separators?.[0] ?? ',') ?? + (propertyValue)?.join(propertySchema.separator ?? ',') ?? propertyValue ?? propertySchema.default ?? '', originalIndex)} ${feedback} @@ -568,7 +570,7 @@ export class DynamicTableFormElement extends LivechatElement { .minlength=${propertySchema.minlength} .maxlength=${propertySchema.maxlength} .datalist=${propertySchema.datalist as any} - .separators=${propertySchema.separators} + .separator=${propertySchema.separator} @change=${(event: Event) => this._updatePropertyFromValue(event, propertyName, propertySchema, rowId)} .value=${propertyValue as any} >` @@ -725,13 +727,11 @@ export class DynamicTableFormElement extends LivechatElement { if (rowById._id === rowId) { switch (propertySchema.default?.constructor) { case Array: - if (value.constructor === Array) { + if (value.constructor === Array || !propertySchema.separator) { rowById.row[propertyName] = value } else { rowById.row[propertyName] = (value as string) - .split(new RegExp(`(?:${propertySchema.separators - ?.map((c: string) => c.replace(/^[.\\+*?[^\]$(){}=!<>|:-]$/, '\\')) - .join('|') ?? ''})+)`)) + .split(propertySchema.separator) } break default: diff --git a/client/common/lib/elements/tags-input.ts b/client/common/lib/elements/tags-input.ts index a0e783a4..fcea98cf 100644 --- a/client/common/lib/elements/tags-input.ts +++ b/client/common/lib/elements/tags-input.ts @@ -46,7 +46,7 @@ export class TagsInputElement extends LivechatElement { private readonly _isPressingKey: string[] = [] @property({ attribute: false }) - public separators?: string[] = ['\n'] + public separator: string = '\n' @property({ attribute: false }) public animDuration: number = 200 @@ -145,15 +145,13 @@ export class TagsInputElement extends LivechatElement { target?.value?.slice(target.selectionEnd ?? target?.value?.length ?? 0) ?? '' }` - let values = newValue.split(new RegExp(`(?:${this.separators - ?.map((c: string) => c.replace(/^[.\\+*?[^\]$(){}=!<>|:-]$/, '\\')) - .join('|') ?? ''})+`)) + let values = newValue.split(this.separator) values = values.map(v => v.trim()).filter(v => v !== '') if (values.length > 0) { // Keep last value in input if value doesn't finish with a separator - if (!this.separators?.some(separator => newValue.match(/\s+$/m)?.[0]?.includes(separator))) { + if (!newValue.match(/\s+$/m)?.[0]?.includes(this.separator)) { target.value = values.pop() ?? '' } else { target.value = '' @@ -257,7 +255,7 @@ export class TagsInputElement extends LivechatElement { if (target) { this._inputValue = target.value - if (this.separators?.includes(target.value.slice(-1))) { + if (this.separator === target.value.slice(-1)) { e.preventDefault() target.value = target.value.slice(0, -1) this._handleNewTag(e)