From 4db0e0a76298b3ac43e9d5fb5cf46389f030e15a Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Thu, 16 Mar 2023 02:34:39 +0100 Subject: [PATCH] feat(frontend): app textcomponent editable + tooltip --- .../src/lib/components/TemplateEditor.svelte | 4 ++ .../apps/components/display/AppText.svelte | 53 +++++++++++++------ .../components/helpers/ResizeWrapper.svelte | 7 ++- .../components/apps/editor/AppEditor.svelte | 3 +- .../components/apps/editor/AppPreview.svelte | 3 +- .../apps/editor/component/components.ts | 11 ++-- .../settingsPanel/ComponentPanel.svelte | 13 ++++- frontend/src/lib/components/apps/types.ts | 1 + 8 files changed, 66 insertions(+), 29 deletions(-) diff --git a/frontend/src/lib/components/TemplateEditor.svelte b/frontend/src/lib/components/TemplateEditor.svelte index 18b7515627..92471174c5 100644 --- a/frontend/src/lib/components/TemplateEditor.svelte +++ b/frontend/src/lib/components/TemplateEditor.svelte @@ -577,6 +577,10 @@ }) } + export function focus() { + editor?.focus() + } + onMount(() => { if (browser) { loadMonaco() diff --git a/frontend/src/lib/components/apps/components/display/AppText.svelte b/frontend/src/lib/components/apps/components/display/AppText.svelte index 1a94a811a6..079224f8c1 100644 --- a/frontend/src/lib/components/apps/components/display/AppText.svelte +++ b/frontend/src/lib/components/apps/components/display/AppText.svelte @@ -8,10 +8,10 @@ import InputValue from '../helpers/InputValue.svelte' import RunnableWrapper from '../helpers/RunnableWrapper.svelte' import { twMerge } from 'tailwind-merge' - import type { AppViewerContext, ComponentCustomCSS } from '../../types' + import type { AppEditorContext, AppViewerContext, ComponentCustomCSS } from '../../types' import { getContext } from 'svelte' - import ResizeWrapper from '../helpers/ResizeWrapper.svelte' import { initOutput } from '../../editor/appUtils' + import Tooltip from '$lib/components/Tooltip.svelte' export let id: string export let componentInput: AppInput | undefined @@ -22,7 +22,9 @@ export let customCss: ComponentCustomCSS<'text'> | undefined = undefined export let render: boolean - const { app, worldStore } = getContext('AppViewerContext') + const { app, worldStore, mode } = getContext('AppViewerContext') + + const { ontextfocus } = getContext('AppEditorContext') initOutput($worldStore, id, { result: undefined, @@ -32,7 +34,7 @@ let result: string | undefined = undefined let style: 'Title' | 'Subtitle' | 'Body' | 'Caption' | 'Label' | undefined = undefined let copyButton: boolean - let fitContent = false + let tooltip: string = '' function getComponent() { switch (style) { @@ -70,17 +72,27 @@ - + - +
{#if !result || result === ''}
No text
{:else} -
+ +
{ + if ($mode === 'dnd' && componentInput?.type == 'template') { + $ontextfocus?.() + } + }} + > {String(result)} + {#if tooltip != ''} + {tooltip} + {/if} + {#if copyButton && result} + + + Copy to clipboard + + {/if} - {#if copyButton && result} - - - Copy to clipboard - - {/if}
{/if} - +
diff --git a/frontend/src/lib/components/apps/components/helpers/ResizeWrapper.svelte b/frontend/src/lib/components/apps/components/helpers/ResizeWrapper.svelte index dbe37796c6..e44a437e49 100644 --- a/frontend/src/lib/components/apps/components/helpers/ResizeWrapper.svelte +++ b/frontend/src/lib/components/apps/components/helpers/ResizeWrapper.svelte @@ -5,7 +5,7 @@ export let id: string export let shouldWrap: boolean = false - const { app, breakpoint } = getContext('AppViewerContext') + const { app, breakpoint, mode } = getContext('AppViewerContext') $: gridItem = findGridItem($app, id) @@ -16,13 +16,12 @@ const wrapperHeight = wrapper.getBoundingClientRect().height const width = $breakpoint === 'sm' ? 3 : 12 gridItem[width].h = Math.ceil(wrapperHeight / 36) - gridItem = gridItem } } -{#if shouldWrap} -
+{#if shouldWrap && $mode !== 'preview'} +
{:else} diff --git a/frontend/src/lib/components/apps/editor/AppEditor.svelte b/frontend/src/lib/components/apps/editor/AppEditor.svelte index 6cfec97a18..bc44301686 100644 --- a/frontend/src/lib/components/apps/editor/AppEditor.svelte +++ b/frontend/src/lib/components/apps/editor/AppEditor.svelte @@ -98,7 +98,8 @@ setContext('AppEditorContext', { history, - pickVariableCallback + pickVariableCallback, + ontextfocus: writable(undefined) }) let timeout: NodeJS.Timeout | undefined = undefined diff --git a/frontend/src/lib/components/apps/editor/AppPreview.svelte b/frontend/src/lib/components/apps/editor/AppPreview.svelte index c6673d8393..50ca3b01f4 100644 --- a/frontend/src/lib/components/apps/editor/AppPreview.svelte +++ b/frontend/src/lib/components/apps/editor/AppPreview.svelte @@ -72,7 +72,8 @@ setContext('AppEditorContext', { history: undefined, - pickVariableCallback: writable(undefined) + pickVariableCallback: writable(undefined), + ontextfocus: writable(undefined) }) let ncontext = context diff --git a/frontend/src/lib/components/apps/editor/component/components.ts b/frontend/src/lib/components/apps/editor/component/components.ts index f18a852b60..9e2cd1b6e8 100644 --- a/frontend/src/lib/components/apps/editor/component/components.ts +++ b/frontend/src/lib/components/apps/editor/component/components.ts @@ -205,7 +205,7 @@ export const components: Record = { icon: Type, dims: '1:1-3:1', data: { - softWrap: false, + softWrap: true, horizontalAlignment: 'left', verticalAlignment: 'top', id: '', @@ -229,11 +229,12 @@ export const components: Record = { fieldType: 'boolean', onlyStatic: true }, - fitContent: { + tooltip: { type: 'static', - value: false, - fieldType: 'boolean', - onlyStatic: true + value: '', + fieldType: 'text', + onlyStatic: true, + tooltip: 'Tooltip text if not empty' } }, customCss: { diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte index 152ccc97f6..e7b8e6c12f 100644 --- a/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte +++ b/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte @@ -33,10 +33,14 @@ export let noGrid = false export let duplicateMoveAllowed = true + let editor: TemplateEditor | undefined = undefined + const { app, runnableComponents, selectedComponent, worldStore, focusedGrid, stateId, state } = getContext('AppViewerContext') - const { history } = getContext('AppEditorContext') + const { history, ontextfocus } = getContext('AppEditorContext') + + $: editor && ($ontextfocus = () => editor?.focus()) function removeGridElement() { push(history, $app) @@ -109,7 +113,12 @@ {:else if component.componentInput.type === 'template' && component.componentInput !== undefined}
- +
{:else if component.componentInput.type === 'connected' && component.componentInput !== undefined} diff --git a/frontend/src/lib/components/apps/types.ts b/frontend/src/lib/components/apps/types.ts index 633e20d8bb..9d33b856a2 100644 --- a/frontend/src/lib/components/apps/types.ts +++ b/frontend/src/lib/components/apps/types.ts @@ -142,6 +142,7 @@ export type AppViewerContext = { export type AppEditorContext = { history: History | undefined pickVariableCallback: Writable<((path: string) => void) | undefined> + ontextfocus: Writable<(() => void) | undefined> } export type FocusedGrid = { parentComponentId: string; subGridIndex: number }