@simplysm/angular 14.0.19 → 14.0.21

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.
Files changed (125) hide show
  1. package/dist/core/provideSdAngular.js +1 -1
  2. package/dist/core/providers/sd-activated-modal.provider.d.ts +13 -0
  3. package/dist/core/providers/sd-activated-modal.provider.d.ts.map +1 -0
  4. package/dist/core/providers/sd-activated-modal.provider.js +15 -0
  5. package/dist/core/providers/sd-app-structure.provider.d.ts +3 -64
  6. package/dist/core/providers/sd-app-structure.provider.d.ts.map +1 -1
  7. package/dist/core/providers/sd-app-structure.provider.js +1 -252
  8. package/dist/core/providers/sd-app-structure.types.d.ts +52 -0
  9. package/dist/core/providers/sd-app-structure.types.d.ts.map +1 -0
  10. package/dist/core/providers/sd-app-structure.types.js +1 -0
  11. package/dist/core/providers/sd-app-structure.utils.d.ts +13 -0
  12. package/dist/core/providers/sd-app-structure.utils.d.ts.map +1 -0
  13. package/dist/core/providers/sd-app-structure.utils.js +250 -0
  14. package/dist/{ui/overlay/busy → core/providers}/sd-busy.provider.d.ts +1 -1
  15. package/dist/core/providers/sd-busy.provider.d.ts.map +1 -0
  16. package/dist/{ui/overlay/busy → core/providers}/sd-busy.provider.js +1 -1
  17. package/dist/core/providers/sd-print.provider.js +1 -1
  18. package/dist/core/providers/sd-service-client-factory.provider.js +1 -1
  19. package/dist/{ui/overlay/toast → core/providers}/sd-toast.provider.d.ts +1 -1
  20. package/dist/core/providers/sd-toast.provider.d.ts.map +1 -0
  21. package/dist/{ui/overlay/toast → core/providers}/sd-toast.provider.js +3 -3
  22. package/dist/core/types/select-modal-output-result.d.ts +8 -0
  23. package/dist/core/types/select-modal-output-result.d.ts.map +1 -0
  24. package/dist/core/types/select-modal-output-result.js +1 -0
  25. package/dist/core/utils/setups/setupCanDeactivate.js +1 -1
  26. package/dist/core/utils/useViewTitleSignal.js +1 -1
  27. package/dist/core/utils/useViewTypeSignal.js +1 -1
  28. package/dist/features/base/sd-base-container.control.js +1 -1
  29. package/dist/features/data-view/sd-data-detail.control.js +1 -1
  30. package/dist/features/data-view/sd-data-sheet.control.d.ts +24 -37
  31. package/dist/features/data-view/sd-data-sheet.control.d.ts.map +1 -1
  32. package/dist/features/data-view/sd-data-sheet.control.js +98 -152
  33. package/dist/features/data-view/sd-data-sheet.types.d.ts +17 -0
  34. package/dist/features/data-view/sd-data-sheet.types.d.ts.map +1 -0
  35. package/dist/features/data-view/sd-data-sheet.types.js +1 -0
  36. package/dist/{core/utils/setups → features/data-view}/setupCloserWhenSingleSelectionChange.d.ts +1 -1
  37. package/dist/features/data-view/setupCloserWhenSingleSelectionChange.d.ts.map +1 -0
  38. package/dist/features/data-view/useDataSheetExcelManager.d.ts +14 -0
  39. package/dist/features/data-view/useDataSheetExcelManager.d.ts.map +1 -0
  40. package/dist/features/data-view/useDataSheetExcelManager.js +31 -0
  41. package/dist/features/data-view/useDataSheetFilterManager.d.ts +13 -0
  42. package/dist/features/data-view/useDataSheetFilterManager.d.ts.map +1 -0
  43. package/dist/features/data-view/useDataSheetFilterManager.js +22 -0
  44. package/dist/features/data-view/useDataSheetInlineEditManager.d.ts +26 -0
  45. package/dist/features/data-view/useDataSheetInlineEditManager.d.ts.map +1 -0
  46. package/dist/features/data-view/useDataSheetInlineEditManager.js +54 -0
  47. package/dist/features/data-view/useDataSheetModalEditManager.d.ts +19 -0
  48. package/dist/features/data-view/useDataSheetModalEditManager.d.ts.map +1 -0
  49. package/dist/features/data-view/useDataSheetModalEditManager.js +44 -0
  50. package/dist/features/data-view/useDataSheetRefreshManager.d.ts +25 -0
  51. package/dist/features/data-view/useDataSheetRefreshManager.d.ts.map +1 -0
  52. package/dist/features/data-view/useDataSheetRefreshManager.js +50 -0
  53. package/dist/features/permission-table/sd-permission-table.control.d.ts +1 -1
  54. package/dist/features/permission-table/sd-permission-table.control.d.ts.map +1 -1
  55. package/dist/index.d.ts +12 -6
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +10 -5
  58. package/dist/ui/data/sheet/sd-sheet.control.d.ts +22 -30
  59. package/dist/ui/data/sheet/sd-sheet.control.d.ts.map +1 -1
  60. package/dist/ui/data/sheet/sd-sheet.control.js +52 -210
  61. package/dist/ui/data/sheet/useSheetCellStyling.d.ts +22 -0
  62. package/dist/ui/data/sheet/useSheetCellStyling.d.ts.map +1 -0
  63. package/dist/ui/data/sheet/useSheetCellStyling.js +95 -0
  64. package/dist/ui/data/sheet/useSheetColumnResizing.d.ts +17 -0
  65. package/dist/ui/data/sheet/useSheetColumnResizing.d.ts.map +1 -0
  66. package/dist/ui/data/sheet/useSheetColumnResizing.js +65 -0
  67. package/dist/ui/data/sheet/useSheetDisplayPipeline.d.ts +24 -0
  68. package/dist/ui/data/sheet/useSheetDisplayPipeline.d.ts.map +1 -0
  69. package/dist/ui/data/sheet/useSheetDisplayPipeline.js +52 -0
  70. package/dist/ui/form/button/sd-modal-select-button.control.d.ts +1 -7
  71. package/dist/ui/form/button/sd-modal-select-button.control.d.ts.map +1 -1
  72. package/dist/ui/form/button/sd-modal-select-button.control.js +1 -1
  73. package/dist/ui/form/choice/sd-state-preset.control.js +1 -1
  74. package/dist/ui/navigation/menu-utils.d.ts +2 -7
  75. package/dist/ui/navigation/menu-utils.d.ts.map +1 -1
  76. package/dist/ui/overlay/busy/sd-busy-container.control.d.ts +1 -1
  77. package/dist/ui/overlay/busy/sd-busy-container.control.d.ts.map +1 -1
  78. package/dist/ui/overlay/busy/sd-busy-container.control.js +1 -1
  79. package/dist/ui/overlay/modal/sd-modal.control.js +1 -1
  80. package/dist/ui/overlay/modal/sd-modal.provider.d.ts +0 -10
  81. package/dist/ui/overlay/modal/sd-modal.provider.d.ts.map +1 -1
  82. package/dist/ui/overlay/modal/sd-modal.provider.js +1 -13
  83. package/dist/ui/overlay/toast/sd-toast.control.d.ts +1 -1
  84. package/dist/ui/overlay/toast/sd-toast.control.d.ts.map +1 -1
  85. package/package.json +5 -5
  86. package/src/core/provideSdAngular.ts +1 -1
  87. package/src/core/providers/sd-activated-modal.provider.ts +12 -0
  88. package/src/core/providers/sd-app-structure.provider.ts +2 -405
  89. package/src/core/providers/sd-app-structure.types.ts +60 -0
  90. package/src/core/providers/sd-app-structure.utils.ts +350 -0
  91. package/src/{ui/overlay/busy → core/providers}/sd-busy.provider.ts +1 -1
  92. package/src/core/providers/sd-print.provider.ts +1 -1
  93. package/src/core/providers/sd-service-client-factory.provider.ts +1 -1
  94. package/src/{ui/overlay/toast → core/providers}/sd-toast.provider.ts +4 -4
  95. package/src/core/types/select-modal-output-result.ts +7 -0
  96. package/src/core/utils/setups/setupCanDeactivate.ts +1 -1
  97. package/src/core/utils/useViewTitleSignal.ts +1 -1
  98. package/src/core/utils/useViewTypeSignal.ts +1 -1
  99. package/src/features/base/sd-base-container.control.ts +1 -1
  100. package/src/features/data-view/sd-data-detail.control.ts +1 -1
  101. package/src/features/data-view/sd-data-sheet.control.ts +117 -216
  102. package/src/features/data-view/sd-data-sheet.types.ts +18 -0
  103. package/src/{core/utils/setups → features/data-view}/setupCloserWhenSingleSelectionChange.ts +1 -1
  104. package/src/features/data-view/useDataSheetExcelManager.ts +57 -0
  105. package/src/features/data-view/useDataSheetFilterManager.ts +30 -0
  106. package/src/features/data-view/useDataSheetInlineEditManager.ts +89 -0
  107. package/src/features/data-view/useDataSheetModalEditManager.ts +76 -0
  108. package/src/features/data-view/useDataSheetRefreshManager.ts +90 -0
  109. package/src/features/permission-table/sd-permission-table.control.ts +1 -1
  110. package/src/index.ts +17 -11
  111. package/src/ui/data/sheet/sd-sheet.control.ts +50 -238
  112. package/src/ui/data/sheet/useSheetCellStyling.ts +113 -0
  113. package/src/ui/data/sheet/useSheetColumnResizing.ts +92 -0
  114. package/src/ui/data/sheet/useSheetDisplayPipeline.ts +64 -0
  115. package/src/ui/form/button/sd-modal-select-button.control.ts +1 -8
  116. package/src/ui/form/choice/sd-state-preset.control.ts +1 -1
  117. package/src/ui/navigation/menu-utils.ts +3 -7
  118. package/src/ui/overlay/busy/sd-busy-container.control.ts +1 -1
  119. package/src/ui/overlay/modal/sd-modal.control.ts +1 -1
  120. package/src/ui/overlay/modal/sd-modal.provider.ts +1 -10
  121. package/src/ui/overlay/toast/sd-toast.control.ts +1 -1
  122. package/dist/core/utils/setups/setupCloserWhenSingleSelectionChange.d.ts.map +0 -1
  123. package/dist/ui/overlay/busy/sd-busy.provider.d.ts.map +0 -1
  124. package/dist/ui/overlay/toast/sd-toast.provider.d.ts.map +0 -1
  125. /package/dist/{core/utils/setups → features/data-view}/setupCloserWhenSingleSelectionChange.js +0 -0
