@simplysm/angular 14.0.37 → 14.0.39

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 (98) hide show
  1. package/dist/controls/checkbox/sd-checkbox.d.ts +1 -1
  2. package/dist/controls/checkbox/sd-checkbox.d.ts.map +1 -1
  3. package/dist/controls/checkbox/sd-checkbox.js +8 -5
  4. package/dist/controls/checkbox/sd-switch.d.ts +3 -1
  5. package/dist/controls/checkbox/sd-switch.d.ts.map +1 -1
  6. package/dist/controls/checkbox/sd-switch.js +11 -5
  7. package/dist/controls/dropdown/sd-dropdown.js +8 -8
  8. package/dist/controls/input/{sd-date-range.picker.d.ts → sd-date-range-picker.d.ts} +1 -1
  9. package/dist/controls/input/{sd-date-range.picker.d.ts.map → sd-date-range-picker.d.ts.map} +1 -1
  10. package/dist/controls/input/{sd-date-range.picker.js → sd-date-range-picker.js} +1 -1
  11. package/dist/controls/input/sd-textfield.d.ts.map +1 -1
  12. package/dist/controls/input/sd-textfield.js +1 -0
  13. package/dist/core/error-handler/sd-global-error-handler.plugin.d.ts.map +1 -1
  14. package/dist/core/error-handler/sd-global-error-handler.plugin.js +7 -2
  15. package/dist/core/modal/sd-activated-modal.provider.d.ts +1 -1
  16. package/dist/core/modal/sd-activated-modal.provider.d.ts.map +1 -1
  17. package/dist/core/modal/sd-activated-modal.provider.js +1 -1
  18. package/dist/core/modal/sd-modal.d.ts +2 -3
  19. package/dist/core/modal/sd-modal.d.ts.map +1 -1
  20. package/dist/core/modal/sd-modal.js +9 -10
  21. package/dist/core/modal/sd-modal.provider.d.ts +0 -1
  22. package/dist/core/modal/sd-modal.provider.d.ts.map +1 -1
  23. package/dist/core/modal/sd-modal.provider.js +14 -6
  24. package/dist/core/routing/sd-navigate-window.provider.d.ts.map +1 -1
  25. package/dist/core/routing/sd-navigate-window.provider.js +3 -1
  26. package/dist/core/routing/setupCanDeactivate.js +1 -1
  27. package/dist/core/selection/useSelectionManager.d.ts.map +1 -1
  28. package/dist/core/selection/useSelectionManager.js +4 -3
  29. package/dist/core/setupModelHook.d.ts.map +1 -1
  30. package/dist/core/setupModelHook.js +18 -1
  31. package/dist/core/shared-data/sd-shared-data.provider.d.ts.map +1 -1
  32. package/dist/core/shared-data/sd-shared-data.provider.js +12 -3
  33. package/dist/data/data-detail/sd-data-detail.base.d.ts +1 -1
  34. package/dist/data/data-detail/sd-data-detail.base.d.ts.map +1 -1
  35. package/dist/data/data-detail/sd-data-detail.base.js +24 -19
  36. package/dist/data/data-sheet/injectDataSheetExcelManager.js +1 -1
  37. package/dist/data/data-sheet/injectDataSheetModalEditManager.js +1 -1
  38. package/dist/data/data-sheet/sd-data-sheet.base.d.ts +1 -2
  39. package/dist/data/data-sheet/sd-data-sheet.base.d.ts.map +1 -1
  40. package/dist/data/data-sheet/sd-data-sheet.base.js +5 -13
  41. package/dist/data/getOrmDataEditToastErrorMessage.d.ts +2 -0
  42. package/dist/data/getOrmDataEditToastErrorMessage.d.ts.map +1 -0
  43. package/dist/data/getOrmDataEditToastErrorMessage.js +8 -0
  44. package/dist/data/permission-table/sd-permission-table.d.ts +1 -1
  45. package/dist/data/permission-table/sd-permission-table.d.ts.map +1 -1
  46. package/dist/data/permission-table/sd-permission-table.js +6 -5
  47. package/dist/data/shared-data/sd-shared-data-select.d.ts +1 -0
  48. package/dist/data/shared-data/sd-shared-data-select.d.ts.map +1 -1
  49. package/dist/data/shared-data/sd-shared-data-select.js +15 -7
  50. package/dist/data/sheet/injectSheetColumnResizing.d.ts.map +1 -1
  51. package/dist/data/sheet/injectSheetColumnResizing.js +1 -0
  52. package/dist/data/state-preset/sd-state-preset.d.ts.map +1 -1
  53. package/dist/data/state-preset/sd-state-preset.js +4 -0
  54. package/dist/features/address/sd-address-search.modal.d.ts +2 -1
  55. package/dist/features/address/sd-address-search.modal.d.ts.map +1 -1
  56. package/dist/features/address/sd-address-search.modal.js +69 -23
  57. package/dist/features/editor/sd-tiptap-editor.d.ts.map +1 -1
  58. package/dist/features/editor/sd-tiptap-editor.js +3 -1
  59. package/dist/features/visual/sd-barcode.d.ts.map +1 -1
  60. package/dist/features/visual/sd-barcode.js +10 -5
  61. package/dist/index.d.ts +2 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +3 -1
  64. package/dist/layout/base-container/sd-base-container.d.ts +1 -0
  65. package/dist/layout/base-container/sd-base-container.d.ts.map +1 -1
  66. package/dist/layout/base-container/sd-base-container.js +5 -2
  67. package/dist/layout/dock/sd-dock.d.ts.map +1 -1
  68. package/dist/layout/dock/sd-dock.js +1 -0
  69. package/package.json +8 -7
  70. package/src/controls/checkbox/sd-checkbox.ts +7 -3
  71. package/src/controls/checkbox/sd-switch.ts +8 -2
  72. package/src/controls/dropdown/sd-dropdown.ts +8 -8
  73. package/src/controls/input/sd-textfield.ts +1 -0
  74. package/src/core/error-handler/sd-global-error-handler.plugin.ts +6 -2
  75. package/src/core/modal/sd-activated-modal.provider.ts +1 -1
  76. package/src/core/modal/sd-modal.provider.ts +13 -7
  77. package/src/core/modal/sd-modal.ts +6 -6
  78. package/src/core/routing/sd-navigate-window.provider.ts +3 -1
  79. package/src/core/routing/setupCanDeactivate.ts +1 -1
  80. package/src/core/selection/useSelectionManager.ts +5 -3
  81. package/src/core/setupModelHook.ts +21 -1
  82. package/src/core/shared-data/sd-shared-data.provider.ts +13 -2
  83. package/src/data/data-detail/sd-data-detail.base.ts +27 -23
  84. package/src/data/data-sheet/injectDataSheetExcelManager.ts +1 -1
  85. package/src/data/data-sheet/injectDataSheetModalEditManager.ts +1 -1
  86. package/src/data/data-sheet/sd-data-sheet.base.ts +5 -16
  87. package/src/data/getOrmDataEditToastErrorMessage.ts +10 -0
  88. package/src/data/permission-table/sd-permission-table.ts +7 -6
  89. package/src/data/shared-data/sd-shared-data-select.ts +24 -13
  90. package/src/data/sheet/injectSheetColumnResizing.ts +2 -0
  91. package/src/data/state-preset/sd-state-preset.ts +6 -0
  92. package/src/features/address/sd-address-search.modal.ts +75 -31
  93. package/src/features/editor/sd-tiptap-editor.ts +2 -0
  94. package/src/features/visual/sd-barcode.ts +9 -5
  95. package/src/index.ts +4 -1
  96. package/src/layout/base-container/sd-base-container.ts +4 -1
  97. package/src/layout/dock/sd-dock.ts +2 -0
  98. /package/src/controls/input/{sd-date-range.picker.ts → sd-date-range-picker.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"sd-shared-data.provider.d.ts","sourceRoot":"","sources":["../../../src/core/shared-data/sd-shared-data.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsD,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAIrH,OAAO,uBAAuB,CAAC;;AAE/B,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IAC1D,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;IACzE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACnB,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC;CACtD;AAED,eAAO,MAAM,uBAAuB;UAC1B,MAAM;YAAU,OAAO;mCAEV,CAAC;AAWxB,8BACsB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAClG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0C;IACzE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IAEtD,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC,CAAa;IAE1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IAEpE,QAAQ,CAAC,UAAU,IAAI,IAAI;IAE3B,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAmC/E,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAchE,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,EACxC,IAAI,EAAE,CAAC,EACP,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAC/B,OAAO,CAAC,IAAI,CAAC;IAcV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,OAAO,CAAC,cAAc;YAmCR,QAAQ;yCAnHF,oBAAoB;6CAApB,oBAAoB;CAwJzC"}
1
+ {"version":3,"file":"sd-shared-data.provider.d.ts","sourceRoot":"","sources":["../../../src/core/shared-data/sd-shared-data.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsD,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAIrH,OAAO,uBAAuB,CAAC;;AAE/B,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IAC1D,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;IACzE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IACnB,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC;CACtD;AAED,eAAO,MAAM,uBAAuB;UAC1B,MAAM;YAAU,OAAO;mCAEV,CAAC;AAYxB,8BACsB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAClG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0C;IACzE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IAEtD,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC,CAAa;IAE1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IAEpE,QAAQ,CAAC,UAAU,IAAI,IAAI;IAE3B,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAqC/E,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAchE,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,EACxC,IAAI,EAAE,CAAC,EACP,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAC/B,OAAO,CAAC,IAAI,CAAC;IAcV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,OAAO,CAAC,cAAc;YAuCR,QAAQ;yCAzHF,oBAAoB;6CAApB,oBAAoB;CAkKzC"}
@@ -13,12 +13,13 @@ export class SdSharedDataProvider {
13
13
  register(name, info) {
14
14
  const existing = this._entries.get(name);
15
15
  if (existing != null) {
16
- // 기존 리스너 키 초기화
16
+ // 기존 리스너 키 초기화 + generation 증가로 이전 이벤트 무시
17
17
  if (existing.listenerKey != null) {
18
18
  const client = this._clientFactory.get(existing.info.serviceKey);
19
19
  void client.removeListener(existing.listenerKey);
20
20
  existing.listenerKey = undefined;
21
21
  }
22
+ existing.generation++;
22
23
  existing.info = info;
23
24
  existing.needsReload = true;
24
25
  }
@@ -37,6 +38,7 @@ export class SdSharedDataProvider {
37
38
  info,
38
39
  itemsSignal,
39
40
  handle,
41
+ generation: 0,
40
42
  needsReload: true,
41
43
  isLoading: false,
42
44
  });
@@ -67,18 +69,22 @@ export class SdSharedDataProvider {
67
69
  }
68
70
  _loadAndListen(name, entry) {
69
71
  entry.isLoading = true;
72
+ const capturedGeneration = entry.generation;
70
73
  this.loadingCount.update((v) => v + 1);
71
74
  // 비동기 로드
72
75
  void entry.info
73
76
  .getter()
74
77
  .then(async (data) => {
78
+ // register 재호출로 generation이 변경되었으면 결과를 무시
79
+ if (entry.generation !== capturedGeneration)
80
+ return;
75
81
  entry.itemsSignal.set(data);
76
82
  // 이벤트 리스너 등록
77
83
  if (entry.listenerKey == null) {
78
84
  const client = this._clientFactory.get(entry.info.serviceKey);
79
85
  const event = client.getEvent("SdSharedDataChange");
80
86
  entry.listenerKey = await event.addListener({ name, filter: entry.info.filter }, async (changeKeys) => {
81
- await this._onEvent(name, entry, changeKeys);
87
+ await this._onEvent(name, entry, changeKeys, capturedGeneration);
82
88
  });
83
89
  }
84
90
  })
@@ -94,7 +100,10 @@ export class SdSharedDataProvider {
94
100
  }
95
101
  });
96
102
  }
97
- async _onEvent(name, entry, changeKeys) {
103
+ async _onEvent(name, entry, changeKeys, generation) {
104
+ // register 재호출로 generation이 변경되었으면 이벤트 무시
105
+ if (entry.generation !== generation)
106
+ return;
98
107
  this.loadingCount.update((v) => v + 1);
99
108
  try {
100
109
  if (changeKeys == null) {
@@ -24,6 +24,7 @@ export declare abstract class SdDataDetailBase<T extends object, R = boolean> im
24
24
  submit?(data: T): Promise<R | undefined> | R | undefined;
25
25
  private readonly _sdToast;
26
26
  private readonly _sdSharedData;
27
+ private readonly _errorHandler;
27
28
  viewType: Signal<import("../..").SdViewType>;
28
29
  busyCount: import("@angular/core").WritableSignal<number>;
29
30
  busyMessage: import("@angular/core").WritableSignal<string | undefined>;
@@ -42,7 +43,6 @@ export declare abstract class SdDataDetailBase<T extends object, R = boolean> im
42
43
  permCheck?: boolean;
43
44
  hideNoChangeMessage?: boolean;
44
45
  }): Promise<void>;
45
- private _getOrmDataEditToastErrorMessage;
46
46
  static ɵfac: i0.ɵɵFactoryDeclaration<SdDataDetailBase<any, any>, never>;
47
47
  static ɵdir: i0.ɵɵDirectiveDeclaration<SdDataDetailBase<any, any>, never, never, {}, { "close": "close"; }, never, never, true, never>;
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sd-data-detail.base.d.ts","sourceRoot":"","sources":["../../../src/data/data-detail/sd-data-detail.base.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,MAAM,EACX,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAO,MAAM,uBAAuB,CAAC;AAMtD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;;AAG5E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,QAAQ,GAAG,SAAS,CAAC;IACrC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,8BACsB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,OAAO,CAClE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAI/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAE5B,oBAAoB,CAAC,IAAI,IAAI;IAE7B,QAAQ,CAAC,IAAI,IACT,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,oBAAoB,CAAA;KAAE,CAAC,GAChD;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,oBAAoB,CAAA;KAAE;IAE3C,YAAY,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS;IAEnE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS;IAIxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgC;IAE9D,QAAQ,qCAAoC;IAE5C,SAAS,iDAAa;IACtB,WAAW,6DAAyC;IACpD,WAAW,kDAAiB;IAC5B,KAAK,8CAAe;IACpB,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,4CAAsB;IAE1B,QAAQ,2EAAuD;IAE/D,OAAO,CAAC,aAAa,CAAC,CAAI;;IAyB1B,kBAAkB;IAQZ,SAAS;IAYT,OAAO;IASP,cAAc,CAAC,GAAG,EAAE,OAAO;IAqB3B,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE;IAmC3E,OAAO,CAAC,gCAAgC;yCAlJpB,gBAAgB;2CAAhB,gBAAgB;CA4JrC"}
1
+ {"version":3,"file":"sd-data-detail.base.d.ts","sourceRoot":"","sources":["../../../src/data/data-detail/sd-data-detail.base.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,MAAM,EACX,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAO,MAAM,uBAAuB,CAAC;AAMtD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;;AAI5E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,QAAQ,GAAG,SAAS,CAAC;IACrC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,8BACsB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,OAAO,CAClE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAI/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAE5B,oBAAoB,CAAC,IAAI,IAAI;IAE7B,QAAQ,CAAC,IAAI,IACT,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,oBAAoB,CAAA;KAAE,CAAC,GAChD;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,oBAAoB,CAAA;KAAE;IAE3C,YAAY,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS;IAEnE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS;IAIxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgC;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IAEtD,QAAQ,qCAAoC;IAE5C,SAAS,iDAAa;IACtB,WAAW,6DAAyC;IACpD,WAAW,kDAAiB;IAC5B,KAAK,8CAAe;IACpB,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,4CAAsB;IAE1B,QAAQ,2EAAuD;IAE/D,OAAO,CAAC,aAAa,CAAC,CAAI;;IAoC1B,kBAAkB;IAQZ,SAAS;IAYT,OAAO;IASP,cAAc,CAAC,GAAG,EAAE,OAAO;IAqB3B,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE;yCA3HvD,gBAAgB;2CAAhB,gBAAgB;CA8JrC"}
@@ -1,4 +1,4 @@
1
- import { Directive, effect, inject, output, signal, TemplateRef, } from "@angular/core";
1
+ import { Directive, effect, ErrorHandler, inject, output, signal, TemplateRef, } from "@angular/core";
2
2
  import { DateTime, obj } from "@simplysm/core-common";
3
3
  import { TXT_CHANGE_IGNORE_CONFIRM } from "../../core/commons";
4
4
  import { SdSharedDataProvider } from "../../core/shared-data/sd-shared-data.provider";
@@ -7,12 +7,14 @@ import { injectViewTypeSignal } from "../../core/routing/injectViewTypeSignal";
7
7
  import { withBusy } from "../../core/withBusy";
8
8
  import {} from "../../core/modal/sd-modal.provider";
9
9
  import { SdToastProvider } from "../../core/toast/sd-toast.provider";
10
+ import { getOrmDataEditToastErrorMessage } from "../getOrmDataEditToastErrorMessage";
10
11
  import * as i0 from "@angular/core";
11
12
  export class SdDataDetailBase {
12
13
  canDelete;
13
14
  //-- implement
14
15
  _sdToast = inject(SdToastProvider);
15
16
  _sdSharedData = inject(SdSharedDataProvider);
17
+ _errorHandler = inject(ErrorHandler);
16
18
  viewType = injectViewTypeSignal(() => this);
17
19
  busyCount = signal(0, ...(ngDevMode ? [{ debugName: "busyCount" }] : /* istanbul ignore next */ []));
18
20
  busyMessage = signal(undefined, ...(ngDevMode ? [{ debugName: "busyMessage" }] : /* istanbul ignore next */ []));
@@ -23,18 +25,29 @@ export class SdDataDetailBase {
23
25
  dataInfo = signal(undefined, ...(ngDevMode ? [{ debugName: "dataInfo" }] : /* istanbul ignore next */ []));
24
26
  _dataSnapshot;
25
27
  constructor() {
26
- effect(() => {
28
+ effect((onCleanup) => {
27
29
  this.prepareRefreshEffect?.();
30
+ let cancelled = false;
31
+ onCleanup(() => {
32
+ cancelled = true;
33
+ });
28
34
  queueMicrotask(async () => {
29
- if (!this.canUse()) {
35
+ try {
36
+ if (cancelled)
37
+ return;
38
+ if (!this.canUse()) {
39
+ this.initialized.set(true);
40
+ return;
41
+ }
42
+ await withBusy(this.busyCount, () => this._sdToast.try(async () => {
43
+ await this._sdSharedData.wait();
44
+ await this.refresh();
45
+ }));
30
46
  this.initialized.set(true);
31
- return;
32
47
  }
33
- await withBusy(this.busyCount, () => this._sdToast.try(async () => {
34
- await this._sdSharedData.wait();
35
- await this.refresh();
36
- }));
37
- this.initialized.set(true);
48
+ catch (err) {
49
+ this._errorHandler.handleError(err);
50
+ }
38
51
  });
39
52
  });
40
53
  setupCanDeactivate(() => this.viewType() === "modal" || this.checkIgnoreChanges());
@@ -78,7 +91,7 @@ export class SdDataDetailBase {
78
91
  return;
79
92
  this._sdToast.success(`${del ? "삭제" : "복구"}되었습니다.`);
80
93
  this.close.emit(result);
81
- }, (err) => this._getOrmDataEditToastErrorMessage(err)));
94
+ }, (err) => getOrmDataEditToastErrorMessage(err)));
82
95
  }
83
96
  async doSubmit(opt) {
84
97
  if (this.busyCount() > 0)
@@ -104,15 +117,7 @@ export class SdDataDetailBase {
104
117
  this._sdToast.success("저장되었습니다.");
105
118
  this.close.emit(result);
106
119
  await this.refresh();
107
- }, (err) => this._getOrmDataEditToastErrorMessage(err)));
108
- }
109
- _getOrmDataEditToastErrorMessage(err) {
110
- const message = err instanceof Error ? err.message : String(err);
111
- if (message.includes("a parent row: a foreign key constraint") ||
112
- message.includes("conflicted with the REFERENCE")) {
113
- return "경고! 연결된 작업에 의한 처리 거부. 후속작업 확인 요망";
114
- }
115
- return message;
120
+ }, (err) => getOrmDataEditToastErrorMessage(err)));
116
121
  }
