@operato/data-grist 7.1.31 → 7.1.33

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 (175) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/src/data-grid/data-grid-field.js +4 -1
  3. package/dist/src/data-grid/data-grid-field.js.map +1 -1
  4. package/dist/src/record-view/record-view-body.js +8 -4
  5. package/dist/src/record-view/record-view-body.js.map +1 -1
  6. package/dist/src/types.d.ts +1 -1
  7. package/dist/src/types.js.map +1 -1
  8. package/dist/tsconfig.tsbuildinfo +1 -1
  9. package/package.json +10 -10
  10. package/.storybook/main.js +0 -3
  11. package/.storybook/preview.js +0 -52
  12. package/.storybook/server.mjs +0 -8
  13. package/demo/data-grist-test.html +0 -468
  14. package/demo/favicon.ico +0 -0
  15. package/demo/index.html +0 -541
  16. package/demo/report-test.html +0 -249
  17. package/src/accumulator/accumulator.ts +0 -63
  18. package/src/configure/column-builder.ts +0 -114
  19. package/src/configure/config-builder.ts +0 -40
  20. package/src/configure/filters-option-builder.ts +0 -8
  21. package/src/configure/imex-option-builder.ts +0 -5
  22. package/src/configure/list-option-builder.ts +0 -9
  23. package/src/configure/rows-option-builder.ts +0 -38
  24. package/src/configure/tree-option-builder.ts +0 -22
  25. package/src/configure/zero-config.ts +0 -83
  26. package/src/const.ts +0 -1
  27. package/src/data-card/data-card-field.ts +0 -94
  28. package/src/data-card/data-card-gutter-menu.ts +0 -94
  29. package/src/data-card/data-card-gutter.ts +0 -103
  30. package/src/data-card/data-card.ts +0 -154
  31. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  32. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  33. package/src/data-card/record-card.ts +0 -289
  34. package/src/data-consumer.ts +0 -11
  35. package/src/data-grid/data-grid-accum-field.ts +0 -109
  36. package/src/data-grid/data-grid-body-style.ts +0 -99
  37. package/src/data-grid/data-grid-body.ts +0 -753
  38. package/src/data-grid/data-grid-field.ts +0 -236
  39. package/src/data-grid/data-grid-footer.ts +0 -117
  40. package/src/data-grid/data-grid-header.ts +0 -574
  41. package/src/data-grid/data-grid.ts +0 -293
  42. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  43. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  44. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  45. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  46. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  47. package/src/data-grist.ts +0 -1233
  48. package/src/data-list/data-list-field.ts +0 -82
  49. package/src/data-list/data-list-gutter.ts +0 -108
  50. package/src/data-list/data-list.ts +0 -145
  51. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  52. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  53. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  54. package/src/data-list/record-partial.ts +0 -255
  55. package/src/data-manipulator.ts +0 -426
  56. package/src/data-provider.ts +0 -271
  57. package/src/data-report/data-report-body-style.ts +0 -58
  58. package/src/data-report/data-report-body.ts +0 -189
  59. package/src/data-report/data-report-component.ts +0 -138
  60. package/src/data-report/data-report-field.ts +0 -83
  61. package/src/data-report/data-report-header.ts +0 -242
  62. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  63. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  64. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  65. package/src/data-report.ts +0 -424
  66. package/src/editors/index.ts +0 -4
  67. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  68. package/src/editors/ox-grist-editor-color.ts +0 -10
  69. package/src/editors/ox-grist-editor-date.ts +0 -10
  70. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  71. package/src/editors/ox-grist-editor-email.ts +0 -10
  72. package/src/editors/ox-grist-editor-file.ts +0 -28
  73. package/src/editors/ox-grist-editor-image.ts +0 -31
  74. package/src/editors/ox-grist-editor-month.ts +0 -10
  75. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  76. package/src/editors/ox-grist-editor-number.ts +0 -27
  77. package/src/editors/ox-grist-editor-password.ts +0 -10
  78. package/src/editors/ox-grist-editor-select.ts +0 -55
  79. package/src/editors/ox-grist-editor-tel.ts +0 -10
  80. package/src/editors/ox-grist-editor-text.ts +0 -14
  81. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  82. package/src/editors/ox-grist-editor-time.ts +0 -10
  83. package/src/editors/ox-grist-editor-tree.ts +0 -27
  84. package/src/editors/ox-grist-editor-varname.ts +0 -36
  85. package/src/editors/ox-grist-editor-week.ts +0 -10
  86. package/src/editors/ox-grist-editor.ts +0 -207
  87. package/src/editors/ox-input-tree.ts +0 -226
  88. package/src/editors/registry.ts +0 -82
  89. package/src/empty-note.ts +0 -46
  90. package/src/filters/filter-checkbox.ts +0 -49
  91. package/src/filters/filter-input-barcode.ts +0 -34
  92. package/src/filters/filter-input.ts +0 -30
  93. package/src/filters/filter-range-date.ts +0 -81
  94. package/src/filters/filter-range-number.ts +0 -64
  95. package/src/filters/filter-select-buttons.ts +0 -60
  96. package/src/filters/filter-select.ts +0 -68
  97. package/src/filters/filter-styles.ts +0 -119
  98. package/src/filters/filters-form.ts +0 -476
  99. package/src/filters/index.ts +0 -10
  100. package/src/filters/registry.ts +0 -56
  101. package/src/formatters/date-formatter.ts +0 -3
  102. package/src/formatters/index.ts +0 -1
  103. package/src/formatters/number-formatter.ts +0 -3
  104. package/src/formatters/registry.ts +0 -30
  105. package/src/formatters/text-formatter.ts +0 -3
  106. package/src/gutters/gutter-button.ts +0 -51
  107. package/src/gutters/gutter-dirty.ts +0 -96
  108. package/src/gutters/gutter-row-selector.ts +0 -89
  109. package/src/gutters/gutter-sequence.ts +0 -54
  110. package/src/gutters/index.ts +0 -1
  111. package/src/gutters/registry.ts +0 -32
  112. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  113. package/src/handlers/index.ts +0 -1
  114. package/src/handlers/move-down.ts +0 -44
  115. package/src/handlers/move-up.ts +0 -44
  116. package/src/handlers/record-copy.ts +0 -38
  117. package/src/handlers/record-delete.ts +0 -30
  118. package/src/handlers/record-view-handler.ts +0 -27
  119. package/src/handlers/registry.ts +0 -42
  120. package/src/handlers/select-row-toggle.ts +0 -30
  121. package/src/handlers/select-row.ts +0 -27
  122. package/src/index.ts +0 -17
  123. package/src/personalizer/index.ts +0 -1
  124. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  125. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  126. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  127. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  128. package/src/record-view/index.ts +0 -2
  129. package/src/record-view/ox-record-creator.ts +0 -289
  130. package/src/record-view/record-view-body.ts +0 -250
  131. package/src/record-view/record-view-handler.ts +0 -86
  132. package/src/record-view/record-view.ts +0 -122
  133. package/src/renderers/index.ts +0 -14
  134. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  135. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  136. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  137. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  138. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  139. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  140. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  141. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  142. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  143. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  144. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  145. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  146. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  147. package/src/renderers/ox-grist-renderer.ts +0 -35
  148. package/src/renderers/registry.ts +0 -111
  149. package/src/sorters/sorters-control.ts +0 -143
  150. package/src/types.ts +0 -813
  151. package/src/utils/index.ts +0 -2
  152. package/src/utils/list-param.ts +0 -72
  153. package/src/utils/supports-passive.ts +0 -13
  154. package/stories/accumulator-format.stories.ts +0 -276
  155. package/stories/barcode-input-filter.stories.ts +0 -216
  156. package/stories/bounded-select-filters.stories.ts +0 -333
  157. package/stories/bounded-select-record.stories.ts +0 -336
  158. package/stories/click-event-custom.stories.ts +0 -288
  159. package/stories/click-event.stories.ts +0 -283
  160. package/stories/creatable-only-column.stories.ts +0 -253
  161. package/stories/default-filters.stories.ts +0 -241
  162. package/stories/dynamic-editable.stories.ts +0 -313
  163. package/stories/empty-sorters.stories.ts +0 -180
  164. package/stories/explicit-fetch.stories.ts +0 -186
  165. package/stories/fixed-column.stories.ts +0 -416
  166. package/stories/grid-setting.stories.ts +0 -501
  167. package/stories/grist-modes.stories.ts +0 -451
  168. package/stories/group-header.stories.ts +0 -442
  169. package/stories/record-view.stories.ts +0 -143
  170. package/stories/textarea.stories.ts +0 -261
  171. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  172. package/stories/tree-column.stories.ts +0 -296
  173. package/tsconfig.json +0 -26
  174. package/web-dev-server.config.mjs +0 -27
  175. 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
- }