@operato/data-grist 2.0.0-alpha.11 → 2.0.0-alpha.111
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 +472 -0
- package/demo/data-grist-test.html +25 -14
- package/demo/index.html +25 -14
- package/demo/report-test.html +13 -2
- package/dist/src/configure/column-builder.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-gutter-menu.d.ts +1 -1
- package/dist/src/data-card/data-card-gutter-menu.js +5 -5
- package/dist/src/data-card/data-card-gutter-menu.js.map +1 -1
- package/dist/src/data-card/data-card.d.ts +2 -2
- package/dist/src/data-card/data-card.js +3 -3
- package/dist/src/data-card/data-card.js.map +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 +2 -2
- package/dist/src/data-card/record-card.js +26 -26
- package/dist/src/data-card/record-card.js.map +1 -1
- package/dist/src/data-grid/data-grid-accum-field.js +8 -3
- package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-body-style.js +1 -0
- package/dist/src/data-grid/data-grid-body-style.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 +2 -2
- package/dist/src/data-grid/data-grid-footer.js +17 -9
- package/dist/src/data-grid/data-grid-footer.js.map +1 -1
- package/dist/src/data-grid/data-grid-header.d.ts +1 -1
- package/dist/src/data-grid/data-grid-header.js +38 -35
- 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 +12 -2
- package/dist/src/data-grid/data-grid.js.map +1 -1
- package/dist/src/data-grist.d.ts +1 -1
- package/dist/src/data-grist.js +23 -22
- 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 +2 -2
- package/dist/src/data-list/data-list.js +3 -3
- package/dist/src/data-list/data-list.js.map +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 +2 -2
- package/dist/src/data-list/record-partial.js +20 -18
- package/dist/src/data-list/record-partial.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-select.js +37 -25
- package/dist/src/editors/ox-grist-editor-select.js.map +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 +2 -2
- package/dist/src/empty-note.js +3 -3
- package/dist/src/empty-note.js.map +1 -1
- package/dist/src/filters/filter-checkbox.js +12 -5
- package/dist/src/filters/filter-checkbox.js.map +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/filter-select.js +30 -16
- package/dist/src/filters/filter-select.js.map +1 -1
- package/dist/src/filters/filter-styles.js +47 -28
- package/dist/src/filters/filter-styles.js.map +1 -1
- package/dist/src/filters/filters-form.d.ts +7 -1
- package/dist/src/filters/filters-form.js +154 -71
- package/dist/src/filters/filters-form.js.map +1 -1
- package/dist/src/gutters/gutter-button.d.ts +1 -1
- package/dist/src/gutters/gutter-button.js +3 -3
- package/dist/src/gutters/gutter-button.js.map +1 -1
- package/dist/src/gutters/gutter-dirty.d.ts +1 -1
- package/dist/src/gutters/gutter-dirty.js +5 -5
- package/dist/src/gutters/gutter-dirty.js.map +1 -1
- package/dist/src/handlers/contextmenu-tree-mutation.js +4 -22
- 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 +2 -2
- package/dist/src/record-view/record-creator.js +1 -1
- package/dist/src/record-view/record-creator.js.map +1 -1
- package/dist/src/record-view/record-view-body.d.ts +3 -3
- package/dist/src/record-view/record-view-body.js +4 -4
- package/dist/src/record-view/record-view-body.js.map +1 -1
- package/dist/src/record-view/record-view.d.ts +2 -2
- package/dist/src/record-view/record-view.js +5 -5
- package/dist/src/record-view/record-view.js.map +1 -1
- package/dist/src/renderers/ox-grist-renderer-progress.d.ts +1 -1
- package/dist/src/renderers/ox-grist-renderer-select.js +34 -4
- package/dist/src/renderers/ox-grist-renderer-select.js.map +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/sorters/sorters-control.js +3 -3
- package/dist/src/sorters/sorters-control.js.map +1 -1
- package/dist/src/types.d.ts +15 -9
- package/dist/src/types.js.map +1 -1
- package/dist/stories/{accumulator.stories.d.ts → accumulator-format.stories.d.ts} +1 -1
- package/dist/stories/{accumulator.stories.js → accumulator-format.stories.js} +58 -129
- package/dist/stories/accumulator-format.stories.js.map +1 -0
- package/dist/stories/barcode-input-filter.stories.d.ts +1 -1
- package/dist/stories/barcode-input-filter.stories.js +41 -79
- package/dist/stories/barcode-input-filter.stories.js.map +1 -1
- package/dist/stories/bounded-select-filters.stories.d.ts +25 -0
- package/dist/stories/bounded-select-filters.stories.js +264 -0
- package/dist/stories/bounded-select-filters.stories.js.map +1 -0
- package/dist/stories/bounded-select-record.stories.d.ts +25 -0
- package/dist/stories/bounded-select-record.stories.js +267 -0
- package/dist/stories/bounded-select-record.stories.js.map +1 -0
- package/dist/stories/creatable-only-column.stories.d.ts +25 -0
- package/dist/stories/creatable-only-column.stories.js +211 -0
- package/dist/stories/creatable-only-column.stories.js.map +1 -0
- package/dist/stories/default-filters.stories.d.ts +1 -1
- package/dist/stories/default-filters.stories.js +84 -79
- package/dist/stories/default-filters.stories.js.map +1 -1
- package/dist/stories/dynamic-editable.stories.d.ts +1 -1
- package/dist/stories/dynamic-editable.stories.js +61 -86
- package/dist/stories/dynamic-editable.stories.js.map +1 -1
- package/dist/stories/empty-sorters.stories.d.ts +1 -1
- package/dist/stories/empty-sorters.stories.js +41 -78
- package/dist/stories/empty-sorters.stories.js.map +1 -1
- package/dist/stories/explicit-fetch.stories.d.ts +1 -1
- package/dist/stories/explicit-fetch.stories.js +42 -79
- package/dist/stories/explicit-fetch.stories.js.map +1 -1
- package/dist/stories/fixed-column.stories.d.ts +1 -1
- package/dist/stories/fixed-column.stories.js +45 -127
- package/dist/stories/fixed-column.stories.js.map +1 -1
- package/dist/stories/grid-setting.stories.d.ts +36 -0
- package/dist/stories/grid-setting.stories.js +403 -0
- package/dist/stories/grid-setting.stories.js.map +1 -0
- package/dist/stories/grist-modes.stories.d.ts +1 -1
- package/dist/stories/grist-modes.stories.js +74 -140
- package/dist/stories/grist-modes.stories.js.map +1 -1
- package/dist/stories/group-header.stories.d.ts +1 -1
- package/dist/stories/group-header.stories.js +45 -127
- package/dist/stories/group-header.stories.js.map +1 -1
- package/dist/stories/textarea.stories.d.ts +1 -1
- package/dist/stories/textarea.stories.js +39 -121
- package/dist/stories/textarea.stories.js.map +1 -1
- package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
- package/dist/stories/tree-column-with-checkbox.stories.js +49 -136
- package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
- package/dist/stories/tree-column.stories.d.ts +1 -1
- package/dist/stories/tree-column.stories.js +49 -136
- package/dist/stories/tree-column.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 +31 -2
- package/docs/default-value/value-generator/hour-time-generator.md +33 -0
- package/docs/default-value/value-generator/minute-time-generator.md +33 -0
- package/docs/default-value/value-generator/month-date-generator.md +4 -2
- package/docs/default-value/value-generator/now-generator.md +29 -0
- package/docs/default-value/value-generator/time-generator.md +31 -0
- package/docs/default-value/value-generator/today-generator.md +29 -0
- package/docs/default-value/value-generator/week-date-generator.md +33 -2
- package/docs/default-value/value-generator/year-date-generator.md +33 -2
- package/package.json +21 -20
- package/src/configure/column-builder.ts +1 -0
- package/src/configure/rows-option-builder.ts +11 -1
- package/src/configure/zero-config.ts +1 -0
- package/src/data-card/data-card-gutter-menu.ts +5 -5
- package/src/data-card/data-card.ts +3 -3
- package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
- package/src/data-card/record-card.ts +30 -32
- package/src/data-grid/data-grid-accum-field.ts +8 -3
- package/src/data-grid/data-grid-body-style.ts +1 -0
- 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-footer.ts +18 -11
- package/src/data-grid/data-grid-header.ts +68 -65
- package/src/data-grid/data-grid.ts +14 -4
- package/src/data-grist.ts +25 -24
- package/src/data-list/data-list-gutter.ts +12 -0
- package/src/data-list/data-list.ts +3 -3
- package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
- package/src/data-list/record-partial.ts +22 -22
- 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-select.ts +41 -28
- 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/empty-note.ts +3 -3
- package/src/filters/filter-checkbox.ts +15 -5
- package/src/filters/filter-range-date.ts +16 -1
- package/src/filters/filter-select.ts +41 -28
- package/src/filters/filter-styles.ts +47 -28
- package/src/filters/filters-form.ts +159 -59
- package/src/gutters/gutter-button.ts +3 -3
- package/src/gutters/gutter-dirty.ts +5 -5
- package/src/handlers/contextmenu-tree-mutation.ts +4 -22
- package/src/index.ts +0 -1
- package/src/record-view/record-creator.ts +1 -1
- package/src/record-view/record-view-body.ts +4 -4
- package/src/record-view/record-view.ts +5 -5
- package/src/renderers/ox-grist-renderer-select.ts +41 -6
- package/src/sorters/sorters-control.ts +3 -3
- package/src/types.ts +20 -10
- package/stories/{accumulator.stories.ts → accumulator-format.stories.ts} +56 -130
- package/stories/barcode-input-filter.stories.ts +53 -89
- package/stories/bounded-select-filters.stories.ts +313 -0
- package/stories/bounded-select-record.stories.ts +316 -0
- package/stories/creatable-only-column.stories.ts +231 -0
- package/stories/default-filters.stories.ts +96 -89
- package/stories/dynamic-editable.stories.ts +68 -92
- package/stories/empty-sorters.stories.ts +53 -89
- package/stories/explicit-fetch.stories.ts +54 -90
- package/stories/fixed-column.stories.ts +57 -137
- package/stories/grid-setting.stories.ts +441 -0
- package/stories/grist-modes.stories.ts +86 -155
- package/stories/group-header.stories.ts +57 -137
- package/stories/textarea.stories.ts +42 -127
- package/stories/tree-column-with-checkbox.stories.ts +53 -138
- package/stories/tree-column.stories.ts +53 -138
- package/themes/grist-theme.css +3 -1
- package/yarn-error.log +16971 -0
- 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/dist/stories/accumulator.stories.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,17 +12,20 @@ export class OxGristEditorImage extends OxGristEditor {
|
|
12
12
|
|
13
13
|
_onchange(e: Event) {
|
14
14
|
e.stopPropagation()
|
15
|
-
this._dirtyValue = this.formatFromEditor(e)
|
16
|
-
this._onfocusout()
|
17
|
-
}
|
18
15
|
|
19
|
-
formatFromEditor(e: Event) {
|
20
|
-
// value가 image file object인지, image url인지 확인
|
21
16
|
const input = e.target as HTMLInputElement
|
17
|
+
|
18
|
+
// value가 image file object인지, image url인지 확인
|
22
19
|
if (input.files?.[0]) {
|
23
|
-
|
20
|
+
this._dirtyValue = this.formatFromEditor(input.files[0])
|
24
21
|
} else {
|
25
|
-
|
22
|
+
this._dirtyValue = this.formatFromEditor(input.value)
|
26
23
|
}
|
24
|
+
|
25
|
+
this._onfocusout()
|
26
|
+
}
|
27
|
+
|
28
|
+
formatFromEditor(value: any) {
|
29
|
+
return value
|
27
30
|
}
|
28
31
|
}
|
@@ -1,20 +1,22 @@
|
|
1
1
|
import { OxGristEditor } from './ox-grist-editor.js'
|
2
2
|
import { customElement } from 'lit/decorators.js'
|
3
3
|
import { html } from 'lit'
|
4
|
+
import { parseToNumberOrNull } from '@operato/utils'
|
4
5
|
|
5
6
|
@customElement('ox-grist-editor-number')
|
6
7
|
export class OxGristEditorNumber extends OxGristEditor {
|
7
|
-
|
8
|
-
|
8
|
+
get inlineEditable() {
|
9
|
+
return true
|
10
|
+
}
|
11
|
+
|
12
|
+
formatFromEditor(value: any) {
|
13
|
+
const parsed = parseToNumberOrNull(value) ?? null
|
9
14
|
|
10
|
-
|
11
|
-
|
12
|
-
return Number.parseFloat(value)
|
13
|
-
case 'integer':
|
14
|
-
return Number.parseInt(value)
|
15
|
-
default:
|
16
|
-
return Number(value)
|
15
|
+
if (parsed !== null && this.column.type == 'integer') {
|
16
|
+
return Math.floor(parsed)
|
17
17
|
}
|
18
|
+
|
19
|
+
return parsed
|
18
20
|
}
|
19
21
|
|
20
22
|
get editorTemplate() {
|
@@ -1,6 +1,38 @@
|
|
1
|
-
import { OxGristEditor } from './ox-grist-editor.js'
|
2
|
-
import { customElement } from 'lit/decorators.js'
|
3
1
|
import { html } from 'lit'
|
2
|
+
import { customElement } from 'lit/decorators.js'
|
3
|
+
import { until } from 'lit/directives/until.js'
|
4
|
+
|
5
|
+
import { OxGristEditor } from './ox-grist-editor.js'
|
6
|
+
import { SelectOption, SelectOptionObject } from '../types.js'
|
7
|
+
|
8
|
+
function buildOptions(options: SelectOption[], value: any) {
|
9
|
+
const selectOptionObjects = options.map(option => {
|
10
|
+
switch (typeof option) {
|
11
|
+
case 'string':
|
12
|
+
return {
|
13
|
+
display: option,
|
14
|
+
value: option
|
15
|
+
}
|
16
|
+
case 'object':
|
17
|
+
return {
|
18
|
+
display: option.display || option.name,
|
19
|
+
value: option.value
|
20
|
+
}
|
21
|
+
default:
|
22
|
+
return option
|
23
|
+
}
|
24
|
+
}) as SelectOptionObject[]
|
25
|
+
|
26
|
+
return html`
|
27
|
+
<select>
|
28
|
+
${selectOptionObjects.map(
|
29
|
+
(option: any) => html`
|
30
|
+
<option ?selected=${option.value == value} value=${option.value}>${option.display}</option>
|
31
|
+
`
|
32
|
+
)}
|
33
|
+
</select>
|
34
|
+
`
|
35
|
+
}
|
4
36
|
|
5
37
|
@customElement('ox-grist-editor-select')
|
6
38
|
export class OxGristEditorSelect extends OxGristEditor {
|
@@ -10,33 +42,14 @@ export class OxGristEditorSelect extends OxGristEditor {
|
|
10
42
|
|
11
43
|
if (typeof options == 'function') {
|
12
44
|
options = options.call(null, this.value, this.column, this.record, this.rowIndex, this.field)
|
13
|
-
}
|
14
45
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
display: option,
|
20
|
-
value: option
|
21
|
-
}
|
22
|
-
case 'object':
|
23
|
-
return {
|
24
|
-
display: option.display,
|
25
|
-
value: option.value
|
26
|
-
}
|
27
|
-
default:
|
28
|
-
return option
|
46
|
+
if (options instanceof Promise) {
|
47
|
+
return html`${until(options.then(options => buildOptions(options, this.value)))}`
|
48
|
+
} else {
|
49
|
+
return buildOptions((options || []) as SelectOption[], rowOptionField.display || this.value)
|
29
50
|
}
|
30
|
-
}
|
31
|
-
|
32
|
-
|
33
|
-
<select>
|
34
|
-
${options.map(
|
35
|
-
(option: any) => html`
|
36
|
-
<option ?selected=${option.value == this.value} value=${option.value}>${option.display}</option>
|
37
|
-
`
|
38
|
-
)}
|
39
|
-
</select>
|
40
|
-
`
|
51
|
+
} else {
|
52
|
+
return buildOptions((options || []) as SelectOption[], this.value)
|
53
|
+
}
|
41
54
|
}
|
42
55
|
}
|
@@ -4,6 +4,10 @@ import { html } from 'lit'
|
|
4
4
|
|
5
5
|
@customElement('ox-grist-editor-text')
|
6
6
|
export class OxGristEditorText extends OxGristEditor {
|
7
|
+
get inlineEditable() {
|
8
|
+
return true
|
9
|
+
}
|
10
|
+
|
7
11
|
get editorTemplate() {
|
8
12
|
return html` <input type="text" .value=${this.value} /> `
|
9
13
|
}
|
@@ -6,6 +6,10 @@ import { html } from 'lit'
|
|
6
6
|
|
7
7
|
@customElement('ox-grist-editor-textarea')
|
8
8
|
export class OxGristEditorTextarea extends OxGristEditor {
|
9
|
+
get inlineEditable() {
|
10
|
+
return true
|
11
|
+
}
|
12
|
+
|
9
13
|
get editorTemplate() {
|
10
14
|
return html` <ox-input-textarea .value=${this.value}></ox-input-textarea> `
|
11
15
|
}
|
@@ -4,7 +4,7 @@ import { customElement, property } from 'lit/decorators.js'
|
|
4
4
|
import { ZERO_COLUMN, ZERO_RECORD } from '../configure/zero-config'
|
5
5
|
import { DataGridField } from '../data-grid/data-grid-field'
|
6
6
|
import { ColumnConfig, GristRecord } from '../types'
|
7
|
-
import { getDefaultValue } from '
|
7
|
+
import { getDefaultValue } from '@operato/time-calculator'
|
8
8
|
|
9
9
|
const STYLE = css`
|
10
10
|
:host {
|
@@ -91,8 +91,8 @@ export class OxGristEditor extends LitElement {
|
|
91
91
|
return this.renderRoot.firstElementChild as HTMLElement
|
92
92
|
}
|
93
93
|
|
94
|
-
get
|
95
|
-
return
|
94
|
+
get inlineEditable() {
|
95
|
+
return false
|
96
96
|
}
|
97
97
|
|
98
98
|
async firstUpdated() {
|
@@ -121,19 +121,21 @@ export class OxGristEditor extends LitElement {
|
|
121
121
|
currentValue = getDefaultValue(defaultValue, this.record)
|
122
122
|
}
|
123
123
|
|
124
|
+
this.value = this._dirtyValue = this.formatForEditor(currentValue)
|
125
|
+
|
124
126
|
// 입력을 위한 키를 누르면서 편집모드가 될때는 누른 키가 처음에 입력되도록, enter 같은 것을 눌러서 편집모드가 되면 현재 값으로 편집모드 전환
|
125
|
-
const
|
126
|
-
this.value = this._dirtyValue =
|
127
|
+
const valueWith = this.inlineEditable && this.field?.valueWith
|
128
|
+
this.value = this._dirtyValue = valueWith ? this.formatFromEditor(valueWith) : this.formatForEditor(currentValue)
|
127
129
|
|
128
130
|
requestAnimationFrame(() => {
|
129
131
|
this.focus()
|
130
|
-
this.select()
|
132
|
+
!valueWith && this.select()
|
131
133
|
})
|
132
134
|
}
|
133
135
|
|
134
136
|
select() {
|
135
137
|
const editor = this.editor
|
136
|
-
if ((editor as HTMLInputElement)?.select
|
138
|
+
if ((editor as HTMLInputElement)?.select) {
|
137
139
|
return (editor as HTMLInputElement).select()
|
138
140
|
}
|
139
141
|
}
|
@@ -149,8 +151,8 @@ export class OxGristEditor extends LitElement {
|
|
149
151
|
return value == null ? '' : value
|
150
152
|
}
|
151
153
|
|
152
|
-
formatFromEditor(
|
153
|
-
return
|
154
|
+
formatFromEditor(value: any): any {
|
155
|
+
return value
|
154
156
|
}
|
155
157
|
|
156
158
|
_onfocusout() {
|
@@ -180,7 +182,9 @@ export class OxGristEditor extends LitElement {
|
|
180
182
|
_onchange(e: Event): void {
|
181
183
|
e.stopPropagation()
|
182
184
|
|
183
|
-
|
185
|
+
const value = (e.target as any)?.value
|
186
|
+
|
187
|
+
this._dirtyValue = this.formatFromEditor(value)
|
184
188
|
}
|
185
189
|
|
186
190
|
_onkeydown(e: Event): void {}
|
package/src/empty-note.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import '@material/
|
1
|
+
import '@material/web/icon/icon.js'
|
2
2
|
|
3
3
|
import { LitElement, css, html } from 'lit'
|
4
4
|
import { customElement, property } from 'lit/decorators.js'
|
@@ -11,7 +11,7 @@ export class EmptyNote extends LitElement {
|
|
11
11
|
text-align: center;
|
12
12
|
}
|
13
13
|
|
14
|
-
|
14
|
+
md-icon {
|
15
15
|
font: var(--oops-note-icon-font);
|
16
16
|
color: var(--oops-note-icon-color);
|
17
17
|
border: var(--oops-note-icon-border);
|
@@ -38,7 +38,7 @@ export class EmptyNote extends LitElement {
|
|
38
38
|
|
39
39
|
render() {
|
40
40
|
return html`
|
41
|
-
${this.icon ? html`<
|
41
|
+
${this.icon ? html`<md-icon>${this.icon}</md-icon>` : html``}
|
42
42
|
<div titler>${this.title}</div>
|
43
43
|
${this.description ? html`<div description>${this.description}</div>` : html``}
|
44
44
|
`
|
@@ -5,8 +5,16 @@ import { html } from 'lit-html'
|
|
5
5
|
import { FilterConfigObject, FilterSelectRenderer } from '../types.js'
|
6
6
|
|
7
7
|
export const FilterCheckbox: FilterSelectRenderer = (column, value, owner) => {
|
8
|
-
const filter = column
|
9
|
-
|
8
|
+
const { name, header, label, filter } = column
|
9
|
+
|
10
|
+
const { label: filterLabel, operator } = filter! as FilterConfigObject
|
11
|
+
|
12
|
+
const labelText =
|
13
|
+
filterLabel !== undefined
|
14
|
+
? filterLabel
|
15
|
+
: typeof label === 'object' && label.renderer
|
16
|
+
? label.renderer(column)
|
17
|
+
: header.renderer(column) || name
|
10
18
|
|
11
19
|
return html`
|
12
20
|
<ox-checkbox
|
@@ -14,19 +22,21 @@ export const FilterCheckbox: FilterSelectRenderer = (column, value, owner) => {
|
|
14
22
|
?checked=${value}
|
15
23
|
indeterminatable
|
16
24
|
?indeterminate=${value == null}
|
25
|
+
left-label
|
17
26
|
@change=${(e: CustomEvent) => {
|
18
27
|
;(e.target as HTMLElement).dispatchEvent(
|
19
28
|
new CustomEvent('filter-change', {
|
20
29
|
bubbles: true,
|
21
30
|
composed: true,
|
22
31
|
detail: {
|
23
|
-
name
|
24
|
-
operator
|
32
|
+
name,
|
33
|
+
operator,
|
25
34
|
value: (e.target as Element & { checked: boolean | undefined }).checked
|
26
35
|
}
|
27
36
|
})
|
28
37
|
)
|
29
38
|
}}
|
30
|
-
|
39
|
+
><label filter-title><span>${labelText}</span></label></ox-checkbox
|
40
|
+
>
|
31
41
|
`
|
32
42
|
}
|
@@ -2,16 +2,31 @@ import { FilterConfigObject, FilterSelectRenderer } from '../types'
|
|
2
2
|
|
3
3
|
import { html } from 'lit-html'
|
4
4
|
|
5
|
+
function formatDate(type: string, date: Date) {
|
6
|
+
var year = date.getFullYear()
|
7
|
+
var month = ('0' + (date.getMonth() + 1)).slice(-2)
|
8
|
+
var day = ('0' + date.getDate()).slice(-2)
|
9
|
+
var hours = ('0' + date.getHours()).slice(-2)
|
10
|
+
var minutes = ('0' + date.getMinutes()).slice(-2)
|
11
|
+
|
12
|
+
var formatDate = year + '-' + month + '-' + day
|
13
|
+
|
14
|
+
return type == 'date' ? formatDate : formatDate + 'T' + hours + ':' + minutes
|
15
|
+
}
|
16
|
+
|
5
17
|
export const FilterRangeDate: FilterSelectRenderer = (column, value, owner) => {
|
6
18
|
const filter = column.filter as FilterConfigObject
|
7
19
|
|
8
|
-
|
20
|
+
var [from, to] = value instanceof Array ? value : []
|
9
21
|
|
10
22
|
var type: any = filter?.type || column.type
|
11
23
|
if (type === 'datetime') {
|
12
24
|
type = 'datetime-local'
|
13
25
|
}
|
14
26
|
|
27
|
+
from = formatDate(type, new Date(from))
|
28
|
+
to = formatDate(type, new Date(to))
|
29
|
+
|
15
30
|
return html`
|
16
31
|
<input
|
17
32
|
name=${column.name}
|
@@ -1,26 +1,14 @@
|
|
1
1
|
import '@operato/input/ox-checkbox.js'
|
2
2
|
|
3
|
-
import {
|
3
|
+
import { html } from 'lit'
|
4
|
+
import { until } from 'lit/directives/until.js'
|
4
5
|
|
5
|
-
import {
|
6
|
+
import { FilterConfigObject, FilterOperator, FilterSelectRenderer, SelectOption, SelectOptionObject } from '../types'
|
7
|
+
import { OxFiltersForm } from './filters-form'
|
8
|
+
import { DataGridHeader } from '../data-grid/data-grid-header'
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
const filter = column.filter as FilterConfigObject
|
10
|
-
const operator = filter?.operator
|
11
|
-
|
12
|
-
var options = filter?.options || column.record.options || []
|
13
|
-
|
14
|
-
if (typeof options === 'function') {
|
15
|
-
if (!filter?.options) {
|
16
|
-
console.warn(
|
17
|
-
'ox-grist의 column.filter 속성에서는 column.record.options의 함수형 options을 사용할 수 없으므로, filter 속성에서 재지정해야한다.'
|
18
|
-
)
|
19
|
-
}
|
20
|
-
options = options.call(column, owner)
|
21
|
-
}
|
22
|
-
|
23
|
-
options = options.map((option: any) => {
|
10
|
+
function buildOptions(options: SelectOption[], operator?: FilterOperator) {
|
11
|
+
const selectOptionObjects = options.map(option => {
|
24
12
|
switch (typeof option) {
|
25
13
|
case 'string':
|
26
14
|
return {
|
@@ -29,27 +17,52 @@ export const FilterSelect: FilterSelectRenderer = (column, value, owner) => {
|
|
29
17
|
}
|
30
18
|
case 'object':
|
31
19
|
return {
|
32
|
-
display: option.display,
|
20
|
+
display: option.display || option.name,
|
33
21
|
value: option.value
|
34
22
|
}
|
35
23
|
default:
|
36
24
|
return option
|
37
25
|
}
|
38
|
-
})
|
26
|
+
}) as SelectOptionObject[]
|
39
27
|
|
40
28
|
return operator === 'in'
|
41
29
|
? html`
|
42
|
-
${
|
43
|
-
?.filter(
|
30
|
+
${selectOptionObjects
|
31
|
+
?.filter(option => !!option)
|
44
32
|
.map(
|
45
|
-
(
|
46
|
-
html` <ox-checkbox option value=${option.value}>${option.display}</ox-checkbox> `
|
33
|
+
({ value, display, name }) => html` <ox-checkbox option value=${value}>${display || name}</ox-checkbox> `
|
47
34
|
)}
|
48
35
|
`
|
49
36
|
: html`
|
50
|
-
${
|
51
|
-
(
|
52
|
-
html` <div option value=${option.value}>${option.display} </div> `
|
37
|
+
${selectOptionObjects?.map(
|
38
|
+
({ value, display, name }) => html` <div option value=${value}>${display || name} </div> `
|
53
39
|
)}
|
54
40
|
`
|
55
41
|
}
|
42
|
+
|
43
|
+
export const FilterSelect: FilterSelectRenderer = (column, value, owner) => {
|
44
|
+
/* value는 filters-form이나 grid-header에서 처리되므로 이 곳에서는 무시한다. */
|
45
|
+
const filter = column.filter as FilterConfigObject
|
46
|
+
const operator = filter?.operator
|
47
|
+
const form = owner as OxFiltersForm | DataGridHeader
|
48
|
+
|
49
|
+
var options = filter?.options || column.record.options || []
|
50
|
+
|
51
|
+
if (typeof options === 'function') {
|
52
|
+
if (!filter?.options) {
|
53
|
+
console.warn(
|
54
|
+
'ox-grist의 column.filter 속성에서는 column.record.options의 함수형 options을 사용할 수 없으므로, filter 속성에서 재지정해야한다.'
|
55
|
+
)
|
56
|
+
}
|
57
|
+
|
58
|
+
options = options.call(null, value, column, form instanceof OxFiltersForm ? form.getFormObjectValue() : {}, owner)
|
59
|
+
|
60
|
+
if (options instanceof Promise) {
|
61
|
+
return html`${until(options.then(options => buildOptions(options, operator)))}`
|
62
|
+
} else {
|
63
|
+
return buildOptions((options || []) as SelectOption[], operator)
|
64
|
+
}
|
65
|
+
} else {
|
66
|
+
return buildOptions((options || []) as SelectOption[], operator)
|
67
|
+
}
|
68
|
+
}
|
@@ -2,56 +2,77 @@ import { css } from 'lit'
|
|
2
2
|
|
3
3
|
export const FilterStyles = css`
|
4
4
|
:host {
|
5
|
-
--ox-input-placeholder-color: var(--primary-color);
|
6
|
-
|
7
|
-
--ox-input-
|
8
|
-
--ox-input-border: 1px solid
|
9
|
-
--ox-input-
|
10
|
-
--ox-input-
|
11
|
-
--ox-input-
|
12
|
-
--ox-
|
13
|
-
|
14
|
-
--ox-filters-
|
15
|
-
|
16
|
-
--ox-filters-form-
|
17
|
-
--ox-
|
5
|
+
--ox-filters-input-placeholder-color: var(--input-placeholder-color, var(--primary-color));
|
6
|
+
|
7
|
+
--ox-filters-input-border: var(--input-border, 1px solid rgba(0, 0, 0, 0.2));
|
8
|
+
--ox-filters-input-focus-border: var(--input-focus-border, 1px solid var(--primary-color));
|
9
|
+
--ox-filters-input-font: var(--input-font, normal 14px var(--theme-font));
|
10
|
+
--ox-filters-input-color: var(--input-color, var(--primary-text-color));
|
11
|
+
--ox-filters-input-focus-color: var(--input-focus-color, var(--primary-color));
|
12
|
+
--ox-filters-label-font: var(--label-font, normal 14px var(--theme-font));
|
13
|
+
--ox-filters-label-color: var(--label-color, var(--primary-text-color));
|
14
|
+
--ox-filters-input-background-color: transparent;
|
15
|
+
|
16
|
+
--ox-filters-form-gap: var(--input-gap-vertical, 8px) var(--input-gap-horizontal, 16px);
|
17
|
+
--ox-filters-input-padding: var(--input-padding, 6px 2px);
|
18
|
+
|
19
|
+
--ox-select-padding: var(--ox-filters-input-padding);
|
20
|
+
--ox-checkbox-background-color: var(--ox-filters-input-background-color, transparent);
|
18
21
|
}
|
19
22
|
|
20
23
|
label {
|
21
|
-
font: var(--ox-filters-
|
22
|
-
color: var(--ox-filters-
|
24
|
+
font: var(--ox-filters-label-font);
|
25
|
+
color: var(--ox-filters-label-color);
|
23
26
|
}
|
27
|
+
|
24
28
|
span {
|
25
|
-
margin-right: var(--margin-narrow);
|
26
29
|
text-transform: capitalize;
|
27
30
|
}
|
28
31
|
|
29
32
|
input::placeholder {
|
30
|
-
color: var(--ox-input-placeholder-color);
|
33
|
+
color: var(--ox-filters-input-placeholder-color);
|
31
34
|
opacity: 0.6;
|
32
35
|
}
|
33
36
|
|
37
|
+
input {
|
38
|
+
padding: var(--ox-filters-input-padding);
|
39
|
+
}
|
40
|
+
|
41
|
+
label > span + *,
|
34
42
|
ox-select,
|
35
43
|
input {
|
36
|
-
padding: var(--input-padding);
|
37
44
|
border: none;
|
38
|
-
border-bottom: var(--ox-input-border);
|
39
|
-
font: var(--ox-input-font);
|
40
|
-
color: var(--ox-input-color);
|
45
|
+
border-bottom: var(--ox-filters-input-border);
|
46
|
+
font: var(--ox-filters-input-font);
|
47
|
+
color: var(--ox-filters-input-color);
|
48
|
+
background-color: var(--ox-filters-input-background-color, transparent);
|
49
|
+
}
|
50
|
+
|
51
|
+
label > span + * {
|
52
|
+
min-width: 120px;
|
41
53
|
}
|
42
54
|
|
43
55
|
ox-select:focus,
|
44
56
|
input:focus {
|
45
57
|
outline: none;
|
46
|
-
border-bottom: var(--ox-input-focus-border);
|
47
|
-
color: var(--
|
58
|
+
border-bottom: var(--ox-filters-input-focus-border);
|
59
|
+
color: var(--ox-filters-input-focus-color);
|
48
60
|
}
|
61
|
+
|
49
62
|
ox-select {
|
50
|
-
|
63
|
+
min-width: 100px;
|
64
|
+
max-width: 170px;
|
65
|
+
}
|
66
|
+
|
67
|
+
ox-input-barcode {
|
68
|
+
min-width: 150px;
|
69
|
+
}
|
70
|
+
|
71
|
+
ox-input-search {
|
72
|
+
max-width: 150px;
|
51
73
|
}
|
52
74
|
|
53
75
|
input[type='number'] {
|
54
|
-
padding-right: var(--padding-narrow);
|
55
76
|
max-width: 90px;
|
56
77
|
}
|
57
78
|
|
@@ -59,15 +80,13 @@ export const FilterStyles = css`
|
|
59
80
|
input[type*='time'],
|
60
81
|
input[type='week'],
|
61
82
|
input[type='month'] {
|
62
|
-
padding: 8px var(--padding-narrow) 8px var(--padding-default);
|
63
83
|
max-width: 170px;
|
64
84
|
}
|
65
85
|
|
66
86
|
@media only screen and (max-width: 460px) {
|
67
87
|
:host {
|
68
88
|
--ox-filters-form-label-font: bold 13px var(--theme-font);
|
69
|
-
--ox-input-font: normal 16px var(--theme-font);
|
70
|
-
--ox-filters-form-gap: var(--margin-narrow);
|
89
|
+
--ox-filters-input-font: normal 16px var(--theme-font);
|
71
90
|
}
|
72
91
|
|
73
92
|
input[from],
|