@owp/core 2.5.2 → 2.5.4
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.
- package/dist/_virtual/index11.js +2 -2
- package/dist/_virtual/index13.js +2 -2
- package/dist/_virtual/index14.js +2 -2
- package/dist/_virtual/index15.js +2 -2
- package/dist/_virtual/index16.js +4 -4
- package/dist/_virtual/index17.js +4 -4
- package/dist/_virtual/index18.js +4 -4
- package/dist/_virtual/index19.js +4 -4
- package/dist/components/{OwpFileUploadButton/OwpFileUploadButton.js → OwpFilePickerButton/OwpFilePickerButton.js} +15 -15
- package/dist/components/OwpFilePickerButton/OwpFilePickerButton.js.map +1 -0
- package/dist/components/OwpLanguageSwitcherSelect/OwpLanguageSwitcherSelect.js.map +1 -1
- package/dist/components/OwpMoreActionsButton/OwpMoreActionsButton.js +27 -27
- package/dist/components/OwpMoreActionsButton/OwpMoreActionsButton.js.map +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTable.js +346 -336
- package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
- package/dist/components/OwpSnackbarContent/OwpSnackbarContent.js +166 -0
- package/dist/components/OwpSnackbarContent/OwpSnackbarContent.js.map +1 -0
- package/dist/components/OwpTable/OwpDataTable.js +333 -283
- package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
- package/dist/components/OwpTable/OwpFieldTable.js +102 -58
- package/dist/components/OwpTable/OwpFieldTable.js.map +1 -1
- package/dist/components/OwpTable/OwpTable.js +192 -172
- package/dist/components/OwpTable/OwpTable.js.map +1 -1
- package/dist/components/OwpTable/internal/treeGridTableStyle.js +77 -0
- package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -0
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +199 -171
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +172 -131
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +462 -0
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -0
- package/dist/components/{OwpTreeGridExcelButton/OwpTreeGridExcelButton.js → OwpTreeGridExportExcelButton/OwpTreeGridExportExcelButton.js} +7 -7
- package/dist/components/OwpTreeGridExportExcelButton/OwpTreeGridExportExcelButton.js.map +1 -0
- package/dist/configs/defaultConfig.js +67 -44
- package/dist/configs/defaultConfig.js.map +1 -1
- package/dist/constants/gridTheme.js +78 -0
- package/dist/constants/gridTheme.js.map +1 -0
- package/dist/constants/tableTheme.js +16 -0
- package/dist/constants/tableTheme.js.map +1 -0
- package/dist/constants/treeGrid.js +44 -26
- package/dist/constants/treeGrid.js.map +1 -1
- package/dist/constants.js +21 -20
- package/dist/contexts/OwpUiProvider.js +59 -38
- package/dist/contexts/OwpUiProvider.js.map +1 -1
- package/dist/hooks/useFormDataUploadMutation.js.map +1 -1
- package/dist/index.js +105 -104
- package/dist/layout/components/toggles/NavigationSearchToggle.js +3 -3
- package/dist/layout/components/toolbar/ToolbarLayout.js +5 -4
- package/dist/layout/components/toolbar/ToolbarLayout.js.map +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
- 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
- package/dist/types/components/{OwpFileUploadButton/OwpFileUploadButton.d.ts → OwpFilePickerButton/OwpFilePickerButton.d.ts} +4 -4
- package/dist/types/components/OwpFilePickerButton/index.d.ts +1 -0
- package/dist/types/components/OwpLanguageSwitcherSelect/OwpLanguageSwitcherSelect.d.ts +1 -1
- package/dist/types/components/OwpMoreActionsButton/OwpMoreActionsButton.d.ts +4 -4
- package/dist/types/components/OwpSnackbarContent/OwpSnackbarContent.d.ts +2 -0
- package/dist/types/components/OwpTable/OwpTable.d.ts +5 -1
- package/dist/types/components/OwpTable/internal/treeGridTableStyle.d.ts +105 -0
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +5 -1
- package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +20 -0
- package/dist/types/components/OwpTreeGridExportExcelButton/OwpTreeGridExportExcelButton.d.ts +12 -0
- package/dist/types/components/OwpTreeGridExportExcelButton/index.d.ts +1 -0
- package/dist/types/configs/defaultConfig.d.ts +22 -0
- package/dist/types/constants/gridTheme.d.ts +88 -0
- package/dist/types/constants/tableTheme.d.ts +18 -0
- package/dist/types/constants/treeGrid.d.ts +5 -0
- package/dist/types/hooks/useFormDataUploadMutation.d.ts +4 -3
- package/dist/types/index.d.ts +2 -2
- package/dist/types/types/OwpGridThemeTypes.d.ts +48 -0
- package/dist/types/types/OwpSettingsTypes.d.ts +11 -0
- package/dist/types/types/OwpTableThemeTypes.d.ts +16 -0
- package/dist/types/types/index.d.ts +3 -1
- package/dist/types/utils/treeGridUtil.d.ts +1 -0
- package/dist/utils/createFormDataBody.js +19 -14
- package/dist/utils/createFormDataBody.js.map +1 -1
- package/dist/utils/exceljsBrowser.js +45 -48
- package/dist/utils/exceljsBrowser.js.map +1 -1
- package/dist/utils/treeGridUtil.js +66 -66
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/OwpFileUploadButton/OwpFileUploadButton.js.map +0 -1
- package/dist/components/OwpTreeGridExcelButton/OwpTreeGridExcelButton.js.map +0 -1
- package/dist/types/components/OwpFileUploadButton/index.d.ts +0 -1
- package/dist/types/components/OwpTreeGridExcelButton/OwpTreeGridExcelButton.d.ts +0 -12
- package/dist/types/components/OwpTreeGridExcelButton/index.d.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createFormDataBody.js","sources":["../../src/utils/createFormDataBody.ts"],"sourcesContent":["import { isArray, isObject } from 'es-toolkit/compat';\n\nexport type FormDataFieldValue = string | number | Blob | undefined;\nexport type TAdditionalFields = Record<string, FormDataFieldValue>;\n\nexport type FormDataUploadParams<TFields extends TAdditionalFields = TAdditionalFields> = {\n file: File;\n} & Omit<TFields, 'file'>;\n\nexport type FormDataUploadBody<TFields extends TAdditionalFields = TAdditionalFields> = Record<\n string,\n FormDataFieldValue\n> &\n FormDataUploadParams<TFields>;\n\nexport interface NormalizeFormDataUploadParamsOptions {\n fileNameFieldName?: string;\n}\n\nconst isFormDataUploadBody = (body: unknown): body is FormDataUploadBody =>\n isObject(body) && !isArray(body);\n\n/**\n * FormData 업로드 파라미터 정규화\n * @param params 업로드 파라미터\n * @param options 파일명 필드 옵션\n */\nexport const normalizeFormDataUploadParams = <\n TFields extends TAdditionalFields = TAdditionalFields,\n>(\n params: FormDataUploadParams<TFields>,\n options: NormalizeFormDataUploadParamsOptions = {},\n) => {\n const
|
|
1
|
+
{"version":3,"file":"createFormDataBody.js","sources":["../../src/utils/createFormDataBody.ts"],"sourcesContent":["import { isArray, isObject } from 'es-toolkit/compat';\n\nexport type FormDataFieldValue = string | number | Blob | undefined;\nexport type TAdditionalFields = Record<string, FormDataFieldValue>;\n\nexport type FormDataUploadParams<TFields extends TAdditionalFields = TAdditionalFields> = {\n file: File;\n} & Omit<TFields, 'file'>;\n\nexport type FormDataUploadBody<TFields extends TAdditionalFields = TAdditionalFields> = Record<\n string,\n FormDataFieldValue\n> &\n FormDataUploadParams<TFields>;\n\nexport interface NormalizeFormDataUploadParamsOptions {\n fileNameFieldName?: string;\n}\n\nconst DEFAULT_FILE_NAME_FIELD_NAME = 'FILE_NAME';\n\nconst isFormDataUploadBody = (body: unknown): body is FormDataUploadBody =>\n isObject(body) && !isArray(body);\n\nconst resolveFileNameFieldName = <\n TFields extends TAdditionalFields = TAdditionalFields,\n>(\n params: FormDataUploadParams<TFields>,\n fileNameFieldName?: string,\n) => {\n if (fileNameFieldName) {\n return fileNameFieldName;\n }\n\n const pageId = params['PAGEID' as keyof typeof params];\n const tableName = params['TABLENAME' as keyof typeof params];\n\n if (typeof pageId === 'string' && pageId && typeof tableName === 'string' && tableName) {\n return `${pageId}_${tableName}`;\n }\n\n return DEFAULT_FILE_NAME_FIELD_NAME;\n};\n\n/**\n * FormData 업로드 파라미터 정규화\n * @param params 업로드 파라미터\n * @param options 파일명 필드 옵션\n */\nexport const normalizeFormDataUploadParams = <\n TFields extends TAdditionalFields = TAdditionalFields,\n>(\n params: FormDataUploadParams<TFields>,\n options: NormalizeFormDataUploadParamsOptions = {},\n) => {\n const nextFileNameFieldName = resolveFileNameFieldName(params, options.fileNameFieldName);\n\n if (params[nextFileNameFieldName as keyof typeof params] != null) {\n return params as FormDataUploadBody<TFields>;\n }\n\n return {\n ...params,\n [nextFileNameFieldName]: params.file.name.normalize('NFC'),\n } as FormDataUploadBody<TFields>;\n};\n\n/**\n * FormData body 생성\n * @param body flat body 객체\n */\nexport const createFormDataBody = (body: unknown) => {\n const formData = new FormData();\n\n if (!isFormDataUploadBody(body)) {\n return formData;\n }\n\n Object.entries(body).forEach(([name, value]) => {\n if (value === undefined) {\n return;\n }\n\n formData.append(name, value instanceof Blob ? value : String(value));\n });\n\n return formData;\n};\n"],"names":["DEFAULT_FILE_NAME_FIELD_NAME","isFormDataUploadBody","__name","body","isObject","isArray","resolveFileNameFieldName","params","fileNameFieldName","pageId","tableName","normalizeFormDataUploadParams","options","nextFileNameFieldName","createFormDataBody","formData","name","value"],"mappings":";;;;AAmBA,MAAMA,IAA+B,aAE/BC,IAAuB,gBAAAC,EAAA,CAACC,MAC5BC,EAASD,CAAI,KAAK,CAACE,EAAQF,CAAI,GADJ,yBAGvBG,IAA2B,gBAAAJ,EAAA,CAG/BK,GACAC,MACG;AACH,MAAIA;AACF,WAAOA;AAGT,QAAMC,IAASF,EAAO,QAChBG,IAAYH,EAAO;AAEzB,SAAI,OAAOE,KAAW,YAAYA,KAAU,OAAOC,KAAc,YAAYA,IACpE,GAAGD,CAAM,IAAIC,CAAS,KAGxBV;AACT,GAlBiC,6BAyBpBW,IAAgC,gBAAAT,EAAA,CAG3CK,GACAK,IAAgD,OAC7C;AACH,QAAMC,IAAwBP,EAAyBC,GAAQK,EAAQ,iBAAiB;AAExF,SAAIL,EAAOM,CAA4C,KAAK,OACnDN,IAGF;AAAA,IACL,GAAGA;AAAA,IACH,CAACM,CAAqB,GAAGN,EAAO,KAAK,KAAK,UAAU,KAAK;AAAA,EAAA;AAE7D,GAhB6C,kCAsBhCO,IAAqB,gBAAAZ,EAAA,CAACC,MAAkB;AACnD,QAAMY,IAAW,IAAI,SAAA;AAErB,SAAKd,EAAqBE,CAAI,KAI9B,OAAO,QAAQA,CAAI,EAAE,QAAQ,CAAC,CAACa,GAAMC,CAAK,MAAM;AAC9C,IAAIA,MAAU,UAIdF,EAAS,OAAOC,GAAMC,aAAiB,OAAOA,IAAQ,OAAOA,CAAK,CAAC;AAAA,EACrE,CAAC,GAEMF;AACT,GAhBkC;"}
|
|
@@ -1,66 +1,63 @@
|
|
|
1
1
|
var x = Object.defineProperty;
|
|
2
|
-
var e = (
|
|
2
|
+
var e = (o, t) => x(o, "name", { value: t, configurable: !0 });
|
|
3
3
|
const S = 'script[data-owp-exceljs-bundle="true"]';
|
|
4
|
-
let
|
|
5
|
-
const p = /* @__PURE__ */ e(() => typeof window > "u" ? void 0 : window.ExcelJS, "getExcelJSGlobal"),
|
|
6
|
-
const
|
|
7
|
-
if (
|
|
8
|
-
|
|
4
|
+
let c;
|
|
5
|
+
const p = /* @__PURE__ */ e(() => typeof window > "u" ? void 0 : window.ExcelJS, "getExcelJSGlobal"), l = /* @__PURE__ */ e(() => new Error("Failed to resolve browser exceljs bundle."), "createExcelJSGlobalMissingError"), b = /* @__PURE__ */ e(async () => (await import("../_virtual/_virtual_owp-exceljs-browser-source.js")).default, "loadExcelJSBrowserSource"), m = /* @__PURE__ */ e(() => new Promise((o, t) => {
|
|
6
|
+
const s = p();
|
|
7
|
+
if (s) {
|
|
8
|
+
o(s);
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
11
11
|
if (typeof document > "u") {
|
|
12
|
-
|
|
12
|
+
t(l());
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
if (!
|
|
18
|
-
|
|
15
|
+
const a = /* @__PURE__ */ e(() => {
|
|
16
|
+
const r = p();
|
|
17
|
+
if (!r) {
|
|
18
|
+
t(l());
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
}, "handleLoad"),
|
|
23
|
-
|
|
24
|
-
}, "handleError"),
|
|
25
|
-
if (
|
|
26
|
-
|
|
21
|
+
o(r);
|
|
22
|
+
}, "handleLoad"), i = /* @__PURE__ */ e(() => {
|
|
23
|
+
t(new Error("Failed to load browser exceljs bundle."));
|
|
24
|
+
}, "handleError"), d = document.querySelector(S);
|
|
25
|
+
if (d) {
|
|
26
|
+
d.addEventListener("load", a, { once: !0 }), d.addEventListener("error", i, { once: !0 });
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
|
-
const
|
|
30
|
-
if (!
|
|
31
|
-
|
|
29
|
+
const n = document.createElement("script"), u = document.head ?? document.body ?? document.documentElement;
|
|
30
|
+
if (!u) {
|
|
31
|
+
t(l());
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
new Blob([await b()], {
|
|
34
|
+
b().then((r) => {
|
|
35
|
+
const E = URL.createObjectURL(
|
|
36
|
+
new Blob([r], {
|
|
38
37
|
type: "text/javascript"
|
|
39
38
|
})
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}),
|
|
62
|
-
throw d = void 0, t;
|
|
63
|
-
})), d), "loadExcelJSBrowser");
|
|
39
|
+
), w = /* @__PURE__ */ e(() => {
|
|
40
|
+
URL.revokeObjectURL(E);
|
|
41
|
+
}, "cleanupObjectUrl");
|
|
42
|
+
n.async = !0, n.dataset.owpExceljsBundle = "true", n.src = E, n.addEventListener(
|
|
43
|
+
"load",
|
|
44
|
+
() => {
|
|
45
|
+
w(), a();
|
|
46
|
+
},
|
|
47
|
+
{ once: !0 }
|
|
48
|
+
), n.addEventListener(
|
|
49
|
+
"error",
|
|
50
|
+
() => {
|
|
51
|
+
w(), i();
|
|
52
|
+
},
|
|
53
|
+
{ once: !0 }
|
|
54
|
+
), u.append(n);
|
|
55
|
+
}).catch((r) => {
|
|
56
|
+
t(r instanceof Error ? r : new Error("Failed to create browser exceljs bundle."));
|
|
57
|
+
});
|
|
58
|
+
}), "loadExcelJSBrowserScript"), L = /* @__PURE__ */ e(() => (c || (c = m().catch((o) => {
|
|
59
|
+
throw c = void 0, o;
|
|
60
|
+
})), c), "loadExcelJSBrowser");
|
|
64
61
|
export {
|
|
65
62
|
L as loadExcelJSBrowser
|
|
66
63
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exceljsBrowser.js","sources":["../../src/utils/exceljsBrowser.ts"],"sourcesContent":["import type * as ExcelJSModule from 'exceljs';\n\ntype ExcelJSBrowserModule = typeof ExcelJSModule;\ntype ExcelJSWindow = Window & {\n ExcelJS?: ExcelJSBrowserModule;\n};\n\nconst EXCELJS_SCRIPT_SELECTOR = 'script[data-owp-exceljs-bundle=\"true\"]';\nlet excelJSBrowserPromise: Promise<ExcelJSBrowserModule> | undefined;\n\n/** 브라우저 전역 exceljs 모듈 조회 */\nconst getExcelJSGlobal = () =>\n typeof window === 'undefined' ? undefined : (window as ExcelJSWindow).ExcelJS;\n\n/** 브라우저 전역 exceljs 누락 오류 생성 */\nconst createExcelJSGlobalMissingError = () =>\n new Error('Failed to resolve browser exceljs bundle.');\n\n/** 브라우저 exceljs 번들 소스 지연 로드 */\nconst loadExcelJSBrowserSource = async () =>\n (await import('virtual:owp-exceljs-browser-source')).default;\n\n/** 브라우저 exceljs 스크립트 로드 */\nconst loadExcelJSBrowserScript = () =>\n new Promise<ExcelJSBrowserModule>(
|
|
1
|
+
{"version":3,"file":"exceljsBrowser.js","sources":["../../src/utils/exceljsBrowser.ts"],"sourcesContent":["import type * as ExcelJSModule from 'exceljs';\n\ntype ExcelJSBrowserModule = typeof ExcelJSModule;\ntype ExcelJSWindow = Window & {\n ExcelJS?: ExcelJSBrowserModule;\n};\n\nconst EXCELJS_SCRIPT_SELECTOR = 'script[data-owp-exceljs-bundle=\"true\"]';\nlet excelJSBrowserPromise: Promise<ExcelJSBrowserModule> | undefined;\n\n/** 브라우저 전역 exceljs 모듈 조회 */\nconst getExcelJSGlobal = () =>\n typeof window === 'undefined' ? undefined : (window as ExcelJSWindow).ExcelJS;\n\n/** 브라우저 전역 exceljs 누락 오류 생성 */\nconst createExcelJSGlobalMissingError = () =>\n new Error('Failed to resolve browser exceljs bundle.');\n\n/** 브라우저 exceljs 번들 소스 지연 로드 */\nconst loadExcelJSBrowserSource = async () =>\n (await import('virtual:owp-exceljs-browser-source')).default;\n\n/** 브라우저 exceljs 스크립트 로드 */\nconst loadExcelJSBrowserScript = () =>\n new Promise<ExcelJSBrowserModule>((resolve, reject) => {\n const loadedExcelJS = getExcelJSGlobal();\n\n if (loadedExcelJS) {\n resolve(loadedExcelJS);\n return;\n }\n\n if (typeof document === 'undefined') {\n reject(createExcelJSGlobalMissingError());\n return;\n }\n\n const handleLoad = () => {\n const resolvedExcelJS = getExcelJSGlobal();\n\n if (!resolvedExcelJS) {\n reject(createExcelJSGlobalMissingError());\n return;\n }\n\n resolve(resolvedExcelJS);\n };\n const handleError = () => {\n reject(new Error('Failed to load browser exceljs bundle.'));\n };\n const existingScript = document.querySelector<HTMLScriptElement>(EXCELJS_SCRIPT_SELECTOR);\n\n if (existingScript) {\n existingScript.addEventListener('load', handleLoad, { once: true });\n existingScript.addEventListener('error', handleError, { once: true });\n return;\n }\n\n const scriptElement = document.createElement('script');\n const scriptParentElement = document.head ?? document.body ?? document.documentElement;\n\n if (!scriptParentElement) {\n reject(createExcelJSGlobalMissingError());\n return;\n }\n\n void loadExcelJSBrowserSource()\n .then((source) => {\n const objectUrl = URL.createObjectURL(\n new Blob([source], {\n type: 'text/javascript',\n }),\n );\n const cleanupObjectUrl = () => {\n URL.revokeObjectURL(objectUrl);\n };\n\n scriptElement.async = true;\n scriptElement.dataset.owpExceljsBundle = 'true';\n scriptElement.src = objectUrl;\n scriptElement.addEventListener(\n 'load',\n () => {\n cleanupObjectUrl();\n handleLoad();\n },\n { once: true },\n );\n scriptElement.addEventListener(\n 'error',\n () => {\n cleanupObjectUrl();\n handleError();\n },\n { once: true },\n );\n scriptParentElement.append(scriptElement);\n })\n .catch((error) => {\n reject(error instanceof Error ? error : new Error('Failed to create browser exceljs bundle.'));\n });\n });\n\n/** 브라우저 배포용 exceljs 모듈 지연 로드 */\nexport const loadExcelJSBrowser = () => {\n if (!excelJSBrowserPromise) {\n excelJSBrowserPromise = loadExcelJSBrowserScript()\n .catch((error) => {\n excelJSBrowserPromise = undefined;\n throw error;\n });\n }\n\n return excelJSBrowserPromise;\n};\n"],"names":["EXCELJS_SCRIPT_SELECTOR","excelJSBrowserPromise","getExcelJSGlobal","__name","createExcelJSGlobalMissingError","loadExcelJSBrowserSource","loadExcelJSBrowserScript","resolve","reject","loadedExcelJS","handleLoad","resolvedExcelJS","handleError","existingScript","scriptElement","scriptParentElement","source","objectUrl","cleanupObjectUrl","error","loadExcelJSBrowser"],"mappings":";;AAOA,MAAMA,IAA0B;AAChC,IAAIC;AAGJ,MAAMC,IAAmB,gBAAAC,EAAA,MACvB,OAAO,SAAW,MAAc,SAAa,OAAyB,SAD/C,qBAInBC,IAAkC,gBAAAD,EAAA,MACtC,IAAI,MAAM,2CAA2C,GADf,oCAIlCE,IAA2B,gBAAAF,EAAA,aAC9B,MAAM,OAAO,oDAAoC,GAAG,SADtB,6BAI3BG,IAA2B,gBAAAH,EAAA,MAC/B,IAAI,QAA8B,CAACI,GAASC,MAAW;AACrD,QAAMC,IAAgBP,EAAA;AAEtB,MAAIO,GAAe;AACjB,IAAAF,EAAQE,CAAa;AACrB;AAAA,EACF;AAEA,MAAI,OAAO,WAAa,KAAa;AACnC,IAAAD,EAAOJ,GAAiC;AACxC;AAAA,EACF;AAEA,QAAMM,IAAa,gBAAAP,EAAA,MAAM;AACvB,UAAMQ,IAAkBT,EAAA;AAExB,QAAI,CAACS,GAAiB;AACpB,MAAAH,EAAOJ,GAAiC;AACxC;AAAA,IACF;AAEA,IAAAG,EAAQI,CAAe;AAAA,EACzB,GATmB,eAUbC,IAAc,gBAAAT,EAAA,MAAM;AACxB,IAAAK,EAAO,IAAI,MAAM,wCAAwC,CAAC;AAAA,EAC5D,GAFoB,gBAGdK,IAAiB,SAAS,cAAiCb,CAAuB;AAExF,MAAIa,GAAgB;AAClB,IAAAA,EAAe,iBAAiB,QAAQH,GAAY,EAAE,MAAM,IAAM,GAClEG,EAAe,iBAAiB,SAASD,GAAa,EAAE,MAAM,IAAM;AACpE;AAAA,EACF;AAEA,QAAME,IAAgB,SAAS,cAAc,QAAQ,GAC/CC,IAAsB,SAAS,QAAQ,SAAS,QAAQ,SAAS;AAEvE,MAAI,CAACA,GAAqB;AACxB,IAAAP,EAAOJ,GAAiC;AACxC;AAAA,EACF;AAEA,EAAKC,EAAA,EACF,KAAK,CAACW,MAAW;AAChB,UAAMC,IAAY,IAAI;AAAA,MACpB,IAAI,KAAK,CAACD,CAAM,GAAG;AAAA,QACjB,MAAM;AAAA,MAAA,CACP;AAAA,IAAA,GAEGE,IAAmB,gBAAAf,EAAA,MAAM;AAC7B,UAAI,gBAAgBc,CAAS;AAAA,IAC/B,GAFyB;AAIzB,IAAAH,EAAc,QAAQ,IACtBA,EAAc,QAAQ,mBAAmB,QACzCA,EAAc,MAAMG,GACpBH,EAAc;AAAA,MACZ;AAAA,MACA,MAAM;AACJ,QAAAI,EAAA,GACAR,EAAA;AAAA,MACF;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAEfI,EAAc;AAAA,MACZ;AAAA,MACA,MAAM;AACJ,QAAAI,EAAA,GACAN,EAAA;AAAA,MACF;AAAA,MACA,EAAE,MAAM,GAAA;AAAA,IAAK,GAEfG,EAAoB,OAAOD,CAAa;AAAA,EAC1C,CAAC,EACA,MAAM,CAACK,MAAU;AAChB,IAAAX,EAAOW,aAAiB,QAAQA,IAAQ,IAAI,MAAM,0CAA0C,CAAC;AAAA,EAC/F,CAAC;AACL,CAAC,GA9E8B,6BAiFpBC,IAAqB,gBAAAjB,EAAA,OAC3BF,MACHA,IAAwBK,EAAA,EACrB,MAAM,CAACa,MAAU;AAChB,QAAAlB,IAAwB,QAClBkB;AACR,CAAC,IAGElB,IATyB;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var E = Object.defineProperty;
|
|
2
|
-
var c = (
|
|
2
|
+
var c = (r, e) => E(r, "name", { value: e, configurable: !0 });
|
|
3
3
|
import { TREEGRID_CELL_HIGHLIGHT_CLASS as f, TREEGRID_CELL_HIGHLIGHT_COLOR as C } from "../constants/treeGrid.js";
|
|
4
4
|
import { TREEGRID_INPUT_CELL_COLOR as le, TREEGRID_WARNING_CELL_COLOR as de } from "../constants/treeGrid.js";
|
|
5
5
|
import { parseTreeGridXmlToJson as w } from "../components/OwpTreeGrid/internal/treeGridLayout.js";
|
|
@@ -12,106 +12,106 @@ import { omit as D } from "../node_modules/.pnpm/es-toolkit@1.39.10/node_modules
|
|
|
12
12
|
import { isEmpty as G } from "../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js";
|
|
13
13
|
import { without as S } from "../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/without.js";
|
|
14
14
|
const B = ["Added", "Changed"], A = ["OWP", "IPX"], _ = /* @__PURE__ */ c(async () => {
|
|
15
|
-
const { exportTreeGridExcel:
|
|
16
|
-
return
|
|
17
|
-
}, "loadExportTreeGridExcel"), L = /* @__PURE__ */ c((
|
|
18
|
-
const
|
|
19
|
-
let l = n ?? (s ? s.parentNode : null) ??
|
|
20
|
-
switch (
|
|
15
|
+
const { exportTreeGridExcel: r } = await import("./treeGridExportExcelUtil.js");
|
|
16
|
+
return r;
|
|
17
|
+
}, "loadExportTreeGridExcel"), L = /* @__PURE__ */ c((r) => Object.values((r == null ? void 0 : r.Rows) ?? {}).filter((e) => e.Kind === "Data"), "getDataRows"), x = /* @__PURE__ */ c((r, e) => {
|
|
18
|
+
const t = (e == null ? void 0 : e.insertPosition) ?? "top", n = e == null ? void 0 : e.parent, s = e == null ? void 0 : e.anchorRow;
|
|
19
|
+
let l = n ?? (s ? s.parentNode : null) ?? r.GetFirst(), d = null;
|
|
20
|
+
switch (t) {
|
|
21
21
|
case "top":
|
|
22
|
-
d =
|
|
22
|
+
d = r.GetFirst();
|
|
23
23
|
break;
|
|
24
24
|
case "last":
|
|
25
|
-
l =
|
|
25
|
+
l = r.GetNext(r.GetLast(), r.RowCount > 0 ? r.RowCount + 1 : 0), d = l;
|
|
26
26
|
break;
|
|
27
27
|
case "above":
|
|
28
|
-
d = s ??
|
|
28
|
+
d = s ?? r.GetFirst();
|
|
29
29
|
break;
|
|
30
30
|
case "below":
|
|
31
|
-
d = (s == null ? void 0 : s.nextSibling) ??
|
|
31
|
+
d = (s == null ? void 0 : s.nextSibling) ?? r.GetFirst();
|
|
32
32
|
break;
|
|
33
33
|
}
|
|
34
34
|
return { resolvedParent: l, next: d };
|
|
35
|
-
}, "resolveRowInsertionTarget"), g = /* @__PURE__ */ c((
|
|
36
|
-
h(e) && Object.entries(e).forEach(([
|
|
37
|
-
t
|
|
35
|
+
}, "resolveRowInsertionTarget"), g = /* @__PURE__ */ c((r, e) => {
|
|
36
|
+
h(e) && Object.entries(e).forEach(([t, n]) => {
|
|
37
|
+
r[t] = n;
|
|
38
38
|
});
|
|
39
|
-
}, "assignInitialRowValues"), V = /* @__PURE__ */ c((
|
|
40
|
-
S(Object.keys(
|
|
41
|
-
), "normalizeAddedRow"), j = /* @__PURE__ */ c((
|
|
42
|
-
const e = a(
|
|
39
|
+
}, "assignInitialRowValues"), V = /* @__PURE__ */ c((r) => A.some((e) => r.startsWith(e)), "isTreeGridDataKey"), P = /* @__PURE__ */ c((r) => Object.fromEntries(
|
|
40
|
+
S(Object.keys(r), "id").filter((e) => V(e) && !G(r[e])).map((e) => [e, r[e]])
|
|
41
|
+
), "normalizeAddedRow"), j = /* @__PURE__ */ c((r, e) => r.filter((t) => b(t, e) === "1" && t.Deleted !== "1").map((t) => e === "Changed" ? D(t, ["id", "Changed"]) : P(t)).filter((t) => !G(t)), "getChangedRowsByStatus"), a = /* @__PURE__ */ c((r) => Grids[r], "getTreeGridById"), Y = /* @__PURE__ */ c((r) => {
|
|
42
|
+
const e = a(r);
|
|
43
43
|
return L(e);
|
|
44
|
-
}, "getTreeGridDataRowsById"), q = /* @__PURE__ */ c((
|
|
45
|
-
const
|
|
46
|
-
if (!
|
|
44
|
+
}, "getTreeGridDataRowsById"), q = /* @__PURE__ */ c((r, e) => {
|
|
45
|
+
const t = a(r);
|
|
46
|
+
if (!t)
|
|
47
47
|
return;
|
|
48
|
-
const n =
|
|
49
|
-
|
|
48
|
+
const n = t.Data.Data;
|
|
49
|
+
t.Data.Data = {
|
|
50
50
|
...n,
|
|
51
51
|
Data: { Body: [e || []] },
|
|
52
52
|
Url: ""
|
|
53
|
-
},
|
|
54
|
-
m(
|
|
53
|
+
}, t.ReloadBody(), window.setTimeout(() => {
|
|
54
|
+
m(r);
|
|
55
55
|
}, 0);
|
|
56
|
-
}, "reloadTreeGridBodyById"), M = /* @__PURE__ */ c((
|
|
57
|
-
const
|
|
58
|
-
if (!
|
|
56
|
+
}, "reloadTreeGridBodyById"), M = /* @__PURE__ */ c((r, e) => {
|
|
57
|
+
const t = a(r);
|
|
58
|
+
if (!t)
|
|
59
59
|
return;
|
|
60
|
-
const n = e == null ? void 0 : e.canSelect, s = e == null ? void 0 : e.initialValues, { resolvedParent: l, next: d } = x(
|
|
61
|
-
g(o, s), o.CanEdit = 1, o.CanDelete = 1, o.CanSelect = n ? 1 : 0,
|
|
62
|
-
m(
|
|
60
|
+
const n = e == null ? void 0 : e.canSelect, s = e == null ? void 0 : e.initialValues, { resolvedParent: l, next: d } = x(t, e), o = t.AddRow(l, d, 1);
|
|
61
|
+
g(o, s), o.CanEdit = 1, o.CanDelete = 1, o.CanSelect = n ? 1 : 0, t.Focus(o), t.RefreshRow(o), window.setTimeout(() => {
|
|
62
|
+
m(r);
|
|
63
63
|
}, 0);
|
|
64
|
-
}, "addTreeGridRowById"), Q = /* @__PURE__ */ c((
|
|
65
|
-
const e = a(
|
|
66
|
-
return y(
|
|
64
|
+
}, "addTreeGridRowById"), Q = /* @__PURE__ */ c((r) => {
|
|
65
|
+
const e = a(r), t = w(e == null ? void 0 : e.GetXmlData("changes,allcols,nogrid,noio"));
|
|
66
|
+
return y(t) ? Object.fromEntries(
|
|
67
67
|
B.map((n) => [
|
|
68
68
|
I(n),
|
|
69
|
-
j(
|
|
69
|
+
j(t, n)
|
|
70
70
|
])
|
|
71
71
|
) : { added: [], changed: [] };
|
|
72
|
-
}, "getTreeGridRowChangesById"), Z = /* @__PURE__ */ c((
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
(n) => n(
|
|
72
|
+
}, "getTreeGridRowChangesById"), Z = /* @__PURE__ */ c((r, e) => {
|
|
73
|
+
const t = a(r);
|
|
74
|
+
t && _().then(
|
|
75
|
+
(n) => n(t, { exportName: e ?? "" })
|
|
76
76
|
);
|
|
77
|
-
}, "exportTreeGridToExcelById"), p = /* @__PURE__ */ c((
|
|
78
|
-
const e = a(
|
|
77
|
+
}, "exportTreeGridToExcelById"), p = /* @__PURE__ */ c((r) => {
|
|
78
|
+
const e = a(r);
|
|
79
79
|
return (e == null ? void 0 : e.GetSelRows()) ?? [];
|
|
80
|
-
}, "getTreeGridSelectedRowsById"), ee = /* @__PURE__ */ c((
|
|
81
|
-
const
|
|
82
|
-
if (!
|
|
80
|
+
}, "getTreeGridSelectedRowsById"), ee = /* @__PURE__ */ c((r, e) => {
|
|
81
|
+
const t = a(r);
|
|
82
|
+
if (!t || !(e != null && e.targetKey))
|
|
83
83
|
return;
|
|
84
84
|
const n = e == null ? void 0 : e.targetKey;
|
|
85
85
|
if (e == null ? void 0 : e.canVisible) {
|
|
86
|
-
|
|
86
|
+
t.ShowCol(n);
|
|
87
87
|
return;
|
|
88
88
|
}
|
|
89
|
-
|
|
90
|
-
}, "setTreeGridColumnVisibilityById"),
|
|
91
|
-
const
|
|
92
|
-
!
|
|
93
|
-
}, "highlightTreeGridCellById"), R = /* @__PURE__ */ c((
|
|
94
|
-
const e = a(
|
|
89
|
+
t.HideCol(n);
|
|
90
|
+
}, "setTreeGridColumnVisibilityById"), re = /* @__PURE__ */ c((r, e) => {
|
|
91
|
+
const t = a(r), n = e == null ? void 0 : e.row, s = e == null ? void 0 : e.col;
|
|
92
|
+
!t || !n || !s || (t.SetValue(n, `${s}Class`, f), t.SetValue(n, `${s}Color`, e.backgroundColor ?? C), t.RefreshCell(n, s));
|
|
93
|
+
}, "highlightTreeGridCellById"), R = /* @__PURE__ */ c((r) => {
|
|
94
|
+
const e = a(r);
|
|
95
95
|
e && e.ActionDeselectAll(1, 0);
|
|
96
|
-
}, "resetTreeGridSelectionById"),
|
|
97
|
-
|
|
98
|
-
}, "resetTreeGridSelectionsByIds"), H = /* @__PURE__ */ c((
|
|
99
|
-
const e = a(
|
|
100
|
-
e && (e.ActionUndoAll(1, 0), R(
|
|
101
|
-
m(
|
|
96
|
+
}, "resetTreeGridSelectionById"), te = /* @__PURE__ */ c((r) => {
|
|
97
|
+
r.forEach(R);
|
|
98
|
+
}, "resetTreeGridSelectionsByIds"), H = /* @__PURE__ */ c((r) => {
|
|
99
|
+
const e = a(r);
|
|
100
|
+
e && (e.ActionUndoAll(1, 0), R(r), window.setTimeout(() => {
|
|
101
|
+
m(r);
|
|
102
102
|
}, 0));
|
|
103
|
-
}, "resetTreeGridChangesById"), ne = /* @__PURE__ */ c((
|
|
104
|
-
|
|
105
|
-
}, "resetTreeGridChangesByIds"), ce = /* @__PURE__ */ c((
|
|
106
|
-
if (!(
|
|
103
|
+
}, "resetTreeGridChangesById"), ne = /* @__PURE__ */ c((r) => {
|
|
104
|
+
r.forEach(H);
|
|
105
|
+
}, "resetTreeGridChangesByIds"), ce = /* @__PURE__ */ c((r, e, t, n, s) => {
|
|
106
|
+
if (!(t != null && t.length))
|
|
107
107
|
return;
|
|
108
|
-
const l = a(
|
|
108
|
+
const l = a(r);
|
|
109
109
|
if (!l)
|
|
110
110
|
return;
|
|
111
|
-
const d =
|
|
111
|
+
const d = t.map((u) => {
|
|
112
112
|
const T = u;
|
|
113
113
|
return `${s.map((i) => T[i]).find((i) => i != null && i !== "") ?? ""}`;
|
|
114
|
-
}).join("|"), o =
|
|
114
|
+
}).join("|"), o = t.map((u) => `${u[n] ?? ""}`).join("|");
|
|
115
115
|
l.SetAttribute(null, e, "Type", "Enum", 0, 0), l.SetAttribute(null, e, "Enum", `|${d}`, 0, 0), l.SetAttribute(null, e, "EnumKeys", `|${o}`, 1, 0);
|
|
116
116
|
}, "setTreeGridColumnEnumOptionsById");
|
|
117
117
|
export {
|
|
@@ -125,12 +125,12 @@ export {
|
|
|
125
125
|
Y as getTreeGridDataRowsById,
|
|
126
126
|
Q as getTreeGridRowChangesById,
|
|
127
127
|
p as getTreeGridSelectedRowsById,
|
|
128
|
-
|
|
128
|
+
re as highlightTreeGridCellById,
|
|
129
129
|
q as reloadTreeGridBodyById,
|
|
130
130
|
H as resetTreeGridChangesById,
|
|
131
131
|
ne as resetTreeGridChangesByIds,
|
|
132
132
|
R as resetTreeGridSelectionById,
|
|
133
|
-
|
|
133
|
+
te as resetTreeGridSelectionsByIds,
|
|
134
134
|
ce as setTreeGridColumnEnumOptionsById,
|
|
135
135
|
ee as setTreeGridColumnVisibilityById
|
|
136
136
|
};
|
|
@@ -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/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"],"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"],"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 backgroundColor?: 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`, targetOption.backgroundColor ?? 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"],"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"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OwpFileUploadButton.js","sources":["../../../src/components/OwpFileUploadButton/OwpFileUploadButton.tsx"],"sourcesContent":["import Button, { type ButtonProps } from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\nimport { type ChangeEvent, type ReactNode, useEffect, useRef } from 'react';\n\nexport interface OwpFileUploadButtonOwnProps {\n multiple?: boolean;\n accept?: string;\n title?: ReactNode;\n onChange?: (evt: ChangeEvent<HTMLInputElement>) => void;\n onCancel?: (evt: Event) => void;\n}\n\nexport type OwpFileUploadButtonProps = OwpFileUploadButtonOwnProps &\n Omit<ButtonProps, 'title'>;\n\nconst DEFAULT_ACCEPT = 'image/x-png,image/gif,image/jpeg,image/jpg';\n\nconst VisuallyHiddenInput = styled('input')({\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(50%)',\n height: 1,\n overflow: 'hidden',\n position: 'absolute',\n bottom: 0,\n left: 0,\n whiteSpace: 'nowrap',\n width: 1,\n});\n\n/**\n * OwpFileUploadButton 컴포넌트\n * @param title 제목\n * @param multiple multiple 값\n * @param onChange onChange 핸들러\n * @param onCancel onCancel 핸들러\n * @param accept accept 값\n */\nexport function OwpFileUploadButton({\n title,\n multiple,\n onChange,\n onCancel,\n accept,\n ...restProps\n}: OwpFileUploadButtonProps) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const buttonProps = restProps as unknown as Omit<ButtonProps<'label'>, 'children' | 'component'>;\n\n useEffect(() => {\n const inputElement = inputRef.current;\n if (!inputElement || !onCancel) {\n return;\n }\n\n inputElement.addEventListener('cancel', onCancel);\n\n return () => {\n inputElement.removeEventListener('cancel', onCancel);\n };\n }, [onCancel]);\n\n return (\n <Button\n component=\"label\"\n role={undefined}\n variant=\"contained\"\n tabIndex={-1}\n {...buttonProps}\n >\n {title}\n <VisuallyHiddenInput\n ref={inputRef}\n type=\"file\"\n accept={accept ?? DEFAULT_ACCEPT}\n onClick={(event) => {\n event.currentTarget.value = '';\n }}\n onChange={(event) => onChange?.(event)}\n multiple={Boolean(multiple)}\n />\n </Button>\n );\n}\n"],"names":["DEFAULT_ACCEPT","VisuallyHiddenInput","styled","OwpFileUploadButton","title","multiple","onChange","onCancel","accept","restProps","inputRef","useRef","buttonProps","useEffect","inputElement","jsxs","Button","jsx","__name","event"],"mappings":";;;;;;AAeA,MAAMA,IAAiB,8CAEjBC,IAAsBC,EAAO,OAAO,EAAE;AAAA,EAC1C,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AACT,CAAC;AAUM,SAASC,EAAoB;AAAA,EAClC,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGC;AACL,GAA6B;AAC3B,QAAMC,IAAWC,EAAgC,IAAI,GAC/CC,IAAcH;AAEpB,SAAAI,EAAU,MAAM;AACd,UAAMC,IAAeJ,EAAS;AAC9B,QAAI,GAACI,KAAgB,CAACP;AAItB,aAAAO,EAAa,iBAAiB,UAAUP,CAAQ,GAEzC,MAAM;AACX,QAAAO,EAAa,oBAAoB,UAAUP,CAAQ;AAAA,MACrD;AAAA,EACF,GAAG,CAACA,CAAQ,CAAC,GAGX,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAQ;AAAA,MACR,UAAU;AAAA,MACT,GAAGJ;AAAA,MAEH,UAAA;AAAA,QAAAR;AAAA,QACD,gBAAAa;AAAA,UAAChB;AAAA,UAAA;AAAA,YACC,KAAKS;AAAA,YACL,MAAK;AAAA,YACL,QAAQF,KAAUR;AAAA,YAClB,SAAS,gBAAAkB,EAAA,CAACC,MAAU;AAClB,cAAAA,EAAM,cAAc,QAAQ;AAAA,YAC9B,GAFS;AAAA,YAGT,UAAU,gBAAAD,EAAA,CAACC,MAAUb,KAAA,gBAAAA,EAAWa,IAAtB;AAAA,YACV,UAAU,EAAQd;AAAA,UAAQ;AAAA,QAAA;AAAA,MAC5B;AAAA,IAAA;AAAA,EAAA;AAGN;AA7CgBa,EAAAf,GAAA;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OwpTreeGridExcelButton.js","sources":["../../../src/components/OwpTreeGridExcelButton/OwpTreeGridExcelButton.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useTreeGridExcelExport } from '@/hooks/useTreeGridExcelExport';\nimport { Button, type ButtonProps } from '@mui/material';\nimport { type MouseEventHandler } from 'react';\n\nexport interface OwpTreeGridExcelButtonProps extends ButtonProps {\n gridId: string;\n exportName?: string;\n}\n\n/**\n * TreeGrid 엑셀 내보내기 버튼\n * @param gridId TreeGrid 인스턴스 ID\n * @param exportName 다운로드 파일명\n */\nconst OwpTreeGridExcelButton = ({\n gridId,\n exportName,\n children,\n loading,\n loadingPosition,\n onClick,\n ...buttonProps\n}: OwpTreeGridExcelButtonProps) => {\n const { t } = useOwpTranslation();\n const { exportByTreeGrid, isExporting } = useTreeGridExcelExport(gridId);\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n onClick?.(event);\n\n if (event.defaultPrevented || loading || isExporting) {\n return;\n }\n\n void exportByTreeGrid(exportName ?? gridId);\n };\n\n return (\n <Button\n variant=\"contained\"\n color=\"success\"\n {...buttonProps}\n loading={Boolean(loading || isExporting)}\n loadingPosition={loadingPosition ?? 'start'}\n onClick={handleClick}\n >\n {children ?? t('Button.엑셀 다운로드')}\n </Button>\n );\n};\n\nexport { OwpTreeGridExcelButton };\n"],"names":["OwpTreeGridExcelButton","__name","gridId","exportName","children","loading","loadingPosition","onClick","buttonProps","t","useOwpTranslation","exportByTreeGrid","isExporting","useTreeGridExcelExport","jsx","Button","event"],"mappings":";;;;;;AAeA,MAAMA,IAAyB,gBAAAC,EAAA,CAAC;AAAA,EAC9B,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,GAAGC;AACL,MAAmC;AACjC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACR,EAAE,kBAAAC,GAAkB,aAAAC,MAAgBC,EAAuBX,CAAM;AAYvE,SACE,gBAAAY;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAM;AAAA,MACL,GAAGP;AAAA,MACJ,SAAS,GAAQH,KAAWO;AAAA,MAC5B,iBAAiBN,KAAmB;AAAA,MACpC,SAjBsD,gBAAAL,EAAA,CAACe,MAAU;AAGnE,QAFAT,KAAA,QAAAA,EAAUS,IAEN,EAAAA,EAAM,oBAAoBX,KAAWO,MAIpCD,EAAiBR,KAAcD,CAAM;AAAA,MAC5C,GAR0D;AAAA,MAmBrD,UAAAE,KAAYK,EAAE,gBAAgB;AAAA,IAAA;AAAA,EAAA;AAGrC,GAlC+B;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './OwpFileUploadButton';
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type ButtonProps } from '@mui/material';
|
|
2
|
-
export interface OwpTreeGridExcelButtonProps extends ButtonProps {
|
|
3
|
-
gridId: string;
|
|
4
|
-
exportName?: string;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* TreeGrid 엑셀 내보내기 버튼
|
|
8
|
-
* @param gridId TreeGrid 인스턴스 ID
|
|
9
|
-
* @param exportName 다운로드 파일명
|
|
10
|
-
*/
|
|
11
|
-
declare const OwpTreeGridExcelButton: ({ gridId, exportName, children, loading, loadingPosition, onClick, ...buttonProps }: OwpTreeGridExcelButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
-
export { OwpTreeGridExcelButton };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './OwpTreeGridExcelButton';
|