@masterteam/workspace-builder 0.0.8 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-workspace-builder.mjs","sources":["../../../../packages/masterteam/workspace-builder/src/store/workspace-builder/workspace-builder.actions.ts","../../../../packages/masterteam/workspace-builder/src/store/workspace-builder/workspace-builder.model.ts","../../../../packages/masterteam/workspace-builder/src/store/workspace-builder/workspace-builder.state.ts","../../../../packages/masterteam/workspace-builder/src/store/workspace-builder/workspace-builder.facade.ts","../../../../packages/masterteam/workspace-builder/src/lib/workspace-builder/create-group-dialog/workspace-builder-create-group-dialog.ts","../../../../packages/masterteam/workspace-builder/src/lib/workspace-builder/create-group-dialog/workspace-builder-create-group-dialog.html","../../../../packages/masterteam/workspace-builder/src/lib/workspace-builder/workspace-builder.ts","../../../../packages/masterteam/workspace-builder/src/lib/workspace-builder/workspace-builder.html","../../../../packages/masterteam/workspace-builder/src/masterteam-workspace-builder.ts"],"sourcesContent":["import {\r\n WorkspaceArea,\r\n WorkspaceBuilderLayoutDto,\r\n} from './workspace-builder.model';\r\n\r\nexport class SetWorkspaceBuilderLevelId {\r\n static readonly type = '[WorkspaceBuilder] Set Level ID';\r\n constructor(public levelId: number) {}\r\n}\r\n\r\nexport class GetWorkspaceBuilderLayout {\r\n static readonly type = '[WorkspaceBuilder] Get Layout';\r\n}\r\n\r\nexport class PatchWorkspaceBuilderLayoutLocally {\r\n static readonly type = '[WorkspaceBuilder] Patch Layout Locally';\r\n constructor(public layout: WorkspaceBuilderLayoutDto) {}\r\n}\r\n\r\nexport class SaveWorkspaceBuilderLayout {\r\n static readonly type = '[WorkspaceBuilder] Save Layout';\r\n}\r\n\r\nexport class CreateWorkspaceBuilderGroup {\r\n static readonly type = '[WorkspaceBuilder] Create Group';\r\n constructor(\r\n public title: string,\r\n public area: WorkspaceArea = 'main',\r\n public order?: number,\r\n ) {}\r\n}\r\n\r\nexport class RenameWorkspaceBuilderGroup {\r\n static readonly type = '[WorkspaceBuilder] Rename Group';\r\n constructor(\r\n public groupId: string,\r\n public title: string,\r\n ) {}\r\n}\r\n\r\nexport class DeleteWorkspaceBuilderGroup {\r\n static readonly type = '[WorkspaceBuilder] Delete Group';\r\n constructor(public groupId: string) {}\r\n}\r\n\r\nexport class ResetWorkspaceBuilderState {\r\n static readonly type = '[WorkspaceBuilder] Reset State';\r\n}\r\n","import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport type WorkspaceArea = 'main' | 'more';\r\nexport type WorkspaceItemType = 'module' | 'group';\r\n\r\nexport interface WorkspaceModuleItem {\r\n type: 'module';\r\n id: string;\r\n name: string;\r\n order: number;\r\n}\r\n\r\nexport interface WorkspaceGroupModuleItem {\r\n id: string;\r\n name: string;\r\n order: number;\r\n}\r\n\r\nexport interface WorkspaceGroupItem {\r\n type: 'group';\r\n id: string;\r\n name: string;\r\n order: number;\r\n modules: WorkspaceGroupModuleItem[];\r\n}\r\n\r\nexport type WorkspaceItem = WorkspaceModuleItem | WorkspaceGroupItem;\r\n\r\nexport interface WorkspaceBuilderLayoutDto {\r\n levelId: number;\r\n main: WorkspaceItem[];\r\n more: WorkspaceItem[];\r\n}\r\n\r\nexport interface SaveWorkspaceModuleItemDto {\r\n id: string;\r\n order: number;\r\n}\r\n\r\nexport interface SaveWorkspaceItemDto {\r\n type: WorkspaceItemType;\r\n id: string;\r\n order: number;\r\n modules?: SaveWorkspaceModuleItemDto[];\r\n}\r\n\r\nexport interface SaveWorkspaceLayoutDto {\r\n main: SaveWorkspaceItemDto[];\r\n more: SaveWorkspaceItemDto[];\r\n}\r\n\r\nexport interface CreateWorkspaceGroupDto {\r\n title: string;\r\n area: WorkspaceArea;\r\n order: number;\r\n}\r\n\r\nexport interface CreateWorkspaceGroupResponseDto {\r\n groupId: string;\r\n}\r\n\r\nexport interface UpdateWorkspaceGroupDto {\r\n title?: string;\r\n area?: WorkspaceArea;\r\n order?: number;\r\n}\r\n\r\nexport enum WorkspaceBuilderActionKey {\r\n GetLayout = 'getLayout',\r\n SaveLayout = 'saveLayout',\r\n CreateGroup = 'createGroup',\r\n UpdateGroup = 'updateGroup',\r\n DeleteGroup = 'deleteGroup',\r\n}\r\n\r\nexport interface WorkspaceBuilderStateModel extends LoadingStateShape<WorkspaceBuilderActionKey> {\r\n levelId: number | null;\r\n layout: WorkspaceBuilderLayoutDto;\r\n originalLayout: SaveWorkspaceLayoutDto | null;\r\n validationErrors: string[];\r\n isDirty: boolean;\r\n successMessages: Partial<Record<WorkspaceBuilderActionKey, string>>;\r\n}\r\n","import { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport {\r\n CreateWorkspaceBuilderGroup,\r\n DeleteWorkspaceBuilderGroup,\r\n GetWorkspaceBuilderLayout,\r\n PatchWorkspaceBuilderLayoutLocally,\r\n RenameWorkspaceBuilderGroup,\r\n ResetWorkspaceBuilderState,\r\n SaveWorkspaceBuilderLayout,\r\n SetWorkspaceBuilderLevelId,\r\n} from './workspace-builder.actions';\r\nimport {\r\n CreateWorkspaceGroupResponseDto,\r\n SaveWorkspaceLayoutDto,\r\n WorkspaceArea,\r\n WorkspaceBuilderActionKey,\r\n WorkspaceBuilderLayoutDto,\r\n WorkspaceBuilderStateModel,\r\n WorkspaceGroupItem,\r\n WorkspaceGroupModuleItem,\r\n WorkspaceItem,\r\n WorkspaceModuleItem,\r\n} from './workspace-builder.model';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Response } from './api.model';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\n\r\nconst AREAS: WorkspaceArea[] = ['main', 'more'];\r\n\r\nfunction normalizeName(value: unknown): string {\r\n if (typeof value === 'string') {\r\n return value;\r\n }\r\n\r\n if (value && typeof value === 'object') {\r\n const localized = value as Record<string, unknown>;\r\n const display = localized['display'];\r\n if (typeof display === 'string' && display.trim().length > 0) {\r\n return display;\r\n }\r\n\r\n const en = localized['en'];\r\n if (typeof en === 'string' && en.trim().length > 0) {\r\n return en;\r\n }\r\n\r\n const ar = localized['ar'];\r\n if (typeof ar === 'string' && ar.trim().length > 0) {\r\n return ar;\r\n }\r\n }\r\n\r\n return '';\r\n}\r\n\r\nfunction createEmptyLayout(levelId = 0): WorkspaceBuilderLayoutDto {\r\n return {\r\n levelId,\r\n main: [],\r\n more: [],\r\n };\r\n}\r\n\r\nfunction cloneLayout(\r\n layout: WorkspaceBuilderLayoutDto,\r\n): WorkspaceBuilderLayoutDto {\r\n return {\r\n levelId: layout.levelId,\r\n main: layout.main.map(cloneItem),\r\n more: layout.more.map(cloneItem),\r\n };\r\n}\r\n\r\nfunction cloneItem(item: WorkspaceItem): WorkspaceItem {\r\n if (item.type === 'group') {\r\n return {\r\n type: 'group',\r\n id: item.id,\r\n name: item.name,\r\n order: item.order,\r\n modules: item.modules.map((module) => ({\r\n id: module.id,\r\n name: module.name,\r\n order: module.order,\r\n })),\r\n };\r\n }\r\n\r\n return {\r\n type: 'module',\r\n id: item.id,\r\n name: item.name,\r\n order: item.order,\r\n };\r\n}\r\n\r\nfunction normalizeGroupModules(modules: any[]): WorkspaceGroupModuleItem[] {\r\n if (!Array.isArray(modules)) {\r\n return [];\r\n }\r\n\r\n return modules.map((module, index) => ({\r\n id: String(module?.id ?? ''),\r\n name: normalizeName(module?.name),\r\n order: index + 1,\r\n }));\r\n}\r\n\r\nfunction normalizeAreaItems(items: any[]): WorkspaceItem[] {\r\n if (!Array.isArray(items)) {\r\n return [];\r\n }\r\n\r\n return items.map((item, index) => {\r\n if (item?.type === 'group') {\r\n const group: WorkspaceGroupItem = {\r\n type: 'group',\r\n id: String(item?.id ?? ''),\r\n name: normalizeName(item?.name),\r\n order: index + 1,\r\n modules: normalizeGroupModules(item?.modules ?? []),\r\n };\r\n\r\n return group;\r\n }\r\n\r\n const moduleItem: WorkspaceModuleItem = {\r\n type: 'module',\r\n id: String(item?.id ?? ''),\r\n name: normalizeName(item?.name),\r\n order: index + 1,\r\n };\r\n\r\n return moduleItem;\r\n });\r\n}\r\n\r\nfunction normalizeLayout(\r\n layout: WorkspaceBuilderLayoutDto,\r\n): WorkspaceBuilderLayoutDto {\r\n const normalized: WorkspaceBuilderLayoutDto = {\r\n levelId: layout?.levelId ?? 0,\r\n main: normalizeAreaItems(layout?.main ?? []),\r\n more: normalizeAreaItems(layout?.more ?? []),\r\n };\r\n\r\n return normalized;\r\n}\r\n\r\nfunction toSaveLayoutDto(\r\n layout: WorkspaceBuilderLayoutDto,\r\n): SaveWorkspaceLayoutDto {\r\n return {\r\n main: layout.main.map((item, index) => {\r\n if (item.type === 'group') {\r\n return {\r\n type: 'group',\r\n id: item.id,\r\n order: index + 1,\r\n modules: item.modules.map((module, moduleIndex) => ({\r\n id: module.id,\r\n order: moduleIndex + 1,\r\n })),\r\n };\r\n }\r\n\r\n return {\r\n type: 'module',\r\n id: item.id,\r\n order: index + 1,\r\n };\r\n }),\r\n more: layout.more.map((item, index) => {\r\n if (item.type === 'group') {\r\n return {\r\n type: 'group',\r\n id: item.id,\r\n order: index + 1,\r\n modules: item.modules.map((module, moduleIndex) => ({\r\n id: module.id,\r\n order: moduleIndex + 1,\r\n })),\r\n };\r\n }\r\n\r\n return {\r\n type: 'module',\r\n id: item.id,\r\n order: index + 1,\r\n };\r\n }),\r\n };\r\n}\r\n\r\nfunction hasDuplicate(values: string[]): boolean {\r\n return new Set(values).size !== values.length;\r\n}\r\n\r\nfunction validateLayout(layout: WorkspaceBuilderLayoutDto): string[] {\r\n const errors: string[] = [];\r\n\r\n const moduleIds: string[] = [];\r\n const groupIds: string[] = [];\r\n\r\n for (const area of AREAS) {\r\n const items = layout[area];\r\n const orders = items.map((item) => item.order);\r\n\r\n if (hasDuplicate(orders.map(String))) {\r\n errors.push(`Duplicate order detected in ${area} list.`);\r\n }\r\n\r\n items.forEach((item) => {\r\n if (item.type === 'group') {\r\n groupIds.push(item.id);\r\n\r\n const groupOrders = item.modules.map((module) => module.order);\r\n if (hasDuplicate(groupOrders.map(String))) {\r\n errors.push(`Duplicate order detected in group ${item.id}.`);\r\n }\r\n\r\n item.modules.forEach((module) => {\r\n const typedModule: any = module as any;\r\n if (\r\n typedModule?.type === 'group' ||\r\n Array.isArray(typedModule?.modules)\r\n ) {\r\n errors.push(`Nested groups are not supported (group ${item.id}).`);\r\n }\r\n\r\n moduleIds.push(module.id);\r\n });\r\n } else {\r\n moduleIds.push(item.id);\r\n }\r\n });\r\n }\r\n\r\n if (hasDuplicate(moduleIds)) {\r\n errors.push('Duplicate module IDs detected across main, more, and groups.');\r\n }\r\n\r\n if (hasDuplicate(groupIds)) {\r\n errors.push('Duplicate group IDs detected in layout.');\r\n }\r\n\r\n return Array.from(new Set(errors));\r\n}\r\n\r\nfunction computeIsDirty(\r\n layout: WorkspaceBuilderLayoutDto,\r\n originalLayout: SaveWorkspaceLayoutDto | null,\r\n): boolean {\r\n if (!originalLayout) {\r\n return true;\r\n }\r\n\r\n return (\r\n JSON.stringify(toSaveLayoutDto(layout)) !== JSON.stringify(originalLayout)\r\n );\r\n}\r\n\r\nfunction insertGroupIntoLayout(\r\n layout: WorkspaceBuilderLayoutDto,\r\n groupId: string,\r\n title: string,\r\n area: WorkspaceArea,\r\n order?: number,\r\n): WorkspaceBuilderLayoutDto {\r\n const next = cloneLayout(layout);\r\n const list = next[area];\r\n const insertIndex = Math.max(\r\n 0,\r\n Math.min((order ?? list.length + 1) - 1, list.length),\r\n );\r\n\r\n const group: WorkspaceGroupItem = {\r\n type: 'group',\r\n id: groupId,\r\n name: title,\r\n order: 0,\r\n modules: [],\r\n };\r\n\r\n list.splice(insertIndex, 0, group);\r\n\r\n return normalizeLayout(next);\r\n}\r\n\r\nfunction renameGroupInLayout(\r\n layout: WorkspaceBuilderLayoutDto,\r\n groupId: string,\r\n title: string,\r\n): WorkspaceBuilderLayoutDto {\r\n const next = cloneLayout(layout);\r\n\r\n for (const area of AREAS) {\r\n const group = next[area].find(\r\n (item): item is WorkspaceGroupItem =>\r\n item.type === 'group' && item.id === groupId,\r\n );\r\n\r\n if (group) {\r\n group.name = title;\r\n break;\r\n }\r\n }\r\n\r\n return normalizeLayout(next);\r\n}\r\n\r\nfunction removeGroupAndPromoteModules(\r\n layout: WorkspaceBuilderLayoutDto,\r\n groupId: string,\r\n): WorkspaceBuilderLayoutDto {\r\n const next = cloneLayout(layout);\r\n\r\n for (const area of AREAS) {\r\n const index = next[area].findIndex(\r\n (item) => item.type === 'group' && item.id === groupId,\r\n );\r\n\r\n if (index === -1) {\r\n continue;\r\n }\r\n\r\n const group = next[area][index] as WorkspaceGroupItem;\r\n const promotedModules: WorkspaceModuleItem[] = group.modules.map(\r\n (module) => ({\r\n type: 'module',\r\n id: module.id,\r\n name: module.name,\r\n order: 0,\r\n }),\r\n );\r\n\r\n next[area].splice(index, 1, ...promotedModules);\r\n break;\r\n }\r\n\r\n return normalizeLayout(next);\r\n}\r\n\r\nconst DEFAULTS: WorkspaceBuilderStateModel = {\r\n levelId: null,\r\n layout: createEmptyLayout(),\r\n originalLayout: null,\r\n validationErrors: [],\r\n isDirty: false,\r\n successMessages: {},\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\n@State<WorkspaceBuilderStateModel>({\r\n name: 'workspaceBuilder',\r\n defaults: DEFAULTS,\r\n})\r\n@Injectable()\r\nexport class WorkspaceBuilderState extends CrudStateBase<\r\n WorkspaceItem,\r\n WorkspaceBuilderStateModel,\r\n WorkspaceBuilderActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n\r\n @Selector()\r\n static getLevelId(state: WorkspaceBuilderStateModel): number | null {\r\n return state.levelId;\r\n }\r\n\r\n @Selector()\r\n static getLayout(\r\n state: WorkspaceBuilderStateModel,\r\n ): WorkspaceBuilderLayoutDto {\r\n return state.layout;\r\n }\r\n\r\n @Selector()\r\n static getMainItems(state: WorkspaceBuilderStateModel): WorkspaceItem[] {\r\n return state.layout.main;\r\n }\r\n\r\n @Selector()\r\n static getMoreItems(state: WorkspaceBuilderStateModel): WorkspaceItem[] {\r\n return state.layout.more;\r\n }\r\n\r\n @Selector()\r\n static getValidationErrors(state: WorkspaceBuilderStateModel): string[] {\r\n return state.validationErrors;\r\n }\r\n\r\n @Selector()\r\n static getIsDirty(state: WorkspaceBuilderStateModel): boolean {\r\n return state.isDirty;\r\n }\r\n\r\n @Selector()\r\n static getLoadingActive(state: WorkspaceBuilderStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: WorkspaceBuilderStateModel,\r\n ): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n @Selector()\r\n static getSuccessMessages(\r\n state: WorkspaceBuilderStateModel,\r\n ): Partial<Record<WorkspaceBuilderActionKey, string>> {\r\n return state.successMessages;\r\n }\r\n\r\n @Action(SetWorkspaceBuilderLevelId)\r\n setLevelId(\r\n ctx: StateContext<WorkspaceBuilderStateModel>,\r\n { levelId }: SetWorkspaceBuilderLevelId,\r\n ) {\r\n const state = ctx.getState();\r\n if (state.levelId === levelId) {\r\n return;\r\n }\r\n\r\n ctx.patchState({\r\n levelId,\r\n layout: createEmptyLayout(levelId),\r\n originalLayout: null,\r\n validationErrors: [],\r\n isDirty: false,\r\n successMessages: {},\r\n });\r\n }\r\n\r\n @Action(GetWorkspaceBuilderLayout)\r\n getLayout(ctx: StateContext<WorkspaceBuilderStateModel>) {\r\n const { levelId } = ctx.getState();\r\n if (!levelId) {\r\n return;\r\n }\r\n\r\n const req$ = this.http.get<Response<WorkspaceBuilderLayoutDto>>(\r\n `levels/${levelId}/workspaceBuilder`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkspaceBuilderActionKey.GetLayout,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n const incoming = response.data\r\n ? { ...response.data, levelId }\r\n : createEmptyLayout(levelId);\r\n\r\n const normalized = normalizeLayout(incoming);\r\n const validationErrors = validateLayout(normalized);\r\n\r\n return {\r\n layout: normalized,\r\n originalLayout: toSaveLayoutDto(normalized),\r\n validationErrors,\r\n isDirty: false,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(PatchWorkspaceBuilderLayoutLocally)\r\n patchLayoutLocally(\r\n ctx: StateContext<WorkspaceBuilderStateModel>,\r\n { layout }: PatchWorkspaceBuilderLayoutLocally,\r\n ) {\r\n const state = ctx.getState();\r\n const normalized = normalizeLayout({\r\n ...layout,\r\n levelId: state.levelId ?? layout.levelId,\r\n });\r\n const validationErrors = validateLayout(normalized);\r\n\r\n ctx.patchState({\r\n layout: normalized,\r\n validationErrors,\r\n isDirty: computeIsDirty(normalized, state.originalLayout),\r\n });\r\n }\r\n\r\n @Action(SaveWorkspaceBuilderLayout)\r\n saveLayout(ctx: StateContext<WorkspaceBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const { levelId } = state;\r\n\r\n if (!levelId) {\r\n return;\r\n }\r\n\r\n const normalized = normalizeLayout({\r\n ...state.layout,\r\n levelId,\r\n });\r\n\r\n const validationErrors = validateLayout(normalized);\r\n if (validationErrors.length > 0) {\r\n ctx.patchState({\r\n validationErrors,\r\n });\r\n return;\r\n }\r\n\r\n const payload = toSaveLayoutDto(normalized);\r\n\r\n const req$ = this.http.put<Response<{ ok: boolean }>>(\r\n `levels/${levelId}/workspaceBuilder`,\r\n payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkspaceBuilderActionKey.SaveLayout,\r\n request$: req$,\r\n onSuccess: (response, state) => ({\r\n layout: normalized,\r\n originalLayout: payload,\r\n validationErrors: [],\r\n isDirty: false,\r\n successMessages: {\r\n ...state.successMessages,\r\n [WorkspaceBuilderActionKey.SaveLayout]: response.message ?? '',\r\n },\r\n }),\r\n });\r\n }\r\n\r\n @Action(CreateWorkspaceBuilderGroup)\r\n createGroup(\r\n ctx: StateContext<WorkspaceBuilderStateModel>,\r\n { title, area, order }: CreateWorkspaceBuilderGroup,\r\n ) {\r\n const { levelId } = ctx.getState();\r\n if (!levelId) {\r\n return;\r\n }\r\n\r\n const req$ = this.http.post<Response<CreateWorkspaceGroupResponseDto>>(\r\n `levels/${levelId}/workspaceBuilder/groups`,\r\n {\r\n title,\r\n area,\r\n order: order ?? 1,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkspaceBuilderActionKey.CreateGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const groupId = response.data?.groupId;\r\n if (!groupId) {\r\n return {};\r\n }\r\n\r\n const nextLayout = insertGroupIntoLayout(\r\n state.layout,\r\n groupId,\r\n title,\r\n area,\r\n order,\r\n );\r\n const validationErrors = validateLayout(nextLayout);\r\n\r\n return {\r\n layout: nextLayout,\r\n validationErrors,\r\n isDirty: computeIsDirty(nextLayout, state.originalLayout),\r\n successMessages: {\r\n ...state.successMessages,\r\n [WorkspaceBuilderActionKey.CreateGroup]: response.message ?? '',\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(RenameWorkspaceBuilderGroup)\r\n renameGroup(\r\n ctx: StateContext<WorkspaceBuilderStateModel>,\r\n { groupId, title }: RenameWorkspaceBuilderGroup,\r\n ) {\r\n const { levelId } = ctx.getState();\r\n if (!levelId) {\r\n return;\r\n }\r\n\r\n const req$ = this.http.patch<Response<any>>(\r\n `levels/${levelId}/workspaceBuilder/groups/${groupId}`,\r\n {\r\n title,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkspaceBuilderActionKey.UpdateGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const nextLayout = renameGroupInLayout(state.layout, groupId, title);\r\n const validationErrors = validateLayout(nextLayout);\r\n\r\n return {\r\n layout: nextLayout,\r\n validationErrors,\r\n isDirty: computeIsDirty(nextLayout, state.originalLayout),\r\n successMessages: {\r\n ...state.successMessages,\r\n [WorkspaceBuilderActionKey.UpdateGroup]: response.message ?? '',\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteWorkspaceBuilderGroup)\r\n deleteGroup(\r\n ctx: StateContext<WorkspaceBuilderStateModel>,\r\n { groupId }: DeleteWorkspaceBuilderGroup,\r\n ) {\r\n const { levelId } = ctx.getState();\r\n if (!levelId) {\r\n return;\r\n }\r\n\r\n const req$ = this.http.delete<Response<void>>(\r\n `levels/${levelId}/workspaceBuilder/groups/${groupId}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkspaceBuilderActionKey.DeleteGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const nextLayout = removeGroupAndPromoteModules(state.layout, groupId);\r\n const validationErrors = validateLayout(nextLayout);\r\n\r\n return {\r\n layout: nextLayout,\r\n validationErrors,\r\n isDirty: computeIsDirty(nextLayout, state.originalLayout),\r\n successMessages: {\r\n ...state.successMessages,\r\n [WorkspaceBuilderActionKey.DeleteGroup]: response.message ?? '',\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(ResetWorkspaceBuilderState)\r\n resetState(ctx: StateContext<WorkspaceBuilderStateModel>) {\r\n ctx.setState(DEFAULTS);\r\n }\r\n}\r\n","import { Injectable, computed, inject } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\nimport {\r\n CreateWorkspaceBuilderGroup,\r\n DeleteWorkspaceBuilderGroup,\r\n GetWorkspaceBuilderLayout,\r\n PatchWorkspaceBuilderLayoutLocally,\r\n RenameWorkspaceBuilderGroup,\r\n ResetWorkspaceBuilderState,\r\n SaveWorkspaceBuilderLayout,\r\n SetWorkspaceBuilderLevelId,\r\n} from './workspace-builder.actions';\r\nimport {\r\n WorkspaceArea,\r\n WorkspaceBuilderActionKey,\r\n WorkspaceBuilderLayoutDto,\r\n} from './workspace-builder.model';\r\nimport { WorkspaceBuilderState } from './workspace-builder.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class WorkspaceBuilderFacade {\r\n private readonly store = inject(Store);\r\n\r\n readonly levelId = select(WorkspaceBuilderState.getLevelId);\r\n readonly layout = select(WorkspaceBuilderState.getLayout);\r\n readonly mainItems = select(WorkspaceBuilderState.getMainItems);\r\n readonly moreItems = select(WorkspaceBuilderState.getMoreItems);\r\n readonly validationErrors = select(WorkspaceBuilderState.getValidationErrors);\r\n readonly isDirty = select(WorkspaceBuilderState.getIsDirty);\r\n readonly successMessages = select(WorkspaceBuilderState.getSuccessMessages);\r\n\r\n private readonly loadingActive = select(\r\n WorkspaceBuilderState.getLoadingActive,\r\n );\r\n private readonly errors = select(WorkspaceBuilderState.getErrors);\r\n\r\n readonly isLoadingLayout = computed(() =>\r\n this.loadingActive().includes(WorkspaceBuilderActionKey.GetLayout),\r\n );\r\n readonly isSavingLayout = computed(() =>\r\n this.loadingActive().includes(WorkspaceBuilderActionKey.SaveLayout),\r\n );\r\n readonly isCreatingGroup = computed(() =>\r\n this.loadingActive().includes(WorkspaceBuilderActionKey.CreateGroup),\r\n );\r\n readonly isUpdatingGroup = computed(() =>\r\n this.loadingActive().includes(WorkspaceBuilderActionKey.UpdateGroup),\r\n );\r\n readonly isDeletingGroup = computed(() =>\r\n this.loadingActive().includes(WorkspaceBuilderActionKey.DeleteGroup),\r\n );\r\n\r\n readonly layoutError = computed(\r\n () => this.errors()[WorkspaceBuilderActionKey.GetLayout] ?? null,\r\n );\r\n readonly saveError = computed(\r\n () => this.errors()[WorkspaceBuilderActionKey.SaveLayout] ?? null,\r\n );\r\n\r\n getSuccessMessage(key: WorkspaceBuilderActionKey): string | null {\r\n return this.successMessages()[key] ?? null;\r\n }\r\n\r\n getErrorMessage(key: WorkspaceBuilderActionKey): string | null {\r\n return this.errors()[key] ?? null;\r\n }\r\n\r\n setLevelId(levelId: number) {\r\n return this.store.dispatch(new SetWorkspaceBuilderLevelId(levelId));\r\n }\r\n\r\n getLayout() {\r\n return this.store.dispatch(new GetWorkspaceBuilderLayout());\r\n }\r\n\r\n patchLayout(layout: WorkspaceBuilderLayoutDto) {\r\n return this.store.dispatch(new PatchWorkspaceBuilderLayoutLocally(layout));\r\n }\r\n\r\n saveLayout() {\r\n return this.store.dispatch(new SaveWorkspaceBuilderLayout());\r\n }\r\n\r\n createGroup(title: string, area: WorkspaceArea = 'main', order?: number) {\r\n return this.store.dispatch(\r\n new CreateWorkspaceBuilderGroup(title, area, order),\r\n );\r\n }\r\n\r\n renameGroup(groupId: string, title: string) {\r\n return this.store.dispatch(new RenameWorkspaceBuilderGroup(groupId, title));\r\n }\r\n\r\n deleteGroup(groupId: string) {\r\n return this.store.dispatch(new DeleteWorkspaceBuilderGroup(groupId));\r\n }\r\n\r\n resetState() {\r\n return this.store.dispatch(new ResetWorkspaceBuilderState());\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, input, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DynamicDialogConfig, ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { WorkspaceArea } from '../../../store/workspace-builder/workspace-builder.model';\r\n\r\nexport interface CreateWorkspaceGroupDialogResult {\r\n area: WorkspaceArea;\r\n title: string;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-workspace-builder-create-group-dialog',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n InputTextModule,\r\n Button,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './workspace-builder-create-group-dialog.html',\r\n styleUrl: './workspace-builder-create-group-dialog.css',\r\n})\r\nexport class WorkspaceBuilderCreateGroupDialog {\r\n readonly area = input<WorkspaceArea | null>(null);\r\n readonly title = signal('');\r\n\r\n readonly modal = inject(ModalService);\r\n private readonly config = inject(DynamicDialogConfig, { optional: true });\r\n private readonly ref = inject(ModalRef);\r\n\r\n resolvedArea(): WorkspaceArea {\r\n return (\r\n this.area() ??\r\n (this.config?.data?.area as WorkspaceArea | undefined) ??\r\n 'main'\r\n );\r\n }\r\n\r\n submit(): void {\r\n const trimmed = this.title().trim();\r\n if (!trimmed) {\r\n return;\r\n }\r\n\r\n this.ref.close({\r\n area: this.resolvedArea(),\r\n title: trimmed,\r\n } satisfies CreateWorkspaceGroupDialogResult);\r\n }\r\n\r\n cancel(): void {\r\n this.ref.close(null);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workspace-builder'\">\r\n <div [class]=\"'flex flex-col gap-3 p-4 ' + modal.contentClass\">\r\n <input\r\n pInputText\r\n [(ngModel)]=\"title\"\r\n [placeholder]=\"t('new-group-placeholder')\"\r\n class=\"group-title-input\"\r\n (keydown.enter)=\"submit()\"\r\n />\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n variant=\"outlined\"\r\n [label]=\"t('cancel')\"\r\n (click)=\"cancel()\"\r\n ></mt-button>\r\n\r\n <mt-button\r\n [label]=\"t('add-group')\"\r\n [disabled]=\"!title().trim()\"\r\n (click)=\"submit()\"\r\n ></mt-button>\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n OnDestroy,\r\n signal,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { DialogService } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { Page } from '@masterteam/components/page';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { ToastService } from '@masterteam/components/toast';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\r\nimport { DragDropModule } from 'primeng/dragdrop';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { finalize } from 'rxjs';\r\nimport { WorkspaceBuilderFacade } from '../../store/workspace-builder/workspace-builder.facade';\r\nimport {\r\n WorkspaceArea,\r\n WorkspaceBuilderActionKey,\r\n WorkspaceBuilderLayoutDto,\r\n WorkspaceGroupItem,\r\n WorkspaceGroupModuleItem,\r\n WorkspaceItem,\r\n WorkspaceModuleItem,\r\n} from '../../store/workspace-builder/workspace-builder.model';\r\nimport {\r\n CreateWorkspaceGroupDialogResult,\r\n WorkspaceBuilderCreateGroupDialog,\r\n} from './create-group-dialog/workspace-builder-create-group-dialog';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Icon } from '@masterteam/icons';\r\n\r\ntype DragSource =\r\n | { type: 'area'; area: WorkspaceArea }\r\n | { type: 'group'; area: WorkspaceArea; groupId: string };\r\n\r\ntype DropTarget = DragSource;\r\n\r\ninterface ModuleDragPayload {\r\n kind: 'module';\r\n source: DragSource;\r\n modules: WorkspaceGroupModuleItem[];\r\n}\r\n\r\ninterface GroupDragPayload {\r\n kind: 'group';\r\n source: { type: 'area'; area: WorkspaceArea };\r\n groups: WorkspaceGroupItem[];\r\n}\r\n\r\ntype DragPayload = ModuleDragPayload | GroupDragPayload;\r\nconst DRAG_PAYLOAD_MIME = 'application/x-workspace-builder';\r\n\r\n@Component({\r\n selector: 'mt-workspace-builder',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n TranslocoDirective,\r\n DragDropModule,\r\n Button,\r\n Icon,\r\n Page,\r\n Card,\r\n TextField,\r\n ContextMenuModule,\r\n SkeletonModule,\r\n ],\r\n templateUrl: './workspace-builder.html',\r\n styleUrl: './workspace-builder.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [DialogService],\r\n})\r\nexport default class WorkspaceBuilder implements OnDestroy {\r\n readonly levelId = input<number | null>(null);\r\n readonly showHeader = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n readonly autoSave = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n readonly areas: WorkspaceArea[] = ['main', 'more'];\r\n\r\n readonly dropScope = 'workspace-builder-item';\r\n readonly loadingSkeletonRows = [0, 1, 2, 3];\r\n\r\n readonly createGroupArea = signal<WorkspaceArea>('main');\r\n readonly editingGroupId = signal<string | null>(null);\r\n readonly editingGroupTitle = signal('');\r\n readonly isDragging = signal(false);\r\n readonly activeDropSlotKey = signal<string | null>(null);\r\n\r\n private readonly expandedGroups = signal<Record<string, boolean>>({});\r\n private readonly dragPayload = signal<DragPayload | null>(null);\r\n private dragCleanupTimer: ReturnType<typeof setTimeout> | null = null;\r\n private autoSaveInFlight = false;\r\n private autoSaveQueued = false;\r\n private autoSaveQueuedNotifySuccess = false;\r\n\r\n private readonly facade = inject(WorkspaceBuilderFacade);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n ts = inject(ToastService);\r\n private readonly addGroupLabel = toSignal(\r\n this.transloco.selectTranslate('workspace-builder.add-group'),\r\n {\r\n initialValue: this.transloco.translate('workspace-builder.add-group'),\r\n },\r\n );\r\n\r\n readonly layout = this.facade.layout;\r\n readonly validationErrors = this.facade.validationErrors;\r\n readonly isLoadingLayout = this.facade.isLoadingLayout;\r\n readonly layoutError = this.facade.layoutError;\r\n readonly isSavingLayout = this.facade.isSavingLayout;\r\n readonly areaContextItems = computed<MenuItem[]>(() => [\r\n {\r\n label: this.addGroupLabel(),\r\n icon: 'pi pi-plus',\r\n command: () => this.openCreateGroupDialog(this.createGroupArea()),\r\n },\r\n ]);\r\n\r\n constructor() {\r\n effect(() => {\r\n const levelId = this.levelId();\r\n if (levelId == null) {\r\n return;\r\n }\r\n\r\n this.facade.setLevelId(levelId);\r\n this.facade.getLayout();\r\n });\r\n\r\n effect(() => {\r\n const currentLayout = this.layout();\r\n this.expandedGroups.update((current) => {\r\n const next = { ...current };\r\n const existingGroupIds = new Set<string>();\r\n let changed = false;\r\n\r\n this.getAllGroups(currentLayout).forEach((group) => {\r\n existingGroupIds.add(group.id);\r\n if (next[group.id] === undefined) {\r\n next[group.id] = true;\r\n changed = true;\r\n }\r\n });\r\n\r\n Object.keys(next).forEach((groupId) => {\r\n if (!existingGroupIds.has(groupId)) {\r\n delete next[groupId];\r\n changed = true;\r\n }\r\n });\r\n\r\n return changed ? next : current;\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearDragCleanupTimer();\r\n this.facade.resetState();\r\n }\r\n\r\n areaItems(area: WorkspaceArea): WorkspaceItem[] {\r\n return this.layout()[area];\r\n }\r\n\r\n trackItem(item: WorkspaceItem): string {\r\n return `${item.type}:${item.id}`;\r\n }\r\n\r\n isGroupExpanded(groupId: string): boolean {\r\n return this.expandedGroups()[groupId] ?? true;\r\n }\r\n\r\n toggleGroup(groupId: string): void {\r\n this.expandedGroups.update((groups) => ({\r\n ...groups,\r\n [groupId]: !groups[groupId],\r\n }));\r\n }\r\n\r\n onModuleDragStart(\r\n event: unknown,\r\n module: WorkspaceModuleItem | WorkspaceGroupModuleItem,\r\n source: DragSource,\r\n ): void {\r\n this.stopEventPropagation(event);\r\n this.beginDragSession();\r\n\r\n const payload: ModuleDragPayload = {\r\n kind: 'module',\r\n source,\r\n modules: [\r\n {\r\n id: module.id,\r\n name: module.name,\r\n order: module.order,\r\n },\r\n ],\r\n };\r\n\r\n this.dragPayload.set(payload);\r\n this.setDragTransferData(\r\n this.getNativeDragEvent(event),\r\n payload,\r\n module.id,\r\n );\r\n }\r\n\r\n onGroupDragStart(\r\n event: unknown,\r\n group: WorkspaceGroupItem,\r\n area: WorkspaceArea,\r\n ): void {\r\n this.stopEventPropagation(event);\r\n this.beginDragSession();\r\n\r\n const payload: GroupDragPayload = {\r\n kind: 'group',\r\n source: { type: 'area', area },\r\n groups: [group],\r\n };\r\n\r\n this.dragPayload.set(payload);\r\n this.setDragTransferData(this.getNativeDragEvent(event), payload, group.id);\r\n }\r\n\r\n onDragEnd(): void {\r\n this.scheduleDragSessionCleanup();\r\n }\r\n\r\n onDropToArea(\r\n event: unknown,\r\n area: WorkspaceArea,\r\n index: number,\r\n disabled = false,\r\n ): void {\r\n if (disabled) {\r\n this.stopDropEvent(event);\r\n return;\r\n }\r\n\r\n this.stopDropEvent(event);\r\n this.handleDrop({ type: 'area', area }, index, event);\r\n }\r\n\r\n onDropToGroup(\r\n event: unknown,\r\n area: WorkspaceArea,\r\n groupId: string,\r\n index: number,\r\n disabled = false,\r\n ): void {\r\n if (disabled) {\r\n this.stopDropEvent(event);\r\n return;\r\n }\r\n\r\n this.stopDropEvent(event);\r\n this.handleDrop({ type: 'group', area, groupId }, index, event);\r\n }\r\n\r\n allowNativeDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n if (event.dataTransfer) {\r\n event.dataTransfer.dropEffect = 'move';\r\n }\r\n }\r\n\r\n onDropSlotDragOver(\r\n event: DragEvent,\r\n slotKey: string,\r\n disabled = false,\r\n ): void {\r\n this.allowNativeDrop(event);\r\n if (disabled) {\r\n if (this.activeDropSlotKey() === slotKey) {\r\n this.activeDropSlotKey.set(null);\r\n }\r\n return;\r\n }\r\n\r\n if (!this.isDragging()) {\r\n return;\r\n }\r\n\r\n if (this.activeDropSlotKey() !== slotKey) {\r\n this.activeDropSlotKey.set(slotKey);\r\n }\r\n }\r\n\r\n onDropSlotDragLeave(event: DragEvent, slotKey: string): void {\r\n if (this.activeDropSlotKey() !== slotKey) {\r\n return;\r\n }\r\n\r\n const currentTarget = event.currentTarget as HTMLElement | null;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (\r\n currentTarget &&\r\n relatedTarget &&\r\n currentTarget.contains(relatedTarget)\r\n ) {\r\n return;\r\n }\r\n\r\n this.activeDropSlotKey.set(null);\r\n }\r\n\r\n areaDropSlotKey(area: WorkspaceArea, index: number): string {\r\n return `area:${area}:${index}`;\r\n }\r\n\r\n groupDropSlotKey(\r\n area: WorkspaceArea,\r\n groupId: string,\r\n index: number,\r\n ): string {\r\n return `group:${area}:${groupId}:${index}`;\r\n }\r\n\r\n isAreaDropSlotDisabled(area: WorkspaceArea, index: number): boolean {\r\n const payload = this.dragPayload();\r\n if (!payload) return false;\r\n\r\n if (payload.kind === 'group') {\r\n if (payload.source.area !== area) return false;\r\n const list = this.layout()[area];\r\n const movingIds = new Set(payload.groups.map((group) => group.id));\r\n const movingIndexes = list\r\n .map((item, i) =>\r\n item.type === 'group' && movingIds.has(item.id) ? i : -1,\r\n )\r\n .filter((i) => i >= 0);\r\n if (movingIndexes.length !== 1) return false;\r\n\r\n const sourceIndex = movingIndexes[0];\r\n return index === sourceIndex || index === sourceIndex + 1;\r\n }\r\n\r\n if (payload.source.type !== 'area' || payload.source.area !== area) {\r\n return false;\r\n }\r\n\r\n const list = this.layout()[area];\r\n const movingIds = new Set(payload.modules.map((module) => module.id));\r\n const movingIndexes = list\r\n .map((item, i) =>\r\n item.type === 'module' && movingIds.has(item.id) ? i : -1,\r\n )\r\n .filter((i) => i >= 0);\r\n if (movingIndexes.length !== 1) return false;\r\n\r\n const sourceIndex = movingIndexes[0];\r\n return index === sourceIndex || index === sourceIndex + 1;\r\n }\r\n\r\n isGroupDropSlotDisabled(\r\n area: WorkspaceArea,\r\n groupId: string,\r\n index: number,\r\n ): boolean {\r\n const payload = this.dragPayload();\r\n if (!payload || payload.kind !== 'module') return false;\r\n if (payload.source.type !== 'group') return false;\r\n if (payload.source.area !== area || payload.source.groupId !== groupId) {\r\n return false;\r\n }\r\n\r\n const group = this.findGroup(this.layout(), area, groupId);\r\n if (!group) return false;\r\n\r\n const movingIds = new Set(payload.modules.map((module) => module.id));\r\n const movingIndexes = group.modules\r\n .map((module, i) => (movingIds.has(module.id) ? i : -1))\r\n .filter((i) => i >= 0);\r\n if (movingIndexes.length !== 1) return false;\r\n\r\n const sourceIndex = movingIndexes[0];\r\n return index === sourceIndex || index === sourceIndex + 1;\r\n }\r\n\r\n onNativeAreaDrop(event: DragEvent, area: WorkspaceArea): void {\r\n this.stopDropEvent(event);\r\n const index = this.resolveAreaDropIndex(event, area);\r\n this.handleDrop({ type: 'area', area }, index, event);\r\n }\r\n\r\n onNativeGroupDrop(\r\n event: DragEvent,\r\n area: WorkspaceArea,\r\n groupId: string,\r\n ): void {\r\n this.stopDropEvent(event);\r\n const group = this.findGroup(this.layout(), area, groupId);\r\n const index = group?.modules.length ?? 0;\r\n this.handleDrop({ type: 'group', area, groupId }, index, event);\r\n }\r\n\r\n onNativeGroupModuleDrop(\r\n event: DragEvent,\r\n area: WorkspaceArea,\r\n groupId: string,\r\n moduleIndex: number,\r\n ): void {\r\n this.stopDropEvent(event);\r\n const index = this.resolveSiblingDropIndex(event, moduleIndex);\r\n this.handleDrop({ type: 'group', area, groupId }, index, event);\r\n }\r\n\r\n onAreaContextMenu(\r\n event: MouseEvent,\r\n area: WorkspaceArea,\r\n contextMenu: ContextMenu,\r\n ): void {\r\n event.preventDefault();\r\n this.createGroupArea.set(area);\r\n contextMenu.show(event);\r\n }\r\n\r\n openCreateGroupDialog(area: WorkspaceArea): void {\r\n const ref = this.modal.openModal(\r\n WorkspaceBuilderCreateGroupDialog,\r\n 'dialog',\r\n {\r\n header: this.transloco.translate('workspace-builder.create-group'),\r\n styleClass: '!w-[28rem]',\r\n height: 'auto',\r\n appendTo: 'body',\r\n dismissableMask: true,\r\n data: { area },\r\n inputValues: { area },\r\n },\r\n );\r\n\r\n ref.onClose.subscribe(\r\n (result: CreateWorkspaceGroupDialogResult | null | undefined) => {\r\n const title = result?.title?.trim();\r\n if (!title) {\r\n return;\r\n }\r\n\r\n const order = this.layout()[area].length + 1;\r\n this.facade.createGroup(title, area, order).subscribe({\r\n next: () => {\r\n this.ts.success(\r\n this.getSuccessMessage(\r\n WorkspaceBuilderActionKey.CreateGroup,\r\n 'workspace-builder.group-create-success',\r\n ),\r\n );\r\n },\r\n error: () => {\r\n this.ts.error(\r\n this.getErrorMessage(\r\n WorkspaceBuilderActionKey.CreateGroup,\r\n 'workspace-builder.group-create-error',\r\n ),\r\n );\r\n },\r\n });\r\n },\r\n );\r\n }\r\n\r\n startRenameGroup(group: WorkspaceGroupItem): void {\r\n this.editingGroupId.set(group.id);\r\n this.editingGroupTitle.set(group.name);\r\n }\r\n\r\n saveRenameGroup(groupId: string): void {\r\n const title = this.editingGroupTitle().trim();\r\n if (!title) {\r\n return;\r\n }\r\n\r\n this.facade.renameGroup(groupId, title).subscribe({\r\n next: () => {\r\n this.ts.success(\r\n this.getSuccessMessage(\r\n WorkspaceBuilderActionKey.UpdateGroup,\r\n 'workspace-builder.group-update-success',\r\n ),\r\n );\r\n this.cancelRenameGroup();\r\n },\r\n error: () => {\r\n this.ts.error(\r\n this.getErrorMessage(\r\n WorkspaceBuilderActionKey.UpdateGroup,\r\n 'workspace-builder.group-update-error',\r\n ),\r\n );\r\n },\r\n });\r\n }\r\n\r\n cancelRenameGroup(): void {\r\n this.editingGroupId.set(null);\r\n this.editingGroupTitle.set('');\r\n }\r\n\r\n onSaveClick(): void {\r\n this.triggerAutoSave({ notifyOnSuccess: true });\r\n }\r\n\r\n reloadLayout(): void {\r\n this.facade.getLayout();\r\n }\r\n\r\n deleteGroup(groupId: string, event?: Event): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.confirmationService.confirmDelete({\r\n event: event,\r\n type: 'popup',\r\n accept: () => this.executeDeleteGroup(groupId),\r\n reject: () => {},\r\n });\r\n }\r\n\r\n private executeDeleteGroup(groupId: string): void {\r\n this.facade.deleteGroup(groupId).subscribe({\r\n next: () => {\r\n this.ts.success(\r\n this.getSuccessMessage(\r\n WorkspaceBuilderActionKey.DeleteGroup,\r\n 'workspace-builder.group-delete-success',\r\n ),\r\n );\r\n },\r\n error: () => {\r\n this.ts.error(\r\n this.getErrorMessage(\r\n WorkspaceBuilderActionKey.DeleteGroup,\r\n 'workspace-builder.group-delete-error',\r\n ),\r\n );\r\n },\r\n });\r\n }\r\n\r\n removeModuleFromGroup(\r\n area: WorkspaceArea,\r\n groupId: string,\r\n moduleId: string,\r\n ): void {\r\n const nextLayout = this.cloneLayout(this.layout());\r\n const group = this.findGroup(nextLayout, area, groupId);\r\n if (!group) {\r\n return;\r\n }\r\n\r\n const moduleIndex = group.modules.findIndex(\r\n (module) => module.id === moduleId,\r\n );\r\n if (moduleIndex === -1) {\r\n return;\r\n }\r\n\r\n const [module] = group.modules.splice(moduleIndex, 1);\r\n\r\n const areaItems = nextLayout[area];\r\n const groupIndex = areaItems.findIndex(\r\n (item) => item.type === 'group' && item.id === groupId,\r\n );\r\n\r\n if (groupIndex === -1) {\r\n return;\r\n }\r\n\r\n areaItems.splice(groupIndex + 1, 0, {\r\n type: 'module',\r\n id: module.id,\r\n name: module.name,\r\n order: 0,\r\n });\r\n\r\n this.patchLayout(nextLayout);\r\n }\r\n\r\n private handleDrop(\r\n target: DropTarget,\r\n targetIndex: number,\r\n event?: unknown,\r\n ): void {\r\n const payload = this.resolveDropPayload(event);\r\n if (!payload) {\r\n return;\r\n }\r\n\r\n if (payload.kind === 'group' && target.type === 'group') {\r\n // Prevent nested groups.\r\n this.endDragSession();\r\n return;\r\n }\r\n\r\n const nextLayout = this.cloneLayout(this.layout());\r\n\r\n if (payload.kind === 'group') {\r\n this.moveGroups(nextLayout, payload, target, targetIndex);\r\n } else {\r\n this.moveModules(nextLayout, payload, target, targetIndex);\r\n }\r\n\r\n this.patchLayout(nextLayout);\r\n this.endDragSession();\r\n }\r\n\r\n private patchLayout(layout: WorkspaceBuilderLayoutDto): void {\r\n this.facade.patchLayout(layout).subscribe({\r\n next: () => {\r\n if (this.autoSave()) {\r\n this.triggerAutoSave({ notifyOnSuccess: true });\r\n }\r\n },\r\n });\r\n }\r\n\r\n private triggerAutoSave(options?: { notifyOnSuccess?: boolean }): void {\r\n const notifyOnSuccess = options?.notifyOnSuccess ?? false;\r\n\r\n if (this.validationErrors().length > 0) {\r\n return;\r\n }\r\n\r\n if (this.autoSaveInFlight) {\r\n this.autoSaveQueued = true;\r\n this.autoSaveQueuedNotifySuccess =\r\n this.autoSaveQueuedNotifySuccess || notifyOnSuccess;\r\n return;\r\n }\r\n\r\n this.autoSaveInFlight = true;\r\n this.facade\r\n .saveLayout()\r\n .pipe(\r\n finalize(() => {\r\n this.autoSaveInFlight = false;\r\n if (this.autoSaveQueued) {\r\n const queuedNotifyOnSuccess = this.autoSaveQueuedNotifySuccess;\r\n this.autoSaveQueued = false;\r\n this.autoSaveQueuedNotifySuccess = false;\r\n this.triggerAutoSave({ notifyOnSuccess: queuedNotifyOnSuccess });\r\n }\r\n }),\r\n )\r\n .subscribe({\r\n next: () => {\r\n if (notifyOnSuccess) {\r\n this.ts.success(\r\n this.getSuccessMessage(\r\n WorkspaceBuilderActionKey.SaveLayout,\r\n 'workspace-builder.layout-update-success',\r\n ),\r\n );\r\n }\r\n },\r\n error: () => {\r\n this.ts.error(\r\n this.getErrorMessage(\r\n WorkspaceBuilderActionKey.SaveLayout,\r\n 'workspace-builder.layout-update-error',\r\n ),\r\n );\r\n },\r\n });\r\n }\r\n\r\n private resolveDropPayload(event?: unknown): DragPayload | null {\r\n const fromTransfer = this.getDropPayloadFromTransfer(event);\r\n if (fromTransfer) {\r\n return fromTransfer;\r\n }\r\n\r\n return this.dragPayload();\r\n }\r\n\r\n private getDropPayloadFromTransfer(event?: unknown): DragPayload | null {\r\n const transfer = this.getNativeDragEvent(event)?.dataTransfer;\r\n const raw = transfer?.getData?.(DRAG_PAYLOAD_MIME);\r\n if (!raw) {\r\n return null;\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(raw) as DragPayload;\r\n if (parsed?.kind === 'module' || parsed?.kind === 'group') {\r\n return parsed;\r\n }\r\n } catch {\r\n return null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private setDragTransferData(\r\n event: DragEvent | null,\r\n payload: DragPayload,\r\n plainTextFallback: string,\r\n ): void {\r\n const transfer = event?.dataTransfer;\r\n if (!transfer) {\r\n return;\r\n }\r\n\r\n transfer.effectAllowed = 'move';\r\n transfer.setData(DRAG_PAYLOAD_MIME, JSON.stringify(payload));\r\n transfer.setData('text/plain', plainTextFallback);\r\n }\r\n\r\n private beginDragSession(): void {\r\n this.isDragging.set(true);\r\n this.activeDropSlotKey.set(null);\r\n this.clearDragCleanupTimer();\r\n }\r\n\r\n private endDragSession(): void {\r\n this.isDragging.set(false);\r\n this.activeDropSlotKey.set(null);\r\n this.dragPayload.set(null);\r\n this.clearDragCleanupTimer();\r\n }\r\n\r\n private scheduleDragSessionCleanup(): void {\r\n this.isDragging.set(false);\r\n this.activeDropSlotKey.set(null);\r\n this.clearDragCleanupTimer();\r\n this.dragCleanupTimer = setTimeout(() => {\r\n this.dragPayload.set(null);\r\n this.dragCleanupTimer = null;\r\n }, 180);\r\n }\r\n\r\n private clearDragCleanupTimer(): void {\r\n if (!this.dragCleanupTimer) {\r\n return;\r\n }\r\n\r\n clearTimeout(this.dragCleanupTimer);\r\n this.dragCleanupTimer = null;\r\n }\r\n\r\n private stopDropEvent(event: unknown): void {\r\n const nativeEvent = this.unwrapEvent(event);\r\n nativeEvent?.preventDefault?.();\r\n nativeEvent?.stopPropagation?.();\r\n (event as any)?.preventDefault?.();\r\n (event as any)?.stopPropagation?.();\r\n }\r\n\r\n private stopEventPropagation(event: unknown): void {\r\n this.unwrapEvent(event)?.stopPropagation?.();\r\n (event as any)?.stopPropagation?.();\r\n }\r\n\r\n private getNativeDragEvent(event: unknown): DragEvent | null {\r\n const nativeEvent = this.unwrapEvent(event);\r\n if (!nativeEvent || !('dataTransfer' in nativeEvent)) {\r\n return null;\r\n }\r\n\r\n return nativeEvent as DragEvent;\r\n }\r\n\r\n private unwrapEvent(event: unknown): Event | null {\r\n if (!event) {\r\n return null;\r\n }\r\n\r\n const candidate = (event as any)?.originalEvent ?? (event as any)?.event;\r\n return (candidate ?? (event as Event)) as Event;\r\n }\r\n\r\n private resolveAreaDropIndex(event: DragEvent, area: WorkspaceArea): number {\r\n const y = event.clientY;\r\n const items = this.layout()[area];\r\n\r\n for (let index = 0; index < items.length; index += 1) {\r\n const element = this.getTopLevelItemElement(event, area, index);\r\n if (!element) {\r\n continue;\r\n }\r\n\r\n const rect = element.getBoundingClientRect();\r\n if (y < rect.top + rect.height / 2) {\r\n return index;\r\n }\r\n }\r\n\r\n return items.length;\r\n }\r\n\r\n private resolveSiblingDropIndex(event: DragEvent, itemIndex: number): number {\r\n const target = event.currentTarget as HTMLElement | null;\r\n if (!target) {\r\n return itemIndex;\r\n }\r\n\r\n const rect = target.getBoundingClientRect();\r\n const shouldInsertAfter = event.clientY >= rect.top + rect.height / 2;\r\n return shouldInsertAfter ? itemIndex + 1 : itemIndex;\r\n }\r\n\r\n private getTopLevelItemElement(\r\n event: DragEvent,\r\n area: WorkspaceArea,\r\n itemIndex: number,\r\n ): HTMLElement | null {\r\n const root = (event.currentTarget as HTMLElement | null) ?? null;\r\n if (!root) {\r\n return null;\r\n }\r\n\r\n const selector =\r\n area === 'main'\r\n ? `[data-area=\"main\"][data-item-index=\"${itemIndex}\"]`\r\n : `[data-area=\"more\"][data-item-index=\"${itemIndex}\"]`;\r\n return root.querySelector(selector);\r\n }\r\n\r\n private moveGroups(\r\n layout: WorkspaceBuilderLayoutDto,\r\n payload: GroupDragPayload,\r\n target: DropTarget,\r\n targetIndex: number,\r\n ): void {\r\n if (target.type !== 'area') {\r\n return;\r\n }\r\n\r\n const sourceArea = payload.source.area;\r\n const targetArea = target.area;\r\n const groupIds = new Set(payload.groups.map((group) => group.id));\r\n\r\n if (sourceArea === targetArea) {\r\n const original = layout[sourceArea];\r\n const moving = original.filter(\r\n (item): item is WorkspaceGroupItem =>\r\n item.type === 'group' && groupIds.has(item.id),\r\n );\r\n\r\n if (moving.length === 0) {\r\n return;\r\n }\r\n\r\n const removedBefore = original\r\n .slice(0, targetIndex)\r\n .filter(\r\n (item) => item.type === 'group' && groupIds.has(item.id),\r\n ).length;\r\n\r\n const remaining = original.filter(\r\n (item) => !(item.type === 'group' && groupIds.has(item.id)),\r\n );\r\n\r\n const insertIndex = this.clampIndex(\r\n targetIndex - removedBefore,\r\n remaining.length,\r\n );\r\n\r\n layout[sourceArea] = [\r\n ...remaining.slice(0, insertIndex),\r\n ...moving,\r\n ...remaining.slice(insertIndex),\r\n ];\r\n\r\n return;\r\n }\r\n\r\n const sourceList = layout[sourceArea];\r\n const moving = sourceList.filter(\r\n (item): item is WorkspaceGroupItem =>\r\n item.type === 'group' && groupIds.has(item.id),\r\n );\r\n\r\n if (moving.length === 0) {\r\n return;\r\n }\r\n\r\n layout[sourceArea] = sourceList.filter(\r\n (item) => !(item.type === 'group' && groupIds.has(item.id)),\r\n );\r\n\r\n const targetList = layout[targetArea];\r\n const insertIndex = this.clampIndex(targetIndex, targetList.length);\r\n targetList.splice(insertIndex, 0, ...moving);\r\n }\r\n\r\n private moveModules(\r\n layout: WorkspaceBuilderLayoutDto,\r\n payload: ModuleDragPayload,\r\n target: DropTarget,\r\n targetIndex: number,\r\n ): void {\r\n const moduleIds = new Set(payload.modules.map((module) => module.id));\r\n\r\n if (\r\n payload.source.type === 'area' &&\r\n target.type === 'area' &&\r\n payload.source.area === target.area\r\n ) {\r\n const area = payload.source.area;\r\n const original = layout[area];\r\n const moving = original.filter(\r\n (item): item is WorkspaceModuleItem =>\r\n item.type === 'module' && moduleIds.has(item.id),\r\n );\r\n\r\n if (moving.length === 0) {\r\n return;\r\n }\r\n\r\n const removedBefore = original\r\n .slice(0, targetIndex)\r\n .filter(\r\n (item) => item.type === 'module' && moduleIds.has(item.id),\r\n ).length;\r\n\r\n const remaining = original.filter(\r\n (item) => !(item.type === 'module' && moduleIds.has(item.id)),\r\n );\r\n\r\n const insertIndex = this.clampIndex(\r\n targetIndex - removedBefore,\r\n remaining.length,\r\n );\r\n\r\n layout[area] = [\r\n ...remaining.slice(0, insertIndex),\r\n ...moving,\r\n ...remaining.slice(insertIndex),\r\n ];\r\n\r\n return;\r\n }\r\n\r\n if (\r\n payload.source.type === 'group' &&\r\n target.type === 'group' &&\r\n payload.source.area === target.area &&\r\n payload.source.groupId === target.groupId\r\n ) {\r\n const group = this.findGroup(layout, target.area, target.groupId);\r\n if (!group) {\r\n return;\r\n }\r\n\r\n const original = group.modules;\r\n const moving = original.filter((module) => moduleIds.has(module.id));\r\n\r\n if (moving.length === 0) {\r\n return;\r\n }\r\n\r\n const removedBefore = original\r\n .slice(0, targetIndex)\r\n .filter((module) => moduleIds.has(module.id)).length;\r\n\r\n const remaining = original.filter((module) => !moduleIds.has(module.id));\r\n const insertIndex = this.clampIndex(\r\n targetIndex - removedBefore,\r\n remaining.length,\r\n );\r\n\r\n group.modules = [\r\n ...remaining.slice(0, insertIndex),\r\n ...moving,\r\n ...remaining.slice(insertIndex),\r\n ];\r\n\r\n return;\r\n }\r\n\r\n const extracted = this.extractModulesFromSource(\r\n layout,\r\n payload.source,\r\n moduleIds,\r\n );\r\n if (extracted.length === 0) {\r\n return;\r\n }\r\n\r\n if (target.type === 'area') {\r\n const areaList = layout[target.area];\r\n const insertIndex = this.clampIndex(targetIndex, areaList.length);\r\n const topLevelModules: WorkspaceModuleItem[] = extracted.map(\r\n (module) => ({\r\n type: 'module',\r\n id: module.id,\r\n name: module.name,\r\n order: 0,\r\n }),\r\n );\r\n\r\n areaList.splice(insertIndex, 0, ...topLevelModules);\r\n return;\r\n }\r\n\r\n const targetGroup = this.findGroup(layout, target.area, target.groupId);\r\n if (!targetGroup) {\r\n return;\r\n }\r\n\r\n const insertIndex = this.clampIndex(\r\n targetIndex,\r\n targetGroup.modules.length,\r\n );\r\n targetGroup.modules.splice(insertIndex, 0, ...extracted);\r\n }\r\n\r\n private extractModulesFromSource(\r\n layout: WorkspaceBuilderLayoutDto,\r\n source: DragSource,\r\n moduleIds: Set<string>,\r\n ): WorkspaceGroupModuleItem[] {\r\n if (source.type === 'area') {\r\n const areaList = layout[source.area];\r\n const moving = areaList\r\n .filter(\r\n (item): item is WorkspaceModuleItem =>\r\n item.type === 'module' && moduleIds.has(item.id),\r\n )\r\n .map((module) => ({\r\n id: module.id,\r\n name: module.name,\r\n order: module.order,\r\n }));\r\n\r\n layout[source.area] = areaList.filter(\r\n (item) => !(item.type === 'module' && moduleIds.has(item.id)),\r\n );\r\n\r\n return moving;\r\n }\r\n\r\n const group = this.findGroup(layout, source.area, source.groupId);\r\n if (!group) {\r\n return [];\r\n }\r\n\r\n const moving = group.modules.filter((module) => moduleIds.has(module.id));\r\n group.modules = group.modules.filter((module) => !moduleIds.has(module.id));\r\n\r\n return moving;\r\n }\r\n\r\n private findGroup(\r\n layout: WorkspaceBuilderLayoutDto,\r\n area: WorkspaceArea,\r\n groupId: string,\r\n ): WorkspaceGroupItem | null {\r\n const found = layout[area].find(\r\n (item): item is WorkspaceGroupItem =>\r\n item.type === 'group' && item.id === groupId,\r\n );\r\n\r\n return found ?? null;\r\n }\r\n\r\n private clampIndex(index: number, length: number): number {\r\n return Math.max(0, Math.min(index, length));\r\n }\r\n\r\n private getAllGroups(\r\n layout: WorkspaceBuilderLayoutDto,\r\n ): WorkspaceGroupItem[] {\r\n return [...layout.main, ...layout.more].filter(\r\n (item): item is WorkspaceGroupItem => item.type === 'group',\r\n );\r\n }\r\n\r\n private cloneLayout(\r\n layout: WorkspaceBuilderLayoutDto,\r\n ): WorkspaceBuilderLayoutDto {\r\n return {\r\n levelId: layout.levelId,\r\n main: layout.main.map((item) => this.cloneItem(item)),\r\n more: layout.more.map((item) => this.cloneItem(item)),\r\n };\r\n }\r\n\r\n private cloneItem(item: WorkspaceItem): WorkspaceItem {\r\n if (item.type === 'group') {\r\n return {\r\n type: 'group',\r\n id: item.id,\r\n name: item.name,\r\n order: item.order,\r\n modules: item.modules.map((module) => ({\r\n id: module.id,\r\n name: module.name,\r\n order: module.order,\r\n })),\r\n };\r\n }\r\n\r\n return {\r\n type: 'module',\r\n id: item.id,\r\n name: item.name,\r\n order: item.order,\r\n };\r\n }\r\n\r\n private getSuccessMessage(\r\n key: WorkspaceBuilderActionKey,\r\n fallbackTranslationKey: string,\r\n ): string {\r\n const apiMessage = this.facade.getSuccessMessage(key)?.trim();\r\n if (apiMessage) {\r\n return apiMessage;\r\n }\r\n\r\n return this.transloco.translate(fallbackTranslationKey);\r\n }\r\n\r\n private getErrorMessage(\r\n key: WorkspaceBuilderActionKey,\r\n fallbackTranslationKey: string,\r\n ): string {\r\n const apiMessage = this.facade.getErrorMessage(key)?.trim();\r\n if (apiMessage) {\r\n return apiMessage;\r\n }\r\n\r\n return this.transloco.translate(fallbackTranslationKey);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workspace-builder'\">\r\n <p-contextMenu\r\n #areaContextMenu\r\n [model]=\"areaContextItems()\"\r\n appendTo=\"body\"\r\n />\r\n\r\n <ng-template #builderContent>\r\n @if (isLoadingLayout()) {\r\n <div class=\"grid gap-5\">\r\n <div class=\"grid grid-cols-1 gap-5 xl:grid-cols-2\">\r\n @for (area of areas; track area) {\r\n <mt-card\r\n [title]=\"t(area)\"\r\n [paddingless]=\"true\"\r\n class=\"min-h-[26rem] overflow-hidden bg-surface-0\"\r\n >\r\n <div\r\n class=\"grid min-h-full content-start gap-4 bg-surface-50/60 p-5 pt-4\"\r\n >\r\n @for (row of loadingSkeletonRows; track row) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 bg-surface-0 px-3 py-3 shadow-sm\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <p-skeleton size=\"2rem\" borderRadius=\"0.75rem\" />\r\n <div class=\"grid flex-1 gap-2\">\r\n <p-skeleton width=\"75%\" height=\"1rem\" />\r\n <p-skeleton width=\"45%\" height=\"0.8rem\" />\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n </div>\r\n } @else if (layoutError(); as error) {\r\n <div\r\n class=\"grid gap-4 rounded-xl border border-red-200 bg-red-50 px-5 py-6 text-red-700 shadow-sm\"\r\n >\r\n <div class=\"grid gap-1\">\r\n <div class=\"text-sm font-semibold\">\r\n {{ t(\"load-error-title\") }}\r\n </div>\r\n <p class=\"m-0 text-sm text-red-600\">\r\n {{ error || t(\"load-error-description\") }}\r\n </p>\r\n </div>\r\n\r\n <div>\r\n <mt-button\r\n [label]=\"t('retry')\"\r\n icon=\"arrow.refresh-cw-01\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"reloadLayout()\"\r\n />\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"grid gap-5\">\r\n @if (validationErrors().length > 0) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 px-4 py-3.5 text-red-700 shadow-sm\"\r\n >\r\n <div class=\"mb-2 text-sm font-semibold\">\r\n {{ t(\"validation-title\") }}\r\n </div>\r\n <ul class=\"m-0 list-disc ps-4\">\r\n @for (error of validationErrors(); track error) {\r\n <li>{{ error }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n\r\n <div class=\"grid grid-cols-1 gap-5 xl:grid-cols-2\">\r\n @for (area of areas; track area) {\r\n <mt-card\r\n [title]=\"t(area)\"\r\n [paddingless]=\"true\"\r\n class=\"min-h-[26rem] overflow-hidden bg-surface-0\"\r\n (contextmenu)=\"onAreaContextMenu($event, area, areaContextMenu)\"\r\n (dragover)=\"allowNativeDrop($event)\"\r\n (drop)=\"onNativeAreaDrop($event, area)\"\r\n >\r\n <ng-template #cardEnd>\r\n <mt-button\r\n [label]=\"t('add-group')\"\r\n icon=\"general.plus\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"openCreateGroupDialog(area)\"\r\n />\r\n </ng-template>\r\n\r\n <div\r\n class=\"workspace-area-body grid min-h-full content-start gap-2 bg-surface-50/60 p-5 pt-2\"\r\n [class.drag-active]=\"isDragging()\"\r\n (dragover)=\"allowNativeDrop($event)\"\r\n (drop)=\"onNativeAreaDrop($event, area)\"\r\n [pDroppable]=\"dropScope\"\r\n (onDrop)=\"onDropToArea($event, area, areaItems(area).length)\"\r\n >\r\n <div\r\n class=\"drop-slot\"\r\n [class.drop-slot-active]=\"\r\n activeDropSlotKey() === areaDropSlotKey(area, 0)\r\n \"\r\n [class.drop-slot-disabled]=\"isAreaDropSlotDisabled(area, 0)\"\r\n [pDroppable]=\"dropScope\"\r\n (dragover)=\"\r\n onDropSlotDragOver(\r\n $event,\r\n areaDropSlotKey(area, 0),\r\n isAreaDropSlotDisabled(area, 0)\r\n )\r\n \"\r\n (dragleave)=\"\r\n onDropSlotDragLeave($event, areaDropSlotKey(area, 0))\r\n \"\r\n (onDrop)=\"\r\n onDropToArea(\r\n $event,\r\n area,\r\n 0,\r\n isAreaDropSlotDisabled(area, 0)\r\n )\r\n \"\r\n ></div>\r\n\r\n @for (\r\n item of areaItems(area);\r\n track trackItem(item);\r\n let i = $index\r\n ) {\r\n @if (item.type === \"module\") {\r\n <div\r\n class=\"workspace-draggable-item flex min-h-11 cursor-grab items-center gap-3 rounded-lg border border-surface-200 bg-surface-0 px-3 py-2.5 transition-all duration-150 hover:-translate-y-0.5 hover:border-surface-300 hover:shadow-sm active:cursor-grabbing\"\r\n [attr.data-area]=\"area\"\r\n [attr.data-item-index]=\"i\"\r\n [pDraggable]=\"dropScope\"\r\n (onDragStart)=\"\r\n onModuleDragStart($event, item, {\r\n type: 'area',\r\n area: area,\r\n })\r\n \"\r\n (onDragEnd)=\"onDragEnd()\"\r\n >\r\n <span\r\n class=\"drag-handle flex size-8 shrink-0 items-center justify-center text-surface-500\"\r\n draggable=\"false\"\r\n >\r\n <mt-icon\r\n class=\"pointer-events-none text-xl text-primary\"\r\n icon=\"general.menu-05\"\r\n />\r\n </span>\r\n <span class=\"min-w-0 flex-1 truncate py-1.5\">{{\r\n item.name\r\n }}</span>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"workspace-group-card grid cursor-grab gap-3 rounded-md border border-surface-200 bg-surface-0 p-3 transition-all duration-150 hover:-translate-y-0.5 hover:border-surface-300 hover:shadow-sm active:cursor-grabbing\"\r\n [attr.data-area]=\"area\"\r\n [attr.data-item-index]=\"i\"\r\n [pDraggable]=\"dropScope\"\r\n (onDragStart)=\"onGroupDragStart($event, item, area)\"\r\n (onDragEnd)=\"onDragEnd()\"\r\n (dragover)=\"allowNativeDrop($event)\"\r\n (drop)=\"onNativeGroupDrop($event, area, item.id)\"\r\n >\r\n <div\r\n class=\"group-header flex flex-wrap items-center gap-2 rounded-lg border-2 border-surface-200 bg-surface-50/80 px-2 py-2\"\r\n [pDroppable]=\"dropScope\"\r\n (onDrop)=\"\r\n onDropToGroup(\r\n $event,\r\n area,\r\n item.id,\r\n item.modules.length\r\n )\r\n \"\r\n >\r\n <mt-button\r\n class=\"expand-btn\"\r\n [icon]=\"\r\n isGroupExpanded(item.id)\r\n ? 'arrow.chevron-up'\r\n : 'arrow.chevron-down'\r\n \"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n (onClick)=\"toggleGroup(item.id)\"\r\n />\r\n <span\r\n class=\"group-drag-handle flex size-8 shrink-0 items-center justify-center text-surface-500\"\r\n draggable=\"false\"\r\n >\r\n <mt-icon\r\n class=\"pointer-events-none text-xl text-primary\"\r\n icon=\"general.menu-05\"\r\n />\r\n </span>\r\n\r\n @if (editingGroupId() === item.id) {\r\n <mt-text-field\r\n [(ngModel)]=\"editingGroupTitle\"\r\n class=\"min-w-[12rem] flex-1\"\r\n />\r\n <mt-button\r\n [label]=\"t('save')\"\r\n severity=\"success\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"saveRenameGroup(item.id)\"\r\n />\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"cancelRenameGroup()\"\r\n />\r\n } @else {\r\n <span\r\n class=\"min-w-0 flex-1 truncate text-lg mx-1 font-semibold text-surface-600\"\r\n >{{ item.name }}</span\r\n >\r\n <mt-button\r\n icon=\"general.edit-05\"\r\n [tooltip]=\"t('rename-group')\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"startRenameGroup(item)\"\r\n />\r\n }\r\n\r\n <mt-button\r\n icon=\"general.trash-01\"\r\n [tooltip]=\"t('delete-group')\"\r\n severity=\"danger\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"deleteGroup(item.id, $event)\"\r\n />\r\n </div>\r\n\r\n @if (isGroupExpanded(item.id)) {\r\n <div\r\n class=\"group-modules grid gap-2 border-t-2 border-dashed border-surface-300 pt-3\"\r\n [pDroppable]=\"dropScope\"\r\n (onDrop)=\"\r\n onDropToGroup(\r\n $event,\r\n area,\r\n item.id,\r\n item.modules.length\r\n )\r\n \"\r\n >\r\n <div\r\n class=\"drop-slot\"\r\n [class.drop-slot-active]=\"\r\n activeDropSlotKey() ===\r\n groupDropSlotKey(area, item.id, 0)\r\n \"\r\n [class.drop-slot-disabled]=\"\r\n isGroupDropSlotDisabled(area, item.id, 0)\r\n \"\r\n [pDroppable]=\"dropScope\"\r\n (dragover)=\"\r\n onDropSlotDragOver(\r\n $event,\r\n groupDropSlotKey(area, item.id, 0),\r\n isGroupDropSlotDisabled(area, item.id, 0)\r\n )\r\n \"\r\n (dragleave)=\"\r\n onDropSlotDragLeave(\r\n $event,\r\n groupDropSlotKey(area, item.id, 0)\r\n )\r\n \"\r\n (onDrop)=\"\r\n onDropToGroup(\r\n $event,\r\n area,\r\n item.id,\r\n 0,\r\n isGroupDropSlotDisabled(area, item.id, 0)\r\n )\r\n \"\r\n ></div>\r\n\r\n @for (\r\n module of item.modules;\r\n track module.id;\r\n let j = $index\r\n ) {\r\n <div\r\n class=\"workspace-draggable-item workspace-group-module-item ms-3 flex min-h-11 cursor-grab items-center gap-3 rounded-lg border border-surface-200 bg-surface-0 px-3 py-2.5 transition-all duration-150 hover:-translate-y-0.5 hover:border-surface-300 hover:shadow-sm active:cursor-grabbing\"\r\n [pDraggable]=\"dropScope\"\r\n (dragover)=\"allowNativeDrop($event)\"\r\n (drop)=\"\r\n onNativeGroupModuleDrop(\r\n $event,\r\n area,\r\n item.id,\r\n j\r\n )\r\n \"\r\n (onDragStart)=\"\r\n onModuleDragStart($event, module, {\r\n type: 'group',\r\n area: area,\r\n groupId: item.id,\r\n })\r\n \"\r\n (onDragEnd)=\"onDragEnd()\"\r\n >\r\n <span\r\n class=\"drag-handle flex size-8 shrink-0 items-center justify-center text-surface-500\"\r\n draggable=\"false\"\r\n >\r\n <mt-icon\r\n class=\"pointer-events-none text-xl text-primary\"\r\n icon=\"general.menu-05\"\r\n />\r\n </span>\r\n <span class=\"min-w-0 flex-1 truncate py-1.5\">{{\r\n module.name\r\n }}</span>\r\n <mt-button\r\n icon=\"general.minus\"\r\n [tooltip]=\"t('remove')\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"\r\n removeModuleFromGroup(\r\n area,\r\n item.id,\r\n module.id\r\n )\r\n \"\r\n />\r\n </div>\r\n\r\n <div\r\n class=\"drop-slot\"\r\n [class.drop-slot-active]=\"\r\n activeDropSlotKey() ===\r\n groupDropSlotKey(area, item.id, j + 1)\r\n \"\r\n [class.drop-slot-disabled]=\"\r\n isGroupDropSlotDisabled(area, item.id, j + 1)\r\n \"\r\n [pDroppable]=\"dropScope\"\r\n (dragover)=\"\r\n onDropSlotDragOver(\r\n $event,\r\n groupDropSlotKey(area, item.id, j + 1),\r\n isGroupDropSlotDisabled(area, item.id, j + 1)\r\n )\r\n \"\r\n (dragleave)=\"\r\n onDropSlotDragLeave(\r\n $event,\r\n groupDropSlotKey(area, item.id, j + 1)\r\n )\r\n \"\r\n (onDrop)=\"\r\n onDropToGroup(\r\n $event,\r\n area,\r\n item.id,\r\n j + 1,\r\n isGroupDropSlotDisabled(area, item.id, j + 1)\r\n )\r\n \"\r\n ></div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"drop-slot\"\r\n [class.drop-slot-active]=\"\r\n activeDropSlotKey() === areaDropSlotKey(area, i + 1)\r\n \"\r\n [class.drop-slot-disabled]=\"\r\n isAreaDropSlotDisabled(area, i + 1)\r\n \"\r\n [pDroppable]=\"dropScope\"\r\n (dragover)=\"\r\n onDropSlotDragOver(\r\n $event,\r\n areaDropSlotKey(area, i + 1),\r\n isAreaDropSlotDisabled(area, i + 1)\r\n )\r\n \"\r\n (dragleave)=\"\r\n onDropSlotDragLeave($event, areaDropSlotKey(area, i + 1))\r\n \"\r\n (onDrop)=\"\r\n onDropToArea(\r\n $event,\r\n area,\r\n i + 1,\r\n isAreaDropSlotDisabled(area, i + 1)\r\n )\r\n \"\r\n ></div>\r\n }\r\n\r\n @if (areaItems(area).length === 0) {\r\n <div\r\n class=\"empty-area grid min-h-32 place-items-center rounded-lg border border-dashed border-surface-300 bg-surface-0/80 px-4 py-6 text-center text-sm text-surface-500\"\r\n [pDroppable]=\"dropScope\"\r\n (onDrop)=\"onDropToArea($event, area, 0)\"\r\n >\r\n {{ t(\"empty-area\") }}\r\n </div>\r\n }\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n @if (showHeader()) {\r\n <mt-page [title]=\"t('title')\" avatarIcon=\"layout.layout-grid-01\">\r\n <ng-template #headerEnd>\r\n @if (!autoSave()) {\r\n <div class=\"flex items-center\">\r\n <mt-button\r\n [label]=\"t('save')\"\r\n icon=\"general.save-02\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n [loading]=\"isSavingLayout()\"\r\n [disabled]=\"\r\n isLoadingLayout() ||\r\n !!layoutError() ||\r\n isSavingLayout() ||\r\n validationErrors().length > 0\r\n \"\r\n (onClick)=\"onSaveClick()\"\r\n />\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"builderContent\" />\r\n </mt-page>\r\n } @else {\r\n <div class=\"w-full overflow-y-auto p-5\">\r\n @if (!autoSave()) {\r\n <div class=\"mb-4 flex justify-end\">\r\n <mt-button\r\n [label]=\"t('save')\"\r\n icon=\"general.save-02\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n [loading]=\"isSavingLayout()\"\r\n [disabled]=\"\r\n isLoadingLayout() ||\r\n !!layoutError() ||\r\n isSavingLayout() ||\r\n validationErrors().length > 0\r\n \"\r\n (onClick)=\"onSaveClick()\"\r\n />\r\n </div>\r\n }\r\n\r\n <ng-container [ngTemplateOutlet]=\"builderContent\" />\r\n </div>\r\n }\r\n</ng-container>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-workspace-builder.mjs","sources":["../../../../packages/masterteam/workspace-builder/src/store/workspace-builder/workspace-builder.actions.ts","../../../../packages/masterteam/workspace-builder/src/store/workspace-builder/workspace-builder.model.ts","../../../../packages/masterteam/workspace-builder/src/store/workspace-builder/workspace-builder.state.ts","../../../../packages/masterteam/workspace-builder/src/store/workspace-builder/workspace-builder.facade.ts","../../../../packages/masterteam/workspace-builder/src/lib/workspace-builder/create-group-dialog/workspace-builder-create-group-dialog.ts","../../../../packages/masterteam/workspace-builder/src/lib/workspace-builder/create-group-dialog/workspace-builder-create-group-dialog.html","../../../../packages/masterteam/workspace-builder/src/lib/workspace-builder/workspace-builder.ts","../../../../packages/masterteam/workspace-builder/src/lib/workspace-builder/workspace-builder.html","../../../../packages/masterteam/workspace-builder/src/masterteam-workspace-builder.ts"],"sourcesContent":["import {\r\n LocalizedTitle,\r\n WorkspaceArea,\r\n WorkspaceBuilderLayoutDto,\r\n} from './workspace-builder.model';\r\n\r\nexport class SetWorkspaceBuilderLevelId {\r\n static readonly type = '[WorkspaceBuilder] Set Level ID';\r\n constructor(public levelId: number) {}\r\n}\r\n\r\nexport class GetWorkspaceBuilderLayout {\r\n static readonly type = '[WorkspaceBuilder] Get Layout';\r\n}\r\n\r\nexport class PatchWorkspaceBuilderLayoutLocally {\r\n static readonly type = '[WorkspaceBuilder] Patch Layout Locally';\r\n constructor(public layout: WorkspaceBuilderLayoutDto) {}\r\n}\r\n\r\nexport class SaveWorkspaceBuilderLayout {\r\n static readonly type = '[WorkspaceBuilder] Save Layout';\r\n}\r\n\r\nexport class CreateWorkspaceBuilderGroup {\r\n static readonly type = '[WorkspaceBuilder] Create Group';\r\n constructor(\r\n public title: LocalizedTitle,\r\n public area: WorkspaceArea = 'main',\r\n public order?: number,\r\n ) {}\r\n}\r\n\r\nexport class RenameWorkspaceBuilderGroup {\r\n static readonly type = '[WorkspaceBuilder] Rename Group';\r\n constructor(\r\n public groupId: string,\r\n public title: LocalizedTitle,\r\n ) {}\r\n}\r\n\r\nexport class DeleteWorkspaceBuilderGroup {\r\n static readonly type = '[WorkspaceBuilder] Delete Group';\r\n constructor(public groupId: string) {}\r\n}\r\n\r\nexport class ResetWorkspaceBuilderState {\r\n static readonly type = '[WorkspaceBuilder] Reset State';\r\n}\r\n","import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport type WorkspaceArea = 'main' | 'more';\r\nexport type WorkspaceItemType = 'module' | 'group';\r\n\r\nexport interface LocalizedTitle {\r\n en: string;\r\n ar: string;\r\n}\r\n\r\nexport interface WorkspaceModuleItem {\r\n type: 'module';\r\n id: string;\r\n name: string;\r\n order: number;\r\n}\r\n\r\nexport interface WorkspaceGroupModuleItem {\r\n id: string;\r\n name: string;\r\n order: number;\r\n}\r\n\r\nexport interface WorkspaceGroupItem {\r\n type: 'group';\r\n id: string;\r\n name: string;\r\n localizedName: LocalizedTitle;\r\n order: number;\r\n modules: WorkspaceGroupModuleItem[];\r\n}\r\n\r\nexport type WorkspaceItem = WorkspaceModuleItem | WorkspaceGroupItem;\r\n\r\nexport interface WorkspaceBuilderLayoutDto {\r\n levelId: number;\r\n main: WorkspaceItem[];\r\n more: WorkspaceItem[];\r\n}\r\n\r\nexport interface SaveWorkspaceModuleItemDto {\r\n id: string;\r\n order: number;\r\n}\r\n\r\nexport interface SaveWorkspaceItemDto {\r\n type: WorkspaceItemType;\r\n id: string;\r\n order: number;\r\n modules?: SaveWorkspaceModuleItemDto[];\r\n}\r\n\r\nexport interface SaveWorkspaceLayoutDto {\r\n main: SaveWorkspaceItemDto[];\r\n more: SaveWorkspaceItemDto[];\r\n}\r\n\r\nexport interface CreateWorkspaceGroupDto {\r\n title: LocalizedTitle;\r\n area: WorkspaceArea;\r\n order: number;\r\n}\r\n\r\nexport interface CreateWorkspaceGroupResponseDto {\r\n groupId: string;\r\n}\r\n\r\nexport interface UpdateWorkspaceGroupDto {\r\n title?: LocalizedTitle;\r\n area?: WorkspaceArea;\r\n order?: number;\r\n}\r\n\r\nexport enum WorkspaceBuilderActionKey {\r\n GetLayout = 'getLayout',\r\n SaveLayout = 'saveLayout',\r\n CreateGroup = 'createGroup',\r\n UpdateGroup = 'updateGroup',\r\n DeleteGroup = 'deleteGroup',\r\n}\r\n\r\nexport interface WorkspaceBuilderStateModel extends LoadingStateShape<WorkspaceBuilderActionKey> {\r\n levelId: number | null;\r\n layout: WorkspaceBuilderLayoutDto;\r\n originalLayout: SaveWorkspaceLayoutDto | null;\r\n validationErrors: string[];\r\n isDirty: boolean;\r\n successMessages: Partial<Record<WorkspaceBuilderActionKey, string>>;\r\n}\r\n","import { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport {\r\n CreateWorkspaceBuilderGroup,\r\n DeleteWorkspaceBuilderGroup,\r\n GetWorkspaceBuilderLayout,\r\n PatchWorkspaceBuilderLayoutLocally,\r\n RenameWorkspaceBuilderGroup,\r\n ResetWorkspaceBuilderState,\r\n SaveWorkspaceBuilderLayout,\r\n SetWorkspaceBuilderLevelId,\r\n} from './workspace-builder.actions';\r\nimport {\r\n CreateWorkspaceGroupResponseDto,\r\n LocalizedTitle,\r\n SaveWorkspaceLayoutDto,\r\n WorkspaceArea,\r\n WorkspaceBuilderActionKey,\r\n WorkspaceBuilderLayoutDto,\r\n WorkspaceBuilderStateModel,\r\n WorkspaceGroupItem,\r\n WorkspaceGroupModuleItem,\r\n WorkspaceItem,\r\n WorkspaceModuleItem,\r\n} from './workspace-builder.model';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Response } from './api.model';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\n\r\nconst AREAS: WorkspaceArea[] = ['main', 'more'];\r\n\r\nfunction normalizeName(value: unknown): string {\r\n if (typeof value === 'string') {\r\n return value;\r\n }\r\n\r\n if (value && typeof value === 'object') {\r\n const localized = value as Record<string, unknown>;\r\n const display = localized['display'];\r\n if (typeof display === 'string' && display.trim().length > 0) {\r\n return display;\r\n }\r\n\r\n const en = localized['en'];\r\n if (typeof en === 'string' && en.trim().length > 0) {\r\n return en;\r\n }\r\n\r\n const ar = localized['ar'];\r\n if (typeof ar === 'string' && ar.trim().length > 0) {\r\n return ar;\r\n }\r\n }\r\n\r\n return '';\r\n}\r\n\r\nfunction extractLocalizedTitle(value: unknown): LocalizedTitle {\r\n if (value && typeof value === 'object') {\r\n const loc = value as Record<string, unknown>;\r\n return {\r\n en: typeof loc['en'] === 'string' ? loc['en'] : '',\r\n ar: typeof loc['ar'] === 'string' ? loc['ar'] : '',\r\n };\r\n }\r\n const str = typeof value === 'string' ? value : '';\r\n return { en: str, ar: str };\r\n}\r\n\r\nfunction createEmptyLayout(levelId = 0): WorkspaceBuilderLayoutDto {\r\n return {\r\n levelId,\r\n main: [],\r\n more: [],\r\n };\r\n}\r\n\r\nfunction cloneLayout(\r\n layout: WorkspaceBuilderLayoutDto,\r\n): WorkspaceBuilderLayoutDto {\r\n return {\r\n levelId: layout.levelId,\r\n main: layout.main.map(cloneItem),\r\n more: layout.more.map(cloneItem),\r\n };\r\n}\r\n\r\nfunction cloneItem(item: WorkspaceItem): WorkspaceItem {\r\n if (item.type === 'group') {\r\n return {\r\n type: 'group',\r\n id: item.id,\r\n name: item.name,\r\n localizedName: { ...item.localizedName },\r\n order: item.order,\r\n modules: item.modules.map((module) => ({\r\n id: module.id,\r\n name: module.name,\r\n order: module.order,\r\n })),\r\n };\r\n }\r\n\r\n return {\r\n type: 'module',\r\n id: item.id,\r\n name: item.name,\r\n order: item.order,\r\n };\r\n}\r\n\r\nfunction normalizeGroupModules(modules: any[]): WorkspaceGroupModuleItem[] {\r\n if (!Array.isArray(modules)) {\r\n return [];\r\n }\r\n\r\n return modules.map((module, index) => ({\r\n id: String(module?.id ?? ''),\r\n name: normalizeName(module?.name),\r\n order: index + 1,\r\n }));\r\n}\r\n\r\nfunction normalizeAreaItems(items: any[]): WorkspaceItem[] {\r\n if (!Array.isArray(items)) {\r\n return [];\r\n }\r\n\r\n return items.map((item, index) => {\r\n if (item?.type === 'group') {\r\n const group: WorkspaceGroupItem = {\r\n type: 'group',\r\n id: String(item?.id ?? ''),\r\n name: normalizeName(item?.name),\r\n localizedName: extractLocalizedTitle(item?.name),\r\n order: index + 1,\r\n modules: normalizeGroupModules(item?.modules ?? []),\r\n };\r\n\r\n return group;\r\n }\r\n\r\n const moduleItem: WorkspaceModuleItem = {\r\n type: 'module',\r\n id: String(item?.id ?? ''),\r\n name: normalizeName(item?.name),\r\n order: index + 1,\r\n };\r\n\r\n return moduleItem;\r\n });\r\n}\r\n\r\nfunction normalizeLayout(\r\n layout: WorkspaceBuilderLayoutDto,\r\n): WorkspaceBuilderLayoutDto {\r\n const normalized: WorkspaceBuilderLayoutDto = {\r\n levelId: layout?.levelId ?? 0,\r\n main: normalizeAreaItems(layout?.main ?? []),\r\n more: normalizeAreaItems(layout?.more ?? []),\r\n };\r\n\r\n return normalized;\r\n}\r\n\r\nfunction toSaveLayoutDto(\r\n layout: WorkspaceBuilderLayoutDto,\r\n): SaveWorkspaceLayoutDto {\r\n return {\r\n main: layout.main.map((item, index) => {\r\n if (item.type === 'group') {\r\n return {\r\n type: 'group',\r\n id: item.id,\r\n order: index + 1,\r\n modules: item.modules.map((module, moduleIndex) => ({\r\n id: module.id,\r\n order: moduleIndex + 1,\r\n })),\r\n };\r\n }\r\n\r\n return {\r\n type: 'module',\r\n id: item.id,\r\n order: index + 1,\r\n };\r\n }),\r\n more: layout.more.map((item, index) => {\r\n if (item.type === 'group') {\r\n return {\r\n type: 'group',\r\n id: item.id,\r\n order: index + 1,\r\n modules: item.modules.map((module, moduleIndex) => ({\r\n id: module.id,\r\n order: moduleIndex + 1,\r\n })),\r\n };\r\n }\r\n\r\n return {\r\n type: 'module',\r\n id: item.id,\r\n order: index + 1,\r\n };\r\n }),\r\n };\r\n}\r\n\r\nfunction hasDuplicate(values: string[]): boolean {\r\n return new Set(values).size !== values.length;\r\n}\r\n\r\nfunction validateLayout(layout: WorkspaceBuilderLayoutDto): string[] {\r\n const errors: string[] = [];\r\n\r\n const moduleIds: string[] = [];\r\n const groupIds: string[] = [];\r\n\r\n for (const area of AREAS) {\r\n const items = layout[area];\r\n const orders = items.map((item) => item.order);\r\n\r\n if (hasDuplicate(orders.map(String))) {\r\n errors.push(`Duplicate order detected in ${area} list.`);\r\n }\r\n\r\n items.forEach((item) => {\r\n if (item.type === 'group') {\r\n groupIds.push(item.id);\r\n\r\n const groupOrders = item.modules.map((module) => module.order);\r\n if (hasDuplicate(groupOrders.map(String))) {\r\n errors.push(`Duplicate order detected in group ${item.id}.`);\r\n }\r\n\r\n item.modules.forEach((module) => {\r\n const typedModule: any = module as any;\r\n if (\r\n typedModule?.type === 'group' ||\r\n Array.isArray(typedModule?.modules)\r\n ) {\r\n errors.push(`Nested groups are not supported (group ${item.id}).`);\r\n }\r\n\r\n moduleIds.push(module.id);\r\n });\r\n } else {\r\n moduleIds.push(item.id);\r\n }\r\n });\r\n }\r\n\r\n if (hasDuplicate(moduleIds)) {\r\n errors.push('Duplicate module IDs detected across main, more, and groups.');\r\n }\r\n\r\n if (hasDuplicate(groupIds)) {\r\n errors.push('Duplicate group IDs detected in layout.');\r\n }\r\n\r\n return Array.from(new Set(errors));\r\n}\r\n\r\nfunction computeIsDirty(\r\n layout: WorkspaceBuilderLayoutDto,\r\n originalLayout: SaveWorkspaceLayoutDto | null,\r\n): boolean {\r\n if (!originalLayout) {\r\n return true;\r\n }\r\n\r\n return (\r\n JSON.stringify(toSaveLayoutDto(layout)) !== JSON.stringify(originalLayout)\r\n );\r\n}\r\n\r\nfunction insertGroupIntoLayout(\r\n layout: WorkspaceBuilderLayoutDto,\r\n groupId: string,\r\n title: LocalizedTitle,\r\n area: WorkspaceArea,\r\n order?: number,\r\n): WorkspaceBuilderLayoutDto {\r\n const next = cloneLayout(layout);\r\n const list = next[area];\r\n const insertIndex = Math.max(\r\n 0,\r\n Math.min((order ?? list.length + 1) - 1, list.length),\r\n );\r\n\r\n const group: WorkspaceGroupItem = {\r\n type: 'group',\r\n id: groupId,\r\n name: title.en || title.ar,\r\n localizedName: { ...title },\r\n order: 0,\r\n modules: [],\r\n };\r\n\r\n list.splice(insertIndex, 0, group);\r\n\r\n return normalizeLayout(next);\r\n}\r\n\r\nfunction renameGroupInLayout(\r\n layout: WorkspaceBuilderLayoutDto,\r\n groupId: string,\r\n title: LocalizedTitle,\r\n): WorkspaceBuilderLayoutDto {\r\n const next = cloneLayout(layout);\r\n\r\n for (const area of AREAS) {\r\n const group = next[area].find(\r\n (item): item is WorkspaceGroupItem =>\r\n item.type === 'group' && item.id === groupId,\r\n );\r\n\r\n if (group) {\r\n group.name = title.en || title.ar;\r\n group.localizedName = { ...title };\r\n break;\r\n }\r\n }\r\n\r\n return normalizeLayout(next);\r\n}\r\n\r\nfunction removeGroupAndPromoteModules(\r\n layout: WorkspaceBuilderLayoutDto,\r\n groupId: string,\r\n): WorkspaceBuilderLayoutDto {\r\n const next = cloneLayout(layout);\r\n\r\n for (const area of AREAS) {\r\n const index = next[area].findIndex(\r\n (item) => item.type === 'group' && item.id === groupId,\r\n );\r\n\r\n if (index === -1) {\r\n continue;\r\n }\r\n\r\n const group = next[area][index] as WorkspaceGroupItem;\r\n const promotedModules: WorkspaceModuleItem[] = group.modules.map(\r\n (module) => ({\r\n type: 'module',\r\n id: module.id,\r\n name: module.name,\r\n order: 0,\r\n }),\r\n );\r\n\r\n next[area].splice(index, 1, ...promotedModules);\r\n break;\r\n }\r\n\r\n return normalizeLayout(next);\r\n}\r\n\r\nconst DEFAULTS: WorkspaceBuilderStateModel = {\r\n levelId: null,\r\n layout: createEmptyLayout(),\r\n originalLayout: null,\r\n validationErrors: [],\r\n isDirty: false,\r\n successMessages: {},\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\n@State<WorkspaceBuilderStateModel>({\r\n name: 'workspaceBuilder',\r\n defaults: DEFAULTS,\r\n})\r\n@Injectable()\r\nexport class WorkspaceBuilderState extends CrudStateBase<\r\n WorkspaceItem,\r\n WorkspaceBuilderStateModel,\r\n WorkspaceBuilderActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n\r\n @Selector()\r\n static getLevelId(state: WorkspaceBuilderStateModel): number | null {\r\n return state.levelId;\r\n }\r\n\r\n @Selector()\r\n static getLayout(\r\n state: WorkspaceBuilderStateModel,\r\n ): WorkspaceBuilderLayoutDto {\r\n return state.layout;\r\n }\r\n\r\n @Selector()\r\n static getMainItems(state: WorkspaceBuilderStateModel): WorkspaceItem[] {\r\n return state.layout.main;\r\n }\r\n\r\n @Selector()\r\n static getMoreItems(state: WorkspaceBuilderStateModel): WorkspaceItem[] {\r\n return state.layout.more;\r\n }\r\n\r\n @Selector()\r\n static getValidationErrors(state: WorkspaceBuilderStateModel): string[] {\r\n return state.validationErrors;\r\n }\r\n\r\n @Selector()\r\n static getIsDirty(state: WorkspaceBuilderStateModel): boolean {\r\n return state.isDirty;\r\n }\r\n\r\n @Selector()\r\n static getLoadingActive(state: WorkspaceBuilderStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: WorkspaceBuilderStateModel,\r\n ): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n @Selector()\r\n static getSuccessMessages(\r\n state: WorkspaceBuilderStateModel,\r\n ): Partial<Record<WorkspaceBuilderActionKey, string>> {\r\n return state.successMessages;\r\n }\r\n\r\n @Action(SetWorkspaceBuilderLevelId)\r\n setLevelId(\r\n ctx: StateContext<WorkspaceBuilderStateModel>,\r\n { levelId }: SetWorkspaceBuilderLevelId,\r\n ) {\r\n const state = ctx.getState();\r\n if (state.levelId === levelId) {\r\n return;\r\n }\r\n\r\n ctx.patchState({\r\n levelId,\r\n layout: createEmptyLayout(levelId),\r\n originalLayout: null,\r\n validationErrors: [],\r\n isDirty: false,\r\n successMessages: {},\r\n });\r\n }\r\n\r\n @Action(GetWorkspaceBuilderLayout)\r\n getLayout(ctx: StateContext<WorkspaceBuilderStateModel>) {\r\n const { levelId } = ctx.getState();\r\n if (!levelId) {\r\n return;\r\n }\r\n\r\n const req$ = this.http.get<Response<WorkspaceBuilderLayoutDto>>(\r\n `levels/${levelId}/workspaceBuilder`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkspaceBuilderActionKey.GetLayout,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n const incoming = response.data\r\n ? { ...response.data, levelId }\r\n : createEmptyLayout(levelId);\r\n\r\n const normalized = normalizeLayout(incoming);\r\n const validationErrors = validateLayout(normalized);\r\n\r\n return {\r\n layout: normalized,\r\n originalLayout: toSaveLayoutDto(normalized),\r\n validationErrors,\r\n isDirty: false,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(PatchWorkspaceBuilderLayoutLocally)\r\n patchLayoutLocally(\r\n ctx: StateContext<WorkspaceBuilderStateModel>,\r\n { layout }: PatchWorkspaceBuilderLayoutLocally,\r\n ) {\r\n const state = ctx.getState();\r\n const normalized = normalizeLayout({\r\n ...layout,\r\n levelId: state.levelId ?? layout.levelId,\r\n });\r\n const validationErrors = validateLayout(normalized);\r\n\r\n ctx.patchState({\r\n layout: normalized,\r\n validationErrors,\r\n isDirty: computeIsDirty(normalized, state.originalLayout),\r\n });\r\n }\r\n\r\n @Action(SaveWorkspaceBuilderLayout)\r\n saveLayout(ctx: StateContext<WorkspaceBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const { levelId } = state;\r\n\r\n if (!levelId) {\r\n return;\r\n }\r\n\r\n const normalized = normalizeLayout({\r\n ...state.layout,\r\n levelId,\r\n });\r\n\r\n const validationErrors = validateLayout(normalized);\r\n if (validationErrors.length > 0) {\r\n ctx.patchState({\r\n validationErrors,\r\n });\r\n return;\r\n }\r\n\r\n const payload = toSaveLayoutDto(normalized);\r\n\r\n const req$ = this.http.put<Response<{ ok: boolean }>>(\r\n `levels/${levelId}/workspaceBuilder`,\r\n payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkspaceBuilderActionKey.SaveLayout,\r\n request$: req$,\r\n onSuccess: (response, state) => ({\r\n layout: normalized,\r\n originalLayout: payload,\r\n validationErrors: [],\r\n isDirty: false,\r\n successMessages: {\r\n ...state.successMessages,\r\n [WorkspaceBuilderActionKey.SaveLayout]: response.message ?? '',\r\n },\r\n }),\r\n });\r\n }\r\n\r\n @Action(CreateWorkspaceBuilderGroup)\r\n createGroup(\r\n ctx: StateContext<WorkspaceBuilderStateModel>,\r\n { title, area, order }: CreateWorkspaceBuilderGroup,\r\n ) {\r\n const { levelId } = ctx.getState();\r\n if (!levelId) {\r\n return;\r\n }\r\n\r\n const req$ = this.http.post<Response<CreateWorkspaceGroupResponseDto>>(\r\n `levels/${levelId}/workspaceBuilder/groups`,\r\n {\r\n title,\r\n area,\r\n order: order ?? 1,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkspaceBuilderActionKey.CreateGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const groupId = response.data?.groupId;\r\n if (!groupId) {\r\n return {};\r\n }\r\n\r\n const nextLayout = insertGroupIntoLayout(\r\n state.layout,\r\n groupId,\r\n title,\r\n area,\r\n order,\r\n );\r\n const validationErrors = validateLayout(nextLayout);\r\n\r\n return {\r\n layout: nextLayout,\r\n validationErrors,\r\n isDirty: computeIsDirty(nextLayout, state.originalLayout),\r\n successMessages: {\r\n ...state.successMessages,\r\n [WorkspaceBuilderActionKey.CreateGroup]: response.message ?? '',\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(RenameWorkspaceBuilderGroup)\r\n renameGroup(\r\n ctx: StateContext<WorkspaceBuilderStateModel>,\r\n { groupId, title }: RenameWorkspaceBuilderGroup,\r\n ) {\r\n const { levelId } = ctx.getState();\r\n if (!levelId) {\r\n return;\r\n }\r\n\r\n const req$ = this.http.patch<Response<any>>(\r\n `levels/${levelId}/workspaceBuilder/groups/${groupId}`,\r\n {\r\n title,\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkspaceBuilderActionKey.UpdateGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const nextLayout = renameGroupInLayout(state.layout, groupId, title);\r\n const validationErrors = validateLayout(nextLayout);\r\n\r\n return {\r\n layout: nextLayout,\r\n validationErrors,\r\n isDirty: computeIsDirty(nextLayout, state.originalLayout),\r\n successMessages: {\r\n ...state.successMessages,\r\n [WorkspaceBuilderActionKey.UpdateGroup]: response.message ?? '',\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteWorkspaceBuilderGroup)\r\n deleteGroup(\r\n ctx: StateContext<WorkspaceBuilderStateModel>,\r\n { groupId }: DeleteWorkspaceBuilderGroup,\r\n ) {\r\n const { levelId } = ctx.getState();\r\n if (!levelId) {\r\n return;\r\n }\r\n\r\n const req$ = this.http.delete<Response<void>>(\r\n `levels/${levelId}/workspaceBuilder/groups/${groupId}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: WorkspaceBuilderActionKey.DeleteGroup,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const nextLayout = removeGroupAndPromoteModules(state.layout, groupId);\r\n const validationErrors = validateLayout(nextLayout);\r\n\r\n return {\r\n layout: nextLayout,\r\n validationErrors,\r\n isDirty: computeIsDirty(nextLayout, state.originalLayout),\r\n successMessages: {\r\n ...state.successMessages,\r\n [WorkspaceBuilderActionKey.DeleteGroup]: response.message ?? '',\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(ResetWorkspaceBuilderState)\r\n resetState(ctx: StateContext<WorkspaceBuilderStateModel>) {\r\n ctx.setState(DEFAULTS);\r\n }\r\n}\r\n","import { Injectable, computed, inject } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\nimport {\r\n CreateWorkspaceBuilderGroup,\r\n DeleteWorkspaceBuilderGroup,\r\n GetWorkspaceBuilderLayout,\r\n PatchWorkspaceBuilderLayoutLocally,\r\n RenameWorkspaceBuilderGroup,\r\n ResetWorkspaceBuilderState,\r\n SaveWorkspaceBuilderLayout,\r\n SetWorkspaceBuilderLevelId,\r\n} from './workspace-builder.actions';\r\nimport {\r\n LocalizedTitle,\r\n WorkspaceArea,\r\n WorkspaceBuilderActionKey,\r\n WorkspaceBuilderLayoutDto,\r\n} from './workspace-builder.model';\r\nimport { WorkspaceBuilderState } from './workspace-builder.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class WorkspaceBuilderFacade {\r\n private readonly store = inject(Store);\r\n\r\n readonly levelId = select(WorkspaceBuilderState.getLevelId);\r\n readonly layout = select(WorkspaceBuilderState.getLayout);\r\n readonly mainItems = select(WorkspaceBuilderState.getMainItems);\r\n readonly moreItems = select(WorkspaceBuilderState.getMoreItems);\r\n readonly validationErrors = select(WorkspaceBuilderState.getValidationErrors);\r\n readonly isDirty = select(WorkspaceBuilderState.getIsDirty);\r\n readonly successMessages = select(WorkspaceBuilderState.getSuccessMessages);\r\n\r\n private readonly loadingActive = select(\r\n WorkspaceBuilderState.getLoadingActive,\r\n );\r\n private readonly errors = select(WorkspaceBuilderState.getErrors);\r\n\r\n readonly isLoadingLayout = computed(() =>\r\n this.loadingActive().includes(WorkspaceBuilderActionKey.GetLayout),\r\n );\r\n readonly isSavingLayout = computed(() =>\r\n this.loadingActive().includes(WorkspaceBuilderActionKey.SaveLayout),\r\n );\r\n readonly isCreatingGroup = computed(() =>\r\n this.loadingActive().includes(WorkspaceBuilderActionKey.CreateGroup),\r\n );\r\n readonly isUpdatingGroup = computed(() =>\r\n this.loadingActive().includes(WorkspaceBuilderActionKey.UpdateGroup),\r\n );\r\n readonly isDeletingGroup = computed(() =>\r\n this.loadingActive().includes(WorkspaceBuilderActionKey.DeleteGroup),\r\n );\r\n\r\n readonly layoutError = computed(\r\n () => this.errors()[WorkspaceBuilderActionKey.GetLayout] ?? null,\r\n );\r\n readonly saveError = computed(\r\n () => this.errors()[WorkspaceBuilderActionKey.SaveLayout] ?? null,\r\n );\r\n\r\n getSuccessMessage(key: WorkspaceBuilderActionKey): string | null {\r\n return this.successMessages()[key] ?? null;\r\n }\r\n\r\n getErrorMessage(key: WorkspaceBuilderActionKey): string | null {\r\n return this.errors()[key] ?? null;\r\n }\r\n\r\n setLevelId(levelId: number) {\r\n return this.store.dispatch(new SetWorkspaceBuilderLevelId(levelId));\r\n }\r\n\r\n getLayout() {\r\n return this.store.dispatch(new GetWorkspaceBuilderLayout());\r\n }\r\n\r\n patchLayout(layout: WorkspaceBuilderLayoutDto) {\r\n return this.store.dispatch(new PatchWorkspaceBuilderLayoutLocally(layout));\r\n }\r\n\r\n saveLayout() {\r\n return this.store.dispatch(new SaveWorkspaceBuilderLayout());\r\n }\r\n\r\n createGroup(\r\n title: LocalizedTitle,\r\n area: WorkspaceArea = 'main',\r\n order?: number,\r\n ) {\r\n return this.store.dispatch(\r\n new CreateWorkspaceBuilderGroup(title, area, order),\r\n );\r\n }\r\n\r\n renameGroup(groupId: string, title: LocalizedTitle) {\r\n return this.store.dispatch(new RenameWorkspaceBuilderGroup(groupId, title));\r\n }\r\n\r\n deleteGroup(groupId: string) {\r\n return this.store.dispatch(new DeleteWorkspaceBuilderGroup(groupId));\r\n }\r\n\r\n resetState() {\r\n return this.store.dispatch(new ResetWorkspaceBuilderState());\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, input, linkedSignal, signal } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { DynamicDialogConfig, ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig, ValidatorConfig } from '@masterteam/components';\r\nimport { ToastService } from '@masterteam/components/toast';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport {\r\n LocalizedTitle,\r\n WorkspaceArea,\r\n} from '../../../store/workspace-builder/workspace-builder.model';\r\nimport { WorkspaceBuilderFacade } from '../../../store/workspace-builder/workspace-builder.facade';\r\n\r\nexport interface CreateWorkspaceGroupDialogData {\r\n area?: WorkspaceArea;\r\n groupId?: string;\r\n localizedName?: LocalizedTitle;\r\n order?: number;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-workspace-builder-create-group-dialog',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n Button,\r\n DynamicForm,\r\n TranslocoDirective,\r\n ],\r\n templateUrl: './workspace-builder-create-group-dialog.html',\r\n styleUrl: './workspace-builder-create-group-dialog.css',\r\n})\r\nexport class WorkspaceBuilderCreateGroupDialog {\r\n readonly area = input<WorkspaceArea | null>(null);\r\n\r\n readonly modal = inject(ModalService);\r\n private readonly config = inject(DynamicDialogConfig, { optional: true });\r\n private readonly ref = inject(ModalRef);\r\n private readonly facade = inject(WorkspaceBuilderFacade);\r\n private readonly ts = inject(ToastService);\r\n private readonly translocoService = inject(TranslocoService);\r\n\r\n readonly isSaving = signal(false);\r\n\r\n formControl: any = new FormControl(null);\r\n\r\n dynamicFormConfig = linkedSignal<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: '',\r\n label: '',\r\n type: 'header',\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'title.en',\r\n label: this.translocoService.translate(\r\n 'workspace-builder.title-en',\r\n ),\r\n placeholder: this.translocoService.translate(\r\n 'workspace-builder.title-en',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n order: 1,\r\n },\r\n {\r\n key: 'title.ar',\r\n label: this.translocoService.translate(\r\n 'workspace-builder.title-ar',\r\n ),\r\n placeholder: this.translocoService.translate(\r\n 'workspace-builder.title-ar',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n order: 2,\r\n },\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n get isEditMode(): boolean {\r\n return !!this.dialogData.groupId;\r\n }\r\n\r\n private get dialogData(): CreateWorkspaceGroupDialogData {\r\n return (this.config?.data ?? {}) as CreateWorkspaceGroupDialogData;\r\n }\r\n\r\n constructor() {\r\n const initial = this.dialogData.localizedName;\r\n if (initial) {\r\n this.formControl.patchValue({\r\n title: {\r\n en: initial.en ?? '',\r\n ar: initial.ar ?? '',\r\n },\r\n });\r\n }\r\n }\r\n\r\n private resolvedArea(): WorkspaceArea {\r\n return this.area() ?? this.dialogData.area ?? 'main';\r\n }\r\n\r\n submit(): void {\r\n const value = this.formControl.value;\r\n const en = (value?.title?.en ?? '').trim();\r\n const ar = (value?.title?.ar ?? '').trim();\r\n\r\n if (!en && !ar) {\r\n return;\r\n }\r\n\r\n const title: LocalizedTitle = { en, ar };\r\n this.isSaving.set(true);\r\n\r\n if (this.isEditMode) {\r\n this.facade.renameGroup(this.dialogData.groupId!, title).subscribe({\r\n next: () => {\r\n this.ts.success(\r\n this.translocoService.translate(\r\n 'workspace-builder.group-update-success',\r\n ),\r\n );\r\n this.facade.getLayout();\r\n this.ref.close(true);\r\n },\r\n error: () => {\r\n this.isSaving.set(false);\r\n this.ts.error(\r\n this.translocoService.translate(\r\n 'workspace-builder.group-update-error',\r\n ),\r\n );\r\n },\r\n });\r\n } else {\r\n const area = this.resolvedArea();\r\n const order = this.dialogData.order;\r\n this.facade.createGroup(title, area, order).subscribe({\r\n next: () => {\r\n this.ts.success(\r\n this.translocoService.translate(\r\n 'workspace-builder.group-create-success',\r\n ),\r\n );\r\n this.facade.getLayout();\r\n this.ref.close(true);\r\n },\r\n error: () => {\r\n this.isSaving.set(false);\r\n this.ts.error(\r\n this.translocoService.translate(\r\n 'workspace-builder.group-create-error',\r\n ),\r\n );\r\n },\r\n });\r\n }\r\n }\r\n\r\n cancel(): void {\r\n this.ref.close(null);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workspace-builder'\">\r\n <div [class]=\"'flex flex-col gap-3 p-4 ' + modal.contentClass\">\r\n <form class=\"col-span-1\">\r\n <mt-dynamic-form\r\n [formConfig]=\"dynamicFormConfig()\"\r\n [formControl]=\"formControl\"\r\n />\r\n </form>\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n variant=\"outlined\"\r\n [label]=\"t('cancel')\"\r\n (onClick)=\"cancel()\"\r\n ></mt-button>\r\n\r\n <mt-button\r\n [label]=\"isEditMode ? t('save') : t('add-group')\"\r\n [disabled]=\"!formControl.valid\"\r\n [loading]=\"isSaving()\"\r\n (onClick)=\"submit()\"\r\n ></mt-button>\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n OnDestroy,\r\n signal,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { DialogService } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { Page } from '@masterteam/components/page';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ToastService } from '@masterteam/components/toast';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\r\nimport { DragDropModule } from 'primeng/dragdrop';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { finalize } from 'rxjs';\r\nimport { WorkspaceBuilderFacade } from '../../store/workspace-builder/workspace-builder.facade';\r\nimport {\r\n WorkspaceArea,\r\n WorkspaceBuilderActionKey,\r\n WorkspaceBuilderLayoutDto,\r\n WorkspaceGroupItem,\r\n WorkspaceGroupModuleItem,\r\n WorkspaceItem,\r\n WorkspaceModuleItem,\r\n} from '../../store/workspace-builder/workspace-builder.model';\r\nimport {\r\n CreateWorkspaceGroupDialogData,\r\n WorkspaceBuilderCreateGroupDialog,\r\n} from './create-group-dialog/workspace-builder-create-group-dialog';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Icon } from '@masterteam/icons';\r\n\r\ntype DragSource =\r\n | { type: 'area'; area: WorkspaceArea }\r\n | { type: 'group'; area: WorkspaceArea; groupId: string };\r\n\r\ntype DropTarget = DragSource;\r\n\r\ninterface ModuleDragPayload {\r\n kind: 'module';\r\n source: DragSource;\r\n modules: WorkspaceGroupModuleItem[];\r\n}\r\n\r\ninterface GroupDragPayload {\r\n kind: 'group';\r\n source: { type: 'area'; area: WorkspaceArea };\r\n groups: WorkspaceGroupItem[];\r\n}\r\n\r\ntype DragPayload = ModuleDragPayload | GroupDragPayload;\r\nconst DRAG_PAYLOAD_MIME = 'application/x-workspace-builder';\r\n\r\n@Component({\r\n selector: 'mt-workspace-builder',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n TranslocoDirective,\r\n DragDropModule,\r\n Button,\r\n Icon,\r\n Page,\r\n Card,\r\n ContextMenuModule,\r\n SkeletonModule,\r\n ],\r\n templateUrl: './workspace-builder.html',\r\n styleUrl: './workspace-builder.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [DialogService],\r\n})\r\nexport default class WorkspaceBuilder implements OnDestroy {\r\n readonly levelId = input<number | null>(null);\r\n readonly showHeader = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n readonly autoSave = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n readonly areas: WorkspaceArea[] = ['main', 'more'];\r\n\r\n readonly dropScope = 'workspace-builder-item';\r\n readonly loadingSkeletonRows = [0, 1, 2, 3];\r\n\r\n readonly createGroupArea = signal<WorkspaceArea>('main');\r\n readonly isDragging = signal(false);\r\n readonly activeDropSlotKey = signal<string | null>(null);\r\n\r\n private readonly expandedGroups = signal<Record<string, boolean>>({});\r\n private readonly dragPayload = signal<DragPayload | null>(null);\r\n private dragCleanupTimer: ReturnType<typeof setTimeout> | null = null;\r\n private autoSaveInFlight = false;\r\n private autoSaveQueued = false;\r\n private autoSaveQueuedNotifySuccess = false;\r\n\r\n private readonly facade = inject(WorkspaceBuilderFacade);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n ts = inject(ToastService);\r\n private readonly addGroupLabel = toSignal(\r\n this.transloco.selectTranslate('workspace-builder.add-group'),\r\n {\r\n initialValue: this.transloco.translate('workspace-builder.add-group'),\r\n },\r\n );\r\n\r\n readonly layout = this.facade.layout;\r\n readonly validationErrors = this.facade.validationErrors;\r\n readonly isLoadingLayout = this.facade.isLoadingLayout;\r\n readonly layoutError = this.facade.layoutError;\r\n readonly isSavingLayout = this.facade.isSavingLayout;\r\n readonly areaContextItems = computed<MenuItem[]>(() => [\r\n {\r\n label: this.addGroupLabel(),\r\n icon: 'pi pi-plus',\r\n command: () => this.openCreateGroupDialog(this.createGroupArea()),\r\n },\r\n ]);\r\n\r\n constructor() {\r\n effect(() => {\r\n const levelId = this.levelId();\r\n if (levelId == null) {\r\n return;\r\n }\r\n\r\n this.facade.setLevelId(levelId);\r\n this.facade.getLayout();\r\n });\r\n\r\n effect(() => {\r\n const currentLayout = this.layout();\r\n this.expandedGroups.update((current) => {\r\n const next = { ...current };\r\n const existingGroupIds = new Set<string>();\r\n let changed = false;\r\n\r\n this.getAllGroups(currentLayout).forEach((group) => {\r\n existingGroupIds.add(group.id);\r\n if (next[group.id] === undefined) {\r\n next[group.id] = true;\r\n changed = true;\r\n }\r\n });\r\n\r\n Object.keys(next).forEach((groupId) => {\r\n if (!existingGroupIds.has(groupId)) {\r\n delete next[groupId];\r\n changed = true;\r\n }\r\n });\r\n\r\n return changed ? next : current;\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearDragCleanupTimer();\r\n this.facade.resetState();\r\n }\r\n\r\n areaItems(area: WorkspaceArea): WorkspaceItem[] {\r\n return this.layout()[area];\r\n }\r\n\r\n trackItem(item: WorkspaceItem): string {\r\n return `${item.type}:${item.id}`;\r\n }\r\n\r\n isGroupExpanded(groupId: string): boolean {\r\n return this.expandedGroups()[groupId] ?? true;\r\n }\r\n\r\n toggleGroup(groupId: string): void {\r\n this.expandedGroups.update((groups) => ({\r\n ...groups,\r\n [groupId]: !groups[groupId],\r\n }));\r\n }\r\n\r\n onModuleDragStart(\r\n event: unknown,\r\n module: WorkspaceModuleItem | WorkspaceGroupModuleItem,\r\n source: DragSource,\r\n ): void {\r\n this.stopEventPropagation(event);\r\n this.beginDragSession();\r\n\r\n const payload: ModuleDragPayload = {\r\n kind: 'module',\r\n source,\r\n modules: [\r\n {\r\n id: module.id,\r\n name: module.name,\r\n order: module.order,\r\n },\r\n ],\r\n };\r\n\r\n this.dragPayload.set(payload);\r\n this.setDragTransferData(\r\n this.getNativeDragEvent(event),\r\n payload,\r\n module.id,\r\n );\r\n }\r\n\r\n onGroupDragStart(\r\n event: unknown,\r\n group: WorkspaceGroupItem,\r\n area: WorkspaceArea,\r\n ): void {\r\n this.stopEventPropagation(event);\r\n this.beginDragSession();\r\n\r\n const payload: GroupDragPayload = {\r\n kind: 'group',\r\n source: { type: 'area', area },\r\n groups: [group],\r\n };\r\n\r\n this.dragPayload.set(payload);\r\n this.setDragTransferData(this.getNativeDragEvent(event), payload, group.id);\r\n }\r\n\r\n onDragEnd(): void {\r\n this.scheduleDragSessionCleanup();\r\n }\r\n\r\n onDropToArea(\r\n event: unknown,\r\n area: WorkspaceArea,\r\n index: number,\r\n disabled = false,\r\n ): void {\r\n if (disabled) {\r\n this.stopDropEvent(event);\r\n return;\r\n }\r\n\r\n this.stopDropEvent(event);\r\n this.handleDrop({ type: 'area', area }, index, event);\r\n }\r\n\r\n onDropToGroup(\r\n event: unknown,\r\n area: WorkspaceArea,\r\n groupId: string,\r\n index: number,\r\n disabled = false,\r\n ): void {\r\n if (disabled) {\r\n this.stopDropEvent(event);\r\n return;\r\n }\r\n\r\n this.stopDropEvent(event);\r\n this.handleDrop({ type: 'group', area, groupId }, index, event);\r\n }\r\n\r\n allowNativeDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n if (event.dataTransfer) {\r\n event.dataTransfer.dropEffect = 'move';\r\n }\r\n }\r\n\r\n onDropSlotDragOver(\r\n event: DragEvent,\r\n slotKey: string,\r\n disabled = false,\r\n ): void {\r\n this.allowNativeDrop(event);\r\n if (disabled) {\r\n if (this.activeDropSlotKey() === slotKey) {\r\n this.activeDropSlotKey.set(null);\r\n }\r\n return;\r\n }\r\n\r\n if (!this.isDragging()) {\r\n return;\r\n }\r\n\r\n if (this.activeDropSlotKey() !== slotKey) {\r\n this.activeDropSlotKey.set(slotKey);\r\n }\r\n }\r\n\r\n onDropSlotDragLeave(event: DragEvent, slotKey: string): void {\r\n if (this.activeDropSlotKey() !== slotKey) {\r\n return;\r\n }\r\n\r\n const currentTarget = event.currentTarget as HTMLElement | null;\r\n const relatedTarget = event.relatedTarget as Node | null;\r\n if (\r\n currentTarget &&\r\n relatedTarget &&\r\n currentTarget.contains(relatedTarget)\r\n ) {\r\n return;\r\n }\r\n\r\n this.activeDropSlotKey.set(null);\r\n }\r\n\r\n areaDropSlotKey(area: WorkspaceArea, index: number): string {\r\n return `area:${area}:${index}`;\r\n }\r\n\r\n groupDropSlotKey(\r\n area: WorkspaceArea,\r\n groupId: string,\r\n index: number,\r\n ): string {\r\n return `group:${area}:${groupId}:${index}`;\r\n }\r\n\r\n isAreaDropSlotDisabled(area: WorkspaceArea, index: number): boolean {\r\n const payload = this.dragPayload();\r\n if (!payload) return false;\r\n\r\n if (payload.kind === 'group') {\r\n if (payload.source.area !== area) return false;\r\n const list = this.layout()[area];\r\n const movingIds = new Set(payload.groups.map((group) => group.id));\r\n const movingIndexes = list\r\n .map((item, i) =>\r\n item.type === 'group' && movingIds.has(item.id) ? i : -1,\r\n )\r\n .filter((i) => i >= 0);\r\n if (movingIndexes.length !== 1) return false;\r\n\r\n const sourceIndex = movingIndexes[0];\r\n return index === sourceIndex || index === sourceIndex + 1;\r\n }\r\n\r\n if (payload.source.type !== 'area' || payload.source.area !== area) {\r\n return false;\r\n }\r\n\r\n const list = this.layout()[area];\r\n const movingIds = new Set(payload.modules.map((module) => module.id));\r\n const movingIndexes = list\r\n .map((item, i) =>\r\n item.type === 'module' && movingIds.has(item.id) ? i : -1,\r\n )\r\n .filter((i) => i >= 0);\r\n if (movingIndexes.length !== 1) return false;\r\n\r\n const sourceIndex = movingIndexes[0];\r\n return index === sourceIndex || index === sourceIndex + 1;\r\n }\r\n\r\n isGroupDropSlotDisabled(\r\n area: WorkspaceArea,\r\n groupId: string,\r\n index: number,\r\n ): boolean {\r\n const payload = this.dragPayload();\r\n if (!payload || payload.kind !== 'module') return false;\r\n if (payload.source.type !== 'group') return false;\r\n if (payload.source.area !== area || payload.source.groupId !== groupId) {\r\n return false;\r\n }\r\n\r\n const group = this.findGroup(this.layout(), area, groupId);\r\n if (!group) return false;\r\n\r\n const movingIds = new Set(payload.modules.map((module) => module.id));\r\n const movingIndexes = group.modules\r\n .map((module, i) => (movingIds.has(module.id) ? i : -1))\r\n .filter((i) => i >= 0);\r\n if (movingIndexes.length !== 1) return false;\r\n\r\n const sourceIndex = movingIndexes[0];\r\n return index === sourceIndex || index === sourceIndex + 1;\r\n }\r\n\r\n onNativeAreaDrop(event: DragEvent, area: WorkspaceArea): void {\r\n this.stopDropEvent(event);\r\n const index = this.resolveAreaDropIndex(event, area);\r\n this.handleDrop({ type: 'area', area }, index, event);\r\n }\r\n\r\n onNativeGroupDrop(\r\n event: DragEvent,\r\n area: WorkspaceArea,\r\n groupId: string,\r\n ): void {\r\n this.stopDropEvent(event);\r\n const group = this.findGroup(this.layout(), area, groupId);\r\n const index = group?.modules.length ?? 0;\r\n this.handleDrop({ type: 'group', area, groupId }, index, event);\r\n }\r\n\r\n onNativeGroupModuleDrop(\r\n event: DragEvent,\r\n area: WorkspaceArea,\r\n groupId: string,\r\n moduleIndex: number,\r\n ): void {\r\n this.stopDropEvent(event);\r\n const index = this.resolveSiblingDropIndex(event, moduleIndex);\r\n this.handleDrop({ type: 'group', area, groupId }, index, event);\r\n }\r\n\r\n onAreaContextMenu(\r\n event: MouseEvent,\r\n area: WorkspaceArea,\r\n contextMenu: ContextMenu,\r\n ): void {\r\n event.preventDefault();\r\n this.createGroupArea.set(area);\r\n contextMenu.show(event);\r\n }\r\n\r\n openCreateGroupDialog(area: WorkspaceArea): void {\r\n const order = this.layout()[area].length + 1;\r\n const data: CreateWorkspaceGroupDialogData = { area, order };\r\n\r\n this.modal.openModal(WorkspaceBuilderCreateGroupDialog, 'dialog', {\r\n header: this.transloco.translate('workspace-builder.create-group'),\r\n styleClass: '!w-[28rem]',\r\n height: 'auto',\r\n appendTo: 'body',\r\n dismissableMask: true,\r\n data,\r\n inputValues: { area },\r\n });\r\n }\r\n\r\n startRenameGroup(group: WorkspaceGroupItem): void {\r\n const data: CreateWorkspaceGroupDialogData = {\r\n groupId: group.id,\r\n localizedName: group.localizedName,\r\n };\r\n\r\n this.modal.openModal(WorkspaceBuilderCreateGroupDialog, 'dialog', {\r\n header: this.transloco.translate('workspace-builder.rename-group'),\r\n styleClass: '!w-[28rem]',\r\n height: 'auto',\r\n appendTo: 'body',\r\n dismissableMask: true,\r\n data,\r\n inputValues: { area: null },\r\n });\r\n }\r\n\r\n onSaveClick(): void {\r\n this.triggerAutoSave({ notifyOnSuccess: true });\r\n }\r\n\r\n reloadLayout(): void {\r\n this.facade.getLayout();\r\n }\r\n\r\n deleteGroup(groupId: string, event?: Event): void {\r\n if (!event) {\r\n return;\r\n }\r\n\r\n this.confirmationService.confirmDelete({\r\n event: event,\r\n type: 'popup',\r\n accept: () => this.executeDeleteGroup(groupId),\r\n reject: () => {},\r\n });\r\n }\r\n\r\n private executeDeleteGroup(groupId: string): void {\r\n this.facade.deleteGroup(groupId).subscribe({\r\n next: () => {\r\n this.ts.success(\r\n this.getSuccessMessage(\r\n WorkspaceBuilderActionKey.DeleteGroup,\r\n 'workspace-builder.group-delete-success',\r\n ),\r\n );\r\n },\r\n error: () => {\r\n this.ts.error(\r\n this.getErrorMessage(\r\n WorkspaceBuilderActionKey.DeleteGroup,\r\n 'workspace-builder.group-delete-error',\r\n ),\r\n );\r\n },\r\n });\r\n }\r\n\r\n removeModuleFromGroup(\r\n area: WorkspaceArea,\r\n groupId: string,\r\n moduleId: string,\r\n ): void {\r\n const nextLayout = this.cloneLayout(this.layout());\r\n const group = this.findGroup(nextLayout, area, groupId);\r\n if (!group) {\r\n return;\r\n }\r\n\r\n const moduleIndex = group.modules.findIndex(\r\n (module) => module.id === moduleId,\r\n );\r\n if (moduleIndex === -1) {\r\n return;\r\n }\r\n\r\n const [module] = group.modules.splice(moduleIndex, 1);\r\n\r\n const areaItems = nextLayout[area];\r\n const groupIndex = areaItems.findIndex(\r\n (item) => item.type === 'group' && item.id === groupId,\r\n );\r\n\r\n if (groupIndex === -1) {\r\n return;\r\n }\r\n\r\n areaItems.splice(groupIndex + 1, 0, {\r\n type: 'module',\r\n id: module.id,\r\n name: module.name,\r\n order: 0,\r\n });\r\n\r\n this.patchLayout(nextLayout);\r\n }\r\n\r\n private handleDrop(\r\n target: DropTarget,\r\n targetIndex: number,\r\n event?: unknown,\r\n ): void {\r\n const payload = this.resolveDropPayload(event);\r\n if (!payload) {\r\n return;\r\n }\r\n\r\n if (payload.kind === 'group' && target.type === 'group') {\r\n // Prevent nested groups.\r\n this.endDragSession();\r\n return;\r\n }\r\n\r\n const nextLayout = this.cloneLayout(this.layout());\r\n\r\n if (payload.kind === 'group') {\r\n this.moveGroups(nextLayout, payload, target, targetIndex);\r\n } else {\r\n this.moveModules(nextLayout, payload, target, targetIndex);\r\n }\r\n\r\n this.patchLayout(nextLayout);\r\n this.endDragSession();\r\n }\r\n\r\n private patchLayout(layout: WorkspaceBuilderLayoutDto): void {\r\n this.facade.patchLayout(layout).subscribe({\r\n next: () => {\r\n if (this.autoSave()) {\r\n this.triggerAutoSave({ notifyOnSuccess: true });\r\n }\r\n },\r\n });\r\n }\r\n\r\n private triggerAutoSave(options?: { notifyOnSuccess?: boolean }): void {\r\n const notifyOnSuccess = options?.notifyOnSuccess ?? false;\r\n\r\n if (this.validationErrors().length > 0) {\r\n return;\r\n }\r\n\r\n if (this.autoSaveInFlight) {\r\n this.autoSaveQueued = true;\r\n this.autoSaveQueuedNotifySuccess =\r\n this.autoSaveQueuedNotifySuccess || notifyOnSuccess;\r\n return;\r\n }\r\n\r\n this.autoSaveInFlight = true;\r\n this.facade\r\n .saveLayout()\r\n .pipe(\r\n finalize(() => {\r\n this.autoSaveInFlight = false;\r\n if (this.autoSaveQueued) {\r\n const queuedNotifyOnSuccess = this.autoSaveQueuedNotifySuccess;\r\n this.autoSaveQueued = false;\r\n this.autoSaveQueuedNotifySuccess = false;\r\n this.triggerAutoSave({ notifyOnSuccess: queuedNotifyOnSuccess });\r\n }\r\n }),\r\n )\r\n .subscribe({\r\n next: () => {\r\n if (notifyOnSuccess) {\r\n this.ts.success(\r\n this.getSuccessMessage(\r\n WorkspaceBuilderActionKey.SaveLayout,\r\n 'workspace-builder.layout-update-success',\r\n ),\r\n );\r\n }\r\n },\r\n error: () => {\r\n this.ts.error(\r\n this.getErrorMessage(\r\n WorkspaceBuilderActionKey.SaveLayout,\r\n 'workspace-builder.layout-update-error',\r\n ),\r\n );\r\n },\r\n });\r\n }\r\n\r\n private resolveDropPayload(event?: unknown): DragPayload | null {\r\n const fromTransfer = this.getDropPayloadFromTransfer(event);\r\n if (fromTransfer) {\r\n return fromTransfer;\r\n }\r\n\r\n return this.dragPayload();\r\n }\r\n\r\n private getDropPayloadFromTransfer(event?: unknown): DragPayload | null {\r\n const transfer = this.getNativeDragEvent(event)?.dataTransfer;\r\n const raw = transfer?.getData?.(DRAG_PAYLOAD_MIME);\r\n if (!raw) {\r\n return null;\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(raw) as DragPayload;\r\n if (parsed?.kind === 'module' || parsed?.kind === 'group') {\r\n return parsed;\r\n }\r\n } catch {\r\n return null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private setDragTransferData(\r\n event: DragEvent | null,\r\n payload: DragPayload,\r\n plainTextFallback: string,\r\n ): void {\r\n const transfer = event?.dataTransfer;\r\n if (!transfer) {\r\n return;\r\n }\r\n\r\n transfer.effectAllowed = 'move';\r\n transfer.setData(DRAG_PAYLOAD_MIME, JSON.stringify(payload));\r\n transfer.setData('text/plain', plainTextFallback);\r\n }\r\n\r\n private beginDragSession(): void {\r\n this.isDragging.set(true);\r\n this.activeDropSlotKey.set(null);\r\n this.clearDragCleanupTimer();\r\n }\r\n\r\n private endDragSession(): void {\r\n this.isDragging.set(false);\r\n this.activeDropSlotKey.set(null);\r\n this.dragPayload.set(null);\r\n this.clearDragCleanupTimer();\r\n }\r\n\r\n private scheduleDragSessionCleanup(): void {\r\n this.isDragging.set(false);\r\n this.activeDropSlotKey.set(null);\r\n this.clearDragCleanupTimer();\r\n this.dragCleanupTimer = setTimeout(() => {\r\n this.dragPayload.set(null);\r\n this.dragCleanupTimer = null;\r\n }, 180);\r\n }\r\n\r\n private clearDragCleanupTimer(): void {\r\n if (!this.dragCleanupTimer) {\r\n return;\r\n }\r\n\r\n clearTimeout(this.dragCleanupTimer);\r\n this.dragCleanupTimer = null;\r\n }\r\n\r\n private stopDropEvent(event: unknown): void {\r\n const nativeEvent = this.unwrapEvent(event);\r\n nativeEvent?.preventDefault?.();\r\n nativeEvent?.stopPropagation?.();\r\n (event as any)?.preventDefault?.();\r\n (event as any)?.stopPropagation?.();\r\n }\r\n\r\n private stopEventPropagation(event: unknown): void {\r\n this.unwrapEvent(event)?.stopPropagation?.();\r\n (event as any)?.stopPropagation?.();\r\n }\r\n\r\n private getNativeDragEvent(event: unknown): DragEvent | null {\r\n const nativeEvent = this.unwrapEvent(event);\r\n if (!nativeEvent || !('dataTransfer' in nativeEvent)) {\r\n return null;\r\n }\r\n\r\n return nativeEvent as DragEvent;\r\n }\r\n\r\n private unwrapEvent(event: unknown): Event | null {\r\n if (!event) {\r\n return null;\r\n }\r\n\r\n const candidate = (event as any)?.originalEvent ?? (event as any)?.event;\r\n return (candidate ?? (event as Event)) as Event;\r\n }\r\n\r\n private resolveAreaDropIndex(event: DragEvent, area: WorkspaceArea): number {\r\n const y = event.clientY;\r\n const items = this.layout()[area];\r\n\r\n for (let index = 0; index < items.length; index += 1) {\r\n const element = this.getTopLevelItemElement(event, area, index);\r\n if (!element) {\r\n continue;\r\n }\r\n\r\n const rect = element.getBoundingClientRect();\r\n if (y < rect.top + rect.height / 2) {\r\n return index;\r\n }\r\n }\r\n\r\n return items.length;\r\n }\r\n\r\n private resolveSiblingDropIndex(event: DragEvent, itemIndex: number): number {\r\n const target = event.currentTarget as HTMLElement | null;\r\n if (!target) {\r\n return itemIndex;\r\n }\r\n\r\n const rect = target.getBoundingClientRect();\r\n const shouldInsertAfter = event.clientY >= rect.top + rect.height / 2;\r\n return shouldInsertAfter ? itemIndex + 1 : itemIndex;\r\n }\r\n\r\n private getTopLevelItemElement(\r\n event: DragEvent,\r\n area: WorkspaceArea,\r\n itemIndex: number,\r\n ): HTMLElement | null {\r\n const root = (event.currentTarget as HTMLElement | null) ?? null;\r\n if (!root) {\r\n return null;\r\n }\r\n\r\n const selector =\r\n area === 'main'\r\n ? `[data-area=\"main\"][data-item-index=\"${itemIndex}\"]`\r\n : `[data-area=\"more\"][data-item-index=\"${itemIndex}\"]`;\r\n return root.querySelector(selector);\r\n }\r\n\r\n private moveGroups(\r\n layout: WorkspaceBuilderLayoutDto,\r\n payload: GroupDragPayload,\r\n target: DropTarget,\r\n targetIndex: number,\r\n ): void {\r\n if (target.type !== 'area') {\r\n return;\r\n }\r\n\r\n const sourceArea = payload.source.area;\r\n const targetArea = target.area;\r\n const groupIds = new Set(payload.groups.map((group) => group.id));\r\n\r\n if (sourceArea === targetArea) {\r\n const original = layout[sourceArea];\r\n const moving = original.filter(\r\n (item): item is WorkspaceGroupItem =>\r\n item.type === 'group' && groupIds.has(item.id),\r\n );\r\n\r\n if (moving.length === 0) {\r\n return;\r\n }\r\n\r\n const removedBefore = original\r\n .slice(0, targetIndex)\r\n .filter(\r\n (item) => item.type === 'group' && groupIds.has(item.id),\r\n ).length;\r\n\r\n const remaining = original.filter(\r\n (item) => !(item.type === 'group' && groupIds.has(item.id)),\r\n );\r\n\r\n const insertIndex = this.clampIndex(\r\n targetIndex - removedBefore,\r\n remaining.length,\r\n );\r\n\r\n layout[sourceArea] = [\r\n ...remaining.slice(0, insertIndex),\r\n ...moving,\r\n ...remaining.slice(insertIndex),\r\n ];\r\n\r\n return;\r\n }\r\n\r\n const sourceList = layout[sourceArea];\r\n const moving = sourceList.filter(\r\n (item): item is WorkspaceGroupItem =>\r\n item.type === 'group' && groupIds.has(item.id),\r\n );\r\n\r\n if (moving.length === 0) {\r\n return;\r\n }\r\n\r\n layout[sourceArea] = sourceList.filter(\r\n (item) => !(item.type === 'group' && groupIds.has(item.id)),\r\n );\r\n\r\n const targetList = layout[targetArea];\r\n const insertIndex = this.clampIndex(targetIndex, targetList.length);\r\n targetList.splice(insertIndex, 0, ...moving);\r\n }\r\n\r\n private moveModules(\r\n layout: WorkspaceBuilderLayoutDto,\r\n payload: ModuleDragPayload,\r\n target: DropTarget,\r\n targetIndex: number,\r\n ): void {\r\n const moduleIds = new Set(payload.modules.map((module) => module.id));\r\n\r\n if (\r\n payload.source.type === 'area' &&\r\n target.type === 'area' &&\r\n payload.source.area === target.area\r\n ) {\r\n const area = payload.source.area;\r\n const original = layout[area];\r\n const moving = original.filter(\r\n (item): item is WorkspaceModuleItem =>\r\n item.type === 'module' && moduleIds.has(item.id),\r\n );\r\n\r\n if (moving.length === 0) {\r\n return;\r\n }\r\n\r\n const removedBefore = original\r\n .slice(0, targetIndex)\r\n .filter(\r\n (item) => item.type === 'module' && moduleIds.has(item.id),\r\n ).length;\r\n\r\n const remaining = original.filter(\r\n (item) => !(item.type === 'module' && moduleIds.has(item.id)),\r\n );\r\n\r\n const insertIndex = this.clampIndex(\r\n targetIndex - removedBefore,\r\n remaining.length,\r\n );\r\n\r\n layout[area] = [\r\n ...remaining.slice(0, insertIndex),\r\n ...moving,\r\n ...remaining.slice(insertIndex),\r\n ];\r\n\r\n return;\r\n }\r\n\r\n if (\r\n payload.source.type === 'group' &&\r\n target.type === 'group' &&\r\n payload.source.area === target.area &&\r\n payload.source.groupId === target.groupId\r\n ) {\r\n const group = this.findGroup(layout, target.area, target.groupId);\r\n if (!group) {\r\n return;\r\n }\r\n\r\n const original = group.modules;\r\n const moving = original.filter((module) => moduleIds.has(module.id));\r\n\r\n if (moving.length === 0) {\r\n return;\r\n }\r\n\r\n const removedBefore = original\r\n .slice(0, targetIndex)\r\n .filter((module) => moduleIds.has(module.id)).length;\r\n\r\n const remaining = original.filter((module) => !moduleIds.has(module.id));\r\n const insertIndex = this.clampIndex(\r\n targetIndex - removedBefore,\r\n remaining.length,\r\n );\r\n\r\n group.modules = [\r\n ...remaining.slice(0, insertIndex),\r\n ...moving,\r\n ...remaining.slice(insertIndex),\r\n ];\r\n\r\n return;\r\n }\r\n\r\n const extracted = this.extractModulesFromSource(\r\n layout,\r\n payload.source,\r\n moduleIds,\r\n );\r\n if (extracted.length === 0) {\r\n return;\r\n }\r\n\r\n if (target.type === 'area') {\r\n const areaList = layout[target.area];\r\n const insertIndex = this.clampIndex(targetIndex, areaList.length);\r\n const topLevelModules: WorkspaceModuleItem[] = extracted.map(\r\n (module) => ({\r\n type: 'module',\r\n id: module.id,\r\n name: module.name,\r\n order: 0,\r\n }),\r\n );\r\n\r\n areaList.splice(insertIndex, 0, ...topLevelModules);\r\n return;\r\n }\r\n\r\n const targetGroup = this.findGroup(layout, target.area, target.groupId);\r\n if (!targetGroup) {\r\n return;\r\n }\r\n\r\n const insertIndex = this.clampIndex(\r\n targetIndex,\r\n targetGroup.modules.length,\r\n );\r\n targetGroup.modules.splice(insertIndex, 0, ...extracted);\r\n }\r\n\r\n private extractModulesFromSource(\r\n layout: WorkspaceBuilderLayoutDto,\r\n source: DragSource,\r\n moduleIds: Set<string>,\r\n ): WorkspaceGroupModuleItem[] {\r\n if (source.type === 'area') {\r\n const areaList = layout[source.area];\r\n const moving = areaList\r\n .filter(\r\n (item): item is WorkspaceModuleItem =>\r\n item.type === 'module' && moduleIds.has(item.id),\r\n )\r\n .map((module) => ({\r\n id: module.id,\r\n name: module.name,\r\n order: module.order,\r\n }));\r\n\r\n layout[source.area] = areaList.filter(\r\n (item) => !(item.type === 'module' && moduleIds.has(item.id)),\r\n );\r\n\r\n return moving;\r\n }\r\n\r\n const group = this.findGroup(layout, source.area, source.groupId);\r\n if (!group) {\r\n return [];\r\n }\r\n\r\n const moving = group.modules.filter((module) => moduleIds.has(module.id));\r\n group.modules = group.modules.filter((module) => !moduleIds.has(module.id));\r\n\r\n return moving;\r\n }\r\n\r\n private findGroup(\r\n layout: WorkspaceBuilderLayoutDto,\r\n area: WorkspaceArea,\r\n groupId: string,\r\n ): WorkspaceGroupItem | null {\r\n const found = layout[area].find(\r\n (item): item is WorkspaceGroupItem =>\r\n item.type === 'group' && item.id === groupId,\r\n );\r\n\r\n return found ?? null;\r\n }\r\n\r\n private clampIndex(index: number, length: number): number {\r\n return Math.max(0, Math.min(index, length));\r\n }\r\n\r\n private getAllGroups(\r\n layout: WorkspaceBuilderLayoutDto,\r\n ): WorkspaceGroupItem[] {\r\n return [...layout.main, ...layout.more].filter(\r\n (item): item is WorkspaceGroupItem => item.type === 'group',\r\n );\r\n }\r\n\r\n private cloneLayout(\r\n layout: WorkspaceBuilderLayoutDto,\r\n ): WorkspaceBuilderLayoutDto {\r\n return {\r\n levelId: layout.levelId,\r\n main: layout.main.map((item) => this.cloneItem(item)),\r\n more: layout.more.map((item) => this.cloneItem(item)),\r\n };\r\n }\r\n\r\n private cloneItem(item: WorkspaceItem): WorkspaceItem {\r\n if (item.type === 'group') {\r\n return {\r\n type: 'group',\r\n id: item.id,\r\n name: item.name,\r\n localizedName: { ...item.localizedName },\r\n order: item.order,\r\n modules: item.modules.map((module) => ({\r\n id: module.id,\r\n name: module.name,\r\n order: module.order,\r\n })),\r\n };\r\n }\r\n\r\n return {\r\n type: 'module',\r\n id: item.id,\r\n name: item.name,\r\n order: item.order,\r\n };\r\n }\r\n\r\n private getSuccessMessage(\r\n key: WorkspaceBuilderActionKey,\r\n fallbackTranslationKey: string,\r\n ): string {\r\n const apiMessage = this.facade.getSuccessMessage(key)?.trim();\r\n if (apiMessage) {\r\n return apiMessage;\r\n }\r\n\r\n return this.transloco.translate(fallbackTranslationKey);\r\n }\r\n\r\n private getErrorMessage(\r\n key: WorkspaceBuilderActionKey,\r\n fallbackTranslationKey: string,\r\n ): string {\r\n const apiMessage = this.facade.getErrorMessage(key)?.trim();\r\n if (apiMessage) {\r\n return apiMessage;\r\n }\r\n\r\n return this.transloco.translate(fallbackTranslationKey);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workspace-builder'\">\r\n <p-contextMenu\r\n #areaContextMenu\r\n [model]=\"areaContextItems()\"\r\n appendTo=\"body\"\r\n />\r\n\r\n <ng-template #builderContent>\r\n @if (isLoadingLayout()) {\r\n <div class=\"grid gap-5\">\r\n <div class=\"grid grid-cols-1 gap-5 xl:grid-cols-2\">\r\n @for (area of areas; track area) {\r\n <mt-card\r\n [title]=\"t(area)\"\r\n [paddingless]=\"true\"\r\n class=\"min-h-[26rem] overflow-hidden bg-surface-0\"\r\n >\r\n <div\r\n class=\"grid min-h-full content-start gap-4 bg-surface-50/60 p-5 pt-4\"\r\n >\r\n @for (row of loadingSkeletonRows; track row) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 bg-surface-0 px-3 py-3 shadow-sm\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <p-skeleton size=\"2rem\" borderRadius=\"0.75rem\" />\r\n <div class=\"grid flex-1 gap-2\">\r\n <p-skeleton width=\"75%\" height=\"1rem\" />\r\n <p-skeleton width=\"45%\" height=\"0.8rem\" />\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n </div>\r\n } @else if (layoutError(); as error) {\r\n <div\r\n class=\"grid gap-4 rounded-xl border border-red-200 bg-red-50 px-5 py-6 text-red-700 shadow-sm\"\r\n >\r\n <div class=\"grid gap-1\">\r\n <div class=\"text-sm font-semibold\">\r\n {{ t(\"load-error-title\") }}\r\n </div>\r\n <p class=\"m-0 text-sm text-red-600\">\r\n {{ error || t(\"load-error-description\") }}\r\n </p>\r\n </div>\r\n\r\n <div>\r\n <mt-button\r\n [label]=\"t('retry')\"\r\n icon=\"arrow.refresh-cw-01\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"reloadLayout()\"\r\n />\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"grid gap-5\">\r\n @if (validationErrors().length > 0) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 px-4 py-3.5 text-red-700 shadow-sm\"\r\n >\r\n <div class=\"mb-2 text-sm font-semibold\">\r\n {{ t(\"validation-title\") }}\r\n </div>\r\n <ul class=\"m-0 list-disc ps-4\">\r\n @for (error of validationErrors(); track error) {\r\n <li>{{ error }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n\r\n <div class=\"grid grid-cols-1 gap-5 xl:grid-cols-2\">\r\n @for (area of areas; track area) {\r\n <mt-card\r\n [title]=\"t(area)\"\r\n [paddingless]=\"true\"\r\n class=\"min-h-[26rem] overflow-hidden bg-surface-0\"\r\n (contextmenu)=\"onAreaContextMenu($event, area, areaContextMenu)\"\r\n (dragover)=\"allowNativeDrop($event)\"\r\n (drop)=\"onNativeAreaDrop($event, area)\"\r\n >\r\n <ng-template #cardEnd>\r\n <mt-button\r\n [label]=\"t('add-group')\"\r\n icon=\"general.plus\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"openCreateGroupDialog(area)\"\r\n />\r\n </ng-template>\r\n\r\n <div\r\n class=\"workspace-area-body grid min-h-full content-start gap-2 bg-surface-50/60 p-5 pt-2\"\r\n [class.drag-active]=\"isDragging()\"\r\n (dragover)=\"allowNativeDrop($event)\"\r\n (drop)=\"onNativeAreaDrop($event, area)\"\r\n [pDroppable]=\"dropScope\"\r\n (onDrop)=\"onDropToArea($event, area, areaItems(area).length)\"\r\n >\r\n <div\r\n class=\"drop-slot\"\r\n [class.drop-slot-active]=\"\r\n activeDropSlotKey() === areaDropSlotKey(area, 0)\r\n \"\r\n [class.drop-slot-disabled]=\"isAreaDropSlotDisabled(area, 0)\"\r\n [pDroppable]=\"dropScope\"\r\n (dragover)=\"\r\n onDropSlotDragOver(\r\n $event,\r\n areaDropSlotKey(area, 0),\r\n isAreaDropSlotDisabled(area, 0)\r\n )\r\n \"\r\n (dragleave)=\"\r\n onDropSlotDragLeave($event, areaDropSlotKey(area, 0))\r\n \"\r\n (onDrop)=\"\r\n onDropToArea(\r\n $event,\r\n area,\r\n 0,\r\n isAreaDropSlotDisabled(area, 0)\r\n )\r\n \"\r\n ></div>\r\n\r\n @for (\r\n item of areaItems(area);\r\n track trackItem(item);\r\n let i = $index\r\n ) {\r\n @if (item.type === \"module\") {\r\n <div\r\n class=\"workspace-draggable-item flex min-h-11 cursor-grab items-center gap-3 rounded-lg border border-surface-200 bg-surface-0 px-3 py-2.5 transition-all duration-150 hover:-translate-y-0.5 hover:border-surface-300 hover:shadow-sm active:cursor-grabbing\"\r\n [attr.data-area]=\"area\"\r\n [attr.data-item-index]=\"i\"\r\n [pDraggable]=\"dropScope\"\r\n (onDragStart)=\"\r\n onModuleDragStart($event, item, {\r\n type: 'area',\r\n area: area,\r\n })\r\n \"\r\n (onDragEnd)=\"onDragEnd()\"\r\n >\r\n <span\r\n class=\"drag-handle flex size-8 shrink-0 items-center justify-center text-surface-500\"\r\n draggable=\"false\"\r\n >\r\n <mt-icon\r\n class=\"pointer-events-none text-xl text-primary\"\r\n icon=\"general.menu-05\"\r\n />\r\n </span>\r\n <span class=\"min-w-0 flex-1 truncate py-1.5\">{{\r\n item.name\r\n }}</span>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"workspace-group-card grid cursor-grab gap-3 rounded-md border border-surface-200 bg-surface-0 p-3 transition-all duration-150 hover:-translate-y-0.5 hover:border-surface-300 hover:shadow-sm active:cursor-grabbing\"\r\n [attr.data-area]=\"area\"\r\n [attr.data-item-index]=\"i\"\r\n [pDraggable]=\"dropScope\"\r\n (onDragStart)=\"onGroupDragStart($event, item, area)\"\r\n (onDragEnd)=\"onDragEnd()\"\r\n (dragover)=\"allowNativeDrop($event)\"\r\n (drop)=\"onNativeGroupDrop($event, area, item.id)\"\r\n >\r\n <div\r\n class=\"group-header flex flex-wrap items-center gap-2 rounded-lg border-2 border-surface-200 bg-surface-50/80 px-2 py-2\"\r\n [pDroppable]=\"dropScope\"\r\n (onDrop)=\"\r\n onDropToGroup(\r\n $event,\r\n area,\r\n item.id,\r\n item.modules.length\r\n )\r\n \"\r\n >\r\n <mt-button\r\n class=\"expand-btn\"\r\n [icon]=\"\r\n isGroupExpanded(item.id)\r\n ? 'arrow.chevron-up'\r\n : 'arrow.chevron-down'\r\n \"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n (onClick)=\"toggleGroup(item.id)\"\r\n />\r\n <span\r\n class=\"group-drag-handle flex size-8 shrink-0 items-center justify-center text-surface-500\"\r\n draggable=\"false\"\r\n >\r\n <mt-icon\r\n class=\"pointer-events-none text-xl text-primary\"\r\n icon=\"general.menu-05\"\r\n />\r\n </span>\r\n\r\n <span\r\n class=\"min-w-0 flex-1 truncate text-lg mx-1 font-semibold text-surface-600\"\r\n >{{ item.name }}</span\r\n >\r\n <mt-button\r\n icon=\"general.edit-05\"\r\n [tooltip]=\"t('rename-group')\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"startRenameGroup(item)\"\r\n />\r\n\r\n <mt-button\r\n icon=\"general.trash-01\"\r\n [tooltip]=\"t('delete-group')\"\r\n severity=\"danger\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"deleteGroup(item.id, $event)\"\r\n />\r\n </div>\r\n\r\n @if (isGroupExpanded(item.id)) {\r\n <div\r\n class=\"group-modules grid gap-2 border-t-2 border-dashed border-surface-300 pt-3\"\r\n [pDroppable]=\"dropScope\"\r\n (onDrop)=\"\r\n onDropToGroup(\r\n $event,\r\n area,\r\n item.id,\r\n item.modules.length\r\n )\r\n \"\r\n >\r\n <div\r\n class=\"drop-slot\"\r\n [class.drop-slot-active]=\"\r\n activeDropSlotKey() ===\r\n groupDropSlotKey(area, item.id, 0)\r\n \"\r\n [class.drop-slot-disabled]=\"\r\n isGroupDropSlotDisabled(area, item.id, 0)\r\n \"\r\n [pDroppable]=\"dropScope\"\r\n (dragover)=\"\r\n onDropSlotDragOver(\r\n $event,\r\n groupDropSlotKey(area, item.id, 0),\r\n isGroupDropSlotDisabled(area, item.id, 0)\r\n )\r\n \"\r\n (dragleave)=\"\r\n onDropSlotDragLeave(\r\n $event,\r\n groupDropSlotKey(area, item.id, 0)\r\n )\r\n \"\r\n (onDrop)=\"\r\n onDropToGroup(\r\n $event,\r\n area,\r\n item.id,\r\n 0,\r\n isGroupDropSlotDisabled(area, item.id, 0)\r\n )\r\n \"\r\n ></div>\r\n\r\n @for (\r\n module of item.modules;\r\n track module.id;\r\n let j = $index\r\n ) {\r\n <div\r\n class=\"workspace-draggable-item workspace-group-module-item ms-3 flex min-h-11 cursor-grab items-center gap-3 rounded-lg border border-surface-200 bg-surface-0 px-3 py-2.5 transition-all duration-150 hover:-translate-y-0.5 hover:border-surface-300 hover:shadow-sm active:cursor-grabbing\"\r\n [pDraggable]=\"dropScope\"\r\n (dragover)=\"allowNativeDrop($event)\"\r\n (drop)=\"\r\n onNativeGroupModuleDrop(\r\n $event,\r\n area,\r\n item.id,\r\n j\r\n )\r\n \"\r\n (onDragStart)=\"\r\n onModuleDragStart($event, module, {\r\n type: 'group',\r\n area: area,\r\n groupId: item.id,\r\n })\r\n \"\r\n (onDragEnd)=\"onDragEnd()\"\r\n >\r\n <span\r\n class=\"drag-handle flex size-8 shrink-0 items-center justify-center text-surface-500\"\r\n draggable=\"false\"\r\n >\r\n <mt-icon\r\n class=\"pointer-events-none text-xl text-primary\"\r\n icon=\"general.menu-05\"\r\n />\r\n </span>\r\n <span class=\"min-w-0 flex-1 truncate py-1.5\">{{\r\n module.name\r\n }}</span>\r\n <mt-button\r\n icon=\"general.minus\"\r\n [tooltip]=\"t('remove')\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n (onClick)=\"\r\n removeModuleFromGroup(\r\n area,\r\n item.id,\r\n module.id\r\n )\r\n \"\r\n />\r\n </div>\r\n\r\n <div\r\n class=\"drop-slot\"\r\n [class.drop-slot-active]=\"\r\n activeDropSlotKey() ===\r\n groupDropSlotKey(area, item.id, j + 1)\r\n \"\r\n [class.drop-slot-disabled]=\"\r\n isGroupDropSlotDisabled(area, item.id, j + 1)\r\n \"\r\n [pDroppable]=\"dropScope\"\r\n (dragover)=\"\r\n onDropSlotDragOver(\r\n $event,\r\n groupDropSlotKey(area, item.id, j + 1),\r\n isGroupDropSlotDisabled(area, item.id, j + 1)\r\n )\r\n \"\r\n (dragleave)=\"\r\n onDropSlotDragLeave(\r\n $event,\r\n groupDropSlotKey(area, item.id, j + 1)\r\n )\r\n \"\r\n (onDrop)=\"\r\n onDropToGroup(\r\n $event,\r\n area,\r\n item.id,\r\n j + 1,\r\n isGroupDropSlotDisabled(area, item.id, j + 1)\r\n )\r\n \"\r\n ></div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"drop-slot\"\r\n [class.drop-slot-active]=\"\r\n activeDropSlotKey() === areaDropSlotKey(area, i + 1)\r\n \"\r\n [class.drop-slot-disabled]=\"\r\n isAreaDropSlotDisabled(area, i + 1)\r\n \"\r\n [pDroppable]=\"dropScope\"\r\n (dragover)=\"\r\n onDropSlotDragOver(\r\n $event,\r\n areaDropSlotKey(area, i + 1),\r\n isAreaDropSlotDisabled(area, i + 1)\r\n )\r\n \"\r\n (dragleave)=\"\r\n onDropSlotDragLeave($event, areaDropSlotKey(area, i + 1))\r\n \"\r\n (onDrop)=\"\r\n onDropToArea(\r\n $event,\r\n area,\r\n i + 1,\r\n isAreaDropSlotDisabled(area, i + 1)\r\n )\r\n \"\r\n ></div>\r\n }\r\n\r\n @if (areaItems(area).length === 0) {\r\n <div\r\n class=\"empty-area grid min-h-32 place-items-center rounded-lg border border-dashed border-surface-300 bg-surface-0/80 px-4 py-6 text-center text-sm text-surface-500\"\r\n [pDroppable]=\"dropScope\"\r\n (onDrop)=\"onDropToArea($event, area, 0)\"\r\n >\r\n {{ t(\"empty-area\") }}\r\n </div>\r\n }\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n @if (showHeader()) {\r\n <mt-page [title]=\"t('title')\" avatarIcon=\"layout.layout-grid-01\">\r\n <ng-template #headerEnd>\r\n @if (!autoSave()) {\r\n <div class=\"flex items-center\">\r\n <mt-button\r\n [label]=\"t('save')\"\r\n icon=\"general.save-02\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n [loading]=\"isSavingLayout()\"\r\n [disabled]=\"\r\n isLoadingLayout() ||\r\n !!layoutError() ||\r\n isSavingLayout() ||\r\n validationErrors().length > 0\r\n \"\r\n (onClick)=\"onSaveClick()\"\r\n />\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"builderContent\" />\r\n </mt-page>\r\n } @else {\r\n <div class=\"w-full overflow-y-auto p-5\">\r\n @if (!autoSave()) {\r\n <div class=\"mb-4 flex justify-end\">\r\n <mt-button\r\n [label]=\"t('save')\"\r\n icon=\"general.save-02\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n [loading]=\"isSavingLayout()\"\r\n [disabled]=\"\r\n isLoadingLayout() ||\r\n !!layoutError() ||\r\n isSavingLayout() ||\r\n validationErrors().length > 0\r\n \"\r\n (onClick)=\"onSaveClick()\"\r\n />\r\n </div>\r\n }\r\n\r\n <ng-container [ngTemplateOutlet]=\"builderContent\" />\r\n </div>\r\n }\r\n</ng-container>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}