@operato/scene-grist 0.0.9

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 (49) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +0 -0
  4. package/dist/editors/index.d.ts +2 -0
  5. package/dist/editors/index.js +2 -0
  6. package/dist/editors/index.js.map +1 -0
  7. package/dist/grist-action.d.ts +82 -0
  8. package/dist/grist-action.js +322 -0
  9. package/dist/grist-action.js.map +1 -0
  10. package/dist/grist.d.ts +56 -0
  11. package/dist/grist.js +258 -0
  12. package/dist/grist.js.map +1 -0
  13. package/dist/index.d.ts +4 -0
  14. package/dist/index.js +4 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/templates/grist-action.d.ts +17 -0
  17. package/dist/templates/grist-action.js +19 -0
  18. package/dist/templates/grist-action.js.map +1 -0
  19. package/dist/templates/grist.d.ts +16 -0
  20. package/dist/templates/grist.js +98 -0
  21. package/dist/templates/grist.js.map +1 -0
  22. package/dist/templates/index.d.ts +30 -0
  23. package/dist/templates/index.js +4 -0
  24. package/dist/templates/index.js.map +1 -0
  25. package/global/index.d.ts +1 -0
  26. package/helps/scene/component/grist-action.ko.md +45 -0
  27. package/helps/scene/component/grist-action.md +43 -0
  28. package/helps/scene/component/grist-action.zh.md +44 -0
  29. package/helps/scene/component/grist.ko.md +26 -0
  30. package/helps/scene/component/grist.md +26 -0
  31. package/helps/scene/component/grist.zh.md +26 -0
  32. package/package.json +64 -0
  33. package/src/editors/index.ts +1 -0
  34. package/src/grist-action.ts +362 -0
  35. package/src/grist.ts +302 -0
  36. package/src/index.ts +3 -0
  37. package/src/templates/grist-action.png +0 -0
  38. package/src/templates/grist-action.ts +19 -0
  39. package/src/templates/grist.png +0 -0
  40. package/src/templates/grist.ts +98 -0
  41. package/src/templates/index.ts +3 -0
  42. package/src/uuid.d.ts +1 -0
  43. package/things-scene.config.js +7 -0
  44. package/translations/en.json +13 -0
  45. package/translations/ko.json +13 -0
  46. package/translations/ms.json +13 -0
  47. package/translations/zh.json +13 -0
  48. package/tsconfig.json +23 -0
  49. package/tsconfig.tsbuildinfo +1 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ ### [0.0.9](https://github.com/things-scene/operato-scene/compare/v0.0.8...v0.0.9) (2021-12-03)
