@operato/data-grist 7.1.26 → 7.1.27

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 (77) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/src/data-grist.d.ts +16 -1
  3. package/dist/src/data-grist.js +53 -20
  4. package/dist/src/data-grist.js.map +1 -1
  5. package/dist/src/record-view/index.d.ts +1 -1
  6. package/dist/src/record-view/index.js +1 -1
  7. package/dist/src/record-view/index.js.map +1 -1
  8. package/dist/src/record-view/ox-record-creator.d.ts +26 -0
  9. package/dist/src/record-view/ox-record-creator.js +260 -0
  10. package/dist/src/record-view/ox-record-creator.js.map +1 -0
  11. package/dist/src/record-view/record-view-body.d.ts +6 -1
  12. package/dist/src/record-view/record-view-body.js +43 -4
  13. package/dist/src/record-view/record-view-body.js.map +1 -1
  14. package/dist/src/record-view/record-view.d.ts +7 -1
  15. package/dist/src/record-view/record-view.js +7 -1
  16. package/dist/src/record-view/record-view.js.map +1 -1
  17. package/dist/src/types.d.ts +6 -0
  18. package/dist/src/types.js +7 -0
  19. package/dist/src/types.js.map +1 -1
  20. package/dist/stories/accumulator-format.stories.d.ts +1 -1
  21. package/dist/stories/accumulator-format.stories.js +1 -1
  22. package/dist/stories/accumulator-format.stories.js.map +1 -1
  23. package/dist/stories/click-event-custom.stories.d.ts +45 -0
  24. package/dist/stories/click-event-custom.stories.js +247 -0
  25. package/dist/stories/click-event-custom.stories.js.map +1 -0
  26. package/dist/stories/click-event.stories.d.ts +1 -1
  27. package/dist/stories/click-event.stories.js +1 -1
  28. package/dist/stories/click-event.stories.js.map +1 -1
  29. package/dist/stories/fixed-column.stories.d.ts +1 -1
  30. package/dist/stories/fixed-column.stories.js +1 -1
  31. package/dist/stories/fixed-column.stories.js.map +1 -1
  32. package/dist/stories/grid-setting.stories.d.ts +1 -1
  33. package/dist/stories/grid-setting.stories.js +1 -1
  34. package/dist/stories/grid-setting.stories.js.map +1 -1
  35. package/dist/stories/grist-modes.stories.d.ts +1 -1
  36. package/dist/stories/grist-modes.stories.js +1 -1
  37. package/dist/stories/grist-modes.stories.js.map +1 -1
  38. package/dist/stories/group-header.stories.d.ts +1 -1
  39. package/dist/stories/group-header.stories.js +1 -1
  40. package/dist/stories/group-header.stories.js.map +1 -1
  41. package/dist/stories/textarea.stories.d.ts +1 -1
  42. package/dist/stories/textarea.stories.js +1 -1
  43. package/dist/stories/textarea.stories.js.map +1 -1
  44. package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
  45. package/dist/stories/tree-column-with-checkbox.stories.js +1 -1
  46. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  47. package/dist/stories/tree-column.stories.d.ts +1 -1
  48. package/dist/stories/tree-column.stories.js +1 -1
  49. package/dist/stories/tree-column.stories.js.map +1 -1
  50. package/dist/tsconfig.tsbuildinfo +1 -1
  51. package/package.json +8 -8
  52. package/src/data-grist.ts +60 -24
  53. package/src/record-view/index.ts +1 -1
  54. package/src/record-view/{record-creator.ts → ox-record-creator.ts} +131 -10
  55. package/src/record-view/record-view-body.ts +50 -4
  56. package/src/record-view/record-view.ts +10 -2
  57. package/src/types.ts +8 -0
  58. package/stories/accumulator-format.stories.ts +1 -1
  59. package/stories/click-event-custom.stories.ts +287 -0
  60. package/stories/click-event.stories.ts +1 -1
  61. package/stories/fixed-column.stories.ts +1 -1
  62. package/stories/grid-setting.stories.ts +1 -1
  63. package/stories/grist-modes.stories.ts +1 -1
  64. package/stories/group-header.stories.ts +1 -1
  65. package/stories/textarea.stories.ts +1 -1
  66. package/stories/tree-column-with-checkbox.stories.ts +1 -1
  67. package/stories/tree-column.stories.ts +1 -1
  68. package/themes/calendar-theme.css +3 -1
  69. package/translations/en.json +5 -1
  70. package/translations/ja.json +5 -1
  71. package/translations/ko.json +5 -1
  72. package/translations/ms.json +5 -1
  73. package/translations/zh.json +5 -1
  74. package/dist/src/record-view/record-creator.d.ts +0 -17
  75. package/dist/src/record-view/record-creator.js +0 -148
  76. package/dist/src/record-view/record-creator.js.map +0 -1
  77. package/yarn-error.log +0 -16971
