@things-factory/personalization 7.0.1-alpha.78 → 7.0.1-alpha.80

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/personalization",
3
- "version": "7.0.1-alpha.78",
3
+ "version": "7.0.1-alpha.80",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -35,5 +35,5 @@
35
35
  "@things-factory/auth-base": "^7.0.1-alpha.78",
36
36
  "@things-factory/shell": "^7.0.1-alpha.71"
37
37
  },
38
- "gitHead": "6423c664e70e7877c362b4aebb7f169e4a2ad22d"
38
+ "gitHead": "1893bab2cc88910b3a3b080f450a7acf879b3011"
39
39
  }
@@ -1,240 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
-
3
- import gql from 'graphql-tag'
4
- import { css, html, LitElement } from 'lit'
5
- import { customElement, property, query } from 'lit/decorators.js'
6
-
7
- import { i18next, localize } from '@operato/i18n'
8
- import { client } from '@operato/graphql'
9
- import { DataGrist } from '@operato/data-grist'
10
- import { ScrollbarStyles, CommonGristStyles, ButtonContainerStyles } from '@operato/styles'
11
-
12
- @customElement('grid-preference-editor')
13
- export class GridPreferenceEditor extends localize(i18next)(LitElement) {
14
- static styles = [
15
- ScrollbarStyles,
16
- CommonGristStyles,
17
- ButtonContainerStyles,
18
- css`
19
- :host {
20
- display: flex;
21
- flex-direction: column;
22
- overflow-x: auto;
23
- }
24
-
25
- .container {
26
- flex: 1;
27
- display: grid;
28
- overflow: hidden;
29
- }
30
-
31
- .container_detail {
32
- background-color: var(--main-section-background-color);
33
- display: flex;
34
- flex-direction: column;
35
- flex: 1;
36
- overflow-y: auto;
37
- }
38
-
39
- h2 {
40
- padding: var(--subtitle-padding);
41
- font: var(--subtitle-font);
42
- color: var(--subtitle-text-color);
43
- border-bottom: var(--subtitle-border-bottom);
44
- }
45
-
46
- .container_detail h2 {
47
- margin: var(--grist-title-margin);
48
- border: var(--grist-title-border);
49
- font: var(--grist-title-font);
50
- color: var(--secondary-color);
51
- }
52
-
53
- .container_detail h2 md-icon {
54
- --md-icon-size: var(--grist-title-icon-size);
55
- vertical-align: middle;
56
- margin: var(--grist-title-icon-margin);
57
- color: var(--grist-title-icon-color);
58
- }
59
-
60
- h2 {
61
- padding-bottom: var(--grist-title-with-grid-padding);
62
- }
63
-
64
- ox-grist {
65
- overflow-y: auto;
66
- flex: 1;
67
- }
68
-
69
- ox-filters-form {
70
- flex: 1;
71
- }
72
- `
73
- ]
74
-
75
- @property({ type: Object }) target!: DataGrist
76
- @property({ type: String }) page!: string
77
-
78
- @query('ox-grist') private grist!: DataGrist
79
-
80
- private gridConfig: any
81
-
82
- async connectedCallback() {
83
- // 메뉴 그룹 그리드 설정
84
- this.gridConfig = {
85
- rows: { selectable: false, appendable: false },
86
- pagination: { infinite: true },
87
- list: {
88
- fields: ['page', 'element'],
89
- details: ['active', 'updatedAt']
90
- },
91
- columns: [
92
- { type: 'gutter', gutterName: 'sequence' },
93
- {
94
- type: 'string',
95
- name: 'name',
96
- header: i18next.t('field.name'),
97
- record: {
98
- align: 'left'
99
- },
100
- hidden: true,
101
- filter: 'search',
102
- sortable: true,
103
- width: 150
104
- },
105
- {
106
- type: 'string',
107
- name: 'header',
108
- header: i18next.t('field.name'),
109
- record: {
110
- align: 'left'
111
- },
112
- filter: 'search',
113
- width: 200
114
- },
115
- {
116
- type: 'checkbox',
117
- name: 'hidden',
118
- label: true,
119
- header: i18next.t('field.hidden'),
120
- record: {
121
- align: 'center',
122
- editable: true
123
- },
124
- filter: true,
125
- sortable: true,
126
- width: 60
127
- }
128
- ]
129
- }
130
-
131
- await super.connectedCallback()
132
- }
133
-
134
- /**
135
- * @description 라이프 사이클
136
- ***************************
137
- */
138
- render() {
139
- return html` <div id="container" class="container">
140
- <div class="container_detail">
141
- <ox-grist mode="GRID" .config=${this.gridConfig} .fetchHandler=${this.fetchColumns.bind(this)} auto-fetch>
142
- </ox-grist>
143
-
144
- <div class="button-container" style="margin-left:unset">
145
- <button @click=${this.reset.bind(this)}><md-icon>restart_alt</md-icon>${i18next.t('button.reset')}</button>
146
- <div filler></div>
147
- <button @click=${this.save.bind(this)}><md-icon>save</md-icon>${i18next.t('button.save')}</button>
148
- <button danger @click=${this.delete.bind(this)}>
149
- <md-icon>delete</md-icon>${i18next.t('button.delete')}
150
- </button>
151
- </div>
152
- </div>
153
- </div>`
154
- }
155
-
156
- async fetchColumns() {
157
- const columns = this.target.config.columns.filter(
158
- column => column.type != 'gutter' && column.name != 'id' && !column.unusable
159
- )
160
-
161
- return { total: 0, records: columns }
162
- }
163
-
164
- async delete(e: MouseEvent) {
165
- const element = this.target.id
166
-
167
- const response = await client.query({
168
- query: gql`
169
- mutation ($page: String!, $element: String!) {
170
- deleteMyPagePreference(page: $page, element: $element) {
171
- id
172
- }
173
- }
174
- `,
175
- variables: {
176
- page: this.page,
177
- element
178
- }
179
- })
180
-
181
- if (!response.errors) {
182
- this.showToast(i18next.t('text.success to delete'))
183
- history.back()
184
- }
185
- }
186
-
187
- async reset(e: MouseEvent) {
188
- await this.grist.fetch()
189
- }
190
-
191
- async save(e: MouseEvent) {
192
- const element = this.target.id
193
-
194
- const dirties = this.grist.dirtyRecords
195
- const targetColumns = this.target.config.columns
196
-
197
- dirties.forEach(record => {
198
- const { name, hidden } = record
199
- const targetColumn = targetColumns.find(column => column.name == name)
200
-
201
- if (targetColumn) {
202
- targetColumn.hidden = hidden
203
- }
204
- })
205
-
206
- await this.target.requestUpdate()
207
-
208
- const preference = this.grist.data.records.map(record => {
209
- const { name, hidden } = record
210
-
211
- return {
212
- name,
213
- hidden
214
- }
215
- })
216
-
217
- const response = await client.query({
218
- query: gql`
219
- mutation ($page: String!, $element: String!, $preference: Object!) {
220
- updateMyPagePreference(page: $page, element: $element, preference: $preference) {
221
- id
222
- }
223
- }
224
- `,
225
- variables: {
226
- page: this.page,
227
- element,
228
- preference
229
- }
230
- })
231
-
232
- if (!response.errors) {
233
- this.showToast(i18next.t('text.success to save'))
234
- }
235
- }
236
-
237
- showToast(message) {
238
- document.dispatchEvent(new CustomEvent('notify', { detail: { message } }))
239
- }
240
- }
@@ -1,37 +0,0 @@
1
- import { PageView } from '@operato/shell'
2
- import { getPathInfo } from '@operato/utils'
3
- import { PagePreferenceProviderImpl } from './page-preference-provider-impl.js'
4
-
5
- type Constructor<T> = new (...args: any[]) => T
6
- interface CustomElement {}
7
-
8
- export const p13n = <T extends Constructor<CustomElement>>(base: T) =>
9
- class extends base {
10
- preferenceProviders?: { [key: string]: PagePreferenceProviderImpl }
11
-
12
- getPagePreferenceProvider(elementId: string) {
13
- if (!elementId) {
14
- return
15
- }
16
-
17
- if (!this.preferenceProviders) {
18
- this.preferenceProviders = {}
19
- }
20
-
21
- if (!this.preferenceProviders[elementId]) {
22
- if (this instanceof PageView) {
23
- this.preferenceProviders[elementId] = new PagePreferenceProviderImpl(
24
- (this as PageView).lifecycle.page!,
25
- elementId
26
- )
27
- } else {
28
- const { pathname } = window.location
29
- const { path } = getPathInfo(pathname)
30
- const page = path?.split('/')[1] || '/'
31
- this.preferenceProviders[elementId] = new PagePreferenceProviderImpl(page, elementId)
32
- }
33
- }
34
-
35
- return this.preferenceProviders[elementId]
36
- }
37
- }
@@ -1,87 +0,0 @@
1
- import gql from 'graphql-tag'
2
- import { client } from '@operato/graphql'
3
- import { i18next } from '@operato/i18n'
4
-
5
- import { PagePreferenceProvider } from './types'
6
-
7
- export class PagePreferenceProviderImpl implements PagePreferenceProvider {
8
- public page?: string
9
- public element?: string
10
- public preference?: any
11
-
12
- constructor(page: string, element: string, preference?: any) {
13
- this.page = page
14
- this.element = element
15
- this.preference = preference
16
- }
17
-
18
- async load(): Promise<any> {
19
- const response = await client.query({
20
- query: gql`
21
- query ($page: String!, $element: String!) {
22
- myPagePreference(page: $page, element: $element) {
23
- preference
24
- }
25
- }
26
- `,
27
- variables: {
28
- page: this.page,
29
- element: this.element
30
- }
31
- })
32
-
33
- if (!response.errors) {
34
- this.preference = response.data.myPagePreference?.preference || {}
35
- return this.preference
36
- }
37
- }
38
-
39
- async save(preference: any): Promise<any> {
40
- const response = await client.mutate({
41
- mutation: gql`
42
- mutation ($page: String!, $element: String!, $preference: Object!) {
43
- updateMyPagePreference(page: $page, element: $element, preference: $preference) {
44
- preference
45
- }
46
- }
47
- `,
48
- variables: {
49
- page: this.page,
50
- element: this.element,
51
- preference
52
- }
53
- })
54
-
55
- if (!response.errors) {
56
- document.dispatchEvent(
57
- new CustomEvent('notify', {
58
- detail: { message: i18next.t('text.updated_successfully'), option: { timer: 3000 } }
59
- })
60
- )
61
-
62
- return response.data.updateMyPagePreference.preference
63
- }
64
- }
65
-
66
- async reset(): Promise<void> {
67
- const response = await client.mutate({
68
- mutation: gql`
69
- mutation ($page: String!, $element: String!) {
70
- deleteMyPagePreference(page: $page, element: $element)
71
- }
72
- `,
73
- variables: {
74
- page: this.page,
75
- element: this.element
76
- }
77
- })
78
-
79
- if (!response.errors) {
80
- document.dispatchEvent(
81
- new CustomEvent('notify', {
82
- detail: { message: i18next.t('text.updated_successfully'), option: { timer: 3000 } }
83
- })
84
- )
85
- }
86
- }
87
- }
@@ -1,26 +0,0 @@
1
- import '@material/web/icon/icon.js';
2
- import { LitElement } from 'lit';
3
- import { DataGrist } from '@operato/data-grist';
4
- declare const GridPreferenceEditor_base: (new (...args: any[]) => LitElement) & typeof LitElement;
5
- export declare class GridPreferenceEditor extends GridPreferenceEditor_base {
6
- static styles: import("lit").CSSResult[];
7
- target: DataGrist;
8
- page: string;
9
- private grist;
10
- private gridConfig;
11
- connectedCallback(): Promise<void>;
12
- /**
13
- * @description 라이프 사이클
14
- ***************************
15
- */
16
- render(): import("lit").TemplateResult<1>;
17
- fetchColumns(): Promise<{
18
- total: number;
19
- records: any;
20
- }>;
21
- delete(e: MouseEvent): Promise<void>;
22
- reset(e: MouseEvent): Promise<void>;
23
- save(e: MouseEvent): Promise<void>;
24
- showToast(message: any): void;
25
- }
26
- export {};
@@ -1,226 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import '@material/web/icon/icon.js';
3
- import gql from 'graphql-tag';
4
- import { css, html, LitElement } from 'lit';
5
- import { customElement, property, query } from 'lit/decorators.js';
6
- import { i18next, localize } from '@operato/i18n';
7
- import { client } from '@operato/graphql';
8
- import { DataGrist } from '@operato/data-grist';
9
- import { ScrollbarStyles, CommonGristStyles, ButtonContainerStyles } from '@operato/styles';
10
- let GridPreferenceEditor = class GridPreferenceEditor extends localize(i18next)(LitElement) {
11
- async connectedCallback() {
12
- // 메뉴 그룹 그리드 설정
13
- this.gridConfig = {
14
- rows: { selectable: false, appendable: false },
15
- pagination: { infinite: true },
16
- list: {
17
- fields: ['page', 'element'],
18
- details: ['active', 'updatedAt']
19
- },
20
- columns: [
21
- { type: 'gutter', gutterName: 'sequence' },
22
- {
23
- type: 'string',
24
- name: 'name',
25
- header: i18next.t('field.name'),
26
- record: {
27
- align: 'left'
28
- },
29
- hidden: true,
30
- filter: 'search',
31
- sortable: true,
32
- width: 150
33
- },
34
- {
35
- type: 'string',
36
- name: 'header',
37
- header: i18next.t('field.name'),
38
- record: {
39
- align: 'left'
40
- },
41
- filter: 'search',
42
- width: 200
43
- },
44
- {
45
- type: 'checkbox',
46
- name: 'hidden',
47
- label: true,
48
- header: i18next.t('field.hidden'),
49
- record: {
50
- align: 'center',
51
- editable: true
52
- },
53
- filter: true,
54
- sortable: true,
55
- width: 60
56
- }
57
- ]
58
- };
59
- await super.connectedCallback();
60
- }
61
- /**
62
- * @description 라이프 사이클
63
- ***************************
64
- */
65
- render() {
66
- return html ` <div id="container" class="container">
67
- <div class="container_detail">
68
- <ox-grist mode="GRID" .config=${this.gridConfig} .fetchHandler=${this.fetchColumns.bind(this)} auto-fetch>
69
- </ox-grist>
70
-
71
- <div class="button-container" style="margin-left:unset">
72
- <button @click=${this.reset.bind(this)}><md-icon>restart_alt</md-icon>${i18next.t('button.reset')}</button>
73
- <div filler></div>
74
- <button @click=${this.save.bind(this)}><md-icon>save</md-icon>${i18next.t('button.save')}</button>
75
- <button danger @click=${this.delete.bind(this)}>
76
- <md-icon>delete</md-icon>${i18next.t('button.delete')}
77
- </button>
78
- </div>
79
- </div>
80
- </div>`;
81
- }
82
- async fetchColumns() {
83
- const columns = this.target.config.columns.filter(column => column.type != 'gutter' && column.name != 'id' && !column.unusable);
84
- return { total: 0, records: columns };
85
- }
86
- async delete(e) {
87
- const element = this.target.id;
88
- const response = await client.query({
89
- query: gql `
90
- mutation ($page: String!, $element: String!) {
91
- deleteMyPagePreference(page: $page, element: $element) {
92
- id
93
- }
94
- }
95
- `,
96
- variables: {
97
- page: this.page,
98
- element
99
- }
100
- });
101
- if (!response.errors) {
102
- this.showToast(i18next.t('text.success to delete'));
103
- history.back();
104
- }
105
- }
106
- async reset(e) {
107
- await this.grist.fetch();
108
- }
109
- async save(e) {
110
- const element = this.target.id;
111
- const dirties = this.grist.dirtyRecords;
112
- const targetColumns = this.target.config.columns;
113
- dirties.forEach(record => {
114
- const { name, hidden } = record;
115
- const targetColumn = targetColumns.find(column => column.name == name);
116
- if (targetColumn) {
117
- targetColumn.hidden = hidden;
118
- }
119
- });
120
- await this.target.requestUpdate();
121
- const preference = this.grist.data.records.map(record => {
122
- const { name, hidden } = record;
123
- return {
124
- name,
125
- hidden
126
- };
127
- });
128
- const response = await client.query({
129
- query: gql `
130
- mutation ($page: String!, $element: String!, $preference: Object!) {
131
- updateMyPagePreference(page: $page, element: $element, preference: $preference) {
132
- id
133
- }
134
- }
135
- `,
136
- variables: {
137
- page: this.page,
138
- element,
139
- preference
140
- }
141
- });
142
- if (!response.errors) {
143
- this.showToast(i18next.t('text.success to save'));
144
- }
145
- }
146
- showToast(message) {
147
- document.dispatchEvent(new CustomEvent('notify', { detail: { message } }));
148
- }
149
- };
150
- GridPreferenceEditor.styles = [
151
- ScrollbarStyles,
152
- CommonGristStyles,
153
- ButtonContainerStyles,
154
- css `
155
- :host {
156
- display: flex;
157
- flex-direction: column;
158
- overflow-x: auto;
159
- }
160
-
161
- .container {
162
- flex: 1;
163
- display: grid;
164
- overflow: hidden;
165
- }
166
-
167
- .container_detail {
168
- background-color: var(--main-section-background-color);
169
- display: flex;
170
- flex-direction: column;
171
- flex: 1;
172
- overflow-y: auto;
173
- }
174
-
175
- h2 {
176
- padding: var(--subtitle-padding);
177
- font: var(--subtitle-font);
178
- color: var(--subtitle-text-color);
179
- border-bottom: var(--subtitle-border-bottom);
180
- }
181
-
182
- .container_detail h2 {
183
- margin: var(--grist-title-margin);
184
- border: var(--grist-title-border);
185
- font: var(--grist-title-font);
186
- color: var(--secondary-color);
187
- }
188
-
189
- .container_detail h2 md-icon {
190
- --md-icon-size: var(--grist-title-icon-size);
191
- vertical-align: middle;
192
- margin: var(--grist-title-icon-margin);
193
- color: var(--grist-title-icon-color);
194
- }
195
-
196
- h2 {
197
- padding-bottom: var(--grist-title-with-grid-padding);
198
- }
199
-
200
- ox-grist {
201
- overflow-y: auto;
202
- flex: 1;
203
- }
204
-
205
- ox-filters-form {
206
- flex: 1;
207
- }
208
- `
209
- ];
210
- __decorate([
211
- property({ type: Object }),
212
- __metadata("design:type", DataGrist)
213
- ], GridPreferenceEditor.prototype, "target", void 0);
214
- __decorate([
215
- property({ type: String }),
216
- __metadata("design:type", String)
217
- ], GridPreferenceEditor.prototype, "page", void 0);
218
- __decorate([
219
- query('ox-grist'),
220
- __metadata("design:type", DataGrist)
221
- ], GridPreferenceEditor.prototype, "grist", void 0);
222
- GridPreferenceEditor = __decorate([
223
- customElement('grid-preference-editor')
224
- ], GridPreferenceEditor);
225
- export { GridPreferenceEditor };
226
- //# sourceMappingURL=grid-preference-editor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grid-preference-editor.js","sourceRoot":"","sources":["../client/grid-preference-editor.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AAEnC,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAGpF,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;IAqErE,KAAK,CAAC,iBAAiB;QACrB,eAAe;QACf,IAAI,CAAC,UAAU,GAAG;YAChB,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAC9C,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9B,IAAI,EAAE;gBACJ,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;gBAC3B,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;aACjC;YACD,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE;gBAC1C;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC/B,MAAM,EAAE;wBACN,KAAK,EAAE,MAAM;qBACd;oBACD,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,QAAQ;oBAChB,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC/B,MAAM,EAAE;wBACN,KAAK,EAAE,MAAM;qBACd;oBACD,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,IAAI;oBACX,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;oBACjC,MAAM,EAAE;wBACN,KAAK,EAAE,QAAQ;wBACf,QAAQ,EAAE,IAAI;qBACf;oBACD,MAAM,EAAE,IAAI;oBACZ,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAA;QAED,MAAM,KAAK,CAAC,iBAAiB,EAAE,CAAA;IACjC,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,OAAO,IAAI,CAAA;;wCAEyB,IAAI,CAAC,UAAU,kBAAkB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;;;2BAI1E,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;;2BAEhF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;kCAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;uCACjB,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;;;;WAItD,CAAA;IACT,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAC/C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAC7E,CAAA;QAED,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,CAAa;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA;QAE9B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;OAMT;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO;aACR;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAA;YACnD,OAAO,CAAC,IAAI,EAAE,CAAA;SACf;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,CAAa;QACvB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,CAAa;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA;QAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAA;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAA;QAEhD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACvB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;YAC/B,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;YAEtE,IAAI,YAAY,EAAE;gBAChB,YAAY,CAAC,MAAM,GAAG,MAAM,CAAA;aAC7B;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAA;QAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACtD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;YAE/B,OAAO;gBACL,IAAI;gBACJ,MAAM;aACP,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;OAMT;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO;gBACP,UAAU;aACX;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAA;SAClD;IACH,CAAC;IAED,SAAS,CAAC,OAAO;QACf,QAAQ,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;IAC5E,CAAC;;AAjOM,2BAAM,GAAG;IACd,eAAe;IACf,iBAAiB;IACjB,qBAAqB;IACrB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsDF;CACF,CAAA;AAED;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8BAAU,SAAS;oDAAA;AAC9C;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kDAAc;AAEzC;IAAC,KAAK,CAAC,UAAU,CAAC;8BAAiB,SAAS;mDAAA;AAjEjC,oBAAoB;IADhC,aAAa,CAAC,wBAAwB,CAAC;GAC3B,oBAAoB,CAmOhC;SAnOY,oBAAoB","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\n\nimport { i18next, localize } from '@operato/i18n'\nimport { client } from '@operato/graphql'\nimport { DataGrist } from '@operato/data-grist'\nimport { ScrollbarStyles, CommonGristStyles, ButtonContainerStyles } from '@operato/styles'\n\n@customElement('grid-preference-editor')\nexport class GridPreferenceEditor extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n ButtonContainerStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-x: auto;\n }\n\n .container {\n flex: 1;\n display: grid;\n overflow: hidden;\n }\n\n .container_detail {\n background-color: var(--main-section-background-color);\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow-y: auto;\n }\n\n h2 {\n padding: var(--subtitle-padding);\n font: var(--subtitle-font);\n color: var(--subtitle-text-color);\n border-bottom: var(--subtitle-border-bottom);\n }\n\n .container_detail h2 {\n margin: var(--grist-title-margin);\n border: var(--grist-title-border);\n font: var(--grist-title-font);\n color: var(--secondary-color);\n }\n\n .container_detail h2 md-icon {\n --md-icon-size: var(--grist-title-icon-size);\n vertical-align: middle;\n margin: var(--grist-title-icon-margin);\n color: var(--grist-title-icon-color);\n }\n\n h2 {\n padding-bottom: var(--grist-title-with-grid-padding);\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n ox-filters-form {\n flex: 1;\n }\n `\n ]\n\n @property({ type: Object }) target!: DataGrist\n @property({ type: String }) page!: string\n\n @query('ox-grist') private grist!: DataGrist\n\n private gridConfig: any\n\n async connectedCallback() {\n // 메뉴 그룹 그리드 설정\n this.gridConfig = {\n rows: { selectable: false, appendable: false },\n pagination: { infinite: true },\n list: {\n fields: ['page', 'element'],\n details: ['active', 'updatedAt']\n },\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n record: {\n align: 'left'\n },\n hidden: true,\n filter: 'search',\n sortable: true,\n width: 150\n },\n {\n type: 'string',\n name: 'header',\n header: i18next.t('field.name'),\n record: {\n align: 'left'\n },\n filter: 'search',\n width: 200\n },\n {\n type: 'checkbox',\n name: 'hidden',\n label: true,\n header: i18next.t('field.hidden'),\n record: {\n align: 'center',\n editable: true\n },\n filter: true,\n sortable: true,\n width: 60\n }\n ]\n }\n\n await super.connectedCallback()\n }\n\n /**\n * @description 라이프 사이클\n ***************************\n */\n render() {\n return html` <div id=\"container\" class=\"container\">\n <div class=\"container_detail\">\n <ox-grist mode=\"GRID\" .config=${this.gridConfig} .fetchHandler=${this.fetchColumns.bind(this)} auto-fetch>\n </ox-grist>\n\n <div class=\"button-container\" style=\"margin-left:unset\">\n <button @click=${this.reset.bind(this)}><md-icon>restart_alt</md-icon>${i18next.t('button.reset')}</button>\n <div filler></div>\n <button @click=${this.save.bind(this)}><md-icon>save</md-icon>${i18next.t('button.save')}</button>\n <button danger @click=${this.delete.bind(this)}>\n <md-icon>delete</md-icon>${i18next.t('button.delete')}\n </button>\n </div>\n </div>\n </div>`\n }\n\n async fetchColumns() {\n const columns = this.target.config.columns.filter(\n column => column.type != 'gutter' && column.name != 'id' && !column.unusable\n )\n\n return { total: 0, records: columns }\n }\n\n async delete(e: MouseEvent) {\n const element = this.target.id\n\n const response = await client.query({\n query: gql`\n mutation ($page: String!, $element: String!) {\n deleteMyPagePreference(page: $page, element: $element) {\n id\n }\n }\n `,\n variables: {\n page: this.page,\n element\n }\n })\n\n if (!response.errors) {\n this.showToast(i18next.t('text.success to delete'))\n history.back()\n }\n }\n\n async reset(e: MouseEvent) {\n await this.grist.fetch()\n }\n\n async save(e: MouseEvent) {\n const element = this.target.id\n\n const dirties = this.grist.dirtyRecords\n const targetColumns = this.target.config.columns\n\n dirties.forEach(record => {\n const { name, hidden } = record\n const targetColumn = targetColumns.find(column => column.name == name)\n\n if (targetColumn) {\n targetColumn.hidden = hidden\n }\n })\n\n await this.target.requestUpdate()\n\n const preference = this.grist.data.records.map(record => {\n const { name, hidden } = record\n\n return {\n name,\n hidden\n }\n })\n\n const response = await client.query({\n query: gql`\n mutation ($page: String!, $element: String!, $preference: Object!) {\n updateMyPagePreference(page: $page, element: $element, preference: $preference) {\n id\n }\n }\n `,\n variables: {\n page: this.page,\n element,\n preference\n }\n })\n\n if (!response.errors) {\n this.showToast(i18next.t('text.success to save'))\n }\n }\n\n showToast(message) {\n document.dispatchEvent(new CustomEvent('notify', { detail: { message } }))\n }\n}\n"]}
@@ -1,13 +0,0 @@
1
- import { PagePreferenceProviderImpl } from './page-preference-provider-impl.js';
2
- type Constructor<T> = new (...args: any[]) => T;
3
- interface CustomElement {
4
- }
5
- export declare const p13n: <T extends Constructor<CustomElement>>(base: T) => {
6
- new (...args: any[]): {
7
- preferenceProviders?: {
8
- [key: string]: PagePreferenceProviderImpl;
9
- } | undefined;
10
- getPagePreferenceProvider(elementId: string): PagePreferenceProviderImpl | undefined;
11
- };
12
- } & T;
13
- export {};