@owp/core 2.1.7 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/components/OwpTable/OwpTable.js +21 -21
  2. package/dist/components/OwpTable/OwpTable.js.map +1 -1
  3. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +193 -136
  4. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  5. package/dist/components/OwpTreeGrid/OwpTreeGridLoadingOverlay.js +28 -0
  6. package/dist/components/OwpTreeGrid/OwpTreeGridLoadingOverlay.js.map +1 -0
  7. package/dist/components/OwpTreeGrid/OwpTreeGridNoDataOverlay.js +45 -0
  8. package/dist/components/OwpTreeGrid/OwpTreeGridNoDataOverlay.js.map +1 -0
  9. package/dist/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.js +84 -0
  10. package/dist/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.js.map +1 -0
  11. package/dist/components/OwpTreeGrid/{utils.js → utils/index.js} +2 -2
  12. package/dist/components/OwpTreeGrid/utils/index.js.map +1 -0
  13. package/dist/contexts/OwpAppProvider.js.map +1 -1
  14. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
  15. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/constants.js +1 -1
  16. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +1 -1
  17. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +1 -1
  18. package/dist/owp-app.css +1 -1
  19. package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +2 -7
  20. package/dist/types/components/OwpTreeGrid/OwpTreeGridLoadingOverlay.d.ts +10 -0
  21. package/dist/types/components/OwpTreeGrid/OwpTreeGridNoDataOverlay.d.ts +14 -0
  22. package/dist/types/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.d.ts +22 -0
  23. package/dist/types/components/OwpTreeGrid/{utils.d.ts → utils/index.d.ts} +1 -1
  24. package/dist/types/contexts/OwpAppProvider.d.ts +1 -0
  25. package/dist/utils/rebuildValue.js +41 -39
  26. package/dist/utils/rebuildValue.js.map +1 -1
  27. package/dist/utils/treeGridUtil.js +1 -1
  28. package/package.json +1 -1
  29. package/dist/components/OwpTreeGrid/utils.js.map +0 -1