@@ -0,0 +1,287 @@
1
+ import '../src/index.js'
2
+ import '../src/filters/filters-form.js'
3
+ import '../src/sorters/sorters-control.js'
4
+ import '../src/record-view/ox-record-creator.js'
5
+ import '@operato/popup/ox-popup-list.js'
6
+ import '@material/web/icon/icon.js'
7
+
8
+ import { html, TemplateResult } from 'lit'
9
+ import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
10
+
11
+ import { FetchHandler, FetchOption, GristEventHandler } from '../src/types.js'
12
+
13
+ import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
14
+
15
+ const fetchHandler: FetchHandler = async ({ page, limit }: FetchOption) => {
16
+ var total = 25
17
+ var start = (page! - 1) * limit!
18
+
19
+ await new Promise(resolve => setTimeout(resolve, 500))
20
+
21
+ return {
22
+ total,
23
+ records: Array(limit! * page! > total ? total % limit! : limit)
24
+ .fill('')
25
+ .map((item, idx) => {
26
+ return {
27
+ id: String(idx),
28
+ name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
29
+ description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
30
+ accval: Math.random(),
31
+ accval2: Math.round(Math.random() * 15),
32
+ createdAt: Date.now(),
33
+ updatedAt: Date.now()
34
+ }
35
+ })
36
+ }
37
+ }
38
+
39
+ const config = {
40
+ columns: [
41
+ {
42
+ type: 'gutter',
43
+ gutterName: 'dirty'
44
+ },
45
+ {
46
+ type: 'gutter',
47
+ gutterName: 'sequence'
48
+ },
49
+ {
50
+ type: 'gutter',
51
+ gutterName: 'row-selector',
52
+ multiple: true
53
+ },
54
+ {
55
+ type: 'gutter',
56
+ gutterName: 'button',
57
+ icon: 'add',
58
+ title: 'add',
59
+ handlers: {
60
+ click: ((columns, data, column, record, rowIndex, target, e) =>
61
+ console.log('column - clicked')) as GristEventHandler,
62
+ dblclick: ((columns, data, column, record, rowIndex, target, e) =>
63
+ console.log('column - dblclicked')) as GristEventHandler,
64
+ contextmenu: ((columns, data, column, record, rowIndex, target, e) =>
65
+ console.log('column - contextmenued')) as GristEventHandler,
66
+ focus: ((columns, data, column, record, rowIndex, target, e) =>
67
+ console.log('column - focused')) as GristEventHandler
68
+ }
69
+ },
70
+ {
71
+ type: 'string',
72
+ name: 'id',
73
+ hidden: true
74
+ },
75
+ {
76
+ type: 'string',
77
+ name: 'name',
78
+ label: true,
79
+ header: 'name',
80
+ record: {
81
+ editable: true
82
+ },
83
+ filter: 'search',
84
+ sortable: true,
85
+ width: 120,
86
+ fixed: true
87
+ },
88
+ {
89
+ type: 'string',
90
+ name: 'description',
91
+ header: {
92
+ renderer: () => 'description',
93
+ style: 'text-transform: none;'
94
+ },
95
+ filter: 'search',
96
+ record: {
97
+ editable: true,
98
+ align: 'left'
99
+ },
100
+ width: 200
101
+ },
102
+ {
103
+ type: 'number',
104
+ name: 'accval',
105
+ label: true,
106
+ header: 'accval',
107
+ record: {
108
+ editable: true,
109
+ align: 'right',
110
+ defaultValue: 100,
111
+ format: '+$#,##0.00'
112
+ },
113
+ accumulator: 'avg',
114
+ sortable: true,
115
+ width: 130
116
+ },
117
+ {
118
+ type: 'number',
119
+ name: 'accval2',
120
+ label: true,
121
+ header: 'accval2',
122
+ record: {
123
+ editable: true,
124
+ align: 'right',
125
+ renderer: (value: any, column: any, record: any) => {
126
+ return value && Intl.NumberFormat('en-US').format(value)
127
+ }
128
+ },
129
+ accumulator: {
130
+ type: 'sum',
131
+ tag: true
132
+ },
133
+ sortable: true,
134
+ width: 130
135
+ },
136
+ {
137
+ type: 'datetime',
138
+ name: 'updatedAt',
139
+ header: 'updated at',
140
+ record: {
141
+ editable: true,
142
+ defaultValue: {
143
+ name: 'now'
144
+ }
145
+ },
146
+ filter: 'between',
147
+ sortable: true,
148
+ width: 180
149
+ },
150
+ {
151
+ type: 'datetime',
152
+ name: 'createdAt',
153
+ header: 'created at',
154
+ record: {
155
+ editable: false
156
+ },
157
+ sortable: true,
158
+ width: 180
159
+ }
160
+ ],
161
+ rows: {
162
+ selectable: {
163
+ multiple: false
164
+ },
165
+ handlers: {
166
+ click: ((columns, data, column, record, rowIndex, target, e) =>
167
+ console.log('row - clicked')) as GristEventHandler,
168
+ dblclick: ((columns, data, column, record, rowIndex, target, e) =>
169
+ console.log('row - dblclicked')) as GristEventHandler,
170
+ contextmenu: ((columns, data, column, record, rowIndex, target, e) =>
171
+ console.log('row - contextmenued')) as GristEventHandler,
172
+ focus: ((columns, data, column, record, rowIndex, target, e) => console.log('row - focused')) as GristEventHandler
173
+ },
174
+ accumulator: true
175
+ },
176
+ sorters: [
177
+ {
178
+ name: 'name',
179
+ desc: true
180
+ }
181
+ ],
182
+ pagination: {
183
+ pages: [20, 30, 50, 100, 200]
184
+ }
185
+ }
186
+
187
+ export default {
188
+ title: 'click events for custom popup in ox-grist',
189
+ component: 'ox-grist',
190
+ argTypes: {
191
+ config: { control: 'object' },
192
+ mode: { control: 'select', options: ['GRID', 'LIST', 'CARD'] },
193
+ urlParamsSensitive: { control: 'boolean' },
194
+ withoutSearch: { control: 'boolean' },
195
+ preventCloseOnBlur: { control: 'boolean' }
196
+ }
197
+ }
198
+
199
+ interface Story<T> {
200
+ (args: T): TemplateResult
201
+ args?: Partial<T>
202
+ argTypes?: Record<string, unknown>
203
+ }
204
+
205
+ interface ArgTypes {
206
+ config: object
207
+ mode: 'GRID' | 'LIST' | 'CARD'
208
+ urlParamsSensitive: boolean
209
+ withoutSearch: boolean
210
+ preventCloseOnBlur: boolean
211
+ fetchHandler: FetchHandler
212
+ }
213
+
214
+ const Template: Story<ArgTypes> = ({
215
+ config,
216
+ mode = 'GRID',
217
+ urlParamsSensitive = false,
218
+ withoutSearch = false,
219
+ preventCloseOnBlur = false,
220
+ fetchHandler
221
+ }: ArgTypes) =>
222
+ html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
223
+
224
+ <link href="/themes/light.css" rel="stylesheet" />
225
+ <link href="/themes/dark.css" rel="stylesheet" />
226
+ <link href="/themes/spacing.css" rel="stylesheet" />
227
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
228
+
229
+ <link
230
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
231
+ rel="stylesheet"
232
+ />
233
+ <link
234
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
235
+ rel="stylesheet"
236
+ />
237
+ <link
238
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
239
+ rel="stylesheet"
240
+ />
241
+
242
+ <style>
243
+ ${MDTypeScaleStyles.cssText}
244
+ </style>
245
+
246
+ <style>
247
+ ${CommonGristStyles.cssText}
248
+ ${CommonHeaderStyles.cssText}
249
+ </style>
250
+
251
+ <style>
252
+ ox-grist {
253
+ height: 600px;
254
+ }
255
+
256
+ ox-filters-form {
257
+ flex: 1;
258
+ }
259
+ </style>
260
+
261
+ <ox-grist
262
+ mode=${mode}
263
+ .config=${config}
264
+ .fetchHandler=${fetchHandler}
265
+ ?url-params-sensitive=${urlParamsSensitive}
266
+ @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
267
+ >
268
+ <div slot="headroom" class="header">
269
+ <div class="filters">
270
+ <ox-filters-form ?without-search=${withoutSearch} autofocus></ox-filters-form>
271
+ <ox-record-creator id="add" light-popup ?prevent-close-on-blur=${preventCloseOnBlur}>
272
+ <button><md-icon>add</md-icon></button>
273
+ <div slot="popup">
274
+ <label>Test</label>
275
+ <input />
276
+ </div>
277
+ </ox-record-creator>
278
+ </div>
279
+ </div>
280
+ </ox-grist>`
281
+
282
+ export const Regular = Template.bind({})
283
+ Regular.args = {
284
+ config,
285
+ fetchHandler,
286
+ mode: 'GRID'
287
+ }
@@ -1,7 +1,7 @@
1
1
  import '../src/index.js'
2
2
  import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
- import '../src/record-view/record-creator.js'
4
+ import '../src/record-view/ox-record-creator.js'
5
5
  import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
@@ -1,7 +1,7 @@
1
1
  import '../src/index.js'
2
2
  import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
- import '../src/record-view/record-creator.js'
4
+ import '../src/record-view/ox-record-creator.js'
5
5
  import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
@@ -6,7 +6,7 @@ import { sleep } from '@operato/utils'
6
6
  import '../src/index.js'
7
7
  import '../src/filters/filters-form.js'
8
8
  import '../src/sorters/sorters-control.js'
9
- import '../src/record-view/record-creator.js'
9
+ import '../src/record-view/ox-record-creator.js'
10
10
  import '../src/personalizer/ox-grist-personalizer.js'
11
11
  import '../src/personalizer/ox-grist-filter-personalizer.js'
12
12
 
@@ -1,7 +1,7 @@
1
1
  import '../src/index.js'
2
2
  import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
- import '../src/record-view/record-creator.js'
4
+ import '../src/record-view/ox-record-creator.js'
5
5
  import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
@@ -1,7 +1,7 @@
1
1
  import '../src/index.js'
2
2
  import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
- import '../src/record-view/record-creator.js'
4
+ import '../src/record-view/ox-record-creator.js'
5
5
  import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
@@ -1,7 +1,7 @@
1
1
  import '../src/index.js'
2
2
  import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
- import '../src/record-view/record-creator.js'
4
+ import '../src/record-view/ox-record-creator.js'
5
5
  import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
@@ -1,7 +1,7 @@
1
1
  import '../src/index.js'
2
2
  import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
- import '../src/record-view/record-creator.js'
4
+ import '../src/record-view/ox-record-creator.js'
5
5
  import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
@@ -1,7 +1,7 @@
1
1
  import '../src/index.js'
2
2
  import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
- import '../src/record-view/record-creator.js'
4
+ import '../src/record-view/ox-record-creator.js'
5
5
  import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
@@ -9,7 +9,8 @@ body {
9
9
  /* monthly layout */
10
10
  --calendar-monthly-ol-margin: var(--margin-default) 0;
11
11
  --calendar-monthly-ol-top-border: 2px solid var(--md-sys-color-secondary);
12
- --calendar-current-monty-background-color: var(--md-sys-color-surface-variant);
12
+ --calendar-current-month-background-color: var(--md-sys-color-surface-variant);
13
+ --calendar-current-month-color: var(--md-sys-color-on-surface);
13
14
  --calendar-monthly-label-align: left;
14
15
  --calendar-monthly-label-padding: var(--padding-narrow) 0;
15
16
  --calendar-monthly-label-color: var(--md-sys-color-secondary);
@@ -35,6 +36,7 @@ body {
35
36
  --calendar-weekly-ol-margin: var(--margin-default) 0;
36
37
  --calendar-weekly-ol-top-border: 2px solid var(--md-sys-color-secondary);
37
38
  --calendar-current-week-background-color: var(--md-sys-color-surface-variant);
39
+ --calendar-current-week-color: var(--md-sys-color-on-surface);
38
40
  --calendar-weekly-label-align: center;
39
41
  --calendar-weekly-label-padding: var(--padding-narrow) 0;
40
42
  --calendar-weekly-label-color: var(--md-sys-color-secondary);
@@ -6,5 +6,9 @@
6
6
  "label.accumulator_avg": "avg",
7
7
  "label.accumulator_count": "cnt",
8
8
  "label.accumulator_max": "min",
9
- "label.accumulator_min": "max"
9
+ "label.accumulator_min": "max",
10
+ "text.validation-reason.MANDATORY": "mandatory",
11
+ "text.validation-reason.FORMAT": "invalid format",
12
+ "text.validation-reason.RANGE": "out of range",
13
+ "text.validation-reason.UNIQUE": "duplicate value"
10
14
  }
@@ -5,5 +5,9 @@
5
5
  "label.accumulator_avg": "平均",
6
6
  "label.accumulator_count": "カウント",
7
7
  "label.accumulator_max": "最小",
8
- "label.accumulator_min": "最大"
8
+ "label.accumulator_min": "最大",
9
+ "text.validation-reason.MANDATORY": "必須",
10
+ "text.validation-reason.FORMAT": "形式が正しくありません",
11
+ "text.validation-reason.RANGE": "範囲外",
12
+ "text.validation-reason.UNIQUE": "重複"
9
13
  }
@@ -5,5 +5,9 @@
5
5
  "label.accumulator_avg": "평균",
6
6
  "label.accumulator_count": "계수",
7
7
  "label.accumulator_max": "최소",
8
- "label.accumulator_min": "최대"
8
+ "label.accumulator_min": "최대",
9
+ "text.validation-reason.MANDATORY": "필수 입력 항목입니다.",
10
+ "text.validation-reason.FORMAT": "잘못된 형식입니다.",
11
+ "text.validation-reason.RANGE": "범위를 벗어났습니다.",
12
+ "text.validation-reason.UNIQUE": "중복된 값입니다."
9
13
  }
@@ -5,5 +5,9 @@
5
5
  "label.accumulator_avg": "Purata",
6
6
  "label.accumulator_count": "Kiraan",
7
7
  "label.accumulator_max": "Minimum",
8
- "label.accumulator_min": "Maksimum"
8
+ "label.accumulator_min": "Maksimum",
9
+ "text.validation-reason.MANDATORY": "wajib",
10
+ "text.validation-reason.FORMAT": "format tidak sah",
11
+ "text.validation-reason.RANGE": "diluar jangka",
12
+ "text.validation-reason.UNIQUE": "nilai duplikat"
9
13
  }
@@ -5,5 +5,9 @@
5
5
  "label.accumulator_avg": "平均",
6
6
  "label.accumulator_count": "计数",
7
7
  "label.accumulator_max": "最小",
8
- "label.accumulator_min": "最大"
8
+ "label.accumulator_min": "最大",
9
+ "text.validation-reason.MANDATORY": "必填",
10
+ "text.validation-reason.FORMAT": "格式不正确",
11
+ "text.validation-reason.RANGE": "超出范围",
12
+ "text.validation-reason.UNIQUE": "重复值"
9
13
  }
@@ -1,17 +0,0 @@
1
- import '@material/web/icon/icon.js';
2
- import './record-view';
3
- import { LitElement } from 'lit';
4
- import { DataGrist } from '../data-grist';
5
- export declare class RecordCreator extends LitElement {
6
- grist?: DataGrist;
7
- callback?: (operation: {
8
- [key: string]: any;
9
- }) => boolean;
10
- lightPopup: boolean;
11
- preventCloseOnBlur: boolean;
12
- constructor();
13
- connectedCallback(): void;
14
- render(): import("lit-html").TemplateResult<1>;
15
- lightPopupRecordView(): void;
16
- popupRecordView(): void;
17
- }
@@ -1,148 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import '@material/web/icon/icon.js';
3
- import './record-view';
4
- import { html, LitElement } from 'lit';
5
- import { customElement, property, state } from 'lit/decorators.js';
6
- import { OxPopup } from '@operato/popup';
7
- let RecordCreator = class RecordCreator extends LitElement {
8
- constructor() {
9
- super();
10
- this.lightPopup = false;
11
- this.preventCloseOnBlur = false;
12
- this.addEventListener('click', (e) => {
13
- e.preventDefault();
14
- e.stopPropagation();
15
- if (this.lightPopup) {
16
- this.lightPopupRecordView();
17
- }
18
- else {
19
- this.popupRecordView();
20
- }
21
- });
22
- }
23
- connectedCallback() {
24
- super.connectedCallback();
25
- this.grist = this.closest('ox-grist');
26
- }
27
- render() {
28
- return html `<slot></slot>`;
29
- }
30
- lightPopupRecordView() {
31
- const config = this.grist.compiledConfig;
32
- var title = 'create';
33
- const rowIndex = -1;
34
- var record = {};
35
- const columns = config.columns;
36
- var popup = OxPopup.open({
37
- template: html `
38
- <div title>${title}</div>
39
- <ox-record-view
40
- @field-change=${(e) => {
41
- const view = e.currentTarget;
42
- var { after, before, column, record, row } = e.detail;
43
- var validation = column.validation;
44
- if (validation && typeof validation == 'function') {
45
- if (!validation.call(this, after, before, record, column)) {
46
- return;
47
- }
48
- }
49
- view.record = {
50
- ...record,
51
- [column.name]: after
52
- };
53
- }}
54
- .columns=${columns}
55
- .record=${record}
56
- .rowIndex=${rowIndex}
57
- @reset=${(e) => {
58
- const view = e.currentTarget;
59
- view.record = {};
60
- }}
61
- @cancel=${(e) => {
62
- popup.close();
63
- }}
64
- @ok=${(e) => {
65
- popup.close();
66
- const view = e.currentTarget;
67
- this.dispatchEvent(new CustomEvent('ok', {
68
- bubbles: true,
69
- composed: true,
70
- detail: view.record
71
- }));
72
- }}
73
- ></ox-record-view>
74
- `,
75
- parent: document.body,
76
- preventCloseOnBlur: this.preventCloseOnBlur
77
- });
78
- }
79
- popupRecordView() {
80
- const config = this.grist.compiledConfig;
81
- const rowIndex = -1;
82
- var record = {};
83
- const columns = config.columns;
84
- var title = 'create';
85
- var recordView = document.createElement('ox-record-view');
86
- recordView.columns = columns;
87
- recordView.record = record;
88
- recordView.rowIndex = rowIndex;
89
- document.dispatchEvent(new CustomEvent('open-popup', {
90
- detail: {
91
- template: recordView,
92
- options: {
93
- backdrop: true,
94
- size: 'large',
95
- title
96
- },
97
- callback: (popup) => {
98
- recordView.addEventListener('reset', (e) => {
99
- const view = e.currentTarget;
100
- view.record = {};
101
- });
102
- recordView.addEventListener('cancel', (e) => {
103
- popup.close();
104
- });
105
- recordView.addEventListener('ok', async (e) => {
106
- var _a;
107
- const view = e.currentTarget;
108
- if (await ((_a = this.callback) === null || _a === void 0 ? void 0 : _a.call(this, view.record))) {
109
- popup.close();
110
- }
111
- });
112
- recordView.addEventListener('field-change', async (e) => {
113
- const view = e.currentTarget;
114
- var { after, before, column, record, row } = e.detail;
115
- var validation = column.validation;
116
- if (validation && typeof validation == 'function') {
117
- if (!(await validation.call(this, after, before, record, column))) {
118
- return;
119
- }
120
- }
121
- view.record = {
122
- ...record,
123
- [column.name]: after
124
- };
125
- });
126
- popup.onclosed = () => { };
127
- }
128
- }
129
- }));
130
- }
131
- };
132
- __decorate([
133
- state()
134
- ], RecordCreator.prototype, "grist", void 0);
135
- __decorate([
136
- property({ type: Object })
137
- ], RecordCreator.prototype, "callback", void 0);
138
- __decorate([
139
- property({ type: Boolean, attribute: 'light-popup' })
140
- ], RecordCreator.prototype, "lightPopup", void 0);
141
- __decorate([
142
- property({ type: Boolean, attribute: 'prevent-close-on-blur' })
143
- ], RecordCreator.prototype, "preventCloseOnBlur", void 0);
144
- RecordCreator = __decorate([
145
- customElement('ox-record-creator')
146
- ], RecordCreator);
147
- export { RecordCreator };
148
- //# sourceMappingURL=record-creator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"record-creator.js","sourceRoot":"","sources":["../../../src/record-view/record-creator.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport './record-view'\n\nimport { html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { OxPopup } from '@operato/popup'\n\nimport { DataGrist } from '../data-grist'\nimport { ColumnConfig, GristRecord } from '../types'\nimport { RecordView } from './record-view'\n\n@customElement('ox-record-creator')\nexport class RecordCreator extends LitElement {\n @state() grist?: DataGrist\n\n @property({ type: Object }) callback?: (operation: { [key: string]: any }) => boolean\n @property({ type: Boolean, attribute: 'light-popup' }) lightPopup: boolean = false\n @property({ type: Boolean, attribute: 'prevent-close-on-blur' }) preventCloseOnBlur = false\n\n constructor() {\n super()\n\n this.addEventListener('click', (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n\n if (this.lightPopup) {\n this.lightPopupRecordView()\n } else {\n this.popupRecordView()\n }\n })\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n\n this.grist = this.closest('ox-grist') as DataGrist\n }\n\n render() {\n return html`<slot></slot>`\n }\n\n lightPopupRecordView() {\n const config = this.grist!.compiledConfig\n var title = 'create'\n const rowIndex = -1\n var record: GristRecord = {}\n const columns = config.columns\n\n var popup = OxPopup.open({\n template: html`\n <div title>${title}</div>\n <ox-record-view\n @field-change=${(e: CustomEvent) => {\n const view = e.currentTarget as RecordView\n\n var { after, before, column, record, row } = (e as CustomEvent).detail as {\n after: any\n before: any\n column: ColumnConfig\n record: GristRecord\n row: number\n }\n\n var validation = column.validation\n if (validation && typeof validation == 'function') {\n if (!validation.call(this, after, before, record, column)) {\n return\n }\n }\n\n view.record = {\n ...record,\n [column.name]: after\n }\n }}\n .columns=${columns}\n .record=${record}\n .rowIndex=${rowIndex}\n @reset=${(e: Event) => {\n const view = e.currentTarget as RecordView\n view.record = {}\n }}\n @cancel=${(e: Event) => {\n popup.close()\n }}\n @ok=${(e: Event) => {\n popup.close()\n\n const view = e.currentTarget as RecordView\n\n this.dispatchEvent(\n new CustomEvent('ok', {\n bubbles: true,\n composed: true,\n detail: view.record\n })\n )\n }}\n ></ox-record-view>\n `,\n parent: document.body,\n preventCloseOnBlur: this.preventCloseOnBlur\n })\n }\n\n popupRecordView() {\n const config = this.grist!.compiledConfig\n const rowIndex = -1\n var record: GristRecord = {}\n const columns = config.columns\n\n var title = 'create'\n\n var recordView = document.createElement('ox-record-view') as RecordView\n\n recordView.columns = columns\n recordView.record = record\n recordView.rowIndex = rowIndex\n\n document.dispatchEvent(\n new CustomEvent('open-popup', {\n detail: {\n template: recordView,\n options: {\n backdrop: true,\n size: 'large',\n title\n },\n callback: (popup: any) => {\n recordView.addEventListener('reset', (e: Event) => {\n const view = e.currentTarget as RecordView\n view.record = {}\n })\n\n recordView.addEventListener('cancel', (e: Event) => {\n popup.close()\n })\n\n recordView.addEventListener('ok', async (e: Event) => {\n const view = e.currentTarget as RecordView\n if (await this.callback?.(view.record)) {\n popup.close()\n }\n })\n\n recordView.addEventListener('field-change', async (e: Event) => {\n const view = e.currentTarget as RecordView\n\n var { after, before, column, record, row } = (e as CustomEvent).detail as {\n after: any\n before: any\n column: ColumnConfig\n record: GristRecord\n row: number\n }\n\n var validation = column.validation\n if (validation && typeof validation == 'function') {\n if (!(await validation.call(this, after, before, record, column))) {\n return\n }\n }\n\n view.record = {\n ...record,\n [column.name]: after\n }\n })\n\n popup.onclosed = () => {}\n }\n }\n })\n )\n }\n}\n"]}