7
+
8
+
9
+ ### :rocket: New Features
10
+
11
+ * operato/scene-grist added ([5dfb9ac](https://github.com/things-scene/operato-scene/commit/5dfb9ac35f46d0b101cbcb43dc7d90c937d8e2ff))
12
+
13
+
14
+ ### :bug: Bug Fix
15
+
16
+ * ready to operato/scene-grist ([0cc9cc0](https://github.com/things-scene/operato-scene/commit/0cc9cc02d608be80ba5e39c017b5c2080e959da9))
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Hearty, Oh
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
File without changes
@@ -0,0 +1,2 @@
1
+ declare const _default: never[];
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ export default [];
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editors/index.ts"],"names":[],"mappings":"AAAA,eAAe,EAAE,CAAA","sourcesContent":["export default []\n"]}
@@ -0,0 +1,82 @@
1
+ import { Component, Properties } from '@hatiolab/things-scene';
2
+ import { GristData, GristRecord } from '@operato/data-grist/src/types.js';
3
+ import { DataGrist } from '@operato/data-grist';
4
+ import SceneGrist from './grist';
5
+ export declare enum ACTIONS {
6
+ GET_ALL_ROWS = "getAllRows",
7
+ COMMIT = "commit",
8
+ GET_SELECTED = "getSelectedRows",
9
+ GET_DIRTY = "getDirtyRows",
10
+ ADD_ROW = "addRow",
11
+ DELETE_SELECTED_ROWS = "deleteSelectedRowsSoftly",
12
+ GET_PAGE_INFO = "getPageInfo"
13
+ }
14
+ declare const GristAction_base: (new (...args: any[]) => {
15
+ value: number;
16
+ animValue: number;
17
+ animOnValueChange(value: number, animFromBase: boolean, base: number): void;
18
+ }) & typeof Component;
19
+ export default class GristAction extends GristAction_base {
20
+ static get nature(): {
21
+ mutable: boolean;
22
+ resizable: boolean;
23
+ rotatable: boolean;
24
+ properties: ({
25
+ type: string;
26
+ label: string;
27
+ name: string;
28
+ property: {
29
+ component: string;
30
+ options?: undefined;
31
+ };
32
+ } | {
33
+ type: string;
34
+ label: string;
35
+ name: string;
36
+ property: {
37
+ options: {
38
+ display: string;
39
+ value: ACTIONS;
40
+ }[];
41
+ component?: undefined;
42
+ };
43
+ } | {
44
+ type: string;
45
+ label: string;
46
+ name: string;
47
+ property?: undefined;
48
+ })[];
49
+ help: string;
50
+ };
51
+ private uuid;
52
+ private _data;
53
+ ready(): void;
54
+ dispose(): void;
55
+ onclick(): void;
56
+ onchange(after: Properties): void;
57
+ executeMappings(): void;
58
+ doDataMap(): void;
59
+ doAction(action?: ACTIONS): void;
60
+ refreshGrist(grist: DataGrist): void;
61
+ assortDirties(grist: DataGrist): {
62
+ original: import("@operato/data-grist/dist/src/types").GristRecord[];
63
+ patches: GristRecord[];
64
+ created: GristRecord[];
65
+ updated: GristRecord[];
66
+ deleted: GristRecord[];
67
+ };
68
+ getPageInfoFrom(grist: DataGrist, fetchedData?: GristData): {
69
+ page: any;
70
+ limit: any;
71
+ sorters: any;
72
+ };
73
+ buildPatches(patches: GristRecord[]): GristRecord[];
74
+ render(context: CanvasRenderingContext2D): void;
75
+ postrender(context: CanvasRenderingContext2D): void;
76
+ get controls(): never[];
77
+ get targetGristComponent(): SceneGrist;
78
+ get targetGristElement(): DataGrist | undefined;
79
+ get data(): any;
80
+ set data(data: any);
81
+ }
82
+ export {};
@@ -0,0 +1,322 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ *
4
+ * grist 컴포넌트를 보조하여 grist의 각종 동작을 수행하는 컴포넌트.
5
+ */
6
+ import { Component, RectPath, ValueHolder } from '@hatiolab/things-scene';
7
+ import uuid from 'uuid';
8
+ export var ACTIONS;
9
+ (function (ACTIONS) {
10
+ ACTIONS["GET_ALL_ROWS"] = "getAllRows";
11
+ ACTIONS["COMMIT"] = "commit";
12
+ ACTIONS["GET_SELECTED"] = "getSelectedRows";
13
+ ACTIONS["GET_DIRTY"] = "getDirtyRows";
14
+ ACTIONS["ADD_ROW"] = "addRow";
15
+ ACTIONS["DELETE_SELECTED_ROWS"] = "deleteSelectedRowsSoftly";
16
+ ACTIONS["GET_PAGE_INFO"] = "getPageInfo";
17
+ })(ACTIONS || (ACTIONS = {}));
18
+ const NATURE = {
19
+ mutable: false,
20
+ resizable: true,
21
+ rotatable: true,
22
+ properties: [
23
+ {
24
+ // 대상 Grist
25
+ type: 'id-input',
26
+ label: 'target-grist',
27
+ name: 'target',
28
+ property: {
29
+ component: 'grist'
30
+ }
31
+ },
32
+ {
33
+ // 동작
34
+ type: 'select',
35
+ label: 'action',
36
+ name: 'action',
37
+ property: {
38
+ options: [
39
+ {
40
+ // 페이지네이션 정보 가져오기
41
+ display: 'Get page information',
42
+ value: ACTIONS.GET_PAGE_INFO
43
+ },
44
+ {
45
+ // 모든 레코드 데이터 가져오기
46
+ display: 'Get all rows',
47
+ value: ACTIONS.GET_ALL_ROWS
48
+ },
49
+ {
50
+ // 체크된 레코드 데이터 가져오기
51
+ display: 'Get selected rows',
52
+ value: ACTIONS.GET_SELECTED
53
+ },
54
+ {
55
+ // 변경 사항이 있는 데이터 가져오기
56
+ display: 'Get dirty rows',
57
+ value: ACTIONS.GET_DIRTY
58
+ },
59
+ {
60
+ // 행 추가
61
+ display: 'Add a row',
62
+ value: ACTIONS.ADD_ROW
63
+ },
64
+ {
65
+ // 선택 행 삭제
66
+ display: 'Delete selected rows',
67
+ value: ACTIONS.DELETE_SELECTED_ROWS
68
+ },
69
+ {
70
+ // 변경 사항을 데이터에 적용
71
+ display: 'Commit',
72
+ value: ACTIONS.COMMIT
73
+ }
74
+ ]
75
+ }
76
+ },
77
+ {
78
+ // 뷰어 시작 시 자동 실행 여부
79
+ type: 'checkbox',
80
+ label: 'run-at-startup',
81
+ name: 'runAtStartup'
82
+ },
83
+ {
84
+ // 행 추가 시의 포맷
85
+ type: 'textarea',
86
+ label: 'record-adder-format',
87
+ name: 'recordFormat'
88
+ }
89
+ ],
90
+ help: 'scene/component/grist-action'
91
+ };
92
+ export default class GristAction extends ValueHolder(RectPath(Component)) {
93
+ constructor() {
94
+ super(...arguments);
95
+ // grist의 fetchHandler를 사용할 때 이 컴포넌트를 판별할 ID
96
+ this.uuid = uuid.v4();
97
+ }
98
+ static get nature() {
99
+ return NATURE;
100
+ }
101
+ ready() {
102
+ // 뷰어 시작시에도 action 값이 getPageInfo로 되어 있을 경우 fetchHandler를 등록하기 위해 onchange를 호출함
103
+ this.onchange({ action: this.state.action });
104
+ if (this.state.runAtStartup)
105
+ this.doAction();
106
+ }
107
+ dispose() {
108
+ super.dispose();
109
+ }
110
+ onclick() {
111
+ // 컴포넌트 클릭 시 동작
112
+ this.doAction();
113
+ }
114
+ onchange(after) {
115
+ // value 값이 바뀌면 동작
116
+ if ('value' in after) {
117
+ this.doAction();
118
+ }
119
+ // action 값이 바뀌면 getPageInfo인지 확인하고 grist에 fetchHandler를 등록하거나 폐기함
120
+ if ('action' in after) {
121
+ const gristComponent = this.targetGristComponent;
122
+ if (gristComponent) {
123
+ if (after.action == ACTIONS.GET_PAGE_INFO)
124
+ //@ts-ignore
125
+ gristComponent.beforeFetchFuncs[this.uuid] = fetchedData => {
126
+ //@ts-ignore
127
+ this.data = this.getPageInfoFrom(null, fetchedData);
128
+ this.doDataMap();
129
+ };
130
+ //@ts-ignore
131
+ else
132
+ delete gristComponent.beforeFetchFuncs[this.uuid];
133
+ }
134
+ }
135
+ }
136
+ // 데이터 매핑을 수동으로 실행하기 위해 기존의 메소드를 무효화
137
+ executeMappings() {
138
+ console.debug("[@operato/data-grist] The method 'executeMappings' is overriden in the component 'grist-action', because of to prevent executing when initialize.");
139
+ }
140
+ // 데이터 매핑을 수동으로 조작하기 위한 새 메소드
141
+ doDataMap() {
142
+ super.executeMappings();
143
+ }
144
+ // action 값에 따라 동작
145
+ doAction(action) {
146
+ if (!this.app.isViewMode) {
147
+ return;
148
+ }
149
+ // 파라미터가 명시되어있지 않으면 컴포넌트 속성에서 action 값을 가져옴
150
+ var { action: storedAction } = this.state;
151
+ action = action || storedAction;
152
+ // 대상 Grist 컴포넌트
153
+ var grist = this.targetGristElement;
154
+ if (!grist)
155
+ return;
156
+ var data;
157
+ switch (action) {
158
+ case ACTIONS.GET_ALL_ROWS:
159
+ data = grist.grist.data;
160
+ break;
161
+ case ACTIONS.COMMIT:
162
+ grist.commit();
163
+ break;
164
+ case ACTIONS.GET_SELECTED:
165
+ data = {
166
+ patches: this.buildPatches(grist.selected),
167
+ original: grist.selected
168
+ };
169
+ break;
170
+ case ACTIONS.GET_DIRTY:
171
+ data = this.assortDirties(grist);
172
+ break;
173
+ case ACTIONS.ADD_ROW:
174
+ {
175
+ var records = grist.dirtyData.records || [];
176
+ let recordFormat;
177
+ try {
178
+ recordFormat = eval(`(${this.state.recordFormat})`);
179
+ }
180
+ catch (e) {
181
+ console.log('Invalid JSON format. It will be assumed as empty object.\n', e);
182
+ recordFormat = {};
183
+ }
184
+ records.push({ ...recordFormat, __dirty__: '+' });
185
+ this.refreshGrist(grist);
186
+ }
187
+ break;
188
+ case ACTIONS.DELETE_SELECTED_ROWS:
189
+ {
190
+ var records = grist.dirtyData.records || [];
191
+ //@ts-ignore
192
+ records.forEach((record, idx) => {
193
+ if (record['__selected__']) {
194
+ if (record['__dirty__'] == '+')
195
+ delete records[idx];
196
+ else
197
+ record['__dirty__'] = '-';
198
+ }
199
+ });
200
+ grist.dirtyData.records = records.flat();
201
+ this.refreshGrist(grist);
202
+ }
203
+ break;
204
+ case ACTIONS.GET_PAGE_INFO:
205
+ data = this.getPageInfoFrom(grist);
206
+ break;
207
+ }
208
+ // 이 컴포넌트의 data 값이 바뀌는 동작은 데이터 매핑까지 실행함
209
+ if (data) {
210
+ this.data = data;
211
+ this.doDataMap();
212
+ }
213
+ }
214
+ // 대상 grist 컴포넌트의 레코드를 새로고침
215
+ refreshGrist(grist) {
216
+ grist = grist || this.targetGristElement;
217
+ if (!grist)
218
+ return;
219
+ //@ts-ignore
220
+ grist.dataProvider.onRecordChange();
221
+ grist.grist.data = { ...grist.dirtyData };
222
+ }
223
+ // 변경 사항이 있는 레코드의 경우, CUD를 분류해서 반환함
224
+ assortDirties(grist) {
225
+ const dirties = grist.dirtyRecords;
226
+ var patches = this.buildPatches(dirties);
227
+ var records = {
228
+ original: dirties,
229
+ patches,
230
+ created: [],
231
+ updated: [],
232
+ deleted: []
233
+ };
234
+ patches.forEach((record) => {
235
+ switch (record['cuFlag']) {
236
+ case 'M':
237
+ records.updated.push(record);
238
+ break;
239
+ case '+':
240
+ records.created.push(record);
241
+ break;
242
+ case '-':
243
+ records.deleted.push(record);
244
+ break;
245
+ }
246
+ });
247
+ return records;
248
+ }
249
+ // 페이지네이션 정보를 가져옴
250
+ getPageInfoFrom(grist, fetchedData) {
251
+ //@ts-ignore
252
+ var { page = 1, limit = 20, sorters = [] } = fetchedData || (grist && grist.dataProvider) || pagination(grist);
253
+ sorters = sorters.map((sorter) => {
254
+ sorter.desc = sorter.desc ? true : false;
255
+ return sorter;
256
+ });
257
+ return { page, limit, sorters };
258
+ function pagination(grist) {
259
+ var config = grist && grist.config && grist.config.pagination;
260
+ if (config)
261
+ return {
262
+ page: config.page,
263
+ limit: config.limit || (config.pages && config.pages[0])
264
+ };
265
+ else
266
+ return {};
267
+ }
268
+ }
269
+ // 레코드들을 서버 공통 resolver에 맞는 포맷으로 만듦
270
+ buildPatches(patches) {
271
+ return patches.map(patch => {
272
+ let patchField = patch.id ? { id: patch.id } : {};
273
+ const dirtyFields = patch.__dirtyfields__;
274
+ for (let key in dirtyFields) {
275
+ patchField[key] = dirtyFields[key].after;
276
+ }
277
+ patchField.cuFlag = patch.__dirty__;
278
+ return patchField;
279
+ });
280
+ }
281
+ render(context) {
282
+ var { top, left, height, width, fillStyle = 'transparent' } = this.model;
283
+ // background의 색상
284
+ context.beginPath();
285
+ context.rect(left, top, width, height);
286
+ context.fillStyle = fillStyle;
287
+ context.fill();
288
+ // value의 색상
289
+ context.beginPath();
290
+ var drawValue = width - (width * Math.max(Math.min(this.animValue, 100), 0)) / 100;
291
+ drawValue = Math.max(Math.min(drawValue, width), 0);
292
+ context.rect(left + drawValue, top, width - drawValue, height);
293
+ this.drawFill(context);
294
+ context.closePath();
295
+ context.beginPath();
296
+ context.rect(left, top, width, height);
297
+ }
298
+ postrender(context) {
299
+ this.drawStroke(context);
300
+ this.drawText(context);
301
+ }
302
+ get controls() {
303
+ return [];
304
+ }
305
+ get targetGristComponent() {
306
+ var { target } = this.state;
307
+ return this.root.findById(target);
308
+ }
309
+ get targetGristElement() {
310
+ var _a;
311
+ return (_a = this.targetGristComponent) === null || _a === void 0 ? void 0 : _a.grist;
312
+ }
313
+ // @ts-ignore
314
+ get data() {
315
+ return this._data;
316
+ }
317
+ set data(data) {
318
+ this._data = data;
319
+ }
320
+ }
321
+ Component.register('grist-action', GristAction);
322
+ //# sourceMappingURL=grist-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grist-action.js","sourceRoot":"","sources":["../src/grist-action.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n *\n * grist 컴포넌트를 보조하여 grist의 각종 동작을 수행하는 컴포넌트.\n */\n\nimport { Component, Properties, RectPath, ValueHolder } from '@hatiolab/things-scene'\nimport { GristData, GristRecord, SorterConfig } from '@operato/data-grist/src/types.js'\n\nimport { DataGrist } from '@operato/data-grist'\nimport SceneGrist from './grist'\nimport uuid from 'uuid'\n\nexport enum ACTIONS {\n GET_ALL_ROWS = 'getAllRows',\n COMMIT = 'commit',\n GET_SELECTED = 'getSelectedRows',\n GET_DIRTY = 'getDirtyRows',\n ADD_ROW = 'addRow',\n DELETE_SELECTED_ROWS = 'deleteSelectedRowsSoftly',\n GET_PAGE_INFO = 'getPageInfo'\n}\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n // 대상 Grist\n type: 'id-input',\n label: 'target-grist',\n name: 'target',\n property: {\n component: 'grist'\n }\n },\n {\n // 동작\n type: 'select',\n label: 'action',\n name: 'action',\n property: {\n options: [\n {\n // 페이지네이션 정보 가져오기\n display: 'Get page information',\n value: ACTIONS.GET_PAGE_INFO\n },\n {\n // 모든 레코드 데이터 가져오기\n display: 'Get all rows',\n value: ACTIONS.GET_ALL_ROWS\n },\n {\n // 체크된 레코드 데이터 가져오기\n display: 'Get selected rows',\n value: ACTIONS.GET_SELECTED\n },\n {\n // 변경 사항이 있는 데이터 가져오기\n display: 'Get dirty rows',\n value: ACTIONS.GET_DIRTY\n },\n {\n // 행 추가\n display: 'Add a row',\n value: ACTIONS.ADD_ROW\n },\n {\n // 선택 행 삭제\n display: 'Delete selected rows',\n value: ACTIONS.DELETE_SELECTED_ROWS\n },\n {\n // 변경 사항을 데이터에 적용\n display: 'Commit',\n value: ACTIONS.COMMIT\n }\n ]\n }\n },\n {\n // 뷰어 시작 시 자동 실행 여부\n type: 'checkbox',\n label: 'run-at-startup',\n name: 'runAtStartup'\n },\n {\n // 행 추가 시의 포맷\n type: 'textarea',\n label: 'record-adder-format',\n name: 'recordFormat'\n }\n ],\n help: 'scene/component/grist-action'\n}\n\nexport default class GristAction extends ValueHolder(RectPath(Component)) {\n static get nature() {\n return NATURE\n }\n\n // grist의 fetchHandler를 사용할 때 이 컴포넌트를 판별할 ID\n private uuid = uuid.v4()\n private _data: any\n\n ready() {\n // 뷰어 시작시에도 action 값이 getPageInfo로 되어 있을 경우 fetchHandler를 등록하기 위해 onchange를 호출함\n this.onchange({ action: this.state.action })\n if (this.state.runAtStartup) this.doAction()\n }\n\n dispose() {\n super.dispose()\n }\n\n onclick() {\n // 컴포넌트 클릭 시 동작\n this.doAction()\n }\n\n onchange(after: Properties) {\n // value 값이 바뀌면 동작\n if ('value' in after) {\n this.doAction()\n }\n\n // action 값이 바뀌면 getPageInfo인지 확인하고 grist에 fetchHandler를 등록하거나 폐기함\n if ('action' in after) {\n const gristComponent = this.targetGristComponent\n\n if (gristComponent) {\n if (after.action == ACTIONS.GET_PAGE_INFO)\n //@ts-ignore\n gristComponent.beforeFetchFuncs[this.uuid] = fetchedData => {\n //@ts-ignore\n this.data = this.getPageInfoFrom(null, fetchedData)\n this.doDataMap()\n }\n //@ts-ignore\n else delete gristComponent.beforeFetchFuncs[this.uuid]\n }\n }\n }\n\n // 데이터 매핑을 수동으로 실행하기 위해 기존의 메소드를 무효화\n executeMappings() {\n console.debug(\n \"[@operato/data-grist] The method 'executeMappings' is overriden in the component 'grist-action', because of to prevent executing when initialize.\"\n )\n }\n\n // 데이터 매핑을 수동으로 조작하기 위한 새 메소드\n doDataMap() {\n super.executeMappings()\n }\n\n // action 값에 따라 동작\n doAction(action?: ACTIONS) {\n if (!this.app.isViewMode) {\n return\n }\n\n // 파라미터가 명시되어있지 않으면 컴포넌트 속성에서 action 값을 가져옴\n var { action: storedAction } = this.state\n action = action || storedAction\n\n // 대상 Grist 컴포넌트\n var grist = this.targetGristElement\n if (!grist) return\n\n var data\n switch (action) {\n case ACTIONS.GET_ALL_ROWS:\n data = grist.grist.data\n break\n case ACTIONS.COMMIT:\n grist.commit()\n break\n case ACTIONS.GET_SELECTED:\n data = {\n patches: this.buildPatches(grist.selected),\n original: grist.selected\n }\n break\n case ACTIONS.GET_DIRTY:\n data = this.assortDirties(grist)\n break\n case ACTIONS.ADD_ROW:\n {\n var records = grist.dirtyData.records || []\n\n let recordFormat\n try {\n recordFormat = eval(`(${this.state.recordFormat})`)\n } catch (e) {\n console.log('Invalid JSON format. It will be assumed as empty object.\\n', e)\n recordFormat = {}\n }\n records.push({ ...recordFormat, __dirty__: '+' })\n this.refreshGrist(grist)\n }\n break\n case ACTIONS.DELETE_SELECTED_ROWS:\n {\n var records = grist.dirtyData.records || []\n\n //@ts-ignore\n records.forEach((record, idx) => {\n if (record['__selected__']) {\n if (record['__dirty__'] == '+') delete records[idx]\n else record['__dirty__'] = '-'\n }\n })\n grist.dirtyData.records = records.flat()\n this.refreshGrist(grist)\n }\n break\n case ACTIONS.GET_PAGE_INFO:\n data = this.getPageInfoFrom(grist)\n break\n }\n\n // 이 컴포넌트의 data 값이 바뀌는 동작은 데이터 매핑까지 실행함\n if (data) {\n this.data = data\n this.doDataMap()\n }\n }\n\n // 대상 grist 컴포넌트의 레코드를 새로고침\n refreshGrist(grist: DataGrist) {\n grist = grist || this.targetGristElement\n if (!grist) return\n\n //@ts-ignore\n grist.dataProvider.onRecordChange()\n grist.grist.data = { ...grist.dirtyData }\n }\n\n // 변경 사항이 있는 레코드의 경우, CUD를 분류해서 반환함\n assortDirties(grist: DataGrist) {\n const dirties = grist.dirtyRecords\n var patches = this.buildPatches(dirties)\n var records = {\n original: dirties,\n patches,\n created: [] as GristRecord[],\n updated: [] as GristRecord[],\n deleted: [] as GristRecord[]\n }\n\n patches.forEach((record: GristRecord) => {\n switch (record['cuFlag']) {\n case 'M':\n records.updated.push(record)\n break\n case '+':\n records.created.push(record)\n break\n case '-':\n records.deleted.push(record)\n break\n }\n })\n return records\n }\n\n // 페이지네이션 정보를 가져옴\n getPageInfoFrom(grist: DataGrist, fetchedData?: GristData) {\n //@ts-ignore\n var { page = 1, limit = 20, sorters = [] } = fetchedData || (grist && grist.dataProvider) || pagination(grist)\n\n sorters = sorters.map((sorter: SorterConfig) => {\n sorter.desc = sorter.desc ? true : false\n return sorter\n })\n return { page, limit, sorters }\n\n function pagination(grist: DataGrist) {\n var config = grist && grist.config && grist.config.pagination\n if (config)\n return {\n page: config.page,\n limit: config.limit || (config.pages && config.pages[0])\n }\n else return {}\n }\n }\n\n // 레코드들을 서버 공통 resolver에 맞는 포맷으로 만듦\n buildPatches(patches: GristRecord[]): GristRecord[] {\n return patches.map(patch => {\n let patchField: { [key: string]: any } = patch.id ? { id: patch.id } : {}\n const dirtyFields = patch.__dirtyfields__\n\n for (let key in dirtyFields) {\n patchField[key] = dirtyFields[key].after\n }\n patchField.cuFlag = patch.__dirty__\n\n return patchField\n })\n }\n\n render(context: CanvasRenderingContext2D) {\n var { top, left, height, width, fillStyle = 'transparent' } = this.model\n\n // background의 색상\n context.beginPath()\n context.rect(left, top, width, height)\n\n context.fillStyle = fillStyle\n context.fill()\n\n // value의 색상\n context.beginPath()\n\n var drawValue = width - (width * Math.max(Math.min(this.animValue, 100), 0)) / 100\n drawValue = Math.max(Math.min(drawValue, width), 0)\n\n context.rect(left + drawValue, top, width - drawValue, height)\n\n this.drawFill(context)\n\n context.closePath()\n\n context.beginPath()\n\n context.rect(left, top, width, height)\n }\n\n postrender(context: CanvasRenderingContext2D) {\n this.drawStroke(context)\n this.drawText(context)\n }\n\n get controls() {\n return []\n }\n\n get targetGristComponent(): SceneGrist {\n var { target } = this.state\n return this.root.findById(target) as SceneGrist\n }\n\n get targetGristElement(): DataGrist | undefined {\n return this.targetGristComponent?.grist\n }\n\n // @ts-ignore\n get data() {\n return this._data\n }\n\n set data(data) {\n this._data = data\n }\n}\n\nComponent.register('grist-action', GristAction)\n"]}
@@ -0,0 +1,56 @@
1
+ import '@operato/data-grist';
2
+ import { HTMLOverlayElement, Properties } from '@hatiolab/things-scene';
3
+ import { DataGrist } from '@operato/data-grist';
4
+ export default class SceneGrist extends HTMLOverlayElement {
5
+ static get nature(): {
6
+ mutable: boolean;
7
+ resizable: boolean;
8
+ rotatable: boolean;
9
+ properties: ({
10
+ type: string;
11
+ label: string;
12
+ name: string;
13
+ property: {
14
+ options: {
15
+ display: string;
16
+ value: string;
17
+ }[];
18
+ step?: undefined;
19
+ min?: undefined;
20
+ };
21
+ } | {
22
+ type: string;
23
+ label: string;
24
+ name: string;
25
+ property?: undefined;
26
+ } | {
27
+ type: string;
28
+ label: string;
29
+ name: string;
30
+ property: {
31
+ step: number;
32
+ min: number;
33
+ options?: undefined;
34
+ };
35
+ })[];
36
+ help: string;
37
+ };
38
+ private __value;
39
+ private beforeFetchFuncs;
40
+ private _listenTo?;
41
+ private _listener?;
42
+ grist?: DataGrist;
43
+ ready(): void;
44
+ removed(): void;
45
+ createElement(): void;
46
+ get value(): any;
47
+ set value(value: any);
48
+ onchange(after: Properties, before: Properties): void;
49
+ dispose(): void;
50
+ setElementProperties(grist: DataGrist): void;
51
+ setGristConfig(grist: DataGrist | undefined): void;
52
+ reposition(): void;
53
+ rescale(): void;
54
+ get config(): any;
55
+ get tagName(): string;
56
+ }