@owp/core 2.5.32 β 2.5.34
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/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/_virtual/index3.js +2 -2
- package/dist/_virtual/index4.js +2 -2
- package/dist/components/OwpPicker/OwpDatePicker.js +189 -185
- package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
- package/dist/components/OwpPicker/internal/DatePickerInput.js +48 -45
- package/dist/components/OwpPicker/internal/DatePickerInput.js.map +1 -1
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +351 -331
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +17 -16
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +229 -222
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/layout/components/toggles/NavigationSearchToggle.js +3 -3
- package/dist/node_modules/.pnpm/inko@1.1.1/node_modules/inko/index.js +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/EAN_UPC/constants.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/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/utils/treeGridUtil.js +1 -1
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/package.json +1 -1
|
@@ -18,11 +18,11 @@ import { styled as te } from "@mui/material/styles";
|
|
|
18
18
|
import z from "@mui/material/TextField";
|
|
19
19
|
import ne from "@mui/material/Tooltip";
|
|
20
20
|
import E from "@mui/material/Typography";
|
|
21
|
-
import D from "../../../_virtual/
|
|
22
|
-
import re from "../../../_virtual/
|
|
21
|
+
import D from "../../../_virtual/index17.js";
|
|
22
|
+
import re from "../../../_virtual/index18.js";
|
|
23
23
|
import { clsx as B } from "../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
|
|
24
24
|
import { useMemo as oe, useReducer as ie, useRef as T, useEffect as se } from "react";
|
|
25
|
-
import W from "../../../_virtual/
|
|
25
|
+
import W from "../../../_virtual/index19.js";
|
|
26
26
|
import { useNavigate as ae } from "react-router-dom";
|
|
27
27
|
import { toolbarToggleSx as le } from "./toggleStyles.js";
|
|
28
28
|
import { OwpSvgIcon as w } from "../../../components/OwpSvgIcon/OwpSvgIcon.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var Q = Object.defineProperty;
|
|
2
2
|
var w = (k, D) => Q(k, "name", { value: D, configurable: !0 });
|
|
3
|
-
import { __module as I } from "../../../../../_virtual/
|
|
3
|
+
import { __module as I } from "../../../../../_virtual/index4.js";
|
|
4
4
|
var F;
|
|
5
5
|
function W() {
|
|
6
6
|
return F ? I.exports : (F = 1, (function(k, D) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var f = Object.defineProperty;
|
|
2
2
|
var t = (e, _) => f(e, "name", { value: _, configurable: !0 });
|
|
3
|
-
import { __exports as r } from "../../../../../../../../_virtual/
|
|
3
|
+
import { __exports as r } from "../../../../../../../../_virtual/constants.js";
|
|
4
4
|
var i;
|
|
5
5
|
function E() {
|
|
6
6
|
if (i) return r;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var n = Object.defineProperty;
|
|
2
2
|
var G = (r, t) => n(r, "name", { value: t, configurable: !0 });
|
|
3
|
-
import { __exports as L } from "../../../../../../../../_virtual/
|
|
3
|
+
import { __exports as L } from "../../../../../../../../_virtual/constants2.js";
|
|
4
4
|
var e;
|
|
5
5
|
function o() {
|
|
6
6
|
return e ? L : (e = 1, Object.defineProperty(L, "__esModule", {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var o = Object.defineProperty;
|
|
2
2
|
var r = (n, s) => o(n, "name", { value: s, configurable: !0 });
|
|
3
|
-
import { __exports as e } from "../../../../../../../../_virtual/
|
|
3
|
+
import { __exports as e } from "../../../../../../../../_virtual/constants3.js";
|
|
4
4
|
var t;
|
|
5
5
|
function _() {
|
|
6
6
|
return t ? e : (t = 1, Object.defineProperty(e, "__esModule", {
|
package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var O = Object.defineProperty;
|
|
2
2
|
var C = (i, r) => O(i, "name", { value: r, configurable: !0 });
|
|
3
|
-
import { __exports as o } from "../../../../../../../_virtual/
|
|
3
|
+
import { __exports as o } from "../../../../../../../_virtual/index3.js";
|
|
4
4
|
import { __require as c } from "./CODE39/index.js";
|
|
5
5
|
import { __require as D } from "./CODE128/index.js";
|
|
6
6
|
import { __require as d } from "./EAN_UPC/index.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var c = Object.defineProperty;
|
|
2
2
|
var a = (r, e) => c(r, "name", { value: e, configurable: !0 });
|
|
3
|
-
import n from "../../../../../../_virtual/
|
|
3
|
+
import n from "../../../../../../_virtual/index16.js";
|
|
4
4
|
import m from "react-dom";
|
|
5
5
|
import t from "react";
|
|
6
6
|
import u from "./useWaitForDOMRef.js";
|
|
@@ -145,7 +145,7 @@ const X = ["Added", "Changed"], Q = ["OWP", "IPX"], g = /^H{1,2}(?::m{1,2})?(?::
|
|
|
145
145
|
const r = (i = (s = e.Cols) == null ? void 0 : s[t.key]) == null ? void 0 : i.Caption;
|
|
146
146
|
return r ? `${r}`.trim() : t.key;
|
|
147
147
|
}, "getTreeGridRequiredCellLabel"), Ee = /* @__PURE__ */ l((e, t, r) => t.message ? t.message : (r ?? J)(e), "getTreeGridRequiredCellMessage"), Ce = /* @__PURE__ */ l((e) => e.trim() === "", "isBlankTreeGridRequiredCellValue"), me = /* @__PURE__ */ l((e, t, r) => {
|
|
148
|
-
!t || r.focusFirstError === !1 || (e.Focus(t.row, t.col), r.startEditFirstError
|
|
148
|
+
!t || r.focusFirstError === !1 || (e.Focus(t.row, t.col), r.startEditFirstError === !0 && $(e, t.row, t.col) && e.StartEdit(t.row, t.col));
|
|
149
149
|
}, "focusFirstTreeGridRequiredCellError"), C = /* @__PURE__ */ l((e) => typeof e == "string" && g.test(e.trim()), "isTreeGridTimeDateFormat"), x = /* @__PURE__ */ l((e, t, r) => {
|
|
150
150
|
var i;
|
|
151
151
|
const n = t, s = (i = e.Cols) == null ? void 0 : i[r];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeGridUtil.js","sources":["../../src/utils/treeGridUtil.ts"],"sourcesContent":["import {\n TREEGRID_CELL_CHANGED_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 {\n resolveTreeGridSelectedRows,\n type OwpTreeGridSelectedRowsResolveOptions,\n type OwpTreeGridSelectionScope,\n} from '@/components/OwpTreeGrid/internal/treeGridSelection';\nimport { emitTreeGridBodyRowsChanged } from '@/utils/internal/treeGridBodyRowsEvent';\nimport { isPlainObject } from 'es-toolkit';\nimport { get, isArray, isEmpty, lowerCase, without } from 'es-toolkit/compat';\n\nexport {\n TREEGRID_CELL_CHANGED_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 editableColumns?: readonly string[];\n};\n\ntype TreeGridColumnVisibilityOptions = {\n targetKey: string;\n canVisible: boolean;\n};\n\ntype TreeGridHighlightTargetOption = {\n row: TRow;\n col: string;\n backgroundColor?: string;\n refresh?: boolean;\n};\n\nexport type TreeGridSelectionScope = OwpTreeGridSelectionScope;\nexport type TreeGridSelectedRowsOptions = OwpTreeGridSelectedRowsResolveOptions;\n\nexport type TreeGridRequiredCellColumn =\n | string\n | {\n key: string;\n label?: string;\n message?: string;\n };\n\nexport type TreeGridRequiredCellMessageContext = {\n grid: TGrid;\n row: TRow;\n col: string;\n key: string;\n label: string;\n value: string;\n};\n\nexport type TreeGridRequiredCellValidationError = TreeGridRequiredCellMessageContext & {\n message: string;\n};\n\nexport type TreeGridRequiredCellTargetRow = 'added' | 'changed' | 'all';\n\ntype TreeGridRequiredCellsValidationBaseOptions = {\n targetRows?: TreeGridRequiredCellTargetRow | readonly TreeGridRequiredCellTargetRow[];\n rows?: readonly TRow[];\n messageFactory?: (context: TreeGridRequiredCellMessageContext) => string;\n focusFirstError?: boolean;\n startEditFirstError?: boolean;\n refresh?: boolean;\n};\n\nexport type TreeGridRequiredCellsValidationOptions =\n TreeGridRequiredCellsValidationBaseOptions &\n (\n | {\n editableOnly: true;\n columns?: readonly TreeGridRequiredCellColumn[];\n }\n | {\n columns: readonly TreeGridRequiredCellColumn[];\n editableOnly?: boolean;\n }\n );\n\nexport type TreeGridRequiredCellsValidationResult = {\n valid: boolean;\n errors: TreeGridRequiredCellValidationError[];\n firstError?: TreeGridRequiredCellValidationError;\n};\n\ntype NormalizedTreeGridRequiredCellColumn = {\n key: string;\n label?: string;\n message?: string;\n};\n\ntype TreeGridAddedRowMetadata = TRow & {\n [TREEGRID_ADDED_ROW_BY_ID_FLAG]?: boolean | number;\n [TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY]?: string[];\n [TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY]?: string[];\n [TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY]?: Record<string, string>;\n [TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?: Record<\n string,\n { className: unknown; color: unknown }\n >;\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'];\nconst TREEGRID_TIME_DATE_FORMAT_PATTERN = /^H{1,2}(?::m{1,2})?(?::s{1,2})?$/;\nconst TREEGRID_ADDED_ROW_BY_ID_FLAG = '__owpAddedByAddTreeGridRowById';\nconst TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY = '__owpAddedRowHighlightColumns';\nconst TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY = '__owpAddedRowInitialValueKeys';\nconst TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY = '__owpAddedRowBaselineValues';\nconst TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY = '__owpCellStyleBaselineValues';\nconst TREEGRID_ROW_SELECTED_KEY = 'Selected';\n\nconst DEFAULT_TREE_GRID_REQUIRED_CELL_MESSAGE_FACTORY = ({\n label,\n}: TreeGridRequiredCellMessageContext) => `${label} νμ μ
λ ₯`;\nconst DEFAULT_TREE_GRID_REQUIRED_CELL_TARGET_ROWS: readonly TreeGridRequiredCellTargetRow[] = [\n 'added',\n];\n\nconst normalizeTreeGridStringValues = (value: unknown) => {\n if (!isArray(value)) {\n return [];\n }\n\n return value.filter((item): item is string => typeof item === 'string' && item !== '');\n};\n\nconst normalizeTreeGridAddedRowHighlightColumns = normalizeTreeGridStringValues;\n\n/**\n * addTreeGridRowById μμ± ν λ§νΉ\n * @param row λμ ν\n */\nconst markTreeGridRowAddedById = (row: TRow | null | undefined) => {\n if (!row) {\n return;\n }\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_BY_ID_FLAG] = 1;\n};\n\n/**\n * addTreeGridRowById μμ± ν μ¬λΆ\n * @param row λμ ν\n */\nexport const isTreeGridRowAddedById = (row: TRow | null | undefined) => {\n const addedById = (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_BY_ID_FLAG];\n\n return !!row && addedById !== 0 && addedById !== false && addedById !== undefined;\n};\n\n/**\n * TreeGrid μ κ· ν μ¬λΆ\n * @param row λμ ν\n */\nconst isTreeGridAddedRow = (row: TRow | null | undefined) => {\n const added = (row as { Added?: unknown } | null)?.Added;\n\n return added === 1 || added === '1' || added === true || isTreeGridRowAddedById(row);\n};\n\n/**\n * TreeGrid μμ ν μ¬λΆ\n * @param row λμ ν\n */\nconst isTreeGridChangedRow = (row: TRow | null | undefined) => {\n const changed = (row as { Changed?: unknown } | null)?.Changed;\n\n return !isTreeGridAddedRow(row) && (changed === 1 || changed === '1' || changed === true);\n};\n\n/**\n * TreeGrid μμ ν μ¬λΆ\n * @param row λμ ν\n */\nconst isTreeGridDeletedRow = (row: TRow | null | undefined) => {\n const deleted = (row as { Deleted?: unknown } | null)?.Deleted;\n\n return deleted === 1 || deleted === '1' || deleted === true;\n};\n\n/**\n * TreeGrid νμ κ²μ¬ λμ ν μ’
λ₯ μ κ·ν\n * @param targetRows κ²μ¬ λμ ν μ’
λ₯\n */\nconst normalizeTreeGridRequiredCellTargetRows = (\n targetRows?: TreeGridRequiredCellsValidationOptions['targetRows'],\n) => {\n const normalizedTargetRows = isArray(targetRows)\n ? targetRows\n : targetRows\n ? [targetRows]\n : DEFAULT_TREE_GRID_REQUIRED_CELL_TARGET_ROWS;\n\n if (normalizedTargetRows.includes('all')) {\n return new Set<TreeGridRequiredCellTargetRow>(['all']);\n }\n\n return new Set<TreeGridRequiredCellTargetRow>(\n normalizedTargetRows.filter(\n (targetRow) => targetRow === 'added' || targetRow === 'changed',\n ),\n );\n};\n\n/**\n * TreeGrid νμ κ²μ¬ λμ ν μ¬λΆ\n * @param row λμ ν\n * @param targetRows κ²μ¬ λμ ν μ’
λ₯\n */\nconst shouldValidateTreeGridRequiredCellRow = (\n row: TRow,\n targetRows: Set<TreeGridRequiredCellTargetRow>,\n) => {\n if (isTreeGridDeletedRow(row)) {\n return false;\n }\n\n if (targetRows.has('all')) {\n return row.Kind === 'Data' || isTreeGridAddedRow(row);\n }\n\n return (\n (targetRows.has('added') && isTreeGridAddedRow(row)) ||\n (targetRows.has('changed') && isTreeGridChangedRow(row))\n );\n};\n\n/**\n * TreeGrid λͺ
μ νμ κ²μ¬ λμ ν μ¬λΆ\n * @param row λμ ν\n */\nconst shouldValidateExplicitTreeGridRequiredCellRow = (row: TRow | null | undefined) => {\n return !!row && !isTreeGridDeletedRow(row) && (row.Kind === 'Data' || isTreeGridAddedRow(row));\n};\n\n/**\n * TreeGrid live ν μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n */\nconst resolveLiveTreeGridRequiredCellRow = (grid: TGrid, row: TRow | null | undefined) => {\n if (!row) {\n return undefined;\n }\n\n if (typeof row.id !== 'string') {\n return row;\n }\n\n return (grid.Rows as unknown as Record<string, TRow | undefined>)?.[row.id] ?? row;\n};\n\n/**\n * TreeGrid νμ κ²μ¬ λͺ
μ ν λͺ©λ‘ μ κ·ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param rows λͺ
μ κ²μ¬ ν λͺ©λ‘\n */\nconst normalizeExplicitTreeGridRequiredCellRows = (\n grid: TGrid,\n rows: readonly TRow[],\n) => {\n const seenRows = new Set<TRow>();\n const normalizedRows: TRow[] = [];\n\n rows.forEach((row) => {\n const liveRow = resolveLiveTreeGridRequiredCellRow(grid, row);\n\n if (\n !shouldValidateExplicitTreeGridRequiredCellRow(liveRow) ||\n seenRows.has(liveRow)\n ) {\n return;\n }\n\n seenRows.add(liveRow);\n normalizedRows.push(liveRow);\n });\n\n return normalizedRows;\n};\n\n/**\n * TreeGrid νμ κ²μ¬ λμ ν λͺ©λ‘ μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param options νμ κ²μ¬ μ΅μ
\n */\nconst getTreeGridRequiredCellRows = (\n grid: TGrid,\n options: TreeGridRequiredCellsValidationOptions,\n) => {\n if (options.rows !== undefined) {\n return normalizeExplicitTreeGridRequiredCellRows(grid, options.rows);\n }\n\n const targetRows = normalizeTreeGridRequiredCellTargetRows(options.targetRows);\n\n return Object.values(grid.Rows ?? {}).filter((row) =>\n shouldValidateTreeGridRequiredCellRow(row, targetRows),\n );\n};\n\n/**\n * addTreeGridRowById μμ± ν νμ΄λΌμ΄νΈ μ»¬λΌ λμ \n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nexport const appendTreeGridAddedRowHighlightColumn = (\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col) {\n return;\n }\n\n const targetRow = row as TreeGridAddedRowMetadata;\n const currentColumns = normalizeTreeGridAddedRowHighlightColumns(\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n\n if (currentColumns.includes(col)) {\n return;\n }\n\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY] = [...currentColumns, col];\n};\n\n/**\n * addTreeGridRowById μμ± ν νμ΄λΌμ΄νΈ μ»¬λΌ μ κ±°\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nexport const removeTreeGridAddedRowHighlightColumn = (\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col) {\n return;\n }\n\n const targetRow = row as TreeGridAddedRowMetadata;\n const currentColumns = normalizeTreeGridAddedRowHighlightColumns(\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n const nextColumns = currentColumns.filter((column) => column !== col);\n\n if (nextColumns.length) {\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY] = nextColumns;\n return;\n }\n\n delete targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY];\n};\n\n/**\n * addTreeGridRowById μμ± ν νμ΄λΌμ΄νΈ μ»¬λΌ μ‘°ν\n * @param row λμ ν\n */\nexport const getTreeGridAddedRowHighlightColumns = (row: TRow | null | undefined) => {\n return normalizeTreeGridAddedRowHighlightColumns(\n (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n};\n\n/**\n * TreeGrid μ
λΉκ΅ κ° μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nexport const getTreeGridCellComparableValue = (\n grid: TGrid,\n row: TRow,\n col: string,\n) => {\n const cellType = grid.GetType?.(row, col) || grid.Cols?.[col]?.Type || '';\n const rawValue =\n grid.GetValue?.(row, col) ?? (row as unknown as Record<string, unknown>)[col];\n\n if (cellType === 'Enum' || cellType === 'Select') {\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n }\n\n try {\n const displayValue = grid.GetString?.(row, col);\n\n if (displayValue !== undefined && displayValue !== null) {\n return `${displayValue}`;\n }\n } catch {\n // GetString λ―Έμ§μ μ
fallback\n }\n\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n};\n\n/**\n * addTreeGridRowById μμ± ν κΈ°μ€κ° μ μ₯\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n */\nconst markTreeGridAddedRowBaselineValues = (grid: TGrid, row: TRow) => {\n const baselineValues = Object.fromEntries(\n Object.keys(grid.Cols ?? {}).map((col) => [\n col,\n getTreeGridCellComparableValue(grid, row, col),\n ]),\n );\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY] = baselineValues;\n};\n\n/**\n * addTreeGridRowById μμ± ν κΈ°μ€κ° μ‘°ν\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nexport const getTreeGridAddedRowBaselineValue = (\n row: TRow | null | undefined,\n col: string,\n) => {\n return (row as TreeGridAddedRowMetadata | null)?.[\n TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY\n ]?.[col];\n};\n\n/**\n * TreeGrid μ
νμ΄λΌμ΄νΈ μ μ€νμΌ μ μ₯\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nconst preserveTreeGridCellStyleBaseline = (grid: TGrid, row: TRow, col: string) => {\n const targetRow = row as TreeGridAddedRowMetadata;\n\n targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY] ??= {};\n\n if (targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?.[col]) {\n return;\n }\n\n targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY][col] = {\n className: grid.GetAttribute(row, col, 'Class'),\n color: grid.GetAttribute(row, col, 'Color'),\n };\n};\n\n/**\n * TreeGrid μ
νμ΄λΌμ΄νΈ μ μ€νμΌ μ‘°ν\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nconst getTreeGridCellStyleBaseline = (row: TRow, col: string) => {\n return (row as TreeGridAddedRowMetadata)[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?.[col];\n};\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 * TreeGrid νμ μ»¬λΌ μ€μ μ κ·ν\n * @param columns νμ μ»¬λΌ μ€μ λͺ©λ‘\n */\nconst normalizeTreeGridRequiredCellColumns = (\n columns?: readonly TreeGridRequiredCellColumn[],\n) => {\n if (!columns?.length) {\n return [];\n }\n\n return columns\n .map((column): NormalizedTreeGridRequiredCellColumn | null => {\n if (typeof column === 'string') {\n const key = column.trim();\n\n return key ? { key } : null;\n }\n\n if (!isPlainObject(column) || typeof column.key !== 'string') {\n return null;\n }\n\n const key = column.key.trim();\n\n if (!key) {\n return null;\n }\n\n return {\n key,\n label: typeof column.label === 'string' ? column.label.trim() : undefined,\n message: typeof column.message === 'string' ? column.message : undefined,\n };\n })\n .filter((column): column is NormalizedTreeGridRequiredCellColumn => !!column);\n};\n\n/**\n * TreeGrid μ
νΈμ§ κ°λ₯ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nconst isTreeGridEditableCell = (grid: TGrid, row: TRow, col: string) => {\n const canEdit = grid.CanEdit?.(row, col) as unknown;\n\n return canEdit === 1 || canEdit === '1' || canEdit === true;\n};\n\n/**\n * TreeGrid νμ κ²μ¬ μ»¬λΌ λͺ©λ‘ μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param options νμ κ²μ¬ μ΅μ
\n */\nconst getTreeGridRequiredCellColumns = (\n grid: TGrid,\n row: TRow,\n options: TreeGridRequiredCellsValidationOptions,\n) => {\n const requiredColumns = normalizeTreeGridRequiredCellColumns(options.columns);\n\n if (requiredColumns.length) {\n return requiredColumns.filter((column) => !!grid.Cols?.[column.key]);\n }\n\n if (!options.editableOnly) {\n return [];\n }\n\n return Object.keys(grid.Cols ?? {})\n .filter((col) => isVisibleTreeGridColumn(grid, col) && isTreeGridEditableCell(grid, row, col))\n .map((key) => ({ key }));\n};\n\n/**\n * TreeGrid νμ μ€λ₯ λΌλ²¨ μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param column νμ μ»¬λΌ μ€μ \n */\nconst getTreeGridRequiredCellLabel = (\n grid: TGrid,\n column: NormalizedTreeGridRequiredCellColumn,\n) => {\n if (column.label) {\n return column.label;\n }\n\n try {\n const caption = grid.GetCaption?.(column.key);\n\n if (caption) {\n return `${caption}`.trim();\n }\n } catch {\n // GetCaption λ―Έμ§μ μ»¬λΌ fallback\n }\n\n const columnCaption = (grid.Cols?.[column.key] as { Caption?: unknown } | undefined)?.Caption;\n\n if (columnCaption) {\n return `${columnCaption}`.trim();\n }\n\n return column.key;\n};\n\n/**\n * TreeGrid νμ μ€λ₯ λ©μμ§ μ‘°ν\n * @param context λ©μμ§ μμ± μ»¨ν
μ€νΈ\n * @param column νμ μ»¬λΌ μ€μ \n * @param messageFactory λ©μμ§ μμ± ν¨μ\n */\nconst getTreeGridRequiredCellMessage = (\n context: TreeGridRequiredCellMessageContext,\n column: NormalizedTreeGridRequiredCellColumn,\n messageFactory?: (context: TreeGridRequiredCellMessageContext) => string,\n) => {\n if (column.message) {\n return column.message;\n }\n\n return (messageFactory ?? DEFAULT_TREE_GRID_REQUIRED_CELL_MESSAGE_FACTORY)(context);\n};\n\n/**\n * TreeGrid νμκ° κ³΅λ°± μ¬λΆ\n * @param value λΉκ΅ κ°\n */\nconst isBlankTreeGridRequiredCellValue = (value: string) => value.trim() === '';\n\n/**\n * TreeGrid νμ μ€λ₯ ν¬μ»€μ€ λ°μ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param error μ΅μ΄ μ€λ₯\n * @param options νμ κ²μ¬ μ΅μ
\n */\nconst focusFirstTreeGridRequiredCellError = (\n grid: TGrid,\n error: TreeGridRequiredCellValidationError | undefined,\n options: TreeGridRequiredCellsValidationOptions,\n) => {\n if (!error || options.focusFirstError === false) {\n return;\n }\n\n grid.Focus(error.row, error.col);\n\n if (options.startEditFirstError !== false && isTreeGridEditableCell(grid, error.row, error.col)) {\n grid.StartEdit(error.row, error.col);\n }\n};\n\n/**\n * TreeGrid μκ° μ μ© Date ν¬λ§· μ¬λΆ\n * @param format TreeGrid λ μ§ ν¬λ§·\n */\nconst isTreeGridTimeDateFormat = (format: unknown) =>\n typeof format === 'string' && TREEGRID_TIME_DATE_FORMAT_PATTERN.test(format.trim());\n\n/**\n * TreeGrid μκ° μ μ© Date μ»¬λΌ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nconst isTreeGridTimeDateColumn = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n const column = grid.Cols?.[col];\n\n return (\n column?.Type === 'Date' &&\n (isTreeGridTimeDateFormat(rowRecord[`${col}EditFormat`]) ||\n isTreeGridTimeDateFormat(rowRecord[`${col}Format`]) ||\n isTreeGridTimeDateFormat(column.EditFormat) ||\n isTreeGridTimeDateFormat(column.Format))\n );\n};\n\n/**\n * TreeGrid μκ° μ μ© Date νμ κ° μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nconst getTreeGridTimeDateDisplayValue = (grid: TGrid, row: TRow, col: string) => {\n const rawValue = (row as unknown as Record<string, unknown>)[col];\n\n try {\n const displayValue = grid.GetString?.(row, col);\n\n if (displayValue !== undefined && displayValue !== null && `${displayValue}` !== '') {\n return `${displayValue}`;\n }\n } catch {\n // GetString λ―Έμ§μ μ
fallback\n }\n\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n};\n\n/**\n * TreeGrid μΈλΆ λ°ν ν Date μκ° κ° μ κ·ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n */\nconst normalizeTreeGridExternalRow = <T>(grid: TGrid, row: TRow & T) => {\n const normalizedRow = { ...row } as TRow & T;\n\n Object.keys(grid.Cols ?? {}).forEach((col) => {\n if (!isTreeGridTimeDateColumn(grid, row, col)) {\n return;\n }\n\n (normalizedRow as Record<string, unknown>)[col] = getTreeGridTimeDateDisplayValue(grid, row, col);\n });\n\n return normalizedRow;\n};\n\n/**\n * TreeGrid μΈλΆ λ°ν ν λͺ©λ‘ Date μκ° κ° μ κ·ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param rows λμ ν λͺ©λ‘\n */\nexport const normalizeTreeGridExternalRows = <T>(grid: TGrid, rows: Array<TRow & T>) =>\n rows.map((row) => normalizeTreeGridExternalRow(grid, row));\n\n/** TreeGrid λͺ
μ νμ± μ€μ κ° μ¬λΆ */\nconst isTreeGridExplicitEnabledConfigValue = (value: unknown) =>\n value === 1 || value === true || value === '1' || value === 'true';\n\n/**\n * TreeGrid λ¨μΌ μ ν λ μ΄μμ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n */\nconst isTreeGridSingleSelectionLayout = (grid: TGrid) =>\n isTreeGridExplicitEnabledConfigValue(grid.SelectingSingle);\n\n/**\n * μ κ· ν μ ν μ΄κΈ°κ° νμ± μ¬λΆ\n * @param initialValues μ κ· ν μ΄κΈ°κ°\n */\nconst isTreeGridSelectedInitialValue = <T>(initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return false;\n }\n\n return isTreeGridExplicitEnabledConfigValue(\n (initialValues as Record<string, unknown>)[TREEGRID_ROW_SELECTED_KEY],\n );\n};\n\n/**\n * μ κ· ν μ΄κΈ°κ°μμ μ ν μν μ μΈ\n * @param initialValues μ κ· ν μ΄κΈ°κ°\n */\nconst omitTreeGridSelectedInitialValue = <T>(initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return initialValues;\n }\n\n const initialValueRecord = initialValues as Record<string, unknown>;\n\n if (!(TREEGRID_ROW_SELECTED_KEY in initialValueRecord)) {\n return initialValues;\n }\n\n return Object.fromEntries(\n Object.entries(initialValueRecord).filter(\n ([key]) => key !== TREEGRID_ROW_SELECTED_KEY,\n ),\n ) as T;\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 grid TreeGrid μΈμ€ν΄μ€\n * @param row μμ±λ TreeGrid ν\n * @param initialValues μ κ· ν μ΄κΈ°κ°\n */\nconst assignInitialRowValues = <T>(grid: TGrid, row: TRow, initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return;\n }\n\n const initialValueKeys = Object.keys(initialValues as Record<string, unknown>).filter(Boolean);\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY] = initialValueKeys;\n\n Object.entries(initialValues as Record<string, unknown>).forEach(([rowKey, rowValue]) => {\n if (grid.Cols?.[rowKey]?.Type === 'Date' && typeof rowValue === 'string') {\n grid.SetString(row, rowKey, rowValue, 0);\n return;\n }\n\n (row as unknown as Record<string, unknown>)[rowKey] = rowValue;\n });\n};\n\n/**\n * μ κ· ν μ
λ¨μ νΈμ§ κ°λ₯ μ»¬λΌ λ°μ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row μμ±λ TreeGrid ν\n * @param editableColumns νΈμ§ κ°λ₯ μ²λ¦¬ν μ»¬λΌ ν€ λͺ©λ‘\n */\nconst assignEditableAddedRowColumns = (\n grid: TGrid,\n row: TRow,\n editableColumns?: readonly string[],\n) => {\n const targetColumns = normalizeTreeGridStringValues(editableColumns);\n\n if (!targetColumns.length) {\n return;\n }\n\n const rowRecord = row as unknown as Record<string, unknown>;\n\n targetColumns.forEach((col) => {\n if (!grid.Cols?.[col]) {\n return;\n }\n\n rowRecord[`${col}CanEdit`] = 1;\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 * TreeGrid μ»¬λΌ λ°μ΄ν° ν€ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param key μ»¬λΌ ν€\n */\nconst isTreeGridColumnDataKey = (grid: TGrid | undefined, key: string) => {\n return !!grid?.Cols?.[key];\n};\n\n/**\n * TreeGrid μ
λ‘λ κ° ν¬ν¨ λμ μ¬λΆ\n * @param value μ
λ‘λ κ°\n */\nconst hasTreeGridUploadValue = (value: unknown) => {\n return value !== undefined && value !== null && value !== '';\n};\n\n/**\n * TreeGrid μ¨κΉ κ° μ¬λΆ\n * @param value Visible μμ±κ°\n */\nconst isHiddenTreeGridValue = (value: unknown) => {\n return value === 0 || value === false || value === '0';\n};\n\n/**\n * TreeGrid νμ μ»¬λΌ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param key μ»¬λΌ ν€\n */\nconst isVisibleTreeGridColumn = (grid: TGrid | undefined, key: string) => {\n return !isHiddenTreeGridValue(grid?.Cols?.[key]?.Visible);\n};\n\n/**\n * addTreeGridRowById μμ± ν μ΄κΈ°κ° ν€ μ¬λΆ\n * @param row λμ ν\n * @param key μ»¬λΌ ν€\n */\nconst isTreeGridAddedRowInitialValueKey = (row: TRow | null | undefined, key: string) => {\n return normalizeTreeGridStringValues(\n (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY],\n ).includes(key);\n};\n\n/**\n * TreeGrid λ³κ²½ ν μλ³Έ μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row TreeGrid λ³κ²½ ν λ°μ΄ν°\n */\nconst getLiveTreeGridChangedRow = (grid: TGrid | undefined, row: TreeGridChangedRow) => {\n return typeof row.id === 'string'\n ? (grid?.Rows as unknown as Record<string, TRow> | undefined)?.[row.id]\n : null;\n};\n\n/**\n * λ³κ²½ ν λ°μ΄ν° ν€ ν¬ν¨ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row TreeGrid λ³κ²½ ν λ°μ΄ν°\n * @param key μ»¬λΌ ν€\n * @param includeAddedInitialValues μΆκ° ν μ΄κΈ°κ° ν€ ν¬ν¨ μ¬λΆ\n */\nconst shouldIncludeTreeGridChangeDataKey = (\n grid: TGrid | undefined,\n row: TreeGridChangedRow,\n key: string,\n includeAddedInitialValues = false,\n) => {\n if (!hasTreeGridUploadValue(row[key])) {\n return false;\n }\n\n if (isTreeGridColumnDataKey(grid, key)) {\n return true;\n }\n\n if (isTreeGridDataKey(key)) {\n return true;\n }\n\n return (\n includeAddedInitialValues &&\n isTreeGridAddedRowInitialValueKey(getLiveTreeGridChangedRow(grid, row), key)\n );\n};\n\n/**\n * TreeGrid λ³κ²½ ν λ°μ΄ν° μ κ·ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row TreeGrid λ³κ²½ ν λ°μ΄ν°\n * @param excludedKeys μ μΈν μν ν€ λͺ©λ‘\n * @param includeAddedInitialValues μΆκ° ν μ΄κΈ°κ° ν€ ν¬ν¨ μ¬λΆ\n */\nconst normalizeTreeGridChangeRow = <T>(\n grid: TGrid | undefined,\n row: TreeGridChangedRow,\n excludedKeys: string[],\n includeAddedInitialValues = false,\n) => {\n return Object.fromEntries(\n without(Object.keys(row), ...excludedKeys)\n .filter((key) =>\n shouldIncludeTreeGridChangeDataKey(grid, row, key, includeAddedInitialValues),\n )\n .map((key) => [key, row[key]]),\n ) as T;\n};\n\n/**\n * λ³κ²½ μνλ³ ν λ°μ΄ν° λ°ν\n * @param rows TreeGrid λ³κ²½ ν λͺ©λ‘\n * @param status μ‘°νν λ³κ²½ μν\n */\nconst getChangedRowsByStatus = <T>(\n grid: TGrid | undefined,\n rows: TreeGridChangedRow[],\n status: TreeGridChangeStatus,\n) => {\n return rows\n .filter((row) => get(row, status) === '1' && row.Deleted !== '1')\n .map((row) =>\n status === 'Changed'\n ? normalizeTreeGridChangeRow<T>(grid, row, ['id', 'Changed'])\n : normalizeTreeGridChangeRow<T>(grid, row, ['id'], true),\n )\n .filter((row) => !isEmpty(row));\n};\n\n/**\n * TreeGrid λ³κ²½ ν Date μκ° κ° μ κ·ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param rows λ³κ²½ ν λͺ©λ‘\n */\nconst normalizeTreeGridChangedRows = (grid: TGrid | undefined, rows: TreeGridChangedRow[]) => {\n if (!grid) {\n return rows;\n }\n\n return rows.map((row) => {\n const liveRow =\n typeof row.id === 'string'\n ? (grid.Rows as unknown as Record<string, TRow>)[row.id]\n : null;\n\n if (!liveRow) {\n return row;\n }\n\n const normalizedRow = { ...row };\n\n Object.keys(row).forEach((col) => {\n if (!isTreeGridTimeDateColumn(grid, liveRow, col)) {\n return;\n }\n\n normalizedRow[col] = getTreeGridTimeDateDisplayValue(grid, liveRow, col);\n });\n\n return normalizedRow;\n });\n};\n\n/**\n * TreeGrid νμ± νΈμ§ μ
κ° νμ \n * @param grid TreeGrid μΈμ€ν΄μ€\n */\nconst commitTreeGridActiveEdit = (grid: TGrid | undefined) => {\n try {\n grid?.EndEdit?.(1);\n } catch {\n // νΈμ§ λ―Έμ§μ
λλ νμ λΆκ° μν fallback\n }\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 grid ? (normalizeTreeGridExternalRows<T>(grid, getDataRows(grid) as Array<TRow & T>) 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 * @param options.editableColumns μ κ· ν μ
λ¨μ νΈμ§ κ°λ₯ 컬λΌ\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 editableColumns = options?.editableColumns;\n const isSingleSelectionLayout = isTreeGridSingleSelectionLayout(grid);\n const shouldResetSelection = !!canSelect && isSingleSelectionLayout;\n const shouldSelectAddedRow =\n shouldResetSelection && isTreeGridSelectedInitialValue(initialValues);\n const resolvedInitialValues = shouldSelectAddedRow\n ? omitTreeGridSelectedInitialValue(initialValues)\n : initialValues;\n\n if (shouldResetSelection) {\n resetTreeGridSelectionById(gridId);\n }\n\n const { resolvedParent, next } = resolveRowInsertionTarget(grid, options);\n\n const newRow = grid.AddRow(resolvedParent, next, 1);\n\n markTreeGridRowAddedById(newRow);\n assignInitialRowValues(grid, newRow, resolvedInitialValues);\n markTreeGridAddedRowBaselineValues(grid, newRow);\n\n newRow.CanEdit = 1;\n newRow.CanDelete = 1;\n newRow.CanSelect = canSelect ? 1 : 0;\n assignEditableAddedRowColumns(grid, newRow, editableColumns);\n\n if (shouldSelectAddedRow) {\n grid.SelectRow(newRow, 1);\n }\n\n grid.Focus(newRow);\n grid.RefreshRow(newRow);\n grid.Calculate(1, 1);\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * TreeGrid νμ μ
Error κ²μ¦\n * @param gridId TreeGrid μΈμ€ν΄μ€ ID\n * @param options νμ κ²μ¬ μ΅μ
\n */\nexport const validateTreeGridRequiredCellsById = (\n gridId: string,\n options: TreeGridRequiredCellsValidationOptions,\n): TreeGridRequiredCellsValidationResult => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return { valid: false, errors: [] };\n }\n\n const rows = getTreeGridRequiredCellRows(grid, options);\n const errors: TreeGridRequiredCellValidationError[] = [];\n const refresh = options.refresh === false ? 0 : 1;\n\n rows.forEach((row) => {\n getTreeGridRequiredCellColumns(grid, row, options).forEach((column) => {\n const col = column.key;\n const value = getTreeGridCellComparableValue(grid, row, col);\n const label = getTreeGridRequiredCellLabel(grid, column);\n const context = {\n grid,\n row,\n col,\n key: col,\n label,\n value,\n };\n\n if (!isBlankTreeGridRequiredCellValue(value)) {\n grid.SetAttribute(row, col, 'Error', '', refresh);\n return;\n }\n\n const message = getTreeGridRequiredCellMessage(\n context,\n column,\n options.messageFactory,\n );\n const error = { ...context, message };\n\n grid.SetAttribute(row, col, 'Error', message, refresh);\n errors.push(error);\n });\n });\n\n const firstError = errors[0];\n\n focusFirstTreeGridRequiredCellError(grid, firstError, options);\n\n return {\n valid: !firstError,\n errors,\n firstError,\n };\n};\n\n/**\n * TreeGrid μΆκ°/μμ λ°μ΄ν° ν μ‘°ν\n * @param gridId TreeGrid μΈμ€ν΄μ€ ID\n */\nexport const getTreeGridRowChangesById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n commitTreeGridActiveEdit(grid);\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>(\n grid,\n normalizeTreeGridChangedRows(grid, changesData as TreeGridChangedRow[]),\n status,\n ),\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 * @param options μ ν ν λ°ν μ΅μ
\n */\nexport const getTreeGridSelectedRowsById = <T>(\n gridId: string,\n options?: TreeGridSelectedRowsOptions,\n) => {\n const grid = getTreeGridById(gridId);\n\n const selectedRows = grid?.GetSelRows();\n\n if (!grid || !selectedRows) {\n return [];\n }\n\n const resolvedSelectedRows = resolveTreeGridSelectedRows<T>(\n grid,\n selectedRows as Array<TRow & T>,\n options,\n );\n\n return normalizeTreeGridExternalRows<T>(grid, resolvedSelectedRows) 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 * @param targetOption.refresh κ°μ‘° μ μ© ν μ
refresh μ¬λΆ\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 preserveTreeGridCellStyleBaseline(grid, row, col);\n grid.SetValue(row, `${col}Class`, TREEGRID_CELL_CHANGED_CLASS);\n grid.SetValue(row, `${col}Color`, targetOption.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR);\n\n if (targetOption.refresh !== false) {\n grid.RefreshCell(row, col);\n }\n};\n\n/**\n * νΉμ μ
κ°μ‘° μ€νμΌ μ κ±°\n * @param gridId TreeGrid μΈμ€ν΄μ€ ID\n * @param targetOption.row κ°μ‘° ν΄μ λμ ν\n * @param targetOption.col κ°μ‘° ν΄μ λμ 컬λΌ\n */\nexport const clearTreeGridCellHighlightById = (\n gridId: string,\n targetOption: Pick<TreeGridHighlightTargetOption, 'row' | 'col'>,\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 const styleBaseline = getTreeGridCellStyleBaseline(row, col);\n\n grid.SetValue(row, `${col}Class`, styleBaseline?.className ?? '');\n grid.SetValue(row, `${col}Color`, styleBaseline?.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 grid.Calculate(1, 1);\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","TREEGRID_TIME_DATE_FORMAT_PATTERN","TREEGRID_ADDED_ROW_BY_ID_FLAG","TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY","TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY","TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY","TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY","TREEGRID_ROW_SELECTED_KEY","DEFAULT_TREE_GRID_REQUIRED_CELL_MESSAGE_FACTORY","__name","label","DEFAULT_TREE_GRID_REQUIRED_CELL_TARGET_ROWS","normalizeTreeGridStringValues","value","isArray","item","normalizeTreeGridAddedRowHighlightColumns","markTreeGridRowAddedById","row","isTreeGridRowAddedById","addedById","isTreeGridAddedRow","added","isTreeGridChangedRow","changed","isTreeGridDeletedRow","deleted","normalizeTreeGridRequiredCellTargetRows","targetRows","normalizedTargetRows","targetRow","shouldValidateTreeGridRequiredCellRow","shouldValidateExplicitTreeGridRequiredCellRow","resolveLiveTreeGridRequiredCellRow","grid","_a","normalizeExplicitTreeGridRequiredCellRows","rows","seenRows","normalizedRows","liveRow","getTreeGridRequiredCellRows","options","appendTreeGridAddedRowHighlightColumn","col","currentColumns","removeTreeGridAddedRowHighlightColumn","nextColumns","column","getTreeGridAddedRowHighlightColumns","getTreeGridCellComparableValue","cellType","_c","_b","rawValue","_d","displayValue","_e","markTreeGridAddedRowBaselineValues","baselineValues","getTreeGridAddedRowBaselineValue","preserveTreeGridCellStyleBaseline","getTreeGridCellStyleBaseline","loadExportTreeGridExcel","exportTreeGridExcel","getDataRows","normalizeTreeGridRequiredCellColumns","columns","key","isPlainObject","isTreeGridEditableCell","canEdit","getTreeGridRequiredCellColumns","requiredColumns","isVisibleTreeGridColumn","getTreeGridRequiredCellLabel","caption","columnCaption","getTreeGridRequiredCellMessage","context","messageFactory","isBlankTreeGridRequiredCellValue","focusFirstTreeGridRequiredCellError","error","isTreeGridTimeDateFormat","format","isTreeGridTimeDateColumn","rowRecord","getTreeGridTimeDateDisplayValue","normalizeTreeGridExternalRow","normalizedRow","normalizeTreeGridExternalRows","isTreeGridExplicitEnabledConfigValue","isTreeGridSingleSelectionLayout","isTreeGridSelectedInitialValue","initialValues","omitTreeGridSelectedInitialValue","initialValueRecord","resolveRowInsertionTarget","insertPosition","parent","anchorRow","resolvedParent","next","assignInitialRowValues","initialValueKeys","rowKey","rowValue","assignEditableAddedRowColumns","editableColumns","targetColumns","isTreeGridDataKey","prefix","isTreeGridColumnDataKey","hasTreeGridUploadValue","isHiddenTreeGridValue","isTreeGridAddedRowInitialValueKey","getLiveTreeGridChangedRow","shouldIncludeTreeGridChangeDataKey","includeAddedInitialValues","normalizeTreeGridChangeRow","excludedKeys","without","getChangedRowsByStatus","status","get","isEmpty","normalizeTreeGridChangedRows","commitTreeGridActiveEdit","getTreeGridById","gridId","getTreeGridDataRowsById","reloadTreeGridBodyById","currentData","emitTreeGridBodyRowsChanged","addTreeGridRowById","canSelect","isSingleSelectionLayout","shouldResetSelection","shouldSelectAddedRow","resolvedInitialValues","resetTreeGridSelectionById","newRow","validateTreeGridRequiredCellsById","errors","refresh","message","firstError","getTreeGridRowChangesById","changesData","parseTreeGridXmlToJson","lowerCase","exportTreeGridToExcelById","title","getTreeGridSelectedRowsById","selectedRows","resolvedSelectedRows","resolveTreeGridSelectedRows","setTreeGridColumnVisibilityById","targetKey","highlightTreeGridCellById","targetOption","TREEGRID_CELL_CHANGED_CLASS","TREEGRID_CELL_HIGHLIGHT_COLOR","clearTreeGridCellHighlightById","styleBaseline","resetTreeGridSelectionsByIds","gridIds","resetTreeGridChangesById","resetTreeGridChangesByIds","setTreeGridColumnEnumOptionsById","columnName","valueKey","labelKeys","enumValues","option","labelKey","enumKeys"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"treeGridUtil.js","sources":["../../src/utils/treeGridUtil.ts"],"sourcesContent":["import {\n TREEGRID_CELL_CHANGED_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 {\n resolveTreeGridSelectedRows,\n type OwpTreeGridSelectedRowsResolveOptions,\n type OwpTreeGridSelectionScope,\n} from '@/components/OwpTreeGrid/internal/treeGridSelection';\nimport { emitTreeGridBodyRowsChanged } from '@/utils/internal/treeGridBodyRowsEvent';\nimport { isPlainObject } from 'es-toolkit';\nimport { get, isArray, isEmpty, lowerCase, without } from 'es-toolkit/compat';\n\nexport {\n TREEGRID_CELL_CHANGED_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 editableColumns?: readonly string[];\n};\n\ntype TreeGridColumnVisibilityOptions = {\n targetKey: string;\n canVisible: boolean;\n};\n\ntype TreeGridHighlightTargetOption = {\n row: TRow;\n col: string;\n backgroundColor?: string;\n refresh?: boolean;\n};\n\nexport type TreeGridSelectionScope = OwpTreeGridSelectionScope;\nexport type TreeGridSelectedRowsOptions = OwpTreeGridSelectedRowsResolveOptions;\n\nexport type TreeGridRequiredCellColumn =\n | string\n | {\n key: string;\n label?: string;\n message?: string;\n };\n\nexport type TreeGridRequiredCellMessageContext = {\n grid: TGrid;\n row: TRow;\n col: string;\n key: string;\n label: string;\n value: string;\n};\n\nexport type TreeGridRequiredCellValidationError = TreeGridRequiredCellMessageContext & {\n message: string;\n};\n\nexport type TreeGridRequiredCellTargetRow = 'added' | 'changed' | 'all';\n\ntype TreeGridRequiredCellsValidationBaseOptions = {\n targetRows?: TreeGridRequiredCellTargetRow | readonly TreeGridRequiredCellTargetRow[];\n rows?: readonly TRow[];\n messageFactory?: (context: TreeGridRequiredCellMessageContext) => string;\n focusFirstError?: boolean;\n startEditFirstError?: boolean;\n refresh?: boolean;\n};\n\nexport type TreeGridRequiredCellsValidationOptions =\n TreeGridRequiredCellsValidationBaseOptions &\n (\n | {\n editableOnly: true;\n columns?: readonly TreeGridRequiredCellColumn[];\n }\n | {\n columns: readonly TreeGridRequiredCellColumn[];\n editableOnly?: boolean;\n }\n );\n\nexport type TreeGridRequiredCellsValidationResult = {\n valid: boolean;\n errors: TreeGridRequiredCellValidationError[];\n firstError?: TreeGridRequiredCellValidationError;\n};\n\ntype NormalizedTreeGridRequiredCellColumn = {\n key: string;\n label?: string;\n message?: string;\n};\n\ntype TreeGridAddedRowMetadata = TRow & {\n [TREEGRID_ADDED_ROW_BY_ID_FLAG]?: boolean | number;\n [TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY]?: string[];\n [TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY]?: string[];\n [TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY]?: Record<string, string>;\n [TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?: Record<\n string,\n { className: unknown; color: unknown }\n >;\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'];\nconst TREEGRID_TIME_DATE_FORMAT_PATTERN = /^H{1,2}(?::m{1,2})?(?::s{1,2})?$/;\nconst TREEGRID_ADDED_ROW_BY_ID_FLAG = '__owpAddedByAddTreeGridRowById';\nconst TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY = '__owpAddedRowHighlightColumns';\nconst TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY = '__owpAddedRowInitialValueKeys';\nconst TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY = '__owpAddedRowBaselineValues';\nconst TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY = '__owpCellStyleBaselineValues';\nconst TREEGRID_ROW_SELECTED_KEY = 'Selected';\n\nconst DEFAULT_TREE_GRID_REQUIRED_CELL_MESSAGE_FACTORY = ({\n label,\n}: TreeGridRequiredCellMessageContext) => `${label} νμ μ
λ ₯`;\nconst DEFAULT_TREE_GRID_REQUIRED_CELL_TARGET_ROWS: readonly TreeGridRequiredCellTargetRow[] = [\n 'added',\n];\n\nconst normalizeTreeGridStringValues = (value: unknown) => {\n if (!isArray(value)) {\n return [];\n }\n\n return value.filter((item): item is string => typeof item === 'string' && item !== '');\n};\n\nconst normalizeTreeGridAddedRowHighlightColumns = normalizeTreeGridStringValues;\n\n/**\n * addTreeGridRowById μμ± ν λ§νΉ\n * @param row λμ ν\n */\nconst markTreeGridRowAddedById = (row: TRow | null | undefined) => {\n if (!row) {\n return;\n }\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_BY_ID_FLAG] = 1;\n};\n\n/**\n * addTreeGridRowById μμ± ν μ¬λΆ\n * @param row λμ ν\n */\nexport const isTreeGridRowAddedById = (row: TRow | null | undefined) => {\n const addedById = (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_BY_ID_FLAG];\n\n return !!row && addedById !== 0 && addedById !== false && addedById !== undefined;\n};\n\n/**\n * TreeGrid μ κ· ν μ¬λΆ\n * @param row λμ ν\n */\nconst isTreeGridAddedRow = (row: TRow | null | undefined) => {\n const added = (row as { Added?: unknown } | null)?.Added;\n\n return added === 1 || added === '1' || added === true || isTreeGridRowAddedById(row);\n};\n\n/**\n * TreeGrid μμ ν μ¬λΆ\n * @param row λμ ν\n */\nconst isTreeGridChangedRow = (row: TRow | null | undefined) => {\n const changed = (row as { Changed?: unknown } | null)?.Changed;\n\n return !isTreeGridAddedRow(row) && (changed === 1 || changed === '1' || changed === true);\n};\n\n/**\n * TreeGrid μμ ν μ¬λΆ\n * @param row λμ ν\n */\nconst isTreeGridDeletedRow = (row: TRow | null | undefined) => {\n const deleted = (row as { Deleted?: unknown } | null)?.Deleted;\n\n return deleted === 1 || deleted === '1' || deleted === true;\n};\n\n/**\n * TreeGrid νμ κ²μ¬ λμ ν μ’
λ₯ μ κ·ν\n * @param targetRows κ²μ¬ λμ ν μ’
λ₯\n */\nconst normalizeTreeGridRequiredCellTargetRows = (\n targetRows?: TreeGridRequiredCellsValidationOptions['targetRows'],\n) => {\n const normalizedTargetRows = isArray(targetRows)\n ? targetRows\n : targetRows\n ? [targetRows]\n : DEFAULT_TREE_GRID_REQUIRED_CELL_TARGET_ROWS;\n\n if (normalizedTargetRows.includes('all')) {\n return new Set<TreeGridRequiredCellTargetRow>(['all']);\n }\n\n return new Set<TreeGridRequiredCellTargetRow>(\n normalizedTargetRows.filter(\n (targetRow) => targetRow === 'added' || targetRow === 'changed',\n ),\n );\n};\n\n/**\n * TreeGrid νμ κ²μ¬ λμ ν μ¬λΆ\n * @param row λμ ν\n * @param targetRows κ²μ¬ λμ ν μ’
λ₯\n */\nconst shouldValidateTreeGridRequiredCellRow = (\n row: TRow,\n targetRows: Set<TreeGridRequiredCellTargetRow>,\n) => {\n if (isTreeGridDeletedRow(row)) {\n return false;\n }\n\n if (targetRows.has('all')) {\n return row.Kind === 'Data' || isTreeGridAddedRow(row);\n }\n\n return (\n (targetRows.has('added') && isTreeGridAddedRow(row)) ||\n (targetRows.has('changed') && isTreeGridChangedRow(row))\n );\n};\n\n/**\n * TreeGrid λͺ
μ νμ κ²μ¬ λμ ν μ¬λΆ\n * @param row λμ ν\n */\nconst shouldValidateExplicitTreeGridRequiredCellRow = (row: TRow | null | undefined) => {\n return !!row && !isTreeGridDeletedRow(row) && (row.Kind === 'Data' || isTreeGridAddedRow(row));\n};\n\n/**\n * TreeGrid live ν μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n */\nconst resolveLiveTreeGridRequiredCellRow = (grid: TGrid, row: TRow | null | undefined) => {\n if (!row) {\n return undefined;\n }\n\n if (typeof row.id !== 'string') {\n return row;\n }\n\n return (grid.Rows as unknown as Record<string, TRow | undefined>)?.[row.id] ?? row;\n};\n\n/**\n * TreeGrid νμ κ²μ¬ λͺ
μ ν λͺ©λ‘ μ κ·ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param rows λͺ
μ κ²μ¬ ν λͺ©λ‘\n */\nconst normalizeExplicitTreeGridRequiredCellRows = (\n grid: TGrid,\n rows: readonly TRow[],\n) => {\n const seenRows = new Set<TRow>();\n const normalizedRows: TRow[] = [];\n\n rows.forEach((row) => {\n const liveRow = resolveLiveTreeGridRequiredCellRow(grid, row);\n\n if (\n !shouldValidateExplicitTreeGridRequiredCellRow(liveRow) ||\n seenRows.has(liveRow)\n ) {\n return;\n }\n\n seenRows.add(liveRow);\n normalizedRows.push(liveRow);\n });\n\n return normalizedRows;\n};\n\n/**\n * TreeGrid νμ κ²μ¬ λμ ν λͺ©λ‘ μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param options νμ κ²μ¬ μ΅μ
\n */\nconst getTreeGridRequiredCellRows = (\n grid: TGrid,\n options: TreeGridRequiredCellsValidationOptions,\n) => {\n if (options.rows !== undefined) {\n return normalizeExplicitTreeGridRequiredCellRows(grid, options.rows);\n }\n\n const targetRows = normalizeTreeGridRequiredCellTargetRows(options.targetRows);\n\n return Object.values(grid.Rows ?? {}).filter((row) =>\n shouldValidateTreeGridRequiredCellRow(row, targetRows),\n );\n};\n\n/**\n * addTreeGridRowById μμ± ν νμ΄λΌμ΄νΈ μ»¬λΌ λμ \n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nexport const appendTreeGridAddedRowHighlightColumn = (\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col) {\n return;\n }\n\n const targetRow = row as TreeGridAddedRowMetadata;\n const currentColumns = normalizeTreeGridAddedRowHighlightColumns(\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n\n if (currentColumns.includes(col)) {\n return;\n }\n\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY] = [...currentColumns, col];\n};\n\n/**\n * addTreeGridRowById μμ± ν νμ΄λΌμ΄νΈ μ»¬λΌ μ κ±°\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nexport const removeTreeGridAddedRowHighlightColumn = (\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col) {\n return;\n }\n\n const targetRow = row as TreeGridAddedRowMetadata;\n const currentColumns = normalizeTreeGridAddedRowHighlightColumns(\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n const nextColumns = currentColumns.filter((column) => column !== col);\n\n if (nextColumns.length) {\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY] = nextColumns;\n return;\n }\n\n delete targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY];\n};\n\n/**\n * addTreeGridRowById μμ± ν νμ΄λΌμ΄νΈ μ»¬λΌ μ‘°ν\n * @param row λμ ν\n */\nexport const getTreeGridAddedRowHighlightColumns = (row: TRow | null | undefined) => {\n return normalizeTreeGridAddedRowHighlightColumns(\n (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n};\n\n/**\n * TreeGrid μ
λΉκ΅ κ° μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nexport const getTreeGridCellComparableValue = (\n grid: TGrid,\n row: TRow,\n col: string,\n) => {\n const cellType = grid.GetType?.(row, col) || grid.Cols?.[col]?.Type || '';\n const rawValue =\n grid.GetValue?.(row, col) ?? (row as unknown as Record<string, unknown>)[col];\n\n if (cellType === 'Enum' || cellType === 'Select') {\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n }\n\n try {\n const displayValue = grid.GetString?.(row, col);\n\n if (displayValue !== undefined && displayValue !== null) {\n return `${displayValue}`;\n }\n } catch {\n // GetString λ―Έμ§μ μ
fallback\n }\n\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n};\n\n/**\n * addTreeGridRowById μμ± ν κΈ°μ€κ° μ μ₯\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n */\nconst markTreeGridAddedRowBaselineValues = (grid: TGrid, row: TRow) => {\n const baselineValues = Object.fromEntries(\n Object.keys(grid.Cols ?? {}).map((col) => [\n col,\n getTreeGridCellComparableValue(grid, row, col),\n ]),\n );\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY] = baselineValues;\n};\n\n/**\n * addTreeGridRowById μμ± ν κΈ°μ€κ° μ‘°ν\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nexport const getTreeGridAddedRowBaselineValue = (\n row: TRow | null | undefined,\n col: string,\n) => {\n return (row as TreeGridAddedRowMetadata | null)?.[\n TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY\n ]?.[col];\n};\n\n/**\n * TreeGrid μ
νμ΄λΌμ΄νΈ μ μ€νμΌ μ μ₯\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nconst preserveTreeGridCellStyleBaseline = (grid: TGrid, row: TRow, col: string) => {\n const targetRow = row as TreeGridAddedRowMetadata;\n\n targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY] ??= {};\n\n if (targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?.[col]) {\n return;\n }\n\n targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY][col] = {\n className: grid.GetAttribute(row, col, 'Class'),\n color: grid.GetAttribute(row, col, 'Color'),\n };\n};\n\n/**\n * TreeGrid μ
νμ΄λΌμ΄νΈ μ μ€νμΌ μ‘°ν\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nconst getTreeGridCellStyleBaseline = (row: TRow, col: string) => {\n return (row as TreeGridAddedRowMetadata)[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?.[col];\n};\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 * TreeGrid νμ μ»¬λΌ μ€μ μ κ·ν\n * @param columns νμ μ»¬λΌ μ€μ λͺ©λ‘\n */\nconst normalizeTreeGridRequiredCellColumns = (\n columns?: readonly TreeGridRequiredCellColumn[],\n) => {\n if (!columns?.length) {\n return [];\n }\n\n return columns\n .map((column): NormalizedTreeGridRequiredCellColumn | null => {\n if (typeof column === 'string') {\n const key = column.trim();\n\n return key ? { key } : null;\n }\n\n if (!isPlainObject(column) || typeof column.key !== 'string') {\n return null;\n }\n\n const key = column.key.trim();\n\n if (!key) {\n return null;\n }\n\n return {\n key,\n label: typeof column.label === 'string' ? column.label.trim() : undefined,\n message: typeof column.message === 'string' ? column.message : undefined,\n };\n })\n .filter((column): column is NormalizedTreeGridRequiredCellColumn => !!column);\n};\n\n/**\n * TreeGrid μ
νΈμ§ κ°λ₯ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nconst isTreeGridEditableCell = (grid: TGrid, row: TRow, col: string) => {\n const canEdit = grid.CanEdit?.(row, col) as unknown;\n\n return canEdit === 1 || canEdit === '1' || canEdit === true;\n};\n\n/**\n * TreeGrid νμ κ²μ¬ μ»¬λΌ λͺ©λ‘ μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param options νμ κ²μ¬ μ΅μ
\n */\nconst getTreeGridRequiredCellColumns = (\n grid: TGrid,\n row: TRow,\n options: TreeGridRequiredCellsValidationOptions,\n) => {\n const requiredColumns = normalizeTreeGridRequiredCellColumns(options.columns);\n\n if (requiredColumns.length) {\n return requiredColumns.filter((column) => !!grid.Cols?.[column.key]);\n }\n\n if (!options.editableOnly) {\n return [];\n }\n\n return Object.keys(grid.Cols ?? {})\n .filter((col) => isVisibleTreeGridColumn(grid, col) && isTreeGridEditableCell(grid, row, col))\n .map((key) => ({ key }));\n};\n\n/**\n * TreeGrid νμ μ€λ₯ λΌλ²¨ μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param column νμ μ»¬λΌ μ€μ \n */\nconst getTreeGridRequiredCellLabel = (\n grid: TGrid,\n column: NormalizedTreeGridRequiredCellColumn,\n) => {\n if (column.label) {\n return column.label;\n }\n\n try {\n const caption = grid.GetCaption?.(column.key);\n\n if (caption) {\n return `${caption}`.trim();\n }\n } catch {\n // GetCaption λ―Έμ§μ μ»¬λΌ fallback\n }\n\n const columnCaption = (grid.Cols?.[column.key] as { Caption?: unknown } | undefined)?.Caption;\n\n if (columnCaption) {\n return `${columnCaption}`.trim();\n }\n\n return column.key;\n};\n\n/**\n * TreeGrid νμ μ€λ₯ λ©μμ§ μ‘°ν\n * @param context λ©μμ§ μμ± μ»¨ν
μ€νΈ\n * @param column νμ μ»¬λΌ μ€μ \n * @param messageFactory λ©μμ§ μμ± ν¨μ\n */\nconst getTreeGridRequiredCellMessage = (\n context: TreeGridRequiredCellMessageContext,\n column: NormalizedTreeGridRequiredCellColumn,\n messageFactory?: (context: TreeGridRequiredCellMessageContext) => string,\n) => {\n if (column.message) {\n return column.message;\n }\n\n return (messageFactory ?? DEFAULT_TREE_GRID_REQUIRED_CELL_MESSAGE_FACTORY)(context);\n};\n\n/**\n * TreeGrid νμκ° κ³΅λ°± μ¬λΆ\n * @param value λΉκ΅ κ°\n */\nconst isBlankTreeGridRequiredCellValue = (value: string) => value.trim() === '';\n\n/**\n * TreeGrid νμ μ€λ₯ ν¬μ»€μ€ λ°μ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param error μ΅μ΄ μ€λ₯\n * @param options νμ κ²μ¬ μ΅μ
\n */\nconst focusFirstTreeGridRequiredCellError = (\n grid: TGrid,\n error: TreeGridRequiredCellValidationError | undefined,\n options: TreeGridRequiredCellsValidationOptions,\n) => {\n if (!error || options.focusFirstError === false) {\n return;\n }\n\n grid.Focus(error.row, error.col);\n\n if (options.startEditFirstError === true && isTreeGridEditableCell(grid, error.row, error.col)) {\n grid.StartEdit(error.row, error.col);\n }\n};\n\n/**\n * TreeGrid μκ° μ μ© Date ν¬λ§· μ¬λΆ\n * @param format TreeGrid λ μ§ ν¬λ§·\n */\nconst isTreeGridTimeDateFormat = (format: unknown) =>\n typeof format === 'string' && TREEGRID_TIME_DATE_FORMAT_PATTERN.test(format.trim());\n\n/**\n * TreeGrid μκ° μ μ© Date μ»¬λΌ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nconst isTreeGridTimeDateColumn = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n const column = grid.Cols?.[col];\n\n return (\n column?.Type === 'Date' &&\n (isTreeGridTimeDateFormat(rowRecord[`${col}EditFormat`]) ||\n isTreeGridTimeDateFormat(rowRecord[`${col}Format`]) ||\n isTreeGridTimeDateFormat(column.EditFormat) ||\n isTreeGridTimeDateFormat(column.Format))\n );\n};\n\n/**\n * TreeGrid μκ° μ μ© Date νμ κ° μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n * @param col λμ 컬λΌ\n */\nconst getTreeGridTimeDateDisplayValue = (grid: TGrid, row: TRow, col: string) => {\n const rawValue = (row as unknown as Record<string, unknown>)[col];\n\n try {\n const displayValue = grid.GetString?.(row, col);\n\n if (displayValue !== undefined && displayValue !== null && `${displayValue}` !== '') {\n return `${displayValue}`;\n }\n } catch {\n // GetString λ―Έμ§μ μ
fallback\n }\n\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n};\n\n/**\n * TreeGrid μΈλΆ λ°ν ν Date μκ° κ° μ κ·ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row λμ ν\n */\nconst normalizeTreeGridExternalRow = <T>(grid: TGrid, row: TRow & T) => {\n const normalizedRow = { ...row } as TRow & T;\n\n Object.keys(grid.Cols ?? {}).forEach((col) => {\n if (!isTreeGridTimeDateColumn(grid, row, col)) {\n return;\n }\n\n (normalizedRow as Record<string, unknown>)[col] = getTreeGridTimeDateDisplayValue(grid, row, col);\n });\n\n return normalizedRow;\n};\n\n/**\n * TreeGrid μΈλΆ λ°ν ν λͺ©λ‘ Date μκ° κ° μ κ·ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param rows λμ ν λͺ©λ‘\n */\nexport const normalizeTreeGridExternalRows = <T>(grid: TGrid, rows: Array<TRow & T>) =>\n rows.map((row) => normalizeTreeGridExternalRow(grid, row));\n\n/** TreeGrid λͺ
μ νμ± μ€μ κ° μ¬λΆ */\nconst isTreeGridExplicitEnabledConfigValue = (value: unknown) =>\n value === 1 || value === true || value === '1' || value === 'true';\n\n/**\n * TreeGrid λ¨μΌ μ ν λ μ΄μμ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n */\nconst isTreeGridSingleSelectionLayout = (grid: TGrid) =>\n isTreeGridExplicitEnabledConfigValue(grid.SelectingSingle);\n\n/**\n * μ κ· ν μ ν μ΄κΈ°κ° νμ± μ¬λΆ\n * @param initialValues μ κ· ν μ΄κΈ°κ°\n */\nconst isTreeGridSelectedInitialValue = <T>(initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return false;\n }\n\n return isTreeGridExplicitEnabledConfigValue(\n (initialValues as Record<string, unknown>)[TREEGRID_ROW_SELECTED_KEY],\n );\n};\n\n/**\n * μ κ· ν μ΄κΈ°κ°μμ μ ν μν μ μΈ\n * @param initialValues μ κ· ν μ΄κΈ°κ°\n */\nconst omitTreeGridSelectedInitialValue = <T>(initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return initialValues;\n }\n\n const initialValueRecord = initialValues as Record<string, unknown>;\n\n if (!(TREEGRID_ROW_SELECTED_KEY in initialValueRecord)) {\n return initialValues;\n }\n\n return Object.fromEntries(\n Object.entries(initialValueRecord).filter(\n ([key]) => key !== TREEGRID_ROW_SELECTED_KEY,\n ),\n ) as T;\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 grid TreeGrid μΈμ€ν΄μ€\n * @param row μμ±λ TreeGrid ν\n * @param initialValues μ κ· ν μ΄κΈ°κ°\n */\nconst assignInitialRowValues = <T>(grid: TGrid, row: TRow, initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return;\n }\n\n const initialValueKeys = Object.keys(initialValues as Record<string, unknown>).filter(Boolean);\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY] = initialValueKeys;\n\n Object.entries(initialValues as Record<string, unknown>).forEach(([rowKey, rowValue]) => {\n if (grid.Cols?.[rowKey]?.Type === 'Date' && typeof rowValue === 'string') {\n grid.SetString(row, rowKey, rowValue, 0);\n return;\n }\n\n (row as unknown as Record<string, unknown>)[rowKey] = rowValue;\n });\n};\n\n/**\n * μ κ· ν μ
λ¨μ νΈμ§ κ°λ₯ μ»¬λΌ λ°μ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row μμ±λ TreeGrid ν\n * @param editableColumns νΈμ§ κ°λ₯ μ²λ¦¬ν μ»¬λΌ ν€ λͺ©λ‘\n */\nconst assignEditableAddedRowColumns = (\n grid: TGrid,\n row: TRow,\n editableColumns?: readonly string[],\n) => {\n const targetColumns = normalizeTreeGridStringValues(editableColumns);\n\n if (!targetColumns.length) {\n return;\n }\n\n const rowRecord = row as unknown as Record<string, unknown>;\n\n targetColumns.forEach((col) => {\n if (!grid.Cols?.[col]) {\n return;\n }\n\n rowRecord[`${col}CanEdit`] = 1;\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 * TreeGrid μ»¬λΌ λ°μ΄ν° ν€ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param key μ»¬λΌ ν€\n */\nconst isTreeGridColumnDataKey = (grid: TGrid | undefined, key: string) => {\n return !!grid?.Cols?.[key];\n};\n\n/**\n * TreeGrid μ
λ‘λ κ° ν¬ν¨ λμ μ¬λΆ\n * @param value μ
λ‘λ κ°\n */\nconst hasTreeGridUploadValue = (value: unknown) => {\n return value !== undefined && value !== null && value !== '';\n};\n\n/**\n * TreeGrid μ¨κΉ κ° μ¬λΆ\n * @param value Visible μμ±κ°\n */\nconst isHiddenTreeGridValue = (value: unknown) => {\n return value === 0 || value === false || value === '0';\n};\n\n/**\n * TreeGrid νμ μ»¬λΌ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param key μ»¬λΌ ν€\n */\nconst isVisibleTreeGridColumn = (grid: TGrid | undefined, key: string) => {\n return !isHiddenTreeGridValue(grid?.Cols?.[key]?.Visible);\n};\n\n/**\n * addTreeGridRowById μμ± ν μ΄κΈ°κ° ν€ μ¬λΆ\n * @param row λμ ν\n * @param key μ»¬λΌ ν€\n */\nconst isTreeGridAddedRowInitialValueKey = (row: TRow | null | undefined, key: string) => {\n return normalizeTreeGridStringValues(\n (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY],\n ).includes(key);\n};\n\n/**\n * TreeGrid λ³κ²½ ν μλ³Έ μ‘°ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row TreeGrid λ³κ²½ ν λ°μ΄ν°\n */\nconst getLiveTreeGridChangedRow = (grid: TGrid | undefined, row: TreeGridChangedRow) => {\n return typeof row.id === 'string'\n ? (grid?.Rows as unknown as Record<string, TRow> | undefined)?.[row.id]\n : null;\n};\n\n/**\n * λ³κ²½ ν λ°μ΄ν° ν€ ν¬ν¨ μ¬λΆ\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row TreeGrid λ³κ²½ ν λ°μ΄ν°\n * @param key μ»¬λΌ ν€\n * @param includeAddedInitialValues μΆκ° ν μ΄κΈ°κ° ν€ ν¬ν¨ μ¬λΆ\n */\nconst shouldIncludeTreeGridChangeDataKey = (\n grid: TGrid | undefined,\n row: TreeGridChangedRow,\n key: string,\n includeAddedInitialValues = false,\n) => {\n if (!hasTreeGridUploadValue(row[key])) {\n return false;\n }\n\n if (isTreeGridColumnDataKey(grid, key)) {\n return true;\n }\n\n if (isTreeGridDataKey(key)) {\n return true;\n }\n\n return (\n includeAddedInitialValues &&\n isTreeGridAddedRowInitialValueKey(getLiveTreeGridChangedRow(grid, row), key)\n );\n};\n\n/**\n * TreeGrid λ³κ²½ ν λ°μ΄ν° μ κ·ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param row TreeGrid λ³κ²½ ν λ°μ΄ν°\n * @param excludedKeys μ μΈν μν ν€ λͺ©λ‘\n * @param includeAddedInitialValues μΆκ° ν μ΄κΈ°κ° ν€ ν¬ν¨ μ¬λΆ\n */\nconst normalizeTreeGridChangeRow = <T>(\n grid: TGrid | undefined,\n row: TreeGridChangedRow,\n excludedKeys: string[],\n includeAddedInitialValues = false,\n) => {\n return Object.fromEntries(\n without(Object.keys(row), ...excludedKeys)\n .filter((key) =>\n shouldIncludeTreeGridChangeDataKey(grid, row, key, includeAddedInitialValues),\n )\n .map((key) => [key, row[key]]),\n ) as T;\n};\n\n/**\n * λ³κ²½ μνλ³ ν λ°μ΄ν° λ°ν\n * @param rows TreeGrid λ³κ²½ ν λͺ©λ‘\n * @param status μ‘°νν λ³κ²½ μν\n */\nconst getChangedRowsByStatus = <T>(\n grid: TGrid | undefined,\n rows: TreeGridChangedRow[],\n status: TreeGridChangeStatus,\n) => {\n return rows\n .filter((row) => get(row, status) === '1' && row.Deleted !== '1')\n .map((row) =>\n status === 'Changed'\n ? normalizeTreeGridChangeRow<T>(grid, row, ['id', 'Changed'])\n : normalizeTreeGridChangeRow<T>(grid, row, ['id'], true),\n )\n .filter((row) => !isEmpty(row));\n};\n\n/**\n * TreeGrid λ³κ²½ ν Date μκ° κ° μ κ·ν\n * @param grid TreeGrid μΈμ€ν΄μ€\n * @param rows λ³κ²½ ν λͺ©λ‘\n */\nconst normalizeTreeGridChangedRows = (grid: TGrid | undefined, rows: TreeGridChangedRow[]) => {\n if (!grid) {\n return rows;\n }\n\n return rows.map((row) => {\n const liveRow =\n typeof row.id === 'string'\n ? (grid.Rows as unknown as Record<string, TRow>)[row.id]\n : null;\n\n if (!liveRow) {\n return row;\n }\n\n const normalizedRow = { ...row };\n\n Object.keys(row).forEach((col) => {\n if (!isTreeGridTimeDateColumn(grid, liveRow, col)) {\n return;\n }\n\n normalizedRow[col] = getTreeGridTimeDateDisplayValue(grid, liveRow, col);\n });\n\n return normalizedRow;\n });\n};\n\n/**\n * TreeGrid νμ± νΈμ§ μ
κ° νμ \n * @param grid TreeGrid μΈμ€ν΄μ€\n */\nconst commitTreeGridActiveEdit = (grid: TGrid | undefined) => {\n try {\n grid?.EndEdit?.(1);\n } catch {\n // νΈμ§ λ―Έμ§μ
λλ νμ λΆκ° μν fallback\n }\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 grid ? (normalizeTreeGridExternalRows<T>(grid, getDataRows(grid) as Array<TRow & T>) 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 * @param options.editableColumns μ κ· ν μ
λ¨μ νΈμ§ κ°λ₯ 컬λΌ\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 editableColumns = options?.editableColumns;\n const isSingleSelectionLayout = isTreeGridSingleSelectionLayout(grid);\n const shouldResetSelection = !!canSelect && isSingleSelectionLayout;\n const shouldSelectAddedRow =\n shouldResetSelection && isTreeGridSelectedInitialValue(initialValues);\n const resolvedInitialValues = shouldSelectAddedRow\n ? omitTreeGridSelectedInitialValue(initialValues)\n : initialValues;\n\n if (shouldResetSelection) {\n resetTreeGridSelectionById(gridId);\n }\n\n const { resolvedParent, next } = resolveRowInsertionTarget(grid, options);\n\n const newRow = grid.AddRow(resolvedParent, next, 1);\n\n markTreeGridRowAddedById(newRow);\n assignInitialRowValues(grid, newRow, resolvedInitialValues);\n markTreeGridAddedRowBaselineValues(grid, newRow);\n\n newRow.CanEdit = 1;\n newRow.CanDelete = 1;\n newRow.CanSelect = canSelect ? 1 : 0;\n assignEditableAddedRowColumns(grid, newRow, editableColumns);\n\n if (shouldSelectAddedRow) {\n grid.SelectRow(newRow, 1);\n }\n\n grid.Focus(newRow);\n grid.RefreshRow(newRow);\n grid.Calculate(1, 1);\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * TreeGrid νμ μ
Error κ²μ¦\n * @param gridId TreeGrid μΈμ€ν΄μ€ ID\n * @param options νμ κ²μ¬ μ΅μ
\n */\nexport const validateTreeGridRequiredCellsById = (\n gridId: string,\n options: TreeGridRequiredCellsValidationOptions,\n): TreeGridRequiredCellsValidationResult => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return { valid: false, errors: [] };\n }\n\n const rows = getTreeGridRequiredCellRows(grid, options);\n const errors: TreeGridRequiredCellValidationError[] = [];\n const refresh = options.refresh === false ? 0 : 1;\n\n rows.forEach((row) => {\n getTreeGridRequiredCellColumns(grid, row, options).forEach((column) => {\n const col = column.key;\n const value = getTreeGridCellComparableValue(grid, row, col);\n const label = getTreeGridRequiredCellLabel(grid, column);\n const context = {\n grid,\n row,\n col,\n key: col,\n label,\n value,\n };\n\n if (!isBlankTreeGridRequiredCellValue(value)) {\n grid.SetAttribute(row, col, 'Error', '', refresh);\n return;\n }\n\n const message = getTreeGridRequiredCellMessage(\n context,\n column,\n options.messageFactory,\n );\n const error = { ...context, message };\n\n grid.SetAttribute(row, col, 'Error', message, refresh);\n errors.push(error);\n });\n });\n\n const firstError = errors[0];\n\n focusFirstTreeGridRequiredCellError(grid, firstError, options);\n\n return {\n valid: !firstError,\n errors,\n firstError,\n };\n};\n\n/**\n * TreeGrid μΆκ°/μμ λ°μ΄ν° ν μ‘°ν\n * @param gridId TreeGrid μΈμ€ν΄μ€ ID\n */\nexport const getTreeGridRowChangesById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n commitTreeGridActiveEdit(grid);\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>(\n grid,\n normalizeTreeGridChangedRows(grid, changesData as TreeGridChangedRow[]),\n status,\n ),\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 * @param options μ ν ν λ°ν μ΅μ
\n */\nexport const getTreeGridSelectedRowsById = <T>(\n gridId: string,\n options?: TreeGridSelectedRowsOptions,\n) => {\n const grid = getTreeGridById(gridId);\n\n const selectedRows = grid?.GetSelRows();\n\n if (!grid || !selectedRows) {\n return [];\n }\n\n const resolvedSelectedRows = resolveTreeGridSelectedRows<T>(\n grid,\n selectedRows as Array<TRow & T>,\n options,\n );\n\n return normalizeTreeGridExternalRows<T>(grid, resolvedSelectedRows) 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 * @param targetOption.refresh κ°μ‘° μ μ© ν μ
refresh μ¬λΆ\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 preserveTreeGridCellStyleBaseline(grid, row, col);\n grid.SetValue(row, `${col}Class`, TREEGRID_CELL_CHANGED_CLASS);\n grid.SetValue(row, `${col}Color`, targetOption.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR);\n\n if (targetOption.refresh !== false) {\n grid.RefreshCell(row, col);\n }\n};\n\n/**\n * νΉμ μ
κ°μ‘° μ€νμΌ μ κ±°\n * @param gridId TreeGrid μΈμ€ν΄μ€ ID\n * @param targetOption.row κ°μ‘° ν΄μ λμ ν\n * @param targetOption.col κ°μ‘° ν΄μ λμ 컬λΌ\n */\nexport const clearTreeGridCellHighlightById = (\n gridId: string,\n targetOption: Pick<TreeGridHighlightTargetOption, 'row' | 'col'>,\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 const styleBaseline = getTreeGridCellStyleBaseline(row, col);\n\n grid.SetValue(row, `${col}Class`, styleBaseline?.className ?? '');\n grid.SetValue(row, `${col}Color`, styleBaseline?.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 grid.Calculate(1, 1);\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","TREEGRID_TIME_DATE_FORMAT_PATTERN","TREEGRID_ADDED_ROW_BY_ID_FLAG","TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY","TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY","TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY","TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY","TREEGRID_ROW_SELECTED_KEY","DEFAULT_TREE_GRID_REQUIRED_CELL_MESSAGE_FACTORY","__name","label","DEFAULT_TREE_GRID_REQUIRED_CELL_TARGET_ROWS","normalizeTreeGridStringValues","value","isArray","item","normalizeTreeGridAddedRowHighlightColumns","markTreeGridRowAddedById","row","isTreeGridRowAddedById","addedById","isTreeGridAddedRow","added","isTreeGridChangedRow","changed","isTreeGridDeletedRow","deleted","normalizeTreeGridRequiredCellTargetRows","targetRows","normalizedTargetRows","targetRow","shouldValidateTreeGridRequiredCellRow","shouldValidateExplicitTreeGridRequiredCellRow","resolveLiveTreeGridRequiredCellRow","grid","_a","normalizeExplicitTreeGridRequiredCellRows","rows","seenRows","normalizedRows","liveRow","getTreeGridRequiredCellRows","options","appendTreeGridAddedRowHighlightColumn","col","currentColumns","removeTreeGridAddedRowHighlightColumn","nextColumns","column","getTreeGridAddedRowHighlightColumns","getTreeGridCellComparableValue","cellType","_c","_b","rawValue","_d","displayValue","_e","markTreeGridAddedRowBaselineValues","baselineValues","getTreeGridAddedRowBaselineValue","preserveTreeGridCellStyleBaseline","getTreeGridCellStyleBaseline","loadExportTreeGridExcel","exportTreeGridExcel","getDataRows","normalizeTreeGridRequiredCellColumns","columns","key","isPlainObject","isTreeGridEditableCell","canEdit","getTreeGridRequiredCellColumns","requiredColumns","isVisibleTreeGridColumn","getTreeGridRequiredCellLabel","caption","columnCaption","getTreeGridRequiredCellMessage","context","messageFactory","isBlankTreeGridRequiredCellValue","focusFirstTreeGridRequiredCellError","error","isTreeGridTimeDateFormat","format","isTreeGridTimeDateColumn","rowRecord","getTreeGridTimeDateDisplayValue","normalizeTreeGridExternalRow","normalizedRow","normalizeTreeGridExternalRows","isTreeGridExplicitEnabledConfigValue","isTreeGridSingleSelectionLayout","isTreeGridSelectedInitialValue","initialValues","omitTreeGridSelectedInitialValue","initialValueRecord","resolveRowInsertionTarget","insertPosition","parent","anchorRow","resolvedParent","next","assignInitialRowValues","initialValueKeys","rowKey","rowValue","assignEditableAddedRowColumns","editableColumns","targetColumns","isTreeGridDataKey","prefix","isTreeGridColumnDataKey","hasTreeGridUploadValue","isHiddenTreeGridValue","isTreeGridAddedRowInitialValueKey","getLiveTreeGridChangedRow","shouldIncludeTreeGridChangeDataKey","includeAddedInitialValues","normalizeTreeGridChangeRow","excludedKeys","without","getChangedRowsByStatus","status","get","isEmpty","normalizeTreeGridChangedRows","commitTreeGridActiveEdit","getTreeGridById","gridId","getTreeGridDataRowsById","reloadTreeGridBodyById","currentData","emitTreeGridBodyRowsChanged","addTreeGridRowById","canSelect","isSingleSelectionLayout","shouldResetSelection","shouldSelectAddedRow","resolvedInitialValues","resetTreeGridSelectionById","newRow","validateTreeGridRequiredCellsById","errors","refresh","message","firstError","getTreeGridRowChangesById","changesData","parseTreeGridXmlToJson","lowerCase","exportTreeGridToExcelById","title","getTreeGridSelectedRowsById","selectedRows","resolvedSelectedRows","resolveTreeGridSelectedRows","setTreeGridColumnVisibilityById","targetKey","highlightTreeGridCellById","targetOption","TREEGRID_CELL_CHANGED_CLASS","TREEGRID_CELL_HIGHLIGHT_COLOR","clearTreeGridCellHighlightById","styleBaseline","resetTreeGridSelectionsByIds","gridIds","resetTreeGridChangesById","resetTreeGridChangesByIds","setTreeGridColumnEnumOptionsById","columnName","valueKey","labelKeys","enumValues","option","labelKey","enumKeys"],"mappings":"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"}
|