@owp/core 2.2.4 → 2.2.6

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 (169) hide show
  1. package/dist/_virtual/index11.js +2 -2
  2. package/dist/_virtual/index12.js +2 -2
  3. package/dist/_virtual/index13.js +2 -2
  4. package/dist/_virtual/index14.js +2 -2
  5. package/dist/_virtual/index16.js +2 -5
  6. package/dist/_virtual/index16.js.map +1 -1
  7. package/dist/_virtual/index17.js +2 -2
  8. package/dist/_virtual/index6.js +5 -2
  9. package/dist/_virtual/index6.js.map +1 -1
  10. package/dist/_virtual/index7.js +2 -2
  11. package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js +68 -149
  12. package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js.map +1 -1
  13. package/dist/components/OwpDialog/OwpDialog.js +48 -46
  14. package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
  15. package/dist/components/OwpErrorStatusPage/OwpErrorStatusPage.js +24 -24
  16. package/dist/components/OwpErrorStatusPage/OwpErrorStatusPage.js.map +1 -1
  17. package/dist/components/OwpMrtTable/OwpMrtTable.js +2 -2
  18. package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
  19. package/dist/components/OwpMrtTable/{OwpMrtTableNoDataOverlay.js → internal/OwpMrtTableNoDataOverlay.js} +1 -1
  20. package/dist/components/OwpMrtTable/internal/OwpMrtTableNoDataOverlay.js.map +1 -0
  21. package/dist/components/OwpMrtTable/{OwpMrtTableTopToolbar.js → internal/OwpMrtTableTopToolbar.js} +3 -3
  22. package/dist/components/OwpMrtTable/internal/OwpMrtTableTopToolbar.js.map +1 -0
  23. package/dist/components/OwpOptionSelector/OwpOptionSelector.js +52 -38
  24. package/dist/components/OwpOptionSelector/OwpOptionSelector.js.map +1 -1
  25. package/dist/components/OwpPageCarded/OwpPageCarded.js +81 -77
  26. package/dist/components/OwpPageCarded/OwpPageCarded.js.map +1 -1
  27. package/dist/components/OwpPageCarded/{OwpPageCardedHeader.js → internal/OwpPageCardedHeader.js} +2 -2
  28. package/dist/components/OwpPageCarded/internal/OwpPageCardedHeader.js.map +1 -0
  29. package/dist/components/OwpPageCarded/{OwpPageCardedSidebar.js → internal/OwpPageCardedSidebar.js} +3 -3
  30. package/dist/components/OwpPageCarded/internal/OwpPageCardedSidebar.js.map +1 -0
  31. package/dist/components/OwpPageCarded/{OwpPageCardedSidebarContent.js → internal/OwpPageCardedSidebarContent.js} +2 -2
  32. package/dist/components/OwpPageCarded/internal/OwpPageCardedSidebarContent.js.map +1 -0
  33. package/dist/components/OwpPicker/OwpDatePicker.js +90 -83
  34. package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
  35. package/dist/components/OwpPicker/OwpDateRangePicker.js +57 -50
  36. package/dist/components/OwpPicker/OwpDateRangePicker.js.map +1 -1
  37. package/dist/components/OwpPicker/OwpTimePicker.js +65 -61
  38. package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
  39. package/dist/components/OwpPicker/OwpWeekDatePicker.js +58 -52
  40. package/dist/components/OwpPicker/OwpWeekDatePicker.js.map +1 -1
  41. package/dist/components/OwpPicker/OwpYearRangePicker.js +68 -62
  42. package/dist/components/OwpPicker/OwpYearRangePicker.js.map +1 -1
  43. package/dist/components/OwpPicker/{constants.js → constants/index.js} +1 -1
  44. package/dist/components/OwpPicker/constants/index.js.map +1 -0
  45. package/dist/components/OwpPicker/{AnimatedCalendarContainer.js → internal/AnimatedCalendarContainer.js} +2 -2
  46. package/dist/components/OwpPicker/internal/AnimatedCalendarContainer.js.map +1 -0
  47. package/dist/components/OwpPicker/{CalendarContainer.js → internal/CalendarContainer.js} +2 -2
  48. package/dist/components/OwpPicker/internal/CalendarContainer.js.map +1 -0
  49. package/dist/components/OwpPicker/{DatePickerInput.js → internal/DatePickerInput.js} +4 -4
  50. package/dist/components/OwpPicker/internal/DatePickerInput.js.map +1 -0
  51. package/dist/components/OwpQuerySelector/OwpQuerySelector.js +266 -0
  52. package/dist/components/OwpQuerySelector/OwpQuerySelector.js.map +1 -0
  53. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +390 -0
  54. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -0
  55. package/dist/components/OwpSelectorBase/OwpSelectorBase.js +14 -0
  56. package/dist/components/OwpSelectorBase/OwpSelectorBase.js.map +1 -0
  57. package/dist/components/OwpSelectorBase/OwpSelectorSelect.js +152 -0
  58. package/dist/components/OwpSelectorBase/OwpSelectorSelect.js.map +1 -0
  59. package/dist/components/OwpSelectorBase/hooks/useOwpSelectorBase.js +120 -0
  60. package/dist/components/OwpSelectorBase/hooks/useOwpSelectorBase.js.map +1 -0
  61. package/dist/components/OwpSelectorBase/utils/querySelectorUtils.js +24 -0
  62. package/dist/components/OwpSelectorBase/utils/querySelectorUtils.js.map +1 -0
  63. package/dist/components/OwpStyleProvider/OwpStyleProvider.js +90 -42
  64. package/dist/components/OwpStyleProvider/OwpStyleProvider.js.map +1 -1
  65. package/dist/components/OwpSuspense/OwpSuspense.js.map +1 -1
  66. package/dist/components/OwpTable/OwpTable.js +50 -51
  67. package/dist/components/OwpTable/OwpTable.js.map +1 -1
  68. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +163 -308
  69. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  70. package/dist/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.js +1 -1
  71. package/dist/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.js.map +1 -1
  72. package/dist/components/OwpTreeGrid/{OwpTreeGridLoadingOverlay.js → internal/OwpTreeGridLoadingOverlay.js} +2 -2
  73. package/dist/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.js.map +1 -0
  74. package/dist/components/OwpTreeGrid/{OwpTreeGridNoDataOverlay.js → internal/OwpTreeGridNoDataOverlay.js} +2 -2
  75. package/dist/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.js.map +1 -0
  76. package/dist/components/OwpTreeGrid/{utils/index.js → internal/treeGridLayout.js} +1 -1
  77. package/dist/components/OwpTreeGrid/internal/treeGridLayout.js.map +1 -0
  78. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +176 -0
  79. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -0
  80. package/dist/components/OwpTreeGrid/utils/perf.js.map +1 -0
  81. package/dist/components/OwpZoomImageSlider/OwpZoomImageSlider.js +1 -1
  82. package/dist/components/OwpZoomImageSlider/OwpZoomImageSlider.js.map +1 -1
  83. package/dist/components/OwpZoomImageSlider/{ZoomImage.js → internal/ZoomImage.js} +1 -1
  84. package/dist/components/OwpZoomImageSlider/internal/ZoomImage.js.map +1 -0
  85. package/dist/index.js +100 -104
  86. package/dist/index.js.map +1 -1
  87. package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/ArrowDropDown.js +9 -0
  88. package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/ArrowDropDown.js.map +1 -0
  89. package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isFunction.js +10 -0
  90. package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isFunction.js.map +1 -0
  91. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
  92. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
  93. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
  94. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
  95. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
  96. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
  97. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
  98. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
  99. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
  100. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
  101. package/dist/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js +1 -1
  102. package/dist/node_modules/.pnpm/react-imask@7.6.1_react@19.2.4/node_modules/react-imask/esm/mixin.js +1 -1
  103. package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
  104. package/dist/owp-app.css +1 -1
  105. package/dist/types/components/OwpCommonCode/OwpCommonCodeSelector.d.ts +16 -6
  106. package/dist/types/components/OwpOptionSelector/OwpOptionSelector.d.ts +9 -8
  107. package/dist/types/components/OwpPageCarded/OwpPageCarded.d.ts +12 -41
  108. package/dist/types/components/OwpPageSkeleton/index.d.ts +1 -0
  109. package/dist/types/components/OwpPicker/OwpWeekDatePicker.d.ts +0 -1
  110. package/dist/types/components/OwpPicker/OwpYearRangePicker.d.ts +0 -1
  111. package/dist/types/components/OwpQuerySelector/OwpQuerySelector.d.ts +6 -0
  112. package/dist/types/components/OwpQuerySelector/index.d.ts +2 -0
  113. package/dist/types/components/OwpQuerySelector/types/index.d.ts +1 -0
  114. package/dist/types/components/OwpQuerySelector/types/types.d.ts +44 -0
  115. package/dist/types/components/OwpSelectorBase/OwpSelectorAutocomplete.d.ts +11 -0
  116. package/dist/types/components/OwpSelectorBase/OwpSelectorBase.d.ts +6 -0
  117. package/dist/types/components/OwpSelectorBase/OwpSelectorSelect.d.ts +11 -0
  118. package/dist/types/components/OwpSelectorBase/hooks/useOwpSelectorBase.d.ts +6 -0
  119. package/dist/types/components/OwpSelectorBase/types/index.d.ts +1 -0
  120. package/dist/types/components/OwpSelectorBase/types/types.d.ts +59 -0
  121. package/dist/types/components/OwpSelectorBase/utils/index.d.ts +1 -0
  122. package/dist/types/components/OwpSelectorBase/utils/querySelectorUtils.d.ts +31 -0
  123. package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +3 -1
  124. package/dist/types/components/OwpTreeGrid/{OwpTreeGridLoadingOverlay.d.ts → internal/OwpTreeGridLoadingOverlay.d.ts} +1 -1
  125. package/dist/types/components/OwpTreeGrid/{OwpTreeGridNoDataOverlay.d.ts → internal/OwpTreeGridNoDataOverlay.d.ts} +1 -1
  126. package/dist/types/components/OwpTreeGrid/{utils/index.d.ts → internal/treeGridLayout.d.ts} +0 -2
  127. package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +75 -0
  128. package/dist/types/index.d.ts +2 -4
  129. package/dist/types/store/navigationSlice.d.ts +1 -0
  130. package/dist/types/types/OwpNavigationTypes.d.ts +14 -0
  131. package/dist/types/types/index.d.ts +1 -1
  132. package/dist/types/utils/index.d.ts +1 -0
  133. package/dist/types/utils/navigationUtils.d.ts +6 -2
  134. package/dist/types/utils/normalizeTimeToHourMinute.d.ts +11 -0
  135. package/dist/utils/navigationUtils.js.map +1 -1
  136. package/dist/utils/normalizeTimeToHourMinute.js +34 -0
  137. package/dist/utils/normalizeTimeToHourMinute.js.map +1 -0
  138. package/dist/utils/treeGridUtil.js +1 -1
  139. package/dist/utils/treeGridUtil.js.map +1 -1
  140. package/dist/utils.js +78 -75
  141. package/dist/utils.js.map +1 -1
  142. package/package.json +1 -1
  143. package/dist/components/OwpMrtTable/OwpMrtTableNoDataOverlay.js.map +0 -1
  144. package/dist/components/OwpMrtTable/OwpMrtTableTopToolbar.js.map +0 -1
  145. package/dist/components/OwpPageCarded/OwpPageCardedHeader.js.map +0 -1
  146. package/dist/components/OwpPageCarded/OwpPageCardedSidebar.js.map +0 -1
  147. package/dist/components/OwpPageCarded/OwpPageCardedSidebarContent.js.map +0 -1
  148. package/dist/components/OwpPicker/AnimatedCalendarContainer.js.map +0 -1
  149. package/dist/components/OwpPicker/CalendarContainer.js.map +0 -1
  150. package/dist/components/OwpPicker/DatePickerInput.js.map +0 -1
  151. package/dist/components/OwpPicker/constants.js.map +0 -1
  152. package/dist/components/OwpTreeGrid/OwpTreeGridLoadingOverlay.js.map +0 -1
  153. package/dist/components/OwpTreeGrid/OwpTreeGridNoDataOverlay.js.map +0 -1
  154. package/dist/components/OwpTreeGrid/perf.js.map +0 -1
  155. package/dist/components/OwpTreeGrid/utils/index.js.map +0 -1
  156. package/dist/components/OwpZoomImageSlider/ZoomImage.js.map +0 -1
  157. package/dist/node_modules/.pnpm/react-datepicker@8.7.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/react-datepicker.css +0 -1
  158. /package/dist/components/OwpTreeGrid/{perf.js → utils/perf.js} +0 -0
  159. /package/dist/types/components/OwpMrtTable/{OwpMrtTableNoDataOverlay.d.ts → internal/OwpMrtTableNoDataOverlay.d.ts} +0 -0
  160. /package/dist/types/components/OwpMrtTable/{OwpMrtTableTopToolbar.d.ts → internal/OwpMrtTableTopToolbar.d.ts} +0 -0
  161. /package/dist/types/components/OwpPageCarded/{OwpPageCardedHeader.d.ts → internal/OwpPageCardedHeader.d.ts} +0 -0
  162. /package/dist/types/components/OwpPageCarded/{OwpPageCardedSidebar.d.ts → internal/OwpPageCardedSidebar.d.ts} +0 -0
  163. /package/dist/types/components/OwpPageCarded/{OwpPageCardedSidebarContent.d.ts → internal/OwpPageCardedSidebarContent.d.ts} +0 -0
  164. /package/dist/types/components/OwpPicker/{constants.d.ts → constants/index.d.ts} +0 -0
  165. /package/dist/types/components/OwpPicker/{AnimatedCalendarContainer.d.ts → internal/AnimatedCalendarContainer.d.ts} +0 -0
  166. /package/dist/types/components/OwpPicker/{CalendarContainer.d.ts → internal/CalendarContainer.d.ts} +0 -0
  167. /package/dist/types/components/OwpPicker/{DatePickerInput.d.ts → internal/DatePickerInput.d.ts} +0 -0
  168. /package/dist/types/components/OwpTreeGrid/{perf.d.ts → utils/perf.d.ts} +0 -0
  169. /package/dist/types/components/OwpZoomImageSlider/{ZoomImage.d.ts → internal/ZoomImage.d.ts} +0 -0
