@myrmidon/auth-jwt-admin 0.0.2 → 0.0.3
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/{esm2015/lib/auth-jwt-admin.module.js → esm2020/lib/auth-jwt-admin.module.mjs} +4 -4
- package/esm2020/lib/components/auth-jwt-registration/auth-jwt-registration.component.mjs +203 -0
- package/{esm2015/lib/components/confirm-dialog/confirm-dialog.component.js → esm2020/lib/components/confirm-dialog/confirm-dialog.component.mjs} +5 -10
- package/{esm2015/lib/components/password-strength-bar/password-strength-bar.component.js → esm2020/lib/components/password-strength-bar/password-strength-bar.component.mjs} +5 -9
- package/{esm2015/lib/components/state/users.paginator.js → esm2020/lib/components/state/users.paginator.mjs} +0 -0
- package/{esm2015/lib/components/state/users.query.js → esm2020/lib/components/state/users.query.mjs} +3 -3
- package/esm2020/lib/components/state/users.service.mjs +65 -0
- package/{esm2015/lib/components/state/users.store.js → esm2020/lib/components/state/users.store.mjs} +3 -3
- package/esm2020/lib/components/user-editor/user-editor.component.mjs +112 -0
- package/esm2020/lib/components/user-filter/user-filter.component.mjs +58 -0
- package/esm2020/lib/components/user-list/user-list.component.mjs +134 -0
- package/{esm2015/lib/services/auth-jwt-account.service.js → esm2020/lib/services/auth-jwt-account.service.mjs} +3 -3
- package/{esm2015/lib/services/dialog.service.js → esm2020/lib/services/dialog.service.mjs} +3 -3
- package/{esm2015/lib/validators/password.validators.js → esm2020/lib/validators/password.validators.mjs} +0 -0
- package/{esm2015/myrmidon-auth-jwt-admin.js → esm2020/myrmidon-auth-jwt-admin.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/myrmidon-auth-jwt-admin.mjs +1061 -0
- package/fesm2015/myrmidon-auth-jwt-admin.mjs.map +1 -0
- package/{fesm2015/myrmidon-auth-jwt-admin.js → fesm2020/myrmidon-auth-jwt-admin.mjs} +50 -78
- package/fesm2020/myrmidon-auth-jwt-admin.mjs.map +1 -0
- package/package.json +22 -9
- package/bundles/myrmidon-auth-jwt-admin.umd.js +0 -1466
- package/bundles/myrmidon-auth-jwt-admin.umd.js.map +0 -1
- package/esm2015/lib/components/auth-jwt-registration/auth-jwt-registration.component.js +0 -207
- package/esm2015/lib/components/state/users.service.js +0 -65
- package/esm2015/lib/components/user-editor/user-editor.component.js +0 -118
- package/esm2015/lib/components/user-filter/user-filter.component.js +0 -63
- package/esm2015/lib/components/user-list/user-list.component.js +0 -138
- package/fesm2015/myrmidon-auth-jwt-admin.js.map +0 -1
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "./users.store";
|
|
4
|
-
import * as i2 from "../../services/auth-jwt-account.service";
|
|
5
|
-
export class UsersService {
|
|
6
|
-
constructor(_store, _accountService) {
|
|
7
|
-
this._store = _store;
|
|
8
|
-
this._accountService = _accountService;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Update the filter in the store.
|
|
12
|
-
* @param filter The filter.
|
|
13
|
-
*/
|
|
14
|
-
updateFilter(filter) {
|
|
15
|
-
this._store.update({
|
|
16
|
-
filter: filter,
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
setActive(name) {
|
|
20
|
-
this._store.setActive(name);
|
|
21
|
-
}
|
|
22
|
-
updateActive(user) {
|
|
23
|
-
const promise = new Promise((resolve, reject) => {
|
|
24
|
-
this._store.setLoading(true);
|
|
25
|
-
this._accountService.updateUser(user).subscribe((_) => {
|
|
26
|
-
this._store.setLoading(false);
|
|
27
|
-
this._store.setError(null);
|
|
28
|
-
this._store.updateActive((u) => {
|
|
29
|
-
return Object.assign({}, user);
|
|
30
|
-
});
|
|
31
|
-
resolve(true);
|
|
32
|
-
}, (error) => {
|
|
33
|
-
console.error(error);
|
|
34
|
-
this._store.setLoading(false);
|
|
35
|
-
this._store.setError('Error updating user');
|
|
36
|
-
resolve(false);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
return promise;
|
|
40
|
-
}
|
|
41
|
-
deleteUser(name) {
|
|
42
|
-
const promise = new Promise((resolve, reject) => {
|
|
43
|
-
this._store.setLoading(true);
|
|
44
|
-
this._accountService.deleteUser(name).subscribe((_) => {
|
|
45
|
-
this._store.setLoading(false);
|
|
46
|
-
this._store.setError(null);
|
|
47
|
-
this._store.remove(name);
|
|
48
|
-
resolve(true);
|
|
49
|
-
}, (error) => {
|
|
50
|
-
console.error(error);
|
|
51
|
-
this._store.setLoading(false);
|
|
52
|
-
this._store.setError('Error deleting user');
|
|
53
|
-
reject(error);
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
return promise;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
UsersService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: UsersService, deps: [{ token: i1.UsersStore }, { token: i2.AuthJwtAccountService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
60
|
-
UsersService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: UsersService, providedIn: 'root' });
|
|
61
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: UsersService, decorators: [{
|
|
62
|
-
type: Injectable,
|
|
63
|
-
args: [{ providedIn: 'root' }]
|
|
64
|
-
}], ctorParameters: function () { return [{ type: i1.UsersStore }, { type: i2.AuthJwtAccountService }]; } });
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2F1dGgtand0LWFkbWluL3NyYy9saWIvY29tcG9uZW50cy9zdGF0ZS91c2Vycy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFTM0MsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFDVSxNQUFrQixFQUNsQixlQUFzQztRQUR0QyxXQUFNLEdBQU4sTUFBTSxDQUFZO1FBQ2xCLG9CQUFlLEdBQWYsZUFBZSxDQUF1QjtJQUM3QyxDQUFDO0lBRUo7OztPQUdHO0lBQ0ksWUFBWSxDQUFDLE1BQWtCO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ2pCLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFNBQVMsQ0FBQyxJQUFtQjtRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sWUFBWSxDQUFDLElBQVU7UUFDNUIsTUFBTSxPQUFPLEdBQXFCLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTdCLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FDN0MsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDSixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQzdCLHlCQUFZLElBQUksRUFBRztnQkFDckIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxVQUFVLENBQUMsSUFBWTtRQUM1QixNQUFNLE9BQU8sR0FBcUIsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUM3QyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDUixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzt5R0FoRVUsWUFBWTs2R0FBWixZQUFZLGNBREMsTUFBTTsyRkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICdAbXlybWlkb24vYXV0aC1qd3QtbG9naW4nO1xyXG5pbXBvcnQge1xyXG4gIEF1dGhKd3RBY2NvdW50U2VydmljZSxcclxuICBVc2VyRmlsdGVyLFxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGgtand0LWFjY291bnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJzU3RvcmUgfSBmcm9tICcuL3VzZXJzLnN0b3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVc2Vyc1NlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc3RvcmU6IFVzZXJzU3RvcmUsXHJcbiAgICBwcml2YXRlIF9hY2NvdW50U2VydmljZTogQXV0aEp3dEFjY291bnRTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGZpbHRlciBpbiB0aGUgc3RvcmUuXHJcbiAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyLlxyXG4gICAqL1xyXG4gIHB1YmxpYyB1cGRhdGVGaWx0ZXIoZmlsdGVyOiBVc2VyRmlsdGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdG9yZS51cGRhdGUoe1xyXG4gICAgICBmaWx0ZXI6IGZpbHRlcixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEFjdGl2ZShuYW1lOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdG9yZS5zZXRBY3RpdmUobmFtZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQWN0aXZlKHVzZXI6IFVzZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHByb21pc2U6IFByb21pc2U8Ym9vbGVhbj4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuX3N0b3JlLnNldExvYWRpbmcodHJ1ZSk7XHJcblxyXG4gICAgICB0aGlzLl9hY2NvdW50U2VydmljZS51cGRhdGVVc2VyKHVzZXIpLnN1YnNjcmliZShcclxuICAgICAgICAoXykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fc3RvcmUuc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl9zdG9yZS5zZXRFcnJvcihudWxsKTtcclxuICAgICAgICAgIHRoaXMuX3N0b3JlLnVwZGF0ZUFjdGl2ZSgodSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4geyAuLi51c2VyIH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5fc3RvcmUuc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl9zdG9yZS5zZXRFcnJvcignRXJyb3IgdXBkYXRpbmcgdXNlcicpO1xyXG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVVc2VyKG5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcHJvbWlzZTogUHJvbWlzZTxib29sZWFuPiA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5fc3RvcmUuc2V0TG9hZGluZyh0cnVlKTtcclxuXHJcbiAgICAgIHRoaXMuX2FjY291bnRTZXJ2aWNlLmRlbGV0ZVVzZXIobmFtZSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChfKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9zdG9yZS5zZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuX3N0b3JlLnNldEVycm9yKG51bGwpO1xyXG4gICAgICAgICAgdGhpcy5fc3RvcmUucmVtb3ZlKG5hbWUpO1xyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLl9zdG9yZS5zZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuX3N0b3JlLnNldEVycm9yKCdFcnJvciBkZWxldGluZyB1c2VyJyk7XHJcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb21pc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { Validators, } from '@angular/forms';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/forms";
|
|
5
|
-
import * as i2 from "@myrmidon/auth-jwt-login";
|
|
6
|
-
import * as i3 from "@angular/material/form-field";
|
|
7
|
-
import * as i4 from "@angular/material/checkbox";
|
|
8
|
-
import * as i5 from "@angular/material/button";
|
|
9
|
-
import * as i6 from "@angular/material/icon";
|
|
10
|
-
import * as i7 from "@angular/material/input";
|
|
11
|
-
import * as i8 from "@angular/common";
|
|
12
|
-
import * as i9 from "@angular/material/tooltip";
|
|
13
|
-
export class UserEditorComponent {
|
|
14
|
-
constructor(formBuilder, _authService) {
|
|
15
|
-
this._authService = _authService;
|
|
16
|
-
// events
|
|
17
|
-
this.userChange = new EventEmitter();
|
|
18
|
-
this.editorClose = new EventEmitter();
|
|
19
|
-
// form
|
|
20
|
-
this.email = formBuilder.control(null, [
|
|
21
|
-
Validators.required,
|
|
22
|
-
Validators.email,
|
|
23
|
-
]);
|
|
24
|
-
this.emailConfirmed = formBuilder.control(false);
|
|
25
|
-
this.lockoutEnabled = formBuilder.control(false);
|
|
26
|
-
this.firstName = formBuilder.control(null, [
|
|
27
|
-
Validators.required,
|
|
28
|
-
Validators.maxLength(50),
|
|
29
|
-
]);
|
|
30
|
-
this.lastName = formBuilder.control(null, [
|
|
31
|
-
Validators.required,
|
|
32
|
-
Validators.maxLength(50),
|
|
33
|
-
]);
|
|
34
|
-
this.roles = formBuilder.control(null, Validators.maxLength(200));
|
|
35
|
-
this.form = formBuilder.group({
|
|
36
|
-
email: this.email,
|
|
37
|
-
emailConfirmed: this.emailConfirmed,
|
|
38
|
-
lockoutEnabled: this.lockoutEnabled,
|
|
39
|
-
firstName: this.firstName,
|
|
40
|
-
lastName: this.lastName,
|
|
41
|
-
roles: this.roles,
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
set user(value) {
|
|
45
|
-
this._user = value;
|
|
46
|
-
this.updateForm(value);
|
|
47
|
-
}
|
|
48
|
-
get user() {
|
|
49
|
-
return this._user;
|
|
50
|
-
}
|
|
51
|
-
ngOnInit() { }
|
|
52
|
-
updateForm(user) {
|
|
53
|
-
var _a;
|
|
54
|
-
if (!user) {
|
|
55
|
-
this.form.reset();
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
this.email.setValue(user.email);
|
|
59
|
-
this.emailConfirmed.setValue(user.emailConfirmed);
|
|
60
|
-
this.lockoutEnabled.setValue(user.lockoutEnabled);
|
|
61
|
-
this.firstName.setValue(user.firstName);
|
|
62
|
-
this.lastName.setValue(user.lastName);
|
|
63
|
-
if (((_a = user.roles) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
64
|
-
this.roles.setValue(user.roles.join(' '));
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
this.roles.setValue(null);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
getUserFromForm() {
|
|
72
|
-
var _a;
|
|
73
|
-
return {
|
|
74
|
-
userName: ((_a = this._user) === null || _a === void 0 ? void 0 : _a.userName) || '',
|
|
75
|
-
email: this.email.value,
|
|
76
|
-
emailConfirmed: this.emailConfirmed.value,
|
|
77
|
-
lockoutEnabled: this.lockoutEnabled.value,
|
|
78
|
-
firstName: this.firstName.value,
|
|
79
|
-
lastName: this.lastName.value,
|
|
80
|
-
roles: this.roles.value
|
|
81
|
-
? this.roles.value.split(' ').filter((s) => s)
|
|
82
|
-
: [],
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
endLockout() {
|
|
86
|
-
if (this.unlocked) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
this._user.lockoutEnd = this._authService.getUTCDate();
|
|
90
|
-
this.unlocked = true;
|
|
91
|
-
}
|
|
92
|
-
close() {
|
|
93
|
-
this.editorClose.emit();
|
|
94
|
-
}
|
|
95
|
-
save() {
|
|
96
|
-
if (this.form.invalid) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
this.userChange.emit(this.getUserFromForm());
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
UserEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: UserEditorComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AuthJwtService }], target: i0.ɵɵFactoryTarget.Component });
|
|
103
|
-
UserEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: UserEditorComponent, selector: "auth-jwt-user-editor", inputs: { user: "user" }, outputs: { userChange: "userChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\n <!-- email -->\n <div>\n <mat-form-field>\n <input type=\"text\" matInput [formControl]=\"email\" placeholder=\"email\" />\n <mat-error\n *ngIf=\"email.hasError('required') && (email.dirty || email.touched)\"\n >\n email address required\n </mat-error>\n <mat-error\n *ngIf=\"email.hasError('pattern') && (email.dirty || email.touched)\"\n >\n invalid email address\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- emailConfirmed -->\n <div>\n <mat-checkbox [formControl]=\"emailConfirmed\"\n >email address confirmed</mat-checkbox\n >\n </div>\n\n <!-- lockoutEnabled -->\n <div>\n <mat-checkbox [formControl]=\"lockoutEnabled\"\n >lockout enabled</mat-checkbox\n >\n \n <button\n mat-stroked-button\n (click)=\"endLockout()\"\n [disabled]=\"unlocked\"\n matTooltip=\"Unlock this user if locked\"\n >\n unlock\n </button>\n </div>\n\n <!-- firstName -->\n <div>\n <mat-form-field>\n <input\n type=\"text\"\n matInput\n [formControl]=\"firstName\"\n placeholder=\"first name\"\n />\n <mat-error\n *ngIf=\"\n firstName.hasError('required') &&\n (firstName.dirty || firstName.touched)\n \"\n >\n first name required\n </mat-error>\n <mat-error\n *ngIf=\"\n firstName.hasError('maxlength') &&\n (firstName.dirty || firstName.touched)\n \"\n >\n first name too long\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- lastName -->\n <div>\n <mat-form-field>\n <input\n type=\"text\"\n matInput\n [formControl]=\"lastName\"\n placeholder=\"last name\"\n />\n <mat-error\n *ngIf=\"\n lastName.hasError('required') && (lastName.dirty || lastName.touched)\n \"\n >\n last name required\n </mat-error>\n <mat-error\n *ngIf=\"\n lastName.hasError('maxlength') && (lastName.dirty || lastName.touched)\n \"\n >\n last name too long\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- roles -->\n <div>\n <mat-form-field>\n <input\n type=\"text\"\n matInput\n [formControl]=\"roles\"\n placeholder=\"roles (separated by space)\"\n />\n <mat-error\n *ngIf=\"roles.hasError('maxlength') && (roles.dirty || roles.touched)\"\n >\n too long\n </mat-error>\n </mat-form-field>\n </div>\n\n <!-- buttons -->\n <br />\n <div>\n <button mat-icon-button color=\"warn\" matTooltip=\"Close\" (click)=\"close()\">\n <mat-icon>cancel</mat-icon>\n </button>\n \n <button\n type=\"submit\"\n mat-button\n color=\"primary\"\n [disabled]=\"form.invalid\"\n matTooltip=\"Save user data\"\n >\n <mat-icon>check_circle</mat-icon> save\n </button>\n </div>\n</form>\n", styles: [""], components: [{ type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatError, selector: "mat-error", inputs: ["id"] }, { type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
104
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: UserEditorComponent, decorators: [{
|
|
105
|
-
type: Component,
|
|
106
|
-
args: [{
|
|
107
|
-
selector: 'auth-jwt-user-editor',
|
|
108
|
-
templateUrl: './user-editor.component.html',
|
|
109
|
-
styleUrls: ['./user-editor.component.css'],
|
|
110
|
-
}]
|
|
111
|
-
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.AuthJwtService }]; }, propDecorators: { user: [{
|
|
112
|
-
type: Input
|
|
113
|
-
}], userChange: [{
|
|
114
|
-
type: Output
|
|
115
|
-
}], editorClose: [{
|
|
116
|
-
type: Output
|
|
117
|
-
}] } });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vYXV0aC1qd3QtYWRtaW4vc3JjL2xpYi9jb21wb25lbnRzL3VzZXItZWRpdG9yL3VzZXItZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2F1dGgtand0LWFkbWluL3NyYy9saWIvY29tcG9uZW50cy91c2VyLWVkaXRvci91c2VyLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFJTCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFReEIsTUFBTSxPQUFPLG1CQUFtQjtJQXdCOUIsWUFBWSxXQUF3QixFQUFVLFlBQTRCO1FBQTVCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUN4RSxTQUFTO1FBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMzQyxPQUFPO1FBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNyQyxVQUFVLENBQUMsUUFBUTtZQUNuQixVQUFVLENBQUMsS0FBSztTQUNqQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcs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QUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEQsQ0FBQyxDQUFDLEVBQUU7U0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVNLFVBQVU7UUFDZixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEtBQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLElBQUk7UUFDVCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3JCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7O2dIQXpHVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix5SkNkaEMsdy9GQWtJQTsyRkRwSGEsbUJBQW1CO2tCQUwvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFdBQVcsRUFBRSw4QkFBOEI7b0JBQzNDLFNBQVMsRUFBRSxDQUFDLDZCQUE2QixDQUFDO2lCQUMzQzsrSEFjcUIsSUFBSTtzQkFBdkIsS0FBSztnQkFRSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3JtR3JvdXAsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtQnVpbGRlcixcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXV0aEp3dFNlcnZpY2UsIFVzZXIgfSBmcm9tICdAbXlybWlkb24vYXV0aC1qd3QtbG9naW4nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdXRoLWp3dC11c2VyLWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VzZXItZWRpdG9yLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVXNlckVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgX3VzZXI6IFVzZXIgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGVtYWlsOiBGb3JtQ29udHJvbDtcbiAgcHVibGljIGVtYWlsQ29uZmlybWVkOiBGb3JtQ29udHJvbDtcbiAgcHVibGljIGxvY2tvdXRFbmFibGVkOiBGb3JtQ29udHJvbDtcbiAgcHVibGljIGZpcnN0TmFtZTogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBsYXN0TmFtZTogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyByb2xlczogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XG5cbiAgcHVibGljIHVubG9ja2VkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgdXNlcih2YWx1ZTogVXNlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3VzZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUZvcm0odmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgdXNlcigpOiBVc2VyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlcjtcbiAgfVxuXG4gIEBPdXRwdXQoKSB1c2VyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VXNlcj47XG4gIEBPdXRwdXQoKSBlZGl0b3JDbG9zZTogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aEp3dFNlcnZpY2UpIHtcbiAgICAvLyBldmVudHNcbiAgICB0aGlzLnVzZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFVzZXI+KCk7XG4gICAgdGhpcy5lZGl0b3JDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIC8vIGZvcm1cbiAgICB0aGlzLmVtYWlsID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBbXG4gICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgVmFsaWRhdG9ycy5lbWFpbCxcbiAgICBdKTtcbiAgICB0aGlzLmVtYWlsQ29uZmlybWVkID0gZm9ybUJ1aWxkZXIuY29udHJvbChmYWxzZSk7XG4gICAgdGhpcy5sb2Nrb3V0RW5hYmxlZCA9IGZvcm1CdWlsZGVyLmNvbnRyb2woZmFsc2UpO1xuICAgIHRoaXMuZmlyc3ROYW1lID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBbXG4gICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApLFxuICAgIF0pO1xuICAgIHRoaXMubGFzdE5hbWUgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFtcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCksXG4gICAgXSk7XG4gICAgdGhpcy5yb2xlcyA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjAwKSk7XG5cbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBlbWFpbDogdGhpcy5lbWFpbCxcbiAgICAgIGVtYWlsQ29uZmlybWVkOiB0aGlzLmVtYWlsQ29uZmlybWVkLFxuICAgICAgbG9ja291dEVuYWJsZWQ6IHRoaXMubG9ja291dEVuYWJsZWQsXG4gICAgICBmaXJzdE5hbWU6IHRoaXMuZmlyc3ROYW1lLFxuICAgICAgbGFzdE5hbWU6IHRoaXMubGFzdE5hbWUsXG4gICAgICByb2xlczogdGhpcy5yb2xlcyxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBwcml2YXRlIHVwZGF0ZUZvcm0odXNlcjogVXNlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghdXNlcikge1xuICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1haWwuc2V0VmFsdWUodXNlci5lbWFpbCk7XG4gICAgICB0aGlzLmVtYWlsQ29uZmlybWVkLnNldFZhbHVlKHVzZXIuZW1haWxDb25maXJtZWQpO1xuICAgICAgdGhpcy5sb2Nrb3V0RW5hYmxlZC5zZXRWYWx1ZSh1c2VyLmxvY2tvdXRFbmFibGVkKTtcbiAgICAgIHRoaXMuZmlyc3ROYW1lLnNldFZhbHVlKHVzZXIuZmlyc3ROYW1lKTtcbiAgICAgIHRoaXMubGFzdE5hbWUuc2V0VmFsdWUodXNlci5sYXN0TmFtZSk7XG4gICAgICBpZiAodXNlci5yb2xlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnJvbGVzLnNldFZhbHVlKHVzZXIucm9sZXMuam9pbignICcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucm9sZXMuc2V0VmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRVc2VyRnJvbUZvcm0oKTogVXNlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXJOYW1lOiB0aGlzLl91c2VyPy51c2VyTmFtZSB8fCAnJyxcbiAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLnZhbHVlLFxuICAgICAgZW1haWxDb25maXJtZWQ6IHRoaXMuZW1haWxDb25maXJtZWQudmFsdWUsXG4gICAgICBsb2Nrb3V0RW5hYmxlZDogdGhpcy5sb2Nrb3V0RW5hYmxlZC52YWx1ZSxcbiAgICAgIGZpcnN0TmFtZTogdGhpcy5maXJzdE5hbWUudmFsdWUsXG4gICAgICBsYXN0TmFtZTogdGhpcy5sYXN0TmFtZS52YWx1ZSxcbiAgICAgIHJvbGVzOiB0aGlzLnJvbGVzLnZhbHVlXG4gICAgICAgID8gdGhpcy5yb2xlcy52YWx1ZS5zcGxpdCgnICcpLmZpbHRlcigoczogc3RyaW5nKSA9PiBzKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZW5kTG9ja291dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51bmxvY2tlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl91c2VyIS5sb2Nrb3V0RW5kID0gdGhpcy5fYXV0aFNlcnZpY2UuZ2V0VVRDRGF0ZSgpO1xuICAgIHRoaXMudW5sb2NrZWQgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yQ2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXNlckNoYW5nZS5lbWl0KHRoaXMuZ2V0VXNlckZyb21Gb3JtKCkpO1xuICB9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInNhdmUoKVwiPlxuICA8IS0tIGVtYWlsIC0tPlxuICA8ZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiZW1haWxcIiAvPlxuICAgICAgPG1hdC1lcnJvclxuICAgICAgICAqbmdJZj1cImVtYWlsLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIChlbWFpbC5kaXJ0eSB8fCBlbWFpbC50b3VjaGVkKVwiXG4gICAgICA+XG4gICAgICAgIGVtYWlsIGFkZHJlc3MgcmVxdWlyZWRcbiAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgPG1hdC1lcnJvclxuICAgICAgICAqbmdJZj1cImVtYWlsLmhhc0Vycm9yKCdwYXR0ZXJuJykgJiYgKGVtYWlsLmRpcnR5IHx8IGVtYWlsLnRvdWNoZWQpXCJcbiAgICAgID5cbiAgICAgICAgaW52YWxpZCBlbWFpbCBhZGRyZXNzXG4gICAgICA8L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8IS0tIGVtYWlsQ29uZmlybWVkIC0tPlxuICA8ZGl2PlxuICAgIDxtYXQtY2hlY2tib3ggW2Zvcm1Db250cm9sXT1cImVtYWlsQ29uZmlybWVkXCJcbiAgICAgID5lbWFpbCBhZGRyZXNzIGNvbmZpcm1lZDwvbWF0LWNoZWNrYm94XG4gICAgPlxuICA8L2Rpdj5cblxuICA8IS0tIGxvY2tvdXRFbmFibGVkIC0tPlxuICA8ZGl2PlxuICAgIDxtYXQtY2hlY2tib3ggW2Zvcm1Db250cm9sXT1cImxvY2tvdXRFbmFibGVkXCJcbiAgICAgID5sb2Nrb3V0IGVuYWJsZWQ8L21hdC1jaGVja2JveFxuICAgID5cbiAgICAmbmJzcDtcbiAgICA8YnV0dG9uXG4gICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgIChjbGljayk9XCJlbmRMb2Nrb3V0KClcIlxuICAgICAgW2Rpc2FibGVkXT1cInVubG9ja2VkXCJcbiAgICAgIG1hdFRvb2x0aXA9XCJVbmxvY2sgdGhpcyB1c2VyIGlmIGxvY2tlZFwiXG4gICAgPlxuICAgICAgdW5sb2NrXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDwhLS0gZmlyc3ROYW1lIC0tPlxuICA8ZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJmaXJzdE5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cImZpcnN0IG5hbWVcIlxuICAgICAgLz5cbiAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBmaXJzdE5hbWUuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiZcbiAgICAgICAgICAoZmlyc3ROYW1lLmRpcnR5IHx8IGZpcnN0TmFtZS50b3VjaGVkKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICBmaXJzdCBuYW1lIHJlcXVpcmVkXG4gICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBmaXJzdE5hbWUuaGFzRXJyb3IoJ21heGxlbmd0aCcpICYmXG4gICAgICAgICAgKGZpcnN0TmFtZS5kaXJ0eSB8fCBmaXJzdE5hbWUudG91Y2hlZClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgZmlyc3QgbmFtZSB0b28gbG9uZ1xuICAgICAgPC9tYXQtZXJyb3I+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPCEtLSBsYXN0TmFtZSAtLT5cbiAgPGRpdj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwibGFzdE5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cImxhc3QgbmFtZVwiXG4gICAgICAvPlxuICAgICAgPG1hdC1lcnJvclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGxhc3ROYW1lLmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmIChsYXN0TmFtZS5kaXJ0eSB8fCBsYXN0TmFtZS50b3VjaGVkKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICBsYXN0IG5hbWUgcmVxdWlyZWRcbiAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgPG1hdC1lcnJvclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGxhc3ROYW1lLmhhc0Vycm9yKCdtYXhsZW5ndGgnKSAmJiAobGFzdE5hbWUuZGlydHkgfHwgbGFzdE5hbWUudG91Y2hlZClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgbGFzdCBuYW1lIHRvbyBsb25nXG4gICAgICA8L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8IS0tIHJvbGVzIC0tPlxuICA8ZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJyb2xlc1wiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwicm9sZXMgKHNlcGFyYXRlZCBieSBzcGFjZSlcIlxuICAgICAgLz5cbiAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgKm5nSWY9XCJyb2xlcy5oYXNFcnJvcignbWF4bGVuZ3RoJykgJiYgKHJvbGVzLmRpcnR5IHx8IHJvbGVzLnRvdWNoZWQpXCJcbiAgICAgID5cbiAgICAgICAgdG9vIGxvbmdcbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDwhLS0gYnV0dG9ucyAtLT5cbiAgPGJyIC8+XG4gIDxkaXY+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJ3YXJuXCIgbWF0VG9vbHRpcD1cIkNsb3NlXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgICZuYnNwO1xuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgbWF0VG9vbHRpcD1cIlNhdmUgdXNlciBkYXRhXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj4gc2F2ZVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/forms";
|
|
4
|
-
import * as i2 from "../state/users.query";
|
|
5
|
-
import * as i3 from "../state/users.service";
|
|
6
|
-
import * as i4 from "@angular/material/form-field";
|
|
7
|
-
import * as i5 from "@angular/material/button";
|
|
8
|
-
import * as i6 from "@angular/material/icon";
|
|
9
|
-
import * as i7 from "@angular/material/input";
|
|
10
|
-
import * as i8 from "@angular/material/tooltip";
|
|
11
|
-
export class UserFilterComponent {
|
|
12
|
-
constructor(formBuilder, query, _corporaService) {
|
|
13
|
-
this._corporaService = _corporaService;
|
|
14
|
-
this.filter$ = query.selectFilter();
|
|
15
|
-
// form
|
|
16
|
-
this.name = formBuilder.control(null);
|
|
17
|
-
this.form = formBuilder.group({
|
|
18
|
-
name: this.name,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
ngOnInit() {
|
|
22
|
-
this.filter$.subscribe((f) => {
|
|
23
|
-
this.updateForm(f);
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
updateForm(filter) {
|
|
27
|
-
this.name.setValue(filter.name);
|
|
28
|
-
this.form.markAsPristine();
|
|
29
|
-
}
|
|
30
|
-
reset() {
|
|
31
|
-
this.form.reset();
|
|
32
|
-
this.apply();
|
|
33
|
-
}
|
|
34
|
-
getFilter() {
|
|
35
|
-
var _a;
|
|
36
|
-
return {
|
|
37
|
-
pageNumber: 1,
|
|
38
|
-
pageSize: 20,
|
|
39
|
-
name: (_a = this.name.value) === null || _a === void 0 ? void 0 : _a.trim(),
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
apply() {
|
|
43
|
-
if (this.form.invalid) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const filter = this.getFilter();
|
|
47
|
-
// update filter in state
|
|
48
|
-
this._corporaService.updateFilter(filter);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
UserFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: UserFilterComponent, deps: [{ token: i1.FormBuilder }, { token: i2.UsersQuery }, { token: i3.UsersService }], target: i0.ɵɵFactoryTarget.Component });
|
|
52
|
-
UserFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: UserFilterComponent, selector: "auth-jwt-user-filter", inputs: { disabled: "disabled" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"apply()\" ng-disabled=\"disabled\">\n <mat-form-field>\n <input matInput [formControl]=\"name\" placeholder=\"name or ID\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"reset()\"\n color=\"warn\"\n matTooltip=\"Reset filters\"\n [disabled]=\"disabled\"\n >\n <mat-icon>clear</mat-icon>\n </button>\n </mat-form-field>\n\n <button\n type=\"submit\"\n mat-icon-button\n color=\"primary\"\n [disabled]=\"disabled\"\n matTooltip=\"Apply filters\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n</form>\n", styles: [""], components: [{ type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i4.MatSuffix, selector: "[matSuffix]" }, { type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: UserFilterComponent, decorators: [{
|
|
54
|
-
type: Component,
|
|
55
|
-
args: [{
|
|
56
|
-
selector: 'auth-jwt-user-filter',
|
|
57
|
-
templateUrl: './user-filter.component.html',
|
|
58
|
-
styleUrls: ['./user-filter.component.css'],
|
|
59
|
-
}]
|
|
60
|
-
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.UsersQuery }, { type: i3.UsersService }]; }, propDecorators: { disabled: [{
|
|
61
|
-
type: Input
|
|
62
|
-
}] } });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vYXV0aC1qd3QtYWRtaW4vc3JjL2xpYi9jb21wb25lbnRzL3VzZXItZmlsdGVyL3VzZXItZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2F1dGgtand0LWFkbWluL3NyYy9saWIvY29tcG9uZW50cy91c2VyLWZpbHRlci91c2VyLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7OztBQVl6RCxNQUFNLE9BQU8sbUJBQW1CO0lBUzlCLFlBQ0UsV0FBd0IsRUFDeEIsS0FBaUIsRUFDVCxlQUE2QjtRQUE3QixvQkFBZSxHQUFmLGVBQWUsQ0FBYztRQUVyQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQyxPQUFPO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUM1QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sVUFBVSxDQUFDLE1BQWtCO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU8sU0FBUzs7UUFDZixPQUFPO1lBQ0wsVUFBVSxFQUFFLENBQUM7WUFDYixRQUFRLEVBQUUsRUFBRTtZQUNaLElBQUksRUFBRSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSywwQ0FBRSxJQUFJLEVBQUU7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNyQixPQUFPO1NBQ1I7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFaEMseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7O2dIQXZEVSxtQkFBbUI7b0dBQW5CLG1CQUFtQiw4RkNaaEMsdW9CQTBCQTsyRkRkYSxtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsNkJBQTZCLENBQUM7aUJBQzNDO3NKQUdRLFFBQVE7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVc2VyRmlsdGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC1qd3QtYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJzUXVlcnkgfSBmcm9tICcuLi9zdGF0ZS91c2Vycy5xdWVyeSc7XG5pbXBvcnQgeyBVc2Vyc1NlcnZpY2UgfSBmcm9tICcuLi9zdGF0ZS91c2Vycy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXV0aC1qd3QtdXNlci1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91c2VyLWZpbHRlci5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGZpbHRlciQ6IE9ic2VydmFibGU8VXNlckZpbHRlcj47XG5cbiAgcHVibGljIG5hbWU6IEZvcm1Db250cm9sO1xuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBxdWVyeTogVXNlcnNRdWVyeSxcbiAgICBwcml2YXRlIF9jb3Jwb3JhU2VydmljZTogVXNlcnNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuZmlsdGVyJCA9IHF1ZXJ5LnNlbGVjdEZpbHRlcigpO1xuXG4gICAgLy8gZm9ybVxuICAgIHRoaXMubmFtZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCk7XG4gICAgdGhpcy5mb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXIkLnN1YnNjcmliZSgoZikgPT4ge1xuICAgICAgdGhpcy51cGRhdGVGb3JtKGYpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGb3JtKGZpbHRlcjogVXNlckZpbHRlcik6IHZvaWQge1xuICAgIHRoaXMubmFtZS5zZXRWYWx1ZShmaWx0ZXIubmFtZSk7XG4gICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgdGhpcy5hcHBseSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWx0ZXIoKTogVXNlckZpbHRlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VOdW1iZXI6IDEsIC8vIG5vdCB1c2VkXG4gICAgICBwYWdlU2l6ZTogMjAsIC8vIG5vdCB1c2VkXG4gICAgICBuYW1lOiB0aGlzLm5hbWUudmFsdWU/LnRyaW0oKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFwcGx5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdldEZpbHRlcigpO1xuXG4gICAgLy8gdXBkYXRlIGZpbHRlciBpbiBzdGF0ZVxuICAgIHRoaXMuX2NvcnBvcmFTZXJ2aWNlLnVwZGF0ZUZpbHRlcihmaWx0ZXIpO1xuICB9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cImFwcGx5KClcIiBuZy1kaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cIm5hbWVcIiBwbGFjZWhvbGRlcj1cIm5hbWUgb3IgSURcIiAvPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJyZXNldCgpXCJcbiAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICBtYXRUb29sdGlwPVwiUmVzZXQgZmlsdGVyc1wiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgIG1hdC1pY29uLWJ1dHRvblxuICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBtYXRUb29sdGlwPVwiQXBwbHkgZmlsdGVyc1wiXG4gID5cbiAgICA8bWF0LWljb24+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG48L2Zvcm0+XG4iXX0=
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
3
|
-
import { map, startWith, switchMap, take, tap } from 'rxjs/operators';
|
|
4
|
-
import { USERS_PAGINATOR } from '../state/users.paginator';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../state/users.query";
|
|
7
|
-
import * as i2 from "../../services/auth-jwt-account.service";
|
|
8
|
-
import * as i3 from "../state/users.service";
|
|
9
|
-
import * as i4 from "../../services/dialog.service";
|
|
10
|
-
import * as i5 from "@myrmidon/auth-jwt-login";
|
|
11
|
-
import * as i6 from "@angular/forms";
|
|
12
|
-
import * as i7 from "../user-filter/user-filter.component";
|
|
13
|
-
import * as i8 from "@angular/material/progress-bar";
|
|
14
|
-
import * as i9 from "@angular/material/button";
|
|
15
|
-
import * as i10 from "@angular/material/icon";
|
|
16
|
-
import * as i11 from "@angular/material/paginator";
|
|
17
|
-
import * as i12 from "../user-editor/user-editor.component";
|
|
18
|
-
import * as i13 from "@angular/common";
|
|
19
|
-
import * as i14 from "@angular/material/tooltip";
|
|
20
|
-
import * as i15 from "@datorama/akita";
|
|
21
|
-
export class UserListComponent {
|
|
22
|
-
constructor(paginator, userQuery, _accountService, _usersService, _dialogService, _gravatarService, formBuilder) {
|
|
23
|
-
this.paginator = paginator;
|
|
24
|
-
this._accountService = _accountService;
|
|
25
|
-
this._usersService = _usersService;
|
|
26
|
-
this._dialogService = _dialogService;
|
|
27
|
-
this._gravatarService = _gravatarService;
|
|
28
|
-
this.pageSize = formBuilder.control(20);
|
|
29
|
-
this._refresh$ = new BehaviorSubject(0);
|
|
30
|
-
this._filter$ = userQuery.selectFilter();
|
|
31
|
-
// https://netbasal.com/manage-your-entities-with-akita-like-a-boss-768732f8d4d1
|
|
32
|
-
this.active$ = userQuery.selectActive();
|
|
33
|
-
this.pagination$ = combineLatest([
|
|
34
|
-
this.paginator.pageChanges,
|
|
35
|
-
this.pageSize.valueChanges.pipe(
|
|
36
|
-
// we are required to emit at least the initial value
|
|
37
|
-
// as combineLatest emits only if ALL observables have emitted
|
|
38
|
-
startWith(20),
|
|
39
|
-
// clear the cache when page size changes
|
|
40
|
-
tap((_) => {
|
|
41
|
-
this.paginator.clearCache();
|
|
42
|
-
})),
|
|
43
|
-
this._filter$.pipe(
|
|
44
|
-
// clear the cache when filters changed
|
|
45
|
-
tap((_) => {
|
|
46
|
-
this.paginator.clearCache();
|
|
47
|
-
})),
|
|
48
|
-
this._refresh$.pipe(
|
|
49
|
-
// clear the cache when forcing refresh
|
|
50
|
-
tap((_) => {
|
|
51
|
-
this.paginator.clearCache();
|
|
52
|
-
})),
|
|
53
|
-
]).pipe(
|
|
54
|
-
// for each emitted value, combine into a filter and use it
|
|
55
|
-
// to request the page from server
|
|
56
|
-
switchMap(([pageNumber, pageSize, filter, refresh]) => {
|
|
57
|
-
// const filter = { ...this._docsQuery.getValue().filter };
|
|
58
|
-
const f = Object.assign({}, filter);
|
|
59
|
-
f.pageNumber = pageNumber;
|
|
60
|
-
f.pageSize = pageSize;
|
|
61
|
-
const request = this.getRequest(f);
|
|
62
|
-
// update saved filters
|
|
63
|
-
this.paginator.metadata.set('filter', f);
|
|
64
|
-
return this.paginator.getPage(request);
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
67
|
-
ngOnDestroy() {
|
|
68
|
-
this.paginator.destroy();
|
|
69
|
-
}
|
|
70
|
-
getRequest(filter) {
|
|
71
|
-
return () => this._accountService.getUsers(filter).pipe(
|
|
72
|
-
// adapt server results to the paginator plugin
|
|
73
|
-
map((p) => {
|
|
74
|
-
return {
|
|
75
|
-
currentPage: p.pageNumber,
|
|
76
|
-
perPage: p.pageSize,
|
|
77
|
-
lastPage: p.pageCount,
|
|
78
|
-
data: p.items,
|
|
79
|
-
total: p.total,
|
|
80
|
-
};
|
|
81
|
-
}));
|
|
82
|
-
}
|
|
83
|
-
pageChange(event) {
|
|
84
|
-
// https://material.angular.io/components/paginator/api
|
|
85
|
-
this.paginator.setPage(event.pageIndex + 1);
|
|
86
|
-
if (event.pageSize !== this.pageSize.value) {
|
|
87
|
-
this.pageSize.setValue(event.pageSize);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
refresh() {
|
|
91
|
-
this.paginator.clearCache();
|
|
92
|
-
this._refresh$.next(this._refresh$.value + 1);
|
|
93
|
-
}
|
|
94
|
-
deleteUser(user) {
|
|
95
|
-
this._dialogService
|
|
96
|
-
.confirm('Confirm', `Delete User ${user.userName}?`)
|
|
97
|
-
.pipe(take(1))
|
|
98
|
-
.subscribe((yes) => {
|
|
99
|
-
if (!yes) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
this._usersService.deleteUser(user.userName).finally(() => {
|
|
103
|
-
this.refresh();
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
setActiveUser(user) {
|
|
108
|
-
this._usersService.setActive((user === null || user === void 0 ? void 0 : user.userName) || null);
|
|
109
|
-
}
|
|
110
|
-
resetActiveUser() {
|
|
111
|
-
this._usersService.setActive(null);
|
|
112
|
-
}
|
|
113
|
-
saveActiveUser(user) {
|
|
114
|
-
this._usersService.updateActive(user).finally(() => {
|
|
115
|
-
this.refresh();
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
onUserEditorClose() {
|
|
119
|
-
this.setActiveUser(null);
|
|
120
|
-
}
|
|
121
|
-
getGravatarUrl(email, size = 80) {
|
|
122
|
-
return this._gravatarService.buildGravatarUrl(email, size);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
UserListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: UserListComponent, deps: [{ token: USERS_PAGINATOR }, { token: i1.UsersQuery }, { token: i2.AuthJwtAccountService }, { token: i3.UsersService }, { token: i4.DialogService }, { token: i5.GravatarService }, { token: i6.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
126
|
-
UserListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: UserListComponent, selector: "auth-jwt-user-list", ngImport: i0, template: "<div\n gdAreas=\"filters | progress | list | pager | editor\"\n gdRows=\"80px 64px 2fr 40px 1fr\"\n gdColumns=\"1fr\"\n gdGap=\"8px\"\n>\n <div>\n <!-- filters -->\n <div gdArea=\"filters\">\n <auth-jwt-user-filter></auth-jwt-user-filter>\n </div>\n\n <!-- progress -->\n <div *ngIf=\"paginator.isLoading$ | async\" gdArea=\"progress\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <!-- list -->\n <div gdArea=\"list\" *ngIf=\"pagination$ | async as pagination\">\n <table>\n <thead>\n <td></td>\n <td></td>\n <td></td>\n <th>name</th>\n <th>first</th>\n <th>last</th>\n <th>email</th>\n <th>roles</th>\n <th>lock end</th>\n </thead>\n <tbody>\n <tr *ngFor=\"let user of pagination.data\">\n <td class=\"command\">\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Edit {{ user.userName }}\"\n color=\"primary\"\n (click)=\"setActiveUser(user)\"\n >\n <mat-icon>mode_edit</mat-icon>\n </button>\n </td>\n <td class=\"command\">\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Delete {{ user.userName }}\"\n color=\"warn\"\n (click)=\"deleteUser(user)\"\n >\n <mat-icon>remove_circle</mat-icon>\n </button>\n </td>\n <td>\n <img\n [src]=\"getGravatarUrl(user.email, 32)\"\n [alt]=\"user.userName\"\n />\n </td>\n <td>{{ user.userName }}</td>\n <td>{{ user.firstName }}</td>\n <td>{{ user.lastName }}</td>\n <td>\n <a [href]=\"'mailto:' + user.email\">{{ user.email }}</a>\n </td>\n <td>{{ user.roles?.join(\" \") }}</td>\n <td>{{ user.lockoutEnd }}</td>\n </tr>\n </tbody>\n </table>\n <!-- pagination -->\n <mat-paginator\n gdArea=\"pager\"\n gdAlignColumns=\"center\"\n gdAlignRows=\"start\"\n [length]=\"pagination.total\"\n [pageSize]=\"pageSize?.value\"\n [pageSizeOptions]=\"[20, 50, 75, 100]\"\n [pageIndex]=\"pagination.currentPage - 1\"\n [showFirstLastButtons]=\"true\"\n (page)=\"pageChange($event)\"\n ></mat-paginator>\n </div>\n </div>\n\n <!-- editor -->\n <div gdArea=\"editor\" *ngIf=\"active$ | async as active\">\n <fieldset>\n <legend>{{ active.userName }}</legend>\n <auth-jwt-user-editor\n [user]=\"active\"\n (userChange)=\"saveActiveUser($event)\"\n (editorClose)=\"resetActiveUser()\"\n ></auth-jwt-user-editor>\n </fieldset>\n </div>\n</div>\n", styles: ["tr:nth-child(odd){background-color:#f8f8f8}th{padding:0 8px;text-align:left;color:silver;font-weight:normal}td{padding:0 8px}td.command{width:24px}table{width:100%;border-collapse:collapse}fieldset{border:1px solid silver;border-radius:8px;padding:16px}\n"], components: [{ type: i7.UserFilterComponent, selector: "auth-jwt-user-filter", inputs: ["disabled"] }, { type: i8.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "mode", "value", "bufferValue"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i12.UserEditorComponent, selector: "auth-jwt-user-editor", inputs: ["user"], outputs: ["userChange", "editorClose"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "async": i13.AsyncPipe } });
|
|
127
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: UserListComponent, decorators: [{
|
|
128
|
-
type: Component,
|
|
129
|
-
args: [{
|
|
130
|
-
selector: 'auth-jwt-user-list',
|
|
131
|
-
templateUrl: './user-list.component.html',
|
|
132
|
-
styleUrls: ['./user-list.component.css'],
|
|
133
|
-
}]
|
|
134
|
-
}], ctorParameters: function () { return [{ type: i15.PaginatorPlugin, decorators: [{
|
|
135
|
-
type: Inject,
|
|
136
|
-
args: [USERS_PAGINATOR]
|
|
137
|
-
}] }, { type: i1.UsersQuery }, { type: i2.AuthJwtAccountService }, { type: i3.UsersService }, { type: i4.DialogService }, { type: i5.GravatarService }, { type: i6.FormBuilder }]; } });
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2F1dGgtand0LWFkbWluL3NyYy9saWIvY29tcG9uZW50cy91c2VyLWxpc3QvdXNlci1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2F1dGgtand0LWFkbWluL3NyYy9saWIvY29tcG9uZW50cy91c2VyLWxpc3QvdXNlci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFVdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVczRCxNQUFNLE9BQU8saUJBQWlCO0lBUTVCLFlBRVMsU0FBc0MsRUFDN0MsU0FBcUIsRUFDYixlQUFzQyxFQUN0QyxhQUEyQixFQUMzQixjQUE2QixFQUM3QixnQkFBaUMsRUFDekMsV0FBd0I7UUFOakIsY0FBUyxHQUFULFNBQVMsQ0FBNkI7UUFFckMsb0JBQWUsR0FBZixlQUFlLENBQXVCO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFHekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFB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QUNMLENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQWEsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUM1QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQzs7OEdBcElVLGlCQUFpQixrQkFTbEIsZUFBZTtrR0FUZCxpQkFBaUIsMERDekI5QixzN0ZBbUdBOzJGRDFFYSxpQkFBaUI7a0JBTDdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsV0FBVyxFQUFFLDRCQUE0QjtvQkFDekMsU0FBUyxFQUFFLENBQUMsMkJBQTJCLENBQUM7aUJBQ3pDOzswQkFVSSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uUmVzcG9uc2UsIFBhZ2luYXRvclBsdWdpbiB9IGZyb20gJ0BkYXRvcmFtYS9ha2l0YSc7XG5cbmltcG9ydCB7IEdyYXZhdGFyU2VydmljZSwgVXNlciB9IGZyb20gJ0BteXJtaWRvbi9hdXRoLWp3dC1sb2dpbic7XG5pbXBvcnQgeyBEYXRhUGFnZSB9IGZyb20gJ0BteXJtaWRvbi9uZy10b29scyc7XG5cbmltcG9ydCB7XG4gIEF1dGhKd3RBY2NvdW50U2VydmljZSxcbiAgVXNlckZpbHRlcixcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC1qd3QtYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IFVTRVJTX1BBR0lOQVRPUiB9IGZyb20gJy4uL3N0YXRlL3VzZXJzLnBhZ2luYXRvcic7XG5pbXBvcnQgeyBVc2Vyc1N0YXRlIH0gZnJvbSAnLi4vc3RhdGUvdXNlcnMuc3RvcmUnO1xuaW1wb3J0IHsgVXNlcnNRdWVyeSB9IGZyb20gJy4uL3N0YXRlL3VzZXJzLnF1ZXJ5JztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBVc2Vyc1NlcnZpY2UgfSBmcm9tICcuLi9zdGF0ZS91c2Vycy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXV0aC1qd3QtdXNlci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VzZXItbGlzdC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfcmVmcmVzaCQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIF9maWx0ZXIkOiBPYnNlcnZhYmxlPFVzZXJGaWx0ZXI+O1xuXG4gIHB1YmxpYyBwYWdpbmF0aW9uJDogT2JzZXJ2YWJsZTxQYWdpbmF0aW9uUmVzcG9uc2U8VXNlcj4+O1xuICBwdWJsaWMgcGFnZVNpemU6IEZvcm1Db250cm9sO1xuICBwdWJsaWMgYWN0aXZlJDogT2JzZXJ2YWJsZTxVc2VyIHwgdW5kZWZpbmVkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFVTRVJTX1BBR0lOQVRPUilcbiAgICBwdWJsaWMgcGFnaW5hdG9yOiBQYWdpbmF0b3JQbHVnaW48VXNlcnNTdGF0ZT4sXG4gICAgdXNlclF1ZXJ5OiBVc2Vyc1F1ZXJ5LFxuICAgIHByaXZhdGUgX2FjY291bnRTZXJ2aWNlOiBBdXRoSnd0QWNjb3VudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdXNlcnNTZXJ2aWNlOiBVc2Vyc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIF9ncmF2YXRhclNlcnZpY2U6IEdyYXZhdGFyU2VydmljZSxcbiAgICBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXJcbiAgKSB7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2woMjApO1xuICAgIHRoaXMuX3JlZnJlc2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgwKTtcbiAgICB0aGlzLl9maWx0ZXIkID0gdXNlclF1ZXJ5LnNlbGVjdEZpbHRlcigpO1xuICAgIC8vIGh0dHBzOi8vbmV0YmFzYWwuY29tL21hbmFnZS15b3VyLWVudGl0aWVzLXdpdGgtYWtpdGEtbGlrZS1hLWJvc3MtNzY4NzMyZjhkNGQxXG4gICAgdGhpcy5hY3RpdmUkID0gdXNlclF1ZXJ5LnNlbGVjdEFjdGl2ZTxVc2VyPigpO1xuXG4gICAgdGhpcy5wYWdpbmF0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUNoYW5nZXMsXG4gICAgICB0aGlzLnBhZ2VTaXplLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAvLyB3ZSBhcmUgcmVxdWlyZWQgdG8gZW1pdCBhdCBsZWFzdCB0aGUgaW5pdGlhbCB2YWx1ZVxuICAgICAgICAvLyBhcyBjb21iaW5lTGF0ZXN0IGVtaXRzIG9ubHkgaWYgQUxMIG9ic2VydmFibGVzIGhhdmUgZW1pdHRlZFxuICAgICAgICBzdGFydFdpdGgoMjApLFxuICAgICAgICAvLyBjbGVhciB0aGUgY2FjaGUgd2hlbiBwYWdlIHNpemUgY2hhbmdlc1xuICAgICAgICB0YXAoKF8pID0+IHtcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvci5jbGVhckNhY2hlKCk7XG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgdGhpcy5fZmlsdGVyJC5waXBlKFxuICAgICAgICAvLyBjbGVhciB0aGUgY2FjaGUgd2hlbiBmaWx0ZXJzIGNoYW5nZWRcbiAgICAgICAgdGFwKChfKSA9PiB7XG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IuY2xlYXJDYWNoZSgpO1xuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHRoaXMuX3JlZnJlc2gkLnBpcGUoXG4gICAgICAgIC8vIGNsZWFyIHRoZSBjYWNoZSB3aGVuIGZvcmNpbmcgcmVmcmVzaFxuICAgICAgICB0YXAoKF8pID0+IHtcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvci5jbGVhckNhY2hlKCk7XG4gICAgICAgIH0pXG4gICAgICApLFxuICAgIF0pLnBpcGUoXG4gICAgICAvLyBmb3IgZWFjaCBlbWl0dGVkIHZhbHVlLCBjb21iaW5lIGludG8gYSBmaWx0ZXIgYW5kIHVzZSBpdFxuICAgICAgLy8gdG8gcmVxdWVzdCB0aGUgcGFnZSBmcm9tIHNlcnZlclxuICAgICAgc3dpdGNoTWFwKChbcGFnZU51bWJlciwgcGFnZVNpemUsIGZpbHRlciwgcmVmcmVzaF0pID0+IHtcbiAgICAgICAgLy8gY29uc3QgZmlsdGVyID0geyAuLi50aGlzLl9kb2NzUXVlcnkuZ2V0VmFsdWUoKS5maWx0ZXIgfTtcbiAgICAgICAgY29uc3QgZiA9IHsgLi4uZmlsdGVyIH07XG4gICAgICAgIGYucGFnZU51bWJlciA9IHBhZ2VOdW1iZXI7XG4gICAgICAgIGYucGFnZVNpemUgPSBwYWdlU2l6ZTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZ2V0UmVxdWVzdChmKTtcbiAgICAgICAgLy8gdXBkYXRlIHNhdmVkIGZpbHRlcnNcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IubWV0YWRhdGEuc2V0KCdmaWx0ZXInLCBmKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdG9yLmdldFBhZ2UocmVxdWVzdCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRvci5kZXN0cm95KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlcXVlc3QoXG4gICAgZmlsdGVyOiBVc2VyRmlsdGVyXG4gICk6ICgpID0+IE9ic2VydmFibGU8UGFnaW5hdGlvblJlc3BvbnNlPFVzZXI+PiB7XG4gICAgcmV0dXJuICgpID0+XG4gICAgICB0aGlzLl9hY2NvdW50U2VydmljZS5nZXRVc2VycyhmaWx0ZXIpLnBpcGUoXG4gICAgICAgIC8vIGFkYXB0IHNlcnZlciByZXN1bHRzIHRvIHRoZSBwYWdpbmF0b3IgcGx1Z2luXG4gICAgICAgIG1hcCgocDogRGF0YVBhZ2U8VXNlcj4pID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VycmVudFBhZ2U6IHAucGFnZU51bWJlcixcbiAgICAgICAgICAgIHBlclBhZ2U6IHAucGFnZVNpemUsXG4gICAgICAgICAgICBsYXN0UGFnZTogcC5wYWdlQ291bnQsXG4gICAgICAgICAgICBkYXRhOiBwLml0ZW1zLFxuICAgICAgICAgICAgdG90YWw6IHAudG90YWwsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgcGFnZUNoYW5nZShldmVudDogUGFnZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2NvbXBvbmVudHMvcGFnaW5hdG9yL2FwaVxuICAgIHRoaXMucGFnaW5hdG9yLnNldFBhZ2UoZXZlbnQucGFnZUluZGV4ICsgMSk7XG4gICAgaWYgKGV2ZW50LnBhZ2VTaXplICE9PSB0aGlzLnBhZ2VTaXplLnZhbHVlKSB7XG4gICAgICB0aGlzLnBhZ2VTaXplLnNldFZhbHVlKGV2ZW50LnBhZ2VTaXplKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRvci5jbGVhckNhY2hlKCk7XG4gICAgdGhpcy5fcmVmcmVzaCQubmV4dCh0aGlzLl9yZWZyZXNoJC52YWx1ZSArIDEpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZVVzZXIodXNlcjogVXNlcik6IHZvaWQge1xuICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2VcbiAgICAgIC5jb25maXJtKCdDb25maXJtJywgYERlbGV0ZSBVc2VyICR7dXNlci51c2VyTmFtZX0/YClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCh5ZXMpID0+IHtcbiAgICAgICAgaWYgKCF5ZXMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXNlcnNTZXJ2aWNlLmRlbGV0ZVVzZXIodXNlci51c2VyTmFtZSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aXZlVXNlcih1c2VyOiBVc2VyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuX3VzZXJzU2VydmljZS5zZXRBY3RpdmUodXNlcj8udXNlck5hbWUgfHwgbnVsbCk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRBY3RpdmVVc2VyKCk6IHZvaWQge1xuICAgIHRoaXMuX3VzZXJzU2VydmljZS5zZXRBY3RpdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUFjdGl2ZVVzZXIodXNlcjogVXNlcik6IHZvaWQge1xuICAgIHRoaXMuX3VzZXJzU2VydmljZS51cGRhdGVBY3RpdmUodXNlcikuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblVzZXJFZGl0b3JDbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEFjdGl2ZVVzZXIobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0R3JhdmF0YXJVcmwoZW1haWw6IHN0cmluZywgc2l6ZSA9IDgwKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2dyYXZhdGFyU2VydmljZS5idWlsZEdyYXZhdGFyVXJsKGVtYWlsLCBzaXplKTtcbiAgfVxufVxuIiwiPGRpdlxuICBnZEFyZWFzPVwiZmlsdGVycyB8IHByb2dyZXNzIHwgbGlzdCB8IHBhZ2VyIHwgZWRpdG9yXCJcbiAgZ2RSb3dzPVwiODBweCA2NHB4IDJmciA0MHB4IDFmclwiXG4gIGdkQ29sdW1ucz1cIjFmclwiXG4gIGdkR2FwPVwiOHB4XCJcbj5cbiAgPGRpdj5cbiAgICA8IS0tIGZpbHRlcnMgLS0+XG4gICAgPGRpdiBnZEFyZWE9XCJmaWx0ZXJzXCI+XG4gICAgICA8YXV0aC1qd3QtdXNlci1maWx0ZXI+PC9hdXRoLWp3dC11c2VyLWZpbHRlcj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gcHJvZ3Jlc3MgLS0+XG4gICAgPGRpdiAqbmdJZj1cInBhZ2luYXRvci5pc0xvYWRpbmckIHwgYXN5bmNcIiBnZEFyZWE9XCJwcm9ncmVzc1wiPlxuICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGxpc3QgLS0+XG4gICAgPGRpdiBnZEFyZWE9XCJsaXN0XCIgKm5nSWY9XCJwYWdpbmF0aW9uJCB8IGFzeW5jIGFzIHBhZ2luYXRpb25cIj5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgIDx0aD5uYW1lPC90aD5cbiAgICAgICAgICA8dGg+Zmlyc3Q8L3RoPlxuICAgICAgICAgIDx0aD5sYXN0PC90aD5cbiAgICAgICAgICA8dGg+ZW1haWw8L3RoPlxuICAgICAgICAgIDx0aD5yb2xlczwvdGg+XG4gICAgICAgICAgPHRoPmxvY2sgZW5kPC90aD5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdXNlciBvZiBwYWdpbmF0aW9uLmRhdGFcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNvbW1hbmRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFZGl0IHt7IHVzZXIudXNlck5hbWUgfX1cIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZVVzZXIodXNlcilcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vZGVfZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNvbW1hbmRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJEZWxldGUge3sgdXNlci51c2VyTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlVXNlcih1c2VyKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cmVtb3ZlX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0R3JhdmF0YXJVcmwodXNlci5lbWFpbCwgMzIpXCJcbiAgICAgICAgICAgICAgICBbYWx0XT1cInVzZXIudXNlck5hbWVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD57eyB1c2VyLnVzZXJOYW1lIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZD57eyB1c2VyLmZpcnN0TmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3sgdXNlci5sYXN0TmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxhIFtocmVmXT1cIidtYWlsdG86JyArIHVzZXIuZW1haWxcIj57eyB1c2VyLmVtYWlsIH19PC9hPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD57eyB1c2VyLnJvbGVzPy5qb2luKFwiIFwiKSB9fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3sgdXNlci5sb2Nrb3V0RW5kIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDwhLS0gcGFnaW5hdGlvbiAtLT5cbiAgICAgIDxtYXQtcGFnaW5hdG9yXG4gICAgICAgIGdkQXJlYT1cInBhZ2VyXCJcbiAgICAgICAgZ2RBbGlnbkNvbHVtbnM9XCJjZW50ZXJcIlxuICAgICAgICBnZEFsaWduUm93cz1cInN0YXJ0XCJcbiAgICAgICAgW2xlbmd0aF09XCJwYWdpbmF0aW9uLnRvdGFsXCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplPy52YWx1ZVwiXG4gICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzIwLCA1MCwgNzUsIDEwMF1cIlxuICAgICAgICBbcGFnZUluZGV4XT1cInBhZ2luYXRpb24uY3VycmVudFBhZ2UgLSAxXCJcbiAgICAgICAgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIlxuICAgICAgICAocGFnZSk9XCJwYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvbWF0LXBhZ2luYXRvcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBlZGl0b3IgLS0+XG4gIDxkaXYgZ2RBcmVhPVwiZWRpdG9yXCIgKm5nSWY9XCJhY3RpdmUkIHwgYXN5bmMgYXMgYWN0aXZlXCI+XG4gICAgPGZpZWxkc2V0PlxuICAgICAgPGxlZ2VuZD57eyBhY3RpdmUudXNlck5hbWUgfX08L2xlZ2VuZD5cbiAgICAgIDxhdXRoLWp3dC11c2VyLWVkaXRvclxuICAgICAgICBbdXNlcl09XCJhY3RpdmVcIlxuICAgICAgICAodXNlckNoYW5nZSk9XCJzYXZlQWN0aXZlVXNlcigkZXZlbnQpXCJcbiAgICAgICAgKGVkaXRvckNsb3NlKT1cInJlc2V0QWN0aXZlVXNlcigpXCJcbiAgICAgID48L2F1dGgtand0LXVzZXItZWRpdG9yPlxuICAgIDwvZmllbGRzZXQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|