@@ -5,7 +5,7 @@ import { toSignal } from "@angular/core/rxjs-interop";
5
5
  import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router, } from "@angular/router";
6
6
  import { SwUpdate } from "@angular/service-worker";
7
7
  import { provideNgIconsConfig } from "@ng-icons/core";
8
- import { SdBusyProvider } from "../ui/overlay/busy/sd-busy.provider";
8
+ import { SdBusyProvider } from "./providers/sd-busy.provider";
9
9
  import { SdAngularConfigProvider } from "./providers/sd-angular-config.provider";
10
10
  import { SdThemeProvider } from "./providers/sd-theme-provider";
11
11
  import { SdLocalStorageProvider } from "./providers/sd-local-storage.provider";
@@ -0,0 +1,13 @@
1
+ import type { ISdModal } from "../../ui/overlay/modal/sd-modal.provider";
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * 모달 내부에서 inject하여 사용하는 프로바이더
5
+ */
6
+ export declare class SdActivatedModalProvider<T extends ISdModal<any> = ISdModal<any>> {
7
+ modalComponent: import("@angular/core").WritableSignal<any>;
8
+ contentComponent: import("@angular/core").WritableSignal<T | undefined>;
9
+ canDeactiveFn: () => boolean;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdActivatedModalProvider<any>, never>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<SdActivatedModalProvider<any>>;
12
+ }
13
+ //# sourceMappingURL=sd-activated-modal.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sd-activated-modal.provider.d.ts","sourceRoot":"","sources":["../../../src/core/providers/sd-activated-modal.provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;;AAEzE;;GAEG;AACH,qBACa,wBAAwB,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC;IAC3E,cAAc,8CAA0B;IACxC,gBAAgB,wDAAoC;IACpD,aAAa,EAAE,MAAM,OAAO,CAAc;yCAH/B,wBAAwB;6CAAxB,wBAAwB;CAIpC"}
@@ -0,0 +1,15 @@
1
+ import { Injectable, signal } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * 모달 내부에서 inject하여 사용하는 프로바이더
5
+ */
6
+ export class SdActivatedModalProvider {
7
+ modalComponent = signal(undefined, ...(ngDevMode ? [{ debugName: "modalComponent" }] : /* istanbul ignore next */ []));
8
+ contentComponent = signal(undefined, ...(ngDevMode ? [{ debugName: "contentComponent" }] : /* istanbul ignore next */ []));
9
+ canDeactiveFn = () => true;
10
+ static ɵfac = function SdActivatedModalProvider_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdActivatedModalProvider)(); };
11
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SdActivatedModalProvider, factory: SdActivatedModalProvider.ɵfac });
12
+ }
13
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdActivatedModalProvider, [{
14
+ type: Injectable
15
+ }], null, null); })();
@@ -1,79 +1,18 @@
1
1
  import type { Signal } from "@angular/core";
