From c2fd75e3ce7901e04eca030b5495bc3bf2967e65 Mon Sep 17 00:00:00 2001 From: Denis Bykhov <80476319+BykhovDenis@users.noreply.github.com> Date: Sun, 29 May 2022 10:54:08 +0600 Subject: [PATCH] Edit attribute fixes (#1894) Signed-off-by: Denis Bykhov <80476319+BykhovDenis@users.noreply.github.com> --- .../src/components/ClassAttributes.svelte | 10 +++- .../src/components/EditAttribute.svelte | 58 +++++++++---------- .../typeEditors/DateTypeEditor.svelte | 28 ++++++--- .../components/typeEditors/RefEditor.svelte | 17 ++++-- 4 files changed, 70 insertions(+), 43 deletions(-) diff --git a/plugins/setting-resources/src/components/ClassAttributes.svelte b/plugins/setting-resources/src/components/ClassAttributes.svelte index bf6441a127..f5a0407d29 100644 --- a/plugins/setting-resources/src/components/ClassAttributes.svelte +++ b/plugins/setting-resources/src/components/ClassAttributes.svelte @@ -128,7 +128,15 @@ <tbody> {#each attributes as attr} {@const attrType = attr.type._class === core.class.RefTo ? getRefClassTo(attr.type) : undefined} - <tr class="antiTable-body__row" on:contextmenu|preventDefault={(ev) => showMenu(ev, attr)}> + <tr + class="antiTable-body__row" + on:contextmenu={(ev) => { + if (attr.isCustom) { + ev.preventDefault() + showMenu(ev, attr) + } + }} + > <td> <div class="antiTable-cells__firstCell"> <Label label={attr.label} /> diff --git a/plugins/setting-resources/src/components/EditAttribute.svelte b/plugins/setting-resources/src/components/EditAttribute.svelte index 30425f37af..f1d6c52b95 100644 --- a/plugins/setting-resources/src/components/EditAttribute.svelte +++ b/plugins/setting-resources/src/components/EditAttribute.svelte @@ -24,8 +24,8 @@ export let attribute: AnyAttribute export let exist: boolean let name: string - let type: Type<PropertyType> | undefined - let index: IndexKind | undefined + let type: Type<PropertyType> | undefined = attribute.type + let index: IndexKind | undefined = attribute.index let is: AnyComponent | undefined const client = getClient() @@ -94,34 +94,34 @@ <div class="flex-col mb-2"> <div class="flex-row-center flex-grow"> <Label label={setting.string.Type} /> - </div> - <div class="flex-col mb-2"> - {#if exist} - <Label label={attribute.type.label} /> - {:else} - <div class="flex-row-center flex-grow"> - <div class="ml-4"> - <DropdownLabelsIntl - label={setting.string.Type} - {items} - width="8rem" - bind:selected={selectedType} - on:selected={(e) => selectType(e.detail)} - /> - </div> - </div> - {#if is} - <div class="flex mt-4"> - <Component - {is} - on:change={(e) => { - type = e.detail?.type - index = e.detail?.index - }} - /> - </div> + <div class="ml-4"> + {#if exist} + <Label label={attribute.type.label} /> + {:else} + <DropdownLabelsIntl + label={setting.string.Type} + {items} + width="8rem" + bind:selected={selectedType} + on:selected={(e) => selectType(e.detail)} + /> {/if} - {/if} + </div> </div> + {#if is} + <div class="flex mt-4"> + <Component + {is} + props={{ + type, + editable: !exist + }} + on:change={(e) => { + type = e.detail?.type + index = e.detail?.index + }} + /> + </div> + {/if} </div> </Card> diff --git a/plugins/setting-resources/src/components/typeEditors/DateTypeEditor.svelte b/plugins/setting-resources/src/components/typeEditors/DateTypeEditor.svelte index 133345f549..17fec37bb7 100644 --- a/plugins/setting-resources/src/components/typeEditors/DateTypeEditor.svelte +++ b/plugins/setting-resources/src/components/typeEditors/DateTypeEditor.svelte @@ -13,30 +13,40 @@ // limitations under the License. --> <script lang="ts"> + import { TypeDate as DateType } from '@anticrm/core' import { TypeDate } from '@anticrm/model' import { Label } from '@anticrm/ui' import { createEventDispatcher, onMount } from 'svelte' import setting from '../../plugin' import BooleanEditor from '@anticrm/view-resources/src/components/BooleanEditor.svelte' + import BooleanPresenter from '@anticrm/view-resources/src/components/BooleanPresenter.svelte' + export let type: DateType | undefined + export let editable: boolean = true const dispatch = createEventDispatcher() - let withTime: boolean = false + let withTime: boolean = type?.withTime ?? false onMount(() => { - dispatch('change', { type: TypeDate(withTime) }) + if (type === undefined) { + dispatch('change', { type: TypeDate(withTime) }) + } }) </script> <div class="flex-row-center"> <Label label={setting.string.WithTime} /> <div class="ml-2"> - <BooleanEditor - withoutUndefined - bind:value={withTime} - onChange={(e) => { - dispatch('change', { type: TypeDate(e) }) - }} - /> + {#if editable} + <BooleanEditor + withoutUndefined + bind:value={withTime} + onChange={(e) => { + dispatch('change', { type: TypeDate(e) }) + }} + /> + {:else} + <BooleanPresenter value={withTime} /> + {/if} </div> </div> diff --git a/plugins/setting-resources/src/components/typeEditors/RefEditor.svelte b/plugins/setting-resources/src/components/typeEditors/RefEditor.svelte index fbac7d78eb..fa6a8651ab 100644 --- a/plugins/setting-resources/src/components/typeEditors/RefEditor.svelte +++ b/plugins/setting-resources/src/components/typeEditors/RefEditor.svelte @@ -13,7 +13,7 @@ // limitations under the License. --> <script lang="ts"> - import core, { Class, Doc, Ref } from '@anticrm/core' + import core, { Class, Doc, Ref, RefTo } from '@anticrm/core' import { TypeRef } from '@anticrm/model' import { getClient } from '@anticrm/presentation' import { DOMAIN_STATE } from '@anticrm/task' @@ -21,6 +21,9 @@ import view from '@anticrm/view-resources/src/plugin' import { createEventDispatcher } from 'svelte' + export let type: RefTo<Doc> | undefined + export let editable: boolean = true + const dispatch = createEventDispatcher() const client = getClient() const hierarchy = client.getHierarchy() @@ -39,14 +42,20 @@ return { id: p._id, label: p.label } }) - let refClass: Ref<Class<Doc>> + let refClass: Ref<Class<Doc>> | undefined = type?.to - $: dispatch('change', { type: TypeRef(refClass) }) + $: selected = classes.find((p) => p.id === refClass) + + $: refClass && dispatch('change', { type: TypeRef(refClass) }) </script> <div class="flex-row-center flex-grow"> <Label label={core.string.Class} /> <div class="ml-4"> - <DropdownLabelsIntl label={core.string.Class} items={classes} width="8rem" bind:selected={refClass} /> + {#if editable} + <DropdownLabelsIntl label={core.string.Class} items={classes} width="8rem" bind:selected={refClass} /> + {:else if selected} + <Label label={selected.label} /> + {/if} </div> </div>