@operato/scene-grist 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- 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 : 사용자가 선택 체크박스를 통해서 선택한 레코드들이 데이타 속성으로 보내진다. 여러 레코드가 선택될 수 있으므로 데이타는 레코드의 배열 형태가 된다.
|