2
+ import type { TSdAppStructureItem, ISdFlatMenu } from "./sd-app-structure.types";
2
3
  import * as i0 from "@angular/core";
3
4
  export declare function usePermsSignal<K extends string>(viewCodes: string[], keys: K[]): Signal<K[]>;
4
5
  export declare abstract class SdAppStructureProvider<TModule = unknown> {
5
6
  abstract items: TSdAppStructureItem<TModule>[];
6
7
  abstract usableModules: Signal<TModule[] | undefined>;
7
8
  abstract permRecord: Signal<Record<string, boolean> | undefined>;
8
- usableMenus: Signal<ISdMenu<TModule>[]>;
9
+ usableMenus: Signal<import("./sd-app-structure.types").ISdMenu[]>;
9
10
  usableFlatMenus: Signal<ISdFlatMenu<TModule>[]>;
10
- getPermissionsByStructure(items: TSdAppStructureItem<TModule>[], codeChain?: string[]): ISdPermission<TModule>[];
11
+ getPermissionsByStructure(items: TSdAppStructureItem<TModule>[], codeChain?: string[]): import("./sd-app-structure.types").ISdPermission<TModule>[];
11
12
  getTitleByFullCode(fullCode: string): string;
12
13
  getItemChainByFullCode(fullCode: string): TSdAppStructureItem<TModule>[];
13
14
  getPermsByFullCode<K extends string>(fullCodes: string[], permKeys: K[]): K[];
14
15
  static ɵfac: i0.ɵɵFactoryDeclaration<SdAppStructureProvider<any>, never>;
15
16
  static ɵprov: i0.ɵɵInjectableDeclaration<SdAppStructureProvider<any>>;
16
17
  }
