@things-factory/meta-ui 7.0.1-alpha.5 → 7.0.1-alpha.51

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 (163) hide show
  1. package/client/actions/main.js +17 -23
  2. package/client/bootstrap.ts +23 -25
  3. package/client/component/filter/filter-form-meta-code-select.ts +99 -0
  4. package/client/component/filter/filter-form-meta-object-select.ts +104 -0
  5. package/client/component/filter/filter-grist-meta-code-select.ts +97 -0
  6. package/client/component/filter/filter-grist-meta-object-select.ts +102 -0
  7. package/client/component/grist/renderer/grist-renderer-meta-object-selector.js +18 -13
  8. package/client/component/popup/code-input-editor-popup.js +37 -47
  9. package/client/component/popup/file-upload-popup.js +8 -26
  10. package/client/component/popup/meta-object-selector-popup.ts +328 -0
  11. package/client/component/popup/{record-based-code-editor-popup.js → record-based-code-editor-popup.ts} +49 -58
  12. package/client/index.ts +1 -0
  13. package/client/mixin/meta-grist-tab-mixin.js +282 -283
  14. package/client/mixin/meta-main-tab-mixin.js +220 -223
  15. package/client/mixin/meta-master-detail-mixin.js +347 -348
  16. package/client/mixin/meta-tab-detail-mixin.js +240 -243
  17. package/client/mixin/meta-tab-mixin.js +154 -155
  18. package/client/pages/activity/meta-activity-define-page.js +30 -28
  19. package/client/pages/activity/meta-activity-list-page.js +71 -78
  20. package/client/pages/entity/config-entity.js +18 -16
  21. package/client/pages/entity/main-menu-selector.js +16 -23
  22. package/client/pages/history/history-copy-list-popup.js +5 -2
  23. package/client/pages/history/history-json-list-popup.js +4 -0
  24. package/client/pages/menu/{dynamic-menu-setting-let.js → dynamic-menu-setting-let.ts} +26 -32
  25. package/client/pages/menu/dynamic-menu-template.js +1 -4
  26. package/client/pages/menu/dynamic-menu.js +12 -10
  27. package/client/pages/menu/export-menu-popup.js +10 -11
  28. package/client/pages/meta-grist-page.js +1 -2
  29. package/client/pages/personalize/personal-column-selector.js +18 -17
  30. package/client/pages/terms/config-terminology.js +19 -32
  31. package/client/utils/meta-api.js +13 -1
  32. package/client/utils/meta-ui-util.js +181 -181
  33. package/client/utils/rest-service-util.js +328 -0
  34. package/client/utils/service-util.js +42 -6
  35. package/client/utils/{terms-util.js → terms-util.ts} +30 -104
  36. package/client/viewparts/dynamic-menu-part.ts +119 -0
  37. package/dist-client/actions/main.js +8 -8
  38. package/dist-client/actions/main.js.map +1 -1
  39. package/dist-client/bootstrap.d.ts +1 -0
  40. package/dist-client/bootstrap.js +17 -20
  41. package/dist-client/bootstrap.js.map +1 -1
  42. package/dist-client/component/filter/filter-form-meta-code-select.d.ts +4 -1
  43. package/dist-client/component/filter/filter-form-meta-code-select.js +21 -18
  44. package/dist-client/component/filter/filter-form-meta-code-select.js.map +1 -1
  45. package/dist-client/component/filter/filter-form-meta-object-select.d.ts +4 -1
  46. package/dist-client/component/filter/filter-form-meta-object-select.js +27 -19
  47. package/dist-client/component/filter/filter-form-meta-object-select.js.map +1 -1
  48. package/dist-client/component/filter/filter-grist-meta-code-select.d.ts +3 -1
  49. package/dist-client/component/filter/filter-grist-meta-code-select.js +19 -18
  50. package/dist-client/component/filter/filter-grist-meta-code-select.js.map +1 -1
  51. package/dist-client/component/filter/filter-grist-meta-object-select.d.ts +3 -1
  52. package/dist-client/component/filter/filter-grist-meta-object-select.js +25 -19
  53. package/dist-client/component/filter/filter-grist-meta-object-select.js.map +1 -1
  54. package/dist-client/component/grist/renderer/grist-renderer-meta-object-selector.js +9 -3
  55. package/dist-client/component/grist/renderer/grist-renderer-meta-object-selector.js.map +1 -1
  56. package/dist-client/component/popup/code-input-editor-popup.js +10 -19
  57. package/dist-client/component/popup/code-input-editor-popup.js.map +1 -1
  58. package/dist-client/component/popup/file-upload-popup.js +6 -25
  59. package/dist-client/component/popup/file-upload-popup.js.map +1 -1
  60. package/dist-client/component/popup/meta-object-selector-popup.d.ts +27 -22
  61. package/dist-client/component/popup/meta-object-selector-popup.js +101 -75
  62. package/dist-client/component/popup/meta-object-selector-popup.js.map +1 -1
  63. package/dist-client/component/popup/record-based-code-editor-popup.d.ts +11 -12
  64. package/dist-client/component/popup/record-based-code-editor-popup.js +76 -44
  65. package/dist-client/component/popup/record-based-code-editor-popup.js.map +1 -1
  66. package/dist-client/index.d.ts +1 -0
  67. package/dist-client/index.js +1 -0
  68. package/dist-client/index.js.map +1 -1
  69. package/dist-client/mixin/meta-grist-tab-mixin.d.ts +1 -5
  70. package/dist-client/mixin/meta-grist-tab-mixin.js +5 -5
  71. package/dist-client/mixin/meta-grist-tab-mixin.js.map +1 -1
  72. package/dist-client/mixin/meta-main-tab-mixin.d.ts +10 -7
  73. package/dist-client/mixin/meta-main-tab-mixin.js +4 -6
  74. package/dist-client/mixin/meta-main-tab-mixin.js.map +1 -1
  75. package/dist-client/mixin/meta-master-detail-mixin.js +8 -8
  76. package/dist-client/mixin/meta-master-detail-mixin.js.map +1 -1
  77. package/dist-client/mixin/meta-tab-detail-mixin.d.ts +1 -5
  78. package/dist-client/mixin/meta-tab-detail-mixin.js +5 -7
  79. package/dist-client/mixin/meta-tab-detail-mixin.js.map +1 -1
  80. package/dist-client/mixin/meta-tab-mixin.d.ts +1 -5
  81. package/dist-client/mixin/meta-tab-mixin.js +2 -3
  82. package/dist-client/mixin/meta-tab-mixin.js.map +1 -1
  83. package/dist-client/pages/activity/meta-activity-define-page.js +15 -11
  84. package/dist-client/pages/activity/meta-activity-define-page.js.map +1 -1
  85. package/dist-client/pages/activity/meta-activity-list-page.js +17 -23
  86. package/dist-client/pages/activity/meta-activity-list-page.js.map +1 -1
  87. package/dist-client/pages/entity/config-entity.js +17 -16
  88. package/dist-client/pages/entity/config-entity.js.map +1 -1
  89. package/dist-client/pages/entity/main-menu-selector.js +15 -23
  90. package/dist-client/pages/entity/main-menu-selector.js.map +1 -1
  91. package/dist-client/pages/history/history-copy-list-popup.d.ts +1 -1
  92. package/dist-client/pages/history/history-copy-list-popup.js +5 -2
  93. package/dist-client/pages/history/history-copy-list-popup.js.map +1 -1
  94. package/dist-client/pages/history/history-json-list-popup.d.ts +1 -1
  95. package/dist-client/pages/history/history-json-list-popup.js +4 -0
  96. package/dist-client/pages/history/history-json-list-popup.js.map +1 -1
  97. package/dist-client/pages/menu/dynamic-menu-setting-let.d.ts +9 -7
  98. package/dist-client/pages/menu/dynamic-menu-setting-let.js +35 -33
  99. package/dist-client/pages/menu/dynamic-menu-setting-let.js.map +1 -1
  100. package/dist-client/pages/menu/dynamic-menu-template.js +1 -4
  101. package/dist-client/pages/menu/dynamic-menu-template.js.map +1 -1
  102. package/dist-client/pages/menu/dynamic-menu.js +11 -10
  103. package/dist-client/pages/menu/dynamic-menu.js.map +1 -1
  104. package/dist-client/pages/menu/export-menu-popup.js +9 -11
  105. package/dist-client/pages/menu/export-menu-popup.js.map +1 -1
  106. package/dist-client/pages/meta-grist-page.js.map +1 -1
  107. package/dist-client/pages/personalize/personal-column-selector.js +17 -17
  108. package/dist-client/pages/personalize/personal-column-selector.js.map +1 -1
  109. package/dist-client/pages/terms/config-terminology.js +10 -23
  110. package/dist-client/pages/terms/config-terminology.js.map +1 -1
  111. package/dist-client/tsconfig.tsbuildinfo +1 -1
  112. package/dist-client/utils/meta-api.d.ts +11 -2
  113. package/dist-client/utils/meta-api.js +12 -1
  114. package/dist-client/utils/meta-api.js.map +1 -1
  115. package/dist-client/utils/meta-ui-util.js +163 -165
  116. package/dist-client/utils/meta-ui-util.js.map +1 -1
  117. package/dist-client/utils/rest-service-util.d.ts +120 -0
  118. package/dist-client/utils/rest-service-util.js +291 -0
  119. package/dist-client/utils/rest-service-util.js.map +1 -0
  120. package/dist-client/utils/service-util.d.ts +11 -1
  121. package/dist-client/utils/service-util.js +40 -6
  122. package/dist-client/utils/service-util.js.map +1 -1
  123. package/dist-client/utils/terms-util.d.ts +10 -27
  124. package/dist-client/utils/terms-util.js +6 -80
  125. package/dist-client/utils/terms-util.js.map +1 -1
  126. package/dist-client/viewparts/dynamic-menu-part.d.ts +17 -21
  127. package/dist-client/viewparts/dynamic-menu-part.js +77 -71
  128. package/dist-client/viewparts/dynamic-menu-part.js.map +1 -1
  129. package/dist-server/tsconfig.tsbuildinfo +1 -1
  130. package/package.json +12 -9
  131. package/translations/en.json +2 -12
  132. package/translations/ko.json +2 -12
  133. package/translations/ms.json +2 -12
  134. package/translations/zh.json +2 -12
  135. package/client/component/filter/filter-form-meta-code-select.js +0 -94
  136. package/client/component/filter/filter-form-meta-object-select.js +0 -94
  137. package/client/component/filter/filter-grist-meta-code-select.js +0 -95
  138. package/client/component/filter/filter-grist-meta-object-select.js +0 -95
  139. package/client/component/popup/meta-object-selector-popup.js +0 -314
  140. package/client/viewparts/dynamic-menu-landscape-styles.js +0 -149
  141. package/client/viewparts/dynamic-menu-landscape.js +0 -106
  142. package/client/viewparts/dynamic-menu-part.js +0 -142
  143. package/client/viewparts/dynamic-menu-portrait-styles.js +0 -130
  144. package/client/viewparts/dynamic-menu-portrait.js +0 -90
  145. package/client/viewparts/dynamic-top-menu-bar.js +0 -148
  146. package/dist-client/viewparts/dynamic-menu-landscape-styles.d.ts +0 -1
  147. package/dist-client/viewparts/dynamic-menu-landscape-styles.js +0 -149
  148. package/dist-client/viewparts/dynamic-menu-landscape-styles.js.map +0 -1
  149. package/dist-client/viewparts/dynamic-menu-landscape.d.ts +0 -21
  150. package/dist-client/viewparts/dynamic-menu-landscape.js +0 -87
  151. package/dist-client/viewparts/dynamic-menu-landscape.js.map +0 -1
  152. package/dist-client/viewparts/dynamic-menu-portrait-styles.d.ts +0 -1
  153. package/dist-client/viewparts/dynamic-menu-portrait-styles.js +0 -130
  154. package/dist-client/viewparts/dynamic-menu-portrait-styles.js.map +0 -1
  155. package/dist-client/viewparts/dynamic-menu-portrait.d.ts +0 -13
  156. package/dist-client/viewparts/dynamic-menu-portrait.js +0 -74
  157. package/dist-client/viewparts/dynamic-menu-portrait.js.map +0 -1
  158. package/dist-client/viewparts/dynamic-top-menu-bar.d.ts +0 -27
  159. package/dist-client/viewparts/dynamic-top-menu-bar.js +0 -133
  160. package/dist-client/viewparts/dynamic-top-menu-bar.js.map +0 -1
  161. package/dist-server/constants/error-code.js +0 -6
  162. package/dist-server/constants/error-code.js.map +0 -1
  163. package/server/constants/error-code.ts +0 -2
