From 3fcd9081be3588063bc8070cef32dfab7e7b1394 Mon Sep 17 00:00:00 2001 From: Vyacheslav Tumanov Date: Wed, 19 Jul 2023 17:46:03 +0500 Subject: [PATCH] UBER-593: hyperlink editor (#3506) Signed-off-by: Vyacheslav Tumanov --- models/view/src/index.ts | 4 +- models/view/src/plugin.ts | 2 + plugins/contact-assets/lang/en.json | 2 +- plugins/view-assets/lang/en.json | 4 +- plugins/view-assets/lang/ru.json | 4 +- .../src/components/HyperlinkEditor.svelte | 62 ++++++++ .../components/HyperlinkEditorPopup.svelte | 143 ++++++++++++++++++ plugins/view-resources/src/index.ts | 4 + plugins/view/src/index.ts | 4 +- 9 files changed, 223 insertions(+), 6 deletions(-) create mode 100644 plugins/view-resources/src/components/HyperlinkEditor.svelte create mode 100644 plugins/view-resources/src/components/HyperlinkEditorPopup.svelte diff --git a/models/view/src/index.ts b/models/view/src/index.ts index 216652a2ed..2c481e540d 100644 --- a/models/view/src/index.ts +++ b/models/view/src/index.ts @@ -452,8 +452,8 @@ export function createModel (builder: Builder): void { builder, core.class.TypeHyperlink, view.component.HyperlinkPresenter, - view.component.StringEditor, - view.component.StringEditorPopup + view.component.HyperlinkEditor, + view.component.HyperlinkEditorPopup ) classPresenter(builder, core.class.TypeIntlString, view.component.IntlStringPresenter) classPresenter(builder, core.class.TypeNumber, view.component.NumberPresenter, view.component.NumberEditor) diff --git a/models/view/src/plugin.ts b/models/view/src/plugin.ts index 231aef750b..a2f75f732b 100644 --- a/models/view/src/plugin.ts +++ b/models/view/src/plugin.ts @@ -47,6 +47,8 @@ export default mergeIds(viewId, view, { StringEditorPopup: '' as AnyComponent, StringPresenter: '' as AnyComponent, HyperlinkPresenter: '' as AnyComponent, + HyperlinkEditor: '' as AnyComponent, + HyperlinkEditorPopup: '' as AnyComponent, IntlStringPresenter: '' as AnyComponent, NumberEditor: '' as AnyComponent, NumberPresenter: '' as AnyComponent, diff --git a/plugins/contact-assets/lang/en.json b/plugins/contact-assets/lang/en.json index c5f646de8a..8884091a20 100644 --- a/plugins/contact-assets/lang/en.json +++ b/plugins/contact-assets/lang/en.json @@ -42,7 +42,7 @@ "Facebook": "Facebook", "HomepagePlaceholder": "https://jappleseed.com", "Homepage": "Home page", - "SocialLinks": "Socail links", + "SocialLinks": "Social links", "ViewActivity": "View activity", "PersonAlreadyExists": "Contact already exists...", "Status": "Status", diff --git a/plugins/view-assets/lang/en.json b/plugins/view-assets/lang/en.json index 99b4b1dd55..d178bf5ac5 100644 --- a/plugins/view-assets/lang/en.json +++ b/plugins/view-assets/lang/en.json @@ -103,6 +103,8 @@ "Show": "Show", "FilterArrayAll": "includes all", "FilterArrayAny": "includes any", - "Or": "Or" + "Or": "Or", + "HyperlinkPlaceholder": "https://jappleseed.com", + "CopyToClipboard": "Copy to clipboard" } } diff --git a/plugins/view-assets/lang/ru.json b/plugins/view-assets/lang/ru.json index a1f75a4fcd..b2bac3ce36 100644 --- a/plugins/view-assets/lang/ru.json +++ b/plugins/view-assets/lang/ru.json @@ -99,6 +99,8 @@ "Show": "Отображение", "FilterArrayAll": "содержит все", "FilterArrayAny": "содержит любое из", - "Or": "Или" + "Or": "Или", + "HyperlinkPlaceholder": "https://jappleseed.com", + "CopyToClipboard": "Скопировать в буфер обмена" } } diff --git a/plugins/view-resources/src/components/HyperlinkEditor.svelte b/plugins/view-resources/src/components/HyperlinkEditor.svelte new file mode 100644 index 0000000000..a5a74ed418 --- /dev/null +++ b/plugins/view-resources/src/components/HyperlinkEditor.svelte @@ -0,0 +1,62 @@ + + + + diff --git a/plugins/view-resources/src/components/HyperlinkEditorPopup.svelte b/plugins/view-resources/src/components/HyperlinkEditorPopup.svelte new file mode 100644 index 0000000000..126c3a45d5 --- /dev/null +++ b/plugins/view-resources/src/components/HyperlinkEditorPopup.svelte @@ -0,0 +1,143 @@ + + + +
+
+ {#if editable} + { + if (ev.key === 'Enter') { + ev.preventDefault() + ev.stopPropagation() + dispatch('close', value) + } + }} + on:change + /> + {:else if value} + {value} + {:else} + + {/if} +
+
+ + diff --git a/plugins/view-resources/src/index.ts b/plugins/view-resources/src/index.ts index 82b24c9727..4596be7796 100644 --- a/plugins/view-resources/src/index.ts +++ b/plugins/view-resources/src/index.ts @@ -44,6 +44,8 @@ import ValueFilter from './components/filter/ValueFilter.svelte' import HTMLEditor from './components/HTMLEditor.svelte' import HTMLPresenter from './components/HTMLPresenter.svelte' import HyperlinkPresenter from './components/HyperlinkPresenter.svelte' +import HyperlinkEditor from './components/HyperlinkEditor.svelte' +import HyperlinkEditorPopup from './components/HyperlinkEditorPopup.svelte' import IntlStringPresenter from './components/IntlStringPresenter.svelte' import GithubPresenter from './components/linkPresenters/GithubPresenter.svelte' import YoutubePresenter from './components/linkPresenters/YoutubePresenter.svelte' @@ -202,6 +204,8 @@ export default async (): Promise => ({ StringEditor, StringPresenter, HyperlinkPresenter, + HyperlinkEditor, + HyperlinkEditorPopup, NumberEditor, NumberPresenter, BooleanPresenter, diff --git a/plugins/view/src/index.ts b/plugins/view/src/index.ts index bed0f8ceb0..9d26b48c79 100644 --- a/plugins/view/src/index.ts +++ b/plugins/view/src/index.ts @@ -832,7 +832,9 @@ const view = plugin(viewId, { Delete: '' as IntlString, Then: '' as IntlString, Or: '' as IntlString, - Subscribed: '' as IntlString + Subscribed: '' as IntlString, + HyperlinkPlaceholder: '' as IntlString, + CopyToClipboard: '' as IntlString }, icon: { Table: '' as Asset,