From 5c94b1b123bc488a741685a1350ba7998f4d88f6 Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 13 Mar 2024 01:46:10 +0000 Subject: [PATCH 1/6] Better feedback for contact field editor --- .../truth/datepicker/initial-timezone.png | Bin 9624 -> 9625 bytes src/FormElement.ts | 4 - src/contacts/ContactFieldEditor.ts | 259 +++++++++++++++--- src/contacts/ContactFields.ts | 49 +++- src/datepicker/DatePicker.ts | 13 +- src/interfaces.ts | 1 + src/textinput/TextInput.ts | 31 ++- src/vectoricon/index.ts | 6 +- static/svg/index.svg | 2 +- 9 files changed, 316 insertions(+), 49 deletions(-) diff --git a/screenshots/truth/datepicker/initial-timezone.png b/screenshots/truth/datepicker/initial-timezone.png index fff1c6a4d027e511a71ca61675c8e68d8c15cbdf..6df4490ca11e05e8e13c61470a40c625807045f9 100644 GIT binary patch literal 9625 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 + ${this.dirty + ? html`` + : html` ${this.status === Status.Saving + ? html`` + : null} + ${this.status === Status.Success && !this.dirty + ? html`` + : null} + ${this.status === Status.Failure + ? html`` + : null}`} + `; + return html`
${this.type === 'datetime' @@ -228,21 +409,29 @@ export class ContactFieldEditor extends RapidElement {
${this.name}
+
+
+ ${state} +
+
` : html`
@@ -251,21 +440,21 @@ export class ContactFieldEditor extends RapidElement {
- ${this.value - ? html` - -
- ` - : null} + ${state} + + `; diff --git a/src/datepicker/DatePicker.ts b/src/datepicker/DatePicker.ts index bf039c3a..60fc6287 100644 --- a/src/datepicker/DatePicker.ts +++ b/src/datepicker/DatePicker.ts @@ -11,6 +11,10 @@ export default class DatePicker extends FormElement { display: block; } + input { + width: inherit; + } + .container { border-radius: var(--curvature); border: 1px solid var(--color-widget-border); @@ -23,7 +27,6 @@ export default class DatePicker extends FormElement { .input-wrapper { padding: var(--temba-textinput-padding); - flex-grow: 20; } .tz { @@ -58,7 +61,6 @@ export default class DatePicker extends FormElement { display: flex; flex-direction: row; align-items: center; - flex-grow: 1; padding: 0.4em 0em; } @@ -182,9 +184,6 @@ export default class DatePicker extends FormElement { public handleChange(event) { event.preventDefault(); event.stopPropagation(); - } - - public handleBlur(event) { if (this.time) { this.datetime = DateTime.fromISO(event.target.value, { zone: this.timezone, @@ -230,9 +229,10 @@ export default class DatePicker extends FormElement { value=${dateWidgetValue} type="${this.time ? 'datetime-local' : 'date'}" @change=${this.handleChange} - @blur=${this.handleBlur} />
+
+ ${this.time ? html`
@@ -243,6 +243,7 @@ export default class DatePicker extends FormElement {
` : null} +
`; diff --git a/src/interfaces.ts b/src/interfaces.ts index 8c1ad83a..0a4c197a 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -113,6 +113,7 @@ export interface ContactField { featured: boolean; priority: number; agent_access: string; + type: string; usages: { campaign_events: number; flows: number; groups: number }; } diff --git a/src/textinput/TextInput.ts b/src/textinput/TextInput.ts index 77d945fd..6d98a9a2 100644 --- a/src/textinput/TextInput.ts +++ b/src/textinput/TextInput.ts @@ -7,6 +7,12 @@ import { Modax } from '../dialog/Modax'; import { sanitize } from './helpers'; import { CharCount } from '../charcount/CharCount'; +export enum InputType { + Text = 'text', + Password = 'password', + Number = 'number', +} + export class TextInput extends FormElement { static get styles() { return css` @@ -113,6 +119,18 @@ export class TextInput extends FormElement { .grow-wrap textarea { margin-left: -100%; } + + input[type='number'] { + appearance: none; + } + + input[type='number']::-webkit-inner-spin-button { + display: none; + } + + .type-icon { + color: #e3e3e3; + } `; } @@ -153,6 +171,9 @@ export class TextInput extends FormElement { @property({ type: Boolean }) autogrow = false; + @property({ type: String }) + type = InputType.Text; + counterElement: CharCount = null; cursorStart = -1; cursorEnd = -1; @@ -347,7 +368,9 @@ export class TextInput extends FormElement { + ${input} ${clear} + ${this.type === InputType.Number + ? html`` + : null}
diff --git a/src/vectoricon/index.ts b/src/vectoricon/index.ts index 4f3fe939..a7f58d21 100644 --- a/src/vectoricon/index.ts +++ b/src/vectoricon/index.ts @@ -1,5 +1,5 @@ // for cache busting we dynamically generate a fingerprint, use yarn svg to update -export const SVG_FINGERPRINT = '3789ab27d5774409e31f5626b8205875'; +export const SVG_FINGERPRINT = 'e1e2e60148b356e01cbc9f97dc0253dd'; // only icons below are included in the sprite sheet export enum Icon { @@ -95,6 +95,7 @@ export enum Icon { error = 'alert-circle', event = 'zap', expressions = 'at-sign', + failure = 'x', fields = 'user-edit', filter = 'filter-funnel-01', flow = 'flow', @@ -137,6 +138,7 @@ export enum Icon { new = 'plus', next_schedule = 'alarm-clock', notification = 'bell-01', + number = 'hash-01', optin_requested = 'message-notification-circle', optin = 'message-check-circle', optout = 'message-x-circle', @@ -163,6 +165,7 @@ export enum Icon { rocketchat = 'rocketchat', runs = 'rows-03', schedule = 'calendar', + search = 'search-refraction', select_open = 'chevron-down', select_clear = 'x', @@ -177,6 +180,7 @@ export enum Icon { sort_up = 'sort-arrow-up', staff = 'hard-drive', submit = 'check', + success = 'check', tickets = 'agent', tickets_all = 'archive', tickets_closed = 'check', diff --git a/static/svg/index.svg b/static/svg/index.svg index d5e513b4..95ef8bed 100644 --- a/static/svg/index.svg +++ b/static/svg/index.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 617e9a1856fc9a0581223eb3d030e04ddb603261 Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 13 Mar 2024 17:05:31 +0000 Subject: [PATCH 2/6] Don't use success state for now --- src/contacts/ContactFieldEditor.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/contacts/ContactFieldEditor.ts b/src/contacts/ContactFieldEditor.ts index e3687c92..b0e6790f 100644 --- a/src/contacts/ContactFieldEditor.ts +++ b/src/contacts/ContactFieldEditor.ts @@ -83,8 +83,8 @@ export class ContactFieldEditor extends RapidElement { --color-widget-border: rgba(var(--success-rgb), 0.6); } - .mutable .failure { - --color-widget-border: rgba(var(--error-rgb), 0.3); + .mutable.failure { + --color-widget-border: rgba(var(--error-rgb), 0.3) !important; } .mutable .dirty { @@ -230,10 +230,12 @@ export class ContactFieldEditor extends RapidElement { .popper.success { background: rgb(var(--success-rgb)); + pointer-events: none; } .popper.failure { background: rgb(var(--error-rgb)); + pointer-events: none; } .popper.success temba-icon, @@ -318,7 +320,9 @@ export class ContactFieldEditor extends RapidElement { public handleResponse(response: WebResponse) { if (response.status === 200) { this.value = response.json.fields[this.key]; - this.status = Status.Success; + // this.status = Status.Success; + // on success lets go back to ready state for now + this.status = Status.Ready; this.dirty = false; } else { this.status = Status.Failure; From bf9380006874632fa005b1df471a429bba3e0d45 Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 13 Mar 2024 17:13:41 +0000 Subject: [PATCH 3/6] Add tooltip for failure state --- src/contacts/ContactFieldEditor.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/contacts/ContactFieldEditor.ts b/src/contacts/ContactFieldEditor.ts index b0e6790f..cb2f44de 100644 --- a/src/contacts/ContactFieldEditor.ts +++ b/src/contacts/ContactFieldEditor.ts @@ -230,12 +230,10 @@ export class ContactFieldEditor extends RapidElement { .popper.success { background: rgb(var(--success-rgb)); - pointer-events: none; } .popper.failure { background: rgb(var(--error-rgb)); - pointer-events: none; } .popper.success temba-icon, @@ -391,7 +389,9 @@ export class ContactFieldEditor extends RapidElement { ? html`` : null} ${this.status === Status.Failure - ? html`` + ? html`` : null}`} `; From 103bd9c98d8c20e15a774a75bc0d3ce86d1a7de9 Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 13 Mar 2024 17:14:21 +0000 Subject: [PATCH 4/6] Remove unused icon --- src/vectoricon/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vectoricon/index.ts b/src/vectoricon/index.ts index a7f58d21..8526705a 100644 --- a/src/vectoricon/index.ts +++ b/src/vectoricon/index.ts @@ -95,7 +95,6 @@ export enum Icon { error = 'alert-circle', event = 'zap', expressions = 'at-sign', - failure = 'x', fields = 'user-edit', filter = 'filter-funnel-01', flow = 'flow', From e6a4bdba181716c63a0d16b9f8da95d3fd13e2a8 Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 13 Mar 2024 17:19:19 +0000 Subject: [PATCH 5/6] Move date icon back to the right --- src/datepicker/DatePicker.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/datepicker/DatePicker.ts b/src/datepicker/DatePicker.ts index 60fc6287..94b52222 100644 --- a/src/datepicker/DatePicker.ts +++ b/src/datepicker/DatePicker.ts @@ -27,6 +27,7 @@ export default class DatePicker extends FormElement { .input-wrapper { padding: var(--temba-textinput-padding); + flex-grow: 1; } .tz { @@ -231,8 +232,6 @@ export default class DatePicker extends FormElement { @change=${this.handleChange} /> -
- ${this.time ? html`
From 2b17962eaa18fdcd5bbd5b2a82fdf1e8e992404a Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 13 Mar 2024 17:22:02 +0000 Subject: [PATCH 6/6] Update timezone test screenshot --- .../truth/datepicker/initial-timezone.png | Bin 9625 -> 9626 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/screenshots/truth/datepicker/initial-timezone.png b/screenshots/truth/datepicker/initial-timezone.png index 6df4490ca11e05e8e13c61470a40c625807045f9..9001be2786a9ddd5f938ce94518c597c9a796a69 100644 GIT binary patch delta 7755 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