@operato/data-grist 1.12.7 → 1.13.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 (56) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/src/accumulator/accumulator.d.ts +2 -2
  3. package/dist/src/accumulator/accumulator.js +1 -0
  4. package/dist/src/accumulator/accumulator.js.map +1 -1
  5. package/dist/src/configure/config-builder.js +15 -0
  6. package/dist/src/configure/config-builder.js.map +1 -1
  7. package/dist/src/configure/tree-option-builder.js +13 -2
  8. package/dist/src/configure/tree-option-builder.js.map +1 -1
  9. package/dist/src/configure/zero-config.js +1 -3
  10. package/dist/src/configure/zero-config.js.map +1 -1
  11. package/dist/src/data-grid/data-grid-accum-field.js +6 -0
  12. package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
  13. package/dist/src/data-grist.d.ts +2 -5
  14. package/dist/src/data-grist.js +42 -100
  15. package/dist/src/data-grist.js.map +1 -1
  16. package/dist/src/data-manipulator.d.ts +11 -0
  17. package/dist/src/data-manipulator.js +93 -12
  18. package/dist/src/data-manipulator.js.map +1 -1
  19. package/dist/src/renderers/ox-grist-renderer-tree.js +3 -3
  20. package/dist/src/renderers/ox-grist-renderer-tree.js.map +1 -1
  21. package/dist/src/types.d.ts +7 -1
  22. package/dist/src/types.js.map +1 -1
  23. package/dist/stories/accumulator.stories.js +18 -1
  24. package/dist/stories/accumulator.stories.js.map +1 -1
  25. package/dist/stories/fixed-column.stories.js +5 -10
  26. package/dist/stories/fixed-column.stories.js.map +1 -1
  27. package/dist/stories/grist-modes.stories.js +1 -0
  28. package/dist/stories/grist-modes.stories.js.map +1 -1
  29. package/dist/stories/tree-column-with-checkbox.stories.js +5 -2
  30. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  31. package/dist/stories/tree-column.stories.js +3 -1
  32. package/dist/stories/tree-column.stories.js.map +1 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +2 -2
  35. package/src/accumulator/accumulator.ts +3 -2
  36. package/src/configure/config-builder.ts +18 -1
  37. package/src/configure/tree-option-builder.ts +16 -2
  38. package/src/configure/zero-config.ts +1 -3
  39. package/src/data-grid/data-grid-accum-field.ts +8 -1
  40. package/src/data-grist.ts +70 -124
  41. package/src/data-manipulator.ts +119 -13
  42. package/src/renderers/ox-grist-renderer-tree.ts +3 -3
  43. package/src/types.ts +10 -2
  44. package/stories/accumulator.stories.ts +18 -1
  45. package/stories/fixed-column.stories.ts +5 -10
  46. package/stories/grist-modes.stories.ts +1 -0
  47. package/stories/tree-column-with-checkbox.stories.ts +5 -2
  48. package/stories/tree-column.stories.ts +3 -1
  49. package/translations/en.json +7 -0
  50. package/translations/ja.json +7 -0
  51. package/translations/ko.json +7 -0
  52. package/translations/ms.json +7 -0
  53. package/translations/zh.json +7 -0
  54. package/dist/stories/tree-column.stories copy.d.ts +0 -26
  55. package/dist/stories/tree-column.stories copy.js +0 -326
  56. package/dist/stories/tree-column.stories copy.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,24 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.13.0](https://github.com/hatiolab/operato/compare/v1.12.9...v1.13.0) (2024-01-04)
7
+
8
+
9
+ ### :rocket: New Features
10
+
11
+ * accumulator의 태그 추가 ([5321c74](https://github.com/hatiolab/operato/commit/5321c74c413b3f82a6695cc2fafd037df10b0aec))
12
+
13
+
14
+
15
+ ### [1.12.8](https://github.com/hatiolab/operato/compare/v1.12.7...v1.12.8) (2024-01-03)
16
+
17
+
18
+ ### :bug: Bug Fix
19
+
20
+ * tree-table configurations - childrenProperty, expanded ([4012e12](https://github.com/hatiolab/operato/commit/4012e12bea1c1e4fef8160775a775af5988ebd48))
21
+
22
+
23
+
6
24
  ### [1.12.7](https://github.com/hatiolab/operato/compare/v1.12.6...v1.12.7) (2024-01-03)
7
25
 
8
26
 
@@ -1,2 +1,2 @@
1
- import { AccumulatorFunc, ColumnConfig, GristData } from '../types';
2
- export declare function accumulate(data: GristData, column: ColumnConfig, accumulator: AccumulatorFunc): string | number;
1
+ import { AccumulatorObject, ColumnConfig, GristData } from '../types';
2
+ export declare function accumulate(data: GristData, column: ColumnConfig, accumulator: AccumulatorObject): string | number;
@@ -32,6 +32,7 @@ const Accumulators = {
32
32
  max
33
33
  };
34
34
  export function accumulate(data, column, accumulator) {
35
+ accumulator = typeof accumulator === 'object' ? accumulator.type : accumulator;
35
36
  var func = accumulator;
36
37
  if (typeof accumulator == 'string') {
37
38
  func = Accumulators[accumulator];
@@ -1 +1 @@
1
- {"version":3,"file":"accumulator.js","sourceRoot":"","sources":["../../../src/accumulator/accumulator.ts"],"names":[],"mappings":"AAEA,SAAS,GAAG,CAAC,IAAe,EAAE,MAAoB;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAExB,OAAO,IAAI,CAAC,OAAO;SAChB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SAC7C,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACtB,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IACnC,CAAC,EAAE,CAAC,CAAC,CAAA;AACT,CAAC;AAED,SAAS,GAAG,CAAC,IAAe,EAAE,MAAoB;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEnF,OAAO,CACL,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACtC,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IACnC,CAAC,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAChC,CAAA;AACH,CAAC;AAED,SAAS,KAAK,CAAC,IAAe,EAAE,MAAoB;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;AAC5B,CAAC;AAED,SAAS,GAAG,CAAC,IAAe,EAAE,MAAoB;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAExB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CACnB,IAAI,EACJ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAC/F,CAAA;AACH,CAAC;AAED,SAAS,GAAG,CAAC,IAAe,EAAE,MAAoB;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAExB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CACnB,IAAI,EACJ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAC/F,CAAA;AACH,CAAC;AAED,MAAM,YAAY,GAAmF;IACnG,GAAG;IACH,GAAG;IACH,KAAK;IACL,GAAG;IACH,GAAG;CACJ,CAAA;AAED,MAAM,UAAU,UAAU,CAAC,IAAe,EAAE,MAAoB,EAAE,WAA4B;IAC5F,IAAI,IAAI,GAAG,WAAyE,CAAA;IAEpF,IAAI,OAAO,WAAW,IAAI,QAAQ,EAAE,CAAC;QACnC,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;AACtC,CAAC","sourcesContent":["import { AccumulatorFunc, ColumnConfig, GristData } from '../types'\n\nfunction sum(data: GristData, column: ColumnConfig): number {\n const name = column.name\n\n return data.records\n .filter(record => !Number.isNaN(record[name]))\n .reduce((sum, record) => {\n return sum + Number(record[name])\n }, 0)\n}\n\nfunction avg(data: GristData, column: ColumnConfig): number {\n const name = column.name\n const effectiveRecords = data.records.filter(record => !Number.isNaN(record[name]))\n\n return (\n effectiveRecords.reduce((sum, record) => {\n return sum + Number(record[name])\n }, 0) / effectiveRecords.length\n )\n}\n\nfunction count(data: GristData, column: ColumnConfig): number {\n return data.records.length\n}\n\nfunction min(data: GristData, column: ColumnConfig): number {\n const name = column.name\n\n return Math.min.apply(\n null,\n data.records.filter(record => !Number.isNaN(record[name])).map(record => Number(record[name]))\n )\n}\n\nfunction max(data: GristData, column: ColumnConfig): number {\n const name = column.name\n\n return Math.max.apply(\n null,\n data.records.filter(record => !Number.isNaN(record[name])).map(record => Number(record[name]))\n )\n}\n\nconst Accumulators: { [name: string]: (data: GristData, column: ColumnConfig) => string | number } = {\n sum,\n avg,\n count,\n min,\n max\n}\n\nexport function accumulate(data: GristData, column: ColumnConfig, accumulator: AccumulatorFunc) {\n var func = accumulator as (data: GristData, column: ColumnConfig) => string | number\n\n if (typeof accumulator == 'string') {\n func = Accumulators[accumulator]\n }\n\n return func.call(null, data, column)\n}\n"]}
1
+ {"version":3,"file":"accumulator.js","sourceRoot":"","sources":["../../../src/accumulator/accumulator.ts"],"names":[],"mappings":"AAEA,SAAS,GAAG,CAAC,IAAe,EAAE,MAAoB;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAExB,OAAO,IAAI,CAAC,OAAO;SAChB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SAC7C,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACtB,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IACnC,CAAC,EAAE,CAAC,CAAC,CAAA;AACT,CAAC;AAED,SAAS,GAAG,CAAC,IAAe,EAAE,MAAoB;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEnF,OAAO,CACL,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACtC,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IACnC,CAAC,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAChC,CAAA;AACH,CAAC;AAED,SAAS,KAAK,CAAC,IAAe,EAAE,MAAoB;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;AAC5B,CAAC;AAED,SAAS,GAAG,CAAC,IAAe,EAAE,MAAoB;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAExB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CACnB,IAAI,EACJ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAC/F,CAAA;AACH,CAAC;AAED,SAAS,GAAG,CAAC,IAAe,EAAE,MAAoB;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAExB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CACnB,IAAI,EACJ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAC/F,CAAA;AACH,CAAC;AAED,MAAM,YAAY,GAAmF;IACnG,GAAG;IACH,GAAG;IACH,KAAK;IACL,GAAG;IACH,GAAG;CACJ,CAAA;AAED,MAAM,UAAU,UAAU,CAAC,IAAe,EAAE,MAAoB,EAAE,WAA8B;IAC9F,WAAW,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAA;IAC9E,IAAI,IAAI,GAAG,WAAyE,CAAA;IAEpF,IAAI,OAAO,WAAW,IAAI,QAAQ,EAAE,CAAC;QACnC,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;AACtC,CAAC","sourcesContent":["import { AccumulatorObject, ColumnConfig, GristData } from '../types'\n\nfunction sum(data: GristData, column: ColumnConfig): number {\n const name = column.name\n\n return data.records\n .filter(record => !Number.isNaN(record[name]))\n .reduce((sum, record) => {\n return sum + Number(record[name])\n }, 0)\n}\n\nfunction avg(data: GristData, column: ColumnConfig): number {\n const name = column.name\n const effectiveRecords = data.records.filter(record => !Number.isNaN(record[name]))\n\n return (\n effectiveRecords.reduce((sum, record) => {\n return sum + Number(record[name])\n }, 0) / effectiveRecords.length\n )\n}\n\nfunction count(data: GristData, column: ColumnConfig): number {\n return data.records.length\n}\n\nfunction min(data: GristData, column: ColumnConfig): number {\n const name = column.name\n\n return Math.min.apply(\n null,\n data.records.filter(record => !Number.isNaN(record[name])).map(record => Number(record[name]))\n )\n}\n\nfunction max(data: GristData, column: ColumnConfig): number {\n const name = column.name\n\n return Math.max.apply(\n null,\n data.records.filter(record => !Number.isNaN(record[name])).map(record => Number(record[name]))\n )\n}\n\nconst Accumulators: { [name: string]: (data: GristData, column: ColumnConfig) => string | number } = {\n sum,\n avg,\n count,\n min,\n max\n}\n\nexport function accumulate(data: GristData, column: ColumnConfig, accumulator: AccumulatorObject) {\n accumulator = typeof accumulator === 'object' ? accumulator.type : accumulator\n var func = accumulator as (data: GristData, column: ColumnConfig) => string | number\n\n if (typeof accumulator == 'string') {\n func = Accumulators[accumulator]\n }\n\n return func.call(null, data, column)\n}\n"]}
@@ -4,8 +4,23 @@ import { buildListOptions } from './list-option-builder';
4
4
  import { buildTreeOptions } from './tree-option-builder';
5
5
  import { buildRowsOptions } from './rows-option-builder';
6
6
  import { buildFiltersOptions } from './filters-option-builder';
7
+ function findLastIndexWithCondition(arr, condition) {
8
+ for (let i = arr.length - 1; i >= 0; i--) {
9
+ if (condition(arr[i])) {
10
+ return i;
11
+ }
12
+ }
13
+ return -1;
14
+ }
7
15
  export const buildConfig = (config) => {
8
16
  var { columns = [], rows = {}, pagination, sorters, filters, list, tree, imex } = config;
17
+ /* 마지막 fixed 컬럼 앞의 모든 컬럼의 fixed를 true로 설정한다. */
18
+ const lastFixedIndex = findLastIndexWithCondition(columns, x => !!x.fixed);
19
+ if (lastFixedIndex >= 0) {
20
+ for (let i = 0; i < lastFixedIndex; i++) {
21
+ columns[i].fixed = true;
22
+ }
23
+ }
9
24
  return {
10
25
  ...config,
11
26
  columns: columns.map((column) => buildColumn(column)),
@@ -1 +1 @@
1
- {"version":3,"file":"config-builder.js","sourceRoot":"","sources":["../../../src/configure/config-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAW,EAAe,EAAE;IACtD,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IAExF,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC5B,UAAU;QACV,OAAO;QACP,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC;QACrC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC5B,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC5B,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;KAC7B,CAAA;AACH,CAAC,CAAA","sourcesContent":["import { GristConfig } from '../types'\nimport { buildColumn } from './column-builder'\nimport { buildImexOptions } from './imex-option-builder'\nimport { buildListOptions } from './list-option-builder'\nimport { buildTreeOptions } from './tree-option-builder'\nimport { buildRowsOptions } from './rows-option-builder'\nimport { buildFiltersOptions } from './filters-option-builder'\n\nexport const buildConfig = (config: any): GristConfig => {\n var { columns = [], rows = {}, pagination, sorters, filters, list, tree, imex } = config\n\n return {\n ...config,\n columns: columns.map((column: any) => buildColumn(column)),\n rows: buildRowsOptions(rows),\n pagination,\n sorters,\n filters: buildFiltersOptions(filters),\n list: buildListOptions(list),\n tree: buildTreeOptions(tree),\n imex: buildImexOptions(imex)\n }\n}\n"]}
1
+ {"version":3,"file":"config-builder.js","sourceRoot":"","sources":["../../../src/configure/config-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,SAAS,0BAA0B,CAAC,GAAmB,EAAE,SAAuC;IAC9F,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,CAAA;QACV,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAW,EAAe,EAAE;IACtD,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IAExF,+CAA+C;IAC/C,MAAM,cAAc,GAAG,0BAA0B,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC1E,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAA;QACzB,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC5B,UAAU;QACV,OAAO;QACP,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC;QACrC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC5B,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC5B,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;KAC7B,CAAA;AACH,CAAC,CAAA","sourcesContent":["import { GristConfig, ColumnConfig } from '../types'\nimport { buildColumn } from './column-builder'\nimport { buildImexOptions } from './imex-option-builder'\nimport { buildListOptions } from './list-option-builder'\nimport { buildTreeOptions } from './tree-option-builder'\nimport { buildRowsOptions } from './rows-option-builder'\nimport { buildFiltersOptions } from './filters-option-builder'\n\nfunction findLastIndexWithCondition(arr: ColumnConfig[], condition: (x: ColumnConfig) => boolean) {\n for (let i = arr.length - 1; i >= 0; i--) {\n if (condition(arr[i])) {\n return i\n }\n }\n return -1\n}\n\nexport const buildConfig = (config: any): GristConfig => {\n var { columns = [], rows = {}, pagination, sorters, filters, list, tree, imex } = config\n\n /* 마지막 fixed 컬럼 앞의 모든 컬럼의 fixed를 true로 설정한다. */\n const lastFixedIndex = findLastIndexWithCondition(columns, x => !!x.fixed)\n if (lastFixedIndex >= 0) {\n for (let i = 0; i < lastFixedIndex; i++) {\n columns[i].fixed = true\n }\n }\n\n return {\n ...config,\n columns: columns.map((column: any) => buildColumn(column)),\n rows: buildRowsOptions(rows),\n pagination,\n sorters,\n filters: buildFiltersOptions(filters),\n list: buildListOptions(list),\n tree: buildTreeOptions(tree),\n imex: buildImexOptions(imex)\n }\n}\n"]}
@@ -1,7 +1,18 @@
1
+ const CollapsedAll = () => false;
2
+ const ExpandedAll = () => true;
1
3
  export const buildTreeOptions = (tree) => {
4
+ var { expanded = CollapsedAll } = tree || {};
5
+ switch (expanded) {
6
+ case true:
7
+ expanded = ExpandedAll;
8
+ break;
9
+ case false:
10
+ expanded = CollapsedAll;
11
+ break;
12
+ }
2
13
  return {
3
- childrenProperty: 'children',
4
- ...tree
14
+ ...tree,
15
+ expanded
5
16
  };
6
17
  };
7
18
  //# sourceMappingURL=tree-option-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-option-builder.js","sourceRoot":"","sources":["../../../src/configure/tree-option-builder.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAA4B,EAAc,EAAE;IAC3E,OAAO;QACL,gBAAgB,EAAE,UAAU;QAC5B,GAAG,IAAI;KACR,CAAA;AACH,CAAC,CAAA","sourcesContent":["import { TreeConfig } from '../types'\n\nexport const buildTreeOptions = (tree: TreeConfig | undefined): TreeConfig => {\n return {\n childrenProperty: 'children',\n ...tree\n }\n}\n"]}
1
+ {"version":3,"file":"tree-option-builder.js","sourceRoot":"","sources":["../../../src/configure/tree-option-builder.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,KAAK,CAAA;AAChC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;AAE9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAA4B,EAAc,EAAE;IAC3E,IAAI,EAAE,QAAQ,GAAG,YAAY,EAAE,GAAG,IAAI,IAAI,EAAE,CAAA;IAE5C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,IAAI;YACP,QAAQ,GAAG,WAAW,CAAA;YACtB,MAAK;QACP,KAAK,KAAK;YACR,QAAQ,GAAG,YAAY,CAAA;YACvB,MAAK;IACT,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,QAAQ;KACT,CAAA;AACH,CAAC,CAAA","sourcesContent":["import { TreeConfig } from '../types'\n\nconst CollapsedAll = () => false\nconst ExpandedAll = () => true\n\nexport const buildTreeOptions = (tree: TreeConfig | undefined): TreeConfig => {\n var { expanded = CollapsedAll } = tree || {}\n\n switch (expanded) {\n case true:\n expanded = ExpandedAll\n break\n case false:\n expanded = CollapsedAll\n break\n }\n\n return {\n ...tree,\n expanded\n }\n}\n"]}
@@ -34,9 +34,7 @@ export const ZERO_LIST = {
34
34
  fields: ['name', 'description', 'updatedAt'],
35
35
  details: []
36
36
  };
37
- export const ZERO_TREE = {
38
- childrenProperty: 'children'
39
- };
37
+ export const ZERO_TREE = {};
40
38
  export const ZERO_CONFIG = {
41
39
  columns: ZERO_COLUMNS,
42
40
  rows: ZERO_ROWS,
@@ -1 +1 @@
1
- {"version":3,"file":"zero-config.js","sourceRoot":"","sources":["../../../src/configure/zero-config.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,eAAe,GAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAE,CAAC,CAAA;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAE,CAAC,CAAA;AAEhG,MAAM,CAAC,MAAM,oBAAoB,GAAyB;IACxD,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;CACpB,CAAA;AACD,MAAM,CAAC,MAAM,YAAY,GAAmB,EAAE,CAAA;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAkB,EAAE,CAAA;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAO,EAAE,CAAA;AACjC,MAAM,CAAC,MAAM,UAAU,GAAgB,KAAK,CAAA;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAE,CAAC;KACvB;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,mBAAmB;QAC7B,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,EAAE;KACZ;IACD,QAAQ,EAAE,oBAAoB;IAC9B,KAAK,EAAE,UAAU;CAClB,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,KAAK;IACjB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,eAAe;IAC3B,QAAQ,EAAE,oBAAoB;CAC/B,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC;IAC5C,OAAO,EAAE,EAAE;CACZ,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,gBAAgB,EAAE,UAAU;CAC7B,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,OAAO,EAAE,YAAY;IACrB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;CAChB,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAgB,EAAE,CAAA;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAkB,EAAE,CAAA;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,OAAO,EAAE,YAAY;CACtB,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,UAAU;CAClB,CAAA","sourcesContent":["import {\n ColumnConfig,\n FieldRenderer,\n GristClassifier,\n GristConfig,\n GristData,\n GristEventHandlerSet,\n GristRecord,\n GroupConfig,\n LabelConfig,\n ListConfig,\n TreeConfig,\n RowsConfig\n} from '../types'\n\nexport const ZERO_CLASSIFIER: GristClassifier = (record, rowIndex) => {}\nexport const ZERO_FIELD_RENDERER: FieldRenderer = (value, column, record, rowIndex, owner) => {}\n\nexport const ZERO_EVENTHANDLERSET: GristEventHandlerSet = {\n click: undefined,\n dblclick: undefined\n}\nexport const ZERO_COLUMNS: ColumnConfig[] = []\nexport const ZERO_GROUPS: GroupConfig[] = []\nexport const ZERO_TOTALS: [] = []\nexport const ZERO_LABEL: LabelConfig = false\n\nexport const ZERO_COLUMN: ColumnConfig = {\n type: '',\n name: '',\n header: {\n renderer: column => {}\n },\n record: {\n renderer: ZERO_FIELD_RENDERER,\n classifier: ZERO_CLASSIFIER,\n options: {}\n },\n handlers: ZERO_EVENTHANDLERSET,\n label: ZERO_LABEL\n}\n\nexport const ZERO_ROWS: RowsConfig = {\n appendable: false,\n insertable: false,\n groups: ZERO_GROUPS,\n totals: ZERO_TOTALS,\n classifier: ZERO_CLASSIFIER,\n handlers: ZERO_EVENTHANDLERSET\n}\n\nexport const ZERO_LIST: ListConfig = {\n fields: ['name', 'description', 'updatedAt'],\n details: []\n}\n\nexport const ZERO_TREE: TreeConfig = {\n childrenProperty: 'children'\n}\n\nexport const ZERO_CONFIG: GristConfig = {\n columns: ZERO_COLUMNS,\n rows: ZERO_ROWS,\n list: ZERO_LIST,\n tree: ZERO_TREE\n}\n\nexport const ZERO_RECORD: GristRecord = {}\nexport const ZERO_RECORDS: GristRecord[] = []\n\nexport const ZERO_DATA: GristData = {\n records: ZERO_RECORDS\n}\n\nexport const ZERO_PAGES = [20, 30, 50, 100]\n\nexport const ZERO_PAGINATION = {\n page: 1,\n limit: 20,\n total: 0,\n pages: ZERO_PAGES\n}\n"]}
1
+ {"version":3,"file":"zero-config.js","sourceRoot":"","sources":["../../../src/configure/zero-config.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,eAAe,GAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAE,CAAC,CAAA;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAE,CAAC,CAAA;AAEhG,MAAM,CAAC,MAAM,oBAAoB,GAAyB;IACxD,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;CACpB,CAAA;AACD,MAAM,CAAC,MAAM,YAAY,GAAmB,EAAE,CAAA;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAkB,EAAE,CAAA;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAO,EAAE,CAAA;AACjC,MAAM,CAAC,MAAM,UAAU,GAAgB,KAAK,CAAA;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAE,CAAC;KACvB;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,mBAAmB;QAC7B,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,EAAE;KACZ;IACD,QAAQ,EAAE,oBAAoB;IAC9B,KAAK,EAAE,UAAU;CAClB,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,KAAK;IACjB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,eAAe;IAC3B,QAAQ,EAAE,oBAAoB;CAC/B,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAe;IACnC,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC;IAC5C,OAAO,EAAE,EAAE;CACZ,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAe,EAAE,CAAA;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,OAAO,EAAE,YAAY;IACrB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;CAChB,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAgB,EAAE,CAAA;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAkB,EAAE,CAAA;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC,OAAO,EAAE,YAAY;CACtB,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,UAAU;CAClB,CAAA","sourcesContent":["import {\n ColumnConfig,\n FieldRenderer,\n GristClassifier,\n GristConfig,\n GristData,\n GristEventHandlerSet,\n GristRecord,\n GroupConfig,\n LabelConfig,\n ListConfig,\n TreeConfig,\n RowsConfig\n} from '../types'\n\nexport const ZERO_CLASSIFIER: GristClassifier = (record, rowIndex) => {}\nexport const ZERO_FIELD_RENDERER: FieldRenderer = (value, column, record, rowIndex, owner) => {}\n\nexport const ZERO_EVENTHANDLERSET: GristEventHandlerSet = {\n click: undefined,\n dblclick: undefined\n}\nexport const ZERO_COLUMNS: ColumnConfig[] = []\nexport const ZERO_GROUPS: GroupConfig[] = []\nexport const ZERO_TOTALS: [] = []\nexport const ZERO_LABEL: LabelConfig = false\n\nexport const ZERO_COLUMN: ColumnConfig = {\n type: '',\n name: '',\n header: {\n renderer: column => {}\n },\n record: {\n renderer: ZERO_FIELD_RENDERER,\n classifier: ZERO_CLASSIFIER,\n options: {}\n },\n handlers: ZERO_EVENTHANDLERSET,\n label: ZERO_LABEL\n}\n\nexport const ZERO_ROWS: RowsConfig = {\n appendable: false,\n insertable: false,\n groups: ZERO_GROUPS,\n totals: ZERO_TOTALS,\n classifier: ZERO_CLASSIFIER,\n handlers: ZERO_EVENTHANDLERSET\n}\n\nexport const ZERO_LIST: ListConfig = {\n fields: ['name', 'description', 'updatedAt'],\n details: []\n}\n\nexport const ZERO_TREE: TreeConfig = {}\n\nexport const ZERO_CONFIG: GristConfig = {\n columns: ZERO_COLUMNS,\n rows: ZERO_ROWS,\n list: ZERO_LIST,\n tree: ZERO_TREE\n}\n\nexport const ZERO_RECORD: GristRecord = {}\nexport const ZERO_RECORDS: GristRecord[] = []\n\nexport const ZERO_DATA: GristData = {\n records: ZERO_RECORDS\n}\n\nexport const ZERO_PAGES = [20, 30, 50, 100]\n\nexport const ZERO_PAGINATION = {\n page: 1,\n limit: 20,\n total: 0,\n pages: ZERO_PAGES\n}\n"]}
@@ -3,6 +3,7 @@ import { css, html, LitElement, nothing } from 'lit';
3
3
  import { customElement, property } from 'lit/decorators.js';
4
4
  import { TooltipStyles } from '@operato/styles';
5
5
  import { ZERO_COLUMN } from '../configure/zero-config';
6
+ import { i18next } from '@operato/i18n';
6
7
  const DEFAULT_TEXT_ALIGN = 'left';
7
8
  let DataGridAccumField = class DataGridAccumField extends LitElement {
8
9
  constructor() {
@@ -22,6 +23,11 @@ let DataGridAccumField = class DataGridAccumField extends LitElement {
22
23
  }
23
24
  var { value, column, record, rowIndex } = this;
24
25
  var { renderer } = column.record;
26
+ // tag가 true이면 value 앞에 (sum) 같은 태그 생성
27
+ var { accumulator } = column;
28
+ if (typeof accumulator === 'object' && typeof accumulator.type === 'string' && (accumulator === null || accumulator === void 0 ? void 0 : accumulator.tag)) {
29
+ value = `(${i18next.t(`label.accumulator_${accumulator.type}`)}) ${value}`;
30
+ }
25
31
  return html `${renderer === null || renderer === void 0 ? void 0 : renderer.call(this, value, column, record, rowIndex, this)}`;
26
32
  }
27
33
  updated(changes) {
@@ -1 +1 @@
1
- {"version":3,"file":"data-grid-accum-field.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-accum-field.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAkC,OAAO,EAAE,MAAM,KAAK,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAGtD,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAG1B,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,UAAU;IAA3C;;QAwCwC,UAAK,GAAG,kBAAkB,CAAA;QAC3C,WAAM,GAAgB,EAAE,CAAA;QACxB,WAAM,GAAiB,WAAW,CAAA;QAClC,aAAQ,GAAG,CAAC,CAAC,CAAA;QACb,gBAAW,GAAG,CAAC,CAAA;QACd,YAAO,GAAG,KAAK,CAAA;QAChB,UAAK,GAAG,EAAE,CAAA;QACN,eAAU,GAAQ,KAAK,CAAA;IA4BzD,CAAC;IA1BC,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAAA,GAAG,OAAO,EAAE,CAAA;QACxF,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QAC9C,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAA;QAEhC,OAAO,IAAI,CAAA,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAA;IAC7E,CAAC;IAED,OAAO,CAAC,OAA6B;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,kBAAkB,CAAA;YAC1D,IAAI,KAAK,IAAI,kBAAkB,EAAE,CAAC;gBAChC,IAAI,OAAO,GAAG,QAAQ,CAAA;gBACtB,QAAQ,KAAK,EAAE,CAAC;oBACd,KAAK,OAAO;wBACV,OAAO,GAAG,UAAU,CAAA;wBACpB,MAAK;gBACT,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAA;gBACpE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;;AAzEM,yBAAM,GAAG;IACd,aAAa;IACb,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkCF;CACF,AArCY,CAqCZ;AAE4C;IAA5C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;iDAA2B;AAC3C;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDAAyB;AACxB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDAAmC;AAClC;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDAAc;AACb;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uDAAgB;AACd;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;mDAAgB;AAChB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAAW;AACN;IAA/B,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;sDAAwB;AA/C5C,kBAAkB;IAD9B,aAAa,CAAC,qBAAqB,CAAC;GACxB,kBAAkB,CA2E9B","sourcesContent":["import { css, html, LitElement, PropertyValues, TemplateResult, nothing } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { TooltipStyles } from '@operato/styles'\n\nimport { ZERO_COLUMN } from '../configure/zero-config'\nimport { ColumnConfig, GristRecord } from '../types'\n\nconst DEFAULT_TEXT_ALIGN = 'left'\n\n@customElement('ox-grid-accum-field')\nexport class DataGridAccumField extends LitElement {\n static styles = [\n TooltipStyles,\n css`\n :host {\n display: flex;\n\n align-items: center;\n justify-content: var(--data-grid-field-justify-content, flex-start);\n position: relative;\n\n white-space: nowrap;\n background-color: var(--grid-accum-record-background-color, #ccc);\n border: 1px solid transparent;\n border-width: 1px 0;\n border-bottom: var(--grid-record-border-bottom);\n\n font-size: var(--grid-record-wide-fontsize);\n min-height: 19px;\n }\n\n span,\n pre {\n display: block;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n * {\n margin: 0;\n text-align: var(--data-grid-field-text-align);\n }\n\n *[center] {\n flex: none;\n margin: 0 auto;\n }\n `\n ]\n\n @property({ type: String, attribute: true }) align = DEFAULT_TEXT_ALIGN\n @property({ type: Object }) record: GristRecord = {}\n @property({ type: Object }) column: ColumnConfig = ZERO_COLUMN\n @property({ type: Number }) rowIndex = -1\n @property({ type: Number }) columnIndex = 0\n @property({ type: Boolean }) editing = false\n @property({ type: Object }) value = {}\n @property({ attribute: false }) emphasized: any = false\n\n render(): TemplateResult {\n if (!this.column || !this.column.accumulator) {\n return this.columnIndex == 0 ? html`<mwc-icon>functions</mwc-icon>` : html`${nothing}`\n }\n\n var { value, column, record, rowIndex } = this\n var { renderer } = column.record\n\n return html`${renderer?.call(this, value, column, record, rowIndex, this)}`\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('column')) {\n var align = this.column.record.align || DEFAULT_TEXT_ALIGN\n if (align != DEFAULT_TEXT_ALIGN) {\n let justify = 'center'\n switch (align) {\n case 'right':\n justify = 'flex-end'\n break\n }\n this.style.setProperty('--data-grid-field-justify-content', justify)\n this.style.setProperty('--data-grid-field-text-align', align)\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"data-grid-accum-field.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-accum-field.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement, PropertyValues, TemplateResult, nothing } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { TooltipStyles } from '@operato/styles'\n\nimport { ZERO_COLUMN } from '../configure/zero-config'\nimport { AccumulatorObject, ColumnConfig, GristRecord } from '../types'\nimport { i18next } from '@operato/i18n'\n\nconst DEFAULT_TEXT_ALIGN = 'left'\n\n@customElement('ox-grid-accum-field')\nexport class DataGridAccumField extends LitElement {\n static styles = [\n TooltipStyles,\n css`\n :host {\n display: flex;\n\n align-items: center;\n justify-content: var(--data-grid-field-justify-content, flex-start);\n position: relative;\n\n white-space: nowrap;\n background-color: var(--grid-accum-record-background-color, #ccc);\n border: 1px solid transparent;\n border-width: 1px 0;\n border-bottom: var(--grid-record-border-bottom);\n\n font-size: var(--grid-record-wide-fontsize);\n min-height: 19px;\n }\n\n span,\n pre {\n display: block;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n * {\n margin: 0;\n text-align: var(--data-grid-field-text-align);\n }\n\n *[center] {\n flex: none;\n margin: 0 auto;\n }\n `\n ]\n\n @property({ type: String, attribute: true }) align = DEFAULT_TEXT_ALIGN\n @property({ type: Object }) record: GristRecord = {}\n @property({ type: Object }) column: ColumnConfig = ZERO_COLUMN\n @property({ type: Number }) rowIndex = -1\n @property({ type: Number }) columnIndex = 0\n @property({ type: Boolean }) editing = false\n @property({ type: Object }) value = {}\n @property({ attribute: false }) emphasized: any = false\n\n render(): TemplateResult {\n if (!this.column || !this.column.accumulator) {\n return this.columnIndex == 0 ? html`<mwc-icon>functions</mwc-icon>` : html`${nothing}`\n }\n\n var { value, column, record, rowIndex } = this\n var { renderer } = column.record\n\n // tag가 true이면 value 앞에 (sum) 같은 태그 생성\n var { accumulator } = column\n if (typeof accumulator === 'object' && typeof accumulator.type === 'string' && accumulator?.tag) {\n value = `(${i18next.t(`label.accumulator_${accumulator.type}`)}) ${value}`\n }\n\n return html`${renderer?.call(this, value, column, record, rowIndex, this)}`\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('column')) {\n var align = this.column.record.align || DEFAULT_TEXT_ALIGN\n if (align != DEFAULT_TEXT_ALIGN) {\n let justify = 'center'\n switch (align) {\n case 'right':\n justify = 'flex-end'\n break\n }\n this.style.setProperty('--data-grid-field-justify-content', justify)\n this.style.setProperty('--data-grid-field-text-align', align)\n }\n }\n }\n}\n"]}
@@ -34,7 +34,6 @@ export declare class DataGrist extends LitElement implements DataConsumer {
34
34
  private orginPaddingTop?;
35
35
  private originMarginTop?;
36
36
  private lastLocation;
37
- private childrenProperty?;
38
37
  private popstateEventHandler;
39
38
  private fetchParamsChangeEventHandler;
40
39
  firstUpdated(): Promise<void>;
@@ -46,9 +45,6 @@ export declare class DataGrist extends LitElement implements DataConsumer {
46
45
  private setHeadroom;
47
46
  render(): import("lit").TemplateResult<1>;
48
47
  private onKeydown;
49
- private onCollapsed;
50
- private onExpanded;
51
- private onCheckInTree;
52
48
  get state(): string;
53
49
  undo(): void;
54
50
  redo(): void;
@@ -80,7 +76,6 @@ export declare class DataGrist extends LitElement implements DataConsumer {
80
76
  showHeadroom(): void;
81
77
  hideHeadroom(): void;
82
78
  toggleHeadroom(): void;
83
- traverse(record: GristRecord, __depth__?: number): GristRecord[];
84
79
  /**
85
80
  * Forced internal data to be reflected on the screen
86
81
  * Data changing through a normal method is automatically reflected on the screen, so it is a method that does not need to be used in general.
@@ -96,6 +91,8 @@ export declare class DataGrist extends LitElement implements DataConsumer {
96
91
  * TODO tree 형태의 데이타로 _data를 만들 때, children, collapsed 등을 감안한다.
97
92
  */
98
93
  reset(): void;
94
+ private traverseReset;
95
+ private traverseExpanded;
99
96
  checkDirties(): void;
100
97
  cloneSelectedRecords(): void;
101
98
  deleteSelectedRecords(dirty?: boolean): void;
@@ -122,7 +122,6 @@ let DataGrist = class DataGrist extends LitElement {
122
122
  composed: true,
123
123
  detail: this.compiledConfig
124
124
  }));
125
- this.childrenProperty = this.compiledConfig.tree.childrenProperty;
126
125
  this.pagination = this.compiledConfig.pagination || {};
127
126
  if (!this.urlParamsSensitive) {
128
127
  const sorters = (_a = this.compiledConfig) === null || _a === void 0 ? void 0 : _a.sorters;
@@ -181,13 +180,7 @@ let DataGrist = class DataGrist extends LitElement {
181
180
  render() {
182
181
  const empty = !this._showSpinner && this._data.records.length == 0;
183
182
  return html `
184
- <div
185
- id="wrap"
186
- @keydown=${(e) => this.onKeydown(e)}
187
- @collapsed=${(e) => this.onCollapsed(e)}
188
- @expanded=${(e) => this.onExpanded(e)}
189
- @check-in-tree=${(e) => this.onCheckInTree(e)}
190
- >
183
+ <div id="wrap" @keydown=${(e) => this.onKeydown(e)}>
191
184
  ${this.mode == 'GRID'
192
185
  ? html `
193
186
  <ox-grid
@@ -242,68 +235,21 @@ let DataGrist = class DataGrist extends LitElement {
242
235
  }
243
236
  }
244
237
  }
245
- onCollapsed(e) {
246
- const record = e.detail;
247
- record.__expanded__ = false;
248
- this.refresh();
249
- }
250
- onExpanded(e) {
251
- const record = e.detail;
252
- record.__expanded__ = true;
253
- this.refresh();
254
- }
255
- onCheckInTree(e) {
256
- const self = this;
257
- function walkTreeCheckedUpdate(record, checked) {
258
- const children = record[self.childrenProperty];
259
- children === null || children === void 0 ? void 0 : children.forEach(child => walkTreeCheckedUpdate(child, checked));
260
- record.__check_in_tree__ = checked;
261
- record.__selected__ = checked == 'checked';
262
- }
263
- function updateCheckedAll(record) {
264
- /* 자식들의 checked 상태로 record의 checked 상태를 수정한다. */
265
- var children = record[self.childrenProperty];
266
- if (!children || children.length == 0) {
267
- return;
268
- }
269
- children.forEach(child => updateCheckedAll(child));
270
- var checked;
271
- children.forEach(child => {
272
- const { __check_in_tree__ } = child;
273
- if (__check_in_tree__ == 'half-checked') {
274
- checked = 'half-checked';
275
- }
276
- else if (__check_in_tree__ == 'checked') {
277
- checked = checked == 'checked' || !checked ? 'checked' : 'half-checked';
278
- }
279
- else {
280
- checked = checked == 'unchecked' || !checked ? 'unchecked' : 'half-checked';
281
- }
282
- });
283
- record.__check_in_tree__ = checked;
284
- record.__selected__ = checked == 'checked';
285
- }
286
- e.stopPropagation();
287
- const record = e.detail;
288
- var checked = record.__check_in_tree__;
289
- walkTreeCheckedUpdate(record, !checked || checked == 'unchecked' ? 'checked' : 'unchecked');
290
- const toplevelRecords = this._data.records.filter(record => !record.__depth__); /* __depth__ 가 설정되지 않았거나, 0 인 경우만 수집 */
291
- toplevelRecords.forEach(record => updateCheckedAll(record));
292
- this.refresh();
293
- }
294
238
  get state() {
295
- return JSON.stringify(this._data);
239
+ return JSON.stringify(this.dirtyData);
296
240
  }
297
241
  undo() {
298
242
  var _a, _b;
299
- if (!((_a = this.timeCapsule) === null || _a === void 0 ? void 0 : _a.backwardable))
243
+ if (!((_a = this.timeCapsule) === null || _a === void 0 ? void 0 : _a.backwardable)) {
300
244
  return;
245
+ }
301
246
  this._data = JSON.parse((_b = this.timeCapsule) === null || _b === void 0 ? void 0 : _b.backward());
302
247
  }
303
248
  redo() {
304
249
  var _a, _b;
305
- if (!((_a = this.timeCapsule) === null || _a === void 0 ? void 0 : _a.forwardable))
250
+ if (!((_a = this.timeCapsule) === null || _a === void 0 ? void 0 : _a.forwardable)) {
306
251
  return;
252
+ }
307
253
  this._data = JSON.parse((_b = this.timeCapsule) === null || _b === void 0 ? void 0 : _b.forward());
308
254
  }
309
255
  async fetch(reset = true) {
@@ -371,7 +317,7 @@ let DataGrist = class DataGrist extends LitElement {
371
317
  if (changes.has('selectedRecords')) {
372
318
  var { records } = this.data || [];
373
319
  var selectedRecords = this.selectedRecords || [];
374
- var _records = this._data.records;
320
+ var _records = this.dirtyData.records;
375
321
  /* 원본데이타에서 index를 찾아서, 복사본 데이타의 selected를 설정한다. */
376
322
  selectedRecords.forEach(selected => {
377
323
  var index = records.indexOf(selected);
@@ -495,6 +441,7 @@ let DataGrist = class DataGrist extends LitElement {
495
441
  delete copied.__depth__;
496
442
  delete copied.__expanded__;
497
443
  delete copied.__check_in_tree__;
444
+ delete copied.__children__;
498
445
  delete copied.__typename;
499
446
  return copied;
500
447
  })
@@ -519,16 +466,6 @@ let DataGrist = class DataGrist extends LitElement {
519
466
  this.setHeadroom();
520
467
  }
521
468
  }
522
- traverse(record, __depth__ = 0) {
523
- const children = record[this.childrenProperty];
524
- record.__depth__ = __depth__;
525
- if (record.__expanded__ && children) {
526
- return [record].concat(...children.map(child => this.traverse(child, __depth__ + 1)));
527
- }
528
- else {
529
- return [record];
530
- }
531
- }
532
469
  /**
533
470
  * Forced internal data to be reflected on the screen
534
471
  * Data changing through a normal method is automatically reflected on the screen, so it is a method that does not need to be used in general.
@@ -536,20 +473,7 @@ let DataGrist = class DataGrist extends LitElement {
536
473
  * @method
537
474
  */
538
475
  refresh() {
539
- /*
540
- - TODO 여기에서 TREE 형태 데이터의 접고, 펴는 것을 재구성한다.
541
- - 동적으로 서브항목을 fetch 하는 기능은 제공하지 않는다.
542
-
543
- 1. 빈배열에서 시작한다.
544
- 2. 기존 배열을 traverse하면서, collapsed 여부에 따라서, 자식의 포함여부를 결정하고 준비한 배열에 하나씩 추가한다.
545
-
546
- */
547
- const { records } = this._data;
548
- const toplevelRecords = records.filter(record => !record.__depth__); /* __depth__ 가 설정되지 않았거나, 0 인 경우만 수집 */
549
- this._data = {
550
- ...this._data,
551
- records: [].concat(...toplevelRecords.map(record => this.traverse(record)))
552
- };
476
+ this.grist.refresh();
553
477
  }
554
478
  /**
555
479
  * This method cancels all changes in the dirty state before being reflected in the data.
@@ -561,15 +485,12 @@ let DataGrist = class DataGrist extends LitElement {
561
485
  reset() {
562
486
  var _a, _b;
563
487
  var { limit = ZERO_PAGINATION.limit, page = ZERO_PAGINATION.page, total = ZERO_PAGINATION.total, records = [] } = this.data || ZERO_PAGINATION;
488
+ const { childrenProperty, expanded } = this.compiledConfig.tree;
564
489
  /* 원본 데이타를 남기고, 복사본(_data)을 사용한다. */
565
- records = [].concat(...records.map(record => this.traverse(record)));
566
- records = records.map((record, idx) => {
567
- return {
568
- ...record,
569
- __seq__: this.mode == 'GRID' ? (page - 1) * limit + idx + 1 : idx + 1,
570
- __origin__: record
571
- };
572
- });
490
+ records = [].concat(...records.map((record, idx) => this.traverseReset(record, this.mode == 'GRID' ? (page - 1) * limit + idx + 1 : idx + 1, 0, childrenProperty, expanded)));
491
+ if (childrenProperty) {
492
+ records = [].concat(...records.map(record => this.traverseExpanded(record)));
493
+ }
573
494
  this._data = {
574
495
  limit,
575
496
  page,
@@ -579,6 +500,29 @@ let DataGrist = class DataGrist extends LitElement {
579
500
  (_a = this.timeCapsule) === null || _a === void 0 ? void 0 : _a.reset();
580
501
  (_b = this.snapshotTaker) === null || _b === void 0 ? void 0 : _b.take(true);
581
502
  }
503
+ traverseReset(record, seq, __depth__, childrenProperty, expanded) {
504
+ const copied = {
505
+ ...record,
506
+ __seq__: seq,
507
+ __origin__: record
508
+ };
509
+ if (childrenProperty) {
510
+ const children = record[childrenProperty];
511
+ const __expanded__ = expanded(record);
512
+ const __children__ = (children || []).map(child => this.traverseReset(child, seq, __depth__ + 1, childrenProperty, expanded));
513
+ Object.assign(copied, { __depth__, __children__, __expanded__ });
514
+ }
515
+ return copied;
516
+ }
517
+ traverseExpanded(record) {
518
+ const { __expanded__, __children__ = [] } = record;
519
+ if (__expanded__ && __children__.length > 0) {
520
+ return [record].concat(...__children__.map(child => this.traverseExpanded(child)));
521
+ }
522
+ else {
523
+ return [record];
524
+ }
525
+ }
582
526
  checkDirties() {
583
527
  var _a;
584
528
  const records = this.dirtyRecords;
@@ -599,7 +543,7 @@ let DataGrist = class DataGrist extends LitElement {
599
543
  delete record['__dirty__'];
600
544
  }
601
545
  }
602
- this._data = { ...this._data };
546
+ this._data = { ...this.dirtyData };
603
547
  (_a = this.snapshotTaker) === null || _a === void 0 ? void 0 : _a.touch();
604
548
  }
605
549
  cloneSelectedRecords() {
@@ -613,8 +557,8 @@ let DataGrist = class DataGrist extends LitElement {
613
557
  .forEach(column => {
614
558
  cloned[column.name] = record[column.name];
615
559
  });
616
- const rowIndex = this._data.records.findIndex(rec => rec === record);
617
- this._data.records.splice(rowIndex + 1, 0, cloned);
560
+ const rowIndex = this.dirtyData.records.findIndex(rec => rec === record);
561
+ this.dirtyData.records.splice(rowIndex + 1, 0, cloned);
618
562
  });
619
563
  this.checkDirties();
620
564
  }
@@ -624,10 +568,8 @@ let DataGrist = class DataGrist extends LitElement {
624
568
  if (dirty) {
625
569
  record.__dirty__ = '-';
626
570
  }
627
- else {
628
- }
629
- const rowIndex = this._data.records.findIndex(rec => rec === record);
630
- this._data.records.splice(rowIndex, 1);
571
+ const rowIndex = this.dirtyData.records.findIndex(rec => rec === record);
572
+ this.dirtyData.records.splice(rowIndex, 1);
631
573
  });
632
574
  this.checkDirties();
633
575
  }