@operato/data-grist 8.0.0-beta.0 → 8.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/package.json +10 -10
  3. package/.storybook/main.js +0 -3
  4. package/.storybook/preview.js +0 -52
  5. package/.storybook/server.mjs +0 -8
  6. package/src/accumulator/accumulator.ts +0 -63
  7. package/src/configure/column-builder.ts +0 -114
  8. package/src/configure/config-builder.ts +0 -40
  9. package/src/configure/filters-option-builder.ts +0 -8
  10. package/src/configure/imex-option-builder.ts +0 -5
  11. package/src/configure/list-option-builder.ts +0 -9
  12. package/src/configure/rows-option-builder.ts +0 -38
  13. package/src/configure/tree-option-builder.ts +0 -22
  14. package/src/configure/zero-config.ts +0 -83
  15. package/src/const.ts +0 -1
  16. package/src/data-card/data-card-field.ts +0 -94
  17. package/src/data-card/data-card-gutter-menu.ts +0 -94
  18. package/src/data-card/data-card-gutter.ts +0 -103
  19. package/src/data-card/data-card.ts +0 -154
  20. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  21. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  22. package/src/data-card/record-card.ts +0 -298
  23. package/src/data-consumer.ts +0 -11
  24. package/src/data-grid/data-grid-accum-field.ts +0 -109
  25. package/src/data-grid/data-grid-body-style.ts +0 -85
  26. package/src/data-grid/data-grid-body.ts +0 -765
  27. package/src/data-grid/data-grid-field.ts +0 -227
  28. package/src/data-grid/data-grid-footer.ts +0 -119
  29. package/src/data-grid/data-grid-header.ts +0 -578
  30. package/src/data-grid/data-grid.ts +0 -293
  31. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  32. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  33. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  34. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  35. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  36. package/src/data-grist.ts +0 -1233
  37. package/src/data-list/data-list-field.ts +0 -82
  38. package/src/data-list/data-list-gutter.ts +0 -108
  39. package/src/data-list/data-list.ts +0 -145
  40. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  41. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  42. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  43. package/src/data-list/record-partial.ts +0 -264
  44. package/src/data-manipulator.ts +0 -426
  45. package/src/data-provider.ts +0 -271
  46. package/src/data-report/data-report-body-style.ts +0 -58
  47. package/src/data-report/data-report-body.ts +0 -189
  48. package/src/data-report/data-report-component.ts +0 -138
  49. package/src/data-report/data-report-field.ts +0 -83
  50. package/src/data-report/data-report-header.ts +0 -242
  51. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  52. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  53. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  54. package/src/data-report.ts +0 -424
  55. package/src/editors/index.ts +0 -4
  56. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  57. package/src/editors/ox-grist-editor-color.ts +0 -10
  58. package/src/editors/ox-grist-editor-date.ts +0 -10
  59. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  60. package/src/editors/ox-grist-editor-email.ts +0 -10
  61. package/src/editors/ox-grist-editor-file.ts +0 -28
  62. package/src/editors/ox-grist-editor-image.ts +0 -31
  63. package/src/editors/ox-grist-editor-month.ts +0 -10
  64. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  65. package/src/editors/ox-grist-editor-number.ts +0 -27
  66. package/src/editors/ox-grist-editor-password.ts +0 -10
  67. package/src/editors/ox-grist-editor-select.ts +0 -55
  68. package/src/editors/ox-grist-editor-tel.ts +0 -10
  69. package/src/editors/ox-grist-editor-text.ts +0 -14
  70. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  71. package/src/editors/ox-grist-editor-time.ts +0 -10
  72. package/src/editors/ox-grist-editor-tree.ts +0 -27
  73. package/src/editors/ox-grist-editor-varname.ts +0 -36
  74. package/src/editors/ox-grist-editor-week.ts +0 -10
  75. package/src/editors/ox-grist-editor.ts +0 -207
  76. package/src/editors/ox-input-tree.ts +0 -226
  77. package/src/editors/registry.ts +0 -82
  78. package/src/empty-note.ts +0 -46
  79. package/src/filters/filter-checkbox.ts +0 -49
  80. package/src/filters/filter-input-barcode.ts +0 -34
  81. package/src/filters/filter-input.ts +0 -30
  82. package/src/filters/filter-range-date.ts +0 -81
  83. package/src/filters/filter-range-number.ts +0 -64
  84. package/src/filters/filter-select-buttons.ts +0 -60
  85. package/src/filters/filter-select.ts +0 -68
  86. package/src/filters/filter-styles.ts +0 -119
  87. package/src/filters/filters-form.ts +0 -476
  88. package/src/filters/index.ts +0 -10
  89. package/src/filters/registry.ts +0 -56
  90. package/src/formatters/date-formatter.ts +0 -3
  91. package/src/formatters/index.ts +0 -1
  92. package/src/formatters/number-formatter.ts +0 -3
  93. package/src/formatters/registry.ts +0 -30
  94. package/src/formatters/text-formatter.ts +0 -3
  95. package/src/gutters/gutter-button.ts +0 -51
  96. package/src/gutters/gutter-dirty.ts +0 -96
  97. package/src/gutters/gutter-row-selector.ts +0 -89
  98. package/src/gutters/gutter-sequence.ts +0 -54
  99. package/src/gutters/index.ts +0 -1
  100. package/src/gutters/registry.ts +0 -32
  101. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  102. package/src/handlers/index.ts +0 -1
  103. package/src/handlers/move-down.ts +0 -44
  104. package/src/handlers/move-up.ts +0 -44
  105. package/src/handlers/record-copy.ts +0 -38
  106. package/src/handlers/record-delete.ts +0 -30
  107. package/src/handlers/record-view-handler.ts +0 -27
  108. package/src/handlers/registry.ts +0 -42
  109. package/src/handlers/select-row-toggle.ts +0 -30
  110. package/src/handlers/select-row.ts +0 -27
  111. package/src/index.ts +0 -17
  112. package/src/personalizer/index.ts +0 -1
  113. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  114. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  115. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  116. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  117. package/src/record-view/index.ts +0 -2
  118. package/src/record-view/ox-record-creator.ts +0 -289
  119. package/src/record-view/record-view-body.ts +0 -257
  120. package/src/record-view/record-view-handler.ts +0 -86
  121. package/src/record-view/record-view.ts +0 -122
  122. package/src/renderers/index.ts +0 -14
  123. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  124. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  125. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  126. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  127. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  128. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  129. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  130. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  131. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  132. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  133. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  134. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  135. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  136. package/src/renderers/ox-grist-renderer.ts +0 -35
  137. package/src/renderers/registry.ts +0 -111
  138. package/src/sorters/sorters-control.ts +0 -143
  139. package/src/types.ts +0 -813
  140. package/src/utils/index.ts +0 -2
  141. package/src/utils/list-param.ts +0 -72
  142. package/src/utils/supports-passive.ts +0 -13
  143. package/stories/accumulator-format.stories.ts +0 -276
  144. package/stories/barcode-input-filter.stories.ts +0 -216
  145. package/stories/bounded-select-filters.stories.ts +0 -333
  146. package/stories/bounded-select-record.stories.ts +0 -336
  147. package/stories/click-event-custom.stories.ts +0 -287
  148. package/stories/click-event.stories.ts +0 -283
  149. package/stories/creatable-only-column.stories.ts +0 -253
  150. package/stories/default-filters.stories.ts +0 -241
  151. package/stories/dynamic-editable.stories.ts +0 -313
  152. package/stories/empty-sorters.stories.ts +0 -180
  153. package/stories/explicit-fetch.stories.ts +0 -186
  154. package/stories/fixed-column.stories.ts +0 -416
  155. package/stories/grid-setting.stories.ts +0 -501
  156. package/stories/grist-modes.stories.ts +0 -451
  157. package/stories/group-header.stories.ts +0 -442
  158. package/stories/record-view.stories.ts +0 -143
  159. package/stories/textarea.stories.ts +0 -261
  160. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  161. package/stories/tree-column.stories.ts +0 -296
  162. package/tsconfig.json +0 -26
  163. package/web-dev-server.config.mjs +0 -27
  164. package/web-test-runner.config.mjs +0 -45