117
122
  static ɵfac = function SdDataDetailBase_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdDataDetailBase)(); };
118
123
  static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SdDataDetailBase, outputs: { close: "close" } });
@@ -24,7 +24,7 @@ export function injectDataSheetExcelManager(options) {
24
24
  await withBusy(options.busyCount, () => sdToast.try(async () => {
25
25
  await uploadExcelFn(file);
26
26
  await options.refresh();
27
- sdToast.success("엑셀 업로드가 완료 되었습니다.");
27
+ sdToast.success("엑셀 업로드가 완료되었습니다.");
28
28
  }, (err) => options.errorMessageFn(err)));
29
29
  }
30
30
  return { doDownloadExcel, doUploadExcel };
@@ -25,7 +25,7 @@ export function injectDataSheetModalEditManager(options) {
25
25
  if (!result)
26
26
  return;
27
27
  await options.refresh();
28
- sdToast.success(`${del ? "삭제" : "복구"} 되었습니다.`);
28
+ sdToast.success(`${del ? "삭제" : "복구"}되었습니다.`);
29
29
  }, (err) => options.errorMessageFn(err)));
30
30
  }
31
31
  function doModalConfirm() {
@@ -29,7 +29,7 @@ export declare abstract class SdDataSheetBase<TFilter extends Record<string, any
29
29
  private readonly _inlineEditMgr;
30
30
  private readonly _modalEditMgr;
31
31
  private readonly _excelMgr;
32
- key: string | undefined;
32
+ key: string;
33
33
  viewType: Signal<import("../..").SdViewType>;
34
34
  busyCount: WritableSignal<number>;
35
35
  busyMessage: WritableSignal<string | undefined>;
@@ -69,7 +69,6 @@ export declare abstract class SdDataSheetBase<TFilter extends Record<string, any
69
69
  doModalCancel(): void;
70
70
  doDownloadExcel(): Promise<void>;
71
71
  doUploadExcel(): Promise<void>;
72
- private _getOrmDataEditToastErrorMessage;
73
72
  static ɵfac: i0.ɵɵFactoryDeclaration<SdDataSheetBase<any, any, any>, never>;
74
73
  static ɵdir: i0.ɵɵDirectiveDeclaration<SdDataSheetBase<any, any, any>, never, never, { "selectedItemKeys": { "alias": "selectedItemKeys"; "required": false; "isSignal": true; }; }, { "close": "close"; "submitted": "submitted"; "selectedItemKeys": "selectedItemKeysChange"; }, never, never, true, never>;
75
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sd-data-sheet.base.d.ts","sourceRoot":"","sources":["../../../src/data/data-sheet/sd-data-sheet.base.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAKhB,KAAK,MAAM,EACX,WAAW,EACX,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAYrF,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;;AAT/B,YAAY,EACV,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAO/B,8BACsB,eAAe,CACnC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,KAAK,EACL,IAAI,SAAS,MAAM,GAAG,MAAM,GAAG,SAAS,CACxC,YAAW,aAAa,CAAC,KAAK,CAAC;IAE/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAE3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAEjE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,QAAQ,CAAC,UAAU,IAAI,OAAO;IAE9B,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACtD,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEnE,oBAAoB,CAAC,IAAI,IAAI;IAE7B,QAAQ,CAAC,MAAM,CACb,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC;IAG3E,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,GAAG,SAAS;IAC3E,iBAAiB,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAClD,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;IAClC,MAAM,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO;IAC1E,aAAa,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IACpD,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAG9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwD;IACnF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgE;IAC5F,OAAO,CAAC,QAAQ,CAAC,cAAc,CAE7B;IACF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;IACF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwD;IAGlF,GAAG,qBAA2D;IAE9D,QAAQ,qCAAoC;IAE5C,SAAS,yBAAa;IACtB,WAAW,qCAAyC;IACpD,WAAW,0BAAiB;IAC5B,KAAK,2EAA4C;IACjD,SAAS,oDAAqB;IAC9B,gBAAgB,8CAAqB;IACrC,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,UAAU,8BAIR;IAEF,KAAK,0BAAuB;IAC5B,WAAW,iCAA8B;IACzC,aAAa,0BAAuB;IAEpC,SAAS,GAAI,MAAM,KAAK,KAAG,IAAI,GAAG,KAAK,CAAyC;IAEhF,IAAI,yBAAa;IACjB,UAAU,yBAAa;IACvB,WAAW,+BAA4B;IAGvC,MAAM,EAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACjC,UAAU,EAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAGrC,yBAAyB,kBAMvB;IAEF,4BAA4B,kBAM1B;IAEF,kBAAkB,GAAI,MAAM,KAAK,KAAG,MAAM,GAAG,SAAS,CAGtC;IAEhB,mBAAmB,GAAI,MAAM,KAAK,KAAG,OAAO,CAAuC;;IA0FnF,kBAAkB;IAIlB,cAAc;IAId,SAAS;IAQH,OAAO;IAMP,SAAS;IAIT,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE;IAI3E,kBAAkB,CAAC,IAAI,EAAE,KAAK;IAMxB,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK;IAIvB,mBAAmB,CAAC,GAAG,EAAE,OAAO;IAItC,cAAc;IAId,aAAa;IAMP,eAAe;IAIf,aAAa;IAMnB,OAAO,CAAC,gCAAgC;yCA9PpB,eAAe;2CAAf,eAAe;CAwQpC"}
1
+ {"version":3,"file":"sd-data-sheet.base.d.ts","sourceRoot":"","sources":["../../../src/data/data-sheet/sd-data-sheet.base.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { injectDataSheetRefreshManager } from "./injectDataSheetRefreshManager";
10
10
  import { injectDataSheetInlineEditManager } from "./injectDataSheetInlineEditManager";
11
11
  import { injectDataSheetModalEditManager } from "./injectDataSheetModalEditManager";
12
12
  import { injectDataSheetExcelManager } from "./injectDataSheetExcelManager";
13
+ import { getOrmDataEditToastErrorMessage } from "../getOrmDataEditToastErrorMessage";
13
14
  import * as i0 from "@angular/core";
14
15
  export class SdDataSheetBase {
15
16
  hideTool;
@@ -21,7 +22,7 @@ export class SdDataSheetBase {
21
22
  _modalEditMgr;
22
23
  _excelMgr;
23
24
  //-- shared state (D1: class 소유)
24
- key = reflectComponentType(this.constructor)?.selector;
25
+ key = reflectComponentType(this.constructor)?.selector ?? this.constructor.name;
25
26
  viewType = injectViewTypeSignal(() => this);
26
27
  busyCount = signal(0, ...(ngDevMode ? [{ debugName: "busyCount" }] : /* istanbul ignore next */ []));
27
28
  busyMessage = signal(undefined, ...(ngDevMode ? [{ debugName: "busyMessage" }] : /* istanbul ignore next */ []));
@@ -105,7 +106,7 @@ export class SdDataSheetBase {
105
106
  refresh: () => this._refreshMgr.refresh(),
106
107
  getNewItemFn: () => this.newItem?.bind(this),
107
108
  getSubmitFn: () => this.submit?.bind(this),
108
- errorMessageFn: (err) => this._getOrmDataEditToastErrorMessage(err),
109
+ errorMessageFn: (err) => getOrmDataEditToastErrorMessage(err),
109
110
  });
110
111
  //-- modal edit composable
111
112
  this._modalEditMgr = injectDataSheetModalEditManager({
@@ -117,7 +118,7 @@ export class SdDataSheetBase {
117
118
  refresh: () => this._refreshMgr.refresh(),
118
119
  getEditItemFn: () => this.editItem?.bind(this),
119
120
  getToggleDeleteItemsFn: () => this.toggleDeleteItems?.bind(this),
120
- errorMessageFn: (err) => this._getOrmDataEditToastErrorMessage(err),
121
+ errorMessageFn: (err) => getOrmDataEditToastErrorMessage(err),
121
122
  });
122
123
  //-- excel composable
123
124
  this._excelMgr = injectDataSheetExcelManager({
@@ -126,7 +127,7 @@ export class SdDataSheetBase {
126
127
  refresh: () => this._refreshMgr.refresh(),
127
128
  getDownloadExcelFn: () => this.downloadExcel?.bind(this),
128
129
  getUploadExcelFn: () => this.uploadExcel?.bind(this),
129
- errorMessageFn: (err) => this._getOrmDataEditToastErrorMessage(err),
130
+ errorMessageFn: (err) => getOrmDataEditToastErrorMessage(err),
130
131
  });
131
132
  setupCanDeactivate(() => this.viewType() === "modal" || this.checkIgnoreChanges());
132
133
  }
@@ -179,15 +180,6 @@ export class SdDataSheetBase {
179
180
  async doUploadExcel() {
180
181
  await this._excelMgr.doUploadExcel();
181
182
  }
182
- //-- private
183
- _getOrmDataEditToastErrorMessage(err) {
184
- const message = err instanceof Error ? err.message : String(err);
185
- if (message.includes("a parent row: a foreign key constraint") ||
186
- message.includes("conflicted with the REFERENCE")) {
187
- return "경고! 연결된 작업에 의한 처리 거부. 후속작업 확인 요망";
188
- }
189
- return message;
190
- }
191
183
  static ɵfac = function SdDataSheetBase_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdDataSheetBase)(); };
192
184
  static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SdDataSheetBase, inputs: { selectedItemKeys: [1, "selectedItemKeys"] }, outputs: { close: "close", submitted: "submitted", selectedItemKeys: "selectedItemKeysChange" } });
193
185
  }
@@ -0,0 +1,2 @@
1
+ export declare function getOrmDataEditToastErrorMessage(err: unknown): string;
2
+ //# sourceMappingURL=getOrmDataEditToastErrorMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrmDataEditToastErrorMessage.d.ts","sourceRoot":"","sources":["../../src/data/getOrmDataEditToastErrorMessage.ts"],"names":[],"mappings":"AAAA,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CASpE"}
@@ -0,0 +1,8 @@
1
+ export function getOrmDataEditToastErrorMessage(err) {
2
+ const message = err instanceof Error ? err.message : String(err);
3
+ if (message.includes("a parent row: a foreign key constraint") ||
4
+ message.includes("conflicted with the REFERENCE")) {
5
+ return "경고! 연결된 작업에 의한 처리 거부. 후속작업 확인 요망";
6
+ }
7
+ return message;
8
+ }
@@ -4,7 +4,7 @@ export declare class SdPermissionTable<TModule> {
4
4
  value: import("@angular/core").ModelSignal<Record<string, boolean>>;
5
5
  items: import("@angular/core").InputSignal<SdPermission<TModule>[]>;
6
6
  disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
7
- collapsedItems: import("@angular/core").WritableSignal<Set<SdPermission<TModule>>>;
7
+ collapsedItems: import("@angular/core").WritableSignal<Set<string>>;
8
8
  depthLength: import("@angular/core").Signal<number>;
9
9
  private readonly _permExistsCache;
10
10
  private readonly _permCheckedCache;
@@ -1 +1 @@
1
- {"version":3,"file":"sd-permission-table.d.ts","sourceRoot":"","sources":["../../../src/data/permission-table/sd-permission-table.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;;AAMpF,qBAiMa,iBAAiB,CAAC,OAAO;IACpC,KAAK,+DAAsC;IAE3C,KAAK,+DAAsC;IAC3C,QAAQ,qEAAiD;IAEzD,cAAc,qEAA4C;IAE1D,WAAW,yCAER;IAEH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CA6B9B;IAEH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAgC/B;IAEH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CA6ChC;IAEH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAW1B,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO;IAIxD,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE;IAIpE,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO;IAIrD,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO;IAI3E,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO;IAI5E,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC;IAgBhD,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,OAAO;IAQjF,OAAO,CAAC,gBAAgB;IAkDxB,OAAO,CAAC,eAAe;IAYvB,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAG;QACpC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;KAC3C,CAAC;yCAxPS,iBAAiB;2CAAjB,iBAAiB;CAyP7B"}
1
+ {"version":3,"file":"sd-permission-table.d.ts","sourceRoot":"","sources":["../../../src/data/permission-table/sd-permission-table.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;;AAMpF,qBAiMa,iBAAiB,CAAC,OAAO;IACpC,KAAK,+DAAsC;IAE3C,KAAK,+DAAsC;IAC3C,QAAQ,qEAAiD;IAEzD,cAAc,sDAA6B;IAE3C,WAAW,yCAER;IAEH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CA6B9B;IAEH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAgC/B;IAEH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CA6ChC;IAEH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAW1B,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO;IAIxD,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE;IAIpE,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO;IAIrD,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO;IAI3E,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO;IAI5E,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC;IAiBhD,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,OAAO;IAQjF,OAAO,CAAC,gBAAgB;IAkDxB,OAAO,CAAC,eAAe;IAYvB,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAG;QACpC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;KAC3C,CAAC;yCAzPS,iBAAiB;2CAAjB,iBAAiB;CA0P7B"}
@@ -251,7 +251,7 @@ export class SdPermissionTable {
251
251
  return cached;
252
252
  }
253
253
  getIsPermCollapsed(item) {
254
- return this.collapsedItems().has(item);
254
+ return this.collapsedItems().has(item.codeChain.join("."));
255
255
  }
256
256
  getAllChildren(item) {
257
257
  return item.children?.mapMany((child) => [child, ...this.getAllChildren(child)]) ?? [];
@@ -266,16 +266,17 @@ export class SdPermissionTable {
266
266
  return this._permCheckedCache().get(item.codeChain.join(".") + "." + type) ?? false;
267
267
  }
268
268
  onPermCollapseToggle(item) {
269
+ const key = item.codeChain.join(".");
269
270
  this.collapsedItems.update((v) => {
270
271
  const r = new Set(v);
271
- if (r.has(item)) {
272
- r.delete(item);
272
+ if (r.has(key)) {
273
+ r.delete(key);
273
274
  }
274
275
  else {
275
- r.add(item);
276
+ r.add(key);
276
277
  const allChildren = this.getAllChildren(item);
277
278
  for (const allChild of allChildren) {
278
- r.add(allChild);
279
+ r.add(allChild.codeChain.join("."));
279
280
  }
280
281
  }
281
282
  return r;
@@ -39,6 +39,7 @@ export declare class SdSharedDataSelect<TItem extends SharedDataBase<string | nu
39
39
  getItemSelectable(item: TItem, _index: number, depth: number): boolean;
40
40
  getItemVisible(item: TItem, index: number): boolean;
41
41
  isIncludeSearchText(item: TItem, _index: number): boolean;
42
+ private readonly _sortedChildrenMap;
42
43
  getChildren: (item: SharedDataBase<string | number>) => TItem[];
43
44
  onUndefinedClick(): void;
44
45
  onModalButtonClick(event: MouseEvent): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"sd-shared-data-select.d.ts","sourceRoot":"","sources":["../../../src/data/shared-data/sd-shared-data-select.ts"],"names":[],"mappings":"AACA,OAAO,EAWL,WAAW,EAIZ,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIjF,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAClB,MAAM,8CAA8C,CAAC;;AAKtD,qBAwGa,kBAAkB,CAC7B,KAAK,SAAS,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,EAC7C,KAAK,SAAS,MAAM,eAAe,CAAC,KAAK,CAAC,EAC1C,MAAM,SAAS,aAAa,CAAC,GAAG,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IAEnD,KAAK,2GAAoE;IAEzE,KAAK,+CAA6B;IAElC,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,YAAY,qEAAiD;IAC7D,KAAK,qEAAiD;IACtD,MAAM,qEAAiD;IAEvD,IAAI,+DAAwB;IAC5B,UAAU,6CAA4B;IACtC,QAAQ,8CAAgB,KAAK,SAAS,MAAM,aAAa,GAAG,EAAE,KAAK,OAAO,eAAI;IAC9E,cAAc,yDAAkB;IAEhC,KAAK,6EAAsC;IAC3C,SAAS,+FAAoD;IAE7D,WAAW,0DAAmB;IAC9B,8BAA8B,8DAAuB;IACrD,aAAa,6CAAgB,KAAK,SAAS,MAAM,KAAK,OAAO,EAE3D;IACF,eAAe,6CAAgB,KAAK,SAAS,MAAM,KAAK,MAAM,EAE5D;IACF,mBAAmB,0DAAmB;IAEtC,UAAU,0FAGR;IACF,eAAe,gEAEZ;IAEH,UAAU,6DAAyC;IAEnD,cAAc,0CAA+D;IAE7E,YAAY,0CAEV;IAEF,kBAAkB,4FAcf;IAEH,gBAAgB,0CAyBb;IAEH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAsCnC;IAEH,YAAY,wCAKT;;IAgBH,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAMtE,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAcnD,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAIzD,WAAW,GAAI,MAAM,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,KAAG,KAAK,EAAE,CAiB5D;IAEF,gBAAgB,IAAI,IAAI;IAIlB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBpD,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9D,SAAS,CAAC,QAAQ,CAAC,YAAY,yXAAgB;IAC/C,SAAS,CAAC,QAAQ,CAAC,UAAU,geAAc;yCA/OhC,kBAAkB;2CAAlB,kBAAkB;CAgP9B"}
1
+ {"version":3,"file":"sd-shared-data-select.d.ts","sourceRoot":"","sources":["../../../src/data/shared-data/sd-shared-data-select.ts"],"names":[],"mappings":"AACA,OAAO,EAWL,WAAW,EAIZ,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIjF,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAClB,MAAM,8CAA8C,CAAC;;AAKtD,qBAwGa,kBAAkB,CAC7B,KAAK,SAAS,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,EAC7C,KAAK,SAAS,MAAM,eAAe,CAAC,KAAK,CAAC,EAC1C,MAAM,SAAS,aAAa,CAAC,GAAG,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IAEnD,KAAK,2GAAoE;IAEzE,KAAK,+CAA6B;IAElC,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,YAAY,qEAAiD;IAC7D,KAAK,qEAAiD;IACtD,MAAM,qEAAiD;IAEvD,IAAI,+DAAwB;IAC5B,UAAU,6CAA4B;IACtC,QAAQ,8CAAgB,KAAK,SAAS,MAAM,aAAa,GAAG,EAAE,KAAK,OAAO,eAAI;IAC9E,cAAc,yDAAkB;IAEhC,KAAK,6EAAsC;IAC3C,SAAS,+FAAoD;IAE7D,WAAW,0DAAmB;IAC9B,8BAA8B,8DAAuB;IACrD,aAAa,6CAAgB,KAAK,SAAS,MAAM,KAAK,OAAO,EAE3D;IACF,eAAe,6CAAgB,KAAK,SAAS,MAAM,KAAK,MAAM,EAE5D;IACF,mBAAmB,0DAAmB;IAEtC,UAAU,0FAGR;IACF,eAAe,gEAEZ;IAEH,UAAU,6DAAyC;IAEnD,cAAc,0CAA+D;IAE7E,YAAY,0CAEV;IAEF,kBAAkB,4FAcf;IAEH,gBAAgB,0CAyBb;IAEH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAsCnC;IAEH,YAAY,wCAKT;;IAgBH,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAMtE,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAcnD,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAIzD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAqBhC;IAEH,WAAW,GAAI,MAAM,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC,KAAG,KAAK,EAAE,CAK5D;IAEF,gBAAgB,IAAI,IAAI;IAIlB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBpD,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9D,SAAS,CAAC,QAAQ,CAAC,YAAY,yXAAgB;IAC/C,SAAS,CAAC,QAAQ,CAAC,UAAU,geAAc;yCA1PhC,kBAAkB;2CAAlB,kBAAkB;CA2P9B"}
@@ -245,12 +245,16 @@ export class SdSharedDataSelect {
245
245
  isIncludeSearchText(item, _index) {
246
246
  return this._searchTextMatchCache().get(item.__valueKey) ?? false;
247
247
  }
248
- getChildren = (item) => {
249
- let result = this.itemByParentKeyMap()?.get(item.__valueKey) ??
250
- [];
248
+ _sortedChildrenMap = computed(() => {
249
+ const parentMap = this.itemByParentKeyMap();
250
+ if (parentMap == null)
251
+ return undefined;
251
252
  const orderProp = this.displayOrderKeyProp();
252
- if (orderProp != null) {
253
- result = [...result].sort((a, b) => {
253
+ if (orderProp == null)
254
+ return parentMap;
255
+ const sorted = new Map();
256
+ for (const [key, children] of parentMap) {
257
+ sorted.set(key, [...children].sort((a, b) => {
254
258
  const aVal = a[orderProp];
255
259
  const bVal = b[orderProp];
256
260
  if (aVal < bVal)
@@ -258,9 +262,13 @@ export class SdSharedDataSelect {
258
262
  if (aVal > bVal)
259
263
  return 1;
260
264
  return 0;
261
- });
265
+ }));
262
266
  }
263
- return result;
267
+ return sorted;
268
+ }, ...(ngDevMode ? [{ debugName: "_sortedChildrenMap" }] : /* istanbul ignore next */ []));
269
+ getChildren = (item) => {
270
+ return (this._sortedChildrenMap()?.get(item.__valueKey) ??
271
+ []);
264
272
  };
265
273
  onUndefinedClick() {
266
274
  this.value.set(undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"injectSheetColumnResizing.d.ts","sourceRoot":"","sources":["../../../src/data/sheet/injectSheetColumnResizing.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,WAAW,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACvD,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;QACzC,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;KACjC,CAAC;CACH;;;;yBAsB6B,UAAU,UAAU,gBAAgB,KAAG,IAAI;wBAwC5C,UAAU,UAAU,gBAAgB,KAAG,IAAI;EAmBvE"}
1
+ {"version":3,"file":"injectSheetColumnResizing.d.ts","sourceRoot":"","sources":["../../../src/data/sheet/injectSheetColumnResizing.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,WAAW,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACvD,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;QACzC,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;KACjC,CAAC;CACH;;;;yBAsB6B,UAAU,UAAU,gBAAgB,KAAG,IAAI;wBA0C5C,UAAU,UAAU,gBAAgB,KAAG,IAAI;EAmBvE"}
@@ -15,6 +15,7 @@ export function injectSheetColumnResizing(options) {
15
15
  options.configResource.set({ ...current, columnRecord });
16
16
  }
17
17
  function onMousedown(event, colDef) {
18
+ resizingCleanup?.();
18
19
  event.preventDefault();
19
20
  event.stopPropagation();
20
21
  const container = options.domAccessor.getContainer();
@@ -1 +1 @@
1
- {"version":3,"file":"sd-state-preset.d.ts","sourceRoot":"","sources":["../../../src/data/state-preset/sd-state-preset.ts"],"names":[],"mappings":";AAmBA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,qBA6Ea,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IAEpD,GAAG,8CAA4B;IAC/B,KAAK,2CAAgB;IACrB,IAAI,+DAAwB;IAE5B,SAAS,CAAC,QAAQ,CAAC,UAAU,wZAAc;IAC3C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,sdAAsB;IAC3D,SAAS,CAAC,QAAQ,CAAC,OAAO,yVAAW;IAErC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAE7B;IAEH,QAAQ,qDAAsD;IAExD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBjC,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAM7C,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IASrC,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;yCAvDjD,aAAa;2CAAb,aAAa;CAuEzB"}
1
+ {"version":3,"file":"sd-state-preset.d.ts","sourceRoot":"","sources":["../../../src/data/state-preset/sd-state-preset.ts"],"names":[],"mappings":";AAmBA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,qBA6Ea,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IAEpD,GAAG,8CAA4B;IAC/B,KAAK,2CAAgB;IACrB,IAAI,+DAAwB;IAE5B,SAAS,CAAC,QAAQ,CAAC,UAAU,wZAAc;IAC3C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,sdAAsB;IAC3D,SAAS,CAAC,QAAQ,CAAC,OAAO,yVAAW;IAErC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAE7B;IAEH,QAAQ,qDAAsD;IAExD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAM7C,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IASrC,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;yCA7DjD,aAAa;2CAAb,aAAa;CA6EzB"}
@@ -58,6 +58,10 @@ export class SdStatePreset {
58
58
  if (name == null)
59
59
  return;
60
60
  const currentPresets = this._presets();
61
+ if (currentPresets.some((p) => p.name === name)) {
62
+ this._sdToast.warning("이미 존재하는 프리셋 이름입니다.");
63
+ return;
64
+ }
61
65
  const newPreset = {
62
66
  name,
63
67
  state: obj.clone(this.state()),
@@ -8,9 +8,10 @@ export interface Address {
8
8
  buildingName: string | undefined;
9
9
  }
10
10
  export declare class SdAddressSearchModal implements SdModalContentDef<Address>, OnInit {
11
- contentElRef: import("@angular/core").Signal<ElementRef<HTMLElement>>;
11
+ contentElRef: import("@angular/core").Signal<ElementRef<HTMLElement> | undefined>;
12
12
  close: import("@angular/core").OutputEmitterRef<Address>;
13
13
  initialized: import("@angular/core").WritableSignal<boolean>;
14
+ errorMessage: import("@angular/core").WritableSignal<string | null>;
14
15
  ngOnInit(): void;
15
16
  private _initAsync;
16
17
  static ɵfac: i0.ɵɵFactoryDeclaration<SdAddressSearchModal, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"sd-address-search.modal.d.ts","sourceRoot":"","sources":["../../../src/features/address/sd-address-search.modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAKX,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;;AAwB5E,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,qBAYa,oBAAqB,YAAW,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM;IAC7E,YAAY,0DAET;IAEH,KAAK,oDAAqB;IAE1B,WAAW,kDAAiB;IAE5B,QAAQ;YAIM,UAAU;yCAbb,oBAAoB;2CAApB,oBAAoB;CAoEhC"}
1
+ {"version":3,"file":"sd-address-search.modal.d.ts","sourceRoot":"","sources":["../../../src/features/address/sd-address-search.modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAKX,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;;AA0B5E,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AA+CD,qBAgBa,oBAAqB,YAAW,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM;IAC7E,YAAY,sEAET;IAEH,KAAK,oDAAqB;IAE1B,WAAW,kDAAiB;IAC5B,YAAY,wDAA+B;IAE3C,QAAQ;YAIM,UAAU;yCAdb,oBAAoB;2CAApB,oBAAoB;CA6DhC"}
@@ -2,33 +2,73 @@ import { ChangeDetectionStrategy, Component, ElementRef, output, signal, viewChi
2
2
  import { SdBusyContainer } from "../../core/busy/sd-busy-container";
3
3
  import * as i0 from "@angular/core";
4
4
  const _c0 = ["content"];
5
- export class SdAddressSearchModal {
6
- contentElRef = viewChild.required("content", {
7
- read: ElementRef,
5
+ function SdAddressSearchModal_Conditional_1_Template(rf, ctx) { if (rf & 1) {
6
+ i0.ɵɵelementStart(0, "div", 2);
7
+ i0.ɵɵtext(1);
8
+ i0.ɵɵelementEnd();
9
+ } if (rf & 2) {
10
+ const ctx_r0 = i0.ɵɵnextContext();
11
+ i0.ɵɵadvance();
12
+ i0.ɵɵtextInterpolate(ctx_r0.errorMessage());
13
+ } }
14
+ function SdAddressSearchModal_Conditional_2_Template(rf, ctx) { if (rf & 1) {
15
+ i0.ɵɵelement(0, "div", 3, 0);
16
+ } }
17
+ function loadDaumPostcodeScript() {
18
+ const existing = document.getElementById("daum_address");
19
+ if (existing != null) {
20
+ if (typeof daum !== "undefined") {
21
+ return Promise.resolve();
22
+ }
23
+ return new Promise((resolve, reject) => {
24
+ existing.addEventListener("load", () => {
25
+ daum.postcode.load(() => {
26
+ resolve();
27
+ });
28
+ }, { once: true });
29
+ existing.addEventListener("error", () => {
30
+ existing.remove();
31
+ reject(new Error("주소 검색 스크립트를 불러올 수 없습니다."));
32
+ }, { once: true });
33
+ });
34
+ }
35
+ return new Promise((resolve, reject) => {
36
+ const scriptEl = document.createElement("script");
37
+ scriptEl.src = "//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js";
38
+ scriptEl.setAttribute("id", "daum_address");
39
+ scriptEl.onload = () => {
40
+ daum.postcode.load(() => {
41
+ resolve();
42
+ });
43
+ };
44
+ scriptEl.onerror = () => {
45
+ scriptEl.remove();
46
+ reject(new Error("주소 검색 스크립트를 불러올 수 없습니다."));
47
+ };
48
+ document.head.appendChild(scriptEl);
8
49
  });
50
+ }
51
+ export class SdAddressSearchModal {
52
+ contentElRef = viewChild("content", { ...(ngDevMode ? { debugName: "contentElRef" } : /* istanbul ignore next */ {}), read: ElementRef });
9
53
  close = output();
10
54
  initialized = signal(false, ...(ngDevMode ? [{ debugName: "initialized" }] : /* istanbul ignore next */ []));
55
+ errorMessage = signal(null, ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
11
56
  ngOnInit() {
12
57
  void this._initAsync();
13
58
  }
14
59
  async _initAsync() {
15
- if (!document.getElementById("daum_address")) {
16
- await new Promise((resolve, reject) => {
17
- const scriptEl = document.createElement("script");
18
- scriptEl.src = "//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js";
19
- scriptEl.setAttribute("id", "daum_address");
20
- scriptEl.onload = () => {
21
- daum.postcode.load(() => {
22
- resolve();
23
- });
24
- };
25
- scriptEl.onerror = () => {
26
- reject(new Error("주소 검색 스크립트를 불러올 수 없습니다."));
27
- };
28
- document.head.appendChild(scriptEl);
29
- });
60
+ try {
61
+ await loadDaumPostcodeScript();
62
+ }
63
+ catch (err) {
64
+ this.errorMessage.set(err instanceof Error ? err.message : String(err));
65
+ this.initialized.set(true);
66
+ return;
30
67
  }
31
- const contentEl = this.contentElRef().nativeElement;
68
+ const contentElRef = this.contentElRef();
69
+ if (contentElRef == null)
70
+ return;
71
+ const contentEl = contentElRef.nativeElement;
32
72
  new daum.Postcode({
33
73
  oncomplete: (data) => {
34
74
  const addr = data.userSelectedType === "R" ? data.roadAddress : data.jibunAddress;
@@ -63,12 +103,14 @@ export class SdAddressSearchModal {
63
103
  i0.ɵɵviewQuerySignal(ctx.contentElRef, _c0, 5, ElementRef);
64
104
  } if (rf & 2) {
65
105
  i0.ɵɵqueryAdvance();
66
- } }, outputs: { close: "close" }, decls: 3, vars: 1, consts: [["content", ""], [3, "busy"], [2, "min-height", "100px"]], template: function SdAddressSearchModal_Template(rf, ctx) { if (rf & 1) {
106
+ } }, outputs: { close: "close" }, decls: 3, vars: 2, consts: [["content", ""], [3, "busy"], [1, "_error"], [2, "min-height", "100px"]], template: function SdAddressSearchModal_Template(rf, ctx) { if (rf & 1) {
67
107
  i0.ɵɵelementStart(0, "sd-busy-container", 1);
68
- i0.ɵɵelement(1, "div", 2, 0);
108
+ i0.ɵɵconditionalCreate(1, SdAddressSearchModal_Conditional_1_Template, 2, 1, "div", 2)(2, SdAddressSearchModal_Conditional_2_Template, 2, 0, "div", 3);
69
109
  i0.ɵɵelementEnd();
70
110
  } if (rf & 2) {
71
111
  i0.ɵɵproperty("busy", !ctx.initialized());
112
+ i0.ɵɵadvance();
113
+ i0.ɵɵconditional(ctx.errorMessage() !== null ? 1 : 2);
72
114
  } }, dependencies: [SdBusyContainer], encapsulation: 2, changeDetection: 0 });
73
115
  }
74
116
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdAddressSearchModal, [{
@@ -81,11 +123,15 @@ export class SdAddressSearchModal {
81
123
  imports: [SdBusyContainer],
82
124
  template: `
83
125
  <sd-busy-container [busy]="!initialized()">
84
- <div #content style="min-height: 100px;"></div>
126
+ @if (errorMessage() !== null) {
127
+ <div class="_error">{{ errorMessage() }}</div>
128
+ } @else {
129
+ <div #content style="min-height: 100px;"></div>
130
+ }
85
131
  </sd-busy-container>
86
132
  `,
87
133
  }]
88
134
  }], null, { contentElRef: [{ type: i0.ViewChild, args: ["content", { ...{
89
135
  read: ElementRef,
90
136
  }, isSignal: true }] }], close: [{ type: i0.Output, args: ["close"] }] }); })();
91
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdAddressSearchModal, { className: "SdAddressSearchModal", filePath: "packages/angular/src/features/address/sd-address-search.modal.ts", lineNumber: 54, forbidOrphanRendering: true }); })();
137
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdAddressSearchModal, { className: "SdAddressSearchModal", filePath: "packages/angular/src/features/address/sd-address-search.modal.ts", lineNumber: 105, forbidOrphanRendering: true }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"sd-tiptap-editor.d.ts","sourceRoot":"","sources":["../../../src/features/editor/sd-tiptap-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAcL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;;AAmBzD,qBAsMa,cAAc;IACzB,KAAK,0DAAmB;IACxB,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,WAAW,0DAAmB;IAC9B,WAAW,+CAAiB,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,eAAI;IACzE,UAAU,kEAA2B;IAErC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAElD,QAAQ,CAAC,YAAY,WAMnB;IAEF,qDAAqD;IACrD,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAqB;IAE/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,YAAY,kEAA8B;IAC1C,WAAW,yBAA6B;IACxC,aAAa,yBAA+B;IAC5C,eAAe,4CAAiC;IAChD,OAAO,wBAAyB;IAChC,iBAAiB,gCAAmC;IACpD,UAAU,sCAA4B;IAEtC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,eAAe,CAA6B;IAEpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CASjC;;IA4DH,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,kBAAkB;yCArIf,cAAc;2CAAd,cAAc;CA2I1B"}
1
+ {"version":3,"file":"sd-tiptap-editor.d.ts","sourceRoot":"","sources":["../../../src/features/editor/sd-tiptap-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAcL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;;AAqBzD,qBAsMa,cAAc;IACzB,KAAK,0DAAmB;IACxB,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,WAAW,0DAAmB;IAC9B,WAAW,+CAAiB,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,eAAI;IACzE,UAAU,kEAA2B;IAErC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAElD,QAAQ,CAAC,YAAY,WAMnB;IAEF,qDAAqD;IACrD,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAqB;IAE/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,YAAY,kEAA8B;IAC1C,WAAW,yBAA6B;IACxC,aAAa,yBAA+B;IAC5C,eAAe,4CAAiC;IAChD,OAAO,wBAAyB;IAChC,iBAAiB,gCAAmC;IACpD,UAAU,sCAA4B;IAEtC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,eAAe,CAA6B;IAEpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CASjC;;IA4DH,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,kBAAkB;yCArIf,cAAc;2CAAd,cAAc;CA2I1B"}