@@ -31,6 +31,4 @@ export declare const convertXmlToJson: (xmlString?: string) => TreeGridSectionCo
31
31
  * @param disableBodyReload disableBodyReload 값
32
32
  */
33
33
  export declare const applyTreeGridLayoutToGrid: (grid: TTGrid | TGrid, layoutConfig?: OwpTreeGridLayoutConfig, disableBodyReload?: boolean) => void;
34
- export declare const updateLayoutByGrid: (grid: TTGrid | TGrid, layoutConfig?: OwpTreeGridLayoutConfig, disableBodyReload?: boolean) => void;
35
- export declare const applyTreeGridLayoutByGrid: (grid: TTGrid | TGrid, layoutConfig?: OwpTreeGridLayoutConfig, disableBodyReload?: boolean) => void;
36
34
  export {};
@@ -0,0 +1,75 @@
1
+ import { type Dispatch, type RefObject, type SetStateAction } from 'react';
2
+ import type { OwpTreeGridBodyData, OwpTreeGridLayoutConfig, OwpTreeGridProps } from '../OwpTreeGrid';
3
+ export declare const TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS = 300;
4
+ type TreeGridInitializationInput<T> = {
5
+ id: string;
6
+ layoutUrl?: string;
7
+ dataUrl?: string;
8
+ bodyData: OwpTreeGridBodyData<T>;
9
+ useDataUrl?: boolean;
10
+ width?: string | number;
11
+ height?: string | number;
12
+ languageId: string;
13
+ };
14
+ export type TreeGridEventHandlers<T> = Pick<OwpTreeGridProps<T>, 'onSelect' | 'onRowClick' | 'onRowAdd' | 'onRowDelete' | 'onRowUndelete' | 'onRowChange' | 'onClickButton' | 'onSave' | 'onReady' | 'onAfterValueChanged'>;
15
+ export type TreeGridEventBindingOptions<T> = Pick<OwpTreeGridProps<T>, 'id'> & {
16
+ latestEventHandlersRef: RefObject<TreeGridEventHandlers<T>>;
17
+ highlightEditableCellsRef: RefObject<boolean>;
18
+ highlightChangedCellsRef: RefObject<boolean>;
19
+ treeGridInstanceRef: RefObject<TGrid>;
20
+ treeGridInitStartedAtRef: RefObject<number | null>;
21
+ latestLayoutOverridesRef: RefObject<OwpTreeGridLayoutConfig | undefined>;
22
+ appliedLayoutOverridesRef: RefObject<OwpTreeGridLayoutConfig | undefined>;
23
+ appliedBodyDataPropRef: RefObject<OwpTreeGridBodyData<T>>;
24
+ hasAppliedInitialLayoutRef: RefObject<boolean>;
25
+ syncHasDisplayDataRows: (grid: TGrid | null) => void;
26
+ setIsTreeGridReady: Dispatch<SetStateAction<boolean>>;
27
+ };
28
+ /**
29
+ * TreeGrid 초기화 옵션 생성
30
+ * @param input 초기화 입력값
31
+ */
32
+ export declare const buildTreeGridInitializationOptions: <T>({ id, layoutUrl, dataUrl, bodyData, useDataUrl, width, height, languageId, }: TreeGridInitializationInput<T>) => {
33
+ id: string;
34
+ Layout: {
35
+ Url: string;
36
+ };
37
+ Data: {
38
+ Url: string;
39
+ Data?: undefined;
40
+ } | {
41
+ Data: {
42
+ Body: OwpTreeGridBodyData<T>[];
43
+ };
44
+ Url?: undefined;
45
+ };
46
+ Text: {
47
+ Url: "/assets/vendors/Grid/TextEN.xml" | "/assets/vendors/Grid/TextKR.xml";
48
+ };
49
+ width: string | number;
50
+ height: string | number;
51
+ Debug: string;
52
+ };
53
+ /**
54
+ * TreeGrid Body 데이터 건수
55
+ * @param bodyData TreeGrid Body 데이터
56
+ */
57
+ export declare const getTreeGridBodyDataCount: <T>(bodyData: OwpTreeGridBodyData<T>) => number;
58
+ /**
59
+ * TreeGrid 표시 데이터 행 존재 여부
60
+ * @param grid TreeGrid 인스턴스
61
+ */
62
+ export declare const hasTreeGridDisplayDataRows: (grid: TGrid | null) => boolean;
63
+ /**
64
+ * TreeGrid Body 데이터 교체 후 재로드
65
+ * @param grid TreeGrid 인스턴스
66
+ * @param bodyData 새 Body 데이터
67
+ * @param onReloadFinish 재로드 완료 콜백
68
+ */
69
+ export declare const replaceTreeGridBodyData: <T>(grid: TGrid, bodyData: OwpTreeGridBodyData<T>, onReloadFinish?: (code: number) => void) => void;
70
+ /**
71
+ * TreeGrid 이벤트 바인딩
72
+ * @param options 이벤트 바인딩 옵션
73
+ */
74
+ export declare const bindTreeGridEvents: <T>({ id, latestEventHandlersRef, highlightEditableCellsRef, highlightChangedCellsRef, treeGridInstanceRef, treeGridInitStartedAtRef, latestLayoutOverridesRef, appliedLayoutOverridesRef, appliedBodyDataPropRef, hasAppliedInitialLayoutRef, syncHasDisplayDataRows, setIsTreeGridReady, }: TreeGridEventBindingOptions<T>) => void;
75
+ export {};
@@ -18,13 +18,11 @@ export * from './components/OwpMoreActionsButton/OwpMoreActionsButton';
18
18
  export * from './components/OwpNumberField';
19
19
  export * from './components/OwpOptionSelector';
20
20
  export * from './components/OwpPageCarded';
21
- export * from './components/OwpPageCarded/OwpPageCardedHeader';
22
- export * from './components/OwpPageCarded/OwpPageCardedSidebar';
23
- export * from './components/OwpPageCarded/OwpPageCardedSidebarContent';
24
21
  export * from './components/OwpPageBreadcrumb';
25
22
  export * from './components/OwpPageContent';
26
23
  export * from './components/OwpPageLockLoading';
27
24
  export * from './components/OwpPageTitle';
25
+ export * from './components/OwpQuerySelector';
28
26
  export * from './components/OwpPicker/OwpDatePicker';
29
27
  export * from './components/OwpPicker/OwpDateRangePicker';
30
28
  export * from './components/OwpPicker/OwpTimePicker';
@@ -47,4 +45,4 @@ export * from './components/OwpTreeGrid';
47
45
  export * from './components/OwpTreeGrid/OwpTreeGridToolbar';
48
46
  export * from './components/OwpZoomImageSlider/OwpZoomImageSlider';
49
47
  export * from './components/OwpYesNoSelector';