@@ -1,56 +0,0 @@
1
- import { FilterSelectRenderer } from '../types.js'
2
- import { FilterCheckbox } from './filter-checkbox.js'
3
- import { FilterInputBarcode } from './filter-input-barcode.js'
4
- import { FilterInput } from './filter-input.js'
5
- import { FilterRangeDate } from './filter-range-date.js'
6
- import { FilterRangeNumber } from './filter-range-number.js'
7
- import { FilterSelectButtons } from './filter-select-buttons.js'
8
- import { FilterSelect } from './filter-select.js'
9
-
10
- var RENDERERS: {
11
- [name: string]: FilterSelectRenderer[]
12
- } = {
13
- string: [FilterInput],
14
- text: [FilterInput],
15
- email: [FilterInput],
16
- tel: [FilterInput],
17
- integer: [FilterInput, FilterRangeNumber],
18
- float: [FilterInput, FilterRangeNumber],
19
- number: [FilterInput, FilterRangeNumber],
20
- select: [FilterSelect],
21
- 'select-buttons': [FilterSelectButtons],
22
- boolean: [FilterCheckbox],
23
- checkbox: [FilterCheckbox],
24
- month: [FilterInput, FilterRangeDate],
25
- week: [FilterInput, FilterRangeDate],
26
- date: [FilterInput, FilterRangeDate],
27
- time: [FilterInput, FilterRangeDate],
28
- datetime: [FilterInput, FilterRangeDate],
29
- color: [FilterInput],
30
- progress: [FilterInput, FilterRangeNumber],
31
- link: [FilterInput],
32
- image: [FilterInput],
33
- json5: [FilterInput],
34
- scanner: [FilterInputBarcode],
35
- barcode: [FilterInputBarcode]
36
- }
37
-
38
- export function registerFilterRenderer(type: string, renderer: FilterSelectRenderer[]) {
39
- RENDERERS[type] = renderer
40
- }
41
-
42
- export function unregisterFilterRenderer(type: string): void {
43
- delete RENDERERS[type]
44
- }
45
-
46
- export function getFilterRenderers(): { [name: string]: FilterSelectRenderer[] } {
47
- return { ...RENDERERS }
48
- }
49
-
50
- export function getFilterRenderer(type: string): FilterSelectRenderer[] {
51
- if (typeof type === 'function') {
52
- return type
53
- }
54
-
55
- return RENDERERS[type || 'text'] || [FilterInput]
56
- }
@@ -1,3 +0,0 @@
1
- export const DateFormatter = (value: any): string => {
2
- return ''
3
- }
@@ -1 +0,0 @@
1
- export * from './registry'
@@ -1,3 +0,0 @@
1
- export const NumberFormatter = (value: any): string => {
2
- return ''
3
- }
@@ -1,30 +0,0 @@
1
- import { NOOP } from '../const'
2
- import { DateFormatter } from './date-formatter'
3
- import { NumberFormatter } from './number-formatter'
4
- import { TextFormatter } from './text-formatter'
5
-
6
- var FORMATTERS: { [name: string]: (value: any) => string } = {
7
- number: NumberFormatter,
8
- date: DateFormatter,
9
- text: TextFormatter
10
- }
11
-
12
- export function registerFormatter(type: string, formatter: (value: any) => string) {
13
- FORMATTERS[type] = formatter
14
- }
15
-
16
- export function unregisterFormatter(type: string) {
17
- delete FORMATTERS[type]
18
- }
19
-
20
- export function getFormatters() {
21
- return { ...FORMATTERS }
22
- }
23
-
24
- export function getFormatter(type: string) {
25
- if (typeof type == 'function') {
26
- return type
27
- }
28
-
29
- return FORMATTERS[type] || NOOP
30
- }
@@ -1,3 +0,0 @@
1
- export const TextFormatter = (value: any): string => {
2
- return ''
3
- }
@@ -1,51 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
-
3
- import { html, nothing } from 'lit'
4
- import { ifDefined } from 'lit/directives/if-defined.js'
5
-
6
- import { ColumnConfig, FieldRenderer, GristRecord, HeaderRenderer } from '../types'
7
-
8
- export class GutterButton {
9
- static instance(config: Partial<ColumnConfig> = { type: 'gutter', gutterName: 'button' }) {
10
- var { icon = 'edit', title, iconOnly = true } = config
11
-
12
- var iconFn = typeof icon == 'function' ? icon : (record?: GristRecord) => icon
13
- var titleFn = typeof title == 'function' ? title : (record?: GristRecord) => title
14
-
15
- return Object.assign(
16
- {},
17
- {
18
- type: 'gutter',
19
- gutterName: 'button',
20
- width: 26,
21
- resizable: false,
22
- sortable: false,
23
- header: {
24
- renderer: function (column) {
25
- const title = titleFn()
26
- const icon = iconFn()
27
-
28
- return iconOnly ? html` <md-icon title=${ifDefined(title)}>${icon}</md-icon> ` : title
29
- } as HeaderRenderer
30
- },
31
- record: {
32
- align: 'center',
33
- renderer: function (value, column, record, rowIndex, field) {
34
- const title = titleFn(record)
35
- const icon = iconFn(record)
36
-
37
- return iconOnly
38
- ? html` <md-icon title=${ifDefined(title && titleFn(record))}>${iconFn(record)}</md-icon> `
39
- : title || icon
40
- ? html`<button><md-icon>${iconFn(record)}</md-icon>${titleFn(record)}</button>`
41
- : nothing
42
- } as FieldRenderer
43
- },
44
- forGrid: true,
45
- forList: true,
46
- forCard: true
47
- },
48
- config
49
- )
50
- }
51
- }
@@ -1,96 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
-
3
- import { css, html, LitElement } from 'lit'
4
- import { customElement, property } from 'lit/decorators.js'
5
-
6
- import { ColumnConfig, FieldRenderer, GristEventHandler } from '../types'
7
-
8
- @customElement('ox-gutter-dirty-element')
9
- class GutterDirtyElement extends LitElement {
10
- static styles = css`
11
- :host {
12
- display: flex;
13
- margin: auto;
14
- }
15
-
16
- md-icon {
17
- width: var(--grid-record-dirty-icon-size);
18
- height: var(--grid-record-dirty-icon-size);
19
- border-radius: 50%;
20
- opacity: 0.8;
21
- }
22
-
23
- [add] {
24
- background-color: var(--md-sys-color-on-primary-container);
25
- }
26
-
27
- [remove] {
28
- background-color: var(--md-sys-color-error);
29
- }
30
-
31
- [done] {
32
- background-color: var(--status-info-color);
33
- }
34
- `
35
-
36
- @property({ type: String }) value?: string
37
-
38
- render() {
39
- switch (this.value) {
40
- case '+':
41
- return html` <md-icon style=${INLINESTYLE} center add>add</md-icon> `
42
- case '-':
43
- return html` <md-icon style=${INLINESTYLE} center remove>remove</md-icon> `
44
- case 'M':
45
- return html` <md-icon style=${INLINESTYLE} center done>done</md-icon> `
46
- default:
47
- return ''
48
- }
49
- }
50
- }
51
-
52
- const INLINESTYLE =
53
- 'font-size: var(--grid-record-fontsize); vertical-align: middle; color: var(--grid-record-dirty-color)'
54
-
55
- export class GutterDirty {
56
- static instance(config: Partial<ColumnConfig> = { type: 'gutter', name: '__dirty__' }) {
57
- return Object.assign(
58
- {},
59
- {
60
- type: 'gutter',
61
- name: '__dirty__',
62
- gutterName: 'dirty',
63
- width: 30,
64
- resizable: false,
65
- sortable: false,
66
- header: '',
67
- record: {
68
- align: 'center',
69
- renderer: function (value, column, record, rowIndex, field) {
70
- return value ? html` <ox-gutter-dirty-element value=${value}></ox-gutter-dirty-element> ` : html``
71
- } as FieldRenderer
72
- },
73
- forGrid: true,
74
- forList: false,
75
- forCard: false,
76
- handlers: {
77
- dblclick: ((columns, data, column, record, rowIndex, target) => {
78
- target.dispatchEvent(
79
- new CustomEvent('set-select-block', {
80
- bubbles: true,
81
- composed: true,
82
- detail: {
83
- startRow: rowIndex,
84
- startColumn: 0,
85
- endRow: rowIndex,
86
- endColumn: -1
87
- }
88
- })
89
- )
90
- }) as GristEventHandler
91
- }
92
- },
93
- config
94
- )
95
- }
96
- }
@@ -1,89 +0,0 @@
1
- import { html } from 'lit'
2
-
3
- import { DataCard } from '../data-card/data-card'
4
- import { DataGrid } from '../data-grid/data-grid'
5
- import { DataList } from '../data-list/data-list'
6
- import { ColumnConfig, FieldRenderer, HeaderRenderer } from '../types'
7
-
8
- export class GutterRowSelector {
9
- static instance(config: Partial<ColumnConfig> = { type: 'gutter', name: '__selected__' }) {
10
- return Object.assign(
11
- {},
12
- {
13
- type: 'gutter',
14
- name: '__selected__',
15
- gutterName: 'row-selector',
16
- width: 30,
17
- resizable: false,
18
- sortable: false,
19
- header: {
20
- renderer: function (this: DataGrid | DataList | DataCard, column) {
21
- var checked = ((this.data || {}).records || []).find(record => record['__selected__'])
22
-
23
- return html`
24
- <input
25
- type="checkbox"
26
- .checked=${!!checked}
27
- @change=${(e: Event) => {
28
- let selected = column.multiple ? (e.target as HTMLInputElement).checked : false
29
-
30
- this.dispatchEvent(
31
- new CustomEvent('select-all-change', {
32
- bubbles: true,
33
- composed: true,
34
- detail: {
35
- selected
36
- }
37
- })
38
- )
39
-
40
- e.stopPropagation()
41
- }}
42
- />
43
- `
44
- } as HeaderRenderer
45
- },
46
- record: {
47
- align: 'center',
48
- renderer: function (value, column, record, rowIndex, field) {
49
- return html`
50
- <input
51
- type=${column.multiple ? 'checkbox' : 'radio'}
52
- .checked=${!!value}
53
- @click=${(e: Event) => {
54
- e.stopPropagation()
55
- }}
56
- @change=${(e: Event) => {
57
- let selected = (e.target as HTMLInputElement).checked
58
-
59
- let detail = column.multiple
60
- ? {
61
- added: selected ? [record] : [],
62
- removed: selected ? [] : [record]
63
- }
64
- : {
65
- records: selected ? [record] : []
66
- }
67
-
68
- field.dispatchEvent(
69
- new CustomEvent('select-record-change', {
70
- bubbles: true,
71
- composed: true,
72
- detail
73
- })
74
- )
75
-
76
- e.stopPropagation()
77
- }}
78
- />
79
- `
80
- } as FieldRenderer
81
- },
82
- forGrid: true,
83
- forList: true,
84
- forCard: true
85
- },
86
- config
87
- )
88
- }
89
- }
@@ -1,54 +0,0 @@
1
- import { DataCard } from '../data-card/data-card'
2
- import { DataGrid } from '../data-grid/data-grid'
3
- import { DataList } from '../data-list/data-list'
4
- import { ColumnConfig, ColumnWidthCallback, FieldRenderer, GristEventHandler } from '../types'
5
-
6
- export class GutterSequence {
7
- static instance(config: Partial<ColumnConfig> = { type: 'gutter', name: '__seq__' }) {
8
- return {
9
- type: 'gutter',
10
- name: '__seq__',
11
- getterType: 'sequence',
12
- width: function (this: DataGrid | DataList | DataCard, column): string {
13
- if (this.data) {
14
- var { limit = 0, page = 1, records = [] } = this.data || {}
15
- var lastIndex = (page - 1) * limit + records.length
16
- } else {
17
- var lastIndex = 100
18
- }
19
-
20
- /* 1ch의 폭은 해당 폰트 0의 폭을 의미함. Arial이 약 8px이며, 정수로 떨어지지 않을 수 있으므로, 다소 여유있게 10px을 기준으로 함. */
21
- return `${Math.max(String(lastIndex).length * 10, 20)}px`
22
- } as ColumnWidthCallback,
23
- resizable: false,
24
- sortable: false,
25
- header: '#',
26
- record: {
27
- renderer: function (value, column, record, rowIndex, field) {
28
- return value
29
- } as FieldRenderer,
30
- align: 'right'
31
- },
32
- forGrid: true,
33
- forList: false,
34
- forCard: false,
35
- handlers: {
36
- dblclick: ((columns, data, column, record, rowIndex, target) => {
37
- target.dispatchEvent(
38
- new CustomEvent('set-select-block', {
39
- bubbles: true,
40
- composed: true,
41
- detail: {
42
- startRow: rowIndex,
43
- startColumn: 0,
44
- endRow: rowIndex,
45
- endColumn: -1
46
- }
47
- })
48
- )
49
- }) as GristEventHandler
50
- },
51
- ...config
52
- }
53
- }
54
- }
@@ -1 +0,0 @@
1
- export * from './registry'
@@ -1,32 +0,0 @@
1
- import { ColumnConfig } from '../types'
2
- import { GutterButton } from './gutter-button'
3
- import { GutterDirty } from './gutter-dirty'
4
- import { GutterRowSelector } from './gutter-row-selector'
5
- import { GutterSequence } from './gutter-sequence'
6
-
7
- var GUTTERS: { [name: string]: any } = {
8
- sequence: GutterSequence,
9
- 'row-selector': GutterRowSelector,
10
- button: GutterButton,
11
- dirty: GutterDirty
12
- }
13
-
14
- export function registerGutter(name: string, gutter: any) {
15
- GUTTERS[name] = gutter
16
- }
17
-
18
- export function unregisterGutter(name: string) {
19
- delete GUTTERS[name]
20
- }
21
-
22
- export function getGutters() {
23
- return { ...GUTTERS }
24
- }
25
-
26
- export const generateGutterColumn = (config: ColumnConfig) => {
27
- var clazz = GUTTERS[config.gutterName || '']
28
-
29
- if (clazz) {
30
- return clazz.instance(config)
31
- }
32
- }
@@ -1,80 +0,0 @@
1
- import { html } from 'lit'
2
- import { OxPopupMenu } from '@operato/popup'
3
-
4
- import { DataGridField } from '../data-grid/data-grid-field'
5
- import { ColumnConfig, GristData, GristRecord } from '../types'
6
-
7
- function dispatchEvent(field: DataGridField, event: string) {
8
- field.dispatchEvent(
9
- new CustomEvent(event, {
10
- bubbles: true,
11
- composed: true,
12
- detail: field.record
13
- })
14
- )
15
- }
16
-
17
- /*
18
- * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
19
- * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
20
- */
21
- export const ContextMenuTreeMutation = function (
22
- columns: ColumnConfig[],
23
- data: GristData,
24
- column: ColumnConfig,
25
- record: GristRecord,
26
- rowIndex: number,
27
- field: DataGridField,
28
- event: Event
29
- ): void {
30
- const e = event as PointerEvent
31
- if (!('pageX' in e && 'pageY' in e)) {
32
- return
33
- }
34
-
35
- e.preventDefault()
36
-
37
- OxPopupMenu.open({
38
- template: html`
39
- <ox-popup-menuitem
40
- label="add sibling node"
41
- @click=${() => {
42
- dispatchEvent(field, 'add-sibling-node')
43
- }}
44
- >
45
- <md-icon slot="icon">add</md-icon>
46
- </ox-popup-menuitem>
47
-
48
- <ox-popup-menuitem
49
- label="add child node"
50
- @click=${() => {
51
- dispatchEvent(field, 'add-child-node')
52
- }}
53
- >
54
- <md-icon slot="icon">playlist_add</md-icon>
55
- </ox-popup-menuitem>
56
-
57
- <div separator></div>
58
-
59
- <ox-popup-menuitem
60
- label="collapse all"
61
- @click=${() => {
62
- dispatchEvent(field, 'collapse-all')
63
- }}
64
- >
65
- <md-icon slot="icon">unfold_less</md-icon>
66
- </ox-popup-menuitem>
67
-
68
- <ox-popup-menuitem
69
- label="expand all"
70
- @click=${() => {
71
- dispatchEvent(field, 'expand-all')
72
- }}
73
- >
74
- <md-icon slot="icon">unfold_more</md-icon>
75
- </ox-popup-menuitem>
76
- `,
77
- top: e.pageY,
78
- left: e.pageX
79
- })
80
- }
@@ -1 +0,0 @@
1
- export * from './registry'
@@ -1,44 +0,0 @@
1
- import { DataGridField } from '../data-grid/data-grid-field'
2
- import { ColumnConfig, GristData, GristRecord } from '../types'
3
-
4
- /*
5
- * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
6
- * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
7
- */
8
-
9
- export const MoveDown = function (
10
- columns: ColumnConfig[],
11
- data: GristData,
12
- column: ColumnConfig,
13
- record: GristRecord,
14
- rowIndex: number,
15
- field: DataGridField
16
- ): void {
17
- var moveTo = rowIndex + 1
18
- var length = data.records.length
19
-
20
- if (rowIndex >= length || moveTo < 0 || moveTo >= length) {
21
- return
22
- }
23
-
24
- data.records.splice(rowIndex, 1)
25
- data.records.splice(moveTo, 0, record)
26
-
27
- field.dispatchEvent(
28
- new CustomEvent('record-change', {
29
- bubbles: true,
30
- composed: true
31
- })
32
- )
33
-
34
- field.dispatchEvent(
35
- new CustomEvent('focus-change', {
36
- bubbles: true,
37
- composed: true,
38
- detail: {
39
- row: moveTo,
40
- column: column
41
- }
42
- })
43
- )
44
- }
@@ -1,44 +0,0 @@
1
- import { DataGridField } from '../data-grid/data-grid-field'
2
- import { ColumnConfig, GristData, GristRecord } from '../types'
3
-
4
- /*
5
- * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
6
- * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
7
- */
8
-
9
- export const MoveUp = function (
10
- columns: ColumnConfig[],
11
- data: GristData,
12
- column: ColumnConfig,
13
- record: GristRecord,
14
- rowIndex: number,
15
- field: DataGridField
16
- ): void {
17
- var moveTo = rowIndex - 1
18
- var length = data.records.length
19
-
20
- if (rowIndex >= length || moveTo < 0 || moveTo >= length) {
21
- return
22
- }
23
-
24
- data.records.splice(rowIndex, 1)
25
- data.records.splice(moveTo, 0, record)
26
-
27
- field.dispatchEvent(
28
- new CustomEvent('record-change', {
29
- bubbles: true,
30
- composed: true
31
- })
32
- )
33
-
34
- field.dispatchEvent(
35
- new CustomEvent('focus-change', {
36
- bubbles: true,
37
- composed: true,
38
- detail: {
39
- row: moveTo,
40
- column: column
41
- }
42
- })
43
- )
44
- }
@@ -1,38 +0,0 @@
1
- import { DataGridField } from '../data-grid/data-grid-field'
2
- import { ColumnConfig, GristData, GristRecord } from '../types'
3
-
4
- /*
5
- * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
6
- * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
7
- */
8
-
9
- export const RecordCopy = function (
10
- columns: ColumnConfig[],
11
- data: GristData,
12
- column: ColumnConfig,
13
- record: GristRecord,
14
- rowIndex: number,
15
- field: DataGridField
16
- ): void {
17
- if (rowIndex >= data.records.length) {
18
- return
19
- }
20
-
21
- var copiedRecord = {
22
- __dirty__: '+'
23
- } as GristRecord
24
-
25
- columns
26
- .filter(column => column.record.editable)
27
- .forEach(column => {
28
- copiedRecord[column.name] = record[column.name]
29
- })
30
-
31
- data.records.splice(rowIndex + 1, 0, copiedRecord)
32
- field.dispatchEvent(
33
- new CustomEvent('record-change', {
34
- bubbles: true,
35
- composed: true
36
- })
37
- )
38
- }
@@ -1,30 +0,0 @@
1
- import { DataGridField } from '../data-grid/data-grid-field'
2
- import { ColumnConfig, GristData, GristRecord } from '../types'
3
-
4
- /*
5
- * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
6
- * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
7
- */
8
-
9
- export const RecordDelete = function (
10
- columns: ColumnConfig[],
11
- data: GristData,
12
- column: ColumnConfig,
13
- record: GristRecord,
14
- rowIndex: number,
15
- field: DataGridField
16
- ): void {
17
- if (rowIndex >= data.records.length) {
18
- return
19
- }
20
-
21
- record.__dirty__ = '-'
22
- data.records.splice(rowIndex, 1)
23
-
24
- field.dispatchEvent(
25
- new CustomEvent('record-change', {
26
- bubbles: true,
27
- composed: true
28
- })
29
- )
30
- }