@things-factory/operato-board 6.1.145 → 6.1.147

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 (33) hide show
  1. package/dist-client/graphql/board.d.ts +13 -1
  2. package/dist-client/graphql/board.js +42 -12
  3. package/dist-client/graphql/board.js.map +1 -1
  4. package/dist-client/pages/board-list-page.js +32 -4
  5. package/dist-client/pages/board-list-page.js.map +1 -1
  6. package/dist-client/tsconfig.tsbuildinfo +1 -1
  7. package/dist-client/viewparts/board-basic-info.d.ts +47 -0
  8. package/dist-client/viewparts/board-basic-info.js +626 -0
  9. package/dist-client/viewparts/board-basic-info.js.map +1 -0
  10. package/dist-client/viewparts/board-info.d.ts +3 -14
  11. package/dist-client/viewparts/board-info.js +37 -395
  12. package/dist-client/viewparts/board-info.js.map +1 -1
  13. package/dist-client/viewparts/board-versions.d.ts +12 -0
  14. package/dist-client/viewparts/board-versions.js +154 -0
  15. package/dist-client/viewparts/board-versions.js.map +1 -0
  16. package/dist-client/viewparts/group-info.d.ts +4 -0
  17. package/dist-client/viewparts/group-info.js +57 -6
  18. package/dist-client/viewparts/group-info.js.map +1 -1
  19. package/dist-server/tsconfig.tsbuildinfo +1 -1
  20. package/helps/faq/databinding-copy-paste.md +22 -0
  21. package/helps/faq/images/databinding-copy-paste-01.png +0 -0
  22. package/helps/faq/images/style-copy-paste-01.png +0 -0
  23. package/helps/faq/images/tablecell-size-adjusting-01.png +0 -0
  24. package/helps/faq/style-copy-paste.md +22 -0
  25. package/helps/faq/tablecell-size-adjusting.md +13 -0
  26. package/helps/faq.md +14 -0
  27. package/package.json +18 -17
  28. package/schema.gql +34 -1
  29. package/translations/en.json +6 -0
  30. package/translations/ja.json +6 -0
  31. package/translations/ko.json +6 -0
  32. package/translations/ms.json +6 -0
  33. package/translations/zh.json +6 -0
