@sinequa/atomic-angular 1.9.7 → 1.9.8
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.
|
@@ -17440,7 +17440,7 @@ class UserProfileFormComponent {
|
|
|
17440
17440
|
}
|
|
17441
17441
|
}
|
|
17442
17442
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: UserProfileFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
17443
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: UserProfileFormComponent, isStandalone: true, selector: "user-profile-form, UserProfileForm, userprofileform", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, currentLanguage: { classPropertyName: "currentLanguage", publicName: "currentLanguage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", currentLanguage: "currentLanguageChange" }, host: { classAttribute: "flex flex-col h-full overflow-hidden" }, providers: [provideTranslocoScope("user-profile", "login")], viewQueries: [{ propertyName: "createInputElement", first: true, predicate: ["avatarInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (userProfileResource.hasValue()) {\r\n @let profile = userProfile();\r\n <div class=\"flex min-h-0 flex-1 flex-col gap-2 p-4\">\r\n <div class=\"mb-4 flex\">\r\n @if (allowProfilePhoto()) {\r\n <!-- AVATAR -->\r\n <Avatar class=\"size-14 cursor-pointer\" (click)=\"avatarInput.click()\">\r\n @if (profile?.data?.profilePhoto) {\r\n <AvatarImage\r\n [src]=\"profile?.data?.profilePhoto!\"\r\n width=\"44\"\r\n height=\"44\"\r\n alt=\"avatar\" />\r\n }\r\n <AvatarFallback class=\"text-lg\">\r\n @if (initials()) {\r\n <span>{{ initials() }}</span>\r\n } @else {\r\n <UserIcon class=\"size-7\" />\r\n }\r\n </AvatarFallback>\r\n </Avatar>\r\n @if (profile?.data?.profilePhoto) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive cursor-pointer\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', 'profilePhoto')\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n }\r\n <div class=\"grow\"></div>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- LANGUAGE -->\r\n <select\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/10 bg-background hover:bg-muted focus:bg-muted h-8 rounded-md border px-2 hover:outline focus:outline\"\r\n [(ngModel)]=\"currentLanguage\"\r\n (change)=\"changeLanguage()\">\r\n @for (lang of AllLanguages; track lang.code) {\r\n <option [value]=\"lang.code\">\r\n {{ lang.label }}\r\n </option>\r\n }\r\n </select>\r\n <!-- CHANGE PASSWORD -->\r\n @if (allowChangePassword()) {\r\n <button\r\n [disabled]=\"changingPassword()\"\r\n (click)=\"changingPassword.set(true)\">\r\n {{ \"login.changePassword\" | transloco }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n @if (changingPassword()) {\r\n <ChangePassword\r\n [username]=\"username()\"\r\n [redirectAfterSuccess]=\"false\"\r\n [redirectAfterCancel]=\"false\"\r\n (cancel)=\"changingPassword.set(false)\"\r\n (success)=\"changingPassword.set(false)\" />\r\n } @else {\r\n <div class=\"min-h-0 flex-1 overflow-auto\">\r\n <div>\r\n @for (key of formKeys(); track key) {\r\n <div>\r\n <p>{{ `userProfile.data.${key}` | transloco }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"grow whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"!getDataValue('data', key)\">\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"data\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('data', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('data', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @for (key of customData(); track key) {\r\n <div>\r\n <p>{{ key }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"grow whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"\r\n !getDataValue('customData', key)\r\n \">\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"customData\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('customData', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('customData', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('customData', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n} @else if (userProfileResource.isLoading()) {\r\n <span>Loading...</span>\r\n} @else if (userProfileResource.error()) {\r\n <p>Please contact an administrator to create your user profile.</p>\r\n}\r\n\r\n<!-- AVATAR UPLOAD -->\r\n<input\r\n #avatarInput\r\n class=\"hidden\"\r\n type=\"file\"\r\n accept=\"image/*\"\r\n (change)=\"uploadAvatar($event)\" />\r\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RouterModule }, { kind: "component", type: TrashIcon, selector: "trash-icon, TrashIcon", inputs: ["class"] }, { kind: "component", type: EditIcon, selector: "edit-icon, EditIcon, editicon", inputs: ["class"] }, { kind: "component", type: UndoIcon, selector: "UndoIcon, undoicon, undo-icon", inputs: ["class"] }, { kind: "component", type: SaveIcon, selector: "save-icon, SaveIcon", inputs: ["class"] }, { kind: "component", type: AvatarComponent, selector: "avatar, Avatar", inputs: ["class", "size"] }, { kind: "component", type: AvatarFallbackComponent, selector: "avatar-fallback, avatarfallback, AvatarFallback", inputs: ["class", "size"] }, { kind: "component", type: UserIcon, selector: "user-icon, UserIcon", inputs: ["class"] }, { kind: "component", type: AvatarImageComponent, selector: "avatar-image, AvatarImage, avatarimage", inputs: ["class", "src", "alt", "width", "height", "referrerPolicy", "crossOrigin"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: ChangePasswordComponent, selector: "change-password, ChangePassword, changepassword", inputs: ["username", "alert", "redirectAfterSuccess", "redirectAfterCancel", "currentPassword", "newPassword", "confirmPassword"], outputs: ["success", "cancel", "currentPasswordChange", "newPasswordChange", "confirmPasswordChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
17443
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: UserProfileFormComponent, isStandalone: true, selector: "user-profile-form, UserProfileForm, userprofileform", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, currentLanguage: { classPropertyName: "currentLanguage", publicName: "currentLanguage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", currentLanguage: "currentLanguageChange" }, host: { classAttribute: "flex flex-col h-full overflow-hidden" }, providers: [provideTranslocoScope("user-profile", "login")], viewQueries: [{ propertyName: "createInputElement", first: true, predicate: ["avatarInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (userProfileResource.hasValue()) {\r\n @let profile = userProfile();\r\n <div class=\"flex min-h-0 flex-1 flex-col gap-2 p-4\">\r\n <div class=\"mb-4 flex\">\r\n @if (allowProfilePhoto()) {\r\n <!-- AVATAR -->\r\n <Avatar class=\"size-14 cursor-pointer\" (click)=\"avatarInput.click()\">\r\n @if (profile?.data?.profilePhoto) {\r\n <AvatarImage\r\n [src]=\"profile?.data?.profilePhoto!\"\r\n width=\"44\"\r\n height=\"44\"\r\n alt=\"avatar\" />\r\n }\r\n <AvatarFallback class=\"text-lg\">\r\n @if (initials()) {\r\n <span>{{ initials() }}</span>\r\n } @else {\r\n <UserIcon class=\"size-7\" />\r\n }\r\n </AvatarFallback>\r\n </Avatar>\r\n @if (profile?.data?.profilePhoto) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive cursor-pointer\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', 'profilePhoto')\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n }\r\n <div class=\"grow\"></div>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- LANGUAGE -->\r\n <select\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/10 bg-background hover:bg-muted focus:bg-muted h-8 rounded-md border px-2 hover:outline focus:outline\"\r\n [(ngModel)]=\"currentLanguage\"\r\n (change)=\"changeLanguage()\">\r\n @for (lang of AllLanguages; track lang.code) {\r\n <option [value]=\"lang.code\">\r\n {{ lang.label }}\r\n </option>\r\n }\r\n </select>\r\n <!-- CHANGE PASSWORD -->\r\n @if (allowChangePassword()) {\r\n <button\r\n [disabled]=\"changingPassword()\"\r\n (click)=\"changingPassword.set(true)\">\r\n {{ \"login.changePassword\" | transloco }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n @if (changingPassword()) {\r\n <ChangePassword\r\n [username]=\"username()\"\r\n [redirectAfterSuccess]=\"false\"\r\n [redirectAfterCancel]=\"false\"\r\n (cancel)=\"changingPassword.set(false)\"\r\n (success)=\"changingPassword.set(false)\" />\r\n } @else {\r\n <div class=\"min-h-0 flex-1 overflow-auto\">\r\n <div>\r\n @for (key of formKeys(); track key) {\r\n <div>\r\n <p>{{ `userProfile.data.${key}` | transloco }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"min-w-0 grow break-words whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"!getDataValue('data', key)\">\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"data\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('data', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('data', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @for (key of customData(); track key) {\r\n <div>\r\n <p>{{ key }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"min-w-0 grow break-words whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"\r\n !getDataValue('customData', key)\r\n \">\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"customData\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('customData', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('customData', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('customData', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n} @else if (userProfileResource.isLoading()) {\r\n <span>Loading...</span>\r\n} @else if (userProfileResource.error()) {\r\n <p>Please contact an administrator to create your user profile.</p>\r\n}\r\n\r\n<!-- AVATAR UPLOAD -->\r\n<input\r\n #avatarInput\r\n class=\"hidden\"\r\n type=\"file\"\r\n accept=\"image/*\"\r\n (change)=\"uploadAvatar($event)\" />\r\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RouterModule }, { kind: "component", type: TrashIcon, selector: "trash-icon, TrashIcon", inputs: ["class"] }, { kind: "component", type: EditIcon, selector: "edit-icon, EditIcon, editicon", inputs: ["class"] }, { kind: "component", type: UndoIcon, selector: "UndoIcon, undoicon, undo-icon", inputs: ["class"] }, { kind: "component", type: SaveIcon, selector: "save-icon, SaveIcon", inputs: ["class"] }, { kind: "component", type: AvatarComponent, selector: "avatar, Avatar", inputs: ["class", "size"] }, { kind: "component", type: AvatarFallbackComponent, selector: "avatar-fallback, avatarfallback, AvatarFallback", inputs: ["class", "size"] }, { kind: "component", type: UserIcon, selector: "user-icon, UserIcon", inputs: ["class"] }, { kind: "component", type: AvatarImageComponent, selector: "avatar-image, AvatarImage, avatarimage", inputs: ["class", "src", "alt", "width", "height", "referrerPolicy", "crossOrigin"] }, { kind: "directive", type: ButtonComponent, selector: "button", inputs: ["class", "variant", "decoration", "scheme", "iconOnly", "size", "solid"] }, { kind: "component", type: ChangePasswordComponent, selector: "change-password, ChangePassword, changepassword", inputs: ["username", "alert", "redirectAfterSuccess", "redirectAfterCancel", "currentPassword", "newPassword", "confirmPassword"], outputs: ["success", "cancel", "currentPasswordChange", "newPasswordChange", "confirmPasswordChange"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
|
|
17444
17444
|
}
|
|
17445
17445
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: UserProfileFormComponent, decorators: [{
|
|
17446
17446
|
type: Component,
|
|
@@ -17458,7 +17458,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
17458
17458
|
AvatarImageComponent,
|
|
17459
17459
|
ButtonComponent,
|
|
17460
17460
|
ChangePasswordComponent
|
|
17461
|
-
], providers: [provideTranslocoScope("user-profile", "login")], template: "@if (userProfileResource.hasValue()) {\r\n @let profile = userProfile();\r\n <div class=\"flex min-h-0 flex-1 flex-col gap-2 p-4\">\r\n <div class=\"mb-4 flex\">\r\n @if (allowProfilePhoto()) {\r\n <!-- AVATAR -->\r\n <Avatar class=\"size-14 cursor-pointer\" (click)=\"avatarInput.click()\">\r\n @if (profile?.data?.profilePhoto) {\r\n <AvatarImage\r\n [src]=\"profile?.data?.profilePhoto!\"\r\n width=\"44\"\r\n height=\"44\"\r\n alt=\"avatar\" />\r\n }\r\n <AvatarFallback class=\"text-lg\">\r\n @if (initials()) {\r\n <span>{{ initials() }}</span>\r\n } @else {\r\n <UserIcon class=\"size-7\" />\r\n }\r\n </AvatarFallback>\r\n </Avatar>\r\n @if (profile?.data?.profilePhoto) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive cursor-pointer\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', 'profilePhoto')\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n }\r\n <div class=\"grow\"></div>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- LANGUAGE -->\r\n <select\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/10 bg-background hover:bg-muted focus:bg-muted h-8 rounded-md border px-2 hover:outline focus:outline\"\r\n [(ngModel)]=\"currentLanguage\"\r\n (change)=\"changeLanguage()\">\r\n @for (lang of AllLanguages; track lang.code) {\r\n <option [value]=\"lang.code\">\r\n {{ lang.label }}\r\n </option>\r\n }\r\n </select>\r\n <!-- CHANGE PASSWORD -->\r\n @if (allowChangePassword()) {\r\n <button\r\n [disabled]=\"changingPassword()\"\r\n (click)=\"changingPassword.set(true)\">\r\n {{ \"login.changePassword\" | transloco }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n @if (changingPassword()) {\r\n <ChangePassword\r\n [username]=\"username()\"\r\n [redirectAfterSuccess]=\"false\"\r\n [redirectAfterCancel]=\"false\"\r\n (cancel)=\"changingPassword.set(false)\"\r\n (success)=\"changingPassword.set(false)\" />\r\n } @else {\r\n <div class=\"min-h-0 flex-1 overflow-auto\">\r\n <div>\r\n @for (key of formKeys(); track key) {\r\n <div>\r\n <p>{{ `userProfile.data.${key}` | transloco }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"grow whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"!getDataValue('data', key)\">\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"data\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('data', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('data', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @for (key of customData(); track key) {\r\n <div>\r\n <p>{{ key }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"grow whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"\r\n !getDataValue('customData', key)\r\n \">\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"customData\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('customData', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('customData', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('customData', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n} @else if (userProfileResource.isLoading()) {\r\n <span>Loading...</span>\r\n} @else if (userProfileResource.error()) {\r\n <p>Please contact an administrator to create your user profile.</p>\r\n}\r\n\r\n<!-- AVATAR UPLOAD -->\r\n<input\r\n #avatarInput\r\n class=\"hidden\"\r\n type=\"file\"\r\n accept=\"image/*\"\r\n (change)=\"uploadAvatar($event)\" />\r\n" }]
|
|
17461
|
+
], providers: [provideTranslocoScope("user-profile", "login")], template: "@if (userProfileResource.hasValue()) {\r\n @let profile = userProfile();\r\n <div class=\"flex min-h-0 flex-1 flex-col gap-2 p-4\">\r\n <div class=\"mb-4 flex\">\r\n @if (allowProfilePhoto()) {\r\n <!-- AVATAR -->\r\n <Avatar class=\"size-14 cursor-pointer\" (click)=\"avatarInput.click()\">\r\n @if (profile?.data?.profilePhoto) {\r\n <AvatarImage\r\n [src]=\"profile?.data?.profilePhoto!\"\r\n width=\"44\"\r\n height=\"44\"\r\n alt=\"avatar\" />\r\n }\r\n <AvatarFallback class=\"text-lg\">\r\n @if (initials()) {\r\n <span>{{ initials() }}</span>\r\n } @else {\r\n <UserIcon class=\"size-7\" />\r\n }\r\n </AvatarFallback>\r\n </Avatar>\r\n @if (profile?.data?.profilePhoto) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive cursor-pointer\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', 'profilePhoto')\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n }\r\n <div class=\"grow\"></div>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- LANGUAGE -->\r\n <select\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/10 bg-background hover:bg-muted focus:bg-muted h-8 rounded-md border px-2 hover:outline focus:outline\"\r\n [(ngModel)]=\"currentLanguage\"\r\n (change)=\"changeLanguage()\">\r\n @for (lang of AllLanguages; track lang.code) {\r\n <option [value]=\"lang.code\">\r\n {{ lang.label }}\r\n </option>\r\n }\r\n </select>\r\n <!-- CHANGE PASSWORD -->\r\n @if (allowChangePassword()) {\r\n <button\r\n [disabled]=\"changingPassword()\"\r\n (click)=\"changingPassword.set(true)\">\r\n {{ \"login.changePassword\" | transloco }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n @if (changingPassword()) {\r\n <ChangePassword\r\n [username]=\"username()\"\r\n [redirectAfterSuccess]=\"false\"\r\n [redirectAfterCancel]=\"false\"\r\n (cancel)=\"changingPassword.set(false)\"\r\n (success)=\"changingPassword.set(false)\" />\r\n } @else {\r\n <div class=\"min-h-0 flex-1 overflow-auto\">\r\n <div>\r\n @for (key of formKeys(); track key) {\r\n <div>\r\n <p>{{ `userProfile.data.${key}` | transloco }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"min-w-0 grow break-words whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"!getDataValue('data', key)\">\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"data\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"data.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('data', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('data', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('data', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @for (key of customData(); track key) {\r\n <div>\r\n <p>{{ key }}</p>\r\n <div class=\"group flex flex-row\">\r\n <div\r\n class=\"min-w-0 grow break-words whitespace-pre-line\"\r\n [class.text-muted-foreground]=\"\r\n !getDataValue('customData', key)\r\n \">\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <textarea\r\n class=\"hover:outline-primary focus:outline-primary border-foreground/20 hover:bg-muted focus:bg-muted mt-2 w-full rounded-md border px-2 pt-1 hover:outline focus:outline\"\r\n id=\"user-profile-{{ key }}\"\r\n [(ngModel)]=\"value\"></textarea>\r\n } @else {\r\n {{\r\n getDataValue(\"customData\", key) ||\r\n (\"userProfile.notDefined\" | transloco)\r\n }}\r\n }\r\n </div>\r\n @if (propertyToEdit() === \"customData.\" + key) {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onSaveData('customData', key)\">\r\n <save-icon class=\"ml-2\" />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"propertyToEdit.set(undefined)\">\r\n <UndoIcon />\r\n </button>\r\n } @else {\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"visible mx-2 cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.editProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.editProperty' | transloco\"\r\n (click)=\"onEdit('customData', key)\">\r\n <EditIcon />\r\n </button>\r\n <button\r\n variant=\"ghost\"\r\n [iconOnly]=\"true\"\r\n class=\"text-destructive visible cursor-pointer sm:invisible sm:group-hover:visible\"\r\n title=\"{{ 'userProfile.deleteProperty' | transloco }}\"\r\n [attr.aria-label]=\"'userProfile.deleteProperty' | transloco\"\r\n (click)=\"onDeleteData('customData', key)\">\r\n <TrashIcon />\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n} @else if (userProfileResource.isLoading()) {\r\n <span>Loading...</span>\r\n} @else if (userProfileResource.error()) {\r\n <p>Please contact an administrator to create your user profile.</p>\r\n}\r\n\r\n<!-- AVATAR UPLOAD -->\r\n<input\r\n #avatarInput\r\n class=\"hidden\"\r\n type=\"file\"\r\n accept=\"image/*\"\r\n (change)=\"uploadAvatar($event)\" />\r\n" }]
|
|
17462
17462
|
}], ctorParameters: () => [], propDecorators: { createInputElement: [{ type: i0.ViewChild, args: ["avatarInput", { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], currentLanguage: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentLanguage", required: false }] }, { type: i0.Output, args: ["currentLanguageChange"] }] } });
|
|
17463
17463
|
|
|
17464
17464
|
class UserProfileDialog {
|