@things-factory/auth-ui 9.0.0-beta.8 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-client/bootstrap.d.ts +1 -1
- package/dist-client/bootstrap.js +2 -2
- package/dist-client/bootstrap.js.map +1 -1
- package/dist-client/components/abstract-auth-page.js +56 -57
- package/dist-client/components/abstract-auth-page.js.map +1 -1
- package/dist-client/components/abstract-password-reset.js +25 -25
- package/dist-client/components/abstract-password-reset.js.map +1 -1
- package/dist-client/components/abstract-sign.js +1 -2
- package/dist-client/components/abstract-sign.js.map +1 -1
- package/dist-client/components/change-password.js +58 -59
- package/dist-client/components/change-password.js.map +1 -1
- package/dist-client/components/create-domain-popup.js +42 -42
- package/dist-client/components/create-domain-popup.js.map +1 -1
- package/dist-client/components/create-role.js +35 -35
- package/dist-client/components/create-role.js.map +1 -1
- package/dist-client/components/create-user.js +34 -34
- package/dist-client/components/create-user.js.map +1 -1
- package/dist-client/components/credential-manager.js +8 -8
- package/dist-client/components/credential-manager.js.map +1 -1
- package/dist-client/components/delete-user-popup.js +43 -43
- package/dist-client/components/delete-user-popup.js.map +1 -1
- package/dist-client/components/domain-switch.js +31 -32
- package/dist-client/components/domain-switch.js.map +1 -1
- package/dist-client/components/invite-customer.js +21 -21
- package/dist-client/components/invite-customer.js.map +1 -1
- package/dist-client/components/invite-user.js +21 -21
- package/dist-client/components/invite-user.js.map +1 -1
- package/dist-client/components/my-login-history.js +14 -16
- package/dist-client/components/my-login-history.js.map +1 -1
- package/dist-client/components/ownership-transfer-popup.js +32 -33
- package/dist-client/components/ownership-transfer-popup.js.map +1 -1
- package/dist-client/components/partner-info-card.js +26 -26
- package/dist-client/components/partner-info-card.js.map +1 -1
- package/dist-client/components/partner-role-editor.js +21 -24
- package/dist-client/components/partner-role-editor.js.map +1 -1
- package/dist-client/components/profile-component.js +96 -96
- package/dist-client/components/profile-component.js.map +1 -1
- package/dist-client/components/role-edit-form.js +35 -35
- package/dist-client/components/role-edit-form.js.map +1 -1
- package/dist-client/components/role-privilege-editor.js +75 -76
- package/dist-client/components/role-privilege-editor.js.map +1 -1
- package/dist-client/components/role-selector.js +43 -43
- package/dist-client/components/role-selector.js.map +1 -1
- package/dist-client/components/user-role-editor.js +70 -75
- package/dist-client/components/user-role-editor.js.map +1 -1
- package/dist-client/entries/auth/activate.js +114 -115
- package/dist-client/entries/auth/activate.js.map +1 -1
- package/dist-client/entries/auth/checkin.d.ts +1 -1
- package/dist-client/entries/auth/checkin.js +80 -88
- package/dist-client/entries/auth/checkin.js.map +1 -1
- package/dist-client/entries/auth/forgot-password.js +1 -2
- package/dist-client/entries/auth/forgot-password.js.map +1 -1
- package/dist-client/entries/auth/result.js +60 -60
- package/dist-client/entries/auth/result.js.map +1 -1
- package/dist-client/entries/oauth2/oauth2-decision-error-page.js +5 -6
- package/dist-client/entries/oauth2/oauth2-decision-error-page.js.map +1 -1
- package/dist-client/entries/oauth2/oauth2-decision-page.js +59 -61
- package/dist-client/entries/oauth2/oauth2-decision-page.js.map +1 -1
- package/dist-client/entries/public/home.js +58 -58
- package/dist-client/entries/public/home.js.map +1 -1
- package/dist-client/pages/app-binding/app-binding.js +166 -166
- package/dist-client/pages/app-binding/app-binding.js.map +1 -1
- package/dist-client/pages/app-binding/app-bindings.js +67 -67
- package/dist-client/pages/app-binding/app-bindings.js.map +1 -1
- package/dist-client/pages/appliance/appliance.js +188 -191
- package/dist-client/pages/appliance/appliance.js.map +1 -1
- package/dist-client/pages/appliance/home.js +67 -67
- package/dist-client/pages/appliance/home.js.map +1 -1
- package/dist-client/pages/application/application.js +172 -172
- package/dist-client/pages/application/application.js.map +1 -1
- package/dist-client/pages/application/applications.js +73 -73
- package/dist-client/pages/application/applications.js.map +1 -1
- package/dist-client/pages/application/register.js +93 -93
- package/dist-client/pages/application/register.js.map +1 -1
- package/dist-client/pages/attribute/attribute-set-item-list.js +15 -15
- package/dist-client/pages/attribute/attribute-set-item-list.js.map +1 -1
- package/dist-client/pages/attribute/attribute-set-management.js +21 -22
- package/dist-client/pages/attribute/attribute-set-management.js.map +1 -1
- package/dist-client/pages/auth-provider/auth-provider-management.js +21 -22
- package/dist-client/pages/auth-provider/auth-provider-management.js.map +1 -1
- package/dist-client/pages/domain/domain-management.d.ts +2 -0
- package/dist-client/pages/domain/domain-management.js +42 -26
- package/dist-client/pages/domain/domain-management.js.map +1 -1
- package/dist-client/pages/domain-link/domain-link-management.d.ts +53 -0
- package/dist-client/pages/domain-link/domain-link-management.js +361 -0
- package/dist-client/pages/domain-link/domain-link-management.js.map +1 -0
- package/dist-client/pages/partner/partner-management.js +21 -22
- package/dist-client/pages/partner/partner-management.js.map +1 -1
- package/dist-client/pages/profile.js +10 -10
- package/dist-client/pages/profile.js.map +1 -1
- package/dist-client/pages/role/role-management.js +33 -33
- package/dist-client/pages/role/role-management.js.map +1 -1
- package/dist-client/pages/user/user-management.js +19 -20
- package/dist-client/pages/user/user-management.js.map +1 -1
- package/dist-client/route.js +3 -0
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/auth/domain-link.md +178 -0
- package/package.json +12 -12
- package/things-factory.config.js +2 -1
- package/translations/en.json +5 -1
- package/translations/ja.json +5 -1
- package/translations/ko.json +5 -1
- package/translations/ms.json +5 -1
- package/translations/zh.json +5 -1
|
@@ -9,6 +9,177 @@ import { APPLICATION_TYPES } from '../../constants/application.js';
|
|
|
9
9
|
import { client } from '@operato/graphql';
|
|
10
10
|
import { navigate, PageView, store } from '@operato/shell';
|
|
11
11
|
let Application = class Application extends connect(store)(PageView) {
|
|
12
|
+
static { this.styles = [
|
|
13
|
+
css `
|
|
14
|
+
:host {
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
overflow-y: auto;
|
|
18
|
+
position: relative;
|
|
19
|
+
|
|
20
|
+
background-color: var(--md-sys-color-background);
|
|
21
|
+
padding: var(--spacing-large);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
h2 {
|
|
25
|
+
margin: var(--title-margin);
|
|
26
|
+
font: var(--title-font);
|
|
27
|
+
color: var(--title-text-color);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
[page-description] {
|
|
31
|
+
margin: var(--page-description-margin);
|
|
32
|
+
font: var(--page-description-font);
|
|
33
|
+
color: var(--page-description-color);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
[icon] {
|
|
37
|
+
position: absolute;
|
|
38
|
+
top: 10px;
|
|
39
|
+
right: 10px;
|
|
40
|
+
max-width: 80px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
[icon] img {
|
|
44
|
+
max-width: 100%;
|
|
45
|
+
max-height: 100%;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
[button-primary] {
|
|
49
|
+
background-color: var(--button-primary-background-color);
|
|
50
|
+
border: var(--button-border);
|
|
51
|
+
border-radius: var(--button-border-radius);
|
|
52
|
+
margin: var(--button-margin);
|
|
53
|
+
padding: var(--button-primary-padding);
|
|
54
|
+
color: var(--button-primary-color);
|
|
55
|
+
font: var(--button-primary-font);
|
|
56
|
+
text-transform: var(--button-text-transform);
|
|
57
|
+
|
|
58
|
+
text-decoration: none;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
[button-primary]:hover {
|
|
62
|
+
background-color: var(--button-primary-active-background-color);
|
|
63
|
+
box-shadow: var(--button-active-box-shadow);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
[fieldset-container] {
|
|
67
|
+
background-color: var(--md-sys-color-surface);
|
|
68
|
+
margin: var(--spacing-large) 0 var(--spacing-medium) 0;
|
|
69
|
+
padding: var(--spacing-medium);
|
|
70
|
+
border-radius: var(--border-radius);
|
|
71
|
+
box-shadow: var(--box-shadow);
|
|
72
|
+
|
|
73
|
+
label {
|
|
74
|
+
font: var(--label-font);
|
|
75
|
+
color: var(--label-color, var(--md-sys-color-on-surface));
|
|
76
|
+
text-transform: var(--label-text-transform);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
input,
|
|
80
|
+
select {
|
|
81
|
+
border: var(--border-dim-color);
|
|
82
|
+
border-radius: var(--border-radius);
|
|
83
|
+
margin: var(--input-margin);
|
|
84
|
+
padding: var(--input-padding);
|
|
85
|
+
font: var(--input-font);
|
|
86
|
+
|
|
87
|
+
flex: 1;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
select:focus,
|
|
91
|
+
input:focus,
|
|
92
|
+
button {
|
|
93
|
+
outline: none;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
form {
|
|
97
|
+
max-width: var(--content-container-max-width);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
[fieldset-container] fieldset {
|
|
102
|
+
margin: 0;
|
|
103
|
+
margin-top: -15px;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
fieldset {
|
|
107
|
+
border-radius: var(--border-radius);
|
|
108
|
+
border: var(--border-dim-color);
|
|
109
|
+
margin: var(--fieldset-margin);
|
|
110
|
+
padding: var(--fieldset-padding);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
legend {
|
|
114
|
+
padding: var(--legend-padding);
|
|
115
|
+
font-weight: bold;
|
|
116
|
+
color: var(--legend-color);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
[field-2column] {
|
|
120
|
+
display: grid;
|
|
121
|
+
grid-template-columns: 1fr 1fr;
|
|
122
|
+
grid-gap: 15px;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
[field] {
|
|
126
|
+
display: flex;
|
|
127
|
+
flex-direction: column;
|
|
128
|
+
position: relative;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
[grid-span] {
|
|
132
|
+
grid-column: span 2;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
button {
|
|
136
|
+
display: flex;
|
|
137
|
+
align-items: center;
|
|
138
|
+
gap: var(--spacing-small);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
button,
|
|
142
|
+
input[type='submit'],
|
|
143
|
+
[button-in-field] {
|
|
144
|
+
background-color: var(--button-background-color);
|
|
145
|
+
border: var(--button-border);
|
|
146
|
+
border-radius: var(--button-border-radius);
|
|
147
|
+
padding: var(--button-padding);
|
|
148
|
+
color: var(--button-color);
|
|
149
|
+
font: var(--button-font);
|
|
150
|
+
text-transform: var(--button-text-transform);
|
|
151
|
+
|
|
152
|
+
margin: var(--spacing-medium) 0 var(--spacing-medium) var(--spacing-medium);
|
|
153
|
+
float: right;
|
|
154
|
+
text-decoration: none;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
button:hover,
|
|
158
|
+
input[type='submit']:hover {
|
|
159
|
+
border: var(--button-activ-border);
|
|
160
|
+
box-shadow: var(--button-active-box-shadow);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
[button-in-field] {
|
|
164
|
+
border-radius: 0 var(--button-border-radius) var(--button-border-radius) 0;
|
|
165
|
+
position: absolute;
|
|
166
|
+
top: 12px;
|
|
167
|
+
right: 0;
|
|
168
|
+
max-height: 36px;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
[input-hint] {
|
|
172
|
+
font: var(--input-hint-font);
|
|
173
|
+
color: var(--input-hint-color);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
@media screen and (max-width: 480px) {
|
|
177
|
+
[field] {
|
|
178
|
+
grid-column: span 2;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
`
|
|
182
|
+
]; }
|
|
12
183
|
get context() {
|
|
13
184
|
return {
|
|
14
185
|
title: {
|
|
@@ -202,7 +373,7 @@ let Application = class Application extends connect(store)(PageView) {
|
|
|
202
373
|
console.error('update fail');
|
|
203
374
|
}
|
|
204
375
|
else {
|
|
205
|
-
this.application =
|
|
376
|
+
this.application = { ...this.application, ...response.data.updateApplication };
|
|
206
377
|
console.log('update sucess');
|
|
207
378
|
}
|
|
208
379
|
}
|
|
@@ -229,177 +400,6 @@ let Application = class Application extends connect(store)(PageView) {
|
|
|
229
400
|
}
|
|
230
401
|
}
|
|
231
402
|
};
|
|
232
|
-
Application.styles = [
|
|
233
|
-
css `
|
|
234
|
-
:host {
|
|
235
|
-
display: flex;
|
|
236
|
-
flex-direction: column;
|
|
237
|
-
overflow-y: auto;
|
|
238
|
-
position: relative;
|
|
239
|
-
|
|
240
|
-
background-color: var(--md-sys-color-background);
|
|
241
|
-
padding: var(--spacing-large);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
h2 {
|
|
245
|
-
margin: var(--title-margin);
|
|
246
|
-
font: var(--title-font);
|
|
247
|
-
color: var(--title-text-color);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
[page-description] {
|
|
251
|
-
margin: var(--page-description-margin);
|
|
252
|
-
font: var(--page-description-font);
|
|
253
|
-
color: var(--page-description-color);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
[icon] {
|
|
257
|
-
position: absolute;
|
|
258
|
-
top: 10px;
|
|
259
|
-
right: 10px;
|
|
260
|
-
max-width: 80px;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
[icon] img {
|
|
264
|
-
max-width: 100%;
|
|
265
|
-
max-height: 100%;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
[button-primary] {
|
|
269
|
-
background-color: var(--button-primary-background-color);
|
|
270
|
-
border: var(--button-border);
|
|
271
|
-
border-radius: var(--button-border-radius);
|
|
272
|
-
margin: var(--button-margin);
|
|
273
|
-
padding: var(--button-primary-padding);
|
|
274
|
-
color: var(--button-primary-color);
|
|
275
|
-
font: var(--button-primary-font);
|
|
276
|
-
text-transform: var(--button-text-transform);
|
|
277
|
-
|
|
278
|
-
text-decoration: none;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
[button-primary]:hover {
|
|
282
|
-
background-color: var(--button-primary-active-background-color);
|
|
283
|
-
box-shadow: var(--button-active-box-shadow);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
[fieldset-container] {
|
|
287
|
-
background-color: var(--md-sys-color-surface);
|
|
288
|
-
margin: var(--spacing-large) 0 var(--spacing-medium) 0;
|
|
289
|
-
padding: var(--spacing-medium);
|
|
290
|
-
border-radius: var(--border-radius);
|
|
291
|
-
box-shadow: var(--box-shadow);
|
|
292
|
-
|
|
293
|
-
label {
|
|
294
|
-
font: var(--label-font);
|
|
295
|
-
color: var(--label-color, var(--md-sys-color-on-surface));
|
|
296
|
-
text-transform: var(--label-text-transform);
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
input,
|
|
300
|
-
select {
|
|
301
|
-
border: var(--border-dim-color);
|
|
302
|
-
border-radius: var(--border-radius);
|
|
303
|
-
margin: var(--input-margin);
|
|
304
|
-
padding: var(--input-padding);
|
|
305
|
-
font: var(--input-font);
|
|
306
|
-
|
|
307
|
-
flex: 1;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
select:focus,
|
|
311
|
-
input:focus,
|
|
312
|
-
button {
|
|
313
|
-
outline: none;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
form {
|
|
317
|
-
max-width: var(--content-container-max-width);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
[fieldset-container] fieldset {
|
|
322
|
-
margin: 0;
|
|
323
|
-
margin-top: -15px;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
fieldset {
|
|
327
|
-
border-radius: var(--border-radius);
|
|
328
|
-
border: var(--border-dim-color);
|
|
329
|
-
margin: var(--fieldset-margin);
|
|
330
|
-
padding: var(--fieldset-padding);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
legend {
|
|
334
|
-
padding: var(--legend-padding);
|
|
335
|
-
font-weight: bold;
|
|
336
|
-
color: var(--legend-color);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
[field-2column] {
|
|
340
|
-
display: grid;
|
|
341
|
-
grid-template-columns: 1fr 1fr;
|
|
342
|
-
grid-gap: 15px;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
[field] {
|
|
346
|
-
display: flex;
|
|
347
|
-
flex-direction: column;
|
|
348
|
-
position: relative;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
[grid-span] {
|
|
352
|
-
grid-column: span 2;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
button {
|
|
356
|
-
display: flex;
|
|
357
|
-
align-items: center;
|
|
358
|
-
gap: var(--spacing-small);
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
button,
|
|
362
|
-
input[type='submit'],
|
|
363
|
-
[button-in-field] {
|
|
364
|
-
background-color: var(--button-background-color);
|
|
365
|
-
border: var(--button-border);
|
|
366
|
-
border-radius: var(--button-border-radius);
|
|
367
|
-
padding: var(--button-padding);
|
|
368
|
-
color: var(--button-color);
|
|
369
|
-
font: var(--button-font);
|
|
370
|
-
text-transform: var(--button-text-transform);
|
|
371
|
-
|
|
372
|
-
margin: var(--spacing-medium) 0 var(--spacing-medium) var(--spacing-medium);
|
|
373
|
-
float: right;
|
|
374
|
-
text-decoration: none;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
button:hover,
|
|
378
|
-
input[type='submit']:hover {
|
|
379
|
-
border: var(--button-activ-border);
|
|
380
|
-
box-shadow: var(--button-active-box-shadow);
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
[button-in-field] {
|
|
384
|
-
border-radius: 0 var(--button-border-radius) var(--button-border-radius) 0;
|
|
385
|
-
position: absolute;
|
|
386
|
-
top: 12px;
|
|
387
|
-
right: 0;
|
|
388
|
-
max-height: 36px;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
[input-hint] {
|
|
392
|
-
font: var(--input-hint-font);
|
|
393
|
-
color: var(--input-hint-color);
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
@media screen and (max-width: 480px) {
|
|
397
|
-
[field] {
|
|
398
|
-
grid-column: span 2;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
`
|
|
402
|
-
];
|
|
403
403
|
__decorate([
|
|
404
404
|
property({ type: Object }),
|
|
405
405
|
__metadata("design:type", Object)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../../client/pages/application/application.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport Clipboard from 'clipboard'\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, queryAll } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { APPLICATION_TYPES } from '../../constants/application.js'\n\nimport { client } from '@operato/graphql'\nimport { navigate, PageView, store } from '@operato/shell'\n\n@customElement('application-page')\nclass Application extends connect(store)(PageView) {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n position: relative;\n\n background-color: var(--md-sys-color-background);\n padding: var(--spacing-large);\n }\n\n h2 {\n margin: var(--title-margin);\n font: var(--title-font);\n color: var(--title-text-color);\n }\n\n [page-description] {\n margin: var(--page-description-margin);\n font: var(--page-description-font);\n color: var(--page-description-color);\n }\n\n [icon] {\n position: absolute;\n top: 10px;\n right: 10px;\n max-width: 80px;\n }\n\n [icon] img {\n max-width: 100%;\n max-height: 100%;\n }\n\n [button-primary] {\n background-color: var(--button-primary-background-color);\n border: var(--button-border);\n border-radius: var(--button-border-radius);\n margin: var(--button-margin);\n padding: var(--button-primary-padding);\n color: var(--button-primary-color);\n font: var(--button-primary-font);\n text-transform: var(--button-text-transform);\n\n text-decoration: none;\n }\n\n [button-primary]:hover {\n background-color: var(--button-primary-active-background-color);\n box-shadow: var(--button-active-box-shadow);\n }\n\n [fieldset-container] {\n background-color: var(--md-sys-color-surface);\n margin: var(--spacing-large) 0 var(--spacing-medium) 0;\n padding: var(--spacing-medium);\n border-radius: var(--border-radius);\n box-shadow: var(--box-shadow);\n\n label {\n font: var(--label-font);\n color: var(--label-color, var(--md-sys-color-on-surface));\n text-transform: var(--label-text-transform);\n }\n\n input,\n select {\n border: var(--border-dim-color);\n border-radius: var(--border-radius);\n margin: var(--input-margin);\n padding: var(--input-padding);\n font: var(--input-font);\n\n flex: 1;\n }\n\n select:focus,\n input:focus,\n button {\n outline: none;\n }\n\n form {\n max-width: var(--content-container-max-width);\n }\n }\n\n [fieldset-container] fieldset {\n margin: 0;\n margin-top: -15px;\n }\n\n fieldset {\n border-radius: var(--border-radius);\n border: var(--border-dim-color);\n margin: var(--fieldset-margin);\n padding: var(--fieldset-padding);\n }\n\n legend {\n padding: var(--legend-padding);\n font-weight: bold;\n color: var(--legend-color);\n }\n\n [field-2column] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: 15px;\n }\n\n [field] {\n display: flex;\n flex-direction: column;\n position: relative;\n }\n\n [grid-span] {\n grid-column: span 2;\n }\n\n button {\n display: flex;\n align-items: center;\n gap: var(--spacing-small);\n }\n\n button,\n input[type='submit'],\n [button-in-field] {\n background-color: var(--button-background-color);\n border: var(--button-border);\n border-radius: var(--button-border-radius);\n padding: var(--button-padding);\n color: var(--button-color);\n font: var(--button-font);\n text-transform: var(--button-text-transform);\n\n margin: var(--spacing-medium) 0 var(--spacing-medium) var(--spacing-medium);\n float: right;\n text-decoration: none;\n }\n\n button:hover,\n input[type='submit']:hover {\n border: var(--button-activ-border);\n box-shadow: var(--button-active-box-shadow);\n }\n\n [button-in-field] {\n border-radius: 0 var(--button-border-radius) var(--button-border-radius) 0;\n position: absolute;\n top: 12px;\n right: 0;\n max-height: 36px;\n }\n\n [input-hint] {\n font: var(--input-hint-font);\n color: var(--input-hint-color);\n }\n\n @media screen and (max-width: 480px) {\n [field] {\n grid-column: span 2;\n }\n }\n `\n ]\n\n @property({ type: Object }) application: any\n @queryAll('[clipboard-copy]') copybuttons\n private clipboard?: Clipboard\n\n get context() {\n return {\n title: {\n icon: 'apps',\n text: this.application.name\n }\n }\n }\n\n render() {\n var app = this.application || {}\n\n return html`\n <div>\n <h2><md-icon>apps</md-icon> ${app.name}</h2>\n <p page-description>${app.description}</p>\n </div>\n\n <div icon>\n <img src=${app.icon} />\n </div>\n\n <form>\n <div fieldset-container>\n <fieldset>\n <legend>application</legend>\n <div field-2column>\n <div field grid-span>\n <label for=\"name\">app name</label>\n <input id=\"name\" type=\"text\" name=\"name\" .value=${app.name} />\n </div>\n\n <div field grid-span>\n <label for=\"description\">description</label>\n <input id=\"description\" type=\"text\" name=\"description\" .value=${app.description} />\n </div>\n\n <div field grid-span>\n <label for=\"email\">contact email</label>\n <input id=\"email\" type=\"text\" name=\"email\" .value=${app.email} />\n </div>\n\n <div field grid-span>\n <label for=\"type-selector\">type</label>\n <select id=\"type-selector\" name=\"type\">\n ${APPLICATION_TYPES.map(\n type =>\n html`<option value=\"${app.type}\" ?selected=\"${type === app.type ? true : false}\">${type}</option>`\n )}\n </select>\n </div>\n\n <div field grid-span>\n <label for=\"url\">application URL</label>\n <input id=\"url\" type=\"text\" name=\"url\" .value=${app.url} />\n </div>\n\n <div field grid-span>\n <label for=\"icon\">icon</label>\n <input id=\"icon\" type=\"text\" name=\"icon\" .value=${app.icon} />\n </div>\n\n <div field grid-span>\n <label for=\"redirect-url\">redirect URL</label>\n <input id=\"redirect-url\" type=\"text\" name=\"redirectUrl\" .value=${app.redirectUrl} />\n </div>\n\n <div field grid-span>\n <label for=\"webhook\">webhook</label>\n <input id=\"webhook\" type=\"text\" name=\"webhook\" .value=${app.webhook} />\n </div>\n\n <div field grid-span>\n <label for=\"available-scopes\">available-scopes</label>\n <input id=\"available-scopes\" type=\"text\" .value=${app.availableScopes} readonly />\n </div>\n\n <div field grid-span>\n <label for=\"auth-url\">auth URL</label>\n <input id=\"auth-url\" type=\"text\" .value=${app.authUrl} readonly />\n <button dense button-in-field clipboard-copy @click=${e => e.preventDefault()}>copy</button>\n The endpoint for authorization server. This is used to get the authorization code.\n </div>\n\n <div field grid-span>\n <label for=\"access-token-url\">access token URL</label>\n <input id=\"access-token-url\" type=\"text\" .value=${app.accessTokenUrl} readonly />\n <button dense button-in-field clipboard-copy @click=${e => e.preventDefault()}>copy</button>\n The endpoint for authentication server. This is used to exchange the authorization code for an access\n token.\n </div>\n </div>\n </fieldset>\n </div>\n\n <div fieldset-container>\n <fieldset>\n <legend>credentials</legend>\n <div field-2column>\n <div field grid-span>\n <label for=\"app-key\">appKey</label>\n <input id=\"app-key\" type=\"text\" .value=${app.appKey} readonly />\n <button dense button-in-field clipboard-copy @click=${e => e.preventDefault()}>copy</button>\n </div>\n\n <div field grid-span>\n <label for=\"app-secret\">appSecret</label>\n <input id=\"app-secret\" type=\"text\" .value=${app.appSecret} readonly />\n <button dense button-in-field clipboard-copy @click=${e => e.preventDefault()}>copy</button>\n </div>\n </div>\n </fieldset>\n </div>\n\n <div class=\"button-container\">\n <button danger @click=${this.deleteApplication.bind(this)}>\n <md-icon>delete_forever</md-icon>delete this app\n </button>\n <button @click=${this.updateApplication.bind(this)}><md-icon>save</md-icon>update</button>\n <button><md-icon>passkey</md-icon>generate new secret</button>\n </div>\n </form>\n `\n }\n\n firstUpdated() {\n this.clipboard = new Clipboard(this.copybuttons, {\n target: (trigger => trigger.parentElement.querySelector('input')) as any\n })\n }\n\n async pageUpdated(changes, lifecycle, before) {\n if (this.active) {\n await this.fetchApplication()\n }\n }\n\n async fetchApplication() {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n application(id: $id) {\n id\n name\n description\n email\n url\n icon\n redirectUrl\n authUrl\n accessTokenUrl\n webhook\n availableScopes\n appKey\n appSecret\n type\n }\n }\n `,\n variables: {\n id: this.lifecycle.resourceId\n }\n })\n\n this.application = response.data.application\n }\n\n async updateApplication(e) {\n e.preventDefault()\n\n const form = this.renderRoot.querySelector('form') as HTMLFormElement\n const formData = new FormData(form)\n\n const patch = Array.from(formData.entries()).reduce((patch, [key, value]) => {\n patch[key] = value\n return patch\n }, {})\n\n const id = this.lifecycle.resourceId\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $patch: ApplicationPatch!) {\n updateApplication(id: $id, patch: $patch) {\n id\n name\n description\n email\n url\n icon\n redirectUrl\n webhook\n appKey\n appSecret\n type\n }\n }\n `,\n variables: {\n id,\n patch\n }\n })\n\n if (response.errors) {\n console.error('update fail')\n } else {\n this.application = { ...this.application, ...response.data.updateApplication }\n console.log('update sucess')\n }\n }\n\n async deleteApplication(e) {\n e.preventDefault()\n\n const id = this.lifecycle.resourceId\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!) {\n deleteApplication(id: $id)\n }\n `,\n variables: {\n id\n }\n })\n\n const result = response.data.deleteApplication\n if (result) {\n console.log('delete sucess')\n navigate('applications')\n } else {\n console.error('delete fail')\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../../client/pages/application/application.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport Clipboard from 'clipboard'\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, queryAll } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { APPLICATION_TYPES } from '../../constants/application.js'\n\nimport { client } from '@operato/graphql'\nimport { navigate, PageView, store } from '@operato/shell'\n\n@customElement('application-page')\nclass Application extends connect(store)(PageView) {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n position: relative;\n\n background-color: var(--md-sys-color-background);\n padding: var(--spacing-large);\n }\n\n h2 {\n margin: var(--title-margin);\n font: var(--title-font);\n color: var(--title-text-color);\n }\n\n [page-description] {\n margin: var(--page-description-margin);\n font: var(--page-description-font);\n color: var(--page-description-color);\n }\n\n [icon] {\n position: absolute;\n top: 10px;\n right: 10px;\n max-width: 80px;\n }\n\n [icon] img {\n max-width: 100%;\n max-height: 100%;\n }\n\n [button-primary] {\n background-color: var(--button-primary-background-color);\n border: var(--button-border);\n border-radius: var(--button-border-radius);\n margin: var(--button-margin);\n padding: var(--button-primary-padding);\n color: var(--button-primary-color);\n font: var(--button-primary-font);\n text-transform: var(--button-text-transform);\n\n text-decoration: none;\n }\n\n [button-primary]:hover {\n background-color: var(--button-primary-active-background-color);\n box-shadow: var(--button-active-box-shadow);\n }\n\n [fieldset-container] {\n background-color: var(--md-sys-color-surface);\n margin: var(--spacing-large) 0 var(--spacing-medium) 0;\n padding: var(--spacing-medium);\n border-radius: var(--border-radius);\n box-shadow: var(--box-shadow);\n\n label {\n font: var(--label-font);\n color: var(--label-color, var(--md-sys-color-on-surface));\n text-transform: var(--label-text-transform);\n }\n\n input,\n select {\n border: var(--border-dim-color);\n border-radius: var(--border-radius);\n margin: var(--input-margin);\n padding: var(--input-padding);\n font: var(--input-font);\n\n flex: 1;\n }\n\n select:focus,\n input:focus,\n button {\n outline: none;\n }\n\n form {\n max-width: var(--content-container-max-width);\n }\n }\n\n [fieldset-container] fieldset {\n margin: 0;\n margin-top: -15px;\n }\n\n fieldset {\n border-radius: var(--border-radius);\n border: var(--border-dim-color);\n margin: var(--fieldset-margin);\n padding: var(--fieldset-padding);\n }\n\n legend {\n padding: var(--legend-padding);\n font-weight: bold;\n color: var(--legend-color);\n }\n\n [field-2column] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: 15px;\n }\n\n [field] {\n display: flex;\n flex-direction: column;\n position: relative;\n }\n\n [grid-span] {\n grid-column: span 2;\n }\n\n button {\n display: flex;\n align-items: center;\n gap: var(--spacing-small);\n }\n\n button,\n input[type='submit'],\n [button-in-field] {\n background-color: var(--button-background-color);\n border: var(--button-border);\n border-radius: var(--button-border-radius);\n padding: var(--button-padding);\n color: var(--button-color);\n font: var(--button-font);\n text-transform: var(--button-text-transform);\n\n margin: var(--spacing-medium) 0 var(--spacing-medium) var(--spacing-medium);\n float: right;\n text-decoration: none;\n }\n\n button:hover,\n input[type='submit']:hover {\n border: var(--button-activ-border);\n box-shadow: var(--button-active-box-shadow);\n }\n\n [button-in-field] {\n border-radius: 0 var(--button-border-radius) var(--button-border-radius) 0;\n position: absolute;\n top: 12px;\n right: 0;\n max-height: 36px;\n }\n\n [input-hint] {\n font: var(--input-hint-font);\n color: var(--input-hint-color);\n }\n\n @media screen and (max-width: 480px) {\n [field] {\n grid-column: span 2;\n }\n }\n `\n ]\n\n @property({ type: Object }) application: any\n @queryAll('[clipboard-copy]') copybuttons\n private clipboard?: Clipboard\n\n get context() {\n return {\n title: {\n icon: 'apps',\n text: this.application.name\n }\n }\n }\n\n render() {\n var app = this.application || {}\n\n return html`\n <div>\n <h2><md-icon>apps</md-icon> ${app.name}</h2>\n <p page-description>${app.description}</p>\n </div>\n\n <div icon>\n <img src=${app.icon} />\n </div>\n\n <form>\n <div fieldset-container>\n <fieldset>\n <legend>application</legend>\n <div field-2column>\n <div field grid-span>\n <label for=\"name\">app name</label>\n <input id=\"name\" type=\"text\" name=\"name\" .value=${app.name} />\n </div>\n\n <div field grid-span>\n <label for=\"description\">description</label>\n <input id=\"description\" type=\"text\" name=\"description\" .value=${app.description} />\n </div>\n\n <div field grid-span>\n <label for=\"email\">contact email</label>\n <input id=\"email\" type=\"text\" name=\"email\" .value=${app.email} />\n </div>\n\n <div field grid-span>\n <label for=\"type-selector\">type</label>\n <select id=\"type-selector\" name=\"type\">\n ${APPLICATION_TYPES.map(\n type =>\n html`<option value=\"${app.type}\" ?selected=\"${type === app.type ? true : false}\">${type}</option>`\n )}\n </select>\n </div>\n\n <div field grid-span>\n <label for=\"url\">application URL</label>\n <input id=\"url\" type=\"text\" name=\"url\" .value=${app.url} />\n </div>\n\n <div field grid-span>\n <label for=\"icon\">icon</label>\n <input id=\"icon\" type=\"text\" name=\"icon\" .value=${app.icon} />\n </div>\n\n <div field grid-span>\n <label for=\"redirect-url\">redirect URL</label>\n <input id=\"redirect-url\" type=\"text\" name=\"redirectUrl\" .value=${app.redirectUrl} />\n </div>\n\n <div field grid-span>\n <label for=\"webhook\">webhook</label>\n <input id=\"webhook\" type=\"text\" name=\"webhook\" .value=${app.webhook} />\n </div>\n\n <div field grid-span>\n <label for=\"available-scopes\">available-scopes</label>\n <input id=\"available-scopes\" type=\"text\" .value=${app.availableScopes} readonly />\n </div>\n\n <div field grid-span>\n <label for=\"auth-url\">auth URL</label>\n <input id=\"auth-url\" type=\"text\" .value=${app.authUrl} readonly />\n <button dense button-in-field clipboard-copy @click=${e => e.preventDefault()}>copy</button>\n The endpoint for authorization server. This is used to get the authorization code.\n </div>\n\n <div field grid-span>\n <label for=\"access-token-url\">access token URL</label>\n <input id=\"access-token-url\" type=\"text\" .value=${app.accessTokenUrl} readonly />\n <button dense button-in-field clipboard-copy @click=${e => e.preventDefault()}>copy</button>\n The endpoint for authentication server. This is used to exchange the authorization code for an access\n token.\n </div>\n </div>\n </fieldset>\n </div>\n\n <div fieldset-container>\n <fieldset>\n <legend>credentials</legend>\n <div field-2column>\n <div field grid-span>\n <label for=\"app-key\">appKey</label>\n <input id=\"app-key\" type=\"text\" .value=${app.appKey} readonly />\n <button dense button-in-field clipboard-copy @click=${e => e.preventDefault()}>copy</button>\n </div>\n\n <div field grid-span>\n <label for=\"app-secret\">appSecret</label>\n <input id=\"app-secret\" type=\"text\" .value=${app.appSecret} readonly />\n <button dense button-in-field clipboard-copy @click=${e => e.preventDefault()}>copy</button>\n </div>\n </div>\n </fieldset>\n </div>\n\n <div class=\"button-container\">\n <button danger @click=${this.deleteApplication.bind(this)}>\n <md-icon>delete_forever</md-icon>delete this app\n </button>\n <button @click=${this.updateApplication.bind(this)}><md-icon>save</md-icon>update</button>\n <button><md-icon>passkey</md-icon>generate new secret</button>\n </div>\n </form>\n `\n }\n\n firstUpdated() {\n this.clipboard = new Clipboard(this.copybuttons, {\n target: (trigger => trigger.parentElement.querySelector('input')) as any\n })\n }\n\n async pageUpdated(changes, lifecycle, before) {\n if (this.active) {\n await this.fetchApplication()\n }\n }\n\n async fetchApplication() {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n application(id: $id) {\n id\n name\n description\n email\n url\n icon\n redirectUrl\n authUrl\n accessTokenUrl\n webhook\n availableScopes\n appKey\n appSecret\n type\n }\n }\n `,\n variables: {\n id: this.lifecycle.resourceId\n }\n })\n\n this.application = response.data.application\n }\n\n async updateApplication(e) {\n e.preventDefault()\n\n const form = this.renderRoot.querySelector('form') as HTMLFormElement\n const formData = new FormData(form)\n\n const patch = Array.from(formData.entries()).reduce((patch, [key, value]) => {\n patch[key] = value\n return patch\n }, {})\n\n const id = this.lifecycle.resourceId\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $patch: ApplicationPatch!) {\n updateApplication(id: $id, patch: $patch) {\n id\n name\n description\n email\n url\n icon\n redirectUrl\n webhook\n appKey\n appSecret\n type\n }\n }\n `,\n variables: {\n id,\n patch\n }\n })\n\n if (response.errors) {\n console.error('update fail')\n } else {\n this.application = { ...this.application, ...response.data.updateApplication }\n console.log('update sucess')\n }\n }\n\n async deleteApplication(e) {\n e.preventDefault()\n\n const id = this.lifecycle.resourceId\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!) {\n deleteApplication(id: $id)\n }\n `,\n variables: {\n id\n }\n })\n\n const result = response.data.deleteApplication\n if (result) {\n console.log('delete sucess')\n navigate('applications')\n } else {\n console.error('delete fail')\n }\n }\n}\n"]}
|
|
@@ -12,78 +12,8 @@ let Applications = class Applications extends connect(store)(PageView) {
|
|
|
12
12
|
super(...arguments);
|
|
13
13
|
this.applications = [];
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
title: `applications`,
|
|
18
|
-
help: 'auth/application'
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
render() {
|
|
22
|
-
var apps = this.applications || [];
|
|
23
|
-
return html `
|
|
24
|
-
<div>
|
|
25
|
-
<h2>Registered Applications</h2>
|
|
26
|
-
<p page-description>
|
|
27
|
-
What type of app are you building?<br />Choose the app type that best suits the audience you’re building for.
|
|
28
|
-
</p>
|
|
29
|
-
|
|
30
|
-
<md-elevated-button @click=${e => navigate('application-register')}
|
|
31
|
-
>register new application</md-elevated-button
|
|
32
|
-
>
|
|
33
|
-
</div>
|
|
34
|
-
|
|
35
|
-
<table>
|
|
36
|
-
<tr>
|
|
37
|
-
<th>app name</th>
|
|
38
|
-
<th>API health</th>
|
|
39
|
-
<th>Installs</th>
|
|
40
|
-
<th>status</th>
|
|
41
|
-
</tr>
|
|
42
|
-
${apps.map(app => html `
|
|
43
|
-
<tr>
|
|
44
|
-
<td>
|
|
45
|
-
<a href=${`application/${app.id}`}>
|
|
46
|
-
<strong>${app.name}</strong>
|
|
47
|
-
${app.description}
|
|
48
|
-
</a>
|
|
49
|
-
</td>
|
|
50
|
-
<td>OK</td>
|
|
51
|
-
<td class="text-align-center">1</td>
|
|
52
|
-
<td>draft</td>
|
|
53
|
-
</tr>
|
|
54
|
-
`)}
|
|
55
|
-
</table>
|
|
56
|
-
|
|
57
|
-
<md-outlined-button @click=${e => navigate('app-bindings')}>bound applications ..</md-outlined-button>
|
|
58
|
-
`;
|
|
59
|
-
}
|
|
60
|
-
async pageUpdated(changes, lifecycle, before) {
|
|
61
|
-
if (this.active) {
|
|
62
|
-
this.applications = (await this.fetchApplications()).items;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
async fetchApplications() {
|
|
66
|
-
const response = await client.query({
|
|
67
|
-
query: gql `
|
|
68
|
-
query {
|
|
69
|
-
applications {
|
|
70
|
-
items {
|
|
71
|
-
id
|
|
72
|
-
name
|
|
73
|
-
description
|
|
74
|
-
}
|
|
75
|
-
total
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
`
|
|
79
|
-
});
|
|
80
|
-
if (!response.errors) {
|
|
81
|
-
return response.data.applications;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
Applications.styles = [
|
|
86
|
-
css `
|
|
15
|
+
static { this.styles = [
|
|
16
|
+
css `
|
|
87
17
|
:host {
|
|
88
18
|
background-color: var(--md-sys-color-background);
|
|
89
19
|
padding: var(--spacing-large);
|
|
@@ -170,7 +100,77 @@ Applications.styles = [
|
|
|
170
100
|
text-align: right;
|
|
171
101
|
}
|
|
172
102
|
`
|
|
173
|
-
];
|
|
103
|
+
]; }
|
|
104
|
+
get context() {
|
|
105
|
+
return {
|
|
106
|
+
title: `applications`,
|
|
107
|
+
help: 'auth/application'
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
render() {
|
|
111
|
+
var apps = this.applications || [];
|
|
112
|
+
return html `
|
|
113
|
+
<div>
|
|
114
|
+
<h2>Registered Applications</h2>
|
|
115
|
+
<p page-description>
|
|
116
|
+
What type of app are you building?<br />Choose the app type that best suits the audience you’re building for.
|
|
117
|
+
</p>
|
|
118
|
+
|
|
119
|
+
<md-elevated-button @click=${e => navigate('application-register')}
|
|
120
|
+
>register new application</md-elevated-button
|
|
121
|
+
>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<table>
|
|
125
|
+
<tr>
|
|
126
|
+
<th>app name</th>
|
|
127
|
+
<th>API health</th>
|
|
128
|
+
<th>Installs</th>
|
|
129
|
+
<th>status</th>
|
|
130
|
+
</tr>
|
|
131
|
+
${apps.map(app => html `
|
|
132
|
+
<tr>
|
|
133
|
+
<td>
|
|
134
|
+
<a href=${`application/${app.id}`}>
|
|
135
|
+
<strong>${app.name}</strong>
|
|
136
|
+
${app.description}
|
|
137
|
+
</a>
|
|
138
|
+
</td>
|
|
139
|
+
<td>OK</td>
|
|
140
|
+
<td class="text-align-center">1</td>
|
|
141
|
+
<td>draft</td>
|
|
142
|
+
</tr>
|
|
143
|
+
`)}
|
|
144
|
+
</table>
|
|
145
|
+
|
|
146
|
+
<md-outlined-button @click=${e => navigate('app-bindings')}>bound applications ..</md-outlined-button>
|
|
147
|
+
`;
|
|
148
|
+
}
|
|
149
|
+
async pageUpdated(changes, lifecycle, before) {
|
|
150
|
+
if (this.active) {
|
|
151
|
+
this.applications = (await this.fetchApplications()).items;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async fetchApplications() {
|
|
155
|
+
const response = await client.query({
|
|
156
|
+
query: gql `
|
|
157
|
+
query {
|
|
158
|
+
applications {
|
|
159
|
+
items {
|
|
160
|
+
id
|
|
161
|
+
name
|
|
162
|
+
description
|
|
163
|
+
}
|
|
164
|
+
total
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
`
|
|
168
|
+
});
|
|
169
|
+
if (!response.errors) {
|
|
170
|
+
return response.data.applications;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
174
|
__decorate([
|
|
175
175
|
property({ type: Array }),
|
|
176
176
|
__metadata("design:type", Array)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applications.js","sourceRoot":"","sources":["../../../client/pages/application/applications.ts"],"names":[],"mappings":";AAAA,OAAO,yCAAyC,CAAA;AAChD,OAAO,yCAAyC,CAAA;AAEhD,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAG1D,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;IAAnD;;QA2F6B,iBAAY,GAAU,EAAE,CAAA;IA8ErD,CAAC;
|
|
1
|
+
{"version":3,"file":"applications.js","sourceRoot":"","sources":["../../../client/pages/application/applications.ts"],"names":[],"mappings":";AAAA,OAAO,yCAAyC,CAAA;AAChD,OAAO,yCAAyC,CAAA;AAEhD,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAG1D,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;IAAnD;;QA2F6B,iBAAY,GAAU,EAAE,CAAA;IA8ErD,CAAC;aAxKQ,WAAM,GAAG;QACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsFF;KACF,AAxFY,CAwFZ;IAID,IAAI,OAAO;QACT,OAAO;YACL,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,kBAAkB;SACzB,CAAA;IACH,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAA;QAElC,OAAO,IAAI,CAAA;;;;;;;qCAOsB,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;;;;;;;;;;;;UAYhE,IAAI,CAAC,GAAG,CACR,GAAG,CAAC,EAAE,CAAC,IAAI,CAAA;;;0BAGK,eAAe,GAAG,CAAC,EAAE,EAAE;4BACrB,GAAG,CAAC,IAAI;oBAChB,GAAG,CAAC,WAAW;;;;;;;WAOxB,CACF;;;mCAG0B,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KAC3D,CAAA;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM;QAC1C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;OAWT;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAA;QACnC,CAAC;IACH,CAAC;;AA7E0B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;kDAAyB;AA3F/C,YAAY;IADjB,aAAa,CAAC,mBAAmB,CAAC;GAC7B,YAAY,CAyKjB","sourcesContent":["import '@material/web/button/elevated-button.js'\nimport '@material/web/button/outlined-button.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { client } from '@operato/graphql'\nimport { navigate, PageView, store } from '@operato/shell'\n\n@customElement('applications-page')\nclass Applications extends connect(store)(PageView) {\n static styles = [\n css`\n :host {\n background-color: var(--md-sys-color-background);\n padding: var(--spacing-large);\n\n overflow: auto;\n }\n\n md-elevated-button {\n text-transform: capitalize;\n }\n\n md-outlined-button {\n float: right;\n margin-top: var(--spacing-medium);\n text-transform: capitalize;\n }\n\n h2 {\n margin: var(--title-margin);\n font: var(--title-font);\n color: var(--title-text-color);\n }\n\n [page-description] {\n margin: var(--page-description-margin);\n font: var(--page-description-font);\n color: var(--page-description-color);\n }\n\n table {\n margin: var(--spacing-large) 0;\n width: 100%;\n border-collapse: collapse;\n }\n\n tr {\n background-color: var(--tr-background-color);\n }\n\n tr:nth-child(odd) {\n background-color: var(--tr-background-odd-color);\n }\n\n tr:hover {\n background-color: var(--tr-background-hover-color);\n }\n\n th {\n border-top: var(--th-border-top);\n border-bottom: var(--td-border-bottom);\n padding: var(--th-padding);\n\n font: var(--th-font);\n color: var(--th-color);\n text-transform: var(--th-text-transform);\n text-align: left;\n }\n\n td {\n padding: var(--td-padding);\n border-bottom: var(--td-border-bottom);\n font: var(--td-font);\n color: var(--td-color);\n }\n\n td a {\n font: var(--td-font);\n text-decoration: none;\n color: var(--md-sys-color-on-surface);\n }\n\n td a strong {\n font: bold 16px var(--theme-font);\n\n display: block;\n text-decoration: none;\n }\n\n .text-align-center {\n text-align: center;\n }\n\n .text-align-right {\n text-align: right;\n }\n `\n ]\n\n @property({ type: Array }) applications: any[] = []\n\n get context() {\n return {\n title: `applications`,\n help: 'auth/application'\n }\n }\n\n render() {\n var apps = this.applications || []\n\n return html`\n <div>\n <h2>Registered Applications</h2>\n <p page-description>\n What type of app are you building?<br />Choose the app type that best suits the audience you’re building for.\n </p>\n\n <md-elevated-button @click=${e => navigate('application-register')}\n >register new application</md-elevated-button\n >\n </div>\n\n <table>\n <tr>\n <th>app name</th>\n <th>API health</th>\n <th>Installs</th>\n <th>status</th>\n </tr>\n ${apps.map(\n app => html`\n <tr>\n <td>\n <a href=${`application/${app.id}`}>\n <strong>${app.name}</strong>\n ${app.description}\n </a>\n </td>\n <td>OK</td>\n <td class=\"text-align-center\">1</td>\n <td>draft</td>\n </tr>\n `\n )}\n </table>\n\n <md-outlined-button @click=${e => navigate('app-bindings')}>bound applications ..</md-outlined-button>\n `\n }\n\n async pageUpdated(changes, lifecycle, before) {\n if (this.active) {\n this.applications = (await this.fetchApplications()).items\n }\n }\n\n async fetchApplications() {\n const response = await client.query({\n query: gql`\n query {\n applications {\n items {\n id\n name\n description\n }\n total\n }\n }\n `\n })\n\n if (!response.errors) {\n return response.data.applications\n }\n }\n}\n"]}
|