@@ -0,0 +1,154 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/mwc-icon';
3
+ import gql from 'graphql-tag';
4
+ import { css, html, LitElement } from 'lit';
5
+ import { customElement, property, state } from 'lit/decorators.js';
6
+ import { i18next } from '@operato/i18n';
7
+ import { client } from '@operato/graphql';
8
+ let BoardVersions = class BoardVersions extends LitElement {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.versions = [];
12
+ }
13
+ render() {
14
+ return html `
15
+ ${this.versions.length == 0
16
+ ? html ` ${i18next.t('text.no released version information available')} `
17
+ : html `
18
+ ${this.versions.map(version => html `
19
+ <div card>
20
+ <img src=${version.thumbnail} />
21
+ <div info>
22
+ <mwc-icon>pin</mwc-icon> ${version.version}
23
+ <span>
24
+ <mwc-icon>person</mwc-icon> ${(version.updater && version.updater.name) || 'anonymouse'}
25
+ <mwc-icon>schedule</mwc-icon> ${new Date(Number(version.updatedAt)).toLocaleString()}
26
+ </span>
27
+ </div>
28
+ <mwc-button
29
+ dense
30
+ raised
31
+ label=${String(i18next.t('button.revert-board-version'))}
32
+ @click=${() => this.revertBoardVersion(version.version)}
33
+ icon="recycling"
34
+ ></mwc-button>
35
+ </div>
36
+ `)}
37
+ `}
38
+ `;
39
+ }
40
+ firstUpdated() {
41
+ this.refresh();
42
+ }
43
+ async refresh() {
44
+ if (!this.boardId) {
45
+ return;
46
+ }
47
+ var response = (await client.query({
48
+ query: gql `
49
+ query FetchBoardVersionsById($id: String!) {
50
+ boardVersions(id: $id) {
51
+ id
52
+ version
53
+ thumbnail
54
+ updater {
55
+ name
56
+ }
57
+ updatedAt
58
+ }
59
+ }
60
+ `,
61
+ variables: { id: this.boardId }
62
+ })).data;
63
+ this.versions = response.boardVersions;
64
+ }
65
+ revertBoardVersion(version) {
66
+ this.dispatchEvent(new CustomEvent('revert-board-version', {
67
+ detail: {
68
+ id: this.boardId,
69
+ version
70
+ },
71
+ bubbles: true,
72
+ composed: true
73
+ }));
74
+ this.close();
75
+ }
76
+ close() {
77
+ history.back();
78
+ }
79
+ };
80
+ BoardVersions.styles = [
81
+ css `
82
+ :host {
83
+ display: block;
84
+ background-color: var(--main-section-background-color);
85
+ position: relative;
86
+ padding: var(--padding-default);
87
+ text-align: center;
88
+ color: var(--label-color);
89
+ font: var(--label-font);
90
+ }
91
+
92
+ img {
93
+ display: block;
94
+
95
+ margin: auto;
96
+ max-width: 100%;
97
+ max-height: 100%;
98
+ border-bottom: 2px solid rgba(0, 0, 0, 0.1);
99
+ }
100
+
101
+ div[card] {
102
+ position: relative;
103
+ padding: 9px 0;
104
+ text-align: start;
105
+ border-bottom: var(--border-dark-color);
106
+ }
107
+
108
+ div[info] {
109
+ display: flex;
110
+ align-items: center;
111
+ gap: var(--margin-default);
112
+ }
113
+
114
+ span {
115
+ margin-left: auto;
116
+ font: var(--input-field-font);
117
+ display: flex;
118
+ align-items: center;
119
+ gap: 5px;
120
+ }
121
+
122
+ span mwc-icon {
123
+ vertical-align: middle;
124
+ font-size: var(--fontsize-large);
125
+ color: var(--primary-color);
126
+ }
127
+
128
+ mwc-button {
129
+ position: absolute;
130
+ right: 3px;
131
+ top: 12px;
132
+ opacity: 0.8;
133
+ }
134
+
135
+ @media screen and (max-width: 460px) {
136
+ :host {
137
+ width: 100vw;
138
+ }
139
+ }
140
+ `
141
+ ];
142
+ __decorate([
143
+ property({ type: String }),
144
+ __metadata("design:type", String)
145
+ ], BoardVersions.prototype, "boardId", void 0);
146
+ __decorate([
147
+ state(),
148
+ __metadata("design:type", Array)
149
+ ], BoardVersions.prototype, "versions", void 0);
150
+ BoardVersions = __decorate([
151
+ customElement('board-versions')
152
+ ], BoardVersions);
153
+ export { BoardVersions };
154
+ //# sourceMappingURL=board-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-versions.js","sourceRoot":"","sources":["../../client/viewparts/board-versions.ts"],"names":[],"mappings":";AAAA,OAAO,oBAAoB,CAAA;AAE3B,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,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAGlC,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,UAAU;IAAtC;;QAkEI,aAAQ,GAAU,EAAE,CAAA;IAiF/B,CAAC;IA/EC,MAAM;QACJ,OAAO,IAAI,CAAA;QACP,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC;YACzB,CAAC,CAAC,IAAI,CAAA,IAAI,OAAO,CAAC,CAAC,CAAC,gDAAgD,CAAC,GAAG;YACxE,CAAC,CAAC,IAAI,CAAA;cACA,IAAI,CAAC,QAAQ,CAAC,GAAG,CACjB,OAAO,CAAC,EAAE,CAAC,IAAI,CAAA;;6BAEA,OAAO,CAAC,SAAS;;+CAEC,OAAO,CAAC,OAAO;;oDAEV,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY;sDACvD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE;;;;;;4BAM9E,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC;6BAC/C,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC;;;;eAI5D,CACF;WACF;KACN,CAAA;IACH,CAAC;IAED,YAAY;QACV,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAM;SACP;QAED,IAAI,QAAQ,GAAG,CACb,MAAM,MAAM,CAAC,KAAK,CAAC;YACjB,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;SAYT;YACD,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE;SAChC,CAAC,CACH,CAAC,IAAI,CAAA;QAEN,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAA;IACxC,CAAC;IAED,kBAAkB,CAAC,OAAe;QAChC,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,sBAAsB,EAAE;YACtC,MAAM,EAAE;gBACN,EAAE,EAAE,IAAI,CAAC,OAAO;gBAChB,OAAO;aACR;YACD,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAA;QAED,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK;QACH,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;;AAjJM,oBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2DF;CACF,CAAA;AAED;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;8CAAiB;AAE5C;IAAC,KAAK,EAAE;;+CAAqB;AAlElB,aAAa;IADzB,aAAa,CAAC,gBAAgB,CAAC;GACnB,aAAa,CAmJzB;SAnJY,aAAa","sourcesContent":["import '@material/mwc-icon'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next } from '@operato/i18n'\nimport { client } from '@operato/graphql'\n\n@customElement('board-versions')\nexport class BoardVersions extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n background-color: var(--main-section-background-color);\n position: relative;\n padding: var(--padding-default);\n text-align: center;\n color: var(--label-color);\n font: var(--label-font);\n }\n\n img {\n display: block;\n\n margin: auto;\n max-width: 100%;\n max-height: 100%;\n border-bottom: 2px solid rgba(0, 0, 0, 0.1);\n }\n\n div[card] {\n position: relative;\n padding: 9px 0;\n text-align: start;\n border-bottom: var(--border-dark-color);\n }\n\n div[info] {\n display: flex;\n align-items: center;\n gap: var(--margin-default);\n }\n\n span {\n margin-left: auto;\n font: var(--input-field-font);\n display: flex;\n align-items: center;\n gap: 5px;\n }\n\n span mwc-icon {\n vertical-align: middle;\n font-size: var(--fontsize-large);\n color: var(--primary-color);\n }\n\n mwc-button {\n position: absolute;\n right: 3px;\n top: 12px;\n opacity: 0.8;\n }\n\n @media screen and (max-width: 460px) {\n :host {\n width: 100vw;\n }\n }\n `\n ]\n\n @property({ type: String }) boardId?: string\n\n @state() versions: any[] = []\n\n render() {\n return html`\n ${this.versions.length == 0\n ? html` ${i18next.t('text.no released version information available')} `\n : html`\n ${this.versions.map(\n version => html`\n <div card>\n <img src=${version.thumbnail} />\n <div info>\n <mwc-icon>pin</mwc-icon> ${version.version}\n <span>\n <mwc-icon>person</mwc-icon> ${(version.updater && version.updater.name) || 'anonymouse'}\n <mwc-icon>schedule</mwc-icon> ${new Date(Number(version.updatedAt)).toLocaleString()}\n </span>\n </div>\n <mwc-button\n dense\n raised\n label=${String(i18next.t('button.revert-board-version'))}\n @click=${() => this.revertBoardVersion(version.version)}\n icon=\"recycling\"\n ></mwc-button>\n </div>\n `\n )}\n `}\n `\n }\n\n firstUpdated() {\n this.refresh()\n }\n\n async refresh() {\n if (!this.boardId) {\n return\n }\n\n var response = (\n await client.query({\n query: gql`\n query FetchBoardVersionsById($id: String!) {\n boardVersions(id: $id) {\n id\n version\n thumbnail\n updater {\n name\n }\n updatedAt\n }\n }\n `,\n variables: { id: this.boardId }\n })\n ).data\n\n this.versions = response.boardVersions\n }\n\n revertBoardVersion(version: number) {\n this.dispatchEvent(\n new CustomEvent('revert-board-version', {\n detail: {\n id: this.boardId,\n version\n },\n bubbles: true,\n composed: true\n })\n )\n\n this.close()\n }\n\n close() {\n history.back()\n }\n}\n"]}
@@ -1,9 +1,12 @@
1
1
  import '@material/mwc-icon';
