@operato/data-grist 8.0.0-alpha.8 → 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 (218) hide show
  1. package/CHANGELOG.md +186 -0
  2. package/dist/src/data-grid/data-grid-body.js +21 -7
  3. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  4. package/dist/src/data-grid/data-grid-footer.js +2 -0
  5. package/dist/src/data-grid/data-grid-footer.js.map +1 -1
  6. package/dist/src/data-grid/data-grid-header.d.ts +1 -1
  7. package/dist/src/data-grid/data-grid-header.js +13 -9
  8. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  9. package/dist/src/editors/ox-grist-editor-varname.d.ts +6 -0
  10. package/dist/src/editors/ox-grist-editor-varname.js +36 -0
  11. package/dist/src/editors/ox-grist-editor-varname.js.map +1 -0
  12. package/dist/src/editors/ox-grist-editor.js +3 -3
  13. package/dist/src/editors/ox-grist-editor.js.map +1 -1
  14. package/dist/src/editors/registry.js +3 -1
  15. package/dist/src/editors/registry.js.map +1 -1
  16. package/dist/src/gutters/gutter-sequence.d.ts +1 -1
  17. package/dist/src/record-view/index.d.ts +1 -1
  18. package/dist/src/record-view/index.js +1 -1
  19. package/dist/src/record-view/index.js.map +1 -1
  20. package/dist/src/record-view/{record-creator.d.ts → ox-record-creator.d.ts} +8 -4
  21. package/dist/src/record-view/{record-creator.js → ox-record-creator.js} +90 -34
  22. package/dist/src/record-view/ox-record-creator.js.map +1 -0
  23. package/dist/src/renderers/ox-grist-renderer-boolean.js +1 -1
  24. package/dist/src/renderers/ox-grist-renderer-boolean.js.map +1 -1
  25. package/dist/stories/accumulator-format.stories.d.ts +1 -1
  26. package/dist/stories/accumulator-format.stories.js +1 -1
  27. package/dist/stories/accumulator-format.stories.js.map +1 -1
  28. package/dist/stories/click-event-custom.stories.d.ts +45 -0
  29. package/dist/stories/click-event-custom.stories.js +247 -0
  30. package/dist/stories/click-event-custom.stories.js.map +1 -0
  31. package/dist/stories/click-event.stories.d.ts +1 -1
  32. package/dist/stories/click-event.stories.js +1 -1
  33. package/dist/stories/click-event.stories.js.map +1 -1
  34. package/dist/stories/fixed-column.stories.d.ts +1 -1
  35. package/dist/stories/fixed-column.stories.js +1 -1
  36. package/dist/stories/fixed-column.stories.js.map +1 -1
  37. package/dist/stories/grid-setting.stories.d.ts +1 -1
  38. package/dist/stories/grid-setting.stories.js +1 -1
  39. package/dist/stories/grid-setting.stories.js.map +1 -1
  40. package/dist/stories/grist-modes.stories.d.ts +1 -1
  41. package/dist/stories/grist-modes.stories.js +1 -1
  42. package/dist/stories/grist-modes.stories.js.map +1 -1
  43. package/dist/stories/group-header.stories.d.ts +1 -1
  44. package/dist/stories/group-header.stories.js +1 -1
  45. package/dist/stories/group-header.stories.js.map +1 -1
  46. package/dist/stories/textarea.stories.d.ts +1 -1
  47. package/dist/stories/textarea.stories.js +1 -1
  48. package/dist/stories/textarea.stories.js.map +1 -1
  49. package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
  50. package/dist/stories/tree-column-with-checkbox.stories.js +1 -1
  51. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  52. package/dist/stories/tree-column.stories.d.ts +1 -1
  53. package/dist/stories/tree-column.stories.js +1 -1
  54. package/dist/stories/tree-column.stories.js.map +1 -1
  55. package/dist/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +20 -20
  57. package/themes/calendar-theme.css +3 -1
  58. package/.storybook/main.js +0 -3
  59. package/.storybook/preview.js +0 -52
  60. package/.storybook/server.mjs +0 -8
  61. package/dist/src/record-view/record-creator.js.map +0 -1
  62. package/src/accumulator/accumulator.ts +0 -63
  63. package/src/configure/column-builder.ts +0 -114
  64. package/src/configure/config-builder.ts +0 -40
  65. package/src/configure/filters-option-builder.ts +0 -8
  66. package/src/configure/imex-option-builder.ts +0 -5
  67. package/src/configure/list-option-builder.ts +0 -9
  68. package/src/configure/rows-option-builder.ts +0 -38
  69. package/src/configure/tree-option-builder.ts +0 -22
  70. package/src/configure/zero-config.ts +0 -83
  71. package/src/const.ts +0 -1
  72. package/src/data-card/data-card-field.ts +0 -94
  73. package/src/data-card/data-card-gutter-menu.ts +0 -94
  74. package/src/data-card/data-card-gutter.ts +0 -103
  75. package/src/data-card/data-card.ts +0 -154
  76. package/src/data-card/event-handlers/record-card-click-handler.ts +0 -34
  77. package/src/data-card/event-handlers/record-card-dblclick-handler.ts +0 -34
  78. package/src/data-card/record-card.ts +0 -298
  79. package/src/data-consumer.ts +0 -11
  80. package/src/data-grid/data-grid-accum-field.ts +0 -109
  81. package/src/data-grid/data-grid-body-style.ts +0 -85
  82. package/src/data-grid/data-grid-body.ts +0 -749
  83. package/src/data-grid/data-grid-field.ts +0 -227
  84. package/src/data-grid/data-grid-footer.ts +0 -117
  85. package/src/data-grid/data-grid-header.ts +0 -574
  86. package/src/data-grid/data-grid.ts +0 -293
  87. package/src/data-grid/event-handlers/data-grid-body-click-handler.ts +0 -69
  88. package/src/data-grid/event-handlers/data-grid-body-contextmenu-handler.ts +0 -32
  89. package/src/data-grid/event-handlers/data-grid-body-dblclick-handler.ts +0 -42
  90. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +0 -24
  91. package/src/data-grid/event-handlers/data-grid-body-keydown-handler.ts +0 -234
  92. package/src/data-grist.ts +0 -1233
  93. package/src/data-list/data-list-field.ts +0 -82
  94. package/src/data-list/data-list-gutter.ts +0 -108
  95. package/src/data-list/data-list.ts +0 -145
  96. package/src/data-list/event-handlers/record-partial-click-handler.ts +0 -34
  97. package/src/data-list/event-handlers/record-partial-dblclick-handler.ts +0 -33
  98. package/src/data-list/event-handlers/record-partial-long-press-handler.ts +0 -33
  99. package/src/data-list/record-partial.ts +0 -264
  100. package/src/data-manipulator.ts +0 -426
  101. package/src/data-provider.ts +0 -271
  102. package/src/data-report/data-report-body-style.ts +0 -58
  103. package/src/data-report/data-report-body.ts +0 -189
  104. package/src/data-report/data-report-component.ts +0 -138
  105. package/src/data-report/data-report-field.ts +0 -83
  106. package/src/data-report/data-report-header.ts +0 -242
  107. package/src/data-report/event-handlers/data-report-body-click-handler.ts +0 -38
  108. package/src/data-report/event-handlers/data-report-body-dblclick-handler.ts +0 -25
  109. package/src/data-report/event-handlers/data-report-body-keydown-handler.ts +0 -68
  110. package/src/data-report.ts +0 -424
  111. package/src/editors/index.ts +0 -4
  112. package/src/editors/ox-grist-editor-checkbox.ts +0 -28
  113. package/src/editors/ox-grist-editor-color.ts +0 -10
  114. package/src/editors/ox-grist-editor-date.ts +0 -10
  115. package/src/editors/ox-grist-editor-datetime.ts +0 -27
  116. package/src/editors/ox-grist-editor-email.ts +0 -10
  117. package/src/editors/ox-grist-editor-file.ts +0 -28
  118. package/src/editors/ox-grist-editor-image.ts +0 -31
  119. package/src/editors/ox-grist-editor-month.ts +0 -10
  120. package/src/editors/ox-grist-editor-multiple-select.ts +0 -57
  121. package/src/editors/ox-grist-editor-number.ts +0 -27
  122. package/src/editors/ox-grist-editor-password.ts +0 -10
  123. package/src/editors/ox-grist-editor-select.ts +0 -55
  124. package/src/editors/ox-grist-editor-tel.ts +0 -10
  125. package/src/editors/ox-grist-editor-text.ts +0 -14
  126. package/src/editors/ox-grist-editor-textarea.ts +0 -16
  127. package/src/editors/ox-grist-editor-time.ts +0 -10
  128. package/src/editors/ox-grist-editor-tree.ts +0 -27
  129. package/src/editors/ox-grist-editor-week.ts +0 -10
  130. package/src/editors/ox-grist-editor.ts +0 -207
  131. package/src/editors/ox-input-tree.ts +0 -226
  132. package/src/editors/registry.ts +0 -80
  133. package/src/empty-note.ts +0 -46
  134. package/src/filters/filter-checkbox.ts +0 -49
  135. package/src/filters/filter-input-barcode.ts +0 -34
  136. package/src/filters/filter-input.ts +0 -30
  137. package/src/filters/filter-range-date.ts +0 -81
  138. package/src/filters/filter-range-number.ts +0 -64
  139. package/src/filters/filter-select-buttons.ts +0 -60
  140. package/src/filters/filter-select.ts +0 -68
  141. package/src/filters/filter-styles.ts +0 -119
  142. package/src/filters/filters-form.ts +0 -476
  143. package/src/filters/index.ts +0 -10
  144. package/src/filters/registry.ts +0 -56
  145. package/src/formatters/date-formatter.ts +0 -3
  146. package/src/formatters/index.ts +0 -1
  147. package/src/formatters/number-formatter.ts +0 -3
  148. package/src/formatters/registry.ts +0 -30
  149. package/src/formatters/text-formatter.ts +0 -3
  150. package/src/gutters/gutter-button.ts +0 -51
  151. package/src/gutters/gutter-dirty.ts +0 -96
  152. package/src/gutters/gutter-row-selector.ts +0 -89
  153. package/src/gutters/gutter-sequence.ts +0 -54
  154. package/src/gutters/index.ts +0 -1
  155. package/src/gutters/registry.ts +0 -32
  156. package/src/handlers/contextmenu-tree-mutation.ts +0 -80
  157. package/src/handlers/index.ts +0 -1
  158. package/src/handlers/move-down.ts +0 -44
  159. package/src/handlers/move-up.ts +0 -44
  160. package/src/handlers/record-copy.ts +0 -38
  161. package/src/handlers/record-delete.ts +0 -30
  162. package/src/handlers/record-view-handler.ts +0 -27
  163. package/src/handlers/registry.ts +0 -42
  164. package/src/handlers/select-row-toggle.ts +0 -30
  165. package/src/handlers/select-row.ts +0 -27
  166. package/src/index.ts +0 -17
  167. package/src/personalizer/index.ts +0 -1
  168. package/src/personalizer/ox-grist-filter-personalizer.ts +0 -192
  169. package/src/personalizer/ox-grist-personalizer.ts +0 -226
  170. package/src/record-view/event-handlers/record-view-body-click-handler.ts +0 -33
  171. package/src/record-view/event-handlers/record-view-body-keydown-handler.ts +0 -26
  172. package/src/record-view/index.ts +0 -2
  173. package/src/record-view/record-creator.ts +0 -226
  174. package/src/record-view/record-view-body.ts +0 -257
  175. package/src/record-view/record-view-handler.ts +0 -86
  176. package/src/record-view/record-view.ts +0 -122
  177. package/src/renderers/index.ts +0 -14
  178. package/src/renderers/ox-grist-renderer-boolean.ts +0 -43
  179. package/src/renderers/ox-grist-renderer-color.ts +0 -15
  180. package/src/renderers/ox-grist-renderer-date.ts +0 -62
  181. package/src/renderers/ox-grist-renderer-file.ts +0 -31
  182. package/src/renderers/ox-grist-renderer-image.ts +0 -27
  183. package/src/renderers/ox-grist-renderer-json5.ts +0 -36
  184. package/src/renderers/ox-grist-renderer-link.ts +0 -17
  185. package/src/renderers/ox-grist-renderer-password.ts +0 -7
  186. package/src/renderers/ox-grist-renderer-progress.ts +0 -45
  187. package/src/renderers/ox-grist-renderer-select.ts +0 -58
  188. package/src/renderers/ox-grist-renderer-text.ts +0 -16
  189. package/src/renderers/ox-grist-renderer-textarea.ts +0 -7
  190. package/src/renderers/ox-grist-renderer-tree.ts +0 -189
  191. package/src/renderers/ox-grist-renderer.ts +0 -35
  192. package/src/renderers/registry.ts +0 -111
  193. package/src/sorters/sorters-control.ts +0 -143
  194. package/src/types.ts +0 -813
  195. package/src/utils/index.ts +0 -2
  196. package/src/utils/list-param.ts +0 -72
  197. package/src/utils/supports-passive.ts +0 -13
  198. package/stories/accumulator-format.stories.ts +0 -276
  199. package/stories/barcode-input-filter.stories.ts +0 -216
  200. package/stories/bounded-select-filters.stories.ts +0 -333
  201. package/stories/bounded-select-record.stories.ts +0 -336
  202. package/stories/click-event.stories.ts +0 -283
  203. package/stories/creatable-only-column.stories.ts +0 -253
  204. package/stories/default-filters.stories.ts +0 -241
  205. package/stories/dynamic-editable.stories.ts +0 -313
  206. package/stories/empty-sorters.stories.ts +0 -180
  207. package/stories/explicit-fetch.stories.ts +0 -186
  208. package/stories/fixed-column.stories.ts +0 -416
  209. package/stories/grid-setting.stories.ts +0 -501
  210. package/stories/grist-modes.stories.ts +0 -451
  211. package/stories/group-header.stories.ts +0 -442
  212. package/stories/record-view.stories.ts +0 -143
  213. package/stories/textarea.stories.ts +0 -261
  214. package/stories/tree-column-with-checkbox.stories.ts +0 -297
  215. package/stories/tree-column.stories.ts +0 -296
  216. package/tsconfig.json +0 -26
  217. package/web-dev-server.config.mjs +0 -27
  218. package/web-test-runner.config.mjs +0 -45
