@operato/data-grist 2.0.0-alpha.6 → 2.0.0-alpha.61
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 +272 -0
- package/dist/src/accumulator/accumulator.js +4 -4
- package/dist/src/accumulator/accumulator.js.map +1 -1
- package/dist/src/configure/rows-option-builder.js +2 -1
- package/dist/src/configure/rows-option-builder.js.map +1 -1
- package/dist/src/configure/zero-config.js +1 -0
- package/dist/src/configure/zero-config.js.map +1 -1
- package/dist/src/data-card/data-card.d.ts +1 -1
- package/dist/src/data-card/event-handlers/record-card-click-handler.js +1 -1
- package/dist/src/data-card/event-handlers/record-card-click-handler.js.map +1 -1
- package/dist/src/data-card/record-card.d.ts +1 -1
- package/dist/src/data-grid/data-grid-accum-field.js +3 -2
- package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-body.d.ts +3 -3
- package/dist/src/data-grid/data-grid-body.js +9 -4
- package/dist/src/data-grid/data-grid-body.js.map +1 -1
- package/dist/src/data-grid/data-grid-field.d.ts +1 -1
- package/dist/src/data-grid/data-grid-field.js +2 -2
- package/dist/src/data-grid/data-grid-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-footer.d.ts +1 -1
- package/dist/src/data-grid/data-grid-header.js +26 -25
- package/dist/src/data-grid/data-grid-header.js.map +1 -1
- package/dist/src/data-grid/data-grid.d.ts +1 -1
- package/dist/src/data-grid/data-grid.js +1 -1
- package/dist/src/data-grid/data-grid.js.map +1 -1
- package/dist/src/data-grist.d.ts +226 -4
- package/dist/src/data-grist.js +196 -4
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/data-list/data-list-gutter.js +12 -0
- package/dist/src/data-list/data-list-gutter.js.map +1 -1
- package/dist/src/data-list/data-list.d.ts +1 -1
- package/dist/src/data-list/event-handlers/record-partial-click-handler.js +1 -1
- package/dist/src/data-list/event-handlers/record-partial-click-handler.js.map +1 -1
- package/dist/src/data-list/record-partial.d.ts +1 -1
- package/dist/src/data-list/record-partial.js +2 -0
- package/dist/src/data-list/record-partial.js.map +1 -1
- package/dist/src/data-manipulator.d.ts +6 -6
- package/dist/src/data-manipulator.js +44 -29
- package/dist/src/data-manipulator.js.map +1 -1
- package/dist/src/data-report/data-report-body.d.ts +1 -1
- package/dist/src/data-report/data-report-component.d.ts +1 -1
- package/dist/src/data-report.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-checkbox.d.ts +3 -2
- package/dist/src/editors/ox-grist-editor-checkbox.js +9 -2
- package/dist/src/editors/ox-grist-editor-checkbox.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-color.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-date.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-datetime.d.ts +2 -2
- package/dist/src/editors/ox-grist-editor-datetime.js +1 -2
- package/dist/src/editors/ox-grist-editor-datetime.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-email.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-file.d.ts +3 -2
- package/dist/src/editors/ox-grist-editor-file.js +8 -2
- package/dist/src/editors/ox-grist-editor-file.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-image.d.ts +2 -2
- package/dist/src/editors/ox-grist-editor-image.js +8 -8
- package/dist/src/editors/ox-grist-editor-image.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-month.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-multiple-select.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-number.d.ts +3 -2
- package/dist/src/editors/ox-grist-editor-number.js +10 -9
- package/dist/src/editors/ox-grist-editor-number.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-password.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-select.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-tel.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-text.d.ts +2 -1
- package/dist/src/editors/ox-grist-editor-text.js +3 -0
- package/dist/src/editors/ox-grist-editor-text.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-textarea.d.ts +2 -1
- package/dist/src/editors/ox-grist-editor-textarea.js +3 -0
- package/dist/src/editors/ox-grist-editor-textarea.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-time.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-tree.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-week.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor.d.ts +4 -4
- package/dist/src/editors/ox-grist-editor.js +14 -12
- package/dist/src/editors/ox-grist-editor.js.map +1 -1
- package/dist/src/editors/ox-input-tree.d.ts +1 -1
- package/dist/src/empty-note.d.ts +1 -1
- package/dist/src/filters/filter-range-date.js +12 -1
- package/dist/src/filters/filter-range-date.js.map +1 -1
- package/dist/src/filters/filters-form.d.ts +1 -0
- package/dist/src/filters/filters-form.js +41 -23
- package/dist/src/filters/filters-form.js.map +1 -1
- package/dist/src/handlers/contextmenu-tree-mutation.js +1 -19
- package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +0 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/record-view/record-creator.d.ts +1 -1
- package/dist/src/record-view/record-view-body.d.ts +2 -2
- package/dist/src/record-view/record-view.d.ts +1 -1
- package/dist/src/renderers/ox-grist-renderer-progress.d.ts +1 -1
- package/dist/src/renderers/ox-grist-renderer-tree.d.ts +1 -1
- package/dist/src/renderers/ox-grist-renderer.d.ts +2 -2
- package/dist/src/types.d.ts +1 -8
- package/dist/src/types.js.map +1 -1
- package/dist/stories/accumulator.stories.js +117 -114
- package/dist/stories/accumulator.stories.js.map +1 -1
- package/dist/stories/dynamic-editable.stories.js +89 -80
- package/dist/stories/dynamic-editable.stories.js.map +1 -1
- package/dist/stories/grist-modes.stories.js +23 -2
- package/dist/stories/grist-modes.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/default-value/default-value.md +1 -1
- package/docs/default-value/value-generator/date-generator.md +2 -2
- package/docs/default-value/value-generator/month-date-generator.md +2 -2
- package/docs/default-value/value-generator/week-date-generator.md +2 -2
- package/docs/default-value/value-generator/year-date-generator.md +2 -2
- package/package.json +20 -19
- package/src/accumulator/accumulator.ts +4 -4
- package/src/configure/rows-option-builder.ts +11 -1
- package/src/configure/zero-config.ts +1 -0
- package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
- package/src/data-grid/data-grid-accum-field.ts +3 -2
- package/src/data-grid/data-grid-body.ts +10 -5
- package/src/data-grid/data-grid-field.ts +1 -1
- package/src/data-grid/data-grid-header.ts +57 -56
- package/src/data-grid/data-grid.ts +3 -3
- package/src/data-grist.ts +251 -4
- package/src/data-list/data-list-gutter.ts +12 -0
- package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
- package/src/data-list/record-partial.ts +2 -0
- package/src/data-manipulator.ts +52 -31
- package/src/editors/ox-grist-editor-checkbox.ts +12 -2
- package/src/editors/ox-grist-editor-datetime.ts +1 -2
- package/src/editors/ox-grist-editor-file.ts +12 -2
- package/src/editors/ox-grist-editor-image.ts +10 -7
- package/src/editors/ox-grist-editor-number.ts +11 -9
- package/src/editors/ox-grist-editor-text.ts +4 -0
- package/src/editors/ox-grist-editor-textarea.ts +4 -0
- package/src/editors/ox-grist-editor.ts +14 -10
- package/src/filters/filter-range-date.ts +16 -1
- package/src/filters/filters-form.ts +69 -46
- package/src/handlers/contextmenu-tree-mutation.ts +1 -19
- package/src/index.ts +0 -1
- package/src/types.ts +1 -9
- package/stories/accumulator.stories.ts +118 -119
- package/stories/dynamic-editable.stories.ts +96 -86
- package/stories/grist-modes.stories.ts +23 -2
- package/themes/grist-theme.css +1 -1
- package/dist/src/value-generator/date-generator.d.ts +0 -6
- package/dist/src/value-generator/date-generator.js +0 -30
- package/dist/src/value-generator/date-generator.js.map +0 -1
- package/dist/src/value-generator/hour-time-generator.d.ts +0 -7
- package/dist/src/value-generator/hour-time-generator.js +0 -29
- package/dist/src/value-generator/hour-time-generator.js.map +0 -1
- package/dist/src/value-generator/index.d.ts +0 -1
- package/dist/src/value-generator/index.js +0 -2
- package/dist/src/value-generator/index.js.map +0 -1
- package/dist/src/value-generator/minute-time-generator.d.ts +0 -7
- package/dist/src/value-generator/minute-time-generator.js +0 -29
- package/dist/src/value-generator/minute-time-generator.js.map +0 -1
- package/dist/src/value-generator/month-date-generator.d.ts +0 -7
- package/dist/src/value-generator/month-date-generator.js +0 -31
- package/dist/src/value-generator/month-date-generator.js.map +0 -1
- package/dist/src/value-generator/now-generator.d.ts +0 -4
- package/dist/src/value-generator/now-generator.js +0 -8
- package/dist/src/value-generator/now-generator.js.map +0 -1
- package/dist/src/value-generator/registry.d.ts +0 -11
- package/dist/src/value-generator/registry.js +0 -50
- package/dist/src/value-generator/registry.js.map +0 -1
- package/dist/src/value-generator/time-generator.d.ts +0 -6
- package/dist/src/value-generator/time-generator.js +0 -28
- package/dist/src/value-generator/time-generator.js.map +0 -1
- package/dist/src/value-generator/today-generator.d.ts +0 -4
- package/dist/src/value-generator/today-generator.js +0 -8
- package/dist/src/value-generator/today-generator.js.map +0 -1
- package/dist/src/value-generator/week-date-generator.d.ts +0 -7
- package/dist/src/value-generator/week-date-generator.js +0 -29
- package/dist/src/value-generator/week-date-generator.js.map +0 -1
- package/dist/src/value-generator/year-date-generator.d.ts +0 -7
- package/dist/src/value-generator/year-date-generator.js +0 -29
- package/dist/src/value-generator/year-date-generator.js.map +0 -1
- package/src/value-generator/date-generator.ts +0 -35
- package/src/value-generator/hour-time-generator.ts +0 -43
- package/src/value-generator/index.ts +0 -1
- package/src/value-generator/minute-time-generator.ts +0 -43
- package/src/value-generator/month-date-generator.ts +0 -38
- package/src/value-generator/now-generator.ts +0 -10
- package/src/value-generator/registry.ts +0 -58
- package/src/value-generator/time-generator.ts +0 -33
- package/src/value-generator/today-generator.ts +0 -10
- package/src/value-generator/week-date-generator.ts +0 -40
- package/src/value-generator/year-date-generator.ts +0 -36
@@ -12,7 +12,7 @@ function getRelativeDate(params: RelativeDateParams = {}): Date | number | strin
|
|
12
12
|
|
13
13
|
이 함수는 `RelativeDateParams`라는 이름의 타입의 매개변수 객체를 받습니다. 이 객체의 필드에 대한 상세한 정보는 다음과 같습니다:
|
14
14
|
|
15
|
-
- `
|
15
|
+
- `relativeDays?: number`: 상대적인 날짜를 나타내는 숫자입니다. 이 값은 현재 날짜로부터의 일 수를 나타냅니다. 예를 들어, 이 값이 3이면 현재 날짜로부터 3일 뒤를 나타냅니다. 이 값이 주어지지 않으면 기본값은 0입니다, 즉 현재 날짜를 의미합니다.
|
16
16
|
|
17
17
|
- `timeZone?: string`: 날짜를 얻고자 하는 시간대를 나타내는 문자열입니다. 이 값이 주어지지 않으면 사용자의 로컬 시간대가 사용됩니다.
|
18
18
|
|
@@ -29,7 +29,7 @@ function getRelativeDate(params: RelativeDateParams = {}): Date | number | strin
|
|
29
29
|
|
30
30
|
```typescript
|
31
31
|
const relativeDate = getRelativeDate({
|
32
|
-
|
32
|
+
relativeDays: 1,
|
33
33
|
timeZone: 'Asia/Seoul',
|
34
34
|
format: 'date'
|
35
35
|
})
|
@@ -14,7 +14,7 @@ function getRelativeMonthDate(params: RelativeMonthDateParams = {}): string | nu
|
|
14
14
|
|
15
15
|
- `relativeMonths?: number`: 상대적인 월을 나타내는 숫자입니다. 이 값은 현재 날짜로부터의 월 수를 나타냅니다. 예를 들어, 이 값이 3이면 현재 날짜로부터 3개월 뒤를 나타냅니다. 이 값이 주어지지 않으면 기본값은 0입니다, 즉 현재 월을 의미합니다.
|
16
16
|
|
17
|
-
- `
|
17
|
+
- `relativeDays?: number`: 상대적인 일수를 나타내는 숫자입니다. 이 값은 현재 날짜로부터의 일 수를 나타냅니다. 예를 들어, 이 값이 2이면 현재 날짜로부터 2일 뒤를 나타냅니다. 이 값이 주어지지 않으면 기본값은 0입니다, 즉 현재 날짜를 의미합니다.
|
18
18
|
|
19
19
|
- `timeZone?: string`: 날짜를 얻고자 하는 시간대를 나타내는 문자열입니다. 이 값이 주어지지 않으면 사용자의 로컬 시간대가 사용됩니다.
|
20
20
|
|
@@ -32,7 +32,7 @@ function getRelativeMonthDate(params: RelativeMonthDateParams = {}): string | nu
|
|
32
32
|
```typescript
|
33
33
|
const relativeMonthDate = getRelativeMonthDate({
|
34
34
|
relativeMonths: 2,
|
35
|
-
|
35
|
+
relativeDays: 3,
|
36
36
|
timeZone: 'Asia/Seoul',
|
37
37
|
format: 'date'
|
38
38
|
})
|
@@ -14,7 +14,7 @@ function getRelativeWeekDate(params: RelativeWeekDateParams = {}): string | numb
|
|
14
14
|
|
15
15
|
- `relativeWeeks?: number`: 상대적인 주를 나타내는 숫자입니다. 이 값은 현재 날짜로부터의 주 수를 나타냅니다. 예를 들어, 이 값이 3이면 현재 날짜로부터 3주 뒤를 나타냅니다. 이 값이 주어지지 않으면 기본값은 0입니다, 즉 현재 주를 의미합니다.
|
16
16
|
|
17
|
-
- `
|
17
|
+
- `relativeDays?: number`: 상대적인 일수를 나타내는 숫자입니다. 이 값은 현재 날짜로부터의 일 수를 나타냅니다. 예를 들어, 이 값이 2이면 현재 날짜로부터 2일 뒤를 나타냅니다. 이 값이 주어지지 않으면 기본값은 0입니다, 즉 현재 날짜를 의미합니다.
|
18
18
|
|
19
19
|
- `timeZone?: string`: 날짜를 얻고자 하는 시간대를 나타내는 문자열입니다. 이 값이 주어지지 않으면 사용자의 로컬 시간대가 사용됩니다.
|
20
20
|
|
@@ -32,7 +32,7 @@ function getRelativeWeekDate(params: RelativeWeekDateParams = {}): string | numb
|
|
32
32
|
```typescript
|
33
33
|
const relativeWeekDate = getRelativeWeekDate({
|
34
34
|
relativeWeeks: 2,
|
35
|
-
|
35
|
+
relativeDays: 3,
|
36
36
|
timeZone: 'Asia/Seoul',
|
37
37
|
format: 'date'
|
38
38
|
})
|
@@ -14,7 +14,7 @@ function getRelativeYearDate(params: RelativeYearDateParams = {}): string | numb
|
|
14
14
|
|
15
15
|
- `relativeYears?: number`: 상대적인 연도를 나타내는 숫자입니다. 이 값은 현재 날짜로부터의 연도 수를 나타냅니다. 예를 들어, 이 값이 3이면 현재 날짜로부터 3년 뒤를 나타냅니다. 이 값이 주어지지 않으면 기본값은 0입니다, 즉 현재 연도를 의미합니다.
|
16
16
|
|
17
|
-
- `
|
17
|
+
- `relativeDays?: number`: 상대적인 일수를 나타내는 숫자입니다. 이 값은 현재 날짜로부터의 일 수를 나타냅니다. 예를 들어, 이 값이 2이면 현재 날짜로부터 2일 뒤를 나타냅니다. 이 값이 주어지지 않으면 기본값은 0입니다, 즉 현재 날짜를 의미합니다.
|
18
18
|
|
19
19
|
- `timeZone?: string`: 날짜를 얻고자 하는 시간대를 나타내는 문자열입니다. 이 값이 주어지지 않으면 사용자의 로컬 시간대가 사용됩니다.
|
20
20
|
|
@@ -32,7 +32,7 @@ function getRelativeYearDate(params: RelativeYearDateParams = {}): string | numb
|
|
32
32
|
```typescript
|
33
33
|
const relativeYearDate = getRelativeYearDate({
|
34
34
|
relativeYears: 2,
|
35
|
-
|
35
|
+
relativeDays: 3,
|
36
36
|
timeZone: 'Asia/Seoul',
|
37
37
|
format: 'date'
|
38
38
|
})
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@operato/data-grist",
|
3
|
-
"version": "2.0.0-alpha.
|
3
|
+
"version": "2.0.0-alpha.61",
|
4
4
|
"description": "User interface for grid (desktop) and list (mobile)",
|
5
5
|
"author": "heartyoh",
|
6
6
|
"main": "dist/index.js",
|
@@ -56,34 +56,35 @@
|
|
56
56
|
},
|
57
57
|
"dependencies": {
|
58
58
|
"@material/mwc-icon": "^0.27.0",
|
59
|
-
"@operato/headroom": "^2.0.0-alpha.
|
60
|
-
"@operato/input": "^2.0.0-alpha.
|
61
|
-
"@operato/popup": "^2.0.0-alpha.
|
62
|
-
"@operato/pull-to-refresh": "^2.0.0-alpha.
|
63
|
-
"@operato/styles": "^2.0.0-alpha.
|
64
|
-
"@operato/
|
59
|
+
"@operato/headroom": "^2.0.0-alpha.57",
|
60
|
+
"@operato/input": "^2.0.0-alpha.59",
|
61
|
+
"@operato/popup": "^2.0.0-alpha.57",
|
62
|
+
"@operato/pull-to-refresh": "^2.0.0-alpha.57",
|
63
|
+
"@operato/styles": "^2.0.0-alpha.57",
|
64
|
+
"@operato/time-calculator": "^2.0.0-alpha.57",
|
65
|
+
"@operato/utils": "^2.0.0-alpha.57",
|
65
66
|
"i18next": "^21.5.4",
|
66
67
|
"json5": "^2.2.0",
|
67
|
-
"lit": "^
|
68
|
+
"lit": "^3.1.2",
|
68
69
|
"lodash-es": "^4.17.21"
|
69
70
|
},
|
70
71
|
"devDependencies": {
|
71
|
-
"@custom-elements-manifest/analyzer": "^0.
|
72
|
+
"@custom-elements-manifest/analyzer": "^0.9.2",
|
72
73
|
"@hatiolab/prettier-config": "^1.0.0",
|
73
|
-
"@open-wc/eslint-config": "^
|
74
|
+
"@open-wc/eslint-config": "^12.0.3",
|
74
75
|
"@open-wc/testing": "^3.1.6",
|
75
76
|
"@types/lodash-es": "^4.17.5",
|
76
|
-
"@typescript-eslint/eslint-plugin": "^
|
77
|
-
"@typescript-eslint/parser": "^
|
77
|
+
"@typescript-eslint/eslint-plugin": "^7.0.1",
|
78
|
+
"@typescript-eslint/parser": "^7.0.1",
|
78
79
|
"@web/dev-server": "^0.3.0",
|
79
|
-
"@web/dev-server-storybook": "^0.
|
80
|
-
"@web/test-runner": "^0.
|
80
|
+
"@web/dev-server-storybook": "^2.0.1",
|
81
|
+
"@web/test-runner": "^0.18.0",
|
81
82
|
"concurrently": "^8.0.1",
|
82
83
|
"eslint": "^8.39.0",
|
83
|
-
"eslint-config-prettier": "^
|
84
|
-
"husky": "^
|
85
|
-
"lint-staged": "^
|
86
|
-
"prettier": "^2.
|
84
|
+
"eslint-config-prettier": "^9.1.0",
|
85
|
+
"husky": "^9.0.11",
|
86
|
+
"lint-staged": "^15.2.2",
|
87
|
+
"prettier": "^3.2.5",
|
87
88
|
"tslib": "^2.3.1",
|
88
89
|
"typescript": "^5.0.4"
|
89
90
|
},
|
@@ -100,5 +101,5 @@
|
|
100
101
|
"prettier --write"
|
101
102
|
]
|
102
103
|
},
|
103
|
-
"gitHead": "
|
104
|
+
"gitHead": "6ba512f14bf258b7a2d81496af95d81e5247437f"
|
104
105
|
}
|
@@ -6,7 +6,7 @@ function sum(data: GristData, column: ColumnConfig): number {
|
|
6
6
|
return data.records
|
7
7
|
.filter(record => !Number.isNaN(record[name]))
|
8
8
|
.reduce((sum, record) => {
|
9
|
-
return sum + Number(record[name])
|
9
|
+
return sum + Number(record[name] || 0)
|
10
10
|
}, 0)
|
11
11
|
}
|
12
12
|
|
@@ -16,7 +16,7 @@ function avg(data: GristData, column: ColumnConfig): number {
|
|
16
16
|
|
17
17
|
return (
|
18
18
|
effectiveRecords.reduce((sum, record) => {
|
19
|
-
return sum + Number(record[name])
|
19
|
+
return sum + Number(record[name] || 0)
|
20
20
|
}, 0) / effectiveRecords.length
|
21
21
|
)
|
22
22
|
}
|
@@ -30,7 +30,7 @@ function min(data: GristData, column: ColumnConfig): number {
|
|
30
30
|
|
31
31
|
return Math.min.apply(
|
32
32
|
null,
|
33
|
-
data.records.filter(record => !Number.isNaN(record[name])).map(record => Number(record[name]))
|
33
|
+
data.records.filter(record => !Number.isNaN(record[name])).map(record => Number(record[name] || 0))
|
34
34
|
)
|
35
35
|
}
|
36
36
|
|
@@ -39,7 +39,7 @@ function max(data: GristData, column: ColumnConfig): number {
|
|
39
39
|
|
40
40
|
return Math.max.apply(
|
41
41
|
null,
|
42
|
-
data.records.filter(record => !Number.isNaN(record[name])).map(record => Number(record[name]))
|
42
|
+
data.records.filter(record => !Number.isNaN(record[name])).map(record => Number(record[name] || 0))
|
43
43
|
)
|
44
44
|
}
|
45
45
|
|
@@ -3,7 +3,16 @@ import { RowsConfig } from '../types'
|
|
3
3
|
import { getGristEventHandler } from '../handlers'
|
4
4
|
|
5
5
|
export const buildRowsOptions = (rows: any): RowsConfig => {
|
6
|
-
var {
|
6
|
+
var {
|
7
|
+
appendable = true,
|
8
|
+
editable = true,
|
9
|
+
insertable = false,
|
10
|
+
selectable,
|
11
|
+
groups = [],
|
12
|
+
totals = [],
|
13
|
+
classifier,
|
14
|
+
accumulator
|
15
|
+
} = rows
|
7
16
|
|
8
17
|
/* handler */
|
9
18
|
var { click, dblclick, focus } = rows.handlers || {}
|
@@ -14,6 +23,7 @@ export const buildRowsOptions = (rows: any): RowsConfig => {
|
|
14
23
|
return {
|
15
24
|
accumulator,
|
16
25
|
appendable,
|
26
|
+
editable,
|
17
27
|
insertable,
|
18
28
|
selectable,
|
19
29
|
groups,
|
@@ -29,6 +29,6 @@ export function recordCardClickHandler(this: RecordCard, e: MouseEvent): void {
|
|
29
29
|
rowsClick(this.config.columns, this.data, column, this.record, rowIndex, target)
|
30
30
|
} else {
|
31
31
|
/* content 가 클릭된 경우 - 레코드뷰 팝업을 실행한다. */
|
32
|
-
this.popupRecordView()
|
32
|
+
this.config.rows.editable && this.popupRecordView()
|
33
33
|
}
|
34
34
|
}
|
@@ -70,11 +70,12 @@ export class DataGridAccumField extends LitElement {
|
|
70
70
|
|
71
71
|
// tag가 true이면 value 앞에 (sum) 같은 태그 생성
|
72
72
|
var { accumulator } = column
|
73
|
+
let tag = ''
|
73
74
|
if (typeof accumulator === 'object' && typeof accumulator.type === 'string' && accumulator?.tag) {
|
74
|
-
|
75
|
+
tag = `(${i18next.t(`label.accumulator_${accumulator.type}`)})`
|
75
76
|
}
|
76
77
|
|
77
|
-
return html`${renderer?.call(this, value, column, record, rowIndex, this)}`
|
78
|
+
return html`${tag} ${renderer?.call(this, value, column, record, rowIndex, this)}`
|
78
79
|
}
|
79
80
|
|
80
81
|
updated(changes: PropertyValues<this>) {
|
@@ -100,7 +100,7 @@ export class DataGridBody extends LitElement {
|
|
100
100
|
@property({ type: Array }) columns: ColumnConfig[] = []
|
101
101
|
@property({ type: Object }) data: GristData = ZERO_DATA
|
102
102
|
@property({ type: Object }) focused: { row: number; column: number } = ZERO_FOCUS
|
103
|
-
@property({ type: Object }) editTarget: { row: number; column: number;
|
103
|
+
@property({ type: Object }) editTarget: { row: number; column: number; valueWith: string | null } | null = null
|
104
104
|
@property({ type: Number }) from = -1
|
105
105
|
@property({ type: Number }) to = -1
|
106
106
|
@property({ type: Array }) fixedLefts: number[] = []
|
@@ -135,7 +135,7 @@ export class DataGridBody extends LitElement {
|
|
135
135
|
render() {
|
136
136
|
// block이 선택되어 있으면, focused row/column은 표현하지 않는다.
|
137
137
|
var { row: focusedRow, column: focusedColumn } = (!this._selectBlock && this.focused) || {}
|
138
|
-
var { row: editingRow, column: editingColumn,
|
138
|
+
var { row: editingRow, column: editingColumn, valueWith = null } = this.editTarget || {}
|
139
139
|
|
140
140
|
var columns = this.columns.filter(column => !column.hidden)
|
141
141
|
var data = this.data
|
@@ -182,7 +182,7 @@ export class DataGridBody extends LitElement {
|
|
182
182
|
?selected-row=${attrSelected}
|
183
183
|
?focused=${idxRow === focusedRow && idxColumn === focusedColumn}
|
184
184
|
?editing=${idxRow === editingRow && idxColumn === editingColumn}
|
185
|
-
.
|
185
|
+
.valueWith=${valueWith}
|
186
186
|
.value=${record[column.name]}
|
187
187
|
?dirty=${!!dirtyFields[column.name]}
|
188
188
|
fixed=${ifDefined(this.fixedLefts[idxColumn])}
|
@@ -400,7 +400,7 @@ export class DataGridBody extends LitElement {
|
|
400
400
|
}
|
401
401
|
}
|
402
402
|
|
403
|
-
startEditTarget(row: number, column: number,
|
403
|
+
startEditTarget(row: number, column: number, valueWith: string | null = null) {
|
404
404
|
var { editable } = this.columns.filter(column => !column.hidden)[column].record
|
405
405
|
if (typeof editable === 'function') {
|
406
406
|
const curRow = this.data.records[row] || {}
|
@@ -419,7 +419,7 @@ export class DataGridBody extends LitElement {
|
|
419
419
|
this.editTarget = {
|
420
420
|
row,
|
421
421
|
column,
|
422
|
-
|
422
|
+
valueWith
|
423
423
|
}
|
424
424
|
}
|
425
425
|
|
@@ -647,14 +647,19 @@ export class DataGridBody extends LitElement {
|
|
647
647
|
|
648
648
|
switch (type) {
|
649
649
|
case 'object':
|
650
|
+
case 'parameters':
|
650
651
|
try {
|
651
652
|
value = JSON.parse(value || 'null')
|
652
653
|
} catch (err) {}
|
653
654
|
break
|
654
655
|
case 'boolean':
|
656
|
+
case 'checkbox':
|
655
657
|
value = !!value && !!String(value).match(/true/i)
|
656
658
|
break
|
657
659
|
case 'number':
|
660
|
+
case 'float':
|
661
|
+
case 'integer':
|
662
|
+
case 'progress':
|
658
663
|
value = parseToNumberOrNull(value)
|
659
664
|
break
|
660
665
|
default:
|
@@ -87,7 +87,7 @@ export class DataGridField extends LitElement {
|
|
87
87
|
@property({ type: Number }) columnIndex = 0
|
88
88
|
@property({ type: Boolean }) editing = false
|
89
89
|
@property({ type: Object }) value = {}
|
90
|
-
@property({ type: String })
|
90
|
+
@property({ type: String }) valueWith: string | null = null
|
91
91
|
@property({ attribute: false }) emphasized: any = false
|
92
92
|
@property({ type: String }) fixed?: string
|
93
93
|
@property({ type: String }) type?: string
|
@@ -287,10 +287,6 @@ export class DataGridHeader extends LitElement {
|
|
287
287
|
}
|
288
288
|
|
289
289
|
updated(changes: PropertyValues) {
|
290
|
-
if (changes.has('data')) {
|
291
|
-
requestAnimationFrame(this.notifyFixedLeftChange.bind(this))
|
292
|
-
}
|
293
|
-
|
294
290
|
if (changes.has('columns')) {
|
295
291
|
this.row2 = this.columns.reduce((row2, column, index) => {
|
296
292
|
if (column.hidden || !column.header?.group) {
|
@@ -344,6 +340,8 @@ export class DataGridHeader extends LitElement {
|
|
344
340
|
|
345
341
|
return row1
|
346
342
|
}, [] as any[])
|
343
|
+
|
344
|
+
requestAnimationFrame(this.notifyFixedLeftChange.bind(this))
|
347
345
|
}
|
348
346
|
}
|
349
347
|
|
@@ -406,57 +404,57 @@ export class DataGridHeader extends LitElement {
|
|
406
404
|
${!renderer
|
407
405
|
? html``
|
408
406
|
: type !== 'select'
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
407
|
+
? html` <ox-popup
|
408
|
+
><div filter-title><mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong></div>
|
409
|
+
${renderer(column, value, this)}</ox-popup
|
410
|
+
>`
|
411
|
+
: filter!.operator === 'in'
|
412
|
+
? html`<ox-popup-list
|
413
|
+
multiple
|
414
|
+
attr-selected="checked"
|
415
|
+
.value=${value}
|
416
|
+
with-search
|
417
|
+
@select=${(e: CustomEvent) =>
|
418
|
+
e.target?.dispatchEvent(
|
419
|
+
new CustomEvent('filter-change', {
|
420
|
+
bubbles: true,
|
421
|
+
composed: true,
|
422
|
+
detail: {
|
423
|
+
name,
|
424
|
+
operator: filter!.operator,
|
425
|
+
value: !e.detail
|
426
|
+
? undefined
|
427
|
+
: e.detail instanceof Array && e.detail.length === 0
|
428
|
+
? undefined
|
429
|
+
: e.detail
|
430
|
+
}
|
431
|
+
})
|
432
|
+
)}
|
433
|
+
><div filter-title slot="header">
|
434
|
+
<mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong>
|
435
|
+
</div>
|
436
|
+
${renderer(column, value, this)}</ox-popup-list
|
437
|
+
>`
|
438
|
+
: html`<ox-popup-list
|
439
|
+
.value=${value}
|
440
|
+
with-search
|
441
|
+
@select=${(e: CustomEvent) =>
|
442
|
+
e.target?.dispatchEvent(
|
443
|
+
new CustomEvent('filter-change', {
|
444
|
+
bubbles: true,
|
445
|
+
composed: true,
|
446
|
+
detail: {
|
447
|
+
name,
|
448
|
+
operator: filter!.operator,
|
449
|
+
value: e.detail ? e.detail : undefined
|
450
|
+
}
|
451
|
+
})
|
452
|
+
)}
|
453
|
+
><div filter-title slot="header">
|
454
|
+
<mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong>
|
455
|
+
</div>
|
456
|
+
${renderer(column, value, this)}</ox-popup-list
|
457
|
+
>`}
|
460
458
|
`
|
461
459
|
}
|
462
460
|
|
@@ -473,7 +471,10 @@ export class DataGridHeader extends LitElement {
|
|
473
471
|
if (sorter.desc) {
|
474
472
|
sorters.splice(idx, 1)
|
475
473
|
} else {
|
476
|
-
|
474
|
+
sorters.splice(idx, 1, {
|
475
|
+
...sorter,
|
476
|
+
desc: true
|
477
|
+
})
|
477
478
|
}
|
478
479
|
} else {
|
479
480
|
var sorter = {
|
@@ -159,7 +159,7 @@ export class DataGrid extends DataManipulator {
|
|
159
159
|
|
160
160
|
if (this.focused && 'row' in this.focused) {
|
161
161
|
var { row = 0, column = 0 } = this.focused
|
162
|
-
var { records: oldrecords = [] } = changes.get('data')
|
162
|
+
var { records: oldrecords = [] } = changes.get('data') || {}
|
163
163
|
var { records: newrecords } = this.data
|
164
164
|
|
165
165
|
var oldrecord = oldrecords[row]
|
@@ -172,8 +172,8 @@ export class DataGrid extends DataManipulator {
|
|
172
172
|
('id' in oldrecord
|
173
173
|
? record.id == oldrecord.id
|
174
174
|
: 'name' in oldrecord
|
175
|
-
|
176
|
-
|
175
|
+
? record.name == oldrecord.name
|
176
|
+
: false)
|
177
177
|
)
|
178
178
|
|
179
179
|
this.focused = {
|