2
+ import '@operato/input/ox-input-file.js';
2
3
  import { LitElement } from 'lit';
3
4
  export declare class GroupInfo extends LitElement {
4
5
  static styles: import("lit").CSSResult[];
5
6
  groupId?: string;
6
7
  group: any;
8
+ fileUploader: any;
9
+ overwrite: any;
7
10
  render(): import("lit-html").TemplateResult<1>;
8
11
  updated(changes: any): void;
9
12
  firstUpdated(): void;
@@ -11,5 +14,6 @@ export declare class GroupInfo extends LitElement {
11
14
  createGroup(): Promise<void>;
12
15
  updateGroup(): Promise<void>;
13
16
  deleteGroup(): Promise<void>;
17
+ importBoard(): Promise<void>;
14
18
  close(): void;
15
19
  }
@@ -1,8 +1,10 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import '@material/mwc-icon';
3
+ import '@operato/input/ox-input-file.js';
3
4
  import { css, html, LitElement } from 'lit';
4
- import { customElement, property, state } from 'lit/decorators.js';
5
+ import { customElement, property, query, state } from 'lit/decorators.js';
5
6
  import { i18next } from '@things-factory/i18n-base';
7
+ // import { OxInputFile } from '@operato/input/ox-input-file.js'
6
8
  import { fetchGroup } from '../graphql';
7
9
  let GroupInfo = class GroupInfo extends LitElement {
8
10
  render() {
@@ -58,6 +60,25 @@ let GroupInfo = class GroupInfo extends LitElement {
58
60
  </div>
59
61
  </fieldset>
60
62
  </form>
63
+
64
+ ${this.groupId
65
+ ? html `
66
+ <div import>
67
+ <ox-input-file accept="*/*" multiple="true"></ox-input-file>
68
+
69
+ <div buttons>
70
+ <label> <input type="checkbox" name="overwrite" checked />&nbsp;overwrite </label>
71
+ <mwc-button
72
+ dense
73
+ raised
74
+ label=${i18next.t('button.import-board')}
75
+ @click=${this.importBoard.bind(this)}
76
+ icon="publish"
77
+ ></mwc-button>
78
+ </div>
79
+ </div>
80
+ `
81
+ : html ``}
61
82
  `;
62
83
  }
63
84
  updated(changes) {
@@ -99,6 +120,16 @@ let GroupInfo = class GroupInfo extends LitElement {
99
120
  }));
100
121
  this.close();
101
122
  }
123
+ async importBoard() {
124
+ this.dispatchEvent(new CustomEvent('import-boards', {
125
+ detail: {
126
+ group: this.group,
127
+ files: this.fileUploader.files,
128
+ overwrite: this.overwrite.checked
129
+ }
130
+ }));
131
+ this.close();
132
+ }
102
133
  close() {
103
134
  history.back();
104
135
  }
@@ -132,14 +163,18 @@ GroupInfo.styles = [
132
163
  grid-column: span 12;
133
164
  padding: var(--padding-default) 0;
134
165
  text-align: right;
166
+
167
+ display: flex;
168
+ gap: var(--margin-narrow);
169
+ align-items: center;
135
170
  }
136
171
 
137
- [buttons] * {
138
- margin: 0 0 0 var(--margin-narrow);
172
+ [buttons] mwc-button {
173
+ margin-left: auto;
139
174
  }
140
- [danger] {
141
- float: left;
142
- margin: 0 var(--margin-narrow) 0 0;
175
+
176
+ [buttons] mwc-button[danger] {
177
+ margin-left: 0;
143
178
  --mdc-theme-primary: var(--status-danger-color);
144
179
  }
145
180
 
@@ -210,6 +245,14 @@ GroupInfo.styles = [
210
245
  border: 1px solid var(--focus-background-color);
211
246
  }
212
247
 
248
+ div[import] {
249
+ display: flex;
250
+ flex-direction: column;
251
+ gap: 4px;
252
+ padding: var(--padding-wide);
253
+ align-items: stretch;
254
+ }
255
+
213
256
  @media screen and (max-width: 460px) {
214
257
  :host {
215
258
  width: 100vw;
@@ -225,6 +268,14 @@ __decorate([
225
268
  state(),
226
269
  __metadata("design:type", Object)
227
270
  ], GroupInfo.prototype, "group", void 0);
271
+ __decorate([
272
+ query('ox-input-file'),
273
+ __metadata("design:type", Object)
274
+ ], GroupInfo.prototype, "fileUploader", void 0);
275
+ __decorate([
276
+ query('input[type=checkbox]'),
277
+ __metadata("design:type", Object)
278
+ ], GroupInfo.prototype, "overwrite", void 0);
228
279
  GroupInfo = __decorate([
229
280
  customElement('group-info')
230
281
  ], GroupInfo);
@@ -1 +1 @@
1
- {"version":3,"file":"group-info.js","sourceRoot":"","sources":["../../client/viewparts/group-info.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/mwc-icon'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { i18next } from '@things-factory/i18n-base'\n\nimport { fetchGroup } from '../graphql'\n\n@customElement('group-info')\nexport class GroupInfo extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n background-color: var(--main-section-background-color);\n height: 100%;\n min-width: 360px;\n overflow: auto;\n position: relative;\n\n --form-grid-gap: 2px 0;\n --input-field-padding: var(--padding-default);\n --legend-padding: var(--padding-default) 0 var(--padding-narrow) 0;\n --mdc-button-horizontal-padding: var(--padding-default);\n }\n\n form {\n display: grid;\n grid-template-columns: repeat(12, 1fr);\n grid-gap: var(--form-grid-gap);\n grid-auto-rows: minmax(24px, auto);\n padding: var(--padding-wide);\n align-items: center;\n }\n\n [buttons] {\n grid-column: span 12;\n padding: var(--padding-default) 0;\n text-align: right;\n }\n\n [buttons] * {\n margin: 0 0 0 var(--margin-narrow);\n }\n [danger] {\n float: left;\n margin: 0 var(--margin-narrow) 0 0;\n --mdc-theme-primary: var(--status-danger-color);\n }\n\n fieldset {\n display: contents;\n }\n\n legend {\n grid-column: span 12;\n padding: var(--legend-padding);\n font: var(--legend-font);\n color: var(--legend-text-color);\n text-transform: capitalize;\n }\n\n label {\n grid-column: span 12;\n text-transform: capitalize;\n color: var(--label-color);\n font: var(--label-font);\n }\n\n span {\n grid-column: span 12;\n border-bottom: var(--border-dark-color);\n margin-bottom: var(--margin-default);\n padding-bottom: var(--padding-narrow);\n font: var(--input-field-font);\n }\n span mwc-icon {\n vertical-align: middle;\n font-size: var(--fontsize-large);\n color: var(--primary-color);\n }\n\n input,\n table,\n select,\n textarea,\n [custom-input] {\n grid-column: span 12;\n\n border: var(--input-field-border);\n border-radius: var(--input-field-border-radius);\n margin-bottom: var(--margin-default);\n padding: var(--input-field-padding);\n font: var(--input-field-font);\n }\n\n input[type='checkbox'],\n input[type='radio'] {\n place-self: center;\n margin: 0;\n grid-column: 1;\n }\n\n input[type='checkbox'] + label,\n input[type='radio'] + label {\n text-align: left;\n grid-column: span 11 / auto;\n\n font: var(--form-sublabel-font);\n color: var(--form-sublabel-color);\n }\n\n input:focus {\n outline: none;\n border: 1px solid var(--focus-background-color);\n }\n\n @media screen and (max-width: 460px) {\n :host {\n width: 100vw;\n }\n }\n `\n ]\n\n @property({ type: String }) groupId?: string\n\n @state() group: any\n\n render() {\n var group = this.group || { name: '', description: '' }\n\n return html`\n <form>\n <fieldset>\n <legend>group information</legend>\n <label>${i18next.t('label.name')}</label>\n <input type=\"text\" .value=${group.name} @change=${e => (this.group.name = e.target.value)} />\n\n <label>${i18next.t('label.description')}</label>\n <input type=\"text\" .value=${group.description} @change=${e => (this.group.description = e.target.value)} />\n\n <label>${i18next.t('label.creator')}</label>\n <span>\n <mwc-icon>person</mwc-icon> ${group.creator && group.creator.name} <mwc-icon>schedule</mwc-icon> ${new Date(\n Number(group.createdAt)\n ).toLocaleString()}\n </span>\n\n <label>${i18next.t('label.updater')}</label>\n <span>\n <mwc-icon>person</mwc-icon> ${group.updater && group.updater.name} <mwc-icon>schedule</mwc-icon> ${new Date(\n Number(group.updatedAt)\n ).toLocaleString()}\n </span>\n\n <div buttons>\n ${this.groupId\n ? html`\n <mwc-button\n dense\n raised\n danger\n label=${i18next.t('button.delete')}\n @click=${this.deleteGroup.bind(this)}\n icon=\"delete_outline\"\n ></mwc-button>\n <mwc-button\n dense\n raised\n label=${i18next.t('button.save')}\n @click=${this.updateGroup.bind(this)}\n icon=\"done\"\n ></mwc-button>\n `\n : html`\n <mwc-button\n dense\n raised\n label=${i18next.t('button.create')}\n @click=${this.createGroup.bind(this)}\n icon=\"create_new_folder\"\n ></mwc-button>\n `}\n </div>\n </fieldset>\n </form>\n `\n }\n\n updated(changes) {\n if (changes.has('groupId')) {\n this.refresh()\n }\n }\n\n firstUpdated() {\n setTimeout(() => {\n ;(this.renderRoot.querySelector('input[type=text]') as any).focus()\n }, 100)\n }\n\n async refresh() {\n if (!this.groupId) {\n /* model이 없으므로, 기본 모델을 제공함. */\n this.group = { name: '', description: '' }\n } else {\n var response = await fetchGroup(this.groupId)\n this.group = response.group\n }\n }\n\n async createGroup() {\n this.dispatchEvent(\n new CustomEvent('create-group', {\n detail: this.group\n })\n )\n\n this.close()\n }\n\n async updateGroup() {\n this.dispatchEvent(\n new CustomEvent('update-group', {\n detail: this.group\n })\n )\n\n this.close()\n }\n\n async deleteGroup() {\n this.dispatchEvent(\n new CustomEvent('delete-group', {\n detail: this.group\n })\n )\n\n this.close()\n }\n\n close() {\n history.back()\n }\n}\n"]}
1
+ {"version":3,"file":"group-info.js","sourceRoot":"","sources":["../../client/viewparts/group-info.ts"],"names":[],"mappings":";AAAA,OAAO,oBAAoB,CAAA;AAC3B,OAAO,iCAAiC,CAAA;AAExC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzE,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,gEAAgE;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGhC,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IAuIvC,MAAM;QACJ,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAA;QAEvD,OAAO,IAAI,CAAA;;;;mBAII,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;sCACJ,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;;mBAEhF,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;sCACX,KAAK,CAAC,WAAW,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;;mBAE9F,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;;0CAEH,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,kCAAkC,IAAI,IAAI,CACzG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CACxB,CAAC,cAAc,EAAE;;;mBAGX,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;;0CAEH,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,kCAAkC,IAAI,IAAI,CACzG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CACxB,CAAC,cAAc,EAAE;;;;cAIhB,IAAI,CAAC,OAAO;YACZ,CAAC,CAAC,IAAI,CAAA;;;;;4BAKQ,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;6BACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;4BAM5B,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;6BACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;;iBAGvC;YACH,CAAC,CAAC,IAAI,CAAA;;;;4BAIQ,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;6BACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;;iBAGvC;;;;;QAKT,IAAI,CAAC,OAAO;YACZ,CAAC,CAAC,IAAI,CAAA;;;;;;;;;0BASY,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;2BAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;WAK3C;YACH,CAAC,CAAC,IAAI,CAAA,EAAE;KACX,CAAA;IACH,CAAC;IAED,OAAO,CAAC,OAAO;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAA;SACf;IACH,CAAC;IAED,YAAY;QACV,UAAU,CAAC,GAAG,EAAE;YACd,CAAC;YAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAS,CAAC,KAAK,EAAE,CAAA;QACrE,CAAC,EAAE,GAAG,CAAC,CAAA;IACT,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,8BAA8B;YAC9B,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAA;SAC3C;aAAM;YACL,IAAI,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC7C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;SAC5B;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;YAC9B,MAAM,EAAE,IAAI,CAAC,KAAK;SACnB,CAAC,CACH,CAAA;QAED,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;YAC9B,MAAM,EAAE,IAAI,CAAC,KAAK;SACnB,CAAC,CACH,CAAA;QAED,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;YAC9B,MAAM,EAAE,IAAI,CAAC,KAAK;SACnB,CAAC,CACH,CAAA;QAED,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,eAAe,EAAE;YAC/B,MAAM,EAAE;gBACN,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;gBAC9B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO;aAClC;SACF,CAAC,CACH,CAAA;QAED,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,KAAK;QACH,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;;AA1RM,gBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2HF;CACF,CAAA;AAED;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;0CAAiB;AAE5C;IAAC,KAAK,EAAE;;wCAAW;AAEnB;IAAC,KAAK,CAAC,eAAe,CAAC;;+CAAkB;AACzC;IAAC,KAAK,CAAC,sBAAsB,CAAC;;4CAAe;AArIlC,SAAS;IADrB,aAAa,CAAC,YAAY,CAAC;GACf,SAAS,CA4RrB;SA5RY,SAAS","sourcesContent":["import '@material/mwc-icon'\nimport '@operato/input/ox-input-file.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { i18next } from '@things-factory/i18n-base'\n// import { OxInputFile } from '@operato/input/ox-input-file.js'\n\nimport { fetchGroup } from '../graphql'\n\n@customElement('group-info')\nexport class GroupInfo extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n background-color: var(--main-section-background-color);\n height: 100%;\n min-width: 360px;\n overflow: auto;\n position: relative;\n\n --form-grid-gap: 2px 0;\n --input-field-padding: var(--padding-default);\n --legend-padding: var(--padding-default) 0 var(--padding-narrow) 0;\n --mdc-button-horizontal-padding: var(--padding-default);\n }\n\n form {\n display: grid;\n grid-template-columns: repeat(12, 1fr);\n grid-gap: var(--form-grid-gap);\n grid-auto-rows: minmax(24px, auto);\n padding: var(--padding-wide);\n align-items: center;\n }\n\n [buttons] {\n grid-column: span 12;\n padding: var(--padding-default) 0;\n text-align: right;\n\n display: flex;\n gap: var(--margin-narrow);\n align-items: center;\n }\n\n [buttons] mwc-button {\n margin-left: auto;\n }\n\n [buttons] mwc-button[danger] {\n margin-left: 0;\n --mdc-theme-primary: var(--status-danger-color);\n }\n\n fieldset {\n display: contents;\n }\n\n legend {\n grid-column: span 12;\n padding: var(--legend-padding);\n font: var(--legend-font);\n color: var(--legend-text-color);\n text-transform: capitalize;\n }\n\n label {\n grid-column: span 12;\n text-transform: capitalize;\n color: var(--label-color);\n font: var(--label-font);\n }\n\n span {\n grid-column: span 12;\n border-bottom: var(--border-dark-color);\n margin-bottom: var(--margin-default);\n padding-bottom: var(--padding-narrow);\n font: var(--input-field-font);\n }\n span mwc-icon {\n vertical-align: middle;\n font-size: var(--fontsize-large);\n color: var(--primary-color);\n }\n\n input,\n table,\n select,\n textarea,\n [custom-input] {\n grid-column: span 12;\n\n border: var(--input-field-border);\n border-radius: var(--input-field-border-radius);\n margin-bottom: var(--margin-default);\n padding: var(--input-field-padding);\n font: var(--input-field-font);\n }\n\n input[type='checkbox'],\n input[type='radio'] {\n place-self: center;\n margin: 0;\n grid-column: 1;\n }\n\n input[type='checkbox'] + label,\n input[type='radio'] + label {\n text-align: left;\n grid-column: span 11 / auto;\n\n font: var(--form-sublabel-font);\n color: var(--form-sublabel-color);\n }\n\n input:focus {\n outline: none;\n border: 1px solid var(--focus-background-color);\n }\n\n div[import] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: var(--padding-wide);\n align-items: stretch;\n }\n\n @media screen and (max-width: 460px) {\n :host {\n width: 100vw;\n }\n }\n `\n ]\n\n @property({ type: String }) groupId?: string\n\n @state() group: any\n\n @query('ox-input-file') fileUploader: any\n @query('input[type=checkbox]') overwrite: any\n\n render() {\n var group = this.group || { name: '', description: '' }\n\n return html`\n <form>\n <fieldset>\n <legend>group information</legend>\n <label>${i18next.t('label.name')}</label>\n <input type=\"text\" .value=${group.name} @change=${e => (this.group.name = e.target.value)} />\n\n <label>${i18next.t('label.description')}</label>\n <input type=\"text\" .value=${group.description} @change=${e => (this.group.description = e.target.value)} />\n\n <label>${i18next.t('label.creator')}</label>\n <span>\n <mwc-icon>person</mwc-icon> ${group.creator && group.creator.name} <mwc-icon>schedule</mwc-icon> ${new Date(\n Number(group.createdAt)\n ).toLocaleString()}\n </span>\n\n <label>${i18next.t('label.updater')}</label>\n <span>\n <mwc-icon>person</mwc-icon> ${group.updater && group.updater.name} <mwc-icon>schedule</mwc-icon> ${new Date(\n Number(group.updatedAt)\n ).toLocaleString()}\n </span>\n\n <div buttons>\n ${this.groupId\n ? html`\n <mwc-button\n dense\n raised\n danger\n label=${i18next.t('button.delete')}\n @click=${this.deleteGroup.bind(this)}\n icon=\"delete_outline\"\n ></mwc-button>\n <mwc-button\n dense\n raised\n label=${i18next.t('button.save')}\n @click=${this.updateGroup.bind(this)}\n icon=\"done\"\n ></mwc-button>\n `\n : html`\n <mwc-button\n dense\n raised\n label=${i18next.t('button.create')}\n @click=${this.createGroup.bind(this)}\n icon=\"create_new_folder\"\n ></mwc-button>\n `}\n </div>\n </fieldset>\n </form>\n\n ${this.groupId\n ? html`\n <div import>\n <ox-input-file accept=\"*/*\" multiple=\"true\"></ox-input-file>\n\n <div buttons>\n <label> <input type=\"checkbox\" name=\"overwrite\" checked />&nbsp;overwrite </label>\n <mwc-button\n dense\n raised\n label=${i18next.t('button.import-board')}\n @click=${this.importBoard.bind(this)}\n icon=\"publish\"\n ></mwc-button>\n </div>\n </div>\n `\n : html``}\n `\n }\n\n updated(changes) {\n if (changes.has('groupId')) {\n this.refresh()\n }\n }\n\n firstUpdated() {\n setTimeout(() => {\n ;(this.renderRoot.querySelector('input[type=text]') as any).focus()\n }, 100)\n }\n\n async refresh() {\n if (!this.groupId) {\n /* model이 없으므로, 기본 모델을 제공함. */\n this.group = { name: '', description: '' }\n } else {\n var response = await fetchGroup(this.groupId)\n this.group = response.group\n }\n }\n\n async createGroup() {\n this.dispatchEvent(\n new CustomEvent('create-group', {\n detail: this.group\n })\n )\n\n this.close()\n }\n\n async updateGroup() {\n this.dispatchEvent(\n new CustomEvent('update-group', {\n detail: this.group\n })\n )\n\n this.close()\n }\n\n async deleteGroup() {\n this.dispatchEvent(\n new CustomEvent('delete-group', {\n detail: this.group\n })\n )\n\n this.close()\n }\n\n async importBoard() {\n this.dispatchEvent(\n new CustomEvent('import-boards', {\n detail: {\n group: this.group,\n files: this.fileUploader.files,\n overwrite: this.overwrite.checked\n }\n })\n )\n\n this.close()\n }\n\n close() {\n history.back()\n }\n}\n"]}