verben-authentication-ui 0.6.0 → 0.6.2
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/esm2022/lib/components/sign-in/sign-in.component.mjs +11 -4
- package/esm2022/lib/components/user-request-approval/facades/user-access-request.facade.mjs +46 -2
- package/esm2022/lib/components/user-request-approval/helper.mjs +21 -1
- package/esm2022/lib/components/user-request-approval/services/user-access-request.service.mjs +14 -1
- package/esm2022/lib/components/user-request-approval/states/user-access-request.state.mjs +8 -1
- package/esm2022/lib/components/user-request-approval/user-request-approval.component.mjs +3 -2
- package/esm2022/lib/components/user-request-approval/user-request-form/use-request-form.component.mjs +7 -1
- package/esm2022/lib/services/http-web-request.service.mjs +2 -2
- package/fesm2022/verben-authentication-ui.mjs +179 -86
- package/fesm2022/verben-authentication-ui.mjs.map +1 -1
- package/lib/components/sign-in/sign-in.component.d.ts +3 -2
- package/lib/components/user-request-approval/facades/user-access-request.facade.d.ts +4 -0
- package/lib/components/user-request-approval/helper.d.ts +3 -0
- package/lib/components/user-request-approval/services/user-access-request.service.d.ts +11 -0
- package/lib/components/user-request-approval/states/user-access-request.state.d.ts +4 -0
- package/lib/components/user-request-approval/user-request-approval.component.d.ts +1 -1
- package/lib/components/user-request-approval/user-request-form/use-request-form.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -61,7 +61,7 @@ class HttpWebRequestService {
|
|
|
61
61
|
buildHeaders() {
|
|
62
62
|
return {
|
|
63
63
|
'Content-Type': 'application/json',
|
|
64
|
-
'Authorization': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
|
|
64
|
+
'Authorization': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJNYWlsQWRkcmVzcyI6InZlcmJlbmFAZ21haWwuY29tIiwiQXBwbGljYXRpb24iOiIiLCJOYW1lIjoiVmVyYmVuYSBMb2dpYyBMaW1pdGVkIiwiUm9sZXMiOiIiLCJUZW5hbnRJZCI6IlBETFRDNiIsIlNlcnZpY2VOYW1lIjoiV2hpdGUzNjAiLCJuYmYiOjE3MzYxNjM1OTYsImV4cCI6MTczNjM3OTU5NiwiaWF0IjoxNzM2MTYzNTk2fQ.q5ErmDIP0NwKKRlVeb9_EfmrEfd8gsFzkNNszkTeTg4'
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
67
|
buildUrl(url, baseUrl) {
|
|
@@ -1185,6 +1185,7 @@ class SignInComponent {
|
|
|
1185
1185
|
utilService;
|
|
1186
1186
|
envSvc;
|
|
1187
1187
|
route;
|
|
1188
|
+
router;
|
|
1188
1189
|
headlingText = 'Sign in';
|
|
1189
1190
|
width = '';
|
|
1190
1191
|
maxWidth = '';
|
|
@@ -1245,12 +1246,13 @@ class SignInComponent {
|
|
|
1245
1246
|
LastName: '',
|
|
1246
1247
|
};
|
|
1247
1248
|
configData = null;
|
|
1248
|
-
constructor(fb, server, utilService, envSvc, route) {
|
|
1249
|
+
constructor(fb, server, utilService, envSvc, route, router) {
|
|
1249
1250
|
this.fb = fb;
|
|
1250
1251
|
this.server = server;
|
|
1251
1252
|
this.utilService = utilService;
|
|
1252
1253
|
this.envSvc = envSvc;
|
|
1253
1254
|
this.route = route;
|
|
1255
|
+
this.router = router;
|
|
1254
1256
|
this.loginForm = this.fb.group({
|
|
1255
1257
|
Email: new FormControl(null, [
|
|
1256
1258
|
Validators.required,
|
|
@@ -1388,6 +1390,11 @@ class SignInComponent {
|
|
|
1388
1390
|
catch (error) {
|
|
1389
1391
|
this.utilService.sendBI(false);
|
|
1390
1392
|
this.isLoading = false;
|
|
1393
|
+
this.router.navigate([], {
|
|
1394
|
+
queryParams: {},
|
|
1395
|
+
queryParamsHandling: 'merge',
|
|
1396
|
+
replaceUrl: true,
|
|
1397
|
+
});
|
|
1391
1398
|
console.error('Error during login:', error);
|
|
1392
1399
|
}
|
|
1393
1400
|
}
|
|
@@ -1405,13 +1412,13 @@ class SignInComponent {
|
|
|
1405
1412
|
padding: this.pd,
|
|
1406
1413
|
};
|
|
1407
1414
|
}
|
|
1408
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignInComponent, deps: [{ token: i1$1.FormBuilder }, { token: HttpWebRequestService }, { token: UtilService }, { token: EnvironmentService }, { token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
1415
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignInComponent, deps: [{ token: i1$1.FormBuilder }, { token: HttpWebRequestService }, { token: UtilService }, { token: EnvironmentService }, { token: i1$2.ActivatedRoute }, { token: i1$2.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
1409
1416
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SignInComponent, selector: "verben-sign-in", inputs: { headlingText: "headlingText", width: "width", maxWidth: "maxWidth", margin: "margin", pd: "pd", customClass: "customClass", headlingClass: "headlingClass", bgColor: "bgColor", boxShadow: "boxShadow", border: "border", borderRadius: "borderRadius", textColor: "textColor", height: "height", forgetPasswordClass: "forgetPasswordClass", requestAccessClass: "requestAccessClass", createAccountClass: "createAccountClass", createAccountLinkClass: "createAccountLinkClass", forgetPasswordLink: "forgetPasswordLink", createAccountLink: "createAccountLink", requestAccessLink: "requestAccessLink", btnClass: "btnClass", btnBgColor: "btnBgColor", btnColor: "btnColor", btnBorder: "btnBorder", btnBorderRadius: "btnBorderRadius", btnPd: "btnPd", btnText: "btnText", inputLabelColor: "inputLabelColor", inputBgColor: "inputBgColor", inputBorder: "inputBorder", inputBorderRadius: "inputBorderRadius", termsErrorText: "termsErrorText" }, outputs: { formSubmit: "formSubmit", onSubmitEnd: "onSubmitEnd", onGoogleAuthResponse: "onGoogleAuthResponse", onSubmitGoogleAuth: "onSubmitGoogleAuth", tenantConfigLoaded: "tenantConfigLoaded", googleClick: "googleClick", microsoftClick: "microsoftClick", appleClick: "appleClick" }, ngImport: i0, template: "<section\n[ngStyle]=\"styles\"\nclass=\"{{ customClass }}\"\n>\n <h2 class=\"{{headlingClass}}\">{{headlingText}}</h2>\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"submit('InApp')\" class=\"flexWrapper\"> \n <div class=\"formWrapper\" *ngIf=\"showform\"> \n <verbena-input\n [label]=\"'Email'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'email'\"\n formControlName=\"Email\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <div> \n <verbena-input\n [label]=\"'Password'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'password'\"\n formControlName=\"Password\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n [passwordToggle]=\"true\"\n [passLength]=\"5\"\n [customErrorMessages]=\"{\n password:'Password is required'\n }\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <div class=\"pwdWrapper\"> \n <p clas=\"mb-0\"> <a [routerLink]=\"forgetPasswordLink\" class=\"{{forgetPasswordClass}}\">Forgot password</a></p>\n </div>\n </div>\n <lib-button \n [buttonClass]=\"btnClass\"\n [color]=\"btnColor\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [bgColor]=\"btnBgColor\"\n [pd]=\"btnPd\"\n [text]=\"btnText\" \n type=\"submit\" \n [disabled]=\"!this.checkForm()\"\n ></lib-button>\n </div>\n <div> \n <p *ngIf=\"requestAccessLink\">\n <a [routerLink]=\"requestAccessLink\" class=\"{{requestAccessClass}}\">Click here to request user access</a>\n </p>\n <div> \n <div *ngIf=\"AuthMechanisms !== null\"> \n <verben-o-auth \n [authMechanisms]=\"AuthMechanisms\"\n ></verben-o-auth>\n </div>\n <p class=\"{{createAccountClass}}\" *ngIf=\"createAccountLink\">\n Don't have an account?\n <a [routerLink]=\"createAccountLink\" class=\"{{createAccountLinkClass}}\">Create an account</a>\n </p>\n </div>\n </div>\n </form>\n </section>\n ", styles: ["a{text-decoration:underline}.flexWrapper{display:flex;flex-direction:column;gap:20px;margin-top:12px}.formWrapper{display:flex;flex-direction:column;gap:20px}.pwdWrapper{display:flex;justify-content:flex-end;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "component", type: i2.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: OAuthComponent, selector: "verben-o-auth", inputs: ["authMechanisms"], outputs: ["emitMechanismFn"] }, { kind: "component", type: ButtonComponent, selector: "lib-button", inputs: ["text", "color", "border", "borderRadius", "bgColor", "width", "pd", "buttonClass", "disabled"], outputs: ["buttonClick"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
1410
1417
|
}
|
|
1411
1418
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignInComponent, decorators: [{
|
|
1412
1419
|
type: Component,
|
|
1413
1420
|
args: [{ selector: 'verben-sign-in', template: "<section\n[ngStyle]=\"styles\"\nclass=\"{{ customClass }}\"\n>\n <h2 class=\"{{headlingClass}}\">{{headlingText}}</h2>\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"submit('InApp')\" class=\"flexWrapper\"> \n <div class=\"formWrapper\" *ngIf=\"showform\"> \n <verbena-input\n [label]=\"'Email'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'email'\"\n formControlName=\"Email\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <div> \n <verbena-input\n [label]=\"'Password'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'password'\"\n formControlName=\"Password\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n [passwordToggle]=\"true\"\n [passLength]=\"5\"\n [customErrorMessages]=\"{\n password:'Password is required'\n }\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <div class=\"pwdWrapper\"> \n <p clas=\"mb-0\"> <a [routerLink]=\"forgetPasswordLink\" class=\"{{forgetPasswordClass}}\">Forgot password</a></p>\n </div>\n </div>\n <lib-button \n [buttonClass]=\"btnClass\"\n [color]=\"btnColor\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [bgColor]=\"btnBgColor\"\n [pd]=\"btnPd\"\n [text]=\"btnText\" \n type=\"submit\" \n [disabled]=\"!this.checkForm()\"\n ></lib-button>\n </div>\n <div> \n <p *ngIf=\"requestAccessLink\">\n <a [routerLink]=\"requestAccessLink\" class=\"{{requestAccessClass}}\">Click here to request user access</a>\n </p>\n <div> \n <div *ngIf=\"AuthMechanisms !== null\"> \n <verben-o-auth \n [authMechanisms]=\"AuthMechanisms\"\n ></verben-o-auth>\n </div>\n <p class=\"{{createAccountClass}}\" *ngIf=\"createAccountLink\">\n Don't have an account?\n <a [routerLink]=\"createAccountLink\" class=\"{{createAccountLinkClass}}\">Create an account</a>\n </p>\n </div>\n </div>\n </form>\n </section>\n ", styles: ["a{text-decoration:underline}.flexWrapper{display:flex;flex-direction:column;gap:20px;margin-top:12px}.formWrapper{display:flex;flex-direction:column;gap:20px}.pwdWrapper{display:flex;justify-content:flex-end;cursor:pointer}\n"] }]
|
|
1414
|
-
}], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: HttpWebRequestService }, { type: UtilService }, { type: EnvironmentService }, { type: i1$2.ActivatedRoute }], propDecorators: { headlingText: [{
|
|
1421
|
+
}], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: HttpWebRequestService }, { type: UtilService }, { type: EnvironmentService }, { type: i1$2.ActivatedRoute }, { type: i1$2.Router }], propDecorators: { headlingText: [{
|
|
1415
1422
|
type: Input
|
|
1416
1423
|
}], width: [{
|
|
1417
1424
|
type: Input
|
|
@@ -2650,6 +2657,104 @@ const baseStyle$2 = {
|
|
|
2650
2657
|
},
|
|
2651
2658
|
};
|
|
2652
2659
|
|
|
2660
|
+
var SearchOperator;
|
|
2661
|
+
(function (SearchOperator) {
|
|
2662
|
+
SearchOperator["And"] = "And";
|
|
2663
|
+
SearchOperator["Or"] = "Or";
|
|
2664
|
+
})(SearchOperator || (SearchOperator = {}));
|
|
2665
|
+
|
|
2666
|
+
var SearchPropertySign;
|
|
2667
|
+
(function (SearchPropertySign) {
|
|
2668
|
+
SearchPropertySign["EQ"] = "EQ";
|
|
2669
|
+
SearchPropertySign["NEQ"] = "NEQ";
|
|
2670
|
+
SearchPropertySign["GT"] = "GT";
|
|
2671
|
+
SearchPropertySign["GTE"] = "GTE";
|
|
2672
|
+
SearchPropertySign["LT"] = "LT";
|
|
2673
|
+
SearchPropertySign["LTE"] = "LTE";
|
|
2674
|
+
SearchPropertySign["LIKE"] = "LIKE";
|
|
2675
|
+
})(SearchPropertySign || (SearchPropertySign = {}));
|
|
2676
|
+
|
|
2677
|
+
var OAuthType;
|
|
2678
|
+
(function (OAuthType) {
|
|
2679
|
+
OAuthType["InApp"] = "InApp";
|
|
2680
|
+
OAuthType["Google"] = "Google";
|
|
2681
|
+
OAuthType["Facebook"] = "Facebook";
|
|
2682
|
+
OAuthType["OAuth"] = "OAuth";
|
|
2683
|
+
OAuthType["MicrosoftAD"] = "MicrosoftAD";
|
|
2684
|
+
})(OAuthType || (OAuthType = {}));
|
|
2685
|
+
|
|
2686
|
+
var UserAccessRequestStatus;
|
|
2687
|
+
(function (UserAccessRequestStatus) {
|
|
2688
|
+
UserAccessRequestStatus["Pending"] = "Pending";
|
|
2689
|
+
UserAccessRequestStatus["Approved"] = "Approved";
|
|
2690
|
+
UserAccessRequestStatus["Declined"] = "Declined";
|
|
2691
|
+
})(UserAccessRequestStatus || (UserAccessRequestStatus = {}));
|
|
2692
|
+
|
|
2693
|
+
var SearchPropertyValueType;
|
|
2694
|
+
(function (SearchPropertyValueType) {
|
|
2695
|
+
SearchPropertyValueType["Int"] = "Int";
|
|
2696
|
+
SearchPropertyValueType["Float"] = "Float";
|
|
2697
|
+
SearchPropertyValueType["Decimal"] = "Decimal";
|
|
2698
|
+
SearchPropertyValueType["Double"] = "Double";
|
|
2699
|
+
SearchPropertyValueType["String"] = "String";
|
|
2700
|
+
SearchPropertyValueType["Bool"] = "Bool";
|
|
2701
|
+
SearchPropertyValueType["Date"] = "Date";
|
|
2702
|
+
})(SearchPropertyValueType || (SearchPropertyValueType = {}));
|
|
2703
|
+
|
|
2704
|
+
const roles = [
|
|
2705
|
+
{ id: 'admin', name: 'Admin' },
|
|
2706
|
+
{ id: 'manager', name: 'Manager' },
|
|
2707
|
+
{ id: 'staff', name: 'Staff' },
|
|
2708
|
+
];
|
|
2709
|
+
const mockData = new Array(10)
|
|
2710
|
+
.fill(1)
|
|
2711
|
+
.map((id, i) => ({
|
|
2712
|
+
FirstName: `First ${id + i}`,
|
|
2713
|
+
LastName: `Last ${id + i}`,
|
|
2714
|
+
OtherName: `Other ${id + i}`,
|
|
2715
|
+
Id: id + i,
|
|
2716
|
+
id: (id + i).toString(),
|
|
2717
|
+
MailAddress: `user${id + i}@mail.com`,
|
|
2718
|
+
PhoneNumber: `+23480000000${id + i}`,
|
|
2719
|
+
RequestStatus: randomEnum$1(UserAccessRequestStatus),
|
|
2720
|
+
RoleID: roles[Math.floor(Math.random() * roles.length)].id,
|
|
2721
|
+
Password: '1234567',
|
|
2722
|
+
ExpireOn: new Date(),
|
|
2723
|
+
IsSeeded: false,
|
|
2724
|
+
OTPExpireOn: new Date(),
|
|
2725
|
+
Tenants: [],
|
|
2726
|
+
SignupType: OAuthType.InApp,
|
|
2727
|
+
CreatedAt: new Date(),
|
|
2728
|
+
UpdatedAt: new Date(),
|
|
2729
|
+
DataState: ObjectState.New,
|
|
2730
|
+
TenantId: `Tenant${id + i}`,
|
|
2731
|
+
Code: '',
|
|
2732
|
+
ServiceName: '',
|
|
2733
|
+
}));
|
|
2734
|
+
function randomEnum$1(anEnum) {
|
|
2735
|
+
const enumValues = Object.values(anEnum);
|
|
2736
|
+
const randomIndex = Math.floor(Math.random() * enumValues.length);
|
|
2737
|
+
return enumValues[randomIndex];
|
|
2738
|
+
}
|
|
2739
|
+
function convertDataFilterTypeToSearchPropertyValueType(type) {
|
|
2740
|
+
switch (type) {
|
|
2741
|
+
case DataFilterType.String:
|
|
2742
|
+
return SearchPropertyValueType.String;
|
|
2743
|
+
case DataFilterType.Integer:
|
|
2744
|
+
return SearchPropertyValueType.Int;
|
|
2745
|
+
case DataFilterType.Decimal:
|
|
2746
|
+
return SearchPropertyValueType.Decimal;
|
|
2747
|
+
case DataFilterType.Credit:
|
|
2748
|
+
return SearchPropertyValueType.Float;
|
|
2749
|
+
case DataFilterType.Date:
|
|
2750
|
+
return SearchPropertyValueType.Date;
|
|
2751
|
+
case DataFilterType.Bool:
|
|
2752
|
+
return SearchPropertyValueType.Bool;
|
|
2753
|
+
case DataFilterType.Number:
|
|
2754
|
+
return SearchPropertyValueType.Int;
|
|
2755
|
+
}
|
|
2756
|
+
}
|
|
2757
|
+
|
|
2653
2758
|
class UserAccessRequestService {
|
|
2654
2759
|
httpService;
|
|
2655
2760
|
BASE_URL = 'User';
|
|
@@ -2685,6 +2790,19 @@ class UserAccessRequestService {
|
|
|
2685
2790
|
const url = `${this.BASE_URL}/GetUserAccessRequestWithParam/${param}/${skip}/${limit}/${sortParam}/${sortOrder}`;
|
|
2686
2791
|
return this.httpService.get(url);
|
|
2687
2792
|
}
|
|
2793
|
+
/**
|
|
2794
|
+
* Get user access requests with additional parameter, pagination and sorting
|
|
2795
|
+
* @param params Filter parameters
|
|
2796
|
+
* @param skip Number of records to skip
|
|
2797
|
+
* @param limit Number of records to take
|
|
2798
|
+
* @param sortParam Sort parameter
|
|
2799
|
+
* @param sortOrder Sort order ('asc' or 'desc')
|
|
2800
|
+
* @returns Promise containing the filtered user access requests
|
|
2801
|
+
*/
|
|
2802
|
+
getUserAccessRequestByFilterParams(params, skip, limit, sortParam, sortOrder) {
|
|
2803
|
+
const url = `${this.BASE_URL}/SearchUserAccessRequest/${skip}/${limit}/${sortParam}/${sortOrder}`;
|
|
2804
|
+
return this.httpService.post(url, params);
|
|
2805
|
+
}
|
|
2688
2806
|
/**
|
|
2689
2807
|
* Save multiple user access requests
|
|
2690
2808
|
* @param requests Array of user access requests to save
|
|
@@ -2734,6 +2852,7 @@ class UserAccessRequestState {
|
|
|
2734
2852
|
sortParam: 'CreatedAt',
|
|
2735
2853
|
sortOrder: 'asc',
|
|
2736
2854
|
});
|
|
2855
|
+
filterParams$ = new BehaviorSubject([]);
|
|
2737
2856
|
isUpdating$() {
|
|
2738
2857
|
return this.updating$.asObservable();
|
|
2739
2858
|
}
|
|
@@ -2746,6 +2865,12 @@ class UserAccessRequestState {
|
|
|
2746
2865
|
setRequests(requests) {
|
|
2747
2866
|
this.requests$.next(requests);
|
|
2748
2867
|
}
|
|
2868
|
+
getFilterParams$() {
|
|
2869
|
+
return this.filterParams$.asObservable();
|
|
2870
|
+
}
|
|
2871
|
+
setFilterParams(params) {
|
|
2872
|
+
this.filterParams$.next(params);
|
|
2873
|
+
}
|
|
2749
2874
|
getRoles$() {
|
|
2750
2875
|
return this.roles$.asObservable();
|
|
2751
2876
|
}
|
|
@@ -2816,13 +2941,20 @@ class UserAccessRequestFacade {
|
|
|
2816
2941
|
this.utilService = utilService;
|
|
2817
2942
|
// Set up debounced search handling
|
|
2818
2943
|
this.searchSubject
|
|
2819
|
-
.pipe(debounceTime(
|
|
2944
|
+
.pipe(debounceTime(1000), distinctUntilChanged(), takeUntil(this.destroy$))
|
|
2820
2945
|
.subscribe((searchTerm) => {
|
|
2821
2946
|
this.handleSearch(searchTerm);
|
|
2822
2947
|
});
|
|
2823
2948
|
this.isUpdating$().subscribe((loading) => {
|
|
2824
2949
|
this.utilService.sendBI(loading);
|
|
2825
2950
|
});
|
|
2951
|
+
this.getFilterParams$().subscribe((params) => {
|
|
2952
|
+
if (params.length) {
|
|
2953
|
+
}
|
|
2954
|
+
else {
|
|
2955
|
+
this.loadRequests();
|
|
2956
|
+
}
|
|
2957
|
+
});
|
|
2826
2958
|
}
|
|
2827
2959
|
destroy() {
|
|
2828
2960
|
this.destroy$.next();
|
|
@@ -2834,6 +2966,9 @@ class UserAccessRequestFacade {
|
|
|
2834
2966
|
getRequests$() {
|
|
2835
2967
|
return this.userAccessRequestState.getRequests$();
|
|
2836
2968
|
}
|
|
2969
|
+
getFilterParams$() {
|
|
2970
|
+
return this.userAccessRequestState.getFilterParams$();
|
|
2971
|
+
}
|
|
2837
2972
|
getRoles$() {
|
|
2838
2973
|
return this.userAccessRequestState.getRoles$();
|
|
2839
2974
|
}
|
|
@@ -2867,6 +3002,10 @@ class UserAccessRequestFacade {
|
|
|
2867
3002
|
this.userAccessRequestState.setUpdating(false);
|
|
2868
3003
|
}
|
|
2869
3004
|
}
|
|
3005
|
+
async filter(filterParams) {
|
|
3006
|
+
this.userAccessRequestState.resetPagination();
|
|
3007
|
+
this.userAccessRequestState.setFilterParams(filterParams);
|
|
3008
|
+
}
|
|
2870
3009
|
// Load more handling
|
|
2871
3010
|
async loadMore() {
|
|
2872
3011
|
try {
|
|
@@ -2935,6 +3074,27 @@ class UserAccessRequestFacade {
|
|
|
2935
3074
|
this.userAccessRequestState.setUpdating(false);
|
|
2936
3075
|
}
|
|
2937
3076
|
}
|
|
3077
|
+
async loadRequestsByFilterParams(filterParams) {
|
|
3078
|
+
try {
|
|
3079
|
+
this.userAccessRequestState.setUpdating(true);
|
|
3080
|
+
const params = this.userAccessRequestState.getQueryParamsValue();
|
|
3081
|
+
const requests = await this.userAccessRequestService.getUserAccessRequestByFilterParams(filterParams.map((filter) => ({
|
|
3082
|
+
PropertyName: filter.name,
|
|
3083
|
+
EntityValue: filter.value,
|
|
3084
|
+
type: convertDataFilterTypeToSearchPropertyValueType(filter.type),
|
|
3085
|
+
Operator: SearchOperator.And,
|
|
3086
|
+
Sign: SearchPropertySign.EQ,
|
|
3087
|
+
})), params.skip, params.limit, params.sortParam || 'createdDate', params.sortOrder);
|
|
3088
|
+
this.userAccessRequestState.setRequests(requests.Result);
|
|
3089
|
+
}
|
|
3090
|
+
catch (error) {
|
|
3091
|
+
console.error('Failed to load requests with param:', error);
|
|
3092
|
+
throw error;
|
|
3093
|
+
}
|
|
3094
|
+
finally {
|
|
3095
|
+
this.userAccessRequestState.setUpdating(false);
|
|
3096
|
+
}
|
|
3097
|
+
}
|
|
2938
3098
|
updateQueryParams(params) {
|
|
2939
3099
|
this.userAccessRequestState.updateQueryParams(params);
|
|
2940
3100
|
this.loadRequests();
|
|
@@ -3011,18 +3171,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
3011
3171
|
providedIn: 'root',
|
|
3012
3172
|
}]
|
|
3013
3173
|
}], ctorParameters: () => [{ type: UserAccessRequestService }, { type: UserAccessRequestState }, { type: UtilService }] });
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
})(UserAccessRequestStatus || (UserAccessRequestStatus = {}));
|
|
3174
|
+
var DateFilterTypes$2;
|
|
3175
|
+
(function (DateFilterTypes) {
|
|
3176
|
+
DateFilterTypes["Before"] = "LT";
|
|
3177
|
+
DateFilterTypes["On"] = "EQ";
|
|
3178
|
+
DateFilterTypes["After"] = "GT";
|
|
3179
|
+
})(DateFilterTypes$2 || (DateFilterTypes$2 = {}));
|
|
3021
3180
|
|
|
3022
3181
|
class UserRequestFormComponent {
|
|
3023
3182
|
fb;
|
|
3024
3183
|
roles = [];
|
|
3184
|
+
get currentData() {
|
|
3185
|
+
return this._currentData;
|
|
3186
|
+
}
|
|
3025
3187
|
set currentData(value) {
|
|
3188
|
+
this._currentData = value;
|
|
3026
3189
|
if (value?.data) {
|
|
3027
3190
|
this.form.patchValue({
|
|
3028
3191
|
MailAddress: value.data.MailAddress || '',
|
|
@@ -3036,6 +3199,7 @@ class UserRequestFormComponent {
|
|
|
3036
3199
|
this.form.reset();
|
|
3037
3200
|
}
|
|
3038
3201
|
}
|
|
3202
|
+
_currentData = null;
|
|
3039
3203
|
switchView = new EventEmitter();
|
|
3040
3204
|
onApproval = new EventEmitter();
|
|
3041
3205
|
form;
|
|
@@ -3060,6 +3224,7 @@ class UserRequestFormComponent {
|
|
|
3060
3224
|
// } catch (error) {
|
|
3061
3225
|
// // Handle error
|
|
3062
3226
|
// }
|
|
3227
|
+
console.log(this.currentData?.data);
|
|
3063
3228
|
}
|
|
3064
3229
|
onSave() {
|
|
3065
3230
|
if (this.form.valid) {
|
|
@@ -3317,7 +3482,7 @@ class UserRequestApprovalComponent {
|
|
|
3317
3482
|
{
|
|
3318
3483
|
name: 'CreatedAt',
|
|
3319
3484
|
type: DataFilterType.Date,
|
|
3320
|
-
checked:
|
|
3485
|
+
checked: true,
|
|
3321
3486
|
},
|
|
3322
3487
|
];
|
|
3323
3488
|
clearData() {
|
|
@@ -3355,6 +3520,7 @@ class UserRequestApprovalComponent {
|
|
|
3355
3520
|
}
|
|
3356
3521
|
onFilterSet(event) {
|
|
3357
3522
|
console.log(event);
|
|
3523
|
+
this.userAccessRequestFacade.filter(event);
|
|
3358
3524
|
}
|
|
3359
3525
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestApprovalComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: UserAccessRequestFacade }], target: i0.ɵɵFactoryTarget.Component });
|
|
3360
3526
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserRequestApprovalComponent, selector: "lib-user-request-approval", viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }], ngImport: i0, template: "<div class=\"space-y-8\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: false,\n isToggle: true,\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n (onSearchChange)=\"handleSearch($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data()\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"status\">\n <ng-template #cell let-value>\n <lib-user-access-request-status-badge\n [status]=\"value\"\n ></lib-user-access-request-status-badge>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value let-deleteRow>\n <div class=\"flex gap-6\">\n <verben-svg\n (click)=\"openDetailView(value)\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n <!-- <button (click)=\"openDetailView(value)\">Open</button>\n <button (click)=\"selected = cardData[rowIndex]; vdv.toggleView()\">\n Switch\n </button> -->\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n <!-- <ng-template #header>\n <strong>Actions</strong>\n </ng-template> -->\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"MailAddress\"\n border=\"5px\"\n [cardDataList]=\"cardData()\"\n rbgColor=\"#f5f6f9\"\n mg=\"20px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData()\"\n >\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\n <div\n (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\"\n >\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"flex-1 flex items-end gap-y-2 gap-x-4 p-4\">\n <div class=\"flex-1 space-y-2\">\n <span\n class=\"font-semibold text-[#404040] flex-1 truncate\"\n >{{ item.title }}</span\n >\n\n <p class=\"flex items-center my-1\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Phone Number:</label\n >\n <span id=\"phone\" class=\"text-sm truncate\">{{\n item.data.PhoneNumber\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-1\">\n <p class=\"grid\">\n <label\n for=\"role\"\n class=\"text-[10px] font-light text-[#404040]\"\n >Role</label\n >\n <span id=\"role\" class=\"text-sm font-medium\">{{\n item.body[0]?.Role\n }}</span>\n </p>\n\n <lib-user-access-request-status-badge\n [status]=\"item.data.RequestStatus\"\n ></lib-user-access-request-status-badge>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <lib-user-request-form\n [roles]=\"roles()\"\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div\n [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-between': true,\n 'justify-end': vdcv.hasCurrentItem()\n }\"\n >\n <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n <div\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData().length }} records loaded</span\n >\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n (filtersApplied)=\"onFilterSet($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data()\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: ["*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: \"\"}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-8{bottom:2rem}.left-0{left:0}.right-0{right:0}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.float-right{float:right}.m-0{margin:0}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0{margin-bottom:0}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-\\[8px\\]{margin-top:8px}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-\\[100\\%\\]{height:100%}.h-\\[max-content\\]{height:-moz-max-content;height:max-content}.h-full{height:100%}.w-2{width:.5rem}.w-3{width:.75rem}.w-full{width:100%}.\\!max-w-\\[304px\\]{max-width:304px!important}.flex-1{flex:1 1 0%}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-20{gap:5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-\\[1\\.5vw\\]{gap:1.5vw}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-7>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.75rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded-\\[9px\\]{border-radius:9px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-br-none{border-bottom-right-radius:0}.rounded-tr-none{border-top-right-radius:0}.border,.border-\\[1px\\]{border-width:1px}.border-primary{--tw-border-opacity: 1;border-color:rgb(212 160 7 / var(--tw-border-opacity, 1))}.border-secondary-200{border-color:#d7dbe6}.bg-\\[\\#CAE1CC\\]{--tw-bg-opacity: 1;background-color:rgb(202 225 204 / var(--tw-bg-opacity, 1))}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(212 160 7 / var(--tw-bg-opacity, 1))}.bg-secondary{--tw-bg-opacity: 1;background-color:rgb(232 234 241 / var(--tw-bg-opacity, 1))}.bg-secondary-100{--tw-bg-opacity: 1;background-color:rgb(245 246 249 / var(--tw-bg-opacity, 1))}.bg-secondary-200{background-color:#d7dbe6}.p-3{padding:.75rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-6{padding-left:1.5rem}.pr-1{padding-right:.25rem}.text-center{text-align:center}.\\!text-\\[10px\\]{font-size:10px!important}.text-\\[10px\\]{font-size:10px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.text-\\[16px\\]{font-size:16px}.text-\\[22px\\]{font-size:22px}.text-\\[24px\\]{font-size:24px}.text-\\[2rem\\]{font-size:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.lowercase{text-transform:lowercase}.leading-6{line-height:1.5rem}.leading-\\[12\\.1px\\]{line-height:12.1px}.leading-\\[16\\.6px\\]{line-height:16.6px}.leading-\\[19\\.5px\\]{line-height:19.5px}.leading-\\[29\\.05px\\]{line-height:29.05px}.leading-\\[33px\\]{line-height:33px}.leading-\\[48px\\]{line-height:48px}.text-\\[\\#333\\]{--tw-text-opacity: 1;color:rgb(51 51 51 / var(--tw-text-opacity, 1))}.text-\\[\\#3479E9\\]{--tw-text-opacity: 1;color:rgb(52 121 233 / var(--tw-text-opacity, 1))}.text-\\[\\#404040\\]{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.text-\\[\\#4ABB54\\]{--tw-text-opacity: 1;color:rgb(74 187 84 / var(--tw-text-opacity, 1))}.text-\\[black\\]{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-muted{color:#0009}.underline{text-decoration-line:underline}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.view-links{color:#3479e9;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "groupBy", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i2.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i2.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "size"] }, { kind: "component", type: i2.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i2.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "onItemClick", "onCardChildClick"], outputs: ["loadMoreClick"] }, { kind: "component", type: i2.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i2.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i2.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i2.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i2.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions"] }, { kind: "component", type: i2.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated"] }, { kind: "component", type: i2.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied"] }, { kind: "component", type: i2.DataExportComponent, selector: "lib-data-export", inputs: ["data"], outputs: ["exportDataEvent"] }, { kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: UserRequestFormComponent, selector: "lib-user-request-form", inputs: ["roles", "currentData"], outputs: ["switchView", "onApproval"] }, { kind: "component", type: UserAccessRequestStatusBadgeComponent, selector: "lib-user-access-request-status-badge", inputs: ["status"] }, { kind: "pipe", type: i2$1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
@@ -3370,51 +3536,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
3370
3536
|
args: ['vdv']
|
|
3371
3537
|
}] } });
|
|
3372
3538
|
|
|
3373
|
-
var OAuthType;
|
|
3374
|
-
(function (OAuthType) {
|
|
3375
|
-
OAuthType["InApp"] = "InApp";
|
|
3376
|
-
OAuthType["Google"] = "Google";
|
|
3377
|
-
OAuthType["Facebook"] = "Facebook";
|
|
3378
|
-
OAuthType["OAuth"] = "OAuth";
|
|
3379
|
-
OAuthType["MicrosoftAD"] = "MicrosoftAD";
|
|
3380
|
-
})(OAuthType || (OAuthType = {}));
|
|
3381
|
-
|
|
3382
|
-
const roles = [
|
|
3383
|
-
{ id: 'admin', name: 'Admin' },
|
|
3384
|
-
{ id: 'manager', name: 'Manager' },
|
|
3385
|
-
{ id: 'staff', name: 'Staff' },
|
|
3386
|
-
];
|
|
3387
|
-
const mockData = new Array(10)
|
|
3388
|
-
.fill(1)
|
|
3389
|
-
.map((id, i) => ({
|
|
3390
|
-
FirstName: `First ${id + i}`,
|
|
3391
|
-
LastName: `Last ${id + i}`,
|
|
3392
|
-
OtherName: `Other ${id + i}`,
|
|
3393
|
-
Id: id + i,
|
|
3394
|
-
id: (id + i).toString(),
|
|
3395
|
-
MailAddress: `user${id + i}@mail.com`,
|
|
3396
|
-
PhoneNumber: `+23480000000${id + i}`,
|
|
3397
|
-
RequestStatus: randomEnum$1(UserAccessRequestStatus),
|
|
3398
|
-
RoleID: roles[Math.floor(Math.random() * roles.length)].id,
|
|
3399
|
-
Password: '1234567',
|
|
3400
|
-
ExpireOn: new Date(),
|
|
3401
|
-
IsSeeded: false,
|
|
3402
|
-
OTPExpireOn: new Date(),
|
|
3403
|
-
Tenants: [],
|
|
3404
|
-
SignupType: OAuthType.InApp,
|
|
3405
|
-
CreatedAt: new Date(),
|
|
3406
|
-
UpdatedAt: new Date(),
|
|
3407
|
-
DataState: ObjectState.New,
|
|
3408
|
-
TenantId: `Tenant${id + i}`,
|
|
3409
|
-
Code: '',
|
|
3410
|
-
ServiceName: '',
|
|
3411
|
-
}));
|
|
3412
|
-
function randomEnum$1(anEnum) {
|
|
3413
|
-
const enumValues = Object.values(anEnum);
|
|
3414
|
-
const randomIndex = Math.floor(Math.random() * enumValues.length);
|
|
3415
|
-
return enumValues[randomIndex];
|
|
3416
|
-
}
|
|
3417
|
-
|
|
3418
3539
|
const SERVICE_CONFIG = new InjectionToken('ServiceConfig');
|
|
3419
3540
|
class UserRequestApprovalService {
|
|
3420
3541
|
// protected readonly baseUrl: string;
|
|
@@ -3559,17 +3680,6 @@ const columns = [
|
|
|
3559
3680
|
},
|
|
3560
3681
|
];
|
|
3561
3682
|
|
|
3562
|
-
var SearchPropertySign;
|
|
3563
|
-
(function (SearchPropertySign) {
|
|
3564
|
-
SearchPropertySign["EQ"] = "EQ";
|
|
3565
|
-
SearchPropertySign["NEQ"] = "NEQ";
|
|
3566
|
-
SearchPropertySign["GT"] = "GT";
|
|
3567
|
-
SearchPropertySign["GTE"] = "GTE";
|
|
3568
|
-
SearchPropertySign["LT"] = "LT";
|
|
3569
|
-
SearchPropertySign["LTE"] = "LTE";
|
|
3570
|
-
SearchPropertySign["LIKE"] = "LIKE";
|
|
3571
|
-
})(SearchPropertySign || (SearchPropertySign = {}));
|
|
3572
|
-
|
|
3573
3683
|
const baseStyle$1 = {
|
|
3574
3684
|
width: "100%",
|
|
3575
3685
|
fontFamily: '"Fraunces", serif',
|
|
@@ -4590,23 +4700,6 @@ var ChildrenType;
|
|
|
4590
4700
|
ChildrenType["Action"] = "Action";
|
|
4591
4701
|
})(ChildrenType || (ChildrenType = {}));
|
|
4592
4702
|
|
|
4593
|
-
var SearchOperator;
|
|
4594
|
-
(function (SearchOperator) {
|
|
4595
|
-
SearchOperator["And"] = "And";
|
|
4596
|
-
SearchOperator["Or"] = "Or";
|
|
4597
|
-
})(SearchOperator || (SearchOperator = {}));
|
|
4598
|
-
|
|
4599
|
-
var SearchPropertyValueType;
|
|
4600
|
-
(function (SearchPropertyValueType) {
|
|
4601
|
-
SearchPropertyValueType["Int"] = "Int";
|
|
4602
|
-
SearchPropertyValueType["Float"] = "Float";
|
|
4603
|
-
SearchPropertyValueType["Decimal"] = "Decimal";
|
|
4604
|
-
SearchPropertyValueType["Double"] = "Double";
|
|
4605
|
-
SearchPropertyValueType["String"] = "String";
|
|
4606
|
-
SearchPropertyValueType["Bool"] = "Bool";
|
|
4607
|
-
SearchPropertyValueType["Date"] = "Date";
|
|
4608
|
-
})(SearchPropertyValueType || (SearchPropertyValueType = {}));
|
|
4609
|
-
|
|
4610
4703
|
class RoleControlService {
|
|
4611
4704
|
constructor() { }
|
|
4612
4705
|
get roleColumns() {
|