@operato/board 1.1.35 → 1.1.36

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 (42) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js +1 -5
  3. package/dist/src/modeller/property-sidebar/effects/property-event-hover.js.map +1 -1
  4. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js +1 -5
  5. package/dist/src/modeller/property-sidebar/effects/property-event-tap.js.map +1 -1
  6. package/dist/src/ox-board-list.js +4 -4
  7. package/dist/src/ox-board-list.js.map +1 -1
  8. package/dist/src/ox-editor-board-selector.d.ts +15 -0
  9. package/dist/src/ox-editor-board-selector.js +86 -0
  10. package/dist/src/ox-editor-board-selector.js.map +1 -0
  11. package/dist/src/ox-property-editor-board-selector.d.ts +4 -0
  12. package/dist/src/ox-property-editor-board-selector.js +22 -0
  13. package/dist/src/ox-property-editor-board-selector.js.map +1 -0
  14. package/dist/src/selector/board-creation-card.d.ts +14 -0
  15. package/dist/src/selector/board-creation-card.js +85 -0
  16. package/dist/src/selector/board-creation-card.js.map +1 -0
  17. package/dist/src/selector/board-creation-popup.d.ts +19 -0
  18. package/dist/src/selector/board-creation-popup.js +100 -0
  19. package/dist/src/selector/board-creation-popup.js.map +1 -0
  20. package/dist/src/selector/board-selector.d.ts +44 -0
  21. package/dist/src/selector/board-selector.js +302 -0
  22. package/dist/src/selector/board-selector.js.map +1 -0
  23. package/dist/src/selector/board-thumbnail-card.d.ts +15 -0
  24. package/dist/src/selector/board-thumbnail-card.js +169 -0
  25. package/dist/src/selector/board-thumbnail-card.js.map +1 -0
  26. package/dist/src/selector/ox-board-creation-card.d.ts +14 -0
  27. package/dist/src/selector/ox-board-creation-card.js +85 -0
  28. package/dist/src/selector/ox-board-creation-card.js.map +1 -0
  29. package/dist/src/selector/ox-board-selector.d.ts +44 -0
  30. package/dist/src/selector/ox-board-selector.js +302 -0
  31. package/dist/src/selector/ox-board-selector.js.map +1 -0
  32. package/dist/tsconfig.tsbuildinfo +1 -1
  33. package/package.json +23 -7
  34. package/src/modeller/property-sidebar/effects/property-event-hover.ts +1 -5
  35. package/src/modeller/property-sidebar/effects/property-event-tap.ts +1 -5
  36. package/src/ox-board-list.ts +4 -4
  37. package/src/ox-editor-board-selector.ts +91 -0
  38. package/src/ox-property-editor-board-selector.ts +23 -0
  39. package/src/selector/board-creation-popup.ts +102 -0
  40. package/src/selector/board-thumbnail-card.ts +175 -0
  41. package/src/selector/ox-board-creation-card.ts +92 -0
  42. package/src/selector/ox-board-selector.ts +317 -0
