diff --git a/models/card/src/actions.ts b/models/card/src/actions.ts index c948a572a8..436b479eb0 100644 --- a/models/card/src/actions.ts +++ b/models/card/src/actions.ts @@ -264,7 +264,13 @@ export function createActions (builder: Builder): void { createAction( builder, { - action: card.actionImpl.DuplicateCard, + action: view.actionImpl.ShowPopup, + actionProps: { + component: card.component.DuplicateCard, + fillProps: { + _object: 'value' + } + }, label: card.string.Duplicate, icon: card.icon.Duplicate, input: 'focus', diff --git a/models/card/src/index.ts b/models/card/src/index.ts index 14c76397eb..fbb4d05c00 100644 --- a/models/card/src/index.ts +++ b/models/card/src/index.ts @@ -12,7 +12,6 @@ // limitations under the License. import activity from '@hcengineering/activity' -import communication from '@hcengineering/communication' import { type CanCreateCardResource, type Card, @@ -23,6 +22,7 @@ import { type CardViewDefaults, type CreateCardExtension, DOMAIN_CARD, + type DuplicateSetting, type ExportExtension, type ExportFunc, type FavoriteCard, @@ -34,6 +34,8 @@ import { type Tag } from '@hcengineering/card' import chunter from '@hcengineering/chunter' +import communication from '@hcengineering/communication' +import converter from '@hcengineering/converter' import core, { AccountRole, type Blobs, @@ -46,6 +48,7 @@ import core, { DOMAIN_SPACE, IndexKind, type MarkupBlobRef, + type Mixin as MixinType, type MixinData, type Rank, type Ref, @@ -77,7 +80,7 @@ import presentation from '@hcengineering/model-presentation' import setting from '@hcengineering/model-setting' import view, { type Viewlet } from '@hcengineering/model-view' import workbench, { WidgetType } from '@hcengineering/model-workbench' -import converter from '@hcengineering/converter' +import notification from '@hcengineering/notification' import { type Asset, getEmbeddedLabel, type IntlString, type Resource } from '@hcengineering/platform' import time, { type ToDo } from '@hcengineering/time' import { PaletteColorIndexes } from '@hcengineering/ui/src/colors' @@ -86,7 +89,6 @@ import { type BuildModelKey, type ViewOptionModel } from '@hcengineering/view' import { createActions } from './actions' import { defineActionPermissions, definePermissions } from './permissions' import card from './plugin' -import notification from '@hcengineering/notification' export { cardId } from '@hcengineering/card' @@ -223,6 +225,13 @@ export class TExportExtension extends TDoc implements ExportExtension { func!: Resource } +@Mixin(card.mixin.DuplicateSetting, card.class.MasterTag) +export class TDuplicateSetting extends TMasterTag implements DuplicateSetting { + excludedProperties?: string[] + excludedRelations?: string[] // ${associationId}_${a|b} + excludeMixins?: Ref>[] +} + export * from './migration' const showAllVersionsOption: ViewOptionModel = { @@ -441,7 +450,8 @@ export function createModel (builder: Builder): void { TFavoriteCard, TFavoriteType, TCreateCardExtension, - TExportExtension + TExportExtension, + TDuplicateSetting ) builder.createDoc( diff --git a/models/card/src/plugin.ts b/models/card/src/plugin.ts index 74a3e31fef..ee8e754b19 100644 --- a/models/card/src/plugin.ts +++ b/models/card/src/plugin.ts @@ -30,7 +30,6 @@ export default mergeIds(cardId, card, { }, actionImpl: { DeleteMasterTag: '' as ViewAction, - DuplicateCard: '' as ViewAction, EditSpace: '' as ViewAction, CreateChild: '' as ViewAction }, @@ -39,7 +38,7 @@ export default mergeIds(cardId, card, { SetParent: '' as Ref>, UnsetParent: '' as Ref>, PublicLink: '' as Ref>, - Duplicate: '' as Ref, + Duplicate: '' as Ref>, CreateChild: '' as Ref }, category: { diff --git a/plugins/card-resources/src/components/CardAttributeEditor.svelte b/plugins/card-resources/src/components/CardAttributeEditor.svelte index b5c7766d56..47158c15a7 100644 --- a/plugins/card-resources/src/components/CardAttributeEditor.svelte +++ b/plugins/card-resources/src/components/CardAttributeEditor.svelte @@ -71,26 +71,14 @@
{/if}
- value.readonlySections?.includes(p))} - {value} - {ignoreKeys} - fourRows={columns === 2} - /> +
{#if mixins.length > 0}
{#each mixins as tag, i (tag._id)}
- +
{/each}
diff --git a/plugins/card-resources/src/components/DuplicateCard.svelte b/plugins/card-resources/src/components/DuplicateCard.svelte new file mode 100644 index 0000000000..205e08cac5 --- /dev/null +++ b/plugins/card-resources/src/components/DuplicateCard.svelte @@ -0,0 +1,203 @@ + + + + +
+ {#if allProperties.length > 0} +
+
+ {/if} + {#if mixins.length > 0} +
+
+ {/if} + {#if relationsA.length > 0 || relationsB.length > 0} +
+
+
+
+ {#each relationsB as assoc} + {@const id = `${assoc._id}_b`} + {assoc.nameB} + { + if (e.detail === true) { + excludedRelations.delete(id) + } else { + excludedRelations.add(id) + } + excludedRelations = excludedRelations + }} + /> + {/each} + {#each relationsA as assoc} + {@const id = `${assoc._id}_a`} + {assoc.nameA} + { + if (e.detail === true) { + excludedRelations.delete(id) + } else { + excludedRelations.add(id) + } + excludedRelations = excludedRelations + }} + /> + {/each} +
+ {/if} +
+ + + diff --git a/plugins/card-resources/src/components/EditCardNew.svelte b/plugins/card-resources/src/components/EditCardNew.svelte index 19b6b8477b..31b6a25d17 100644 --- a/plugins/card-resources/src/components/EditCardNew.svelte +++ b/plugins/card-resources/src/components/EditCardNew.svelte @@ -277,7 +277,7 @@ }} /> - {#if !_readonly} + {#if !readonly}
- - + + diff --git a/plugins/card-resources/src/components/settings/GeneralSection.svelte b/plugins/card-resources/src/components/settings/GeneralSection.svelte index 38551c8102..7de3ad16e8 100644 --- a/plugins/card-resources/src/components/settings/GeneralSection.svelte +++ b/plugins/card-resources/src/components/settings/GeneralSection.svelte @@ -41,6 +41,7 @@ import card from '../../plugin' import { deleteMasterTag } from '../../utils' import VersioningSetting from './VersioningSetting.svelte' + import DuplicateSetting from './DuplicateSetting.svelte' export let masterTag: MasterTag @@ -153,6 +154,12 @@ }) } + function duplicateSetting (): void { + showPopup(DuplicateSetting, { + masterTag: masterTag._id + }) + } + let versioningEnabled = h.classHierarchyMixin(masterTag._id, core.mixin.VersionableClass)?.enabled $: versioningEnabled = h.classHierarchyMixin(masterTag._id, core.mixin.VersionableClass)?.enabled @@ -217,6 +224,12 @@ on:change={(e) => attributeUpdated('singleColumn', e.detail)} />
+
+
{/if} diff --git a/plugins/card-resources/src/components/settings/VersioningSetting.svelte b/plugins/card-resources/src/components/settings/VersioningSetting.svelte index feb2bd3df1..a58231c944 100644 --- a/plugins/card-resources/src/components/settings/VersioningSetting.svelte +++ b/plugins/card-resources/src/components/settings/VersioningSetting.svelte @@ -17,11 +17,11 @@ - +
-
-