@@ -1,27 +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 RecordViewHandler = function (
10
- columns: ColumnConfig[],
11
- data: GristData,
12
- column: ColumnConfig,
13
- record: GristRecord,
14
- rowIndex: number,
15
- field: DataGridField
16
- ): void {
17
- field.dispatchEvent(
18
- new CustomEvent('show-record-view', {
19
- bubbles: true,
20
- composed: true,
21
- detail: {
22
- record,
23
- row: rowIndex
24
- }
25
- })
26
- )
27
- }
@@ -1,42 +0,0 @@
1
- import { GristEventHandler } from '../types'
2
- import { ContextMenuTreeMutation } from './contextmenu-tree-mutation'
3
- import { MoveDown } from './move-down'
4
- import { MoveUp } from './move-up'
5
- import { RecordCopy } from './record-copy'
6
- import { RecordDelete } from './record-delete'
7
- import { RecordViewHandler } from './record-view-handler'
8
- import { SelectRow } from './select-row'
9
- import { SelectRowToggle } from './select-row-toggle'
10
-
11
- var HANDLERS: {
12
- [name: string]: GristEventHandler
13
- } = {
14
- 'record-view': RecordViewHandler as GristEventHandler,
15
- 'select-row': SelectRow as GristEventHandler,
16
- 'select-row-toggle': SelectRowToggle as GristEventHandler,
17
- 'move-up': MoveUp as GristEventHandler,
18
- 'move-down': MoveDown as GristEventHandler,
19
- 'record-copy': RecordCopy as GristEventHandler,
20
- 'record-delete': RecordDelete as GristEventHandler,
21
- 'contextmenu-tree-mutation': ContextMenuTreeMutation as GristEventHandler
22
- }
23
-
24
- export function registerGristEventHandler(type: string, handler: GristEventHandler) {
25
- HANDLERS[type] = handler
26
- }
27
-
28
- export function unregisterGristEventHandler(type: string) {
29
- delete HANDLERS[type]
30
- }
31
-
32
- export function getGristEventHandlers() {
33
- return { ...HANDLERS }
34
- }
35
-
36
- export function getGristEventHandler(type: string | GristEventHandler): GristEventHandler {
37
- if (typeof type == 'function') {
38
- return type
39
- }
40
-
41
- return HANDLERS[type]
42
- }
@@ -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 SelectRowToggle = function (
10
- columns: ColumnConfig[],
11
- data: GristData,
12
- column: ColumnConfig,
13
- record: GristRecord,
14
- rowIndex: number,
15
- field: DataGridField
16
- ): void {
17
- field?.dispatchEvent(
18
- new CustomEvent('select-record-change', {
19
- bubbles: true,
20
- composed: true,
21
- detail: record['__selected__']
22
- ? {
23
- removed: [record]
24
- }
25
- : {
26
- added: [record]
27
- }
28
- })
29
- )
30
- }
@@ -1,27 +0,0 @@
1
- import { ColumnConfig, GristData, GristRecord } from '../types'
2
-
3
- import { DataGridField } from '../data-grid/data-grid-field'
4
-
5
- /*
6
- * handler들은 ox-grid-field 로부터 호출되는 것을 전제로 하며,
7
- * 전반적인 처리를 위해서, columns 및 data 정보를 포함해서 제공할 수 있어야 한다.
8
- */
9
-
10
- export const SelectRow = function (
11
- columns: ColumnConfig[],
12
- data: GristData,
13
- column: ColumnConfig,
14
- record: GristRecord,
15
- rowIndex: number,
16
- field: DataGridField
17
- ): void {
18
- field.dispatchEvent(
19
- new CustomEvent('select-record-change', {
20
- bubbles: true,
21
- composed: true,
22
- detail: {
23
- added: [record]
24
- }
25
- })
26
- )
27
- }
package/src/index.ts DELETED
@@ -1,17 +0,0 @@
1
- export * from './types'
2
-
3
- export * from './configure/zero-config'
4
- export * from './data-grist'
5
- export * from './data-report'
6
-
7
- export * from './editors'
8
- export * from './renderers'
9
- export * from './handlers'
10
- export * from './formatters'
11
- export * from './gutters'
12
- export * from './filters'
13
- export * from './sorters/sorters-control'
14
- export * from './record-view'
15
- export * from './personalizer'
16
-
17
- export * from './utils/list-param'
@@ -1 +0,0 @@
1
- export * from './ox-grist-personalizer'
@@ -1,192 +0,0 @@
1
- import '@material/web/button/outlined-button.js'
2
-
3
- import { css, html, LitElement } from 'lit'
4
- import { customElement, property, state } from 'lit/decorators.js'
5
-
6
- import { i18next } from '@operato/i18n'
7
- import { OxPopupList } from '@operato/popup'
8
-
9
- import { FilterConfigObject, FilterPreference, PersonalGristPreference } from '../types.js'
10
-
11
- import { OxFiltersForm } from '../filters/filters-form'
12
-
13
- @customElement('ox-grist-filter-personalizer')
14
- export class OxGristFilterPersonalizer extends LitElement {
15
- static styles = [
16
- css`
17
- md-icon {
18
- --md-icon-size: 16px;
19
- width: 36px;
20
- height: 36px;
21
- color: var(--md-sys-color-secondary-container);
22
- cursor: pointer;
23
-
24
- display: flex;
25
- place-content: center;
26
- place-items: center;
27
- position: relative;
28
-
29
- &:hover {
30
- color: var(--md-sys-color-primary-container);
31
- }
32
- }
33
-
34
- md-ripple {
35
- border-radius: 50%;
36
- inset: unset;
37
- height: 36px;
38
- width: 36px;
39
- }
40
- `
41
- ]
42
-
43
- @property({ type: Boolean, attribute: true }) debug: boolean = false
44
-
45
- @state() private preference?: PersonalGristPreference
46
-
47
- render() {
48
- return html`
49
- <md-icon
50
- @click=${async (e: MouseEvent) => {
51
- const form = this.closest('ox-filters-form') as OxFiltersForm
52
- const { filterColumns, personalFilters = [] } = form
53
- const queryFilters = await form.getQueryFilters()
54
-
55
- this.preference = {
56
- filters: (
57
- personalFilters.map((filter: FilterPreference) => {
58
- const originFilterColumn =
59
- filter.name == 'search'
60
- ? { filter: { name: 'search' } }
61
- : filterColumns.find(f => f.name == filter.name)
62
-
63
- if (!originFilterColumn) {
64
- /* 원래 filters 설정에 있는 것들 만을 유지한다. */
65
- return
66
- }
67
-
68
- const { value } = originFilterColumn.filter! as FilterConfigObject
69
-
70
- return {
71
- name: filter.name,
72
- hidden: filter.hidden,
73
- /* 만약, filters에 기본값이 이미 설정되어 있다면, 그대로 유지한다. */
74
- value: value ?? queryFilters.find(f => f.name == filter.name)?.value
75
- }
76
- }) || []
77
- ).filter(Boolean) as FilterPreference[]
78
- }
79
-
80
- const template = html`
81
- <div class="personalizer-header" slot="header">
82
- <md-icon
83
- style="margin-left: auto;"
84
- @click=${async (e: MouseEvent) => {
85
- if (form.personalConfigProvider) {
86
- form.personalConfig = await form.personalConfigProvider.save(this.preference)
87
- }
88
- popup.close()
89
- }}
90
- title=${String(i18next.t('button.save'))}
91
- >keep</md-icon
92
- ><md-icon
93
- @click=${async (e: MouseEvent) => {
94
- if (form.personalConfigProvider) {
95
- form.personalConfig = this.preference = {}
96
- await form.personalConfigProvider.reset()
97
- }
98
- popup.close()
99
- }}
100
- title=${String(i18next.t('button.delete'))}
101
- >keep_off</md-icon
102
- ><md-icon @click=${async (e: MouseEvent) => popup.close()} title=${String(i18next.t('button.close'))}
103
- >close</md-icon
104
- >
105
- </div>
106
-
107
- ${this.preference?.filters!.map(
108
- filter => html`
109
- <ox-checkbox label="checkbox" ?checked=${!filter.hidden} value=${filter.name} option
110
- >${filter.name}<span style="position: absolute; right: 10px; cursor: row-resize;opacity:.5" handle
111
- >☰</span
112
- ></ox-checkbox
113
- >
114
- `
115
- )}
116
- `
117
-
118
- const popup = OxPopupList.open({
119
- template,
120
- multiple: true,
121
- sortable: true,
122
- debug: this.debug,
123
- attrSelected: 'checked',
124
- top: e.pageY,
125
- left: e.pageX,
126
- styles: css`
127
- :host {
128
- width: 240px;
129
- min-height: 300px;
130
- max-height: 80%;
131
- overflow: auto;
132
- }
133
-
134
- ::slotted(.personalizer-header) {
135
- --md-icon-size: 1.4em;
136
-
137
- display: flex;
138
- flex-direction: row;
139
- align-items: center;
140
- text-transform: capitalize;
141
- box-shadow: 0 3px 3px rgba(0, 0, 0, 0.3);
142
- }
143
-
144
- ::slotted([option]) {
145
- position: relative;
146
- user-select: none;
147
- }
148
- `
149
- })
150
-
151
- popup.onselect = (e: Event) => {
152
- const selected = (e as CustomEvent).detail
153
-
154
- const pconfig: PersonalGristPreference = { ...form.personalConfig }
155
- const pfilters = this.preference?.filters!
156
-
157
- pconfig.filters = pfilters.map(filter => {
158
- return {
159
- name: filter.name,
160
- hidden: selected.indexOf(filter.name) == -1,
161
- value: filter.value
162
- }
163
- })
164
-
165
- form.personalConfig = this.preference = pconfig
166
-
167
- form.applyUpdatedConfiguration()
168
- }
169
-
170
- popup.addEventListener('sorted', (e: Event) => {
171
- const sorted = (e as CustomEvent).detail as HTMLElement[]
172
-
173
- const pconfig: PersonalGristPreference = { ...form.personalConfig }
174
- const pfilters = this.preference?.filters!
175
-
176
- pconfig.filters = sorted
177
- .map(element => {
178
- const name = (element as HTMLInputElement).value
179
- return pfilters.find(filter => filter.name == name)!
180
- })
181
- .filter(Boolean)
182
-
183
- form.personalConfig = this.preference = pconfig
184
-
185
- form.applyUpdatedConfiguration()
186
- })
187
- }}
188
- >settings<md-ripple></md-ripple
189
- ></md-icon>
190
- `
191
- }
192
- }
@@ -1,226 +0,0 @@
1
- import '@material/web/button/outlined-button.js'
2
-
3
- import { css, html, LitElement } from 'lit'
4
- import { customElement, property, state } from 'lit/decorators.js'
5
-
6
- import { i18next } from '@operato/i18n'
7
- import { OxPopupList } from '@operato/popup'
8
- import { OxCheckbox } from '@operato/input'
9
-
10
- import { ColumnConfig, PersonalGristPreference } from '../types'
11
- import { DataGrist } from '../data-grist'
12
-
13
- @customElement('ox-grist-personalizer')
14
- export class OxGristPersonalizer extends LitElement {
15
- static styles = [
16
- css`
17
- md-icon {
18
- --md-icon-size: 14px;
19
- width: 16px;
20
- height: 16px;
21
- color: var(--ox-grist-p13n-color, var(--md-sys-color-on-primary));
22
- background-color: var(--ox-grist-p13n-background-color, var(--md-sys-color-primary));
23
- border-radius: 0px 0px 7px 7px;
24
- cursor: pointer;
25
- padding-top: var(--spacing-small);
26
-
27
- &:hover {
28
- color: var(--ox-grist-p13n-hover-color, var(--md-sys-color-on-primary));
29
- background-color: var(--ox-grist-p13n-hover-background-color, var(--md-sys-color-surface-tint));
30
- }
31
- }
32
- `
33
- ]
34
-
35
- @property({ type: Boolean, attribute: true }) debug: boolean = false
36
-
37
- @state() private preference?: PersonalGristPreference
38
-
39
- render() {
40
- return html`
41
- <md-icon
42
- @click=${(e: MouseEvent) => {
43
- const grist = this.closest('ox-grist') as DataGrist
44
-
45
- const { config, compiledConfig, sorters, pagination, mode } = grist
46
- const { columns: compiledColumns } = compiledConfig
47
-
48
- const columns = compiledColumns
49
- .filter(ccolumn => {
50
- const column = config.columns.find((column: Partial<ColumnConfig>) => column.name == ccolumn.name)
51
- return column && column.name && column.type !== 'gutter' && !column.hidden && !column.unusable
52
- })
53
- .map(column => compiledColumns.find(compiledColumn => compiledColumn.name == column.name)!)
54
-
55
- this.preference = {
56
- columns: columns.map(column => {
57
- return {
58
- name: column.name,
59
- hidden: column.hidden,
60
- width: column.width
61
- }
62
- }),
63
- sorters,
64
- pagination: {
65
- ...pagination,
66
- limit: grist.getCurrentLimit()
67
- },
68
- mode
69
- }
70
-
71
- const template = html`
72
- <div class="personalizer-header" slot="header">
73
- <div
74
- style=${`
75
- display: flex;
76
- align-items: center;
77
- margin: 0 0 0 auto;
78
- min-height: 1.4em;
79
- color: var(--ox-grist-p13n-button-color, var(--md-sys-color-on-primary));
80
- background-color: var(--ox-grist-p13n-button-background-color, var(--md-sys-color-primary));
81
- border-radius: var(--md-sys-shape-corner-small);
82
- padding: 0 var(--spacing-small);
83
- cursor: pointer;
84
- `}
85
- @click=${async (e: MouseEvent) => {
86
- if (grist.personalConfigProvider) {
87
- const { mode, columns, sorters, pagination } = this.preference || {}
88
- grist.personalConfig = this.preference = await grist.personalConfigProvider.save({
89
- mode,
90
- columns,
91
- sorters,
92
- pagination
93
- })
94
- }
95
- popup.close()
96
- }}
97
- >
98
- ${String(i18next.t('button.save'))}
99
- </div>
100
- <div
101
- style=${`
102
- display: flex;
103
- align-items: center;
104
- margin: 0 0 0 var(--spacing-small, 4px);
105
- min-height: 1.4em;
106
- color: var(--ox-grist-p13n-button-color, var(--md-sys-color-on-primary));
107
- background-color: var(--ox-grist-p13n-button-background-color, var(--md-sys-color-primary));
108
- border-radius: var(--md-sys-shape-corner-small);
109
- padding: 0 var(--spacing-small);
110
- cursor: pointer;
111
- `}
112
- @click=${async (e: MouseEvent) => {
113
- if (grist.personalConfigProvider) {
114
- grist.personalConfig = this.preference = {}
115
- await grist.personalConfigProvider.reset()
116
- }
117
- popup.close()
118
- }}
119
- >
120
- ${String(i18next.t('button.delete'))}
121
- </div>
122
- <md-icon
123
- style=${`
124
- --md-icon-size: 1.2em;
125
- margin-left: var(--spacing-tiny, 2px);
126
- cursor: pointer;
127
- `}
128
- @click=${async (e: MouseEvent) => popup.close()}
129
- title=${String(i18next.t('button.close'))}
130
- >close</md-icon
131
- >
132
- </div>
133
-
134
- ${columns.map(
135
- column => html`
136
- <ox-checkbox label="checkbox" ?checked=${!column.hidden} value=${column.name} option
137
- >${column.header.renderer(column)}<span
138
- style="position: absolute; right: 10px; cursor: row-resize;opacity:.5"
139
- handle
140
- >☰</span
141
- ></ox-checkbox
142
- >
143
- `
144
- )}
145
- `
146
-
147
- const popup = OxPopupList.open({
148
- template,
149
- multiple: true,
150
- sortable: true,
151
- debug: this.debug,
152
- attrSelected: 'checked',
153
- top: e.pageY,
154
- left: e.pageX,
155
- styles: css`
156
- :host {
157
- width: 240px;
158
- min-height: 300px;
159
- max-height: 80%;
160
- overflow: auto;
161
- }
162
-
163
- ::slotted(.personalizer-header) {
164
- --md-icon-size: 1.4em;
165
-
166
- display: flex;
167
- flex-direction: row;
168
- align-items: center;
169
- text-transform: capitalize;
170
- box-shadow: 0 3px 3px rgba(0, 0, 0, 0.3);
171
- }
172
-
173
- ::slotted([option]) {
174
- position: relative;
175
- user-select: none;
176
- }
177
- `
178
- })
179
-
180
- popup.onselect = (e: Event) => {
181
- const selected = (e as CustomEvent).detail
182
-
183
- const pconfig: PersonalGristPreference = grist.personalConfig || {}
184
- const pcolumns = this.preference?.columns || columns
185
-
186
- pconfig.columns = pcolumns.map(column => {
187
- return {
188
- name: column.name,
189
- hidden: selected.indexOf(column.name) == -1,
190
- width: column.width
191
- }
192
- })
193
-
194
- this.preference = pconfig
195
-
196
- grist.personalConfig = this.preference
197
-
198
- grist.applyUpdatedConfiguration()
199
- }
200
-
201
- popup.addEventListener('sorted', (e: Event) => {
202
- const sorted = (e as CustomEvent).detail as HTMLElement[]
203
-
204
- const pconfig: PersonalGristPreference = grist.personalConfig || {}
205
-
206
- pconfig.columns = sorted.map(element => {
207
- const name = (element as OxCheckbox).value
208
- return {
209
- name,
210
- hidden: !element.hasAttribute('checked'),
211
- width: columns.find(column => column.name == name)?.width
212
- }
213
- })
214
-
215
- this.preference = pconfig
216
-
217
- grist.personalConfig = this.preference
218
-
219
- grist.applyUpdatedConfiguration()
220
- })
221
- }}
222
- >settings</md-icon
223
- >
224
- `
225
- }
226
- }
@@ -1,33 +0,0 @@
1
- import { DataGridField } from '../../data-grid/data-grid-field'
2
- import { RecordViewBody } from '../record-view-body'
3
-
4
- /**
5
- * ox-record-view-body 의 click handler
6
- *
7
- * - handler의 this 는 ox-record-view-body임.
8
- */
9
- export function recordViewBodyClickHandler(this: RecordViewBody, e: Event): void {
10
- e.stopPropagation()
11
-
12
- /* target should be 'ox-grid-field' */
13
- var target = e.target as DataGridField
14
-
15
- if (this.currentTarget) {
16
- this.focus()
17
- this.currentTarget.removeAttribute('editing')
18
- }
19
-
20
- let editable = target?.column?.record.editable
21
- if (typeof editable === 'function') {
22
- editable = editable.call(this, target.value, target.column, target.record, target.rowIndex, this)
23
- }
24
-
25
- if (target.tagName !== 'OX-GRID-FIELD' || !editable) {
26
- this.focus()
27
- this.currentTarget = null
28
- return
29
- }
30
-
31
- this.currentTarget = target
32
- target.setAttribute('editing', 'true')
33
- }
@@ -1,26 +0,0 @@
1
- import { RecordViewBody } from '../record-view-body'
2
-
3
- /**
4
- * ox-record-view-body 의 keydown handler
5
- *
6
- * - handler의 this 는 ox-record-view-body임.
7
- */
8
- export async function recordViewBodyKeydownHandler(this: RecordViewBody, e: Event): Promise<void> {
9
- switch ((e as KeyboardEvent).key) {
10
- case 'Esc':
11
- case 'Escape':
12
- /* TODO 편집이 취소되어야 한다. */
13
- case 'Enter':
14
- /* 먼저, focus를 옮겨놓아야, focusout 으로 인해서 popup이 닫히는 것을 방지할 수 있다. */
15
- this.focus()
16
-
17
- if (this.currentTarget) {
18
- this.currentTarget.removeAttribute('editing')
19
- }
20
-
21
- this.currentTarget = null
22
-
23
- break
24
- default:
25
- }
26
- }
@@ -1,2 +0,0 @@
1
- export * from './record-view'
2
- export * from './record-creator'