@@ -0,0 +1,100 @@
1
+ import { __decorate } from "tslib";
2
+ import '@material/mwc-textfield';
3
+ import '@material/mwc-textarea';
4
+ import '@material/mwc-select';
5
+ import '@material/mwc-list/mwc-list-item';
6
+ import '@material/mwc-button';
7
+ import { css, html, LitElement } from 'lit';
8
+ import { customElement, property } from 'lit/decorators.js';
9
+ import { i18next, localize } from '@operato/i18n';
10
+ let BoardCreationPopup = class BoardCreationPopup extends localize(i18next)(LitElement) {
11
+ static get styles() {
12
+ return [
13
+ css `
14
+ :host {
15
+ display: flex;
16
+ flex-direction: column;
17
+
18
+ padding: 10px;
19
+ background-color: white;
20
+ }
21
+
22
+ :host > * {
23
+ margin: 10px;
24
+ }
25
+
26
+ [content] {
27
+ flex: 1;
28
+ display: flex;
29
+ flex-direction: column;
30
+ }
31
+
32
+ [content] > * {
33
+ margin: 10px 0;
34
+ }
35
+ `
36
+ ];
37
+ }
38
+ render() {
39
+ var groups = this.groups || [];
40
+ return html `
41
+ <div content>
42
+ <mwc-textfield label=${String(i18next.t('label.name'))} name="name" required field-name></mwc-textfield>
43
+ <mwc-textarea
44
+ label=${String(i18next.t('label.description'))}
45
+ name="description"
46
+ field-description
47
+ ></mwc-textarea>
48
+ <mwc-select
49
+ label=${String(i18next.t('label.group'))}
50
+ field-group
51
+ helper="If there is no group to choose, you can leave it empty."
52
+ >
53
+ ${groups.map(group => html `
54
+ <mwc-list-item value=${group.id} ?selected=${this.defaultGroup == group.id}>${group.name}</mwc-list-item>
55
+ `)}
56
+ </mwc-select>
57
+ </div>
58
+
59
+ <mwc-button
60
+ raised
61
+ label=${String(i18next.t('button.create'))}
62
+ @click=${(e) => this.onClickSubmit()}
63
+ ></mwc-button>
64
+ `;
65
+ }
66
+ firstUpdated() {
67
+ setTimeout(() => {
68
+ var _a;
69
+ ;
70
+ (_a = this.renderRoot.querySelector('mwc-textfield')) === null || _a === void 0 ? void 0 : _a.focus();
71
+ }, 100);
72
+ }
73
+ onClickSubmit() {
74
+ var [name, description, groupId] = ['name', 'description', 'group'].map(attr => {
75
+ var _a;
76
+ return (_a = this.renderRoot.querySelector(`[field-${attr}]`)) === null || _a === void 0 ? void 0 : _a.value;
77
+ });
78
+ if (!name) {
79
+ return;
80
+ }
81
+ this.dispatchEvent(new CustomEvent('create-board', {
82
+ detail: {
83
+ name,
84
+ description,
85
+ groupId
86
+ }
87
+ }));
88
+ }
89
+ };
90
+ __decorate([
91
+ property({ type: String })
92
+ ], BoardCreationPopup.prototype, "defaultGroup", void 0);
93
+ __decorate([
94
+ property({ type: Array })
95
+ ], BoardCreationPopup.prototype, "groups", void 0);
96
+ BoardCreationPopup = __decorate([
97
+ customElement('board-creation-popup')
98
+ ], BoardCreationPopup);
99
+ export { BoardCreationPopup };
100
+ //# sourceMappingURL=board-creation-popup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-creation-popup.js","sourceRoot":"","sources":["../../../src/selector/board-creation-popup.ts"],"names":[],"mappings":";AAAA,OAAO,yBAAyB,CAAA;AAChC,OAAO,wBAAwB,CAAA;AAC/B,OAAO,sBAAsB,CAAA;AAC7B,OAAO,kCAAkC,CAAA;AACzC,OAAO,sBAAsB,CAAA;AAE7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAG1C,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;IACnE,MAAM,KAAK,MAAM;QACf,OAAO;YACL,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;OAsBF;SACF,CAAA;IACH,CAAC;IAKD,MAAM;QACJ,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;QAE9B,OAAO,IAAI,CAAA;;+BAEgB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;;kBAE5C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;;;;;kBAKtC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;;;;YAItC,MAAM,CAAC,GAAG,CACV,KAAK,CAAC,EAAE,CAAC,IAAI,CAAA;qCACY,KAAK,CAAC,EAAE,cAAc,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI;aACzF,CACF;;;;;;gBAMK,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;iBACjC,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;;KAEnD,CAAA;IACH,CAAC;IAED,YAAY;QACV,UAAU,CAAC,GAAG,EAAE;;YACd,CAAC;YAAA,MAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAS,0CAAE,KAAK,EAAE,CAAA;QACnE,CAAC,EAAE,GAAG,CAAC,CAAA;IACT,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;;YAC7E,OAAO,MAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,IAAI,GAAG,CAAS,0CAAE,KAAK,CAAA;QACzE,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,EAAE;YACT,OAAM;SACP;QAED,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,cAAc,EAAE;YAC9B,MAAM,EAAE;gBACN,IAAI;gBACJ,WAAW;gBACX,OAAO;aACR;SACF,CAAC,CACH,CAAA;IACH,CAAC;CACF,CAAA;AA5D6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wDAAsB;AACtB;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;kDAAwC;AA9BvD,kBAAkB;IAD9B,aAAa,CAAC,sBAAsB,CAAC;GACzB,kBAAkB,CAyF9B;SAzFY,kBAAkB","sourcesContent":["import '@material/mwc-textfield'\nimport '@material/mwc-textarea'\nimport '@material/mwc-select'\nimport '@material/mwc-list/mwc-list-item'\nimport '@material/mwc-button'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { i18next, localize } from '@operato/i18n'\n\n@customElement('board-creation-popup')\nexport class BoardCreationPopup extends localize(i18next)(LitElement) {\n static get styles() {\n return [\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n padding: 10px;\n background-color: white;\n }\n\n :host > * {\n margin: 10px;\n }\n\n [content] {\n flex: 1;\n display: flex;\n flex-direction: column;\n }\n\n [content] > * {\n margin: 10px 0;\n }\n `\n ]\n }\n\n @property({ type: String }) defaultGroup?: string\n @property({ type: Array }) groups?: { id: string; name: string }[]\n\n render() {\n var groups = this.groups || []\n\n return html`\n <div content>\n <mwc-textfield label=${String(i18next.t('label.name'))} name=\"name\" required field-name></mwc-textfield>\n <mwc-textarea\n label=${String(i18next.t('label.description'))}\n name=\"description\"\n field-description\n ></mwc-textarea>\n <mwc-select\n label=${String(i18next.t('label.group'))}\n field-group\n helper=\"If there is no group to choose, you can leave it empty.\"\n >\n ${groups.map(\n group => html`\n <mwc-list-item value=${group.id} ?selected=${this.defaultGroup == group.id}>${group.name}</mwc-list-item>\n `\n )}\n </mwc-select>\n </div>\n\n <mwc-button\n raised\n label=${String(i18next.t('button.create'))}\n @click=${(e: MouseEvent) => this.onClickSubmit()}\n ></mwc-button>\n `\n }\n\n firstUpdated() {\n setTimeout(() => {\n ;(this.renderRoot.querySelector('mwc-textfield') as any)?.focus()\n }, 100)\n }\n\n onClickSubmit() {\n var [name, description, groupId] = ['name', 'description', 'group'].map(attr => {\n return (this.renderRoot.querySelector(`[field-${attr}]`) as any)?.value\n })\n\n if (!name) {\n return\n }\n\n this.dispatchEvent(\n new CustomEvent('create-board', {\n detail: {\n name,\n description,\n groupId\n }\n })\n )\n }\n}\n"]}
@@ -0,0 +1,44 @@
1
+ import './board-creation-card';
2
+ import { LitElement, PropertyValues } from 'lit';
3
+ declare const BoardSelector_base: (new (...args: any[]) => {
4
+ _infiniteScrollOptions: {
5
+ threshold: number;
6
+ limit: number;
7
+ totalProp: string;
8
+ pageProp: string;
9
+ };
10
+ onScroll: import("lodash").DebouncedFunc<(e: any) => void>;
11
+ readonly scrollTargetEl: HTMLElement | null;
12
+ scrollAction(): Promise<void>;
13
+ }) & (new (...args: any[]) => LitElement) & typeof LitElement;
14
+ export declare class BoardSelector extends BoardSelector_base {
15
+ static get styles(): import("lit").CSSResult[];
16
+ groups: {
17
+ id: string;
18
+ name: string;
19
+ description: string;
20
+ }[];
21
+ boards: any[];
22
+ group?: string;
23
+ creatable: boolean;
24
+ value?: string;
25
+ private _page;
26
+ private _total;
27
+ constructor();
28
+ render(): import("lit-html").TemplateResult<1>;
29
+ get scrollTargetEl(): HTMLElement | null;
30
+ scrollAction(): Promise<void>;
31
+ firstUpdated(): void;
32
+ updated(changed: PropertyValues<this>): Promise<void>;
33
+ onClickSelect(board: any): void;
34
+ onCreateBoard(e: CustomEvent): Promise<void>;
35
+ refreshGroups(): Promise<void>;
36
+ refreshBoards(): Promise<void>;
37
+ appendBoards(): Promise<void>;
38
+ getBoards({ page, limit }?: {
39
+ page?: number | undefined;
40
+ limit?: number | undefined;
41
+ }): Promise<any>;
42
+ createBoard(name: string, description: string, groupId: string): Promise<any>;
43
+ }
44
+ export {};
@@ -0,0 +1,302 @@
1
+ import { __decorate } from "tslib";
2
+ import './board-creation-card';
3
+ import gql from 'graphql-tag';
4
+ import { css, html, LitElement } from 'lit';
5
+ import { customElement, property } from 'lit/decorators.js';
6
+ import { buildArgs, client, gqlContext } from '@operato/graphql';
7
+ import { i18next, localize } from '@operato/i18n';
8
+ import { ScrollbarStyles } from '@operato/styles';
9
+ import InfiniteScrollable from '@operato/utils/mixins/infinite-scrollable.js';
10
+ const FETCH_BOARD_LIST_GQL = (listParam) => {
11
+ return gql `
12
+ {
13
+ boards(${buildArgs(listParam)}) {
14
+ items {
15
+ id
16
+ name
17
+ description
18
+ thumbnail
19
+ }
20
+ total
21
+ }
22
+ }
23
+ `;
24
+ };
25
+ const FETCH_BOARD_GROUP_LIST_GQL = gql `
26
+ {
27
+ groups {
28
+ items {
29
+ id
30
+ name
31
+ description
32
+ }
33
+ total
34
+ }
35
+ }
36
+ `;
37
+ const CREATE_BOARD_GQL = gql `
38
+ mutation CreateBoard($board: NewBoard!) {
39
+ createBoard(board: $board) {
40
+ id
41
+ name
42
+ description
43
+ model
44
+ createdAt
45
+ updatedAt
46
+ }
47
+ }
48
+ `;
49
+ let BoardSelector = class BoardSelector extends InfiniteScrollable(localize(i18next)(LitElement)) {
50
+ static get styles() {
51
+ return [
52
+ ScrollbarStyles,
53
+ css `
54
+ :host {
55
+ display: grid;
56
+ grid-template-rows: auto auto 1fr;
57
+ overflow: hidden;
58
+ background-color: var(--popup-content-background-color);
59
+ }
60
+
61
+ #main {
62
+ overflow: auto;
63
+ padding: var(--popup-content-padding);
64
+ display: grid;
65
+ grid-template-columns: var(--card-list-template);
66
+ grid-auto-rows: var(--card-list-rows-height);
67
+ grid-gap: 20px;
68
+ }
69
+
70
+ .card {
71
+ display: flex;
72
+ flex-direction: column;
73
+ align-items: center;
74
+ overflow: hidden;
75
+ border-radius: var(--card-list-border-radius);
76
+ background-color: var(--card-list-background-color);
77
+ }
78
+
79
+ .card[selected] {
80
+ border: red solid;
81
+ }
82
+
83
+ .card.create {
84
+ overflow: visible;
85
+ }
86
+
87
+ .card:hover {
88
+ cursor: pointer;
89
+ }
90
+
91
+ .card > .name {
92
+ background-color: var(--board-renderer-name-background-color);
93
+ opacity: 0.8;
94
+ margin-top: -35px;
95
+ width: 100%;
96
+ color: #fff;
97
+ font-weight: bolder;
98
+ font-size: 13px;
99
+ text-indent: 7px;
100
+ }
101
+
102
+ .card > .description {
103
+ background-color: rgba(0, 0, 0, 0.7);
104
+ width: 100%;
105
+ min-height: 15px;
106
+ font-size: 0.6rem;
107
+ color: #fff;
108
+ text-indent: 7px;
109
+ }
110
+ .card img {
111
+ max-height: 100%;
112
+ min-height: 100%;
113
+ }
114
+
115
+ #filter {
116
+ padding: var(--popup-content-padding);
117
+ background-color: #fff;
118
+ box-shadow: var(--box-shadow);
119
+ }
120
+
121
+ #filter * {
122
+ font-size: 15px;
123
+ }
124
+
125
+ select {
126
+ text-transform: capitalize;
127
+ float: right;
128
+ }
129
+ `
130
+ ];
131
+ }
132
+ constructor() {
133
+ super();
134
+ this.groups = [];
135
+ this.boards = [];
136
+ this.creatable = false;
137
+ this._page = 1;
138
+ this._total = 0;
139
+ this._infiniteScrollOptions.limit = 20;
140
+ }
141
+ render() {
142
+ return html `
143
+ <div id="filter">
144
+ <select
145
+ @change=${(e) => {
146
+ var _a;
147
+ this.group = (_a = e.currentTarget) === null || _a === void 0 ? void 0 : _a.value;
148
+ this.requestUpdate();
149
+ }}
150
+ >
151
+ <option value="">${i18next.t('label.all')}</option>
152
+ ${this.groups.map(group => html ` <option value=${group.id}>${group.description}</option> `)}
153
+ </select>
154
+ </div>
155
+
156
+ <div
157
+ id="main"
158
+ @scroll=${(e) => {
159
+ this.onScroll(e);
160
+ }}
161
+ >
162
+ ${this.creatable
163
+ ? html `
164
+ <board-creation-card
165
+ class="card create"
166
+ .groups=${this.groups}
167
+ .defaultGroup=${this.group}
168
+ @create-board=${(e) => this.onCreateBoard(e)}
169
+ ></board-creation-card>
170
+ `
171
+ : html ``}
172
+ ${this.boards.map(board => html `
173
+ <div class="card" @click=${(e) => this.onClickSelect(board)} ?selected=${this.value === board.id}>
174
+ <img src=${board.thumbnail} />
175
+ <div class="name">${board.name}</div>
176
+ <div class="description">${board.description}</div>
177
+ </div>
178
+ `)}
179
+ </div>
180
+ `;
181
+ }
182
+ //@ts-ignore
183
+ get scrollTargetEl() {
184
+ return this.renderRoot.querySelector('#main');
185
+ }
186
+ async scrollAction() {
187
+ return this.appendBoards();
188
+ }
189
+ firstUpdated() {
190
+ this.refreshGroups();
191
+ }
192
+ async updated(changed) {
193
+ if (changed.has('group')) {
194
+ this.refreshBoards();
195
+ }
196
+ }
197
+ onClickSelect(board) {
198
+ this.dispatchEvent(new CustomEvent('board-selected', {
199
+ composed: true,
200
+ bubbles: true,
201
+ detail: {
202
+ board
203
+ }
204
+ }));
205
+ }
206
+ async onCreateBoard(e) {
207
+ var { name, description, groupId } = e.detail;
208
+ await this.createBoard(name, description, groupId);
209
+ this.refreshBoards();
210
+ }
211
+ async refreshGroups() {
212
+ var groupListResponse = await client.query({
213
+ query: FETCH_BOARD_GROUP_LIST_GQL,
214
+ context: gqlContext()
215
+ });
216
+ if (!groupListResponse || !groupListResponse.data)
217
+ return;
218
+ var groups = groupListResponse.data.groups.items;
219
+ this.groups = [...groups];
220
+ this.group = groups.filter((group) => group.id == this.group).length > 0 ? this.group : '';
221
+ }
222
+ async refreshBoards() {
223
+ var boards = await this.getBoards();
224
+ this.boards = [...boards];
225
+ var creationCard = this.renderRoot.querySelector('board-creation-card');
226
+ if (creationCard) {
227
+ ;
228
+ creationCard.reset();
229
+ }
230
+ }
231
+ async appendBoards() {
232
+ var boards = await this.getBoards({ page: this._page + 1 });
233
+ this.boards = [...this.boards, ...boards];
234
+ }
235
+ async getBoards({ page = 1, limit = this._infiniteScrollOptions.limit } = {}) {
236
+ var filters = [];
237
+ var sortings = [];
238
+ var pagination = {
239
+ limit,
240
+ page
241
+ };
242
+ if (this.group)
243
+ filters.push({
244
+ name: 'groupId',
245
+ operator: 'eq',
246
+ value: this.group
247
+ });
248
+ var params = {
249
+ filters,
250
+ sortings,
251
+ pagination
252
+ };
253
+ var boardListResponse = await client.query({
254
+ query: FETCH_BOARD_LIST_GQL(params),
255
+ context: gqlContext()
256
+ });
257
+ if (!boardListResponse || !boardListResponse.data)
258
+ return [];
259
+ this._total = boardListResponse.data.boards.total;
260
+ this._page = page;
261
+ return boardListResponse.data.boards.items;
262
+ }
263
+ async createBoard(name, description, groupId) {
264
+ var model = JSON.stringify({
265
+ width: 800,
266
+ height: 600
267
+ });
268
+ const response = await client.mutate({
269
+ mutation: CREATE_BOARD_GQL,
270
+ variables: {
271
+ board: {
272
+ name,
273
+ description,
274
+ groupId,
275
+ model
276
+ }
277
+ },
278
+ context: gqlContext()
279
+ });
280
+ return response.data;
281
+ }
282
+ };
283
+ __decorate([
284
+ property({ type: Array })
285
+ ], BoardSelector.prototype, "groups", void 0);
286
+ __decorate([
287
+ property({ type: Array })
288
+ ], BoardSelector.prototype, "boards", void 0);
289
+ __decorate([
290
+ property({ type: String })
291
+ ], BoardSelector.prototype, "group", void 0);
292
+ __decorate([
293
+ property({ type: Boolean })
294
+ ], BoardSelector.prototype, "creatable", void 0);
295
+ __decorate([
296
+ property({ type: String })
297
+ ], BoardSelector.prototype, "value", void 0);
298
+ BoardSelector = __decorate([
299
+ customElement('board-selector')
300
+ ], BoardSelector);
301
+ export { BoardSelector };
302
+ //# sourceMappingURL=board-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-selector.js","sourceRoot":"","sources":["../../../src/selector/board-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import './board-creation-card'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { buildArgs, client, gqlContext } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\nimport InfiniteScrollable from '@operato/utils/mixins/infinite-scrollable.js'\n\nconst FETCH_BOARD_LIST_GQL = (listParam: any) => {\n return gql`\n {\n boards(${buildArgs(listParam)}) {\n items {\n id\n name\n description\n thumbnail\n }\n total\n }\n }\n`\n}\n\nconst FETCH_BOARD_GROUP_LIST_GQL = gql`\n {\n groups {\n items {\n id\n name\n description\n }\n total\n }\n }\n`\n\nconst CREATE_BOARD_GQL = gql`\n mutation CreateBoard($board: NewBoard!) {\n createBoard(board: $board) {\n id\n name\n description\n model\n createdAt\n updatedAt\n }\n }\n`\n\n@customElement('board-selector')\nexport class BoardSelector extends InfiniteScrollable(localize(i18next)(LitElement)) {\n static get styles() {\n return [\n ScrollbarStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: auto auto 1fr;\n overflow: hidden;\n background-color: var(--popup-content-background-color);\n }\n\n #main {\n overflow: auto;\n padding: var(--popup-content-padding);\n display: grid;\n grid-template-columns: var(--card-list-template);\n grid-auto-rows: var(--card-list-rows-height);\n grid-gap: 20px;\n }\n\n .card {\n display: flex;\n flex-direction: column;\n align-items: center;\n overflow: hidden;\n border-radius: var(--card-list-border-radius);\n background-color: var(--card-list-background-color);\n }\n\n .card[selected] {\n border: red solid;\n }\n\n .card.create {\n overflow: visible;\n }\n\n .card:hover {\n cursor: pointer;\n }\n\n .card > .name {\n background-color: var(--board-renderer-name-background-color);\n opacity: 0.8;\n margin-top: -35px;\n width: 100%;\n color: #fff;\n font-weight: bolder;\n font-size: 13px;\n text-indent: 7px;\n }\n\n .card > .description {\n background-color: rgba(0, 0, 0, 0.7);\n width: 100%;\n min-height: 15px;\n font-size: 0.6rem;\n color: #fff;\n text-indent: 7px;\n }\n .card img {\n max-height: 100%;\n min-height: 100%;\n }\n\n #filter {\n padding: var(--popup-content-padding);\n background-color: #fff;\n box-shadow: var(--box-shadow);\n }\n\n #filter * {\n font-size: 15px;\n }\n\n select {\n text-transform: capitalize;\n float: right;\n }\n `\n ]\n }\n\n @property({ type: Array }) groups: { id: string; name: string; description: string }[] = []\n @property({ type: Array }) boards: any[] = []\n @property({ type: String }) group?: string\n @property({ type: Boolean }) creatable: boolean = false\n @property({ type: String }) value?: string\n\n private _page: number = 1\n private _total: number = 0\n\n constructor() {\n super()\n\n this._infiniteScrollOptions.limit = 20\n }\n\n render() {\n return html`\n <div id=\"filter\">\n <select\n @change=${(e: Event) => {\n this.group = (e.currentTarget as any)?.value\n this.requestUpdate()\n }}\n >\n <option value=\"\">${i18next.t('label.all')}</option>\n ${this.groups.map(group => html` <option value=${group.id}>${group.description}</option> `)}\n </select>\n </div>\n\n <div\n id=\"main\"\n @scroll=${(e: Event) => {\n this.onScroll(e)\n }}\n >\n ${this.creatable\n ? html`\n <board-creation-card\n class=\"card create\"\n .groups=${this.groups}\n .defaultGroup=${this.group}\n @create-board=${(e: CustomEvent) => this.onCreateBoard(e)}\n ></board-creation-card>\n `\n : html``}\n ${this.boards.map(\n board => html`\n <div class=\"card\" @click=${(e: Event) => this.onClickSelect(board)} ?selected=${this.value === board.id}>\n <img src=${board.thumbnail} />\n <div class=\"name\">${board.name}</div>\n <div class=\"description\">${board.description}</div>\n </div>\n `\n )}\n </div>\n `\n }\n\n //@ts-ignore\n get scrollTargetEl(): HTMLElement | null {\n return this.renderRoot.querySelector('#main') as HTMLElement\n }\n\n async scrollAction() {\n return this.appendBoards()\n }\n\n firstUpdated() {\n this.refreshGroups()\n }\n\n async updated(changed: PropertyValues<this>) {\n if (changed.has('group')) {\n this.refreshBoards()\n }\n }\n\n onClickSelect(board: any) {\n this.dispatchEvent(\n new CustomEvent('board-selected', {\n composed: true,\n bubbles: true,\n detail: {\n board\n }\n })\n )\n }\n\n async onCreateBoard(e: CustomEvent) {\n var { name, description, groupId } = e.detail\n\n await this.createBoard(name, description, groupId)\n this.refreshBoards()\n }\n\n async refreshGroups() {\n var groupListResponse = await client.query({\n query: FETCH_BOARD_GROUP_LIST_GQL,\n context: gqlContext()\n })\n\n if (!groupListResponse || !groupListResponse.data) return\n\n var groups = groupListResponse.data.groups.items\n this.groups = [...groups]\n\n this.group = groups.filter((group: { id: string }) => group.id == this.group).length > 0 ? this.group : ''\n }\n\n async refreshBoards() {\n var boards = await this.getBoards()\n this.boards = [...boards]\n\n var creationCard = this.renderRoot.querySelector('board-creation-card')\n if (creationCard) {\n ;(creationCard as any).reset()\n }\n }\n\n async appendBoards() {\n var boards = await this.getBoards({ page: this._page + 1 })\n this.boards = [...this.boards, ...boards]\n }\n\n async getBoards({ page = 1, limit = this._infiniteScrollOptions.limit } = {}) {\n var filters = []\n var sortings = [] as any[]\n var pagination = {\n limit,\n page\n }\n\n if (this.group)\n filters.push({\n name: 'groupId',\n operator: 'eq',\n value: this.group\n })\n\n var params = {\n filters,\n sortings,\n pagination\n }\n var boardListResponse = await client.query({\n query: FETCH_BOARD_LIST_GQL(params),\n context: gqlContext()\n })\n\n if (!boardListResponse || !boardListResponse.data) return []\n this._total = boardListResponse.data.boards.total\n this._page = page\n\n return boardListResponse.data.boards.items\n }\n\n async createBoard(name: string, description: string, groupId: string) {\n var model = JSON.stringify({\n width: 800,\n height: 600\n })\n\n const response = await client.mutate({\n mutation: CREATE_BOARD_GQL,\n variables: {\n board: {\n name,\n description,\n groupId,\n model\n }\n },\n context: gqlContext()\n })\n\n return response.data\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { LitElement } from 'lit';
2
+ declare const BoardThumbnailCard_base: (new (...args: any[]) => LitElement) & typeof LitElement;
3
+ export declare class BoardThumbnailCard extends BoardThumbnailCard_base {
4
+ static get styles(): import("lit").CSSResult[];
5
+ defaultGroup?: string;
6
+ groups?: {
7
+ id: string;
8
+ name: string;
9
+ }[];
10
+ render(): import("lit-html").TemplateResult<1>;
11
+ onClickFlip(e: Event): void;
12
+ onClickSubmit(e: Event): void;
13
+ reset(): void;
14
+ }
15
+ export {};
@@ -0,0 +1,169 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ import { i18next, localize } from '@operato/i18n';
5
+ let BoardThumbnailCard = class BoardThumbnailCard extends localize(i18next)(LitElement) {
6
+ static get styles() {
7
+ return [
8
+ css `
9
+ :host {
10
+ position: relative;
11
+
12
+ padding: 0;
13
+ margin: 0;
14
+ height: 100%;
15
+
16
+ -webkit-transform-style: preserve-3d;
17
+ transform-style: preserve-3d;
18
+ -webkit-transition: all 0.5s ease-in-out;
19
+ transition: all 0.5s ease-in-out;
20
+ }
21
+
22
+ :host(.flipped) {
23
+ -webkit-transform: var(--card-list-flip-transform);
24
+ transform: var(--card-list-flip-transform);
25
+ }
26
+
27
+ [front],
28
+ [back] {
29
+ position: absolute;
30
+
31
+ width: 100%;
32
+ height: 100%;
33
+ margin: 0;
34
+ padding: 0;
35
+
36
+ border: var(--card-list-create-border);
37
+ border-radius: var(--card-list-create-border-radius);
38
+
39
+ background-color: #fff;
40
+
41
+ -webkit-backface-visibility: hidden;
42
+ backface-visibility: hidden;
43
+ }
44
+
45
+ [front] {
46
+ text-align: center;
47
+ font-size: 0.8em;
48
+ color: var(--card-list-create-color);
49
+ text-transform: capitalize;
50
+ }
51
+
52
+ [front] mwc-icon {
53
+ margin-top: 15%;
54
+ display: block;
55
+ font-size: 3.5em;
56
+ color: var(--card-list-create-icon-color);
57
+ }
58
+
59
+ [back] {
60
+ -webkit-transform: var(--card-list-flip-transform);
61
+ transform: var(--card-list-flip-transform);
62
+ }
63
+
64
+ [back] form {
65
+ padding: var(--card-list-create-form-padding);
66
+ display: flex;
67
+ flex-flow: row wrap;
68
+ }
69
+
70
+ [back] form label {
71
+ flex: 1 1 25%;
72
+ font: var(--card-list-create-label-font);
73
+ color: var(--card-list-create-label-color);
74
+ }
75
+
76
+ [back] form input,
77
+ [back] form select {
78
+ flex: 1 1 60%;
79
+ width: 10px;
80
+ background-color: #fff;
81
+ border: var(--card-list-create-input-border);
82
+ border-radius: var(--card-list-create-input-border-radius);
83
+ padding: var(--card-list-create-input-padding);
84
+ font: var(--card-list-create-input-font);
85
+ color: var(--card-list-create-input-color);
86
+ }
87
+
88
+ form * {
89
+ margin: var(--card-list-create-margin);
90
+ }
91
+
92
+ input[type='submit'] {
93
+ background-color: var(--button-background-color) !important;
94
+ margin: var(--button-margin);
95
+ font: var(--button-font);
96
+ color: var(--button-color) !important;
97
+ border-radius: var(--button-radius);
98
+ border: var(--button-border);
99
+ }
100
+ `
101
+ ];
102
+ }
103
+ render() {
104
+ var groups = this.groups || [];
105
+ return html `
106
+ <div @click=${(e) => this.onClickFlip(e)} front><mwc-icon>add_circle_outline</mwc-icon>create board</div>
107
+
108
+ <div @click=${(e) => this.onClickFlip(e)} back>
109
+ <form @submit=${(e) => this.onClickSubmit(e)}>
110
+ <label>${i18next.t('label.name')}</label>
111
+ <input type="text" name="name" />
112
+
113
+ <label>${i18next.t('label.description')}</label>
114
+ <input type="text" name="description" />
115
+
116
+ <label>${i18next.t('label.group')}</label>
117
+ <select .value=${this.defaultGroup || ''} name="groupId">
118
+ ${groups.map(group => html `
119
+ <option value=${group.id} ?selected=${this.defaultGroup == group.id}>${group.name}</option>
120
+ `)}
121
+ </select>
122
+
123
+ <input type="submit" value=${String(i18next.t('button.create'))} />
124
+ </form>
125
+ </div>
126
+ `;
127
+ }
128
+ onClickFlip(e) {
129
+ var _a, _b;
130
+ if (((_a = e.currentTarget) === null || _a === void 0 ? void 0 : _a.hasAttribute('front')) || ((_b = e.target) === null || _b === void 0 ? void 0 : _b.hasAttribute('back'))) {
131
+ this.classList.toggle('flipped');
132
+ }
133
+ e.stopPropagation();
134
+ }
135
+ onClickSubmit(e) {
136
+ e.preventDefault();
137
+ e.stopPropagation();
138
+ var form = e.target;
139
+ var name = form.elements['name'].value;
140
+ var description = form.elements['description'].value;
141
+ var groupId = form.elements['groupId'].value;
142
+ this.dispatchEvent(new CustomEvent('create-board', {
143
+ detail: {
144
+ name,
145
+ description,
146
+ groupId
147
+ }
148
+ }));
149
+ }
150
+ reset() {
151
+ var _a;
152
+ var form = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('form');
153
+ if (form) {
154
+ form.reset();
155
+ }
156
+ this.classList.remove('flipped');
157
+ }
158
+ };
159
+ __decorate([
160
+ property({ type: String })
161
+ ], BoardThumbnailCard.prototype, "defaultGroup", void 0);
162
+ __decorate([
163
+ property({ type: Array })
164
+ ], BoardThumbnailCard.prototype, "groups", void 0);
165
+ BoardThumbnailCard = __decorate([
166
+ customElement('board-thumbnail-card')
167
+ ], BoardThumbnailCard);
168
+ export { BoardThumbnailCard };
169
+ //# sourceMappingURL=board-thumbnail-card.js.map