@@ -26,7 +26,7 @@ const g = /* @__PURE__ */ l((t) => t ? Object.keys(t).filter((o) => !o.includes(
26
26
  fontWeight: "normal",
27
27
  src: "url('/assets/vendors/Grid/Styles/Roboto-Light.ttf') format('truetype')"
28
28
  }
29
- }, y = {
29
+ }, S = {
30
30
  fontFamily: "RobotoLight, sans-serif",
31
31
  fontSize: "14px",
32
32
  fontWeight: "normal",
@@ -100,7 +100,7 @@ const I = /* @__PURE__ */ l(({
100
100
  },
101
101
  "& .MuiTableCell-root": r ? {
102
102
  boxSizing: "border-box",
103
- ...y,
103
+ ...S,
104
104
  overflow: "hidden",
105
105
  textOverflow: "ellipsis",
106
106
  verticalAlign: "middle",
@@ -110,15 +110,15 @@ const I = /* @__PURE__ */ l(({
110
110
  padding: "7px 10px",
111
111
  borderLeft: `1px solid ${t.palette.divider}`,
112
112
  borderRight: `1px solid ${t.palette.divider}`,
113
- "&:first-of-type": {
113
+ "&:first-child": {
114
114
  borderLeft: "none"
115
115
  },
116
- "&:last-of-type": {
116
+ "&:last-child": {
117
117
  borderRight: "none"
118
118
  }
119
119
  },
120
120
  "& th": r ? {
121
- ...y,
121
+ ...S,
122
122
  backgroundColor: "#586980",
123
123
  borderTop: "1px solid #6F7F94",
124
124
  borderBottom: "1px solid #6F7F94",
@@ -153,7 +153,7 @@ const I = /* @__PURE__ */ l(({
153
153
  borderTopRightRadius: "inherit"
154
154
  }
155
155
  }
156
- })), S = T(z)`
156
+ })), y = T(z)`
157
157
  /* &:last-child th,
158
158
  &:last-child td {
159
159
  border-bottom: 0;
@@ -180,30 +180,30 @@ function lo({
180
180
  footerSlot: t ? /* @__PURE__ */ e(G, { totalCount: typeof a > "u" ? r.length : a }) : void 0,
181
181
  className: v(n.tableLayout && "w-full", n.className),
182
182
  children: [
183
- /* @__PURE__ */ e(j, { children: b.map((i, d) => /* @__PURE__ */ e(S, { children: g(i).map((p) => /* @__PURE__ */ e(
183
+ /* @__PURE__ */ e(j, { children: b.map((i, p) => /* @__PURE__ */ e(y, { children: g(i).map((d) => /* @__PURE__ */ e(
184
184
  h,
185
185
  {
186
186
  className: "whitespace-pre-wrap",
187
- sx: u(i, p),
188
- colSpan: w(i, p, "ColSpan"),
189
- rowSpan: w(i, p, "RowSpan"),
187
+ sx: u(i, d),
188
+ colSpan: w(i, d, "ColSpan"),
189
+ rowSpan: w(i, d, "RowSpan"),
190
190
  align: "center",
191
- children: i[p]
191
+ children: i[d]
192
192
  },
193
- `table-header-${d}-${p}`
194
- )) }, `table-header-${d}`)) }),
195
- /* @__PURE__ */ e(E, { children: r.map((i, d) => {
196
- const p = i;
197
- return /* @__PURE__ */ e(S, { children: s.map((m) => /* @__PURE__ */ e(
193
+ `table-header-${p}-${d}`
194
+ )) }, `table-header-${p}`)) }),
195
+ /* @__PURE__ */ e(E, { children: r.map((i, p) => {
196
+ const d = i;
197
+ return /* @__PURE__ */ e(y, { children: s.map((m) => /* @__PURE__ */ e(
198
198
  h,
199
199
  {
200
200
  className: "whitespace-pre-wrap h-64",
201
- sx: u(p, m),
201
+ sx: u(d, m),
202
202
  align: "center",
203
- children: p[m]
203
+ children: d[m]
204
204
  },
205
- `table-row-cell-${d}-${m}`
206
- )) }, `table-row-${d}`);
205
+ `table-row-cell-${p}-${m}`
206
+ )) }, `table-row-${p}`);
207
207
  }) })
208
208
  ]
209
209
  }
@@ -214,6 +214,6 @@ export {
214
214
  lo as OwpTable,
215
215
  G as OwpTableTotalCount,
216
216
  I as StyledTable,
217
- S as StyledTableRow
217
+ y as StyledTableRow
218
218
  };
219
219
  //# sourceMappingURL=OwpTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OwpTable.js","sources":["../../../src/components/OwpTable/OwpTable.tsx"],"sourcesContent":["import { Divider, styled, Typography, type SxProps, type Theme } from '@mui/material';\nimport clsx from 'clsx';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport Paper from '@mui/material/Paper';\nimport Table, { type TableProps } from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer, { type TableContainerProps } from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport { isArray, isEmpty, isNumber } from 'es-toolkit/compat';\nimport { type ReactNode, useMemo } from 'react';\n\ntype OwpTableCellValue = string | number;\ntype OwpTableHeaderRow = Record<string, OwpTableCellValue>;\ntype OwpTableRowData = Record<string, unknown>;\n\nconst getTableColumnKeys = (row?: Record<string, unknown>) => {\n if (!row) {\n return [];\n }\n\n return Object.keys(row).filter((keyName) => !keyName.includes('Span'));\n};\n\nconst getTableCellSx = (row: Record<string, unknown>, keyName: string) => {\n return (row[`${keyName}Sx`] as SxProps<Theme>) ?? {};\n};\n\nconst getTableCellSpan = (\n row: Record<string, unknown>,\n keyName: string,\n spanType: 'ColSpan' | 'RowSpan',\n) => {\n return (row[`${keyName}${spanType}`] as number | undefined) ?? undefined;\n};\n\nconst mergeSx = (...styles: Array<SxProps<Theme> | undefined | false>): SxProps<Theme> =>\n styles.reduce<Array<Exclude<SxProps<Theme>, readonly unknown[]>>>((acc, style) => {\n if (!style) {\n return acc;\n }\n\n return [...acc, ...(isArray(style) ? style : [style])];\n }, []) as SxProps<Theme>;\n\nconst treeGridContainerSx = {\n border: 0,\n borderRadius: 0,\n overflow: 'visible',\n} as const;\n\nconst treeGridFontFaceStyles = {\n '@font-face': {\n fontFamily: 'RobotoLight',\n fontStyle: 'normal',\n fontWeight: 'normal',\n src: \"url('/assets/vendors/Grid/Styles/Roboto-Light.ttf') format('truetype')\",\n },\n} as const;\n\nconst treeGridFontSx = {\n fontFamily: 'RobotoLight, sans-serif',\n fontSize: '14px',\n fontWeight: 'normal',\n lineHeight: '16px',\n} as const;\n\ninterface StyledTableProps extends TableProps {\n canBodyFullHeight?: boolean;\n canUseTreeGridStyle?: boolean;\n containerProps?: TableContainerProps;\n footerSlot?: ReactNode;\n tableLayout?: 'auto' | 'fixed';\n title?: string;\n children: ReactNode;\n}\n\ntype StyledTableInnerProps = Pick<StyledTableProps, 'canBodyFullHeight' | 'canUseTreeGridStyle'>;\n\n/**\n * 총 row 수 표시 영역\n * @param totalCount 전체 row 수\n */\nexport function OwpTableTotalCount({ totalCount }: { totalCount?: number }) {\n return (\n <>\n <Divider />\n <Typography className=\"h-[30px] w-full pr-12 my-8\" align=\"right\">\n 전체: {isNumber(totalCount) ? totalCount.toLocaleString() : 0} 건\n </Typography>\n </>\n );\n}\n\n/**\n * StyledTable 스타일 컴포넌트\n * @param canBodyFullHeight body full height 사용 여부\n * @param canUseTreeGridStyle TreeGrid 스타일 사용 여부\n * @param children 하위 콘텐츠\n * @param containerProps containerProps props\n * @param footerSlot footer 영역\n * @param tableLayout tableLayout 값\n */\nexport const StyledTable = ({\n canBodyFullHeight,\n canUseTreeGridStyle,\n children,\n className,\n containerProps,\n footerSlot,\n tableLayout,\n ...tableProps\n}: StyledTableProps) => {\n return (\n <>\n {canUseTreeGridStyle && <GlobalStyles styles={treeGridFontFaceStyles} />}\n <TableContainer\n component={Paper}\n variant=\"outlined\"\n {...containerProps}\n sx={mergeSx(\n canUseTreeGridStyle && treeGridContainerSx,\n canBodyFullHeight && { height: '100%' },\n containerProps?.sx,\n )}\n >\n <StyledTableInner\n {...tableProps}\n canBodyFullHeight={canBodyFullHeight}\n canUseTreeGridStyle={canUseTreeGridStyle}\n className={clsx(\n canBodyFullHeight && 'h-full',\n tableLayout === 'fixed' ? 'table-fixed' : tableLayout === 'auto' ? 'table-auto' : '',\n className,\n )}\n >\n {children}\n </StyledTableInner>\n {footerSlot}\n </TableContainer>\n </>\n );\n};\n\nconst StyledTableInner = styled(Table, {\n shouldForwardProp: (prop) => prop !== 'canBodyFullHeight' && prop !== 'canUseTreeGridStyle',\n})<StyledTableInnerProps>(({ theme, canBodyFullHeight, canUseTreeGridStyle }) => ({\n ...(canBodyFullHeight && {\n height: '100%',\n }),\n ...(canBodyFullHeight && {\n '& .MuiTableBody-root': {\n height: '100%',\n },\n '& .MuiTableBody-root > .MuiTableRow-root': {\n height: '100%',\n },\n }),\n '& .MuiTableCell-root': canUseTreeGridStyle\n ? {\n boxSizing: 'border-box',\n ...treeGridFontSx,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n verticalAlign: 'middle',\n whiteSpace: 'nowrap',\n }\n : {\n fontSize: '1.7rem',\n padding: '7px 10px',\n borderLeft: `1px solid ${theme.palette.divider}`,\n borderRight: `1px solid ${theme.palette.divider}`,\n '&:first-of-type': {\n borderLeft: 'none',\n },\n '&:last-of-type': {\n borderRight: 'none',\n },\n },\n '& th': canUseTreeGridStyle\n ? {\n ...treeGridFontSx,\n backgroundColor: '#586980',\n borderTop: '1px solid #6F7F94',\n borderBottom: '1px solid #6F7F94',\n borderLeft: 0,\n borderRight: '1px solid #6F7F94',\n color: 'white',\n height: 33,\n minHeight: 33,\n padding: '7px 2px 6px 10px',\n '&:first-of-type': {\n borderLeft: '1px solid #6F7F94',\n },\n }\n : {\n backgroundColor: theme.palette.grey[200],\n fontWeight: 600,\n },\n '& td': canUseTreeGridStyle\n ? {\n borderBottom: '1px solid #CDD8E4',\n borderLeft: 0,\n borderRight: '1px solid #CDD8E4',\n color: '#111112',\n padding: '7px 10px 6px',\n '&:first-of-type': {\n borderLeft: '1px solid #CDD8E4',\n },\n }\n : {},\n ...(canUseTreeGridStyle && {\n '& tbody > tr:first-of-type > th:first-of-type': {\n borderTopLeftRadius: 'inherit',\n },\n '& tbody > tr:first-of-type > td:last-of-type': {\n borderTopRightRadius: 'inherit',\n },\n }),\n}));\n\nexport const StyledTableRow = styled(TableRow)`\n /* &:last-child th,\n &:last-child td {\n border-bottom: 0;\n } */\n`;\n\ninterface OwpTableProps<T> extends Omit<StyledTableProps, 'children'> {\n canTotalCountRow?: boolean;\n headers: OwpTableHeaderRow | OwpTableHeaderRow[];\n rows: T[];\n totalCount?: number;\n}\n\n/**\n * OwpTable 컴포넌트\n * @param canTotalCountRow 전체 row 수 표시 여부\n * @param headers headers 값\n * @param rows 행 데이터 목록\n * @param totalCount 전체 row 수\n */\nexport function OwpTable<T>({\n canTotalCountRow = false,\n headers,\n rows,\n totalCount,\n ...restTableProps\n}: OwpTableProps<T>) {\n const resolvedHeaderRows = useMemo(\n () => (isArray(headers) ? headers : isEmpty(headers) ? [] : [headers]),\n [headers],\n );\n const commonKeyListData = useMemo(\n () => getTableColumnKeys(isArray(headers) ? headers[0] : headers),\n [headers],\n );\n\n return (\n <StyledTable\n {...restTableProps}\n footerSlot={\n canTotalCountRow ? (\n <OwpTableTotalCount totalCount={typeof totalCount === 'undefined' ? rows.length : totalCount} />\n ) : undefined\n }\n className={clsx(restTableProps.tableLayout && 'w-full', restTableProps.className)}\n >\n <TableHead>\n {resolvedHeaderRows.map((headerData, index) => (\n <StyledTableRow key={`table-header-${index}`}>\n {getTableColumnKeys(headerData).map((keyName) => (\n <TableCell\n key={`table-header-${index}-${keyName}`}\n className=\"whitespace-pre-wrap\"\n sx={getTableCellSx(headerData, keyName)}\n colSpan={getTableCellSpan(headerData, keyName, 'ColSpan')}\n rowSpan={getTableCellSpan(headerData, keyName, 'RowSpan')}\n align=\"center\"\n >\n {headerData[keyName]}\n </TableCell>\n ))}\n </StyledTableRow>\n ))}\n </TableHead>\n <TableBody>\n {rows.map((row, index) => {\n const currentRow = row as OwpTableRowData;\n\n return (\n <StyledTableRow key={`table-row-${index}`}>\n {commonKeyListData.map((keyName) => (\n <TableCell\n key={`table-row-cell-${index}-${keyName}`}\n className=\"whitespace-pre-wrap h-64\"\n sx={getTableCellSx(currentRow, keyName)}\n align=\"center\"\n >\n {currentRow[keyName] as ReactNode}\n </TableCell>\n ))}\n </StyledTableRow>\n );\n })}\n </TableBody>\n </StyledTable>\n );\n}\n"],"names":["getTableColumnKeys","__name","row","keyName","getTableCellSx","getTableCellSpan","spanType","mergeSx","styles","acc","style","isArray","treeGridContainerSx","treeGridFontFaceStyles","treeGridFontSx","OwpTableTotalCount","totalCount","jsxs","Fragment","jsx","Divider","Typography","isNumber","StyledTable","canBodyFullHeight","canUseTreeGridStyle","children","className","containerProps","footerSlot","tableLayout","tableProps","GlobalStyles","TableContainer","Paper","StyledTableInner","clsx","styled","Table","prop","theme","StyledTableRow","TableRow","OwpTable","canTotalCountRow","headers","rows","restTableProps","resolvedHeaderRows","useMemo","isEmpty","commonKeyListData","TableHead","headerData","index","TableCell","TableBody","currentRow"],"mappings":"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"}
1
+ {"version":3,"file":"OwpTable.js","sources":["../../../src/components/OwpTable/OwpTable.tsx"],"sourcesContent":["import { Divider, styled, Typography, type SxProps, type Theme } from '@mui/material';\nimport clsx from 'clsx';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport Paper from '@mui/material/Paper';\nimport Table, { type TableProps } from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer, { type TableContainerProps } from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport { isArray, isEmpty, isNumber } from 'es-toolkit/compat';\nimport { type ReactNode, useMemo } from 'react';\n\ntype OwpTableCellValue = string | number;\ntype OwpTableHeaderRow = Record<string, OwpTableCellValue>;\ntype OwpTableRowData = Record<string, unknown>;\n\nconst getTableColumnKeys = (row?: Record<string, unknown>) => {\n if (!row) {\n return [];\n }\n\n return Object.keys(row).filter((keyName) => !keyName.includes('Span'));\n};\n\nconst getTableCellSx = (row: Record<string, unknown>, keyName: string) => {\n return (row[`${keyName}Sx`] as SxProps<Theme>) ?? {};\n};\n\nconst getTableCellSpan = (\n row: Record<string, unknown>,\n keyName: string,\n spanType: 'ColSpan' | 'RowSpan',\n) => {\n return (row[`${keyName}${spanType}`] as number | undefined) ?? undefined;\n};\n\nconst mergeSx = (...styles: Array<SxProps<Theme> | undefined | false>): SxProps<Theme> =>\n styles.reduce<Array<Exclude<SxProps<Theme>, readonly unknown[]>>>((acc, style) => {\n if (!style) {\n return acc;\n }\n\n return [...acc, ...(isArray(style) ? style : [style])];\n }, []) as SxProps<Theme>;\n\nconst treeGridContainerSx = {\n border: 0,\n borderRadius: 0,\n overflow: 'visible',\n} as const;\n\nconst treeGridFontFaceStyles = {\n '@font-face': {\n fontFamily: 'RobotoLight',\n fontStyle: 'normal',\n fontWeight: 'normal',\n src: \"url('/assets/vendors/Grid/Styles/Roboto-Light.ttf') format('truetype')\",\n },\n} as const;\n\nconst treeGridFontSx = {\n fontFamily: 'RobotoLight, sans-serif',\n fontSize: '14px',\n fontWeight: 'normal',\n lineHeight: '16px',\n} as const;\n\ninterface StyledTableProps extends TableProps {\n canBodyFullHeight?: boolean;\n canUseTreeGridStyle?: boolean;\n containerProps?: TableContainerProps;\n footerSlot?: ReactNode;\n tableLayout?: 'auto' | 'fixed';\n title?: string;\n children: ReactNode;\n}\n\ntype StyledTableInnerProps = Pick<StyledTableProps, 'canBodyFullHeight' | 'canUseTreeGridStyle'>;\n\n/**\n * 총 row 수 표시 영역\n * @param totalCount 전체 row 수\n */\nexport function OwpTableTotalCount({ totalCount }: { totalCount?: number }) {\n return (\n <>\n <Divider />\n <Typography className=\"h-[30px] w-full pr-12 my-8\" align=\"right\">\n 전체: {isNumber(totalCount) ? totalCount.toLocaleString() : 0} 건\n </Typography>\n </>\n );\n}\n\n/**\n * StyledTable 스타일 컴포넌트\n * @param canBodyFullHeight body full height 사용 여부\n * @param canUseTreeGridStyle TreeGrid 스타일 사용 여부\n * @param children 하위 콘텐츠\n * @param containerProps containerProps props\n * @param footerSlot footer 영역\n * @param tableLayout tableLayout 값\n */\nexport const StyledTable = ({\n canBodyFullHeight,\n canUseTreeGridStyle,\n children,\n className,\n containerProps,\n footerSlot,\n tableLayout,\n ...tableProps\n}: StyledTableProps) => {\n return (\n <>\n {canUseTreeGridStyle && <GlobalStyles styles={treeGridFontFaceStyles} />}\n <TableContainer\n component={Paper}\n variant=\"outlined\"\n {...containerProps}\n sx={mergeSx(\n canUseTreeGridStyle && treeGridContainerSx,\n canBodyFullHeight && { height: '100%' },\n containerProps?.sx,\n )}\n >\n <StyledTableInner\n {...tableProps}\n canBodyFullHeight={canBodyFullHeight}\n canUseTreeGridStyle={canUseTreeGridStyle}\n className={clsx(\n canBodyFullHeight && 'h-full',\n tableLayout === 'fixed' ? 'table-fixed' : tableLayout === 'auto' ? 'table-auto' : '',\n className,\n )}\n >\n {children}\n </StyledTableInner>\n {footerSlot}\n </TableContainer>\n </>\n );\n};\n\nconst StyledTableInner = styled(Table, {\n shouldForwardProp: (prop) => prop !== 'canBodyFullHeight' && prop !== 'canUseTreeGridStyle',\n})<StyledTableInnerProps>(({ theme, canBodyFullHeight, canUseTreeGridStyle }) => ({\n ...(canBodyFullHeight && {\n height: '100%',\n }),\n ...(canBodyFullHeight && {\n '& .MuiTableBody-root': {\n height: '100%',\n },\n '& .MuiTableBody-root > .MuiTableRow-root': {\n height: '100%',\n },\n }),\n '& .MuiTableCell-root': canUseTreeGridStyle\n ? {\n boxSizing: 'border-box',\n ...treeGridFontSx,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n verticalAlign: 'middle',\n whiteSpace: 'nowrap',\n }\n : {\n fontSize: '1.7rem',\n padding: '7px 10px',\n borderLeft: `1px solid ${theme.palette.divider}`,\n borderRight: `1px solid ${theme.palette.divider}`,\n '&:first-child': {\n borderLeft: 'none',\n },\n '&:last-child': {\n borderRight: 'none',\n },\n },\n '& th': canUseTreeGridStyle\n ? {\n ...treeGridFontSx,\n backgroundColor: '#586980',\n borderTop: '1px solid #6F7F94',\n borderBottom: '1px solid #6F7F94',\n borderLeft: 0,\n borderRight: '1px solid #6F7F94',\n color: 'white',\n height: 33,\n minHeight: 33,\n padding: '7px 2px 6px 10px',\n '&:first-of-type': {\n borderLeft: '1px solid #6F7F94',\n },\n }\n : {\n backgroundColor: theme.palette.grey[200],\n fontWeight: 600,\n },\n '& td': canUseTreeGridStyle\n ? {\n borderBottom: '1px solid #CDD8E4',\n borderLeft: 0,\n borderRight: '1px solid #CDD8E4',\n color: '#111112',\n padding: '7px 10px 6px',\n '&:first-of-type': {\n borderLeft: '1px solid #CDD8E4',\n },\n }\n : {},\n ...(canUseTreeGridStyle && {\n '& tbody > tr:first-of-type > th:first-of-type': {\n borderTopLeftRadius: 'inherit',\n },\n '& tbody > tr:first-of-type > td:last-of-type': {\n borderTopRightRadius: 'inherit',\n },\n }),\n}));\n\nexport const StyledTableRow = styled(TableRow)`\n /* &:last-child th,\n &:last-child td {\n border-bottom: 0;\n } */\n`;\n\ninterface OwpTableProps<T> extends Omit<StyledTableProps, 'children'> {\n canTotalCountRow?: boolean;\n headers: OwpTableHeaderRow | OwpTableHeaderRow[];\n rows: T[];\n totalCount?: number;\n}\n\n/**\n * OwpTable 컴포넌트\n * @param canTotalCountRow 전체 row 수 표시 여부\n * @param headers headers 값\n * @param rows 행 데이터 목록\n * @param totalCount 전체 row 수\n */\nexport function OwpTable<T>({\n canTotalCountRow = false,\n headers,\n rows,\n totalCount,\n ...restTableProps\n}: OwpTableProps<T>) {\n const resolvedHeaderRows = useMemo(\n () => (isArray(headers) ? headers : isEmpty(headers) ? [] : [headers]),\n [headers],\n );\n const commonKeyListData = useMemo(\n () => getTableColumnKeys(isArray(headers) ? headers[0] : headers),\n [headers],\n );\n\n return (\n <StyledTable\n {...restTableProps}\n footerSlot={\n canTotalCountRow ? (\n <OwpTableTotalCount totalCount={typeof totalCount === 'undefined' ? rows.length : totalCount} />\n ) : undefined\n }\n className={clsx(restTableProps.tableLayout && 'w-full', restTableProps.className)}\n >\n <TableHead>\n {resolvedHeaderRows.map((headerData, index) => (\n <StyledTableRow key={`table-header-${index}`}>\n {getTableColumnKeys(headerData).map((keyName) => (\n <TableCell\n key={`table-header-${index}-${keyName}`}\n className=\"whitespace-pre-wrap\"\n sx={getTableCellSx(headerData, keyName)}\n colSpan={getTableCellSpan(headerData, keyName, 'ColSpan')}\n rowSpan={getTableCellSpan(headerData, keyName, 'RowSpan')}\n align=\"center\"\n >\n {headerData[keyName]}\n </TableCell>\n ))}\n </StyledTableRow>\n ))}\n </TableHead>\n <TableBody>\n {rows.map((row, index) => {\n const currentRow = row as OwpTableRowData;\n\n return (\n <StyledTableRow key={`table-row-${index}`}>\n {commonKeyListData.map((keyName) => (\n <TableCell\n key={`table-row-cell-${index}-${keyName}`}\n className=\"whitespace-pre-wrap h-64\"\n sx={getTableCellSx(currentRow, keyName)}\n align=\"center\"\n >\n {currentRow[keyName] as ReactNode}\n </TableCell>\n ))}\n </StyledTableRow>\n );\n })}\n </TableBody>\n </StyledTable>\n );\n}\n"],"names":["getTableColumnKeys","__name","row","keyName","getTableCellSx","getTableCellSpan","spanType","mergeSx","styles","acc","style","isArray","treeGridContainerSx","treeGridFontFaceStyles","treeGridFontSx","OwpTableTotalCount","totalCount","jsxs","Fragment","jsx","Divider","Typography","isNumber","StyledTable","canBodyFullHeight","canUseTreeGridStyle","children","className","containerProps","footerSlot","tableLayout","tableProps","GlobalStyles","TableContainer","Paper","StyledTableInner","clsx","styled","Table","prop","theme","StyledTableRow","TableRow","OwpTable","canTotalCountRow","headers","rows","restTableProps","resolvedHeaderRows","useMemo","isEmpty","commonKeyListData","TableHead","headerData","index","TableCell","TableBody","currentRow"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,MAAMA,IAAqB,gBAAAC,EAAA,CAACC,MACrBA,IAIE,OAAO,KAAKA,CAAG,EAAE,OAAO,CAACC,MAAY,CAACA,EAAQ,SAAS,MAAM,CAAC,IAH5D,CAAA,GAFgB,uBAQrBC,IAAiB,gBAAAH,EAAA,CAACC,GAA8BC,MAC5CD,EAAI,GAAGC,CAAO,IAAI,KAAwB,CAAA,GAD7B,mBAIjBE,IAAmB,gBAAAJ,EAAA,CACvBC,GACAC,GACAG,MAEQJ,EAAI,GAAGC,CAAO,GAAGG,CAAQ,EAAE,KAA4B,QALxC,qBAQnBC,IAAU,gBAAAN,EAAA,IAAIO,MAClBA,EAAO,OAA2D,CAACC,GAAKC,MACjEA,IAIE,CAAC,GAAGD,GAAK,GAAIE,EAAQD,CAAK,IAAIA,IAAQ,CAACA,CAAK,CAAE,IAH5CD,GAIR,EAAE,GAPS,YASVG,IAAsB;AAAA,EAC1B,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,UAAU;AACZ,GAEMC,IAAyB;AAAA,EAC7B,cAAc;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,KAAK;AAAA,EAAA;AAET,GAEMC,IAAiB;AAAA,EACrB,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AACd;AAkBO,SAASC,EAAmB,EAAE,YAAAC,KAAuC;AAC1E,SACE,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAQ;AAAA,IACT,gBAAAH,EAACI,GAAA,EAAW,WAAU,8BAA6B,OAAM,SAAQ,UAAA;AAAA,MAAA;AAAA,MAC1DC,EAASN,CAAU,IAAIA,EAAW,mBAAmB;AAAA,MAAE;AAAA,IAAA,EAAA,CAC9D;AAAA,EAAA,GACF;AAEJ;AATgBf,EAAAc,GAAA;AAoBT,MAAMQ,IAAc,gBAAAtB,EAAA,CAAC;AAAA,EAC1B,mBAAAuB;AAAA,EACA,qBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,GAAGC;AACL,MAEI,gBAAAd,EAAAC,GAAA,EACG,UAAA;AAAA,EAAAO,KAAuB,gBAAAN,EAACa,GAAA,EAAa,QAAQnB,EAAA,CAAwB;AAAA,EACtE,gBAAAI;AAAA,IAACgB;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,MACX,SAAQ;AAAA,MACP,GAAGN;AAAA,MACJ,IAAIrB;AAAA,QACFkB,KAAuBb;AAAA,QACvBY,KAAqB,EAAE,QAAQ,OAAA;AAAA,QAC/BI,KAAA,gBAAAA,EAAgB;AAAA,MAAA;AAAA,MAGlB,UAAA;AAAA,QAAA,gBAAAT;AAAA,UAACgB;AAAA,UAAA;AAAA,YACE,GAAGJ;AAAA,YACJ,mBAAAP;AAAA,YACA,qBAAAC;AAAA,YACA,WAAWW;AAAA,cACTZ,KAAqB;AAAA,cACrBM,MAAgB,UAAU,gBAAgBA,MAAgB,SAAS,eAAe;AAAA,cAClFH;AAAA,YAAA;AAAA,YAGD,UAAAD;AAAA,UAAA;AAAA,QAAA;AAAA,QAEFG;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AACH,GACF,GArCuB,gBAyCrBM,IAAmBE,EAAOC,GAAO;AAAA,EACrC,mBAAmB,gBAAArC,EAAA,CAACsC,MAASA,MAAS,uBAAuBA,MAAS,uBAAnD;AACrB,CAAC,EAAyB,CAAC,EAAE,OAAAC,GAAO,mBAAAhB,GAAmB,qBAAAC,SAA2B;AAAA,EAChF,GAAID,KAAqB;AAAA,IACvB,QAAQ;AAAA,EAAA;AAAA,EAEV,GAAIA,KAAqB;AAAA,IACvB,wBAAwB;AAAA,MACtB,QAAQ;AAAA,IAAA;AAAA,IAEV,4CAA4C;AAAA,MAC1C,QAAQ;AAAA,IAAA;AAAA,EACV;AAAA,EAEF,wBAAwBC,IACpB;AAAA,IACE,WAAW;AAAA,IACX,GAAGX;AAAA,IACH,UAAU;AAAA,IACV,cAAc;AAAA,IACd,eAAe;AAAA,IACf,YAAY;AAAA,EAAA,IAEd;AAAA,IACE,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY,aAAa0B,EAAM,QAAQ,OAAO;AAAA,IAC9C,aAAa,aAAaA,EAAM,QAAQ,OAAO;AAAA,IAC/C,iBAAiB;AAAA,MACf,YAAY;AAAA,IAAA;AAAA,IAEd,gBAAgB;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,EACf;AAAA,EAEN,QAAQf,IACJ;AAAA,IACE,GAAGX;AAAA,IACH,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,SAAS;AAAA,IACT,mBAAmB;AAAA,MACjB,YAAY;AAAA,IAAA;AAAA,EACd,IAEF;AAAA,IACE,iBAAiB0B,EAAM,QAAQ,KAAK,GAAG;AAAA,IACvC,YAAY;AAAA,EAAA;AAAA,EAElB,QAAQf,IACJ;AAAA,IACE,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,OAAO;AAAA,IACP,SAAS;AAAA,IACT,mBAAmB;AAAA,MACjB,YAAY;AAAA,IAAA;AAAA,EACd,IAEF,CAAA;AAAA,EACJ,GAAIA,KAAuB;AAAA,IACzB,iDAAiD;AAAA,MAC/C,qBAAqB;AAAA,IAAA;AAAA,IAEvB,gDAAgD;AAAA,MAC9C,sBAAsB;AAAA,IAAA;AAAA,EACxB;AAEJ,EAAE,GAEWgB,IAAiBJ,EAAOK,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBtC,SAASC,GAAY;AAAA,EAC1B,kBAAAC,IAAmB;AAAA,EACnB,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,YAAA9B;AAAA,EACA,GAAG+B;AACL,GAAqB;AACnB,QAAMC,IAAqBC;AAAA,IACzB,MAAOtC,EAAQkC,CAAO,IAAIA,IAAUK,EAAQL,CAAO,IAAI,KAAK,CAACA,CAAO;AAAA,IACpE,CAACA,CAAO;AAAA,EAAA,GAEJM,IAAoBF;AAAA,IACxB,MAAMjD,EAAmBW,EAAQkC,CAAO,IAAIA,EAAQ,CAAC,IAAIA,CAAO;AAAA,IAChE,CAACA,CAAO;AAAA,EAAA;AAGV,SACE,gBAAA5B;AAAA,IAACM;AAAA,IAAA;AAAA,MACE,GAAGwB;AAAA,MACJ,YACEH,IACE,gBAAAzB,EAACJ,GAAA,EAAmB,YAAY,OAAOC,IAAe,MAAc8B,EAAK,SAAS9B,EAAA,CAAY,IAC5F;AAAA,MAEN,WAAWoB,EAAKW,EAAe,eAAe,UAAUA,EAAe,SAAS;AAAA,MAEhF,UAAA;AAAA,QAAA,gBAAA5B,EAACiC,GAAA,EACE,UAAAJ,EAAmB,IAAI,CAACK,GAAYC,MACnC,gBAAAnC,EAACsB,GAAA,EACE,UAAAzC,EAAmBqD,CAAU,EAAE,IAAI,CAAClD,MACnC,gBAAAgB;AAAA,UAACoC;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YACV,IAAInD,EAAeiD,GAAYlD,CAAO;AAAA,YACtC,SAASE,EAAiBgD,GAAYlD,GAAS,SAAS;AAAA,YACxD,SAASE,EAAiBgD,GAAYlD,GAAS,SAAS;AAAA,YACxD,OAAM;AAAA,YAEL,YAAWA,CAAO;AAAA,UAAA;AAAA,UAPd,gBAAgBmD,CAAK,IAAInD,CAAO;AAAA,QAAA,CASxC,EAAA,GAZkB,gBAAgBmD,CAAK,EAa1C,CACD,EAAA,CACH;AAAA,0BACCE,GAAA,EACE,UAAAV,EAAK,IAAI,CAAC5C,GAAKoD,MAAU;AACxB,gBAAMG,IAAavD;AAEnB,iBACE,gBAAAiB,EAACsB,GAAA,EACE,UAAAU,EAAkB,IAAI,CAAChD,MACtB,gBAAAgB;AAAA,YAACoC;AAAA,YAAA;AAAA,cAEC,WAAU;AAAA,cACV,IAAInD,EAAeqD,GAAYtD,CAAO;AAAA,cACtC,OAAM;AAAA,cAEL,YAAWA,CAAO;AAAA,YAAA;AAAA,YALd,kBAAkBmD,CAAK,IAAInD,CAAO;AAAA,UAAA,CAO1C,KAVkB,aAAamD,CAAK,EAWvC;AAAA,QAEJ,CAAC,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAlEgBrD,EAAA0C,IAAA;"}
@@ -1,186 +1,243 @@
1
- var Y = Object.defineProperty;
2
- var i = (e, n) => Y(e, "name", { value: n, configurable: !0 });
3
- import { jsx as H } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
4
- import { useGetCurrentLanguage as Z } from "../../hooks/useCurrentLanguage.js";
5
- import { useRef as l, useState as ee, useEffect as K } from "react";
6
- import { applyTreeGridLayoutToGrid as V } from "./utils.js";
7
- import { isEmpty as R } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js";
8
- import { delay as te } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/function/delay.js";
9
- import { isEqual as re } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
10
- import { omit as ne } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/omit.js";
11
- import { debounce as L } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/function/debounce.js";
12
- import { get as oe } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/get.js";
13
- const Q = {
1
+ var pe = Object.defineProperty;
2
+ var o = (e, n) => pe(e, "name", { value: n, configurable: !0 });
3
+ import { jsxs as me, jsx as W } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
4
+ import { useOwpTranslation as Te } from "../../hooks/useOwpTranslation.js";
5
+ import { useGetCurrentLanguage as ve } from "../../hooks/useCurrentLanguage.js";
6
+ import { useRef as i, useState as ie, useEffect as X, useLayoutEffect as Ge } from "react";
7
+ import { useOwpTreeGridOverlayFrame as ye } from "./hooks/useOwpTreeGridOverlayFrame.js";
8
+ import { OwpTreeGridLoadingOverlay as De } from "./OwpTreeGridLoadingOverlay.js";
9
+ import { OwpTreeGridNoDataOverlay as we } from "./OwpTreeGridNoDataOverlay.js";
10
+ import { applyTreeGridLayoutToGrid as ue } from "./utils/index.js";
11
+ import { isEmpty as B } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js";
12
+ import { delay as Ee } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/function/delay.js";
13
+ import { isEqual as Re } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
14
+ import { omit as Oe } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/omit.js";
15
+ import { debounce as $ } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/function/debounce.js";
16
+ import { get as ge } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/get.js";
17
+ const Be = 300, se = {
14
18
  en: "/assets/vendors/Grid/TextEN.xml",
15
19
  kr: "/assets/vendors/Grid/TextKR.xml"
16
- }, W = /* @__PURE__ */ i((e) => `${e}?noCache=${Date.now()}`, "appendNoCacheQuery"), se = /* @__PURE__ */ i((e) => e === "kr" ? Q.kr : Q.en, "getTreeGridTextResourceUrl"), ue = /* @__PURE__ */ i((e) => e != null && e.includes("assets") ? W(e) : (
20
+ }, ce = /* @__PURE__ */ o((e) => `${e}?noCache=${Date.now()}`, "appendNoCacheQuery"), be = /* @__PURE__ */ o((e) => e === "kr" ? se.kr : se.en, "getTreeGridTextResourceUrl"), Se = /* @__PURE__ */ o((e) => e != null && e.includes("assets") ? ce(e) : (
17
21
  // @ts-expect-error - API base URL env is provided by host app
18
22
  `undefined/${e}?noCache=${Date.now()}`
19
- ), "resolveTreeGridDataUrl"), ie = /* @__PURE__ */ i((e, n, o) => e ? { Url: ue(n) } : { Data: { Body: [R(o) ? [] : o] } }, "buildTreeGridDataSource"), ce = /* @__PURE__ */ i(({
23
+ ), "resolveTreeGridDataUrl"), Ie = /* @__PURE__ */ o((e, n, s) => e ? { Url: Se(n) } : { Data: { Body: [B(s) ? [] : s] } }, "buildTreeGridDataSource"), Le = /* @__PURE__ */ o(({
20
24
  id: e,
21
25
  layoutUrl: n,
22
- dataUrl: o,
23
- bodyData: u,
24
- useDataUrl: p,
25
- width: c,
26
- height: y,
27
- languageId: G
26
+ dataUrl: s,
27
+ bodyData: f,
28
+ useDataUrl: l,
29
+ width: p,
30
+ height: G,
31
+ languageId: y
28
32
  }) => ({
29
33
  id: e,
30
- Layout: { Url: W(n ?? "") },
31
- Data: ie(p, o, u),
34
+ Layout: { Url: ce(n ?? "") },
35
+ Data: Ie(l, s, f),
32
36
  Text: {
33
- Url: se(G)
37
+ Url: be(y)
34
38
  },
35
- width: c,
36
- height: y,
39
+ width: p,
40
+ height: G,
37
41
  Debug: "Error"
38
- }), "buildTreeGridInitializationOptions"), ae = /* @__PURE__ */ i((e) => oe(e, "Data.Data.Data.Body.0"), "getTreeGridBodyData"), fe = /* @__PURE__ */ i((e, n) => {
39
- var u;
40
- const o = (u = e.Data) == null ? void 0 : u.Data;
42
+ }), "buildTreeGridInitializationOptions"), xe = /* @__PURE__ */ o((e) => ge(e, "Data.Data.Data.Body.0"), "getTreeGridBodyData"), Ce = /* @__PURE__ */ o((e, n, s) => {
43
+ var l;
44
+ const f = (l = e.Data) == null ? void 0 : l.Data;
41
45
  e.Data.Data = {
42
- ...o,
46
+ ...f,
43
47
  Data: { Body: [n || []] },
44
48
  Url: ""
45
- }, e.ReloadBody();
46
- }, "replaceTreeGridBodyData"), de = /* @__PURE__ */ i(({
49
+ }, e.ReloadBody(s);
50
+ }, "replaceTreeGridBodyData"), _e = /* @__PURE__ */ o(({
47
51
  id: e,
48
52
  onSelect: n,
49
- onRowClick: o,
50
- onRowAdd: u,
51
- onRowDelete: p,
52
- onRowUndelete: c,
53
- onRowChange: y,
54
- onClickButton: G,
55
- onSave: m,
56
- onReady: D,
57
- onAfterValueChanged: g,
58
- treeGridInstanceRef: x,
59
- latestLayoutOverridesRef: T,
60
- appliedLayoutOverridesRef: B,
61
- appliedBodyDataPropRef: C,
62
- hasAppliedInitialLayoutRef: E,
63
- setIsTreeGridReady: h
53
+ onRowClick: s,
54
+ onRowAdd: f,
55
+ onRowDelete: l,
56
+ onRowUndelete: p,
57
+ onRowChange: G,
58
+ onClickButton: y,
59
+ onSave: b,
60
+ onReady: m,
61
+ onAfterValueChanged: c,
62
+ treeGridInstanceRef: M,
63
+ latestLayoutOverridesRef: k,
64
+ appliedLayoutOverridesRef: q,
65
+ appliedBodyDataPropRef: A,
66
+ hasAppliedInitialLayoutRef: S,
67
+ setIsTreeGridReady: H
64
68
  }) => {
65
- const w = g ?? y;
69
+ const I = c ?? G;
66
70
  window.TGSetEvent("OnRowAdd", e, (t, r) => {
67
- r.CanEdit = 1, r.CanDelete = 1, u == null || u(t, r);
68
- }), typeof o == "function" && window.TGSetEvent(
71
+ r.CanEdit = 1, r.CanDelete = 1, f == null || f(t, r);
72
+ }), typeof s == "function" && window.TGSetEvent(
69
73
  "OnClick",
70
74
  e,
71
- L((t, r, s, a, I, U) => {
72
- o(t, r, s, a, I, U);
75
+ $((t, r, u, T, a, P) => {
76
+ s(t, r, u, T, a, P);
73
77
  }, 300)
74
- ), typeof G == "function" && window.TGSetEvent(
78
+ ), typeof y == "function" && window.TGSetEvent(
75
79
  "OnClickButton",
76
80
  e,
77
- L((t, r, s, a) => {
78
- G(t, r, s, a);
81
+ $((t, r, u, T) => {
82
+ y(t, r, u, T);
79
83
  }, 300)
80
- ), typeof p == "function" && window.TGSetEvent("OnRowDelete", e, (t, r, s) => {
81
- p(t, r, s);
82
- }), typeof c == "function" && window.TGSetEvent("OnRowUndelete", e, (t, r) => {
83
- c(t, r);
84
- }), typeof w == "function" && window.TGSetEvent("OnAfterValueChanged", e, (t, r, s, a) => {
85
- w(t, r, s, a);
84
+ ), typeof l == "function" && window.TGSetEvent("OnRowDelete", e, (t, r, u) => {
85
+ l(t, r, u);
86
+ }), typeof p == "function" && window.TGSetEvent("OnRowUndelete", e, (t, r) => {
87
+ p(t, r);
88
+ }), typeof I == "function" && window.TGSetEvent("OnAfterValueChanged", e, (t, r, u, T) => {
89
+ I(t, r, u, T);
86
90
  }), typeof n == "function" && window.TGSetEvent(
87
91
  "OnSelect",
88
92
  e,
89
- L((t) => {
93
+ $((t) => {
90
94
  const r = t.GetSelRows() ?? [];
91
95
  n(r);
92
96
  }, 100)
93
- ), typeof m == "function" && window.TGSetEvent("OnSave", e, (t, r, s) => {
94
- m(t, r, s);
97
+ ), typeof b == "function" && window.TGSetEvent("OnSave", e, (t, r, u) => {
98
+ b(t, r, u);
95
99
  }), window.TGSetEvent(
96
100
  "OnReady",
97
101
  e,
98
- L((t) => {
99
- if (!E.current) {
100
- const r = T.current;
101
- E.current = !0, V(t, r), x.current = t, B.current = r, C.current = ae(t), h(!0), D == null || D(t);
102
+ $((t) => {
103
+ if (!S.current) {
104
+ const r = k.current;
105
+ S.current = !0, ue(t, r), M.current = t, q.current = r, A.current = xe(t), H(!0), m == null || m(t);
102
106
  }
103
107
  }, 100)
104
108
  );
105
- }, "bindTreeGridEvents"), Se = /* @__PURE__ */ i(({
109
+ }, "bindTreeGridEvents"), Qe = /* @__PURE__ */ o(({
106
110
  id: e = "treeGridWrapper",
107
111
  containerStyle: n,
108
- containerClassName: o,
109
- className: u,
110
- style: p,
111
- height: c = "100%",
112
- width: y = "100%",
113
- layoutUrl: G,
114
- dataUrl: m,
115
- layoutOverrides: D,
116
- LayoutUrl: g,
117
- DataUrl: x,
118
- data: T,
119
- layout: B,
120
- useDataUrl: C,
121
- onSelect: E,
122
- onRowClick: h,
123
- onRowAdd: w,
124
- onRowDelete: t,
125
- onRowUndelete: r,
126
- onRowChange: s,
127
- onClickButton: a,
128
- onSave: I,
129
- onReady: U,
130
- onAfterValueChanged: X
112
+ containerClassName: s,
113
+ className: f,
114
+ style: l,
115
+ height: p = "100%",
116
+ width: G = "100%",
117
+ layoutUrl: y,
118
+ dataUrl: b,
119
+ layoutOverrides: m,
120
+ data: c,
121
+ useDataUrl: M,
122
+ onSelect: k,
123
+ onRowClick: q,
124
+ onRowAdd: A,
125
+ onRowDelete: S,
126
+ onRowUndelete: H,
127
+ onRowChange: I,
128
+ onClickButton: t,
129
+ onSave: r,
130
+ onReady: u,
131
+ onAfterValueChanged: T,
132
+ showLoading: a = !0
131
133
  }) => {
132
- const A = G ?? g, F = m ?? x, b = D ?? B, f = l(null), $ = l(
133
- b
134
- ), P = l(T), O = l(void 0), _ = l(void 0), J = l(!1), [j, M] = ee(!1), S = Z(), q = l(S.id);
135
- return $.current = b, P.current = T, K(() => {
136
- var v;
137
- if (S.id !== q.current && !R(f.current) && ((v = f.current) == null || v.Dispose(), f.current = null, q.current = S.id), !!R(f.current))
138
- return window.TreeGrid(
139
- ce({
134
+ const { t: P } = Te(), d = i(null), J = i(null), h = i(m), Y = i(c), L = i(void 0), x = i(void 0), ae = i(!1), E = i(0), D = i(null), R = i(void 0), O = i(void 0), [j, fe] = ie(!1), [le, g] = ie(!1), C = ve(), Z = i(C.id), de = a && c !== void 0 && j && x.current !== c, F = a && (le || de), U = !F && c !== void 0 && B(c);
135
+ h.current = m, Y.current = c;
136
+ const ee = ye({
137
+ visible: F || U,
138
+ containerRef: J,
139
+ treeGridInstanceRef: d
140
+ }), _ = /* @__PURE__ */ o(() => {
141
+ R.current !== void 0 && (window.clearTimeout(R.current), R.current = void 0);
142
+ }, "clearBindingLoadingHideTimeout"), z = /* @__PURE__ */ o(() => {
143
+ O.current !== void 0 && (window.clearTimeout(O.current), O.current = void 0);
144
+ }, "clearBodyReloadStartTimeout");
145
+ X(() => {
146
+ a || (z(), _(), D.current = null, g(!1));
147
+ }, [a]), X(() => {
148
+ var w;
149
+ if (C.id !== Z.current && !B(d.current) && ((w = d.current) == null || w.Dispose(), d.current = null, Z.current = C.id), !!B(d.current))
150
+ return _e({
151
+ id: e,
152
+ onSelect: k,
153
+ onRowClick: q,
154
+ onRowAdd: A,
155
+ onRowDelete: S,
156
+ onRowUndelete: H,
157
+ onRowChange: I,
158
+ onClickButton: t,
159
+ onSave: r,
160
+ onReady: u,
161
+ onAfterValueChanged: T,
162
+ treeGridInstanceRef: d,
163
+ latestLayoutOverridesRef: h,
164
+ appliedLayoutOverridesRef: L,
165
+ appliedBodyDataPropRef: x,
166
+ hasAppliedInitialLayoutRef: ae,
167
+ setIsTreeGridReady: fe
168
+ }), window.TreeGrid(
169
+ Le({
140
170
  id: e,
141
- layoutUrl: A,
142
- dataUrl: F,
143
- bodyData: T,
144
- useDataUrl: C,
145
- width: y,
146
- height: c,
147
- languageId: S.id
171
+ layoutUrl: y,
172
+ dataUrl: b,
173
+ bodyData: c,
174
+ useDataUrl: M,
175
+ width: G,
176
+ height: p,
177
+ languageId: C.id
148
178
  }),
149
179
  e,
150
180
  e
151
- ), de({
152
- id: e,
153
- onSelect: E,
154
- onRowClick: h,
155
- onRowAdd: w,
156
- onRowDelete: t,
157
- onRowUndelete: r,
158
- onRowChange: s,
159
- onClickButton: a,
160
- onSave: I,
161
- onReady: U,
162
- onAfterValueChanged: X,
163
- treeGridInstanceRef: f,
164
- latestLayoutOverridesRef: $,
165
- appliedLayoutOverridesRef: O,
166
- appliedBodyDataPropRef: _,
167
- hasAppliedInitialLayoutRef: J,
168
- setIsTreeGridReady: M
169
- }), () => {
170
- te(() => {
171
- var d;
172
- (d = f.current) == null || d.Dispose();
181
+ ), () => {
182
+ Ee(() => {
183
+ var v;
184
+ (v = d.current) == null || v.Dispose();
173
185
  }, 200);
174
186
  };
175
- }, []), K(() => {
176
- const v = f.current, d = $.current, k = P.current;
177
- if (R(v) || !j)
187
+ }, []), Ge(() => {
188
+ const w = d.current, v = h.current, N = Y.current;
189
+ if (B(w) || !j)
178
190
  return;
179
- const z = O.current !== d && !re(O.current, d), N = _.current !== k;
180
- !z && !N || (z && (V(v, d, N), O.current = d), N && (fe(v, k), _.current = k));
181
- }, [j, b, T]), /* @__PURE__ */ H("div", { className: o, style: { height: c, width: y, ...n }, children: /* @__PURE__ */ H("div", { id: e, className: u, style: ne(p, ["height", "width"]) }) });
191
+ const te = L.current !== v && !Re(L.current, v), Q = x.current !== N;
192
+ if (!(!te && !Q) && (te && (ue(w, v, Q), L.current = v), Q)) {
193
+ const V = E.current + 1, re = /* @__PURE__ */ o(() => {
194
+ O.current = void 0, Ce(w, N, () => {
195
+ if (E.current !== V)
196
+ return;
197
+ const ne = D.current;
198
+ if (!a || ne === null) {
199
+ D.current = null, g(!1);
200
+ return;
201
+ }
202
+ const oe = Math.max(
203
+ 0,
204
+ Be - (Date.now() - ne)
205
+ );
206
+ if (_(), oe === 0) {
207
+ D.current = null, g(!1);
208
+ return;
209
+ }
210
+ R.current = window.setTimeout(() => {
211
+ E.current === V && (R.current = void 0, D.current = null, g(!1));
212
+ }, oe);
213
+ });
214
+ }, "runBodyReload");
215
+ E.current = V, a && N !== void 0 ? (z(), _(), D.current = Date.now(), g(!0), O.current = window.setTimeout(() => {
216
+ E.current === V && re();
217
+ }, 0)) : re(), x.current = N;
218
+ }
219
+ }, [j, m, c, a]), X(() => () => {
220
+ z(), _();
221
+ }, []);
222
+ const K = {
223
+ height: p,
224
+ width: G,
225
+ ...n
226
+ };
227
+ return (a || U) && (K.position = n != null && n.position && n.position !== "static" ? n.position : "relative", K.isolation = "isolate"), /* @__PURE__ */ me("div", { ref: J, className: s, style: K, children: [
228
+ /* @__PURE__ */ W("div", { id: e, className: f, style: Oe(l, ["height", "width"]) }),
229
+ /* @__PURE__ */ W(
230
+ we,
231
+ {
232
+ visible: U,
233
+ message: P("Message.조회된 결과가 없습니다."),
234
+ overlayFrame: ee
235
+ }
236
+ ),
237
+ /* @__PURE__ */ W(De, { visible: F, overlayFrame: ee })
238
+ ] });
182
239
  }, "OwpTreeGrid");
183
240
  export {
184
- Se as OwpTreeGrid
241
+ Qe as OwpTreeGrid
185
242
  };
186
243
  //# sourceMappingURL=OwpTreeGrid.js.map