ngx-techlify-core 22.2.0 → 22.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{ngx-techlify-core-base-model-BpcY6y7I.mjs → ngx-techlify-core-base-model-oCILHkdE.mjs} +2 -2
- package/fesm2022/{ngx-techlify-core-base-model-BpcY6y7I.mjs.map → ngx-techlify-core-base-model-oCILHkdE.mjs.map} +1 -1
- package/fesm2022/{ngx-techlify-core-shared.module-CEkzd5Dr.mjs → ngx-techlify-core-shared.module-DROe5GRx.mjs} +4 -4
- package/fesm2022/ngx-techlify-core-shared.module-DROe5GRx.mjs.map +1 -0
- package/fesm2022/{ngx-techlify-core-user-config.service-CzFVhAQV.mjs → ngx-techlify-core-user-config.service-DW5EgXhL.mjs} +2 -2
- package/fesm2022/{ngx-techlify-core-user-config.service-CzFVhAQV.mjs.map → ngx-techlify-core-user-config.service-DW5EgXhL.mjs.map} +1 -1
- package/fesm2022/{ngx-techlify-core-user-sessions.module-BkWzZbPL.mjs → ngx-techlify-core-user-sessions.module-BRmDpYG3.mjs} +4 -4
- package/fesm2022/{ngx-techlify-core-user-sessions.module-BkWzZbPL.mjs.map → ngx-techlify-core-user-sessions.module-BRmDpYG3.mjs.map} +1 -1
- package/fesm2022/ngx-techlify-core.mjs +245 -7
- package/fesm2022/ngx-techlify-core.mjs.map +1 -1
- package/package.json +3 -2
- package/types/ngx-techlify-core.d.ts +165 -0
- package/fesm2022/ngx-techlify-core-shared.module-CEkzd5Dr.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-techlify-core-user-sessions.module-BkWzZbPL.mjs","names":["i1.HttpService","i1.FormValidatorService","i2","i7","i8","i9","i10.SearchableSelectorComponent","i11.TimelineFilterComponent","i1","i4.AuditLogService","i5","i6.ExportExcelButtonComponent","i13.TechlifyIconComponent","i14.AuditLogListFilterComponent","i1.HttpService","i2","i3","i4","i5","i6.TimelineFilterComponent","i7","i1.HttpService","i2.HttpService","i4.FormValidatorService","i5.UserService","i6.CurrentUserService","i7.UserConfigService","i8","i9.DocumentViewerComponent","i10.FileDropperComponent","i11","i12","i14","i15","i16","i1.HttpService","i1.CredentialsService","i2.CurrentUserService","i3.UserTenantService","i1.AlertService","i4","i1.UserTenantService","i2","i3","i4","i5","i6.UserClientEnableDisableButtonComponent","i1.HttpService","i1.UserSessionService","i2","i3","i4","i5"],"sources":["../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log.service.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.html","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.component.html","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.component.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.component.html","../../../projects/ngx-techlify-core/src/lib/user/user-type.enum.ts","../../../projects/ngx-techlify-core/src/lib/user/user.service.ts","../../../projects/ngx-techlify-core/src/lib/user/user-form/user-form.component.ts","../../../projects/ngx-techlify-core/src/lib/user/user-form/user-form.component.html","../../../projects/ngx-techlify-core/src/lib/user-clients-list/user-tenant.service.ts","../../../projects/ngx-techlify-core/src/lib/user-client-enable-disable-button/user-client-enable-disable-button.component.ts","../../../projects/ngx-techlify-core/src/lib/user-client-enable-disable-button/user-client-enable-disable-button.component.html","../../../projects/ngx-techlify-core/src/lib/user-clients-list/user-clients-list.component.ts","../../../projects/ngx-techlify-core/src/lib/user-clients-list/user-clients-list.component.html","../../../projects/ngx-techlify-core/src/lib/user/user-sessions/user-session.service.ts","../../../projects/ngx-techlify-core/src/lib/user/user-sessions/user-sessions/user-sessions.component.ts","../../../projects/ngx-techlify-core/src/lib/user/user-sessions/user-sessions/user-sessions.component.html","../../../projects/ngx-techlify-core/src/lib/user-client-enable-disable-button/user-client-enable-disable-button.module.ts","../../../projects/ngx-techlify-core/src/lib/user-clients-list/user-clients-list.module.ts","../../../projects/ngx-techlify-core/src/lib/user/user-sessions/user-sessions/user-sessions.module.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { TechlifyService } from '../base-model';\nimport { HttpService } from '../core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuditLogService extends TechlifyService {\n constructor(httpService: HttpService) {\n super(httpService, 'audit-logs');\n }\n}\n","import { Component, OnInit, Output, EventEmitter, Input, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { FormValidatorService } from '../../core';\n\n@UntilDestroy()\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-audit-log-list-filter',\n templateUrl: './audit-log-list-filter.component.html',\n styleUrls: ['./audit-log-list-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class AuditLogListFilterComponent implements OnInit, OnDestroy {\n\n @Input() filterForm: UntypedFormGroup;\n @Input() objectId: any;\n @Input() objectType: any;\n\n @Output() valueChange = new EventEmitter();\n\n constructor(private formValidatorService: FormValidatorService) {\n }\n\n get showObjectFilter(): boolean {\n return !(this.objectId || this.objectType);\n }\n\n ngOnInit(): void {\n }\n\n resetFieldValue(field: string): void {\n this.filterForm.get(field).setValue('');\n }\n\n getFieldValue(field: string): any {\n return this.filterForm.get(field).value;\n }\n\n isFieldValid(field: string): any {\n return this.formValidatorService.isFieldValid(field, this.filterForm, true);\n }\n\n ngOnDestroy(): void {\n }\n\n}\n","<form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2 w-100\">\n <mat-form-field class='fl-md'>\n <mat-label>Search Changes</mat-label>\n <input type=\"text\" matInput formControlName=\"change_search\" />\n <button *ngIf=\"getFieldValue('change_search')\" matSuffix mat-icon-button (click)=\"resetFieldValue('change_search')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <app-timeline-filter class='fl-sm' labelText=\"Activity Date\" formControlName=\"duration\"\n [form]=\"filterForm\" [showClearButton]=\"true\" appearance=\"outline\"></app-timeline-filter>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Action</mat-label>\n <mat-select formControlName=\"action\" [multiple]=\"true\">\n <mat-option value=\"created\">Created</mat-option>\n <mat-option value=\"updated\">Updated</mat-option>\n <mat-option value=\"deleted\">Deleted</mat-option>\n </mat-select>\n <button *ngIf=\"getFieldValue('action')\" matSuffix mat-icon-button (click)=\"resetFieldValue('action')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field class='fl-sm' *ngIf=\"showObjectFilter\">\n <mat-label>Model Type</mat-label>\n <app-searchable-selector formControlName=\"object_type\" apiUrl=\"api/audit-log-types\" titleField=\"object_type\"\n valueField=\"object_type\" [sort]=\"false\" [multiple]=\"true\">\n </app-searchable-selector>\n <button *ngIf=\"getFieldValue('object_type')\" matSuffix mat-icon-button (click)=\"resetFieldValue('object_type')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Model #</mat-label>\n <input type=\"text\" matInput formControlName=\"model_search\" />\n <button *ngIf=\"getFieldValue('model_search')\" matSuffix mat-icon-button (click)=\"resetFieldValue('model_search')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Creator</mat-label>\n <app-searchable-selector formControlName=\"creator_ids\" [multiple]=\"true\" apiUrl=\"api/users\"\n titleField=\"name\"></app-searchable-selector>\n <button *ngIf=\"getFieldValue('creator_ids')\" matSuffix mat-icon-button (click)=\"resetFieldValue('creator_ids')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n</form>","import { Component, OnInit, OnDestroy, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TechlifyListComponent } from '../../base-model';\nimport { FormBuilder } from '@angular/forms';\nimport { AuditLogService } from '../audit-log.service';\nimport { DatePipe } from '@angular/common';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-log-list',\n templateUrl: './audit-log-list.component.html',\n styleUrls: ['./audit-log-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class AuditLogListComponent extends TechlifyListComponent implements OnInit, OnDestroy {\n\n @Input() objectId: any;\n @Input() objectType: any;\n @Input() showFilter = true;\n @Input() showExportButtons = true;\n @Input() userId: any;\n @Input() disableFilterPatchingFromUrl = false;\n @Input() scrollContainer: string = ''; //Don't default the scroll container. Override it where ever required.\n\n displayedColumns: any[] = [\n 'index',\n 'id',\n 'created_at',\n 'object_type',\n 'object_id',\n 'action',\n 'changes',\n 'user.email',\n 'actions',\n ];\n\n constructor(\n private router: Router,\n public sanitizer: DomSanitizer,\n private formBuilder: FormBuilder,\n protected override service: AuditLogService,\n protected datePipe: DatePipe\n ) {\n super();\n\n this.filterFormConfiguration = {\n duration: { number: true },\n object_type: { multiple: true },\n action: { multiple: true },\n creator_ids: { multiple: true },\n };\n\n this.filterForm = this.formBuilder.group({\n action: [''],\n change_search: [''],\n duration: [''],\n date_from: [''],\n date_to: [''],\n model_search: [''],\n object_type: [''],\n object_id: [''],\n user_id: [''],\n sort_by: 'created_at|desc',\n creator_ids: [''],\n });\n }\n\n ngOnInit(): void {\n this.initializeData();\n\n if (!this.disableFilterPatchingFromUrl) {\n this.patchFiltersFromRoute();\n }\n\n this.loadData();\n this.listenFilterChanges();\n }\n\n get excelData(): any[] {\n if (this.models.length > 0) {\n return this.models.map(item => {\n return {\n Type: item?.object_type,\n Action: item?.action,\n Data: JSON.stringify(item?.data || {}),\n Object: JSON.stringify(item?.object || {}),\n 'Pre-Object': JSON.stringify(item?.pre_object || {}),\n 'Created At': new Date(item?.created_at).toDateString(),\n 'Created By': item?.user?.email\n };\n });\n }\n return [];\n }\n\n logClicked(log: any): void {\n this.router.navigate(['/system/audit-logs/log-view', log.id]);\n }\n\n initializeData(): void {\n if (this.objectType) this.filterForm.patchValue({ object_type: this.objectType });\n if (this.objectId) this.filterForm.patchValue({ object_id: this.objectId });\n if (this.userId) this.filterForm.patchValue({ user_id: this.userId });\n }\n\n getTransformedChanges(log: any): string {\n if (log?.data?.changes) {\n const changes = Object.keys(log?.data?.changes) || [];\n let value = '<div>';\n changes.forEach((key: any) => {\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\n value = `${value} <div><b>${displayAttribute}:</b> <span id=\"old-value\">${log?.pre_object[key] ?? ''}</span><span id=\"new-value\">${log?.object[key] ?? ''}</span></div>`;\n });\n value = `${value} </div>`;\n return value;\n }\n return '';\n }\n\n ngOnDestroy(): void {\n // Needed for automatic unsubscribe with untilDestroyed\n }\n\n loadData(): void {\n const filters = JSON.parse(JSON.stringify(this.filterForm.value));\n filters.page = this.page;\n filters.date_from = this.datePipe.transform(filters.date_from, 'yyyy-MM-dd') ?? '';\n filters.date_to = this.datePipe.transform(filters.date_to, 'yyyy-MM-dd') ?? '';\n filters.creator_ids = filters.creator_ids.toString();\n filters.object_type = filters.object_type.toString();\n filters.action = filters.action.toString();\n\n super.loadData(filters);\n }\n}\n","<div class=\"m-2\">\n <mat-card>\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\" style=\"min-width: 200px\">\n <h5 class=\"mb-0\"> Audit Logs </h5>\n <app-export-excel-button *ngIf=\"showExportButtons\" matTooltip=\"Export\" elementId=\"audit-logs-table\"\n class=\"mt-1\" name=\"AuditLogs\" [data]=\"excelData\">\n </app-export-excel-button>\n </div>\n\n <app-audit-log-list-filter class=\"w-100\" *ngIf=\"showFilter\" [filterForm]=\"filterForm\" [objectType]=\"objectType\"\n [objectId]=\"objectId\"></app-audit-log-list-filter>\n </div>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"mt-2\">\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" matSort class=\"w-100\" infiniteScroll [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\" [infiniteScrollContainer]=\"scrollContainer\" (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\" (matSortChange)=\"sortColumn($event)\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let i = index\"> {{ i+1 }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> Log # </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.id}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"object_type\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Model Type </th>\n <td mat-cell *matCellDef=\"let auditLog;\"> {{ auditLog.object_type }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"object_id\">\n <th mat-header-cell *matHeaderCellDef> Model # </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.object_id}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Action </th>\n <td mat-cell *matCellDef=\"let auditLog;\"> {{ auditLog?.action }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"created_at\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Created At </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.created_at | date:'medium'}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"user.email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Created By </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <p class=\"mb-0\">{{auditLog?.user?.name}}</p>\n <small class=\"text-secondary\">{{ auditLog?.user?.email }}</small>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"changes\">\n <th mat-header-cell *matHeaderCellDef> Changes</th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <div class=\"px-3\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(getTransformedChanges(auditLog))\">\n </div>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <div class=\"text-secondary\">\n <app-techlify-icon role=\"button\" name=\"view\" class=\"clickable\"\n (click)=\"logClicked(auditLog);$event.stopPropagation();\" matTooltip=\"View\"></app-techlify-icon>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n </mat-card>\n</div>","import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { PageEvent } from '../data-table/data-table.model';\nimport { HttpService } from '../core/http.service';\nimport { TimelineValue } from '../timeline-filter';\n\n@UntilDestroy()\n@Component({\n selector: 'app-login-history-for-user',\n templateUrl: './login-history-for-user.component.html',\n styleUrls: ['./login-history-for-user.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class LoginHistoryForUserComponent implements OnInit {\n\n loginHistoryList: any[] = [];\n pageEvent: any = { page: 1, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n };\n historyFilterForm: UntypedFormGroup;\n displayedColumns: any[] = ['index', 'created_at'];\n @Input() userId: any;\n\n constructor(\n private http: HttpService,\n private fb: UntypedFormBuilder,\n ) {\n this.historyFilterForm = this.fb.group({\n 'duration': [''],\n 'date_from': [''],\n 'date_to': ['']\n });\n }\n\n ngOnInit() {\n this.filters.user_id = this.userId;\n this.historyFilterForm.valueChanges\n .pipe(debounceTime(500), distinctUntilChanged(), untilDestroyed(this))\n .subscribe((value: any) => {\n value.date_from = value.date_from ? (value.date_from as Date).toISOString() : '';\n value.date_to = value.date_to ? (value.date_to as Date).toISOString() : '';\n this.filterChange(value);\n });\n this.initializeData();\n }\n\n onTimelineChange(range: TimelineValue) {\n let date_from = range?.date_from ? new Date(range.date_from) : '';\n let date_to = range?.date_to ? new Date(range.date_to) : '';\n this.historyFilterForm.patchValue({\n date_from,\n date_to\n });\n }\n\n initializeData() {\n this.http.get(`api/user-login-history`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.loginHistoryList = this.loginHistoryList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n filterChange(event: any) {\n this.filters = {\n ...this.filters,\n ...event\n };\n this.reload();\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n\n reload() {\n this.loginHistoryList = [];\n this.pageEvent = { page: 1, lastPage: 1 };\n this.initializeData();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","<div class=\"mat-typography m-4\">\n <form [formGroup]=\"historyFilterForm\" class=\"d-flex justify-content-start align-items-center\">\n <app-timeline-filter formControlName=\"duration\" (selectionChange)=\"onTimelineChange($event)\"></app-timeline-filter>\n </form>\n\n <section>\n <div class=\"scroll-container\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\" [scrollWindow]=\"false\">\n <table mat-table [dataSource]=\"loginHistoryList\" matSort class=\"w-100 mt-1\" multiTemplateDataRows\n id=\"login-history-table\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let loginHistory; let i = dataIndex\"> {{ i+1 }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"created_at\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Last Login</th>\n <td mat-cell *matCellDef=\"let loginHistory;\">\n {{loginHistory?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n\n </section>\n</div>\n","export enum UserTypeEnum {\n ADMIN = 1,\n CLIENT_ADMIN = 2,\n CLIENT_USER = 3\n}","import { Injectable } from '@angular/core';\nimport { HttpService } from '../core';\nimport { TechlifyService } from '../base-model';\n\n@Injectable({ providedIn: 'root' })\nexport class UserService extends TechlifyService {\n constructor(http: HttpService) {\n super(http, 'users');\n }\n\n getUsers(filterModel: any) {\n const params = new URLSearchParams(filterModel).toString();\n return this.http.get(`api/users?${params}`).toPromise();\n }\n\n getUser(userId) {\n return this.http.get(`api/users/${userId}`).toPromise();\n }\n\n createUser(model: any) {\n return this.http.post('api/users', model).toPromise();\n }\n\n updateUser(model: any) {\n return this.http.put(`api/users/${model.id}`, model).toPromise();\n }\n\n enable(user: any) {\n return this.http\n .patch('api/users/' + user.id + '/enable', user)\n .toPromise();\n }\n\n disable(user: any) {\n return this.http\n .patch('api/users/' + user.id + '/disable', user)\n .toPromise();\n }\n\n resetPassword(user: any) {\n return this.http.post(`api/users/${user?.id}/reset-password`, {});\n }\n}\n","import { Component, Inject, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { UntypedFormBuilder, Validators, UntypedFormControl, UntypedFormArray } from '@angular/forms';\n\nimport { HttpService } from '../../core';\n\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UserService } from '../user.service';\nimport { MultiUserConfig } from '../../user-config/user-config.model';\nimport { UserConfigService } from '../../user-config/user-config.service';\nimport { FileDropperConfig } from \"../../file-dropper\";\nimport { ViewerConfig } from \"../../document-viewer\";\nimport { CurrentUserService } from '../current-user.service';\nimport { UserTypeEnum } from '../user-type.enum';\nimport { TechlifyFormComponent } from '../../base-model';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { SharedModule } from '../../shared.module';\n\n\n\n@Component({\n selector: 'app-user-form',\n templateUrl: './user-form.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n SharedModule\n ]\n})\nexport class UserFormComponent extends TechlifyFormComponent implements OnInit {\n isPasswordRequired = false;\n config: MultiUserConfig;\n userTypes: any = [\n { title: 'Admin', value: 2 },\n { title: 'Normal User', value: 3 },\n ];\n roles: any[] = [];\n fileConfig: FileDropperConfig;\n viewerConfig: ViewerConfig;\n fileList: any[] = [];\n\n errorMessages: any = {\n name: {\n required: 'Name is required'\n },\n email: {\n required: 'Email is required',\n email: 'Invalid email',\n },\n password: {\n required: 'Password is required'\n },\n user_type_id: {\n required: 'User Type is required'\n }\n };\n\n constructor(\n public dialogRef: MatDialogRef<UserFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private http: HttpService,\n private fb: UntypedFormBuilder,\n protected formValidatorService: FormValidatorService,\n protected userService: UserService,\n private currentUserService: CurrentUserService,\n public userConfigService: UserConfigService,\n ) {\n super(formValidatorService, userService);\n this.config = this.userConfigService.getConfig();\n }\n\n get roleForms() {\n return this.form.get('roles') as UntypedFormArray;\n }\n\n get canUpdateUserCredential() {\n return this.currentUserService.getUser().user_type_id == UserTypeEnum.ADMIN\n || (this.data?.model?.user_clients || [])?.length <= 1;\n }\n\n ngOnInit() {\n this.userTypes = this.config.userConfig.showUserTypes\n ? this.config.userConfig.userTypes\n : this.userTypes;\n this.form = this.fb.group({\n id: [''],\n name: new UntypedFormControl('', Validators.compose([Validators.required])),\n email: new UntypedFormControl('', Validators.compose([Validators.required, Validators.email])),\n password: new UntypedFormControl(''),\n phone: new UntypedFormControl(''),\n user_type_id: new UntypedFormControl('', Validators.required),\n roles: this.fb.array([]),\n roles_exists: [[]],\n client_id: [this.data?.client_id ?? ''],\n signature_url: [''],\n signature: [''],\n is_temporary_password: [true],\n });\n\n const user = this.data?.model;\n if (user) {\n this.isUpdate = true;\n this.form.patchValue(user);\n this.form.controls.user_type_id.setValue(user.user_type_id);\n this.form.controls.roles_exists.setValue(user.roles || []);\n }\n // The calling context's client_id always wins, even in edit mode (e.g. an app-admin\n // managing a specific tenant's users should save against that tenant, not the user's own).\n if (this.data?.client_id != null) {\n this.form.controls.client_id.setValue(this.data.client_id);\n }\n if (this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) {\n this.loadRoles();\n }\n this.fileConfig = {\n fileId: 'subjectFile',\n containerId: 'subjectFileContainer',\n styles: {\n height: '200px'\n },\n multiple: false,\n acceptFile: '*',\n maxSize: 10,\n acceptFileText: 'PNG and JPEG only'\n };\n\n this.viewerConfig = {\n imageStyle: {\n height: '200px',\n width: '400px'\n },\n viewerStyle: {\n height: '200px',\n width: '100%'\n }\n };\n\n if (!this.canUpdateUserCredential) {\n this.form.get('email').disable();\n this.form.get('password').disable();\n }\n }\n\n loadRoles() {\n this.isWorking = true;\n const filter = {\n client_id: this.data?.client_id || this.data?.model?.client_id || '',\n is_subscribed: true,\n sort_by: 'label|asc'\n };\n this.http.get('api/roles', { params: filter }).toPromise().then(\n (res: any) => {\n let roles = res.data;\n /* Lets set the roles this user has */\n for (let role of roles) {\n role.selected = this.form.value.roles_exists.find(roleData => roleData.id == role.id) ? true : false;\n }\n this.roles = roles;\n this.isWorking = false;\n }\n );\n }\n\n save() {\n const data: any = this.form.getRawValue();\n let roles = [];\n\n this.roles.forEach((role: any) => {\n if (role.selected) {\n roles[role.id] = role;\n }\n });\n data.roles = roles;\n\n super.submit(data);\n }\n\n roleSelected(event: any, roleId: number) {\n this.roles.forEach((role: any) => {\n if (role.id == roleId) {\n role.selected = event.checked;\n }\n });\n }\n\n async fileChanged(event: any) {\n this.fileList = event;\n\n if (this.fileList.length > 0) {\n\n const result: any = await this.uploadEntityFile(\n this.fileList[0]\n );\n this.form\n .get('signature')\n .setValue(result.item.file);\n this.form\n .get('signature_url')\n .setValue(result.item.url);\n this.fileList = [];\n }\n }\n\n\n async removeFile() {\n if (this.form.value.signature) {\n this.form.patchValue({\n signature: '',\n signature_url: ''\n });\n }\n }\n uploadEntityFile(file: File) {\n const formData: FormData = new FormData();\n formData.append('fileData', file, file.name);\n return this.http\n .skipHeader()\n .post(\n 'api/entity-files-upload',\n formData,\n ).toPromise();\n }\n}\n","<form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"d-flex flex-column justify-content-start align-items center gap-1\" mat-dialog-content>\n <h5 class=\"fw-bold text-center\">{{ isUpdate ? 'Edit' : 'Create ' }} User</h5>\n <div class=\"d-flex\">\n <div class=\"d-flex flex-column flex-fill gap-1\">\n <mat-form-field>\n <mat-label>Full name</mat-label>\n <input [required]=\"!!form.get('name').validator\" autocomplete=\"off\" formControlName=\"name\" matInput\n placeholder=\"Full Name\" type=\"text\" />\n <mat-error *ngIf=\"isFieldValid('name') && !!form.get('name').validator\">{{ getErrorMessage('name') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input [required]=\"!!form.get('email').validator\" formControlName=\"email\" matInput placeholder=\"Email\"\n type=\"email\" />\n <mat-error *ngIf=\"isFieldValid('email') && !!form.get('email').validator\">\n {{ getErrorMessage('email') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field *ngIf=\"this.config.userConfig.showPhone\">\n <mat-label>Phone</mat-label>\n <input autocomplete=\"off\" formControlName=\"phone\" matInput placeholder=\"Phone\" type=\"text\" />\n </mat-form-field>\n <mat-form-field>\n <mat-label>Password</mat-label>\n <input [required]=\"isPasswordRequired && !!form.get('password').validator\" autocomplete=\"off\"\n formControlName=\"password\" matInput placeholder=\"Password\" type=\"password\" />\n <mat-error *ngIf=\"isFieldValid('password') && !!form.get('password').validator\">\n {{ getErrorMessage('password') }}\n </mat-error>\n </mat-form-field>\n\n <div class=\"d-flex flex-column justify-content-start gap-1\">\n <mat-checkbox formControlName=\"is_temporary_password\">Is Temporary Password?</mat-checkbox>\n <small class=\"text-secondary\">Should this user to update password on first login?</small>\n </div>\n\n <div *ngIf=\"this.config.userConfig.showSignature\">\n <ng-template #fileUpload>\n <section class=\"col-12\">\n <div>User Signature</div>\n <app-file-dropper (fileChanged)=\"fileChanged($event)\" [config]=\"fileConfig\" [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </ng-template>\n <div *ngIf=\"form.get('signature').value;else fileUpload;\" class=\"col-12\">\n <app-document-viewer (remove)=\"removeFile()\" [config]=\"this.viewerConfig\"\n [fileUrl]=\"form.get('signature_url').value\" [file]=\"form.get('signature').value\">\n </app-document-viewer>\n </div>\n </div>\n <mat-form-field *ngIf=\"this.config.userConfig.showUserTypes\" class=\"mt-3\">\n <mat-label>User Type</mat-label>\n <mat-select autocomplete=\"off\" formControlName=\"user_type_id\" required>\n <mat-option *ngFor=\"let userType of userTypes\" [value]=\"userType.value\">\n {{ userType.title }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('user_type_id')\">{{ getErrorMessage('user_type_id') }}</mat-error>\n </mat-form-field>\n </div>\n\n <div\n *ngIf=\"(this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) && this.form.get('user_type_id').value == 3\"\n class=\"flex-fill ml-4\">\n <p class=\"mb-0 fw-bold\">\n Roles\n </p>\n <div *ngFor=\"let role of roles\" class=\"d-flex flex-column\">\n <mat-checkbox (change)=\"roleSelected($event, role.id)\" [checked]=\"role.selected\">\n {{ role.label }}\n </mat-checkbox>\n </div>\n </div>\n\n </div>\n <div class=\"d-flex justify-content-end align-items-center gap-3\">\n <button [disabled]=\"isWorking\" color=\"primary\" mat-raised-button type=\"submit\">\n Save\n </button>\n <button (click)=\"closeDialog()\" [disabled]=\"isWorking\" mat-flat-button type=\"button\">\n Cancel\n </button>\n </div>\n </div>\n</form>","import { Injectable } from '@angular/core';\nimport { TechlifyService } from '../base-model';\nimport { HttpService } from '../core';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserTenantService extends TechlifyService {\n\n constructor(\n httpService: HttpService\n ) {\n super(httpService, 'user-tenants');\n }\n\n enable(userTenant: any, params?: any): Observable<any> {\n return this.http.put(`api/user-tenants/${userTenant?.id}/enable`, { params });\n }\n\n disable(userTenant: any, params?: any): Observable<any> {\n return this.http.put(`api/user-tenants/${userTenant?.id}/disable`, { params });\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ChangeDetectionStrategy } from '@angular/core';\nimport { AlertService, CredentialsService } from '../core';\nimport { UserTenantService } from '../user-clients-list/user-tenant.service';\nimport { User } from \"../user/user.model\";\nimport { CurrentUserService } from \"../user/current-user.service\";\n\n@Component({\n selector: 'app-user-client-enable-disable-button',\n templateUrl: './user-client-enable-disable-button.component.html',\n styleUrls: ['./user-client-enable-disable-button.component.css'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class UserClientEnableDisableButtonComponent implements OnInit {\n @Input() userClient: any;\n @Output() saved: EventEmitter<any> = new EventEmitter();\n\n user: User;\n isWorking = false;\n\n constructor(\n private credentialsService: CredentialsService,\n protected currentUserService: CurrentUserService,\n protected service: UserTenantService,\n private alertService: AlertService\n ) {\n this.user = this.credentialsService.credentials.user;\n }\n\n ngOnInit(): void {\n }\n\n enable(): void {\n this.isWorking = true;\n this.service.enable(this.userClient).subscribe({\n next: (response: any) => {\n this.isWorking = false;\n this.saved.emit(response?.item);\n this.alertService.addAlert('User enabled for the client.', 'success');\n },\n error: () => (this.isWorking = false)\n });\n }\n\n disable(): void {\n this.isWorking = true;\n this.service.disable(this.userClient).subscribe({\n next: (response: any) => {\n this.isWorking = false;\n this.saved.emit(response?.item);\n this.alertService.addAlert('User disabled for the client.', 'success');\n },\n error: () => (this.isWorking = false)\n });\n }\n}\n","<button\n type=\"button\"\n mat-stroked-button color=\"warn\"\n *ngIf=\"userClient?.is_enabled && userClient?.user_id != user?.id\"\n [disabled]=\"isWorking\"\n (click)=\"disable()\"\n>\n Disable\n</button>\n<button\n mat-raised-button color=\"primary\"\n *ngIf=\"!userClient?.is_enabled && userClient?.user_id != user?.id\"\n [disabled]=\"isWorking\"\n type=\"button\"\n (click)=\"enable()\"\n>\n Enable\n</button>\n","import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { User } from '../user/user.model';\nimport { TechlifyListComponent } from '../base-model';\nimport { UserTenantService } from './user-tenant.service';\n\n@Component({\n selector: 'app-user-clients-list',\n templateUrl: './user-clients-list.component.html',\n styleUrls: ['./user-clients-list.component.css'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class UserClientsListComponent extends TechlifyListComponent implements OnInit {\n\n @Input() user: User;\n\n displayedColumns: string[] = [\n '#',\n 'Name',\n 'Added On',\n 'Status',\n 'Action'\n ];\n\n constructor(\n protected service: UserTenantService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n loadData(): void {\n if (!this.user) {\n return;\n }\n\n this.isWorking = true;\n const params: any = {\n user_ids: this.user?.id,\n };\n this.service.index(params).subscribe({\n next: (response: any) => {\n this.models = this.models.concat(response?.data);\n this.isWorking = false;\n },\n error: () => (this.isWorking = false)\n });\n }\n\n}\n","<mat-card>\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Name Column -->\n <ng-container matColumnDef=\"Name\">\n <th mat-header-cell *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.client?.name }}\n </td>\n </ng-container>\n\n <!-- Added On Column -->\n <ng-container matColumnDef=\"Added On\">\n <th mat-header-cell *matHeaderCellDef> Added On </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.created_at | date }}\n </td>\n </ng-container>\n\n <!-- Status Column -->\n <ng-container matColumnDef=\"Status\">\n <th mat-header-cell *matHeaderCellDef> Status </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.is_enabled ? 'Enabled' : 'Disabled' }}\n </td>\n </ng-container>\n\n <!-- Action Column -->\n <ng-container matColumnDef=\"Action\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let element\">\n <app-user-client-enable-disable-button\n [userClient]=\"element\"\n (saved)=\"reload()\"\n ></app-user-client-enable-disable-button>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n\n </mat-card-content>\n</mat-card>\n","import { Injectable } from '@angular/core';\nimport { TechlifyService } from '../../base-model';\nimport { HttpService } from '../../core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSessionService extends TechlifyService {\n\n constructor(\n httpService: HttpService,\n ) {\n super(httpService, 'user-sessions');\n }\n}\n","import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { TechlifyListComponent } from '../../../base-model';\nimport { User } from '../../user.model';\nimport { UserSessionService } from \"../user-session.service\";\n\n@Component({\n selector: 'app-user-sessions',\n templateUrl: './user-sessions.component.html',\n styleUrls: ['./user-sessions.component.css'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class UserSessionsComponent extends TechlifyListComponent implements OnInit {\n\n @Input() user: User;\n\n displayedColumns: string[] = [\n '#',\n 'Started On',\n 'Expires At',\n ];\n\n constructor(\n protected service: UserSessionService,\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n loadData(): void {\n if (!this.user) {\n return;\n }\n\n this.isWorking = true;\n const params: any = {\n user_ids: this.user?.id,\n };\n this.service.index(params).subscribe({\n next: (response: any) => {\n this.models = this.models.concat(response?.data);\n this.isWorking = false;\n },\n error: () => (this.isWorking = false)\n });\n }\n\n}\n","<mat-card>\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Started On Column -->\n <ng-container matColumnDef=\"Started On\">\n <th mat-header-cell *matHeaderCellDef> Started On </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <!-- Expires At Column -->\n <ng-container matColumnDef=\"Expires At\">\n <th mat-header-cell *matHeaderCellDef> Expires At </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.expires_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n\n </mat-card-content>\n</mat-card>\n","import { NgModule } from '@angular/core';\nimport { UserClientEnableDisableButtonComponent } from './user-client-enable-disable-button.component';\nimport { SharedModule } from '../shared.module';\n\n\n@NgModule({\n declarations: [UserClientEnableDisableButtonComponent],\n imports: [\n SharedModule\n ],\n exports: [UserClientEnableDisableButtonComponent]\n})\nexport class UserClientEnableDisableButtonModule { }\n","import { NgModule } from '@angular/core';\nimport { UserClientsListComponent } from './user-clients-list.component';\nimport { UserClientEnableDisableButtonModule } from '../user-client-enable-disable-button/user-client-enable-disable-button.module';\nimport { SharedModule } from '../shared.module';\n\n\n@NgModule({\n declarations: [UserClientsListComponent],\n imports: [\n SharedModule,\n UserClientEnableDisableButtonModule\n ],\n exports: [UserClientsListComponent]\n})\nexport class UserClientsListModule { }\n","import { NgModule } from '@angular/core';\nimport { UserSessionsComponent } from './user-sessions.component';\nimport { SharedModule } from '../../../shared.module';\n\n\n@NgModule({\n declarations: [UserSessionsComponent],\n imports: [\n SharedModule,\n ],\n exports: [UserSessionsComponent]\n})\nexport class UserSessionsModule { }\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-techlify-core-user-sessions.module-BRmDpYG3.mjs","names":["i1.HttpService","i1.FormValidatorService","i2","i7","i8","i9","i10.SearchableSelectorComponent","i11.TimelineFilterComponent","i1","i4.AuditLogService","i5","i6.ExportExcelButtonComponent","i13.TechlifyIconComponent","i14.AuditLogListFilterComponent","i1.HttpService","i2","i3","i4","i5","i6.TimelineFilterComponent","i7","i1.HttpService","i2.HttpService","i4.FormValidatorService","i5.UserService","i6.CurrentUserService","i7.UserConfigService","i8","i9.DocumentViewerComponent","i10.FileDropperComponent","i11","i12","i14","i15","i16","i1.HttpService","i1.CredentialsService","i2.CurrentUserService","i3.UserTenantService","i1.AlertService","i4","i1.UserTenantService","i2","i3","i4","i5","i6.UserClientEnableDisableButtonComponent","i1.HttpService","i1.UserSessionService","i2","i3","i4","i5"],"sources":["../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log.service.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.html","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.component.html","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.component.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.component.html","../../../projects/ngx-techlify-core/src/lib/user/user-type.enum.ts","../../../projects/ngx-techlify-core/src/lib/user/user.service.ts","../../../projects/ngx-techlify-core/src/lib/user/user-form/user-form.component.ts","../../../projects/ngx-techlify-core/src/lib/user/user-form/user-form.component.html","../../../projects/ngx-techlify-core/src/lib/user-clients-list/user-tenant.service.ts","../../../projects/ngx-techlify-core/src/lib/user-client-enable-disable-button/user-client-enable-disable-button.component.ts","../../../projects/ngx-techlify-core/src/lib/user-client-enable-disable-button/user-client-enable-disable-button.component.html","../../../projects/ngx-techlify-core/src/lib/user-clients-list/user-clients-list.component.ts","../../../projects/ngx-techlify-core/src/lib/user-clients-list/user-clients-list.component.html","../../../projects/ngx-techlify-core/src/lib/user/user-sessions/user-session.service.ts","../../../projects/ngx-techlify-core/src/lib/user/user-sessions/user-sessions/user-sessions.component.ts","../../../projects/ngx-techlify-core/src/lib/user/user-sessions/user-sessions/user-sessions.component.html","../../../projects/ngx-techlify-core/src/lib/user-client-enable-disable-button/user-client-enable-disable-button.module.ts","../../../projects/ngx-techlify-core/src/lib/user-clients-list/user-clients-list.module.ts","../../../projects/ngx-techlify-core/src/lib/user/user-sessions/user-sessions/user-sessions.module.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { TechlifyService } from '../base-model';\nimport { HttpService } from '../core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuditLogService extends TechlifyService {\n constructor(httpService: HttpService) {\n super(httpService, 'audit-logs');\n }\n}\n","import { Component, OnInit, Output, EventEmitter, Input, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { FormValidatorService } from '../../core';\n\n@UntilDestroy()\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-audit-log-list-filter',\n templateUrl: './audit-log-list-filter.component.html',\n styleUrls: ['./audit-log-list-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class AuditLogListFilterComponent implements OnInit, OnDestroy {\n\n @Input() filterForm: UntypedFormGroup;\n @Input() objectId: any;\n @Input() objectType: any;\n\n @Output() valueChange = new EventEmitter();\n\n constructor(private formValidatorService: FormValidatorService) {\n }\n\n get showObjectFilter(): boolean {\n return !(this.objectId || this.objectType);\n }\n\n ngOnInit(): void {\n }\n\n resetFieldValue(field: string): void {\n this.filterForm.get(field).setValue('');\n }\n\n getFieldValue(field: string): any {\n return this.filterForm.get(field).value;\n }\n\n isFieldValid(field: string): any {\n return this.formValidatorService.isFieldValid(field, this.filterForm, true);\n }\n\n ngOnDestroy(): void {\n }\n\n}\n","<form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2 w-100\">\n <mat-form-field class='fl-md'>\n <mat-label>Search Changes</mat-label>\n <input type=\"text\" matInput formControlName=\"change_search\" />\n <button *ngIf=\"getFieldValue('change_search')\" matSuffix mat-icon-button (click)=\"resetFieldValue('change_search')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <app-timeline-filter class='fl-sm' labelText=\"Activity Date\" formControlName=\"duration\"\n [form]=\"filterForm\" [showClearButton]=\"true\" appearance=\"outline\"></app-timeline-filter>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Action</mat-label>\n <mat-select formControlName=\"action\" [multiple]=\"true\">\n <mat-option value=\"created\">Created</mat-option>\n <mat-option value=\"updated\">Updated</mat-option>\n <mat-option value=\"deleted\">Deleted</mat-option>\n </mat-select>\n <button *ngIf=\"getFieldValue('action')\" matSuffix mat-icon-button (click)=\"resetFieldValue('action')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field class='fl-sm' *ngIf=\"showObjectFilter\">\n <mat-label>Model Type</mat-label>\n <app-searchable-selector formControlName=\"object_type\" apiUrl=\"api/audit-log-types\" titleField=\"object_type\"\n valueField=\"object_type\" [sort]=\"false\" [multiple]=\"true\">\n </app-searchable-selector>\n <button *ngIf=\"getFieldValue('object_type')\" matSuffix mat-icon-button (click)=\"resetFieldValue('object_type')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Model #</mat-label>\n <input type=\"text\" matInput formControlName=\"model_search\" />\n <button *ngIf=\"getFieldValue('model_search')\" matSuffix mat-icon-button (click)=\"resetFieldValue('model_search')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field class='fl-sm'>\n <mat-label>Creator</mat-label>\n <app-searchable-selector formControlName=\"creator_ids\" [multiple]=\"true\" apiUrl=\"api/users\"\n titleField=\"name\"></app-searchable-selector>\n <button *ngIf=\"getFieldValue('creator_ids')\" matSuffix mat-icon-button (click)=\"resetFieldValue('creator_ids')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n</form>","import { Component, OnInit, OnDestroy, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TechlifyListComponent } from '../../base-model';\nimport { FormBuilder } from '@angular/forms';\nimport { AuditLogService } from '../audit-log.service';\nimport { DatePipe } from '@angular/common';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-log-list',\n templateUrl: './audit-log-list.component.html',\n styleUrls: ['./audit-log-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class AuditLogListComponent extends TechlifyListComponent implements OnInit, OnDestroy {\n\n @Input() objectId: any;\n @Input() objectType: any;\n @Input() showFilter = true;\n @Input() showExportButtons = true;\n @Input() userId: any;\n @Input() disableFilterPatchingFromUrl = false;\n @Input() scrollContainer: string = ''; //Don't default the scroll container. Override it where ever required.\n\n displayedColumns: any[] = [\n 'index',\n 'id',\n 'created_at',\n 'object_type',\n 'object_id',\n 'action',\n 'changes',\n 'user.email',\n 'actions',\n ];\n\n constructor(\n private router: Router,\n public sanitizer: DomSanitizer,\n private formBuilder: FormBuilder,\n protected override service: AuditLogService,\n protected datePipe: DatePipe\n ) {\n super();\n\n this.filterFormConfiguration = {\n duration: { number: true },\n object_type: { multiple: true },\n action: { multiple: true },\n creator_ids: { multiple: true },\n };\n\n this.filterForm = this.formBuilder.group({\n action: [''],\n change_search: [''],\n duration: [''],\n date_from: [''],\n date_to: [''],\n model_search: [''],\n object_type: [''],\n object_id: [''],\n user_id: [''],\n sort_by: 'created_at|desc',\n creator_ids: [''],\n });\n }\n\n ngOnInit(): void {\n this.initializeData();\n\n if (!this.disableFilterPatchingFromUrl) {\n this.patchFiltersFromRoute();\n }\n\n this.loadData();\n this.listenFilterChanges();\n }\n\n get excelData(): any[] {\n if (this.models.length > 0) {\n return this.models.map(item => {\n return {\n Type: item?.object_type,\n Action: item?.action,\n Data: JSON.stringify(item?.data || {}),\n Object: JSON.stringify(item?.object || {}),\n 'Pre-Object': JSON.stringify(item?.pre_object || {}),\n 'Created At': new Date(item?.created_at).toDateString(),\n 'Created By': item?.user?.email\n };\n });\n }\n return [];\n }\n\n logClicked(log: any): void {\n this.router.navigate(['/system/audit-logs/log-view', log.id]);\n }\n\n initializeData(): void {\n if (this.objectType) this.filterForm.patchValue({ object_type: this.objectType });\n if (this.objectId) this.filterForm.patchValue({ object_id: this.objectId });\n if (this.userId) this.filterForm.patchValue({ user_id: this.userId });\n }\n\n getTransformedChanges(log: any): string {\n if (log?.data?.changes) {\n const changes = Object.keys(log?.data?.changes) || [];\n let value = '<div>';\n changes.forEach((key: any) => {\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\n value = `${value} <div><b>${displayAttribute}:</b> <span id=\"old-value\">${log?.pre_object[key] ?? ''}</span><span id=\"new-value\">${log?.object[key] ?? ''}</span></div>`;\n });\n value = `${value} </div>`;\n return value;\n }\n return '';\n }\n\n ngOnDestroy(): void {\n // Needed for automatic unsubscribe with untilDestroyed\n }\n\n loadData(): void {\n const filters = JSON.parse(JSON.stringify(this.filterForm.value));\n filters.page = this.page;\n filters.date_from = this.datePipe.transform(filters.date_from, 'yyyy-MM-dd') ?? '';\n filters.date_to = this.datePipe.transform(filters.date_to, 'yyyy-MM-dd') ?? '';\n filters.creator_ids = filters.creator_ids.toString();\n filters.object_type = filters.object_type.toString();\n filters.action = filters.action.toString();\n\n super.loadData(filters);\n }\n}\n","<div class=\"m-2\">\n <mat-card>\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\" style=\"min-width: 200px\">\n <h5 class=\"mb-0\"> Audit Logs </h5>\n <app-export-excel-button *ngIf=\"showExportButtons\" matTooltip=\"Export\" elementId=\"audit-logs-table\"\n class=\"mt-1\" name=\"AuditLogs\" [data]=\"excelData\">\n </app-export-excel-button>\n </div>\n\n <app-audit-log-list-filter class=\"w-100\" *ngIf=\"showFilter\" [filterForm]=\"filterForm\" [objectType]=\"objectType\"\n [objectId]=\"objectId\"></app-audit-log-list-filter>\n </div>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"mt-2\">\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" matSort class=\"w-100\" infiniteScroll [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\" [infiniteScrollContainer]=\"scrollContainer\" (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\" (matSortChange)=\"sortColumn($event)\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let i = index\"> {{ i+1 }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> Log # </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.id}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"object_type\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Model Type </th>\n <td mat-cell *matCellDef=\"let auditLog;\"> {{ auditLog.object_type }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"object_id\">\n <th mat-header-cell *matHeaderCellDef> Model # </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.object_id}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Action </th>\n <td mat-cell *matCellDef=\"let auditLog;\"> {{ auditLog?.action }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"created_at\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Created At </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.created_at | date:'medium'}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"user.email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Created By </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <p class=\"mb-0\">{{auditLog?.user?.name}}</p>\n <small class=\"text-secondary\">{{ auditLog?.user?.email }}</small>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"changes\">\n <th mat-header-cell *matHeaderCellDef> Changes</th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <div class=\"px-3\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(getTransformedChanges(auditLog))\">\n </div>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <div class=\"text-secondary\">\n <app-techlify-icon role=\"button\" name=\"view\" class=\"clickable\"\n (click)=\"logClicked(auditLog);$event.stopPropagation();\" matTooltip=\"View\"></app-techlify-icon>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n </mat-card>\n</div>","import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { PageEvent } from '../data-table/data-table.model';\nimport { HttpService } from '../core/http.service';\nimport { TimelineValue } from '../timeline-filter';\n\n@UntilDestroy()\n@Component({\n selector: 'app-login-history-for-user',\n templateUrl: './login-history-for-user.component.html',\n styleUrls: ['./login-history-for-user.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class LoginHistoryForUserComponent implements OnInit {\n\n loginHistoryList: any[] = [];\n pageEvent: any = { page: 1, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n };\n historyFilterForm: UntypedFormGroup;\n displayedColumns: any[] = ['index', 'created_at'];\n @Input() userId: any;\n\n constructor(\n private http: HttpService,\n private fb: UntypedFormBuilder,\n ) {\n this.historyFilterForm = this.fb.group({\n 'duration': [''],\n 'date_from': [''],\n 'date_to': ['']\n });\n }\n\n ngOnInit() {\n this.filters.user_id = this.userId;\n this.historyFilterForm.valueChanges\n .pipe(debounceTime(500), distinctUntilChanged(), untilDestroyed(this))\n .subscribe((value: any) => {\n value.date_from = value.date_from ? (value.date_from as Date).toISOString() : '';\n value.date_to = value.date_to ? (value.date_to as Date).toISOString() : '';\n this.filterChange(value);\n });\n this.initializeData();\n }\n\n onTimelineChange(range: TimelineValue) {\n let date_from = range?.date_from ? new Date(range.date_from) : '';\n let date_to = range?.date_to ? new Date(range.date_to) : '';\n this.historyFilterForm.patchValue({\n date_from,\n date_to\n });\n }\n\n initializeData() {\n this.http.get(`api/user-login-history`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.loginHistoryList = this.loginHistoryList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n filterChange(event: any) {\n this.filters = {\n ...this.filters,\n ...event\n };\n this.reload();\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n\n reload() {\n this.loginHistoryList = [];\n this.pageEvent = { page: 1, lastPage: 1 };\n this.initializeData();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","<div class=\"mat-typography m-4\">\n <form [formGroup]=\"historyFilterForm\" class=\"d-flex justify-content-start align-items-center\">\n <app-timeline-filter formControlName=\"duration\" (selectionChange)=\"onTimelineChange($event)\"></app-timeline-filter>\n </form>\n\n <section>\n <div class=\"scroll-container\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\" [scrollWindow]=\"false\">\n <table mat-table [dataSource]=\"loginHistoryList\" matSort class=\"w-100 mt-1\" multiTemplateDataRows\n id=\"login-history-table\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let loginHistory; let i = dataIndex\"> {{ i+1 }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"created_at\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Last Login</th>\n <td mat-cell *matCellDef=\"let loginHistory;\">\n {{loginHistory?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n\n </section>\n</div>\n","export enum UserTypeEnum {\n ADMIN = 1,\n CLIENT_ADMIN = 2,\n CLIENT_USER = 3\n}","import { Injectable } from '@angular/core';\nimport { HttpService } from '../core';\nimport { TechlifyService } from '../base-model';\n\n@Injectable({ providedIn: 'root' })\nexport class UserService extends TechlifyService {\n constructor(http: HttpService) {\n super(http, 'users');\n }\n\n getUsers(filterModel: any) {\n const params = new URLSearchParams(filterModel).toString();\n return this.http.get(`api/users?${params}`).toPromise();\n }\n\n getUser(userId) {\n return this.http.get(`api/users/${userId}`).toPromise();\n }\n\n createUser(model: any) {\n return this.http.post('api/users', model).toPromise();\n }\n\n updateUser(model: any) {\n return this.http.put(`api/users/${model.id}`, model).toPromise();\n }\n\n enable(user: any) {\n return this.http\n .patch('api/users/' + user.id + '/enable', user)\n .toPromise();\n }\n\n disable(user: any) {\n return this.http\n .patch('api/users/' + user.id + '/disable', user)\n .toPromise();\n }\n\n resetPassword(user: any) {\n return this.http.post(`api/users/${user?.id}/reset-password`, {});\n }\n}\n","import { Component, Inject, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { UntypedFormBuilder, Validators, UntypedFormControl, UntypedFormArray } from '@angular/forms';\n\nimport { HttpService } from '../../core';\n\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UserService } from '../user.service';\nimport { MultiUserConfig } from '../../user-config/user-config.model';\nimport { UserConfigService } from '../../user-config/user-config.service';\nimport { FileDropperConfig } from \"../../file-dropper\";\nimport { ViewerConfig } from \"../../document-viewer\";\nimport { CurrentUserService } from '../current-user.service';\nimport { UserTypeEnum } from '../user-type.enum';\nimport { TechlifyFormComponent } from '../../base-model';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { SharedModule } from '../../shared.module';\n\n\n\n@Component({\n selector: 'app-user-form',\n templateUrl: './user-form.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n SharedModule\n ]\n})\nexport class UserFormComponent extends TechlifyFormComponent implements OnInit {\n isPasswordRequired = false;\n config: MultiUserConfig;\n userTypes: any = [\n { title: 'Admin', value: 2 },\n { title: 'Normal User', value: 3 },\n ];\n roles: any[] = [];\n fileConfig: FileDropperConfig;\n viewerConfig: ViewerConfig;\n fileList: any[] = [];\n\n errorMessages: any = {\n name: {\n required: 'Name is required'\n },\n email: {\n required: 'Email is required',\n email: 'Invalid email',\n },\n password: {\n required: 'Password is required'\n },\n user_type_id: {\n required: 'User Type is required'\n }\n };\n\n constructor(\n public dialogRef: MatDialogRef<UserFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private http: HttpService,\n private fb: UntypedFormBuilder,\n protected formValidatorService: FormValidatorService,\n protected userService: UserService,\n private currentUserService: CurrentUserService,\n public userConfigService: UserConfigService,\n ) {\n super(formValidatorService, userService);\n this.config = this.userConfigService.getConfig();\n }\n\n get roleForms() {\n return this.form.get('roles') as UntypedFormArray;\n }\n\n get canUpdateUserCredential() {\n return this.currentUserService.getUser().user_type_id == UserTypeEnum.ADMIN\n || (this.data?.model?.user_clients || [])?.length <= 1;\n }\n\n ngOnInit() {\n this.userTypes = this.config.userConfig.showUserTypes\n ? this.config.userConfig.userTypes\n : this.userTypes;\n this.form = this.fb.group({\n id: [''],\n name: new UntypedFormControl('', Validators.compose([Validators.required])),\n email: new UntypedFormControl('', Validators.compose([Validators.required, Validators.email])),\n password: new UntypedFormControl(''),\n phone: new UntypedFormControl(''),\n user_type_id: new UntypedFormControl('', Validators.required),\n roles: this.fb.array([]),\n roles_exists: [[]],\n client_id: [this.data?.client_id ?? ''],\n signature_url: [''],\n signature: [''],\n is_temporary_password: [true],\n });\n\n const user = this.data?.model;\n if (user) {\n this.isUpdate = true;\n this.form.patchValue(user);\n this.form.controls.user_type_id.setValue(user.user_type_id);\n this.form.controls.roles_exists.setValue(user.roles || []);\n }\n // The calling context's client_id always wins, even in edit mode (e.g. an app-admin\n // managing a specific tenant's users should save against that tenant, not the user's own).\n if (this.data?.client_id != null) {\n this.form.controls.client_id.setValue(this.data.client_id);\n }\n if (this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) {\n this.loadRoles();\n }\n this.fileConfig = {\n fileId: 'subjectFile',\n containerId: 'subjectFileContainer',\n styles: {\n height: '200px'\n },\n multiple: false,\n acceptFile: '*',\n maxSize: 10,\n acceptFileText: 'PNG and JPEG only'\n };\n\n this.viewerConfig = {\n imageStyle: {\n height: '200px',\n width: '400px'\n },\n viewerStyle: {\n height: '200px',\n width: '100%'\n }\n };\n\n if (!this.canUpdateUserCredential) {\n this.form.get('email').disable();\n this.form.get('password').disable();\n }\n }\n\n loadRoles() {\n this.isWorking = true;\n const filter = {\n client_id: this.data?.client_id || this.data?.model?.client_id || '',\n is_subscribed: true,\n sort_by: 'label|asc'\n };\n this.http.get('api/roles', { params: filter }).toPromise().then(\n (res: any) => {\n let roles = res.data;\n /* Lets set the roles this user has */\n for (let role of roles) {\n role.selected = this.form.value.roles_exists.find(roleData => roleData.id == role.id) ? true : false;\n }\n this.roles = roles;\n this.isWorking = false;\n }\n );\n }\n\n save() {\n const data: any = this.form.getRawValue();\n let roles = [];\n\n this.roles.forEach((role: any) => {\n if (role.selected) {\n roles[role.id] = role;\n }\n });\n data.roles = roles;\n\n super.submit(data);\n }\n\n roleSelected(event: any, roleId: number) {\n this.roles.forEach((role: any) => {\n if (role.id == roleId) {\n role.selected = event.checked;\n }\n });\n }\n\n async fileChanged(event: any) {\n this.fileList = event;\n\n if (this.fileList.length > 0) {\n\n const result: any = await this.uploadEntityFile(\n this.fileList[0]\n );\n this.form\n .get('signature')\n .setValue(result.item.file);\n this.form\n .get('signature_url')\n .setValue(result.item.url);\n this.fileList = [];\n }\n }\n\n\n async removeFile() {\n if (this.form.value.signature) {\n this.form.patchValue({\n signature: '',\n signature_url: ''\n });\n }\n }\n uploadEntityFile(file: File) {\n const formData: FormData = new FormData();\n formData.append('fileData', file, file.name);\n return this.http\n .skipHeader()\n .post(\n 'api/entity-files-upload',\n formData,\n ).toPromise();\n }\n}\n","<form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"d-flex flex-column justify-content-start align-items center gap-1\" mat-dialog-content>\n <h5 class=\"fw-bold text-center\">{{ isUpdate ? 'Edit' : 'Create ' }} User</h5>\n <div class=\"d-flex\">\n <div class=\"d-flex flex-column flex-fill gap-1\">\n <mat-form-field>\n <mat-label>Full name</mat-label>\n <input [required]=\"!!form.get('name').validator\" autocomplete=\"off\" formControlName=\"name\" matInput\n placeholder=\"Full Name\" type=\"text\" />\n <mat-error *ngIf=\"isFieldValid('name') && !!form.get('name').validator\">{{ getErrorMessage('name') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input [required]=\"!!form.get('email').validator\" formControlName=\"email\" matInput placeholder=\"Email\"\n type=\"email\" />\n <mat-error *ngIf=\"isFieldValid('email') && !!form.get('email').validator\">\n {{ getErrorMessage('email') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field *ngIf=\"this.config.userConfig.showPhone\">\n <mat-label>Phone</mat-label>\n <input autocomplete=\"off\" formControlName=\"phone\" matInput placeholder=\"Phone\" type=\"text\" />\n </mat-form-field>\n <mat-form-field>\n <mat-label>Password</mat-label>\n <input [required]=\"isPasswordRequired && !!form.get('password').validator\" autocomplete=\"off\"\n formControlName=\"password\" matInput placeholder=\"Password\" type=\"password\" />\n <mat-error *ngIf=\"isFieldValid('password') && !!form.get('password').validator\">\n {{ getErrorMessage('password') }}\n </mat-error>\n </mat-form-field>\n\n <div class=\"d-flex flex-column justify-content-start gap-1\">\n <mat-checkbox formControlName=\"is_temporary_password\">Is Temporary Password?</mat-checkbox>\n <small class=\"text-secondary\">Should this user to update password on first login?</small>\n </div>\n\n <div *ngIf=\"this.config.userConfig.showSignature\">\n <ng-template #fileUpload>\n <section class=\"col-12\">\n <div>User Signature</div>\n <app-file-dropper (fileChanged)=\"fileChanged($event)\" [config]=\"fileConfig\" [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </ng-template>\n <div *ngIf=\"form.get('signature').value;else fileUpload;\" class=\"col-12\">\n <app-document-viewer (remove)=\"removeFile()\" [config]=\"this.viewerConfig\"\n [fileUrl]=\"form.get('signature_url').value\" [file]=\"form.get('signature').value\">\n </app-document-viewer>\n </div>\n </div>\n <mat-form-field *ngIf=\"this.config.userConfig.showUserTypes\" class=\"mt-3\">\n <mat-label>User Type</mat-label>\n <mat-select autocomplete=\"off\" formControlName=\"user_type_id\" required>\n <mat-option *ngFor=\"let userType of userTypes\" [value]=\"userType.value\">\n {{ userType.title }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('user_type_id')\">{{ getErrorMessage('user_type_id') }}</mat-error>\n </mat-form-field>\n </div>\n\n <div\n *ngIf=\"(this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) && this.form.get('user_type_id').value == 3\"\n class=\"flex-fill ml-4\">\n <p class=\"mb-0 fw-bold\">\n Roles\n </p>\n <div *ngFor=\"let role of roles\" class=\"d-flex flex-column\">\n <mat-checkbox (change)=\"roleSelected($event, role.id)\" [checked]=\"role.selected\">\n {{ role.label }}\n </mat-checkbox>\n </div>\n </div>\n\n </div>\n <div class=\"d-flex justify-content-end align-items-center gap-3\">\n <button [disabled]=\"isWorking\" color=\"primary\" mat-raised-button type=\"submit\">\n Save\n </button>\n <button (click)=\"closeDialog()\" [disabled]=\"isWorking\" mat-flat-button type=\"button\">\n Cancel\n </button>\n </div>\n </div>\n</form>","import { Injectable } from '@angular/core';\nimport { TechlifyService } from '../base-model';\nimport { HttpService } from '../core';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserTenantService extends TechlifyService {\n\n constructor(\n httpService: HttpService\n ) {\n super(httpService, 'user-tenants');\n }\n\n enable(userTenant: any, params?: any): Observable<any> {\n return this.http.put(`api/user-tenants/${userTenant?.id}/enable`, { params });\n }\n\n disable(userTenant: any, params?: any): Observable<any> {\n return this.http.put(`api/user-tenants/${userTenant?.id}/disable`, { params });\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ChangeDetectionStrategy } from '@angular/core';\nimport { AlertService, CredentialsService } from '../core';\nimport { UserTenantService } from '../user-clients-list/user-tenant.service';\nimport { User } from \"../user/user.model\";\nimport { CurrentUserService } from \"../user/current-user.service\";\n\n@Component({\n selector: 'app-user-client-enable-disable-button',\n templateUrl: './user-client-enable-disable-button.component.html',\n styleUrls: ['./user-client-enable-disable-button.component.css'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class UserClientEnableDisableButtonComponent implements OnInit {\n @Input() userClient: any;\n @Output() saved: EventEmitter<any> = new EventEmitter();\n\n user: User;\n isWorking = false;\n\n constructor(\n private credentialsService: CredentialsService,\n protected currentUserService: CurrentUserService,\n protected service: UserTenantService,\n private alertService: AlertService\n ) {\n this.user = this.credentialsService.credentials.user;\n }\n\n ngOnInit(): void {\n }\n\n enable(): void {\n this.isWorking = true;\n this.service.enable(this.userClient).subscribe({\n next: (response: any) => {\n this.isWorking = false;\n this.saved.emit(response?.item);\n this.alertService.addAlert('User enabled for the client.', 'success');\n },\n error: () => (this.isWorking = false)\n });\n }\n\n disable(): void {\n this.isWorking = true;\n this.service.disable(this.userClient).subscribe({\n next: (response: any) => {\n this.isWorking = false;\n this.saved.emit(response?.item);\n this.alertService.addAlert('User disabled for the client.', 'success');\n },\n error: () => (this.isWorking = false)\n });\n }\n}\n","<button\n type=\"button\"\n mat-stroked-button color=\"warn\"\n *ngIf=\"userClient?.is_enabled && userClient?.user_id != user?.id\"\n [disabled]=\"isWorking\"\n (click)=\"disable()\"\n>\n Disable\n</button>\n<button\n mat-raised-button color=\"primary\"\n *ngIf=\"!userClient?.is_enabled && userClient?.user_id != user?.id\"\n [disabled]=\"isWorking\"\n type=\"button\"\n (click)=\"enable()\"\n>\n Enable\n</button>\n","import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { User } from '../user/user.model';\nimport { TechlifyListComponent } from '../base-model';\nimport { UserTenantService } from './user-tenant.service';\n\n@Component({\n selector: 'app-user-clients-list',\n templateUrl: './user-clients-list.component.html',\n styleUrls: ['./user-clients-list.component.css'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class UserClientsListComponent extends TechlifyListComponent implements OnInit {\n\n @Input() user: User;\n\n displayedColumns: string[] = [\n '#',\n 'Name',\n 'Added On',\n 'Status',\n 'Action'\n ];\n\n constructor(\n protected service: UserTenantService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n loadData(): void {\n if (!this.user) {\n return;\n }\n\n this.isWorking = true;\n const params: any = {\n user_ids: this.user?.id,\n };\n this.service.index(params).subscribe({\n next: (response: any) => {\n this.models = this.models.concat(response?.data);\n this.isWorking = false;\n },\n error: () => (this.isWorking = false)\n });\n }\n\n}\n","<mat-card>\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Name Column -->\n <ng-container matColumnDef=\"Name\">\n <th mat-header-cell *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.client?.name }}\n </td>\n </ng-container>\n\n <!-- Added On Column -->\n <ng-container matColumnDef=\"Added On\">\n <th mat-header-cell *matHeaderCellDef> Added On </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.created_at | date }}\n </td>\n </ng-container>\n\n <!-- Status Column -->\n <ng-container matColumnDef=\"Status\">\n <th mat-header-cell *matHeaderCellDef> Status </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.is_enabled ? 'Enabled' : 'Disabled' }}\n </td>\n </ng-container>\n\n <!-- Action Column -->\n <ng-container matColumnDef=\"Action\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let element\">\n <app-user-client-enable-disable-button\n [userClient]=\"element\"\n (saved)=\"reload()\"\n ></app-user-client-enable-disable-button>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n\n </mat-card-content>\n</mat-card>\n","import { Injectable } from '@angular/core';\nimport { TechlifyService } from '../../base-model';\nimport { HttpService } from '../../core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSessionService extends TechlifyService {\n\n constructor(\n httpService: HttpService,\n ) {\n super(httpService, 'user-sessions');\n }\n}\n","import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { TechlifyListComponent } from '../../../base-model';\nimport { User } from '../../user.model';\nimport { UserSessionService } from \"../user-session.service\";\n\n@Component({\n selector: 'app-user-sessions',\n templateUrl: './user-sessions.component.html',\n styleUrls: ['./user-sessions.component.css'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class UserSessionsComponent extends TechlifyListComponent implements OnInit {\n\n @Input() user: User;\n\n displayedColumns: string[] = [\n '#',\n 'Started On',\n 'Expires At',\n ];\n\n constructor(\n protected service: UserSessionService,\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n loadData(): void {\n if (!this.user) {\n return;\n }\n\n this.isWorking = true;\n const params: any = {\n user_ids: this.user?.id,\n };\n this.service.index(params).subscribe({\n next: (response: any) => {\n this.models = this.models.concat(response?.data);\n this.isWorking = false;\n },\n error: () => (this.isWorking = false)\n });\n }\n\n}\n","<mat-card>\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Started On Column -->\n <ng-container matColumnDef=\"Started On\">\n <th mat-header-cell *matHeaderCellDef> Started On </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <!-- Expires At Column -->\n <ng-container matColumnDef=\"Expires At\">\n <th mat-header-cell *matHeaderCellDef> Expires At </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.expires_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n\n </mat-card-content>\n</mat-card>\n","import { NgModule } from '@angular/core';\nimport { UserClientEnableDisableButtonComponent } from './user-client-enable-disable-button.component';\nimport { SharedModule } from '../shared.module';\n\n\n@NgModule({\n declarations: [UserClientEnableDisableButtonComponent],\n imports: [\n SharedModule\n ],\n exports: [UserClientEnableDisableButtonComponent]\n})\nexport class UserClientEnableDisableButtonModule { }\n","import { NgModule } from '@angular/core';\nimport { UserClientsListComponent } from './user-clients-list.component';\nimport { UserClientEnableDisableButtonModule } from '../user-client-enable-disable-button/user-client-enable-disable-button.module';\nimport { SharedModule } from '../shared.module';\n\n\n@NgModule({\n declarations: [UserClientsListComponent],\n imports: [\n SharedModule,\n UserClientEnableDisableButtonModule\n ],\n exports: [UserClientsListComponent]\n})\nexport class UserClientsListModule { }\n","import { NgModule } from '@angular/core';\nimport { UserSessionsComponent } from './user-sessions.component';\nimport { SharedModule } from '../../../shared.module';\n\n\n@NgModule({\n declarations: [UserSessionsComponent],\n imports: [\n SharedModule,\n ],\n exports: [UserSessionsComponent]\n})\nexport class UserSessionsModule { }\n"],"mappings":"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"}
|