diff --git a/models/tracker/src/index.ts b/models/tracker/src/index.ts index 28f87fc255..aef9a2663e 100644 --- a/models/tracker/src/index.ts +++ b/models/tracker/src/index.ts @@ -342,7 +342,7 @@ export class TTimeSpendReport extends TAttachedDoc implements TimeSpendReport { @UX(tracker.string.Component, tracker.icon.Component, 'COMPONENT') export class TComponent extends TDoc implements Component { @Prop(TypeString(), tracker.string.Title) - // @Index(IndexKind.FullText) + @Index(IndexKind.FullText) label!: string @Prop(TypeMarkup(), tracker.string.Description) @@ -1357,6 +1357,10 @@ export function createModel (builder: Builder): void { filters: [] }) + builder.mixin(tracker.class.Component, core.class.Class, view.mixin.ClassFilters, { + filters: [] + }) + builder.createDoc( presentation.class.ObjectSearchCategory, core.space.Model, @@ -1892,4 +1896,107 @@ export function createModel (builder: Builder): void { }, tracker.action.SetSprintLead ) + + const componentListViewOptions: ViewOptionsModel = { + groupBy: ['lead'], + orderBy: [ + ['startDate', SortingOrder.Descending], + ['modifiedOn', SortingOrder.Descending] + ], + other: [] + } + + builder.createDoc( + view.class.Viewlet, + core.space.Model, + { + attachTo: tracker.class.Component, + descriptor: view.viewlet.List, + viewOptions: componentListViewOptions, + config: [ + { key: '', presenter: tracker.component.IconPresenter }, + { + key: '', + presenter: tracker.component.ComponentPresenter, + props: { kind: 'list', shouldShowAvatar: false } + }, + { key: '', presenter: view.component.GrowPresenter, props: { type: 'grow' } }, + { + key: '$lookup.lead', + presenter: tracker.component.LeadPresenter, + props: { _class: tracker.class.Component, defaultClass: contact.class.Employee, shouldShowLabel: false } + }, + { + key: '', + presenter: contact.component.MembersPresenter, + props: { + kind: 'link', + intlTitle: tracker.string.ComponentMembersTitle, + intlSearchPh: tracker.string.ComponentMembersSearchPlaceholder + } + }, + { key: '', presenter: tracker.component.TargetDatePresenter }, + { key: '', presenter: tracker.component.ComponentStatusPresenter, props: { width: 'min-content' } }, + { key: '', presenter: tracker.component.DeleteComponentPresenter } + ] + }, + tracker.viewlet.ComponentList + ) + + builder.createDoc( + view.class.ViewletDescriptor, + core.space.Model, + { + label: view.string.Timeline, + icon: view.icon.Timeline, + component: tracker.component.ComponentsTimeline + }, + tracker.viewlet.Timeline + ) + + const componentTimelineViewOptions: ViewOptionsModel = { + groupBy: [], + orderBy: [ + ['startDate', SortingOrder.Descending], + ['modifiedOn', SortingOrder.Descending] + ], + other: [], + groupDepth: 1 + } + + builder.createDoc( + view.class.Viewlet, + core.space.Model, + { + attachTo: tracker.class.Component, + descriptor: tracker.viewlet.Timeline, + viewOptions: componentTimelineViewOptions, + config: [ + { key: '', presenter: tracker.component.IconPresenter }, + { + key: '', + presenter: tracker.component.ComponentPresenter, + props: { kind: 'list', shouldShowAvatar: false } + }, + { + key: '$lookup.lead', + presenter: tracker.component.LeadPresenter, + props: { _class: tracker.class.Component, defaultClass: contact.class.Employee, shouldShowLabel: false } + }, + { + key: '', + presenter: contact.component.MembersPresenter, + props: { + kind: 'link', + intlTitle: tracker.string.ComponentMembersTitle, + intlSearchPh: tracker.string.ComponentMembersSearchPlaceholder + } + }, + { key: '', presenter: tracker.component.TargetDatePresenter }, + { key: '', presenter: tracker.component.ComponentStatusPresenter, props: { width: 'min-content' } }, + { key: '', presenter: tracker.component.DeleteComponentPresenter } + ] + }, + tracker.viewlet.ComponentsTimeline + ) } diff --git a/models/tracker/src/plugin.ts b/models/tracker/src/plugin.ts index 998452b932..c9356ed72f 100644 --- a/models/tracker/src/plugin.ts +++ b/models/tracker/src/plugin.ts @@ -60,7 +60,9 @@ export default mergeIds(trackerId, tracker, { IssueList: '' as Ref, IssueTemplateList: '' as Ref, IssueKanban: '' as Ref, - SprintList: '' as Ref + SprintList: '' as Ref, + ComponentList: '' as Ref, + ComponentsTimeline: '' as Ref }, ids: { TxIssueCreated: '' as Ref, diff --git a/plugins/tracker-resources/src/components/components/ComponentBrowser.svelte b/plugins/tracker-resources/src/components/components/ComponentBrowser.svelte index bf1916b42b..7ccd25d4ed 100644 --- a/plugins/tracker-resources/src/components/components/ComponentBrowser.svelte +++ b/plugins/tracker-resources/src/components/components/ComponentBrowser.svelte @@ -1,5 +1,5 @@
@@ -99,77 +122,57 @@
- { - if (result.detail !== undefined && result.detail.id !== viewMode) viewMode = result.detail.id - }} - /> -
+ +
+
+ + +
+ +
+
+ {#if viewlet} + + + {/if}
{ - if (result.detail !== undefined && result.detail.action) result.detail.action() - }} + items={filterModeList} + selected={filterMode} + kind="normal" + on:select={({ detail }) => detail?.action?.()} />
- (resultQuery = detail)} /> - +
+ {#if viewlet} + + {/if} + {#if $$slots.aside !== undefined && asideShown} +
+ +
+ {/if} +
diff --git a/plugins/tracker-resources/src/components/components/Components.svelte b/plugins/tracker-resources/src/components/components/Components.svelte index 9dd92701fe..da79c8667d 100644 --- a/plugins/tracker-resources/src/components/components/Components.svelte +++ b/plugins/tracker-resources/src/components/components/Components.svelte @@ -26,14 +26,14 @@ } from '@hcengineering/ui' import { onDestroy } from 'svelte' import tracker from '../../plugin' - import { ComponentsViewMode } from '../../utils' + import { ComponentsFilterMode } from '../../utils' import ComponentBrowser from './ComponentBrowser.svelte' import EditComponent from './EditComponent.svelte' export let label: IntlString = tracker.string.Components export let query: DocumentQuery = {} export let search: string = '' - export let mode: ComponentsViewMode = 'all' + export let filterMode: ComponentsFilterMode = 'all' let componentId: Ref | undefined let component: Component | undefined @@ -68,5 +68,5 @@ }} /> {:else} - + {/if} diff --git a/plugins/tracker-resources/src/components/components/ComponentsContent.svelte b/plugins/tracker-resources/src/components/components/ComponentsContent.svelte new file mode 100644 index 0000000000..35bb67603e --- /dev/null +++ b/plugins/tracker-resources/src/components/components/ComponentsContent.svelte @@ -0,0 +1,61 @@ + + + +{#if viewlet?.$lookup?.descriptor?.component} + +{/if} diff --git a/plugins/tracker-resources/src/components/components/ComponentsList.svelte b/plugins/tracker-resources/src/components/components/ComponentsList.svelte deleted file mode 100644 index aedebda51a..0000000000 --- a/plugins/tracker-resources/src/components/components/ComponentsList.svelte +++ /dev/null @@ -1,243 +0,0 @@ - - - -{#await buildModel({ client, _class, keys: itemsConfig, lookup: options.lookup }) then itemModels} -
- {#if components} - {#each components as docObject (docObject._id)} -
x === docObject)]} - class="listGrid" - class:mListGridChecked={selectedObjectIdsSet.has(docObject._id)} - class:mListGridFixed={selectedRowIndex === components.findIndex((x) => x === docObject)} - class:mListGridSelected={selectedRowIndex === components.findIndex((x) => x === docObject)} - on:focus={() => {}} - on:mouseover={() => handleRowFocused(docObject)} - > -
- {#each itemModels as attributeModel, attributeModelIndex} - {#if attributeModelIndex === 0} -
-
- { - onObjectChecked([docObject], event.detail) - }} - /> -
-
- -
-
- {:else if attributeModelIndex === 1} -
- -
-
- {:else} -
- -
- {/if} - {/each} -
-
- {/each} - {:else if loadingProps !== undefined} - {#each Array(getLoadingElementsLength(loadingProps, options)) as _, rowIndex} -
-
-
- -
- -
-
-
-
- {/each} - {/if} -
-{/await} - - diff --git a/plugins/tracker-resources/src/components/components/ComponentsListBrowser.svelte b/plugins/tracker-resources/src/components/components/ComponentsListBrowser.svelte deleted file mode 100644 index 3880853b68..0000000000 --- a/plugins/tracker-resources/src/components/components/ComponentsListBrowser.svelte +++ /dev/null @@ -1,97 +0,0 @@ - - - - - -{#if viewMode === 'list'} - - { - listProvider.updateFocus(event.detail ?? undefined) - }} - on:check={(event) => { - listProvider.updateSelection(event.detail.docs, event.detail.value) - }} - /> - -{:else} - { - listProvider.updateFocus(event.detail ?? undefined) - }} - on:check={(event) => { - listProvider.updateSelection(event.detail.docs, event.detail.value) - }} - /> -{/if} diff --git a/plugins/tracker-resources/src/components/components/ComponentsTimeline.svelte b/plugins/tracker-resources/src/components/components/ComponentsTimeline.svelte new file mode 100644 index 0000000000..98c612f9d7 --- /dev/null +++ b/plugins/tracker-resources/src/components/components/ComponentsTimeline.svelte @@ -0,0 +1,89 @@ + + + + + selectionProvider.updateFocus(event.detail ?? undefined)} + on:check={(event) => selectionProvider.updateSelection(event.detail.docs, event.detail.value)} +/> diff --git a/plugins/tracker-resources/src/components/components/DeleteComponentPresenter.svelte b/plugins/tracker-resources/src/components/components/DeleteComponentPresenter.svelte index 812cc9148b..2917edde3e 100644 --- a/plugins/tracker-resources/src/components/components/DeleteComponentPresenter.svelte +++ b/plugins/tracker-resources/src/components/components/DeleteComponentPresenter.svelte @@ -17,11 +17,9 @@ import { Button, ButtonSize, LabelAndProps, showPopup } from '@hcengineering/ui' import { getClient, MessageBox } from '@hcengineering/presentation' import type { Component } from '@hcengineering/tracker' - import tracker from '../../plugin' - import { Ref, Space } from '@hcengineering/core' import { createEventDispatcher } from 'svelte' + import tracker from '../../plugin' - export let space: Ref export let value: Component export let size: ButtonSize = 'medium' export let justify: 'left' | 'center' = 'center' @@ -49,7 +47,7 @@ } async function removeComponent () { - await client.removeDoc(tracker.class.Component, space, value._id) + await client.remove(value) } diff --git a/plugins/tracker-resources/src/components/components/LeadPresenter.svelte b/plugins/tracker-resources/src/components/components/LeadPresenter.svelte index f33a10243b..a9421cfebf 100644 --- a/plugins/tracker-resources/src/components/components/LeadPresenter.svelte +++ b/plugins/tracker-resources/src/components/components/LeadPresenter.svelte @@ -15,7 +15,7 @@ - + diff --git a/plugins/tracker-resources/src/components/components/ComponentTimeline.svelte b/plugins/tracker-resources/src/components/components/Timeline.svelte similarity index 97% rename from plugins/tracker-resources/src/components/components/ComponentTimeline.svelte rename to plugins/tracker-resources/src/components/components/Timeline.svelte index 9ddc26fcf6..c71c1a6a69 100644 --- a/plugins/tracker-resources/src/components/components/ComponentTimeline.svelte +++ b/plugins/tracker-resources/src/components/components/Timeline.svelte @@ -15,12 +15,11 @@