50
- export type { OwpFlatNavItemType, OwpNavBadgeType, OwpNavItemType } from './types/OwpNavigationTypes';
48
+ export type { OwpFlatNavItemType, OwpNavBadgeType, OwpNavPermission, OwpNavItemType, OwpPermissionFlag, } from './types/OwpNavigationTypes';
@@ -43,6 +43,7 @@ export declare const selectNavigationAll: (state: {
43
43
  exact?: boolean;
44
44
  end?: boolean;
45
45
  badge?: import("@/types/OwpNavigationTypes").OwpNavBadgeType;
46
+ permission?: import("@/types/OwpNavigationTypes").OwpNavPermission;
46
47
  hasPermission?: boolean;
47
48
  children?: string[];
48
49
  order: string;
@@ -8,6 +8,19 @@ export type OwpNavBadgeType = {
8
8
  title: string;
9
9
  classes?: string;
10
10
  };
11
+ /**
12
+ * Navigation permission flag
13
+ */
14
+ export type OwpPermissionFlag = 'T' | 'F';
15
+ /**
16
+ * Navigation permission metadata
17
+ */
18
+ export interface OwpNavPermission {
19
+ U_PERMISSION: OwpPermissionFlag;
20
+ C_PERMISSION: OwpPermissionFlag;
21
+ D_PERMISSION: OwpPermissionFlag;
22
+ R_PERMISSION: OwpPermissionFlag;
23
+ }
11
24
  /**
12
25
  * Navigation item descriptor
13
26
  */
@@ -28,6 +41,7 @@ export type OwpNavItemType = {
28
41
  exact?: boolean;
29
42
  end?: boolean;
30
43
  badge?: OwpNavBadgeType;
44
+ permission?: OwpNavPermission;
31
45
  children?: OwpNavItemType[];
32
46
  hasPermission?: boolean;
33
47
  };
@@ -1,3 +1,3 @@
1
1
  export type { OwpThemeType, OwpThemesType, OwpSettingsConfigType, } from './OwpSettingsTypes';
2
- export type { OwpFlatNavItemType, OwpNavBadgeType, OwpNavItemType, } from './OwpNavigationTypes';
2
+ export type { OwpFlatNavItemType, OwpNavBadgeType, OwpNavPermission, OwpNavItemType, OwpPermissionFlag, } from './OwpNavigationTypes';
3
3
  export type { AnyFormFieldType, ThemeFormConfigTypes } from './ThemeFormConfigTypes';
@@ -15,6 +15,7 @@ export * from './getStartPagePath';
15
15
  export * from './getTrimmedValue';
16
16
  export * from './isEnterKeyEvent';
17
17
  export * from './language';
18
+ export * from './normalizeTimeToHourMinute';
18
19
  export * from './preloadOnIdle';
19
20
  export * from './qrCodeUtil';
20
21
  export * from './rebuildValue';
@@ -1,10 +1,13 @@
1
- import type { OwpFlatNavItemType, OwpNavItemType } from '@/types/OwpNavigationTypes';
1
+ import type { OwpFlatNavItemType, OwpNavItemType, OwpNavPermission } from '@/types/OwpNavigationTypes';
2
2
  import type { Pathname } from 'history';
3
3
  import type { PartialDeep } from 'type-fest';
4
+ type OwpNavItemModelInput = PartialDeep<Omit<OwpNavItemType, 'permission'>> & {
5
+ permission?: OwpNavPermission;
6
+ };
4
7
  /**
5
8
  * Navigation item model factory
6
9
  */
7
- export declare function OwpNavItemModel(data?: PartialDeep<OwpNavItemType>): OwpNavItemType;
10
+ export declare function OwpNavItemModel(data?: OwpNavItemModelInput): OwpNavItemType;
8
11
  /**
9
12
  * Navigation child URL matcher
10
13
  */
@@ -33,3 +36,4 @@ export declare class OwpNavigationHelper {
33
36
  static flattenNavigation(navigation: OwpNavItemType[], parentOrder?: string): OwpFlatNavItemType[];
34
37
  static unflattenNavigation(navigation: OwpFlatNavItemType[]): OwpNavItemType[];
35
38
  }
39
+ export {};
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 시간 입력 문자열을 편집 중 HH:mm 형태로 포맷
3
+ * @param value 현재 입력값
4
+ * @param oldValue 이전 입력값
5
+ */
6
+ export declare const formatTimeInputToHourMinute: (value: string, oldValue?: string) => string;
7
+ /**
8
+ * 시간 문자열을 HH:mm 형식으로 정규화
9
+ * @param value 원본 시간 문자열
10
+ */
11
+ export declare const normalizeTimeToHourMinute: (value?: string | null) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"navigationUtils.js","sources":["../../src/utils/navigationUtils.ts"],"sourcesContent":["import type { OwpFlatNavItemType, OwpNavItemType } from '@/types/OwpNavigationTypes';\nimport { merge } from 'es-toolkit/compat';\nimport { defaults, uniqueId } from 'es-toolkit/compat';\nimport type { Pathname } from 'history';\nimport type { PartialDeep } from 'type-fest';\n\n/**\n * Navigation item model factory\n */\nexport function OwpNavItemModel(data?: PartialDeep<OwpNavItemType>): OwpNavItemType {\n return defaults(data || {}, {\n id: uniqueId(),\n title: '',\n translate: '',\n auth: null,\n subtitle: '',\n icon: '',\n iconClass: '',\n url: '',\n target: '',\n type: 'item',\n sx: {},\n disabled: false,\n active: false,\n exact: false,\n end: false,\n badge: null,\n children: [],\n });\n}\n\n/**\n * Navigation child URL matcher\n */\nexport function isUrlInChildren(parent: OwpNavItemType, url: Pathname) {\n if (!parent.children) {\n return false;\n }\n\n for (let i = 0; i < parent.children.length; i += 1) {\n const child = parent.children[i];\n\n if (child.children && isUrlInChildren(child, url)) {\n return true;\n }\n\n if (child.url && (child.url === url || url.includes(child.url))) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Navigation structure helper\n */\nexport class OwpNavigationHelper {\n static selectById(nav: OwpNavItemType[], id: string): OwpNavItemType | undefined {\n for (let i = 0; i < nav.length; i += 1) {\n const item = nav[i];\n\n if (item.id === id) {\n return item;\n }\n\n if (item.children) {\n const childItem = this.selectById(item.children, id);\n\n if (childItem) {\n return childItem;\n }\n }\n }\n\n return undefined;\n }\n\n static appendNavItem(\n nav: OwpNavItemType[],\n item: OwpNavItemType,\n parentId: string | null = null,\n ): OwpNavItemType[] {\n if (!parentId) {\n return [...nav, item];\n }\n\n return nav.map((node) => {\n if (node.id === parentId) {\n const newNode = { ...node };\n newNode.children = [...(node.children || []), item];\n return newNode;\n }\n\n if (node.children) {\n return { ...node, children: this.appendNavItem(node.children, item, parentId) };\n }\n\n return { ...node };\n });\n }\n\n static prependNavItem(\n nav: OwpNavItemType[],\n item: OwpNavItemType,\n parentId: string | null = null,\n ): OwpNavItemType[] {\n if (!parentId) {\n return [item, ...nav];\n }\n\n return nav.map((node) => {\n if (node.id === parentId) {\n const newNode = { ...node };\n newNode.children = [item, ...(node.children || [])];\n return newNode;\n }\n\n if (node.children) {\n return { ...node, children: this.prependNavItem(node.children, item, parentId) };\n }\n\n return { ...node };\n });\n }\n\n static filterNavigationByPermission(\n nav: OwpNavItemType[],\n // @ts-expect-error legacy user role contract\n userRole: User['role'],\n ): OwpNavItemType[] {\n return nav.reduce((acc: OwpNavItemType[], item) => {\n const children = item.children\n ? this.filterNavigationByPermission(item.children, userRole)\n : [];\n\n if (this.hasPermission(item.auth, userRole) || children.length) {\n const newItem = { ...item };\n newItem.children = children.length ? children : undefined;\n acc.push(newItem);\n }\n\n return acc;\n }, []);\n }\n\n /**\n * Navigation item removal\n */\n static removeNavItem(nav: OwpNavItemType[], id: string): OwpNavItemType[] {\n return nav.reduce((acc, node) => {\n if (node.id !== id) {\n if (node.children) {\n acc.push({\n ...node,\n children: this.removeNavItem(node.children, id),\n });\n } else {\n acc.push(node);\n }\n }\n\n return acc;\n }, [] as OwpNavItemType[]);\n }\n\n /**\n * Navigation item update\n */\n static updateNavItem(\n nav: OwpNavItemType[],\n id: string,\n item: PartialDeep<OwpNavItemType>,\n ): OwpNavItemType[] {\n return nav.map((node) => {\n if (node.id === id) {\n return merge({}, node, item);\n }\n\n if (node.children) {\n return {\n ...node,\n children: this.updateNavItem(node.children, id, item),\n };\n }\n\n return node;\n });\n }\n\n /**\n * Flat navigation list extraction\n */\n static getFlatNavigation(navigationItems: OwpNavItemType[] = [], flatNavigation = []) {\n for (let i = 0; i < navigationItems.length; i += 1) {\n const navItem = navigationItems[i];\n\n if (navItem.type === 'item') {\n flatNavigation.push(OwpNavItemModel(navItem));\n }\n\n if ((navItem.type === 'collapse' || navItem.type === 'group') && navItem.children) {\n this.getFlatNavigation(navItem.children, flatNavigation);\n }\n }\n\n return flatNavigation as OwpNavItemType[] | [];\n }\n\n // @ts-expect-error legacy user role contract\n static hasPermission(authArr: string[] | string | undefined, userRole: User['role']): boolean {\n if (authArr === null || authArr === undefined) {\n return true;\n }\n\n if (authArr.length === 0) {\n return !userRole || userRole.length === 0;\n }\n\n if (userRole && Array.isArray(authArr) && Array.isArray(userRole)) {\n return authArr.some((role) => userRole.indexOf(role) >= 0);\n }\n\n return authArr.includes(userRole as string);\n }\n\n static flattenNavigation(\n navigation: OwpNavItemType[],\n parentOrder: string = '',\n ): OwpFlatNavItemType[] {\n return navigation.flatMap((item, index) => {\n const order = parentOrder ? `${parentOrder}.${index + 1}` : `${index + 1}`;\n let flattened: OwpFlatNavItemType[] = [\n { ...item, order, children: item.children?.map((child) => child.id) },\n ];\n\n if (item.children) {\n flattened = flattened.concat(this.flattenNavigation(item.children, order));\n }\n\n return flattened;\n });\n }\n\n static unflattenNavigation(navigation: OwpFlatNavItemType[]): OwpNavItemType[] {\n const itemMap: { [id: string]: OwpNavItemType } = {};\n\n navigation.forEach((item) => {\n itemMap[item.id] = { ...item, children: [] };\n });\n\n const rootItems: OwpNavItemType[] = [];\n\n navigation.forEach((item) => {\n if (item.order.includes('.')) {\n const parentOrder = item.order.substring(0, item.order.lastIndexOf('.'));\n const parent = navigation.find((navItem) => navItem.order === parentOrder);\n\n if (parent) {\n itemMap[parent.id].children!.push(itemMap[item.id]);\n }\n } else {\n rootItems.push(itemMap[item.id]);\n }\n });\n\n return rootItems.map((item) => ({ ...item }));\n }\n}\n"],"names":["OwpNavItemModel","data","defaults","uniqueId","__name","_OwpNavigationHelper","nav","id","i","item","childItem","parentId","node","newNode","userRole","acc","children","newItem","merge","navigationItems","flatNavigation","navItem","authArr","role","navigation","parentOrder","index","order","flattened","_a","child","itemMap","rootItems","parent","OwpNavigationHelper"],"mappings":"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"}
1
+ {"version":3,"file":"navigationUtils.js","sources":["../../src/utils/navigationUtils.ts"],"sourcesContent":["import type {\n OwpFlatNavItemType,\n OwpNavItemType,\n OwpNavPermission,\n} from '@/types/OwpNavigationTypes';\nimport { merge } from 'es-toolkit/compat';\nimport { defaults, uniqueId } from 'es-toolkit/compat';\nimport type { Pathname } from 'history';\nimport type { PartialDeep } from 'type-fest';\n\ntype OwpNavItemModelInput = PartialDeep<Omit<OwpNavItemType, 'permission'>> & {\n permission?: OwpNavPermission;\n};\n\n/**\n * Navigation item model factory\n */\nexport function OwpNavItemModel(data?: OwpNavItemModelInput): OwpNavItemType {\n return defaults(data || {}, {\n id: uniqueId(),\n title: '',\n translate: '',\n auth: null,\n subtitle: '',\n icon: '',\n iconClass: '',\n url: '',\n target: '',\n type: 'item',\n sx: {},\n disabled: false,\n active: false,\n exact: false,\n end: false,\n badge: null,\n children: [],\n });\n}\n\n/**\n * Navigation child URL matcher\n */\nexport function isUrlInChildren(parent: OwpNavItemType, url: Pathname) {\n if (!parent.children) {\n return false;\n }\n\n for (let i = 0; i < parent.children.length; i += 1) {\n const child = parent.children[i];\n\n if (child.children && isUrlInChildren(child, url)) {\n return true;\n }\n\n if (child.url && (child.url === url || url.includes(child.url))) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Navigation structure helper\n */\nexport class OwpNavigationHelper {\n static selectById(nav: OwpNavItemType[], id: string): OwpNavItemType | undefined {\n for (let i = 0; i < nav.length; i += 1) {\n const item = nav[i];\n\n if (item.id === id) {\n return item;\n }\n\n if (item.children) {\n const childItem = this.selectById(item.children, id);\n\n if (childItem) {\n return childItem;\n }\n }\n }\n\n return undefined;\n }\n\n static appendNavItem(\n nav: OwpNavItemType[],\n item: OwpNavItemType,\n parentId: string | null = null,\n ): OwpNavItemType[] {\n if (!parentId) {\n return [...nav, item];\n }\n\n return nav.map((node) => {\n if (node.id === parentId) {\n const newNode = { ...node };\n newNode.children = [...(node.children || []), item];\n return newNode;\n }\n\n if (node.children) {\n return { ...node, children: this.appendNavItem(node.children, item, parentId) };\n }\n\n return { ...node };\n });\n }\n\n static prependNavItem(\n nav: OwpNavItemType[],\n item: OwpNavItemType,\n parentId: string | null = null,\n ): OwpNavItemType[] {\n if (!parentId) {\n return [item, ...nav];\n }\n\n return nav.map((node) => {\n if (node.id === parentId) {\n const newNode = { ...node };\n newNode.children = [item, ...(node.children || [])];\n return newNode;\n }\n\n if (node.children) {\n return { ...node, children: this.prependNavItem(node.children, item, parentId) };\n }\n\n return { ...node };\n });\n }\n\n static filterNavigationByPermission(\n nav: OwpNavItemType[],\n // @ts-expect-error legacy user role contract\n userRole: User['role'],\n ): OwpNavItemType[] {\n return nav.reduce((acc: OwpNavItemType[], item) => {\n const children = item.children\n ? this.filterNavigationByPermission(item.children, userRole)\n : [];\n\n if (this.hasPermission(item.auth, userRole) || children.length) {\n const newItem = { ...item };\n newItem.children = children.length ? children : undefined;\n acc.push(newItem);\n }\n\n return acc;\n }, []);\n }\n\n /**\n * Navigation item removal\n */\n static removeNavItem(nav: OwpNavItemType[], id: string): OwpNavItemType[] {\n return nav.reduce((acc, node) => {\n if (node.id !== id) {\n if (node.children) {\n acc.push({\n ...node,\n children: this.removeNavItem(node.children, id),\n });\n } else {\n acc.push(node);\n }\n }\n\n return acc;\n }, [] as OwpNavItemType[]);\n }\n\n /**\n * Navigation item update\n */\n static updateNavItem(\n nav: OwpNavItemType[],\n id: string,\n item: PartialDeep<OwpNavItemType>,\n ): OwpNavItemType[] {\n return nav.map((node) => {\n if (node.id === id) {\n return merge({}, node, item);\n }\n\n if (node.children) {\n return {\n ...node,\n children: this.updateNavItem(node.children, id, item),\n };\n }\n\n return node;\n });\n }\n\n /**\n * Flat navigation list extraction\n */\n static getFlatNavigation(navigationItems: OwpNavItemType[] = [], flatNavigation = []) {\n for (let i = 0; i < navigationItems.length; i += 1) {\n const navItem = navigationItems[i];\n\n if (navItem.type === 'item') {\n flatNavigation.push(OwpNavItemModel(navItem));\n }\n\n if ((navItem.type === 'collapse' || navItem.type === 'group') && navItem.children) {\n this.getFlatNavigation(navItem.children, flatNavigation);\n }\n }\n\n return flatNavigation as OwpNavItemType[] | [];\n }\n\n // @ts-expect-error legacy user role contract\n static hasPermission(authArr: string[] | string | undefined, userRole: User['role']): boolean {\n if (authArr === null || authArr === undefined) {\n return true;\n }\n\n if (authArr.length === 0) {\n return !userRole || userRole.length === 0;\n }\n\n if (userRole && Array.isArray(authArr) && Array.isArray(userRole)) {\n return authArr.some((role) => userRole.indexOf(role) >= 0);\n }\n\n return authArr.includes(userRole as string);\n }\n\n static flattenNavigation(\n navigation: OwpNavItemType[],\n parentOrder: string = '',\n ): OwpFlatNavItemType[] {\n return navigation.flatMap((item, index) => {\n const order = parentOrder ? `${parentOrder}.${index + 1}` : `${index + 1}`;\n let flattened: OwpFlatNavItemType[] = [\n { ...item, order, children: item.children?.map((child) => child.id) },\n ];\n\n if (item.children) {\n flattened = flattened.concat(this.flattenNavigation(item.children, order));\n }\n\n return flattened;\n });\n }\n\n static unflattenNavigation(navigation: OwpFlatNavItemType[]): OwpNavItemType[] {\n const itemMap: { [id: string]: OwpNavItemType } = {};\n\n navigation.forEach((item) => {\n itemMap[item.id] = { ...item, children: [] };\n });\n\n const rootItems: OwpNavItemType[] = [];\n\n navigation.forEach((item) => {\n if (item.order.includes('.')) {\n const parentOrder = item.order.substring(0, item.order.lastIndexOf('.'));\n const parent = navigation.find((navItem) => navItem.order === parentOrder);\n\n if (parent) {\n itemMap[parent.id].children!.push(itemMap[item.id]);\n }\n } else {\n rootItems.push(itemMap[item.id]);\n }\n });\n\n return rootItems.map((item) => ({ ...item }));\n }\n}\n"],"names":["OwpNavItemModel","data","defaults","uniqueId","__name","_OwpNavigationHelper","nav","id","i","item","childItem","parentId","node","newNode","userRole","acc","children","newItem","merge","navigationItems","flatNavigation","navItem","authArr","role","navigation","parentOrder","index","order","flattened","_a","child","itemMap","rootItems","parent","OwpNavigationHelper"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ var o = Object.defineProperty;
2
+ var r = (e, n) => o(e, "name", { value: n, configurable: !0 });
3
+ import { isString as l } from "../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isString.js";
4
+ const m = /* @__PURE__ */ r((e) => {
5
+ const n = e.replace(/[^\d:]/g, "");
6
+ if (!n.includes(":"))
7
+ return n.slice(0, 4);
8
+ const [i = "", t = ""] = n.split(":");
9
+ return `${i.slice(0, 2)}:${t.replace(/:/g, "").slice(0, 3)}`;
10
+ }, "sanitizeTimeInputValue"), a = /* @__PURE__ */ r((e) => e.replace(/\D/g, "").slice(0, 4), "getTimeDigits"), f = /* @__PURE__ */ r((e, n = "") => {
11
+ const i = m(e);
12
+ if (!i)
13
+ return "";
14
+ if (e.length < n.length)
15
+ return i;
16
+ const t = a(e);
17
+ return t.length === 1 ? `${t}:` : t.length === 2 ? `${t}:` : t.length === 3 ? `${t.slice(0, 1)}:${t.slice(1)}` : `${t.slice(0, 2)}:${t.slice(2, 4)}`;
18
+ }, "formatTimeInputToHourMinute"), h = /* @__PURE__ */ r((e) => {
19
+ if (!l(e))
20
+ return null;
21
+ const n = f(e.trim());
22
+ if (!n)
23
+ return "";
24
+ const i = n.match(/^(\d{1,2}):(\d{2})$/);
25
+ if (!i)
26
+ return null;
27
+ const [, t = "", s = ""] = i, u = Number(t), c = Number(s);
28
+ return u < 0 || u > 23 || c < 0 || c > 59 ? null : `${u.toString().padStart(2, "0")}:${s}`;
29
+ }, "normalizeTimeToHourMinute");
30
+ export {
31
+ f as formatTimeInputToHourMinute,
32
+ h as normalizeTimeToHourMinute
33
+ };
34
+ //# sourceMappingURL=normalizeTimeToHourMinute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeTimeToHourMinute.js","sources":["../../src/utils/normalizeTimeToHourMinute.ts"],"sourcesContent":["import { isString } from 'es-toolkit/compat';\n\nconst sanitizeTimeInputValue = (value: string) => {\n const sanitizedValue = value.replace(/[^\\d:]/g, '');\n\n if (!sanitizedValue.includes(':')) {\n return sanitizedValue.slice(0, 4);\n }\n\n const [hourText = '', minuteText = ''] = sanitizedValue.split(':');\n\n return `${hourText.slice(0, 2)}:${minuteText.replace(/:/g, '').slice(0, 3)}`;\n};\n\nconst getTimeDigits = (value: string) => value.replace(/\\D/g, '').slice(0, 4);\n\n/**\n * 시간 입력 문자열을 편집 중 HH:mm 형태로 포맷\n * @param value 현재 입력값\n * @param oldValue 이전 입력값\n */\nexport const formatTimeInputToHourMinute = (value: string, oldValue = '') => {\n const sanitizedValue = sanitizeTimeInputValue(value);\n\n if (!sanitizedValue) {\n return '';\n }\n\n if (value.length < oldValue.length) {\n return sanitizedValue;\n }\n\n const digits = getTimeDigits(value);\n\n if (digits.length === 1) {\n return `${digits}:`;\n }\n\n if (digits.length === 2) {\n return `${digits}:`;\n }\n\n if (digits.length === 3) {\n return `${digits.slice(0, 1)}:${digits.slice(1)}`;\n }\n\n return `${digits.slice(0, 2)}:${digits.slice(2, 4)}`;\n};\n\n/**\n * 시간 문자열을 HH:mm 형식으로 정규화\n * @param value 원본 시간 문자열\n */\nexport const normalizeTimeToHourMinute = (value?: string | null) => {\n if (!isString(value)) {\n return null;\n }\n\n const formattedValue = formatTimeInputToHourMinute(value.trim());\n\n if (!formattedValue) {\n return '';\n }\n\n const timeMatch = formattedValue.match(/^(\\d{1,2}):(\\d{2})$/);\n\n if (!timeMatch) {\n return null;\n }\n\n const [, hourText = '', minuteText = ''] = timeMatch;\n const hour = Number(hourText);\n const minute = Number(minuteText);\n\n if (hour < 0 || hour > 23 || minute < 0 || minute > 59) {\n return null;\n }\n\n return `${hour.toString().padStart(2, '0')}:${minuteText}`;\n};\n"],"names":["sanitizeTimeInputValue","__name","value","sanitizedValue","hourText","minuteText","getTimeDigits","formatTimeInputToHourMinute","oldValue","digits","normalizeTimeToHourMinute","isString","formattedValue","timeMatch","hour","minute"],"mappings":";;;AAEA,MAAMA,IAAyB,gBAAAC,EAAA,CAACC,MAAkB;AAChD,QAAMC,IAAiBD,EAAM,QAAQ,WAAW,EAAE;AAElD,MAAI,CAACC,EAAe,SAAS,GAAG;AAC9B,WAAOA,EAAe,MAAM,GAAG,CAAC;AAGlC,QAAM,CAACC,IAAW,IAAIC,IAAa,EAAE,IAAIF,EAAe,MAAM,GAAG;AAEjE,SAAO,GAAGC,EAAS,MAAM,GAAG,CAAC,CAAC,IAAIC,EAAW,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAC5E,GAV+B,2BAYzBC,IAAgB,gBAAAL,EAAA,CAACC,MAAkBA,EAAM,QAAQ,OAAO,EAAE,EAAE,MAAM,GAAG,CAAC,GAAtD,kBAOTK,IAA8B,gBAAAN,EAAA,CAACC,GAAeM,IAAW,OAAO;AAC3E,QAAML,IAAiBH,EAAuBE,CAAK;AAEnD,MAAI,CAACC;AACH,WAAO;AAGT,MAAID,EAAM,SAASM,EAAS;AAC1B,WAAOL;AAGT,QAAMM,IAASH,EAAcJ,CAAK;AAElC,SAAIO,EAAO,WAAW,IACb,GAAGA,CAAM,MAGdA,EAAO,WAAW,IACb,GAAGA,CAAM,MAGdA,EAAO,WAAW,IACb,GAAGA,EAAO,MAAM,GAAG,CAAC,CAAC,IAAIA,EAAO,MAAM,CAAC,CAAC,KAG1C,GAAGA,EAAO,MAAM,GAAG,CAAC,CAAC,IAAIA,EAAO,MAAM,GAAG,CAAC,CAAC;AACpD,GA1B2C,gCAgC9BC,IAA4B,gBAAAT,EAAA,CAACC,MAA0B;AAClE,MAAI,CAACS,EAAST,CAAK;AACjB,WAAO;AAGT,QAAMU,IAAiBL,EAA4BL,EAAM,KAAA,CAAM;AAE/D,MAAI,CAACU;AACH,WAAO;AAGT,QAAMC,IAAYD,EAAe,MAAM,qBAAqB;AAE5D,MAAI,CAACC;AACH,WAAO;AAGT,QAAM,CAAA,EAAGT,IAAW,IAAIC,IAAa,EAAE,IAAIQ,GACrCC,IAAO,OAAOV,CAAQ,GACtBW,IAAS,OAAOV,CAAU;AAEhC,SAAIS,IAAO,KAAKA,IAAO,MAAMC,IAAS,KAAKA,IAAS,KAC3C,OAGF,GAAGD,EAAK,WAAW,SAAS,GAAG,GAAG,CAAC,IAAIT,CAAU;AAC1D,GA1ByC;"}
@@ -2,7 +2,7 @@ var E = Object.defineProperty;
2
2
  var s = (t, e) => E(t, "name", { value: e, configurable: !0 });
3
3
  import { TREEGRID_CELL_HIGHLIGHT_CLASS as C, TREEGRID_CELL_HIGHLIGHT_COLOR as f } from "../constants/treeGrid.js";
4
4
  import { TREEGRID_INPUT_CELL_COLOR as we, TREEGRID_WARNING_CELL_COLOR as he } from "../constants/treeGrid.js";
5
- import { parseTreeGridXmlToJson as I } from "../components/OwpTreeGrid/utils/index.js";
5
+ import { parseTreeGridXmlToJson as I } from "../components/OwpTreeGrid/internal/treeGridLayout.js";
6
6
  import { emitTreeGridBodyRowsChanged as G } from "./treeGridBodyRowsEvent.js";
7
7
  import { isArray as w } from "../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isArray.js";
8
8
  import { lowerCase as h } from "../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/string/lowerCase.js";
@@ -1 +1 @@
1
- {"version":3,"file":"treeGridUtil.js","sources":["../../src/utils/treeGridUtil.ts"],"sourcesContent":["import {\n TREEGRID_CELL_HIGHLIGHT_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { parseTreeGridXmlToJson } from '@/components/OwpTreeGrid/utils';\nimport { emitTreeGridBodyRowsChanged } from '@/utils/treeGridBodyRowsEvent';\nimport { isPlainObject } from 'es-toolkit';\nimport { get, isArray, isEmpty, lowerCase, omit, without } from 'es-toolkit/compat';\n\nexport {\n TREEGRID_CELL_HIGHLIGHT_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n};\n\ntype TreeGridInsertPosition = 'above' | 'below' | 'top' | 'last';\n\ntype TreeGridAddRowOptions<T> = {\n canSelect?: boolean;\n insertPosition?: TreeGridInsertPosition;\n parent?: TRow & T;\n anchorRow?: TRow & T;\n initialValues?: T;\n};\n\ntype TreeGridColumnVisibilityOptions = {\n targetKey: string;\n canVisible: boolean;\n};\n\ntype TreeGridHighlightTargetOption = {\n row: TRow;\n col: string;\n};\n\ntype TreeGridChangeStatus = 'Added' | 'Changed';\ntype TreeGridChangedRow = Record<string, unknown>;\n\nconst TREEGRID_CHANGE_STATUSES: TreeGridChangeStatus[] = ['Added', 'Changed'];\nconst TREEGRID_DATA_KEY_PREFIXES = ['OWP', 'IPX'];\n\n/**\n * TreeGrid 엑셀 내보내기 유틸 로더\n */\nconst loadExportTreeGridExcel = async () => {\n const { exportTreeGridExcel } = await import('./treeGridExportExcelUtil');\n\n return exportTreeGridExcel;\n};\n\n/**\n * TreeGrid 데이터 행 목록 추출\n * @param grid TreeGrid 인스턴스\n */\nconst getDataRows = (grid: TGrid | undefined) => {\n return Object.values(grid?.Rows ?? {}).filter((item) => item.Kind === 'Data');\n};\n\n/**\n * 신규 행 추가 대상 계산\n * @param grid TreeGrid 인스턴스\n * @param options 행 추가 옵션\n */\nconst resolveRowInsertionTarget = <T>(grid: TGrid, options?: TreeGridAddRowOptions<T>) => {\n const insertPosition = options?.insertPosition ?? 'top';\n const parent = options?.parent;\n const anchorRow = options?.anchorRow;\n\n let resolvedParent = parent ?? (anchorRow ? anchorRow.parentNode : null) ?? grid.GetFirst();\n let next = null;\n\n switch (insertPosition) {\n case 'top':\n next = grid.GetFirst();\n break;\n\n case 'last':\n resolvedParent = grid.GetNext(grid.GetLast(), grid.RowCount > 0 ? grid.RowCount + 1 : 0);\n next = resolvedParent;\n break;\n\n case 'above':\n next = anchorRow ?? grid.GetFirst();\n break;\n\n case 'below':\n next = anchorRow?.nextSibling ?? grid.GetFirst();\n break;\n }\n\n return { resolvedParent, next };\n};\n\n/**\n * 신규 행 초기값 반영\n * @param row 생성된 TreeGrid 행\n * @param initialValues 신규 행 초기값\n */\nconst assignInitialRowValues = <T>(row: TRow, initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return;\n }\n\n Object.entries(initialValues as Record<string, unknown>).forEach(([rowKey, rowValue]) => {\n (row as unknown as Record<string, unknown>)[rowKey] = rowValue;\n });\n};\n\n/**\n * 변경 데이터 컬럼 키 여부 확인\n * @param key 컬럼 키\n */\nconst isTreeGridDataKey = (key: string) => {\n return TREEGRID_DATA_KEY_PREFIXES.some((prefix) => key.startsWith(prefix));\n};\n\n/**\n * 추가 행 데이터 정규화\n * @param row TreeGrid 변경 행 데이터\n */\nconst normalizeAddedRow = <T>(row: TreeGridChangedRow) => {\n return Object.fromEntries(\n without(Object.keys(row), 'id')\n .filter((key) => isTreeGridDataKey(key) && !isEmpty(row[key]))\n .map((key) => [key, row[key]]),\n ) as T;\n};\n\n/**\n * 변경 상태별 행 데이터 반환\n * @param rows TreeGrid 변경 행 목록\n * @param status 조회할 변경 상태\n */\nconst getChangedRowsByStatus = <T>(rows: TreeGridChangedRow[], status: TreeGridChangeStatus) => {\n return rows\n .filter((row) => get(row, status) === '1' && row.Deleted !== '1')\n .map((row) => (status === 'Changed' ? omit(row, ['id', 'Changed']) : normalizeAddedRow<T>(row)))\n .filter((row) => !isEmpty(row));\n};\n\n/**\n * TreeGrid 인스턴스 ID 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridById = (gridId: string) => {\n return Grids[gridId];\n};\n\n/**\n * TreeGrid 데이터 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridDataRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n return getDataRows(grid) as T;\n};\n\n/**\n * TreeGrid Body 데이터 교체 후 재로드\n * @param gridId TreeGrid 인스턴스 ID\n * @param rows 새로 반영할 행 데이터\n */\nexport const reloadTreeGridBodyById = (gridId: string, rows: unknown) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n // @ts-expect-error - Data property not defined in type\n const currentData = grid.Data.Data;\n\n // @ts-expect-error - Data property not defined in type\n grid.Data.Data = {\n ...currentData,\n Data: { Body: [rows || []] },\n Url: '',\n };\n grid.ReloadBody();\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * 행을 특정 위치에 추가\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.canSelect 행 선택 가능 여부\n * @param options.parent 부모 행\n * @param options.anchorRow above/below용 기준 행\n * @param options.insertPosition 행 삽입 위치\n * @param options.initialValues 신규 행 초기값\n */\nexport const addTreeGridRowById = <T>(\n gridId: string,\n options?: TreeGridAddRowOptions<T>,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const canSelect = options?.canSelect;\n const initialValues = options?.initialValues;\n const { resolvedParent, next } = resolveRowInsertionTarget(grid, options);\n\n const newRow = grid.AddRow(resolvedParent, next, 1);\n\n assignInitialRowValues(newRow, initialValues);\n\n newRow.CanEdit = 1;\n newRow.CanDelete = 1;\n newRow.CanSelect = canSelect ? 1 : 0;\n\n grid.Focus(newRow);\n grid.RefreshRow(newRow);\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * TreeGrid 추가/수정 데이터 행 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridRowChangesById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const changesData = parseTreeGridXmlToJson(grid?.GetXmlData('changes,allcols,nogrid,noio'));\n\n if (!isArray(changesData)) {\n return { added: [], changed: [] };\n }\n\n return Object.fromEntries(\n TREEGRID_CHANGE_STATUSES.map((status) => [\n lowerCase(status),\n getChangedRowsByStatus<T>(changesData as TreeGridChangedRow[], status),\n ]),\n ) as { added: T[]; changed: T[] };\n};\n\n/**\n * TreeGrid 데이터 엑셀 내보내기\n * @param gridId TreeGrid 인스턴스 ID\n * @param title 다운로드 파일명\n */\nexport const exportTreeGridToExcelById = (gridId: string, title?: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n void loadExportTreeGridExcel().then((exportTreeGridExcel) =>\n exportTreeGridExcel(grid, { exportName: title ?? '' }),\n );\n};\n\n/**\n * TreeGrid 현재 선택 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridSelectedRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const selectedRows = grid?.GetSelRows();\n\n return (selectedRows as T) ?? [];\n};\n\n/**\n * TreeGrid 컬럼 표시 여부 변경\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.targetKey 표시 상태를 변경할 컬럼 키\n * @param options.canVisible 컬럼 표시 여부\n */\nexport const setTreeGridColumnVisibilityById = (\n gridId: string,\n options: TreeGridColumnVisibilityOptions,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid || !options?.targetKey) {\n return;\n }\n\n const targetKey = options?.targetKey;\n const canVisible = options?.canVisible;\n\n if (canVisible) {\n grid.ShowCol(targetKey);\n return;\n }\n grid.HideCol(targetKey);\n};\n\n/**\n * 특정 셀 강조 스타일 적용\n * @param gridId TreeGrid 인스턴스 ID\n * @param targetOption.row 강조할 대상 행\n * @param targetOption.col 강조할 대상 컬럼\n */\nexport const highlightTreeGridCellById = (\n gridId: string,\n targetOption: TreeGridHighlightTargetOption,\n) => {\n const grid = getTreeGridById(gridId);\n\n const row = targetOption?.row;\n const col = targetOption?.col;\n\n if (!grid || !row || !col) {\n return;\n }\n\n grid.SetValue(row, `${col}Class`, TREEGRID_CELL_HIGHLIGHT_CLASS);\n grid.SetValue(row, `${col}Color`, TREEGRID_CELL_HIGHLIGHT_COLOR);\n grid.RefreshCell(row, col);\n};\n\n/**\n * TreeGrid 현재 선택 상태 전체 해제\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridSelectionById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionDeselectAll(1, 0);\n};\n\n/**\n * 여러 TreeGrid 선택 상태 전체 해제\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridSelectionsByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridSelectionById);\n};\n\n/**\n * TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridChangesById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionUndoAll(1, 0);\n resetTreeGridSelectionById(gridId);\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * 여러 TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridChangesByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridChangesById);\n};\n\n/**\n * TreeGrid Enum 컬럼 옵션 반영\n * @param gridId TreeGrid 인스턴스 ID\n * @param columnName Enum을 적용할 컬럼명\n * @param options Enum 옵션 목록\n * @param valueKey Enum 값으로 사용할 필드명\n * @param labelKeys Enum 라벨로 사용할 필드 우선순위 목록\n */\nexport const setTreeGridColumnEnumOptionsById = <T extends object>(\n gridId: string,\n columnName: string,\n options: T[] | undefined,\n valueKey: keyof T & string,\n labelKeys: Array<keyof T & string>,\n) => {\n if (!options?.length) {\n return;\n }\n\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const enumValues = options\n .map((item) => {\n const option = item as Record<string, unknown>;\n const labelValue = labelKeys\n .map((labelKey) => option[labelKey])\n .find((value) => value !== undefined && value !== null && value !== '');\n\n return `${labelValue ?? ''}`;\n })\n .join('|');\n const enumKeys = options\n .map((item) => `${(item as Record<string, unknown>)[valueKey] ?? ''}`)\n .join('|');\n\n grid.SetAttribute(null, columnName, 'Type', 'Enum', 0, 0);\n grid.SetAttribute(null, columnName, 'Enum', `|${enumValues}`, 0, 0);\n grid.SetAttribute(null, columnName, 'EnumKeys', `|${enumKeys}`, 1, 0);\n};\n\n/**\n * @deprecated `getTreeGridById` 사용\n */\nexport const getGridById = getTreeGridById;\n\n/**\n * @deprecated `getTreeGridDataRowsById` 사용\n */\nexport const getDataRowsById = getTreeGridDataRowsById;\n\n/**\n * @deprecated `reloadTreeGridBodyById` 사용\n */\nexport const reloadBodyById = reloadTreeGridBodyById;\n\n/**\n * @deprecated `addTreeGridRowById` 사용\n */\nexport const addRowById = addTreeGridRowById;\n\n/**\n * @deprecated `getTreeGridRowChangesById` 사용\n */\nexport const getChangedDataRowsById = getTreeGridRowChangesById;\n\n/**\n * @deprecated `exportTreeGridToExcelById` 사용\n */\nexport const exportExcelById = exportTreeGridToExcelById;\n\n/**\n * @deprecated `getTreeGridSelectedRowsById` 사용\n */\nexport const getSelectedRowsById = getTreeGridSelectedRowsById;\n\n/**\n * @deprecated `setTreeGridColumnVisibilityById` 사용\n */\nexport const changeVisibleCellByGridId = setTreeGridColumnVisibilityById;\n\n/**\n * @deprecated `highlightTreeGridCellById` 사용\n */\nexport const setHighlightTargetCellByGridId = highlightTreeGridCellById;\n\n/**\n * @deprecated `resetTreeGridSelectionById` 사용\n */\nexport const resetGridSelection = resetTreeGridSelectionById;\n\n/**\n * @deprecated `resetTreeGridSelectionsByIds` 사용\n */\nexport const resetGridsSelection = resetTreeGridSelectionsByIds;\n\n/**\n * @deprecated `resetTreeGridChangesById` 사용\n */\nexport const resetGridChanges = resetTreeGridChangesById;\n\n/**\n * @deprecated `resetTreeGridChangesByIds` 사용\n */\nexport const resetGridsChanges = resetTreeGridChangesByIds;\n\n/**\n * @deprecated `setTreeGridColumnEnumOptionsById` 사용\n */\nexport const setGridEnum = setTreeGridColumnEnumOptionsById;\n"],"names":["TREEGRID_CHANGE_STATUSES","TREEGRID_DATA_KEY_PREFIXES","loadExportTreeGridExcel","__name","exportTreeGridExcel","getDataRows","grid","item","resolveRowInsertionTarget","options","insertPosition","parent","anchorRow","resolvedParent","next","assignInitialRowValues","row","initialValues","isPlainObject","rowKey","rowValue","isTreeGridDataKey","key","prefix","normalizeAddedRow","without","isEmpty","getChangedRowsByStatus","rows","status","get","omit","getTreeGridById","gridId","getTreeGridDataRowsById","reloadTreeGridBodyById","currentData","emitTreeGridBodyRowsChanged","addTreeGridRowById","canSelect","newRow","getTreeGridRowChangesById","changesData","parseTreeGridXmlToJson","isArray","lowerCase","exportTreeGridToExcelById","title","getTreeGridSelectedRowsById","setTreeGridColumnVisibilityById","targetKey","highlightTreeGridCellById","targetOption","col","TREEGRID_CELL_HIGHLIGHT_CLASS","TREEGRID_CELL_HIGHLIGHT_COLOR","resetTreeGridSelectionById","resetTreeGridSelectionsByIds","gridIds","resetTreeGridChangesById","resetTreeGridChangesByIds","setTreeGridColumnEnumOptionsById","columnName","valueKey","labelKeys","enumValues","option","labelKey","value","enumKeys","getGridById","getDataRowsById","reloadBodyById","addRowById","getChangedDataRowsById","exportExcelById","getSelectedRowsById","changeVisibleCellByGridId","setHighlightTargetCellByGridId","resetGridSelection","resetGridsSelection","resetGridChanges","resetGridsChanges","setGridEnum"],"mappings":"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"}
1
+ {"version":3,"file":"treeGridUtil.js","sources":["../../src/utils/treeGridUtil.ts"],"sourcesContent":["import {\n TREEGRID_CELL_HIGHLIGHT_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { parseTreeGridXmlToJson } from '@/components/OwpTreeGrid/internal/treeGridLayout';\nimport { emitTreeGridBodyRowsChanged } from '@/utils/treeGridBodyRowsEvent';\nimport { isPlainObject } from 'es-toolkit';\nimport { get, isArray, isEmpty, lowerCase, omit, without } from 'es-toolkit/compat';\n\nexport {\n TREEGRID_CELL_HIGHLIGHT_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n};\n\ntype TreeGridInsertPosition = 'above' | 'below' | 'top' | 'last';\n\ntype TreeGridAddRowOptions<T> = {\n canSelect?: boolean;\n insertPosition?: TreeGridInsertPosition;\n parent?: TRow & T;\n anchorRow?: TRow & T;\n initialValues?: T;\n};\n\ntype TreeGridColumnVisibilityOptions = {\n targetKey: string;\n canVisible: boolean;\n};\n\ntype TreeGridHighlightTargetOption = {\n row: TRow;\n col: string;\n};\n\ntype TreeGridChangeStatus = 'Added' | 'Changed';\ntype TreeGridChangedRow = Record<string, unknown>;\n\nconst TREEGRID_CHANGE_STATUSES: TreeGridChangeStatus[] = ['Added', 'Changed'];\nconst TREEGRID_DATA_KEY_PREFIXES = ['OWP', 'IPX'];\n\n/**\n * TreeGrid 엑셀 내보내기 유틸 로더\n */\nconst loadExportTreeGridExcel = async () => {\n const { exportTreeGridExcel } = await import('./treeGridExportExcelUtil');\n\n return exportTreeGridExcel;\n};\n\n/**\n * TreeGrid 데이터 행 목록 추출\n * @param grid TreeGrid 인스턴스\n */\nconst getDataRows = (grid: TGrid | undefined) => {\n return Object.values(grid?.Rows ?? {}).filter((item) => item.Kind === 'Data');\n};\n\n/**\n * 신규 행 추가 대상 계산\n * @param grid TreeGrid 인스턴스\n * @param options 행 추가 옵션\n */\nconst resolveRowInsertionTarget = <T>(grid: TGrid, options?: TreeGridAddRowOptions<T>) => {\n const insertPosition = options?.insertPosition ?? 'top';\n const parent = options?.parent;\n const anchorRow = options?.anchorRow;\n\n let resolvedParent = parent ?? (anchorRow ? anchorRow.parentNode : null) ?? grid.GetFirst();\n let next = null;\n\n switch (insertPosition) {\n case 'top':\n next = grid.GetFirst();\n break;\n\n case 'last':\n resolvedParent = grid.GetNext(grid.GetLast(), grid.RowCount > 0 ? grid.RowCount + 1 : 0);\n next = resolvedParent;\n break;\n\n case 'above':\n next = anchorRow ?? grid.GetFirst();\n break;\n\n case 'below':\n next = anchorRow?.nextSibling ?? grid.GetFirst();\n break;\n }\n\n return { resolvedParent, next };\n};\n\n/**\n * 신규 행 초기값 반영\n * @param row 생성된 TreeGrid 행\n * @param initialValues 신규 행 초기값\n */\nconst assignInitialRowValues = <T>(row: TRow, initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return;\n }\n\n Object.entries(initialValues as Record<string, unknown>).forEach(([rowKey, rowValue]) => {\n (row as unknown as Record<string, unknown>)[rowKey] = rowValue;\n });\n};\n\n/**\n * 변경 데이터 컬럼 키 여부 확인\n * @param key 컬럼 키\n */\nconst isTreeGridDataKey = (key: string) => {\n return TREEGRID_DATA_KEY_PREFIXES.some((prefix) => key.startsWith(prefix));\n};\n\n/**\n * 추가 행 데이터 정규화\n * @param row TreeGrid 변경 행 데이터\n */\nconst normalizeAddedRow = <T>(row: TreeGridChangedRow) => {\n return Object.fromEntries(\n without(Object.keys(row), 'id')\n .filter((key) => isTreeGridDataKey(key) && !isEmpty(row[key]))\n .map((key) => [key, row[key]]),\n ) as T;\n};\n\n/**\n * 변경 상태별 행 데이터 반환\n * @param rows TreeGrid 변경 행 목록\n * @param status 조회할 변경 상태\n */\nconst getChangedRowsByStatus = <T>(rows: TreeGridChangedRow[], status: TreeGridChangeStatus) => {\n return rows\n .filter((row) => get(row, status) === '1' && row.Deleted !== '1')\n .map((row) => (status === 'Changed' ? omit(row, ['id', 'Changed']) : normalizeAddedRow<T>(row)))\n .filter((row) => !isEmpty(row));\n};\n\n/**\n * TreeGrid 인스턴스 ID 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridById = (gridId: string) => {\n return Grids[gridId];\n};\n\n/**\n * TreeGrid 데이터 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridDataRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n return getDataRows(grid) as T;\n};\n\n/**\n * TreeGrid Body 데이터 교체 후 재로드\n * @param gridId TreeGrid 인스턴스 ID\n * @param rows 새로 반영할 행 데이터\n */\nexport const reloadTreeGridBodyById = (gridId: string, rows: unknown) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n // @ts-expect-error - Data property not defined in type\n const currentData = grid.Data.Data;\n\n // @ts-expect-error - Data property not defined in type\n grid.Data.Data = {\n ...currentData,\n Data: { Body: [rows || []] },\n Url: '',\n };\n grid.ReloadBody();\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * 행을 특정 위치에 추가\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.canSelect 행 선택 가능 여부\n * @param options.parent 부모 행\n * @param options.anchorRow above/below용 기준 행\n * @param options.insertPosition 행 삽입 위치\n * @param options.initialValues 신규 행 초기값\n */\nexport const addTreeGridRowById = <T>(\n gridId: string,\n options?: TreeGridAddRowOptions<T>,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const canSelect = options?.canSelect;\n const initialValues = options?.initialValues;\n const { resolvedParent, next } = resolveRowInsertionTarget(grid, options);\n\n const newRow = grid.AddRow(resolvedParent, next, 1);\n\n assignInitialRowValues(newRow, initialValues);\n\n newRow.CanEdit = 1;\n newRow.CanDelete = 1;\n newRow.CanSelect = canSelect ? 1 : 0;\n\n grid.Focus(newRow);\n grid.RefreshRow(newRow);\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * TreeGrid 추가/수정 데이터 행 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridRowChangesById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const changesData = parseTreeGridXmlToJson(grid?.GetXmlData('changes,allcols,nogrid,noio'));\n\n if (!isArray(changesData)) {\n return { added: [], changed: [] };\n }\n\n return Object.fromEntries(\n TREEGRID_CHANGE_STATUSES.map((status) => [\n lowerCase(status),\n getChangedRowsByStatus<T>(changesData as TreeGridChangedRow[], status),\n ]),\n ) as { added: T[]; changed: T[] };\n};\n\n/**\n * TreeGrid 데이터 엑셀 내보내기\n * @param gridId TreeGrid 인스턴스 ID\n * @param title 다운로드 파일명\n */\nexport const exportTreeGridToExcelById = (gridId: string, title?: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n void loadExportTreeGridExcel().then((exportTreeGridExcel) =>\n exportTreeGridExcel(grid, { exportName: title ?? '' }),\n );\n};\n\n/**\n * TreeGrid 현재 선택 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridSelectedRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const selectedRows = grid?.GetSelRows();\n\n return (selectedRows as T) ?? [];\n};\n\n/**\n * TreeGrid 컬럼 표시 여부 변경\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.targetKey 표시 상태를 변경할 컬럼 키\n * @param options.canVisible 컬럼 표시 여부\n */\nexport const setTreeGridColumnVisibilityById = (\n gridId: string,\n options: TreeGridColumnVisibilityOptions,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid || !options?.targetKey) {\n return;\n }\n\n const targetKey = options?.targetKey;\n const canVisible = options?.canVisible;\n\n if (canVisible) {\n grid.ShowCol(targetKey);\n return;\n }\n grid.HideCol(targetKey);\n};\n\n/**\n * 특정 셀 강조 스타일 적용\n * @param gridId TreeGrid 인스턴스 ID\n * @param targetOption.row 강조할 대상 행\n * @param targetOption.col 강조할 대상 컬럼\n */\nexport const highlightTreeGridCellById = (\n gridId: string,\n targetOption: TreeGridHighlightTargetOption,\n) => {\n const grid = getTreeGridById(gridId);\n\n const row = targetOption?.row;\n const col = targetOption?.col;\n\n if (!grid || !row || !col) {\n return;\n }\n\n grid.SetValue(row, `${col}Class`, TREEGRID_CELL_HIGHLIGHT_CLASS);\n grid.SetValue(row, `${col}Color`, TREEGRID_CELL_HIGHLIGHT_COLOR);\n grid.RefreshCell(row, col);\n};\n\n/**\n * TreeGrid 현재 선택 상태 전체 해제\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridSelectionById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionDeselectAll(1, 0);\n};\n\n/**\n * 여러 TreeGrid 선택 상태 전체 해제\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridSelectionsByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridSelectionById);\n};\n\n/**\n * TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridChangesById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionUndoAll(1, 0);\n resetTreeGridSelectionById(gridId);\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * 여러 TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridChangesByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridChangesById);\n};\n\n/**\n * TreeGrid Enum 컬럼 옵션 반영\n * @param gridId TreeGrid 인스턴스 ID\n * @param columnName Enum을 적용할 컬럼명\n * @param options Enum 옵션 목록\n * @param valueKey Enum 값으로 사용할 필드명\n * @param labelKeys Enum 라벨로 사용할 필드 우선순위 목록\n */\nexport const setTreeGridColumnEnumOptionsById = <T extends object>(\n gridId: string,\n columnName: string,\n options: T[] | undefined,\n valueKey: keyof T & string,\n labelKeys: Array<keyof T & string>,\n) => {\n if (!options?.length) {\n return;\n }\n\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const enumValues = options\n .map((item) => {\n const option = item as Record<string, unknown>;\n const labelValue = labelKeys\n .map((labelKey) => option[labelKey])\n .find((value) => value !== undefined && value !== null && value !== '');\n\n return `${labelValue ?? ''}`;\n })\n .join('|');\n const enumKeys = options\n .map((item) => `${(item as Record<string, unknown>)[valueKey] ?? ''}`)\n .join('|');\n\n grid.SetAttribute(null, columnName, 'Type', 'Enum', 0, 0);\n grid.SetAttribute(null, columnName, 'Enum', `|${enumValues}`, 0, 0);\n grid.SetAttribute(null, columnName, 'EnumKeys', `|${enumKeys}`, 1, 0);\n};\n\n/**\n * @deprecated `getTreeGridById` 사용\n */\nexport const getGridById = getTreeGridById;\n\n/**\n * @deprecated `getTreeGridDataRowsById` 사용\n */\nexport const getDataRowsById = getTreeGridDataRowsById;\n\n/**\n * @deprecated `reloadTreeGridBodyById` 사용\n */\nexport const reloadBodyById = reloadTreeGridBodyById;\n\n/**\n * @deprecated `addTreeGridRowById` 사용\n */\nexport const addRowById = addTreeGridRowById;\n\n/**\n * @deprecated `getTreeGridRowChangesById` 사용\n */\nexport const getChangedDataRowsById = getTreeGridRowChangesById;\n\n/**\n * @deprecated `exportTreeGridToExcelById` 사용\n */\nexport const exportExcelById = exportTreeGridToExcelById;\n\n/**\n * @deprecated `getTreeGridSelectedRowsById` 사용\n */\nexport const getSelectedRowsById = getTreeGridSelectedRowsById;\n\n/**\n * @deprecated `setTreeGridColumnVisibilityById` 사용\n */\nexport const changeVisibleCellByGridId = setTreeGridColumnVisibilityById;\n\n/**\n * @deprecated `highlightTreeGridCellById` 사용\n */\nexport const setHighlightTargetCellByGridId = highlightTreeGridCellById;\n\n/**\n * @deprecated `resetTreeGridSelectionById` 사용\n */\nexport const resetGridSelection = resetTreeGridSelectionById;\n\n/**\n * @deprecated `resetTreeGridSelectionsByIds` 사용\n */\nexport const resetGridsSelection = resetTreeGridSelectionsByIds;\n\n/**\n * @deprecated `resetTreeGridChangesById` 사용\n */\nexport const resetGridChanges = resetTreeGridChangesById;\n\n/**\n * @deprecated `resetTreeGridChangesByIds` 사용\n */\nexport const resetGridsChanges = resetTreeGridChangesByIds;\n\n/**\n * @deprecated `setTreeGridColumnEnumOptionsById` 사용\n */\nexport const setGridEnum = setTreeGridColumnEnumOptionsById;\n"],"names":["TREEGRID_CHANGE_STATUSES","TREEGRID_DATA_KEY_PREFIXES","loadExportTreeGridExcel","__name","exportTreeGridExcel","getDataRows","grid","item","resolveRowInsertionTarget","options","insertPosition","parent","anchorRow","resolvedParent","next","assignInitialRowValues","row","initialValues","isPlainObject","rowKey","rowValue","isTreeGridDataKey","key","prefix","normalizeAddedRow","without","isEmpty","getChangedRowsByStatus","rows","status","get","omit","getTreeGridById","gridId","getTreeGridDataRowsById","reloadTreeGridBodyById","currentData","emitTreeGridBodyRowsChanged","addTreeGridRowById","canSelect","newRow","getTreeGridRowChangesById","changesData","parseTreeGridXmlToJson","isArray","lowerCase","exportTreeGridToExcelById","title","getTreeGridSelectedRowsById","setTreeGridColumnVisibilityById","targetKey","highlightTreeGridCellById","targetOption","col","TREEGRID_CELL_HIGHLIGHT_CLASS","TREEGRID_CELL_HIGHLIGHT_COLOR","resetTreeGridSelectionById","resetTreeGridSelectionsByIds","gridIds","resetTreeGridChangesById","resetTreeGridChangesByIds","setTreeGridColumnEnumOptionsById","columnName","valueKey","labelKeys","enumValues","option","labelKey","value","enumKeys","getGridById","getDataRowsById","reloadBodyById","addRowById","getChangedDataRowsById","exportExcelById","getSelectedRowsById","changeVisibleCellByGridId","setHighlightTargetCellByGridId","resetGridSelection","resetGridsSelection","resetGridChanges","resetGridsChanges","setGridEnum"],"mappings":"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"}
package/dist/utils.js CHANGED
@@ -1,99 +1,102 @@
1
1
  import { generateBarcodeUrl as t } from "./utils/barcodeUtil.js";
2
2
  import { buildTreeGridEnumAttributesByCommonCodeList as d, transformCommonCodeBasedOnGroupId as i, transformGridEnumByCommonCodeList as a } from "./utils/commonCodeUtils.js";
3
3
  import { createDateRangeSearchParams as m } from "./utils/createDateRangeSearchParams.js";
4
- import { createJsonBody as I } from "./utils/createJsonBody.js";
5
- import { createJsonString as n } from "./utils/createJsonString.js";
6
- import { exportExcelByBuffer as E, getIndexByLetters as T, getLettersByIndex as p, setCellValue as G, setMergeCells as y } from "./utils/excelUtil.js";
7
- import { fetchFile as L } from "./utils/fetchFile.js";
8
- import { formatDateToYmd as C, getTodayYmd as R } from "./utils/formatDateToYmd.js";
9
- import { formatNumber as u } from "./utils/formatNumber.js";
4
+ import { createJsonBody as n } from "./utils/createJsonBody.js";
5
+ import { createJsonString as T } from "./utils/createJsonString.js";
6
+ import { exportExcelByBuffer as g, getIndexByLetters as p, getLettersByIndex as E, setCellValue as G, setMergeCells as f } from "./utils/excelUtil.js";
7
+ import { fetchFile as B } from "./utils/fetchFile.js";
8
+ import { formatDateToYmd as C, getTodayYmd as u } from "./utils/formatDateToYmd.js";
9
+ import { formatNumber as _ } from "./utils/formatNumber.js";
10
10
  import { getDisplayValue as c } from "./utils/getDisplayValue.js";
11
11
  import { getEstimatedTextCellWidth as h } from "./utils/getEstimatedTextCellWidth.js";
12
12
  import { getFormDefaultValues as F } from "./utils/getFormDefaultValues.js";
13
- import { getStartPagePath as N } from "./utils/getStartPagePath.js";
14
- import { getTrimmedValue as w } from "./utils/getTrimmedValue.js";
13
+ import { getStartPagePath as U } from "./utils/getStartPagePath.js";
14
+ import { getTrimmedValue as S } from "./utils/getTrimmedValue.js";
15
15
  import { isEnterKeyEvent as V } from "./utils/isEnterKeyEvent.js";
16
16
  import { getApiLanguageCode as P, getI18nextLanguageCode as M } from "./utils/language.js";
17
- import { preloadOnIdle as v } from "./utils/preloadOnIdle.js";
18
- import { generateQrCodeUrl as J } from "./utils/qrCodeUtil.js";
19
- import { rebuildValue as K } from "./utils/rebuildValue.js";
20
- import { sanitizePasswordValue as Z, sanitizeUserIdValue as j } from "./utils/sanitizeAuthInputValue.js";
21
- import { exportExcelByGrid as q, exportTreeGridExcel as X } from "./utils/treeGridExportExcelUtil.js";
22
- import { addRowById as ee, addTreeGridRowById as re, changeVisibleCellByGridId as te, exportExcelById as oe, exportTreeGridToExcelById as de, getChangedDataRowsById as ie, getDataRowsById as ae, getGridById as se, getSelectedRowsById as me, getTreeGridById as le, getTreeGridDataRowsById as Ie, getTreeGridRowChangesById as ge, getTreeGridSelectedRowsById as ne, highlightTreeGridCellById as xe, reloadBodyById as Ee, reloadTreeGridBodyById as Te, resetGridChanges as pe, resetGridSelection as Ge, resetGridsChanges as ye, resetGridsSelection as Be, resetTreeGridChangesById as Le, resetTreeGridChangesByIds as fe, resetTreeGridSelectionById as Ce, resetTreeGridSelectionsByIds as Re, setGridEnum as _e, setHighlightTargetCellByGridId as ue, setTreeGridColumnEnumOptionsById as De, setTreeGridColumnVisibilityById as ce } from "./utils/treeGridUtil.js";
23
- import { saveAsZipFile as he } from "./utils/zipUtil.js";
24
- import { OwpUtils as Fe } from "./utils/common/OwpUtils.js";
25
- import { DEFAULT_CELL_ALIGNMENT as Ne, DEFAULT_HEADER_FILL as Se, DEFAULT_HEADER_FONT as we, DEFAULT_THIN_BORDER as He, DEFAULT_VALUE_FONT as Ve, DEFAULT_WRAP_CELL_ALIGNMENT as be } from "./constants/excel.js";
26
- import { TREEGRID_CELL_HIGHLIGHT_CLASS as Me, TREEGRID_CELL_HIGHLIGHT_COLOR as We, TREEGRID_INPUT_CELL_COLOR as ve, TREEGRID_WARNING_CELL_COLOR as ze } from "./constants/treeGrid.js";
17
+ import { formatTimeInputToHourMinute as W, normalizeTimeToHourMinute as v } from "./utils/normalizeTimeToHourMinute.js";
18
+ import { preloadOnIdle as Y } from "./utils/preloadOnIdle.js";
19
+ import { generateQrCodeUrl as Q } from "./utils/qrCodeUtil.js";
20
+ import { rebuildValue as j } from "./utils/rebuildValue.js";
21
+ import { sanitizePasswordValue as q, sanitizeUserIdValue as X } from "./utils/sanitizeAuthInputValue.js";
22
+ import { exportExcelByGrid as ee, exportTreeGridExcel as re } from "./utils/treeGridExportExcelUtil.js";
23
+ import { addRowById as oe, addTreeGridRowById as de, changeVisibleCellByGridId as ie, exportExcelById as ae, exportTreeGridToExcelById as se, getChangedDataRowsById as me, getDataRowsById as le, getGridById as ne, getSelectedRowsById as Ie, getTreeGridById as Te, getTreeGridDataRowsById as xe, getTreeGridRowChangesById as ge, getTreeGridSelectedRowsById as pe, highlightTreeGridCellById as Ee, reloadBodyById as Ge, reloadTreeGridBodyById as fe, resetGridChanges as ye, resetGridSelection as Be, resetGridsChanges as Le, resetGridsSelection as Ce, resetTreeGridChangesById as ue, resetTreeGridChangesByIds as Re, resetTreeGridSelectionById as _e, resetTreeGridSelectionsByIds as De, setGridEnum as ce, setHighlightTargetCellByGridId as Ae, setTreeGridColumnEnumOptionsById as he, setTreeGridColumnVisibilityById as Oe } from "./utils/treeGridUtil.js";
24
+ import { saveAsZipFile as He } from "./utils/zipUtil.js";
25
+ import { OwpUtils as Ne } from "./utils/common/OwpUtils.js";
26
+ import { DEFAULT_CELL_ALIGNMENT as we, DEFAULT_HEADER_FILL as Ve, DEFAULT_HEADER_FONT as be, DEFAULT_THIN_BORDER as Pe, DEFAULT_VALUE_FONT as Me, DEFAULT_WRAP_CELL_ALIGNMENT as ze } from "./constants/excel.js";
27
+ import { TREEGRID_CELL_HIGHLIGHT_CLASS as ve, TREEGRID_CELL_HIGHLIGHT_COLOR as Je, TREEGRID_INPUT_CELL_COLOR as Ye, TREEGRID_WARNING_CELL_COLOR as Ke } from "./constants/treeGrid.js";
27
28
  export {
28
- Ne as DEFAULT_CELL_ALIGNMENT,
29
- Se as DEFAULT_HEADER_FILL,
30
- we as DEFAULT_HEADER_FONT,
31
- He as DEFAULT_THIN_BORDER,
32
- Ve as DEFAULT_VALUE_FONT,
33
- be as DEFAULT_WRAP_CELL_ALIGNMENT,
34
- Fe as OwpUtils,
35
- Me as TREEGRID_CELL_HIGHLIGHT_CLASS,
36
- We as TREEGRID_CELL_HIGHLIGHT_COLOR,
37
- ve as TREEGRID_INPUT_CELL_COLOR,
38
- ze as TREEGRID_WARNING_CELL_COLOR,
39
- ee as addRowById,
40
- re as addTreeGridRowById,
29
+ we as DEFAULT_CELL_ALIGNMENT,
30
+ Ve as DEFAULT_HEADER_FILL,
31
+ be as DEFAULT_HEADER_FONT,
32
+ Pe as DEFAULT_THIN_BORDER,
33
+ Me as DEFAULT_VALUE_FONT,
34
+ ze as DEFAULT_WRAP_CELL_ALIGNMENT,
35
+ Ne as OwpUtils,
36
+ ve as TREEGRID_CELL_HIGHLIGHT_CLASS,
37
+ Je as TREEGRID_CELL_HIGHLIGHT_COLOR,
38
+ Ye as TREEGRID_INPUT_CELL_COLOR,
39
+ Ke as TREEGRID_WARNING_CELL_COLOR,
40
+ oe as addRowById,
41
+ de as addTreeGridRowById,
41
42
  d as buildTreeGridEnumAttributesByCommonCodeList,
42
- te as changeVisibleCellByGridId,
43
+ ie as changeVisibleCellByGridId,
43
44
  m as createDateRangeSearchParams,
44
- I as createJsonBody,
45
- n as createJsonString,
46
- E as exportExcelByBuffer,
47
- q as exportExcelByGrid,
48
- oe as exportExcelById,
49
- X as exportTreeGridExcel,
50
- de as exportTreeGridToExcelById,
51
- L as fetchFile,
45
+ n as createJsonBody,
46
+ T as createJsonString,
47
+ g as exportExcelByBuffer,
48
+ ee as exportExcelByGrid,
49
+ ae as exportExcelById,
50
+ re as exportTreeGridExcel,
51
+ se as exportTreeGridToExcelById,
52
+ B as fetchFile,
52
53
  C as formatDateToYmd,
53
- u as formatNumber,
54
+ _ as formatNumber,
55
+ W as formatTimeInputToHourMinute,
54
56
  t as generateBarcodeUrl,
55
- J as generateQrCodeUrl,
57
+ Q as generateQrCodeUrl,
56
58
  P as getApiLanguageCode,
57
- ie as getChangedDataRowsById,
58
- ae as getDataRowsById,
59
+ me as getChangedDataRowsById,
60
+ le as getDataRowsById,
59
61
  c as getDisplayValue,
60
62
  h as getEstimatedTextCellWidth,
61
63
  F as getFormDefaultValues,
62
- se as getGridById,
64
+ ne as getGridById,
63
65
  M as getI18nextLanguageCode,
64
- T as getIndexByLetters,
65
- p as getLettersByIndex,
66
- me as getSelectedRowsById,
67
- N as getStartPagePath,
68
- R as getTodayYmd,
69
- le as getTreeGridById,
70
- Ie as getTreeGridDataRowsById,
66
+ p as getIndexByLetters,
67
+ E as getLettersByIndex,
68
+ Ie as getSelectedRowsById,
69
+ U as getStartPagePath,
70
+ u as getTodayYmd,
71
+ Te as getTreeGridById,
72
+ xe as getTreeGridDataRowsById,
71
73
  ge as getTreeGridRowChangesById,
72
- ne as getTreeGridSelectedRowsById,
73
- w as getTrimmedValue,
74
- xe as highlightTreeGridCellById,
74
+ pe as getTreeGridSelectedRowsById,
75
+ S as getTrimmedValue,
76
+ Ee as highlightTreeGridCellById,
75
77
  V as isEnterKeyEvent,
76
- v as preloadOnIdle,
77
- K as rebuildValue,
78
- Ee as reloadBodyById,
79
- Te as reloadTreeGridBodyById,
80
- pe as resetGridChanges,
81
- Ge as resetGridSelection,
82
- ye as resetGridsChanges,
83
- Be as resetGridsSelection,
84
- Le as resetTreeGridChangesById,
85
- fe as resetTreeGridChangesByIds,
86
- Ce as resetTreeGridSelectionById,
87
- Re as resetTreeGridSelectionsByIds,
88
- Z as sanitizePasswordValue,
89
- j as sanitizeUserIdValue,
90
- he as saveAsZipFile,
78
+ v as normalizeTimeToHourMinute,
79
+ Y as preloadOnIdle,
80
+ j as rebuildValue,
81
+ Ge as reloadBodyById,
82
+ fe as reloadTreeGridBodyById,
83
+ ye as resetGridChanges,
84
+ Be as resetGridSelection,
85
+ Le as resetGridsChanges,
86
+ Ce as resetGridsSelection,
87
+ ue as resetTreeGridChangesById,
88
+ Re as resetTreeGridChangesByIds,
89
+ _e as resetTreeGridSelectionById,
90
+ De as resetTreeGridSelectionsByIds,
91
+ q as sanitizePasswordValue,
92
+ X as sanitizeUserIdValue,
93
+ He as saveAsZipFile,
91
94
  G as setCellValue,
92
- _e as setGridEnum,
93
- ue as setHighlightTargetCellByGridId,
94
- y as setMergeCells,
95
- De as setTreeGridColumnEnumOptionsById,
96
- ce as setTreeGridColumnVisibilityById,
95
+ ce as setGridEnum,
96
+ Ae as setHighlightTargetCellByGridId,
97
+ f as setMergeCells,
98
+ he as setTreeGridColumnEnumOptionsById,
99
+ Oe as setTreeGridColumnVisibilityById,
97
100
  i as transformCommonCodeBasedOnGroupId,
98
101
  a as transformGridEnumByCommonCodeList
99
102
  };
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"utils.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@owp/core",
3
3
  "private": false,
4
- "version": "2.2.4",
4
+ "version": "2.2.6",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"file":"OwpMrtTableNoDataOverlay.js","sources":["../../../src/components/OwpMrtTable/OwpMrtTableNoDataOverlay.tsx"],"sourcesContent":["import Typography from '@mui/material/Typography';\nimport { useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { MRT_RowData, MRT_TableInstance } from 'material-react-table';\n\ntype OwpMrtTableNoDataOverlayProps<TData extends MRT_RowData> = {\n visible: boolean;\n message: string;\n table: MRT_TableInstance<TData>;\n};\n\n/**\n * MRT no-data overlay\n * @param visible overlay visibility\n * @param message no-data message\n * @param table MRT table instance\n */\nconst OwpMrtTableNoDataOverlay = <TData extends MRT_RowData>({\n visible,\n message,\n table,\n}: OwpMrtTableNoDataOverlayProps<TData>) => {\n const [containerElement, setContainerElement] = useState<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n setContainerElement(table.refs.tableContainerRef.current);\n }, [table]);\n\n if (!visible || !containerElement) {\n return null;\n }\n\n return createPortal(\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n zIndex: 2,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n <Typography\n sx={{\n color: '#111112',\n fontFamily: 'RobotoLight, sans-serif',\n fontSize: '14px',\n lineHeight: '16px',\n letterSpacing: '0.04em',\n }}\n >\n {message}\n </Typography>\n </div>,\n containerElement,\n );\n};\n\nexport { OwpMrtTableNoDataOverlay };\n"],"names":["OwpMrtTableNoDataOverlay","__name","visible","message","table","containerElement","setContainerElement","useState","useLayoutEffect","createPortal","jsx","Typography"],"mappings":";;;;;;AAiBA,MAAMA,IAA2B,gBAAAC,EAAA,CAA4B;AAAA,EAC3D,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AACF,MAA4C;AAC1C,QAAM,CAACC,GAAkBC,CAAmB,IAAIC,EAAgC,IAAI;AAMpF,SAJAC,EAAgB,MAAM;AACpB,IAAAF,EAAoBF,EAAM,KAAK,kBAAkB,OAAO;AAAA,EAC1D,GAAG,CAACA,CAAK,CAAC,GAEN,CAACF,KAAW,CAACG,IACR,OAGFI;AAAA,IACL,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,OAAO;AAAA,UACL,UAAU;AAAA,UACV,MAAM;AAAA,UACN,KAAK;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,eAAe;AAAA,QAAA;AAAA,QAGjB,UAAA,gBAAAA;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,eAAe;AAAA,YAAA;AAAA,YAGhB,UAAAR;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,IAEFE;AAAA,EAAA;AAEJ,GA7CiC;"}