@things-factory/operato-tools 7.0.0-y.0 → 7.0.1-alpha.0

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 (63) hide show
  1. package/client/index.js +0 -1
  2. package/client/pages/generator/button-config-tab-mixin.js +336 -2
  3. package/client/pages/generator/column-config-tab-mixin.js +647 -2
  4. package/client/pages/generator/etc-config-tab-mixin.js +116 -2
  5. package/client/pages/generator/form-config-tab-mixin.js +164 -2
  6. package/client/pages/generator/graphql-config-tab-mixin.js +281 -15
  7. package/client/pages/generator/grid-config-tab-mixin.js +190 -28
  8. package/client/pages/generator/grid-emphasized-config-tab-mixin.js +295 -6
  9. package/client/pages/generator/menu-config-tab-mixin.js +94 -8
  10. package/client/pages/generator/meta-generator-page.js +512 -12
  11. package/client/pages/generator/search-config-tab-mixin.js +188 -2
  12. package/client/pages/generator/tab-config-tab-mixin.js +226 -2
  13. package/client/pages/main.js +30 -7
  14. package/client/route.js +5 -10
  15. package/config/config.development.js +1 -1
  16. package/config/config.production.js +1 -0
  17. package/{server/errors → dist-server}/index.js +1 -1
  18. package/dist-server/index.js.map +1 -0
  19. package/{server → dist-server}/service/index.js +0 -2
  20. package/dist-server/service/index.js.map +1 -0
  21. package/dist-server/service/tool-entity/create-menu.js +321 -0
  22. package/dist-server/service/tool-entity/create-menu.js.map +1 -0
  23. package/dist-server/service/tool-entity/create-service.js +1053 -0
  24. package/dist-server/service/tool-entity/create-service.js.map +1 -0
  25. package/dist-server/service/tool-entity/index.js.map +1 -0
  26. package/dist-server/tsconfig.tsbuildinfo +1 -0
  27. package/package.json +21 -14
  28. package/server/index.ts +1 -0
  29. package/server/service/index.ts +15 -0
  30. package/server/service/tool-entity/create-menu.ts +338 -0
  31. package/server/service/tool-entity/create-service.ts +1128 -0
  32. package/server/service/tool-entity/index.ts +4 -0
  33. package/server/tsconfig.json +9 -0
  34. package/things-factory.config.js +1 -3
  35. package/tsconfig.json +9 -0
  36. package/views/auth-page.html +1 -7
  37. package/views/public/home.html +1 -6
  38. package/client/actions/main.js +0 -1
  39. package/client/bootstrap.js +0 -8
  40. package/client/reducers/main.js +0 -1
  41. package/client/themes/grist-theme.css +0 -200
  42. package/client/themes/layout-theme.css +0 -92
  43. package/client/themes/report-theme.css +0 -47
  44. package/schema.graphql +0 -3646
  45. package/server/constants/error-code.js +0 -1
  46. package/server/controllers/index.js +0 -1
  47. package/server/errors/license-error.js +0 -1
  48. package/server/index.js +0 -8
  49. package/server/middlewares/index.js +0 -19
  50. package/server/migrations/index.js +0 -12
  51. package/server/routes.js +0 -1
  52. package/server/service/boxtype/boxtype-mutation.js +0 -1
  53. package/server/service/boxtype/boxtype-query.js +0 -1
  54. package/server/service/boxtype/boxtype-type.js +0 -1
  55. package/server/service/boxtype/boxtype.js +0 -1
  56. package/server/service/boxtype/index.js +0 -9
  57. package/server/service/tool-entity/create-menu.js +0 -1
  58. package/server/service/tool-entity/create-service.js +0 -1
  59. package/server/service/tool-secret/index.js +0 -6
  60. package/server/service/tool-secret/tool-permission.js +0 -1
  61. package/server/service/tool-secret/tool-resolver.js +0 -1
  62. package/translations/ja.json +0 -85
  63. /package/{server → dist-server}/service/tool-entity/index.js +0 -0
