@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.
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +0 -0
- package/dist/editors/index.d.ts +2 -0
- package/dist/editors/index.js +2 -0
- package/dist/editors/index.js.map +1 -0
- package/dist/grist-action.d.ts +82 -0
- package/dist/grist-action.js +322 -0
- package/dist/grist-action.js.map +1 -0
- package/dist/grist.d.ts +56 -0
- package/dist/grist.js +258 -0
- package/dist/grist.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/templates/grist-action.d.ts +17 -0
- package/dist/templates/grist-action.js +19 -0
- package/dist/templates/grist-action.js.map +1 -0
- package/dist/templates/grist.d.ts +16 -0
- package/dist/templates/grist.js +98 -0
- package/dist/templates/grist.js.map +1 -0
- package/dist/templates/index.d.ts +30 -0
- package/dist/templates/index.js +4 -0
- package/dist/templates/index.js.map +1 -0
- package/global/index.d.ts +1 -0
- package/helps/scene/component/grist-action.ko.md +45 -0
- package/helps/scene/component/grist-action.md +43 -0
- package/helps/scene/component/grist-action.zh.md +44 -0
- package/helps/scene/component/grist.ko.md +26 -0
- package/helps/scene/component/grist.md +26 -0
- package/helps/scene/component/grist.zh.md +26 -0
- package/package.json +64 -0
- package/src/editors/index.ts +1 -0
- package/src/grist-action.ts +362 -0
- package/src/grist.ts +302 -0
- package/src/index.ts +3 -0
- package/src/templates/grist-action.png +0 -0
- package/src/templates/grist-action.ts +19 -0
- package/src/templates/grist.png +0 -0
- package/src/templates/grist.ts +98 -0
- package/src/templates/index.ts +3 -0
- package/src/uuid.d.ts +1 -0
- package/things-scene.config.js +7 -0
- package/translations/en.json +13 -0
- package/translations/ko.json +13 -0
- package/translations/ms.json +13 -0
- package/translations/zh.json +13 -0
- package/tsconfig.json +23 -0
- package/tsconfig.tsbuildinfo +1 -0
package/dist/grist.js
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
const NATURE = {
|
|
5
|
+
mutable: false,
|
|
6
|
+
resizable: true,
|
|
7
|
+
rotatable: true,
|
|
8
|
+
properties: [
|
|
9
|
+
{
|
|
10
|
+
type: 'select',
|
|
11
|
+
label: 'grist-mode',
|
|
12
|
+
name: 'mode',
|
|
13
|
+
property: {
|
|
14
|
+
options: [
|
|
15
|
+
{
|
|
16
|
+
display: 'Grid',
|
|
17
|
+
value: 'GRID'
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
display: 'List',
|
|
21
|
+
value: 'LIST'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
display: 'Depends on device',
|
|
25
|
+
value: 'DEVICE'
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'textarea',
|
|
32
|
+
label: 'config',
|
|
33
|
+
name: 'config'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: 'checkbox',
|
|
37
|
+
label: 'appendable',
|
|
38
|
+
name: 'appendable'
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
type: 'checkbox',
|
|
42
|
+
label: 'paginatable',
|
|
43
|
+
name: 'paginatable'
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
type: 'number',
|
|
47
|
+
label: 'content-scale',
|
|
48
|
+
name: 'contentScale',
|
|
49
|
+
property: {
|
|
50
|
+
step: 0.1,
|
|
51
|
+
min: 0.1
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: 'select',
|
|
56
|
+
label: 'bound-data',
|
|
57
|
+
name: 'boundData',
|
|
58
|
+
property: {
|
|
59
|
+
options: [
|
|
60
|
+
{
|
|
61
|
+
display: '',
|
|
62
|
+
value: ''
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
display: 'Focused Row',
|
|
66
|
+
value: 'focused-row'
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
display: 'Selected Rows',
|
|
70
|
+
value: 'selected-rows'
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
help: 'scene/component/grist'
|
|
77
|
+
};
|
|
78
|
+
import '@operato/data-grist';
|
|
79
|
+
import { Component, HTMLOverlayElement, error } from '@hatiolab/things-scene';
|
|
80
|
+
const isMobileDevice = () => false;
|
|
81
|
+
export default class SceneGrist extends HTMLOverlayElement {
|
|
82
|
+
constructor() {
|
|
83
|
+
super(...arguments);
|
|
84
|
+
this.__value = {};
|
|
85
|
+
this.beforeFetchFuncs = {};
|
|
86
|
+
}
|
|
87
|
+
static get nature() {
|
|
88
|
+
return NATURE;
|
|
89
|
+
}
|
|
90
|
+
ready() {
|
|
91
|
+
super.ready();
|
|
92
|
+
if (this.rootModel) {
|
|
93
|
+
this._listenTo = this.rootModel;
|
|
94
|
+
this._listener = function (after) {
|
|
95
|
+
after.scale && this.rescale();
|
|
96
|
+
}.bind(this);
|
|
97
|
+
this.rootModel.on('change', this._listener);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
removed() {
|
|
101
|
+
if (this._listenTo) {
|
|
102
|
+
this._listenTo.off('change', this._listener);
|
|
103
|
+
delete this._listenTo;
|
|
104
|
+
delete this._listener;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
createElement() {
|
|
108
|
+
super.createElement();
|
|
109
|
+
this.grist = document.createElement('ox-data-grist');
|
|
110
|
+
this.grist.style.setProperty('--grist-padding', '0');
|
|
111
|
+
this.element.appendChild(this.grist);
|
|
112
|
+
this.rescale();
|
|
113
|
+
const grist = this.grist;
|
|
114
|
+
this.setGristConfig(grist);
|
|
115
|
+
//@ts-ignore
|
|
116
|
+
grist.fetchHandler = ({ page, limit, sorters, options }) => {
|
|
117
|
+
Object.values(this.beforeFetchFuncs).forEach((func) => func({ page, limit, sorters, options }));
|
|
118
|
+
var { total = 0, records = [] } = grist.data || {};
|
|
119
|
+
return {
|
|
120
|
+
page,
|
|
121
|
+
limit,
|
|
122
|
+
total,
|
|
123
|
+
records
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
grist.addEventListener('select-record-change', e => {
|
|
127
|
+
var _a;
|
|
128
|
+
if (this.state.boundData === 'selected-rows') {
|
|
129
|
+
this.data = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.selected) || [];
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
grist.addEventListener('select-all-change', e => {
|
|
133
|
+
var _a;
|
|
134
|
+
if (this.state.boundData === 'selected-rows') {
|
|
135
|
+
this.data = ((_a = e.target) === null || _a === void 0 ? void 0 : _a.selected) || [];
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
grist.addEventListener('focus-change', (e) => {
|
|
139
|
+
var _a, _b;
|
|
140
|
+
if (this.state.boundData === 'focused-row') {
|
|
141
|
+
this.data = (((_b = (_a = e.target) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.records) || [])[e.detail.row];
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
get value() {
|
|
146
|
+
return this.__value;
|
|
147
|
+
}
|
|
148
|
+
set value(value) {
|
|
149
|
+
this.__value = value;
|
|
150
|
+
if (!this.grist || typeof value !== 'object')
|
|
151
|
+
return;
|
|
152
|
+
var { page, limit } = this.config.pagination || {};
|
|
153
|
+
this.grist.data =
|
|
154
|
+
value instanceof Array
|
|
155
|
+
? {
|
|
156
|
+
page,
|
|
157
|
+
limit,
|
|
158
|
+
...this.grist._data,
|
|
159
|
+
total: value.length,
|
|
160
|
+
records: Array.from(value)
|
|
161
|
+
}
|
|
162
|
+
: {
|
|
163
|
+
page,
|
|
164
|
+
limit,
|
|
165
|
+
...this.grist._data,
|
|
166
|
+
...value
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
onchange(after, before) {
|
|
170
|
+
if ('mode' in after || 'appendable' in after || 'paginatable' in after || 'config' in after) {
|
|
171
|
+
this.setGristConfig(this.grist);
|
|
172
|
+
}
|
|
173
|
+
this.rescale();
|
|
174
|
+
}
|
|
175
|
+
dispose() {
|
|
176
|
+
super.dispose();
|
|
177
|
+
delete this.grist;
|
|
178
|
+
}
|
|
179
|
+
/*
|
|
180
|
+
* 컴포넌트의 생성 또는 속성 변화 시에 호출되며,
|
|
181
|
+
* 그에 따른 html element의 반영이 필요한 부분을 구현한다.
|
|
182
|
+
*
|
|
183
|
+
* ThingsComponent state => HTML element properties
|
|
184
|
+
*/
|
|
185
|
+
setElementProperties(grist) {
|
|
186
|
+
this.rescale();
|
|
187
|
+
}
|
|
188
|
+
setGristConfig(grist) {
|
|
189
|
+
if (!grist) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
var { mode } = this.state;
|
|
193
|
+
if (mode != 'DEVICE') {
|
|
194
|
+
grist.mode = mode;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
grist.mode = isMobileDevice() ? 'LIST' : 'GRID';
|
|
198
|
+
}
|
|
199
|
+
grist.config = this.config;
|
|
200
|
+
}
|
|
201
|
+
/*
|
|
202
|
+
* 컴포넌트가 ready 상태가 되거나, 컴포넌트의 속성이 변화될 시 setElementProperties 뒤에 호출된다.
|
|
203
|
+
* 변화에 따른 기본적인 html 속성이 super.reposition()에서 진행되고, 그 밖의 작업이 필요할 때, 오버라이드 한다.
|
|
204
|
+
*/
|
|
205
|
+
reposition() {
|
|
206
|
+
super.reposition();
|
|
207
|
+
}
|
|
208
|
+
/*
|
|
209
|
+
* grist는 부모의 스케일의 역으로 transform해서, scale을 1로 맞춘다.
|
|
210
|
+
*/
|
|
211
|
+
rescale() {
|
|
212
|
+
var grist = this.grist;
|
|
213
|
+
if (!grist) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const scale = this.getState('contentScale') || 1;
|
|
217
|
+
const sx = scale;
|
|
218
|
+
const sy = scale;
|
|
219
|
+
const transform = `scale(${sx}, ${sy})`;
|
|
220
|
+
['-webkit-', '-moz-', '-ms-', '-o-', ''].forEach((prefix) => {
|
|
221
|
+
grist.style.setProperty(prefix + 'transform', transform);
|
|
222
|
+
grist.style.setProperty(prefix + 'transform-origin', '0px 0px');
|
|
223
|
+
});
|
|
224
|
+
const { width, height } = this.state;
|
|
225
|
+
grist.style.width = Math.round(width / scale) + 'px';
|
|
226
|
+
grist.style.height = Math.round(height / scale) + 'px';
|
|
227
|
+
}
|
|
228
|
+
get config() {
|
|
229
|
+
var { config, appendable, paginatable } = this.state;
|
|
230
|
+
if (typeof config !== 'object') {
|
|
231
|
+
try {
|
|
232
|
+
config = eval(`(${config})`);
|
|
233
|
+
}
|
|
234
|
+
catch (e) {
|
|
235
|
+
error(e);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (paginatable) {
|
|
239
|
+
if (config.pagination && !config.pagination.limit && config.pagination.pages && config.pagination.pages.length) {
|
|
240
|
+
config.pagination.limit = config.pagination.pages[0];
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
config.pagination = {
|
|
244
|
+
...config.pagination,
|
|
245
|
+
infinite: !paginatable
|
|
246
|
+
};
|
|
247
|
+
config.rows = {
|
|
248
|
+
...config.rows,
|
|
249
|
+
appendable: !!appendable
|
|
250
|
+
};
|
|
251
|
+
return config;
|
|
252
|
+
}
|
|
253
|
+
get tagName() {
|
|
254
|
+
return 'div';
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
Component.register('grist', SceneGrist);
|
|
258
|
+
//# sourceMappingURL=grist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grist.js","sourceRoot":"","sources":["../src/grist.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'select',\n label: 'grist-mode',\n name: 'mode',\n property: {\n options: [\n {\n display: 'Grid',\n value: 'GRID'\n },\n {\n display: 'List',\n value: 'LIST'\n },\n {\n display: 'Depends on device',\n value: 'DEVICE'\n }\n ]\n }\n },\n {\n type: 'textarea',\n label: 'config',\n name: 'config'\n },\n {\n type: 'checkbox',\n label: 'appendable',\n name: 'appendable'\n },\n {\n type: 'checkbox',\n label: 'paginatable',\n name: 'paginatable'\n },\n {\n type: 'number',\n label: 'content-scale',\n name: 'contentScale',\n property: {\n step: 0.1,\n min: 0.1\n }\n },\n {\n type: 'select',\n label: 'bound-data',\n name: 'boundData',\n property: {\n options: [\n {\n display: '',\n value: ''\n },\n {\n display: 'Focused Row',\n value: 'focused-row'\n },\n {\n display: 'Selected Rows',\n value: 'selected-rows'\n }\n ]\n }\n }\n ],\n help: 'scene/component/grist'\n}\n\nimport '@operato/data-grist'\n\nimport { Component, HTMLOverlayElement, Properties, error } from '@hatiolab/things-scene'\n\nimport { DataGrist } from '@operato/data-grist'\n\nconst isMobileDevice = () => false\n\nexport default class SceneGrist extends HTMLOverlayElement {\n static get nature() {\n return NATURE\n }\n\n private __value: any = {}\n private beforeFetchFuncs: any = {}\n private _listenTo?: any\n private _listener?: any\n\n public grist?: DataGrist\n\n ready() {\n super.ready()\n\n if (this.rootModel) {\n this._listenTo = this.rootModel\n this._listener = function (this: SceneGrist, after: Properties) {\n after.scale && this.rescale()\n }.bind(this)\n this.rootModel.on('change', this._listener)\n }\n }\n\n removed() {\n if (this._listenTo) {\n this._listenTo.off('change', this._listener)\n\n delete this._listenTo\n delete this._listener\n }\n }\n\n createElement() {\n super.createElement()\n\n this.grist = document.createElement('ox-data-grist') as DataGrist\n this.grist.style.setProperty('--grist-padding', '0')\n\n this.element.appendChild(this.grist)\n\n this.rescale()\n\n const grist = this.grist\n\n this.setGristConfig(grist)\n\n //@ts-ignore\n grist.fetchHandler = ({ page, limit, sorters, options }) => {\n Object.values(this.beforeFetchFuncs).forEach((func: any) => func({ page, limit, sorters, options }))\n var { total = 0, records = [] } = grist.data || {}\n return {\n page,\n limit,\n total,\n records\n }\n }\n\n grist.addEventListener('select-record-change', e => {\n if (this.state.boundData === 'selected-rows') {\n this.data = (e.target as DataGrist)?.selected || []\n }\n })\n\n grist.addEventListener('select-all-change', e => {\n if (this.state.boundData === 'selected-rows') {\n this.data = (e.target as DataGrist)?.selected || []\n }\n })\n\n grist.addEventListener('focus-change', (e: Event) => {\n if (this.state.boundData === 'focused-row') {\n this.data = ((e.target as DataGrist)?.data?.records || [])[(e as CustomEvent).detail.row]\n }\n })\n }\n\n get value() {\n return this.__value\n }\n\n set value(value) {\n this.__value = value\n if (!this.grist || typeof value !== 'object') return\n\n var { page, limit } = this.config.pagination || {}\n\n this.grist.data =\n value instanceof Array\n ? {\n page,\n limit,\n ...this.grist._data,\n total: value.length,\n records: Array.from(value)\n }\n : {\n page,\n limit,\n ...this.grist._data,\n ...value\n }\n }\n\n onchange(after: Properties, before: Properties) {\n if ('mode' in after || 'appendable' in after || 'paginatable' in after || 'config' in after) {\n this.setGristConfig(this.grist)\n }\n\n this.rescale()\n }\n\n dispose() {\n super.dispose()\n\n delete this.grist\n }\n\n /*\n * 컴포넌트의 생성 또는 속성 변화 시에 호출되며,\n * 그에 따른 html element의 반영이 필요한 부분을 구현한다.\n *\n * ThingsComponent state => HTML element properties\n */\n setElementProperties(grist: DataGrist) {\n this.rescale()\n }\n\n setGristConfig(grist: DataGrist | undefined) {\n if (!grist) {\n return\n }\n\n var { mode } = this.state\n\n if (mode != 'DEVICE') {\n grist.mode = mode\n } else {\n grist.mode = isMobileDevice() ? 'LIST' : 'GRID'\n }\n\n grist.config = this.config\n }\n\n /*\n * 컴포넌트가 ready 상태가 되거나, 컴포넌트의 속성이 변화될 시 setElementProperties 뒤에 호출된다.\n * 변화에 따른 기본적인 html 속성이 super.reposition()에서 진행되고, 그 밖의 작업이 필요할 때, 오버라이드 한다.\n */\n reposition() {\n super.reposition()\n }\n\n /*\n * grist는 부모의 스케일의 역으로 transform해서, scale을 1로 맞춘다.\n */\n rescale() {\n var grist = this.grist\n if (!grist) {\n return\n }\n\n const scale = this.getState('contentScale') || 1\n\n const sx = scale\n const sy = scale\n\n const transform = `scale(${sx}, ${sy})`\n\n ;['-webkit-', '-moz-', '-ms-', '-o-', ''].forEach((prefix: string) => {\n grist!.style.setProperty(prefix + 'transform', transform)\n grist!.style.setProperty(prefix + 'transform-origin', '0px 0px')\n })\n\n const { width, height } = this.state\n grist.style.width = Math.round(width / scale) + 'px'\n grist.style.height = Math.round(height / scale) + 'px'\n }\n\n get config() {\n var { config, appendable, paginatable } = this.state\n\n if (typeof config !== 'object') {\n try {\n config = eval(`(${config})`)\n } catch (e) {\n error(e)\n }\n }\n\n if (paginatable) {\n if (config.pagination && !config.pagination.limit && config.pagination.pages && config.pagination.pages.length) {\n config.pagination.limit = config.pagination.pages[0]\n }\n }\n\n config.pagination = {\n ...config.pagination,\n infinite: !paginatable\n }\n\n config.rows = {\n ...config.rows,\n appendable: !!appendable\n }\n\n return config\n }\n\n get tagName() {\n return 'div'\n }\n}\n\nComponent.register('grist', SceneGrist)\n"]}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,WAAW,MAAM,gBAAgB,CAAA;AACxC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA","sourcesContent":["import Grist from './grist'\nimport GristAction from './grist-action'\nexport default [Grist, GristAction]\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ACTIONS } from '../grist-action';
|
|
2
|
+
declare const _default: {
|
|
3
|
+
type: string;
|
|
4
|
+
description: string;
|
|
5
|
+
group: string;
|
|
6
|
+
icon: any;
|
|
7
|
+
model: {
|
|
8
|
+
type: string;
|
|
9
|
+
left: number;
|
|
10
|
+
top: number;
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
strokeStyle: string;
|
|
14
|
+
action: ACTIONS;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export default _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ACTIONS } from '../grist-action';
|
|
2
|
+
import icon from './grist-action.png';
|
|
3
|
+
export default {
|
|
4
|
+
type: 'grist-action',
|
|
5
|
+
description: 'grist-action',
|
|
6
|
+
group: 'table',
|
|
7
|
+
/* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */
|
|
8
|
+
icon,
|
|
9
|
+
model: {
|
|
10
|
+
type: 'grist-action',
|
|
11
|
+
left: 10,
|
|
12
|
+
top: 10,
|
|
13
|
+
width: 100,
|
|
14
|
+
height: 100,
|
|
15
|
+
strokeStyle: 'darkgray',
|
|
16
|
+
action: ACTIONS.GET_SELECTED
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=grist-action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grist-action.js","sourceRoot":"","sources":["../../src/templates/grist-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,IAAI,MAAM,oBAAoB,CAAA;AAErC,eAAe;IACb,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,KAAK,EAAE,OAAO;IACd,gGAAgG;IAChG,IAAI;IACJ,KAAK,EAAE;QACL,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,EAAE;QACR,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,OAAO,CAAC,YAAY;KAC7B;CACF,CAAA","sourcesContent":["import { ACTIONS } from '../grist-action'\nimport icon from './grist-action.png'\n\nexport default {\n type: 'grist-action',\n description: 'grist-action',\n group: 'table',\n /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */\n icon,\n model: {\n type: 'grist-action',\n left: 10,\n top: 10,\n width: 100,\n height: 100,\n strokeStyle: 'darkgray',\n action: ACTIONS.GET_SELECTED\n }\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
type: string;
|
|
3
|
+
description: string;
|
|
4
|
+
group: string;
|
|
5
|
+
icon: any;
|
|
6
|
+
model: {
|
|
7
|
+
type: string;
|
|
8
|
+
left: number;
|
|
9
|
+
top: number;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
mode: string;
|
|
13
|
+
config: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export default _default;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import icon from './grist.png';
|
|
2
|
+
export default {
|
|
3
|
+
type: 'grist',
|
|
4
|
+
description: 'grist',
|
|
5
|
+
group: 'table',
|
|
6
|
+
/* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */
|
|
7
|
+
icon,
|
|
8
|
+
model: {
|
|
9
|
+
type: 'grist',
|
|
10
|
+
left: 10,
|
|
11
|
+
top: 10,
|
|
12
|
+
width: 400,
|
|
13
|
+
height: 300,
|
|
14
|
+
mode: 'GRID',
|
|
15
|
+
config: `{
|
|
16
|
+
columns: [
|
|
17
|
+
{
|
|
18
|
+
type: 'gutter',
|
|
19
|
+
gutterName: 'dirty'
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
type: 'gutter',
|
|
23
|
+
gutterName: 'sequence'
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
type: 'gutter',
|
|
27
|
+
gutterName: 'row-selector',
|
|
28
|
+
multiple: true
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'string',
|
|
32
|
+
name: 'id',
|
|
33
|
+
hidden: true
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: 'string',
|
|
37
|
+
name: 'name',
|
|
38
|
+
header: 'name',
|
|
39
|
+
record: {
|
|
40
|
+
editable: true
|
|
41
|
+
},
|
|
42
|
+
sortable: true,
|
|
43
|
+
width: 120
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
type: 'string',
|
|
47
|
+
name: 'description',
|
|
48
|
+
header: 'description',
|
|
49
|
+
record: {
|
|
50
|
+
align: 'left',
|
|
51
|
+
editable: true
|
|
52
|
+
},
|
|
53
|
+
width: 200
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
type: 'boolean',
|
|
57
|
+
name: 'active',
|
|
58
|
+
header: 'active',
|
|
59
|
+
record: {
|
|
60
|
+
editable: true
|
|
61
|
+
},
|
|
62
|
+
sortable: true,
|
|
63
|
+
width: 60
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: 'datetime',
|
|
67
|
+
name: 'updatedAt',
|
|
68
|
+
header: 'updated at',
|
|
69
|
+
width: 180
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'datetime',
|
|
73
|
+
name: 'createdAt',
|
|
74
|
+
header: 'created at',
|
|
75
|
+
width: 180
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
rows: {
|
|
79
|
+
selectable: {
|
|
80
|
+
multiple: true
|
|
81
|
+
},
|
|
82
|
+
handlers: {
|
|
83
|
+
click: 'select-row-toggle'
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
sorters: [
|
|
87
|
+
{
|
|
88
|
+
name: 'name',
|
|
89
|
+
desc: true
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
pagination: {
|
|
93
|
+
pages: [20, 30, 50, 100, 200]
|
|
94
|
+
}
|
|
95
|
+
}`
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=grist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grist.js","sourceRoot":"","sources":["../../src/templates/grist.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,aAAa,CAAA;AAE9B,eAAe;IACb,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,OAAO;IACpB,KAAK,EAAE,OAAO;IACd,gGAAgG;IAChG,IAAI;IACJ,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,EAAE;QACR,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgFV;KACC;CACF,CAAA","sourcesContent":["import icon from './grist.png'\n\nexport default {\n type: 'grist',\n description: 'grist',\n group: 'table',\n /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */\n icon,\n model: {\n type: 'grist',\n left: 10,\n top: 10,\n width: 400,\n height: 300,\n mode: 'GRID',\n config: `{\n columns: [\n {\n type: 'gutter',\n gutterName: 'dirty'\n },\n {\n type: 'gutter',\n gutterName: 'sequence'\n },\n {\n type: 'gutter',\n gutterName: 'row-selector',\n multiple: true\n },\n {\n type: 'string',\n name: 'id',\n hidden: true\n },\n {\n type: 'string',\n name: 'name',\n header: 'name',\n record: {\n editable: true\n },\n sortable: true,\n width: 120\n },\n {\n type: 'string',\n name: 'description',\n header: 'description',\n record: {\n align: 'left',\n editable: true\n },\n width: 200\n },\n {\n type: 'boolean',\n name: 'active',\n header: 'active',\n record: {\n editable: true\n },\n sortable: true,\n width: 60\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: 'updated at',\n width: 180\n },\n {\n type: 'datetime',\n name: 'createdAt',\n header: 'created at',\n width: 180\n }\n ],\n rows: {\n selectable: {\n multiple: true\n },\n handlers: {\n click: 'select-row-toggle'\n }\n },\n sorters: [\n {\n name: 'name',\n desc: true\n }\n ],\n pagination: {\n pages: [20, 30, 50, 100, 200]\n }\n}`\n }\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
declare const _default: ({
|
|
2
|
+
type: string;
|
|
3
|
+
description: string;
|
|
4
|
+
group: string;
|
|
5
|
+
icon: any;
|
|
6
|
+
model: {
|
|
7
|
+
type: string;
|
|
8
|
+
left: number;
|
|
9
|
+
top: number;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
mode: string;
|
|
13
|
+
config: string;
|
|
14
|
+
};
|
|
15
|
+
} | {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
group: string;
|
|
19
|
+
icon: any;
|
|
20
|
+
model: {
|
|
21
|
+
type: string;
|
|
22
|
+
left: number;
|
|
23
|
+
top: number;
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
strokeStyle: string;
|
|
27
|
+
action: import("../grist-action").ACTIONS;
|
|
28
|
+
};
|
|
29
|
+
})[];
|
|
30
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,WAAW,MAAM,gBAAgB,CAAC;AACzC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC","sourcesContent":["import grist from \"./grist\";\nimport gristAction from \"./grist-action\";\nexport default [grist, gristAction];"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
declare module '*.png'
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# grist action
|
|
2
|
+
|
|
3
|
+
특정 Grist 컴포넌트에 연결되어 사용자의 마우스클릭(또는 탭) 이벤트가 발생했을 때, grist의 데이타를 가져오거나,
|
|
4
|
+
grist에 동작을 지시하는 컴포넌트이다.
|
|
5
|
+
|
|
6
|
+
그 밖의 일반적인 기능은 Rect(사각형) 컴포넌트와 동일하게 동작한다.
|
|
7
|
+
|
|
8
|
+
## Properties
|
|
9
|
+
|
|
10
|
+
- target grist
|
|
11
|
+
- 연결하고자하는 grist의 아이디를 설정한다.
|
|
12
|
+
- action
|
|
13
|
+
- Get page information
|
|
14
|
+
- 페이지네이션 정보 가져오기
|
|
15
|
+
- graphql query resolver 에 직접 사용될 수 있는 입력 변수 형식으로 가공된 데이타로 제공됨
|
|
16
|
+
```
|
|
17
|
+
{
|
|
18
|
+
page,
|
|
19
|
+
limit,
|
|
20
|
+
sorters
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
- Get all rows
|
|
24
|
+
- 모든 레코드 데이터 가져오기
|
|
25
|
+
- Get selected rows
|
|
26
|
+
- 체크된 레코드 데이터 가져오기
|
|
27
|
+
```
|
|
28
|
+
{
|
|
29
|
+
patches, /* 다중 레코드 업데이트용 graphql mutation resolver에 직접 사용될 수 있는 patch 데이타 형식으로 가공된 데이타 */
|
|
30
|
+
original /* 체크된 레코드 데이터 */
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
- Get dirty rows
|
|
34
|
+
- 변경 사항이 있는 데이터 가져오기
|
|
35
|
+
- 다중 레코드 업데이트용 graphql mutation resolver에 직접 사용될 수 있는 patch 데이타 형식으로 가공된 데이타로 제공됨
|
|
36
|
+
- Add a row
|
|
37
|
+
- 행 추가
|
|
38
|
+
- Delete selected rows
|
|
39
|
+
- 선택 행 삭제
|
|
40
|
+
- Commit
|
|
41
|
+
- 변경 사항을 데이터에 적용
|
|
42
|
+
- run at startup
|
|
43
|
+
- 뷰어 시작 시 자동 실행 여부
|
|
44
|
+
- record adder format
|
|
45
|
+
- 행 추가 시의 포맷
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# grist action
|
|
2
|
+
|
|
3
|
+
When a user's mouse click (or tap) event occurs when connected to a specific Grist component, the grist data is retrieved, or it is a component that directs the operation to grist.
|
|
4
|
+
|
|
5
|
+
그 밖의 일반적인 기능은 Rect(사각형) 컴포넌트와 동일하게 동작한다.
|
|
6
|
+
|
|
7
|
+
## Properties
|
|
8
|
+
|
|
9
|
+
- target grist
|
|
10
|
+
- Set the ID of grist to connect to.
|
|
11
|
+
- action
|
|
12
|
+
- Get page information
|
|
13
|
+
- Get pagination information
|
|
14
|
+
- Provided as processed data in the form of input variables that can be used directly in graphql query resolver
|
|
15
|
+
```js
|
|
16
|
+
{
|
|
17
|
+
page,
|
|
18
|
+
limit,
|
|
19
|
+
sorters
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
- Get all rows
|
|
23
|
+
- Get all record data
|
|
24
|
+
- Get selected rows
|
|
25
|
+
- Get checked record data
|
|
26
|
+
```ts
|
|
27
|
+
{
|
|
28
|
+
patches, /* Processed data in patch data format that can be used directly in the graphql mutation resolver for multiple record updates. */
|
|
29
|
+
original /* Checked record data */
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
- Get dirty rows
|
|
33
|
+
- Get data with changes
|
|
34
|
+
- Provided as processed data in patch data format that can be used directly in graphql mutation resolver for multi-record update
|
|
35
|
+
- Add a row
|
|
36
|
+
- Add a row
|
|
37
|
+
- Delete selected rows
|
|
38
|
+
- Commit
|
|
39
|
+
- Apply changes to the data
|
|
40
|
+
- run at startup
|
|
41
|
+
- Whether to run automatically when the viewer starts
|
|
42
|
+
- record adder format
|
|
43
|
+
- data format when adding rows
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# grist action
|
|
2
|
+
|
|
3
|
+
当通过连接到特定的Grist组件而发生用户的Click(或Tap)Event时,获取grist数据或提供操作指示给grist。
|
|
4
|
+
|
|
5
|
+
其他功能与Rect(矩形)组件相同。
|
|
6
|
+
|
|
7
|
+
## Properties
|
|
8
|
+
|
|
9
|
+
- target grist
|
|
10
|
+
- 设置要连接的grist的ID。
|
|
11
|
+
- action
|
|
12
|
+
- Get page information
|
|
13
|
+
- 获取分页信息
|
|
14
|
+
- 提供可以在graphql query resolver上直接使用的已加工的数据
|
|
15
|
+
```js
|
|
16
|
+
{
|
|
17
|
+
page,
|
|
18
|
+
limit,
|
|
19
|
+
sorters
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
- Get all rows
|
|
23
|
+
- 获取所有数据
|
|
24
|
+
- Get selected rows
|
|
25
|
+
- 获取已选择的数据
|
|
26
|
+
```ts
|
|
27
|
+
{
|
|
28
|
+
patches, /* 提供多行更新用的graphql mutation resolver上直接使用的已加工的数据*/
|
|
29
|
+
original /* 获取已选择的数据 */
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
- Get dirty rows
|
|
33
|
+
- 取得变更资料
|
|
34
|
+
- 提供多行更新用的graphql mutation resolver上直接使用的已加工的数据
|
|
35
|
+
- Add a row
|
|
36
|
+
- 添加行
|
|
37
|
+
- Delete selected rows
|
|
38
|
+
- 删除选择行
|
|
39
|
+
- Commit
|
|
40
|
+
- 将数据
|
|
41
|
+
- run at startup
|
|
42
|
+
- 是否在画面打开时执行
|
|
43
|
+
- record adder format
|
|
44
|
+
- 添加新行时的Format
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# grist
|
|
2
|
+
|
|
3
|
+
데이타그리드 또는 데이타리스트 형태로 멀티플 레코드 데이타를 표현하는 컴포넌트이다.
|
|
4
|
+
데이타그리드는 웹어플리케이션 UI에 적합한 형태이며, 데이타리스트는 모바일 앱에 적합한 형태이다.
|
|
5
|
+
이는 grist mode 속성으로 설정할 수 있다.
|
|
6
|
+
|
|
7
|
+
## Properties
|
|
8
|
+
|
|
9
|
+
- grist mode
|
|
10
|
+
- Grid: 멀티컬럼을 테이블형태로 구성하는 데이타그리드 형태
|
|
11
|
+
- list: 멀티컬럼 정보를 아이템 블록 형태로 구성하는 데이타리스트 형태
|
|
12
|
+
- Depends on device : 현재 디스플레이에 따라 데이타그리드 또는 데이타리스트 형태로 자동 선택된다
|
|
13
|
+
- config
|
|
14
|
+
- grist 구성을 위한 컨피규레이션
|
|
15
|
+
- 컬럼정보, 헤더정보, 레코드 정보, 페이지네이션 정보로 구성된다.
|
|
16
|
+
- appendable
|
|
17
|
+
- 새로운 레코드를 추가할 수 있도록 UI기능을 제공할 것인지 설정
|
|
18
|
+
- paginatable
|
|
19
|
+
- footer영역에 페이지네이션 기능을 제공하는 footer 영역 UI 기능을 제공할 것인지 설정
|
|
20
|
+
- scale
|
|
21
|
+
- grist 내부 내용의 크기 비율을 설정
|
|
22
|
+
- 0.1부터 0.1단위로 설정할 수 있음
|
|
23
|
+
- 기본값은 1
|
|
24
|
+
- bound data
|
|
25
|
+
- focused row : 사용자가 마우스나 키보드로 선택 또는 이동한 현재 레코드가 데이타 속성으로 보내진다. 하나의 레코드만 포커스되므로 데이타는 단일 오브젝트 형태가 된다.
|
|
26
|
+
- selected rows : 사용자가 선택 체크박스를 통해서 선택한 레코드들이 데이타 속성으로 보내진다. 여러 레코드가 선택될 수 있으므로 데이타는 레코드의 배열 형태가 된다.
|