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.
@@ -61,7 +61,7 @@ class HttpWebRequestService {
61
61
  buildHeaders() {
62
62
  return {
63
63
  'Content-Type': 'application/json',
64
- 'Authorization': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJNYWlsQWRkcmVzcyI6InZlcmJlbmFAZ21haWwuY29tIiwiQXBwbGljYXRpb24iOiIiLCJOYW1lIjoiVmVyYmVuYSBMb2dpYyBMaW1pdGVkIiwiUm9sZXMiOiIiLCJUZW5hbnRJZCI6IlBETFRDNiIsIlNlcnZpY2VOYW1lIjoiV2hpdGUzNjAiLCJuYmYiOjE3MzU4Mjk1MDMsImV4cCI6MTczNjA0NTUwMywiaWF0IjoxNzM1ODI5NTAzfQ.17pbrSY5giPvVvdjrzWvfTWD2-Ln5vX8WBm4y9vxq2k'
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(500), distinctUntilChanged(), takeUntil(this.destroy$))
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
- var UserAccessRequestStatus;
3016
- (function (UserAccessRequestStatus) {
3017
- UserAccessRequestStatus["Pending"] = "Pending";
3018
- UserAccessRequestStatus["Approved"] = "Approved";
3019
- UserAccessRequestStatus["Declined"] = "Declined";
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: false,
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() {