@memberjunction/ng-explorer-settings 6.1.4 → 6.2.0-edge.1
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/dist/lib/account-info/account-info.component.d.ts +1 -1
- package/dist/lib/account-info/account-info.component.js +2 -2
- package/dist/lib/account-info/account-info.component.js.map +1 -1
- package/dist/lib/application-management/application-dialog/application-dialog.component.d.ts +93 -10
- package/dist/lib/application-management/application-dialog/application-dialog.component.d.ts.map +1 -1
- package/dist/lib/application-management/application-dialog/application-dialog.component.js +232 -80
- package/dist/lib/application-management/application-dialog/application-dialog.component.js.map +1 -1
- package/dist/lib/application-management/application-management.component.d.ts +94 -11
- package/dist/lib/application-management/application-management.component.d.ts.map +1 -1
- package/dist/lib/application-management/application-management.component.js +231 -67
- package/dist/lib/application-management/application-management.component.js.map +1 -1
- package/dist/lib/application-settings/application-settings.component.d.ts +4 -4
- package/dist/lib/application-settings/application-settings.component.js +10 -10
- package/dist/lib/application-settings/application-settings.component.js.map +1 -1
- package/dist/lib/entity-permissions/entity-permissions.component.d.ts +88 -10
- package/dist/lib/entity-permissions/entity-permissions.component.d.ts.map +1 -1
- package/dist/lib/entity-permissions/entity-permissions.component.js +219 -63
- package/dist/lib/entity-permissions/entity-permissions.component.js.map +1 -1
- package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.d.ts +44 -6
- package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.d.ts.map +1 -1
- package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.js +117 -43
- package/dist/lib/entity-permissions/permission-dialog/permission-dialog.component.js.map +1 -1
- package/dist/lib/notification-preferences/notification-preferences.component.d.ts +25 -3
- package/dist/lib/notification-preferences/notification-preferences.component.d.ts.map +1 -1
- package/dist/lib/notification-preferences/notification-preferences.component.js +62 -18
- package/dist/lib/notification-preferences/notification-preferences.component.js.map +1 -1
- package/dist/lib/role-management/role-dialog/role-dialog.component.d.ts +32 -4
- package/dist/lib/role-management/role-dialog/role-dialog.component.d.ts.map +1 -1
- package/dist/lib/role-management/role-dialog/role-dialog.component.js +84 -30
- package/dist/lib/role-management/role-dialog/role-dialog.component.js.map +1 -1
- package/dist/lib/role-management/role-management-agent-context.d.ts +12 -4
- package/dist/lib/role-management/role-management-agent-context.d.ts.map +1 -1
- package/dist/lib/role-management/role-management-agent-context.js +26 -10
- package/dist/lib/role-management/role-management-agent-context.js.map +1 -1
- package/dist/lib/role-management/role-management.component.d.ts +95 -11
- package/dist/lib/role-management/role-management.component.d.ts.map +1 -1
- package/dist/lib/role-management/role-management.component.js +259 -91
- package/dist/lib/role-management/role-management.component.js.map +1 -1
- package/dist/lib/settings/settings.component.d.ts +87 -11
- package/dist/lib/settings/settings.component.d.ts.map +1 -1
- package/dist/lib/settings/settings.component.js +211 -65
- package/dist/lib/settings/settings.component.js.map +1 -1
- package/dist/lib/shared/settings-card.component.d.ts +24 -4
- package/dist/lib/shared/settings-card.component.d.ts.map +1 -1
- package/dist/lib/shared/settings-card.component.js +46 -6
- package/dist/lib/shared/settings-card.component.js.map +1 -1
- package/dist/lib/sql-logging/sql-logging.component.d.ts +172 -18
- package/dist/lib/sql-logging/sql-logging.component.d.ts.map +1 -1
- package/dist/lib/sql-logging/sql-logging.component.js +320 -108
- package/dist/lib/sql-logging/sql-logging.component.js.map +1 -1
- package/dist/lib/user-app-config/user-app-config-content.component.js +3 -3
- package/dist/lib/user-app-config/user-app-config-content.component.js.map +1 -1
- package/dist/lib/user-app-config/user-app-config-reorder.d.ts +4 -0
- package/dist/lib/user-app-config/user-app-config-reorder.d.ts.map +1 -1
- package/dist/lib/user-app-config/user-app-config-reorder.js +11 -3
- package/dist/lib/user-app-config/user-app-config-reorder.js.map +1 -1
- package/dist/lib/user-management/transaction-group-refusals.d.ts +45 -0
- package/dist/lib/user-management/transaction-group-refusals.d.ts.map +1 -0
- package/dist/lib/user-management/transaction-group-refusals.js +49 -0
- package/dist/lib/user-management/transaction-group-refusals.js.map +1 -0
- package/dist/lib/user-management/user-dialog/user-dialog.component.d.ts +44 -6
- package/dist/lib/user-management/user-dialog/user-dialog.component.d.ts.map +1 -1
- package/dist/lib/user-management/user-dialog/user-dialog.component.js +134 -45
- package/dist/lib/user-management/user-dialog/user-dialog.component.js.map +1 -1
- package/dist/lib/user-management/user-management-agent-context.d.ts +10 -0
- package/dist/lib/user-management/user-management-agent-context.d.ts.map +1 -1
- package/dist/lib/user-management/user-management-agent-context.js +26 -6
- package/dist/lib/user-management/user-management-agent-context.js.map +1 -1
- package/dist/lib/user-management/user-management.component.d.ts +174 -16
- package/dist/lib/user-management/user-management.component.d.ts.map +1 -1
- package/dist/lib/user-management/user-management.component.js +501 -177
- package/dist/lib/user-management/user-management.component.js.map +1 -1
- package/dist/lib/user-profile-settings/user-profile-settings.component.d.ts +97 -15
- package/dist/lib/user-profile-settings/user-profile-settings.component.d.ts.map +1 -1
- package/dist/lib/user-profile-settings/user-profile-settings.component.js +280 -116
- package/dist/lib/user-profile-settings/user-profile-settings.component.js.map +1 -1
- package/package.json +20 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-profile-settings.component.js","sourceRoot":"","sources":["../../../src/lib/user-profile-settings/user-profile-settings.component.ts","../../../src/lib/user-profile-settings/user-profile-settings.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, NgZone } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { Metadata } from '@memberjunction/core';\nimport { MJUserEntity } from '@memberjunction/core-entities';\nimport { UserAvatarService } from '@memberjunction/ng-user-avatar';\nimport { MJGlobal, MJEventType } from '@memberjunction/global';\nimport { EventCodes, SharedService } from '@memberjunction/ng-shared';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\ninterface IconCategory {\n name: string;\n icons: string[];\n}\n\n@Component({\n standalone: false,\n selector: 'mj-user-profile-settings',\n templateUrl: './user-profile-settings.component.html',\n styleUrls: ['./user-profile-settings.component.css']\n})\nexport class UserProfileSettingsComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n currentUser!: MJUserEntity;\n selectedTab: 'upload' | 'url' | 'icon' | 'provider' = 'url';\n\n // Form state\n imageUrlInput = '';\n selectedIconClass = '';\n uploadedImageBase64 = '';\n uploadedFileName = '';\n previewUrl = '';\n previewIconClass = '';\n\n // UI state\n isSaving = false;\n showSuccessMessage = false;\n errorMessage = '';\n\n // Icon search state\n iconSearchTerm = '';\n iconSearch$ = new BehaviorSubject<string>('');\n filteredIconCategories: IconCategory[] = [];\n totalFilteredIcons = 0;\n\n // Cleanup\n private destroy$ = new Subject<void>();\n\n // Icon picker data\n iconCategories: IconCategory[] = [\n {\n name: 'Users',\n icons: [\n 'fa-solid fa-user',\n 'fa-solid fa-user-tie',\n 'fa-solid fa-user-astronaut',\n 'fa-solid fa-user-ninja',\n 'fa-solid fa-user-secret',\n 'fa-solid fa-user-graduate',\n 'fa-solid fa-user-doctor',\n 'fa-solid fa-user-gear',\n 'fa-regular fa-circle-user',\n 'fa-solid fa-user-check',\n 'fa-solid fa-user-shield',\n 'fa-solid fa-user-crown',\n 'fa-solid fa-user-pilot',\n 'fa-solid fa-user-cowboy',\n 'fa-solid fa-user-chef'\n ]\n },\n {\n name: 'Business',\n icons: [\n 'fa-solid fa-briefcase',\n 'fa-solid fa-building',\n 'fa-solid fa-chart-line',\n 'fa-solid fa-handshake',\n 'fa-solid fa-trophy',\n 'fa-solid fa-medal',\n 'fa-solid fa-award',\n 'fa-solid fa-lightbulb',\n 'fa-solid fa-rocket',\n 'fa-solid fa-star'\n ]\n },\n {\n name: 'Tech',\n icons: [\n 'fa-solid fa-laptop-code',\n 'fa-solid fa-terminal',\n 'fa-solid fa-microchip',\n 'fa-solid fa-robot',\n 'fa-solid fa-brain',\n 'fa-solid fa-code',\n 'fa-solid fa-server',\n 'fa-solid fa-database',\n 'fa-solid fa-network-wired',\n 'fa-solid fa-bug'\n ]\n },\n {\n name: 'Fun',\n icons: [\n 'fa-solid fa-face-smile',\n 'fa-solid fa-face-grin',\n 'fa-solid fa-face-laugh',\n 'fa-solid fa-face-wink',\n 'fa-solid fa-heart',\n 'fa-solid fa-fire',\n 'fa-solid fa-bolt',\n 'fa-solid fa-gem',\n 'fa-solid fa-crown',\n 'fa-solid fa-hat-wizard'\n ]\n },\n {\n name: 'Animals',\n icons: [\n 'fa-solid fa-cat',\n 'fa-solid fa-dog',\n 'fa-solid fa-dragon',\n 'fa-solid fa-dove',\n 'fa-solid fa-fish'\n ]\n }\n ];\n\n constructor(\n private userAvatarService: UserAvatarService,\n private sharedService: SharedService,\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone\n ) {\n super();}\n\n async ngOnInit() {\n const md = this.ProviderToUse;\n const currentUserInfo = md.CurrentUser;\n\n // Load the full MJUserEntity to access avatar fields\n this.currentUser = await md.GetEntityObject<MJUserEntity>('MJ: Users');\n await this.currentUser.Load(currentUserInfo.ID);\n\n // Initialize filtered icons\n this.filteredIconCategories = [...this.iconCategories];\n this.totalFilteredIcons = this.iconCategories.reduce(\n (sum, cat) => sum + cat.icons.length,\n 0\n );\n\n // Setup icon search subscription\n this.setupIconSearchSubscription();\n\n this.loadCurrentAvatar();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Initializes the icon search subscription with debounce\n */\n private setupIconSearchSubscription(): void {\n this.iconSearch$\n .pipe(\n debounceTime(200), // Faster debounce for local filtering\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n )\n .subscribe((searchTerm) => {\n this.filterIcons(searchTerm);\n });\n }\n\n /**\n * Handles icon search input changes\n */\n onIconSearchChange(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.iconSearchTerm = value;\n this.iconSearch$.next(value);\n }\n\n /**\n * Filters icons based on search term\n * Matches icon class name parts (e.g., \"user\" matches \"fa-user-tie\")\n */\n private filterIcons(searchTerm: string): void {\n if (!searchTerm || searchTerm.trim() === '') {\n // Show all icons\n this.filteredIconCategories = [...this.iconCategories];\n this.totalFilteredIcons = this.iconCategories.reduce(\n (sum, cat) => sum + cat.icons.length,\n 0\n );\n return;\n }\n\n const term = searchTerm.toLowerCase().trim();\n this.filteredIconCategories = [];\n this.totalFilteredIcons = 0;\n\n for (const category of this.iconCategories) {\n const matchingIcons = category.icons.filter((icon) => {\n // Extract icon name from class (e.g., \"fa-solid fa-user-tie\" -> \"user-tie\")\n const iconName = this.extractIconName(icon);\n return iconName.includes(term);\n });\n\n if (matchingIcons.length > 0) {\n this.filteredIconCategories.push({\n name: category.name,\n icons: matchingIcons\n });\n this.totalFilteredIcons += matchingIcons.length;\n }\n }\n }\n\n /**\n * Extracts the icon name from a Font Awesome class string\n * e.g., \"fa-solid fa-user-tie\" -> \"user-tie\"\n */\n extractIconName(iconClass: string): string {\n const parts = iconClass.split(' ');\n for (const part of parts) {\n if (part.startsWith('fa-') && !['fa-solid', 'fa-regular', 'fa-light', 'fa-brands'].includes(part)) {\n return part.substring(3); // Remove \"fa-\" prefix\n }\n }\n return iconClass.toLowerCase();\n }\n\n /**\n * Clears the icon search\n */\n clearIconSearch(): void {\n this.iconSearchTerm = '';\n this.iconSearch$.next('');\n }\n\n /**\n * Loads the current avatar settings from the user entity\n */\n private loadCurrentAvatar(): void {\n if (this.currentUser.UserImageURL) {\n this.imageUrlInput = this.currentUser.UserImageURL;\n this.previewUrl = this.currentUser.UserImageURL;\n\n // Determine if it's a Base64 upload or URL\n if (this.userAvatarService.isValidBase64DataUri(this.currentUser.UserImageURL)) {\n this.selectedTab = 'upload';\n this.uploadedImageBase64 = this.currentUser.UserImageURL;\n this.uploadedFileName = 'Current uploaded image';\n } else {\n this.selectedTab = 'url';\n }\n } else if (this.currentUser.UserImageIconClass) {\n this.selectedIconClass = this.currentUser.UserImageIconClass;\n this.previewIconClass = this.currentUser.UserImageIconClass;\n this.selectedTab = 'icon';\n } else {\n // Default to URL tab with empty state\n this.selectedTab = 'url';\n }\n }\n\n /**\n * Switches between tabs and updates preview\n */\n selectTab(tab: 'upload' | 'url' | 'icon' | 'provider'): void {\n this.selectedTab = tab;\n this.updatePreview();\n }\n\n /**\n * Handles file selection from native input\n */\n async onFileSelected(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n\n if (!file) {\n return;\n }\n\n // Clear any previous errors\n this.errorMessage = '';\n\n // Validate file type\n if (!file.type.match(/^image\\/(png|jpeg|jpg|gif|webp)$/)) {\n this.errorMessage = 'Please select a valid image file (PNG, JPG, GIF, WEBP)';\n input.value = ''; // Clear the input\n return;\n }\n\n // Validate file size (200KB)\n const maxSize = 200 * 1024;\n if (file.size > maxSize) {\n this.errorMessage = `Image must be smaller than 200KB. Your image is ${Math.round(file.size / 1024)}KB`;\n input.value = ''; // Clear the input\n return;\n }\n\n // Convert to Base64\n try {\n this.uploadedImageBase64 = await this.userAvatarService.fileToBase64(file);\n this.uploadedFileName = file.name;\n this.previewUrl = this.uploadedImageBase64;\n this.previewIconClass = ''; // Clear icon preview\n } catch (error) {\n this.errorMessage = 'Failed to process image. Please try again.';\n console.error('Error converting file to Base64:', error);\n }\n }\n\n /**\n * Clears uploaded file\n */\n clearUpload(): void {\n this.uploadedFileName = '';\n this.uploadedImageBase64 = '';\n this.previewUrl = '';\n this.errorMessage = '';\n\n // Reset file input\n const fileInput = document.querySelector('input[type=\"file\"]') as HTMLInputElement;\n if (fileInput) {\n fileInput.value = '';\n }\n }\n\n /**\n * Handles URL input changes\n */\n onUrlChange(): void {\n this.errorMessage = '';\n\n if (this.imageUrlInput && this.imageUrlInput.trim().length > 0) {\n if (this.userAvatarService.isValidUrl(this.imageUrlInput)) {\n this.previewUrl = this.imageUrlInput;\n this.previewIconClass = ''; // Clear icon preview\n } else {\n this.errorMessage = 'Please enter a valid URL';\n this.previewUrl = '';\n }\n } else {\n this.previewUrl = '';\n }\n }\n\n /**\n * Handles icon selection\n */\n selectIcon(iconClass: string): void {\n this.selectedIconClass = iconClass;\n this.previewIconClass = iconClass;\n this.previewUrl = ''; // Clear image preview\n this.errorMessage = '';\n }\n\n /**\n * Checks if an icon is currently selected\n */\n isIconSelected(iconClass: string): boolean {\n return this.selectedIconClass === iconClass;\n }\n\n /**\n * Syncs avatar from authentication provider\n * NOTE: This is a placeholder - actual implementation should be done\n * in the calling application which has access to auth services\n */\n async syncFromProvider(): Promise<void> {\n this.errorMessage = 'Avatar sync from provider is not yet implemented in settings. Please use the automatic sync on login or manually upload an image.';\n // TODO: Implement auth provider integration\n // The calling application should provide a way to get auth claims\n // and call userAvatarService.syncFromImageUrl() with the appropriate URL and headers\n }\n\n /**\n * Reverts avatar to default (clears both fields)\n * This will trigger auto-sync from auth provider on next login\n */\n async revertToDefault(): Promise<void> {\n this.isSaving = true;\n this.errorMessage = '';\n this.showSuccessMessage = false;\n\n try {\n // Clear both avatar fields\n this.currentUser.UserImageURL = null;\n this.currentUser.UserImageIconClass = null;\n\n // Save to database\n const saved = await this.currentUser.Save();\n\n if (saved) {\n // Clear local state\n this.imageUrlInput = '';\n this.selectedIconClass = '';\n this.uploadedImageBase64 = '';\n this.uploadedFileName = '';\n this.previewUrl = '';\n this.previewIconClass = '';\n\n this.showSuccess('Avatar reverted to default! Your auth provider image will sync on next login.');\n\n // Notify header component to update avatar display\n MJGlobal.Instance.RaiseEvent({\n event: MJEventType.ComponentEvent,\n eventCode: EventCodes.AvatarUpdated,\n component: this,\n args: {\n imageUrl: null,\n iconClass: null\n }\n });\n } else {\n this.errorMessage = 'Failed to revert avatar. Please try again.';\n }\n } catch (error) {\n console.error('Error reverting avatar:', error);\n this.ngZone.run(() => {\n this.errorMessage = 'An error occurred while reverting. Please try again.';\n this.cdr.markForCheck();\n });\n } finally {\n this.ngZone.run(() => {\n this.isSaving = false;\n this.cdr.markForCheck();\n });\n }\n }\n\n /**\n * Updates the preview based on current tab\n */\n private updatePreview(): void {\n switch (this.selectedTab) {\n case 'upload':\n if (this.uploadedImageBase64) {\n this.previewUrl = this.uploadedImageBase64;\n this.previewIconClass = '';\n }\n break;\n case 'url':\n if (this.imageUrlInput && this.userAvatarService.isValidUrl(this.imageUrlInput)) {\n this.previewUrl = this.imageUrlInput;\n this.previewIconClass = '';\n }\n break;\n case 'icon':\n if (this.selectedIconClass) {\n this.previewIconClass = this.selectedIconClass;\n this.previewUrl = '';\n }\n break;\n }\n }\n\n /**\n * Saves avatar settings to database\n */\n async save(): Promise<void> {\n this.isSaving = true;\n this.errorMessage = '';\n this.showSuccessMessage = false;\n\n try {\n // Update user entity based on selected tab\n switch (this.selectedTab) {\n case 'upload':\n if (!this.uploadedImageBase64) {\n this.errorMessage = 'Please select an image to upload';\n this.isSaving = false;\n return;\n }\n this.currentUser.UserImageURL = this.uploadedImageBase64;\n this.currentUser.UserImageIconClass = null;\n break;\n\n case 'url':\n if (!this.imageUrlInput || !this.userAvatarService.isValidUrl(this.imageUrlInput)) {\n this.errorMessage = 'Please enter a valid image URL';\n this.isSaving = false;\n return;\n }\n this.currentUser.UserImageURL = this.imageUrlInput;\n this.currentUser.UserImageIconClass = null;\n break;\n\n case 'icon':\n if (!this.selectedIconClass) {\n this.errorMessage = 'Please select an icon';\n this.isSaving = false;\n return;\n }\n this.currentUser.UserImageURL = null;\n this.currentUser.UserImageIconClass = this.selectedIconClass;\n break;\n }\n\n // Save to database\n const saved = await this.currentUser.Save();\n\n if (saved) {\n this.showSuccess('Avatar updated successfully!');\n\n // Notify header component to update avatar display\n MJGlobal.Instance.RaiseEvent({\n event: MJEventType.ComponentEvent,\n eventCode: EventCodes.AvatarUpdated,\n component: this,\n args: {\n imageUrl: this.currentUser.UserImageURL,\n iconClass: this.currentUser.UserImageIconClass\n }\n });\n } else {\n this.errorMessage = 'Failed to save avatar. Please try again.';\n }\n } catch (error) {\n console.error('Error saving avatar:', error);\n this.ngZone.run(() => {\n this.errorMessage = 'An error occurred while saving. Please try again.';\n this.cdr.markForCheck();\n });\n } finally {\n this.ngZone.run(() => {\n this.isSaving = false;\n this.cdr.markForCheck();\n });\n }\n }\n\n /**\n * Cancels changes and reverts to saved state\n */\n cancel(): void {\n this.loadCurrentAvatar();\n this.errorMessage = '';\n this.showSuccessMessage = false;\n }\n\n /**\n * Shows success message temporarily\n */\n private showSuccess(message: string): void {\n this.showSuccessMessage = true;\n this.sharedService.CreateSimpleNotification(message, 'success', 3000);\n\n // Hide success message after 3 seconds\n setTimeout(() => {\n this.showSuccessMessage = false;\n }, 3000);\n }\n}\n","<div class=\"user-profile-settings\">\n <!-- Header Section -->\n <div class=\"profile-header\">\n <h3>Avatar Settings</h3>\n <p class=\"description\">Customize your profile picture with an image, URL, or icon</p>\n </div>\n\n <!-- Error Message -->\n @if (errorMessage) {\n <mj-alert Variant=\"error\" [Message]=\"errorMessage\" Dismissible (Dismissed)=\"errorMessage = ''\" />\n }\n\n <!-- Success Message -->\n @if (showSuccessMessage) {\n <mj-alert Variant=\"success\" Message=\"Avatar updated successfully!\" />\n }\n\n <!-- Avatar Preview Section -->\n <div class=\"avatar-preview-section\">\n <div class=\"preview-label\">Preview</div>\n <div class=\"preview-container\">\n @if (previewUrl) {\n <img [src]=\"previewUrl\" alt=\"Avatar preview\" class=\"preview-image\" />\n } @else if (previewIconClass) {\n <div class=\"preview-icon-wrapper\">\n <i [class]=\"previewIconClass + ' preview-icon'\" aria-hidden=\"true\"></i>\n </div>\n } @else {\n <div class=\"preview-placeholder\">\n <i class=\"fa-solid fa-user\" aria-hidden=\"true\"></i>\n <span>No avatar selected</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"tab-navigation\" role=\"tablist\" aria-label=\"Avatar customization options\">\n <button\n class=\"tab-btn\"\n [class.active]=\"selectedTab === 'upload'\"\n (click)=\"selectTab('upload')\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedTab === 'upload'\"\n aria-controls=\"panel-upload\"\n >\n <i class=\"fa-solid fa-upload\" aria-hidden=\"true\"></i>\n <span>Upload</span>\n </button>\n <button\n class=\"tab-btn\"\n [class.active]=\"selectedTab === 'url'\"\n (click)=\"selectTab('url')\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedTab === 'url'\"\n aria-controls=\"panel-url\"\n >\n <i class=\"fa-solid fa-link\" aria-hidden=\"true\"></i>\n <span>URL</span>\n </button>\n <button\n class=\"tab-btn\"\n [class.active]=\"selectedTab === 'icon'\"\n (click)=\"selectTab('icon')\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedTab === 'icon'\"\n aria-controls=\"panel-icon\"\n >\n <i class=\"fa-solid fa-icons\" aria-hidden=\"true\"></i>\n <span>Icon</span>\n </button>\n <button\n class=\"tab-btn\"\n [class.active]=\"selectedTab === 'provider'\"\n (click)=\"selectTab('provider')\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedTab === 'provider'\"\n aria-controls=\"panel-provider\"\n >\n <i class=\"fa-brands fa-microsoft\" aria-hidden=\"true\"></i>\n <span>Sync</span>\n </button>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Upload Tab -->\n @if (selectedTab === 'upload') {\n <div class=\"upload-section\" id=\"panel-upload\" role=\"tabpanel\">\n <input\n type=\"file\"\n #fileInput\n accept=\"image/png,image/jpeg,image/jpg,image/gif,image/webp\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n />\n\n <button class=\"upload-btn\" (click)=\"fileInput.click()\">\n <i class=\"fa-solid fa-upload\" aria-hidden=\"true\"></i>\n Choose Image\n </button>\n\n <div class=\"upload-info\">\n <i class=\"fa-solid fa-info-circle\" aria-hidden=\"true\"></i>\n Max 200KB - PNG, JPG, GIF, WEBP\n </div>\n\n @if (uploadedFileName) {\n <div class=\"selected-file\">\n <i class=\"fa-solid fa-file-image\" aria-hidden=\"true\"></i>\n <span>{{ uploadedFileName }}</span>\n <button class=\"remove-btn\" (click)=\"clearUpload()\" aria-label=\"Remove selected file\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n }\n\n <!-- URL Tab -->\n @if (selectedTab === 'url') {\n <div class=\"url-section\" id=\"panel-url\" role=\"tabpanel\">\n <label for=\"imageUrl\">Image URL</label>\n <input\n type=\"text\"\n id=\"imageUrl\"\n class=\"url-input\"\n placeholder=\"https://example.com/avatar.jpg\"\n [(ngModel)]=\"imageUrlInput\"\n (input)=\"onUrlChange()\"\n />\n <div class=\"url-info\">\n <i class=\"fa-solid fa-info-circle\" aria-hidden=\"true\"></i>\n Enter a URL to an image hosted online\n </div>\n </div>\n }\n\n <!-- Icon Tab -->\n @if (selectedTab === 'icon') {\n <div class=\"icon-section\" id=\"panel-icon\" role=\"tabpanel\">\n <!-- Icon Search -->\n <div class=\"icon-search-container\">\n <div class=\"mj-search\">\n <i class=\"fa-solid fa-search mj-search-icon\" aria-hidden=\"true\"></i>\n <input\n type=\"text\"\n class=\"mj-search-input\"\n placeholder=\"Search icons by name...\"\n [value]=\"iconSearchTerm\"\n (input)=\"onIconSearchChange($event)\"\n aria-label=\"Search icons\"\n />\n @if (iconSearchTerm) {\n <button\n class=\"mj-search-clear\"\n (click)=\"clearIconSearch()\"\n aria-label=\"Clear search\"\n >\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n <div class=\"icon-filter-info\">\n {{ totalFilteredIcons }} icon{{ totalFilteredIcons !== 1 ? 's' : '' }} found\n </div>\n </div>\n\n <!-- Icon Categories -->\n <div class=\"icon-categories-container\">\n @if (filteredIconCategories.length > 0) {\n @for (category of filteredIconCategories; track category.name) {\n <div class=\"icon-category\">\n <h4 class=\"category-title\">{{ category.name }}</h4>\n <div class=\"icon-grid\" role=\"radiogroup\" [attr.aria-label]=\"category.name + ' icons'\">\n @for (icon of category.icons; track icon) {\n <button\n class=\"icon-option\"\n [class.selected]=\"isIconSelected(icon)\"\n (click)=\"selectIcon(icon)\"\n [title]=\"extractIconName(icon)\"\n role=\"radio\"\n [attr.aria-checked]=\"isIconSelected(icon)\"\n [attr.aria-label]=\"extractIconName(icon) + ' icon'\"\n >\n <i [class]=\"icon\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n }\n } @else {\n <mj-empty-state\n Variant=\"no-results\"\n Size=\"compact\"\n Title=\"No icons found\"\n Message=\"Try a different search term\" />\n }\n </div>\n </div>\n }\n\n <!-- Provider Sync Tab -->\n @if (selectedTab === 'provider') {\n <div class=\"provider-section\" id=\"panel-provider\" role=\"tabpanel\">\n <div class=\"provider-info\">\n <i class=\"fa-solid fa-info-circle\" aria-hidden=\"true\"></i>\n <p>Sync your avatar from your authentication provider account</p>\n </div>\n\n <button\n class=\"sync-btn\"\n (click)=\"syncFromProvider()\"\n [disabled]=\"isSaving\"\n >\n <i class=\"fa-brands fa-microsoft\" aria-hidden=\"true\"></i>\n @if (isSaving) {\n <span>Syncing...</span>\n } @else {\n <span>Sync from Microsoft Account</span>\n }\n </button>\n\n <div class=\"provider-note\">\n <i class=\"fa-solid fa-lightbulb\" aria-hidden=\"true\"></i>\n <small>This will download your profile photo from Microsoft and save it to your profile</small>\n </div>\n\n <hr class=\"provider-divider\" />\n\n <button\n class=\"revert-btn\"\n (click)=\"revertToDefault()\"\n [disabled]=\"isSaving\"\n >\n <i class=\"fa-solid fa-rotate-left\" aria-hidden=\"true\"></i>\n @if (isSaving) {\n <span>Reverting...</span>\n } @else {\n <span>Revert to Default</span>\n }\n </button>\n\n <div class=\"provider-note\">\n <i class=\"fa-solid fa-info-circle\" aria-hidden=\"true\"></i>\n <small>Clears your avatar settings and restores the automatic sync from your auth provider</small>\n </div>\n </div>\n }\n </div>\n\n <!-- Action Buttons -->\n <div class=\"action-buttons\">\n <button\n mjButton variant=\"primary\"\n (click)=\"save()\"\n [disabled]=\"isSaving || selectedTab === 'provider'\"\n >\n @if (isSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n <span>Saving...</span>\n } @else {\n <i class=\"fa-solid fa-save\" aria-hidden=\"true\"></i>\n <span>Save Changes</span>\n }\n </button>\n <button\n mjButton\n (click)=\"cancel()\"\n [disabled]=\"isSaving\"\n >\n Cancel\n </button>\n </div>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"user-profile-settings.component.js","sourceRoot":"","sources":["../../../src/lib/user-profile-settings/user-profile-settings.component.ts","../../../src/lib/user-profile-settings/user-profile-settings.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, NgZone } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { Metadata } from '@memberjunction/core';\nimport { MJUserEntity } from '@memberjunction/core-entities';\nimport { UserAvatarService } from '@memberjunction/ng-user-avatar';\nimport { MJGlobal, MJEventType } from '@memberjunction/global';\nimport { EventCodes, SharedService } from '@memberjunction/ng-shared';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\ninterface IconCategory {\n name: string;\n icons: string[];\n}\n\n@Component({\n standalone: false,\n selector: 'mj-user-profile-settings',\n templateUrl: './user-profile-settings.component.html',\n styleUrls: ['./user-profile-settings.component.css']\n})\nexport class UserProfileSettingsComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n CurrentUser!: MJUserEntity;\n\n /** @deprecated Use {@link CurrentUser}. */\n get currentUser(): MJUserEntity {\n return this.CurrentUser;\n }\n /** @deprecated Use {@link CurrentUser}. */\n set currentUser(value: MJUserEntity) {\n this.CurrentUser = value;\n }\n SelectedTab: 'upload' | 'url' | 'icon' | 'provider' = 'url';\n\n /** @deprecated Use {@link SelectedTab}. */\n get selectedTab(): 'upload' | 'url' | 'icon' | 'provider' {\n return this.SelectedTab;\n }\n /** @deprecated Use {@link SelectedTab}. */\n set selectedTab(value: 'upload' | 'url' | 'icon' | 'provider') {\n this.SelectedTab = value;\n }\n\n // Form state\n ImageUrlInput = '';\n\n /** @deprecated Use {@link ImageUrlInput}. */\n get imageUrlInput() {\n return this.ImageUrlInput;\n }\n /** @deprecated Use {@link ImageUrlInput}. */\n set imageUrlInput(value) {\n this.ImageUrlInput = value;\n }\n SelectedIconClass = '';\n\n /** @deprecated Use {@link SelectedIconClass}. */\n get selectedIconClass() {\n return this.SelectedIconClass;\n }\n /** @deprecated Use {@link SelectedIconClass}. */\n set selectedIconClass(value) {\n this.SelectedIconClass = value;\n }\n UploadedImageBase64 = '';\n\n /** @deprecated Use {@link UploadedImageBase64}. */\n get uploadedImageBase64() {\n return this.UploadedImageBase64;\n }\n /** @deprecated Use {@link UploadedImageBase64}. */\n set uploadedImageBase64(value) {\n this.UploadedImageBase64 = value;\n }\n UploadedFileName = '';\n\n /** @deprecated Use {@link UploadedFileName}. */\n get uploadedFileName() {\n return this.UploadedFileName;\n }\n /** @deprecated Use {@link UploadedFileName}. */\n set uploadedFileName(value) {\n this.UploadedFileName = value;\n }\n PreviewUrl = '';\n\n /** @deprecated Use {@link PreviewUrl}. */\n get previewUrl() {\n return this.PreviewUrl;\n }\n /** @deprecated Use {@link PreviewUrl}. */\n set previewUrl(value) {\n this.PreviewUrl = value;\n }\n PreviewIconClass = '';\n\n /** @deprecated Use {@link PreviewIconClass}. */\n get previewIconClass() {\n return this.PreviewIconClass;\n }\n /** @deprecated Use {@link PreviewIconClass}. */\n set previewIconClass(value) {\n this.PreviewIconClass = value;\n }\n\n // UI state\n IsSaving = false;\n\n /** @deprecated Use {@link IsSaving}. */\n get isSaving() {\n return this.IsSaving;\n }\n /** @deprecated Use {@link IsSaving}. */\n set isSaving(value) {\n this.IsSaving = value;\n }\n ShowSuccessMessage = false;\n\n /** @deprecated Use {@link ShowSuccessMessage}. */\n get showSuccessMessage() {\n return this.ShowSuccessMessage;\n }\n /** @deprecated Use {@link ShowSuccessMessage}. */\n set showSuccessMessage(value) {\n this.ShowSuccessMessage = value;\n }\n errorMessage = '';\n\n // Icon search state\n IconSearchTerm = '';\n\n /** @deprecated Use {@link IconSearchTerm}. */\n get iconSearchTerm() {\n return this.IconSearchTerm;\n }\n /** @deprecated Use {@link IconSearchTerm}. */\n set iconSearchTerm(value) {\n this.IconSearchTerm = value;\n }\n IconSearch$ = new BehaviorSubject<string>('');\n\n /** @deprecated Use {@link IconSearch$}. */\n get iconSearch$() {\n return this.IconSearch$;\n }\n /** @deprecated Use {@link IconSearch$}. */\n set iconSearch$(value) {\n this.IconSearch$ = value;\n }\n FilteredIconCategories: IconCategory[] = [];\n\n /** @deprecated Use {@link FilteredIconCategories}. */\n get filteredIconCategories(): IconCategory[] {\n return this.FilteredIconCategories;\n }\n /** @deprecated Use {@link FilteredIconCategories}. */\n set filteredIconCategories(value: IconCategory[]) {\n this.FilteredIconCategories = value;\n }\n TotalFilteredIcons = 0;\n\n /** @deprecated Use {@link TotalFilteredIcons}. */\n get totalFilteredIcons() {\n return this.TotalFilteredIcons;\n }\n /** @deprecated Use {@link TotalFilteredIcons}. */\n set totalFilteredIcons(value) {\n this.TotalFilteredIcons = value;\n }\n\n // Cleanup\n private destroy$ = new Subject<void>();\n\n // Icon picker data\n IconCategories: IconCategory[] = [\n {\n name: 'Users',\n icons: [\n 'fa-solid fa-user',\n 'fa-solid fa-user-tie',\n 'fa-solid fa-user-astronaut',\n 'fa-solid fa-user-ninja',\n 'fa-solid fa-user-secret',\n 'fa-solid fa-user-graduate',\n 'fa-solid fa-user-doctor',\n 'fa-solid fa-user-gear',\n 'fa-regular fa-circle-user',\n 'fa-solid fa-user-check',\n 'fa-solid fa-user-shield',\n 'fa-solid fa-user-crown',\n 'fa-solid fa-user-pilot',\n 'fa-solid fa-user-cowboy',\n 'fa-solid fa-user-chef'\n ]\n },\n {\n name: 'Business',\n icons: [\n 'fa-solid fa-briefcase',\n 'fa-solid fa-building',\n 'fa-solid fa-chart-line',\n 'fa-solid fa-handshake',\n 'fa-solid fa-trophy',\n 'fa-solid fa-medal',\n 'fa-solid fa-award',\n 'fa-solid fa-lightbulb',\n 'fa-solid fa-rocket',\n 'fa-solid fa-star'\n ]\n },\n {\n name: 'Tech',\n icons: [\n 'fa-solid fa-laptop-code',\n 'fa-solid fa-terminal',\n 'fa-solid fa-microchip',\n 'fa-solid fa-robot',\n 'fa-solid fa-brain',\n 'fa-solid fa-code',\n 'fa-solid fa-server',\n 'fa-solid fa-database',\n 'fa-solid fa-network-wired',\n 'fa-solid fa-bug'\n ]\n },\n {\n name: 'Fun',\n icons: [\n 'fa-solid fa-face-smile',\n 'fa-solid fa-face-grin',\n 'fa-solid fa-face-laugh',\n 'fa-solid fa-face-wink',\n 'fa-solid fa-heart',\n 'fa-solid fa-fire',\n 'fa-solid fa-bolt',\n 'fa-solid fa-gem',\n 'fa-solid fa-crown',\n 'fa-solid fa-hat-wizard'\n ]\n },\n {\n name: 'Animals',\n icons: [\n 'fa-solid fa-cat',\n 'fa-solid fa-dog',\n 'fa-solid fa-dragon',\n 'fa-solid fa-dove',\n 'fa-solid fa-fish'\n ]\n }\n ];\n\n /** @deprecated Use {@link IconCategories}. */\n get iconCategories(): IconCategory[] {\n return this.IconCategories;\n }\n /** @deprecated Use {@link IconCategories}. */\n set iconCategories(value: IconCategory[]) {\n this.IconCategories = value;\n }\n\n constructor(\n private userAvatarService: UserAvatarService,\n private sharedService: SharedService,\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone\n ) {\n super();}\n\n async ngOnInit() {\n const md = this.ProviderToUse;\n const currentUserInfo = md.CurrentUser;\n\n // Load the full MJUserEntity to access avatar fields\n this.CurrentUser = await md.GetEntityObject<MJUserEntity>('MJ: Users');\n await this.CurrentUser.Load(currentUserInfo.ID);\n\n // Initialize filtered icons\n this.FilteredIconCategories = [...this.IconCategories];\n this.TotalFilteredIcons = this.IconCategories.reduce(\n (sum, cat) => sum + cat.icons.length,\n 0\n );\n\n // Setup icon search subscription\n this.setupIconSearchSubscription();\n\n this.loadCurrentAvatar();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Initializes the icon search subscription with debounce\n */\n private setupIconSearchSubscription(): void {\n this.IconSearch$\n .pipe(\n debounceTime(200), // Faster debounce for local filtering\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n )\n .subscribe((searchTerm) => {\n this.filterIcons(searchTerm);\n });\n }\n\n /**\n * Handles icon search input changes\n */\n OnIconSearchChange(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.IconSearchTerm = value;\n this.IconSearch$.next(value);\n }\n\n /** @deprecated Use {@link OnIconSearchChange}. */\n onIconSearchChange(event: Event): void {\n return this.OnIconSearchChange(event);\n }\n\n /**\n * Filters icons based on search term\n * Matches icon class name parts (e.g., \"user\" matches \"fa-user-tie\")\n */\n private filterIcons(searchTerm: string): void {\n if (!searchTerm || searchTerm.trim() === '') {\n // Show all icons\n this.FilteredIconCategories = [...this.IconCategories];\n this.TotalFilteredIcons = this.IconCategories.reduce(\n (sum, cat) => sum + cat.icons.length,\n 0\n );\n return;\n }\n\n const term = searchTerm.toLowerCase().trim();\n this.FilteredIconCategories = [];\n this.TotalFilteredIcons = 0;\n\n for (const category of this.IconCategories) {\n const matchingIcons = category.icons.filter((icon) => {\n // Extract icon name from class (e.g., \"fa-solid fa-user-tie\" -> \"user-tie\")\n const iconName = this.ExtractIconName(icon);\n return iconName.includes(term);\n });\n\n if (matchingIcons.length > 0) {\n this.FilteredIconCategories.push({\n name: category.name,\n icons: matchingIcons\n });\n this.TotalFilteredIcons += matchingIcons.length;\n }\n }\n }\n\n /**\n * Extracts the icon name from a Font Awesome class string\n * e.g., \"fa-solid fa-user-tie\" -> \"user-tie\"\n */\n ExtractIconName(iconClass: string): string {\n const parts = iconClass.split(' ');\n for (const part of parts) {\n if (part.startsWith('fa-') && !['fa-solid', 'fa-regular', 'fa-light', 'fa-brands'].includes(part)) {\n return part.substring(3); // Remove \"fa-\" prefix\n }\n }\n return iconClass.toLowerCase();\n }\n\n /** @deprecated Use {@link ExtractIconName}. */\n extractIconName(iconClass: string): string {\n return this.ExtractIconName(iconClass);\n }\n\n /**\n * Clears the icon search\n */\n ClearIconSearch(): void {\n this.IconSearchTerm = '';\n this.IconSearch$.next('');\n }\n\n /** @deprecated Use {@link ClearIconSearch}. */\n clearIconSearch(): void {\n return this.ClearIconSearch();\n }\n\n /**\n * Loads the current avatar settings from the user entity\n */\n private loadCurrentAvatar(): void {\n if (this.CurrentUser.UserImageURL) {\n this.ImageUrlInput = this.CurrentUser.UserImageURL;\n this.PreviewUrl = this.CurrentUser.UserImageURL;\n\n // Determine if it's a Base64 upload or URL\n if (this.userAvatarService.isValidBase64DataUri(this.CurrentUser.UserImageURL)) {\n this.SelectedTab = 'upload';\n this.UploadedImageBase64 = this.CurrentUser.UserImageURL;\n this.UploadedFileName = 'Current uploaded image';\n } else {\n this.SelectedTab = 'url';\n }\n } else if (this.CurrentUser.UserImageIconClass) {\n this.SelectedIconClass = this.CurrentUser.UserImageIconClass;\n this.PreviewIconClass = this.CurrentUser.UserImageIconClass;\n this.SelectedTab = 'icon';\n } else {\n // Default to URL tab with empty state\n this.SelectedTab = 'url';\n }\n }\n\n /**\n * Switches between tabs and updates preview\n */\n SelectTab(tab: 'upload' | 'url' | 'icon' | 'provider'): void {\n this.SelectedTab = tab;\n this.updatePreview();\n }\n\n /** @deprecated Use {@link SelectTab}. */\n selectTab(tab: 'upload' | 'url' | 'icon' | 'provider'): void {\n return this.SelectTab(tab);\n }\n\n /**\n * Handles file selection from native input\n */\n async OnFileSelected(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n\n if (!file) {\n return;\n }\n\n // Clear any previous errors\n this.errorMessage = '';\n\n // Validate file type\n if (!file.type.match(/^image\\/(png|jpeg|jpg|gif|webp)$/)) {\n this.errorMessage = 'Please select a valid image file (PNG, JPG, GIF, WEBP)';\n input.value = ''; // Clear the input\n return;\n }\n\n // Validate file size (200KB)\n const maxSize = 200 * 1024;\n if (file.size > maxSize) {\n this.errorMessage = `Image must be smaller than 200KB. Your image is ${Math.round(file.size / 1024)}KB`;\n input.value = ''; // Clear the input\n return;\n }\n\n // Convert to Base64\n try {\n this.UploadedImageBase64 = await this.userAvatarService.fileToBase64(file);\n this.UploadedFileName = file.name;\n this.PreviewUrl = this.UploadedImageBase64;\n this.PreviewIconClass = ''; // Clear icon preview\n } catch (error) {\n this.errorMessage = 'Failed to process image. Please try again.';\n console.error('Error converting file to Base64:', error);\n }\n }\n\n /** @deprecated Use {@link OnFileSelected}. */\n async onFileSelected(event: Event): Promise<void> {\n return this.OnFileSelected(event);\n }\n\n /**\n * Clears uploaded file\n */\n ClearUpload(): void {\n this.UploadedFileName = '';\n this.UploadedImageBase64 = '';\n this.PreviewUrl = '';\n this.errorMessage = '';\n\n // Reset file input\n const fileInput = document.querySelector('input[type=\"file\"]') as HTMLInputElement;\n if (fileInput) {\n fileInput.value = '';\n }\n }\n\n /** @deprecated Use {@link ClearUpload}. */\n clearUpload(): void {\n return this.ClearUpload();\n }\n\n /**\n * Handles URL input changes\n */\n OnUrlChange(): void {\n this.errorMessage = '';\n\n if (this.ImageUrlInput && this.ImageUrlInput.trim().length > 0) {\n if (this.userAvatarService.isValidUrl(this.ImageUrlInput)) {\n this.PreviewUrl = this.ImageUrlInput;\n this.PreviewIconClass = ''; // Clear icon preview\n } else {\n this.errorMessage = 'Please enter a valid URL';\n this.PreviewUrl = '';\n }\n } else {\n this.PreviewUrl = '';\n }\n }\n\n /** @deprecated Use {@link OnUrlChange}. */\n onUrlChange(): void {\n return this.OnUrlChange();\n }\n\n /**\n * Handles icon selection\n */\n SelectIcon(iconClass: string): void {\n this.SelectedIconClass = iconClass;\n this.PreviewIconClass = iconClass;\n this.PreviewUrl = ''; // Clear image preview\n this.errorMessage = '';\n }\n\n /** @deprecated Use {@link SelectIcon}. */\n selectIcon(iconClass: string): void {\n return this.SelectIcon(iconClass);\n }\n\n /**\n * Checks if an icon is currently selected\n */\n IsIconSelected(iconClass: string): boolean {\n return this.SelectedIconClass === iconClass;\n }\n\n /** @deprecated Use {@link IsIconSelected}. */\n isIconSelected(iconClass: string): boolean {\n return this.IsIconSelected(iconClass);\n }\n\n /**\n * Syncs avatar from authentication provider\n * NOTE: This is a placeholder - actual implementation should be done\n * in the calling application which has access to auth services\n */\n async SyncFromProvider(): Promise<void> {\n this.errorMessage = 'Avatar sync from provider is not yet implemented in settings. Please use the automatic sync on login or manually upload an image.';\n // TODO: Implement auth provider integration\n // The calling application should provide a way to get auth claims\n // and call userAvatarService.syncFromImageUrl() with the appropriate URL and headers\n }\n\n /** @deprecated Use {@link SyncFromProvider}. */\n async syncFromProvider(): Promise<void> {\n return this.SyncFromProvider();\n }\n\n /**\n * Reverts avatar to default (clears both fields)\n * This will trigger auto-sync from auth provider on next login\n */\n async RevertToDefault(): Promise<void> {\n this.IsSaving = true;\n this.errorMessage = '';\n this.ShowSuccessMessage = false;\n\n try {\n // Clear both avatar fields\n this.CurrentUser.UserImageURL = null;\n this.CurrentUser.UserImageIconClass = null;\n\n // Save to database\n const saved = await this.CurrentUser.Save();\n\n if (saved) {\n // Clear local state\n this.ImageUrlInput = '';\n this.SelectedIconClass = '';\n this.UploadedImageBase64 = '';\n this.UploadedFileName = '';\n this.PreviewUrl = '';\n this.PreviewIconClass = '';\n\n this.showSuccess('Avatar reverted to default! Your auth provider image will sync on next login.');\n\n // Notify header component to update avatar display\n MJGlobal.Instance.RaiseEvent({\n event: MJEventType.ComponentEvent,\n eventCode: EventCodes.AvatarUpdated,\n component: this,\n args: {\n imageUrl: null,\n iconClass: null\n }\n });\n } else {\n this.errorMessage = 'Failed to revert avatar. Please try again.';\n }\n } catch (error) {\n console.error('Error reverting avatar:', error);\n this.ngZone.run(() => {\n this.errorMessage = 'An error occurred while reverting. Please try again.';\n this.cdr.markForCheck();\n });\n } finally {\n this.ngZone.run(() => {\n this.IsSaving = false;\n this.cdr.markForCheck();\n });\n }\n }\n\n /** @deprecated Use {@link RevertToDefault}. */\n async revertToDefault(): Promise<void> {\n return this.RevertToDefault();\n }\n\n /**\n * Updates the preview based on current tab\n */\n private updatePreview(): void {\n switch (this.SelectedTab) {\n case 'upload':\n if (this.UploadedImageBase64) {\n this.PreviewUrl = this.UploadedImageBase64;\n this.PreviewIconClass = '';\n }\n break;\n case 'url':\n if (this.ImageUrlInput && this.userAvatarService.isValidUrl(this.ImageUrlInput)) {\n this.PreviewUrl = this.ImageUrlInput;\n this.PreviewIconClass = '';\n }\n break;\n case 'icon':\n if (this.SelectedIconClass) {\n this.PreviewIconClass = this.SelectedIconClass;\n this.PreviewUrl = '';\n }\n break;\n }\n }\n\n /**\n * Saves avatar settings to database\n */\n async save(): Promise<void> {\n this.IsSaving = true;\n this.errorMessage = '';\n this.ShowSuccessMessage = false;\n\n try {\n // Update user entity based on selected tab\n switch (this.SelectedTab) {\n case 'upload':\n if (!this.UploadedImageBase64) {\n this.errorMessage = 'Please select an image to upload';\n this.IsSaving = false;\n return;\n }\n this.CurrentUser.UserImageURL = this.UploadedImageBase64;\n this.CurrentUser.UserImageIconClass = null;\n break;\n\n case 'url':\n if (!this.ImageUrlInput || !this.userAvatarService.isValidUrl(this.ImageUrlInput)) {\n this.errorMessage = 'Please enter a valid image URL';\n this.IsSaving = false;\n return;\n }\n this.CurrentUser.UserImageURL = this.ImageUrlInput;\n this.CurrentUser.UserImageIconClass = null;\n break;\n\n case 'icon':\n if (!this.SelectedIconClass) {\n this.errorMessage = 'Please select an icon';\n this.IsSaving = false;\n return;\n }\n this.CurrentUser.UserImageURL = null;\n this.CurrentUser.UserImageIconClass = this.SelectedIconClass;\n break;\n }\n\n // Save to database\n const saved = await this.CurrentUser.Save();\n\n if (saved) {\n this.showSuccess('Avatar updated successfully!');\n\n // Notify header component to update avatar display\n MJGlobal.Instance.RaiseEvent({\n event: MJEventType.ComponentEvent,\n eventCode: EventCodes.AvatarUpdated,\n component: this,\n args: {\n imageUrl: this.CurrentUser.UserImageURL,\n iconClass: this.CurrentUser.UserImageIconClass\n }\n });\n } else {\n this.errorMessage = 'Failed to save avatar. Please try again.';\n }\n } catch (error) {\n console.error('Error saving avatar:', error);\n this.ngZone.run(() => {\n this.errorMessage = 'An error occurred while saving. Please try again.';\n this.cdr.markForCheck();\n });\n } finally {\n this.ngZone.run(() => {\n this.IsSaving = false;\n this.cdr.markForCheck();\n });\n }\n }\n\n /**\n * Cancels changes and reverts to saved state\n */\n cancel(): void {\n this.loadCurrentAvatar();\n this.errorMessage = '';\n this.ShowSuccessMessage = false;\n }\n\n /**\n * Shows success message temporarily\n */\n private showSuccess(message: string): void {\n this.ShowSuccessMessage = true;\n this.sharedService.CreateSimpleNotification(message, 'success', 3000);\n\n // Hide success message after 3 seconds\n setTimeout(() => {\n this.ShowSuccessMessage = false;\n }, 3000);\n }\n}\n","<div class=\"user-profile-settings\">\n <!-- Header Section -->\n <div class=\"profile-header\">\n <h3>Avatar Settings</h3>\n <p class=\"description\">Customize your profile picture with an image, URL, or icon</p>\n </div>\n\n <!-- Error Message -->\n @if (errorMessage) {\n <mj-alert Variant=\"error\" [Message]=\"errorMessage\" Dismissible (Dismissed)=\"errorMessage = ''\" />\n }\n\n <!-- Success Message -->\n @if (showSuccessMessage) {\n <mj-alert Variant=\"success\" Message=\"Avatar updated successfully!\" />\n }\n\n <!-- Avatar Preview Section -->\n <div class=\"avatar-preview-section\">\n <div class=\"preview-label\">Preview</div>\n <div class=\"preview-container\">\n @if (previewUrl) {\n <img [src]=\"previewUrl\" alt=\"Avatar preview\" class=\"preview-image\" />\n } @else if (previewIconClass) {\n <div class=\"preview-icon-wrapper\">\n <i [class]=\"previewIconClass + ' preview-icon'\" aria-hidden=\"true\"></i>\n </div>\n } @else {\n <div class=\"preview-placeholder\">\n <i class=\"fa-solid fa-user\" aria-hidden=\"true\"></i>\n <span>No avatar selected</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"tab-navigation\" role=\"tablist\" aria-label=\"Avatar customization options\">\n <button\n class=\"tab-btn\"\n [class.active]=\"selectedTab === 'upload'\"\n (click)=\"selectTab('upload')\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedTab === 'upload'\"\n aria-controls=\"panel-upload\"\n >\n <i class=\"fa-solid fa-upload\" aria-hidden=\"true\"></i>\n <span>Upload</span>\n </button>\n <button\n class=\"tab-btn\"\n [class.active]=\"selectedTab === 'url'\"\n (click)=\"selectTab('url')\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedTab === 'url'\"\n aria-controls=\"panel-url\"\n >\n <i class=\"fa-solid fa-link\" aria-hidden=\"true\"></i>\n <span>URL</span>\n </button>\n <button\n class=\"tab-btn\"\n [class.active]=\"selectedTab === 'icon'\"\n (click)=\"selectTab('icon')\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedTab === 'icon'\"\n aria-controls=\"panel-icon\"\n >\n <i class=\"fa-solid fa-icons\" aria-hidden=\"true\"></i>\n <span>Icon</span>\n </button>\n <button\n class=\"tab-btn\"\n [class.active]=\"selectedTab === 'provider'\"\n (click)=\"selectTab('provider')\"\n role=\"tab\"\n [attr.aria-selected]=\"selectedTab === 'provider'\"\n aria-controls=\"panel-provider\"\n >\n <i class=\"fa-brands fa-microsoft\" aria-hidden=\"true\"></i>\n <span>Sync</span>\n </button>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Upload Tab -->\n @if (selectedTab === 'upload') {\n <div class=\"upload-section\" id=\"panel-upload\" role=\"tabpanel\">\n <input\n type=\"file\"\n #fileInput\n accept=\"image/png,image/jpeg,image/jpg,image/gif,image/webp\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n />\n\n <button class=\"upload-btn\" (click)=\"fileInput.click()\">\n <i class=\"fa-solid fa-upload\" aria-hidden=\"true\"></i>\n Choose Image\n </button>\n\n <div class=\"upload-info\">\n <i class=\"fa-solid fa-info-circle\" aria-hidden=\"true\"></i>\n Max 200KB - PNG, JPG, GIF, WEBP\n </div>\n\n @if (uploadedFileName) {\n <div class=\"selected-file\">\n <i class=\"fa-solid fa-file-image\" aria-hidden=\"true\"></i>\n <span>{{ uploadedFileName }}</span>\n <button class=\"remove-btn\" (click)=\"clearUpload()\" aria-label=\"Remove selected file\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n }\n\n <!-- URL Tab -->\n @if (selectedTab === 'url') {\n <div class=\"url-section\" id=\"panel-url\" role=\"tabpanel\">\n <label for=\"imageUrl\">Image URL</label>\n <input\n type=\"text\"\n id=\"imageUrl\"\n class=\"url-input\"\n placeholder=\"https://example.com/avatar.jpg\"\n [(ngModel)]=\"imageUrlInput\"\n (input)=\"onUrlChange()\"\n />\n <div class=\"url-info\">\n <i class=\"fa-solid fa-info-circle\" aria-hidden=\"true\"></i>\n Enter a URL to an image hosted online\n </div>\n </div>\n }\n\n <!-- Icon Tab -->\n @if (selectedTab === 'icon') {\n <div class=\"icon-section\" id=\"panel-icon\" role=\"tabpanel\">\n <!-- Icon Search -->\n <div class=\"icon-search-container\">\n <div class=\"mj-search\">\n <i class=\"fa-solid fa-search mj-search-icon\" aria-hidden=\"true\"></i>\n <input\n type=\"text\"\n class=\"mj-search-input\"\n placeholder=\"Search icons by name...\"\n [value]=\"iconSearchTerm\"\n (input)=\"onIconSearchChange($event)\"\n aria-label=\"Search icons\"\n />\n @if (iconSearchTerm) {\n <button\n class=\"mj-search-clear\"\n (click)=\"clearIconSearch()\"\n aria-label=\"Clear search\"\n >\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n <div class=\"icon-filter-info\">\n {{ totalFilteredIcons }} icon{{ totalFilteredIcons !== 1 ? 's' : '' }} found\n </div>\n </div>\n\n <!-- Icon Categories -->\n <div class=\"icon-categories-container\">\n @if (filteredIconCategories.length > 0) {\n @for (category of filteredIconCategories; track category.name) {\n <div class=\"icon-category\">\n <h4 class=\"category-title\">{{ category.name }}</h4>\n <div class=\"icon-grid\" role=\"radiogroup\" [attr.aria-label]=\"category.name + ' icons'\">\n @for (icon of category.icons; track icon) {\n <button\n class=\"icon-option\"\n [class.selected]=\"isIconSelected(icon)\"\n (click)=\"selectIcon(icon)\"\n [title]=\"extractIconName(icon)\"\n role=\"radio\"\n [attr.aria-checked]=\"isIconSelected(icon)\"\n [attr.aria-label]=\"extractIconName(icon) + ' icon'\"\n >\n <i [class]=\"icon\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </div>\n }\n } @else {\n <mj-empty-state\n Variant=\"no-results\"\n Size=\"compact\"\n Title=\"No icons found\"\n Message=\"Try a different search term\" />\n }\n </div>\n </div>\n }\n\n <!-- Provider Sync Tab -->\n @if (selectedTab === 'provider') {\n <div class=\"provider-section\" id=\"panel-provider\" role=\"tabpanel\">\n <div class=\"provider-info\">\n <i class=\"fa-solid fa-info-circle\" aria-hidden=\"true\"></i>\n <p>Sync your avatar from your authentication provider account</p>\n </div>\n\n <button\n class=\"sync-btn\"\n (click)=\"syncFromProvider()\"\n [disabled]=\"isSaving\"\n >\n <i class=\"fa-brands fa-microsoft\" aria-hidden=\"true\"></i>\n @if (isSaving) {\n <span>Syncing...</span>\n } @else {\n <span>Sync from Microsoft Account</span>\n }\n </button>\n\n <div class=\"provider-note\">\n <i class=\"fa-solid fa-lightbulb\" aria-hidden=\"true\"></i>\n <small>This will download your profile photo from Microsoft and save it to your profile</small>\n </div>\n\n <hr class=\"provider-divider\" />\n\n <button\n class=\"revert-btn\"\n (click)=\"revertToDefault()\"\n [disabled]=\"isSaving\"\n >\n <i class=\"fa-solid fa-rotate-left\" aria-hidden=\"true\"></i>\n @if (isSaving) {\n <span>Reverting...</span>\n } @else {\n <span>Revert to Default</span>\n }\n </button>\n\n <div class=\"provider-note\">\n <i class=\"fa-solid fa-info-circle\" aria-hidden=\"true\"></i>\n <small>Clears your avatar settings and restores the automatic sync from your auth provider</small>\n </div>\n </div>\n }\n </div>\n\n <!-- Action Buttons -->\n <div class=\"action-buttons\">\n <button\n mjButton variant=\"primary\"\n (click)=\"save()\"\n [disabled]=\"isSaving || selectedTab === 'provider'\"\n >\n @if (isSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n <span>Saving...</span>\n } @else {\n <i class=\"fa-solid fa-save\" aria-hidden=\"true\"></i>\n <span>Save Changes</span>\n }\n </button>\n <button\n mjButton\n (click)=\"cancel()\"\n [disabled]=\"isSaving\"\n >\n Cancel\n </button>\n </div>\n</div>\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-explorer-settings",
|
|
3
|
-
"version": "6.1
|
|
3
|
+
"version": "6.2.0-edge.1",
|
|
4
4
|
"description": "MemberJunction: Reusable Angular components for the settings section of the MJ Explorer App",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@angular/compiler": "21.2.22",
|
|
25
25
|
"@angular/compiler-cli": "21.2.22",
|
|
26
|
-
"@memberjunction/ng-test-utils": "6.1
|
|
26
|
+
"@memberjunction/ng-test-utils": "6.2.0-edge.1"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"@angular/cdk": "^21.2.14",
|
|
@@ -32,24 +32,24 @@
|
|
|
32
32
|
"@angular/forms": "^21.2.22"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@memberjunction/core": "6.1
|
|
36
|
-
"@memberjunction/core-entities": "6.1
|
|
37
|
-
"@memberjunction/global": "6.1
|
|
38
|
-
"@memberjunction/graphql-dataprovider": "6.1
|
|
39
|
-
"@memberjunction/ng-base-application": "6.1
|
|
40
|
-
"@memberjunction/ng-base-forms": "6.1
|
|
41
|
-
"@memberjunction/ng-base-types": "6.1
|
|
42
|
-
"@memberjunction/ng-code-editor": "6.1
|
|
43
|
-
"@memberjunction/ng-entity-form-dialog": "6.1
|
|
44
|
-
"@memberjunction/ng-entity-permissions": "6.1
|
|
45
|
-
"@memberjunction/ng-join-grid": "6.1
|
|
46
|
-
"@memberjunction/ng-notifications": "6.1
|
|
47
|
-
"@memberjunction/ng-shared": "6.1
|
|
48
|
-
"@memberjunction/ng-shared-generic": "6.1
|
|
49
|
-
"@memberjunction/ng-simple-record-list": "6.1
|
|
50
|
-
"@memberjunction/ng-tabstrip": "6.1
|
|
51
|
-
"@memberjunction/ng-ui-components": "6.1
|
|
52
|
-
"@memberjunction/ng-user-avatar": "6.1
|
|
35
|
+
"@memberjunction/core": "6.2.0-edge.1",
|
|
36
|
+
"@memberjunction/core-entities": "6.2.0-edge.1",
|
|
37
|
+
"@memberjunction/global": "6.2.0-edge.1",
|
|
38
|
+
"@memberjunction/graphql-dataprovider": "6.2.0-edge.1",
|
|
39
|
+
"@memberjunction/ng-base-application": "6.2.0-edge.1",
|
|
40
|
+
"@memberjunction/ng-base-forms": "6.2.0-edge.1",
|
|
41
|
+
"@memberjunction/ng-base-types": "6.2.0-edge.1",
|
|
42
|
+
"@memberjunction/ng-code-editor": "6.2.0-edge.1",
|
|
43
|
+
"@memberjunction/ng-entity-form-dialog": "6.2.0-edge.1",
|
|
44
|
+
"@memberjunction/ng-entity-permissions": "6.2.0-edge.1",
|
|
45
|
+
"@memberjunction/ng-join-grid": "6.2.0-edge.1",
|
|
46
|
+
"@memberjunction/ng-notifications": "6.2.0-edge.1",
|
|
47
|
+
"@memberjunction/ng-shared": "6.2.0-edge.1",
|
|
48
|
+
"@memberjunction/ng-shared-generic": "6.2.0-edge.1",
|
|
49
|
+
"@memberjunction/ng-simple-record-list": "6.2.0-edge.1",
|
|
50
|
+
"@memberjunction/ng-tabstrip": "6.2.0-edge.1",
|
|
51
|
+
"@memberjunction/ng-ui-components": "6.2.0-edge.1",
|
|
52
|
+
"@memberjunction/ng-user-avatar": "6.2.0-edge.1",
|
|
53
53
|
"rxjs": "~7.8.2",
|
|
54
54
|
"tslib": "^2.8.1"
|
|
55
55
|
},
|