17
- export declare abstract class SdAppStructureUtils {
18
- static getTitleByFullCode<TModule>(items: TSdAppStructureItem<TModule>[], fullCode: string): string;
19
- static getPermsByFullCode<TModule, K extends string>(items: TSdAppStructureItem<TModule>[], fullCodes: string[], permKeys: K[], permRecord: Record<string, boolean> | undefined): K[];
20
- static getItemChainByFullCode<TModule>(items: TSdAppStructureItem<TModule>[], fullCode: string): TSdAppStructureItem<TModule>[];
21
- static getMenus<TModule>(items: TSdAppStructureItem<TModule>[], codeChain: string[], usableModules: TModule[] | undefined, permRecord: Record<string, boolean> | undefined): ISdMenu<TModule>[];
22
- static getFlatMenus<TModule>(items: TSdAppStructureItem<TModule>[], usableModules: TModule[] | undefined, permRecord: Record<string, boolean> | undefined): ISdFlatMenu<TModule>[];
23
- static getPermissions<TModule>(items: TSdAppStructureItem<TModule>[], codeChain: string[], usableModules: TModule[] | undefined): ISdPermission<TModule>[];
24
- static getFlatPermissions<TModule>(items: TSdAppStructureItem<TModule>[], usableModules: TModule[] | undefined): ISdFlatPermission<TModule>[];
25
- private static _isUsableModulesChain;
26
- private static _isUsableModules;
27
- }
28
- export type TSdAppStructureItem<TModule = unknown> = ISdAppStructureGroupItem<TModule> | ISdAppStructureLeafItem<TModule>;
29
- interface ISdAppStructureGroupItem<TModule> {
30
- code: string;
31
- title: string;
32
- modules?: TModule[];
33
- requiredModules?: TModule[];
34
- icon?: string;
35
- children: TSdAppStructureItem<TModule>[];
36
- }
37
- interface ISdAppStructureLeafItem<TModule> {
38
- code: string;
39
- title: string;
40
- modules?: TModule[];
41
- requiredModules?: TModule[];
42
- perms?: ("use" | "edit")[];
43
- subPerms?: ISdAppStructureSubPermission<TModule>[];
44
- icon?: string;
45
- isNotMenu?: boolean;
46
- }
47
- interface ISdAppStructureSubPermission<TModule> {
48
- code: string;
49
- title: string;
50
- modules?: TModule[];
51
- requiredModules?: TModule[];
52
- perms: ("use" | "edit")[];
53
- }
54
- export interface ISdMenu<TModule = unknown> {
55
- title: string;
56
- codeChain: string[];
57
- icon: string | undefined;
58
- modules: TModule[] | undefined;
59
- children: ISdMenu<TModule>[] | undefined;
60
- }
61
- export interface ISdFlatMenu<TModule = unknown> {
62
- titleChain: string[];
63
- codeChain: string[];
64
- modulesChain: TModule[][];
65
- }
66
- export interface ISdPermission<TModule = unknown> {
67
- title: string;
68
- codeChain: string[];
69
- modules: TModule[] | undefined;
70
- perms: ("use" | "edit")[] | undefined;
71
- children: ISdPermission<TModule>[] | undefined;
72
- }
73
- export interface ISdFlatPermission<TModule = unknown> {
74
- titleChain: string[];
75
- codeChain: string[];
76
- modulesChain: TModule[][];
77
- }
78
- export {};
79
18
  //# sourceMappingURL=sd-app-structure.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sd-app-structure.provider.d.ts","sourceRoot":"","sources":["../../../src/core/providers/sd-app-structure.provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sd-app-structure.provider.d.ts","sourceRoot":"","sources":["../../../src/core/providers/sd-app-structure.provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;;AAGjF,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAG5F;AAID,8BACsB,sBAAsB,CAAC,OAAO,GAAG,OAAO;IAC5D,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IAEjE,WAAW,uDAET;IACF,eAAe,iCAEb;IAEF,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,GAAE,MAAM,EAAO;IAIzF,kBAAkB,CAAC,QAAQ,EAAE,MAAM;IAInC,sBAAsB,CAAC,QAAQ,EAAE,MAAM;IAIvC,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;yCAxBzD,sBAAsB;6CAAtB,sBAAsB;CAgC3C"}
