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