@@ -1,4 +1,649 @@
1
- import{html}from"lit-element";import"@things-factory/component-ui/client/quick-find/quick-find-tabs";import"@things-factory/form-ui";import{getRenderer}from"@operato/data-grist";import{MetaApi}from"@things-factory/meta-ui/client/utils/meta-api";import{TermsUtil}from"@things-factory/meta-ui/client/utils/terms-util";const objectTypes=["object","resource-object","resource-code-selector","meta-object-selector","meta-code-selector"],jsonConfigTypes=["object","select","resource-object","resource-code-selector","meta-object-selector","meta-code-selector"],typeConfigGuides={object:{queryName:"",referenceField:"Object Mapping Entity reference Field Name",nameField:"",descriptionField:"",select:[{name:"",hidden:!0},{name:"",hidden:!1}],list:{fields:["",""]}},"resource-object":{queryName:"GraphQL query Name",referenceField:"Object Mapping Entity reference Field Name",nameField:"",descriptionField:"",select:[{name:"",hidden:!0},{name:"",hidden:!1}],list:{fields:["",""]}},"resource-code-selector":{queryName:"graphQL Query",selectorName:"popup Title",codeField:"code Field",dispField:"disp Field",filterFields:'["code","display"] or [{"name":"code1","operator":"eq"},{"name":"display","operator":"eq"}]',select:[{name:"",hidden:!0},{name:"",hidden:!1}],filters:'filter values [{"name": "parentId", "operator": "eq", "value": "506134f8-8655-47ee-afdc-248b0de2f31c"}]',sorters:'sort field [{"name": "boxTypeCd", "desc": false}]'},select:{type:"code or scenario or entity",name:"codeName or scenario Name",values:'code type display select Array [{"code1","code2"}] OR [{"value":"code1","display":"CODE1"}, {"value":"code2","display":"CODE2"}]',args:{queryName:"entity type graphQL Query",codeField:"entity type code Field",dispField:"entity type disp Field",filters:'entity type filter values [{"name": "parentId", "operator": "eq", "value": "506134f8-8655-47ee-afdc-248b0de2f31c"}]',sorters:'entity type sort field [{"name": "boxTypeCd", "desc": false}]'}},"meta-object-selector":{case_custom:{queryName:"GraphQL query Name",selectorName:"popup Title",referenceField:"Object Mapping Entity reference Field Name",nameField:"",filterFields:'["code","display"] or [{"name":"code1","operator":"eq"},{"name":"display","operator":"eq"}]',select:[{name:"",hidden:!0},{name:"",hidden:!1}],filters:'filter values [{"name": "parentId", "operator": "eq", "value": "506134f8-8655-47ee-afdc-248b0de2f31c"}]',sorters:'sort field [{"name": "boxTypeCd", "desc": false}]',fieldMap:{sourceField1:"targetField1",sourceField2:"targetField2",sourceField3:"targetField3"}},case_menu:{menu:"route_name",referenceField:"Object Mapping Entity reference Field Name",fieldMap:{sourceField1:"targetField1",sourceField2:"targetField2",sourceField3:"targetField3"}}},"meta-code-selector":{case_custom:{queryName:"graphQL Query",selectorName:"popup Title",codeField:"code Field",dispField:"disp Field",filterFields:'["code","display"] or [{"name":"code1","operator":"eq"},{"name":"display","operator":"eq"}]',select:[{name:"",hidden:!0},{name:"",hidden:!1}],filters:'filter values [{"name": "parentId", "operator": "eq", "value": "506134f8-8655-47ee-afdc-248b0de2f31c"}]',sorters:'sort field [{"name": "boxTypeCd", "desc": false}]',fieldMap:{sourceField1:"targetField1",sourceField2:"targetField2",sourceField3:"targetField3"}},case_menu:{menu:"route_name",fieldMap:{sourceField1:"targetField1",sourceField2:"targetField2",sourceField3:"targetField3"}}}};export const ColumnConfigTabMixin=e=>class extends e{setColumnConfigTabValues(e){e?.forEach(((e,t)=>{let a=t+1;if(e.rank=10*a,e.id=a,objectTypes.includes(e.type)){if(e.object_opt&&!e.selector_args){let t=JSON.stringify(e.object_opt,null,2);e.selector_args={option:t}}}else if("select"==e.type&&e.select_opt&&!e.selector_args){let t=JSON.stringify(e.select_opt,null,2);e.selector_args={option:t}}})),this.viewColumnData=e,this.columnTabGrist?.fetch()}getColumnConfigTabValues(){let e={grid_column:[],grid:{list:{fields:[],details:[],thumbnail:""},option:{sorters:[]}}},t=this.getElementValueById("column-tab-grid");return t&&(this.sortRecordByRank(t)?.forEach((t=>{let{name:a,header:r,type:l="string",editable:i=!1,sortable:o=!1,mandatory:d=!1,exportable:n=!1,rep_field:s=!1,detail_field:c=!1,thumbnail_field:m=!1,hidden:p=!1,accumulator:b,align:u="left",width:h=0,format:g,change_event_handler:y,default_value:f,selector_args:_,fixed:F=!1}=t;if(!a)return;let T={name:a,header:r||a,type:l,editable:i,sortable:o,mandatory:d,exportable:n,hidden:p,align:u,width:h,format:g,change_event_handler:y,default_value:f,fixed:F};b&&(T.accumulator=b),_&&"string"==typeof _&&(_=JSON.parse(_)),jsonConfigTypes.includes(l)&&_&&_.option&&(T["select"==l?"select_opt":"object_opt"]=JSON.parse(_.option)),e.grid_column.push(T),s&&e.grid.list.fields.push(a),c&&e.grid.list.details.push(a),m&&(e.grid.list.thumbnail=a)})),this.sortRecordByField(t.filter((e=>e.sort_rank&&e.sort_rank>0)),"sort_rank").forEach((t=>{let{name:a,sort_desc:r=!1}=t;a&&e.grid.option.sorters.push({name:a,desc:r})}))),e}renderColumnConfigTab(){return html`
1
+ import { html } from 'lit-element'
2
+
3
+ import '@things-factory/component-ui/client/quick-find/quick-find-tabs'
4
+ import '@things-factory/form-ui'
5
+
6
+ import { getRenderer } from '@operato/data-grist'
7
+
8
+ import { MetaApi } from '@things-factory/meta-ui/client/utils/meta-api'
9
+ import { TermsUtil } from '@things-factory/meta-ui/client/utils/terms-util'
10
+
11
+ // Object로 조회 되는 컬럼
12
+ const objectTypes = ['object','resource-object', 'resource-code-selector', 'meta-object-selector', 'meta-code-selector'];
13
+ // json 설정을 가지는 컬럼
14
+ const jsonConfigTypes = ['object', 'select', 'resource-object', 'resource-code-selector', 'meta-object-selector', 'meta-code-selector'];
15
+ // json 설정 가이드
16
+ const typeConfigGuides = {
17
+ 'object' : {
18
+ queryName: '',
19
+ referenceField: 'Object Mapping Entity reference Field Name',
20
+ nameField: '',
21
+ descriptionField: '',
22
+ select: [
23
+ { name: '', hidden: true },
24
+ { name: '', hidden: false }
25
+ ],
26
+ list: {
27
+ fields: ['', '']
28
+ }
29
+ },
30
+ 'resource-object':{
31
+ queryName: 'GraphQL query Name',
32
+ referenceField: 'Object Mapping Entity reference Field Name',
33
+ nameField: '',
34
+ descriptionField: '',
35
+ select: [
36
+ { name: '', hidden: true },
37
+ { name: '', hidden: false }
38
+ ],
39
+ list: {
40
+ fields: ['', '']
41
+ }
42
+ },
43
+ 'resource-code-selector': {
44
+ queryName: 'graphQL Query',
45
+ selectorName: 'popup Title',
46
+ codeField: 'code Field',
47
+ dispField: 'disp Field',
48
+ filterFields: '["code","display"] or [{"name":"code1","operator":"eq"},{"name":"display","operator":"eq"}]',
49
+ select: [
50
+ { name: '', hidden: true },
51
+ { name: '', hidden: false }
52
+ ],
53
+ filters: 'filter values [{"name": "parentId", "operator": "eq", "value": "506134f8-8655-47ee-afdc-248b0de2f31c"}]',
54
+ sorters: 'sort field [{"name": "boxTypeCd", "desc": false}]'
55
+ },
56
+ 'select': {
57
+ type: 'code or scenario or entity',
58
+ name: 'codeName or scenario Name',
59
+ values: 'code type display select Array [{"code1","code2"}] OR [{"value":"code1","display":"CODE1"}, {"value":"code2","display":"CODE2"}]',
60
+ args: {
61
+ queryName: 'entity type graphQL Query',
62
+ codeField: 'entity type code Field',
63
+ dispField: 'entity type disp Field',
64
+ filters: 'entity type filter values [{"name": "parentId", "operator": "eq", "value": "506134f8-8655-47ee-afdc-248b0de2f31c"}]',
65
+ sorters: 'entity type sort field [{"name": "boxTypeCd", "desc": false}]'
66
+ }
67
+ },
68
+ 'meta-object-selector': {
69
+ case_custom: {
70
+ queryName: 'GraphQL query Name',
71
+ selectorName: 'popup Title',
72
+ referenceField: 'Object Mapping Entity reference Field Name',
73
+ nameField: '',
74
+ filterFields: '["code","display"] or [{"name":"code1","operator":"eq"},{"name":"display","operator":"eq"}]',
75
+ select:[
76
+ { name: '', hidden: true },
77
+ { name: '', hidden: false }
78
+ ],
79
+ filters: 'filter values [{"name": "parentId", "operator": "eq", "value": "506134f8-8655-47ee-afdc-248b0de2f31c"}]',
80
+ sorters: 'sort field [{"name": "boxTypeCd", "desc": false}]',
81
+ fieldMap: {
82
+ sourceField1 : 'targetField1',
83
+ sourceField2 : 'targetField2',
84
+ sourceField3 : 'targetField3'
85
+ }
86
+ },
87
+ case_menu: {
88
+ menu: 'route_name',
89
+ referenceField: 'Object Mapping Entity reference Field Name',
90
+ fieldMap: {
91
+ sourceField1 : 'targetField1',
92
+ sourceField2 : 'targetField2',
93
+ sourceField3 : 'targetField3'
94
+ }
95
+ }
96
+ },
97
+ 'meta-code-selector': {
98
+ case_custom: {
99
+ queryName: 'graphQL Query',
100
+ selectorName: 'popup Title',
101
+ codeField: 'code Field',
102
+ dispField: 'disp Field',
103
+ filterFields: '["code","display"] or [{"name":"code1","operator":"eq"},{"name":"display","operator":"eq"}]',
104
+ select: [
105
+ { name: '', hidden: true },
106
+ { name: '', hidden: false }
107
+ ],
108
+ filters: 'filter values [{"name": "parentId", "operator": "eq", "value": "506134f8-8655-47ee-afdc-248b0de2f31c"}]',
109
+ sorters: 'sort field [{"name": "boxTypeCd", "desc": false}]',
110
+ fieldMap: {
111
+ sourceField1 : 'targetField1',
112
+ sourceField2 : 'targetField2',
113
+ sourceField3 : 'targetField3'
114
+ }
115
+ },
116
+ case_menu: {
117
+ menu: 'route_name',
118
+ fieldMap: {
119
+ sourceField1 : 'targetField1',
120
+ sourceField2 : 'targetField2',
121
+ sourceField3 : 'targetField3'
122
+ }
123
+ }
124
+ }
125
+ }
126
+
127
+ /**
128
+ * @license
129
+ * Copyright © HatioLab Inc. All rights reserved.
130
+ * @author wryang
131
+ * @description 페이지 생성기 화면의 컬럼 구성 탭 화면
132
+ */
133
+ export const ColumnConfigTabMixin = (baseElement) => class extends baseElement {
134
+ /**
135
+ * @description 탭 데이터를 탭에 데이터를 설정
136
+ ***************************************
137
+ * @param {Object} data
138
+ */
139
+ setColumnConfigTabValues(data) {
140
+ data?.forEach((column, index) => {
141
+ let rank = index + 1;
142
+ column.rank = rank * 10;
143
+ column.id = rank;
144
+
145
+ if (objectTypes.includes(column.type)) {
146
+ if (column.object_opt && !column.selector_args) {
147
+ let optString = JSON.stringify(column.object_opt, null, 2);
148
+ column.selector_args = { option : optString };
149
+ }
150
+
151
+ } else if (column.type == 'select') {
152
+ if (column.select_opt && !column.selector_args) {
153
+ let optString = JSON.stringify(column.select_opt, null, 2);
154
+ column.selector_args = { option : optString };
155
+ }
156
+ }
157
+ })
158
+
159
+ this.viewColumnData = data;
160
+ this.columnTabGrist?.fetch();
161
+ }
162
+
163
+ /**
164
+ * @description 컬럼 탭에 대한 컬럼 설정 정보를 리턴
165
+ ********************************************
166
+ * @returns {Object}
167
+ */
168
+ getColumnConfigTabValues() {
169
+ // 기본 return object
170
+ let retObject = {
171
+ grid_column: [],
172
+ grid: {
173
+ list: {
174
+ fields: [],
175
+ details: [],
176
+ thumbnail: ''
177
+ },
178
+ option: {
179
+ sorters: []
180
+ }
181
+ }
182
+ };
183
+
184
+ // grid에서 데이터 가져오기
185
+ let gridValue = this.getElementValueById('column-tab-grid');
186
+
187
+ if (gridValue) {
188
+ // rank 값으로 정렬 후 데이터 가공
189
+ this.sortRecordByRank(gridValue)?.forEach(x => {
190
+ let {
191
+ name = undefined,
192
+ header = undefined,
193
+ type = 'string',
194
+ editable = false,
195
+ sortable = false,
196
+ mandatory = false,
197
+ exportable = false,
198
+ rep_field = false,
199
+ detail_field = false,
200
+ thumbnail_field = false,
201
+ hidden = false,
202
+ accumulator = undefined,
203
+ align = 'left',
204
+ width = 0,
205
+ format = undefined,
206
+ change_event_handler = undefined,
207
+ default_value = undefined,
208
+ selector_args = undefined,
209
+ fixed = false
210
+ } = x;
211
+
212
+ if (!name) return;
213
+
214
+ let columnObj = {
215
+ name: name,
216
+ header: header ? header : name,
217
+ type: type,
218
+ editable: editable,
219
+ sortable: sortable,
220
+ mandatory: mandatory,
221
+ exportable: exportable,
222
+ hidden: hidden,
223
+ align: align,
224
+ width: width,
225
+ format: format,
226
+ change_event_handler: change_event_handler,
227
+ default_value: default_value,
228
+ fixed: fixed
229
+ }
230
+
231
+ // 누적 계산 처리
232
+ if(accumulator) {
233
+ columnObj.accumulator = accumulator;
234
+ }
235
+
236
+ // 셀렉터 관련 정보 설정
237
+ if (selector_args && typeof selector_args === 'string') {
238
+ selector_args = JSON.parse(selector_args);
239
+ }
240
+
241
+ // object / select의 경우 args 값 설정
242
+ if (jsonConfigTypes.includes(type) && selector_args && selector_args.option) {
243
+ columnObj[type == 'select' ? 'select_opt' : 'object_opt'] = JSON.parse(selector_args.option);
244
+ }
245
+
246
+ retObject.grid_column.push(columnObj);
247
+
248
+ // 대표 필드 여부
249
+ if (rep_field) {
250
+ retObject.grid.list.fields.push(name);
251
+ }
252
+
253
+ // 상세 필드 여부
254
+ if (detail_field) {
255
+ retObject.grid.list.details.push(name);
256
+ }
257
+
258
+ // 썸네일 여부
259
+ if (thumbnail_field) {
260
+ retObject.grid.list.thumbnail = name;
261
+ }
262
+ })
263
+
264
+ // sort 필드 : sort_rank로 정렬 후 데이터 가공
265
+ this.sortRecordByField(gridValue.filter(x => x.sort_rank && x.sort_rank > 0), 'sort_rank').forEach(x => {
266
+ let { name = undefined, sort_desc = false } = x;
267
+ if (!name) return;
268
+
269
+ retObject.grid.option.sorters.push({
270
+ name: name,
271
+ desc: sort_desc
272
+ })
273
+ })
274
+ }
275
+
276
+ return retObject;
277
+ }
278
+
279
+ /**
280
+ * @description 컬럼 설정 탭 렌더링
281
+ *******************************
282
+ * @returns {HTML}
283
+ */
284
+ renderColumnConfigTab() {
285
+ return html`
2
286
  <ox-grist auto-fetch id="column-tab-grid" .config=${this.columnTabGridConfig} .mode='GRID'
3
287
  .fetchHandler=${this.fetchColumnTabHandler.bind(this)}>
4
- </ox-grist>`}get columnTabGrist(){return this.shadowRoot.querySelector("#column-tab-grid")}async fetchColumnTabHandler(){return{total:0,records:this.viewColumnData||[]}}async setColumnConfigTabConfig(){let e=await MetaApi.getCodeSelectorData("GRIST_COLUMN_TYPES");this.columnTabGridConfig={rows:MetaApi.getGristSelectableConfig(!0),pagination:{infinite:!0},sorters:[{name:"rank",desc:!1}],appendable:!0,columns:[...MetaApi.getGristGuttersConfig(!1,!1),{type:"gutter",gutterName:"button",icon:"delete",handlers:{click:(e,t,a,r,l)=>{r.id&&this.deleteRow(this.columnTabGrist,r)}}},{type:"integer",name:"rank",header:TermsUtil.tLabel("rank"),sortable:!1,width:50,record:{align:"right",editable:!0,mandatory:!0}},{type:"string",name:"id",hidden:!0},{type:"string",name:"name",header:TermsUtil.tLabel("name"),sortable:!1,width:135,record:{align:"left",editable:!0,mandatory:!0}},{type:"string",name:"header",header:TermsUtil.tLabel("header"),sortable:!1,width:135,record:{align:"left",editable:!0,mandatory:!0}},{type:"string",name:"display",header:TermsUtil.tLabel("display"),sortable:!1,width:135,record:{align:"left",editable:!1,mandatory:!1,renderer:(e,t,a,r,l)=>a&&a.header?TermsUtil.tLabel(a.header):""}},{type:"select",name:"type",header:TermsUtil.tLabel("type"),sortable:!1,width:100,record:{align:"left",editable:!0,mandatory:!0,options:e}},{type:"boolean",name:"editable",header:TermsUtil.tLabel("editable"),sortable:!1,width:80,record:{align:"center",mandatory:!1,editable:!0}},{type:"boolean",name:"sortable",header:TermsUtil.tLabel("sortable"),sortable:!1,width:80,record:{align:"center",mandatory:!1,editable:!0}},{type:"boolean",name:"mandatory",header:TermsUtil.tLabel("mandatory"),sortable:!1,width:85,record:{align:"center",mandatory:!1,editable:!0}},{type:"boolean",name:"exportable",header:TermsUtil.tLabel("exportable"),sortable:!1,width:90,record:{align:"center",mandatory:!1,editable:!0}},{type:"boolean",name:"rep_field",header:TermsUtil.tLabel("rep_field"),sortable:!1,width:80,record:{align:"center",mandatory:!1,editable:!0}},{type:"boolean",name:"detail_field",header:TermsUtil.tLabel("detail_field"),sortable:!1,width:80,record:{align:"center",mandatory:!1,editable:!0}},{type:"boolean",name:"fixed",header:TermsUtil.tLabel("fixed_column"),sortable:!1,width:80,record:{align:"center",mandatory:!1,editable:!0}},{type:"boolean",name:"thumbnail_field",header:TermsUtil.tLabel("thumbnail_field"),sortable:!1,width:70,record:{align:"center",mandatory:!1,editable:!0}},{type:"boolean",name:"hidden",header:TermsUtil.tLabel("hidden"),sortable:!1,width:55,record:{align:"center",mandatory:!1,editable:!0}},{type:"select",name:"accumulator",header:TermsUtil.tLabel("accumulator"),sortable:!1,width:70,record:{align:"center",editable:!0,mandatory:!1,options:["","sum","avg","count","min","max"]}},{type:"select",name:"align",header:TermsUtil.tLabel("align"),sortable:!1,width:55,record:{align:"left",editable:!0,mandatory:!1,options:["","left","center","right"]}},{type:"integer",name:"width",header:TermsUtil.tLabel("width"),sortable:!1,width:55,record:{editable:!0,mandatory:!0,align:"right"}},{type:"integer",name:"sort_rank",header:TermsUtil.tLabel("sort_rank"),sortable:!1,width:80,record:{editable:!0,mandatory:!0,align:"right"}},{type:"boolean",name:"sort_desc",header:TermsUtil.tLabel("reverse_sort"),sortable:!1,width:65,record:{align:"center",mandatory:!1,editable:!0}},{type:"string",name:"format",header:TermsUtil.tLabel("format"),sortable:!1,width:135,record:{align:"left",editable:!0,mandatory:!1}},{type:"string",name:"default_value",header:TermsUtil.tLabel("default_value"),sortable:!1,width:135,record:{align:"left",editable:!0,mandatory:!1}},{type:"string",name:"change_event_handler",header:TermsUtil.tLabel("change-event-handler"),sortable:!1,width:150,record:{align:"left",mandatory:!1,editable:!0}},{type:"parameters",name:"selector_args",header:TermsUtil.tLabel("selector_args"),sortable:!1,width:150,record:{align:"left",editable:!0,mandatory:!1,renderer:(e,t,a,r,l)=>{if(!a.selector_args){let e=typeConfigGuides[a.type];e?a.selector_args={option:JSON.stringify(e,null,2)}:0==jsonConfigTypes.includes(a.type)&&(a.selector_args=void 0)}return getRenderer("json5")(e,t,a,r,l)},options:(e,t,a,r,l)=>{let{name:i,help:o}={name:TermsUtil.tLabel("selector_args"),help:""};return{name:i,spec:[{label:"script",name:"option",type:"textarea"}],help:o,context:this.columnTabGrist}}}}]}}};
288
+ </ox-grist>`
289
+ }
290
+
291
+ /**
292
+ * @description 컬럼 탭 엘리먼트 추출
293
+ *********************************
294
+ * @returns {HTML}
295
+ */
296
+ get columnTabGrist() {
297
+ return this.shadowRoot.querySelector('#column-tab-grid')
298
+ }
299
+
300
+ /**
301
+ * @description 데이터 조회 결과
302
+ *****************************
303
+ * @returns {Object}
304
+ */
305
+ async fetchColumnTabHandler() {
306
+ return {
307
+ total: 0,
308
+ records: this.viewColumnData || []
309
+ }
310
+ }
311
+
312
+ /**
313
+ * @description 컬럼 설정 탭에 설정 세팅
314
+ ***********************************
315
+ */
316
+ async setColumnConfigTabConfig() {
317
+ // 컬럼 리스트
318
+ let colTypeList = await MetaApi.getCodeSelectorData('GRIST_COLUMN_TYPES');
319
+
320
+ // 그리드 설정
321
+ this.columnTabGridConfig = {
322
+ rows: MetaApi.getGristSelectableConfig(true),
323
+ pagination: { infinite: true },
324
+ sorters: [{ name: 'rank', desc: false }],
325
+ appendable: true,
326
+ columns: [
327
+ ...MetaApi.getGristGuttersConfig(false, false),
328
+ {
329
+ type: 'gutter', gutterName: 'button', icon: 'delete',
330
+ handlers: {
331
+ click: (_columns, _data, _column, record, _rowIndex) => {
332
+ if (record.id) {
333
+ this.deleteRow(this.columnTabGrist, record);
334
+ }
335
+ }
336
+ },
337
+ },
338
+ {
339
+ type: 'integer',
340
+ name: 'rank',
341
+ header: TermsUtil.tLabel('rank'),
342
+ sortable: false,
343
+ width: 50,
344
+ record: {
345
+ align: 'right',
346
+ editable: true,
347
+ mandatory: true
348
+ }
349
+ },
350
+ {
351
+ type: 'string',
352
+ name: 'id',
353
+ hidden: true
354
+ },
355
+ {
356
+ type: 'string',
357
+ name: 'name',
358
+ header: TermsUtil.tLabel('name'),
359
+ sortable: false,
360
+ width: 135,
361
+ record: {
362
+ align: 'left',
363
+ editable: true,
364
+ mandatory: true
365
+ }
366
+ },
367
+ {
368
+ type: 'string',
369
+ name: 'header',
370
+ header: TermsUtil.tLabel('header'),
371
+ sortable: false,
372
+ width: 135,
373
+ record: {
374
+ align: 'left',
375
+ editable: true,
376
+ mandatory: true
377
+ }
378
+ },
379
+ {
380
+ type: 'string',
381
+ name: 'display',
382
+ header: TermsUtil.tLabel('display'),
383
+ sortable: false,
384
+ width: 135,
385
+ record: {
386
+ align: 'left',
387
+ editable: false,
388
+ mandatory: false,
389
+ renderer: (value, column, record, rowIndex, field) => {
390
+ return record && record.header ? TermsUtil.tLabel(record.header) : '';
391
+ }
392
+ }
393
+ },
394
+ {
395
+ type: 'select',
396
+ name: 'type',
397
+ header: TermsUtil.tLabel('type'),
398
+ sortable: false,
399
+ width: 100,
400
+ record: {
401
+ align: 'left',
402
+ editable: true,
403
+ mandatory: true,
404
+ options: colTypeList
405
+ }
406
+ },
407
+ {
408
+ type: 'boolean',
409
+ name: 'editable',
410
+ header: TermsUtil.tLabel('editable'),
411
+ sortable: false,
412
+ width: 80,
413
+ record: {
414
+ align: 'center',
415
+ mandatory: false,
416
+ editable: true
417
+ }
418
+ },
419
+ {
420
+ type: 'boolean',
421
+ name: 'sortable',
422
+ header: TermsUtil.tLabel('sortable'),
423
+ sortable: false,
424
+ width: 80,
425
+ record: {
426
+ align: 'center',
427
+ mandatory: false,
428
+ editable: true
429
+ }
430
+ },
431
+ {
432
+ type: 'boolean',
433
+ name: 'mandatory',
434
+ header: TermsUtil.tLabel('mandatory'),
435
+ sortable: false,
436
+ width: 85,
437
+ record: {
438
+ align: 'center',
439
+ mandatory: false,
440
+ editable: true
441
+ }
442
+ },
443
+ {
444
+ type: 'boolean',
445
+ name: 'exportable',
446
+ header: TermsUtil.tLabel('exportable'),
447
+ sortable: false,
448
+ width: 90,
449
+ record: {
450
+ align: 'center',
451
+ mandatory: false,
452
+ editable: true
453
+ }
454
+ },
455
+ {
456
+ type: 'boolean',
457
+ name: 'rep_field',
458
+ header: TermsUtil.tLabel('rep_field'),
459
+ sortable: false,
460
+ width: 80,
461
+ record: {
462
+ align: 'center',
463
+ mandatory: false,
464
+ editable: true
465
+ }
466
+ },
467
+ {
468
+ type: 'boolean',
469
+ name: 'detail_field',
470
+ header: TermsUtil.tLabel('detail_field'),
471
+ sortable: false,
472
+ width: 80,
473
+ record: {
474
+ align: 'center',
475
+ mandatory: false,
476
+ editable: true
477
+ }
478
+ },
479
+ {
480
+ type: 'boolean',
481
+ name: 'fixed',
482
+ header: TermsUtil.tLabel('fixed_column'),
483
+ sortable: false,
484
+ width: 80,
485
+ record: {
486
+ align: 'center',
487
+ mandatory: false,
488
+ editable: true
489
+ }
490
+ },
491
+ {
492
+ type: 'boolean',
493
+ name: 'thumbnail_field',
494
+ header: TermsUtil.tLabel('thumbnail_field'),
495
+ sortable: false,
496
+ width: 70,
497
+ record: {
498
+ align: 'center',
499
+ mandatory: false,
500
+ editable: true
501
+ }
502
+ },
503
+ {
504
+ type: 'boolean',
505
+ name: 'hidden',
506
+ header: TermsUtil.tLabel('hidden'),
507
+ sortable: false,
508
+ width: 55,
509
+ record: {
510
+ align: 'center',
511
+ mandatory: false,
512
+ editable: true
513
+ }
514
+ },
515
+ {
516
+ type: 'select',
517
+ name: 'accumulator',
518
+ header: TermsUtil.tLabel('accumulator'),
519
+ sortable: false,
520
+ width: 70,
521
+ record: {
522
+ align: 'center',
523
+ editable: true,
524
+ mandatory: false,
525
+ options: ['', 'sum', 'avg', 'count', 'min', 'max']
526
+ }
527
+ },
528
+ {
529
+ type: 'select',
530
+ name: 'align',
531
+ header: TermsUtil.tLabel('align'),
532
+ sortable: false,
533
+ width: 55,
534
+ record: {
535
+ align: 'left',
536
+ editable: true,
537
+ mandatory: false,
538
+ options: ['', 'left', 'center', 'right']
539
+ }
540
+ },
541
+ {
542
+ type: 'integer',
543
+ name: 'width',
544
+ header: TermsUtil.tLabel('width'),
545
+ sortable: false,
546
+ width: 55,
547
+ record: {
548
+ editable: true,
549
+ mandatory: true,
550
+ align: 'right'
551
+ }
552
+ },
553
+ {
554
+ type: 'integer',
555
+ name: 'sort_rank',
556
+ header: TermsUtil.tLabel('sort_rank'),
557
+ sortable: false,
558
+ width: 80,
559
+ record: {
560
+ editable: true,
561
+ mandatory: true,
562
+ align: 'right'
563
+ }
564
+ },
565
+ {
566
+ type: 'boolean',
567
+ name: 'sort_desc',
568
+ header: TermsUtil.tLabel('reverse_sort'),
569
+ sortable: false,
570
+ width: 65,
571
+ record: {
572
+ align: 'center',
573
+ mandatory: false,
574
+ editable: true
575
+ }
576
+ },
577
+ {
578
+ type: 'string',
579
+ name: 'format',
580
+ header: TermsUtil.tLabel('format'),
581
+ sortable: false,
582
+ width: 135,
583
+ record: {
584
+ align: 'left',
585
+ editable: true,
586
+ mandatory: false
587
+ }
588
+ },
589
+ {
590
+ type: 'string',
591
+ name: 'default_value',
592
+ header: TermsUtil.tLabel('default_value'),
593
+ sortable: false,
594
+ width: 135,
595
+ record: {
596
+ align: 'left',
597
+ editable: true,
598
+ mandatory: false
599
+ }
600
+ },
601
+ {
602
+ type: 'string',
603
+ name: 'change_event_handler',
604
+ header: TermsUtil.tLabel('change-event-handler'),
605
+ sortable: false,
606
+ width: 150,
607
+ record: {
608
+ align: 'left',
609
+ mandatory: false,
610
+ editable: true
611
+ }
612
+ },
613
+ {
614
+ type: 'parameters',
615
+ name: 'selector_args',
616
+ header: TermsUtil.tLabel('selector_args'),
617
+ sortable: false,
618
+ width: 150,
619
+ record: {
620
+ align: 'left',
621
+ editable: true,
622
+ mandatory: false,
623
+ renderer: (value, column, record, rowIndex, field) => {
624
+ if (!record.selector_args) {
625
+ let guideObject = typeConfigGuides[record.type];
626
+ if(guideObject) {
627
+ record.selector_args = {
628
+ option: JSON.stringify(guideObject, null, 2)
629
+ };
630
+ } else {
631
+ if (jsonConfigTypes.includes(record.type) == false) {
632
+ record.selector_args = undefined;
633
+ }
634
+ }
635
+ }
636
+ return getRenderer('json5')(value, column, record, rowIndex, field)
637
+ },
638
+ options: (value, column, record, row, field) => {
639
+ let { name, help } = { name: TermsUtil.tLabel('selector_args'), help: '' };
640
+ let spec = [{ label: 'script', name: 'option', type: 'textarea' }];
641
+ const context = this.columnTabGrist
642
+ return { name, spec, help, context }
643
+ }
644
+ }
645
+ }
646
+ ]
647
+ }
648
+ }
649
+ }