@operato/data-grist 7.1.31 → 7.1.32

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