diff --git a/changelog.md b/changelog.md index 91ce560ee2..7ae42a0669 100644 --- a/changelog.md +++ b/changelog.md @@ -6,6 +6,7 @@ Platform: - Fix first filter disappear - Adjust label editors design +- Allow to define table columns order - Fix skills/labels selection and show real usage counter ## 0.6.22 diff --git a/packages/ui/src/components/ToggleButton.svelte b/packages/ui/src/components/ToggleButton.svelte new file mode 100644 index 0000000000..07f5512058 --- /dev/null +++ b/packages/ui/src/components/ToggleButton.svelte @@ -0,0 +1,315 @@ + + + + { + value = !value + dispatch('change', value) + }} + on:focus + on:blur + on:mousemove + on:mouseleave + {id} +> + {#if icon} + + + + {/if} + + {#if label} + + {:else if $$slots.content} + + {/if} + + + + diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index ede43bb8cd..b791c7f692 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -138,6 +138,7 @@ export { default as WeekCalendar } from './components/calendar/WeekCalendar.svel export { default as FocusHandler } from './components/FocusHandler.svelte' export { default as ListView } from './components/ListView.svelte' +export { default as ToggleButton } from './components/ToggleButton.svelte' export * from './types' export * from './location' diff --git a/plugins/view-resources/src/components/ViewletSetting.svelte b/plugins/view-resources/src/components/ViewletSetting.svelte index 8c4fb93009..bec223ac82 100644 --- a/plugins/view-resources/src/components/ViewletSetting.svelte +++ b/plugins/view-resources/src/components/ViewletSetting.svelte @@ -16,7 +16,7 @@ import presentation, { Card, createQuery, getAttributePresenterClass, getClient } from '@anticrm/presentation' import { BuildModelKey, Viewlet, ViewletPreference } from '@anticrm/view' import core, { ArrOf, Class, Doc, Lookup, Ref, Type } from '@anticrm/core' - import { Button, Grid, MiniToggle } from '@anticrm/ui' + import { Button, ToggleButton } from '@anticrm/ui' import { createEventDispatcher } from 'svelte' import { IntlString } from '@anticrm/platform' import { buildConfigLookup, getLookupClass, getLookupLabel, getLookupProperty } from '../utils' @@ -142,7 +142,7 @@ } } - async function restoreDefault (): Promise { + function restoreDefault (): void { attributes = getConfig(viewlet, undefined) } @@ -162,8 +162,46 @@ for (const key of result) { key.enabled = preference.config.findIndex((p) => deepEqual(p, key.value)) !== -1 } + result.sort((a, b) => { + if (a.enabled !== b.enabled) { + return a.enabled ? -1 : 1 + } + return ( + preference.config.findIndex((p) => deepEqual(p, a.value)) - + preference.config.findIndex((p) => deepEqual(p, b.value)) + ) + }) return result } + + const elements: HTMLElement[] = [] + let selected: number | undefined + + function dragswap (ev: MouseEvent, i: number): boolean { + const s = selected as number + if (i < s) { + if (elements[i].offsetTop !== elements[s].offsetTop) { + return ev.offsetY < elements[i].offsetHeight / 2 + } else { + return ev.offsetX < elements[i].offsetWidth / 2 + } + } else if (i > s) { + if (elements[i].offsetTop !== elements[s].offsetTop) { + return ev.offsetY > elements[i].offsetHeight / 2 + } else { + return ev.offsetX > elements[i].offsetWidth / 2 + } + } + return false + } + + function dragover (ev: MouseEvent, i: number) { + const s = selected as number + if (dragswap(ev, i)) { + ;[attributes[i], attributes[s]] = [attributes[s], attributes[i]] + selected = i + } + } - - {#each attributes as attribute} - + + {#each attributes as attribute, i} + { + dragover(ev, i) + }} + on:drop|preventDefault + on:dragstart={() => { + selected = i + }} + on:dragend={() => { + selected = undefined + }} + > + + {/each} - + - restoreDefault()} /> +