@@ -1,7 +1,9 @@
1
+ import '@material/web/icon/icon.js'
2
+
1
3
  import { css, html, LitElement } from 'lit'
2
- import { CommonGristStyles, ButtonContainerStyles } from '@operato/styles'
3
- import { TermsUtil } from '../../utils/terms-util';
4
- import { MetaApi } from "../../utils/meta-api"
4
+ import { ButtonContainerStyles } from '@operato/styles'
5
+ import { TermsUtil } from '../../utils/terms-util'
6
+ import { MetaApi } from '../../utils/meta-api'
5
7
  import '@operato/input/ox-input-code.js'
6
8
  import { closePopup } from '@operato/popup'
7
9
 
@@ -10,7 +12,6 @@ import { closePopup } from '@operato/popup'
10
12
  */
11
13
  export class CodeInputEditorPopup extends LitElement {
12
14
  static styles = [
13
- CommonGristStyles,
14
15
  ButtonContainerStyles,
15
16
  css`
16
17
  :host {
@@ -24,47 +25,36 @@ export class CodeInputEditorPopup extends LitElement {
24
25
  }
25
26
 
26
27
  ox-input-code {
27
- margin:10px;
28
+ margin: 10px;
28
29
  overflow-y: auto;
29
30
  flex: 1;
30
31
  }
31
-
32
- .button-container {
33
- display: flex;
34
- margin-left: auto;
35
- }
36
32
  `
37
33
  ]
38
34
 
39
- async connectedCallback(){
40
-
41
- if(typeof this.value === 'object'){
42
- this.codeVlaue = JSON.stringify(this.value, 0, 2);
35
+ async connectedCallback() {
36
+ if (typeof this.value === 'object') {
37
+ this.codeVlaue = JSON.stringify(this.value, 0, 2)
43
38
  } else {
44
- this.codeVlaue = this.value;
45
-
39
+ this.codeVlaue = this.value
46
40
  }
47
41
 
48
- await super.connectedCallback();
42
+ await super.connectedCallback()
49
43
  }
50
44
 
51
- async firstUpdated(){
52
- await super.firstUpdated();
45
+ async firstUpdated() {
46
+ await super.firstUpdated()
53
47
  }
54
48
 
55
- render(){
49
+ render() {
56
50
  return html`
57
51
  <ox-input-code mode="javascript" value=${this.codeVlaue} tab-size="2" tab-as-space="true"></ox-input-code>
58
- <div id="button-container" class="button-container">
59
- <mwc-button raised label="${TermsUtil.tButton('empty')}" style="margin-left:7px;margin-top:7px;"
60
- @click=${this.clickEmpty.bind(this)}>
61
- </mwc-button>
62
- <mwc-button raised label="${TermsUtil.tButton('cancel')}" style="margin-left:7px;margin-top:7px;"
63
- @click=${this.clickCancel.bind(this)}>
64
- </mwc-button>
65
- <mwc-button raised label="${TermsUtil.tButton('confirm')}" style="margin-left:7px;margin-top:7px;"
66
- @click=${this.clickConfirm.bind(this)}>
67
- </mwc-button>
52
+
53
+ <div class="button-container" style="margin-left:unset;">
54
+ <button @click=${this.clickEmpty.bind(this)}><md-icon>check_box_outline_blank</md-icon>${TermsUtil.tButton('empty')}</button>
55
+ <div filler></div>
56
+ <button @click=${this.clickCancel.bind(this)}><md-icon>cancel</md-icon>${TermsUtil.tButton('cancel')}</button>
57
+ <button @click=${this.clickConfirm.bind(this)}><md-icon>done</md-icon>${TermsUtil.tButton('confirm')}</button>
68
58
  </div>
69
59
  `
70
60
  }
@@ -76,42 +66,42 @@ export class CodeInputEditorPopup extends LitElement {
76
66
  /**
77
67
  * @description 비우기
78
68
  ***************************
79
- * @returns
69
+ * @returns
80
70
  */
81
- async clickEmpty(e){
71
+ async clickEmpty(e) {
82
72
  this.confirmCallback && this.confirmCallback(null)
83
73
  closePopup(this)
84
74
  }
85
75
  /**
86
- * @description 취소
76
+ * @description 취소
87
77
  ***************************
88
- * @returns
78
+ * @returns
89
79
  */
90
- async clickCancel(e){
80
+ async clickCancel(e) {
91
81
  closePopup(this)
92
82
  }
93
83
  /**
94
- * @description 확인
84
+ * @description 확인
95
85
  ***************************
96
- * @returns
86
+ * @returns
97
87
  */
98
- async clickConfirm(e){
99
- if(this.codeVlaue === this.codeEditor.value){
100
- MetaApi.showToast('info', TermsUtil.tText('NOTHING_CHANGED'));
101
- return;
88
+ async clickConfirm(e) {
89
+ if (this.codeVlaue === this.codeEditor.value) {
90
+ MetaApi.showToast('info', TermsUtil.tText('NOTHING_CHANGED'))
91
+ return
102
92
  }
103
- this.changedValue(this.codeEditor.value);
93
+ this.changedValue(this.codeEditor.value)
104
94
  }
105
95
 
106
96
  /**
107
- * @description 확정
97
+ * @description 확정
108
98
  ***************************
109
- * @param {*} record
99
+ * @param {*} record
110
100
  */
111
- async changedValue(value){
101
+ async changedValue(value) {
112
102
  this.confirmCallback && this.confirmCallback(value)
113
103
  closePopup(this)
114
104
  }
115
105
  }
116
-
117
- customElements.define('code-input-editor-popup', CodeInputEditorPopup)
106
+
107
+ customElements.define('code-input-editor-popup', CodeInputEditorPopup)
@@ -1,19 +1,18 @@
1
+ import '@material/web/icon/icon.js'
2
+
1
3
  import { client, gqlContext } from '@things-factory/shell'
2
4
  import { css, html, LitElement } from 'lit'
3
5
  import { SingleColumnFormStyles } from '@things-factory/form-ui'
4
- import { CommonGristStyles, ButtonContainerStyles } from '@operato/styles'
6
+ import { ButtonContainerStyles } from '@operato/styles'
5
7
  import gql from 'graphql-tag'
6
- import { TermsUtil } from '../../utils/terms-util';
7
- import { ValueUtil } from '../../utils/value-util'
8
+ import { TermsUtil } from '../../utils/terms-util'
8
9
  import { ServiceUtil } from '../../utils/service-util'
9
- import { MetaApi } from "../../utils/meta-api"
10
- import { MetaUiUtil } from "../../utils/meta-ui-util"
11
- import { isMobileDevice } from '@operato/utils'
12
- import { closePopup } from '@operato/popup'
10
+ import { MetaApi } from '../../utils/meta-api'
13
11
 
14
12
  class FileUploadPopup extends LitElement {
15
13
  static get styles() {
16
14
  return [
15
+ ButtonContainerStyles,
17
16
  SingleColumnFormStyles,
18
17
  css`
19
18
  :host {
@@ -23,27 +22,10 @@ class FileUploadPopup extends LitElement {
23
22
  overflow-x: overlay;
24
23
  background-color: var(--main-section-background-color);
25
24
  }
25
+
26
26
  .input-container {
27
27
  display: flex;
28
28
  }
29
- .button-container {
30
- padding: 10px 0 12px 0;
31
- text-align: center;
32
- }
33
- .button-container > button {
34
- background-color: var(--button-background-color);
35
- border: var(--button-border);
36
- border-radius: var(--button-border-radius);
37
- margin: var(--button-margin);
38
- padding: var(--button-padding);
39
- color: var(--button-color);
40
- font: var(--button-font);
41
- text-transform: var(--button-text-transform);
42
- }
43
- .button-container > button:hover,
44
- .button-container > button:active {
45
- background-color: var(--button-background-focus-color);
46
- }
47
29
  `
48
30
  ]
49
31
  }
@@ -84,7 +66,7 @@ class FileUploadPopup extends LitElement {
84
66
  </div>
85
67
 
86
68
  <div class="button-container">
87
- <mwc-button raised @click="${this._createAttachment}" label="${TermsUtil.tButton('create')}"></mwc-button>
69
+ <button @click=${this._createAttachment}><md-icon>attach_file_add</md-icon>${TermsUtil.tButton('create')}</button>
88
70
  </div>
89
71
  `
90
72
  }
@@ -0,0 +1,328 @@
1
+ import '@material/web/icon/icon.js'
2
+
3
+ import { css, html, LitElement, PropertyValues } from 'lit'
4
+ import { customElement, property, query } from 'lit/decorators.js'
5
+ import { closePopup } from '@operato/popup'
6
+ import { isMobileDevice, adjustFilters } from '@operato/utils'
7
+ import { CommonGristStyles, ButtonContainerStyles, CommonHeaderStyles } from '@operato/styles'
8
+ import { ColumnConfig, DataGrist, FetchOption, FetchResult, GristRecord, QueryFilter } from '@operato/data-grist'
9
+
10
+ import { TermsUtil } from '../../utils/terms-util'
11
+ import { ValueUtil } from '../../utils/value-util'
12
+ import { ServiceUtil } from '../../utils/service-util'
13
+ import { MetaApi } from '../../utils/meta-api'
14
+ import { MetaUiUtil } from '../../utils/meta-ui-util'
15
+
16
+ @customElement('meta-object-selector-popup')
17
+ export class MetaObjectSelectorPopup extends LitElement {
18
+ static styles = [
19
+ CommonGristStyles,
20
+ CommonHeaderStyles,
21
+ ButtonContainerStyles,
22
+ css`
23
+ :host {
24
+ display: flex;
25
+ flex-direction: column;
26
+
27
+ background-color: #fff;
28
+
29
+ width: var(--overlay-center-normal-width, 50%);
30
+ height: var(--overlay-center-normal-height, 50%);
31
+ }
32
+
33
+ ox-grist {
34
+ flex: 1;
35
+ }
36
+
37
+ ox-filters-form {
38
+ flex: 1;
39
+ }
40
+ `
41
+ ]
42
+
43
+ @property({ type: String }) value?: string
44
+ @property({ type: Object }) gridConfig: any
45
+ @property({ type: Object }) basicArgs?: FetchOption
46
+ @property({ type: Object }) options!: FetchOption & {
47
+ menu_template?: any
48
+ filterFields?: any[]
49
+ codeField?: string
50
+ nameField?: string
51
+ dispField?: string
52
+ queryName: string
53
+ select?: (ColumnConfig & {
54
+ options: any
55
+ select_opt: any
56
+ object_opt: any
57
+ })[]
58
+ }
59
+ @property({ type: Object }) confirmCallback?: (record?: Partial<GristRecord>) => void
60
+ @property({ type: Array }) selectedRecords: GristRecord[] = []
61
+
62
+ @query('ox-grist') private grist!: DataGrist
63
+
64
+ private foundationFilters: QueryFilter[] = []
65
+ private record: any
66
+
67
+ async connectedCallback() {
68
+ const { select, sorters, filters, codeField, nameField, dispField, filterFields: optionFilterFields, menu_template } = this.options || {}
69
+
70
+ // 숨김 검색 조건
71
+ this.foundationFilters = filters ? filters : this.basicArgs && this.basicArgs.filters ? this.basicArgs.filters : []
72
+
73
+ this.foundationFilters = this.foundationFilters.map(x => {
74
+ let { name, operator, value } = x
75
+
76
+ if (value.startsWith('::')) {
77
+ value = ValueUtil.getParams(this.record, ...value.substring(2).split('.'))
78
+ }
79
+
80
+ return {
81
+ name,
82
+ operator,
83
+ value
84
+ }
85
+ })
86
+
87
+ // 기본 정렬
88
+ let sortFields = sorters ? sorters : this.basicArgs && this.basicArgs.sorters ? this.basicArgs.sorters : []
89
+
90
+ // 기본 검색 조건
91
+ let filterFields = optionFilterFields ? optionFilterFields : menu_template?.search && menu_template?.search.length > 0 ? menu_template.search : []
92
+
93
+ // 그리드 컬럼
94
+ let gridColumns = select
95
+
96
+ // 기본 검색 조건이 없으면 코드 (code-selector), 또는 이름 (object-selector)
97
+ if (!filterFields || filterFields.length == 0) {
98
+ let defaultFilter
99
+
100
+ if (codeField) defaultFilter = codeField
101
+ if (nameField) defaultFilter = nameField
102
+
103
+ if (defaultFilter) {
104
+ filterFields.push({
105
+ name: defaultFilter,
106
+ operator: 'eq'
107
+ })
108
+ }
109
+ }
110
+
111
+ let selectFields = [...MetaApi.getGristGuttersConfig(true, false)]
112
+
113
+ if (gridColumns && gridColumns.length > 0) {
114
+ for (let idx = 0; idx < gridColumns.length; idx++) {
115
+ let {
116
+ type = 'string',
117
+ name,
118
+ hidden = false,
119
+ record = { align: 'left' },
120
+ header = undefined,
121
+ sortable = false,
122
+ width = 135,
123
+ options = undefined,
124
+ select_opt = undefined,
125
+ object_opt = undefined
126
+ } = gridColumns[idx]
127
+
128
+ if (select_opt) options = select_opt
129
+ if (object_opt) options = object_opt
130
+
131
+ if (['resource-object', 'object'].includes(type)) {
132
+ type = 'meta-object-selector'
133
+ } else if (['resource-code-selector'].includes(type)) {
134
+ type = 'meta-code-selector'
135
+ }
136
+
137
+ if (name == 'id') {
138
+ selectFields.push({
139
+ type: 'string',
140
+ name: name,
141
+ hidden: true
142
+ })
143
+ } else {
144
+ if (type == 'boolean-all') {
145
+ type = 'boolean'
146
+ }
147
+
148
+ let columnConfig = MetaApi.getGristColumnConfig2(
149
+ type,
150
+ name,
151
+ header ? (header as unknown as string) : name,
152
+ record.align ? record.align : 'left',
153
+ false,
154
+ sortable,
155
+ Number(width)
156
+ )
157
+
158
+ if (type.startsWith('meta-') && object_opt && object_opt.menu) {
159
+ options = await MetaUiUtil.getGristMetaObjectOptions(type, options)
160
+ }
161
+
162
+ if (type === 'select') {
163
+ if (Array.isArray(options)) {
164
+ columnConfig.record.options = options
165
+ } else {
166
+ if (options.type === 'code') {
167
+ // 공통 코드
168
+ columnConfig.record.options = await ServiceUtil.getCodeSelectorData(options.values ? options.values : options.name)
169
+ } else if (options.type === 'scenario') {
170
+ // 시나리오
171
+ columnConfig.record.options = await ServiceUtil.getCodeByScenario(options.name, options.args)
172
+ } else if (options.type === 'entity') {
173
+ // 엔티티
174
+ columnConfig.record.options = await ServiceUtil.getCodeByEntity(options.args)
175
+ }
176
+ }
177
+ } else if (type === 'meta-object-selector') {
178
+ // object-option
179
+ columnConfig.record.options = { ...options }
180
+ } else if (type == 'meta-code-selector') {
181
+ if (options.dispField) {
182
+ options.codes = await ServiceUtil.getCodeByEntity(options)
183
+ }
184
+
185
+ columnConfig.record.options = { ...options }
186
+ }
187
+
188
+ columnConfig.hidden = hidden
189
+
190
+ selectFields.push(columnConfig)
191
+ }
192
+ }
193
+ } else {
194
+ selectFields.push(MetaApi.getGristColumnConfig2('string', codeField!, codeField!, 'left', false, true, 180))
195
+
196
+ if (dispField) {
197
+ selectFields.push(MetaApi.getGristColumnConfig2('string', dispField, dispField, 'left', false, true, 300))
198
+ }
199
+ }
200
+
201
+ selectFields.forEach(x => {
202
+ let filters = filterFields.filter(y => (typeof y === 'string' ? x.name == y : x.name == y.name))
203
+
204
+ if (filters && filters.length > 0) {
205
+ x.filter = typeof filters[0] === 'string' ? 'search' : filters[0]
206
+ }
207
+ })
208
+
209
+ let gridConfig = {
210
+ rows: MetaApi.getGristSelectableConfig(false),
211
+ pagination: MetaApi.getGristPagination100Config(),
212
+ columns: selectFields,
213
+ sorters: [...sortFields]
214
+ }
215
+
216
+ gridConfig.rows.handlers = {
217
+ click: 'select-row-toggle',
218
+ dblclick: (columns, data, column, record, rowIndex, field) => {
219
+ this.selectRecord(record)
220
+ }
221
+ }
222
+
223
+ gridConfig.rows.appendable = false
224
+
225
+ this.gridConfig = gridConfig
226
+
227
+ await super.connectedCallback()
228
+ }
229
+
230
+ async firstUpdated(changes: PropertyValues<this>) {
231
+ await super.firstUpdated(changes)
232
+ }
233
+
234
+ render() {
235
+ return html`
236
+ <ox-grist id="ox-grist" .config=${this.gridConfig} .mode=${isMobileDevice() ? 'LIST' : 'GRID'} auto-fetch .fetchHandler=${this.fetchHandler.bind(this)}>
237
+ <div slot="headroom" class="header">
238
+ <div class="filters">
239
+ <ox-filters-form></ox-filters-form>
240
+ </div>
241
+ </div>
242
+ </ox-grist>
243
+
244
+ <div class="button-container" style="margin-left:unset;">
245
+ <button @click=${this.clickEmpty.bind(this)}><md-icon>check_box_outline_blank</md-icon>${TermsUtil.tButton('empty')}</button>
246
+ <div filler></div>
247
+ <button @click=${this.clickCancel.bind(this)}><md-icon>cancel</md-icon>${TermsUtil.tButton('cancel')}</button>
248
+ <button @click=${this.clickSelect.bind(this)}><md-icon>done</md-icon>${TermsUtil.tButton('select')}</button>
249
+ </div>
250
+ `
251
+ }
252
+
253
+ /**
254
+ * @description 컬럼 조회
255
+ ***************************
256
+ * @returns
257
+ */
258
+ async fetchHandler({ page = 0, limit = 0, sorters = [], filters = [] }: FetchOption): Promise<FetchResult> {
259
+ const { menu_template, queryName } = this.options || {}
260
+
261
+ // let resFilter = [...this.foundationFilters]
262
+
263
+ // filters.forEach((x: any) => {
264
+ // let dupFilter = resFilter.filter(y => x.name == y.name)
265
+ // if (dupFilter && dupFilter.length > 0) {
266
+ // delete resFilter[x.name]
267
+ // }
268
+
269
+ // resFilter.push(x)
270
+ // })
271
+
272
+ let resFilter = adjustFilters([...this.foundationFilters], filters)
273
+
274
+ let queryAfterSetFields = ValueUtil.getParams(menu_template ? menu_template.gql || {} : {}, 'query', 'after_set_fields')
275
+ let selectSkipFields = Object.keys(queryAfterSetFields || {})
276
+
277
+ // 조회 컬럼 추출 후 조회
278
+ let selectFields = MetaApi.getSelectColumns(this.gridConfig.columns.filter(x => !selectSkipFields.includes(x.name)))
279
+
280
+ // 조회 실행
281
+ let result = await MetaApi.searchByPagination(queryName, resFilter, sorters, page, limit, selectFields)
282
+
283
+ return result
284
+ }
285
+
286
+ /**
287
+ * @description 비우기
288
+ ***************************
289
+ * @returns
290
+ */
291
+ async clickEmpty(e) {
292
+ this.confirmCallback && this.confirmCallback()
293
+ closePopup(this)
294
+ }
295
+ /**
296
+ * @description 취소
297
+ ***************************
298
+ * @returns
299
+ */
300
+ async clickCancel(e) {
301
+ closePopup(this)
302
+ }
303
+ /**
304
+ * @description 선택
305
+ ***************************
306
+ * @returns
307
+ */
308
+ async clickSelect(e) {
309
+ let selected = this.grist.selected
310
+
311
+ if (!selected || selected.length == 0) {
312
+ MetaApi.showToast('info', TermsUtil.tText('NOTHING_SELECTED'))
313
+ return
314
+ }
315
+
316
+ this.selectRecord(selected[0])
317
+ }
318
+
319
+ /**
320
+ * @description 확정
321
+ ***************************
322
+ * @param {*} record
323
+ */
324
+ async selectRecord(record) {
325
+ this.confirmCallback && this.confirmCallback(record)
326
+ closePopup(this)
327
+ }
328
+ }