@@ -1,4 +1,5 @@
1
1
  import { computed, inject, Injectable } from "@angular/core";
2
+ import { SdAppStructureUtils } from "./sd-app-structure.utils";
2
3
  import * as i0 from "@angular/core";
3
4
  export function usePermsSignal(viewCodes, keys) {
4
5
  const sdAppStructure = inject(SdAppStructureProvider);
@@ -28,255 +29,3 @@ export class SdAppStructureProvider {
28
29
  type: Injectable,
29
30
  args: [{ providedIn: "root" }]
30
31
  }], null, null); })();
31
- export class SdAppStructureUtils {
32
- //---------- Info
33
- static getTitleByFullCode(items, fullCode) {
34
- const itemChain = this.getItemChainByFullCode(items, fullCode);
35
- if (itemChain.length === 0) {
36
- throw new Error(`Item not found for fullCode: ${fullCode}`);
37
- }
38
- const parent = itemChain
39
- .slice(0, -1)
40
- .map((item) => item.title)
41
- .join(" > ");
42
- const current = itemChain.last().title;
43
- return (parent ? `[${parent}] ` : "") + current;
44
- }
45
- static getPermsByFullCode(items, fullCodes, permKeys, permRecord) {
46
- if (permRecord === undefined)
47
- return [];
48
- const result = [];
49
- for (const permKey of permKeys) {
50
- // 해당 권한이 설정되어있거나
51
- if (fullCodes.some((fullCode) => permRecord[fullCode + "." + permKey])) {
52
- result.push(permKey);
53
- }
54
- // 권한이라는것이 아얘 존재하지 않거나
55
- else if (fullCodes.every((fullCode) => {
56
- const item = this.getItemChainByFullCode(items, fullCode).last();
57
- return item != null && !("perms" in item);
58
- })) {
59
- result.push(permKey);
60
- }
61
- }
62
- return result;
63
- }
64
- static getItemChainByFullCode(items, fullCode) {
65
- const codeChain = fullCode.split(".");
66
- const result = [];
67
- let cursorChildren = items;
68
- for (const currCode of codeChain) {
69
- const cursor = cursorChildren.single((item) => item.code === currCode);
70
- if (cursor == null)
71
- return [];
72
- cursorChildren = "children" in cursor ? cursor.children : [];
73
- result.push(cursor);
74
- }
75
- return result;
76
- }
77
- //---------- Menus
78
- static getMenus(items, codeChain, usableModules, permRecord) {
79
- const resultMenus = [];
80
- for (const item of items) {
81
- if ("isNotMenu" in item && item.isNotMenu)
82
- continue;
83
- const currCodeChain = [...codeChain, item.code];
84
- // 모듈 활성화 여부 확인
85
- if (!this._isUsableModules(item.modules, item.requiredModules, usableModules))
86
- continue;
87
- // 그룹 메뉴
88
- if ("children" in item) {
89
- const children = this.getMenus(item.children, currCodeChain, usableModules, permRecord);
90
- // 자식 중 표시 가능한 게 있으면 그룹 메뉴 포함
91
- if (children.length > 0) {
92
- resultMenus.push({
93
- title: item.title,
94
- icon: item.icon,
95
- codeChain: currCodeChain,
96
- modules: item.modules,
97
- children,
98
- });
99
- }
100
- }
101
- // Leaf 메뉴
102
- else {
103
- const code = currCodeChain.join(".");
104
- if (item.perms != null && !permRecord?.[code + ".use"])
105
- continue;
106
- resultMenus.push({
107
- title: item.title,
108
- icon: item.icon,
109
- codeChain: currCodeChain,
110
- modules: item.modules,
111
- children: undefined,
112
- });
113
- }
114
- }
115
- return resultMenus;
116
- }
117
- static getFlatMenus(items, usableModules, permRecord) {
118
- const resultFlatMenus = [];
119
- const queue = items.map((item) => ({
120
- item,
121
- titleChain: [],
122
- codeChain: [],
123
- modulesChain: [],
124
- requiredModulesChain: [],
125
- }));
126
- while (queue.length > 0) {
127
- const { item, titleChain, codeChain, modulesChain, requiredModulesChain } = queue.shift();
128
- if ("isNotMenu" in item && item.isNotMenu)
129
- continue;
130
- const currTitleChain = [...titleChain, item.title];
131
- const currCodeChain = [...codeChain, item.code];
132
- const currModulesChain = item.modules ? [...modulesChain, item.modules] : modulesChain;
133
- const currRequiredModulesChain = item.requiredModules
134
- ? [...requiredModulesChain, item.requiredModules]
135
- : requiredModulesChain;
136
- if (!this._isUsableModulesChain(currModulesChain, currRequiredModulesChain, usableModules))
137
- continue;
138
- if ("children" in item) {
139
- for (const child of item.children) {
140
- queue.push({
141
- item: child,
142
- titleChain: currTitleChain,
143
- codeChain: currCodeChain,
144
- modulesChain: currModulesChain,
145
- requiredModulesChain: currRequiredModulesChain,
146
- });
147
- }
148
- }
149
- else if (item.perms == null || Boolean(permRecord?.[currCodeChain.join(".") + ".use"])) {
150
- resultFlatMenus.push({
151
- titleChain: currTitleChain,
152
- codeChain: currCodeChain,
153
- modulesChain: currModulesChain,
154
- });
155
- }
156
- }
157
- return resultFlatMenus;
158
- }
159
- //---------- Perms
160
- static getPermissions(items, codeChain, usableModules) {
161
- const results = [];
162
- for (const item of items) {
163
- const currCodeChain = [...codeChain, item.code];
164
- // 모듈 활성화 여부 확인
165
- if (!this._isUsableModules(item.modules, item.requiredModules, usableModules))
166
- continue;
167
- // 그룹
168
- if ("children" in item) {
169
- const children = this.getPermissions(item.children, currCodeChain, usableModules);
170
- results.push({
171
- title: item.title,
172
- codeChain: currCodeChain,
173
- modules: item.modules,
174
- perms: undefined,
175
- children: children,
176
- });
177
- }
178
- // Leaf
179
- else {
180
- results.push({
181
- title: item.title,
182
- codeChain: currCodeChain,
183
- perms: item.perms,
184
- modules: item.modules,
185
- children: item.subPerms?.map((subPerm) => ({
186
- title: subPerm.title,
187
- codeChain: [...currCodeChain, subPerm.code],
188
- perms: subPerm.perms,
189
- modules: subPerm.modules,
190
- children: undefined,
191
- })),
192
- });
193
- }
194
- }
195
- return results;
196
- }
197
- static getFlatPermissions(items, usableModules) {
198
- const results = [];
199
- const queue = items.map((item) => ({
200
- item,
201
- titleChain: [],
202
- codeChain: [],
203
- modulesChain: [],
204
- requiredModulesChain: [],
205
- }));
206
- while (queue.length > 0) {
207
- const { item, titleChain, codeChain, modulesChain, requiredModulesChain } = queue.shift();
208
- const currTitleChain = [...titleChain, item.title];
209
- const currCodeChain = [...codeChain, item.code];
210
- const currModulesChain = item.modules ? [...modulesChain, item.modules] : modulesChain;
211
- const currRequiredModulesChain = item.requiredModules
212
- ? [...requiredModulesChain, item.requiredModules]
213
- : requiredModulesChain;
214
- if (!this._isUsableModulesChain(currModulesChain, currRequiredModulesChain, usableModules))
215
- continue;
216
- // 1. 자식 enqueue
217
- if ("children" in item) {
218
- for (const child of item.children) {
219
- queue.push({
220
- item: child,
221
- titleChain: currTitleChain,
222
- codeChain: currCodeChain,
223
- modulesChain: currModulesChain,
224
- requiredModulesChain: currRequiredModulesChain,
225
- });
226
- }
227
- }
228
- // 1. 직접 perms 처리
229
- if ("perms" in item) {
230
- for (const perm of item.perms ?? []) {
231
- results.push({
232
- titleChain: currTitleChain,
233
- codeChain: [...currCodeChain, perm],
234
- modulesChain: currModulesChain,
235
- });
236
- }
237
- }
238
- // 2. subPerms 처리
239
- if ("subPerms" in item) {
240
- for (const subPerm of item.subPerms ?? []) {
241
- // subPerm도 모듈 체크
242
- if (!this._isUsableModules(subPerm.modules, subPerm.requiredModules, usableModules))
243
- continue;
244
- for (const perm of subPerm.perms) {
245
- results.push({
246
- titleChain: currTitleChain,
247
- codeChain: [...currCodeChain, subPerm.code, perm],
248
- modulesChain: [...currModulesChain, subPerm.modules ?? []],
249
- });
250
- }
251
- }
252
- }
253
- }
254
- return results;
255
- }
256
- //-- Modules (private)
257
- static _isUsableModulesChain(modulesChain, requiredModulesChain, usableModules) {
258
- // 각 레벨의 modules (OR) 체크
259
- for (const modules of modulesChain) {
260
- if (!this._isUsableModules(modules, undefined, usableModules)) {
261
- return false;
262
- }
263
- }
264
- // 각 레벨의 requiredModules (AND) 체크
265
- for (const requiredModules of requiredModulesChain) {
266
- if (!this._isUsableModules(undefined, requiredModules, usableModules)) {
267
- return false;
268
- }
269
- }
270
- return true;
271
- }
272
- static _isUsableModules(modules, requiredModules, usableModules) {
273
- // 1. requiredModules: 모두 있어야 함 (AND)
274
- if (requiredModules && requiredModules.length > 0) {
275
- if (!requiredModules.every((m) => usableModules?.includes(m))) {
276
- return false;
277
- }
278
- }
279
- // 2. modules: 하나라도 있으면 됨 (OR)
280
- return (modules == null || modules.length === 0 || modules.some((m) => usableModules?.includes(m)));
281
- }
282
- }
@@ -0,0 +1,52 @@
1
+ export type TSdAppStructureItem<TModule = unknown> = ISdAppStructureGroupItem<TModule> | ISdAppStructureLeafItem<TModule>;
2
+ export interface ISdAppStructureGroupItem<TModule> {
3
+ code: string;
4
+ title: string;
5
+ modules?: TModule[];
6
+ requiredModules?: TModule[];
7
+ icon?: string;
8
+ children: TSdAppStructureItem<TModule>[];
9
+ }
10
+ export interface ISdAppStructureLeafItem<TModule> {
11
+ code: string;
12
+ title: string;
13
+ modules?: TModule[];
14
+ requiredModules?: TModule[];
15
+ perms?: ("use" | "edit")[];
16
+ subPerms?: ISdAppStructureSubPermission<TModule>[];
17
+ icon?: string;
18
+ url?: string;
19
+ isNotMenu?: boolean;
20
+ }
21
+ export interface ISdAppStructureSubPermission<TModule> {
22
+ code: string;
23
+ title: string;
24
+ modules?: TModule[];
25
+ requiredModules?: TModule[];
26
+ perms: ("use" | "edit")[];
27
+ }
28
+ export interface ISdMenu {
29
+ title: string;
30
+ codeChain: string[];
31
+ url?: string;
32
+ icon?: string;
33
+ children?: ISdMenu[];
34
+ }
35
+ export interface ISdFlatMenu<TModule = unknown> {
36
+ titleChain: string[];
37
+ codeChain: string[];
38
+ modulesChain: TModule[][];
39
+ }
40
+ export interface ISdPermission<TModule = unknown> {
41
+ title: string;
42
+ codeChain: string[];
43
+ modules: TModule[] | undefined;
44
+ perms: ("use" | "edit")[] | undefined;
45
+ children: ISdPermission<TModule>[] | undefined;
46
+ }
47
+ export interface ISdFlatPermission<TModule = unknown> {
48
+ titleChain: string[];
49
+ codeChain: string[];
50
+ modulesChain: TModule[][];
51
+ }
52
+ //# sourceMappingURL=sd-app-structure.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sd-app-structure.types.d.ts","sourceRoot":"","sources":["../../../src/core/providers/sd-app-structure.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,CAAC,OAAO,GAAG,OAAO,IAC7C,wBAAwB,CAAC,OAAO,CAAC,GACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAErC,MAAM,WAAW,wBAAwB,CAAC,OAAO;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,uBAAuB,CAAC,OAAO;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,4BAA4B,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B,CAAC,OAAO;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,KAAK,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW,CAAC,OAAO,GAAG,OAAO;IAC5C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa,CAAC,OAAO,GAAG,OAAO;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;IACtC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,iBAAiB,CAAC,OAAO,GAAG,OAAO;IAClD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;CAC3B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { TSdAppStructureItem, ISdMenu, ISdFlatMenu, ISdPermission, ISdFlatPermission } from "./sd-app-structure.types";
2
+ export declare abstract class SdAppStructureUtils {
3
+ static getTitleByFullCode<TModule>(items: TSdAppStructureItem<TModule>[], fullCode: string): string;
4
+ static getPermsByFullCode<TModule, K extends string>(items: TSdAppStructureItem<TModule>[], fullCodes: string[], permKeys: K[], permRecord: Record<string, boolean> | undefined): K[];
5
+ static getItemChainByFullCode<TModule>(items: TSdAppStructureItem<TModule>[], fullCode: string): TSdAppStructureItem<TModule>[];
6
+ static getMenus<TModule>(items: TSdAppStructureItem<TModule>[], codeChain: string[], usableModules: TModule[] | undefined, permRecord: Record<string, boolean> | undefined): ISdMenu[];
7
+ static getFlatMenus<TModule>(items: TSdAppStructureItem<TModule>[], usableModules: TModule[] | undefined, permRecord: Record<string, boolean> | undefined): ISdFlatMenu<TModule>[];
8
+ static getPermissions<TModule>(items: TSdAppStructureItem<TModule>[], codeChain: string[], usableModules: TModule[] | undefined): ISdPermission<TModule>[];
9
+ static getFlatPermissions<TModule>(items: TSdAppStructureItem<TModule>[], usableModules: TModule[] | undefined): ISdFlatPermission<TModule>[];
10
+ private static _isUsableModulesChain;
11
+ private static _isUsableModules;
12
+ }
13
+ //# sourceMappingURL=sd-app-structure.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sd-app-structure.utils.d.ts","sourceRoot":"","sources":["../../../src/core/providers/sd-app-structure.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,OAAO,EACP,WAAW,EACX,aAAa,EACb,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAElC,8BAAsB,mBAAmB;IAGvC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM;IAa1F,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,SAAS,MAAM,EACjD,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,CAAC,EAAE,EACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,CAAC,EAAE;IAuBN,MAAM,CAAC,sBAAsB,CAAC,OAAO,EACnC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,QAAQ,EAAE,MAAM,GACf,mBAAmB,CAAC,OAAO,CAAC,EAAE;IAkBjC,MAAM,CAAC,QAAQ,CAAC,OAAO,EACrB,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,OAAO,EAAE,GAAG,SAAS,EACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,OAAO,EAAE;IA2CZ,MAAM,CAAC,YAAY,CAAC,OAAO,EACzB,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,aAAa,EAAE,OAAO,EAAE,GAAG,SAAS,EACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,WAAW,CAAC,OAAO,CAAC,EAAE;IA0DzB,MAAM,CAAC,cAAc,CAAC,OAAO,EAC3B,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,OAAO,EAAE,GAAG,SAAS,GACnC,aAAa,CAAC,OAAO,CAAC,EAAE;IAyC3B,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAC/B,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,EACrC,aAAa,EAAE,OAAO,EAAE,GAAG,SAAS;IAgFtC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAsBpC,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAiBhC"}