@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.
- package/CHANGELOG.md +18 -0
- package/dist/src/accumulator/accumulator.d.ts +2 -2
- package/dist/src/accumulator/accumulator.js +1 -0
- package/dist/src/accumulator/accumulator.js.map +1 -1
- package/dist/src/configure/config-builder.js +15 -0
- package/dist/src/configure/config-builder.js.map +1 -1
- package/dist/src/configure/tree-option-builder.js +13 -2
- package/dist/src/configure/tree-option-builder.js.map +1 -1
- package/dist/src/configure/zero-config.js +1 -3
- package/dist/src/configure/zero-config.js.map +1 -1
- package/dist/src/data-grid/data-grid-accum-field.js +6 -0
- package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
- package/dist/src/data-grist.d.ts +2 -5
- package/dist/src/data-grist.js +42 -100
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/data-manipulator.d.ts +11 -0
- package/dist/src/data-manipulator.js +93 -12
- package/dist/src/data-manipulator.js.map +1 -1
- package/dist/src/renderers/ox-grist-renderer-tree.js +3 -3
- package/dist/src/renderers/ox-grist-renderer-tree.js.map +1 -1
- package/dist/src/types.d.ts +7 -1
- package/dist/src/types.js.map +1 -1
- package/dist/stories/accumulator.stories.js +18 -1
- package/dist/stories/accumulator.stories.js.map +1 -1
- package/dist/stories/fixed-column.stories.js +5 -10
- package/dist/stories/fixed-column.stories.js.map +1 -1
- package/dist/stories/grist-modes.stories.js +1 -0
- package/dist/stories/grist-modes.stories.js.map +1 -1
- package/dist/stories/tree-column-with-checkbox.stories.js +5 -2
- package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
- package/dist/stories/tree-column.stories.js +3 -1
- package/dist/stories/tree-column.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/accumulator/accumulator.ts +3 -2
- package/src/configure/config-builder.ts +18 -1
- package/src/configure/tree-option-builder.ts +16 -2
- package/src/configure/zero-config.ts +1 -3
- package/src/data-grid/data-grid-accum-field.ts +8 -1
- package/src/data-grist.ts +70 -124
- package/src/data-manipulator.ts +119 -13
- package/src/renderers/ox-grist-renderer-tree.ts +3 -3
- package/src/types.ts +10 -2
- package/stories/accumulator.stories.ts +18 -1
- package/stories/fixed-column.stories.ts +5 -10
- package/stories/grist-modes.stories.ts +1 -0
- package/stories/tree-column-with-checkbox.stories.ts +5 -2
- package/stories/tree-column.stories.ts +3 -1
- package/translations/en.json +7 -0
- package/translations/ja.json +7 -0
- package/translations/ko.json +7 -0
- package/translations/ms.json +7 -0
- package/translations/zh.json +7 -0
- package/dist/stories/tree-column.stories copy.d.ts +0 -26
- package/dist/stories/tree-column.stories copy.js +0 -326
- 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 {
|
|
2
|
-
export declare function accumulate(data: GristData, column: ColumnConfig, accumulator:
|
|
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,
|
|
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
|
-
|
|
4
|
-
|
|
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,
|
|
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
|
|
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;
|
|
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"]}
|
package/dist/src/data-grist.d.ts
CHANGED
|
@@ -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;
|
package/dist/src/data-grist.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
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.
|
|
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.
|
|
617
|
-
this.
|
|
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
|
-
|
|
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
|
}
|