@chill-sharp/ui-core 1.1.12
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/.agents/skills/chillsharp-current-user-preferences/SKILL.md +70 -0
- package/.agents/skills/chillsharp-ui-template/SKILL.md +18 -0
- package/README.md +103 -0
- package/chill-sharp-ui-core.d.ts.map +1 -0
- package/doc/AIAssistedDevelopment/README.md +185 -0
- package/doc/AttachmentModel/README.md +173 -0
- package/doc/AuthenticationModel/README.md +213 -0
- package/doc/AuthenticationModel/how-to-integreate-auth-minimal-api.md +293 -0
- package/doc/ChillSharpClient.md +464 -0
- package/doc/ClientGeneration/README.md +172 -0
- package/doc/ComplianceGuide/README.md +178 -0
- package/doc/Configuration/README.md +94 -0
- package/doc/CurrentUserPreferences.md +114 -0
- package/doc/DateTimePolicy/README.md +154 -0
- package/doc/DateTimeSerialization.md +423 -0
- package/doc/Endpoints.md +260 -0
- package/doc/HowTo/01-simple-blog-sqlite.md +153 -0
- package/doc/HowTo/02-blog-schema-labels.md +140 -0
- package/doc/HowTo/03-authentication.md +218 -0
- package/doc/HowTo/04-blog-posts-one-to-many.md +194 -0
- package/doc/HowTo/05-docker-env-variables.md +274 -0
- package/doc/HowTo/06-chunk-transactions-autocomplete.md +196 -0
- package/doc/Mcp/ChatGPT.md +291 -0
- package/doc/Mcp/README.md +799 -0
- package/doc/MenuGuide/README.md +49 -0
- package/doc/ModelPreparation.md +255 -0
- package/doc/PermissionModel/README.md +277 -0
- package/doc/README.md +228 -0
- package/doc/ReferenceExistence.md +130 -0
- package/doc/RegisterContext.md +217 -0
- package/doc/UiCore/CRUD.md +170 -0
- package/doc/UiCore/README.md +13 -0
- package/doc/ValidationModel/README.md +117 -0
- package/doc/it/AIAssistedDevelopment/README.md +185 -0
- package/doc/it/AttachmentModel/README.md +173 -0
- package/doc/it/AuthenticationModel/README.md +171 -0
- package/doc/it/AuthenticationModel/how-to-integreate-auth-minimal-api.md +292 -0
- package/doc/it/ChillSharpClient.md +464 -0
- package/doc/it/ClientGeneration/README.md +152 -0
- package/doc/it/ComplianceGuide/README.md +178 -0
- package/doc/it/Configuration/README.md +94 -0
- package/doc/it/CurrentUserPreferences.md +114 -0
- package/doc/it/DateTimePolicy/README.md +154 -0
- package/doc/it/DateTimeSerialization.md +423 -0
- package/doc/it/Endpoints.md +260 -0
- package/doc/it/HowTo/01-simple-blog-sqlite.md +152 -0
- package/doc/it/HowTo/02-blog-schema-labels.md +139 -0
- package/doc/it/HowTo/03-authentication.md +221 -0
- package/doc/it/HowTo/04-blog-posts-one-to-many.md +193 -0
- package/doc/it/HowTo/05-docker-env-variables.md +268 -0
- package/doc/it/HowTo/06-chunk-transactions-autocomplete.md +196 -0
- package/doc/it/Mcp/ChatGPT.md +291 -0
- package/doc/it/Mcp/README.md +799 -0
- package/doc/it/MenuGuide/README.md +49 -0
- package/doc/it/ModelPreparation.md +254 -0
- package/doc/it/PermissionModel/README.md +190 -0
- package/doc/it/README.md +172 -0
- package/doc/it/ReferenceExistence.md +130 -0
- package/doc/it/RegisterContext.md +218 -0
- package/doc/it/UiCore/CRUD.md +170 -0
- package/doc/it/UiCore/README.md +13 -0
- package/doc/it/ValidationModel/README.md +117 -0
- package/fesm2022/chill-sharp-ui-core.mjs +16725 -0
- package/fesm2022/chill-sharp-ui-core.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/chill-sharp-ui-root.component.d.ts +6 -0
- package/lib/chill-sharp-ui-root.component.d.ts.map +1 -0
- package/lib/chill-sharp-ui.routes.d.ts +3 -0
- package/lib/chill-sharp-ui.routes.d.ts.map +1 -0
- package/lib/chill.config.d.ts +5 -0
- package/lib/chill.config.d.ts.map +1 -0
- package/lib/layouts/auth-shell.component.d.ts +8 -0
- package/lib/layouts/auth-shell.component.d.ts.map +1 -0
- package/lib/layouts/workspace-page.component.d.ts +49 -0
- package/lib/layouts/workspace-page.component.d.ts.map +1 -0
- package/lib/lib/chill-form.component.d.ts +151 -0
- package/lib/lib/chill-form.component.d.ts.map +1 -0
- package/lib/lib/chill-i18n-button-label.component.d.ts +27 -0
- package/lib/lib/chill-i18n-button-label.component.d.ts.map +1 -0
- package/lib/lib/chill-i18n-label.component.d.ts +30 -0
- package/lib/lib/chill-i18n-label.component.d.ts.map +1 -0
- package/lib/lib/chill-json-input.component.d.ts +31 -0
- package/lib/lib/chill-json-input.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts +12 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts +17 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts +45 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts +19 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts +12 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts +13 -0
- package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-input.component.d.ts +452 -0
- package/lib/lib/chill-polymorphic-input.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts +8 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts +7 -0
- package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts.map +1 -0
- package/lib/lib/chill-polymorphic-output.component.d.ts +75 -0
- package/lib/lib/chill-polymorphic-output.component.d.ts.map +1 -0
- package/lib/lib/chill-table.component.d.ts +434 -0
- package/lib/lib/chill-table.component.d.ts.map +1 -0
- package/lib/lib/chill-text-editor-dialog.component.d.ts +14 -0
- package/lib/lib/chill-text-editor-dialog.component.d.ts.map +1 -0
- package/lib/lib/crud-configuration.utils.d.ts +4 -0
- package/lib/lib/crud-configuration.utils.d.ts.map +1 -0
- package/lib/lib/culture-name-options.d.ts +3 -0
- package/lib/lib/culture-name-options.d.ts.map +1 -0
- package/lib/lib/date-format-options.d.ts +3 -0
- package/lib/lib/date-format-options.d.ts.map +1 -0
- package/lib/lib/iana-time-zone-options.d.ts +3 -0
- package/lib/lib/iana-time-zone-options.d.ts.map +1 -0
- package/lib/lib/notice-transition.directive.d.ts +17 -0
- package/lib/lib/notice-transition.directive.d.ts.map +1 -0
- package/lib/lib/schema-property-dialog.component.d.ts +74 -0
- package/lib/lib/schema-property-dialog.component.d.ts.map +1 -0
- package/lib/models/chill-auth.models.d.ts +176 -0
- package/lib/models/chill-auth.models.d.ts.map +1 -0
- package/lib/models/chill-menu.models.d.ts +12 -0
- package/lib/models/chill-menu.models.d.ts.map +1 -0
- package/lib/models/chill-schema.models.d.ts +141 -0
- package/lib/models/chill-schema.models.d.ts.map +1 -0
- package/lib/models/workspace-dialog.models.d.ts +16 -0
- package/lib/models/workspace-dialog.models.d.ts.map +1 -0
- package/lib/models/workspace-task.models.d.ts +36 -0
- package/lib/models/workspace-task.models.d.ts.map +1 -0
- package/lib/pages/confirm-reset-page.component.d.ts +21 -0
- package/lib/pages/confirm-reset-page.component.d.ts.map +1 -0
- package/lib/pages/crud/attachment-upload-dialog.component.d.ts +24 -0
- package/lib/pages/crud/attachment-upload-dialog.component.d.ts.map +1 -0
- package/lib/pages/crud/crud-page.component.d.ts +244 -0
- package/lib/pages/crud/crud-page.component.d.ts.map +1 -0
- package/lib/pages/login-page.component.d.ts +21 -0
- package/lib/pages/login-page.component.d.ts.map +1 -0
- package/lib/pages/permissions/auth-role-dialog.component.d.ts +29 -0
- package/lib/pages/permissions/auth-role-dialog.component.d.ts.map +1 -0
- package/lib/pages/permissions/auth-search-select.component.d.ts +28 -0
- package/lib/pages/permissions/auth-search-select.component.d.ts.map +1 -0
- package/lib/pages/permissions/auth-user-dialog.component.d.ts +35 -0
- package/lib/pages/permissions/auth-user-dialog.component.d.ts.map +1 -0
- package/lib/pages/permissions/permission-editor.component.d.ts +55 -0
- package/lib/pages/permissions/permission-editor.component.d.ts.map +1 -0
- package/lib/pages/permissions/permissions-page.component.d.ts +38 -0
- package/lib/pages/permissions/permissions-page.component.d.ts.map +1 -0
- package/lib/pages/permissions/role-permission.component.d.ts +43 -0
- package/lib/pages/permissions/role-permission.component.d.ts.map +1 -0
- package/lib/pages/permissions/user-permission.component.d.ts +43 -0
- package/lib/pages/permissions/user-permission.component.d.ts.map +1 -0
- package/lib/pages/register-page.component.d.ts +24 -0
- package/lib/pages/register-page.component.d.ts.map +1 -0
- package/lib/pages/reset-password-page.component.d.ts +18 -0
- package/lib/pages/reset-password-page.component.d.ts.map +1 -0
- package/lib/provide-chill-sharp-ui-core.d.ts +8 -0
- package/lib/provide-chill-sharp-ui-core.d.ts.map +1 -0
- package/lib/services/chill.service.d.ts +249 -0
- package/lib/services/chill.service.d.ts.map +1 -0
- package/lib/services/workspace-dialog.service.d.ts +22 -0
- package/lib/services/workspace-dialog.service.d.ts.map +1 -0
- package/lib/services/workspace-layout.service.d.ts +13 -0
- package/lib/services/workspace-layout.service.d.ts.map +1 -0
- package/lib/services/workspace-task-registry.service.d.ts +35 -0
- package/lib/services/workspace-task-registry.service.d.ts.map +1 -0
- package/lib/services/workspace-toolbar.service.d.ts +23 -0
- package/lib/services/workspace-toolbar.service.d.ts.map +1 -0
- package/lib/services/workspace.service.d.ts +114 -0
- package/lib/services/workspace.service.d.ts.map +1 -0
- package/lib/storage-keys.d.ts +5 -0
- package/lib/storage-keys.d.ts.map +1 -0
- package/lib/tasks/crud-task/crud-task.component.d.ts +33 -0
- package/lib/tasks/crud-task/crud-task.component.d.ts.map +1 -0
- package/lib/tasks/goto-url-task/goto-url-task.component.d.ts +31 -0
- package/lib/tasks/goto-url-task/goto-url-task.component.d.ts.map +1 -0
- package/lib/workspace/confirm-message-dialog.component.d.ts +16 -0
- package/lib/workspace/confirm-message-dialog.component.d.ts.map +1 -0
- package/lib/workspace/entity-options-dialog.component.d.ts +29 -0
- package/lib/workspace/entity-options-dialog.component.d.ts.map +1 -0
- package/lib/workspace/external-task-api.d.ts +2 -0
- package/lib/workspace/external-task-api.d.ts.map +1 -0
- package/lib/workspace/user-profile-dialog.component.d.ts +30 -0
- package/lib/workspace/user-profile-dialog.component.d.ts.map +1 -0
- package/lib/workspace/workspace-dialog-host.component.d.ts +26 -0
- package/lib/workspace/workspace-dialog-host.component.d.ts.map +1 -0
- package/lib/workspace/workspace-menu-item-dialog.component.d.ts +61 -0
- package/lib/workspace/workspace-menu-item-dialog.component.d.ts.map +1 -0
- package/lib/workspace/workspace-menu.component.d.ts +104 -0
- package/lib/workspace/workspace-menu.component.d.ts.map +1 -0
- package/lib/workspace/workspace-taskbar.component.d.ts +14 -0
- package/lib/workspace/workspace-taskbar.component.d.ts.map +1 -0
- package/package.json +54 -0
- package/public-api.d.ts +56 -0
- package/public-api.d.ts.map +1 -0
- package/service-worker/chill-sharp-service-worker.js +166 -0
- package/styles/core-theme.scss +1268 -0
- package/template-customization/upgrade.ps1.template +342 -0
- package/template-customization/upgrade.sh.template +271 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chill-sharp-ui-core.mjs","sources":["../../src/lib/chill.config.ts","../../src/lib/storage-keys.ts","../../src/lib/chill-sharp-ui-root.component.ts","../../src/lib/models/chill-auth.models.ts","../../src/lib/services/chill.service.ts","../../src/lib/services/workspace-layout.service.ts","../../src/lib/lib/chill-i18n-label.component.ts","../../src/lib/layouts/auth-shell.component.ts","../../src/lib/services/workspace-dialog.service.ts","../../src/lib/lib/chill-i18n-button-label.component.ts","../../src/lib/lib/notice-transition.directive.ts","../../src/lib/services/workspace-toolbar.service.ts","../../src/lib/pages/permissions/auth-search-select.component.ts","../../src/lib/pages/permissions/permission-editor.component.ts","../../src/lib/pages/permissions/permission-editor.component.html","../../src/lib/pages/permissions/role-permission.component.ts","../../src/lib/pages/permissions/role-permission.component.html","../../src/lib/pages/permissions/user-permission.component.ts","../../src/lib/pages/permissions/user-permission.component.html","../../src/lib/pages/permissions/permissions-page.component.ts","../../src/lib/pages/permissions/permissions-page.component.html","../../src/lib/models/chill-schema.models.ts","../../src/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.ts","../../src/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.ts","../../src/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.ts","../../src/lib/lib/chill-json-input.component.ts","../../src/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.ts","../../src/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.ts","../../src/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.ts","../../src/lib/lib/chill-polymorphic-input.component.ts","../../src/lib/lib/chill-polymorphic-input.component.html","../../src/lib/lib/chill-form.component.ts","../../src/lib/lib/chill-form.component.html","../../src/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.ts","../../src/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.ts","../../src/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.ts","../../src/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.ts","../../src/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.ts","../../src/lib/lib/chill-polymorphic-output.component.ts","../../src/lib/lib/chill-table.component.ts","../../src/lib/lib/chill-table.component.html","../../src/lib/pages/crud/crud-page.component.ts","../../src/lib/pages/crud/crud-page.component.html","../../src/lib/tasks/crud-task/crud-task.component.ts","../../src/lib/tasks/goto-url-task/goto-url-task.component.ts","../../src/lib/services/workspace-task-registry.service.ts","../../src/lib/provide-chill-sharp-ui-core.ts","../../src/lib/services/workspace.service.ts","../../src/lib/workspace/workspace-dialog-host.component.ts","../../src/lib/lib/crud-configuration.utils.ts","../../src/lib/workspace/workspace-menu.component.ts","../../src/lib/workspace/workspace-taskbar.component.ts","../../src/lib/layouts/workspace-page.component.ts","../../src/lib/pages/confirm-reset-page.component.ts","../../src/lib/pages/login-page.component.ts","../../src/lib/pages/register-page.component.ts","../../src/lib/pages/reset-password-page.component.ts","../../src/lib/chill-sharp-ui.routes.ts","../../src/lib/lib/chill-text-editor-dialog.component.ts","../../src/lib/lib/culture-name-options.ts","../../src/lib/lib/date-format-options.ts","../../src/lib/lib/iana-time-zone-options.ts","../../src/lib/lib/schema-property-dialog.component.ts","../../src/lib/lib/schema-property-dialog.component.html","../../src/lib/pages/crud/attachment-upload-dialog.component.ts","../../src/lib/pages/permissions/auth-role-dialog.component.ts","../../src/lib/pages/permissions/auth-user-dialog.component.ts","../../src/lib/workspace/confirm-message-dialog.component.ts","../../src/lib/workspace/entity-options-dialog.component.ts","../../src/lib/workspace/user-profile-dialog.component.ts","../../src/lib/workspace/workspace-menu-item-dialog.component.ts","../../src/public-api.ts","../../src/chill-sharp-ui-core.ts"],"sourcesContent":["const DEBUG_CHILL_BASE_URL = 'http://localhost:6002/api/chill';\r\n\r\nexport const CHILL_BASE_URL = normalizeChillBaseUrl(globalThis.CHILLSHARP_API_URL?.trim() || DEBUG_CHILL_BASE_URL);\r\nexport const CHILL_CULTURE = 'it-IT';\r\nexport const CHILL_PRIMARY_TEXT_CULTURE = 'en-US';\r\nexport const CHILL_SECONDARY_TEXT_CULTURE = 'it-IT';\r\n\r\nfunction normalizeChillBaseUrl(value: string): string {\r\n const normalizedValue = value.replace(/\\/+$/, '');\r\n if (normalizedValue.toLowerCase().endsWith('/chill')) {\r\n return normalizedValue;\r\n }\r\n\r\n return `${normalizedValue}/chill`;\r\n}\r\n","export const CHILL_UI_STORAGE_KEY_PREFIX = 'chill-sharp-ui';\r\n\r\nexport const SESSION_STORAGE_KEY = `${CHILL_UI_STORAGE_KEY_PREFIX}.chill-auth-session`;\r\nexport const USER_PREFERENCES_STORAGE_KEY = `${CHILL_UI_STORAGE_KEY_PREFIX}.user-preferences`;\r\nexport const WORKSPACE_LAYOUT_EDITING_STORAGE_KEY = `${CHILL_UI_STORAGE_KEY_PREFIX}.workspace-layout-editing`;\r\n","import { Component } from '@angular/core';\r\nimport { RouterOutlet } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'chill-sharp-ui-root',\r\n standalone: true,\r\n imports: [RouterOutlet],\r\n template: '<router-outlet />'\r\n})\r\nexport class ChillSharpUiRootComponent {}\r\n","export interface AuthTokenResponse {\r\n AccessToken?: string;\r\n AccessTokenIssuedUtc?: string;\r\n AccessTokenExpiresUtc?: string;\r\n RefreshToken?: string;\r\n RefreshTokenExpiresUtc?: string;\r\n UserId?: string;\r\n UserName?: string;\r\n}\r\n\r\nexport interface RegisterRequest {\r\n UserName: string;\r\n Email?: string;\r\n Password: string;\r\n DisplayName: string;\r\n DisplayCultureName: string;\r\n DisplayTimeZone: string;\r\n CreateChillAuthUser: boolean;\r\n}\r\n\r\nexport interface LoginRequest {\r\n UserNameOrEmail: string;\r\n Password: string;\r\n}\r\n\r\nexport interface RequestPasswordResetRequest {\r\n UserNameOrEmail: string;\r\n}\r\n\r\nexport interface PasswordResetTokenResponse {\r\n IsAccepted?: boolean;\r\n UserId?: string;\r\n ResetToken?: string;\r\n}\r\n\r\nexport interface ResetPasswordRequest {\r\n UserId: string;\r\n ResetToken: string;\r\n NewPassword: string;\r\n}\r\n\r\nexport interface ResetPasswordResponse {\r\n Succeeded?: boolean;\r\n}\r\n\r\nexport interface AuthSession {\r\n accessToken: string;\r\n accessTokenExpiresUtc: string;\r\n refreshToken: string;\r\n refreshTokenExpiresUtc: string;\r\n userId: string;\r\n userName: string;\r\n}\r\n\r\nexport interface AuthUser {\r\n guid: string;\r\n externalId: string;\r\n userName: string;\r\n displayName: string;\r\n displayCultureName: string;\r\n displayTimeZone: string;\r\n displayDateFormat: string;\n displayNumberFormat: string;\n preferredTheme?: string;\n isActive: boolean;\r\n canManagePermissions: boolean;\r\n canManageSchema: boolean;\r\n menuHierarchy: string;\r\n}\r\n\r\nexport interface CreateAuthUserRequest {\r\n externalId: string;\r\n userName: string;\r\n displayName: string;\r\n displayCultureName: string;\r\n displayTimeZone: string;\r\n displayDateFormat: string;\n displayNumberFormat: string;\n preferredTheme?: string;\n isActive: boolean;\r\n canManagePermissions: boolean;\r\n canManageSchema: boolean;\r\n menuHierarchy: string;\r\n}\r\n\r\nexport interface UpdateAuthUserRequest {\r\n externalId: string;\r\n userName: string;\r\n displayName: string;\r\n displayCultureName: string;\r\n displayTimeZone: string;\r\n displayDateFormat: string;\n displayNumberFormat: string;\n preferredTheme?: string;\n isActive: boolean;\r\n canManagePermissions: boolean;\r\n canManageSchema: boolean;\r\n menuHierarchy: string;\r\n}\r\n\r\nexport interface UpdateUserProfileRequest {\r\n displayName: string;\r\n displayCultureName: string;\r\n displayTimeZone: string;\r\n displayDateFormat: string;\n displayNumberFormat: string;\n preferredTheme?: string;\n}\r\n\r\nexport interface AuthRole {\r\n guid: string;\r\n name: string;\r\n description: string;\r\n isActive: boolean;\r\n}\r\n\r\nexport interface CreateAuthRoleRequest {\r\n name: string;\r\n description: string;\r\n isActive: boolean;\r\n}\r\n\r\nexport interface UpdateAuthRoleRequest extends CreateAuthRoleRequest {}\r\n\r\nexport enum PermissionEffect {\r\n Allow = 1,\r\n Deny = 2\r\n}\r\n\r\nexport enum PermissionAction {\r\n FullControl = 0,\r\n Query = 1,\r\n Create = 2,\r\n Update = 3,\r\n Delete = 4,\r\n See = 5,\r\n Modify = 6\r\n}\r\n\r\nexport enum PermissionScope {\r\n Module = 1,\r\n Entity = 2,\r\n Property = 3\r\n}\r\n\r\nexport interface AuthPermissionRule {\r\n guid: string;\r\n userGuid?: string;\r\n roleGuid?: string;\r\n effect: PermissionEffect;\r\n action: PermissionAction;\r\n scope: PermissionScope;\r\n module: string;\r\n entityName?: string;\r\n propertyName?: string;\r\n appliesToAllProperties: boolean;\r\n description: string;\r\n createdUtc?: string;\r\n}\r\n\r\nexport interface EditableAuthPermissionRule {\r\n guid?: string;\r\n effect: PermissionEffect;\r\n action: PermissionAction;\r\n scope: PermissionScope;\r\n module: string;\r\n entityName?: string;\r\n propertyName?: string;\r\n appliesToAllProperties: boolean;\r\n description: string;\r\n}\r\n\r\nexport interface CreateAuthPermissionRuleRequest {\r\n userGuid?: string;\r\n roleGuid?: string;\r\n effect: PermissionEffect;\r\n action: PermissionAction;\r\n scope: PermissionScope;\r\n module: string;\r\n entityName?: string;\r\n propertyName?: string;\r\n appliesToAllProperties: boolean;\r\n description: string;\r\n}\r\n\r\nexport interface AuthUserAccessDetails {\r\n user: AuthUser;\r\n roles: AuthRole[];\r\n permissions: AuthPermissionRule[];\r\n}\r\n\r\nexport interface AuthRoleAccessDetails {\r\n role: AuthRole;\r\n users: AuthUser[];\r\n permissions: AuthPermissionRule[];\r\n}\r\n","import { Injectable, computed, inject, signal } from '@angular/core';\r\nimport { AsyncValidatorFn, FormControl, FormGroup } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n ChillSharpClientError,\r\n ChillSharpNgClient,\r\n type ChillAttachmentUploadFile,\r\n type ChillAttachmentUploadOptions,\r\n type AuthPermissionRuleItem as ChillSharpAuthPermissionRuleItem,\r\n type AuthRoleDetailsResponse,\r\n type ChillDtoPropertySchema,\r\n type ChillDtoMenuItem,\r\n type ChillDtoSchema,\r\n type ChillDtoSchemaRelation,\r\n type RegisterAuthIdentityRequest,\r\n type AuthUserDetailsResponse,\r\n type ChillUserPreferences,\r\n type GetTextRequest,\r\n type JsonObject,\r\n type JsonValue,\r\n type ChillDtoEntityOptions,\r\n type SetAuthRoleRequest,\r\n type SetAuthUserRequest\r\n} from '@chill-sharp/ng-client';\r\nimport type {\r\n ChillValidationError,\r\n LoginAuthIdentityRequest,\r\n RequestPasswordResetRequest as ChillSharpRequestPasswordResetRequest,\r\n ResetPasswordRequest as ChillSharpResetPasswordRequest\r\n} from '@chill-sharp/ts-client';\r\nimport { Observable, catchError, firstValueFrom, from, map, switchMap, throwError } from 'rxjs';\r\nimport type {\r\n AuthRoleAccessDetails,\r\n AuthUserAccessDetails,\r\n AuthPermissionRule,\r\n CreateAuthUserRequest,\r\n AuthRole,\r\n AuthSession,\r\n AuthTokenResponse,\r\n AuthUser,\r\n EditableAuthPermissionRule,\r\n CreateAuthPermissionRuleRequest,\r\n CreateAuthRoleRequest,\r\n LoginRequest,\r\n PasswordResetTokenResponse,\r\n RegisterRequest,\r\n RequestPasswordResetRequest,\r\n ResetPasswordRequest,\r\n ResetPasswordResponse,\r\n UpdateAuthRoleRequest,\r\n UpdateAuthUserRequest,\r\n UpdateUserProfileRequest\r\n} from '../models/chill-auth.models';\r\nimport { PermissionAction, PermissionEffect, PermissionScope } from '../models/chill-auth.models';\r\nimport type {\r\n ChillEntityChangeNotification,\r\n ChillEntity,\r\n ChillEntityOptions,\r\n ChillMetadataRecord,\r\n ChillPropertySchema,\r\n ChillQuery,\r\n ChillSchema,\r\n ChillSchemaRelation,\r\n ChillSchemaRelationLabel,\r\n ChillSchemaListItem\r\n} from '../models/chill-schema.models';\r\nimport type { ChillMenuItem as AppChillMenuItem } from '../models/chill-menu.models';\r\nimport { CHILL_BASE_URL, CHILL_CULTURE, CHILL_PRIMARY_TEXT_CULTURE, CHILL_SECONDARY_TEXT_CULTURE } from '../chill.config';\r\nimport { SESSION_STORAGE_KEY, USER_PREFERENCES_STORAGE_KEY } from '../storage-keys';\r\nconst TEXT_QUEUE_DELAY_MS = 50;\r\nconst MAX_TIMEOUT_MS = 2_147_483_647;\r\nconst CHILL_PROPERTY_TYPE = {\r\n Unknown: 0,\r\n Guid: 1,\r\n Integer: 10,\r\n Decimal: 20,\r\n Date: 30,\r\n Time: 40,\r\n DateTime: 50,\r\n Duration: 60,\r\n Boolean: 70,\r\n String: 80,\r\n Text: 81,\r\n Select: 90,\r\n Json: 99,\r\n ChillEntity: 1000,\r\n ChillEntityCollection: 1010,\r\n ChillQuery: 1100\r\n} as const;\r\n\r\ninterface PendingTextRequest {\r\n request: GetTextRequest;\r\n fallbackText: string;\r\n}\r\n\r\ninterface PermissionRuleOwner {\r\n kind: 'user' | 'role';\r\n guid: string;\r\n}\r\n\r\nexport interface StoredUserPreferences {\r\n displayCultureName: string;\r\n displayTimeZone: string;\r\n displayDateFormat: string;\r\n displayNumberFormat: string;\r\n preferredTheme: string;\r\n}\r\n\r\ninterface LoadCurrentUserPreferencesOptions {\r\n clearSessionOnNotFound: boolean;\r\n}\r\n\r\ninterface StoredUserPreferencesEnvelope {\r\n userId: string;\r\n preferences: StoredUserPreferences;\r\n}\r\n\r\ninterface ChillSharpClientSessionSync {\r\n applyAuthToken?: (payload: JsonObject, forgetPassword: boolean) => void;\r\n setCultureName?: (cultureName?: string | null) => void;\r\n}\r\n\r\ninterface ChillSharpNgClientSchemaListSupport {\r\n getSchemaList?: (cultureName?: string) => { pipe: (...args: unknown[]) => unknown };\r\n getRawClient?: () => {\r\n getSchemaList?: (cultureName?: string) => Promise<unknown>;\r\n };\r\n}\r\n\r\ninterface ChillSharpNgClientEntityChangeSupport {\r\n watchEntityChanges?: (chillType: string, guid?: string | null) => Observable<ChillEntityChangeNotification[]>;\r\n disconnectEntityChanges?: () => Observable<void>;\r\n getRawClient?: () => {\r\n subscribeToEntityChanges?: (\r\n chillType: string,\r\n callback: (changes: ChillEntityChangeNotification[]) => void | Promise<void>,\r\n guid?: string | null\r\n ) => Promise<{ unsubscribe: () => Promise<void> }>;\r\n disconnectEntityChanges?: () => Promise<void>;\r\n };\r\n}\r\n\r\ninterface ChillSharpNgClientPermissionLookupSupport {\r\n getModuleList?: () => Observable<unknown>;\r\n getQueryList?: (module?: string | null) => Observable<unknown>;\r\n getEntityList?: (module?: string | null) => Observable<unknown>;\r\n getPropertyList?: (chillType: string) => Observable<unknown>;\r\n getAuthModuleList?: () => Observable<unknown>;\r\n getAuthQueryList?: (module?: string | null) => Observable<unknown>;\r\n getAuthEntityList?: (module?: string | null) => Observable<unknown>;\r\n getAuthPropertyList?: (chillType: string) => Observable<unknown>;\r\n}\r\n\r\ninterface ChillSharpNgClientValidationSupport {\r\n validate?: (dto: JsonObject) => Observable<unknown>;\r\n getRawClient?: () => {\r\n validate?: (dto: JsonObject) => Promise<unknown>;\r\n };\r\n}\r\n\r\ninterface ChillSharpNgClientLookupSupport {\r\n lookup?: (dtoQuery: JsonObject) => Observable<unknown>;\r\n getRawClient?: () => {\r\n lookup?: (dtoQuery: JsonObject) => Promise<unknown>;\r\n };\r\n}\r\n\r\nexport type ChillPreparedFormControls<TSchema extends ChillSchema> = Record<\r\n Extract<TSchema['properties'][number], { name: string }>['name'],\r\n FormControl<JsonValue>\r\n>;\r\n\r\ninterface PrepareFormOptions<TSchema extends ChillSchema> {\r\n createControlAsyncValidators?: (context: {\r\n schema: TSchema;\r\n property: ChillPropertySchema;\r\n source?: ChillEntity | ChillQuery | null;\r\n getForm: () => FormGroup<ChillPreparedFormControls<TSchema>>;\r\n }) => AsyncValidatorFn | AsyncValidatorFn[] | null;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ChillService {\r\n private readonly chill = inject(ChillSharpNgClient);\r\n private readonly router = inject(Router);\r\n private readonly sessionState = signal<AuthSession | null>(this.readStoredSession());\r\n private readonly canManagePermissionsState = signal(false);\r\n private readonly canManageSchemaState = signal(false);\r\n private readonly userPreferencesState = signal<StoredUserPreferences>(this.readStoredUserPreferences());\r\n private readonly textVersion = signal(0);\r\n private readonly textCache = new Map<string, string>();\r\n private readonly pendingTextRequests = new Map<string, PendingTextRequest>();\r\n private readonly inFlightTextRequests = new Set<string>();\r\n private readonly pendingTextResolvers = new Map<string, Array<(value: string) => void>>();\r\n private readonly permissionRuleOwners = new Map<string, PermissionRuleOwner>();\r\n private textQueueHandle: ReturnType<typeof globalThis.setTimeout> | null = null;\r\n private sessionExpiryTimer: ReturnType<typeof globalThis.setTimeout> | null = null;\r\n\r\n readonly session = this.sessionState.asReadonly();\r\n readonly canManagePermissions = this.canManagePermissionsState.asReadonly();\r\n readonly canManageSchema = this.canManageSchemaState.asReadonly();\r\n readonly userPreferences = this.userPreferencesState.asReadonly();\r\n readonly isAuthenticated = computed(() => this.sessionState() !== null);\r\n readonly userName = computed(() => this.sessionState()?.userName ?? '');\r\n readonly displayCultureName = computed(() => this.userPreferencesState().displayCultureName);\r\n readonly displayTimeZone = computed(() => this.userPreferencesState().displayTimeZone);\r\n readonly displayDateFormat = computed(() => this.userPreferencesState().displayDateFormat);\r\n readonly displayNumberFormat = computed(() => this.userPreferencesState().displayNumberFormat);\r\n readonly preferredTheme = computed(() => this.userPreferencesState().preferredTheme);\r\n\r\n constructor() {\r\n this.syncClientSession(this.sessionState());\r\n this.scheduleSessionExpiryCheck();\r\n globalThis.addEventListener?.('focus', () => this.expireSessionIfNeeded());\r\n globalThis.document?.addEventListener('visibilitychange', () => {\r\n if (!globalThis.document.hidden) {\r\n this.expireSessionIfNeeded();\r\n }\r\n });\r\n this.logStartupDiagnostics();\r\n }\r\n\r\n async initialize(): Promise<void> {\r\n if (!this.isAuthenticated()) {\r\n this.canManagePermissionsState.set(false);\r\n this.canManageSchemaState.set(false);\r\n return;\r\n }\r\n\r\n const preferences = await this.loadCurrentUserPreferences({\r\n clearSessionOnNotFound: true\r\n });\r\n if (!preferences || !this.isAuthenticated()) {\r\n this.canManagePermissionsState.set(false);\r\n this.canManageSchemaState.set(false);\r\n return;\r\n }\r\n\r\n await this.loadCurrentUserAccess();\r\n }\r\n\r\n version(): string {\r\n const versionFn = (this.chill as unknown as { version?: () => string }).version;\r\n if (typeof versionFn !== 'function') {\r\n return this.T('1EB1A234-D374-48B1-9E14-C9A7BAE1C31D', 'Client version is unavailable on the current ChillSharp instance.', 'La versione del client non è disponibile nell\\'istanza corrente di ChillSharp.');\r\n }\r\n\r\n return versionFn.call(this.chill);\r\n }\r\n\r\n currentCultureName(): string {\r\n return this.displayCultureName().trim() || this.readBrowserCultureName();\r\n }\r\n\r\n currentTimeZone(): string {\r\n const configuredTimeZone = this.displayTimeZone().trim();\r\n return this.isSupportedTimeZone(configuredTimeZone)\r\n ? configuredTimeZone\r\n : this.readBrowserTimeZone();\r\n }\r\n\r\n currentDateFormat(): string {\r\n const configuredFormat = this.displayDateFormat().trim();\r\n if (configuredFormat) {\r\n return configuredFormat;\r\n }\r\n\r\n const configuredCultureName = this.displayCultureName().trim();\r\n return configuredCultureName\r\n ? this.defaultDateFormatForCulture(configuredCultureName)\r\n : this.readBrowserDateFormat();\r\n }\r\n\r\n currentNumberFormat(): string {\r\n return this.displayNumberFormat().trim() || this.currentCultureName();\r\n }\r\n\r\n T(labelGuid: string, primaryDefaultText: string, secondaryDefaultText: string): string {\r\n this.textVersion();\r\n\r\n const key = this.normalizeLabelGuid(labelGuid);\r\n const fallbackText = this.selectDefaultText(primaryDefaultText, secondaryDefaultText);\r\n if (!key) {\r\n return fallbackText;\r\n }\r\n\r\n const cachedText = this.textCache.get(key);\r\n if (cachedText !== undefined) {\r\n return cachedText;\r\n }\r\n\r\n this.enqueueTextRequest(key, primaryDefaultText, secondaryDefaultText, fallbackText);\r\n return fallbackText;\r\n }\r\n\r\n async TAsync(labelGuid: string, primaryDefaultText: string, secondaryDefaultText: string): Promise<string> {\r\n const key = this.normalizeLabelGuid(labelGuid);\r\n const fallbackText = this.selectDefaultText(primaryDefaultText, secondaryDefaultText);\r\n if (!key) {\r\n return fallbackText;\r\n }\r\n\r\n const cachedText = this.textCache.get(key);\r\n if (cachedText !== undefined) {\r\n return cachedText;\r\n }\r\n\r\n return new Promise<string>((resolve) => {\r\n const pendingResolvers = this.pendingTextResolvers.get(key) ?? [];\r\n pendingResolvers.push(resolve);\r\n this.pendingTextResolvers.set(key, pendingResolvers);\r\n this.enqueueTextRequest(key, primaryDefaultText, secondaryDefaultText, fallbackText);\r\n });\r\n }\r\n\r\n test() {\r\n const testUrl = this.buildApiUrl('test');\r\n\r\n return from(globalThis.fetch(testUrl)).pipe(\r\n switchMap((response) => {\r\n if (!response.ok) {\r\n return throwError(() => new Error(`Unexpected error executing GET ${testUrl}: ${response.status} ${response.statusText}`.trim()));\r\n }\r\n\r\n return from(response.text());\r\n }),\r\n map((response) => response.trim()),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getSchema(chillType: string, chillViewCode: string, cultureName?: string, update = false) {\r\n return this.chill.getSchema(chillType, chillViewCode, this.resolveCultureName(cultureName), update).pipe(\r\n map((response) => this.normalizeSchema(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n setSchema(schema: ChillSchema) {\r\n const request: ChillDtoSchema = {\r\n chillType: schema.chillType ?? '',\r\n chillViewCode: schema.chillViewCode ?? '',\r\n displayName: schema.displayName ?? '',\r\n handleAttachments: schema.handleAttachments === true,\r\n enableMCP: schema.enableMCP === true,\r\n mcpDescription: schema.mcpDescription?.trim() ?? '',\r\n queryRelatedChillType: schema.queryRelatedChillType ?? null,\r\n metadata: this.serializeMetadataRecord(schema.metadata),\r\n relations: this.toSchemaRelationDtos(schema.relations),\r\n properties: (schema.properties ?? []).map((property): ChillDtoPropertySchema => ({\r\n name: property.name,\r\n displayName: property.displayName ?? property.name,\r\n propertyType: (property.propertyType ?? 0) as ChillDtoPropertySchema['propertyType'],\r\n simplePropertyType: property.simplePropertyType ?? '',\r\n mcpDescription: property.mcpDescription ?? '',\r\n isNullable: property.isNullable === true,\r\n isReadOnly: property.isReadOnly === true,\r\n referenceChillType: property.referenceChillType ?? property.chillType ?? null,\r\n referenceChillTypeQuery: property.referenceChillTypeQuery ?? null,\r\n minLength: property.minLength ?? null,\r\n maxLength: property.maxLength ?? null,\r\n integerMinValue: property.integerMinValue ?? null,\r\n integerMaxValue: property.integerMaxValue ?? null,\r\n decimalMinValue: property.decimalMinValue ?? null,\r\n decimalMaxValue: property.decimalMaxValue ?? null,\r\n decimalPlaces: property.decimalPlaces ?? null,\r\n precision: property.precision ?? null,\r\n scale: property.scale ?? null,\r\n dateFormat: property.dateFormat ?? '',\r\n customFormat: property.customFormat ?? '',\r\n regexPattern: property.regexPattern ?? '',\r\n enumValues: property.enumValues ?? [],\r\n lookupQueryValues: property.lookupQueryValues ?? null,\r\n metadata: this.serializeMetadataRecord(property.metadata)\r\n }))\r\n };\r\n\r\n return this.chill.setSchema(request).pipe(\r\n map((response) => this.normalizeSchema(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getSchemaList(cultureName?: string) {\r\n const client = this.chill as unknown as ChillSharpNgClientSchemaListSupport;\r\n const resolvedCultureName = this.resolveCultureName(cultureName);\r\n\r\n if (typeof client.getSchemaList === 'function') {\r\n return this.chill.getSchemaList(resolvedCultureName).pipe(\r\n map((response) => (response ?? []) as ChillSchemaListItem[]),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n const rawClient = client.getRawClient?.();\r\n if (typeof rawClient?.getSchemaList === 'function') {\r\n return from(rawClient.getSchemaList(resolvedCultureName)).pipe(\r\n map((response) => (response ?? []) as ChillSchemaListItem[]),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n return throwError(() => new Error(\r\n this.T(\r\n '25A8B513-F55B-428D-B85F-49A6D39F165A',\r\n 'The current ChillSharp client does not expose getSchemaList().',\r\n 'Il client ChillSharp corrente non espone getSchemaList().'\r\n )\r\n ));\r\n }\r\n\r\n setText(labelGuid: string, value: string, cultureName?: string) {\r\n const normalizedLabelGuid = this.normalizeLabelGuid(labelGuid);\r\n const normalizedValue = value.trim();\r\n\r\n return this.chill.setText({\r\n labelGuid: normalizedLabelGuid,\r\n cultureName: this.resolveCultureName(cultureName),\r\n value: normalizedValue\r\n }).pipe(\r\n map((response) => {\r\n const resolvedLabelGuid = this.readJsonString(response, 'LabelGuid') ?? normalizedLabelGuid;\r\n const resolvedValue = this.readJsonString(response, 'Value') ?? normalizedValue;\r\n this.textCache.set(this.normalizeLabelGuid(resolvedLabelGuid), resolvedValue);\r\n this.textVersion.update((current) => current + 1);\r\n return resolvedValue;\r\n }),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n watchEntityChanges(chillType: string, guid?: string | null) {\r\n const client = this.chill as unknown as ChillSharpNgClientEntityChangeSupport;\r\n\r\n if (typeof client.watchEntityChanges === 'function') {\r\n return client.watchEntityChanges(chillType, guid).pipe(\r\n map((changes) => changes.map((change) => this.normalizeEntityChangeNotification(change))),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n const rawClient = client.getRawClient?.();\r\n if (typeof rawClient?.subscribeToEntityChanges === 'function') {\r\n const subscribeToEntityChanges = rawClient.subscribeToEntityChanges.bind(rawClient);\r\n return new Observable<ChillEntityChangeNotification[]>((subscriber) => {\r\n let remoteSubscription: { unsubscribe: () => Promise<void> } | null = null;\r\n let isClosed = false;\r\n\r\n void subscribeToEntityChanges(\r\n chillType,\r\n async (changes) => {\r\n subscriber.next(changes.map((change) => this.normalizeEntityChangeNotification(change)));\r\n },\r\n guid\r\n )\r\n .then(async (subscription) => {\r\n remoteSubscription = subscription;\r\n if (isClosed) {\r\n await subscription.unsubscribe();\r\n }\r\n })\r\n .catch((error) => {\r\n subscriber.error(error);\r\n });\r\n\r\n return () => {\r\n isClosed = true;\r\n if (remoteSubscription) {\r\n void remoteSubscription.unsubscribe();\r\n }\r\n };\r\n }).pipe(\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n return throwError(() => new Error(\r\n this.T(\r\n '19AEF9E0-85E9-40DF-A786-22A61C52A9A3',\r\n 'The current ChillSharp client does not expose entity-change notifications.',\r\n 'Il client ChillSharp corrente non espone le notifiche di modifica entità.'\r\n )\r\n ));\r\n }\r\n\r\n watchEntity(chillType: string, guid: string) {\r\n return this.watchEntityChanges(chillType, guid);\r\n }\r\n\r\n watchChillType(chillType: string) {\r\n return this.watchEntityChanges(chillType, null);\r\n }\r\n\r\n disconnectEntityChanges() {\r\n const client = this.chill as unknown as ChillSharpNgClientEntityChangeSupport;\r\n\r\n if (typeof client.disconnectEntityChanges === 'function') {\r\n return client.disconnectEntityChanges().pipe(\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n const rawClient = client.getRawClient?.();\r\n if (typeof rawClient?.disconnectEntityChanges === 'function') {\r\n return from(rawClient.disconnectEntityChanges()).pipe(\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n return throwError(() => new Error(\r\n this.T(\r\n 'BB7AA5AE-3615-47CE-B026-D7D17989D18D',\r\n 'The current ChillSharp client does not expose notification disconnection.',\r\n 'Il client ChillSharp corrente non espone la disconnessione delle notifiche.'\r\n )\r\n ));\r\n }\r\n\r\n getAuthUsers() {\r\n return this.chill.getAuthUserList().pipe(\r\n map((response) => this.normalizeAuthUsers(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getAuthUserDetails(userGuid: string) {\r\n return this.chill.getAuthUser(userGuid).pipe(\r\n map((response) => response as AuthUserDetailsResponse),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n createAuthUser(request: CreateAuthUserRequest) {\r\n return this.chill.setAuthUser({\r\n guid: null,\r\n externalId: request.externalId,\r\n userName: request.userName,\r\n displayName: request.displayName,\r\n displayCultureName: request.displayCultureName,\r\n displayTimeZone: request.displayTimeZone,\r\n displayDateFormat: request.displayDateFormat,\r\n displayNumberFormat: request.displayNumberFormat,\r\n preferredTheme: request.preferredTheme ?? '',\r\n isActive: request.isActive,\r\n canManagePermissions: request.canManagePermissions,\r\n canManageSchema: request.canManageSchema,\r\n menuHierarchy: request.menuHierarchy,\r\n roleGuids: [],\r\n permissions: []\r\n }).pipe(\r\n map((response) => this.normalizeAuthUser(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n updateAuthUser(userGuid: string, request: UpdateAuthUserRequest) {\r\n return this.chill.getAuthUser(userGuid).pipe(\r\n map((response) => this.buildSetAuthUserRequest(response, request)),\r\n switchMap((payload) => this.chill.setAuthUser(payload)),\r\n map((response) => this.normalizeAuthUser(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n updateUserProfile(userGuid: string, request: UpdateUserProfileRequest) {\r\n return this.chill.getAuthUser(userGuid).pipe(\r\n map((response) => this.buildSetAuthUserRequest(response, {\r\n externalId: response.externalId,\r\n userName: response.userName,\r\n displayName: request.displayName,\r\n displayCultureName: request.displayCultureName,\r\n displayTimeZone: request.displayTimeZone,\r\n displayDateFormat: request.displayDateFormat,\r\n displayNumberFormat: request.displayNumberFormat,\r\n preferredTheme: request.preferredTheme,\r\n isActive: response.isActive,\r\n canManagePermissions: response.canManagePermissions,\r\n canManageSchema: response.canManageSchema,\r\n menuHierarchy: response.menuHierarchy ?? ''\r\n })),\r\n switchMap((payload) => this.chill.setAuthUser(payload)),\r\n map((response) => response as AuthUserDetailsResponse),\r\n switchMap((response) => from(this.loadCurrentUserPreferences({ clearSessionOnNotFound: false })).pipe(\r\n map(() => response)\r\n )),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getAuthUserRoles(userGuid: string) {\r\n return this.chill.getAuthUser(userGuid).pipe(\r\n map((response) => this.normalizeAuthRoles(response.roles)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getAuthUserAccess(userGuid: string) {\r\n return this.chill.getAuthUser(userGuid).pipe(\r\n map((response): AuthUserAccessDetails => ({\r\n user: this.normalizeAuthUser(response),\r\n roles: this.normalizeAuthRoles(response.roles),\r\n permissions: this.normalizeAuthPermissionRules(response.permissions, { kind: 'user', guid: userGuid })\r\n })),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n saveAuthUserAccess(userGuid: string, roleGuids: string[], permissions: EditableAuthPermissionRule[]) {\r\n return this.chill.getAuthUser(userGuid).pipe(\r\n map((response) => this.buildSetAuthUserRequest(\r\n response,\r\n undefined,\r\n () => this.normalizeGuidList(roleGuids),\r\n () => permissions.map((permission) => this.toAuthPermissionRuleItem(permission as unknown as JsonObject))\r\n )),\r\n switchMap((payload) => this.chill.setAuthUser(payload)),\r\n map((response): AuthUserAccessDetails => ({\r\n user: this.normalizeAuthUser(response),\r\n roles: this.normalizeAuthRoles(response.roles),\r\n permissions: this.normalizeAuthPermissionRules(response.permissions, { kind: 'user', guid: userGuid })\r\n })),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n assignAuthRole(userGuid: string, roleGuid: string) {\r\n return this.chill.getAuthUser(userGuid).pipe(\r\n map((response) => this.buildSetAuthUserRequest(response, undefined, (roleGuids) => [...new Set([...roleGuids, roleGuid])])),\r\n switchMap((payload) => this.chill.setAuthUser(payload)),\r\n map(() => void 0),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n removeAuthRole(userGuid: string, roleGuid: string) {\r\n return this.chill.getAuthUser(userGuid).pipe(\r\n map((response) => this.buildSetAuthUserRequest(response, undefined, (roleGuids) => roleGuids.filter((entry) => entry !== roleGuid))),\r\n switchMap((payload) => this.chill.setAuthUser(payload)),\r\n map(() => void 0),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getAuthRoles() {\r\n return this.chill.getAuthRoleList().pipe(\r\n map((response) => this.normalizeAuthRoles(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getModuleList() {\r\n const client = this.chill as unknown as ChillSharpNgClientPermissionLookupSupport;\r\n const source = typeof client.getModuleList === 'function'\r\n ? client.getModuleList.bind(this.chill)\r\n : client.getAuthModuleList?.bind(this.chill);\r\n\r\n if (!source) {\r\n return throwError(() => new Error('The current ChillSharp client does not expose getModuleList().'));\r\n }\r\n\r\n return source().pipe(\r\n map((response) => this.normalizeStringList(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getEntityList(module?: string | null) {\r\n const client = this.chill as unknown as ChillSharpNgClientPermissionLookupSupport;\r\n const source = typeof client.getEntityList === 'function'\r\n ? client.getEntityList.bind(this.chill)\r\n : client.getAuthEntityList?.bind(this.chill);\r\n\r\n if (!source) {\r\n return throwError(() => new Error('The current ChillSharp client does not expose getEntityList().'));\r\n }\r\n\r\n return source(module).pipe(\r\n map((response) => this.normalizeStringList(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getQueryList(module?: string | null) {\r\n const client = this.chill as unknown as ChillSharpNgClientPermissionLookupSupport;\r\n const source = typeof client.getQueryList === 'function'\r\n ? client.getQueryList.bind(this.chill)\r\n : client.getAuthQueryList?.bind(this.chill);\r\n\r\n if (!source) {\r\n return throwError(() => new Error('The current ChillSharp client does not expose getQueryList().'));\r\n }\r\n\r\n return source(module).pipe(\r\n map((response) => this.normalizeStringList(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getPropertyList(chillType: string) {\r\n const client = this.chill as unknown as ChillSharpNgClientPermissionLookupSupport;\r\n const source = typeof client.getPropertyList === 'function'\r\n ? client.getPropertyList.bind(this.chill)\r\n : client.getAuthPropertyList?.bind(this.chill);\r\n\r\n if (!source) {\r\n return throwError(() => new Error('The current ChillSharp client does not expose getPropertyList().'));\r\n }\r\n\r\n return source(chillType).pipe(\r\n map((response) => this.normalizeStringList(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getAuthRoleAccess(roleGuid: string) {\r\n return this.chill.getAuthRole(roleGuid).pipe(\r\n map((response): AuthRoleAccessDetails => ({\r\n role: this.normalizeAuthRole(response),\r\n users: this.normalizeAuthUsers(response.users),\r\n permissions: this.normalizeAuthPermissionRules(response.permissions, { kind: 'role', guid: roleGuid })\r\n })),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n saveAuthRoleAccess(roleGuid: string, userGuids: string[], permissions: EditableAuthPermissionRule[]) {\r\n return this.chill.getAuthRole(roleGuid).pipe(\r\n map((response) => this.buildSetAuthRoleRequest(\r\n response,\r\n undefined,\r\n () => this.normalizeGuidList(userGuids),\r\n () => permissions.map((permission) => this.toAuthPermissionRuleItem(permission as unknown as JsonObject))\r\n )),\r\n switchMap((payload) => this.chill.setAuthRole(payload)),\r\n map((response): AuthRoleAccessDetails => ({\r\n role: this.normalizeAuthRole(response),\r\n users: this.normalizeAuthUsers(response.users),\r\n permissions: this.normalizeAuthPermissionRules(response.permissions, { kind: 'role', guid: roleGuid })\r\n })),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n createAuthRole(request: CreateAuthRoleRequest) {\r\n return this.chill.setAuthRole(this.buildSetAuthRoleRequest(null, request)).pipe(\r\n map((response) => this.normalizeAuthRole(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n updateAuthRole(roleGuid: string, request: UpdateAuthRoleRequest) {\r\n return this.chill.getAuthRole(roleGuid).pipe(\r\n map((response) => this.buildSetAuthRoleRequest(response, request)),\r\n switchMap((payload) => this.chill.setAuthRole(payload)),\r\n map((response) => this.normalizeAuthRole(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getAuthPermissionRules(userGuid?: string, roleGuid?: string) {\r\n if (userGuid?.trim()) {\r\n return this.chill.getAuthUser(userGuid).pipe(\r\n map((response) => this.normalizeAuthPermissionRules(response.permissions, { kind: 'user', guid: userGuid })),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n if (roleGuid?.trim()) {\r\n return this.chill.getAuthRole(roleGuid).pipe(\r\n map((response) => this.normalizeAuthPermissionRules(response.permissions, { kind: 'role', guid: roleGuid })),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n return this.chill.getAuthPermissions().pipe(\r\n map((response) => this.normalizeAuthPermissionRules(response.permissions)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n createAuthPermissionRule(request: CreateAuthPermissionRuleRequest) {\r\n const userGuid = request.userGuid?.trim();\r\n if (userGuid) {\r\n return this.chill.getAuthUser(userGuid).pipe(\r\n map((response) => this.buildSetAuthUserRequest(\r\n response,\r\n undefined,\r\n undefined,\r\n (permissions) => [...permissions, this.toAuthPermissionRuleItem(request)]\r\n )),\r\n switchMap((payload) => this.chill.setAuthUser(payload)),\r\n map((response) => this.getLatestAuthPermissionRule(response.permissions, { kind: 'user', guid: userGuid })),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n const roleGuid = request.roleGuid?.trim();\r\n if (roleGuid) {\r\n return this.chill.getAuthRole(roleGuid).pipe(\r\n map((response) => this.buildSetAuthRoleRequest(\r\n response,\r\n undefined,\r\n undefined,\r\n (permissions) => [...permissions, this.toAuthPermissionRuleItem(request)]\r\n )),\r\n switchMap((payload) => this.chill.setAuthRole(payload)),\r\n map((response) => this.getLatestAuthPermissionRule(response.permissions, { kind: 'role', guid: roleGuid })),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n return throwError(() => new Error('Auth permission management requires either userGuid or roleGuid.'));\r\n }\r\n\r\n deleteAuthPermissionRule(ruleGuid: string) {\r\n const owner = this.permissionRuleOwners.get(ruleGuid.trim());\r\n if (!owner) {\r\n return throwError(() => new Error('Auth permission rule owner is unknown. Reload permissions before deleting a rule.'));\r\n }\r\n\r\n if (owner.kind === 'user') {\r\n return this.chill.getAuthUser(owner.guid).pipe(\r\n map((response) => this.buildSetAuthUserRequest(\r\n response,\r\n undefined,\r\n undefined,\r\n (permissions) => permissions.filter((permission) => this.readJsonString(permission, 'Guid') !== ruleGuid.trim())\r\n )),\r\n switchMap((payload) => this.chill.setAuthUser(payload)),\r\n map(() => {\r\n this.permissionRuleOwners.delete(ruleGuid.trim());\r\n return void 0;\r\n }),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n return this.chill.getAuthRole(owner.guid).pipe(\r\n map((response) => this.buildSetAuthRoleRequest(\r\n response,\r\n undefined,\r\n undefined,\r\n (permissions) => permissions.filter((permission) => this.readJsonString(permission, 'Guid') !== ruleGuid.trim())\r\n )),\r\n switchMap((payload) => this.chill.setAuthRole(payload)),\r\n map(() => {\r\n this.permissionRuleOwners.delete(ruleGuid.trim());\r\n return void 0;\r\n }),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n query(request: ChillQuery) {\r\n return this.chill.query(request as unknown as JsonObject).pipe(\r\n map((response) => response as JsonObject),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n lookup(request: JsonObject) {\r\n const client = this.chill as unknown as ChillSharpNgClientLookupSupport;\r\n\r\n if (typeof client.lookup === 'function') {\r\n return client.lookup(request).pipe(\r\n map((response) => response as JsonObject),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n const rawClient = client.getRawClient?.();\r\n if (typeof rawClient?.lookup === 'function') {\r\n return from(rawClient.lookup(request)).pipe(\r\n map((response) => response as JsonObject),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n return throwError(() => new Error(\r\n this.T(\r\n '2D0D795E-ABEA-4507-AB12-F2BE1E2FA8E8',\r\n 'The current ChillSharp client does not expose lookup().',\r\n 'Il client ChillSharp corrente non espone lookup().'\r\n )\r\n ));\r\n }\r\n\r\n autocomplete(request: JsonObject) {\r\n return this.chill.autocomplete(request).pipe(\r\n map((response) => response as JsonObject),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n find(request: JsonObject) {\r\n return this.chill.find(request).pipe(\r\n map((response) => response as JsonObject | null),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n validate(request: JsonObject) {\r\n return this.chill.validate(request).pipe(\r\n map((response) => (response ?? []) as ChillValidationError[]),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n create(request: JsonObject) {\r\n return this.chill.create(request).pipe(\r\n map((response) => response as JsonObject),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n update(request: JsonObject) {\r\n return this.chill.update(request).pipe(\r\n map((response) => response as JsonObject),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n delete(request: JsonObject) {\r\n return this.chill.delete(request).pipe(\r\n map(() => void 0),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n chunk(operations: JsonObject[]) {\r\n return this.chill.chunk(operations).pipe(\r\n map((response) => response as JsonObject[]),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n uploadAttachment(targetEntity: JsonObject, file: ChillAttachmentUploadFile, options: ChillAttachmentUploadOptions = {}) {\r\n return this.chill.uploadAttachment(targetEntity, file, options).pipe(\r\n map((response) => response as JsonObject[]),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n downloadAttachment(attachmentOrGuid: JsonObject | string) {\r\n return this.chill.downloadAttachment(attachmentOrGuid).pipe(\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getMenu(parentGuid?: string | null) {\r\n return this.chill.getMenu(parentGuid).pipe(\r\n map((response) => (response ?? []).map((item) => this.normalizeMenuItem(item))),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n getEntityOptions(chillType: string) {\r\n return this.chill.getEntityOptions(chillType).pipe(\r\n map((response) => this.normalizeEntityOptions(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n setEntityOptions(entityOptions: ChillEntityOptions) {\r\n return this.chill.setEntityOptions(this.toEntityOptionsDto(entityOptions)).pipe(\r\n map((response) => this.normalizeEntityOptions(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n setMenu(menuItem: AppChillMenuItem) {\r\n return this.chill.setMenu(this.toMenuDto(menuItem)).pipe(\r\n map((response) => this.normalizeMenuItem(response)),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n deleteMenu(menuItemGuid: string) {\r\n return this.chill.deleteMenu(menuItemGuid).pipe(\r\n map(() => void 0),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n toJsonValue(schema: ChillSchema | null, propertyName: string, value: JsonValue | undefined): JsonValue {\r\n const property = schema?.properties.find((candidate) => candidate.name === propertyName);\r\n return this.serializePropertyValue(property, value);\r\n }\r\n\r\n formatDisplayNumber(value: number): string {\r\n const numberFormat = this.readNumberFormatConfig();\r\n if (numberFormat.kind === 'locale') {\r\n return new Intl.NumberFormat(numberFormat.locale).format(value);\r\n }\r\n\r\n return this.formatNumberWithPattern(value, numberFormat);\r\n }\r\n\r\n /**\r\n * Formats a numeric API value using the current user's decimal and grouping preferences.\r\n * String values are parsed as invariant JSON numbers before falling back to localized input.\r\n */\r\n formatApiNumber(value: number | string): string {\r\n const parsedValue = typeof value === 'number'\r\n ? value\r\n : this.parseInvariantNumber(value) ?? this.parseDisplayDecimal(value);\r\n return parsedValue === null || !Number.isFinite(parsedValue)\r\n ? typeof value === 'string' ? value : ''\r\n : this.formatDisplayNumber(parsedValue);\r\n }\r\n\r\n parseDisplayInteger(value: string): number | null {\r\n const parsedValue = this.parseLocalizedNumber(value);\r\n return parsedValue !== null && Number.isInteger(parsedValue)\r\n ? parsedValue\r\n : null;\r\n }\r\n\r\n parseDisplayDecimal(value: string): number | null {\r\n return this.parseLocalizedNumber(value);\r\n }\r\n\r\n readDisplayNumber(value: JsonValue | undefined): number | null {\r\n if (typeof value === 'number' && Number.isFinite(value)) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim()) {\r\n return this.parseLocalizedNumber(value);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n formatDisplayDate(value: string): string {\r\n const normalizedValue = value.trim();\r\n const match = normalizedValue.match(/^(\\d{4})-(\\d{2})-(\\d{2})(?:$|[T\\s])/);\r\n if (!match) {\r\n return normalizedValue;\r\n }\r\n\r\n const year = Number(match[1]);\r\n const month = Number(match[2]);\r\n const day = Number(match[3]);\r\n return this.isValidDateParts(year, month, day)\r\n ? this.formatDateParts(year, month, day)\r\n : normalizedValue;\r\n }\r\n\r\n parseDisplayDate(value: string): string | null {\r\n const normalizedValue = value.trim();\r\n if (!normalizedValue) {\r\n return null;\r\n }\r\n\r\n const leadingIsoDateMatch = normalizedValue.match(/^(\\d{4})-(\\d{2})-(\\d{2})(?:$|[T\\s])/);\r\n if (leadingIsoDateMatch) {\r\n const year = Number(leadingIsoDateMatch[1]);\r\n const month = Number(leadingIsoDateMatch[2]);\r\n const day = Number(leadingIsoDateMatch[3]);\r\n return this.isValidDateParts(year, month, day)\r\n ? this.toIsoDate(year, month, day)\r\n : null;\r\n }\r\n\r\n const parts = this.parseDisplayDateParts(normalizedValue);\r\n if (parts) {\r\n return this.toIsoDate(parts.year, parts.month, parts.day);\r\n }\r\n\r\n const parsed = new Date(normalizedValue);\r\n if (Number.isNaN(parsed.getTime())) {\r\n return null;\r\n }\r\n\r\n return this.toIsoDate(parsed.getFullYear(), parsed.getMonth() + 1, parsed.getDate());\r\n }\r\n\r\n formatDisplayTime(value: string): string {\r\n const normalizedValue = this.parseDisplayTime(value);\r\n if (!normalizedValue) {\r\n return value.trim();\r\n }\r\n\r\n const match = normalizedValue.match(/^(\\d{2}):(\\d{2})(?::(\\d{2})(\\.\\d{1,7})?)?$/);\r\n if (!match) {\r\n return normalizedValue;\r\n }\r\n\r\n const seconds = match[3] && match[3] !== '00' ? `:${match[3]}` : '';\r\n const fraction = seconds ? (match[4] ?? '') : '';\r\n return `${match[1]}:${match[2]}${seconds}${fraction}`;\r\n }\r\n\r\n parseDisplayTime(value: string): string | null {\r\n const normalizedValue = value.trim();\r\n if (!normalizedValue) {\r\n return null;\r\n }\r\n\r\n const directMatch = normalizedValue.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2})(\\.\\d{1,7})?)?$/);\r\n if (directMatch) {\r\n return this.normalizeTimeParts(directMatch[1], directMatch[2], directMatch[3], directMatch[4]);\r\n }\r\n\r\n const isoMatch = normalizedValue.match(\r\n /^\\d{4}-\\d{2}-\\d{2}[T\\s](\\d{1,2}):(\\d{2})(?::(\\d{2})(\\.\\d{1,7})?)?(?:Z|[+-]\\d{2}:\\d{2})?$/\r\n );\r\n if (isoMatch) {\r\n return this.normalizeTimeParts(isoMatch[1], isoMatch[2], isoMatch[3], isoMatch[4]);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n formatDisplayDateTime(value: string): string {\r\n const normalizedValue = value.trim();\r\n if (!normalizedValue) {\r\n return '';\r\n }\r\n\r\n const parsed = this.parseStoredDateTime(value);\r\n if (!parsed) {\r\n return normalizedValue;\r\n }\r\n\r\n const parts = this.readZonedDateTimeParts(parsed, this.currentTimeZone());\r\n const formattedDate = this.formatDateParts(parts.year, parts.month, parts.day);\r\n const seconds = parts.second !== 0 ? `:${`${parts.second}`.padStart(2, '0')}` : '';\r\n return `${formattedDate} ${`${parts.hour}`.padStart(2, '0')}:${`${parts.minute}`.padStart(2, '0')}${seconds}`;\r\n }\r\n\r\n parseDisplayDateTime(value: string): string | null {\r\n const normalizedValue = value.trim();\r\n if (!normalizedValue) {\r\n return null;\r\n }\r\n\r\n const directMatch = normalizedValue.match(\r\n /^(\\d{4})-(\\d{2})-(\\d{2})[T\\s](\\d{1,2}):(\\d{2})(?::(\\d{2})(\\.\\d{1,7})?)?(Z|[+-]\\d{2}:\\d{2})?$/\r\n );\r\n if (directMatch) {\r\n const [, yearText, monthText, dayText, hourText, minuteText, secondText, fractionText, offsetText] = directMatch;\r\n const year = Number(yearText);\r\n const month = Number(monthText);\r\n const day = Number(dayText);\r\n const hour = Number(hourText);\r\n const minute = Number(minuteText);\r\n const second = secondText ? Number(secondText) : 0;\r\n if (!this.isValidDateParts(year, month, day) || hour > 23 || minute > 59 || second > 59) {\r\n return null;\r\n }\r\n\r\n if (offsetText) {\r\n return `${yearText}-${monthText}-${dayText}T${`${hour}`.padStart(2, '0')}:${minuteText}:${`${second}`.padStart(2, '0')}${fractionText ?? ''}${offsetText}`;\r\n }\r\n\r\n return this.toZonedIsoDateTime(year, month, day, hour, minute, second, fractionText ?? '');\r\n }\r\n\r\n const splitMatch = normalizedValue.match(/^(.*?)[T\\s]+(\\d{1,2}):(\\d{2})(?::(\\d{2})(\\.\\d{1,7})?)?$/);\r\n if (splitMatch) {\r\n const dateParts = this.parseDisplayDateParts(splitMatch[1]);\r\n if (!dateParts) {\r\n return null;\r\n }\r\n\r\n const hour = Number(splitMatch[2]);\r\n const minute = Number(splitMatch[3]);\r\n const second = splitMatch[4] ? Number(splitMatch[4]) : 0;\r\n if (hour > 23 || minute > 59 || second > 59) {\r\n return null;\r\n }\r\n\r\n return this.toZonedIsoDateTime(\r\n dateParts.year,\r\n dateParts.month,\r\n dateParts.day,\r\n hour,\r\n minute,\r\n second,\r\n splitMatch[5] ?? ''\r\n );\r\n }\r\n\r\n const parsed = new Date(normalizedValue);\r\n if (Number.isNaN(parsed.getTime())) {\r\n return null;\r\n }\r\n\r\n const parts = this.readZonedDateTimeParts(parsed, this.currentTimeZone());\r\n return this.toZonedIsoDateTime(parts.year, parts.month, parts.day, parts.hour, parts.minute, parts.second, '');\r\n }\r\n\r\n prepareForm<TSchema extends ChillSchema>(\r\n schema: TSchema,\r\n source?: ChillEntity | ChillQuery | null,\r\n options?: PrepareFormOptions<TSchema>\r\n ): FormGroup<ChillPreparedFormControls<TSchema>> {\r\n const controls = Object.fromEntries(\r\n (schema.properties ?? []).map((property) => [\r\n property.name,\r\n new FormControl<JsonValue>(this.readPreparedFormValue(source, property), { nonNullable: true })\r\n ])\r\n ) as ChillPreparedFormControls<TSchema>;\r\n const form = new FormGroup<ChillPreparedFormControls<TSchema>>(controls);\r\n\r\n for (const property of schema.properties ?? []) {\r\n const control = controls[property.name as keyof ChillPreparedFormControls<TSchema>];\r\n const asyncValidators = options?.createControlAsyncValidators?.({\r\n schema,\r\n property,\r\n source,\r\n getForm: () => form\r\n });\r\n if (!control || !asyncValidators) {\r\n continue;\r\n }\r\n\r\n control.setAsyncValidators(asyncValidators);\r\n }\r\n\r\n return form;\r\n }\r\n\r\n register(request: RegisterRequest) {\r\n return this.chill.registerAuthAccount(this.toRegisterAuthIdentityRequest(request)).pipe(\r\n map((response) => this.toTokenResponse(response as JsonObject)),\r\n switchMap((response) => from(this.handleAuthenticatedResponse(response)).pipe(map(() => response))),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n login(request: LoginRequest) {\r\n return this.chill.loginAuthAccount(this.toLoginAuthIdentityRequest(request)).pipe(\r\n map((response) => this.toTokenResponse(response as JsonObject)),\r\n switchMap((response) => from(this.handleAuthenticatedResponse(response)).pipe(map(() => response))),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n refreshSession() {\r\n return this.chill.refreshAuthAccount().pipe(\r\n map((response) => this.toTokenResponse(response as JsonObject)),\r\n switchMap((response) => from(this.handleAuthenticatedResponse(response)).pipe(map(() => response))),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n requestPasswordReset(request: RequestPasswordResetRequest) {\r\n return this.chill.requestAuthPasswordReset(this.toRequestPasswordResetRequest(request)).pipe(\r\n map((response) => response as unknown as PasswordResetTokenResponse),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n confirmPasswordReset(request: ResetPasswordRequest) {\r\n return this.chill.resetAuthPassword(this.toResetPasswordRequest(request)).pipe(\r\n map((response) => response as unknown as ResetPasswordResponse),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n logout() {\r\n this.clearSession();\r\n }\r\n\r\n /**\r\n * Clears an expired local access token and returns the user to login.\r\n * This is public so route guards and host applications can force the same\r\n * check when navigation is attempted after a sleeping tab resumes.\r\n */\r\n expireSessionIfNeeded(): boolean {\r\n const session = this.sessionState();\r\n if (!session || !this.isSessionExpired(session)) {\r\n return false;\r\n }\r\n\r\n this.clearSession();\r\n if (!this.router.url.startsWith('/login')) {\r\n void this.router.navigate(['/login'], { replaceUrl: true });\r\n }\r\n return true;\r\n }\r\n\r\n formatError(error: unknown): string {\r\n if (typeof error === 'string' && error.trim()) {\r\n return error;\r\n }\r\n\r\n if (error instanceof Error && error.message.trim()) {\r\n return error.message;\r\n }\r\n\r\n return this.T('48D1CE91-0230-4D35-90D0-A776D804B0A8', 'Unexpected error while calling ChillSharp.', 'Errore imprevisto durante la chiamata a ChillSharp.');\r\n }\r\n\r\n private persistSession(response: AuthTokenResponse): void {\r\n const accessToken = response.AccessToken?.trim() ?? '';\r\n if (!accessToken) {\r\n return;\r\n }\r\n\r\n const session: AuthSession = {\r\n accessToken,\r\n accessTokenExpiresUtc: response.AccessTokenExpiresUtc ?? '',\r\n refreshToken: response.RefreshToken ?? '',\r\n refreshTokenExpiresUtc: response.RefreshTokenExpiresUtc ?? '',\r\n userId: response.UserId ?? '',\r\n userName: response.UserName ?? ''\r\n };\r\n\r\n localStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(session));\r\n this.sessionState.set(session);\r\n this.syncClientSession(session);\r\n this.scheduleSessionExpiryCheck();\r\n }\r\n\r\n private clearSession(): void {\r\n if (this.sessionExpiryTimer) {\r\n globalThis.clearTimeout(this.sessionExpiryTimer);\r\n this.sessionExpiryTimer = null;\r\n }\r\n localStorage.removeItem(SESSION_STORAGE_KEY);\r\n localStorage.removeItem(USER_PREFERENCES_STORAGE_KEY);\r\n this.sessionState.set(null);\r\n this.canManagePermissionsState.set(false);\r\n this.canManageSchemaState.set(false);\r\n this.persistUserPreferences(this.createEmptyUserPreferences());\r\n this.syncClientSession(null);\r\n }\r\n\r\n private async handleAuthenticatedResponse(response: AuthTokenResponse): Promise<void> {\r\n this.persistSession(response);\r\n await Promise.all([\r\n this.loadCurrentUserPreferences({\r\n clearSessionOnNotFound: false\r\n }),\r\n this.loadCurrentUserAccess()\r\n ]);\r\n }\r\n\r\n private async loadCurrentUserAccess(): Promise<void> {\r\n try {\r\n const response = await firstValueFrom(this.chill.getAuthPermissions());\r\n const isAuthenticated = this.isAuthenticated();\r\n this.canManagePermissionsState.set(isAuthenticated && response.user?.canManagePermissions === true);\r\n this.canManageSchemaState.set(isAuthenticated && response.user?.canManageSchema === true);\r\n } catch (error) {\r\n this.canManagePermissionsState.set(false);\r\n this.canManageSchemaState.set(false);\r\n console.warn('[ChillService] Unable to load current user access', error);\r\n }\r\n }\r\n\r\n private async loadCurrentUserPreferences(\r\n options: LoadCurrentUserPreferencesOptions\r\n ): Promise<ChillUserPreferences | null> {\r\n try {\r\n const preferences = await firstValueFrom(this.chill.getCurrentUserPreferences());\r\n this.persistUserPreferences(this.toStoredUserPreferences(preferences));\r\n return preferences;\r\n } catch (error) {\r\n if (options.clearSessionOnNotFound && (this.isNotFoundError(error) || this.isUnauthorizedError(error))) {\r\n console.info('[ChillService] Current user preferences are unavailable. Clearing stale session.');\r\n this.clearSession();\r\n return null;\r\n }\r\n\r\n console.warn('[ChillService] Unable to load current user preferences', error);\r\n return null;\r\n }\r\n }\r\n\r\n private readStoredSession(): AuthSession | null {\r\n const raw = localStorage.getItem(SESSION_STORAGE_KEY);\r\n if (!raw) {\r\n return null;\r\n }\r\n\r\n try {\r\n const session = JSON.parse(raw) as Partial<AuthSession>;\r\n if (!session.accessToken) {\r\n return null;\r\n }\r\n\r\n return {\r\n accessToken: session.accessToken,\r\n accessTokenExpiresUtc: session.accessTokenExpiresUtc ?? '',\r\n refreshToken: session.refreshToken ?? '',\r\n refreshTokenExpiresUtc: session.refreshTokenExpiresUtc ?? '',\r\n userId: session.userId ?? '',\r\n userName: session.userName ?? ''\r\n };\r\n } catch {\r\n localStorage.removeItem(SESSION_STORAGE_KEY);\r\n return null;\r\n }\r\n }\r\n\r\n private scheduleSessionExpiryCheck(): void {\r\n if (this.sessionExpiryTimer) {\r\n globalThis.clearTimeout(this.sessionExpiryTimer);\r\n this.sessionExpiryTimer = null;\r\n }\r\n\r\n const expiresAt = this.getSessionExpiry(this.sessionState());\r\n if (expiresAt === null) {\r\n return;\r\n }\r\n\r\n const delay = expiresAt - Date.now();\r\n if (delay <= 0) {\r\n this.expireSessionIfNeeded();\r\n return;\r\n }\r\n\r\n this.sessionExpiryTimer = globalThis.setTimeout(\r\n () => this.expireSessionIfNeeded(),\r\n Math.min(delay, MAX_TIMEOUT_MS)\r\n );\r\n }\r\n\r\n updatePreferredTheme(userGuid: string, preferredTheme: string) {\r\n return this.chill.getAuthUser(userGuid).pipe(\r\n map((response) => this.buildSetAuthUserRequest(response, { preferredTheme })),\r\n switchMap((payload) => this.chill.setAuthUser(payload)),\r\n map((response) => response as AuthUserDetailsResponse),\r\n switchMap((response) => from(this.loadCurrentUserPreferences({ clearSessionOnNotFound: false })).pipe(\r\n map(() => response)\r\n )),\r\n catchError((error) => this.rethrowFriendlyError(error))\r\n );\r\n }\r\n\r\n private isSessionExpired(session: AuthSession): boolean {\r\n const expiresAt = this.getSessionExpiry(session);\r\n return expiresAt !== null && expiresAt <= Date.now();\r\n }\r\n\r\n private getSessionExpiry(session: AuthSession | null): number | null {\r\n if (!session) {\r\n return null;\r\n }\r\n\r\n const parsedExpiry = Date.parse(session.accessTokenExpiresUtc);\r\n if (Number.isFinite(parsedExpiry)) {\r\n return parsedExpiry;\r\n }\r\n\r\n const [, payload] = session.accessToken.split('.');\r\n if (!payload) {\r\n return null;\r\n }\r\n\r\n try {\r\n const normalizedPayload = payload.replace(/-/g, '+').replace(/_/g, '/');\r\n const decodedPayload = globalThis.atob(normalizedPayload.padEnd(Math.ceil(normalizedPayload.length / 4) * 4, '='));\r\n const expiresAtSeconds = JSON.parse(decodedPayload).exp;\r\n return typeof expiresAtSeconds === 'number' && Number.isFinite(expiresAtSeconds)\r\n ? expiresAtSeconds * 1_000\r\n : null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private toTokenResponse(response: JsonObject): AuthTokenResponse {\r\n return {\r\n AccessToken: this.readJsonString(response, 'AccessToken'),\r\n AccessTokenIssuedUtc: this.readJsonString(response, 'AccessTokenIssuedUtc'),\r\n AccessTokenExpiresUtc: this.readJsonString(response, 'AccessTokenExpiresUtc'),\r\n RefreshToken: this.readJsonString(response, 'RefreshToken'),\r\n RefreshTokenExpiresUtc: this.readJsonString(response, 'RefreshTokenExpiresUtc'),\r\n UserId: this.readJsonString(response, 'UserId'),\r\n UserName: this.readJsonString(response, 'UserName')\r\n };\r\n }\r\n\r\n private syncClientSession(session: AuthSession | null): void {\r\n const client = this.chill.getRawClient() as unknown as ChillSharpClientSessionSync;\r\n if (typeof client.applyAuthToken !== 'function') {\r\n return;\r\n }\r\n\r\n client.applyAuthToken(\r\n {\r\n AccessToken: session?.accessToken ?? '',\r\n AccessTokenExpiresUtc: session?.accessTokenExpiresUtc ?? '',\r\n RefreshToken: session?.refreshToken ?? '',\r\n RefreshTokenExpiresUtc: session?.refreshTokenExpiresUtc ?? '',\r\n UserName: session?.userName ?? ''\r\n },\r\n true\r\n );\r\n }\r\n\r\n private syncClientCulture(cultureName: string): void {\r\n const client = this.chill.getRawClient() as unknown as ChillSharpClientSessionSync;\r\n client.setCultureName?.(cultureName.trim() || null);\r\n }\r\n\r\n private readJsonString(payload: JsonObject, key: string): string | undefined {\r\n const directValue = payload[key];\r\n if (typeof directValue === 'string' && directValue.trim()) {\r\n return directValue.trim();\r\n }\r\n\r\n const camelKey = key.length > 1\r\n ? `${key[0].toLowerCase()}${key.slice(1)}`\r\n : key.toLowerCase();\r\n const camelValue = payload[camelKey];\r\n if (typeof camelValue === 'string' && camelValue.trim()) {\r\n return camelValue.trim();\r\n }\r\n\r\n const matchedKey = Object.keys(payload).find((candidate) => candidate.toLowerCase() === key.toLowerCase());\r\n const matchedValue = matchedKey ? payload[matchedKey] : undefined;\r\n return typeof matchedValue === 'string' && matchedValue.trim()\r\n ? matchedValue.trim()\r\n : undefined;\r\n }\r\n\r\n private readJsonBoolean(payload: JsonObject, key: string): boolean {\r\n const directValue = payload[key];\r\n if (typeof directValue === 'boolean') {\r\n return directValue;\r\n }\r\n\r\n const matchedKey = Object.keys(payload).find((candidate) => candidate.toLowerCase() === key.toLowerCase());\r\n const matchedValue = matchedKey ? payload[matchedKey] : undefined;\r\n return matchedValue === true;\r\n }\r\n\r\n private readJsonNumber(payload: JsonObject, key: string): number {\r\n const directValue = payload[key];\r\n if (typeof directValue === 'number') {\r\n return directValue;\r\n }\r\n\r\n const matchedKey = Object.keys(payload).find((candidate) => candidate.toLowerCase() === key.toLowerCase());\r\n const matchedValue = matchedKey ? payload[matchedKey] : undefined;\r\n return typeof matchedValue === 'number' ? matchedValue : 0;\r\n }\r\n\r\n private readPermissionEffect(payload: JsonObject): PermissionEffect {\r\n const value = this.readJsonNumber(payload, 'Effect');\r\n return value === PermissionEffect.Deny\r\n ? PermissionEffect.Deny\r\n : PermissionEffect.Allow;\r\n }\r\n\r\n private readPermissionAction(payload: JsonObject): PermissionAction {\r\n const value = this.readJsonNumber(payload, 'Action');\r\n switch (value) {\r\n case PermissionAction.FullControl:\r\n case PermissionAction.Query:\r\n case PermissionAction.Create:\r\n case PermissionAction.Update:\r\n case PermissionAction.Delete:\r\n case PermissionAction.See:\r\n case PermissionAction.Modify:\r\n return value;\r\n default:\r\n return PermissionAction.Query;\r\n }\r\n }\r\n\r\n private readPermissionScope(payload: JsonObject): PermissionScope {\r\n const value = this.readJsonNumber(payload, 'Scope');\r\n switch (value) {\r\n case PermissionScope.Module:\r\n case PermissionScope.Entity:\r\n case PermissionScope.Property:\r\n return value;\r\n default:\r\n return PermissionScope.Module;\r\n }\r\n }\r\n\r\n private isJsonObject(value: unknown): value is JsonObject {\r\n return !!value && typeof value === 'object' && !Array.isArray(value);\r\n }\r\n\r\n private readPreparedFormValue(source: ChillEntity | ChillQuery | null | undefined, property: ChillPropertySchema): JsonValue {\r\n const propertyName = property.name.trim();\r\n if (!source || !propertyName) {\r\n return this.emptySerializedValue(property.propertyType ?? CHILL_PROPERTY_TYPE.Unknown);\r\n }\r\n\r\n const properties = source.properties;\r\n if (properties && propertyName in properties) {\r\n return this.serializePropertyValue(property, properties[propertyName]);\r\n }\r\n\r\n if (propertyName in source) {\r\n return this.serializePropertyValue(property, source[propertyName]);\r\n }\r\n\r\n const pascalCaseName = `${propertyName[0]?.toUpperCase() ?? ''}${propertyName.slice(1)}`;\r\n return this.serializePropertyValue(property, source[pascalCaseName]);\r\n }\r\n\r\n private serializePropertyValue(property: ChillPropertySchema | undefined, value: JsonValue | undefined): JsonValue {\r\n const propertyType = property?.propertyType ?? CHILL_PROPERTY_TYPE.Unknown;\r\n\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return value;\r\n }\r\n\r\n if (this.isJsonObject(value)) {\r\n return value;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value;\r\n }\r\n\r\n const normalized = typeof value === 'string'\r\n ? value.trim()\r\n : '';\r\n if (!normalized) {\r\n return this.emptySerializedValue(propertyType);\r\n }\r\n\r\n switch (propertyType) {\r\n case CHILL_PROPERTY_TYPE.Guid:\r\n return normalized;\r\n case CHILL_PROPERTY_TYPE.Integer:\r\n return this.parseIntegerValue(normalized);\r\n case CHILL_PROPERTY_TYPE.Decimal:\r\n return this.parseDecimalValue(normalized);\r\n case CHILL_PROPERTY_TYPE.Date:\r\n return this.parseDateValue(normalized);\r\n case CHILL_PROPERTY_TYPE.Time:\r\n return this.parseTimeValue(normalized);\r\n case CHILL_PROPERTY_TYPE.Duration:\r\n return normalized;\r\n case CHILL_PROPERTY_TYPE.DateTime:\r\n return this.parseDateTimeValue(normalized);\r\n case CHILL_PROPERTY_TYPE.Boolean:\r\n return this.parseBooleanValue(normalized);\r\n case CHILL_PROPERTY_TYPE.String:\r\n case CHILL_PROPERTY_TYPE.Text:\r\n case CHILL_PROPERTY_TYPE.Select:\r\n case CHILL_PROPERTY_TYPE.Json:\r\n return normalized;\r\n case CHILL_PROPERTY_TYPE.ChillEntity:\r\n case CHILL_PROPERTY_TYPE.ChillQuery:\r\n return normalized;\r\n case CHILL_PROPERTY_TYPE.ChillEntityCollection:\r\n return normalized;\r\n case CHILL_PROPERTY_TYPE.Unknown:\r\n default:\r\n return normalized;\r\n }\r\n }\r\n\r\n private emptySerializedValue(propertyType: number): JsonValue {\r\n switch (propertyType) {\r\n case CHILL_PROPERTY_TYPE.String:\r\n case CHILL_PROPERTY_TYPE.Text:\r\n case CHILL_PROPERTY_TYPE.Select:\r\n case CHILL_PROPERTY_TYPE.Json:\r\n case CHILL_PROPERTY_TYPE.Time:\r\n case CHILL_PROPERTY_TYPE.Duration:\r\n case CHILL_PROPERTY_TYPE.Unknown:\r\n return '';\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n private parseIntegerValue(value: string): JsonValue {\r\n return this.parseDisplayInteger(value);\r\n }\r\n\r\n private parseDecimalValue(value: string): JsonValue {\r\n return this.parseDisplayDecimal(value);\r\n }\r\n\r\n private parseBooleanValue(value: string): JsonValue {\r\n const normalized = value.toLowerCase();\r\n if (normalized === 'true' || normalized === '1') {\r\n return true;\r\n }\r\n\r\n if (normalized === 'false' || normalized === '0') {\r\n return false;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private parseDateValue(value: string): JsonValue {\r\n return this.parseDisplayDate(value);\r\n }\r\n\r\n private parseTimeValue(value: string): JsonValue {\r\n return this.parseDisplayTime(value);\r\n }\r\n\r\n private parseDateTimeValue(value: string): JsonValue {\r\n return this.parseDisplayDateTime(value);\r\n }\r\n\r\n private resolveCultureName(cultureName?: string | null): string {\r\n const normalizedCultureName = cultureName?.trim();\r\n return normalizedCultureName || this.currentCultureName();\r\n }\r\n\r\n private defaultDateFormatForCulture(cultureName: string): string {\r\n return cultureName.trim().toLowerCase() === 'en-us'\r\n ? 'MM/dd/yyyy'\r\n : 'dd/MM/yyyy';\r\n }\r\n\r\n private formatDateParts(year: number, month: number, day: number): string {\r\n return this.currentDateFormat().replace(/yyyy|yy|YYYY|YY|dd|DD|MM/g, (token) => {\r\n switch (token) {\r\n case 'yyyy':\r\n case 'YYYY':\r\n return `${year}`.padStart(4, '0');\r\n case 'yy':\r\n case 'YY':\r\n return `${year % 100}`.padStart(2, '0');\r\n case 'dd':\r\n case 'DD':\r\n return `${day}`.padStart(2, '0');\r\n case 'MM':\r\n return `${month}`.padStart(2, '0');\r\n default:\r\n return token;\r\n }\r\n });\r\n }\r\n\r\n private parseDisplayDateParts(value: string): { year: number; month: number; day: number } | null {\r\n const normalizedValue = value.trim();\r\n const format = this.currentDateFormat();\r\n const tokenRegex = /(dd|MM|yyyy|yy|DD|YYYY|YY)/g;\r\n const tokens = format.match(tokenRegex) ?? [];\r\n if (tokens.length !== 3) {\r\n return null;\r\n }\r\n\r\n const separators = format.split(tokenRegex).filter((_, index) => index % 2 === 0);\r\n const escapedSeparators = separators.map((separator) => separator.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\r\n const capturePattern = tokens\r\n .map((token, index) => `${escapedSeparators[index] ?? ''}${this.normalizeDateFormatToken(token) === 'yyyy' ? '(\\\\d{4})' : this.normalizeDateFormatToken(token) === 'yy' ? '(\\\\d{2})' : '(\\\\d{1,2})'}`)\r\n .join('') + (escapedSeparators[separators.length - 1] ?? '');\r\n const match = normalizedValue.match(new RegExp(`^${capturePattern}$`));\r\n if (!match) {\r\n return null;\r\n }\r\n\r\n const values = match.slice(1);\r\n const parsedValues = Object.fromEntries(\r\n tokens.map((token, index) => [this.normalizeDateFormatToken(token), values[index]])\r\n ) as Record<string, string | undefined>;\r\n const yearToken = parsedValues['yyyy'] ?? parsedValues['yy'] ?? '';\r\n const year = (parsedValues['yyyy']\r\n ? Number(yearToken)\r\n : 2000 + Number(yearToken));\r\n const month = Number(parsedValues['MM'] ?? '');\r\n const day = Number(parsedValues['dd'] ?? '');\r\n return this.isValidDateParts(year, month, day)\r\n ? { year, month, day }\r\n : null;\r\n }\r\n\r\n private normalizeDateFormatToken(token: string): 'dd' | 'MM' | 'yyyy' | 'yy' {\r\n switch (token) {\r\n case 'DD':\r\n return 'dd';\r\n case 'YYYY':\r\n return 'yyyy';\r\n case 'YY':\r\n return 'yy';\r\n default:\r\n return token as 'dd' | 'MM' | 'yyyy' | 'yy';\r\n }\r\n }\r\n\r\n private toIsoDate(year: number, month: number, day: number): string {\r\n return `${year}-${`${month}`.padStart(2, '0')}-${`${day}`.padStart(2, '0')}`;\r\n }\r\n\r\n private isValidDateParts(year: number, month: number, day: number): boolean {\r\n if (month < 1 || month > 12 || day < 1 || day > 31) {\r\n return false;\r\n }\r\n\r\n const candidate = new Date(year, month - 1, day);\r\n return candidate.getFullYear() === year\r\n && candidate.getMonth() === month - 1\r\n && candidate.getDate() === day;\r\n }\r\n\r\n private parseLocalizedNumber(value: string): number | null {\r\n const normalizedValue = value.trim();\r\n if (!normalizedValue) {\r\n return null;\r\n }\r\n\r\n const numberFormat = this.readNumberFormatConfig();\r\n const formatter = numberFormat.kind === 'locale'\r\n ? new Intl.NumberFormat(numberFormat.locale)\r\n : null;\r\n const parts = formatter?.formatToParts(12345.6) ?? [];\r\n const groupSeparator = numberFormat.kind === 'pattern'\r\n ? numberFormat.groupSeparator\r\n : (parts.find((part) => part.type === 'group')?.value ?? ',');\r\n const decimalSeparator = numberFormat.kind === 'pattern'\r\n ? numberFormat.decimalSeparator\r\n : (parts.find((part) => part.type === 'decimal')?.value ?? '.');\r\n const signParts = formatter?.formatToParts(-1) ?? [];\r\n const minusSign = signParts.find((part) => part.type === 'minusSign')?.value ?? '-';\r\n\r\n let sanitizedValue = normalizedValue\r\n .replaceAll(String.fromCharCode(160), '')\r\n .replaceAll(' ', '');\r\n\r\n if (groupSeparator) {\r\n sanitizedValue = sanitizedValue.replaceAll(groupSeparator, '');\r\n }\r\n\r\n sanitizedValue = sanitizedValue\r\n .replaceAll(decimalSeparator, '.')\r\n .replaceAll(minusSign, '-');\r\n const parsedValue = Number(sanitizedValue);\r\n return Number.isFinite(parsedValue)\r\n ? parsedValue\r\n : null;\r\n }\r\n\r\n private readNumberFormatConfig():\r\n | { kind: 'locale'; locale: string }\r\n | { kind: 'pattern'; groupSeparator: string; decimalSeparator: string; fractionDigits: number } {\r\n const configuredFormat = this.currentNumberFormat().trim();\r\n if (this.isSupportedLocale(configuredFormat)) {\r\n return {\r\n kind: 'locale',\r\n locale: configuredFormat\r\n };\r\n }\r\n\r\n return this.parseNumberFormatPattern(configuredFormat);\r\n }\r\n\r\n private isSupportedLocale(value: string): boolean {\r\n if (!value) {\r\n return false;\r\n }\r\n\r\n try {\r\n return Intl.NumberFormat.supportedLocalesOf([value]).length > 0;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n private parseNumberFormatPattern(value: string): {\r\n kind: 'pattern';\r\n groupSeparator: string;\r\n decimalSeparator: string;\r\n fractionDigits: number;\r\n } {\r\n const normalizedValue = value.trim();\r\n const lastDot = normalizedValue.lastIndexOf('.');\r\n const lastComma = normalizedValue.lastIndexOf(',');\r\n const decimalIndex = Math.max(lastDot, lastComma);\r\n const decimalSeparator = decimalIndex >= 0 ? normalizedValue[decimalIndex] : '.';\r\n const integerPart = decimalIndex >= 0 ? normalizedValue.slice(0, decimalIndex) : normalizedValue;\r\n const fractionPart = decimalIndex >= 0 ? normalizedValue.slice(decimalIndex + 1).replace(/[^\\d]/g, '') : '';\r\n const groupSeparatorMatch = integerPart.match(/[^\\d]/);\r\n\r\n return {\r\n kind: 'pattern',\r\n groupSeparator: groupSeparatorMatch?.[0] ?? '',\r\n decimalSeparator,\r\n fractionDigits: fractionPart.length\r\n };\r\n }\r\n\r\n private formatNumberWithPattern(\r\n value: number,\r\n pattern: { groupSeparator: string; decimalSeparator: string; fractionDigits: number }\r\n ): string {\r\n const sign = value < 0 ? '-' : '';\r\n const absoluteValue = Math.abs(value);\r\n const fixedValue = pattern.fractionDigits > 0\r\n ? absoluteValue.toFixed(pattern.fractionDigits)\r\n : Math.round(absoluteValue).toString();\r\n const [integerPart, fractionPart = ''] = fixedValue.split('.');\r\n const groupedInteger = pattern.groupSeparator\r\n ? integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, pattern.groupSeparator)\r\n : integerPart;\r\n const hasNonZeroFraction = fractionPart.replace(/0/g, '').length > 0;\r\n\r\n return pattern.fractionDigits > 0 && hasNonZeroFraction\r\n ? `${sign}${groupedInteger}${pattern.decimalSeparator}${fractionPart}`\r\n : `${sign}${groupedInteger}`;\r\n }\r\n\r\n private toZonedIsoDateTime(\r\n year: number,\r\n month: number,\r\n day: number,\r\n hour: number,\r\n minute: number,\r\n second: number,\r\n fraction: string\r\n ): string | null {\r\n const baseUtc = Date.UTC(year, month - 1, day, hour, minute, second);\r\n let candidate = new Date(baseUtc);\r\n for (let attempt = 0; attempt < 3; attempt += 1) {\r\n const offsetMinutes = this.readTimeZoneOffsetMinutes(candidate, this.currentTimeZone());\r\n const nextCandidate = new Date(baseUtc - offsetMinutes * 60_000);\r\n if (nextCandidate.getTime() === candidate.getTime()) {\r\n break;\r\n }\r\n\r\n candidate = nextCandidate;\r\n }\r\n\r\n if (Number.isNaN(candidate.getTime())) {\r\n return null;\r\n }\r\n\r\n const offsetMinutes = this.readTimeZoneOffsetMinutes(candidate, this.currentTimeZone());\r\n return `${this.toIsoDate(year, month, day)}T${`${hour}`.padStart(2, '0')}:${`${minute}`.padStart(2, '0')}:${`${second}`.padStart(2, '0')}${fraction || ''}${this.formatOffsetMinutes(offsetMinutes)}`;\r\n }\r\n\r\n private normalizeTimeParts(\r\n hourText: string,\r\n minuteText: string,\r\n secondText?: string,\r\n fractionText?: string\r\n ): string | null {\r\n const hour = Number(hourText);\r\n const minute = Number(minuteText);\r\n const second = secondText ? Number(secondText) : null;\r\n if (hour < 0 || hour > 23 || minute < 0 || minute > 59 || (second !== null && (second < 0 || second > 59))) {\r\n return null;\r\n }\r\n\r\n const normalizedHour = `${hour}`.padStart(2, '0');\r\n const normalizedMinute = `${minute}`.padStart(2, '0');\r\n if (second === null) {\r\n return `${normalizedHour}:${normalizedMinute}`;\r\n }\r\n\r\n return `${normalizedHour}:${normalizedMinute}:${`${second}`.padStart(2, '0')}${fractionText ?? ''}`;\r\n }\r\n\r\n private formatOffsetMinutes(offsetMinutes: number): string {\r\n const sign = offsetMinutes >= 0 ? '+' : '-';\r\n const absoluteMinutes = Math.abs(offsetMinutes);\r\n const hours = Math.floor(absoluteMinutes / 60);\r\n const minutes = absoluteMinutes % 60;\r\n return `${sign}${`${hours}`.padStart(2, '0')}:${`${minutes}`.padStart(2, '0')}`;\r\n }\r\n\r\n private readZonedDateTimeParts(date: Date, timeZone: string): {\r\n year: number;\r\n month: number;\r\n day: number;\r\n hour: number;\r\n minute: number;\r\n second: number;\r\n } {\r\n const formatter = new Intl.DateTimeFormat('en-CA', {\r\n timeZone,\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n second: '2-digit',\r\n hourCycle: 'h23'\r\n });\r\n const parts = formatter.formatToParts(date);\r\n return {\r\n year: Number(parts.find((part) => part.type === 'year')?.value ?? '0'),\r\n month: Number(parts.find((part) => part.type === 'month')?.value ?? '0'),\r\n day: Number(parts.find((part) => part.type === 'day')?.value ?? '0'),\r\n hour: Number(parts.find((part) => part.type === 'hour')?.value ?? '0'),\r\n minute: Number(parts.find((part) => part.type === 'minute')?.value ?? '0'),\r\n second: Number(parts.find((part) => part.type === 'second')?.value ?? '0')\r\n };\r\n }\r\n\r\n private parseInvariantNumber(value: string): number | null {\r\n const normalizedValue = value.trim();\r\n if (!/^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/.test(normalizedValue)) {\r\n return null;\r\n }\r\n\r\n const parsedValue = Number(normalizedValue);\r\n return Number.isFinite(parsedValue) ? parsedValue : null;\r\n }\r\n\r\n /**\r\n * Parses API date-time values as instants. .NET values without an explicit offset are\r\n * treated as UTC so their display does not depend on the browser or operating-system zone.\r\n */\r\n private parseStoredDateTime(value: string): Date | null {\r\n const normalizedValue = value.trim();\r\n const localDateTimeMatch = normalizedValue.match(\r\n /^(\\d{4}-\\d{2}-\\d{2})[T\\s](\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,7})?)?)$/\r\n );\r\n const instantValue = localDateTimeMatch\r\n ? `${localDateTimeMatch[1]}T${localDateTimeMatch[2]}Z`\r\n : normalizedValue;\r\n const parsed = new Date(instantValue);\r\n return Number.isNaN(parsed.getTime()) ? null : parsed;\r\n }\r\n\r\n private readTimeZoneOffsetMinutes(date: Date, timeZone: string): number {\r\n const formatter = new Intl.DateTimeFormat('en-US', {\r\n timeZone,\r\n timeZoneName: 'shortOffset',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n });\r\n const offsetText = formatter.formatToParts(date).find((part) => part.type === 'timeZoneName')?.value ?? 'GMT';\r\n if (offsetText === 'GMT' || offsetText === 'UTC') {\r\n return 0;\r\n }\r\n\r\n const match = offsetText.match(/GMT([+-])(\\d{1,2})(?::?(\\d{2}))?/i);\r\n if (!match) {\r\n return 0;\r\n }\r\n\r\n const sign = match[1] === '-' ? -1 : 1;\r\n const hours = Number(match[2]);\r\n const minutes = Number(match[3] ?? '0');\r\n return sign * (hours * 60 + minutes);\r\n }\r\n\r\n private normalizeEntityChangeNotification(change: ChillEntityChangeNotification): ChillEntityChangeNotification {\r\n return {\r\n chillType: change.chillType?.trim() ?? '',\r\n guid: change.guid?.trim() ?? '',\r\n action: change.action\r\n };\r\n }\r\n\r\n private normalizeAuthUsers(response: unknown): AuthUser[] {\r\n return Array.isArray(response)\r\n ? response.filter((item): item is JsonObject => this.isJsonObject(item)).map((item) => this.normalizeAuthUser(item))\r\n : [];\r\n }\r\n\r\n private buildSetAuthUserRequest(\r\n response: AuthUserDetailsResponse,\r\n overrides?: Partial<UpdateAuthUserRequest>,\r\n mutateRoleGuids?: (roleGuids: string[]) => string[],\r\n mutatePermissions?: (permissions: ChillSharpAuthPermissionRuleItem[]) => ChillSharpAuthPermissionRuleItem[]\r\n ): SetAuthUserRequest {\r\n const roleGuids = response.roles\r\n .map((role: { guid?: string | null }) => role.guid?.trim() ?? '')\r\n .filter((guid: string) => guid.length > 0);\r\n const permissions = response.permissions.map((permission: ChillSharpAuthPermissionRuleItem) => this.toAuthPermissionRuleItem(permission));\r\n\r\n return {\r\n guid: response.guid,\r\n externalId: overrides?.externalId ?? response.externalId,\r\n userName: overrides?.userName ?? response.userName,\r\n displayName: overrides?.displayName ?? response.displayName,\r\n displayCultureName: overrides?.displayCultureName ?? response.displayCultureName,\r\n displayTimeZone: overrides?.displayTimeZone ?? response.displayTimeZone,\r\n displayDateFormat: overrides?.displayDateFormat ?? response.displayDateFormat,\r\n displayNumberFormat: overrides?.displayNumberFormat ?? response.displayNumberFormat,\r\n preferredTheme: overrides?.preferredTheme\r\n ?? this.readJsonString(response, 'PreferredTheme')\r\n ?? this.readJsonString(response, 'preferredTheme')\r\n ?? '',\r\n isActive: overrides?.isActive ?? response.isActive,\r\n canManagePermissions: overrides?.canManagePermissions ?? response.canManagePermissions,\r\n canManageSchema: overrides?.canManageSchema ?? response.canManageSchema,\r\n menuHierarchy: overrides?.menuHierarchy ?? response.menuHierarchy ?? '',\r\n roleGuids: mutateRoleGuids ? mutateRoleGuids(roleGuids) : roleGuids,\r\n permissions: mutatePermissions ? mutatePermissions(permissions) : permissions\r\n };\r\n }\r\n\r\n private readStoredUserPreferences(): StoredUserPreferences {\r\n const rawPreferences = globalThis.localStorage?.getItem(USER_PREFERENCES_STORAGE_KEY);\r\n if (!rawPreferences) {\r\n return this.createEmptyUserPreferences();\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(rawPreferences) as Partial<StoredUserPreferencesEnvelope>;\r\n const userId = this.sessionState()?.userId.trim() ?? '';\r\n if (!userId || parsed.userId?.trim() !== userId || !parsed.preferences) {\r\n globalThis.localStorage?.removeItem(USER_PREFERENCES_STORAGE_KEY);\r\n return this.createEmptyUserPreferences();\r\n }\r\n\r\n const preferences = parsed.preferences;\r\n return {\r\n displayCultureName: preferences.displayCultureName?.trim() ?? '',\r\n displayTimeZone: preferences.displayTimeZone?.trim() ?? '',\r\n displayDateFormat: preferences.displayDateFormat?.trim() ?? '',\r\n displayNumberFormat: preferences.displayNumberFormat?.trim() ?? '',\r\n preferredTheme: preferences.preferredTheme?.trim() ?? ''\r\n };\r\n } catch {\r\n globalThis.localStorage?.removeItem(USER_PREFERENCES_STORAGE_KEY);\r\n return this.createEmptyUserPreferences();\r\n }\r\n }\r\n\r\n private createEmptyUserPreferences(): StoredUserPreferences {\r\n return {\r\n displayCultureName: '',\r\n displayTimeZone: '',\r\n displayDateFormat: '',\r\n displayNumberFormat: '',\r\n preferredTheme: ''\r\n };\r\n }\r\n\r\n private persistUserPreferences(preferences: StoredUserPreferences): void {\r\n const previousPreferences = this.userPreferencesState();\r\n const previousCultureName = this.userPreferencesState().displayCultureName.trim().toLowerCase();\r\n const nextCultureName = preferences.displayCultureName.trim().toLowerCase();\r\n const userId = this.sessionState()?.userId.trim() ?? '';\r\n if (userId) {\r\n const stored: StoredUserPreferencesEnvelope = { userId, preferences };\r\n globalThis.localStorage?.setItem(USER_PREFERENCES_STORAGE_KEY, JSON.stringify(stored));\r\n } else {\r\n globalThis.localStorage?.removeItem(USER_PREFERENCES_STORAGE_KEY);\r\n }\r\n this.userPreferencesState.set(preferences);\r\n this.syncClientCulture(preferences.displayCultureName || this.readBrowserCultureName());\r\n this.logUserPreferencesUpdate(previousPreferences, preferences);\r\n if (previousCultureName !== nextCultureName) {\r\n this.textCache.clear();\r\n this.pendingTextRequests.clear();\r\n this.inFlightTextRequests.clear();\r\n this.pendingTextResolvers.clear();\r\n this.textVersion.update((current) => current + 1);\r\n }\r\n }\r\n\r\n private toStoredUserPreferences(user: ChillUserPreferences | AuthUserDetailsResponse): StoredUserPreferences {\r\n return {\r\n displayCultureName: this.readJsonString(user, 'DisplayCultureName') ?? user.displayCultureName ?? '',\r\n displayTimeZone: this.readJsonString(user, 'DisplayTimeZone') ?? user.displayTimeZone ?? '',\r\n displayDateFormat: this.readJsonString(user, 'DisplayDateFormat') ?? user.displayDateFormat ?? '',\r\n displayNumberFormat: this.readJsonString(user, 'DisplayNumberFormat') ?? user.displayNumberFormat ?? '',\r\n preferredTheme: this.readJsonString(user, 'PreferredTheme')\r\n ?? this.readJsonString(user, 'preferredTheme')\r\n ?? ''\r\n };\r\n }\r\n\r\n private readBrowserTimeZone(): string {\r\n return Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\r\n }\r\n\r\n private readBrowserCultureName(): string {\r\n const languages = globalThis.navigator?.languages;\r\n const browserCultureName = languages?.find((language) => typeof language === 'string' && language.trim())\r\n ?? globalThis.navigator?.language\r\n ?? '';\r\n return browserCultureName.trim() || CHILL_CULTURE;\r\n }\r\n\r\n private readBrowserDateFormat(): string {\r\n try {\r\n const parts = new Intl.DateTimeFormat(this.readBrowserCultureName(), {\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n numberingSystem: 'latn'\r\n }).formatToParts(new Date(Date.UTC(2006, 4, 4)));\r\n const format = parts.map((part) => {\r\n switch (part.type) {\r\n case 'year':\r\n return 'YYYY';\r\n case 'month':\r\n return 'MM';\r\n case 'day':\r\n return 'DD';\r\n default:\r\n return part.value;\r\n }\r\n }).join('').trim();\r\n return format || this.defaultDateFormatForCulture(this.readBrowserCultureName());\r\n } catch {\r\n return this.defaultDateFormatForCulture(this.readBrowserCultureName());\r\n }\r\n }\r\n\r\n private isSupportedTimeZone(value: string): boolean {\r\n if (!value) {\r\n return false;\r\n }\r\n\r\n try {\r\n new Intl.DateTimeFormat('en-US', { timeZone: value });\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n private toRegisterAuthIdentityRequest(request: RegisterRequest): RegisterAuthIdentityRequest {\r\n return {\r\n userName: request.UserName,\r\n email: request.Email?.trim() || null,\r\n password: request.Password,\r\n displayName: request.DisplayName,\r\n displayCultureName: request.DisplayCultureName,\r\n displayTimeZone: request.DisplayTimeZone,\r\n createChillAuthUser: request.CreateChillAuthUser\r\n };\r\n }\r\n\r\n private toLoginAuthIdentityRequest(request: LoginRequest): LoginAuthIdentityRequest {\r\n return {\r\n userNameOrEmail: request.UserNameOrEmail,\r\n password: request.Password\r\n };\r\n }\r\n\r\n private toRequestPasswordResetRequest(request: RequestPasswordResetRequest): ChillSharpRequestPasswordResetRequest {\r\n return {\r\n userNameOrEmail: request.UserNameOrEmail\r\n };\r\n }\r\n\r\n private toResetPasswordRequest(request: ResetPasswordRequest): ChillSharpResetPasswordRequest {\r\n return {\r\n userId: request.UserId,\r\n resetToken: request.ResetToken,\r\n newPassword: request.NewPassword\r\n };\r\n }\r\n\r\n private buildSetAuthRoleRequest(\r\n response: AuthRoleDetailsResponse | null,\r\n overrides?: CreateAuthRoleRequest | UpdateAuthRoleRequest,\r\n mutateUserGuids?: (userGuids: string[]) => string[],\r\n mutatePermissions?: (permissions: ChillSharpAuthPermissionRuleItem[]) => ChillSharpAuthPermissionRuleItem[]\r\n ): SetAuthRoleRequest {\r\n const userGuids = response?.users\r\n .map((user: { guid?: string | null }) => user.guid?.trim() ?? '')\r\n .filter((guid: string) => guid.length > 0) ?? [];\r\n const permissions = response?.permissions.map((permission: ChillSharpAuthPermissionRuleItem) => this.toAuthPermissionRuleItem(permission)) ?? [];\r\n\r\n return {\r\n guid: response?.guid ?? null,\r\n name: overrides?.name ?? response?.name ?? '',\r\n description: overrides?.description ?? response?.description ?? '',\r\n isActive: overrides?.isActive ?? response?.isActive ?? true,\r\n menuHierarchy: response?.menuHierarchy ?? '',\r\n userGuids: mutateUserGuids ? mutateUserGuids(userGuids) : userGuids,\r\n permissions: mutatePermissions ? mutatePermissions(permissions) : permissions\r\n };\r\n }\r\n\r\n private normalizeMenuItem(response: ChillDtoMenuItem): AppChillMenuItem {\r\n return {\r\n guid: response.guid?.trim() ?? '',\r\n positionNo: Number.isFinite(response.positionNo) ? response.positionNo : 0,\r\n title: response.title?.trim() ?? '',\r\n description: response.description?.trim() || null,\r\n parent: response.parent ? {\r\n guid: response.parent.guid?.trim() ?? '',\r\n positionNo: Number.isFinite(response.parent.positionNo) ? response.parent.positionNo : 0,\r\n title: response.parent.title?.trim() ?? '',\r\n description: response.parent.description?.trim() || null,\r\n parent: null,\r\n componentName: response.parent.componentName?.trim() ?? '',\r\n componentConfigurationJson: response.parent.componentConfigurationJson?.trim() || null,\r\n menuHierarchy: response.parent.menuHierarchy?.trim() ?? ''\r\n } : null,\r\n componentName: response.componentName?.trim() ?? '',\r\n componentConfigurationJson: response.componentConfigurationJson?.trim() || null,\r\n menuHierarchy: response.menuHierarchy?.trim() ?? ''\r\n };\r\n }\r\n\r\n private toMenuDto(menuItem: AppChillMenuItem): ChillDtoMenuItem {\r\n return {\r\n guid: menuItem.guid?.trim() ?? '',\r\n positionNo: Number.isFinite(menuItem.positionNo) ? menuItem.positionNo : 0,\r\n title: menuItem.title?.trim() ?? '',\r\n description: menuItem.description?.trim() || null,\r\n parent: menuItem.parent ? {\r\n guid: menuItem.parent.guid?.trim() ?? '',\r\n positionNo: Number.isFinite(menuItem.parent.positionNo) ? menuItem.parent.positionNo : 0,\r\n title: menuItem.parent.title?.trim() ?? '',\r\n description: menuItem.parent.description?.trim() || null,\r\n parent: null,\r\n componentName: menuItem.parent.componentName?.trim() ?? '',\r\n componentConfigurationJson: menuItem.parent.componentConfigurationJson?.trim() || null,\r\n menuHierarchy: menuItem.parent.menuHierarchy?.trim() ?? ''\r\n } : null,\r\n componentName: menuItem.componentName?.trim() ?? '',\r\n componentConfigurationJson: menuItem.componentConfigurationJson?.trim() || null,\r\n menuHierarchy: menuItem.menuHierarchy?.trim() ?? ''\r\n };\r\n }\r\n\r\n private normalizeEntityOptions(response: ChillDtoEntityOptions): ChillEntityOptions {\r\n const responseObject = this.isJsonObject(response) ? response : {};\r\n return {\r\n chillType: response.chillType?.trim() ?? '',\r\n checksumEnabled: !!response.checksumEnabled,\r\n handleAttachments: !!response.handleAttachments,\r\n labelFormatString: response.labelFormatString?.trim() || null,\r\n shortLabelFormatString: response.shortLabelFormatString?.trim() || null,\r\n fullTextContentFormatString: response.fullTextContentFormatString?.trim() || null,\r\n changeLogEnabled: !!response.changeLogEnabled,\r\n enableMCP: this.readJsonBoolean(responseObject, 'EnableMCP'),\r\n mcpDescription: this.readJsonString(responseObject, 'MCPDescription') ?? null\r\n };\r\n }\r\n\r\n private toEntityOptionsDto(entityOptions: ChillEntityOptions): ChillDtoEntityOptions & { enableMCP: boolean; mcpDescription: string | null } {\r\n return {\r\n chillType: entityOptions.chillType?.trim() ?? '',\r\n checksumEnabled: !!entityOptions.checksumEnabled,\r\n handleAttachments: !!entityOptions.handleAttachments,\r\n labelFormatString: entityOptions.labelFormatString?.trim() || null,\r\n shortLabelFormatString: entityOptions.shortLabelFormatString?.trim() || null,\r\n fullTextContentFormatString: entityOptions.fullTextContentFormatString?.trim() || null,\r\n changeLogEnabled: !!entityOptions.changeLogEnabled,\r\n enableMCP: !!entityOptions.enableMCP,\r\n mcpDescription: entityOptions.mcpDescription?.trim() || null\r\n };\r\n }\r\n\r\n private normalizeSchema(response: unknown): ChillSchema | null {\r\n if (!response || !this.isJsonObject(response)) {\r\n return null;\r\n }\r\n\r\n return {\r\n ...response,\r\n chillType: this.readJsonString(response, 'ChillType') ?? '',\r\n chillViewCode: this.readJsonString(response, 'ChillViewCode') ?? '',\r\n displayName: this.readJsonString(response, 'DisplayName') ?? '',\r\n handleAttachments: this.readJsonBoolean(response, 'HandleAttachments'),\r\n enableMCP: this.readJsonBoolean(response, 'EnableMCP'),\r\n mcpDescription: this.readJsonString(response, 'MCPDescription') ?? null,\r\n queryRelatedChillType: this.readJsonString(response, 'QueryRelatedChillType') ?? undefined,\r\n metadata: this.normalizeMetadataRecord(response['metadata'] ?? response['Metadata']),\r\n relations: this.normalizeSchemaRelations(response['relations'] ?? response['Relations']),\r\n properties: this.normalizeSchemaProperties(response['properties'] ?? response['Properties'])\r\n };\r\n }\r\n\r\n private normalizeSchemaRelations(value: unknown): ChillSchemaRelation[] {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n return value\r\n .filter((relation): relation is JsonObject => this.isJsonObject(relation))\r\n .map((relation) => ({\r\n ...relation,\r\n chillType: this.readJsonString(relation, 'ChillType') ?? '',\r\n chillQuery: this.readJsonString(relation, 'ChillQuery') ?? '',\r\n fixedValues: this.normalizeJsonRecord(relation['fixedValues'] ?? relation['FixedValues']),\r\n fixedQueryValues: this.normalizeJsonRecord(relation['fixedQueryValues'] ?? relation['FixedQueryValues']),\r\n relationLabel: this.normalizeSchemaRelationLabel(relation['relationLabel'] ?? relation['RelationLabel'])\r\n }));\r\n }\r\n\r\n private normalizeSchemaRelationLabel(value: unknown): ChillSchemaRelationLabel | null {\r\n if (!this.isJsonObject(value)) {\r\n return null;\r\n }\r\n\r\n return {\r\n labelGuid: this.readJsonString(value, 'LabelGuid') ?? null,\r\n primaryDefaultText: this.readJsonString(value, 'PrimaryDefaultText') ?? '',\r\n secondaryDefaultText: this.readJsonString(value, 'SecondaryDefaultText') ?? ''\r\n };\r\n }\r\n\r\n private normalizeSchemaProperties(value: unknown): ChillPropertySchema[] {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n return value\r\n .filter((property): property is ChillPropertySchema & JsonObject => this.isJsonObject(property))\r\n .map((property) => ({\r\n ...property,\r\n name: this.readJsonString(property, 'Name') ?? '',\r\n displayName: this.readJsonString(property, 'DisplayName') ?? property.name ?? '',\r\n propertyType: this.readJsonNumber(property, 'PropertyType') ?? property.propertyType ?? CHILL_PROPERTY_TYPE.Unknown,\r\n simplePropertyType: this.readJsonString(property, 'SimplePropertyType') ?? property.simplePropertyType ?? '',\r\n mcpDescription: this.readJsonString(property, 'MCPDescription') ?? property.mcpDescription ?? '',\r\n isNullable: this.readJsonBoolean(property, 'IsNullable'),\r\n isReadOnly: this.readJsonBoolean(property, 'IsReadOnly'),\r\n chillType: this.readJsonString(property, 'ChillType') ?? property.chillType ?? null,\r\n referenceChillType: this.readJsonString(property, 'ReferenceChillType') ?? property.referenceChillType ?? null,\r\n referenceChillTypeQuery: this.readJsonString(property, 'ReferenceChillTypeQuery') ?? property.referenceChillTypeQuery ?? null,\r\n lookupQueryValues: this.readJsonString(property, 'LookupQueryValues') ?? property.lookupQueryValues ?? null,\r\n metadata: this.normalizeMetadataRecord(property['metadata'] ?? property['Metadata'])\r\n }));\r\n }\r\n\r\n private toSchemaRelationDtos(relations: ChillSchemaRelation[] | null | undefined): ChillDtoSchemaRelation[] {\r\n if (!Array.isArray(relations)) {\r\n return [];\r\n }\r\n\r\n return relations.map((relation): ChillDtoSchemaRelation => ({\r\n chillType: relation.chillType?.trim() ?? '',\r\n chillQuery: relation.chillQuery?.trim() ?? '',\r\n fixedValues: this.serializeStringRecord(relation.fixedValues),\r\n fixedQueryValues: this.serializeStringRecord(relation.fixedQueryValues),\r\n relationLabel: {\r\n labelGuid: relation.relationLabel?.labelGuid?.trim() ?? null,\r\n primaryDefaultText: relation.relationLabel?.primaryDefaultText?.trim() ?? '',\r\n secondaryDefaultText: relation.relationLabel?.secondaryDefaultText?.trim() ?? ''\r\n }\r\n }));\r\n }\r\n\r\n private normalizeMetadataRecord(value: unknown): ChillMetadataRecord {\r\n if (!this.isJsonObject(value)) {\r\n return {};\r\n }\r\n\r\n return Object.fromEntries(\r\n Object.entries(value).map(([key, entryValue]) => {\r\n if (typeof entryValue === 'string') {\r\n return [key, entryValue];\r\n }\r\n\r\n if (typeof entryValue === 'number' || typeof entryValue === 'boolean') {\r\n return [key, String(entryValue)];\r\n }\r\n\r\n if (entryValue === null) {\r\n return [key, ''];\r\n }\r\n\r\n return [key, entryValue as JsonValue];\r\n })\r\n );\r\n }\r\n\r\n private normalizeJsonRecord(value: unknown): Record<string, JsonValue> {\r\n if (!this.isJsonObject(value)) {\r\n return {};\r\n }\r\n\r\n return Object.fromEntries(\r\n Object.entries(value).map(([key, entryValue]) => [key, entryValue as JsonValue])\r\n );\r\n }\r\n\r\n private toAuthPermissionRuleItem(\r\n response: CreateAuthPermissionRuleRequest | JsonObject\r\n ): ChillSharpAuthPermissionRuleItem {\r\n const source = response as JsonObject;\r\n return {\r\n guid: this.readJsonString(source, 'Guid') ?? null,\r\n effect: this.readPermissionEffect(source),\r\n action: this.readPermissionAction(source),\r\n scope: this.readPermissionScope(source),\r\n module: this.readJsonString(source, 'Module') ?? '',\r\n entityName: this.readJsonString(source, 'EntityName') ?? null,\r\n propertyName: this.readJsonString(source, 'PropertyName') ?? null,\r\n appliesToAllProperties: this.readJsonBoolean(source, 'AppliesToAllProperties'),\r\n description: this.readJsonString(source, 'Description') ?? ''\r\n };\r\n }\r\n\r\n private getLatestAuthPermissionRule(response: unknown, owner?: PermissionRuleOwner): AuthPermissionRule {\r\n const rules = this.normalizeAuthPermissionRules(response, owner);\r\n if (rules.length === 0) {\r\n throw new Error('Auth permission rule was not returned by the server.');\r\n }\r\n\r\n return rules[rules.length - 1];\r\n }\r\n\r\n private normalizeGuidList(values: string[]): string[] {\r\n return [...new Set(\r\n values\r\n .map((value) => value.trim())\r\n .filter((value) => value.length > 0)\r\n )];\r\n }\r\n\r\n private normalizeStringList(values: unknown): string[] {\r\n return Array.isArray(values)\r\n ? [...new Set(\r\n values\r\n .filter((value): value is string => typeof value === 'string')\r\n .map((value) => value.trim())\r\n .filter((value) => value.length > 0)\r\n )]\r\n : [];\r\n }\r\n\r\n private normalizeAuthUser(response: JsonObject): AuthUser {\r\n return {\r\n guid: this.readJsonString(response, 'Guid') ?? '',\r\n externalId: this.readJsonString(response, 'ExternalId') ?? '',\r\n userName: this.readJsonString(response, 'UserName') ?? '',\r\n displayName: this.readJsonString(response, 'DisplayName') ?? '',\r\n displayCultureName: this.readJsonString(response, 'DisplayCultureName') ?? '',\r\n displayTimeZone: this.readJsonString(response, 'DisplayTimeZone') ?? '',\r\n displayDateFormat: this.readJsonString(response, 'DisplayDateFormat') ?? '',\r\n displayNumberFormat: this.readJsonString(response, 'DisplayNumberFormat') ?? '',\r\n isActive: this.readJsonBoolean(response, 'IsActive'),\r\n canManagePermissions: this.readJsonBoolean(response, 'CanManagePermissions'),\r\n canManageSchema: this.readJsonBoolean(response, 'CanManageSchema'),\r\n menuHierarchy: this.readJsonString(response, 'MenuHierarchy') ?? ''\r\n };\r\n }\r\n\r\n private normalizeAuthRoles(response: unknown): AuthRole[] {\r\n return Array.isArray(response)\r\n ? response.filter((item): item is JsonObject => this.isJsonObject(item)).map((item) => this.normalizeAuthRole(item))\r\n : [];\r\n }\r\n\r\n private normalizeAuthRole(response: JsonObject): AuthRole {\r\n return {\r\n guid: this.readJsonString(response, 'Guid') ?? '',\r\n name: this.readJsonString(response, 'Name') ?? '',\r\n description: this.readJsonString(response, 'Description') ?? '',\r\n isActive: this.readJsonBoolean(response, 'IsActive')\r\n };\r\n }\r\n\r\n private normalizeAuthPermissionRules(response: unknown, owner?: PermissionRuleOwner): AuthPermissionRule[] {\r\n return Array.isArray(response)\r\n ? response\r\n .filter((item): item is JsonObject => this.isJsonObject(item))\r\n .map((item) => this.normalizeAuthPermissionRule(item, owner))\r\n : [];\r\n }\r\n\r\n private normalizeAuthPermissionRule(response: JsonObject, owner?: PermissionRuleOwner): AuthPermissionRule {\r\n const rule = {\r\n guid: this.readJsonString(response, 'Guid') ?? '',\r\n userGuid: this.readJsonString(response, 'UserGuid') ?? (owner?.kind === 'user' ? owner.guid : ''),\r\n roleGuid: this.readJsonString(response, 'RoleGuid') ?? (owner?.kind === 'role' ? owner.guid : ''),\r\n effect: this.readPermissionEffect(response),\r\n action: this.readPermissionAction(response),\r\n scope: this.readPermissionScope(response),\r\n module: this.readJsonString(response, 'Module') ?? '',\r\n entityName: this.readJsonString(response, 'EntityName') ?? '',\r\n propertyName: this.readJsonString(response, 'PropertyName') ?? '',\r\n appliesToAllProperties: this.readJsonBoolean(response, 'AppliesToAllProperties'),\r\n description: this.readJsonString(response, 'Description') ?? '',\r\n createdUtc: this.readJsonString(response, 'CreatedUtc') ?? ''\r\n };\r\n\r\n const ownerKind = owner?.kind ?? (rule.userGuid ? 'user' : (rule.roleGuid ? 'role' : null));\r\n const ownerGuid = owner?.guid ?? rule.userGuid ?? rule.roleGuid ?? '';\r\n if (rule.guid && ownerKind && ownerGuid) {\r\n this.permissionRuleOwners.set(rule.guid, {\r\n kind: ownerKind,\r\n guid: ownerGuid\r\n });\r\n }\r\n\r\n return rule;\r\n }\r\n\r\n private enqueueTextRequest(\r\n key: string,\r\n primaryDefaultText: string,\r\n secondaryDefaultText: string,\r\n fallbackText: string\r\n ): void {\r\n if (this.textCache.has(key) || this.pendingTextRequests.has(key) || this.inFlightTextRequests.has(key)) {\r\n return;\r\n }\r\n\r\n this.pendingTextRequests.set(key, {\r\n request: {\r\n labelGuid: key,\r\n cultureName: this.currentCultureName(),\r\n primaryCultureName: CHILL_PRIMARY_TEXT_CULTURE,\r\n primaryDefaultText: primaryDefaultText ?? '',\r\n secondaryCultureName: CHILL_SECONDARY_TEXT_CULTURE,\r\n secondaryDefaultText: secondaryDefaultText ?? ''\r\n },\r\n fallbackText\r\n });\r\n\r\n this.scheduleTextQueueFlush();\r\n }\r\n\r\n private scheduleTextQueueFlush(): void {\r\n if (this.textQueueHandle !== null) {\r\n return;\r\n }\r\n\r\n this.textQueueHandle = globalThis.setTimeout(() => {\r\n this.textQueueHandle = null;\r\n void this.flushTextQueue();\r\n }, TEXT_QUEUE_DELAY_MS);\r\n }\r\n\r\n private async flushTextQueue(): Promise<void> {\r\n const entries = Array.from(this.pendingTextRequests.entries());\r\n if (entries.length === 0) {\r\n return;\r\n }\r\n\r\n this.pendingTextRequests.clear();\r\n entries.forEach(([key]) => this.inFlightTextRequests.add(key));\r\n\r\n try {\r\n const responses = await firstValueFrom(this.chill.getTexts(entries.map(([, entry]) => entry.request)));\r\n entries.forEach(([key, entry], index) => {\r\n const translatedText = this.readTextResponseValue(responses[index], entry.fallbackText);\r\n this.textCache.set(key, translatedText);\r\n this.inFlightTextRequests.delete(key);\r\n this.resolvePendingTextRequest(key, translatedText);\r\n });\r\n } catch (error) {\r\n this.logDetailedError('getTexts()', error);\r\n entries.forEach(([key, entry]) => {\r\n this.textCache.set(key, entry.fallbackText);\r\n this.inFlightTextRequests.delete(key);\r\n this.resolvePendingTextRequest(key, entry.fallbackText);\r\n });\r\n }\r\n\r\n this.textVersion.update((value) => value + 1);\r\n }\r\n\r\n private resolvePendingTextRequest(key: string, value: string): void {\r\n const resolvers = this.pendingTextResolvers.get(key);\r\n if (!resolvers) {\r\n return;\r\n }\r\n\r\n this.pendingTextResolvers.delete(key);\r\n resolvers.forEach((resolve) => resolve(value));\r\n }\r\n\r\n private readTextResponseValue(response: JsonObject | null | undefined, fallbackText: string): string {\r\n const value = response?.['Value'];\r\n return typeof value === 'string' && value.trim() ? value.trim() : fallbackText;\r\n }\r\n\r\n private normalizeLabelGuid(labelGuid: string): string {\r\n return labelGuid.trim().toUpperCase();\r\n }\r\n\r\n private selectDefaultText(primaryDefaultText: string, secondaryDefaultText: string): string {\r\n const primaryText = primaryDefaultText.trim();\r\n const secondaryText = secondaryDefaultText.trim();\r\n\r\n const cultureName = this.currentCultureName();\r\n if (this.culturesMatch(cultureName, CHILL_SECONDARY_TEXT_CULTURE) && secondaryText) {\r\n return secondaryText;\r\n }\r\n\r\n if (this.culturesMatch(cultureName, CHILL_PRIMARY_TEXT_CULTURE) && primaryText) {\r\n return primaryText;\r\n }\r\n\r\n return primaryText || secondaryText;\r\n }\r\n\r\n private culturesMatch(left: string, right: string): boolean {\r\n return left.trim().toLowerCase() === right.trim().toLowerCase();\r\n }\r\n\r\n private logUserPreferencesUpdate(previous: StoredUserPreferences, next: StoredUserPreferences): void {\r\n console.log('[ChillService] User preferences updated', {\r\n previous,\r\n next,\r\n changed: {\r\n displayCultureName: previous.displayCultureName !== next.displayCultureName,\r\n displayTimeZone: previous.displayTimeZone !== next.displayTimeZone,\r\n displayDateFormat: previous.displayDateFormat !== next.displayDateFormat,\r\n displayNumberFormat: previous.displayNumberFormat !== next.displayNumberFormat\r\n }\r\n });\r\n }\r\n\r\n private logStartupDiagnostics(): void {\r\n console.log('[ChillService] Startup', {\r\n baseUrl: CHILL_BASE_URL,\r\n culture: this.currentCultureName(),\r\n hasStoredSession: this.sessionState() !== null\r\n });\r\n\r\n try {\r\n const version = this.version();\r\n if (version === this.T('1EB1A234-D374-48B1-9E14-C9A7BAE1C31D', 'Client version is unavailable on the current ChillSharp instance.', 'La versione del client non è disponibile nell\\'istanza corrente di ChillSharp.')) {\r\n console.warn('[ChillService] Client version unavailable', {\r\n reason: version\r\n });\r\n } else {\r\n console.log('[ChillService] Client version', version);\r\n }\r\n } catch (error) {\r\n this.logDetailedError('version()', error);\r\n }\r\n\r\n this.test().subscribe({\r\n next: (response: string) => {\r\n console.log('[ChillService] test() success', {\r\n response: response.trim()\r\n });\r\n },\r\n error: (error: unknown) => {\r\n this.logDetailedError('test()', error);\r\n }\r\n });\r\n }\r\n\r\n private buildApiUrl(relativeUrl: string): string {\r\n const normalizedBaseUrl = CHILL_BASE_URL.trim().replace(/\\/+$/, '');\r\n const chillSuffix = '/chill';\r\n const apiBaseUrl = normalizedBaseUrl.toLowerCase().endsWith(chillSuffix)\r\n ? normalizedBaseUrl.slice(0, -chillSuffix.length)\r\n : normalizedBaseUrl;\r\n\r\n return `${apiBaseUrl}/${relativeUrl.replace(/^\\/+/, '')}`;\r\n }\r\n\r\n private serializeMetadataRecord(metadata: ChillMetadataRecord | undefined): Record<string, string> {\r\n if (!metadata) {\r\n return {};\r\n }\r\n\r\n return Object.fromEntries(\r\n Object.entries(metadata).flatMap(([key, value]) => {\r\n if (value === undefined) {\r\n return [];\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return [[key, value]];\r\n }\r\n\r\n if (typeof value === 'number' || typeof value === 'boolean') {\r\n return [[key, String(value)]];\r\n }\r\n\r\n if (value === null) {\r\n return [[key, '']];\r\n }\r\n\r\n try {\r\n return [[key, JSON.stringify(value)]];\r\n } catch {\r\n return [[key, '']];\r\n }\r\n })\r\n );\r\n }\r\n\r\n private serializeStringRecord(record: Record<string, JsonValue> | undefined): Record<string, string> {\r\n if (!record) {\r\n return {};\r\n }\r\n\r\n return Object.fromEntries(\r\n Object.entries(record).flatMap(([key, value]) => {\r\n if (value === undefined) {\r\n return [];\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return [[key, value]];\r\n }\r\n\r\n if (typeof value === 'number' || typeof value === 'boolean') {\r\n return [[key, String(value)]];\r\n }\r\n\r\n if (value === null) {\r\n return [[key, '']];\r\n }\r\n\r\n try {\r\n return [[key, JSON.stringify(value)]];\r\n } catch {\r\n return [[key, '']];\r\n }\r\n })\r\n );\r\n }\r\n\r\n private rethrowFriendlyError(error: unknown) {\r\n if (error instanceof ChillSharpClientError) {\r\n const message = this.readChillErrorMessage(error);\r\n return throwError(() => new Error(message));\r\n }\r\n\r\n return throwError(() => error);\r\n }\r\n\r\n private isNotFoundError(error: unknown): boolean {\r\n if (error instanceof ChillSharpClientError) {\r\n return error.statusCode === 404;\r\n }\r\n\r\n if (error instanceof Error) {\r\n return error.message.trim().toLowerCase() === 'not found';\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isUnauthorizedError(error: unknown): boolean {\r\n return error instanceof ChillSharpClientError && error.statusCode === 401;\r\n }\r\n\r\n private readChillErrorMessage(error: ChillSharpClientError): string {\r\n const responseText = error.responseText?.trim();\r\n if (!responseText) {\r\n return error.message;\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(responseText) as { title?: string; detail?: string; errors?: Record<string, string[]> };\r\n if (parsed.detail?.trim()) {\r\n return parsed.detail.trim();\r\n }\r\n\r\n const validationErrors = Object.values(parsed.errors ?? {})\r\n .flat()\r\n .filter((message) => message.trim().length > 0);\r\n\r\n if (validationErrors.length > 0) {\r\n return validationErrors.join(' ');\r\n }\r\n\r\n if (parsed.title?.trim()) {\r\n return parsed.title.trim();\r\n }\r\n } catch {\r\n return responseText;\r\n }\r\n\r\n return responseText;\r\n }\r\n\r\n private logDetailedError(context: string, error: unknown): void {\r\n if (error instanceof ChillSharpClientError) {\r\n const clientError = error as ChillSharpClientError & Error & { cause?: unknown };\r\n console.error(`[ChillService] ${context} failed`, {\r\n name: clientError.name,\r\n message: clientError.message,\r\n statusCode: clientError.statusCode,\r\n responseText: clientError.responseText,\r\n cause: clientError.cause,\r\n stack: clientError.stack\r\n });\r\n return;\r\n }\r\n\r\n if (error instanceof Error) {\r\n console.error(`[ChillService] ${context} failed`, {\r\n name: error.name,\r\n message: error.message,\r\n cause: (error as Error & { cause?: unknown }).cause,\r\n stack: error.stack\r\n });\r\n return;\r\n }\r\n\r\n console.error(`[ChillService] ${context} failed`, error);\r\n }\r\n}\r\n","import { Injectable, computed, effect, inject, signal } from '@angular/core';\r\nimport { WORKSPACE_LAYOUT_EDITING_STORAGE_KEY } from '../storage-keys';\r\nimport { ChillService } from './chill.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WorkspaceLayoutService {\r\n private readonly chill = inject(ChillService);\r\n private readonly layoutEditingEnabledState = signal(this.readStoredLayoutEditingState());\r\n\r\n readonly canEditLayout = this.chill.canManageSchema;\r\n readonly isLayoutEditingEnabled = computed(() => this.canEditLayout() && this.layoutEditingEnabledState());\r\n\r\n constructor() {\r\n effect(() => {\r\n globalThis.localStorage?.setItem(\r\n WORKSPACE_LAYOUT_EDITING_STORAGE_KEY,\r\n this.layoutEditingEnabledState() ? 'true' : 'false'\r\n );\r\n });\r\n }\r\n\r\n toggleLayoutEditingEnabled(): void {\r\n if (!this.canEditLayout()) {\r\n return;\r\n }\r\n\r\n this.layoutEditingEnabledState.update((enabled) => !enabled);\r\n }\r\n\r\n private readStoredLayoutEditingState(): boolean {\r\n return globalThis.localStorage?.getItem(WORKSPACE_LAYOUT_EDITING_STORAGE_KEY)?.trim().toLowerCase() === 'true';\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, inject, input, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ChillService } from '../services/chill.service';\r\nimport { WorkspaceLayoutService } from '../services/workspace-layout.service';\r\n\r\n@Component({\r\n selector: 'app-chill-i18n-label',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n template: `\r\n <span class=\"i18n-label\" [class.edit-enabled]=\"editEnabled()\">\r\n @if (isEditing()) {\r\n <input\r\n type=\"text\"\r\n class=\"i18n-label__input\"\r\n [style.width]=\"inputWidth()\"\r\n [ngModel]=\"draftText()\"\r\n (ngModelChange)=\"draftText.set($event)\"\r\n [disabled]=\"isSaving()\"\r\n [attr.aria-label]=\"editAriaLabel()\"\r\n (keydown.enter)=\"save()\"\r\n (keydown.escape)=\"cancel()\" />\r\n\r\n <button\r\n type=\"button\"\r\n class=\"i18n-label__action\"\r\n [class.confirm]=\"canSave()\"\r\n [class.cancel]=\"!canSave()\"\r\n (click)=\"canSave() ? save() : cancel()\"\r\n [disabled]=\"isSaving()\"\r\n [attr.aria-label]=\"canSave() ? saveAriaLabel() : cancelAriaLabel()\">\r\n <span class=\"material-symbol-icon\">{{ canSave() ? 'check' : 'close' }}</span>\r\n </button>\r\n } @else {\r\n <span class=\"i18n-label__text\">{{ text() }}</span>\r\n\r\n @if (editEnabled()) {\r\n <button\r\n type=\"button\"\r\n class=\"i18n-label__action edit\"\r\n (click)=\"startEditing()\"\r\n [attr.aria-label]=\"editAriaLabel()\">\r\n <span class=\"material-symbol-icon\">edit</span>\r\n </button>\r\n }\r\n }\r\n </span>\r\n\r\n @if (errorMessage()) {\r\n <small class=\"i18n-label__error\">{{ errorMessage() }}</small>\r\n }\r\n `,\r\n styleUrl: './chill-i18n-label.component.scss'\r\n})\r\nexport class ChillI18nLabelComponent {\r\n private static readonly MIN_INPUT_WIDTH_CH = 24;\r\n\r\n readonly chill = inject(ChillService);\r\n readonly layout = inject(WorkspaceLayoutService);\r\n\r\n readonly labelGuid = input.required<string>();\r\n readonly primaryDefaultText = input.required<string>();\r\n readonly secondaryDefaultText = input.required<string>();\r\n readonly editable = input(true);\r\n\r\n readonly isEditing = signal(false);\r\n readonly isSaving = signal(false);\r\n readonly draftText = signal('');\r\n readonly inputWidth = signal(`min(100%, ${ChillI18nLabelComponent.MIN_INPUT_WIDTH_CH}ch)`);\r\n readonly errorMessage = signal('');\r\n\r\n readonly text = computed(() => this.chill.T(this.labelGuid(), this.primaryDefaultText(), this.secondaryDefaultText()));\r\n readonly editEnabled = computed(() => this.editable() && this.chill.isAuthenticated() && this.layout.isLayoutEditingEnabled());\r\n readonly canSave = computed(() => this.draftText().trim().length > 0 && this.draftText().trim() !== this.text().trim());\r\n readonly editAriaLabel = computed(() =>\r\n this.chill.T('F7FD0AA5-3E6E-491C-857A-5C6C5C7119D5', 'Edit label', 'Modifica etichetta')\r\n );\r\n readonly saveAriaLabel = computed(() =>\r\n this.chill.T('1A77383B-6A11-489A-B527-0CD15A9DBE84', 'Save label', 'Salva etichetta')\r\n );\r\n readonly cancelAriaLabel = computed(() =>\r\n this.chill.T('D51111F2-5230-416E-9957-4E91D6F7C527', 'Cancel label edit', 'Annulla modifica etichetta')\r\n );\r\n\r\n startEditing(): void {\r\n if (!this.editEnabled()) {\r\n return;\r\n }\r\n\r\n const text = this.text();\r\n this.draftText.set(text);\r\n this.inputWidth.set(this.buildInputWidth(text));\r\n this.errorMessage.set('');\r\n this.isEditing.set(true);\r\n }\r\n\r\n cancel(): void {\r\n if (this.isSaving()) {\r\n return;\r\n }\r\n\r\n this.isEditing.set(false);\r\n this.errorMessage.set('');\r\n this.draftText.set(this.text());\r\n }\r\n\r\n save(): void {\r\n if (!this.canSave() || this.isSaving()) {\r\n return;\r\n }\r\n\r\n this.isSaving.set(true);\r\n this.errorMessage.set('');\r\n\r\n this.chill.setText(this.labelGuid(), this.draftText().trim()).subscribe({\r\n next: (value) => {\r\n this.draftText.set(value);\r\n this.isSaving.set(false);\r\n this.isEditing.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.errorMessage.set(this.chill.formatError(error));\r\n this.isSaving.set(false);\r\n }\r\n });\r\n }\r\n\r\n private buildInputWidth(text: string): string {\r\n const widthCh = Math.max(text.trim().length + 2, ChillI18nLabelComponent.MIN_INPUT_WIDTH_CH);\r\n return `min(100%, ${widthCh}ch)`;\r\n //return `min(${widthCh}ch)`;\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { RouterOutlet } from '@angular/router';\r\nimport { ChillI18nLabelComponent } from '../lib/chill-i18n-label.component';\r\nimport { ChillService } from '../services/chill.service';\r\n\r\n@Component({\r\n selector: 'app-auth-shell',\r\n standalone: true,\r\n imports: [RouterOutlet, ChillI18nLabelComponent],\r\n template: `\r\n <section class=\"auth-layout\">\r\n <div class=\"auth-layout__hero\">\r\n <p class=\"auth-layout__eyebrow\">\r\n <app-chill-i18n-label\r\n [labelGuid]=\"'D8E9F1A4-3E8A-47A7-BE9C-1C702F81C6B0'\"\r\n [primaryDefaultText]=\"'ChillSharp UI'\"\r\n [secondaryDefaultText]=\"'ChillSharp UI'\" />\r\n </p>\r\n <h1>\r\n <app-chill-i18n-label\r\n [labelGuid]=\"'38C43178-A697-4DE7-BA27-1989DD0E9B69'\"\r\n [primaryDefaultText]=\"'Identity that stays out of the way.'\"\r\n [secondaryDefaultText]=\"'Identita che resta fuori dal percorso.'\" />\r\n </h1>\r\n <p>\r\n <app-chill-i18n-label\r\n [labelGuid]=\"'9B329C57-797A-43DF-930B-583C44A21D57'\"\r\n [primaryDefaultText]=\"'Separate auth pages now lead into a dedicated workspace built to host user tasks without mixing concerns.'\"\r\n [secondaryDefaultText]=\"'Le pagine di autenticazione ora conducono a un workspace dedicato, pensato per ospitare le attivita utente senza mescolare le responsabilita.'\" />\r\n </p>\r\n </div>\r\n\r\n <div class=\"auth-layout__content\">\r\n <router-outlet />\r\n </div>\r\n </section>\r\n `\r\n})\r\nexport class AuthShellComponent {\r\n readonly chill = inject(ChillService);\r\n}\r\n","import { Injectable, computed, signal } from '@angular/core';\r\nimport type { WorkspaceDialogRequest, WorkspaceDialogResult } from '../models/workspace-dialog.models';\r\n\r\ninterface ActiveWorkspaceDialog<TResult = unknown> extends WorkspaceDialogRequest<TResult> {\r\n id: number;\r\n resolve: (result: WorkspaceDialogResult<TResult>) => void;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WorkspaceDialogService {\r\n private readonly dialogStackState = signal<ActiveWorkspaceDialog<unknown>[]>([]);\r\n private nextDialogId = 1;\r\n\r\n readonly dialogs = computed(() => this.dialogStackState());\r\n\r\n readonly activeDialog = computed(() => {\r\n const dialogStack = this.dialogStackState();\r\n return dialogStack.length > 0 ? dialogStack[dialogStack.length - 1] : null;\r\n });\r\n\r\n openDialog<TResult>(request: WorkspaceDialogRequest<TResult>): Promise<WorkspaceDialogResult<TResult>> {\r\n return new Promise<WorkspaceDialogResult<TResult>>((resolve) => {\r\n this.dialogStackState.update((current) => [...current, {\r\n id: this.nextDialogId++,\r\n okLabel: 'OK',\r\n cancelLabel: 'Cancel',\r\n showOkButton: true,\r\n showCancelButton: true,\r\n ...request,\r\n resolve\r\n } as ActiveWorkspaceDialog<unknown>]);\r\n });\r\n }\r\n\r\n async confirmOk(title: string, description: string): Promise<boolean> {\r\n const { ConfirmMessageDialogComponent } = await import('../workspace/confirm-message-dialog.component');\r\n const result = await this.openDialog<boolean>({\r\n title,\r\n component: ConfirmMessageDialogComponent,\r\n showOkButton: false,\r\n showCancelButton: false,\r\n inputs: {\r\n description,\r\n buttons: [\r\n {\r\n label: 'OK',\r\n value: true,\r\n primary: true\r\n }\r\n ]\r\n }\r\n });\r\n\r\n return result.status === 'confirmed' && result.value === true;\r\n }\r\n\r\n async confirmYesNo(title: string, description: string): Promise<boolean> {\r\n const { ConfirmMessageDialogComponent } = await import('../workspace/confirm-message-dialog.component');\r\n const result = await this.openDialog<boolean>({\r\n title,\r\n component: ConfirmMessageDialogComponent,\r\n showOkButton: false,\r\n showCancelButton: false,\r\n inputs: {\r\n description,\r\n buttons: [\r\n {\r\n label: 'No',\r\n value: false\r\n },\r\n {\r\n label: 'Yes',\r\n value: true,\r\n primary: true\r\n }\r\n ]\r\n }\r\n });\r\n\r\n return result.status === 'confirmed' && result.value === true;\r\n }\r\n\r\n confirm<TResult>(value?: TResult): void {\r\n const dialogStack = this.dialogStackState();\r\n const activeDialog = dialogStack.length > 0\r\n ? dialogStack[dialogStack.length - 1] as ActiveWorkspaceDialog<TResult>\r\n : null;\r\n if (!activeDialog) {\r\n return;\r\n }\r\n\r\n this.dialogStackState.update((current) => current.slice(0, -1));\r\n activeDialog.resolve({\r\n status: 'confirmed',\r\n value\r\n });\r\n }\r\n\r\n cancel(): void {\r\n this.cancelActiveDialog();\r\n }\r\n\r\n private cancelActiveDialog(): void {\r\n const dialogStack = this.dialogStackState();\r\n const activeDialog = dialogStack.length > 0 ? dialogStack[dialogStack.length - 1] : null;\r\n if (!activeDialog) {\r\n return;\r\n }\r\n\r\n this.dialogStackState.update((current) => current.slice(0, -1));\r\n activeDialog.resolve({\r\n status: 'cancelled'\r\n });\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, inject, input, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ChillService } from '../services/chill.service';\r\nimport { WorkspaceLayoutService } from '../services/workspace-layout.service';\r\n\r\n@Component({\r\n selector: 'app-chill-i18n-button-label',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n template: `\r\n <span class=\"i18n-button-label\">\r\n @if (isEditing()) {\r\n <input\r\n type=\"text\"\r\n class=\"i18n-button-label__input\"\r\n [ngModel]=\"draftText()\"\r\n (ngModelChange)=\"draftText.set($event)\"\r\n [disabled]=\"isSaving()\"\r\n [attr.aria-label]=\"editAriaLabel()\"\r\n (click)=\"swallow($event)\"\r\n (mousedown)=\"swallow($event)\"\r\n (keydown.enter)=\"save($event)\"\r\n (keydown.escape)=\"cancel($event)\" />\r\n\r\n <span\r\n class=\"i18n-button-label__action confirm\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-disabled]=\"isSaving() || !canSave()\"\r\n [attr.aria-label]=\"saveAriaLabel()\"\r\n (click)=\"save($event)\"\r\n (mousedown)=\"swallow($event)\"\r\n (keydown.enter)=\"save($event)\"\r\n (keydown.space)=\"save($event)\">\r\n ✓\r\n </span>\r\n } @else {\r\n <span class=\"i18n-button-label__text\">{{ text() }}</span>\r\n\r\n @if (editEnabled()) {\r\n <span\r\n class=\"i18n-button-label__action edit\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"editAriaLabel()\"\r\n (click)=\"startEditing($event)\"\r\n (mousedown)=\"swallow($event)\"\r\n (keydown.enter)=\"startEditing($event)\"\r\n (keydown.space)=\"startEditing($event)\">\r\n ✎\r\n </span>\r\n }\r\n }\r\n </span>\r\n\r\n @if (errorMessage()) {\r\n <small class=\"i18n-button-label__error\">{{ errorMessage() }}</small>\r\n }\r\n `,\r\n styleUrl: './chill-i18n-button-label.component.scss'\r\n})\r\nexport class ChillI18nButtonLabelComponent {\r\n readonly chill = inject(ChillService);\r\n readonly layout = inject(WorkspaceLayoutService);\r\n\r\n readonly labelGuid = input.required<string>();\r\n readonly primaryDefaultText = input.required<string>();\r\n readonly secondaryDefaultText = input.required<string>();\r\n readonly editable = input(true);\r\n\r\n readonly isEditing = signal(false);\r\n readonly isSaving = signal(false);\r\n readonly draftText = signal('');\r\n readonly errorMessage = signal('');\r\n\r\n readonly text = computed(() => this.chill.T(this.labelGuid(), this.primaryDefaultText(), this.secondaryDefaultText()));\r\n readonly editEnabled = computed(() => this.editable() && this.chill.isAuthenticated() && this.layout.isLayoutEditingEnabled());\r\n readonly canSave = computed(() => this.draftText().trim().length > 0 && this.draftText().trim() !== this.text().trim());\r\n readonly editAriaLabel = computed(() =>\r\n this.chill.T('344781FB-FD8F-4127-A599-4EC92E466B19', 'Edit button label', 'Modifica etichetta pulsante')\r\n );\r\n readonly saveAriaLabel = computed(() =>\r\n this.chill.T('3B2D7D1E-AEA2-4412-9AE3-228BB2252D49', 'Save button label', 'Salva etichetta pulsante')\r\n );\r\n\r\n startEditing(event?: Event): void {\r\n this.swallow(event);\r\n if (!this.editEnabled()) {\r\n return;\r\n }\r\n\r\n this.draftText.set(this.text());\r\n this.errorMessage.set('');\r\n this.isEditing.set(true);\r\n }\r\n\r\n cancel(event?: Event): void {\r\n this.swallow(event);\r\n if (this.isSaving()) {\r\n return;\r\n }\r\n\r\n this.isEditing.set(false);\r\n this.errorMessage.set('');\r\n this.draftText.set(this.text());\r\n }\r\n\r\n save(event?: Event): void {\r\n this.swallow(event);\r\n if (!this.canSave() || this.isSaving()) {\r\n return;\r\n }\r\n\r\n this.isSaving.set(true);\r\n this.errorMessage.set('');\r\n\r\n this.chill.setText(this.labelGuid(), this.draftText().trim()).subscribe({\r\n next: (value) => {\r\n this.draftText.set(value);\r\n this.isSaving.set(false);\r\n this.isEditing.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.errorMessage.set(this.chill.formatError(error));\r\n this.isSaving.set(false);\r\n }\r\n });\r\n }\r\n\r\n swallow(event?: Event): void {\r\n event?.preventDefault();\r\n event?.stopPropagation();\r\n }\r\n}\r\n","import { AfterViewInit, Directive, ElementRef, OnDestroy, inject } from '@angular/core';\r\n\r\nconst NOTICE_TRANSITION_CLASS = 'notice-transition-leave-clone';\r\nconst NOTICE_TRANSITION_MS = 220;\r\nconst NOTICE_TRANSITION_EASING = 'cubic-bezier(0.2, 0, 0, 1)';\r\nconst NOTICE_TRANSITION_STYLE = [\r\n `height ${NOTICE_TRANSITION_MS}ms ${NOTICE_TRANSITION_EASING}`,\r\n `margin-block-start ${NOTICE_TRANSITION_MS}ms ${NOTICE_TRANSITION_EASING}`,\r\n `margin-block-end ${NOTICE_TRANSITION_MS}ms ${NOTICE_TRANSITION_EASING}`,\r\n `opacity ${NOTICE_TRANSITION_MS}ms ease`\r\n].join(', ');\r\n\r\n@Directive({\r\n selector: '.notice',\r\n standalone: true\r\n})\r\nexport class NoticeTransitionDirective implements AfterViewInit, OnDestroy {\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private enterFrame: number | null = null;\r\n private enterCleanupTimer: number | null = null;\r\n private enterCleanup: (() => void) | null = null;\r\n\r\n ngAfterViewInit(): void {\r\n const element = this.elementRef.nativeElement;\r\n if (this.shouldSkipAnimation(element)) {\r\n return;\r\n }\r\n\r\n this.animateEnter(element);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n const element = this.elementRef.nativeElement;\r\n this.cancelEnterAnimation();\r\n\r\n if (this.shouldSkipAnimation(element)) {\r\n return;\r\n }\r\n\r\n this.animateLeaveClone(element);\r\n }\r\n\r\n private animateEnter(element: HTMLElement): void {\r\n const computedStyle = getComputedStyle(element);\r\n const height = element.getBoundingClientRect().height;\r\n if (height <= 0) {\r\n return;\r\n }\r\n\r\n const originalStyles = {\r\n height: element.style.height,\r\n marginBlockStart: element.style.marginBlockStart,\r\n marginBlockEnd: element.style.marginBlockEnd,\r\n opacity: element.style.opacity,\r\n overflow: element.style.overflow,\r\n transition: element.style.transition,\r\n willChange: element.style.willChange\r\n };\r\n const finalMarginBlockStart = computedStyle.marginBlockStart;\r\n const finalMarginBlockEnd = computedStyle.marginBlockEnd;\r\n\r\n element.style.height = '0px';\r\n element.style.marginBlockStart = '0px';\r\n element.style.marginBlockEnd = '0px';\r\n element.style.opacity = '0';\r\n element.style.overflow = 'hidden';\r\n element.style.transition = 'none';\r\n element.style.willChange = 'height, margin, opacity';\r\n\r\n const finish = (): void => {\r\n if (this.enterCleanupTimer !== null) {\r\n window.clearTimeout(this.enterCleanupTimer);\r\n this.enterCleanupTimer = null;\r\n }\r\n element.removeEventListener('transitionend', handleTransitionEnd);\r\n this.enterCleanup = null;\r\n\r\n if (!element.isConnected) {\r\n return;\r\n }\r\n\r\n element.style.height = originalStyles.height;\r\n element.style.marginBlockStart = originalStyles.marginBlockStart;\r\n element.style.marginBlockEnd = originalStyles.marginBlockEnd;\r\n element.style.opacity = originalStyles.opacity;\r\n element.style.overflow = originalStyles.overflow;\r\n element.style.transition = originalStyles.transition;\r\n element.style.willChange = originalStyles.willChange;\r\n };\r\n\r\n const handleTransitionEnd = (event: TransitionEvent): void => {\r\n if (event.target === element && event.propertyName === 'height') {\r\n finish();\r\n }\r\n };\r\n\r\n this.enterCleanup = finish;\r\n this.enterFrame = window.requestAnimationFrame(() => {\r\n this.enterFrame = null;\r\n if (!element.isConnected) {\r\n finish();\r\n return;\r\n }\r\n\r\n element.addEventListener('transitionend', handleTransitionEnd);\r\n element.style.transition = NOTICE_TRANSITION_STYLE;\r\n element.style.height = `${height}px`;\r\n element.style.marginBlockStart = finalMarginBlockStart;\r\n element.style.marginBlockEnd = finalMarginBlockEnd;\r\n element.style.opacity = '1';\r\n this.enterCleanupTimer = window.setTimeout(finish, NOTICE_TRANSITION_MS + 120);\r\n });\r\n }\r\n\r\n private animateLeaveClone(element: HTMLElement): void {\r\n const parent = element.parentNode;\r\n if (!parent) {\r\n return;\r\n }\r\n\r\n const height = element.getBoundingClientRect().height;\r\n if (height <= 0) {\r\n return;\r\n }\r\n\r\n const computedStyle = getComputedStyle(element);\r\n const clone = element.cloneNode(true) as HTMLElement;\r\n clone.classList.add(NOTICE_TRANSITION_CLASS);\r\n clone.setAttribute('aria-hidden', 'true');\r\n clone.style.height = `${height}px`;\r\n clone.style.marginBlockStart = computedStyle.marginBlockStart;\r\n clone.style.marginBlockEnd = computedStyle.marginBlockEnd;\r\n clone.style.opacity = computedStyle.opacity || '1';\r\n clone.style.overflow = 'hidden';\r\n clone.style.pointerEvents = 'none';\r\n clone.style.transition = 'none';\r\n clone.style.willChange = 'height, margin, opacity';\r\n\r\n parent.insertBefore(clone, element.nextSibling);\r\n\r\n const removeClone = (): void => {\r\n clone.removeEventListener('transitionend', handleTransitionEnd);\r\n clone.remove();\r\n };\r\n\r\n const handleTransitionEnd = (event: TransitionEvent): void => {\r\n if (event.target === clone && event.propertyName === 'height') {\r\n removeClone();\r\n }\r\n };\r\n\r\n window.requestAnimationFrame(() => {\r\n if (!clone.isConnected) {\r\n return;\r\n }\r\n\r\n clone.addEventListener('transitionend', handleTransitionEnd);\r\n clone.style.transition = NOTICE_TRANSITION_STYLE;\r\n clone.style.height = '0px';\r\n clone.style.marginBlockStart = '0px';\r\n clone.style.marginBlockEnd = '0px';\r\n clone.style.opacity = '0';\r\n window.setTimeout(removeClone, NOTICE_TRANSITION_MS + 120);\r\n });\r\n }\r\n\r\n private cancelEnterAnimation(): void {\r\n if (this.enterFrame !== null) {\r\n window.cancelAnimationFrame(this.enterFrame);\r\n this.enterFrame = null;\r\n }\r\n\r\n if (this.enterCleanupTimer !== null) {\r\n window.clearTimeout(this.enterCleanupTimer);\r\n this.enterCleanupTimer = null;\r\n }\r\n\r\n this.enterCleanup?.();\r\n this.enterCleanup = null;\r\n }\r\n\r\n private shouldSkipAnimation(element: HTMLElement): boolean {\r\n return typeof window === 'undefined'\r\n || element.classList.contains(NOTICE_TRANSITION_CLASS)\r\n || window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\nexport interface WorkspaceToolbarButton {\r\n id: string;\r\n label?: string;\r\n labelGuid?: string | null;\r\n primaryDefaultText?: string | null;\r\n secondaryDefaultText?: string | null;\r\n ariaLabel?: string;\r\n icon?: string | null;\r\n iconClass?: string | null;\r\n accent?: boolean;\r\n action: () => void;\r\n disabled?: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WorkspaceToolbarService {\r\n private readonly buttonScopesState = signal<Record<string, WorkspaceToolbarButton[]>>({});\r\n\r\n buttons(scope = 'workspace'): WorkspaceToolbarButton[] {\r\n return this.buttonScopesState()[scope] ?? [];\r\n }\r\n\r\n setButtons(buttons: WorkspaceToolbarButton[], scope = 'workspace'): void {\r\n this.buttonScopesState.update((current) => ({\r\n ...current,\r\n [scope]: [...buttons]\r\n }));\r\n }\r\n\r\n clearButtons(scope = 'workspace'): void {\r\n this.buttonScopesState.update((current) => {\r\n if (!(scope in current)) {\r\n return current;\r\n }\r\n\r\n const { [scope]: _removedScope, ...rest } = current;\r\n return rest;\r\n });\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, input, output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nexport interface AuthSearchSelectOption {\r\n id: string;\r\n label: string;\r\n description?: string;\r\n keywords?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-auth-search-select',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n template: `\r\n <div class=\"auth-search-select\">\r\n @if (selectedOption(); as option) {\r\n <div class=\"auth-search-select__selected\" [title]=\"option.label\">\r\n <span class=\"auth-search-select__selected-label\">{{ option.label }}</span>\r\n @if (option.description) {\r\n <span class=\"auth-search-select__selected-description\">{{ option.description }}</span>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"auth-search-select__clear\"\r\n (click)=\"clearSelection()\"\r\n [attr.aria-label]=\"clearAriaLabel()\">\r\n X\r\n </button>\r\n </div>\r\n } @else {\r\n <div class=\"auth-search-select__lookup\">\r\n <input\r\n type=\"text\"\r\n [ngModel]=\"searchTerm()\"\r\n (ngModelChange)=\"updateSearchTerm($event)\"\r\n (focus)=\"openResults()\"\r\n (blur)=\"closeResultsSoon()\"\r\n [placeholder]=\"placeholder()\" />\r\n\r\n @if (isOpen()) {\r\n <div class=\"auth-search-select__results\" role=\"listbox\">\r\n @for (option of filteredOptions(); track option.id) {\r\n <button\r\n type=\"button\"\r\n class=\"auth-search-select__result\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"selectOption(option.id)\">\r\n <strong>{{ option.label }}</strong>\r\n @if (option.description) {\r\n <small>{{ option.description }}</small>\r\n }\r\n </button>\r\n } @empty {\r\n <div class=\"auth-search-select__empty\">\r\n {{ searchTerm().trim() ? noResultsMessage() : emptyMessage() }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n min-width: 0;\r\n }\r\n\r\n .auth-search-select,\r\n .auth-search-select__lookup {\r\n position: relative;\r\n }\r\n\r\n .auth-search-select__lookup input,\r\n .auth-search-select__selected {\r\n width: 100%;\r\n min-height: 3rem;\r\n border-radius: 0.85rem;\r\n border: 1px solid var(--border-color);\r\n background: var(--surface-0);\r\n color: var(--text-main);\r\n font: inherit;\r\n }\r\n\r\n .auth-search-select__lookup input {\r\n padding: 0.85rem 1rem;\r\n }\r\n\r\n .auth-search-select__selected {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.75rem;\r\n padding: 0.45rem 0.5rem 0.45rem 1rem;\r\n }\r\n\r\n .auth-search-select__selected-label,\r\n .auth-search-select__selected-description {\r\n min-width: 0;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n\r\n .auth-search-select__selected-label {\r\n font-weight: 700;\r\n flex: 1 1 auto;\r\n }\r\n\r\n .auth-search-select__selected-description {\r\n color: var(--text-muted);\r\n flex: 0 1 auto;\r\n }\r\n\r\n .auth-search-select__clear {\r\n width: 2rem;\r\n height: 2rem;\r\n border: 0;\r\n border-radius: 999px;\r\n background: var(--accent-soft);\r\n color: var(--text-main);\r\n cursor: pointer;\r\n font: inherit;\r\n font-weight: 700;\r\n flex: 0 0 auto;\r\n }\r\n\r\n .auth-search-select__results {\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n top: calc(100% + 0.35rem);\r\n z-index: 10;\r\n display: grid;\r\n gap: 0.35rem;\r\n max-height: 18rem;\r\n padding: 0.45rem;\r\n overflow: auto;\r\n border-radius: 0.9rem;\r\n border: 1px solid var(--border-color);\r\n background: var(--surface-0);\r\n box-shadow: var(--shadow);\r\n }\r\n\r\n .auth-search-select__result,\r\n .auth-search-select__empty {\r\n display: grid;\r\n gap: 0.2rem;\r\n padding: 0.7rem 0.8rem;\r\n border-radius: 0.75rem;\r\n }\r\n\r\n .auth-search-select__result {\r\n border: 0;\r\n background: transparent;\r\n color: var(--text-main);\r\n cursor: pointer;\r\n font: inherit;\r\n text-align: left;\r\n }\r\n\r\n .auth-search-select__result:hover {\r\n background: var(--accent-soft);\r\n }\r\n\r\n .auth-search-select__result small,\r\n .auth-search-select__empty {\r\n color: var(--text-muted);\r\n }\r\n `\r\n})\r\nexport class AuthSearchSelectComponent {\r\n readonly options = input<AuthSearchSelectOption[]>([]);\r\n readonly selectedId = input('');\r\n readonly placeholder = input('Search and select');\r\n readonly emptyMessage = input('Start typing to search.');\r\n readonly noResultsMessage = input('No matches found.');\r\n readonly clearAriaLabel = input('Clear selection');\r\n readonly selectionChange = output<string>();\r\n\r\n readonly searchTerm = signal('');\r\n readonly isOpen = signal(false);\r\n\r\n readonly selectedOption = computed(() =>\r\n this.options().find((option) => option.id === this.selectedId()) ?? null\r\n );\r\n\r\n readonly filteredOptions = computed(() => {\r\n const query = this.searchTerm().trim().toLowerCase();\r\n if (!query) {\r\n return this.options();\r\n }\r\n\r\n return this.options().filter((option) => {\r\n const haystack = [\r\n option.label,\r\n option.description,\r\n option.keywords\r\n ].join(' ').toLowerCase();\r\n return haystack.includes(query);\r\n });\r\n });\r\n\r\n updateSearchTerm(value: string): void {\r\n this.searchTerm.set(value);\r\n this.isOpen.set(true);\r\n }\r\n\r\n openResults(): void {\r\n this.isOpen.set(true);\r\n }\r\n\r\n closeResultsSoon(): void {\r\n window.setTimeout(() => {\r\n this.isOpen.set(false);\r\n }, 120);\r\n }\r\n\r\n selectOption(id: string): void {\r\n this.searchTerm.set('');\r\n this.isOpen.set(false);\r\n this.selectionChange.emit(id);\r\n }\r\n\r\n clearSelection(): void {\r\n this.searchTerm.set('');\r\n this.isOpen.set(false);\r\n this.selectionChange.emit('');\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, inject, input, output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ChillI18nLabelComponent } from '../../lib/chill-i18n-label.component';\r\nimport { ChillI18nButtonLabelComponent } from '../../lib/chill-i18n-button-label.component';\r\nimport { NoticeTransitionDirective } from '../../lib/notice-transition.directive';\r\nimport type { EditableAuthPermissionRule } from '../../models/chill-auth.models';\r\nimport { PermissionAction, PermissionEffect, PermissionScope } from '../../models/chill-auth.models';\r\nimport { ChillService } from '../../services/chill.service';\r\n\r\nexport interface PermissionEditorRow extends EditableAuthPermissionRule {\r\n localId: string;\r\n}\r\n\r\nconst ALL_PROPERTIES_VALUE = '__all__';\r\n\r\n@Component({\r\n selector: 'app-permission-editor',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, ChillI18nLabelComponent, ChillI18nButtonLabelComponent, NoticeTransitionDirective],\r\n templateUrl: './permission-editor.component.html',\r\n styleUrl: './permission-editor.component.scss'\r\n})\r\nexport class PermissionEditorComponent {\r\n readonly chill = inject(ChillService);\r\n\r\n readonly rows = input<PermissionEditorRow[]>([]);\r\n readonly rowsChange = output<PermissionEditorRow[]>();\r\n\r\n readonly lookupErrorMessage = signal('');\r\n readonly moduleOptions = signal<string[]>([]);\r\n readonly entityOptionsByKey = signal<Record<string, string[]>>({});\r\n readonly propertyOptionsByKey = signal<Record<string, string[]>>({});\r\n readonly editingRowIds = signal<string[]>([]);\r\n\r\n readonly permissionEffectOptions = [\r\n { value: PermissionEffect.Allow, label: 'Allow' },\r\n { value: PermissionEffect.Deny, label: 'Deny' }\r\n ];\r\n\r\n readonly permissionActionOptions = [\r\n { value: PermissionAction.FullControl, label: 'FullControl' },\r\n { value: PermissionAction.Query, label: 'Query' },\r\n { value: PermissionAction.Create, label: 'Create' },\r\n { value: PermissionAction.Update, label: 'Update' },\r\n { value: PermissionAction.Delete, label: 'Delete' },\r\n { value: PermissionAction.See, label: 'See' },\r\n { value: PermissionAction.Modify, label: 'Modify' }\r\n ];\r\n\r\n readonly permissionScopeOptions = [\r\n { value: PermissionScope.Module, label: 'Module' },\r\n { value: PermissionScope.Entity, label: 'Entity' },\r\n { value: PermissionScope.Property, label: 'Property' }\r\n ];\r\n\r\n constructor() {\r\n this.loadModuleOptions();\r\n\r\n effect(() => {\r\n const rows = this.rows();\r\n this.ensureOptionsForRows(rows);\r\n this.syncEditingRows(rows);\r\n });\r\n }\r\n\r\n addPermissionRule(): void {\r\n const localId = `new-${crypto.randomUUID()}`;\r\n this.editingRowIds.update((ids) => [...ids, localId]);\r\n this.rowsChange.emit([\r\n ...this.rows(),\r\n {\r\n localId,\r\n guid: '',\r\n effect: PermissionEffect.Allow,\r\n action: PermissionAction.Query,\r\n scope: PermissionScope.Module,\r\n module: '',\r\n entityName: '',\r\n propertyName: '',\r\n appliesToAllProperties: false,\r\n description: ''\r\n }\r\n ]);\r\n }\r\n\r\n startEditingRow(rowId: string): void {\r\n this.editingRowIds.update((ids) => ids.includes(rowId) ? ids : [...ids, rowId]);\r\n }\r\n\r\n stopEditingRow(rowId: string): void {\r\n this.editingRowIds.update((ids) => ids.filter((id) => id !== rowId));\r\n }\r\n\r\n isEditingRow(rowId: string): boolean {\r\n return this.editingRowIds().includes(rowId);\r\n }\r\n\r\n updatePermissionRow(rowId: string, key: keyof PermissionEditorRow, value: PermissionEditorRow[keyof PermissionEditorRow]): void {\r\n this.rowsChange.emit(this.rows().map((row) => {\r\n if (row.localId !== rowId) {\r\n return row;\r\n }\r\n\r\n const updatedRow = { ...row, [key]: value };\r\n if (key === 'module') {\r\n updatedRow.entityName = '';\r\n updatedRow.propertyName = '';\r\n updatedRow.appliesToAllProperties = false;\r\n this.ensureEntityOptions(updatedRow.module, updatedRow.action);\r\n } else if (key === 'action') {\r\n updatedRow.entityName = '';\r\n updatedRow.propertyName = '';\r\n updatedRow.appliesToAllProperties = false;\r\n this.ensureEntityOptions(updatedRow.module, updatedRow.action);\r\n } else if (key === 'entityName') {\r\n updatedRow.propertyName = '';\r\n updatedRow.appliesToAllProperties = false;\r\n this.ensurePropertyOptions(updatedRow.module, updatedRow.action, updatedRow.entityName);\r\n } else if (key === 'scope' && value === PermissionScope.Module) {\r\n updatedRow.entityName = '';\r\n updatedRow.propertyName = '';\r\n updatedRow.appliesToAllProperties = false;\r\n } else if (key === 'scope' && value === PermissionScope.Entity) {\r\n updatedRow.propertyName = '';\r\n updatedRow.appliesToAllProperties = false;\r\n } else if (key === 'appliesToAllProperties') {\r\n updatedRow.appliesToAllProperties = !!value;\r\n updatedRow.propertyName = updatedRow.appliesToAllProperties ? '' : updatedRow.propertyName;\r\n }\r\n\r\n return updatedRow;\r\n }));\r\n }\r\n\r\n updatePropertySelection(rowId: string, value: string): void {\r\n this.rowsChange.emit(this.rows().map((row) => {\r\n if (row.localId !== rowId) {\r\n return row;\r\n }\r\n\r\n if (value === ALL_PROPERTIES_VALUE) {\r\n return {\r\n ...row,\r\n propertyName: '',\r\n appliesToAllProperties: true\r\n };\r\n }\r\n\r\n return {\r\n ...row,\r\n propertyName: value,\r\n appliesToAllProperties: false\r\n };\r\n }));\r\n }\r\n\r\n removePermissionRow(rowId: string): void {\r\n this.stopEditingRow(rowId);\r\n this.rowsChange.emit(this.rows().filter((row) => row.localId !== rowId));\r\n }\r\n\r\n effectLabel(value: number): string {\r\n return this.permissionEffectOptions.find((option) => option.value === value)?.label ?? String(value);\r\n }\r\n\r\n actionLabel(value: number): string {\r\n return this.permissionActionOptions.find((option) => option.value === value)?.label ?? String(value);\r\n }\r\n\r\n scopeLabel(value: number): string {\r\n return this.permissionScopeOptions.find((option) => option.value === value)?.label ?? String(value);\r\n }\r\n\r\n targetLabel(row: PermissionEditorRow): string {\r\n if (row.scope === PermissionScope.Module) {\r\n return row.module?.trim() || this.chill.T('DB687669-CA05-4786-83C7-E5537D38FBCB', 'Any module', 'Qualsiasi modulo');\r\n }\r\n\r\n if (row.scope === PermissionScope.Entity) {\r\n return row.entityName?.trim() || this.chill.T('A69C0B93-F1E2-41BE-8586-1493B10A4033', 'Any entity', 'Qualsiasi entita');\r\n }\r\n\r\n if (row.appliesToAllProperties) {\r\n return `${row.entityName?.trim() || this.chill.T('4B45CB93-F918-4892-A208-9A46282DEBBC', 'Entity', 'Entita')}.*`;\r\n }\r\n\r\n return row.propertyName?.trim()\r\n || this.chill.T('16A9A1A4-B1B6-49D7-AE2C-927E96D05172', 'Any property', 'Qualsiasi proprieta');\r\n }\r\n\r\n descriptionLabel(row: PermissionEditorRow): string {\r\n return row.description?.trim()\r\n || this.chill.T('57D5BF09-012A-43D4-84BF-2BA33DDECA31', 'No description', 'Nessuna descrizione');\r\n }\r\n\r\n entityOptionsFor(row: PermissionEditorRow): string[] {\r\n return this.entityOptionsByKey()[this.entityOptionsKey(row.module, row.action)] ?? [];\r\n }\r\n\r\n propertyOptionsFor(row: PermissionEditorRow): string[] {\r\n return this.propertyOptionsByKey()[this.propertyOptionsKey(row.module, row.action, row.entityName)] ?? [];\r\n }\r\n\r\n propertySelectValueFor(row: PermissionEditorRow): string {\r\n return row.appliesToAllProperties ? ALL_PROPERTIES_VALUE : (row.propertyName ?? '');\r\n }\r\n\r\n private loadModuleOptions(): void {\r\n this.chill.getModuleList().subscribe({\r\n next: (modules) => {\r\n this.moduleOptions.set(modules);\r\n },\r\n error: (error: unknown) => {\r\n this.lookupErrorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n\r\n private ensureOptionsForRows(rows: PermissionEditorRow[]): void {\r\n rows.forEach((row) => {\r\n this.ensureEntityOptions(row.module, row.action);\r\n this.ensurePropertyOptions(row.module, row.action, row.entityName);\r\n });\r\n }\r\n\r\n private syncEditingRows(rows: PermissionEditorRow[]): void {\r\n const activeIds = new Set(rows.map((row) => row.localId));\r\n this.editingRowIds.update((ids) => ids.filter((id) => activeIds.has(id)));\r\n }\r\n\r\n private ensureEntityOptions(module: string | undefined, action: PermissionAction): void {\r\n const normalizedModule = module?.trim() ?? '';\r\n if (!normalizedModule) {\r\n return;\r\n }\r\n\r\n const key = this.entityOptionsKey(normalizedModule, action);\r\n if (this.entityOptionsByKey()[key]) {\r\n return;\r\n }\r\n\r\n const source = action === PermissionAction.Query\r\n ? this.chill.getQueryList(normalizedModule)\r\n : this.chill.getEntityList(normalizedModule);\r\n\r\n source.subscribe({\r\n next: (entities) => {\r\n this.entityOptionsByKey.update((current) => ({\r\n ...current,\r\n [key]: entities\r\n }));\r\n },\r\n error: (error: unknown) => {\r\n this.lookupErrorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n\r\n private ensurePropertyOptions(module: string | undefined, action: PermissionAction, entityName: string | undefined): void {\r\n const normalizedModule = module?.trim() ?? '';\r\n const normalizedEntityName = entityName?.trim() ?? '';\r\n if (!normalizedModule || !normalizedEntityName) {\r\n return;\r\n }\r\n\r\n const key = this.propertyOptionsKey(normalizedModule, action, normalizedEntityName);\r\n if (this.propertyOptionsByKey()[key]) {\r\n return;\r\n }\r\n\r\n this.chill.getPropertyList(normalizedEntityName).subscribe({\r\n next: (properties) => {\r\n this.propertyOptionsByKey.update((current) => ({\r\n ...current,\r\n [key]: properties\r\n }));\r\n },\r\n error: (error: unknown) => {\r\n this.lookupErrorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n\r\n private entityOptionsKey(module: string | undefined, action: PermissionAction): string {\r\n return `${action}|${module?.trim() ?? ''}`;\r\n }\r\n\r\n private propertyOptionsKey(module: string | undefined, action: PermissionAction, entityName: string | undefined): string {\r\n return `${action}|${module?.trim() ?? ''}|${entityName?.trim() ?? ''}`;\r\n }\r\n}\r\n","@if (lookupErrorMessage()) {\r\n <div class=\"notice error\">{{ lookupErrorMessage() }}</div>\r\n}\r\n\r\n<section class=\"box-card\">\r\n <header class=\"card-header\">\r\n <h3><app-chill-i18n-label [labelGuid]=\"'64D855B5-1A89-4D6B-BD59-B201182BDBEF'\" [primaryDefaultText]=\"'Permission rules'\" [secondaryDefaultText]=\"'Regole permesso'\" /></h3>\r\n <p><app-chill-i18n-label [labelGuid]=\"'C04B7E13-FB43-4E9B-B9DA-DB4E6E49590A'\" [primaryDefaultText]=\"'Configure module, entity, and property permission rules.'\" [secondaryDefaultText]=\"'Configura regole permesso per modulo, entità e proprietà.'\" /></p>\r\n </header>\r\n\r\n <div class=\"permission-list\">\r\n @for (rule of rows(); track rule.localId) {\r\n <article class=\"permission-card\">\r\n @if (isEditingRow(rule.localId)) {\r\n <div class=\"form-grid\">\r\n <label class=\"field\">\r\n <span><app-chill-i18n-label [labelGuid]=\"'678D4A79-804B-4D8F-B986-B08F4E3EC22F'\" [primaryDefaultText]=\"'Effect'\" [secondaryDefaultText]=\"'Effetto'\" /></span>\r\n <select [ngModel]=\"rule.effect\" (ngModelChange)=\"updatePermissionRow(rule.localId, 'effect', +$event)\">\r\n @for (option of permissionEffectOptions; track option.value) {\r\n <option [value]=\"option.value\">{{ option.label }}</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <label class=\"field\">\r\n <span><app-chill-i18n-label [labelGuid]=\"'7E4DDC4C-D4E7-4427-BC9A-08AEF926A0FE'\" [primaryDefaultText]=\"'Action'\" [secondaryDefaultText]=\"'Azione'\" /></span>\r\n <select [ngModel]=\"rule.action\" (ngModelChange)=\"updatePermissionRow(rule.localId, 'action', +$event)\">\r\n @for (option of permissionActionOptions; track option.value) {\r\n <option [value]=\"option.value\">{{ option.label }}</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <label class=\"field\">\r\n <span><app-chill-i18n-label [labelGuid]=\"'88724B00-D84F-44C8-AFC9-BC6C94A8D5E6'\" [primaryDefaultText]=\"'Scope'\" [secondaryDefaultText]=\"'Ambito'\" /></span>\r\n <select [ngModel]=\"rule.scope\" (ngModelChange)=\"updatePermissionRow(rule.localId, 'scope', +$event)\">\r\n @for (option of permissionScopeOptions; track option.value) {\r\n <option [value]=\"option.value\">{{ option.label }}</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <label class=\"field\">\r\n <span><app-chill-i18n-label [labelGuid]=\"'2E4F99D0-8747-4A72-8394-C53F144D6CB2'\" [primaryDefaultText]=\"'Module'\" [secondaryDefaultText]=\"'Modulo'\" /></span>\r\n <select [ngModel]=\"rule.module\" (ngModelChange)=\"updatePermissionRow(rule.localId, 'module', $event)\">\r\n <option value=\"\">{{ chill.T('5D5D7655-697B-442C-BB16-67250D755916', 'Select module', 'Seleziona modulo') }}</option>\r\n @for (module of moduleOptions(); track module) {\r\n <option [value]=\"module\">{{ module }}</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <label class=\"field\">\r\n <span><app-chill-i18n-label [labelGuid]=\"'22268D8E-642A-45A4-A923-D5BC560C59EA'\" [primaryDefaultText]=\"'Entity name'\" [secondaryDefaultText]=\"'Nome entità'\" /></span>\r\n <select\r\n [ngModel]=\"rule.entityName\"\r\n [disabled]=\"rule.scope === 1 || !rule.module\"\r\n (ngModelChange)=\"updatePermissionRow(rule.localId, 'entityName', $event)\">\r\n <option value=\"\">\r\n {{ rule.action === 1\r\n ? chill.T('3CC838AF-33F8-45DF-A5EB-6BB6DD0A7C6B', 'Select query', 'Seleziona query')\r\n : chill.T('BA36F4A9-7F62-4E0A-A79A-0F24311E24E2', 'Select entity', 'Seleziona entità') }}\r\n </option>\r\n @for (entity of entityOptionsFor(rule); track entity) {\r\n <option [value]=\"entity\">{{ entity }}</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <label class=\"field\">\r\n <span><app-chill-i18n-label [labelGuid]=\"'B947A33E-97FD-49A0-B59B-D2D77838DA25'\" [primaryDefaultText]=\"'Property name'\" [secondaryDefaultText]=\"'Nome proprietà'\" /></span>\r\n <select\r\n [ngModel]=\"propertySelectValueFor(rule)\"\r\n [disabled]=\"rule.scope !== 3 || !rule.entityName\"\r\n (ngModelChange)=\"updatePropertySelection(rule.localId, $event)\">\r\n <option value=\"\">{{ chill.T('40B20240-3BC0-43C2-8F2A-AF9525206458', 'Select property', 'Seleziona proprietà') }}</option>\r\n <option value=\"__all__\">{{ chill.T('20D5D424-D258-4F52-8D4A-5C3E1F6892E1', 'ALL | Tutte', 'ALL | Tutte') }}</option>\r\n @for (property of propertyOptionsFor(rule); track property) {\r\n <option [value]=\"property\">{{ property }}</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <label class=\"field full-width\">\r\n <span><app-chill-i18n-label [labelGuid]=\"'97A7BFE7-22A7-4665-B0D8-C75506A8F794'\" [primaryDefaultText]=\"'Description'\" [secondaryDefaultText]=\"'Descrizione'\" /></span>\r\n <textarea rows=\"2\" [ngModel]=\"rule.description\" (ngModelChange)=\"updatePermissionRow(rule.localId, 'description', $event)\"></textarea>\r\n </label>\r\n </div>\r\n\r\n <div class=\"permission-actions\">\r\n <label class=\"toggle\">\r\n <input type=\"checkbox\" [ngModel]=\"rule.appliesToAllProperties\" [disabled]=\"rule.scope !== 3\" (ngModelChange)=\"updatePermissionRow(rule.localId, 'appliesToAllProperties', $event)\" />\r\n <span><app-chill-i18n-label [labelGuid]=\"'2B72F81F-D445-4F56-B86D-98D7C24A3B4B'\" [primaryDefaultText]=\"'Apply to all properties'\" [secondaryDefaultText]=\"'Applica a tutte le proprietà'\" /></span>\r\n </label>\r\n\r\n <div class=\"action-row\">\r\n <button type=\"button\" class=\"secondary\" (click)=\"stopEditingRow(rule.localId)\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'D860F9DB-C5B7-4C29-A60B-D0A7C8321CB4'\" [primaryDefaultText]=\"'Done'\" [secondaryDefaultText]=\"'Chiudi'\" />\r\n </button>\r\n\r\n <button type=\"button\" class=\"secondary danger\" (click)=\"removePermissionRow(rule.localId)\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'704B4EC7-C971-48C7-9439-E08C2F590992'\" [primaryDefaultText]=\"'Delete'\" [secondaryDefaultText]=\"'Elimina'\" />\r\n </button>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"permission-summary\">\r\n <div class=\"summary-main\">\r\n <strong>{{ effectLabel(rule.effect) }} {{ actionLabel(rule.action) }}</strong>\r\n <span>{{ scopeLabel(rule.scope) }}: {{ targetLabel(rule) }}</span>\r\n <small>{{ descriptionLabel(rule) }}</small>\r\n </div>\r\n\r\n <div class=\"summary-meta\">\r\n <span class=\"summary-chip\">{{ rule.module || chill.T('0D6742DB-C4D4-4B68-ABCD-5F7B168499BF', 'No module', 'Nessun modulo') }}</span>\r\n @if (rule.entityName) {\r\n <span class=\"summary-chip\">{{ rule.entityName }}</span>\r\n }\r\n @if (rule.scope === 3 && rule.appliesToAllProperties) {\r\n <span class=\"summary-chip\">{{ chill.T('13D7F183-7FB4-42F7-B6CF-DA43269331EA', 'All properties', 'Tutte le proprietà') }}</span>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"permission-actions compact-actions\">\r\n <button type=\"button\" class=\"secondary\" (click)=\"startEditingRow(rule.localId)\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'314E7191-5C3A-4A96-8D01-AC4C17FF757F'\" [primaryDefaultText]=\"'Edit'\" [secondaryDefaultText]=\"'Modifica'\" />\r\n </button>\r\n\r\n <button type=\"button\" class=\"secondary danger\" (click)=\"removePermissionRow(rule.localId)\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'704B4EC7-C971-48C7-9439-E08C2F590992'\" [primaryDefaultText]=\"'Delete'\" [secondaryDefaultText]=\"'Elimina'\" />\r\n </button>\r\n </div>\r\n }\r\n </article>\r\n } @empty {\r\n <div class=\"empty-state\">{{ chill.T('1801F875-1D00-4D0B-BE62-C72471A645B2', 'No permission rules for the selected target.', 'Nessuna regola permesso per la destinazione selezionata.') }}</div>\r\n }\r\n </div>\r\n\r\n <button type=\"button\" class=\"secondary\" (click)=\"addPermissionRule()\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'B4F053A6-0B3E-43A3-9B7D-5124EF2A3952'\" [primaryDefaultText]=\"'Create permission rule'\" [secondaryDefaultText]=\"'Crea regola permesso'\" />\r\n </button>\r\n</section>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, effect, inject, input, output, signal } from '@angular/core';\r\nimport { ChillI18nLabelComponent } from '../../lib/chill-i18n-label.component';\r\nimport { ChillI18nButtonLabelComponent } from '../../lib/chill-i18n-button-label.component';\r\nimport { NoticeTransitionDirective } from '../../lib/notice-transition.directive';\r\nimport type {\r\n AuthPermissionRule,\r\n AuthRole,\r\n AuthUser,\r\n EditableAuthPermissionRule\r\n} from '../../models/chill-auth.models';\r\nimport { ChillService } from '../../services/chill.service';\r\nimport { WorkspaceDialogService } from '../../services/workspace-dialog.service';\r\nimport { AuthSearchSelectComponent, type AuthSearchSelectOption } from './auth-search-select.component';\r\nimport { PermissionEditorComponent, type PermissionEditorRow } from './permission-editor.component';\r\n\r\n@Component({\r\n selector: 'app-role-permission',\r\n standalone: true,\r\n imports: [CommonModule, PermissionEditorComponent, ChillI18nLabelComponent, ChillI18nButtonLabelComponent, AuthSearchSelectComponent, NoticeTransitionDirective],\r\n templateUrl: './role-permission.component.html',\r\n styleUrl: './permission-editor.component.scss'\r\n})\r\nexport class RolePermissionComponent {\r\n readonly chill = inject(ChillService);\r\n private readonly dialog = inject(WorkspaceDialogService);\r\n readonly users = input<AuthUser[]>([]);\r\n readonly roles = input<AuthRole[]>([]);\r\n readonly roleCreated = output<AuthRole>();\r\n readonly roleUpdated = output<AuthRole>();\r\n\r\n readonly selectedRoleGuid = signal('');\r\n readonly isLoadingDetails = signal(false);\r\n readonly isSaving = signal(false);\r\n readonly errorMessage = signal('');\r\n readonly successMessage = signal('');\r\n readonly selectedUserGuids = signal<string[]>([]);\r\n readonly permissionRows = signal<PermissionEditorRow[]>([]);\r\n readonly originalSnapshot = signal('');\r\n readonly selectionVersion = signal(0);\r\n\r\n readonly roleOptions = computed<AuthSearchSelectOption[]>(() =>\r\n this.roles().map((role) => ({\r\n id: role.guid,\r\n label: role.name,\r\n description: role.description,\r\n keywords: [role.name, role.description, role.guid].join(' ')\r\n }))\r\n );\r\n\r\n readonly selectedRole = computed(() =>\r\n this.roles().find((role) => role.guid === this.selectedRoleGuid()) ?? null\r\n );\r\n\r\n readonly hasSelection = computed(() => !!this.selectedRole());\r\n readonly hasChanges = computed(() => {\r\n if (!this.selectedRole()) {\r\n return false;\r\n }\r\n\r\n return this.serializeSnapshot() !== this.originalSnapshot();\r\n });\r\n\r\n readonly saveDisabled = computed(() =>\r\n this.isSaving() || this.isLoadingDetails() || !this.selectedRole() || !this.hasChanges()\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const roles = this.roles();\r\n const selectedRoleGuid = this.selectedRoleGuid();\r\n if (roles.length === 0) {\r\n this.clearSelectionState();\r\n return;\r\n }\r\n\r\n if (selectedRoleGuid && !roles.some((role) => role.guid === selectedRoleGuid)) {\r\n this.clearSelectionState();\r\n }\r\n });\r\n }\r\n\r\n selectRole(roleGuid: string): void {\r\n if (!roleGuid) {\r\n this.clearSelectionState();\r\n return;\r\n }\r\n\r\n if (this.selectedRoleGuid() === roleGuid) {\r\n return;\r\n }\r\n\r\n this.selectedRoleGuid.set(roleGuid);\r\n this.errorMessage.set('');\r\n this.successMessage.set('');\r\n this.loadSelectedRole(roleGuid);\r\n }\r\n\r\n toggleUser(userGuid: string, checked: boolean): void {\r\n const current = new Set(this.selectedUserGuids());\r\n if (checked) {\r\n current.add(userGuid);\r\n } else {\r\n current.delete(userGuid);\r\n }\r\n\r\n this.selectedUserGuids.set([...current]);\r\n }\r\n\r\n updatePermissionRows(rows: PermissionEditorRow[]): void {\r\n this.permissionRows.set(rows);\r\n }\r\n\r\n save(): void {\r\n const role = this.selectedRole();\r\n if (!role || this.saveDisabled()) {\r\n return;\r\n }\r\n\r\n this.isSaving.set(true);\r\n this.errorMessage.set('');\r\n this.successMessage.set('');\r\n\r\n this.chill.saveAuthRoleAccess(\r\n role.guid,\r\n this.selectedUserGuids(),\r\n this.permissionRows().map((row) => this.toPermissionPayload(row))\r\n ).subscribe({\r\n next: (response) => {\r\n this.selectedUserGuids.set(response.users.map((user) => user.guid));\r\n this.permissionRows.set(response.permissions.map((permission) => this.toPermissionRow(permission)));\r\n this.originalSnapshot.set(this.serializeSnapshot());\r\n this.isSaving.set(false);\r\n this.successMessage.set(this.chill.T('F1F539A5-DB3A-4B32-B68B-9A2084AA0B6E', 'Role permissions updated.', 'Permessi ruolo aggiornati.'));\r\n },\r\n error: (error: unknown) => {\r\n this.isSaving.set(false);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n\r\n userLabel(user: AuthUser): string {\r\n return user.displayName?.trim() || user.userName?.trim() || user.externalId?.trim() || user.guid;\r\n }\r\n\r\n async openCreateRoleDialog(): Promise<void> {\r\n const { AuthRoleDialogComponent } = await import('./auth-role-dialog.component');\r\n const result = await this.dialog.openDialog<AuthRole>({\r\n title: this.chill.T('0B47EAA4-33BC-4D1C-B8C6-F75D3A5C8864', 'Create role', 'Crea ruolo'),\r\n component: AuthRoleDialogComponent,\r\n okLabel: await this.chill.TAsync('61E5DBBB-413A-449B-BE0E-B4A991FA1E39', 'Create', 'Crea')\r\n });\r\n\r\n if (result.status !== 'confirmed' || !result.value) {\r\n return;\r\n }\r\n\r\n this.roleCreated.emit(result.value);\r\n this.selectRole(result.value.guid);\r\n this.successMessage.set(this.chill.T('175A80C9-2A43-419F-A835-463E4A0A7BAA', 'Role created.', 'Ruolo creato.'));\r\n }\r\n\r\n async openEditRoleDialog(): Promise<void> {\r\n const role = this.selectedRole();\r\n if (!role) {\r\n return;\r\n }\r\n\r\n const { AuthRoleDialogComponent } = await import('./auth-role-dialog.component');\r\n const result = await this.dialog.openDialog<AuthRole>({\r\n title: this.chill.T('49DE3A27-3C6C-4E9F-9F07-6B1FAE3DC3E4', 'Edit role', 'Modifica ruolo'),\r\n component: AuthRoleDialogComponent,\r\n okLabel: await this.chill.TAsync('62953302-B951-4FD1-BD08-4B7649A91BAF', 'Save', 'Salva'),\r\n inputs: {\r\n roleGuid: role.guid\r\n }\r\n });\r\n\r\n if (result.status !== 'confirmed' || !result.value) {\r\n return;\r\n }\r\n\r\n this.roleUpdated.emit(result.value);\r\n this.selectRole(result.value.guid);\r\n this.successMessage.set(this.chill.T('4D95B0C0-73A2-4B35-9D06-A4F9133B768E', 'Role details updated.', 'Dettagli ruolo aggiornati.'));\r\n }\r\n\r\n private loadSelectedRole(roleGuid: string): void {\r\n this.isLoadingDetails.set(true);\r\n this.permissionRows.set([]);\r\n this.selectedUserGuids.set([]);\r\n\r\n this.chill.getAuthRoleAccess(roleGuid).subscribe({\r\n next: (response) => {\r\n this.selectionVersion.update((value) => value + 1);\r\n this.selectedUserGuids.set(response.users.map((user) => user.guid));\r\n this.permissionRows.set(response.permissions.map((permission) => this.toPermissionRow(permission)));\r\n this.originalSnapshot.set(this.serializeSnapshot());\r\n this.isLoadingDetails.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.isLoadingDetails.set(false);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n\r\n private toPermissionRow(permission: AuthPermissionRule): PermissionEditorRow {\r\n return {\r\n localId: permission.guid || `existing-${this.selectionVersion()}-${crypto.randomUUID()}`,\r\n guid: permission.guid,\r\n effect: permission.effect,\r\n action: permission.action,\r\n scope: permission.scope,\r\n module: permission.module,\r\n entityName: permission.entityName ?? '',\r\n propertyName: permission.propertyName ?? '',\r\n appliesToAllProperties: permission.appliesToAllProperties,\r\n description: permission.description\r\n };\r\n }\r\n\r\n private toPermissionPayload(row: PermissionEditorRow): EditableAuthPermissionRule {\r\n const propertyName = row.appliesToAllProperties\r\n ? undefined\r\n : row.propertyName?.trim() || undefined;\r\n\r\n return {\r\n guid: row.guid?.trim() || undefined,\r\n effect: row.effect,\r\n action: row.action,\r\n scope: row.scope,\r\n module: row.module.trim(),\r\n entityName: row.entityName?.trim() || '',\r\n propertyName,\r\n appliesToAllProperties: row.appliesToAllProperties,\r\n description: row.description.trim()\r\n };\r\n }\r\n\r\n private serializeSnapshot(): string {\r\n return JSON.stringify({\r\n userGuids: [...this.selectedUserGuids()].sort(),\r\n permissions: this.permissionRows().map((row) => this.toPermissionPayload(row))\r\n });\r\n }\r\n\r\n private clearSelectionState(): void {\r\n this.selectedRoleGuid.set('');\r\n this.selectedUserGuids.set([]);\r\n this.permissionRows.set([]);\r\n this.originalSnapshot.set('');\r\n this.isLoadingDetails.set(false);\r\n }\r\n}\r\n","<section class=\"permission-editor\">\r\n @if (errorMessage()) {\r\n <div class=\"notice error\">{{ errorMessage() }}</div>\r\n }\r\n\r\n @if (successMessage()) {\r\n <div class=\"notice success\">{{ successMessage() }}</div>\r\n }\r\n\r\n <header class=\"entity-header\">\r\n <div class=\"card-header\">\r\n <h2><app-chill-i18n-label [labelGuid]=\"'B3CC2B2C-8B89-4D4B-B5A0-88CDE26F61A6'\" [primaryDefaultText]=\"'Roles'\" [secondaryDefaultText]=\"'Ruoli'\" /></h2>\r\n <p><app-chill-i18n-label [labelGuid]=\"'FF8CDA0A-D049-41AD-82E7-8A24F0E41357'\" [primaryDefaultText]=\"'Search and select a role to edit direct permissions and assigned users.'\" [secondaryDefaultText]=\"'Cerca e seleziona un ruolo per modificare permessi diretti e utenti assegnati.'\" /></p>\r\n </div>\r\n\r\n <div class=\"entity-toolbar\">\r\n <app-auth-search-select\r\n class=\"entity-toolbar__lookup\"\r\n [options]=\"roleOptions()\"\r\n [selectedId]=\"selectedRoleGuid()\"\r\n [placeholder]=\"chill.T('D7906DD5-5C74-4CD1-B2D7-8D72510E1C22', 'Search and select a role', 'Cerca e seleziona un ruolo')\"\r\n [emptyMessage]=\"chill.T('D93069E7-524D-44CD-B9F8-6FF6E0215D8F', 'No roles are available.', 'Nessun ruolo disponibile.')\"\r\n [noResultsMessage]=\"chill.T('830FDB91-5135-4A95-BE1A-7E5B2198CB6F', 'No roles match the current search.', 'Nessun ruolo corrisponde alla ricerca corrente.')\"\r\n [clearAriaLabel]=\"chill.T('34015BA4-E0CA-460E-B82B-A4E2D4D8A184', 'Clear', 'Pulisci')\"\r\n (selectionChange)=\"selectRole($event)\" />\r\n\r\n <div class=\"entity-toolbar__actions\">\r\n @if (hasSelection()) {\r\n <button type=\"button\" class=\"secondary\" (click)=\"openEditRoleDialog()\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'314E7191-5C3A-4A96-8D01-AC4C17FF757F'\" [primaryDefaultText]=\"'Edit'\" [secondaryDefaultText]=\"'Modifica'\" />\r\n </button>\r\n }\r\n\r\n <button type=\"button\" (click)=\"openCreateRoleDialog()\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'23A5536E-8A94-4469-977C-D3BB57E5E621'\" [primaryDefaultText]=\"'Add'\" [secondaryDefaultText]=\"'Aggiungi'\" />\r\n </button>\r\n </div>\r\n </div>\r\n </header>\r\n\r\n <section class=\"content-column\">\r\n @if (isLoadingDetails()) {\r\n <div class=\"notice\">{{ chill.T('EDE17330-7FF3-4455-B5B3-15539A9DBD19', 'Loading role permissions...', 'Caricamento permessi ruolo...') }}</div>\r\n } @else if (!hasSelection()) {\r\n <div class=\"empty-panel\">{{ chill.T('636340D8-A41D-4CE3-B0C7-9E618C475A97', 'Select a role to edit access.', 'Seleziona un ruolo per modificare l\\'accesso.') }}</div>\r\n } @else {\r\n <header class=\"selection-header\">\r\n <div>\r\n <p class=\"section-kicker\"><app-chill-i18n-label [labelGuid]=\"'13D94C61-7FBC-4C9D-A3C1-3B2422F5EFC1'\" [primaryDefaultText]=\"'Selected role'\" [secondaryDefaultText]=\"'Ruolo selezionato'\" /></p>\r\n <h2>{{ selectedRole()!.name }}</h2>\r\n <p>{{ selectedRole()!.description }}</p>\r\n </div>\r\n\r\n <button type=\"button\" [disabled]=\"saveDisabled()\" (click)=\"save()\">\r\n @if (isSaving()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'32E1A7C8-B09A-4A6B-8EA5-3C5AF84070B2'\" [primaryDefaultText]=\"'Saving...'\" [secondaryDefaultText]=\"'Salvataggio...'\" />\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'E7E6D035-15D8-4F70-AE2A-23AD04F6B27E'\" [primaryDefaultText]=\"'Save role access'\" [secondaryDefaultText]=\"'Salva accesso ruolo'\" />\r\n }\r\n </button>\r\n </header>\r\n\r\n <div class=\"box-grid\">\r\n <app-permission-editor [rows]=\"permissionRows()\" (rowsChange)=\"updatePermissionRows($event)\" />\r\n\r\n <section class=\"box-card\">\r\n <header class=\"card-header\">\r\n <h3><app-chill-i18n-label [labelGuid]=\"'30CF51EC-A909-446D-97C1-2E9D980606A4'\" [primaryDefaultText]=\"'Assigned users'\" [secondaryDefaultText]=\"'Utenti assegnati'\" /></h3>\r\n <p><app-chill-i18n-label [labelGuid]=\"'AEEEB4D8-470D-49B3-A3E4-2B0A3B0764D7'\" [primaryDefaultText]=\"'Choose which users belong to the selected role.'\" [secondaryDefaultText]=\"'Scegli quali utenti appartengono al ruolo selezionato.'\" /></p>\r\n </header>\r\n\r\n <div class=\"check-list\">\r\n @for (user of users(); track user.guid) {\r\n <label class=\"check-item\">\r\n <input type=\"checkbox\" [checked]=\"selectedUserGuids().includes(user.guid)\" (change)=\"toggleUser(user.guid, $any($event.target).checked)\" />\r\n <span>\r\n <strong>{{ userLabel(user) }}</strong>\r\n <small>{{ user.userName }}</small>\r\n </span>\r\n </label>\r\n } @empty {\r\n <div class=\"empty-state\">{{ chill.T('F7E403F5-F8B4-4106-9258-071CB7EF5770', 'No users are available.', 'Nessun utente disponibile.') }}</div>\r\n }\r\n </div>\r\n </section>\r\n </div>\r\n }\r\n </section>\r\n</section>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, effect, inject, input, output, signal } from '@angular/core';\r\nimport { ChillI18nLabelComponent } from '../../lib/chill-i18n-label.component';\r\nimport { ChillI18nButtonLabelComponent } from '../../lib/chill-i18n-button-label.component';\r\nimport { NoticeTransitionDirective } from '../../lib/notice-transition.directive';\r\nimport type {\r\n AuthPermissionRule,\r\n AuthRole,\r\n AuthUser,\r\n EditableAuthPermissionRule\r\n} from '../../models/chill-auth.models';\r\nimport { ChillService } from '../../services/chill.service';\r\nimport { WorkspaceDialogService } from '../../services/workspace-dialog.service';\r\nimport { AuthSearchSelectComponent, type AuthSearchSelectOption } from './auth-search-select.component';\r\nimport { PermissionEditorComponent, type PermissionEditorRow } from './permission-editor.component';\r\n\r\n@Component({\r\n selector: 'app-user-permission',\r\n standalone: true,\r\n imports: [CommonModule, PermissionEditorComponent, ChillI18nLabelComponent, ChillI18nButtonLabelComponent, AuthSearchSelectComponent, NoticeTransitionDirective],\r\n templateUrl: './user-permission.component.html',\r\n styleUrl: './permission-editor.component.scss'\r\n})\r\nexport class UserPermissionComponent {\r\n readonly chill = inject(ChillService);\r\n private readonly dialog = inject(WorkspaceDialogService);\r\n readonly users = input<AuthUser[]>([]);\r\n readonly roles = input<AuthRole[]>([]);\r\n readonly userCreated = output<AuthUser>();\r\n readonly userUpdated = output<AuthUser>();\r\n\r\n readonly selectedUserGuid = signal('');\r\n readonly isLoadingDetails = signal(false);\r\n readonly isSaving = signal(false);\r\n readonly errorMessage = signal('');\r\n readonly successMessage = signal('');\r\n readonly selectedRoleGuids = signal<string[]>([]);\r\n readonly permissionRows = signal<PermissionEditorRow[]>([]);\r\n readonly originalSnapshot = signal('');\r\n readonly selectionVersion = signal(0);\r\n\r\n readonly userOptions = computed<AuthSearchSelectOption[]>(() =>\r\n this.users().map((user) => ({\r\n id: user.guid,\r\n label: this.userLabel(user),\r\n description: user.userName,\r\n keywords: [user.displayName, user.userName, user.externalId, user.guid].join(' ')\r\n }))\r\n );\r\n\r\n readonly selectedUser = computed(() =>\r\n this.users().find((user) => user.guid === this.selectedUserGuid()) ?? null\r\n );\r\n\r\n readonly hasSelection = computed(() => !!this.selectedUser());\r\n readonly hasChanges = computed(() => {\r\n if (!this.selectedUser()) {\r\n return false;\r\n }\r\n\r\n return this.serializeSnapshot() !== this.originalSnapshot();\r\n });\r\n\r\n readonly saveDisabled = computed(() =>\r\n this.isSaving() || this.isLoadingDetails() || !this.selectedUser() || !this.hasChanges()\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const users = this.users();\r\n const selectedUserGuid = this.selectedUserGuid();\r\n if (users.length === 0) {\r\n this.clearSelectionState();\r\n return;\r\n }\r\n\r\n if (selectedUserGuid && !users.some((user) => user.guid === selectedUserGuid)) {\r\n this.clearSelectionState();\r\n }\r\n });\r\n }\r\n\r\n selectUser(userGuid: string): void {\r\n if (!userGuid) {\r\n this.clearSelectionState();\r\n return;\r\n }\r\n\r\n if (this.selectedUserGuid() === userGuid) {\r\n return;\r\n }\r\n\r\n this.selectedUserGuid.set(userGuid);\r\n this.errorMessage.set('');\r\n this.successMessage.set('');\r\n this.loadSelectedUser(userGuid);\r\n }\r\n\r\n toggleRole(roleGuid: string, checked: boolean): void {\r\n const current = new Set(this.selectedRoleGuids());\r\n if (checked) {\r\n current.add(roleGuid);\r\n } else {\r\n current.delete(roleGuid);\r\n }\r\n\r\n this.selectedRoleGuids.set([...current]);\r\n }\r\n\r\n updatePermissionRows(rows: PermissionEditorRow[]): void {\r\n this.permissionRows.set(rows);\r\n }\r\n\r\n save(): void {\r\n const user = this.selectedUser();\r\n if (!user || this.saveDisabled()) {\r\n return;\r\n }\r\n\r\n this.isSaving.set(true);\r\n this.errorMessage.set('');\r\n this.successMessage.set('');\r\n\r\n this.chill.saveAuthUserAccess(\r\n user.guid,\r\n this.selectedRoleGuids(),\r\n this.permissionRows().map((row) => this.toPermissionPayload(row))\r\n ).subscribe({\r\n next: (response) => {\r\n this.selectedRoleGuids.set(response.roles.map((role) => role.guid));\r\n this.permissionRows.set(response.permissions.map((permission) => this.toPermissionRow(permission)));\r\n this.originalSnapshot.set(this.serializeSnapshot());\r\n this.isSaving.set(false);\r\n this.successMessage.set(this.chill.T('7F2F0CE1-88D9-4EF7-B7EA-2A729986AB27', 'User permissions updated.', 'Permessi utente aggiornati.'));\r\n },\r\n error: (error: unknown) => {\r\n this.isSaving.set(false);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n\r\n userLabel(user: AuthUser): string {\r\n return user.displayName?.trim() || user.userName?.trim() || user.externalId?.trim() || user.guid;\r\n }\r\n\r\n async openCreateUserDialog(): Promise<void> {\r\n const { AuthUserDialogComponent } = await import('./auth-user-dialog.component');\r\n const result = await this.dialog.openDialog<AuthUser>({\r\n title: this.chill.T('9E2BFF8D-BF6C-4C8D-BE6A-972425BA63DB', 'New user', 'Nuovo utente'),\r\n component: AuthUserDialogComponent,\r\n okLabel: await this.chill.TAsync('61E5DBBB-413A-449B-BE0E-B4A991FA1E39', 'Create', 'Crea')\r\n });\r\n\r\n if (result.status !== 'confirmed' || !result.value) {\r\n return;\r\n }\r\n\r\n this.userCreated.emit(result.value);\r\n this.selectUser(result.value.guid);\r\n this.successMessage.set(this.chill.T('A92C6256-EA89-4D6D-84F7-CF2423AF93D2', 'User created.', 'Utente creato.'));\r\n }\r\n\r\n async openEditUserDialog(): Promise<void> {\r\n const user = this.selectedUser();\r\n if (!user) {\r\n return;\r\n }\r\n\r\n const { AuthUserDialogComponent } = await import('./auth-user-dialog.component');\r\n const result = await this.dialog.openDialog<AuthUser>({\r\n title: this.chill.T('C082531D-0F50-49D4-B677-C752D1A4DAA4', 'Edit user', 'Modifica utente'),\r\n component: AuthUserDialogComponent,\r\n okLabel: await this.chill.TAsync('62953302-B951-4FD1-BD08-4B7649A91BAF', 'Save', 'Salva'),\r\n inputs: {\r\n userGuid: user.guid\r\n }\r\n });\r\n\r\n if (result.status !== 'confirmed' || !result.value) {\r\n return;\r\n }\r\n\r\n this.userUpdated.emit(result.value);\r\n this.selectUser(result.value.guid);\r\n this.successMessage.set(this.chill.T('5D2A2B57-7E48-417D-A886-AB5610A35A17', 'User details updated.', 'Dettagli utente aggiornati.'));\r\n }\r\n\r\n private loadSelectedUser(userGuid: string): void {\r\n this.isLoadingDetails.set(true);\r\n this.permissionRows.set([]);\r\n this.selectedRoleGuids.set([]);\r\n\r\n this.chill.getAuthUserAccess(userGuid).subscribe({\r\n next: (response) => {\r\n this.selectionVersion.update((value) => value + 1);\r\n this.selectedRoleGuids.set(response.roles.map((role) => role.guid));\r\n this.permissionRows.set(response.permissions.map((permission) => this.toPermissionRow(permission)));\r\n this.originalSnapshot.set(this.serializeSnapshot());\r\n this.isLoadingDetails.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.isLoadingDetails.set(false);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n\r\n private toPermissionRow(permission: AuthPermissionRule): PermissionEditorRow {\r\n return {\r\n localId: permission.guid || `existing-${this.selectionVersion()}-${crypto.randomUUID()}`,\r\n guid: permission.guid,\r\n effect: permission.effect,\r\n action: permission.action,\r\n scope: permission.scope,\r\n module: permission.module,\r\n entityName: permission.entityName ?? '',\r\n propertyName: permission.propertyName ?? '',\r\n appliesToAllProperties: permission.appliesToAllProperties,\r\n description: permission.description\r\n };\r\n }\r\n\r\n private toPermissionPayload(row: PermissionEditorRow): EditableAuthPermissionRule {\r\n const propertyName = row.appliesToAllProperties\r\n ? undefined\r\n : row.propertyName?.trim() || undefined;\r\n\r\n return {\r\n guid: row.guid?.trim() || undefined,\r\n effect: row.effect,\r\n action: row.action,\r\n scope: row.scope,\r\n module: row.module.trim(),\r\n entityName: row.entityName?.trim() || '',\r\n propertyName,\r\n appliesToAllProperties: row.appliesToAllProperties,\r\n description: row.description.trim()\r\n };\r\n }\r\n\r\n private serializeSnapshot(): string {\r\n return JSON.stringify({\r\n roleGuids: [...this.selectedRoleGuids()].sort(),\r\n permissions: this.permissionRows().map((row) => this.toPermissionPayload(row))\r\n });\r\n }\r\n\r\n private clearSelectionState(): void {\r\n this.selectedUserGuid.set('');\r\n this.selectedRoleGuids.set([]);\r\n this.permissionRows.set([]);\r\n this.originalSnapshot.set('');\r\n this.isLoadingDetails.set(false);\r\n }\r\n}\r\n","<section class=\"permission-editor\">\r\n @if (errorMessage()) {\r\n <div class=\"notice error\">{{ errorMessage() }}</div>\r\n }\r\n\r\n @if (successMessage()) {\r\n <div class=\"notice success\">{{ successMessage() }}</div>\r\n }\r\n\r\n <header class=\"entity-header\">\r\n <div class=\"card-header\">\r\n <h2><app-chill-i18n-label [labelGuid]=\"'8455C9A5-BAC8-457C-B726-F79DA6D758DF'\" [primaryDefaultText]=\"'Users'\" [secondaryDefaultText]=\"'Utenti'\" /></h2>\r\n <p><app-chill-i18n-label [labelGuid]=\"'B8DAEDE3-34D6-4DDC-879D-70A32294DFF7'\" [primaryDefaultText]=\"'Search and select a user to edit direct permissions and assigned roles.'\" [secondaryDefaultText]=\"'Cerca e seleziona un utente per modificare permessi diretti e ruoli assegnati.'\" /></p>\r\n </div>\r\n\r\n <div class=\"entity-toolbar\">\r\n <app-auth-search-select\r\n class=\"entity-toolbar__lookup\"\r\n [options]=\"userOptions()\"\r\n [selectedId]=\"selectedUserGuid()\"\r\n [placeholder]=\"chill.T('F513F0F0-ACD9-47D6-8251-892B4AA3A21E', 'Search and select a user', 'Cerca e seleziona un utente')\"\r\n [emptyMessage]=\"chill.T('64B21C60-B790-4E38-8E08-B8C2D8D8868A', 'No users are available.', 'Nessun utente disponibile.')\"\r\n [noResultsMessage]=\"chill.T('14C74A0F-C4A8-4CAE-8F23-9344EA450053', 'No users match the current search.', 'Nessun utente corrisponde alla ricerca corrente.')\"\r\n [clearAriaLabel]=\"chill.T('34015BA4-E0CA-460E-B82B-A4E2D4D8A184', 'Clear', 'Pulisci')\"\r\n (selectionChange)=\"selectUser($event)\" />\r\n\r\n <div class=\"entity-toolbar__actions\">\r\n @if (hasSelection()) {\r\n <button type=\"button\" class=\"secondary\" (click)=\"openEditUserDialog()\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'314E7191-5C3A-4A96-8D01-AC4C17FF757F'\" [primaryDefaultText]=\"'Edit'\" [secondaryDefaultText]=\"'Modifica'\" />\r\n </button>\r\n }\r\n\r\n <button type=\"button\" (click)=\"openCreateUserDialog()\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'23A5536E-8A94-4469-977C-D3BB57E5E621'\" [primaryDefaultText]=\"'Add'\" [secondaryDefaultText]=\"'Aggiungi'\" />\r\n </button>\r\n </div>\r\n </div>\r\n </header>\r\n\r\n <section class=\"content-column\">\r\n @if (isLoadingDetails()) {\r\n <div class=\"notice\">{{ chill.T('B6A1E50E-D1A0-4A47-AC66-25801770A5DD', 'Loading user permissions...', 'Caricamento permessi utente...') }}</div>\r\n } @else if (!hasSelection()) {\r\n <div class=\"empty-panel\">{{ chill.T('6C31D890-EA80-4180-8C0A-8B369E3D8CDD', 'Select a user to edit access.', 'Seleziona un utente per modificare l\\'accesso.') }}</div>\r\n } @else {\r\n <header class=\"selection-header\">\r\n <div>\r\n <p class=\"section-kicker\"><app-chill-i18n-label [labelGuid]=\"'EE9FBF12-1D92-477C-BEF5-0A2787DE93D0'\" [primaryDefaultText]=\"'Selected user'\" [secondaryDefaultText]=\"'Utente selezionato'\" /></p>\r\n <h2>{{ userLabel(selectedUser()!) }}</h2>\r\n <p>{{ selectedUser()!.userName }}</p>\r\n </div>\r\n\r\n <button type=\"button\" [disabled]=\"saveDisabled()\" (click)=\"save()\">\r\n @if (isSaving()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'32E1A7C8-B09A-4A6B-8EA5-3C5AF84070B2'\" [primaryDefaultText]=\"'Saving...'\" [secondaryDefaultText]=\"'Salvataggio...'\" />\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'D9938C0B-5D36-4702-BB53-E46D6154D2FD'\" [primaryDefaultText]=\"'Save user access'\" [secondaryDefaultText]=\"'Salva accesso utente'\" />\r\n }\r\n </button>\r\n </header>\r\n\r\n <div class=\"box-grid\">\r\n <app-permission-editor [rows]=\"permissionRows()\" (rowsChange)=\"updatePermissionRows($event)\" />\r\n\r\n <section class=\"box-card\">\r\n <header class=\"card-header\">\r\n <h3><app-chill-i18n-label [labelGuid]=\"'AB54AD2A-2A88-4AF0-8387-39AA4A08F9F6'\" [primaryDefaultText]=\"'Assigned roles'\" [secondaryDefaultText]=\"'Ruoli assegnati'\" /></h3>\r\n <p><app-chill-i18n-label [labelGuid]=\"'5A697E78-7AE6-4098-95E5-7E3E934D1B55'\" [primaryDefaultText]=\"'Choose which roles are assigned to the selected user.'\" [secondaryDefaultText]='\"Scegli quali ruoli sono assegnati all'utente selezionato.\"' /></p>\r\n </header>\r\n\r\n <div class=\"check-list\">\r\n @for (role of roles(); track role.guid) {\r\n <label class=\"check-item\">\r\n <input type=\"checkbox\" [checked]=\"selectedRoleGuids().includes(role.guid)\" (change)=\"toggleRole(role.guid, $any($event.target).checked)\" />\r\n <span>\r\n <strong>{{ role.name }}</strong>\r\n <small>{{ role.description }}</small>\r\n </span>\r\n </label>\r\n } @empty {\r\n <div class=\"empty-state\">{{ chill.T('A15A13D4-F9BA-4D8A-B2F6-1F531B82FECC', 'No roles are available.', 'Nessun ruolo disponibile.') }}</div>\r\n }\r\n </div>\r\n </section>\r\n </div>\r\n }\r\n </section>\r\n</section>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, OnDestroy, OnInit, computed, effect, inject, input, signal } from '@angular/core';\r\nimport { ChillI18nLabelComponent } from '../../lib/chill-i18n-label.component';\r\nimport { NoticeTransitionDirective } from '../../lib/notice-transition.directive';\r\nimport type { AuthRole, AuthUser } from '../../models/chill-auth.models';\r\nimport type { WorkspaceTaskComponentInterface } from '../../models/workspace-task.models';\r\nimport { ChillService } from '../../services/chill.service';\r\nimport { WorkspaceToolbarService } from '../../services/workspace-toolbar.service';\r\nimport { RolePermissionComponent } from './role-permission.component';\r\nimport { UserPermissionComponent } from './user-permission.component';\r\n\r\ntype PermissionSection = 'users' | 'roles';\r\n\r\n@Component({\r\n selector: 'app-permissions-page',\r\n standalone: true,\r\n imports: [CommonModule, UserPermissionComponent, RolePermissionComponent, ChillI18nLabelComponent, NoticeTransitionDirective],\r\n templateUrl: './permissions-page.component.html',\r\n styleUrl: './permissions-page.component.scss'\r\n})\r\nexport class PermissionsPageComponent implements WorkspaceTaskComponentInterface, OnInit, OnDestroy {\r\n static getComponentConfigurationJsonExample(): Record<string, never> {\r\n return {};\r\n }\r\n\r\n readonly chill = inject(ChillService);\r\n readonly toolbar = inject(WorkspaceToolbarService);\r\n readonly visible = input(true);\r\n readonly toolbarScope = input('workspace');\r\n\r\n readonly isLoading = signal(true);\r\n readonly errorMessage = signal('');\r\n readonly activeSection = signal<PermissionSection>('users');\r\n readonly users = signal<AuthUser[]>([]);\r\n readonly roles = signal<AuthRole[]>([]);\r\n readonly canManagePermissions = signal(false);\r\n\r\n readonly currentUser = computed(() => {\r\n const session = this.chill.session();\r\n const normalizedUserName = session?.userName?.trim().toLowerCase() ?? '';\r\n const normalizedUserId = session?.userId?.trim() ?? '';\r\n\r\n return this.users().find((user) =>\r\n user.guid === normalizedUserId\r\n || user.userName.trim().toLowerCase() === normalizedUserName\r\n ) ?? null;\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const toolbarScope = this.toolbarScope();\r\n if (!this.visible() || !this.canManagePermissions()) {\r\n this.toolbar.clearButtons(toolbarScope);\r\n return;\r\n }\r\n\r\n const activeSection = this.activeSection();\r\n this.toolbar.setButtons([\r\n {\r\n id: 'permissions-users',\r\n labelGuid: '8455C9A5-BAC8-457C-B726-F79DA6D758DF',\r\n primaryDefaultText: 'Users',\r\n secondaryDefaultText: 'Utenti',\r\n ariaLabel: this.chill.T('8455C9A5-BAC8-457C-B726-F79DA6D758DF', 'Users', 'Utenti'),\r\n action: () => this.setActiveSection('users'),\r\n disabled: activeSection === 'users'\r\n },\r\n {\r\n id: 'permissions-roles',\r\n labelGuid: 'B3CC2B2C-8B89-4D4B-B5A0-88CDE26F61A6',\r\n primaryDefaultText: 'Roles',\r\n secondaryDefaultText: 'Ruoli',\r\n ariaLabel: this.chill.T('B3CC2B2C-8B89-4D4B-B5A0-88CDE26F61A6', 'Roles', 'Ruoli'),\r\n action: () => this.setActiveSection('roles'),\r\n disabled: activeSection === 'roles'\r\n }\r\n ], toolbarScope);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loadPage();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.toolbar.clearButtons(this.toolbarScope());\r\n }\r\n\r\n setActiveSection(section: PermissionSection): void {\r\n this.activeSection.set(section);\r\n }\r\n\r\n handleUserCreated(user: AuthUser): void {\r\n this.users.set(this.upsertUser(user));\r\n this.activeSection.set('users');\r\n }\r\n\r\n handleUserUpdated(user: AuthUser): void {\r\n this.users.set(this.upsertUser(user));\r\n }\r\n\r\n handleRoleCreated(role: AuthRole): void {\r\n this.roles.set(this.upsertRole(role));\r\n this.activeSection.set('roles');\r\n }\r\n\r\n handleRoleUpdated(role: AuthRole): void {\r\n this.roles.set(this.upsertRole(role));\r\n }\r\n\r\n private loadPage(): void {\r\n this.isLoading.set(true);\r\n this.errorMessage.set('');\r\n\r\n this.chill.getAuthUsers().subscribe({\r\n next: (users) => {\r\n const sortedUsers = [...users].sort((left, right) => this.userLabel(left).localeCompare(this.userLabel(right)));\r\n this.users.set(sortedUsers);\r\n\r\n const currentUser = this.resolveCurrentUser(sortedUsers);\r\n const canManagePermissions = currentUser?.canManagePermissions === true;\r\n this.canManagePermissions.set(canManagePermissions);\r\n\r\n if (!canManagePermissions) {\r\n this.roles.set([]);\r\n this.isLoading.set(false);\r\n return;\r\n }\r\n\r\n this.chill.getAuthRoles().subscribe({\r\n next: (roles) => {\r\n const sortedRoles = [...roles].sort((left, right) => left.name.localeCompare(right.name));\r\n this.roles.set(sortedRoles);\r\n this.isLoading.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.roles.set([]);\r\n this.isLoading.set(false);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n },\r\n error: (error: unknown) => {\r\n this.users.set([]);\r\n this.roles.set([]);\r\n this.canManagePermissions.set(false);\r\n this.isLoading.set(false);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n\r\n private resolveCurrentUser(users: AuthUser[]): AuthUser | null {\r\n const session = this.chill.session();\r\n const normalizedUserName = session?.userName?.trim().toLowerCase() ?? '';\r\n const normalizedUserId = session?.userId?.trim() ?? '';\r\n\r\n return users.find((user) =>\r\n user.guid === normalizedUserId\r\n || user.userName.trim().toLowerCase() === normalizedUserName\r\n ) ?? null;\r\n }\r\n\r\n private userLabel(user: AuthUser): string {\r\n return user.displayName?.trim() || user.userName?.trim() || user.externalId?.trim() || user.guid;\r\n }\r\n\r\n private upsertUser(user: AuthUser): AuthUser[] {\r\n const users = this.users().filter((entry) => entry.guid !== user.guid);\r\n return [...users, user].sort((left, right) => this.userLabel(left).localeCompare(this.userLabel(right)));\r\n }\r\n\r\n private upsertRole(role: AuthRole): AuthRole[] {\r\n const roles = this.roles().filter((entry) => entry.guid !== role.guid);\r\n return [...roles, role].sort((left, right) => left.name.localeCompare(right.name));\r\n }\r\n}\r\n","<section class=\"permissions-page\">\r\n <header class=\"hero\">\r\n <p class=\"eyebrow\"><app-chill-i18n-label [labelGuid]=\"'68ADFBAB-4D1A-42A5-AB39-F099FB870A7C'\" [primaryDefaultText]=\"'Security'\" [secondaryDefaultText]=\"'Sicurezza'\" /></p>\r\n <h1><app-chill-i18n-label [labelGuid]=\"'830A6D96-0332-4B08-8EC7-B850702B4337'\" [primaryDefaultText]=\"'Permissions'\" [secondaryDefaultText]=\"'Permessi'\" /></h1>\r\n <p class=\"lede\"><app-chill-i18n-label [labelGuid]=\"'B8F5A363-9E5F-4CAA-9296-54FBF31E1C98'\" [primaryDefaultText]=\"'Manage user roles, permission rules, and the special ability to manage permissions.'\" [secondaryDefaultText]='\"Gestisci ruoli utente, regole permesso e l'abilitazione speciale per gestire i permessi.\"' /></p>\r\n </header>\r\n\r\n @if (errorMessage()) {\r\n <div class=\"notice error\">{{ errorMessage() }}</div>\r\n }\r\n\r\n @if (isLoading()) {\r\n <div class=\"notice\">{{ chill.T('9559C65E-F793-4A7E-BBE3-52F9400A3444', 'Loading users, roles, and permission rules...', 'Caricamento utenti, ruoli e regole permesso...') }}</div>\r\n } @else if (!canManagePermissions()) {\r\n <section class=\"empty-state\">\r\n <h2><app-chill-i18n-label [labelGuid]=\"'5DEBC3A2-0A07-4B40-B9CF-16C4E3AFA8C1'\" [primaryDefaultText]=\"'Insufficient permissions'\" [secondaryDefaultText]=\"'Permessi insufficienti'\" /></h2>\r\n <p><app-chill-i18n-label [labelGuid]=\"'0C03BF4E-57B4-47DB-8E71-0B5B3D165CB5'\" [primaryDefaultText]=\"'You have insufficient permission to handle permissions.'\" [secondaryDefaultText]=\"'Non disponi dei permessi sufficienti per gestire i permessi.'\" /></p>\r\n </section>\r\n } @else {\r\n @if (activeSection() === 'users') {\r\n <app-user-permission\r\n [users]=\"users()\"\r\n [roles]=\"roles()\"\r\n (userCreated)=\"handleUserCreated($event)\"\r\n (userUpdated)=\"handleUserUpdated($event)\" />\r\n } @else {\r\n <app-role-permission\r\n [users]=\"users()\"\r\n [roles]=\"roles()\"\r\n (roleCreated)=\"handleRoleCreated($event)\"\r\n (roleUpdated)=\"handleRoleUpdated($event)\" />\r\n }\r\n }\r\n</section>\r\n","import type { ChillDtoEntityOptions, JsonObject, JsonValue } from '@chill-sharp/ng-client';\r\n\r\nexport type ChillMetadataValue = JsonValue;\r\nexport type ChillPropertySelectOptionTuple = [value: string, text: string];\r\nexport type ChillMetadataRecord = Record<string, ChillMetadataValue>;\r\n\r\nexport interface ChillSchemaRelationLabel {\r\n labelGuid?: string | null;\r\n primaryDefaultText?: string;\r\n secondaryDefaultText?: string;\r\n}\r\n\r\nexport interface ChillSchemaRelation {\r\n chillType?: string;\r\n chillQuery?: string;\r\n fixedValues?: Record<string, JsonValue>;\r\n fixedQueryValues?: Record<string, JsonValue>;\r\n relationLabel?: ChillSchemaRelationLabel | null;\r\n}\r\n\r\nexport type ChillEntityState = JsonObject & {\r\n isNew?: boolean;\r\n isDeleting?: boolean;\r\n};\r\n\r\nexport interface ChillPropertySchema {\r\n name: string;\r\n displayName?: string;\r\n propertyType?: number;\r\n simplePropertyType?: string;\r\n mcpDescription?: string;\r\n isNullable: boolean;\r\n isReadOnly?: boolean;\r\n chillType?: string | null;\r\n referenceChillType?: string | null;\r\n referenceChillTypeQuery?: string | null;\r\n minLength?: number | null;\r\n maxLength?: number | null;\r\n integerMinValue?: number | null;\r\n integerMaxValue?: number | null;\r\n decimalMinValue?: number | null;\r\n decimalMaxValue?: number | null;\r\n decimalPlaces?: number | null;\r\n precision?: number | null;\r\n scale?: number | null;\r\n dateFormat?: string;\r\n customFormat?: string;\r\n regexPattern?: string;\r\n enumValues?: string[] | null;\r\n lookupQueryValues?: string | null;\r\n metadata?: ChillMetadataRecord;\r\n}\r\n\r\nexport interface ChillSchema {\r\n chillType?: string;\r\n chillViewCode?: string;\r\n displayName?: string;\r\n handleAttachments?: boolean;\r\n enableMCP?: boolean;\r\n mcpDescription?: string | null;\r\n queryRelatedChillType?: string;\r\n metadata?: ChillMetadataRecord;\r\n relations?: ChillSchemaRelation[];\r\n properties: ChillPropertySchema[];\r\n}\r\n\r\nexport interface ChillSchemaListItem {\r\n name: string;\r\n chillType: string;\r\n type?: string;\r\n displayName?: string;\r\n chillViewCode?: string;\r\n module?: string;\r\n relatedChillType?: string | null;\r\n}\r\n\r\nexport interface ChillEntityOptions extends ChillDtoEntityOptions {\r\n enableMCP: boolean;\r\n mcpDescription: string | null;\r\n}\r\n\r\nexport interface ChillOrdering extends JsonObject {\r\n propertyName: string;\r\n direction: 'ASC' | 'DESC';\r\n}\r\n\r\nexport interface ChillPagination extends JsonObject {\r\n Page: number;\r\n PageResults: number;\r\n}\r\n\r\nexport type ChillEntityChangeAction = 'CREATED' | 'UPDATED' | 'DELETED';\r\n\r\nexport interface ChillEntityChangeNotification {\r\n chillType: string;\r\n guid: string;\r\n action: ChillEntityChangeAction;\r\n}\r\n\r\nexport type ChillEntity = JsonObject & {\r\n guid?: string;\r\n label?: string;\r\n properties?: Record<string, JsonValue>;\r\n chillState?: ChillEntityState;\r\n};\r\n\r\nexport type ChillQuery = JsonObject & {\r\n chillType?: string;\r\n properties?: Record<string, JsonValue>;\r\n resultProperties?: JsonValue[];\r\n pagination?: ChillPagination | null;\r\n ordering?: ChillOrdering | null;\r\n lightweightRequired?: boolean | null;\r\n chillState?: ChillEntityState;\r\n};\r\n\r\nexport interface ChillFormSubmitEvent {\r\n kind: 'entity' | 'query';\r\n value: ChillEntity | ChillQuery;\r\n}\r\n\r\nexport const CHILL_PROPERTY_TYPE = {\r\n Unknown: 0,\r\n Guid: 1,\r\n Integer: 10,\r\n Decimal: 20,\r\n Date: 30,\r\n Time: 40,\r\n DateTime: 50,\r\n Duration: 60,\r\n Boolean: 70,\r\n String: 80,\r\n Text: 81,\r\n Select: 90,\r\n Json: 99,\r\n ChillEntity: 1000,\r\n ChillEntityCollection: 1010,\r\n ChillQuery: 1100\r\n} as const;\r\n\r\nexport type ChillPropertyTypeOption = {\r\n value: number;\r\n label: string;\r\n};\r\n\r\nexport const CHILL_PROPERTY_TYPE_OPTIONS: ChillPropertyTypeOption[] = [\r\n { value: CHILL_PROPERTY_TYPE.Guid, label: 'Guid' },\r\n { value: CHILL_PROPERTY_TYPE.Integer, label: 'Integer' },\r\n { value: CHILL_PROPERTY_TYPE.Decimal, label: 'Decimal' },\r\n { value: CHILL_PROPERTY_TYPE.Date, label: 'Date' },\r\n { value: CHILL_PROPERTY_TYPE.Time, label: 'Time' },\r\n { value: CHILL_PROPERTY_TYPE.DateTime, label: 'DateTime' },\r\n { value: CHILL_PROPERTY_TYPE.Duration, label: 'Duration' },\r\n { value: CHILL_PROPERTY_TYPE.Boolean, label: 'Boolean' },\r\n { value: CHILL_PROPERTY_TYPE.String, label: 'String' },\r\n { value: CHILL_PROPERTY_TYPE.Text, label: 'Text' },\r\n { value: CHILL_PROPERTY_TYPE.Select, label: 'Select' },\r\n { value: CHILL_PROPERTY_TYPE.Json, label: 'Json' },\r\n { value: CHILL_PROPERTY_TYPE.ChillEntity, label: 'ChillEntity' },\r\n { value: CHILL_PROPERTY_TYPE.ChillEntityCollection, label: 'ChillEntityCollection' },\r\n { value: CHILL_PROPERTY_TYPE.ChillQuery, label: 'ChillQuery' }\r\n];\r\n\r\nexport function canChangeChillPropertyType(currentType: number | undefined, nextType: number): boolean {\r\n if ((currentType ?? CHILL_PROPERTY_TYPE.Unknown) === nextType) {\r\n return true;\r\n }\r\n\r\n return currentType === CHILL_PROPERTY_TYPE.String\r\n && (nextType === CHILL_PROPERTY_TYPE.Text || nextType === CHILL_PROPERTY_TYPE.Json);\r\n}\r\n\r\nexport function chillSimplePropertyType(propertyType: number | undefined): string {\r\n switch (propertyType) {\r\n case CHILL_PROPERTY_TYPE.Guid:\r\n return 'guid';\r\n case CHILL_PROPERTY_TYPE.Integer:\r\n return 'int';\r\n case CHILL_PROPERTY_TYPE.Decimal:\r\n return 'decimal';\r\n case CHILL_PROPERTY_TYPE.Date:\r\n return 'date';\r\n case CHILL_PROPERTY_TYPE.Time:\r\n return 'time';\r\n case CHILL_PROPERTY_TYPE.DateTime:\r\n return 'datetime';\r\n case CHILL_PROPERTY_TYPE.Duration:\r\n return 'duration';\r\n case CHILL_PROPERTY_TYPE.Boolean:\r\n return 'bool';\r\n case CHILL_PROPERTY_TYPE.String:\r\n return 'string';\r\n case CHILL_PROPERTY_TYPE.Text:\r\n return 'text';\r\n case CHILL_PROPERTY_TYPE.Select:\r\n return 'string';\r\n case CHILL_PROPERTY_TYPE.Json:\r\n return 'json';\r\n case CHILL_PROPERTY_TYPE.ChillEntity:\r\n return 'chill-entity';\r\n case CHILL_PROPERTY_TYPE.ChillEntityCollection:\r\n return 'chill-entity-collection';\r\n case CHILL_PROPERTY_TYPE.ChillQuery:\r\n return 'chill-query';\r\n default:\r\n return '';\r\n }\r\n}\r\n\r\nexport type ChillEntityStatus = 'pristine' | 'draft' | 'dirty' | 'saving' | 'deleted' | 'error';\r\n\r\nexport type ChillState = JsonObject & {\r\n isNew: boolean;\r\n status: ChillEntityStatus;\r\n errorMessage?: string | null;\r\n validationErrors?: Record<string, string> | null;\r\n genericErrors?: string[] | null;\r\n dirtyProperties?: string[] | null;\r\n ignoreNotificationsUntil?: number | null;\r\n};\r\n","import { Component, input, output } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport type { JsonValue } from '@chill-sharp/ng-client';\n\n@Component({\n selector: 'app-chill-polymorphic-boolean-control',\n standalone: true,\n imports: [ReactiveFormsModule],\n template: `<input type=\"checkbox\" [formControl]=\"control()\" [disabled]=\"readOnly()\" (blur)=\"blur.emit()\" [name]=\"name()\" />`,\n styleUrl: './chill-polymorphic-control.shared.scss'\n})\nexport class ChillPolymorphicBooleanControlComponent {\n readonly control = input.required<FormControl<JsonValue>>();\n readonly name = input.required<string>();\n readonly readOnly = input(false);\n readonly blur = output<void>();\n}\n","import { Component, inject, input, output } from '@angular/core';\nimport { ConnectedPosition, OverlayModule } from '@angular/cdk/overlay';\nimport { FormsModule } from '@angular/forms';\nimport type { JsonObject } from '@chill-sharp/ng-client';\nimport { CHILL_PROPERTY_TYPE, type ChillPropertySchema } from '../../models/chill-schema.models';\nimport { ChillService } from '../../services/chill.service';\n\n@Component({\n selector: 'app-chill-polymorphic-lookup-control',\n standalone: true,\n imports: [FormsModule, OverlayModule],\n template: `<div class=\"lookup\">\n @if (isCollection()) {\n @for (entity of selectedEntities(); track lookupGuid(entity) || $index) {\n <div class=\"lookup-selected\" [title]=\"lookupLabel(entity)\">\n <span class=\"lookup-selected__label lookup-selected__label--full\">{{ lookupLabel(entity) || selectValueText }}</span>\n <span class=\"lookup-selected__label lookup-selected__label--short\">{{ lookupShortLabel(entity) || lookupLabel(entity) || selectValueText }}</span>\n <button type=\"button\" class=\"lookup-selected__clear\" (click)=\"remove.emit(entity)\" [disabled]=\"readOnly()\" [attr.aria-label]=\"clearText\">X</button>\n </div>\n }\n } @else if (isSingleEntity() && hasSelectedEntity()) {\n <div class=\"lookup-selected\" [title]=\"selectedLabel()\">\n <span class=\"lookup-selected__label lookup-selected__label--full\">{{ selectedLabel() || selectValueText }}</span>\n <span class=\"lookup-selected__label lookup-selected__label--short\">{{ selectedShortLabel() || selectedLabel() || selectValueText }}</span>\n <button type=\"button\" class=\"lookup-selected__clear\" (click)=\"clear.emit()\" [disabled]=\"readOnly()\" [attr.aria-label]=\"clearText\">X</button>\n </div>\n } @else {\n <div class=\"lookup-bar\">\n <div class=\"lookup-input-slot\" cdkOverlayOrigin #lookupOrigin=\"cdkOverlayOrigin\" #lookupOriginElement>\n <input type=\"text\" [ngModel]=\"term()\" (ngModelChange)=\"termChange.emit($event)\" (focus)=\"focus.emit()\" (blur)=\"blur.emit()\" [disabled]=\"readOnly()\" [name]=\"property().name\" [placeholder]=\"placeholder() || searchText\" />\n </div>\n <button type=\"button\" class=\"lookup-dialog\" (mousedown)=\"beginDialog.emit()\" (click)=\"openDialog.emit()\" [disabled]=\"readOnly() || !canOpenDialog()\" [attr.aria-label]=\"openPickerText\">...</button>\n @if (isCollection()) { <button type=\"button\" class=\"lookup-clear\" (click)=\"clear.emit()\" [disabled]=\"readOnly()\">{{ clearText }}</button> }\n </div>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"lookupOrigin\" [cdkConnectedOverlayOpen]=\"results().length > 0\" [cdkConnectedOverlayPositions]=\"positions()\" [cdkConnectedOverlayPush]=\"true\" [cdkConnectedOverlayFlexibleDimensions]=\"true\" [cdkConnectedOverlayViewportMargin]=\"8\" [cdkConnectedOverlayOffsetY]=\"6\">\n <div class=\"lookup-results\" role=\"listbox\" [style.--lookup-overlay-width.px]=\"overlayWidth(lookupOriginElement)\">\n @for (result of results(); track $index) { <button type=\"button\" class=\"lookup-result\" [class.is-selected]=\"isSelected(result)\" (mousedown)=\"$event.preventDefault()\" (click)=\"select.emit(result)\">{{ lookupLabel(result) || selectValueText }}</button> }\n </div>\n </ng-template>\n }\n @if (searching()) { <small class=\"lookup-status\">{{ searchingText }}</small> }\n @if (error()) { <small class=\"field-error\">{{ error() }}</small> }\n </div>`,\n styleUrl: './chill-polymorphic-lookup-control.component.scss'\n})\nexport class ChillPolymorphicLookupControlComponent {\n readonly chill = inject(ChillService);\n readonly property = input.required<ChillPropertySchema>();\n readonly readOnly = input(false);\n readonly placeholder = input('');\n readonly term = input('');\n readonly results = input<JsonObject[]>([]);\n readonly error = input('');\n readonly searching = input(false);\n readonly selectedEntities = input<JsonObject[]>([]);\n readonly selectedLabel = input('');\n readonly selectedShortLabel = input('');\n readonly selectedGuid = input('');\n readonly hasSelectedEntity = input(false);\n readonly canOpenDialog = input(false);\n readonly positions = input<ConnectedPosition[]>([]);\n readonly termChange = output<string>();\n readonly focus = output<void>();\n readonly blur = output<void>();\n readonly beginDialog = output<void>();\n readonly openDialog = output<void>();\n readonly clear = output<void>();\n readonly select = output<JsonObject>();\n readonly remove = output<JsonObject>();\n\n get selectValueText(): string { return this.chill.T('B93CA88B-01FE-44B6-9C2F-C9878A7B324B', 'Select value', 'Seleziona valore'); }\n get clearText(): string { return this.chill.T('34015BA4-E0CA-460E-B82B-A4E2D4D8A184', 'Clear', 'Pulisci'); }\n get searchText(): string { return this.chill.T('FA7B8E01-658C-4D63-B53F-D476CD697892', 'Search entity', 'Cerca entita'); }\n get openPickerText(): string { return this.chill.T('B6D48459-73D4-4234-977E-8D79E510A20D', 'Open entity picker', 'Apri selettore entita'); }\n get searchingText(): string { return this.chill.T('ABAF5996-C2BB-4F85-BE0F-CC75883A648B', 'Searching...', 'Ricerca in corso...'); }\n isCollection(): boolean { return this.property().propertyType === CHILL_PROPERTY_TYPE.ChillEntityCollection; }\n isSingleEntity(): boolean { return this.property().propertyType === CHILL_PROPERTY_TYPE.ChillEntity; }\n overlayWidth(origin: HTMLElement | null): number { return origin ? Math.ceil(origin.getBoundingClientRect().width) : 0; }\n isSelected(result: JsonObject): boolean {\n const guid = this.lookupGuid(result);\n return !!guid && (this.selectedEntities().some((entity) => this.lookupGuid(entity) === guid) || this.selectedGuid() === guid);\n }\n lookupLabel(result: JsonObject): string {\n const value = result['Label'] ?? result['label'] ?? result['DisplayName'] ?? result['displayName'] ?? result['Name'] ?? result['name'] ?? result['Guid'] ?? result['guid'];\n return typeof value === 'string' ? value.trim() : typeof value === 'number' || typeof value === 'boolean' ? String(value) : '';\n }\n lookupShortLabel(result: JsonObject): string {\n const value = result['ShortLabel'] ?? result['shortLabel'] ?? result['ShortName'] ?? result['shortName'] ?? result['Code'];\n return typeof value === 'string' && value.trim() ? value.trim() : typeof value === 'number' || typeof value === 'boolean' ? String(value) : this.lookupLabel(result);\n }\n lookupGuid(result: JsonObject): string { const value = result['Guid'] ?? result['guid']; return typeof value === 'string' ? value.trim() : ''; }\n}\n","import { Component, input, output } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport type { JsonValue } from '@chill-sharp/ng-client';\n\n@Component({\n selector: 'app-chill-polymorphic-textarea-control',\n standalone: true,\n imports: [ReactiveFormsModule],\n template: `<textarea rows=\"4\" [formControl]=\"control()\" [disabled]=\"readOnly()\" (blur)=\"blur.emit()\" [name]=\"name()\" [placeholder]=\"placeholder()\"></textarea>`,\n styleUrl: './chill-polymorphic-control.shared.scss'\n})\nexport class ChillPolymorphicTextareaControlComponent {\n readonly control = input.required<FormControl<JsonValue>>();\n readonly name = input.required<string>();\n readonly placeholder = input('');\n readonly readOnly = input(false);\n readonly blur = output<void>();\n}\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n SimpleChanges,\r\n ViewChild,\r\n inject,\r\n input,\r\n output\r\n} from '@angular/core';\r\n\r\ntype MonacoModule = typeof import('monaco-editor/esm/vs/editor/editor.api');\r\n\r\n@Component({\r\n selector: 'app-chill-json-input',\r\n standalone: true,\r\n imports: [CommonModule],\r\n host: {\r\n '[class.is-mobile-full-height]': 'mobileFullHeight()'\r\n },\r\n template: `\r\n <div class=\"json-editor\" [class.is-invalid]=\"invalid()\">\r\n <div #editorHost class=\"json-editor__host\" [ngStyle]=\"editorStyle()\"></div>\r\n </div>\r\n `,\r\n styles: [`\r\n :host {\r\n display: block;\r\n }\r\n\r\n .json-editor {\r\n border: 1px solid color-mix(in srgb, var(--accent) 26%, var(--border-color));\r\n border-radius: 0.7rem;\r\n overflow: hidden;\r\n background:\r\n linear-gradient(180deg, color-mix(in srgb, var(--accent-soft) 20%, transparent), transparent 30%),\r\n linear-gradient(180deg, color-mix(in srgb, var(--surface-0) 96%, rgba(2, 16, 25, 0.14)), color-mix(in srgb, var(--surface-1) 92%, rgba(1, 10, 18, 0.18)));\r\n box-shadow:\r\n inset 0 0 0 1px color-mix(in srgb, var(--accent) 8%, transparent),\r\n 0 0 0.7rem color-mix(in srgb, var(--accent) 6%, transparent);\r\n }\r\n\r\n .json-editor.is-invalid {\r\n border-color: color-mix(in srgb, var(--danger) 70%, var(--border-color));\r\n box-shadow:\r\n inset 0 0 0 1px color-mix(in srgb, var(--danger) 18%, transparent),\r\n 0 0 0.7rem color-mix(in srgb, var(--danger) 8%, transparent);\r\n }\r\n\r\n .json-editor__host {\r\n width: 100%;\r\n }\r\n\r\n :root[data-theme='dark'] .json-editor {\r\n background: rgba(9, 19, 26, 0.58);\r\n }\r\n\r\n @media (max-width: 720px) {\r\n :host(.is-mobile-full-height),\r\n :host(.is-mobile-full-height) .json-editor,\r\n :host(.is-mobile-full-height) .json-editor__host {\r\n height: 100%;\r\n min-height: 0;\r\n }\r\n\r\n :host(.is-mobile-full-height) .json-editor__host {\r\n max-height: none !important;\r\n height: 100% !important;\r\n }\r\n }\r\n `]\r\n})\r\nexport class ChillJsonInputComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n readonly value = input('');\r\n readonly placeholder = input('');\r\n readonly invalid = input(false);\r\n readonly disabled = input(false);\r\n readonly language = input<'json' | 'plaintext'>('json');\r\n readonly minHeight = input('4rem');\r\n readonly maxHeight = input('50vh');\r\n readonly mobileFullHeight = input(false);\r\n\r\n readonly valueChange = output<string>();\r\n readonly blur = output<void>();\r\n\r\n @ViewChild('editorHost', { static: true }) private editorHost?: ElementRef<HTMLDivElement>;\r\n\r\n private readonly zone = inject(NgZone);\r\n private monaco: MonacoModule | null = null;\r\n private editor: any = null;\r\n private model: any = null;\r\n private resizeObserver: ResizeObserver | null = null;\r\n private themeObserver: MutationObserver | null = null;\r\n private suppressValueEmit = false;\r\n\r\n async ngAfterViewInit(): Promise<void> {\r\n const host = this.editorHost?.nativeElement;\r\n if (!host) {\r\n return;\r\n }\r\n\r\n this.monaco = await import('monaco-editor/esm/vs/editor/editor.api');\r\n\r\n this.model = this.monaco.editor.createModel(this.value(), this.language());\r\n this.editor = this.monaco.editor.create(host, {\r\n model: this.model,\r\n language: this.language(),\r\n automaticLayout: true,\r\n minimap: { enabled: false },\r\n scrollBeyondLastLine: false,\r\n tabSize: 2,\r\n insertSpaces: true,\r\n formatOnPaste: this.language() === 'json',\r\n formatOnType: this.language() === 'json',\r\n wordWrap: 'on',\r\n lineNumbersMinChars: 3,\r\n padding: { top: 12, bottom: 12 },\r\n roundedSelection: false,\r\n scrollbar: {\r\n verticalScrollbarSize: 10,\r\n horizontalScrollbarSize: 10\r\n },\r\n overviewRulerLanes: 0,\r\n fontSize: 13,\r\n readOnly: this.disabled(),\r\n ariaLabel: this.placeholder() || this.defaultAriaLabel()\r\n });\r\n\r\n this.applyTheme();\r\n\r\n this.editor.onDidChangeModelContent(() => {\r\n if (this.suppressValueEmit || !this.editor) {\r\n return;\r\n }\r\n\r\n const nextValue = this.editor.getValue();\r\n this.zone.run(() => this.valueChange.emit(nextValue));\r\n });\r\n\r\n this.editor.onDidBlurEditorText(() => {\r\n this.zone.run(() => this.blur.emit());\r\n });\r\n\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.editor?.layout();\r\n });\r\n this.resizeObserver.observe(host);\r\n\r\n this.themeObserver = new MutationObserver(() => {\r\n this.applyTheme();\r\n });\r\n this.themeObserver.observe(document.documentElement, {\r\n attributes: true,\r\n attributeFilter: ['data-theme']\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['value'] && this.editor) {\r\n const nextValue = this.value();\r\n if (nextValue !== this.editor.getValue()) {\r\n this.suppressValueEmit = true;\r\n this.editor.setValue(nextValue);\r\n this.suppressValueEmit = false;\r\n }\r\n }\r\n\r\n if (changes['disabled'] && this.editor) {\r\n this.editor.updateOptions({ readOnly: this.disabled() });\r\n }\r\n\r\n if (changes['placeholder'] && this.editor) {\r\n this.editor.updateOptions({\r\n ariaLabel: this.placeholder() || this.defaultAriaLabel()\r\n });\r\n }\r\n\r\n if (changes['language'] && this.monaco && this.model && this.editor) {\r\n const language = this.language();\r\n this.monaco.editor.setModelLanguage(this.model, language);\r\n this.editor.updateOptions({\r\n formatOnPaste: language === 'json',\r\n formatOnType: language === 'json',\r\n ariaLabel: this.placeholder() || this.defaultAriaLabel()\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.themeObserver?.disconnect();\r\n this.resizeObserver?.disconnect();\r\n this.editor?.dispose();\r\n this.model?.dispose();\r\n }\r\n\r\n private applyTheme(): void {\r\n const isDarkTheme = document.documentElement.dataset['theme'] === 'dark';\r\n this.monaco?.editor.setTheme(isDarkTheme ? 'vs-dark' : 'vs');\r\n }\r\n\r\n protected editorStyle(): Record<string, string> {\r\n return {\r\n minHeight: this.minHeight(),\r\n maxHeight: this.maxHeight(),\r\n height: `clamp(${this.minHeight()}, 34vh, ${this.maxHeight()})`\r\n };\r\n }\r\n\r\n private defaultAriaLabel(): string {\r\n return this.language() === 'json' ? 'JSON editor' : 'Text editor';\r\n }\r\n}\r\n","import { Component, inject, input, output } from '@angular/core';\nimport { ChillJsonInputComponent } from '../chill-json-input.component';\nimport { ChillService } from '../../services/chill.service';\n\n@Component({\n selector: 'app-chill-polymorphic-editor-control',\n standalone: true,\n imports: [ChillJsonInputComponent],\n template: `<div class=\"editor-field\">\n <app-chill-json-input [value]=\"value()\" [language]=\"language()\" [placeholder]=\"placeholder()\" [invalid]=\"invalid()\" [disabled]=\"disabled()\" (valueChange)=\"valueChange.emit($event)\" (blur)=\"blur.emit()\" />\n <button type=\"button\" class=\"editor-dialog-button\" (mousedown)=\"beginDialog.emit()\" (click)=\"openDialog.emit()\" [attr.aria-label]=\"chill.T('EC935816-DCBC-4AE7-BA13-36D66A7D7EBD', 'Open editor dialog', 'Apri editor in dialog')\"><span class=\"material-symbol-icon\" aria-hidden=\"true\">open_in_full</span></button>\n </div>`,\n styles: [`.editor-field { position: relative; min-width: 0; } app-chill-json-input { width: 100%; } .editor-dialog-button { position: absolute; top: .35rem; right: .35rem; z-index: 1; display: inline-grid; place-items: center; width: 2rem; height: 2rem; padding: 0; border: 1px solid color-mix(in srgb, var(--accent) 26%, var(--border-color)); border-radius: .4rem; background: color-mix(in srgb, var(--surface-0) 92%, transparent); color: var(--text-main); box-shadow: var(--shadow-soft); cursor: pointer; } .editor-dialog-button .material-symbol-icon { font-size: 1.05rem; } :host-context(:root[data-theme='dark']) .editor-dialog-button { background: rgba(9, 19, 26, .58); }`]\n})\nexport class ChillPolymorphicEditorControlComponent {\n readonly chill = inject(ChillService);\n readonly value = input('');\n readonly language = input<'json' | 'plaintext'>('plaintext');\n readonly placeholder = input('');\n readonly invalid = input(false);\n readonly disabled = input(false);\n readonly valueChange = output<string>();\n readonly blur = output<void>();\n readonly beginDialog = output<void>();\n readonly openDialog = output<void>();\n}\n","import { Component, input, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport type { ChillPropertySelectOptionTuple } from '../../models/chill-schema.models';\n\n@Component({\n selector: 'app-chill-polymorphic-select-control',\n standalone: true,\n imports: [FormsModule],\n template: `<select [ngModel]=\"value()\" (ngModelChange)=\"valueChange.emit($event)\" [disabled]=\"readOnly()\" [name]=\"name()\">\n @for (option of options(); track option[0] + ':' + option[1]) { <option [value]=\"option[0]\">{{ option[1] }}</option> }\n </select>`,\n styleUrl: './chill-polymorphic-control.shared.scss'\n})\nexport class ChillPolymorphicSelectControlComponent {\n readonly name = input.required<string>();\n readonly value = input('');\n readonly options = input<ChillPropertySelectOptionTuple[]>([]);\n readonly readOnly = input(false);\n readonly valueChange = output<string>();\n}\n","import { Component, input, output } from '@angular/core';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport type { JsonValue } from '@chill-sharp/ng-client';\n\n@Component({\n selector: 'app-chill-polymorphic-scalar-control',\n standalone: true,\n imports: [FormsModule, ReactiveFormsModule],\n template: `<div class=\"scalar-input\">\n @if (formatted()) {\n <input type=\"text\" [ngModel]=\"value()\" (ngModelChange)=\"valueChange.emit($event)\" (blur)=\"blur.emit()\" [disabled]=\"readOnly()\" [name]=\"name()\" [placeholder]=\"placeholder()\" />\n } @else {\n <input [type]=\"type()\" [step]=\"step()\" [formControl]=\"control()\" (blur)=\"blur.emit()\" [name]=\"name()\" [placeholder]=\"placeholder()\" />\n }\n @if (staticSuffix()) {\n <span class=\"scalar-input__suffix\" aria-hidden=\"true\">{{ staticSuffix() }}</span>\n }\n </div>`,\n styles: `.scalar-input { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: .55rem; } .scalar-input__suffix { color: var(--text-muted); white-space: nowrap; }`,\n styleUrl: './chill-polymorphic-control.shared.scss'\n})\nexport class ChillPolymorphicScalarControlComponent {\n readonly control = input.required<FormControl<JsonValue>>();\n readonly name = input.required<string>();\n readonly placeholder = input('');\n readonly readOnly = input(false);\n readonly formatted = input(false);\n readonly value = input('');\n readonly type = input<'text' | 'number'>('text');\n readonly step = input<string | null>(null);\n readonly staticSuffix = input('');\n readonly valueChange = output<string>();\n readonly blur = output<void>();\n}\n","import { Component, OnDestroy, computed, effect, inject, input, output, signal } from '@angular/core';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport type { JsonObject, JsonValue } from '@chill-sharp/ng-client';\r\nimport { Subscription } from 'rxjs';\r\nimport {\r\n CHILL_PROPERTY_TYPE,\r\n type ChillEntity,\r\n type ChillPropertySchema,\r\n type ChillPropertySelectOptionTuple,\r\n type ChillSchema\r\n} from '../models/chill-schema.models';\r\nimport { ChillService } from '../services/chill.service';\r\nimport { WorkspaceDialogService } from '../services/workspace-dialog.service';\nimport { ChillPolymorphicBooleanControlComponent } from './chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component';\nimport { ChillPolymorphicLookupControlComponent } from './chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component';\nimport { ChillPolymorphicTextareaControlComponent } from './chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component';\nimport { ChillPolymorphicEditorControlComponent } from './chill-polymorphic-input-controls/chill-polymorphic-editor-control.component';\nimport { ChillPolymorphicSelectControlComponent } from './chill-polymorphic-input-controls/chill-polymorphic-select-control.component';\nimport { ChillPolymorphicScalarControlComponent } from './chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component';\n\r\ntype FieldValueMap = Record<string, JsonValue>;\r\ntype ErrorMap = Record<string, string>;\r\ntype DraftTextMap = Record<string, string>;\r\n\r\ninterface LookupState {\r\n term: string;\r\n isSearching: boolean;\r\n error: string;\r\n results: JsonObject[];\r\n selectedGuid: string;\r\n selectedLabel: string;\r\n selectedShortLabel: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-chill-polymorphic-input',\r\n standalone: true,\r\n imports: [\n ChillPolymorphicBooleanControlComponent,\n ChillPolymorphicLookupControlComponent,\n ChillPolymorphicTextareaControlComponent,\n ChillPolymorphicEditorControlComponent,\n ChillPolymorphicSelectControlComponent,\n ChillPolymorphicScalarControlComponent\n ],\n templateUrl: './chill-polymorphic-input.component.html',\r\n styleUrl: './chill-polymorphic-input.component.scss'\r\n})\r\nexport class ChillPolymorphicInputComponent implements OnDestroy {\r\n // #region Service Injections\r\n readonly chill = inject(ChillService);\r\n readonly dialog = inject(WorkspaceDialogService);\r\n // #endregion\r\n\r\n // #region Inputs\r\n readonly form = input<FormGroup<Record<string, FormControl<JsonValue>>> | null>(null);\r\n readonly schema = input<ChillSchema | null>(null);\r\n readonly propertyNames = input<string[] | null>(null);\r\n readonly readonlyPropertyNames = input<string[] | null>(null);\r\n readonly externalErrors = input<Record<string, string> | null>(null);\r\n readonly showLabels = input(true);\r\n // #endregion\r\n\r\n // #region Outputs\r\n readonly valueChange = output<Record<string, JsonValue>>();\r\n readonly validityChange = output<boolean>();\r\n readonly fieldBlur = output<Record<string, JsonValue>>();\r\n readonly lookupDialogOpenChange = output<boolean>();\r\n readonly editorDialogOpenChange = output<boolean>();\r\n // #endregion\r\n\r\n // #region State\r\n readonly fieldValues = signal<FieldValueMap>({});\r\n readonly draftTextValues = signal<DraftTextMap>({});\r\n readonly errors = signal<ErrorMap>({});\r\n readonly lookups = signal<Record<string, LookupState>>({});\r\n readonly lookupDialogSelectionState = signal<Record<string, boolean>>({});\r\n readonly editorDialogSelectionState = signal<Record<string, boolean>>({});\r\n readonly lookupOverlayPositions: ConnectedPosition[] = [\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top'\r\n },\r\n {\r\n originX: 'end',\r\n originY: 'bottom',\r\n overlayX: 'end',\r\n overlayY: 'top'\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom'\r\n },\r\n {\r\n originX: 'end',\r\n originY: 'top',\r\n overlayX: 'end',\r\n overlayY: 'bottom'\r\n }\r\n ];\r\n private readonly lookupSearchTimers = new Map<string, ReturnType<typeof setTimeout>>();\r\n private readonly lookupRequestSequence = new Map<string, number>();\r\n private controlSubscriptions = new Subscription();\r\n private isDestroyed = false;\r\n // #endregion\r\n\r\n // #region Computed Properties\r\n readonly properties = computed(() => {\r\n const allowedPropertyNames = this.propertyNames();\r\n const allowedSet = allowedPropertyNames ? new Set(allowedPropertyNames) : null;\r\n\r\n return (this.schema()?.properties ?? []).filter((property) => {\r\n if (this.shouldSkipProperty(property)) {\r\n return false;\r\n }\r\n\r\n return allowedSet ? allowedSet.has(property.name) : true;\r\n });\r\n });\r\n readonly resolvedErrors = computed<ErrorMap>(() => {\r\n const next: ErrorMap = {\r\n ...this.errors()\r\n };\r\n for (const property of this.properties()) {\r\n const controlError = this.readControlValidationMessage(property.name);\r\n if (controlError) {\r\n next[property.name] = controlError;\r\n }\r\n }\r\n const externalErrors = this.externalErrors() ?? {};\r\n const propertyNameMap = new Map(\r\n this.properties()\r\n .map((property) => property.name.trim())\r\n .filter((propertyName) => propertyName.length > 0)\r\n .map((propertyName) => [propertyName.toLowerCase(), propertyName] as const)\r\n );\r\n for (const [fieldName, message] of Object.entries(externalErrors)) {\r\n const normalizedMessage = message.trim();\r\n if (normalizedMessage) {\r\n const resolvedFieldName = propertyNameMap.get(fieldName.trim().toLowerCase()) ?? fieldName;\r\n next[resolvedFieldName] = normalizedMessage;\r\n }\r\n }\r\n return next;\r\n });\r\n readonly isValid = computed(() => this.properties().every((property) => !this.resolvedErrors()[property.name]));\r\n readonly readonlyPropertyNameSet = computed(() => new Set(\r\n (this.readonlyPropertyNames() ?? [])\r\n .map((propertyName) => propertyName.trim().toLowerCase())\r\n .filter((propertyName) => propertyName.length > 0)\r\n ));\r\n // #endregion\r\n\r\n // #region Component Lifecycle\r\n\r\n /**\r\n * Rebuilds local field, error, and lookup state from the current form/schema pair and re-emits aggregate state.\r\n */\r\n constructor() {\r\n effect(() => {\r\n const properties = this.properties();\r\n const form = this.form();\r\n const fields = this.readFormValues(properties);\r\n const errors = this.validateAllFields(properties, fields);\r\n const lookups = this.createLookupState(properties, fields);\r\n\r\n this.controlSubscriptions.unsubscribe();\r\n this.controlSubscriptions = new Subscription();\r\n for (const property of properties) {\r\n const control = this.control(property.name);\r\n if (!control) {\r\n continue;\r\n }\r\n\r\n this.controlSubscriptions.add(control.valueChanges.subscribe((value) => {\r\n this.fieldValues.update((current) => ({\r\n ...current,\r\n [property.name]: value\r\n }));\r\n this.draftTextValues.update((current) => {\r\n if (!(property.name in current)) {\r\n return current;\r\n }\r\n\r\n const { [property.name]: _, ...rest } = current;\r\n return rest;\r\n });\r\n this.syncLookupState(property, value);\r\n if (this.shouldValidateOnChange(property)) {\r\n this.validateField(property);\r\n }\r\n }));\r\n }\r\n\r\n if (!form) {\r\n this.fieldValues.set({});\r\n this.draftTextValues.set({});\r\n this.errors.set({});\r\n this.lookups.set({});\r\n return;\r\n }\r\n\r\n this.fieldValues.update((current) => this.areRecordsEqual(current, fields) ? current : fields);\r\n this.draftTextValues.set({});\r\n this.errors.update((current) => this.areStringRecordsEqual(current, errors) ? current : errors);\r\n this.lookups.update((current) => this.areLookupStatesEqual(current, lookups) ? current : lookups);\r\n });\r\n\r\n effect(() => {\r\n this.valueChange.emit(this.fieldValues());\r\n this.validityChange.emit(this.isValid());\r\n });\r\n }\r\n\r\n /**\r\n * Clears control subscriptions and pending lookup timers when the component is destroyed.\r\n */\r\n ngOnDestroy(): void {\r\n this.isDestroyed = true;\r\n this.controlSubscriptions.unsubscribe();\r\n for (const timer of this.lookupSearchTimers.values()) {\r\n clearTimeout(timer);\r\n }\r\n this.lookupSearchTimers.clear();\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Public Methods\r\n\r\n /**\r\n * Identifies boolean fields so the template can render a checkbox instead of a text input.\r\n */\r\n isCheckbox(property: ChillPropertySchema): boolean {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.Boolean;\r\n }\r\n\r\n /**\r\n * Uses type and metadata hints to decide when a string field should render as multiline input.\r\n */\r\n isTextarea(property: ChillPropertySchema): boolean {\r\n return property.customFormat?.toLowerCase() === 'textarea'\r\n || this.metadataString(property, 'multiline').toLowerCase() === 'true';\r\n }\r\n\r\n /**\r\n * Identifies static select fields backed by metadata option tuples.\r\n */\r\n isSelect(property: ChillPropertySchema): boolean {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.Select;\r\n }\r\n\r\n /**\r\n * Flags JSON-string fields so the template can render the Monaco editor.\r\n */\r\n isJsonEditor(property: ChillPropertySchema): boolean {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.Json\r\n || property.propertyType === CHILL_PROPERTY_TYPE.Text;\r\n }\r\n\r\n editorLanguage(property: ChillPropertySchema): 'json' | 'plaintext' {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.Json ? 'json' : 'plaintext';\r\n }\r\n\r\n /**\r\n * Returns true when the caller marked the property as read only.\r\n */\r\n isPropertyReadOnly(propertyName: string): boolean {\r\n return this.readonlyPropertyNameSet().has(propertyName.trim().toLowerCase());\r\n }\r\n\r\n /**\r\n * Checks whether a property uses single-value lookup behavior.\r\n */\r\n isLookup(property: ChillPropertySchema): boolean {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.ChillEntity\r\n || property.propertyType === CHILL_PROPERTY_TYPE.ChillQuery;\r\n }\r\n\r\n /**\r\n * Checks whether a property uses multi-value lookup behavior.\r\n */\r\n isLookupCollection(property: ChillPropertySchema): boolean {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.ChillEntityCollection;\r\n }\r\n\r\n /**\r\n * Flags date-only and date-time fields so they can render localized display text instead of raw storage values.\r\n */\r\n isCultureDateInput(property: ChillPropertySchema): boolean {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.Date\r\n || property.propertyType === CHILL_PROPERTY_TYPE.DateTime;\r\n }\r\n\r\n isFormattedTextInput(property: ChillPropertySchema): boolean {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.Date\r\n || property.propertyType === CHILL_PROPERTY_TYPE.DateTime\r\n || property.propertyType === CHILL_PROPERTY_TYPE.Time\r\n || property.propertyType === CHILL_PROPERTY_TYPE.Duration\r\n || property.propertyType === CHILL_PROPERTY_TYPE.Integer\r\n || property.propertyType === CHILL_PROPERTY_TYPE.Decimal;\r\n }\r\n\r\n /**\r\n * Resolves the native input type for scalar fields.\r\n */\r\n inputType(property: ChillPropertySchema): 'text' | 'number' {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.Integer\r\n || property.propertyType === CHILL_PROPERTY_TYPE.Decimal\r\n ? 'number'\r\n : 'text';\r\n }\r\n\r\n /**\r\n * Resolves the numeric step value from metadata or property type defaults.\r\n */\r\n inputStep(property: ChillPropertySchema): string | null {\n const metadataStep = this.metadataString(property, 'step');\r\n if (metadataStep) {\r\n return metadataStep;\r\n }\r\n\r\n if (property.propertyType === CHILL_PROPERTY_TYPE.Integer) {\r\n return '1';\r\n }\r\n\r\n if (property.propertyType === CHILL_PROPERTY_TYPE.Decimal) {\r\n return 'any';\r\n }\r\n\r\n return null;\n }\n\n /**\n * Resolves optional static text rendered after a scalar value without changing its stored value.\n */\n staticSuffix(property: ChillPropertySchema): string {\n return this.metadataString(property, 'staticSuffix');\n }\n\n /**\n * Uses metadata placeholder first, otherwise mirrors the field label when labels are visually hidden.\r\n */\r\n placeholder(property: ChillPropertySchema): string {\r\n const explicitPlaceholder = this.metadataString(property, 'placeholder');\r\n if (explicitPlaceholder) {\r\n return explicitPlaceholder;\r\n }\r\n\r\n return this.showLabels()\r\n ? ''\r\n : property.displayName?.trim() || property.name;\r\n }\r\n\r\n /**\r\n * Converts string and numeric field values into the text representation expected by native inputs.\r\n */\r\n textValue(propertyName: string): string {\r\n const draftValue = this.draftTextValues()[propertyName];\r\n if (typeof draftValue === 'string') {\r\n return draftValue;\r\n }\r\n\r\n const value = this.fieldValues()[propertyName];\r\n const property = this.properties().find((candidate) => candidate.name === propertyName);\r\n if (property) {\r\n if (property.propertyType === CHILL_PROPERTY_TYPE.Integer || property.propertyType === CHILL_PROPERTY_TYPE.Decimal) {\r\n if (typeof value === 'number') {\r\n return this.chill.formatDisplayNumber(value);\r\n }\r\n\r\n return typeof value === 'string' ? value : '';\r\n }\r\n\r\n if (typeof value === 'string') {\r\n if (property.propertyType === CHILL_PROPERTY_TYPE.Date) {\r\n return this.chill.formatDisplayDate(value);\r\n }\r\n\r\n if (property.propertyType === CHILL_PROPERTY_TYPE.Time) {\r\n return this.chill.formatDisplayTime(value);\r\n }\r\n\r\n if (property.propertyType === CHILL_PROPERTY_TYPE.DateTime) {\r\n return this.chill.formatDisplayDateTime(value);\r\n }\r\n }\r\n }\r\n\r\n return typeof value === 'string' || typeof value === 'number' ? String(value) : '';\r\n }\r\n\r\n /**\r\n * Reads a field value as a boolean for checkbox binding.\r\n */\r\n booleanValue(propertyName: string): boolean {\r\n return this.fieldValues()[propertyName] === true;\r\n }\r\n\r\n /**\r\n * Returns the current lookup search term for a property.\r\n */\r\n lookupTerm(propertyName: string): string {\r\n return this.lookups()[propertyName]?.term ?? '';\r\n }\r\n\r\n /**\r\n * Exposes the current lookup result list for dropdown rendering.\r\n */\r\n lookupResults(propertyName: string): JsonObject[] {\r\n return this.lookups()[propertyName]?.results ?? [];\r\n }\r\n\r\n /**\r\n * Returns the current lookup error message for a property.\r\n */\r\n lookupError(propertyName: string): string {\r\n return this.lookups()[propertyName]?.error ?? '';\r\n }\r\n\r\n /**\r\n * Returns whether a lookup search is currently running for a property.\r\n */\r\n lookupIsSearching(propertyName: string): boolean {\r\n return this.lookups()[propertyName]?.isSearching ?? false;\r\n }\r\n\r\n /**\r\n * Measures the visible input slot so the detached overlay keeps the same width as the field.\r\n */\r\n lookupOverlayWidth(origin: HTMLElement | null): number {\r\n if (!origin) {\r\n return 0;\r\n }\r\n\r\n return Math.ceil(origin.getBoundingClientRect().width);\r\n }\r\n\r\n /**\r\n * Checks whether the dialog-based lookup picker can be opened for a property.\r\n */\r\n canOpenLookupDialog(property: ChillPropertySchema): boolean {\r\n if (property.propertyType !== CHILL_PROPERTY_TYPE.ChillEntity\r\n && property.propertyType !== CHILL_PROPERTY_TYPE.ChillEntityCollection) \r\n return false;\r\n const entityChillType = this.resolveLookupEntityChillType(property);\r\n const queryChillType = this.resolveLookupQueryChillType(property, entityChillType);\r\n if (entityChillType == queryChillType) \r\n return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Joins the selected labels of a lookup collection into the compact summary shown in the input.\r\n */\r\n lookupCollectionSummary(propertyName: string): string {\r\n return this.collectionLookupLabels(propertyName).join(', ');\r\n }\r\n\r\n /**\r\n * Returns the selected collection lookup entities in storage order.\r\n */\r\n selectedLookupCollectionEntities(propertyName: string): JsonObject[] {\r\n const value = this.fieldValues()[propertyName];\r\n return Array.isArray(value)\r\n ? value.filter((item): item is JsonObject => this.isJsonObject(item))\r\n : [];\r\n }\r\n\r\n /**\r\n * Returns the selected single-lookup entity when one is currently stored in the field.\r\n */\r\n selectedLookupEntity(propertyName: string): JsonObject | null {\r\n const value = this.fieldValues()[propertyName];\r\n return this.isJsonObject(value) ? value : null;\r\n }\r\n\r\n /**\r\n * Returns whether the field currently holds a selected single lookup entity.\r\n */\r\n hasSelectedLookupEntity(propertyName: string): boolean {\r\n return this.selectedLookupEntity(propertyName) !== null;\r\n }\r\n\r\n /**\r\n * Returns the full label shown inside the selected single-value lookup pill.\r\n */\r\n selectedLookupLabel(propertyName: string): string {\r\n return this.lookups()[propertyName]?.selectedLabel ?? '';\r\n }\r\n\r\n /**\r\n * Returns the compact lookup label used when the selected pill becomes narrow.\r\n */\r\n selectedLookupShortLabel(propertyName: string): string {\r\n return this.lookups()[propertyName]?.selectedShortLabel ?? '';\r\n }\r\n\r\n /**\r\n * Extracts non-empty labels from the current lookup collection value.\r\n */\r\n collectionLookupLabels(propertyName: string): string[] {\r\n const value = this.fieldValues()[propertyName];\r\n return Array.isArray(value)\r\n ? value.filter((item): item is JsonObject => this.isJsonObject(item)).map((item) => this.lookupLabel(item)).filter((item) => item.length > 0)\r\n : [];\r\n }\r\n\r\n /**\r\n * Returns the merged validation message coming from local validation, form errors, or external errors.\r\n */\r\n validationMessage(propertyName: string): string {\r\n return this.resolvedErrors()[propertyName] ?? '';\r\n }\r\n\r\n /**\r\n * Trims and type-normalizes free-text input on blur, then revalidates before notifying the parent.\r\n */\r\n normalizeTextOnBlur(property: ChillPropertySchema): void {\r\n const draftValue = this.draftTextValues()[property.name];\r\n const currentValue = typeof draftValue === 'string'\r\n ? draftValue\r\n : this.fieldValues()[property.name];\r\n if (typeof currentValue !== 'string') {\r\n this.notifyFieldBlur(property.name);\r\n return;\r\n }\r\n\r\n const normalizedValue = this.normalizeBlurValue(property, currentValue);\r\n if (normalizedValue === null) {\r\n this.setLocalError(property.name, this.getValidationMessage(property, currentValue));\r\n return;\r\n }\r\n\r\n this.setFieldValue(property.name, normalizedValue);\r\n this.clearDraftTextValue(property.name);\r\n this.validateField(property);\r\n this.notifyFieldBlur(property.name);\r\n }\r\n\r\n /**\r\n * Tracks raw typing for date and date-time inputs until blur normalization rewrites the value in culture format.\r\n */\r\n updateTextInput(propertyName: string, value: string): void {\r\n const property = this.properties().find((candidate) => candidate.name === propertyName);\r\n if (property && this.shouldCommitTextOnBlur(property)) {\r\n this.draftTextValues.update((current) => ({\r\n ...current,\r\n [propertyName]: value\r\n }));\r\n this.clearLocalError(propertyName);\r\n return;\r\n }\r\n\r\n this.setFieldValue(propertyName, value);\r\n }\r\n\r\n /**\r\n * Stores the Monaco JSON editor content as a raw string inside the form control.\r\n */\r\n updateJsonInput(propertyName: string, value: string): void {\r\n this.setFieldValue(propertyName, value);\r\n }\r\n\r\n async openEditorDialog(property: ChillPropertySchema): Promise<void> {\r\n const { ChillTextEditorDialogComponent } = await import('./chill-text-editor-dialog.component');\r\n this.beginEditorDialogSelection(property.name);\r\n this.editorDialogOpenChange.emit(true);\r\n try {\r\n const result = await this.dialog.openDialog<string>({\r\n title: property.displayName?.trim() || property.name,\r\n component: ChillTextEditorDialogComponent,\r\n panelClass: 'workspace-dialog--mobile-full-height',\r\n okLabel: this.chill.T('62953302-B951-4FD1-BD08-4B7649A91BAF', 'Save', 'Salva'),\r\n inputs: {\r\n value: this.textValue(property.name),\r\n language: this.editorLanguage(property),\r\n placeholder: this.placeholder(property),\r\n disabled: this.isPropertyReadOnly(property.name)\r\n }\r\n });\r\n\r\n if (result.status !== 'confirmed' || typeof result.value !== 'string') {\r\n return;\r\n }\r\n\r\n this.updateJsonInput(property.name, result.value);\r\n this.validateField(property);\r\n this.notifyFieldBlur(property.name);\r\n } finally {\r\n this.endEditorDialogSelection(property.name);\r\n this.editorDialogOpenChange.emit(false);\r\n }\r\n }\r\n\r\n beginEditorDialogSelection(propertyName: string): void {\r\n this.editorDialogSelectionState.update((current) => ({\r\n ...current,\r\n [propertyName]: true\r\n }));\r\n }\r\n\r\n /**\r\n * Reads the current scalar value for a metadata-backed select field.\r\n */\r\n selectValue(propertyName: string): string {\r\n const value = this.fieldValues()[propertyName];\r\n return typeof value === 'string' || typeof value === 'number'\r\n ? String(value)\r\n : '';\r\n }\r\n\r\n /**\r\n * Stores the selected option value as the field value and forwards blur semantics to the parent.\r\n */\r\n updateSelectValue(property: ChillPropertySchema, value: string): void {\r\n this.setFieldValue(property.name, value);\r\n this.validateField(property);\r\n this.notifyFieldBlur(property.name);\r\n }\r\n\r\n /**\r\n * Returns normalized `[value, text]` tuples from property metadata for native select rendering.\r\n */\r\n selectOptions(property: ChillPropertySchema): ChillPropertySelectOptionTuple[] {\r\n const rawOptions = property.metadata?.['options'];\r\n if (!Array.isArray(rawOptions)) {\r\n return [];\r\n }\r\n\r\n return rawOptions.flatMap((option): ChillPropertySelectOptionTuple[] => {\r\n if (!Array.isArray(option) || option.length < 2) {\r\n return [];\r\n }\r\n\r\n const value = option[0];\r\n const text = option[1];\r\n if ((typeof value !== 'string' && typeof value !== 'number') || (typeof text !== 'string' && typeof text !== 'number')) {\r\n return [];\r\n }\r\n\r\n return [[String(value), String(text)]];\r\n });\r\n }\r\n\r\n /**\r\n * Updates the typed lookup text, clears stale selection metadata, and starts debounced search when applicable.\r\n */\r\n updateLookupTerm(property: ChillPropertySchema, value: string): void {\r\n const previousLookup = this.lookups()[property.name] ?? this.createEmptyLookupState();\r\n this.lookups.update((current) => ({\r\n ...current,\r\n [property.name]: {\r\n ...previousLookup,\r\n term: value,\r\n error: '',\r\n selectedGuid: this.matchesLookupLabel(previousLookup.term, value) ? previousLookup.selectedGuid : ''\r\n }\r\n }));\r\n\r\n if (!value.trim()) {\r\n this.cancelLookupSearch(property.name);\r\n if (this.isLookup(property)) {\r\n this.setFieldValue(property.name, null);\r\n }\r\n this.lookups.update((current) => ({\r\n ...current,\r\n [property.name]: {\r\n ...(current[property.name] ?? this.createEmptyLookupState()),\r\n results: []\r\n }\r\n }));\r\n this.validateField(property);\r\n return;\r\n }\r\n\r\n this.scheduleLookupSearch(property, value);\r\n }\r\n\r\n /**\r\n * Reopens lookup suggestions on focus when the field already has searchable text but no visible results.\r\n */\r\n handleLookupFocus(property: ChillPropertySchema): void {\r\n const lookup = this.lookups()[property.name] ?? this.createEmptyLookupState();\r\n if (lookup.term.trim() && lookup.results.length === 0) {\r\n this.scheduleLookupSearch(property, lookup.term);\r\n }\r\n }\r\n\r\n /**\r\n * Emits blur immediately and clears the popup list after a short delay so click selection can still complete.\r\n */\r\n handleLookupBlur(propertyName: string): void {\r\n if (this.lookupDialogSelectionState()[propertyName]) {\r\n return;\r\n }\r\n\r\n this.notifyFieldBlur(propertyName);\r\n window.setTimeout(() => this.closeLookupResults(propertyName), 120);\r\n }\r\n\r\n /**\r\n * Forwards blur for controls that do not need blur-time value normalization.\r\n */\r\n emitFieldBlur(propertyName: string): void {\r\n if (this.editorDialogSelectionState()[propertyName]) {\r\n return;\r\n }\r\n\r\n this.notifyFieldBlur(propertyName);\r\n }\r\n\r\n private endEditorDialogSelection(propertyName: string): void {\r\n this.editorDialogSelectionState.update((current) => {\r\n if (!(propertyName in current)) {\r\n return current;\r\n }\r\n\r\n const { [propertyName]: _, ...rest } = current;\r\n return rest;\r\n });\r\n }\r\n\r\n beginLookupDialogSelection(propertyName: string): void {\r\n const wasAnyLookupDialogOpen = this.isAnyLookupDialogOpen();\r\n this.lookupDialogSelectionState.update((current) => ({\r\n ...current,\r\n [propertyName]: true\r\n }));\r\n if (!wasAnyLookupDialogOpen) {\r\n this.lookupDialogOpenChange.emit(true);\r\n }\r\n }\r\n\r\n /**\r\n * Opens the CRUD picker dialog for entity lookups and maps the confirmed selection back into the field.\r\n */\r\n async openLookupDialog(property: ChillPropertySchema): Promise<void> {\r\n this.beginLookupDialogSelection(property.name);\r\n\r\n const entityChillType = this.resolveLookupEntityChillType(property);\r\n const queryChillType = this.resolveLookupQueryChillType(property, entityChillType);\r\n if (!entityChillType && !queryChillType) {\r\n this.setLookupError(property.name, this.chill.T('7E0D5F0F-CDA4-4F49-8E02-A7E0E854B65A', 'Lookup schema is unavailable.', 'Lo schema di ricerca non è disponibile.'));\r\n this.endLookupDialogSelection(property.name);\r\n return;\r\n }\r\n\r\n const currentValue = this.fieldValues()[property.name];\r\n const selectedEntity = this.isJsonObject(currentValue) ? currentValue as ChillEntity : null;\r\n const selectedEntities = Array.isArray(currentValue)\r\n ? currentValue.filter((item): item is ChillEntity => this.isJsonObject(item))\r\n : [];\r\n const { CrudTaskComponent } = await import('../tasks/crud-task/crud-task.component');\r\n const result = await this.dialog.openDialog<ChillEntity | ChillEntity[] | null>({\r\n title: property.displayName?.trim() || property.name,\r\n component: CrudTaskComponent,\r\n inputs: {\r\n componentConfiguration: {\r\n chillType: entityChillType,\r\n chillQuery: queryChillType || null,\r\n viewCode: this.resolveLookupDialogViewCode()\r\n },\r\n taskTitle: property.displayName?.trim() || property.name,\r\n selectionEnabled: true,\r\n multipleSelection: this.isLookupCollection(property),\r\n initialSelectedEntity: selectedEntity,\r\n initialSelectedEntities: selectedEntities,\r\n toolbarScope: 'dialog'\r\n }\r\n });\r\n\r\n try {\r\n if (this.isDestroyed) {\r\n return;\r\n }\r\n\r\n if (result.status !== 'confirmed' || !result.value) {\r\n return;\r\n }\r\n\r\n if (Array.isArray(result.value)) {\r\n this.selectLookupResults(property, result.value);\r\n } else {\r\n this.selectLookupResult(property, result.value);\r\n }\r\n\r\n this.validateField(property);\r\n this.notifyFieldBlur(property.name);\r\n } finally {\r\n this.closeLookupResults(property.name);\r\n this.endLookupDialogSelection(property.name);\r\n }\r\n }\r\n\r\n /**\r\n * Stores a single lookup object, updates its display term, and marks the matching selected Guid.\r\n */\r\n selectLookupResult(property: ChillPropertySchema, result: JsonObject): void {\r\n if (this.isLookupCollection(property)) {\r\n this.appendLookupCollectionResult(property, result);\r\n return;\r\n }\r\n\r\n this.setFieldValue(property.name, result);\r\n const selectedGuid = this.lookupGuid(result);\r\n const selectedLabel = this.lookupLabel(result);\r\n const selectedShortLabel = this.lookupShortLabel(result);\r\n this.lookups.update((current) => ({\r\n ...current,\r\n [property.name]: {\r\n ...(current[property.name] ?? this.createEmptyLookupState()),\r\n term: selectedLabel,\r\n isSearching: false,\r\n error: '',\r\n results: [],\r\n selectedGuid,\r\n selectedLabel,\r\n selectedShortLabel\r\n }\r\n }));\r\n this.validateField(property);\r\n }\r\n\r\n /**\r\n * Stores multiple lookup objects and rebuilds the collection summary shown in the input.\r\n */\r\n selectLookupResults(property: ChillPropertySchema, results: JsonObject[]): void {\r\n const nextResults = this.isLookupCollection(property)\r\n ? this.mergeLookupCollectionResults(this.selectedLookupCollectionEntities(property.name), results)\r\n : results;\r\n this.setFieldValue(property.name, nextResults);\r\n this.lookups.update((current) => ({\r\n ...current,\r\n [property.name]: {\r\n ...(current[property.name] ?? this.createEmptyLookupState()),\r\n term: '',\r\n isSearching: false,\r\n error: '',\r\n results: [],\r\n selectedGuid: ''\r\n }\r\n }));\r\n this.validateField(property);\r\n }\r\n\r\n /**\r\n * Removes the current lookup value and resets the transient search state for that field.\r\n */\r\n clearLookup(property: ChillPropertySchema): void {\r\n this.setFieldValue(property.name, this.isLookupCollection(property) ? [] : null);\r\n this.lookups.update((current) => ({\r\n ...current,\r\n [property.name]: this.createEmptyLookupState()\r\n }));\r\n this.validateField(property);\r\n }\r\n\r\n private endLookupDialogSelection(propertyName: string): void {\r\n this.lookupDialogSelectionState.update((current) => {\r\n if (!(propertyName in current)) {\r\n return current;\r\n }\r\n\r\n const { [propertyName]: _removed, ...rest } = current;\r\n return rest;\r\n });\r\n if (!this.isAnyLookupDialogOpen() && !this.isDestroyed) {\r\n this.lookupDialogOpenChange.emit(false);\r\n }\r\n }\r\n\r\n private isAnyLookupDialogOpen(): boolean {\r\n return Object.keys(this.lookupDialogSelectionState()).length > 0;\r\n }\r\n\r\n /**\r\n * Resolves the first usable lookup label from common server payload field names.\r\n */\r\n lookupLabel(result: JsonObject): string {\r\n const label = result['Label']\r\n ?? result['label']\r\n ?? result['DisplayName']\r\n ?? result['displayName']\r\n ?? result['Name']\r\n ?? result['name']\r\n ?? result['Guid']\r\n ?? result['guid'];\r\n\r\n if (typeof label === 'string' && label.trim()) {\r\n return label.trim();\r\n }\r\n\r\n if (typeof label === 'number' || typeof label === 'boolean') {\r\n return String(label);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n /**\r\n * Resolves a short lookup label from common compact-name fields before falling back to the full label.\r\n */\r\n lookupShortLabel(result: JsonObject): string {\r\n const shortLabel = result['ShortLabel']\r\n ?? result['shortLabel']\r\n ?? result['ShortName']\r\n ?? result['shortName']\r\n ?? result['Code'];\r\n\r\n if (typeof shortLabel === 'string' && shortLabel.trim()) {\r\n return shortLabel.trim();\r\n }\r\n\r\n if (typeof shortLabel === 'number' || typeof shortLabel === 'boolean') {\r\n return String(shortLabel);\r\n }\r\n\r\n return this.lookupLabel(result);\r\n }\r\n\r\n /**\r\n * Extracts the lookup Guid using either `Guid` or `guid`.\r\n */\r\n lookupGuid(result: JsonObject): string {\r\n const guid = result['Guid'] ?? result['guid'];\r\n if (typeof guid === 'string' && guid.trim()) {\r\n return guid.trim();\r\n }\r\n\r\n return '';\r\n }\r\n\r\n /**\r\n * Matches a rendered lookup option against the currently selected single-value lookup Guid.\r\n */\r\n isLookupResultSelected(propertyName: string, result: JsonObject): boolean {\r\n const selectedGuid = this.lookups()[propertyName]?.selectedGuid ?? '';\r\n const resultGuid = this.lookupGuid(result);\r\n if (!resultGuid) {\r\n return false;\r\n }\r\n\r\n if (selectedGuid && resultGuid === selectedGuid) {\r\n return true;\r\n }\r\n\r\n return this.selectedLookupCollectionEntities(propertyName).some((item) => this.lookupGuid(item) === resultGuid);\r\n }\r\n\r\n /**\r\n * Removes one selected entity from a lookup collection while preserving the remaining selection order.\r\n */\r\n removeLookupCollectionEntity(property: ChillPropertySchema, entity: JsonObject): void {\r\n if (!this.isLookupCollection(property)) {\r\n return;\r\n }\r\n\r\n const entityGuid = this.lookupGuid(entity);\r\n const currentEntities = this.selectedLookupCollectionEntities(property.name);\r\n const nextEntities = entityGuid\r\n ? currentEntities.filter((item) => this.lookupGuid(item) !== entityGuid)\r\n : currentEntities.filter((item) => item !== entity);\r\n this.setFieldValue(property.name, nextEntities);\r\n this.validateField(property);\r\n }\r\n\r\n /**\r\n * Returns the Angular control for a schema property when the prepared form is available.\r\n */\r\n control(propertyName: string): FormControl<JsonValue> | null {\r\n return this.form()?.controls[propertyName] ?? null;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Helper Methods\r\n\r\n /**\r\n * Executes a lookup query and ignores late responses from older requests so only the newest search wins.\r\n */\r\n private searchLookup(property: ChillPropertySchema, rawSearchTerm: string): void {\r\n const lookup = this.lookups()[property.name] ?? this.createEmptyLookupState();\r\n const searchTerm = rawSearchTerm.trim();\r\n const targetChillType = this.resolveLookupEntityChillType(property);\r\n const requestSequence = (this.lookupRequestSequence.get(property.name) ?? 0) + 1;\r\n this.lookupRequestSequence.set(property.name, requestSequence);\r\n\r\n if (!targetChillType) {\r\n this.setLookupError(property.name, this.chill.T('7E0D5F0F-CDA4-4F49-8E02-A7E0E854B65A', 'Lookup schema is unavailable.', 'Lo schema di ricerca non è disponibile.'));\r\n return;\r\n }\r\n\r\n if (!searchTerm) {\r\n this.setLookupError(property.name, this.chill.T('8B0ED598-819C-42E5-B41A-439F7066EEA9', 'Enter a search value first.', 'Inserisci prima un valore di ricerca.'));\r\n return;\r\n }\r\n\r\n this.lookups.update((current) => ({\r\n ...current,\r\n [property.name]: {\r\n ...lookup,\r\n isSearching: true,\r\n error: '',\r\n results: [],\r\n term: rawSearchTerm\r\n }\r\n }));\r\n\r\n this.chill.lookup({\r\n ChillType: targetChillType,\r\n Properties: {\r\n FullTextSearch: searchTerm\r\n },\r\n ResultProperties: [\r\n { Name: 'guid' },\r\n { Name: 'label' },\r\n { Name: 'shortLabel' },\r\n { Name: 'displayName' },\r\n { Name: 'name' },\r\n { Name: 'code' }\r\n ]\r\n }).subscribe({\r\n next: (response) => {\r\n if (this.lookupRequestSequence.get(property.name) !== requestSequence) {\r\n return;\r\n }\r\n\r\n this.lookups.update((current) => ({\r\n ...current,\r\n [property.name]: {\r\n ...(current[property.name] ?? this.createEmptyLookupState()),\r\n term: rawSearchTerm,\r\n isSearching: false,\r\n error: '',\r\n results: this.extractLookupResults(response)\r\n }\r\n }));\r\n },\r\n error: (error: unknown) => {\r\n if (this.lookupRequestSequence.get(property.name) !== requestSequence) {\r\n return;\r\n }\r\n this.setLookupError(property.name, this.chill.formatError(error), false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Reads the current form values for the rendered properties and fills missing values with editor defaults.\r\n */\r\n private readFormValues(properties: ChillPropertySchema[]): FieldValueMap {\r\n const nextState: FieldValueMap = {};\r\n\r\n for (const property of properties) {\r\n const control = this.control(property.name);\r\n nextState[property.name] = this.normalizeFieldValue(property, control?.value);\r\n }\r\n\r\n return nextState;\r\n }\r\n\r\n /**\r\n * Builds the initial lookup UI state from the already-selected form values.\r\n */\r\n private createLookupState(properties: ChillPropertySchema[], fields: FieldValueMap): Record<string, LookupState> {\r\n const nextState: Record<string, LookupState> = {};\r\n\r\n for (const property of properties) {\r\n if (!this.isLookup(property) && !this.isLookupCollection(property)) {\r\n continue;\r\n }\r\n\r\n const value = fields[property.name];\r\n const selectedLabel = this.isJsonObject(value) ? this.lookupLabel(value) : '';\r\n const selectedShortLabel = this.isJsonObject(value) ? this.lookupShortLabel(value) : '';\r\n nextState[property.name] = {\r\n term: this.isLookupCollection(property) ? '' : selectedLabel,\r\n isSearching: false,\r\n error: '',\r\n results: [],\r\n selectedGuid: this.isJsonObject(value) ? this.lookupGuid(value) : '',\r\n selectedLabel,\r\n selectedShortLabel\r\n };\r\n }\r\n\r\n return nextState;\r\n }\r\n\r\n /**\r\n * Maps undefined form values to the empty value shape expected by the rendered control.\r\n */\r\n private normalizeFieldValue(property: ChillPropertySchema, value: JsonValue | undefined): JsonValue {\r\n if (value === undefined) {\r\n return this.isLookupCollection(property) ? [] : '';\r\n }\r\n\r\n if (property.propertyType === CHILL_PROPERTY_TYPE.Json) {\r\n return typeof value === 'string'\r\n ? value\r\n : '';\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Validates every rendered property and returns only the fields that currently have local errors.\r\n */\r\n private validateAllFields(properties: ChillPropertySchema[], fields: FieldValueMap): ErrorMap {\r\n const nextErrors: ErrorMap = {};\r\n\r\n for (const property of properties) {\r\n const error = this.getValidationMessage(property, fields[property.name]);\r\n if (error) {\r\n nextErrors[property.name] = error;\r\n }\r\n }\r\n\r\n return nextErrors;\r\n }\r\n\r\n /**\r\n * Revalidates one field and adds or removes its local error entry.\r\n */\r\n private validateField(property: ChillPropertySchema): void {\r\n const message = this.getValidationMessage(property, this.fieldValues()[property.name]);\r\n this.setLocalError(property.name, message);\r\n }\r\n\r\n private setLocalError(propertyName: string, message: string): void {\r\n this.errors.update((current) => {\r\n if (!message) {\r\n const { [propertyName]: _, ...rest } = current;\r\n return rest;\r\n }\r\n\r\n return {\r\n ...current,\r\n [propertyName]: message\r\n };\r\n });\r\n }\r\n\r\n private clearLocalError(propertyName: string): void {\r\n this.errors.update((current) => {\r\n if (!(propertyName in current)) {\r\n return current;\r\n }\r\n\r\n const { [propertyName]: _, ...rest } = current;\r\n return rest;\r\n });\r\n }\r\n\r\n private clearDraftTextValue(propertyName: string): void {\r\n this.draftTextValues.update((current) => {\r\n if (!(propertyName in current)) {\r\n return current;\r\n }\r\n\r\n const { [propertyName]: _, ...rest } = current;\r\n return rest;\r\n });\r\n }\r\n\r\n private shouldValidateOnChange(property: ChillPropertySchema): boolean {\r\n return !this.shouldCommitTextOnBlur(property);\r\n }\r\n\r\n private shouldCommitTextOnBlur(property: ChillPropertySchema): boolean {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.Date\r\n || property.propertyType === CHILL_PROPERTY_TYPE.Time\r\n || property.propertyType === CHILL_PROPERTY_TYPE.DateTime;\r\n }\r\n\r\n /**\r\n * Reads server validation stored on the Angular control so backend errors participate in the merged output.\r\n */\r\n private readControlValidationMessage(propertyName: string): string {\r\n const errors = this.control(propertyName)?.errors;\r\n if (!errors) {\r\n return '';\r\n }\r\n\r\n const serverValidation = errors['serverValidation'];\r\n return typeof serverValidation === 'string'\r\n ? serverValidation.trim()\r\n : '';\r\n }\r\n\r\n /**\r\n * Routes validation through type-specific rules after handling required and empty-value cases.\r\n */\r\n private getValidationMessage(property: ChillPropertySchema, value: JsonValue | undefined): string {\r\n if (this.isEmptyValue(value)) {\r\n return this.isRequired(property)\r\n ? this.chill.T('7E64BA1D-8E3B-450D-B03B-A6E2E7B6EC9A', 'This field is required.', 'Questo campo è obbligatorio.')\r\n : '';\r\n }\r\n\r\n const propertyType = property.propertyType ?? CHILL_PROPERTY_TYPE.Unknown;\r\n switch (propertyType) {\r\n case CHILL_PROPERTY_TYPE.Guid:\r\n return this.validateGuid(value);\r\n case CHILL_PROPERTY_TYPE.Integer:\r\n return this.validateInteger(value, property);\r\n case CHILL_PROPERTY_TYPE.Decimal:\r\n return this.validateDecimal(value, property);\r\n case CHILL_PROPERTY_TYPE.Date:\r\n return this.validateDate(value);\r\n case CHILL_PROPERTY_TYPE.Time:\r\n return this.validateTime(value);\r\n case CHILL_PROPERTY_TYPE.DateTime:\r\n return this.validateDateTime(value);\r\n case CHILL_PROPERTY_TYPE.Duration:\r\n return this.validateDuration(value);\r\n case CHILL_PROPERTY_TYPE.Boolean:\r\n return typeof value === 'boolean' ? '' : this.chill.T('4EB9E8DC-FA6A-45A0-9C95-5814C44144F0', 'Invalid boolean value.', 'Valore booleano non valido.');\r\n case CHILL_PROPERTY_TYPE.String:\r\n case CHILL_PROPERTY_TYPE.Text:\r\n case CHILL_PROPERTY_TYPE.Select:\r\n return this.validateString(value, property);\r\n case CHILL_PROPERTY_TYPE.Json:\r\n return this.validateJson(value);\r\n case CHILL_PROPERTY_TYPE.ChillEntity:\r\n case CHILL_PROPERTY_TYPE.ChillQuery:\r\n return this.isJsonObject(value)\r\n ? ''\r\n : this.chill.T('5302E408-0D83-4857-8C81-17DCA0DDAF44', 'Select a value from the lookup results.', 'Seleziona un valore dai risultati di ricerca.');\r\n case CHILL_PROPERTY_TYPE.ChillEntityCollection:\r\n return Array.isArray(value) && value.every((item) => this.isJsonObject(item))\r\n ? ''\r\n : this.chill.T('5302E408-0D83-4857-8C81-17DCA0DDAF44', 'Select a value from the lookup results.', 'Seleziona un valore dai risultati di ricerca.');\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n /**\r\n * Validates Guid input against the standard GUID format.\r\n */\r\n private validateGuid(value: JsonValue | undefined): string {\r\n if (typeof value !== 'string') {\r\n return this.chill.T('514D6255-1A59-4D42-95B4-8BB5CFC7A04A', 'Invalid Guid value.', 'Valore Guid non valido.');\r\n }\r\n\r\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value.trim())\r\n ? ''\r\n : this.chill.T('514D6255-1A59-4D42-95B4-8BB5CFC7A04A', 'Invalid Guid value.', 'Valore Guid non valido.');\r\n }\r\n\r\n /**\r\n * Validates integer input and applies configured numeric range rules.\r\n */\r\n private validateInteger(value: JsonValue | undefined, property: ChillPropertySchema): string {\r\n const numericValue = this.readNumber(value);\r\n if (numericValue === null || !Number.isInteger(numericValue)) {\r\n return this.chill.T('6574C416-B4C8-47D7-9936-A7AE1A0FC437', 'Enter a valid integer.', 'Inserisci un numero intero valido.');\r\n }\r\n\r\n return this.validateNumericRange(numericValue, property);\r\n }\r\n\r\n /**\r\n * Validates decimal input and applies configured numeric range rules.\r\n */\r\n private validateDecimal(value: JsonValue | undefined, property: ChillPropertySchema): string {\r\n const numericValue = this.readNumber(value);\r\n if (numericValue === null) {\r\n return this.chill.T('4AE9D1D9-D3C5-42DB-BE55-0F322481A87B', 'Enter a valid decimal number.', 'Inserisci un numero decimale valido.');\r\n }\r\n\r\n return this.validateNumericRange(numericValue, property);\r\n }\r\n\r\n /**\r\n * Applies shared min/max metadata checks after numeric parsing has already succeeded.\r\n */\r\n private validateNumericRange(value: number, property: ChillPropertySchema): string {\r\n const min = this.readMetadataNumber(property, 'min');\r\n if (min !== null && value < min) {\r\n return this.chill.T('52D0C7D3-D9DF-47F0-8752-A095BC307331', `Value must be greater than or equal to ${min}.`, `Il valore deve essere maggiore o uguale a ${min}.`);\r\n }\r\n\r\n const max = this.readMetadataNumber(property, 'max');\r\n if (max !== null && value > max) {\r\n return this.chill.T('DDF46D7D-4A1F-4510-9F8D-F77B3D96CF90', `Value must be less than or equal to ${max}.`, `Il valore deve essere minore o uguale a ${max}.`);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n /**\r\n * Validates a date string.\r\n */\r\n private validateDate(value: JsonValue | undefined): string {\r\n if (typeof value !== 'string') {\r\n return this.chill.T('8EC86C1D-B626-40FB-BEA8-1FE80B66E51F', 'Enter a valid date.', 'Inserisci una data valida.');\r\n }\r\n\r\n return this.chill.parseDisplayDate(value.trim()) === null\r\n ? this.chill.T('8EC86C1D-B626-40FB-BEA8-1FE80B66E51F', 'Enter a valid date.', 'Inserisci una data valida.')\r\n : '';\r\n }\r\n\r\n /**\r\n * Validates a time string.\r\n */\r\n private validateTime(value: JsonValue | undefined): string {\r\n if (typeof value !== 'string') {\r\n return this.chill.T('6E14B3A1-498E-4B11-A8C9-E16189E60AFD', 'Enter a valid time.', 'Inserisci un orario valido.');\r\n }\r\n\r\n return this.chill.parseDisplayTime(value.trim()) !== null\r\n ? ''\r\n : this.chill.T('6E14B3A1-498E-4B11-A8C9-E16189E60AFD', 'Enter a valid time.', 'Inserisci un orario valido.');\r\n }\r\n\r\n /**\r\n * Reuses the date-time parser so validation and blur-time normalization accept the same formats.\r\n */\r\n private validateDateTime(value: JsonValue | undefined): string {\r\n if (typeof value !== 'string') {\r\n return this.chill.T('B08EAAE2-7AA8-45C6-A531-0A37A4DE65F5', 'Enter a valid date and time.', 'Inserisci una data e ora valida.');\r\n }\r\n\r\n return this.chill.parseDisplayDateTime(value.trim()) === null\r\n ? this.chill.T('B08EAAE2-7AA8-45C6-A531-0A37A4DE65F5', 'Enter a valid date and time.', 'Inserisci una data e ora valida.')\r\n : '';\r\n }\r\n\r\n /**\r\n * Reuses the duration parser so validation and blur-time normalization stay aligned.\r\n */\r\n private validateDuration(value: JsonValue | undefined): string {\r\n if (typeof value !== 'string') {\r\n return this.chill.T('3DF867D5-F007-4D15-9579-0F6B6C7BA0EE', 'Enter a valid duration.', 'Inserisci una durata valida.');\r\n }\r\n\r\n return this.parseDurationDisplayValue(value.trim()) !== null\r\n ? ''\r\n : this.chill.T('3DF867D5-F007-4D15-9579-0F6B6C7BA0EE', 'Enter a valid duration.', 'Inserisci una durata valida.');\r\n }\r\n\r\n /**\r\n * Validates string values against length and regex metadata rules.\r\n */\r\n private validateString(value: JsonValue | undefined, property: ChillPropertySchema): string {\r\n if (typeof value !== 'string') {\r\n return this.chill.T('FAF662FD-D4D3-46C2-B052-8AA086B72ED2', 'Enter a valid text value.', 'Inserisci un valore testuale valido.');\r\n }\r\n\r\n const trimmedValue = value.trim();\r\n if (this.isSelect(property)) {\r\n const availableValues = this.selectOptions(property).map(([optionValue]) => optionValue);\r\n if (availableValues.length > 0 && !availableValues.includes(trimmedValue)) {\r\n return this.chill.T('79AC66D6-7C13-4F0E-8F13-E5236FD09D6C', 'Select a valid option.', 'Seleziona un valore valido.');\r\n }\r\n }\r\n\r\n const minLength = this.readMetadataNumber(property, 'minLength');\r\n if (minLength !== null && trimmedValue.length < minLength) {\r\n return this.chill.T('CEC26B81-3B54-4B8A-A2C0-8136A7AA61A4', `Value must contain at least ${minLength} characters.`, `Il valore deve contenere almeno ${minLength} caratteri.`);\r\n }\r\n\r\n const maxLength = this.readMetadataNumber(property, 'maxLength');\r\n if (maxLength !== null && trimmedValue.length > maxLength) {\r\n return this.chill.T('A0382F9C-5F39-42BF-9B33-1B92ACDA25A1', `Value must contain at most ${maxLength} characters.`, `Il valore deve contenere al massimo ${maxLength} caratteri.`);\r\n }\r\n\r\n const pattern = this.metadataString(property, 'pattern');\r\n if (pattern && !(new RegExp(pattern).test(trimmedValue))) {\r\n return this.chill.T('D05267DD-7A9E-4099-B69B-D44B0EB23189', 'Value does not match the required format.', 'Il valore non rispetta il formato richiesto.');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n /**\r\n * Validates that the field contains a JSON document while keeping the stored form value as text.\r\n */\r\n private validateJson(value: JsonValue | undefined): string {\r\n if (typeof value !== 'string') {\r\n return this.chill.T('1D1760FE-3D90-4107-BD6B-D20D7927F5F3', 'Enter a valid JSON value.', 'Inserisci un valore JSON valido.');\r\n }\r\n\r\n try {\r\n JSON.parse(value);\r\n return '';\r\n } catch {\r\n return this.chill.T('1D1760FE-3D90-4107-BD6B-D20D7927F5F3', 'Enter a valid JSON value.', 'Inserisci un valore JSON valido.');\r\n }\r\n }\r\n\r\n /**\r\n * Converts the raw text entered by the user into the normalized typed value stored in the form.\r\n */\r\n private normalizeBlurValue(property: ChillPropertySchema, value: string): JsonValue | null {\r\n const trimmedValue = value.trim();\r\n if (!trimmedValue) {\r\n return '';\r\n }\r\n\r\n switch (property.propertyType) {\r\n case CHILL_PROPERTY_TYPE.Integer: {\r\n return this.chill.parseDisplayInteger(trimmedValue);\r\n }\r\n case CHILL_PROPERTY_TYPE.Decimal: {\r\n return this.chill.parseDisplayDecimal(trimmedValue);\r\n }\r\n case CHILL_PROPERTY_TYPE.Date:\r\n return this.chill.parseDisplayDate(trimmedValue);\r\n case CHILL_PROPERTY_TYPE.Time:\r\n return this.chill.parseDisplayTime(trimmedValue);\r\n case CHILL_PROPERTY_TYPE.DateTime:\r\n return this.chill.parseDisplayDateTime(trimmedValue);\r\n case CHILL_PROPERTY_TYPE.Duration:\r\n return this.parseDurationDisplayValue(trimmedValue);\r\n case CHILL_PROPERTY_TYPE.Json:\r\n return value;\r\n default:\r\n return trimmedValue;\r\n }\r\n }\r\n\r\n /**\r\n * Accepts both ISO durations and `d.hh:mm[:ss]`-style values and normalizes them for storage.\r\n */\r\n private parseDurationDisplayValue(value: string): string | null {\r\n if (/^P(?!$)(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?$/i.test(value)) {\r\n return value.toUpperCase();\r\n }\r\n\r\n const match = value.match(/^(?:(\\d+)\\.)?(\\d{1,2}):(\\d{1,2})(?::(\\d{1,2})(\\.\\d{1,7})?)?$/);\r\n if (!match) {\r\n return null;\r\n }\r\n\r\n const days = match[1] ? Number(match[1]) : null;\r\n const hours = Number(match[2]);\r\n const minutes = Number(match[3]);\r\n const seconds = match[4] ? Number(match[4]) : null;\r\n const fractional = match[5] ?? '';\r\n if ((days !== null && days < 0) || hours < 0 || hours > 23 || minutes < 0 || minutes > 59 || (seconds !== null && (seconds < 0 || seconds > 59))) {\r\n return null;\r\n }\r\n\r\n const normalizedHours = `${hours}`.padStart(2, '0');\r\n const normalizedMinutes = `${minutes}`.padStart(2, '0');\r\n const dayPrefix = days !== null ? `${days}.` : '';\r\n if (seconds === null) {\r\n return `${dayPrefix}${normalizedHours}:${normalizedMinutes}`;\r\n }\r\n\r\n return `${dayPrefix}${normalizedHours}:${normalizedMinutes}:${`${seconds}`.padStart(2, '0')}${fractional}`;\r\n }\r\n\r\n /**\r\n * Resolves the entity type targeted by a lookup property from explicit schema fields or metadata fallbacks.\r\n */\r\n private resolveLookupEntityChillType(property: ChillPropertySchema): string {\r\n return property.referenceChillType?.trim()\r\n || property.referenceChillTypeQuery?.trim()\r\n || this.metadataString(property, 'ChillEntityTypeName')\r\n || this.metadataString(property, 'chillEntityTypeName')\r\n || this.metadataString(property, 'referenceChillTypeQuery')\r\n || this.metadataString(property, 'ReferenceChillTypeQuery')\r\n || '';\r\n }\r\n\r\n /**\r\n * Chooses the query schema used by the ellipsis picker, preferring explicit schema hints over inferred defaults.\r\n */\r\n private resolveLookupQueryChillType(property: ChillPropertySchema, entityChillType: string): string {\r\n const explicitQueryType = property.referenceChillTypeQuery?.trim()\r\n || this.metadataString(property, 'referenceChillTypeQuery')\r\n || this.metadataString(property, 'ReferenceChillTypeQuery')\r\n || '';\r\n if (explicitQueryType) {\r\n return explicitQueryType;\r\n }\r\n\r\n if (!entityChillType) {\r\n return '';\r\n }\r\n\r\n // Some schemas expose only the entity Chill type and use that same type for querying.\r\n if (property.referenceChillType?.trim() || this.metadataString(property, 'ChillEntityTypeName') || this.metadataString(property, 'chillEntityTypeName')) {\r\n return entityChillType;\r\n }\r\n\r\n const entityTypeName = entityChillType.split('.').pop()?.trim() ?? '';\r\n if (!entityTypeName) {\r\n return '';\r\n }\r\n\r\n const candidates = [\r\n `${entityChillType}Query`,\r\n `Model.Query.${entityTypeName}Query`,\r\n `Model.General.${entityTypeName}Query`\r\n ];\r\n\r\n return candidates.find((candidate) => candidate.trim().length > 0) ?? '';\r\n }\r\n\r\n /**\r\n * Derives the dialog-specific view code from the caller schema view code.\r\n */\r\n private resolveLookupDialogViewCode(): string {\r\n const currentViewCode = this.schema()?.chillViewCode?.trim() ?? '';\r\n if (!currentViewCode || currentViewCode.toLowerCase() === 'default') {\r\n return 'dialog';\r\n }\r\n\r\n return `${currentViewCode}.dialog`;\r\n }\r\n\r\n /**\r\n * Reads numeric validation metadata such as min, max, or length constraints.\r\n */\r\n private readMetadataNumber(property: ChillPropertySchema, key: string): number | null {\r\n const rawValue = this.metadataString(property, key);\r\n if (!rawValue) {\r\n return null;\r\n }\r\n\r\n const parsedValue = Number(rawValue);\r\n return Number.isFinite(parsedValue)\r\n ? parsedValue\r\n : null;\r\n }\r\n\r\n /**\r\n * Checks whether a property is marked as required in metadata.\r\n */\r\n private isRequired(property: ChillPropertySchema): boolean {\r\n const rawRequired = this.metadataString(property, 'required').toLowerCase();\r\n return rawRequired === 'true'\r\n || rawRequired === '1'\r\n || rawRequired === 'required';\r\n }\r\n\r\n /**\r\n * Reads string metadata defensively so structured metadata values do not break string-only callers.\r\n */\r\n private metadataString(property: ChillPropertySchema, key: string): string {\r\n const value = property.metadata?.[key];\r\n return typeof value === 'string'\r\n ? value.trim()\r\n : typeof value === 'number'\r\n ? String(value)\r\n : '';\r\n }\r\n\r\n /**\r\n * Treats nullish values, blank strings, and empty arrays as empty for required validation.\r\n */\r\n private isEmptyValue(value: JsonValue | undefined): boolean {\r\n if (value === undefined || value === null) {\r\n return true;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return value.trim().length === 0;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.length === 0;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Converts numeric strings and finite numbers into a comparable numeric value.\r\n */\r\n private readNumber(value: JsonValue | undefined): number | null {\r\n return this.chill.readDisplayNumber(value);\r\n }\r\n\r\n /**\r\n * Excludes unsupported schema properties from rendering.\r\n */\r\n private shouldSkipProperty(property: ChillPropertySchema): boolean {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.Unknown;\r\n }\r\n\r\n /**\r\n * Searches common API wrapper properties until it finds an array of lookup objects.\r\n */\r\n private extractLookupResults(response: JsonObject): JsonObject[] {\r\n const candidates = [\r\n response,\r\n response['Results'],\r\n response['results'],\r\n response['Entities'],\r\n response['entities'],\r\n response['Items'],\r\n response['items'],\r\n response['Value'],\r\n response['value'],\r\n response['Data'],\r\n response['data']\r\n ];\r\n\r\n for (const candidate of candidates) {\r\n if (!Array.isArray(candidate)) {\r\n continue;\r\n }\r\n\r\n const results = candidate.filter((item): item is JsonObject => this.isJsonObject(item));\r\n if (results.length > 0) {\r\n return results;\r\n }\r\n }\r\n\r\n return [];\r\n }\r\n\r\n /**\r\n * Writes a lookup error and optionally keeps the last result list visible for recovery.\r\n */\r\n private setLookupError(propertyName: string, message: string, preserveResults = true): void {\r\n this.lookups.update((current) => ({\r\n ...current,\r\n [propertyName]: {\r\n ...(current[propertyName] ?? this.createEmptyLookupState()),\r\n isSearching: false,\r\n error: message,\r\n results: preserveResults ? (current[propertyName]?.results ?? []) : []\r\n }\r\n }));\r\n }\r\n\r\n /**\r\n * Creates the default empty lookup state object.\r\n */\r\n private createEmptyLookupState(): LookupState {\r\n return {\r\n term: '',\r\n isSearching: false,\r\n error: '',\r\n results: [],\r\n selectedGuid: '',\r\n selectedLabel: '',\r\n selectedShortLabel: ''\r\n };\r\n }\r\n\r\n /**\r\n * Debounces lookup requests so rapid typing collapses into a single backend query.\r\n */\r\n private scheduleLookupSearch(property: ChillPropertySchema, term: string): void {\r\n this.cancelLookupSearch(property.name);\r\n this.lookupSearchTimers.set(property.name, setTimeout(() => {\r\n this.lookupSearchTimers.delete(property.name);\r\n this.searchLookup(property, term);\r\n }, 250));\r\n }\r\n\r\n /**\r\n * Cancels any pending debounced lookup search for a property.\r\n */\r\n private cancelLookupSearch(propertyName: string): void {\r\n const timer = this.lookupSearchTimers.get(propertyName);\r\n if (timer) {\r\n clearTimeout(timer);\r\n this.lookupSearchTimers.delete(propertyName);\r\n }\r\n }\r\n\r\n /**\r\n * Compares two lookup labels in a case-insensitive, trimmed form.\r\n */\r\n private matchesLookupLabel(left: string, right: string): boolean {\r\n return left.trim().toLowerCase() === right.trim().toLowerCase();\r\n }\r\n\r\n /**\r\n * Emits only the blurred field and its latest cached value to match the parent component contract.\r\n */\r\n private notifyFieldBlur(propertyName: string): void {\r\n if (this.isDestroyed) {\r\n return;\r\n }\r\n\r\n this.fieldBlur.emit({\r\n [propertyName]: this.fieldValues()[propertyName]\r\n });\r\n }\r\n\r\n /**\r\n * Keeps the Angular control and the local signal cache synchronized when the component updates a field itself.\r\n */\r\n private setFieldValue(propertyName: string, value: JsonValue): void {\r\n const control = this.control(propertyName);\r\n const valueChanged = !Object.is(control?.value ?? null, value ?? null);\r\n control?.setValue(value);\r\n if (control && valueChanged) {\r\n control.markAsDirty();\r\n control.markAsTouched();\r\n }\r\n this.fieldValues.update((current) => ({\r\n ...current,\r\n [propertyName]: value\r\n }));\r\n }\r\n\r\n /**\r\n * Rebuilds lookup display text when the underlying form value changes outside the lookup UI handlers.\r\n */\r\n private syncLookupState(property: ChillPropertySchema, value: JsonValue): void {\r\n if (!this.isLookup(property) && !this.isLookupCollection(property)) {\r\n return;\r\n }\r\n\r\n this.lookups.update((current) => ({\r\n ...current,\r\n [property.name]: {\r\n ...(current[property.name] ?? this.createEmptyLookupState()),\r\n term: this.isLookupCollection(property)\r\n ? (current[property.name]?.term ?? '')\r\n : this.isJsonObject(value) ? this.lookupLabel(value) : (current[property.name]?.term ?? ''),\r\n selectedGuid: this.isJsonObject(value) ? this.lookupGuid(value) : '',\r\n selectedLabel: this.isJsonObject(value) ? this.lookupLabel(value) : '',\r\n selectedShortLabel: this.isJsonObject(value) ? this.lookupShortLabel(value) : ''\r\n }\r\n }));\r\n }\r\n\r\n /**\r\n * Builds a comma-separated summary from a lookup collection value.\r\n */\r\n private lookupCollectionSummaryFromValue(value: JsonValue): string {\r\n return Array.isArray(value)\r\n ? value.filter((item): item is JsonObject => this.isJsonObject(item)).map((item) => this.lookupLabel(item)).filter((item) => item.length > 0).join(', ')\r\n : '';\r\n }\r\n\r\n /**\r\n * Appends a newly selected lookup entity to a collection and resets the live search slot.\r\n */\r\n private appendLookupCollectionResult(property: ChillPropertySchema, result: JsonObject): void {\r\n const nextResults = this.mergeLookupCollectionResults(this.selectedLookupCollectionEntities(property.name), [result]);\r\n this.setFieldValue(property.name, nextResults);\r\n this.lookups.update((current) => ({\r\n ...current,\r\n [property.name]: {\r\n ...(current[property.name] ?? this.createEmptyLookupState()),\r\n term: '',\r\n isSearching: false,\r\n error: '',\r\n results: [],\r\n selectedGuid: ''\r\n }\r\n }));\r\n this.validateField(property);\r\n }\r\n\r\n /**\r\n * Merges collection lookup selections without duplicating the same entity Guid.\r\n */\r\n private mergeLookupCollectionResults(existing: JsonObject[], incoming: JsonObject[]): JsonObject[] {\r\n const merged = [...existing];\r\n const seenGuids = new Set(existing.map((item) => this.lookupGuid(item)).filter((guid) => guid.length > 0));\r\n\r\n for (const item of incoming) {\r\n const guid = this.lookupGuid(item);\r\n if (guid) {\r\n if (seenGuids.has(guid)) {\r\n continue;\r\n }\r\n\r\n seenGuids.add(guid);\r\n merged.push(item);\r\n continue;\r\n }\r\n\r\n if (!merged.includes(item)) {\r\n merged.push(item);\r\n }\r\n }\r\n\r\n return merged;\r\n }\r\n\r\n /**\r\n * Checks whether a JSON value is a non-array object.\r\n */\r\n private isJsonObject(value: JsonValue | null | undefined): value is JsonObject {\r\n return !!value && typeof value === 'object' && !Array.isArray(value);\r\n }\r\n\r\n /**\r\n * Avoids resetting field signals when the computed field map is unchanged.\r\n */\r\n private areRecordsEqual(left: FieldValueMap, right: FieldValueMap): boolean {\r\n const leftKeys = Object.keys(left);\r\n const rightKeys = Object.keys(right);\r\n if (leftKeys.length !== rightKeys.length) {\r\n return false;\r\n }\r\n\r\n return leftKeys.every((key) => Object.is(left[key], right[key]));\r\n }\r\n\r\n /**\r\n * Avoids rewriting error state when the same field messages are already stored.\r\n */\r\n private areStringRecordsEqual(left: ErrorMap, right: ErrorMap): boolean {\r\n const leftKeys = Object.keys(left);\r\n const rightKeys = Object.keys(right);\r\n if (leftKeys.length !== rightKeys.length) {\r\n return false;\r\n }\r\n\r\n return leftKeys.every((key) => left[key] === right[key]);\r\n }\r\n\r\n /**\r\n * Prevents lookup signal churn by comparing the full lookup state map before writing it.\r\n */\r\n private areLookupStatesEqual(\r\n left: Record<string, LookupState>,\r\n right: Record<string, LookupState>\r\n ): boolean {\r\n const leftKeys = Object.keys(left);\r\n const rightKeys = Object.keys(right);\r\n if (leftKeys.length !== rightKeys.length) {\r\n return false;\r\n }\r\n\r\n return leftKeys.every((key) => this.areLookupStateEntriesEqual(left[key], right[key]));\r\n }\r\n\r\n /**\r\n * Compares the user-visible parts of two lookup entries, including result ordering.\r\n */\r\n private areLookupStateEntriesEqual(left: LookupState | undefined, right: LookupState | undefined): boolean {\r\n if (!left || !right) {\r\n return left === right;\r\n }\r\n\r\n return left.term === right.term\r\n && left.isSearching === right.isSearching\r\n && left.error === right.error\r\n && left.selectedGuid === right.selectedGuid\r\n && left.selectedLabel === right.selectedLabel\r\n && left.selectedShortLabel === right.selectedShortLabel\r\n && left.results.length === right.results.length\r\n && left.results.every((item, index) => item === right.results[index]);\r\n }\r\n\r\n private closeLookupResults(propertyName: string): void {\r\n this.lookups.update((current) => {\r\n const lookup = current[propertyName];\r\n if (!lookup) {\r\n return current;\r\n }\r\n\r\n return {\r\n ...current,\r\n [propertyName]: {\r\n ...lookup,\r\n results: []\r\n }\r\n };\r\n });\r\n }\r\n\r\n // #endregion\r\n}\r\n","<div class=\"polymorphic-fields\">\r\n @for (property of properties(); track property.name) {\r\n <label class=\"field\">\r\n @if (showLabels()) {\r\n <span>{{ property.displayName || property.name }}</span>\r\n }\r\n\r\n @if (isCheckbox(property)) {\n @if (control(property.name); as fieldControl) {\n <app-chill-polymorphic-boolean-control\n [control]=\"fieldControl\"\n [name]=\"property.name\"\n [readOnly]=\"isPropertyReadOnly(property.name)\"\n (blur)=\"emitFieldBlur(property.name)\" />\n }\n } @else if (isLookupCollection(property) || isLookup(property)) {\n <app-chill-polymorphic-lookup-control\n [property]=\"property\"\n [readOnly]=\"isPropertyReadOnly(property.name)\"\n [placeholder]=\"placeholder(property)\"\n [term]=\"lookupTerm(property.name)\"\n [results]=\"lookupResults(property.name)\"\n [error]=\"lookupError(property.name)\"\n [searching]=\"lookupIsSearching(property.name)\"\n [selectedEntities]=\"selectedLookupCollectionEntities(property.name)\"\n [selectedLabel]=\"selectedLookupLabel(property.name)\"\n [selectedShortLabel]=\"selectedLookupShortLabel(property.name)\"\n [selectedGuid]=\"selectedLookupEntity(property.name) ? lookupGuid(selectedLookupEntity(property.name)!) : ''\"\n [hasSelectedEntity]=\"hasSelectedLookupEntity(property.name)\"\n [canOpenDialog]=\"canOpenLookupDialog(property)\"\n [positions]=\"lookupOverlayPositions\"\n (termChange)=\"updateLookupTerm(property, $event)\"\n (focus)=\"handleLookupFocus(property)\"\n (blur)=\"handleLookupBlur(property.name)\"\n (beginDialog)=\"beginLookupDialogSelection(property.name)\"\n (openDialog)=\"openLookupDialog(property)\"\n (clear)=\"clearLookup(property)\"\n (select)=\"selectLookupResult(property, $event)\"\n (remove)=\"removeLookupCollectionEntity(property, $event)\" />\n } @else if (isTextarea(property)) {\n @if (control(property.name); as fieldControl) {\n <app-chill-polymorphic-textarea-control\n [control]=\"fieldControl\"\n [name]=\"property.name\"\n [placeholder]=\"placeholder(property)\"\n [readOnly]=\"isPropertyReadOnly(property.name)\"\n (blur)=\"emitFieldBlur(property.name)\" />\n }\n } @else if (isJsonEditor(property)) {\n <app-chill-polymorphic-editor-control\n [value]=\"textValue(property.name)\"\n [language]=\"editorLanguage(property)\"\n [placeholder]=\"placeholder(property)\"\n [invalid]=\"!!validationMessage(property.name)\"\n [disabled]=\"isPropertyReadOnly(property.name) || (control(property.name)?.disabled ?? false)\"\n (valueChange)=\"updateJsonInput(property.name, $event)\"\n (blur)=\"emitFieldBlur(property.name)\"\n (beginDialog)=\"beginEditorDialogSelection(property.name)\"\n (openDialog)=\"openEditorDialog(property)\" />\n } @else if (isSelect(property)) {\n <app-chill-polymorphic-select-control\n [name]=\"property.name\"\n [value]=\"selectValue(property.name)\"\n [options]=\"selectOptions(property)\"\n [readOnly]=\"isPropertyReadOnly(property.name)\"\n (valueChange)=\"updateSelectValue(property, $event)\" />\n } @else {\n @if (control(property.name); as fieldControl) {\n <app-chill-polymorphic-scalar-control\n [control]=\"fieldControl\"\n [name]=\"property.name\"\n [placeholder]=\"placeholder(property)\"\n [readOnly]=\"isPropertyReadOnly(property.name)\"\n [formatted]=\"isFormattedTextInput(property)\"\n [value]=\"textValue(property.name)\"\n [type]=\"inputType(property)\"\n [step]=\"inputStep(property)\"\n [staticSuffix]=\"staticSuffix(property)\"\n (valueChange)=\"updateTextInput(property.name, $event)\"\n (blur)=\"normalizeTextOnBlur(property)\" />\n }\n }\r\n\r\n @if (validationMessage(property.name)) {\r\n <small class=\"field-error\">{{ validationMessage(property.name) }}</small>\r\n }\r\n </label>\r\n }\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, OnDestroy, computed, effect, inject, input, output, signal } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport type { JsonObject, JsonValue } from '@chill-sharp/ng-client';\r\nimport type { ChillValidationError } from '@chill-sharp/ts-client';\r\nimport { Subscription, firstValueFrom } from 'rxjs';\r\nimport type {\r\n ChillEntity,\r\n ChillFormSubmitEvent,\r\n ChillMetadataRecord,\r\n ChillPropertySchema,\r\n ChillQuery,\r\n ChillSchema\r\n} from '../models/chill-schema.models';\r\nimport { CHILL_PROPERTY_TYPE, CHILL_PROPERTY_TYPE_OPTIONS, canChangeChillPropertyType, chillSimplePropertyType } from '../models/chill-schema.models';\r\nimport { WorkspaceLayoutService } from '../services/workspace-layout.service';\r\nimport { WorkspaceDialogService } from '../services/workspace-dialog.service';\r\nimport { ChillPolymorphicInputComponent } from './chill-polymorphic-input.component';\r\nimport { ChillService } from '../services/chill.service';\r\nimport { ChillI18nLabelComponent } from './chill-i18n-label.component';\r\nimport { ChillI18nButtonLabelComponent } from './chill-i18n-button-label.component';\r\nimport { NoticeTransitionDirective } from './notice-transition.directive';\r\n\r\nconst FORM_LAYOUT_METADATA_KEY = 'chill-form-component';\r\nconst DEFAULT_FORM_COLUMN_COUNT = 2;\r\nconst EMPTY_LAYOUT_ITEM_PREFIX = '__empty__';\r\n\r\ninterface FormLayoutItem {\r\n id: string;\r\n kind: 'property' | 'empty';\r\n name?: string;\r\n span: number;\r\n hidden: boolean;\r\n}\r\n\r\ninterface FormLayoutState {\r\n columnCount: number;\r\n items: FormLayoutItem[];\r\n}\r\n\r\ntype ResolvedFormLayoutItem =\r\n | { id: string; kind: 'property'; property: ChillPropertySchema; span: number; hidden: boolean }\r\n | { id: string; kind: 'empty'; span: number; hidden: boolean };\r\n\r\n@Component({\r\n selector: 'app-chill-form',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, ChillPolymorphicInputComponent, ChillI18nLabelComponent, ChillI18nButtonLabelComponent, NoticeTransitionDirective],\r\n templateUrl: './chill-form.component.html',\r\n styleUrl: './chill-form.component.scss' \r\n})\r\nexport class ChillFormComponent implements OnDestroy {\r\n readonly columnOptions = [1, 2, 3, 4, 5, 6];\r\n readonly propertyTypeOptions = CHILL_PROPERTY_TYPE_OPTIONS;\r\n readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n readonly chill = inject(ChillService);\r\n readonly layout = inject(WorkspaceLayoutService);\r\n readonly dialog = inject(WorkspaceDialogService, { optional: true });\r\n readonly schema = input<ChillSchema | null>(null);\r\n readonly entity = input<ChillEntity | null>(null);\r\n readonly query = input<ChillQuery | null>(null);\r\n readonly submitLabel = input(this.chill.T('22282CD9-6B51-4B50-87BE-36E3790D4B8D', 'Submit', 'Invia'));\r\n readonly submitLabelGuid = input<string | null>(null);\r\n readonly submitPrimaryDefaultText = input<string | null>(null);\r\n readonly submitSecondaryDefaultText = input<string | null>(null);\r\n readonly showSchemaHeader = input(true);\r\n readonly renderSubmitInsideForm = input(true);\r\n readonly onSubmit = input<((event: ChillFormSubmitEvent) => void | Promise<void>) | null>(null);\r\n readonly closeDialogOnSubmit = input(false);\r\n readonly submitError = input<string | (() => string) | null>(null);\r\n readonly dismissSubmitError = input<(() => void) | null>(null);\r\n readonly readonlyPropertyNames = input<string[] | null>(null);\r\n\r\n readonly formSubmit = output<ChillFormSubmitEvent>();\r\n readonly schemaUpdated = output<ChillSchema>();\r\n\r\n readonly form = signal<FormGroup<Record<string, FormControl<JsonValue>>> | null>(null);\r\n readonly propertyValidity = signal<Record<string, boolean>>({});\r\n readonly serverFieldErrors = signal<Record<string, string>>({});\r\n readonly genericValidationErrors = signal<string[]>([]);\r\n readonly isAutocompleting = signal(false);\r\n readonly isSubmitting = signal(false);\r\n readonly internalSubmitError = signal('');\r\n readonly isEditMode = signal(false);\r\n readonly isSavingLayout = signal(false);\r\n readonly isRefreshingSchema = signal(false);\r\n readonly layoutError = signal('');\r\n readonly dragPropertyName = signal('');\r\n readonly schemaRefreshTick = signal(0);\r\n readonly layoutState = signal<FormLayoutState>({\r\n columnCount: DEFAULT_FORM_COLUMN_COUNT,\r\n items: []\r\n });\r\n private formValueSubscription = new Subscription();\r\n private lastFormValue: Record<string, JsonValue> = {};\r\n private lastFormResetSignature = '';\r\n private autocompleteRequestSequence = 0;\r\n private pendingAutocompletePromise: Promise<void> | null = null;\r\n readonly mode = computed<'entity' | 'query'>(() => this.query() ? 'query' : 'entity');\r\n readonly source = computed<ChillEntity | ChillQuery | null>(() => this.query() ?? this.entity());\r\n readonly hasCustomSubmitHandler = computed(() => !!this.onSubmit());\r\n readonly properties = computed(() => {\r\n this.schemaRefreshTick();\r\n return this.schema()?.properties ?? [];\r\n });\r\n readonly layoutItems = computed<ResolvedFormLayoutItem[]>(() => {\r\n const propertyMap = new Map(this.properties().map((property) => [property.name, property]));\r\n const layout = this.layoutState();\r\n const resolvedItems = layout.items\r\n .map((item) => {\r\n const span = Math.min(Math.max(item.span, 1), layout.columnCount);\r\n if (item.kind === 'empty') {\r\n return {\r\n id: item.id,\r\n kind: 'empty' as const,\r\n span,\r\n hidden: item.hidden\r\n };\r\n }\r\n\r\n const propertyName = item.name?.trim() ?? '';\r\n const property = propertyMap.get(propertyName);\r\n if (!property) {\r\n return null;\r\n }\r\n\r\n return {\r\n id: item.id,\r\n kind: 'property' as const,\r\n property,\r\n span,\r\n hidden: item.hidden\r\n };\r\n })\r\n .filter((item): item is ResolvedFormLayoutItem => item !== null);\r\n\r\n const knownPropertyNames = new Set(\r\n resolvedItems\r\n .filter((item): item is Extract<ResolvedFormLayoutItem, { kind: 'property' }> => item.kind === 'property')\r\n .map((item) => item.property.name)\r\n );\r\n\r\n const missingProperties = this.properties()\r\n .filter((property) => !knownPropertyNames.has(property.name))\r\n .map((property) => ({\r\n id: property.name,\r\n kind: 'property' as const,\r\n property,\r\n span: 1,\r\n hidden: false\r\n }));\r\n\r\n return [...resolvedItems, ...missingProperties];\r\n });\r\n readonly canSubmit = computed(() => {\r\n const form = this.form();\r\n if (this.isEditMode()) {\r\n return false;\r\n }\r\n\r\n if (this.isSubmitting()) {\r\n return false;\r\n }\r\n\r\n if (form?.pending || form?.invalid) {\r\n return false;\r\n }\r\n\r\n return !this.hasInvalidPropertyState();\r\n });\r\n readonly resolvedSubmitError = computed(() => {\r\n const internalSubmitError = this.internalSubmitError().trim();\r\n if (internalSubmitError) {\r\n return internalSubmitError;\r\n }\r\n\r\n const submitError = this.submitError();\r\n if (typeof submitError === 'function') {\r\n return submitError().trim();\r\n }\r\n\r\n return typeof submitError === 'string'\r\n ? submitError.trim()\r\n : '';\r\n });\r\n readonly genericValidationMessage = computed(() => this.genericValidationErrors().join(' ').trim());\r\n readonly readonlyPropertyNameSet = computed(() => new Set(\r\n (this.readonlyPropertyNames() ?? [])\r\n .map((propertyName) => propertyName.trim().toLowerCase())\r\n .filter((propertyName) => propertyName.length > 0)\r\n ));\r\n\r\n constructor() {\r\n effect(() => {\r\n const schema = this.schema();\r\n const source = this.source();\r\n const nextLayoutState = this.readLayoutState(schema);\r\n const formResetSignature = this.buildFormResetSignature(schema, source);\r\n const shouldResetForm = formResetSignature !== this.lastFormResetSignature;\r\n this.layoutState.set(nextLayoutState);\r\n this.layoutError.set('');\r\n this.isEditMode.set(false);\r\n\r\n if (!shouldResetForm) {\r\n return;\r\n }\r\n\r\n this.lastFormResetSignature = formResetSignature;\r\n const nextForm = schema\r\n ? this.chill.prepareForm(schema, source)\r\n : null;\r\n this.form.set(nextForm);\r\n this.propertyValidity.set(this.createInitialPropertyValidity(schema));\r\n this.serverFieldErrors.set({});\r\n this.genericValidationErrors.set([]);\r\n this.internalSubmitError.set('');\r\n this.isAutocompleting.set(false);\r\n this.isSubmitting.set(false);\r\n this.syncFormValueSubscription(nextForm);\r\n\r\n });\r\n\r\n effect(() => {\r\n if (!this.layout.isLayoutEditingEnabled()) {\r\n this.isEditMode.set(false);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const form = this.form();\r\n const readonlyPropertyNameSet = this.readonlyPropertyNameSet();\r\n if (!form) {\r\n return;\r\n }\r\n\r\n for (const property of this.properties()) {\r\n const control = form.controls[property.name];\r\n if (!control) {\r\n continue;\r\n }\r\n\r\n const isReadonly = readonlyPropertyNameSet.has(property.name.trim().toLowerCase());\r\n if (isReadonly && control.enabled) {\r\n control.disable({ emitEvent: false });\r\n } else if (!isReadonly && control.disabled) {\r\n control.enable({ emitEvent: false });\r\n }\r\n }\r\n });\r\n }\r\n\r\n async submit(): Promise<void> {\r\n const form = this.form();\r\n if (!form || this.isEditMode() || this.isSubmitting()) {\r\n return;\r\n }\r\n\r\n this.internalSubmitError.set('');\r\n this.isSubmitting.set(true);\r\n try {\r\n if (this.shouldAutocompleteOnBlur()) {\r\n await this.flushPendingAutocomplete();\r\n }\r\n\r\n if (form.pending || form.invalid || this.hasInvalidPropertyState()) {\r\n return;\r\n }\r\n\r\n if (this.shouldValidateOnSubmit()) {\r\n const isValid = await this.validateCurrentPayload();\r\n if (!isValid) {\r\n return;\r\n }\r\n }\r\n\r\n if (form.pending || form.invalid || this.hasInvalidPropertyState()) {\r\n return;\r\n }\r\n\r\n const payload = this.mode() === 'query'\r\n ? this.buildQueryPayload()\r\n : this.buildEntityPayload();\r\n const event: ChillFormSubmitEvent = {\r\n kind: this.mode(),\r\n value: payload\r\n };\r\n\r\n this.formSubmit.emit(event);\r\n\r\n const customSubmit = this.onSubmit();\r\n if (customSubmit) {\r\n await customSubmit(event);\r\n if (this.closeDialogOnSubmit()) {\r\n this.dialog?.confirm();\r\n }\r\n } else {\r\n await this.submitDefault(event);\r\n }\r\n } catch (error: unknown) {\r\n this.internalSubmitError.set(this.chill.formatError(error));\r\n } finally {\r\n this.isSubmitting.set(false);\r\n }\r\n }\r\n\r\n toggleEditMode(): void {\r\n if (!this.layout.isLayoutEditingEnabled()) {\r\n return;\r\n }\r\n\r\n if (!this.isEditMode()) {\r\n this.layoutState.update((current) => this.completeLayoutState(current));\r\n this.isEditMode.set(true);\r\n this.layoutError.set('');\r\n return;\r\n }\r\n\r\n this.saveLayout();\r\n }\r\n\r\n updateFields(value: Record<string, JsonValue>): void {\r\n const incomingFieldNames = Object.keys(value)\r\n .map((fieldName) => fieldName.trim())\r\n .filter((fieldName) => fieldName.length > 0);\r\n const form = this.form();\r\n if (!form) {\r\n return;\r\n }\r\n\r\n for (const [fieldName, fieldValue] of Object.entries(value)) {\r\n const control = form.controls[fieldName];\r\n if (!control || Object.is(control.value, fieldValue)) {\r\n continue;\r\n }\r\n\r\n control.setValue(fieldValue);\r\n }\r\n\r\n if (incomingFieldNames.length > 0) {\r\n this.clearServerValidationForFields(incomingFieldNames);\r\n }\r\n }\r\n\r\n updatePropertyValidity(propertyName: string, isValid: boolean): void {\r\n this.propertyValidity.update((current) => {\r\n if (current[propertyName] === isValid) {\r\n return current;\r\n }\r\n\r\n return {\r\n ...current,\r\n [propertyName]: isValid\r\n };\r\n });\r\n }\r\n\r\n updateColumnCount(value: number | string): void {\r\n const parsedValue = typeof value === 'number' ? value : Number(value);\r\n const columnCount = Number.isFinite(parsedValue)\r\n ? Math.max(1, Math.floor(parsedValue))\r\n : DEFAULT_FORM_COLUMN_COUNT;\r\n\r\n this.layoutState.update((current) => ({\r\n columnCount,\r\n items: current.items.map((item) => ({\r\n ...item,\r\n span: Math.min(item.span, columnCount)\r\n }))\r\n }));\r\n }\r\n\r\n addEmptyCell(): void {\r\n this.layoutState.update((current) => ({\r\n ...current,\r\n items: [\r\n ...current.items,\r\n {\r\n id: this.createEmptyLayoutItemId(current.items),\r\n kind: 'empty',\r\n span: 1,\r\n hidden: false\r\n }\r\n ]\r\n }));\r\n }\r\n\r\n updatePropertyHidden(itemId: string, hidden: boolean): void {\r\n this.layoutState.update((current) => ({\r\n ...current,\r\n items: this.updateLayoutItemHidden(current.items, itemId, hidden)\r\n }));\r\n }\r\n\r\n isPropertyTypeOptionDisabled(property: ChillPropertySchema, propertyType: number): boolean {\r\n return !canChangeChillPropertyType(property.propertyType, propertyType);\r\n }\r\n\r\n updatePropertyType(property: ChillPropertySchema, value: number | string): void {\r\n const schema = this.schema();\r\n const parsed = typeof value === 'number' ? value : Number(value);\r\n if (!schema || !Number.isFinite(parsed) || !canChangeChillPropertyType(property.propertyType, parsed)) {\r\n return;\r\n }\r\n\r\n if ((property.propertyType ?? CHILL_PROPERTY_TYPE.Unknown) === parsed) {\r\n return;\r\n }\r\n\r\n this.savePropertySchema(schema, property.name, {\r\n ...property,\r\n propertyType: parsed,\r\n simplePropertyType: chillSimplePropertyType(parsed)\r\n });\r\n }\r\n\r\n increaseSpan(itemId: string): void {\r\n this.layoutState.update((current) => ({\r\n ...current,\r\n items: current.items.map((item) => item.id === itemId\r\n ? { ...item, span: Math.min(item.span + 1, current.columnCount) }\r\n : item)\r\n }));\r\n }\r\n\r\n decreaseSpan(itemId: string): void {\r\n this.layoutState.update((current) => ({\r\n ...current,\r\n items: current.items.map((item) => item.id === itemId\r\n ? { ...item, span: Math.max(1, item.span - 1) }\r\n : item)\r\n }));\r\n }\r\n\r\n resetLayout(): void {\r\n this.layoutState.update((current) => ({\r\n columnCount: current.columnCount,\r\n items: (this.schema()?.properties ?? []).map((property) => ({\r\n id: property.name,\r\n kind: 'property' as const,\r\n name: property.name,\r\n span: 1,\r\n hidden: false\r\n }))\r\n }));\r\n }\r\n\r\n refreshSchemaFromModel(): void {\r\n const schema = this.schema();\r\n const chillType = schema?.chillType?.trim() ?? '';\r\n const chillViewCode = schema?.chillViewCode?.trim() || 'default';\r\n if (!schema || !chillType || this.isRefreshingSchema()) {\r\n return;\r\n }\r\n\r\n this.isRefreshingSchema.set(true);\r\n this.isSavingLayout.set(true);\r\n this.layoutError.set('');\r\n\r\n this.chill.getSchema(chillType, chillViewCode, undefined, true).subscribe({\r\n next: (updatedSchema) => {\r\n if (!updatedSchema) {\r\n this.layoutError.set(this.chill.T('A6A6949E-F0D4-42F5-A8AE-E15B1B174084', 'The result schema is unavailable.', 'Lo schema dei risultati non è disponibile.'));\r\n return;\r\n }\r\n\r\n this.applyUpdatedSchema(schema, updatedSchema);\r\n },\r\n error: (error: unknown) => {\r\n this.layoutError.set(this.chill.formatError(error));\r\n this.isRefreshingSchema.set(false);\r\n this.isSavingLayout.set(false);\r\n },\r\n complete: () => {\r\n this.isRefreshingSchema.set(false);\r\n this.isSavingLayout.set(false);\r\n }\r\n });\r\n }\r\n\r\n beginDrag(event: DragEvent, itemId: string): void {\r\n if (!this.isEditMode()) {\r\n return;\r\n }\r\n\r\n if (this.isCellToolbarControl(event.target)) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n this.dragPropertyName.set(itemId);\r\n }\r\n\r\n allowDrop(event: DragEvent): void {\r\n if (!this.isEditMode()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n }\r\n\r\n dropProperty(targetItemId: string): void {\r\n const sourceItemId = this.dragPropertyName();\r\n if (!sourceItemId || sourceItemId === targetItemId) {\r\n this.dragPropertyName.set('');\r\n return;\r\n }\r\n\r\n this.layoutState.update((current) => {\r\n const nextItems = [...current.items];\r\n const sourceIndex = nextItems.findIndex((item) => item.id === sourceItemId);\r\n const targetIndex = nextItems.findIndex((item) => item.id === targetItemId);\r\n if (sourceIndex < 0 || targetIndex < 0) {\r\n return current;\r\n }\r\n\r\n const [movedItem] = nextItems.splice(sourceIndex, 1);\r\n const insertionIndex = sourceIndex < targetIndex\r\n ? targetIndex - 1\r\n : targetIndex;\r\n nextItems.splice(insertionIndex, 0, movedItem);\r\n\r\n return {\r\n ...current,\r\n items: nextItems\r\n };\r\n });\r\n\r\n this.dragPropertyName.set('');\r\n }\r\n\r\n endDrag(): void {\r\n this.dragPropertyName.set('');\r\n }\r\n\r\n gridTemplateColumns(): string {\r\n return `repeat(${this.layoutState().columnCount}, minmax(0, 1fr))`;\r\n }\r\n\r\n trackByProperty(index: number, item: ResolvedFormLayoutItem): string {\r\n return item.id || `${index}`;\r\n }\r\n\r\n canDialogSubmit(): boolean {\r\n return this.canSubmit();\r\n }\r\n\r\n clearSubmitError(): void {\r\n this.internalSubmitError.set('');\r\n this.dismissSubmitError()?.();\r\n }\r\n\r\n handlePropertyBlur(value: Record<string, JsonValue>): void {\r\n const protectedFieldNames = Object.keys(value)\r\n .map((fieldName) => fieldName.trim())\r\n .filter((fieldName) => fieldName.length > 0);\r\n this.updateFields(value);\r\n if (!this.shouldAutocompleteOnBlur()) {\r\n return;\r\n }\r\n\r\n queueMicrotask(() => {\r\n void this.runAutocomplete(protectedFieldNames);\r\n });\r\n }\r\n\r\n openPropertySettings(property: ChillPropertySchema): void {\r\n const schema = this.schema();\r\n if (!schema || !this.dialog) {\r\n return;\r\n }\r\n\r\n void (async () => {\r\n const { SchemaPropertyDialogComponent } = await import('./schema-property-dialog.component');\r\n const result = await this.dialog!.openDialog<ChillPropertySchema>({\r\n title: property.displayName?.trim() || property.name,\r\n component: SchemaPropertyDialogComponent,\r\n okLabel: this.chill.T('62953302-B951-4FD1-BD08-4B7649A91BAF', 'Save', 'Salva'),\r\n inputs: {\r\n schema,\r\n property\r\n }\r\n });\r\n\r\n if (result.status !== 'confirmed' || !result.value) {\r\n return;\r\n }\r\n\r\n this.savePropertySchema(schema, property.name, result.value);\r\n })();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.formValueSubscription.unsubscribe();\r\n }\r\n\r\n private buildEntityPayload(): ChillEntity {\r\n const entity = this.entity();\r\n const schema = this.schema();\r\n const sanitizedEntity = entity && schema\r\n ? this.stripSchemaPropertiesFromRoot(entity, schema)\r\n : entity;\r\n return {\r\n ...(sanitizedEntity ?? {}),\r\n properties: this.buildPropertiesObject(this.form())\r\n };\r\n }\r\n\r\n private buildQueryPayload(): ChillQuery {\r\n const query = this.query();\r\n return {\r\n ...(query ?? {}),\r\n properties: this.buildPropertiesObject(this.form())\r\n };\r\n }\r\n\r\n private buildPropertiesObject(formOverride: FormGroup<Record<string, FormControl<JsonValue>>> | null): Record<string, JsonValue> {\r\n const properties: Record<string, JsonValue> = {};\r\n const schema = this.schema();\r\n const formValue = formOverride?.getRawValue() ?? {};\r\n\r\n for (const property of this.properties()) {\r\n const rawValue = formValue[property.name];\r\n properties[property.name] = this.chill.toJsonValue(schema, property.name, rawValue);\r\n }\r\n\r\n return properties;\r\n }\r\n\r\n private syncFormValueSubscription(form: FormGroup<Record<string, FormControl<JsonValue>>> | null): void {\r\n this.formValueSubscription.unsubscribe();\r\n this.formValueSubscription = new Subscription();\r\n this.lastFormValue = form?.getRawValue() ?? {};\r\n if (!form) {\r\n return;\r\n }\r\n\r\n this.formValueSubscription = form.valueChanges.subscribe((value) => {\r\n const nextValue = value as Record<string, JsonValue>;\r\n const changedFieldNames = this.readChangedFieldNames(this.lastFormValue, nextValue);\r\n this.lastFormValue = { ...nextValue };\r\n if (changedFieldNames.length > 0) {\r\n this.clearServerValidationForFields(changedFieldNames);\r\n }\r\n });\r\n }\r\n\r\n private async runAutocomplete(protectedFieldNames: string[] = []): Promise<void> {\r\n const schema = this.schema();\r\n if (!schema || this.isEditMode() || !this.shouldAutocompleteOnBlur()) {\r\n return;\r\n }\r\n\r\n const requestSequence = ++this.autocompleteRequestSequence;\r\n const request = this.buildCurrentPayload();\r\n this.isAutocompleting.set(true);\r\n\r\n const pendingRequest = (async () => {\r\n const response = await firstValueFrom(this.chill.autocomplete(request as JsonObject));\r\n if (requestSequence !== this.autocompleteRequestSequence) {\r\n return;\r\n }\r\n\r\n const autocompletedFields = this.extractAutocompleteFields(schema, response);\r\n if (Object.keys(autocompletedFields).length > 0) {\r\n this.applyAutocompleteFields(autocompletedFields, protectedFieldNames);\r\n }\r\n })()\r\n .catch(() => undefined)\r\n .finally(() => {\r\n if (requestSequence === this.autocompleteRequestSequence) {\r\n this.isAutocompleting.set(false);\r\n }\r\n if (this.pendingAutocompletePromise === pendingRequest) {\r\n this.pendingAutocompletePromise = null;\r\n }\r\n });\r\n\r\n this.pendingAutocompletePromise = pendingRequest;\r\n await pendingRequest;\r\n }\r\n\r\n private applyAutocompleteFields(value: Record<string, JsonValue>, protectedFieldNames: string[] = []): void {\r\n const form = this.form();\r\n if (!form) {\r\n return;\r\n }\r\n\r\n const focusedPropertyName = this.readFocusedPropertyName();\r\n const protectedFieldNameSet = new Set(\r\n protectedFieldNames\r\n .map((fieldName) => fieldName.trim())\r\n .filter((fieldName) => fieldName.length > 0)\r\n );\r\n const nextValues: Record<string, JsonValue> = {};\r\n\r\n for (const [fieldName, fieldValue] of Object.entries(value)) {\r\n const control = form.controls[fieldName];\r\n if (!control) {\r\n continue;\r\n }\r\n\r\n const shouldProtectFocusedField = fieldName === focusedPropertyName\r\n && control.dirty\r\n && control.value !== null;\r\n const shouldProtectBlurredField = protectedFieldNameSet.has(fieldName)\r\n && control.dirty\r\n && control.value !== null;\r\n if (shouldProtectFocusedField || shouldProtectBlurredField) {\r\n continue;\r\n }\r\n\r\n nextValues[fieldName] = fieldValue;\r\n }\r\n\r\n if (Object.keys(nextValues).length > 0) {\r\n this.updateFields(nextValues);\r\n }\r\n }\r\n\r\n private readFocusedPropertyName(): string {\r\n const activeElement = globalThis.document?.activeElement;\r\n if (!(activeElement instanceof HTMLElement)) {\r\n return '';\r\n }\r\n\r\n if (!this.host.nativeElement.contains(activeElement)) {\r\n return '';\r\n }\r\n\r\n return activeElement.getAttribute('name')?.trim() ?? '';\r\n }\r\n\r\n private isCellToolbarControl(target: EventTarget | null): boolean {\r\n return target instanceof HTMLElement\r\n && !!target.closest('input, button, select, textarea');\r\n }\r\n\r\n private async flushPendingAutocomplete(): Promise<void> {\r\n this.blurFocusedControl();\r\n await new Promise<void>((resolve) => queueMicrotask(resolve));\r\n\r\n while (this.pendingAutocompletePromise) {\r\n await this.pendingAutocompletePromise;\r\n await new Promise<void>((resolve) => queueMicrotask(resolve));\r\n }\r\n }\r\n\r\n private blurFocusedControl(): void {\r\n const activeElement = globalThis.document?.activeElement;\r\n if (!(activeElement instanceof HTMLElement)) {\r\n return;\r\n }\r\n\r\n if (!this.host.nativeElement.contains(activeElement)) {\r\n return;\r\n }\r\n\r\n activeElement.blur();\r\n }\r\n\r\n private async submitDefault(event: ChillFormSubmitEvent): Promise<void> {\r\n if (event.kind !== 'entity') {\r\n return;\r\n }\r\n\r\n const schema = this.schema();\r\n if (!schema) {\r\n return;\r\n }\r\n\r\n const entity = this.normalizeEntityForSubmit(event.value as ChillEntity, schema);\r\n const isNewEntity = this.readEntityIsNew(entity);\r\n const request = isNewEntity\r\n ? this.chill.create(entity as JsonObject)\r\n : this.chill.update(entity as JsonObject);\r\n\r\n const savedEntity = await firstValueFrom(request);\r\n this.dialog?.confirm(savedEntity as ChillEntity);\r\n }\r\n\r\n private normalizeEntityForSubmit(entity: ChillEntity, schema: ChillSchema): ChillEntity {\r\n const sanitizedSourceEntity = this.entity()\r\n ? this.stripSchemaPropertiesFromRoot(this.entity() as ChillEntity, schema)\r\n : null;\r\n const sanitizedEntity = this.stripSchemaPropertiesFromRoot(entity, schema);\r\n return {\r\n ...(sanitizedSourceEntity ?? {}),\r\n ...sanitizedEntity,\r\n chillType: this.readEntityChillType(entity, schema),\r\n properties: this.buildPropertiesObject(this.form())\r\n };\r\n }\r\n\r\n private stripSchemaPropertiesFromRoot(entity: ChillEntity, schema: ChillSchema): ChillEntity {\r\n const nextEntity = { ...entity } as ChillEntity;\r\n const protectedNames = new Set(['guid', 'Guid', 'chillType', 'ChillType', 'chillState', 'ChillState', 'properties', 'Properties']);\r\n\r\n for (const property of schema.properties ?? []) {\r\n const propertyName = property.name?.trim();\r\n if (!propertyName || protectedNames.has(propertyName)) {\r\n continue;\r\n }\r\n\r\n delete nextEntity[propertyName];\r\n const pascalCaseName = propertyName.length > 0\r\n ? `${propertyName[0].toUpperCase()}${propertyName.slice(1)}`\r\n : propertyName;\r\n if (!protectedNames.has(pascalCaseName)) {\r\n delete nextEntity[pascalCaseName];\r\n }\r\n }\r\n\r\n return nextEntity;\r\n }\r\n\r\n private readEntityChillType(entity: ChillEntity, schema: ChillSchema): string {\r\n const directChillType = typeof entity['chillType'] === 'string'\r\n ? entity['chillType'].trim()\r\n : '';\r\n if (directChillType) {\r\n return directChillType;\r\n }\r\n\r\n const sourceEntity = this.entity();\r\n const sourceChillType = sourceEntity && typeof sourceEntity['chillType'] === 'string'\r\n ? sourceEntity['chillType'].trim()\r\n : '';\r\n if (sourceChillType) {\r\n return sourceChillType;\r\n }\r\n\r\n return schema.chillType?.trim() ?? '';\r\n }\r\n\r\n private readEntityIsNew(entity: ChillEntity): boolean {\r\n const chillState = entity['chillState'];\r\n return !!chillState\r\n && typeof chillState === 'object'\r\n && !Array.isArray(chillState)\r\n && (chillState as JsonObject)['isNew'] === true;\r\n }\r\n\r\n private shouldValidateOnSubmit(): boolean {\r\n return this.mode() === 'entity';\r\n }\r\n\r\n private shouldAutocompleteOnBlur(): boolean {\r\n return this.mode() === 'entity';\r\n }\r\n\r\n private readResponsePropertyValue(source: JsonObject, propertyName: string): JsonValue | undefined {\r\n const directProperties = source['properties'];\r\n if (directProperties && typeof directProperties === 'object' && !Array.isArray(directProperties) && propertyName in directProperties) {\r\n return (directProperties as Record<string, JsonValue>)[propertyName];\r\n }\r\n\r\n const pascalProperties = source['Properties'];\r\n if (pascalProperties && typeof pascalProperties === 'object' && !Array.isArray(pascalProperties) && propertyName in pascalProperties) {\r\n return (pascalProperties as Record<string, JsonValue>)[propertyName];\r\n }\r\n\r\n if (propertyName in source) {\r\n return source[propertyName];\r\n }\r\n\r\n const pascalPropertyName = propertyName.length > 0\r\n ? `${propertyName[0].toUpperCase()}${propertyName.slice(1)}`\r\n : propertyName;\r\n return pascalPropertyName in source\r\n ? source[pascalPropertyName]\r\n : undefined;\r\n }\r\n\r\n private validateCurrentPayload(): Promise<boolean> {\r\n return this.validateEntityPayload();\r\n }\r\n\r\n private async validateEntityPayload(): Promise<boolean> {\r\n const schema = this.schema();\r\n if (!schema) {\r\n return true;\r\n }\r\n\r\n try {\r\n const errors = await firstValueFrom(this.chill.validate(this.buildCurrentPayload() as JsonObject));\r\n const { fieldErrors, genericErrors } = this.partitionValidationErrors(errors, schema);\r\n this.serverFieldErrors.set(fieldErrors);\r\n this.genericValidationErrors.set(genericErrors);\r\n return Object.keys(fieldErrors).length === 0 && genericErrors.length === 0;\r\n } catch (error: unknown) {\r\n this.genericValidationErrors.set([this.chill.formatError(error)]);\r\n return false;\r\n }\r\n }\r\n\r\n private partitionValidationErrors(\r\n errors: ChillValidationError[],\r\n schema: ChillSchema\r\n ): { fieldErrors: Record<string, string>; genericErrors: string[] } {\r\n const fieldNameMap = new Map(\r\n (schema.properties ?? [])\r\n .map((property) => property.name.trim())\r\n .filter((propertyName) => propertyName.length > 0)\r\n .map((propertyName) => [propertyName.toLowerCase(), propertyName] as const)\r\n );\r\n const fieldErrors: Record<string, string> = {};\r\n const genericErrors: string[] = [];\r\n\r\n for (const error of errors) {\r\n const fieldName = typeof error.fieldName === 'string' ? error.fieldName.trim() : '';\r\n const message = typeof error.message === 'string' ? error.message.trim() : '';\r\n if (!message) {\r\n continue;\r\n }\r\n\r\n const resolvedFieldName = fieldName ? fieldNameMap.get(fieldName.toLowerCase()) : undefined;\r\n if (resolvedFieldName) {\r\n fieldErrors[resolvedFieldName] = fieldErrors[resolvedFieldName]\r\n ? `${fieldErrors[resolvedFieldName]} ${message}`\r\n : message;\r\n continue;\r\n }\r\n\r\n genericErrors.push(message);\r\n }\r\n\r\n return { fieldErrors, genericErrors };\r\n }\r\n\r\n private buildCurrentPayload(): ChillEntity | ChillQuery {\r\n return this.mode() === 'query'\r\n ? this.buildQueryPayload()\r\n : this.buildEntityPayload();\r\n }\r\n\r\n private hasInvalidPropertyState(): boolean {\r\n return this.layoutItems()\r\n .filter((item): item is Extract<ResolvedFormLayoutItem, { kind: 'property' }> => item.kind === 'property' && !item.hidden)\r\n .some((item) => this.propertyValidity()[item.property.name] === false);\r\n }\r\n\r\n private extractAutocompleteFields(schema: ChillSchema, response: JsonObject): Record<string, JsonValue> {\r\n const nextFields: Record<string, JsonValue> = {};\r\n\r\n for (const property of schema.properties ?? []) {\r\n const autocompletedValue = this.readResponsePropertyValue(response, property.name);\r\n if (autocompletedValue !== undefined) {\r\n nextFields[property.name] = autocompletedValue;\r\n }\r\n }\r\n\r\n return nextFields;\r\n }\r\n\r\n private saveLayout(): void {\r\n const schema = this.schema();\r\n if (!schema) {\r\n this.isEditMode.set(false);\r\n return;\r\n }\r\n\r\n const metadata = this.readSchemaMetadata(schema);\r\n const layoutState = this.layoutState();\r\n const serializedLayout = JSON.stringify(layoutState);\r\n metadata[FORM_LAYOUT_METADATA_KEY] = serializedLayout;\r\n\r\n const updatedSchema: ChillSchema = {\r\n ...schema,\r\n metadata\r\n };\r\n\r\n this.isSavingLayout.set(true);\r\n this.layoutError.set('');\r\n\r\n this.chill.setSchema(updatedSchema).subscribe({\r\n next: (savedSchema) => {\r\n const effectiveSchema = savedSchema ?? updatedSchema;\r\n const targetSchema = this.schema();\r\n if (targetSchema) {\r\n targetSchema.metadata = this.readSchemaMetadata(effectiveSchema);\r\n delete (targetSchema as unknown as Record<string, unknown>)['Metadata'];\r\n }\r\n this.layoutState.set(this.readLayoutState(effectiveSchema));\r\n this.schemaRefreshTick.update((current) => current + 1);\r\n if (targetSchema) {\r\n this.schemaUpdated.emit(targetSchema);\r\n }\r\n this.isSavingLayout.set(false);\r\n this.isEditMode.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.layoutError.set(this.chill.formatError(error));\r\n this.isSavingLayout.set(false);\r\n }\r\n });\r\n }\r\n\r\n private savePropertySchema(schema: ChillSchema, originalPropertyName: string, property: ChillPropertySchema): void {\r\n const metadata = this.readSchemaMetadata(schema);\r\n metadata[FORM_LAYOUT_METADATA_KEY] = JSON.stringify(this.layoutState());\r\n\r\n const updatedSchema: ChillSchema = {\r\n ...schema,\r\n properties: (schema.properties ?? []).map((candidate) => candidate.name === originalPropertyName\r\n ? property\r\n : candidate),\r\n metadata\r\n };\r\n\r\n this.isSavingLayout.set(true);\r\n this.layoutError.set('');\r\n\r\n this.chill.setSchema(updatedSchema).subscribe({\r\n next: (savedSchema) => {\r\n const effectiveSchema = savedSchema ?? updatedSchema;\r\n const targetSchema = this.schema();\r\n if (targetSchema) {\r\n this.applyUpdatedSchema(targetSchema, effectiveSchema);\r\n }\r\n this.isSavingLayout.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.layoutError.set(this.chill.formatError(error));\r\n this.isSavingLayout.set(false);\r\n }\r\n });\r\n }\r\n\r\n private applyUpdatedSchema(targetSchema: ChillSchema, updatedSchema: ChillSchema): void {\r\n targetSchema.metadata = this.readSchemaMetadata(updatedSchema);\r\n targetSchema.properties = [...(updatedSchema.properties ?? [])];\r\n targetSchema.displayName = updatedSchema.displayName ?? targetSchema.displayName;\r\n targetSchema.handleAttachments = updatedSchema.handleAttachments;\r\n targetSchema.enableMCP = updatedSchema.enableMCP;\r\n targetSchema.mcpDescription = updatedSchema.mcpDescription ?? null;\r\n targetSchema.queryRelatedChillType = updatedSchema.queryRelatedChillType;\r\n delete (targetSchema as unknown as Record<string, unknown>)['Metadata'];\r\n delete (targetSchema as unknown as Record<string, unknown>)['Properties'];\r\n\r\n const currentFormValue = this.form()?.getRawValue() ?? {};\r\n const nextForm = this.chill.prepareForm(targetSchema, this.source());\r\n for (const [fieldName, fieldValue] of Object.entries(currentFormValue)) {\r\n const control = nextForm.controls[fieldName];\r\n if (control) {\r\n control.setValue(fieldValue, { emitEvent: false });\r\n }\r\n }\r\n\r\n this.lastFormResetSignature = this.buildFormResetSignature(targetSchema, this.source());\r\n this.form.set(nextForm);\r\n this.syncFormValueSubscription(nextForm);\r\n this.propertyValidity.set(this.createInitialPropertyValidity(targetSchema));\r\n this.layoutState.set(this.readLayoutState(targetSchema));\r\n this.schemaRefreshTick.update((current) => current + 1);\r\n this.schemaUpdated.emit(targetSchema);\r\n }\r\n\r\n private createDefaultLayout(schema: ChillSchema | null): FormLayoutState {\r\n return {\r\n columnCount: DEFAULT_FORM_COLUMN_COUNT,\r\n items: (schema?.properties ?? []).map((property) => ({\r\n id: property.name,\r\n kind: 'property' as const,\r\n name: property.name,\r\n span: 1,\r\n hidden: false\r\n }))\r\n };\r\n }\r\n\r\n private createInitialPropertyValidity(schema: ChillSchema | null): Record<string, boolean> {\r\n return Object.fromEntries(\r\n (schema?.properties ?? []).map((property) => [property.name, true] as const)\r\n );\r\n }\r\n\r\n private buildFormResetSignature(schema: ChillSchema | null, source: ChillEntity | ChillQuery | null): string {\r\n return JSON.stringify({\r\n schema: schema\r\n ? {\r\n chillType: schema.chillType ?? '',\r\n chillViewCode: schema.chillViewCode ?? '',\r\n displayName: schema.displayName ?? '',\r\n handleAttachments: schema.handleAttachments === true,\r\n queryRelatedChillType: schema.queryRelatedChillType ?? '',\r\n properties: schema.properties ?? []\r\n }\r\n : null,\r\n source\r\n });\r\n }\r\n\r\n private readLayoutState(schema: ChillSchema | null): FormLayoutState {\r\n const defaultLayout = this.createDefaultLayout(schema);\r\n const metadata = this.readSchemaMetadata(schema);\r\n const rawLayoutValue = metadata[FORM_LAYOUT_METADATA_KEY];\r\n const rawLayout = typeof rawLayoutValue === 'string' ? rawLayoutValue.trim() : '';\r\n if (!rawLayout) {\r\n return defaultLayout;\r\n }\r\n\r\n try {\r\n const parsedLayout = JSON.parse(rawLayout) as Partial<FormLayoutState>;\r\n const columnCount = typeof parsedLayout.columnCount === 'number' && Number.isFinite(parsedLayout.columnCount)\r\n ? Math.max(1, Math.floor(parsedLayout.columnCount))\r\n : defaultLayout.columnCount;\r\n const rawItems = Array.isArray(parsedLayout.items)\r\n ? parsedLayout.items\r\n : (Array.isArray((parsedLayout as { properties?: unknown[] }).properties)\r\n ? (parsedLayout as { properties: unknown[] }).properties\r\n : []);\r\n const savedItems = rawItems\r\n .map((item, index) => this.normalizePersistedLayoutItem(item, index))\r\n .filter((item): item is FormLayoutItem => item !== null);\r\n const defaultPropertyNames = new Set(defaultLayout.items.flatMap((item) => item.kind === 'property' && item.name ? [item.name] : []));\r\n const orderedPropertyNames = [\r\n ...savedItems\r\n .flatMap((item) => item.kind === 'property' && item.name && defaultPropertyNames.has(item.name) ? [item.name] : []),\r\n ...defaultLayout.items\r\n .flatMap((item) => item.kind === 'property' && item.name ? [item.name] : [])\r\n .filter((name) => !savedItems.some((item) => item.kind === 'property' && item.name === name))\r\n ];\r\n\r\n const restoredItems = savedItems\r\n .filter((item) => item.kind === 'empty' || (item.kind === 'property' && item.name && defaultPropertyNames.has(item.name)))\r\n .map((item) => ({\r\n ...item,\r\n span: Math.min(item.span, columnCount)\r\n }));\r\n\r\n const missingItems = orderedPropertyNames\r\n .filter((name) => !restoredItems.some((item) => item.kind === 'property' && item.name === name))\r\n .map((name) => ({\r\n id: name,\r\n kind: 'property' as const,\r\n name,\r\n span: 1,\r\n hidden: false\r\n }));\r\n\r\n const restoredLayout = {\r\n columnCount,\r\n items: [...restoredItems, ...missingItems]\r\n };\r\n return restoredLayout;\r\n } catch {\r\n return defaultLayout;\r\n }\r\n }\r\n\r\n private normalizePersistedLayoutItem(value: unknown, index: number): FormLayoutItem | null {\r\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\r\n return null;\r\n }\r\n\r\n const candidate = value as { id?: unknown; kind?: unknown; name?: unknown; span?: unknown; hidden?: unknown };\r\n const span = typeof candidate.span === 'number' && Number.isFinite(candidate.span)\r\n ? Math.max(1, Math.floor(candidate.span))\r\n : 1;\r\n const hidden = candidate.hidden === true;\r\n\r\n const kind = candidate.kind === 'empty'\r\n ? 'empty'\r\n : 'property';\r\n\r\n if (kind === 'empty') {\r\n const id = typeof candidate.id === 'string' && candidate.id.trim()\r\n ? candidate.id.trim()\r\n : `${EMPTY_LAYOUT_ITEM_PREFIX}${index + 1}`;\r\n return {\r\n id,\r\n kind,\r\n span,\r\n hidden\r\n };\r\n }\r\n\r\n const name = typeof candidate.name === 'string'\r\n ? candidate.name.trim()\r\n : '';\r\n if (!name) {\r\n return null;\r\n }\r\n\r\n return {\r\n id: typeof candidate.id === 'string' && candidate.id.trim()\r\n ? candidate.id.trim()\r\n : name,\r\n kind,\r\n name,\r\n span,\r\n hidden\r\n };\r\n }\r\n\r\n private updateLayoutItemHidden(items: FormLayoutItem[], itemId: string, hidden: boolean): FormLayoutItem[] {\r\n const normalizedItemId = itemId.trim();\r\n if (!normalizedItemId) {\r\n return items;\r\n }\r\n\r\n let didUpdate = false;\r\n const nextItems = items.map((item) => {\r\n if (item.id !== normalizedItemId && item.name !== normalizedItemId) {\r\n return item;\r\n }\r\n\r\n didUpdate = true;\r\n return {\r\n ...item,\r\n hidden\r\n };\r\n });\r\n\r\n if (didUpdate) {\r\n return nextItems;\r\n }\r\n\r\n const property = this.properties().find((candidate) => candidate.name === normalizedItemId);\r\n if (!property) {\r\n return items;\r\n }\r\n\r\n return [\r\n ...items,\r\n {\r\n id: property.name,\r\n kind: 'property',\r\n name: property.name,\r\n span: 1,\r\n hidden\r\n }\r\n ];\r\n }\r\n\r\n private completeLayoutState(layoutState: FormLayoutState): FormLayoutState {\r\n const knownPropertyNames = new Set(\r\n layoutState.items\r\n .flatMap((item) => item.kind === 'property' && item.name ? [item.name] : [])\r\n );\r\n const missingItems = this.properties()\r\n .filter((property) => !knownPropertyNames.has(property.name))\r\n .map((property) => ({\r\n id: property.name,\r\n kind: 'property' as const,\r\n name: property.name,\r\n span: 1,\r\n hidden: false\r\n }));\r\n\r\n return missingItems.length === 0\r\n ? layoutState\r\n : {\r\n ...layoutState,\r\n items: [\r\n ...layoutState.items,\r\n ...missingItems\r\n ]\r\n };\r\n }\r\n\r\n private createEmptyLayoutItemId(items: FormLayoutItem[]): string {\r\n let index = 1;\r\n while (items.some((item) => item.id === `${EMPTY_LAYOUT_ITEM_PREFIX}${index}`)) {\r\n index += 1;\r\n }\r\n\r\n return `${EMPTY_LAYOUT_ITEM_PREFIX}${index}`;\r\n }\r\n\r\n private readSchemaMetadata(schema: ChillSchema | null): ChillMetadataRecord {\r\n if (!schema) {\r\n return {};\r\n }\r\n\r\n const camelMetadata = schema.metadata;\r\n if (camelMetadata) {\r\n return { ...camelMetadata };\r\n }\r\n\r\n const pascalMetadata = (schema as unknown as JsonObject)['Metadata'];\r\n if (pascalMetadata && typeof pascalMetadata === 'object' && !Array.isArray(pascalMetadata)) {\r\n return Object.fromEntries(\r\n Object.entries(pascalMetadata).map(([key, value]) => [key, typeof value === 'string' ? value : String(value ?? '')])\r\n );\r\n }\r\n\r\n return {};\r\n }\r\n\r\n private clearServerValidationForFields(fieldNames: string[]): void {\r\n if (fieldNames.length === 0) {\r\n return;\r\n }\r\n\r\n const normalizedFieldNames = new Set(fieldNames.map((fieldName) => fieldName.trim().toLowerCase()).filter((fieldName) => fieldName.length > 0));\r\n this.serverFieldErrors.update((current) => {\r\n let changed = false;\r\n const nextEntries = Object.entries(current).filter(([fieldName]) => {\r\n const shouldKeep = !normalizedFieldNames.has(fieldName.trim().toLowerCase());\r\n if (!shouldKeep) {\r\n changed = true;\r\n }\r\n return shouldKeep;\r\n });\r\n return changed ? Object.fromEntries(nextEntries) : current;\r\n });\r\n this.genericValidationErrors.set([]);\r\n }\r\n\r\n private areRecordsEqual(\r\n left: Record<string, JsonValue>,\r\n right: Record<string, JsonValue>\r\n ): boolean {\r\n const leftKeys = Object.keys(left);\r\n const rightKeys = Object.keys(right);\r\n if (leftKeys.length !== rightKeys.length) {\r\n return false;\r\n }\r\n\r\n return leftKeys.every((key) => Object.is(left[key], right[key]));\r\n }\r\n\r\n private readChangedFieldNames(\r\n previousValue: Record<string, JsonValue>,\r\n nextValue: Record<string, JsonValue>\r\n ): string[] {\r\n const fieldNames = new Set([\r\n ...Object.keys(previousValue),\r\n ...Object.keys(nextValue)\r\n ]);\r\n\r\n return [...fieldNames].filter((fieldName) => !Object.is(previousValue[fieldName], nextValue[fieldName]));\r\n }\r\n}\r\n","<section class=\"chill-form-shell\">\r\n @if (showSchemaHeader() && schema()?.displayName) {\r\n <header class=\"form-header\">\r\n <p class=\"form-kicker\"><app-chill-i18n-label [labelGuid]=\"'2DDE962B-086C-47B1-8A48-B16F0E34C0A3'\" [primaryDefaultText]=\"'Chill schema'\" [secondaryDefaultText]=\"'Schema Chill'\" /></p>\r\n <h2>{{ schema()?.displayName }}</h2>\r\n </header>\r\n }\r\n\r\n @if (layout.isLayoutEditingEnabled()) {\r\n <div class=\"form-actions\">\r\n <button type=\"button\" class=\"layout-button\" (click)=\"toggleEditMode()\" [disabled]=\"isSavingLayout()\">\r\n @if (isSavingLayout()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'F9BFE458-EA0D-4E27-A8A9-C7EE0C02F9FB'\" [primaryDefaultText]=\"'Saving layout...'\" [secondaryDefaultText]=\"'Salvataggio layout...'\" />\r\n } @else if (isEditMode()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'D7EA89E2-4AF2-455A-8FA9-33540E61D7C5'\" [primaryDefaultText]=\"'Done'\" [secondaryDefaultText]=\"'Fine'\" />\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'872638CF-0346-4351-A53A-62A6B78B94FE'\" [primaryDefaultText]=\"'Edit mode'\" [secondaryDefaultText]=\"'Modalita modifica'\" />\r\n }\r\n </button>\r\n\r\n @if (isEditMode()) {\r\n <label class=\"column-count\">\r\n <span><app-chill-i18n-label [labelGuid]=\"'665D0BFB-D1BB-4D53-B58A-C578CA559A0B'\" [primaryDefaultText]=\"'Columns'\" [secondaryDefaultText]=\"'Colonne'\" /></span>\r\n <select\r\n [ngModel]=\"layoutState().columnCount\"\r\n (ngModelChange)=\"updateColumnCount($event)\"\r\n name=\"form-column-count\">\r\n @for (columnCount of columnOptions; track columnCount) {\r\n <option [ngValue]=\"columnCount\">{{ columnCount }}</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <button type=\"button\" class=\"layout-button secondary\" (click)=\"addEmptyCell()\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'7B8C7557-FB39-4C6C-B70F-D70F87EC7517'\" [primaryDefaultText]=\"'Add empty cell'\" [secondaryDefaultText]=\"'Aggiungi cella vuota'\" />\r\n </button>\r\n\r\n <button type=\"button\" class=\"layout-button secondary\" (click)=\"resetLayout()\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'408CE646-58A0-4657-8192-D1C79BFE7F91'\" [primaryDefaultText]=\"'Reset'\" [secondaryDefaultText]=\"'Reset'\" />\r\n </button>\r\n\r\n <button type=\"button\" class=\"layout-button secondary\" (click)=\"refreshSchemaFromModel()\" [disabled]=\"isSavingLayout()\">\r\n @if (isRefreshingSchema()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'8628775B-B831-44F2-8A38-909F40E2F7B3'\" [primaryDefaultText]=\"'Updating schema...'\" [secondaryDefaultText]=\"'Aggiornamento schema...'\" />\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'62953302-B951-4FD1-BD08-4B7649A91BAF'\" [primaryDefaultText]=\"'Update'\" [secondaryDefaultText]=\"'Aggiorna'\" />\r\n }\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @if (layoutError()) {\r\n <div class=\"empty-state error-state\">{{ layoutError() }}</div>\r\n }\r\n\r\n @if (resolvedSubmitError()) {\r\n <div class=\"notice error notice-dismissible\">\r\n <span>{{ resolvedSubmitError() }}</span>\r\n <button type=\"button\" class=\"notice-close\" (click)=\"clearSubmitError()\" [attr.aria-label]=\"chill.T('0C4C06EF-A105-468F-B1E2-AEA8EB96A4DC', 'Dismiss error', 'Chiudi errore')\">x</button>\r\n </div>\r\n }\r\n\r\n @if (genericValidationMessage()) {\r\n <div class=\"notice error\">\r\n <span>{{ genericValidationMessage() }}</span>\r\n </div>\r\n }\r\n\r\n @if (properties().length === 0) {\r\n <div class=\"empty-state\">{{ chill.T('3D7ABF07-6E0C-4F99-A0C8-C936C44322C6', 'No schema properties available.', 'Nessuna proprietà di schema disponibile.') }}</div>\r\n } @else {\r\n <form class=\"chill-form\" (ngSubmit)=\"submit()\">\r\n <div class=\"form-grid\" [style.grid-template-columns]=\"gridTemplateColumns()\">\r\n @for (item of layoutItems(); track trackByProperty($index, item)) {\r\n <section\r\n class=\"form-cell\"\r\n [class.empty-cell]=\"item.kind === 'empty' || (item.kind === 'property' && item.hidden && !isEditMode())\"\r\n [class.edit-mode]=\"isEditMode()\"\r\n [style.grid-column]=\"'span ' + item.span\"\r\n [draggable]=\"isEditMode()\"\r\n (dragstart)=\"beginDrag($event, item.id)\"\r\n (dragover)=\"allowDrop($event)\"\r\n (drop)=\"dropProperty(item.id)\"\r\n (dragend)=\"endDrag()\">\r\n @if (isEditMode()) {\r\n <div\r\n class=\"cell-toolbar\"\r\n (click)=\"$event.stopPropagation()\">\r\n <div class=\"cell-toolbar__title-row\">\r\n <span>\r\n @if (item.kind === 'property') {\r\n {{ item.property.displayName || item.property.name }}\r\n } @else {\r\n {{ chill.T('278389E7-9C0F-4849-B7C8-B904CC0E4AAA', 'Empty cell', 'Cella vuota') }}\r\n }\r\n </span>\r\n @if (item.kind === 'property') {\r\n <input\r\n type=\"checkbox\"\r\n class=\"field-visibility-checkbox\"\r\n [checked]=\"!item.hidden\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"updatePropertyHidden(item.property.name, !$any($event.target).checked)\"\r\n [name]=\"'hidden-' + item.property.name\"\r\n [attr.aria-label]=\"chill.T('D72C8236-361A-4053-86B8-6F5A9D6983F6', 'Show field', 'Mostra campo')\" />\r\n }\r\n </div>\r\n <div class=\"cell-toolbar__settings-row\">\r\n @if (item.kind === 'property') {\r\n <button type=\"button\" class=\"cell-toolbar__icon-button\" (click)=\"openPropertySettings(item.property)\" [attr.aria-label]=\"chill.T('40E9838A-70F2-4E89-BE38-BBE44027D253', 'Edit property settings', 'Modifica impostazioni proprietà')\">\r\n <span class=\"material-symbol-icon\">tune</span>\r\n </button>\r\n <select\r\n class=\"property-type-select\"\r\n [ngModel]=\"item.property.propertyType\"\r\n (ngModelChange)=\"updatePropertyType(item.property, $event)\"\r\n [name]=\"'propertyType-' + item.property.name\"\r\n [attr.aria-label]=\"chill.T('A1803D67-C40D-41AF-BFD2-8F9B0E34C48B', 'Property type', 'Tipo proprietà')\">\r\n @for (option of propertyTypeOptions; track option.value) {\r\n <option [ngValue]=\"option.value\" [disabled]=\"isPropertyTypeOptionDisabled(item.property, option.value)\">{{ option.label }}</option>\r\n }\r\n </select>\r\n } @else {\r\n <span class=\"cell-toolbar__icon-spacer\"></span>\r\n <span class=\"cell-toolbar__select-spacer\"></span>\r\n }\r\n <div class=\"span-controls\">\r\n <button type=\"button\" class=\"cell-toolbar__icon-button\" (click)=\"decreaseSpan(item.id)\" [attr.aria-label]=\"chill.T('DB73501A-618F-48C7-A6BC-613B44729887', 'Decrease field span', 'Riduci larghezza campo')\">\r\n <span class=\"material-symbol-icon\" aria-hidden=\"true\">remove</span>\r\n </button>\r\n <span class=\"span-controls__value\">{{ item.span }}</span>\r\n <button type=\"button\" class=\"cell-toolbar__icon-button\" (click)=\"increaseSpan(item.id)\" [attr.aria-label]=\"chill.T('63E1E823-9015-4551-A43B-4B672E988B4A', 'Increase field span', 'Aumenta larghezza campo')\">\r\n <span class=\"material-symbol-icon\" aria-hidden=\"true\">add</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @else \r\n {\r\n @if (item.kind === 'property' && !item.hidden) {\r\n <app-chill-polymorphic-input\r\n [form]=\"form()\"\r\n [schema]=\"schema()\"\r\n [propertyNames]=\"[item.property.name]\"\r\n [readonlyPropertyNames]=\"readonlyPropertyNames()\"\r\n [externalErrors]=\"serverFieldErrors()\"\r\n (validityChange)=\"updatePropertyValidity(item.property.name, $event)\"\r\n (fieldBlur)=\"handlePropertyBlur($event)\" />\r\n } @else {\r\n <div class=\"empty-cell-body\"></div>\r\n }\r\n }\r\n </section>\r\n }\r\n </div>\r\n\r\n @if (!isEditMode() && renderSubmitInsideForm() && !hasCustomSubmitHandler()) {\r\n <button type=\"submit\" [disabled]=\"!canSubmit()\">\r\n @if (submitLabelGuid() && submitPrimaryDefaultText() && submitSecondaryDefaultText()) {\r\n <app-chill-i18n-button-label\r\n [labelGuid]=\"submitLabelGuid()!\"\r\n [primaryDefaultText]=\"submitPrimaryDefaultText()!\"\r\n [secondaryDefaultText]=\"submitSecondaryDefaultText()!\" />\r\n } @else {\r\n {{ submitLabel() }}\r\n }\r\n </button>\r\n }\r\n </form>\r\n }\r\n</section>\r\n","import { Component, input } from '@angular/core';\n\n@Component({ selector: 'app-chill-polymorphic-output-boolean-control', standalone: true, template: `{{ text() }}` })\nexport class ChillPolymorphicOutputBooleanControlComponent {\n readonly text = input('');\n}\n","import { Component, input } from '@angular/core';\n\n@Component({ selector: 'app-chill-polymorphic-output-lookup-control', standalone: true, template: `{{ text() }}` })\nexport class ChillPolymorphicOutputLookupControlComponent {\n readonly text = input('');\n}\n","import { Component, input } from '@angular/core';\n\n@Component({ selector: 'app-chill-polymorphic-output-number-control', standalone: true, template: `{{ text() }}` })\nexport class ChillPolymorphicOutputNumberControlComponent {\n readonly text = input('');\n}\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'app-chill-polymorphic-output-temporal-control',\n standalone: true,\n template: `@if (parts(); as resolvedParts) {\n <span class=\"spaced-parts\">@for (part of resolvedParts; track $index; let isFirst = $first) { @if (!isFirst) { <span class=\"spaced-parts__separator\" aria-hidden=\"true\"> </span><wbr> } <span class=\"spaced-parts__part\">{{ part }}</span> }</span>\n } @else { {{ text() }} }`,\n styles: `.spaced-parts { display: inline; } .spaced-parts__part { white-space: nowrap; }`\n})\nexport class ChillPolymorphicOutputTemporalControlComponent {\n readonly parts = input<string[] | null>(null);\n readonly text = input('');\n}\n","import { Component, input } from '@angular/core';\n\n@Component({ selector: 'app-chill-polymorphic-output-value-control', standalone: true, template: `{{ text() }}` })\nexport class ChillPolymorphicOutputValueControlComponent {\n readonly text = input('');\n}\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, OnDestroy, OnInit, computed, inject, input, signal } from '@angular/core';\r\nimport type { JsonObject, JsonValue } from '@chill-sharp/ng-client';\r\nimport type { ChillEntity, ChillPropertySchema, ChillSchema } from '../models/chill-schema.models';\r\nimport { ChillService } from '../services/chill.service';\nimport { ChillPolymorphicOutputBooleanControlComponent } from './chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component';\nimport { ChillPolymorphicOutputLookupControlComponent } from './chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component';\nimport { ChillPolymorphicOutputNumberControlComponent } from './chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component';\nimport { ChillPolymorphicOutputTemporalControlComponent } from './chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component';\nimport { ChillPolymorphicOutputValueControlComponent } from './chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component';\n\r\nconst CHILL_PROPERTY_TYPE = {\r\n Unknown: 0,\r\n Guid: 1,\r\n Integer: 10,\r\n Decimal: 20,\r\n Date: 30,\r\n Time: 40,\r\n DateTime: 50,\r\n Duration: 60,\r\n Boolean: 70,\r\n String: 80,\r\n Text: 81,\r\n ChillEntity: 1000,\r\n ChillEntityCollection: 1010,\r\n ChillQuery: 1100\r\n} as const;\r\n\r\n@Component({\r\n selector: 'app-chill-polymorphic-output',\r\n standalone: true,\r\n imports: [\n CommonModule,\n ChillPolymorphicOutputBooleanControlComponent,\n ChillPolymorphicOutputLookupControlComponent,\n ChillPolymorphicOutputNumberControlComponent,\n ChillPolymorphicOutputTemporalControlComponent,\n ChillPolymorphicOutputValueControlComponent\n ],\n template: `\r\n <span class=\"polymorphic-output\" [title]=\"titleText()\">\r\n @if (isTemporalProperty()) {\n <app-chill-polymorphic-output-temporal-control [parts]=\"spacedDisplayParts()\" [text]=\"displayText()\" />\n } @else if (isBooleanProperty()) {\n <app-chill-polymorphic-output-boolean-control [text]=\"displayText()\" />\n } @else if (isNumberProperty()) {\n <app-chill-polymorphic-output-number-control [text]=\"displayText()\" />\n } @else if (isLookupProperty()) {\n <app-chill-polymorphic-output-lookup-control [text]=\"displayText()\" />\n } @else {\n <app-chill-polymorphic-output-value-control [text]=\"displayText()\" />\n }\r\n </span>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n min-width: 0;\r\n }\r\n\r\n .polymorphic-output {\r\n display: block;\r\n min-width: 0;\r\n overflow-wrap: anywhere;\r\n }\r\n\r\n .polymorphic-output__spaced-parts {\r\n display: inline;\r\n }\r\n\r\n .polymorphic-output__spaced-parts-part {\r\n white-space: nowrap;\r\n }\r\n `\r\n})\r\nexport class ChillPolymorphicOutputComponent implements OnInit, OnDestroy {\r\n // #region Service Injections\r\n readonly chill = inject(ChillService);\r\n readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n // #endregion\r\n\r\n // #region Inputs\r\n readonly source = input<ChillEntity | null>(null);\r\n readonly schema = input<ChillSchema | null>(null);\r\n readonly propertyName = input.required<string>();\r\n // #endregion\r\n\r\n // #region State\r\n readonly hostWidth = signal<number | null>(null);\r\n private resizeObserver: ResizeObserver | null = null;\r\n // #endregion\r\n\r\n // #region Computed Properties\r\n readonly property = computed<ChillPropertySchema | null>(() =>\r\n this.schema()?.properties.find((candidate) => candidate.name === this.propertyName()) ?? null\r\n );\r\n readonly value = computed(() => this.readPropertyValue(this.source(), this.propertyName()));\r\n readonly spacedDisplayParts = computed(() => {\n this.chill.userPreferences();\n return this.buildSpacedDisplayParts(this.value(), this.property());\n });\n readonly displayText = computed(() => {\n this.chill.userPreferences();\n return this.formatValue(this.value(), this.property(), false);\n });\n readonly titleText = computed(() => {\n this.chill.userPreferences();\n return this.formatValue(this.value(), this.property(), true);\n });\n // #endregion\r\n\r\n // #region Component Lifecycle\r\n\r\n /**\r\n * Tracks the rendered width so object labels can switch to their short form in tight cells.\r\n */\r\n ngOnInit(): void {\r\n if (typeof ResizeObserver === 'undefined') {\r\n return;\r\n }\r\n\r\n this.resizeObserver = new ResizeObserver((entries) => {\r\n const entry = entries[0];\r\n this.hostWidth.set(entry ? entry.contentRect.width : null);\r\n });\r\n this.resizeObserver.observe(this.host.nativeElement);\r\n }\r\n\r\n /**\r\n * Disconnects the resize observer when the component is destroyed.\r\n */\r\n ngOnDestroy(): void {\r\n this.resizeObserver?.disconnect();\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Helper Methods\n\n isBooleanProperty(): boolean {\n return this.property()?.propertyType === CHILL_PROPERTY_TYPE.Boolean;\n }\n\n isNumberProperty(): boolean {\n const propertyType = this.property()?.propertyType;\n return propertyType === CHILL_PROPERTY_TYPE.Integer || propertyType === CHILL_PROPERTY_TYPE.Decimal;\n }\n\n isTemporalProperty(): boolean {\n const propertyType = this.property()?.propertyType;\n return propertyType === CHILL_PROPERTY_TYPE.Date\n || propertyType === CHILL_PROPERTY_TYPE.Time\n || propertyType === CHILL_PROPERTY_TYPE.DateTime;\n }\n\n isLookupProperty(): boolean {\n const propertyType = this.property()?.propertyType;\n return propertyType === CHILL_PROPERTY_TYPE.ChillEntity\n || propertyType === CHILL_PROPERTY_TYPE.ChillEntityCollection\n || propertyType === CHILL_PROPERTY_TYPE.ChillQuery;\n }\n\r\n /**\r\n * Reads a property from the entity bag first, then falls back to top-level camelCase/PascalCase fields.\r\n */\r\n private readPropertyValue(source: ChillEntity | null, propertyName: string): JsonValue | undefined {\r\n if (!source) {\r\n return undefined;\r\n }\r\n\r\n const properties = source.properties\r\n ?? (this.isJsonObject(source['Properties']) ? source['Properties'] : undefined);\r\n if (properties && propertyName in properties) {\r\n return properties[propertyName];\r\n }\r\n\r\n return source[propertyName] ?? source[this.toPascalCase(propertyName)];\r\n }\r\n\r\n /**\r\n * Formats scalars, dates, arrays, and entity-like objects using the schema type and display context.\r\n */\r\n private formatValue(value: JsonValue | undefined, property: ChillPropertySchema | null, preferFullLabel: boolean): string {\n if (value === undefined || value === null) {\r\n return '';\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value\r\n .map((item) => this.formatValue(item, property, preferFullLabel))\r\n .filter((item) => item.length > 0)\r\n .join(', ');\r\n }\r\n\r\n const propertyType = property?.propertyType ?? CHILL_PROPERTY_TYPE.Unknown;\n let formattedValue: string;\n switch (propertyType) {\n case CHILL_PROPERTY_TYPE.Integer:\n case CHILL_PROPERTY_TYPE.Decimal:\n formattedValue = this.formatNumber(value);\n break;\n case CHILL_PROPERTY_TYPE.Boolean:\n formattedValue = value === true\n ? this.chill.T('1A29951D-C442-4187-B0AA-F80454DEB09D', 'Yes', 'Si')\n : this.chill.T('8A65EBA6-81BD-4733-87D5-4CFE3F5C2D3F', 'No', 'No');\n break;\n case CHILL_PROPERTY_TYPE.Date:\n formattedValue = this.formatDate(value);\n break;\n case CHILL_PROPERTY_TYPE.Time:\n formattedValue = this.formatTime(value);\n break;\n case CHILL_PROPERTY_TYPE.DateTime:\n formattedValue = this.formatDateTime(value);\n break;\n case CHILL_PROPERTY_TYPE.ChillEntity:\n case CHILL_PROPERTY_TYPE.ChillQuery:\n formattedValue = this.formatObjectValue(value, preferFullLabel);\n break;\n default:\n formattedValue = typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'\n ? String(value)\n : this.formatObjectValue(value, preferFullLabel);\n break;\n }\n\n return formattedValue\n ? `${formattedValue}${this.staticSuffix(property)}`\n : '';\n }\n\n private staticSuffix(property: ChillPropertySchema | null): string {\n const value = property?.metadata?.['staticSuffix'];\n return typeof value === 'string' || typeof value === 'number'\n ? String(value).trim()\n : '';\n }\n\r\n /**\r\n * Formats valid date strings with the local date formatter and otherwise preserves the raw value.\r\n */\r\n private formatDate(value: JsonValue): string {\r\n if (typeof value !== 'string' || !value.trim()) {\r\n return '';\r\n }\r\n\r\n return this.chill.formatDisplayDate(value);\r\n }\r\n\r\n /**\r\n * Formats date-time instants with the authenticated user's date format and IANA time zone.\n */\r\n private formatDateTime(value: JsonValue): string {\r\n if (typeof value !== 'string' || !value.trim()) {\r\n return '';\r\n }\r\n\r\n return this.chill.formatDisplayDateTime(value);\r\n }\r\n\r\n private buildSpacedDisplayParts(\r\n value: JsonValue | undefined,\r\n property: ChillPropertySchema | null\r\n ): string[] | null {\r\n if (!property || !this.shouldRenderAsSpacedParts(property)) {\r\n return null;\r\n }\r\n\r\n if (value === undefined || value === null) {\r\n return null;\r\n }\r\n\r\n const formattedValue = this.formatValue(value, property, false);\r\n if (!formattedValue) {\r\n return null;\r\n }\r\n\r\n const parts = formattedValue.trim().split(/\\s+/);\r\n if (parts.length < 1) {\r\n return null;\r\n }\r\n\r\n return parts;\r\n }\r\n\r\n private formatTime(value: JsonValue): string {\r\n if (typeof value !== 'string' || !value.trim()) {\r\n return '';\r\n }\r\n\r\n return this.chill.formatDisplayTime(value);\r\n }\r\n\r\n private formatNumber(value: JsonValue): string {\n if ((typeof value === 'number' && Number.isFinite(value)) || (typeof value === 'string' && value.trim())) {\n return this.chill.formatApiNumber(value);\n }\n\n return '';\n }\r\n\r\n /**\r\n * Chooses the most useful label from an object payload and optionally prefers `ShortLabel` in narrow cells.\r\n */\r\n private formatObjectValue(value: JsonValue, preferFullLabel: boolean): string {\r\n if (!this.isJsonObject(value)) {\r\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'\r\n ? String(value)\r\n : '';\r\n }\r\n\r\n const label = this.readObjectText(value, ['Label', 'label']);\r\n const shortLabel = this.readObjectText(value, ['ShortLabel', 'shortLabel']);\r\n const displayName = this.readObjectText(value, ['DisplayName', 'displayName']);\r\n const name = this.readObjectText(value, ['Name', 'name']);\r\n const guid = this.readObjectText(value, ['Guid', 'guid']);\r\n const shouldUseShortLabel = !preferFullLabel\r\n && !!shortLabel\r\n && this.shouldPreferShortLabel();\r\n const resolvedLabel = shouldUseShortLabel\r\n ? shortLabel\r\n : label || shortLabel || displayName || name || guid;\r\n\r\n return resolvedLabel ?? '';\r\n }\r\n\r\n /**\r\n * Converts a property name to PascalCase to match server payloads that expose both casing styles.\r\n */\r\n private toPascalCase(value: string): string {\r\n return value.length > 0\r\n ? `${value[0].toUpperCase()}${value.slice(1)}`\r\n : value;\r\n }\r\n\r\n /**\r\n * Checks whether a JSON value is a non-array object.\r\n */\r\n private isJsonObject(value: JsonValue | null | undefined): value is JsonObject {\r\n return !!value && typeof value === 'object' && !Array.isArray(value);\r\n }\r\n\r\n /**\r\n * Returns the first non-empty string, number, or boolean found among the candidate keys.\r\n */\r\n private readObjectText(value: JsonObject, keys: string[]): string | null {\r\n for (const key of keys) {\r\n const candidate = value[key];\r\n if (typeof candidate === 'string' && candidate.trim()) {\r\n return candidate.trim();\r\n }\r\n\r\n if (typeof candidate === 'number' || typeof candidate === 'boolean') {\r\n return String(candidate);\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Treats cells narrower than 140px as compact enough to prefer short labels.\r\n */\r\n private shouldPreferShortLabel(): boolean {\r\n const hostWidth = this.hostWidth();\r\n return hostWidth !== null && hostWidth < 140;\r\n }\r\n\r\n private shouldRenderAsSpacedParts(property: ChillPropertySchema): boolean {\r\n return property.propertyType === CHILL_PROPERTY_TYPE.Date\r\n || property.propertyType === CHILL_PROPERTY_TYPE.Time\r\n || property.propertyType === CHILL_PROPERTY_TYPE.DateTime;\r\n }\r\n\r\n // #endregion\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, HostListener, OnDestroy, computed, effect, inject, input, output, signal, viewChild } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule } from '@angular/forms';\r\nimport type { JsonObject, JsonValue } from '@chill-sharp/ng-client';\r\nimport { CHILL_PROPERTY_TYPE, CHILL_PROPERTY_TYPE_OPTIONS, canChangeChillPropertyType, chillSimplePropertyType, type ChillEntity, type ChillEntityChangeNotification, type ChillMetadataRecord, type ChillOrdering, type ChillPropertySchema, type ChillSchema } from '../models/chill-schema.models';\r\nimport { Subscription, firstValueFrom } from 'rxjs';\r\nimport { ChillService } from '../services/chill.service';\r\nimport { WorkspaceDialogService } from '../services/workspace-dialog.service';\r\nimport { WorkspaceLayoutService } from '../services/workspace-layout.service';\r\nimport { ChillI18nLabelComponent } from './chill-i18n-label.component';\r\nimport { ChillI18nButtonLabelComponent } from './chill-i18n-button-label.component';\r\nimport { ChillPolymorphicInputComponent } from './chill-polymorphic-input.component';\r\nimport { ChillPolymorphicOutputComponent } from './chill-polymorphic-output.component';\r\n\r\nconst TABLE_LAYOUT_METADATA_KEY = 'chill-table-component';\r\nconst TABLE_COLUMN_WIDTH_METADATA_KEY = 'widthProportion';\r\nconst TABLE_COLUMN_WIDTH_OPTIONS = [0.25, 0.5, 1, 2, 3, 4, 5] as const;\r\nconst ROW_REFRESH_FLASH_MS = 900;\r\n\r\ninterface ColumnLayoutState {\r\n name: string;\r\n displayName: string;\r\n hidden: boolean;\r\n widthProportion: number;\r\n}\r\n\r\ninterface PersistedTableLayout {\r\n columns: PersistedColumnLayoutState[];\r\n}\r\n\r\ninterface PersistedColumnLayoutState {\r\n name: string;\r\n displayName: string;\r\n hidden: boolean;\r\n}\r\n\r\ntype TableColumn = ChillPropertySchema & {\r\n hidden: boolean;\r\n displayName: string;\r\n widthProportion: number;\r\n};\r\n\r\nexport interface ChillTableRowAction {\r\n icon?: string;\r\n iconClass?: string;\r\n label?: string;\r\n labelGuid?: string | null;\r\n primaryDefaultText?: string | null;\r\n secondaryDefaultText?: string | null;\r\n ariaLabel?: string;\r\n disabled?: (entity: ChillEntity) => boolean;\r\n handler: (entity: ChillEntity) => void;\r\n}\r\n\r\nexport interface ChillTableSelectionColumn {\r\n ariaLabel?: string;\r\n disabled?: (entity: ChillEntity) => boolean;\r\n isSelected: (entity: ChillEntity) => boolean;\r\n toggle: (entity: ChillEntity, selected: boolean) => void;\r\n}\r\n\r\nexport interface ChillTableCellEditCommitEvent {\r\n entity: ChillEntity;\r\n propertyName: string;\r\n value: JsonValue;\r\n dirtyProperties: string[];\r\n}\r\n\r\nexport interface ChillTableValidationFocus {\r\n entityKey: string;\r\n propertyName: string;\r\n}\r\n\r\nexport interface ChillTableSortChangeEvent {\r\n propertyName: string;\r\n direction: 'ASC' | 'DESC' | null;\r\n}\r\n\r\ninterface ActiveCellEditState {\r\n entityKey: string;\r\n propertyName: string;\r\n entity: ChillEntity;\r\n form: FormGroup<Record<string, FormControl<JsonValue>>>;\r\n originalValue: JsonValue | null;\r\n isValid: boolean;\r\n isLookupDialogOpen: boolean;\r\n isCommitting: boolean;\r\n}\r\n\r\ninterface ActiveRowActionMenuState {\r\n entityKey: string;\r\n top: number;\r\n left: number;\r\n}\r\n\r\n@Component({\r\n selector: 'app-chill-table',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, ChillI18nLabelComponent, ChillI18nButtonLabelComponent, ChillPolymorphicOutputComponent, ChillPolymorphicInputComponent],\r\n templateUrl: './chill-table.component.html',\r\n styleUrl: './chill-table.component.scss'\r\n})\r\nexport class ChillTableComponent {\r\n // #region Service Injections\r\n readonly chill = inject(ChillService);\r\n readonly dialog = inject(WorkspaceDialogService, { optional: true });\r\n readonly layout = inject(WorkspaceLayoutService);\r\n // #endregion\r\n\r\n // #region Inputs\r\n readonly schema = input<ChillSchema | null>(null);\r\n readonly entities = input<ChillEntity[]>([]);\r\n readonly selectionColumn = input<ChillTableSelectionColumn | null>(null);\r\n readonly rowAction = input<ChillTableRowAction | null>(null);\r\n readonly rowActions = input<ChillTableRowAction[] | null>(null);\r\n readonly enableInlineEditing = input(false);\r\n readonly readonlyPropertyNames = input<string[] | null>(null);\r\n readonly validationFocus = input<ChillTableValidationFocus | null>(null);\r\n readonly showSchemaHeader = input(true);\r\n readonly ordering = input<ChillOrdering | null>(null);\r\n readonly enableFullTextSearch = input(false);\r\n readonly fullTextSearch = input('');\r\n readonly showMobileTaskClose = input(false);\r\n // #endregion\r\n\r\n readonly columnWidthOptions = TABLE_COLUMN_WIDTH_OPTIONS;\r\n readonly propertyTypeOptions = CHILL_PROPERTY_TYPE_OPTIONS;\r\n\r\n // #region Outputs\r\n readonly cellEditCommit = output<ChillTableCellEditCommitEvent>();\r\n readonly sortChange = output<ChillTableSortChangeEvent>();\r\n readonly fullTextSearchChange = output<string>();\r\n readonly schemaUpdated = output<ChillSchema>();\r\n readonly mobileTaskClose = output<void>();\r\n // #endregion\r\n\r\n // #region State References\r\n private readonly fullTextSearchInput = viewChild<ElementRef<HTMLInputElement>>('fullTextSearchInput');\r\n readonly isEditLayoutMode = signal(false);\r\n readonly isSavingLayout = signal(false);\r\n readonly isRefreshingSchema = signal(false);\r\n readonly layoutError = signal('');\r\n readonly dragColumnName = signal('');\r\n readonly layoutState = signal<ColumnLayoutState[]>([]);\r\n readonly activeCellEdit = signal<ActiveCellEditState | null>(null);\r\n readonly activeRowActionMenu = signal<ActiveRowActionMenuState | null>(null);\r\n readonly displayedEntities = signal<ChillEntity[]>([]);\r\n readonly schemaRefreshTick = signal(0);\r\n readonly isFullTextSearchOpen = signal(false);\r\n readonly fullTextSearchText = signal('');\r\n readonly rowRefreshFlashKeys = signal<ReadonlySet<string>>(new Set<string>());\r\n private readonly entityNotificationSubscriptions = new Map<string, Subscription>();\r\n private readonly rowRefreshFlashTimers = new Map<string, ReturnType<typeof setTimeout>>();\r\n private subscribedNotificationChillType = '';\r\n // #endregion\r\n\r\n // #region Component Lifecycle\r\n\r\n /**\r\n * Wires reactive state for layout persistence, live entity updates, validation-driven focus, and inline edit completion.\r\n */\r\n constructor() {\n let previousSchema: ChillSchema | null = null;\n effect(() => {\n const schema = this.schema();\n this.layoutState.set(this.readLayoutState(schema));\n this.layoutError.set('');\n // The CRUD page passes refreshed schema metadata back as a new input object.\n // Keep editing that layout until it is saved or a different schema is selected.\n if (!schema\n || schema.chillType !== previousSchema?.chillType\n || schema.chillViewCode !== previousSchema?.chillViewCode) {\n this.isEditLayoutMode.set(false);\n }\n previousSchema = schema;\n });\n\r\n effect(() => {\r\n const searchText = this.fullTextSearch();\r\n this.fullTextSearchText.set(searchText);\r\n if (searchText.trim().length > 0) {\r\n this.isFullTextSearchOpen.set(true);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const entities = this.entities();\r\n this.displayedEntities.set(entities);\r\n });\r\n\r\n effect(() => {\r\n this.syncEntityNotificationSubscriptions(this.schema(), this.displayedEntities());\r\n });\r\n\r\n effect(() => {\r\n if (!this.layout.isLayoutEditingEnabled()) {\r\n this.isEditLayoutMode.set(false);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const validationFocus = this.validationFocus();\r\n if (!validationFocus || !this.enableInlineEditing()) {\r\n return;\r\n }\r\n\r\n const activeCellEdit = this.activeCellEdit();\r\n if (\r\n activeCellEdit\r\n && activeCellEdit.entityKey === validationFocus.entityKey\r\n && activeCellEdit.propertyName === validationFocus.propertyName\r\n ) {\r\n return;\r\n }\r\n\r\n const targetEntity = this.displayedEntities().find((entity) => this.trackByEntity(0, entity) === validationFocus.entityKey);\r\n const targetColumn = this.visibleColumns().find((column) => column.name === validationFocus.propertyName);\r\n if (!targetEntity || !targetColumn || this.isDeletedRow(targetEntity)) {\r\n return;\r\n }\r\n\r\n this.activateCellEdit(targetEntity, targetColumn);\r\n });\r\n\r\n effect(() => {\r\n const activeCellEdit = this.activeCellEdit();\r\n if (!activeCellEdit?.isCommitting) {\r\n return;\r\n }\r\n\r\n const latestEntity = this.displayedEntities().find((entity) => this.trackByEntity(0, entity) === activeCellEdit.entityKey);\r\n if (!latestEntity) {\r\n this.activeCellEdit.set(null);\r\n return;\r\n }\r\n\r\n if (this.rowHasValidationErrors(latestEntity)) {\r\n this.activeCellEdit.set({\r\n ...activeCellEdit,\r\n entity: latestEntity,\r\n isCommitting: false\r\n });\r\n return;\r\n }\r\n\r\n const latestValue = this.readPropertyValue(latestEntity, activeCellEdit.propertyName) ?? null;\r\n const editedValue = activeCellEdit.form.controls[activeCellEdit.propertyName]?.value ?? null;\r\n if (this.areJsonValuesEqual(latestValue, editedValue)) {\r\n this.activeCellEdit.set(null);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Releases per-entity live update subscriptions when the table is destroyed.\r\n */\r\n ngOnDestroy(): void {\r\n this.clearEntityNotificationSubscriptions();\r\n this.clearRowRefreshFlashTimers();\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Computed Properties\r\n\r\n /**\r\n * Merges schema properties with persisted layout preferences and preserves the saved column order.\r\n */\r\n readonly columns = computed<TableColumn[]>(() => {\r\n this.schemaRefreshTick();\r\n const schema = this.schema();\r\n const properties = schema?.properties ?? [];\r\n const propertyMap = new Map(properties.map((property) => [property.name, property]));\r\n const savedLayout = this.layoutState();\r\n const orderedNames = [\r\n ...savedLayout.map((item) => item.name).filter((name) => propertyMap.has(name)),\r\n ...properties.map((property) => property.name).filter((name) => !savedLayout.some((item) => item.name === name))\r\n ];\r\n\r\n return orderedNames\r\n .map((name) => {\r\n const property = propertyMap.get(name);\r\n if (!property) {\r\n return null;\r\n }\r\n\r\n const layout = savedLayout.find((item) => item.name === name);\r\n return {\r\n ...property,\r\n displayName: layout?.displayName?.trim() || property.displayName || property.name,\r\n hidden: layout?.hidden ?? false,\r\n widthProportion: layout?.widthProportion ?? this.readPropertyWidthProportion(property)\r\n };\r\n })\r\n .filter((column): column is TableColumn => column !== null);\r\n });\r\n\r\n /**\r\n * Filters the resolved column list down to visible columns.\r\n */\r\n readonly visibleColumns = computed(() => this.columns().filter((column) => !column.hidden));\r\n\r\n readonly tableMinimumWidth = computed(() => {\r\n const dataColumnCount = this.visibleColumns().length;\r\n const pinnedColumnWidthRem = this.pinnedColumnWidthRem();\r\n const minimumWidthRem = Math.max(36, dataColumnCount * 12 + pinnedColumnWidthRem);\r\n\r\n return `max(100%, ${minimumWidthRem}rem)`;\r\n });\r\n\r\n readonly mobileTableMinimumWidth = computed(() => {\r\n const dataColumnCount = this.visibleColumns().length;\r\n const pinnedColumnWidthRem = this.pinnedColumnWidthRem();\r\n const dataColumnWidthVw = Math.max(1, dataColumnCount) * 50;\r\n\r\n if (pinnedColumnWidthRem <= 0) {\r\n return `max(100%, ${dataColumnWidthVw}vw)`;\r\n }\r\n\r\n return `max(100%, calc(${dataColumnWidthVw}vw + ${pinnedColumnWidthRem}rem))`;\r\n });\r\n\r\n /**\r\n * Filters the resolved column list down to hidden columns.\r\n */\r\n readonly hiddenColumns = computed(() => this.columns().filter((column) => column.hidden));\r\n\r\n /**\r\n * Hides row selection while the user is editing layout metadata.\r\n */\r\n readonly hasSelectionColumn = computed(() => !!this.selectionColumn() && !this.isEditLayoutMode());\r\n\r\n /**\r\n * Normalizes the single-action and multi-action inputs into one action list.\r\n */\r\n readonly resolvedRowActions = computed(() => {\r\n const rowActions = this.rowActions();\r\n if (rowActions && rowActions.length > 0) {\r\n return rowActions;\r\n }\r\n\r\n const rowAction = this.rowAction();\r\n return rowAction ? [rowAction] : [];\r\n });\r\n\r\n /**\r\n * Hides row actions while the user is editing layout metadata.\r\n */\r\n readonly hasActionColumn = computed(() => this.resolvedRowActions().length > 0 && !this.isEditLayoutMode());\r\n readonly readonlyPropertyNameSet = computed(() => new Set(\r\n (this.readonlyPropertyNames() ?? [])\r\n .map((propertyName) => propertyName.trim().toLowerCase())\r\n .filter((propertyName) => propertyName.length > 0)\r\n ));\r\n\r\n // #endregion\r\n\r\n // #region Public Methods\r\n\r\n /**\r\n * Builds a stable row key, preferring Guid-like identifiers before falling back to labels or index.\r\n */\r\n trackByEntity(index: number, entity: ChillEntity): string {\r\n return this.readEntityText(entity, 'guid')\r\n ?? this.readEntityText(entity, 'Guid')\r\n ?? this.readEntityText(entity, 'label')\r\n ?? this.readEntityText(entity, 'Label')\r\n ?? `${index}`;\r\n }\r\n\r\n /**\r\n * Enters layout-edit mode immediately, or persists the current layout when toggled off.\r\n */\r\n toggleEditLayoutMode(): void {\r\n if (!this.layout.isLayoutEditingEnabled()) {\r\n return;\r\n }\r\n\r\n if (!this.isEditLayoutMode()) {\r\n this.isEditLayoutMode.set(true);\r\n this.layoutError.set('');\r\n return;\r\n }\r\n\r\n this.saveLayout();\r\n }\r\n\r\n /**\r\n * Applies an in-memory display-name override for the selected column.\r\n */\r\n updateColumnDisplayName(columnName: string, value: string): void {\r\n this.layoutState.update((current) => current.map((item) => item.name === columnName\r\n ? { ...item, displayName: value }\r\n : item));\r\n }\r\n\r\n /**\r\n * Marks a column as visible or hidden inside the pending layout state.\r\n */\r\n updateColumnHidden(columnName: string, hidden: boolean): void {\r\n this.layoutState.update((current) => current.map((item) => item.name === columnName\r\n ? { ...item, hidden }\r\n : item));\r\n }\r\n\r\n toggleFullTextSearch(): void {\r\n if (!this.enableFullTextSearch()) {\r\n return;\r\n }\r\n\r\n if (!this.isFullTextSearchOpen()) {\r\n this.isFullTextSearchOpen.set(true);\r\n setTimeout(() => this.fullTextSearchInput()?.nativeElement.focus());\r\n return;\r\n }\r\n\r\n this.submitFullTextSearch();\r\n }\r\n\r\n updateFullTextSearchText(value: string): void {\r\n this.fullTextSearchText.set(value);\r\n }\r\n\r\n refreshSchemaFromModel(): void {\r\n const schema = this.schema();\r\n const chillType = schema?.chillType?.trim() ?? '';\r\n const chillViewCode = schema?.chillViewCode?.trim() || 'default';\r\n if (!schema || !chillType || this.isRefreshingSchema()) {\r\n return;\r\n }\r\n\r\n this.isRefreshingSchema.set(true);\r\n this.isSavingLayout.set(true);\r\n this.layoutError.set('');\r\n\r\n this.chill.getSchema(chillType, chillViewCode, undefined, true).subscribe({\r\n next: (updatedSchema) => {\r\n if (!updatedSchema) {\r\n this.layoutError.set(this.chill.T('A6A6949E-F0D4-42F5-A8AE-E15B1B174084', 'The result schema is unavailable.', 'Lo schema dei risultati non è disponibile.'));\r\n return;\r\n }\r\n\r\n this.applyUpdatedSchema(schema, updatedSchema);\r\n },\r\n error: (error: unknown) => {\r\n this.layoutError.set(this.chill.formatError(error));\r\n this.isRefreshingSchema.set(false);\r\n this.isSavingLayout.set(false);\r\n },\r\n complete: () => {\r\n this.isRefreshingSchema.set(false);\r\n this.isSavingLayout.set(false);\r\n }\r\n });\r\n }\r\n\r\n submitFullTextSearch(): void {\r\n if (!this.enableFullTextSearch()) {\r\n return;\r\n }\r\n\r\n const normalizedText = this.fullTextSearchText().trim();\r\n this.fullTextSearchText.set(normalizedText);\r\n this.fullTextSearchChange.emit(normalizedText);\r\n }\r\n\r\n resetFullTextSearch(): void {\r\n if (!this.enableFullTextSearch()) {\r\n return;\r\n }\r\n\r\n this.fullTextSearchText.set('');\r\n this.fullTextSearchChange.emit('');\r\n this.isFullTextSearchOpen.set(false);\r\n }\r\n\r\n closeMobileTask(): void {\r\n if (!this.showMobileTaskClose()) {\r\n return;\r\n }\r\n\r\n this.mobileTaskClose.emit();\r\n }\r\n\r\n updateColumnWidthProportion(columnName: string, direction: -1 | 1): void {\r\n this.layoutState.update((current) => current.map((item) => {\r\n if (item.name !== columnName) {\r\n return item;\r\n }\r\n\r\n const currentIndex = this.findColumnWidthOptionIndex(item.widthProportion);\r\n const nextIndex = Math.max(0, Math.min(this.columnWidthOptions.length - 1, currentIndex + direction));\r\n return {\r\n ...item,\r\n widthProportion: this.columnWidthOptions[nextIndex]\r\n };\r\n }));\r\n }\r\n\r\n canDecreaseColumnWidth(column: TableColumn): boolean {\r\n return this.findColumnWidthOptionIndex(column.widthProportion) > 0;\r\n }\r\n\r\n canIncreaseColumnWidth(column: TableColumn): boolean {\r\n return this.findColumnWidthOptionIndex(column.widthProportion) < this.columnWidthOptions.length - 1;\r\n }\r\n\r\n columnWidthLabel(column: TableColumn): string {\r\n return `${this.normalizeColumnWidthProportion(column.widthProportion)}x`;\r\n }\r\n\r\n columnWidthPercent(column: TableColumn): number {\r\n const visibleWidthTotal = this.visibleColumns()\r\n .reduce((total, item) => total + this.normalizeColumnWidthProportion(item.widthProportion), 0);\r\n if (visibleWidthTotal <= 0) {\r\n return 0;\r\n }\r\n\r\n return this.normalizeColumnWidthProportion(column.widthProportion) / visibleWidthTotal * 100;\r\n }\r\n\r\n openPropertySettings(property: ChillPropertySchema): void {\r\n const schema = this.schema();\r\n if (!schema || !this.dialog) {\r\n return;\r\n }\r\n\r\n void (async () => {\r\n const { SchemaPropertyDialogComponent } = await import('./schema-property-dialog.component');\r\n const result = await this.dialog!.openDialog<ChillPropertySchema>({\r\n title: property.displayName?.trim() || property.name,\r\n component: SchemaPropertyDialogComponent,\r\n okLabel: this.chill.T('62953302-B951-4FD1-BD08-4B7649A91BAF', 'Save', 'Salva'),\r\n inputs: {\r\n schema,\r\n property\r\n }\r\n });\r\n\r\n if (result.status !== 'confirmed' || !result.value) {\r\n return;\r\n }\r\n\r\n this.savePropertySchema(schema, property.name, result.value);\r\n })();\r\n }\r\n\r\n /**\r\n * Moves a hidden column back into the visible portion of the saved layout ordering.\r\n */\r\n revealColumn(columnName: string): void {\r\n const normalizedColumnName = columnName.trim();\r\n if (!normalizedColumnName) {\r\n return;\r\n }\r\n\r\n this.layoutState.update((current) => {\r\n const targetIndex = current.findIndex((item) => item.name === normalizedColumnName);\r\n if (targetIndex < 0) {\r\n return current;\r\n }\r\n\r\n const next = [...current];\r\n const [target] = next.splice(targetIndex, 1);\r\n const insertIndex = next.findIndex((item) => item.hidden);\r\n next.splice(insertIndex >= 0 ? insertIndex : next.length, 0, { ...target, hidden: false });\r\n return next;\r\n });\r\n }\r\n\r\n /**\r\n * Records which column is being dragged during layout editing.\r\n */\r\n beginDrag(event: DragEvent, columnName: string): void {\r\n if (!this.isEditLayoutMode()) {\r\n return;\r\n }\r\n\r\n if (this.isColumnEditorControl(event.target)) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n this.dragColumnName.set(columnName);\r\n }\r\n\r\n /**\r\n * Enables the column drop target only while layout editing is active.\r\n */\r\n allowDrop(event: DragEvent): void {\r\n if (!this.isEditLayoutMode()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Reorders the pending layout by moving the dragged column onto the target position.\r\n */\r\n dropColumn(targetColumnName: string): void {\r\n const sourceColumnName = this.dragColumnName();\r\n if (!sourceColumnName || sourceColumnName === targetColumnName) {\r\n this.dragColumnName.set('');\r\n return;\r\n }\r\n\r\n this.layoutState.update((current) => {\r\n const next = [...current];\r\n const sourceIndex = next.findIndex((item) => item.name === sourceColumnName);\r\n const targetIndex = next.findIndex((item) => item.name === targetColumnName);\r\n if (sourceIndex < 0 || targetIndex < 0) {\r\n return current;\r\n }\r\n\r\n const [moved] = next.splice(sourceIndex, 1);\r\n next.splice(targetIndex, 0, moved);\r\n return next;\r\n });\r\n\r\n this.dragColumnName.set('');\r\n }\r\n\r\n /**\r\n * Clears the active drag marker after drag completes or is cancelled.\r\n */\r\n endDrag(): void {\r\n this.dragColumnName.set('');\r\n }\r\n\r\n /**\r\n * Invokes the configured row action with the current entity.\r\n */\r\n runRowAction(action: ChillTableRowAction, entity: ChillEntity, menu?: HTMLDetailsElement): void {\r\n void menu;\r\n this.closeRowActionMenu();\r\n action.handler(entity);\r\n }\r\n\r\n /**\r\n * Toggles the floating row-action menu anchored to the trigger button.\r\n */\r\n toggleRowActionMenu(event: MouseEvent, entity: ChillEntity): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const trigger = event.currentTarget;\r\n if (!(trigger instanceof HTMLElement)) {\r\n return;\r\n }\r\n\r\n const entityKey = this.trackByEntity(0, entity);\r\n const currentMenu = this.activeRowActionMenu();\r\n if (currentMenu?.entityKey === entityKey) {\r\n this.closeRowActionMenu();\r\n return;\r\n }\r\n\r\n this.activeRowActionMenu.set(this.buildRowActionMenuState(entityKey, trigger));\r\n }\r\n\r\n /**\r\n * Returns true when the floating row-action menu belongs to the provided entity.\r\n */\r\n isRowActionMenuOpen(entity: ChillEntity): boolean {\r\n return this.activeRowActionMenu()?.entityKey === this.trackByEntity(0, entity);\r\n }\r\n\r\n /**\r\n * Closes the floating row-action menu.\r\n */\r\n closeRowActionMenu(): void {\r\n this.activeRowActionMenu.set(null);\r\n }\r\n\r\n /**\r\n * Exposes the computed fixed-position style for the active row-action menu.\r\n */\r\n rowActionMenuStyle(): Record<string, string> | null {\r\n const menu = this.activeRowActionMenu();\r\n if (!menu) {\r\n return null;\r\n }\r\n\r\n return {\r\n top: `${menu.top}px`,\r\n left: `${menu.left}px`\r\n };\r\n }\r\n\r\n /**\r\n * Maps a few common semantic action names to icons and otherwise returns the provided icon verbatim.\r\n */\r\n rowActionIcon(action: ChillTableRowAction): string {\r\n const icon = action.icon?.trim();\r\n if (!icon) {\r\n return 'edit';\r\n }\r\n\r\n if (action.iconClass === 'material-symbol-icon') {\r\n return icon;\r\n }\r\n\r\n switch (icon.toLowerCase()) {\r\n case 'pencil':\r\n case 'edit':\r\n return 'edit';\r\n case 'bin':\r\n case 'delete':\r\n case 'trash':\r\n return 'delete';\r\n default:\r\n return icon;\r\n }\r\n }\r\n\r\n /**\r\n * Applies Material Symbols automatically for common semantic row actions.\r\n */\r\n rowActionIconClass(action: ChillTableRowAction): string {\r\n if (action.iconClass === 'material-symbol-icon') {\r\n return 'material-symbol-icon';\r\n }\r\n\r\n const icon = action.icon?.trim().toLowerCase();\r\n if (!icon || icon === 'pencil' || icon === 'edit' || icon === 'bin' || icon === 'delete' || icon === 'trash') {\r\n return 'material-symbol-icon';\r\n }\r\n\r\n return action.iconClass?.trim() ?? '';\r\n }\r\n\r\n /**\r\n * Derives a readable row-action label when the host does not provide one.\r\n */\r\n rowActionLabel(action: ChillTableRowAction): string {\r\n if (action.labelGuid?.trim() && action.primaryDefaultText?.trim() && action.secondaryDefaultText?.trim()) {\r\n return this.chill.T(\r\n action.labelGuid.trim(),\r\n action.primaryDefaultText.trim(),\r\n action.secondaryDefaultText.trim()\r\n );\r\n }\r\n\r\n if (action.label?.trim()) {\r\n return action.label.trim();\r\n }\r\n\r\n if (action.ariaLabel?.trim()) {\r\n return action.ariaLabel.trim();\r\n }\r\n\r\n switch (this.rowActionIcon(action).trim().toLowerCase()) {\r\n case 'edit':\r\n return this.chill.T('E64B6037-B83A-406A-B5D6-CB5AA6E42FC6', 'Edit row', 'Modifica riga');\r\n case 'delete':\r\n return this.chill.T('04290FEE-910B-4A1B-B83D-A3AC0427BAAB', 'Delete row', 'Elimina riga');\r\n default:\r\n return this.chill.T('6455D4FC-D267-4AA1-83C9-749D511838CB', 'Row action', 'Azione riga');\r\n }\r\n }\r\n\r\n toggleColumnSort(column: TableColumn): void {\r\n if (this.isEditLayoutMode() || !this.canSortColumn(column)) {\r\n return;\r\n }\r\n\r\n const propertyName = column.name.trim();\r\n if (!propertyName) {\r\n return;\r\n }\r\n\r\n const activeOrdering = this.readActiveOrdering();\r\n if (!activeOrdering || activeOrdering.propertyName !== propertyName) {\r\n this.sortChange.emit({\r\n propertyName,\r\n direction: 'ASC'\r\n });\r\n return;\r\n }\r\n\r\n if (activeOrdering.direction === 'ASC') {\r\n this.sortChange.emit({\r\n propertyName,\r\n direction: 'DESC'\r\n });\r\n return;\r\n }\r\n\r\n this.sortChange.emit({\r\n propertyName,\r\n direction: null\r\n });\r\n }\r\n\r\n sortDirectionFor(column: TableColumn): 'ASC' | 'DESC' | null {\r\n const activeOrdering = this.readActiveOrdering();\r\n return activeOrdering?.propertyName === column.name.trim()\r\n ? (activeOrdering.direction === 'DESC' ? 'DESC' : 'ASC')\r\n : null;\r\n }\r\n\r\n isColumnEditing(column: TableColumn): boolean {\r\n return this.activeCellEdit()?.propertyName === column.name;\r\n }\r\n\r\n isColumnReadOnly(column: TableColumn): boolean {\r\n return this.readonlyPropertyNameSet().has(column.name.trim().toLowerCase());\r\n }\r\n\r\n canSortColumn(column: TableColumn): boolean {\r\n return (column.propertyType ?? CHILL_PROPERTY_TYPE.Unknown) !== CHILL_PROPERTY_TYPE.ChillEntityCollection;\r\n }\r\n\r\n isPropertyTypeOptionDisabled(property: ChillPropertySchema, propertyType: number): boolean {\r\n return !canChangeChillPropertyType(property.propertyType, propertyType);\r\n }\r\n\r\n updatePropertyType(property: ChillPropertySchema, value: number | string): void {\r\n const schema = this.schema();\r\n const parsed = typeof value === 'number' ? value : Number(value);\r\n if (!schema || !Number.isFinite(parsed) || !canChangeChillPropertyType(property.propertyType, parsed)) {\r\n return;\r\n }\r\n\r\n if ((property.propertyType ?? CHILL_PROPERTY_TYPE.Unknown) === parsed) {\r\n return;\r\n }\r\n\r\n this.savePropertySchema(schema, property.name, {\r\n ...property,\r\n propertyType: parsed,\r\n simplePropertyType: chillSimplePropertyType(parsed)\r\n });\r\n }\r\n\r\n private readActiveOrdering(): ChillOrdering | null {\r\n const ordering = this.ordering();\r\n return ordering?.propertyName?.trim()\r\n ? {\r\n propertyName: ordering.propertyName.trim(),\r\n direction: ordering.direction === 'DESC' ? 'DESC' : 'ASC'\r\n }\r\n : null;\r\n }\r\n\r\n private isColumnEditorControl(target: EventTarget | null): boolean {\r\n return target instanceof HTMLElement\r\n && !!target.closest('input, button, select, textarea');\r\n }\r\n\r\n /**\r\n * Forwards row selection changes to the hosting selection controller.\r\n */\r\n toggleRowSelection(entity: ChillEntity, selected: boolean): void {\r\n this.selectionColumn()?.toggle(entity, selected);\r\n }\r\n\r\n /**\r\n * Reads the current selection state from the hosting selection controller.\r\n */\r\n isRowSelected(entity: ChillEntity): boolean {\r\n return this.selectionColumn()?.isSelected(entity) ?? false;\r\n }\r\n\r\n /**\r\n * Delegates row-selection disabled state to the host when provided.\r\n */\r\n isRowSelectionDisabled(entity: ChillEntity): boolean {\r\n return this.selectionColumn()?.disabled?.(entity) ?? false;\r\n }\r\n\r\n /**\r\n * Evaluates whether a row action should be disabled for the current entity.\r\n */\r\n isRowActionDisabled(action: ChillTableRowAction, entity: ChillEntity): boolean {\r\n return action.disabled?.(entity) ?? false;\r\n }\r\n\r\n @HostListener('document:click')\r\n handleDocumentClick(): void {\r\n this.closeRowActionMenu();\r\n }\r\n\r\n @HostListener('window:resize')\r\n handleWindowResize(): void {\r\n this.closeRowActionMenu();\r\n }\r\n\r\n @HostListener('window:scroll')\r\n handleWindowScroll(): void {\r\n this.closeRowActionMenu();\r\n }\r\n\r\n /**\r\n * Treats non-pristine CRUD states as pending so the row can render transient styling.\r\n */\r\n isPendingRow(entity: ChillEntity): boolean {\r\n const state = this.readCrudState(entity);\r\n return state === 'draft' || state === 'dirty' || state === 'saving' || state === 'error' || state === 'deleted';\r\n }\r\n\r\n /**\r\n * Uses the normalized CRUD status to identify deleted rows.\r\n */\r\n isDeletedRow(entity: ChillEntity): boolean {\r\n return this.readCrudState(entity) === 'deleted';\r\n }\r\n\r\n isRefreshFlashRow(entity: ChillEntity): boolean {\r\n return this.rowRefreshFlashKeys().has(this.trackByEntity(0, entity));\r\n }\r\n\r\n /**\r\n * Creates a single-property edit session for the chosen cell using a fresh schema-driven form.\r\n */\r\n activateCellEdit(entity: ChillEntity, column: TableColumn): void {\r\n if (!this.enableInlineEditing() || this.isEditLayoutMode() || this.isDeletedRow(entity) || this.isColumnReadOnly(column)) {\r\n return;\r\n }\r\n\r\n const schema = this.schema();\r\n if (!schema) {\r\n return;\r\n }\r\n\r\n const propertyName = column.name;\r\n this.activeCellEdit.set({\r\n entityKey: this.trackByEntity(0, entity),\r\n propertyName,\r\n entity,\r\n form: this.chill.prepareForm(schema, entity),\r\n originalValue: this.readPropertyValue(entity, propertyName) ?? null,\r\n isValid: true,\r\n isLookupDialogOpen: false,\r\n isCommitting: false\r\n });\r\n }\r\n\r\n /**\r\n * Matches the requested cell against the current inline edit session.\r\n */\r\n isCellEditing(entity: ChillEntity, column: TableColumn): boolean {\r\n const activeCellEdit = this.activeCellEdit();\r\n return !!activeCellEdit\r\n && activeCellEdit.entityKey === this.trackByEntity(0, entity)\r\n && activeCellEdit.propertyName === column.name;\r\n }\r\n\r\n /**\r\n * Clears the committing flag when the active editor changes its tracked property value.\r\n */\r\n handleCellValueChange(value: Record<string, JsonValue>): void {\r\n const activeCellEdit = this.activeCellEdit();\r\n if (!activeCellEdit) {\r\n return;\r\n }\r\n\r\n if (!(activeCellEdit.propertyName in value)) {\r\n return;\r\n }\r\n\r\n this.activeCellEdit.set({\r\n ...activeCellEdit,\r\n isCommitting: false\r\n });\r\n }\r\n\r\n /**\r\n * Keeps the active edit session aligned with the child editor validity state.\r\n */\r\n handleCellValidityChange(isValid: boolean): void {\r\n const activeCellEdit = this.activeCellEdit();\r\n if (!activeCellEdit) {\r\n return;\r\n }\r\n\r\n this.activeCellEdit.set({\r\n ...activeCellEdit,\r\n isValid,\r\n isCommitting: false\r\n });\r\n }\r\n\r\n /**\r\n * Keeps inline editing alive while a lookup picker dialog owns the focus outside the table cell.\r\n */\r\n handleLookupDialogOpenChange(isOpen: boolean): void {\r\n const activeCellEdit = this.activeCellEdit();\r\n if (!activeCellEdit) {\r\n return;\r\n }\r\n\r\n this.activeCellEdit.set({\r\n ...activeCellEdit,\r\n isLookupDialogOpen: isOpen\r\n });\r\n\r\n if (isOpen) {\r\n return;\r\n }\r\n\r\n const activeControl = activeCellEdit.form.controls[activeCellEdit.propertyName];\r\n if (activeControl?.dirty) {\r\n this.commitCellEdit();\r\n }\r\n }\r\n\r\n /**\r\n * Commits the edit only when focus leaves the entire editor, not when it moves within the editor.\r\n */\r\n handleCellFocusOut(event: FocusEvent): void {\r\n const currentTarget = event.currentTarget;\r\n if (!(currentTarget instanceof HTMLElement)) {\r\n return;\r\n }\r\n\r\n const relatedTarget = event.relatedTarget;\r\n if (relatedTarget instanceof Node && currentTarget.contains(relatedTarget)) {\r\n return;\r\n }\r\n\r\n if (this.activeCellEdit()?.isLookupDialogOpen) {\r\n return;\r\n }\r\n\r\n this.commitCellEdit();\r\n }\r\n\r\n /**\r\n * Supports Enter-to-commit and Escape-to-cancel without letting the event leak to the row.\r\n */\r\n handleCellEditorKeydown(event: KeyboardEvent): void {\r\n if (this.isMonacoEditorEventTarget(event.target)) {\r\n return;\r\n }\r\n\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.commitCellEdit();\r\n return;\r\n }\r\n\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.cancelCellEdit();\r\n }\r\n }\r\n\r\n /**\r\n * Drops the current inline edit session without emitting a commit.\r\n */\r\n cancelCellEdit(): void {\r\n this.activeCellEdit.set(null);\r\n }\r\n\r\n /**\r\n * Emits a cell commit only for valid edits whose value actually changed from the original snapshot.\r\n */\r\n commitCellEdit(): void {\r\n const activeCellEdit = this.activeCellEdit();\r\n if (!activeCellEdit) {\r\n return;\r\n }\r\n\r\n const value = activeCellEdit.form.controls[activeCellEdit.propertyName]?.value ?? null;\r\n if (!activeCellEdit.isValid || this.areJsonValuesEqual(activeCellEdit.originalValue, value)) {\r\n this.activeCellEdit.set(null);\r\n return;\r\n }\r\n\r\n this.activeCellEdit.set({\r\n ...activeCellEdit,\r\n isCommitting: true\r\n });\r\n this.cellEditCommit.emit({\r\n entity: activeCellEdit.entity,\r\n propertyName: activeCellEdit.propertyName,\r\n value,\r\n dirtyProperties: this.readDirtyControlNames(activeCellEdit.form)\r\n });\r\n }\r\n\r\n /**\r\n * Extracts per-field validation errors from the row chill state in a template-friendly shape.\r\n */\r\n rowFieldErrors(entity: ChillEntity): Record<string, string> {\r\n const crudState = this.readChillState(entity);\r\n if (!crudState || typeof crudState !== 'object' || Array.isArray(crudState)) {\r\n return {};\r\n }\r\n\r\n const validationErrors = (crudState as JsonObject)['validationErrors'];\r\n if (!validationErrors || typeof validationErrors !== 'object' || Array.isArray(validationErrors)) {\r\n return {};\r\n }\r\n\r\n const nextErrors: Record<string, string> = {};\r\n for (const [fieldName, value] of Object.entries(validationErrors as Record<string, JsonValue>)) {\r\n if (typeof value === 'string' && value.trim().length > 0) {\r\n nextErrors[fieldName] = value;\r\n }\r\n }\r\n\r\n return nextErrors;\r\n }\r\n\r\n /**\r\n * Detects either field-level or generic validation errors stored in the row chill state.\r\n */\r\n rowHasValidationErrors(entity: ChillEntity): boolean {\r\n if (Object.keys(this.rowFieldErrors(entity)).length > 0) {\r\n return true;\r\n }\r\n\r\n const crudState = this.readChillState(entity);\r\n if (!crudState || typeof crudState !== 'object' || Array.isArray(crudState)) {\r\n return false;\r\n }\r\n\r\n const genericErrors = (crudState as JsonObject)['genericErrors'];\r\n return Array.isArray(genericErrors)\r\n && genericErrors.some((message) => typeof message === 'string' && message.trim().length > 0);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Helper Methods\r\n\r\n /**\r\n * Keeps live entity subscriptions aligned with the current schema type and visible entity set.\r\n */\r\n private syncEntityNotificationSubscriptions(schema: ChillSchema | null, entities: ChillEntity[]): void {\r\n const chillType = schema?.chillType?.trim() ?? '';\r\n if (!chillType) {\r\n this.clearEntityNotificationSubscriptions();\r\n return;\r\n }\r\n\r\n if (this.subscribedNotificationChillType && this.subscribedNotificationChillType !== chillType) {\r\n this.clearEntityNotificationSubscriptions();\r\n }\r\n this.subscribedNotificationChillType = chillType;\r\n\r\n const targetGuids = new Set(\r\n entities\r\n .map((entity) => this.readEntityGuid(entity))\r\n .filter((guid) => guid.length > 0)\r\n );\r\n\r\n for (const [guid, subscription] of this.entityNotificationSubscriptions.entries()) {\r\n if (targetGuids.has(guid)) {\r\n continue;\r\n }\r\n\r\n subscription.unsubscribe();\r\n this.entityNotificationSubscriptions.delete(guid);\r\n }\r\n\r\n for (const guid of targetGuids) {\r\n if (this.entityNotificationSubscriptions.has(guid)) {\r\n continue;\r\n }\r\n\r\n const subscription = this.chill.watchEntityChanges(chillType, guid).subscribe({\r\n next: (changes) => {\r\n void this.handleEntityNotifications(chillType, changes);\r\n },\r\n error: () => {\r\n const currentSubscription = this.entityNotificationSubscriptions.get(guid);\r\n currentSubscription?.unsubscribe();\r\n this.entityNotificationSubscriptions.delete(guid);\r\n }\r\n });\r\n this.entityNotificationSubscriptions.set(guid, subscription);\r\n }\r\n }\r\n\r\n /**\r\n * Unsubscribes from all live entity notifications and clears the associated bookkeeping.\r\n */\r\n private clearEntityNotificationSubscriptions(): void {\r\n for (const subscription of this.entityNotificationSubscriptions.values()) {\r\n subscription.unsubscribe();\r\n }\r\n\r\n this.entityNotificationSubscriptions.clear();\r\n this.subscribedNotificationChillType = '';\r\n }\r\n\r\n private clearRowRefreshFlashTimers(): void {\r\n for (const timer of this.rowRefreshFlashTimers.values()) {\r\n clearTimeout(timer);\r\n }\r\n\r\n this.rowRefreshFlashTimers.clear();\r\n this.rowRefreshFlashKeys.set(new Set<string>());\r\n }\r\n\r\n private pinnedColumnWidthRem(): number {\r\n return (this.hasSelectionColumn() ? 3 : 0) + (this.hasActionColumn() ? 3 : 0);\r\n }\r\n\r\n /**\r\n * Refreshes locally displayed rows only for remote update notifications that contain a Guid.\r\n */\r\n private async handleEntityNotifications(chillType: string, changes: ChillEntityChangeNotification[]): Promise<void> {\r\n for (const change of changes) {\r\n if (change.action !== 'UPDATED') {\r\n continue;\r\n }\r\n\r\n const guid = change.guid?.trim();\r\n if (!guid) {\r\n continue;\r\n }\r\n\r\n await this.refreshDisplayedEntity(chillType, guid);\r\n }\r\n }\r\n\r\n /**\r\n * Reloads a row from the server, merges remote changes into non-dirty fields, and warns on conflicts.\r\n */\r\n private async refreshDisplayedEntity(chillType: string, guid: string): Promise<void> {\r\n const schema = this.schema();\r\n if (!schema) {\r\n return;\r\n }\r\n\r\n const currentEntity = this.displayedEntities().find((entity) => this.sameEntityGuid(entity, guid));\r\n if (!currentEntity || this.isNewEntity(currentEntity) || this.isDeletedRow(currentEntity)) {\r\n return;\r\n }\r\n\r\n if (this.shouldIgnoreEntityNotification(currentEntity)) {\r\n return;\r\n }\r\n\r\n try {\r\n const latestEntityResponse = await firstValueFrom(this.chill.find(this.buildRefreshFindRequest(chillType, guid, schema)));\r\n if (!latestEntityResponse) {\r\n return;\r\n }\r\n\r\n const latestEntity = this.normalizeServerEntity(this.prepareEntityForSchema(latestEntityResponse as ChillEntity, schema));\r\n const currentState = this.readCrudStateObject(currentEntity);\r\n if (currentState.status === 'pristine') {\r\n this.replaceDisplayedEntity(latestEntity, currentEntity);\r\n this.flashRefreshedRow(currentEntity);\r\n return;\r\n }\r\n\r\n const dirtyProperties = new Set(currentState.dirtyProperties ?? []);\r\n const nextProperties: Record<string, JsonValue> = {\r\n ...(currentEntity.properties ?? {})\r\n };\r\n const conflictingProperties: string[] = [];\r\n\r\n for (const property of schema.properties ?? []) {\r\n const propertyName = property.name;\r\n const remoteValue = latestEntity.properties?.[propertyName];\r\n const localValue = currentEntity.properties?.[propertyName];\r\n if (dirtyProperties.has(propertyName)) {\r\n if (!this.areJsonValuesEqual(remoteValue, localValue)) {\r\n conflictingProperties.push(propertyName);\r\n }\r\n continue;\r\n }\r\n\r\n nextProperties[propertyName] = remoteValue ?? null;\r\n }\r\n\r\n const mergedEntity = this.withCrudState({\r\n ...currentEntity,\r\n ...latestEntity,\r\n properties: nextProperties\r\n }, {\r\n ...currentState\r\n });\r\n this.replaceDisplayedEntity(mergedEntity, currentEntity);\r\n\r\n if (conflictingProperties.length > 0) {\r\n await this.dialog?.confirmOk(\r\n this.chill.T('43B7D65E-61B6-4D20-9BEE-EA9E8467AA12', 'Entity updated remotely', 'Entita aggiornata da remoto'),\r\n this.chill.T(\r\n '490D8729-8B0B-4D25-9661-F763FEC35C42',\r\n `Remote updates also changed dirty properties: ${conflictingProperties.join(', ')}`,\r\n `L'aggiornamento remoto ha modificato anche proprieta dirty: ${conflictingProperties.join(', ')}`\r\n )\r\n );\r\n }\r\n } catch {\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * Persists the current column layout into schema metadata and updates local state with the saved result.\r\n */\r\n private saveLayout(): void {\r\n const schema = this.schema();\r\n if (!schema) {\r\n this.isEditLayoutMode.set(false);\r\n return;\r\n }\r\n\r\n const normalizedLayoutState = this.normalizeLayoutForSave(this.layoutState());\r\n const metadata = this.readSchemaMetadata(schema);\r\n metadata[TABLE_LAYOUT_METADATA_KEY] = JSON.stringify({\r\n columns: normalizedLayoutState.map((column) => ({\r\n name: column.name,\r\n displayName: column.displayName,\r\n hidden: column.hidden\r\n }))\r\n } satisfies PersistedTableLayout);\r\n\r\n const updatedSchema: ChillSchema = {\r\n ...schema,\r\n properties: this.applyPropertyWidthProportions(schema, normalizedLayoutState),\r\n metadata\r\n };\r\n\r\n this.isSavingLayout.set(true);\r\n this.layoutError.set('');\r\n\r\n this.chill.setSchema(updatedSchema).subscribe({\r\n next: (savedSchema) => {\r\n const effectiveSchema = savedSchema ?? updatedSchema;\r\n const targetSchema = this.schema();\r\n if (targetSchema) {\r\n this.applyUpdatedSchema(targetSchema, effectiveSchema);\r\n }\r\n this.isSavingLayout.set(false);\r\n this.isEditLayoutMode.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.layoutError.set(this.chill.formatError(error));\r\n this.isSavingLayout.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Reads persisted column layout from schema metadata and falls back to schema order when unavailable.\r\n */\r\n private readLayoutState(schema: ChillSchema | null): ColumnLayoutState[] {\r\n const properties = schema?.properties ?? [];\r\n const defaultLayout = properties.map((property) => ({\r\n name: property.name,\r\n displayName: property.displayName || property.name,\r\n hidden: false,\r\n widthProportion: this.readPropertyWidthProportion(property)\r\n }));\r\n\r\n const metadata = this.readSchemaMetadata(schema);\r\n const rawLayoutValue = metadata[TABLE_LAYOUT_METADATA_KEY];\r\n const rawLayout = typeof rawLayoutValue === 'string' ? rawLayoutValue.trim() : '';\r\n if (!rawLayout) {\r\n return defaultLayout;\r\n }\r\n\r\n try {\r\n const parsedLayout = JSON.parse(rawLayout) as Partial<PersistedTableLayout>;\r\n const savedColumns = Array.isArray(parsedLayout.columns)\r\n ? parsedLayout.columns\r\n .filter((item): item is PersistedColumnLayoutState => typeof item?.name === 'string')\r\n .map((item) => ({\r\n name: item.name.trim(),\r\n displayName: typeof item.displayName === 'string' ? item.displayName : '',\r\n hidden: item.hidden === true\r\n }))\r\n .filter((item) => item.name.length > 0)\r\n : [];\r\n\r\n const restoredLayout = defaultLayout.map((column) => {\r\n const savedColumn = savedColumns.find((item) => item.name === column.name);\r\n return savedColumn\r\n ? { ...column, ...savedColumn }\r\n : column;\r\n })\r\n .sort((left, right) => {\r\n const leftIndex = savedColumns.findIndex((item) => item.name === left.name);\r\n const rightIndex = savedColumns.findIndex((item) => item.name === right.name);\r\n const resolvedLeftIndex = leftIndex >= 0 ? leftIndex : Number.MAX_SAFE_INTEGER;\r\n const resolvedRightIndex = rightIndex >= 0 ? rightIndex : Number.MAX_SAFE_INTEGER;\r\n return resolvedLeftIndex - resolvedRightIndex;\r\n });\r\n return restoredLayout;\r\n } catch {\r\n return defaultLayout;\r\n }\r\n }\r\n\r\n private isMonacoEditorEventTarget(target: EventTarget | null): boolean {\r\n return target instanceof HTMLElement\r\n && !!target.closest('.editor-field, .monaco-editor');\r\n }\r\n\r\n /**\r\n * Stores visible columns before hidden ones so the persisted layout can be rendered directly.\r\n */\r\n private normalizeLayoutForSave(layoutState: ColumnLayoutState[]): ColumnLayoutState[] {\r\n const visibleColumns = layoutState.filter((column) => !column.hidden);\r\n const hiddenColumns = layoutState.filter((column) => column.hidden);\r\n return [...visibleColumns, ...hiddenColumns].map((column) => ({\r\n ...column,\r\n widthProportion: this.normalizeColumnWidthProportion(column.widthProportion)\r\n }));\r\n }\r\n\r\n private applyPropertyWidthProportions(schema: ChillSchema, layoutState: ColumnLayoutState[]): ChillPropertySchema[] {\r\n const widthsByPropertyName = new Map(layoutState.map((column) => [\r\n column.name,\r\n this.normalizeColumnWidthProportion(column.widthProportion)\r\n ]));\r\n\r\n return (schema.properties ?? []).map((property) => {\r\n const widthProportion = widthsByPropertyName.get(property.name);\r\n if (!widthProportion) {\r\n return property;\r\n }\r\n\r\n return {\r\n ...property,\r\n metadata: {\r\n ...(property.metadata ?? {}),\r\n [TABLE_COLUMN_WIDTH_METADATA_KEY]: widthProportion\r\n }\r\n };\r\n });\r\n }\r\n\r\n private readPropertyWidthProportion(property: ChillPropertySchema): number {\r\n return this.normalizeColumnWidthProportion(property.metadata?.[TABLE_COLUMN_WIDTH_METADATA_KEY]);\r\n }\r\n\r\n private normalizeColumnWidthProportion(value: unknown): number {\r\n const numericValue = typeof value === 'number'\r\n ? value\r\n : typeof value === 'string'\r\n ? Number.parseFloat(value)\r\n : 1;\r\n if (!Number.isFinite(numericValue)) {\r\n return 1;\r\n }\r\n\r\n return this.columnWidthOptions.reduce((closest, option) =>\r\n Math.abs(option - numericValue) < Math.abs(closest - numericValue) ? option : closest\r\n , 1);\r\n }\r\n\r\n private findColumnWidthOptionIndex(value: unknown): number {\r\n const normalizedValue = this.normalizeColumnWidthProportion(value);\r\n const index = this.columnWidthOptions.findIndex((option) => option === normalizedValue);\r\n return index >= 0 ? index : this.columnWidthOptions.indexOf(1);\r\n }\r\n\r\n /**\r\n * Normalizes schema metadata from camelCase or legacy payload shapes into a mutable string map.\r\n */\r\n private readSchemaMetadata(schema: ChillSchema | null): ChillMetadataRecord {\r\n if (!schema) {\r\n return {};\r\n }\r\n\r\n const camelMetadata = schema.metadata;\r\n if (camelMetadata) {\r\n return { ...camelMetadata };\r\n }\r\n\r\n const pascalMetadata = (schema as unknown as JsonObject)['Metadata'];\r\n if (pascalMetadata && typeof pascalMetadata === 'object' && !Array.isArray(pascalMetadata)) {\r\n return Object.fromEntries(\r\n Object.entries(pascalMetadata).map(([key, value]) => [key, typeof value === 'string' ? value : String(value ?? '')])\r\n );\r\n }\r\n\r\n return {};\r\n }\r\n\r\n /**\r\n * Reads a property from the entity bag first, then from direct camelCase or PascalCase fields.\r\n */\r\n private readPropertyValue(entity: ChillEntity, propertyName: string): JsonValue | undefined {\r\n const properties = entity.properties\r\n ?? (this.isJsonObjectRecord(entity['Properties']) ? entity['Properties'] : undefined);\r\n if (properties && propertyName in properties) {\r\n return properties[propertyName];\r\n }\r\n\r\n return entity[propertyName] ?? entity[this.toPascalCase(propertyName)];\r\n }\r\n\r\n /**\r\n * Converts primitive entity properties into trimmed text for keys such as Guid or Label.\r\n */\r\n private readEntityText(entity: ChillEntity, key: string): string | null {\r\n const value = entity[key];\r\n if (typeof value === 'string' && value.trim()) {\r\n return value.trim();\r\n }\r\n\r\n if (typeof value === 'number' || typeof value === 'boolean') {\r\n return String(value);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the normalized lowercase CRUD status used by row rendering logic.\r\n */\r\n private readCrudState(entity: ChillEntity): string {\r\n const status = this.readCrudStateObject(entity).status;\r\n return typeof status === 'string'\r\n ? status.trim().toLowerCase()\r\n : '';\r\n }\r\n\r\n /**\r\n * Type guard for JSON object records.\r\n */\r\n private isJsonObjectRecord(value: JsonValue | undefined): value is Record<string, JsonValue> {\r\n return !!value && typeof value === 'object' && !Array.isArray(value);\r\n }\r\n\r\n /**\r\n * Returns the raw chill state payload attached to the entity.\r\n */\r\n private readChillState(entity: ChillEntity): JsonValue | undefined {\r\n return entity['chillState'];\r\n }\r\n\r\n /**\r\n * Normalizes chill state into a predictable CRUD model with defaults for new and deleting rows.\r\n */\r\n private readCrudStateObject(entity: ChillEntity): JsonObject & {\r\n status?: string;\r\n isNew?: boolean;\r\n dirtyProperties?: string[] | null;\r\n validationErrors?: Record<string, string> | null;\r\n genericErrors?: string[] | null;\r\n errorMessage?: string | null;\r\n } {\r\n const currentState = this.readChillState(entity);\r\n const isNew = this.readChillStateBoolean(entity, 'isNew');\r\n const isDeleting = this.readChillStateBoolean(entity, 'isDeleting');\r\n if (currentState && typeof currentState === 'object' && !Array.isArray(currentState)) {\r\n const typedState = currentState as JsonObject;\r\n const resolvedIsNew = typedState['isNew'] === true || isNew;\r\n const status = typeof typedState['status'] === 'string'\r\n ? typedState['status']\r\n : (resolvedIsNew ? 'draft' : isDeleting ? 'deleted' : 'pristine');\r\n return {\r\n ...typedState,\r\n isNew: resolvedIsNew,\r\n status,\r\n dirtyProperties: Array.isArray(typedState['dirtyProperties'])\r\n ? typedState['dirtyProperties'].filter((propertyName: unknown): propertyName is string => typeof propertyName === 'string' && propertyName.trim().length > 0)\r\n : null\r\n };\r\n }\r\n\r\n return {\r\n isNew,\r\n status: isNew ? 'draft' : isDeleting ? 'deleted' : 'pristine',\r\n dirtyProperties: isNew ? [] : null\r\n };\r\n }\r\n\r\n /**\r\n * Merges a CRUD-state patch onto the entity while keeping derived `isNew` and `isDeleting` flags consistent.\r\n */\r\n private withCrudState(\r\n entity: ChillEntity,\r\n state: Record<string, JsonValue | undefined>\r\n ): ChillEntity {\r\n const nextState = this.sanitizeCrudState({\r\n ...this.readCrudStateObject(entity),\r\n ...state\r\n });\r\n\r\n return {\r\n ...entity,\r\n chillState: {\r\n ...(this.readChillState(entity) && typeof this.readChillState(entity) === 'object' && !Array.isArray(this.readChillState(entity))\r\n ? this.readChillState(entity) as JsonObject\r\n : {}),\r\n ...nextState,\r\n isNew: nextState['isNew'] === true,\r\n isDeleting: nextState['status'] === 'deleted'\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Removes undefined entries before persisting CRUD state back onto the entity payload.\r\n */\r\n private sanitizeCrudState(state: Record<string, JsonValue | undefined>): JsonObject {\r\n return Object.fromEntries(\r\n Object.entries(state).filter(([, value]) => value !== undefined)\r\n ) as JsonObject;\r\n }\r\n\r\n /**\r\n * Resets a freshly loaded server entity back to a pristine local CRUD state.\r\n */\r\n private normalizeServerEntity(entity: ChillEntity): ChillEntity {\r\n return this.withCrudState(entity, {\r\n isNew: false,\r\n status: 'pristine',\r\n dirtyProperties: null,\r\n validationErrors: null,\r\n genericErrors: null,\r\n errorMessage: null,\r\n ignoreNotificationsUntil: null\r\n });\r\n }\r\n\r\n private savePropertySchema(schema: ChillSchema, originalPropertyName: string, property: ChillPropertySchema): void {\r\n const normalizedLayoutState = this.normalizeLayoutForSave(this.layoutState());\r\n const metadata = this.readSchemaMetadata(schema);\r\n metadata[TABLE_LAYOUT_METADATA_KEY] = JSON.stringify({\r\n columns: normalizedLayoutState.map((column) => ({\r\n name: column.name,\r\n displayName: column.displayName,\r\n hidden: column.hidden\r\n }))\r\n } satisfies PersistedTableLayout);\r\n\r\n const schemaWithUpdatedProperty: ChillSchema = {\r\n ...schema,\r\n properties: (schema.properties ?? []).map((candidate) => candidate.name === originalPropertyName\r\n ? property\r\n : candidate),\r\n metadata\r\n };\r\n\r\n const updatedSchema: ChillSchema = {\r\n ...schemaWithUpdatedProperty,\r\n properties: this.applyPropertyWidthProportions(schemaWithUpdatedProperty, normalizedLayoutState)\r\n };\r\n\r\n this.isSavingLayout.set(true);\r\n this.layoutError.set('');\r\n\r\n this.chill.setSchema(updatedSchema).subscribe({\r\n next: (savedSchema) => {\r\n const effectiveSchema = savedSchema ?? updatedSchema;\r\n const targetSchema = this.schema();\r\n if (targetSchema) {\r\n this.applyUpdatedSchema(targetSchema, effectiveSchema);\r\n }\r\n this.isSavingLayout.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.layoutError.set(this.chill.formatError(error));\r\n this.isSavingLayout.set(false);\r\n }\r\n });\r\n }\r\n\r\n private applyUpdatedSchema(targetSchema: ChillSchema, updatedSchema: ChillSchema): void {\r\n targetSchema.metadata = this.readSchemaMetadata(updatedSchema);\r\n targetSchema.properties = [...(updatedSchema.properties ?? [])];\r\n targetSchema.displayName = updatedSchema.displayName ?? targetSchema.displayName;\r\n targetSchema.handleAttachments = updatedSchema.handleAttachments;\r\n targetSchema.enableMCP = updatedSchema.enableMCP;\r\n targetSchema.mcpDescription = updatedSchema.mcpDescription ?? null;\r\n targetSchema.queryRelatedChillType = updatedSchema.queryRelatedChillType;\r\n delete (targetSchema as unknown as Record<string, unknown>)['Metadata'];\r\n delete (targetSchema as unknown as Record<string, unknown>)['Properties'];\r\n\r\n this.activeCellEdit.set(null);\r\n this.layoutState.set(this.readLayoutState(targetSchema));\r\n this.schemaRefreshTick.update((current) => current + 1);\r\n this.schemaUpdated.emit(targetSchema);\r\n }\r\n\r\n /**\r\n * Skips live refreshes for a short window after a local save so the row keeps the just-returned server copy.\r\n */\r\n private shouldIgnoreEntityNotification(entity: ChillEntity): boolean {\r\n const ignoreUntil = this.readCrudStateObject(entity)['ignoreNotificationsUntil'];\r\n return typeof ignoreUntil === 'number' && Number.isFinite(ignoreUntil) && ignoreUntil > Date.now();\r\n }\r\n\r\n private buildRefreshFindRequest(chillType: string, guid: string, schema: ChillSchema): JsonObject {\r\n return {\r\n chillType,\r\n guid,\r\n properties: this.buildTablePropertyRequest(schema)\r\n };\r\n }\r\n\r\n private buildTablePropertyRequest(schema: ChillSchema): JsonObject {\r\n const tablePropertyNames = this.columns()\r\n .map((column) => column.name?.trim() ?? '')\r\n .filter((propertyName) => propertyName.length > 0);\r\n const fallbackPropertyNames = (schema.properties ?? [])\r\n .map((property) => property.name?.trim() ?? '')\r\n .filter((propertyName) => propertyName.length > 0);\r\n const propertyNames = tablePropertyNames.length > 0\r\n ? tablePropertyNames\r\n : fallbackPropertyNames;\r\n\r\n return Object.fromEntries(\r\n [...new Set(propertyNames)].map((propertyName) => [propertyName, null])\r\n ) as JsonObject;\r\n }\r\n\r\n /**\r\n * Ensures a server entity exposes every schema property through the `properties` bag expected by the table.\r\n */\r\n private prepareEntityForSchema(entity: ChillEntity, schema: ChillSchema): ChillEntity {\r\n const nextProperties: Record<string, JsonValue> = {\r\n ...(entity.properties ?? {})\r\n };\r\n\r\n for (const property of schema.properties ?? []) {\r\n if (property.name in nextProperties) {\r\n continue;\r\n }\r\n\r\n nextProperties[property.name] = this.readPropertyValue(entity, property.name) ?? null;\r\n }\r\n\r\n return {\r\n ...entity,\r\n chillType: this.readStringValue(entity['chillType']) || schema.chillType?.trim() || '',\r\n properties: nextProperties\r\n };\r\n }\r\n\r\n /**\r\n * Replaces a row in the displayed collection and pushes fresh values into any active editor for that row.\r\n */\r\n private replaceDisplayedEntity(nextEntity: ChillEntity, previousEntity: ChillEntity): void {\r\n const previousEntityKey = this.trackByEntity(0, previousEntity);\r\n this.displayedEntities.update((current) => current.map((entity) => this.trackByEntity(0, entity) === previousEntityKey ? nextEntity : entity));\r\n\r\n const activeCellEdit = this.activeCellEdit();\r\n if (!activeCellEdit || activeCellEdit.entityKey !== previousEntityKey) {\r\n return;\r\n }\r\n\r\n for (const [propertyName, control] of Object.entries(activeCellEdit.form.controls)) {\r\n const nextValue = this.readPropertyValue(nextEntity, propertyName) ?? null;\r\n if (this.areJsonValuesEqual(control.value, nextValue)) {\r\n continue;\r\n }\r\n\r\n control.setValue(nextValue);\r\n }\r\n\r\n this.activeCellEdit.set({\r\n ...activeCellEdit,\r\n entity: nextEntity\r\n });\r\n }\r\n\r\n private flashRefreshedRow(entity: ChillEntity): void {\r\n const entityKey = this.trackByEntity(0, entity);\r\n if (!entityKey) {\r\n return;\r\n }\r\n\r\n const currentTimer = this.rowRefreshFlashTimers.get(entityKey);\r\n if (currentTimer) {\r\n clearTimeout(currentTimer);\r\n }\r\n\r\n this.rowRefreshFlashKeys.update((current) => new Set([...current, entityKey]));\r\n const timer = setTimeout(() => {\r\n this.rowRefreshFlashTimers.delete(entityKey);\r\n this.rowRefreshFlashKeys.update((current) => {\r\n const next = new Set(current);\r\n next.delete(entityKey);\r\n return next;\r\n });\r\n }, ROW_REFRESH_FLASH_MS);\r\n this.rowRefreshFlashTimers.set(entityKey, timer);\r\n }\r\n\r\n /**\r\n * Uses normalized CRUD state to detect client-side draft rows.\r\n */\r\n private isNewEntity(entity: ChillEntity): boolean {\r\n return this.readCrudStateObject(entity).isNew === true;\r\n }\r\n\r\n /**\r\n * Collects the property names whose form controls are currently dirty.\r\n */\r\n private readDirtyControlNames(form: FormGroup<Record<string, FormControl<JsonValue>>>): string[] {\r\n return Object.entries(form.controls)\r\n .filter(([, control]) => control.dirty)\r\n .map(([propertyName]) => propertyName.trim())\r\n .filter((propertyName) => propertyName.length > 0);\r\n }\r\n\r\n /**\r\n * Reads the row Guid using either camelCase or PascalCase server field names.\r\n */\r\n private readEntityGuid(entity: ChillEntity): string {\r\n return this.readEntityText(entity, 'guid')\r\n ?? this.readEntityText(entity, 'Guid')\r\n ?? '';\r\n }\r\n\r\n /**\r\n * Normalizes a JSON value into trimmed text when it is already a string.\r\n */\r\n private readStringValue(value: JsonValue | undefined): string {\r\n return typeof value === 'string'\r\n ? value.trim()\r\n : '';\r\n }\r\n\r\n /**\r\n * Reads a boolean flag from the raw chill state object.\r\n */\r\n private readChillStateBoolean(entity: ChillEntity, propertyName: string): boolean {\r\n const chillState = this.readChillState(entity);\r\n if (!chillState || typeof chillState !== 'object' || Array.isArray(chillState)) {\r\n return false;\r\n }\r\n\r\n return (chillState as JsonObject)[propertyName] === true;\r\n }\r\n\r\n /**\r\n * Compares an entity Guid with an incoming Guid after trimming the incoming value.\r\n */\r\n private sameEntityGuid(entity: ChillEntity, guid: string): boolean {\r\n return this.readEntityGuid(entity) === guid.trim();\r\n }\r\n\r\n /**\r\n * Converts a property name to PascalCase for payloads that expose both casing styles.\r\n */\r\n private toPascalCase(value: string): string {\r\n return value.length > 0\r\n ? `${value[0].toUpperCase()}${value.slice(1)}`\r\n : value;\r\n }\r\n\r\n /**\r\n * Uses JSON serialization as a pragmatic deep-equality check for editor values and server payloads.\r\n */\r\n private areJsonValuesEqual(left: JsonValue | undefined, right: JsonValue | undefined): boolean {\r\n return JSON.stringify(left ?? null) === JSON.stringify(right ?? null);\r\n }\r\n\r\n /**\r\n * Computes a viewport-clamped fixed position for the row-action menu.\r\n */\r\n private buildRowActionMenuState(entityKey: string, trigger: HTMLElement): ActiveRowActionMenuState {\r\n const rect = trigger.getBoundingClientRect();\r\n const menuWidth = 176;\r\n const menuHeight = 112;\r\n const viewportPadding = 8;\r\n const preferredLeft = rect.right - menuWidth;\r\n const maxLeft = window.innerWidth - menuWidth - viewportPadding;\r\n const left = Math.max(viewportPadding, Math.min(preferredLeft, maxLeft));\r\n const fitsBelow = rect.bottom + 6 + menuHeight <= window.innerHeight - viewportPadding;\r\n const top = fitsBelow\r\n ? rect.bottom + 6\r\n : Math.max(viewportPadding, rect.top - menuHeight - 6);\r\n\r\n return { entityKey, top, left };\r\n }\r\n\r\n // #endregion\r\n}\r\n","<section class=\"chill-table-shell\">\r\n @if (showSchemaHeader() && schema()?.displayName) {\r\n <header class=\"table-header\">\r\n <div class=\"table-header__title-row\">\r\n <div class=\"table-header__title\">\r\n <p class=\"table-kicker\"><app-chill-i18n-label [labelGuid]=\"'2DDE962B-086C-47B1-8A48-B16F0E34C0A3'\" [primaryDefaultText]=\"'Chill schema'\" [secondaryDefaultText]=\"'Schema Chill'\" /></p>\r\n <h2>{{ schema()?.displayName }}</h2>\r\n </div>\r\n\r\n <div class=\"table-header__mobile-controls\">\r\n @if (enableFullTextSearch()) {\r\n <button\r\n type=\"button\"\r\n class=\"table-search__icon-button table-search__icon-button--mobile\"\r\n (click)=\"toggleFullTextSearch()\"\r\n [attr.aria-label]=\"chill.T('54E62296-DB94-4973-A2AE-49902D5E25E5', 'Full text search', 'Ricerca full text')\">\r\n <span class=\"material-symbol-icon\" aria-hidden=\"true\">search</span>\r\n </button>\r\n }\r\n\r\n @if (showMobileTaskClose()) {\r\n <button\r\n type=\"button\"\r\n class=\"table-header__task-close\"\r\n (click)=\"closeMobileTask()\"\r\n [attr.aria-label]=\"chill.T('D2566993-8138-408A-9153-904454528781', 'Close task', 'Chiudi attivita')\">\r\n <span class=\"material-symbol-icon\" aria-hidden=\"true\">close</span>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (enableFullTextSearch()) {\r\n <div class=\"table-search\" [class.is-open]=\"isFullTextSearchOpen()\">\r\n @if (isFullTextSearchOpen()) {\r\n <input\r\n #fullTextSearchInput\r\n type=\"search\"\r\n class=\"table-search__input\"\r\n [ngModel]=\"fullTextSearchText()\"\r\n (ngModelChange)=\"updateFullTextSearchText($event)\"\r\n (keydown.enter)=\"submitFullTextSearch()\"\r\n (keydown.escape)=\"resetFullTextSearch()\"\r\n [placeholder]=\"chill.T('D513421E-1C00-425E-A89B-E736A440474F', 'Search', 'Cerca')\"\r\n [attr.aria-label]=\"chill.T('54E62296-DB94-4973-A2AE-49902D5E25E5', 'Full text search', 'Ricerca full text')\" />\r\n <button\r\n type=\"button\"\r\n class=\"table-search__icon-button\"\r\n (click)=\"resetFullTextSearch()\"\r\n [attr.aria-label]=\"chill.T('34015BA4-E0CA-460E-B82B-A4E2D4D8A184', 'Clear', 'Pulisci')\">\r\n <span class=\"material-symbol-icon\" aria-hidden=\"true\">close</span>\r\n </button>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"table-search__icon-button\"\r\n (click)=\"toggleFullTextSearch()\"\r\n [attr.aria-label]=\"chill.T('54E62296-DB94-4973-A2AE-49902D5E25E5', 'Full text search', 'Ricerca full text')\">\r\n <span class=\"material-symbol-icon\" aria-hidden=\"true\">search</span>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </header>\r\n }\r\n\r\n @if (layout.isLayoutEditingEnabled()) {\r\n <div class=\"table-actions\">\r\n @if (isEditLayoutMode() && hiddenColumns().length > 0) {\r\n <label class=\"hidden-column-picker\">\r\n <span>{{ chill.T('3758A6E6-85C1-481D-BF57-A531E79661B8', 'Show column', 'Mostra colonna') }}</span>\r\n <select #hiddenColumnSelect (change)=\"revealColumn(hiddenColumnSelect.value); hiddenColumnSelect.value = ''\">\r\n <option value=\"\">{{ chill.T('D1A15B17-B3C2-49A8-90AA-BAE81ECA8D69', 'Select hidden column', 'Seleziona colonna nascosta') }}</option>\r\n @for (column of hiddenColumns(); track column.name) {\r\n <option [value]=\"column.name\">{{ column.displayName || column.name }}</option>\r\n }\r\n </select>\r\n </label>\r\n }\r\n <button type=\"button\" class=\"layout-button\" (click)=\"toggleEditLayoutMode()\" [disabled]=\"isSavingLayout()\">\r\n @if (isSavingLayout()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'66BD242E-EEF2-4A10-92EB-E67EBC6F0989'\" [primaryDefaultText]=\"'Saving layout...'\" [secondaryDefaultText]=\"'Salvataggio layout...'\" />\r\n } @else if (isEditLayoutMode()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'6C77A5DF-DC99-4DE7-8DB2-05E9F8BB5841'\" [primaryDefaultText]=\"'Save layout'\" [secondaryDefaultText]=\"'Salva layout'\" />\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'9D0B43AC-47B4-4C63-98C7-DB0118C9C0CF'\" [primaryDefaultText]=\"'Edit layout mode'\" [secondaryDefaultText]=\"'Modalita modifica layout'\" />\r\n }\r\n </button>\r\n @if (isEditLayoutMode()) {\r\n <button type=\"button\" class=\"layout-button\" (click)=\"refreshSchemaFromModel()\" [disabled]=\"isSavingLayout()\">\r\n @if (isRefreshingSchema()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'BFD8AA96-D870-423D-BB41-F7DAE0C3E38D'\" [primaryDefaultText]=\"'Updating schema...'\" [secondaryDefaultText]=\"'Aggiornamento schema...'\" />\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'73617D0A-6D91-46DD-B833-76360AF33EEC'\" [primaryDefaultText]=\"'Update schema'\" [secondaryDefaultText]=\"'Aggiorna schema'\" />\r\n }\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @if (layoutError()) {\r\n <div class=\"empty-state error-state\">{{ layoutError() }}</div>\r\n }\r\n\r\n @if (visibleColumns().length === 0) {\r\n <div class=\"empty-state\">{{ chill.T('3D7ABF07-6E0C-4F99-A0C8-C936C44322C6', 'No schema properties available.', 'Nessuna proprietà di schema disponibile.') }}</div>\r\n } @else {\r\n <div class=\"table-wrap\" [class.is-edit-layout-mode]=\"isEditLayoutMode()\">\r\n <table\r\n class=\"chill-table\"\r\n [class.has-selection-column]=\"hasSelectionColumn()\"\r\n [class.is-edit-layout-mode]=\"isEditLayoutMode()\"\r\n [class.has-inline-cell-edit]=\"activeCellEdit() !== null\"\r\n [style.--chill-table-min-width]=\"tableMinimumWidth()\"\r\n [style.--chill-table-mobile-min-width]=\"mobileTableMinimumWidth()\">\r\n <colgroup>\r\n @if (hasSelectionColumn()) {\r\n <col class=\"selection-column\" />\r\n }\r\n @if (hasActionColumn()) {\r\n <col class=\"action-column\" />\r\n }\r\n @for (column of visibleColumns(); track column.name) {\r\n <col class=\"data-column\" [style.width.%]=\"isColumnEditing(column) ? null : columnWidthPercent(column)\" />\r\n }\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @if (hasSelectionColumn()) {\r\n <th scope=\"col\" class=\"selection-column\"></th>\r\n }\r\n @if (hasActionColumn()) {\r\n <th scope=\"col\" class=\"action-column\">#</th>\r\n }\r\n @for (column of visibleColumns(); track column.name) {\r\n <th\r\n scope=\"col\"\r\n [draggable]=\"isEditLayoutMode()\"\r\n (dragstart)=\"beginDrag($event, column.name)\"\r\n (dragover)=\"allowDrop($event)\"\r\n (drop)=\"dropColumn(column.name)\"\r\n (dragend)=\"endDrag()\"\r\n [class.is-sortable]=\"!isEditLayoutMode() && canSortColumn(column)\"\r\n [class.is-sorted]=\"sortDirectionFor(column) !== null\"\r\n (click)=\"!isEditLayoutMode() && canSortColumn(column) && toggleColumnSort(column)\">\r\n @if (isEditLayoutMode()) {\r\n <div class=\"column-editor\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"column-editor__title-row\">\r\n <input\r\n type=\"text\"\r\n class=\"column-name-input\"\r\n [ngModel]=\"column.displayName\"\r\n (ngModelChange)=\"updateColumnDisplayName(column.name, $event)\"\r\n [name]=\"'displayName-' + column.name\" />\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"!column.hidden\"\r\n (change)=\"updateColumnHidden(column.name, !$any($event.target).checked)\"\r\n [name]=\"'hidden-' + column.name\"\r\n [attr.aria-label]=\"chill.T('C6610992-9D61-4EBA-8D13-92F34521AB64', 'Show column', 'Mostra colonna')\" />\r\n </div>\r\n <div class=\"column-editor__settings-row\">\r\n <button\r\n type=\"button\"\r\n class=\"column-icon-button\"\r\n (click)=\"openPropertySettings(column)\"\r\n [attr.aria-label]=\"chill.T('40E9838A-70F2-4E89-BE38-BBE44027D253', 'Edit property settings', 'Modifica impostazioni proprietà')\">\r\n <span class=\"material-symbol-icon\">tune</span>\r\n </button>\r\n <select\r\n class=\"property-type-select\"\r\n [ngModel]=\"column.propertyType\"\r\n (ngModelChange)=\"updatePropertyType(column, $event)\"\r\n [name]=\"'propertyType-' + column.name\"\r\n [attr.aria-label]=\"chill.T('A1803D67-C40D-41AF-BFD2-8F9B0E34C48B', 'Property type', 'Tipo proprietà')\">\r\n @for (option of propertyTypeOptions; track option.value) {\r\n <option [ngValue]=\"option.value\" [disabled]=\"isPropertyTypeOptionDisabled(column, option.value)\">{{ option.label }}</option>\r\n }\r\n </select>\r\n <div class=\"column-width-controls\" [attr.aria-label]=\"chill.T('53796BE9-AF5C-487D-9B26-468C1B75FE54', 'Column width proportion', 'Proporzione larghezza colonna')\">\r\n <button\r\n type=\"button\"\r\n class=\"column-icon-button\"\r\n (click)=\"updateColumnWidthProportion(column.name, -1)\"\r\n [disabled]=\"!canDecreaseColumnWidth(column)\"\r\n [attr.aria-label]=\"chill.T('8C3198E8-F1CA-4B1B-A91B-A02B48FF9219', 'Decrease column width', 'Riduci larghezza colonna')\">\r\n <span class=\"material-symbol-icon\" aria-hidden=\"true\">remove</span>\r\n </button>\r\n <span class=\"column-width-value\">{{ columnWidthLabel(column) }}</span>\r\n <button\r\n type=\"button\"\r\n class=\"column-icon-button\"\r\n (click)=\"updateColumnWidthProportion(column.name, 1)\"\r\n [disabled]=\"!canIncreaseColumnWidth(column)\"\r\n [attr.aria-label]=\"chill.T('30EA851D-40AB-4AD2-A4C8-D2E77C5162BB', 'Increase column width', 'Aumenta larghezza colonna')\">\r\n <span class=\"material-symbol-icon\" aria-hidden=\"true\">add</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n } @else {\r\n <span>{{ column.displayName || column.name }}</span>\r\n @if (canSortColumn(column)) {\r\n <span class=\"column-sort-indicator\" aria-hidden=\"true\">\r\n @switch (sortDirectionFor(column)) {\r\n @case ('ASC') { ↑ }\r\n @case ('DESC') { ↓ }\r\n @default { ↕ }\r\n }\r\n </span>\r\n }\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n @if (displayedEntities().length === 0) {\r\n <tr>\r\n <td [attr.colspan]=\"visibleColumns().length + (hasActionColumn() ? 1 : 0) + (hasSelectionColumn() ? 1 : 0)\" class=\"empty-row\">{{ chill.T('D43AB4B7-3FD0-486C-88FF-7214FB45A1CA', 'No entities to display.', 'Nessuna entità da visualizzare.') }}</td>\r\n </tr>\r\n } @else {\r\n @for (entity of displayedEntities(); track trackByEntity($index, entity)) {\r\n <tr\r\n [class.pending-row]=\"isPendingRow(entity)\"\r\n [class.deleted-row]=\"isDeletedRow(entity)\"\r\n [class.refreshed-row]=\"isRefreshFlashRow(entity)\">\r\n @if (hasSelectionColumn()) {\r\n <td class=\"selection-column\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"row-selection-checkbox\"\r\n [checked]=\"isRowSelected(entity)\"\r\n [disabled]=\"isRowSelectionDisabled(entity)\"\r\n [attr.aria-label]=\"selectionColumn()?.ariaLabel || chill.T('2EE7A0D9-CDE2-4F72-9BE1-B86A91D4B208', 'Select row', 'Seleziona riga')\"\r\n (change)=\"toggleRowSelection(entity, $any($event.target).checked)\" />\r\n </td>\r\n }\r\n @if (hasActionColumn()) {\r\n <td class=\"action-column\" [class.menu-open]=\"isRowActionMenuOpen(entity)\">\r\n <div class=\"row-action-menu\">\r\n <button\r\n type=\"button\"\r\n class=\"row-action-menu__trigger\"\r\n (click)=\"toggleRowActionMenu($event, entity)\"\r\n [attr.aria-label]=\"chill.T('7143A8CE-9D46-4509-8D26-AC954C88F277', 'Open row actions', 'Apri azioni riga')\">\r\n <span class=\"material-symbol-icon\">more_horiz</span>\r\n </button>\r\n\r\n @if (isRowActionMenuOpen(entity)) {\r\n <div class=\"row-action-menu__panel\" [ngStyle]=\"rowActionMenuStyle()\" (click)=\"$event.stopPropagation()\">\r\n @for (action of resolvedRowActions(); track $index) {\r\n <button\r\n type=\"button\"\r\n class=\"row-action-menu__item\"\r\n (click)=\"runRowAction(action, entity)\"\r\n [disabled]=\"isRowActionDisabled(action, entity)\"\r\n [attr.aria-label]=\"rowActionLabel(action)\">\r\n <span\r\n class=\"row-action-button__icon\"\r\n [class.material-symbol-icon]=\"rowActionIconClass(action) === 'material-symbol-icon'\">{{ rowActionIcon(action) }}</span>\r\n <span class=\"row-action-menu__label\">\r\n @if (action.labelGuid && action.primaryDefaultText && action.secondaryDefaultText) {\r\n <app-chill-i18n-label\r\n [labelGuid]=\"action.labelGuid\"\r\n [primaryDefaultText]=\"action.primaryDefaultText\"\r\n [secondaryDefaultText]=\"action.secondaryDefaultText\"\r\n [editable]=\"false\" />\r\n } @else {\r\n {{ rowActionLabel(action) }}\r\n }\r\n </span>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </td>\r\n }\r\n @for (column of visibleColumns(); track column.name) {\r\n <td\r\n class=\"data-cell\"\r\n [style.width.%]=\"isColumnEditing(column) ? null : columnWidthPercent(column)\"\r\n [class.is-editing]=\"isCellEditing(entity, column)\"\r\n (dblclick)=\"activateCellEdit(entity, column)\"\r\n (focusout)=\"handleCellFocusOut($event)\">\r\n @if (isCellEditing(entity, column)) {\r\n <div class=\"data-cell__editor\" (keydown)=\"handleCellEditorKeydown($event)\">\r\n <app-chill-polymorphic-input\r\n [form]=\"activeCellEdit()?.form ?? null\"\r\n [schema]=\"schema()\"\r\n [propertyNames]=\"[column.name]\"\r\n [readonlyPropertyNames]=\"readonlyPropertyNames()\"\r\n [showLabels]=\"false\"\r\n [externalErrors]=\"rowFieldErrors(entity)\"\r\n (valueChange)=\"handleCellValueChange($event)\"\r\n (validityChange)=\"handleCellValidityChange($event)\"\r\n (lookupDialogOpenChange)=\"handleLookupDialogOpenChange($event)\"\r\n (editorDialogOpenChange)=\"handleLookupDialogOpenChange($event)\" />\r\n </div>\r\n } @else {\r\n <app-chill-polymorphic-output\r\n [source]=\"entity\"\r\n [schema]=\"schema()\"\r\n [propertyName]=\"column.name\" />\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n</section>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, OnInit, computed, inject, input, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport type { JsonObject, JsonValue } from '@chill-sharp/ng-client';\r\nimport type { ChillValidationError } from '@chill-sharp/ts-client';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ChillI18nLabelComponent } from '../../lib/chill-i18n-label.component';\r\nimport { ChillFormComponent } from '../../lib/chill-form.component';\r\nimport { ChillTableComponent, type ChillTableCellEditCommitEvent, type ChillTableRowAction, type ChillTableSelectionColumn, type ChillTableSortChangeEvent, type ChillTableValidationFocus } from '../../lib/chill-table.component';\r\nimport { NoticeTransitionDirective } from '../../lib/notice-transition.directive';\r\nimport { CHILL_PROPERTY_TYPE, ChillEntityStatus, ChillState, type ChillEntity, type ChillEntityChangeNotification, type ChillFormSubmitEvent, type ChillPagination, type ChillQuery, type ChillSchema, type ChillSchemaListItem } from '../../models/chill-schema.models';\r\nimport { ChillService } from '../../services/chill.service';\r\nimport { WorkspaceDialogService } from '../../services/workspace-dialog.service';\r\nimport { WorkspaceService } from '../../services/workspace.service';\r\n\r\nconst DEFAULT_VIEW_CODE = 'default';\r\nconst DEFAULT_PAGE_SIZE = 20;\r\nconst SERVER_PAGE_WINDOW_SIZE = 4;\r\nconst ENTITY_NOTIFICATION_IGNORE_WINDOW_MS = 1000;\r\nconst FILE_METADATA_ENTITY_CHILL_TYPE = 'ChillSharp.Attachment.Model.FileMetadata';\r\nconst FILE_METADATA_QUERY_CHILL_TYPE = 'ChillSharp.Attachment.Model.FileMetadataQuery';\r\n\r\nexport interface I18nText {\r\n labelGuid: string;\r\n primaryDefaultText: string;\r\n secondaryDefaultText: string;\r\n}\r\n\r\nexport class CrudPageComponentConfiguration {\r\n chillType = '';\r\n chillQuery?: string | null;\r\n viewCode?: string | null;\r\n disableAdd = false;\r\n disableCreate = false;\r\n disableEdit = false;\r\n disableInlineEdit = false;\r\n disableDelete = false;\r\n relationLabel?: string | I18nText | null;\r\n defaultValues?: Record<string, JsonValue> | null;\r\n fixedValues?: Record<string, JsonValue> | null;\r\n fixedQueryValues?: Record<string, JsonValue> | null;\r\n defaultQueryValues?: Record<string, JsonValue> | null;\r\n relations?: CrudPageComponentConfiguration[] | null;\r\n}\r\n\r\n@Component({\r\n selector: 'app-crud-page',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, ChillTableComponent, ChillI18nLabelComponent, NoticeTransitionDirective],\r\n templateUrl: './crud-page.component.html',\r\n styleUrl: './crud-page.component.scss'\r\n})\r\nexport class CrudPageComponent implements OnInit {\r\n \r\n //#region Service injection\r\n readonly chill = inject(ChillService);\r\n readonly dialog = inject(WorkspaceDialogService);\r\n readonly workspace = inject(WorkspaceService);\r\n //#endregion\r\n\r\n //#region Component inputs\r\n readonly selectionEnabled = input(false);\r\n readonly multipleSelection = input(false);\r\n readonly initialSelectedEntity = input<ChillEntity | null>(null);\r\n readonly initialSelectedEntities = input<ChillEntity[]>([]);\r\n readonly showTableHeader = input(true);\r\n readonly showMobileTaskClose = input(false);\r\n readonly componentConfiguration = input<CrudPageComponentConfiguration | null>(null);\r\n //#endregion\r\n\r\n //#region Component state\r\n readonly isLoadingSchemaList = signal(true);\r\n readonly isLoadingSchema = signal(false);\r\n readonly isSearching = signal(false);\r\n readonly isSaving = signal(false);\r\n readonly errorMessage = signal('');\r\n readonly querySchemas = signal<ChillSchemaListItem[]>([]);\r\n readonly selectedQueryType = signal('');\r\n readonly querySchema = signal<ChillSchema | null>(null);\r\n readonly resultSchema = signal<ChillSchema | null>(null);\r\n readonly queryModel = signal<ChillQuery | null>(null);\r\n readonly results = signal<ChillEntity[]>([]);\r\n readonly selectedEntityKeys = signal<string[]>([]);\r\n readonly selectedViewCode = signal(DEFAULT_VIEW_CODE);\r\n readonly serverWindowStartPage = signal(1);\r\n readonly hasMoreServerPages = signal(false);\r\n readonly normalizedConfiguration = computed(() => this.normalizeComponentConfiguration(this.componentConfiguration()));\r\n readonly readonlyQueryPropertyNames = computed(() => [\r\n ...Object.keys(this.defaultQueryValues()),\r\n ...Object.keys(this.fixedQueryValues())\r\n ].filter((propertyName, index, values) => values.findIndex((value) => value === propertyName) === index));\r\n readonly readonlyEntityPropertyNames = computed(() => Object.keys(this.fixedEntityValues()));\r\n readonly currentPage = signal(1);\r\n readonly pageSize = DEFAULT_PAGE_SIZE;\r\n readonly validationErrorMessage = computed(() => {\r\n const messages = this.results()\r\n .flatMap((entity) => {\r\n const crudState = this.readChillStateObject(entity);\r\n if (!crudState || typeof crudState !== 'object' || Array.isArray(crudState)) {\r\n return [];\r\n }\r\n\r\n const genericErrors = (crudState as JsonObject)['genericErrors'];\r\n return Array.isArray(genericErrors)\r\n ? genericErrors.filter((message): message is string => typeof message === 'string' && message.trim().length > 0)\r\n : [];\r\n });\r\n\r\n return [...new Set(messages)].join(' ').trim();\r\n });\r\n readonly validationFocus = computed<ChillTableValidationFocus | null>(() => {\r\n for (const entity of this.pagedResults()) {\r\n const crudState = this.readChillStateObject(entity);\r\n const fieldNames = Object.keys(crudState.validationErrors ?? {});\r\n if (fieldNames.length > 0) {\r\n return {\r\n entityKey: this.readEntityKey(entity),\r\n propertyName: fieldNames[0]\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n });\r\n readonly currentFullTextSearch = computed(() => {\r\n const value = this.queryModel()?.properties?.['FullTextSearch'];\r\n return typeof value === 'string' ? value : '';\r\n });\r\n readonly pagedResults = computed(() => {\r\n const start = (this.currentPage() - this.serverWindowStartPage()) * this.pageSize;\r\n return this.results().slice(start, start + this.pageSize);\r\n });\r\n readonly rowActions = computed<ChillTableRowAction[]>(() => [\r\n ...(this.isEditDisabled() ? [] : [{\r\n icon: 'edit',\r\n iconClass: 'material-symbol-icon',\r\n ariaLabel: this.chill.T('E64B6037-B83A-406A-B5D6-CB5AA6E42FC6', 'Edit row', 'Modifica riga'),\r\n disabled: (entity: ChillEntity) => this.isSaving() || this.isDeletedEntity(entity),\r\n handler: (entity: ChillEntity) => this.openEntityDialog(entity)\r\n }]),\r\n ...this.createAttachmentDownloadRowActions(),\r\n ...(this.isDeleteDisabled() ? [] : [{\r\n icon: 'delete',\r\n iconClass: 'material-symbol-icon',\r\n ariaLabel: this.chill.T('704B4EC7-C971-48C7-9439-E08C2F590992', 'Delete row', 'Elimina riga'),\r\n disabled: (entity: ChillEntity) => this.isSaving() || this.isDeletedEntity(entity),\r\n handler: (entity: ChillEntity) => this.markEntityDeleted(entity)\r\n }]),\r\n ...this.createAttachmentRowActions(),\r\n ...this.createRelationRowActions()\r\n ]);\r\n readonly activeRowActions = computed<ChillTableRowAction[] | null>(() => this.selectionEnabled() ? null : this.rowActions());\r\n readonly selectionColumn = computed<ChillTableSelectionColumn | null>(() => this.selectionEnabled()\r\n ? {\r\n ariaLabel: this.chill.T('2EE7A0D9-CDE2-4F72-9BE1-B86A91D4B208', 'Select row', 'Seleziona riga'),\r\n isSelected: (entity) => this.isEntitySelected(entity),\r\n toggle: (entity, selected) => this.toggleSelectedEntity(entity, selected),\r\n disabled: () => this.isSaving()\r\n }\r\n : null);\r\n //#endregion\r\n\r\n // #region Public Methods\r\n\r\n /**\r\n * Initializes the component by setting up initial state and loading query schemas.\r\n */\r\n ngOnInit(): void {\r\n this.selectedViewCode.set(this.normalizeViewCode(this.normalizedConfiguration().viewCode));\r\n this.selectedEntityKeys.set(this.readInitialSelectedEntityKeys());\r\n this.loadQuerySchemas();\r\n }\r\n\r\n /**\r\n * Determines if the selection can be confirmed based on the selection mode and selected entities.\r\n */\r\n canConfirmSelection(): boolean {\r\n return this.multipleSelection()\r\n ? this.selectedEntities().length > 0\r\n : !!this.selectedEntity();\r\n }\r\n\r\n /**\r\n * Returns the dialog result based on the selection mode.\r\n */\r\n dialogResult(): ChillEntity | ChillEntity[] | null {\r\n if (this.multipleSelection()) {\r\n return this.selectedEntities().map((entity) => this.cloneEntity(entity));\r\n }\r\n\r\n const entity = this.selectedEntity();\r\n return entity ? this.cloneEntity(entity) : null;\r\n }\r\n\r\n /**\r\n * Selects a query schema and loads the corresponding result schema.\r\n */\r\n selectQuerySchema(chillType: string): void {\r\n const normalizedType = chillType.trim();\r\n this.selectedQueryType.set(normalizedType);\r\n this.errorMessage.set('');\r\n this.clearResultWindow();\r\n\r\n if (!normalizedType) {\r\n this.querySchema.set(null);\r\n this.resultSchema.set(null);\r\n this.queryModel.set(null);\r\n return;\r\n }\r\n\r\n this.loadSelectedSchema(normalizedType);\r\n }\r\n\r\n /**\r\n * Performs a search using the provided query form event.\r\n */\r\n search(event: ChillFormSubmitEvent): void {\r\n if (event.kind !== 'query') {\r\n return;\r\n }\r\n\r\n const query = this.normalizeQuery(event.value as ChillQuery);\r\n this.queryModel.set(query);\r\n this.executeQuery(query, true, 1);\r\n }\r\n\r\n applyOrdering(event: ChillTableSortChangeEvent): void {\r\n const currentQuery = this.queryModel();\r\n if (!currentQuery) {\r\n return;\r\n }\r\n\r\n const nextQuery = this.normalizeQuery({\r\n ...currentQuery,\r\n ordering: event.direction\r\n ? {\r\n propertyName: event.propertyName,\r\n direction: event.direction\r\n }\r\n : null\r\n });\r\n\r\n this.queryModel.set(nextQuery);\r\n this.executeQuery(nextQuery, true, 1);\r\n }\r\n\r\n applyFullTextSearch(value: string): void {\r\n const currentQuery = this.queryModel();\r\n if (!currentQuery) {\r\n return;\r\n }\r\n\r\n const fullTextSearch = value.trim();\r\n const nextProperties = {\r\n ...(currentQuery.properties ?? {})\r\n };\r\n\r\n if (fullTextSearch.length > 0) {\r\n nextProperties['FullTextSearch'] = fullTextSearch;\r\n } else {\r\n delete nextProperties['FullTextSearch'];\r\n }\r\n\r\n const nextQuery = this.normalizeQuery({\r\n ...currentQuery,\r\n properties: nextProperties\r\n });\r\n this.queryModel.set(nextQuery);\r\n this.executeQuery(nextQuery, true, 1);\r\n }\r\n\r\n handleResultSchemaUpdated(schema: ChillSchema): void {\r\n this.resultSchema.set({\r\n ...schema,\r\n metadata: schema.metadata ? { ...schema.metadata } : undefined,\r\n properties: [...(schema.properties ?? [])]\r\n });\r\n }\r\n\r\n closeActiveTask(): void {\r\n const activeTaskId = this.workspace.activeTask()?.id;\r\n if (!activeTaskId) {\r\n return;\r\n }\r\n\r\n void this.workspace.closeTask(activeTaskId);\r\n }\r\n\r\n /**\r\n * Opens a search dialog for the current query schema.\r\n */\r\n openSearchDialog(): void {\r\n const schema = this.querySchema();\r\n if (!schema) {\r\n return;\r\n }\r\n\r\n void this.dialog.openDialog<void>({\r\n title: this.chill.T('44972777-6760-4F48-BE39-B504E4467150', 'Search', 'Cerca'),\r\n component: ChillFormComponent,\r\n okLabel: this.chill.T('D513421E-1C00-425E-A89B-E736A440474F', 'Search', 'Cerca'),\r\n inputs: {\r\n schema,\r\n query: this.queryModel(),\r\n readonlyPropertyNames: this.readonlyQueryPropertyNames(),\r\n submitLabelGuid: 'D513421E-1C00-425E-A89B-E736A440474F',\r\n submitPrimaryDefaultText: 'Search',\r\n submitSecondaryDefaultText: 'Cerca',\r\n submitLabel: this.chill.T('D513421E-1C00-425E-A89B-E736A440474F', 'Search', 'Cerca'),\r\n showSchemaHeader: false,\r\n renderSubmitInsideForm: false,\r\n onSubmit: (event: ChillFormSubmitEvent) => this.search(event),\r\n closeDialogOnSubmit: true\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Checks if the search dialog can be opened.\r\n */\r\n canOpenSearchDialog(): boolean {\r\n return !!this.querySchema() && !this.isLoadingSchema();\r\n }\r\n\r\n /**\r\n * Checks if a new entity can be added.\r\n */\r\n canAddEntity(): boolean {\r\n return !!this.resultSchema() && !this.isSaving() && !this.isLoadingSchema();\r\n }\r\n\r\n isAddDisabled(): boolean {\r\n return this.normalizedConfiguration().disableAdd === true || this.normalizedConfiguration().disableCreate === true;\r\n }\r\n\r\n isEditDisabled(): boolean {\r\n return this.normalizedConfiguration().disableEdit === true;\r\n }\r\n\r\n isInlineEditDisabled(): boolean {\r\n return this.normalizedConfiguration().disableInlineEdit === true;\r\n }\r\n\r\n isDeleteDisabled(): boolean {\r\n return this.normalizedConfiguration().disableDelete === true;\r\n }\r\n\r\n isAttachmentCrud(): boolean {\r\n return this.resultSchema()?.chillType?.trim() === FILE_METADATA_ENTITY_CHILL_TYPE;\r\n }\r\n\r\n canOpenAttachmentUploadDialog(): boolean {\r\n const target = this.readAttachmentTargetInfo();\r\n return this.isAttachmentCrud() && !!target.attachToChillType && !!target.attachToGuid;\r\n }\r\n\r\n /**\r\n * Checks if there are any pending entities that need to be saved.\r\n */\r\n hasPendingEntities(): boolean {\r\n return this.results().some((entity) => this.isPendingEntity(entity));\r\n }\r\n\r\n /**\r\n * Saves all pending entities by validating and committing them.\r\n */\r\n async savePendingEntities(): Promise<void> {\r\n const schema = this.resultSchema();\r\n const pendingEntities = this.pendingEntities();\r\n if (!schema || pendingEntities.length === 0 || this.isSaving()) {\r\n return;\r\n }\r\n\r\n const entitiesToValidate = pendingEntities.filter((entity) => !this.isDeletedEntity(entity));\r\n const isValidationSuccessful = await this.validatePendingEntities(entitiesToValidate, schema);\r\n if (!isValidationSuccessful) {\r\n return;\r\n }\r\n\r\n this.isSaving.set(true);\r\n this.errorMessage.set('');\r\n this.updatePendingStatuses(pendingEntities, {\r\n status: 'saving'\r\n });\r\n const removableDraftKeys = new Set(\r\n pendingEntities\r\n .filter((entity) => this.isDraftEntity(entity) && this.isDeletedEntity(entity))\r\n .map((entity) => this.readEntityKey(entity))\r\n .filter((entityKey) => entityKey.length > 0)\r\n );\r\n const chunkOperations = this.buildChunkOperations(\r\n pendingEntities.filter((entity) => !removableDraftKeys.has(this.readEntityKey(entity))),\r\n schema\r\n );\r\n\r\n try {\r\n if (chunkOperations.length > 0) {\r\n await firstValueFrom(this.chill.chunk(chunkOperations));\r\n }\r\n\r\n const successfulEntityKeys = new Set(\r\n pendingEntities\r\n .map((entity) => this.readEntityKey(entity))\r\n .filter((entityKey) => entityKey.length > 0)\r\n );\r\n this.results.update((current) => current.filter((entity) => !successfulEntityKeys.has(this.readEntityKey(entity))));\r\n this.errorMessage.set('');\r\n this.refreshResults();\r\n } catch (error: unknown) {\r\n const errorMessage = this.chill.formatError(error);\r\n const failedEntityKeys = new Set(\r\n pendingEntities\r\n .map((entity) => this.readEntityKey(entity))\r\n .filter((entityKey) => entityKey.length > 0)\r\n );\r\n this.results.update((current) => current.map((entity) => failedEntityKeys.has(this.readEntityKey(entity))\r\n ? this.withCrudState(entity, {\r\n status: this.isDeletedEntity(entity) ? 'deleted' : 'error',\r\n errorMessage\r\n })\r\n : entity));\r\n this.errorMessage.set(errorMessage);\r\n } finally {\r\n this.isSaving.set(false);\r\n }\r\n }\r\n\r\n /**\r\n * Checks if navigation to the previous page is possible.\r\n */\r\n canGoToPreviousPage(): boolean {\r\n return this.currentPage() > 1;\r\n }\r\n\r\n /**\r\n * Checks if navigation to the next page is possible.\r\n */\r\n canGoToNextPage(): boolean {\r\n return this.hasLoadedPage(this.currentPage() + 1) || this.hasMoreServerPages();\r\n }\r\n\r\n /**\r\n * Navigates to the previous page.\r\n */\r\n goToPreviousPage(): void {\r\n if (!this.canGoToPreviousPage()) {\r\n return;\r\n }\r\n\r\n const previousPage = this.currentPage() - 1;\r\n if (this.hasLoadedPage(previousPage)) {\r\n this.currentPage.set(previousPage);\r\n return;\r\n }\r\n\r\n const query = this.queryModel();\r\n if (!query) {\r\n return;\r\n }\r\n\r\n this.executeQuery(this.normalizeQuery(query), true, previousPage);\r\n }\r\n\r\n /**\r\n * Navigates to the next page.\r\n */\r\n goToNextPage(): void {\r\n if (!this.canGoToNextPage()) {\r\n return;\r\n }\r\n\r\n const nextPage = this.currentPage() + 1;\r\n if (this.hasLoadedPage(nextPage)) {\r\n this.currentPage.set(nextPage);\r\n return;\r\n }\r\n\r\n const query = this.queryModel();\r\n if (!query) {\r\n return;\r\n }\r\n\r\n this.executeQuery(this.normalizeQuery(query), true, nextPage);\r\n }\r\n\r\n /**\r\n * Returns the label for the current page.\r\n */\r\n pageLabel(): string {\r\n const pageText = this.chill.T('A28A7E16-5B47-4B5D-A5CF-54BDEFF43073', 'Page', 'Pagina');\r\n return `${pageText} ${this.currentPage()}`;\r\n }\r\n\r\n /**\r\n * Clears the error message.\r\n */\r\n clearErrorMessage(): void {\r\n this.errorMessage.set('');\r\n }\r\n\r\n /**\r\n * Opens a dialog for editing or adding an entity.\r\n */\r\n openEntityDialog(entity: ChillEntity): void {\r\n const schema = this.resultSchema();\r\n if (!schema) {\r\n return;\r\n }\r\n const isDraft = this.isNewEntity(entity);\r\n void (async () => {\r\n const result = await this.dialog.openDialog<ChillEntity>({\r\n title: isDraft\r\n ? this.chill.T('23A5536E-8A94-4469-977C-D3BB57E5E621', 'Add', 'Aggiungi')\r\n : this.chill.T('E64B6037-B83A-406A-B5D6-CB5AA6E42FC6', 'Edit', 'Modifica'),\r\n component: ChillFormComponent,\r\n okLabel: isDraft\r\n ? this.chill.T('D7EA89E2-4AF2-455A-8FA9-33540E61D7C5', 'Done', 'Fine')\r\n : this.chill.T('62953302-B951-4FD1-BD08-4B7649A91BAF', 'Update', 'Aggiorna'),\r\n inputs: {\r\n schema,\r\n entity: this.prepareDialogEntity(entity, schema),\r\n readonlyPropertyNames: this.readonlyEntityPropertyNames(),\r\n submitLabelGuid: isDraft ? 'D7EA89E2-4AF2-455A-8FA9-33540E61D7C5' : '62953302-B951-4FD1-BD08-4B7649A91BAF',\r\n submitPrimaryDefaultText: isDraft ? 'Done' : 'Update',\r\n submitSecondaryDefaultText: isDraft ? 'Fine' : 'Aggiorna',\r\n submitLabel: isDraft\r\n ? this.chill.T('D7EA89E2-4AF2-455A-8FA9-33540E61D7C5', 'Done', 'Fine')\r\n : this.chill.T('62953302-B951-4FD1-BD08-4B7649A91BAF', 'Update', 'Aggiorna'),\r\n showSchemaHeader: false,\r\n renderSubmitInsideForm: false,\r\n closeDialogOnSubmit: false\r\n }\r\n });\r\n\r\n if (result.status !== 'confirmed') {\r\n return;\r\n }\r\n\r\n const savedEntity = result.value;\r\n if (!savedEntity) {\r\n if (isDraft) {\r\n this.removeIsNewEntity(entity);\r\n } else {\r\n this.refreshResults();\r\n }\r\n return;\r\n }\r\n\r\n const nextEntity = this.prepareSavedDialogEntity(savedEntity, schema);\r\n this.replaceEntity(nextEntity, this.findEntityByKey(entity) ?? entity);\r\n })();\r\n }\r\n\r\n private loadQuerySchemas(): void {\r\n this.isLoadingSchemaList.set(true);\r\n this.errorMessage.set('');\r\n\r\n this.chill.getSchemaList().subscribe({\r\n next: (schemaList) => {\r\n const querySchemas = schemaList\r\n .filter((item) => this.isQuerySchema(item))\r\n .sort((left, right) => this.schemaLabel(left).localeCompare(this.schemaLabel(right)));\r\n\r\n this.querySchemas.set(querySchemas);\r\n this.isLoadingSchemaList.set(false);\r\n\r\n if (querySchemas.length === 0) {\r\n this.errorMessage.set(this.chill.T('9A6E134E-44BF-4FF4-97DF-EE3041286395', 'No query schemas are available.', 'Nessuno schema di query disponibile.'));\r\n return;\r\n }\r\n\r\n const configuredQueryType = this.configuredQueryChillType();\r\n const configuredResultType = this.configuredResultChillType();\r\n const initialSchema = querySchemas.find((schema) => schema.chillType?.trim() === configuredQueryType)\r\n ?? querySchemas.find((schema) => schema.relatedChillType?.trim() === configuredResultType)\r\n ?? null;\r\n \r\n if (!initialSchema) {\r\n const backupQuerySchema = this.createBackupQuerySchema(configuredResultType, this.selectedViewCode());\r\n if (!backupQuerySchema) {\r\n this.errorMessage.set(this.chill.T('5C237896-63A2-4E59-809A-12598DC24882', 'No query schemas are available.', 'Nessuno schema di query disponibile.'));\r\n return;\r\n }\r\n\r\n this.selectedQueryType.set(backupQuerySchema.chillType?.trim() ?? '');\r\n this.querySchema.set(backupQuerySchema);\r\n this.queryModel.set(this.createQueryModel(backupQuerySchema));\r\n this.clearResultWindow();\r\n void this.loadResultSchema(configuredResultType, backupQuerySchema.chillViewCode?.trim() || this.selectedViewCode());\r\n return;\r\n }\r\n this.selectQuerySchema(initialSchema.chillType?.trim() ?? '');\r\n },\r\n error: (error: unknown) => {\r\n this.querySchemas.set([]);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n this.isLoadingSchemaList.set(false);\r\n }\r\n });\r\n }\r\n\r\n private loadSelectedSchema(chillType: string): void {\r\n this.isLoadingSchema.set(true);\r\n\r\n const viewCode = this.selectedViewCode();\r\n this.chill.getSchema(chillType, viewCode).subscribe({\r\n next: (schema) => {\r\n if (!schema) {\r\n this.querySchema.set(null);\r\n this.resultSchema.set(null);\r\n this.queryModel.set(null);\r\n this.clearResultWindow();\r\n this.errorMessage.set(this.chill.T('80085620-C926-4F8C-820D-672EE1E7B4AF', 'The selected query schema is unavailable.', 'Lo schema di query selezionato non è disponibile.'));\r\n this.isLoadingSchema.set(false);\r\n return;\r\n }\r\n\r\n this.querySchema.set(schema);\r\n this.queryModel.set(this.createQueryModel(schema));\r\n void this.loadResultSchema(\r\n this.configuredResultChillType() || schema.queryRelatedChillType?.trim() || '',\r\n schema.chillViewCode?.trim() || viewCode\r\n );\r\n },\r\n error: (error: unknown) => {\r\n this.querySchema.set(null);\r\n this.resultSchema.set(null);\r\n this.queryModel.set(null);\r\n this.clearResultWindow();\r\n this.errorMessage.set(this.chill.formatError(error));\r\n this.isLoadingSchema.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Adds a new draft entity to the results.\r\n */\r\n add(): void {\r\n const schema = this.resultSchema();\r\n if (!schema) {\r\n return;\r\n }\r\n\r\n this.errorMessage.set('');\r\n const isNew = true;\r\n const draftEntity: ChillEntity = {\r\n guid: crypto.randomUUID(),\r\n chillState: {\r\n isNew: isNew,\r\n isDeleting: false,\r\n status: 'draft',\r\n dirtyProperties: []\r\n } satisfies ChillState,\r\n chillType: schema.chillType?.trim() ?? '',\r\n properties: {\r\n ...this.defaultEntityValues(),\r\n ...this.fixedEntityValues()\r\n }\r\n };\r\n this.results.update((current) => [...current, this.prepareEntityForSchema(draftEntity, schema, isNew)]);\r\n if (this.selectionEnabled()) {\r\n this.toggleSelectedEntity(draftEntity, true);\r\n }\r\n }\r\n\r\n /**\r\n * Handles inline cell edit commits from the table.\r\n */\r\n async handleInlineCellEdit(event: ChillTableCellEditCommitEvent): Promise<void> {\r\n const schema = this.resultSchema();\r\n if (!schema) {\r\n return;\r\n }\r\n\r\n const updatedEntity = this.mergeEntityProperty(event.entity, event.propertyName, event.value, schema);\r\n if (this.isNewEntity(event.entity)) {\r\n const nextEntity = this.withCrudState(updatedEntity, {\r\n status: 'draft',\r\n isNew: true,\r\n dirtyProperties: this.normalizeDirtyProperties(event.dirtyProperties),\r\n validationErrors: null,\r\n genericErrors: null\r\n });\r\n this.replaceEntity(nextEntity, event.entity);\r\n await this.autocompleteAndValidateEntity(nextEntity);\r\n return;\r\n }\r\n\r\n this.errorMessage.set('');\r\n const nextEntity = this.withCrudState(updatedEntity, {\r\n status: 'dirty',\r\n dirtyProperties: this.normalizeDirtyProperties(event.dirtyProperties),\r\n validationErrors: null,\r\n genericErrors: null\r\n });\r\n this.replaceEntity(nextEntity, event.entity);\r\n await this.autocompleteAndValidateEntity(nextEntity);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Helper Methods\r\n\r\n private async loadResultSchema(relatedChillType: string, chillViewCode: string): Promise<void> {\r\n if (!relatedChillType) {\r\n this.resultSchema.set(null);\r\n this.errorMessage.set(this.chill.T('C187D4C0-DB14-476E-9A40-F6D086C2D7A5', 'The selected query schema does not define QueryRelatedChillType.', 'Lo schema di query selezionato non definisce QueryRelatedChillType.'));\r\n this.isLoadingSchema.set(false);\r\n return;\r\n }\r\n\r\n this.chill.getSchema(relatedChillType, chillViewCode).subscribe({\r\n next: (schema) => {\r\n this.resultSchema.set(schema);\r\n if (!schema) {\r\n this.errorMessage.set(this.chill.T('A6A6949E-F0D4-42F5-A8AE-E15B1B174084', 'The result schema is unavailable.', 'Lo schema dei risultati non è disponibile.'));\r\n }\r\n if (schema && this.queryModel()) {\r\n this.isLoadingSchema.set(false);\r\n this.refreshResults();\r\n return;\r\n }\r\n this.isLoadingSchema.set(false);\r\n },\r\n error: (error: unknown) => {\r\n this.resultSchema.set(null);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n this.isLoadingSchema.set(false);\r\n }\r\n });\r\n }\r\n\r\n markEntityDeleted(entity: ChillEntity): void {\r\n this.errorMessage.set('');\r\n this.results.update((current) => current.map((candidate) => this.readEntityKey(candidate) === this.readEntityKey(entity)\r\n ? this.withCrudState(candidate, {\r\n status: 'deleted'\r\n })\r\n : candidate));\r\n }\r\n\r\n private createQueryModel(schema: ChillSchema): ChillQuery {\r\n return this.normalizeQuery({\r\n chillType: this.configuredQueryChillType() || schema.chillType?.trim() || this.selectedQueryType(),\r\n properties: {\r\n ...this.defaultQueryValues(),\r\n ...this.fixedQueryValues()\r\n }\r\n });\r\n }\r\n\r\n private normalizeQuery(query: ChillQuery): ChillQuery {\r\n const resultSchema = this.resultSchema();\r\n const ordering = query.ordering;\r\n return {\r\n ...query,\r\n chillType: query.chillType?.trim() || this.configuredQueryChillType() || this.querySchema()?.chillType?.trim() || this.selectedQueryType(),\r\n properties: {\r\n ...(query.properties ?? {}),\r\n ...this.defaultQueryValues(),\r\n ...this.fixedQueryValues()\r\n },\r\n ordering: ordering?.propertyName?.trim()\r\n ? {\r\n propertyName: ordering.propertyName.trim(),\r\n direction: ordering.direction === 'DESC' ? 'DESC' : 'ASC'\r\n }\r\n : null,\r\n pagination: this.buildPaginationForPage(this.currentPage()),\r\n resultProperties: resultSchema?.properties?.map((property) => ({ PropertyName: property.name })) ?? []\r\n };\r\n }\r\n\r\n private createBackupQuerySchema(entityChillType: string, viewCode: string): ChillSchema | null {\r\n const normalizedEntityChillType = entityChillType.trim();\r\n if (!normalizedEntityChillType) {\r\n return null;\r\n }\r\n\r\n return {\r\n chillType: normalizedEntityChillType,\r\n chillViewCode: this.normalizeViewCode(viewCode),\r\n displayName: normalizedEntityChillType,\r\n queryRelatedChillType: normalizedEntityChillType,\r\n metadata: {},\r\n properties: [\r\n {\r\n name: 'Guid',\r\n displayName: 'Guid',\r\n propertyType: CHILL_PROPERTY_TYPE.Guid,\r\n isNullable: true,\r\n metadata: {}\r\n },\r\n {\r\n name: 'FullTextSearch',\r\n displayName: 'FullTextSearch',\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: true,\r\n metadata: {}\r\n }\r\n ]\r\n };\r\n }\r\n\r\n private normalizeCreateEntity(entity: ChillEntity, schema: ChillSchema): ChillEntity {\r\n const preparedEntity = this.prepareEntityForSchema(entity, schema);\r\n const entityChillType = this.readStringValue(preparedEntity['chillType']);\r\n const sanitizedEntity = this.stripSchemaPropertiesFromRoot(preparedEntity, schema);\r\n const { chillState: _chillState, ...normalizedEntity } = sanitizedEntity as ChillEntity & {\r\n chillState?: ChillState;\r\n };\r\n return {\r\n ...normalizedEntity,\r\n chillType: entityChillType || schema.chillType?.trim() || this.querySchema()?.queryRelatedChillType?.trim() || '',\r\n properties: {\r\n ...(preparedEntity.properties ?? {})\r\n }\r\n };\r\n }\r\n\r\n private stripSchemaPropertiesFromRoot(entity: ChillEntity, schema: ChillSchema): ChillEntity {\r\n const nextEntity = { ...entity } as ChillEntity;\r\n const protectedNames = new Set(['guid', 'Guid', 'chillType', 'ChillType', 'chillState', 'ChillState', 'properties', 'Properties']);\r\n\r\n for (const property of schema.properties ?? []) {\r\n const propertyName = property.name?.trim();\r\n if (!propertyName || protectedNames.has(propertyName)) {\r\n continue;\r\n }\r\n\r\n delete nextEntity[propertyName];\r\n const pascalCaseName = propertyName.length > 0\r\n ? `${propertyName[0].toUpperCase()}${propertyName.slice(1)}`\r\n : propertyName;\r\n if (!protectedNames.has(pascalCaseName)) {\r\n delete nextEntity[pascalCaseName];\r\n }\r\n }\r\n\r\n return nextEntity;\r\n }\r\n\r\n private buildChunkOperations(entities: ChillEntity[], schema: ChillSchema): JsonObject[] {\r\n if (entities.length === 0) {\r\n return [];\r\n }\r\n\r\n const operations: JsonObject[] = [{\r\n Index: 0,\r\n Verb: 'transaction'\r\n }];\r\n\r\n entities.forEach((entity, index) => {\r\n const normalizedEntity = this.normalizeCreateEntity(entity, schema) as JsonObject;\r\n const verb = this.isDeletedEntity(entity)\r\n ? 'delete'\r\n : this.isNewEntity(entity)\r\n ? 'create'\r\n : 'update';\r\n operations.push({\r\n Index: index + 1,\r\n Verb: verb,\r\n Entity: normalizedEntity\r\n });\r\n });\r\n\r\n operations.push({\r\n Index: operations.length,\r\n Verb: 'commit'\r\n });\r\n\r\n return operations;\r\n }\r\n\r\n private refreshResults(): void {\r\n const query = this.queryModel();\r\n if (!query) {\r\n return;\r\n }\r\n\r\n this.executeQuery(this.normalizeQuery(query), false, this.currentPage());\r\n }\r\n\r\n private clearResultWindow(): void {\r\n this.results.set([]);\r\n this.currentPage.set(1);\r\n this.serverWindowStartPage.set(1);\r\n this.hasMoreServerPages.set(false);\r\n }\r\n\r\n private executeQuery(query: ChillQuery, preservePendingEntitiesOnError: boolean, targetPage: number): void {\r\n const normalizedTargetPage = Math.max(1, targetPage);\r\n const windowStartPage = this.calculateServerWindowStartPage(normalizedTargetPage);\r\n const pagedQuery = {\r\n ...query,\r\n pagination: this.buildPaginationForPage(normalizedTargetPage)\r\n };\r\n\r\n this.isSearching.set(true);\r\n this.errorMessage.set('');\r\n this.chill.query(pagedQuery).subscribe({\r\n next: (response) => {\r\n const serverEntities = this.extractEntities(response);\r\n if (serverEntities.length === 0 && normalizedTargetPage > 1) {\r\n this.hasMoreServerPages.set(false);\r\n this.isSearching.set(false);\r\n return;\r\n }\r\n\r\n this.results.set(this.mergeWithDraftEntities(serverEntities));\r\n this.serverWindowStartPage.set(windowStartPage);\r\n this.currentPage.set(normalizedTargetPage);\r\n this.hasMoreServerPages.set(serverEntities.length >= this.serverWindowEntityCount());\r\n this.isSearching.set(false);\r\n },\r\n error: (error: unknown) => {\r\n if (preservePendingEntitiesOnError) {\r\n this.results.set(this.pendingEntities());\r\n }\r\n this.errorMessage.set(this.chill.formatError(error));\r\n this.currentPage.set(normalizedTargetPage);\r\n this.serverWindowStartPage.set(windowStartPage);\r\n this.hasMoreServerPages.set(false);\r\n this.isSearching.set(false);\r\n }\r\n });\r\n }\r\n\r\n private buildPaginationForPage(page: number): ChillPagination {\r\n const windowStartPage = this.calculateServerWindowStartPage(page);\r\n return {\r\n Page: Math.floor((windowStartPage - 1) / SERVER_PAGE_WINDOW_SIZE) + 1,\r\n PageResults: this.serverWindowEntityCount()\r\n };\r\n }\r\n\r\n private calculateServerWindowStartPage(page: number): number {\r\n return Math.floor((Math.max(1, page) - 1) / SERVER_PAGE_WINDOW_SIZE) * SERVER_PAGE_WINDOW_SIZE + 1;\r\n }\r\n\r\n private serverWindowEntityCount(): number {\r\n return this.pageSize * SERVER_PAGE_WINDOW_SIZE;\r\n }\r\n\r\n private hasLoadedPage(page: number): boolean {\r\n if (page < this.serverWindowStartPage()) {\r\n return false;\r\n }\r\n\r\n const start = (page - this.serverWindowStartPage()) * this.pageSize;\r\n return start >= 0 && start < this.results().length;\r\n }\r\n\r\n private removeIsNewEntity(entity: ChillEntity): void {\r\n const isNew = this.isNewEntity(entity);\r\n if (!isNew) {\r\n return;\r\n }\r\n\r\n this.results.update((current) => current.filter((candidate) => this.isNewEntity(candidate) && candidate.guid !== entity.guid));\r\n }\r\n\r\n private isDraftEntity(entity: ChillEntity): boolean {\r\n return this.isNewEntity(entity);\r\n }\r\n\r\n private pendingEntities(): ChillEntity[] {\r\n return this.results().filter((entity) => this.isPendingEntity(entity));\r\n }\r\n\r\n private mergeWithDraftEntities(serverEntities: ChillEntity[]): ChillEntity[] {\r\n const pendingEntities = this.pendingEntities();\r\n const persistedPendingEntityMap = new Map(\r\n pendingEntities\r\n .filter((entity) => !this.isDraftEntity(entity))\r\n .map((entity) => [this.readEntityKey(entity), entity] as const)\r\n );\r\n\r\n return [\r\n ...serverEntities.map((entity) => persistedPendingEntityMap.get(this.readEntityKey(entity)) ?? entity),\r\n ...pendingEntities.filter((entity) => this.isDraftEntity(entity))\r\n ];\r\n }\r\n\r\n private updatePendingStatuses(entities: ChillEntity[], state: Partial<ChillState>): void {\r\n const entityKeys = new Set(entities.map((entity) => this.readEntityKey(entity)).filter((entityKey) => entityKey.length > 0));\r\n this.results.update((current) => current.map((entity) => entityKeys.has(this.readEntityKey(entity))\r\n ? this.withCrudState(entity, state)\r\n : entity));\r\n }\r\n\r\n private isPendingEntity(entity: ChillEntity): boolean {\r\n const status = this.readCrudStatus(entity);\r\n return status === 'draft' || status === 'dirty' || status === 'deleted' || status === 'error';\r\n }\r\n\r\n private isDeletedEntity(entity: ChillEntity): boolean {\r\n return this.readCrudStatus(entity) === 'deleted';\r\n }\r\n\r\n private readEntityKey(entity: ChillEntity): string {\r\n return this.readStringValue(entity['guid'])\r\n || this.readStringValue(entity['Guid']);\r\n }\r\n\r\n async openAttachmentUploadDialog(): Promise<void> {\r\n const target = this.readAttachmentTargetInfo();\r\n if (!target.attachToChillType || !target.attachToGuid) {\r\n return;\r\n }\r\n\r\n const { AttachmentUploadDialogComponent } = await import('./attachment-upload-dialog.component');\r\n const result = await this.dialog.openDialog<JsonObject | null>({\r\n title: this.chill.T('D31B58D6-32F2-443B-AD18-7BFA76AF2FB6', 'Add attachment', 'Aggiungi allegato'),\r\n component: AttachmentUploadDialogComponent,\r\n okLabel: this.chill.T('D31B58D6-32F2-443B-AD18-7BFA76AF2FB6', 'Add attachment', 'Aggiungi allegato'),\r\n inputs: {\r\n attachToChillType: target.attachToChillType,\r\n attachToGuid: target.attachToGuid\r\n }\r\n });\r\n\r\n if (result.status === 'confirmed') {\r\n this.refreshResults();\r\n }\r\n }\r\n\r\n private readEntityChillType(entity: ChillEntity): string {\r\n return this.readStringValue(entity['chillType'])\r\n || this.readStringValue(entity['ChillType'])\r\n || this.resultSchema()?.chillType?.trim()\r\n || '';\r\n }\r\n\r\n private withCrudState(entity: ChillEntity, state: Partial<ChillState>): ChillEntity {\r\n const nextState = this.sanitizeCrudState({\r\n ...this.readChillStateObject(entity),\r\n ...state\r\n });\r\n\r\n return {\r\n ...entity,\r\n chillState: {\r\n ...(this.readChillStateObject(entity) ?? {}),\r\n ...nextState,\r\n isNew: nextState.isNew,\r\n isDeleting: nextState.status === 'deleted'\r\n }\r\n };\r\n }\r\n\r\n private cloneEntity(entity: ChillEntity): ChillEntity {\r\n return {\r\n ...entity,\r\n properties: {\r\n ...(entity.properties ?? {})\r\n },\r\n ...(entity.chillState\r\n ? {\r\n chillState: { ...entity.chillState }\r\n }\r\n : {}),\r\n chillState: this.sanitizeCrudState({\r\n ...this.readChillStateObject(entity),\r\n isDeleting: this.readChillStateObject(entity).status === 'deleted'\r\n })\r\n };\r\n }\r\n\r\n private readCrudStatus(entity: ChillEntity): ChillEntityStatus | '' {\r\n const status = this.readChillStateObject(entity).status;\r\n return status === 'pristine' || status === 'draft' || status === 'dirty' || status === 'saving' || status === 'deleted' || status === 'error'\r\n ? status\r\n : '';\r\n }\r\n\r\n private mergeEntityProperty(entity: ChillEntity, propertyName: string, value: JsonValue, schema: ChillSchema): ChillEntity {\r\n const currentProperties = {\r\n ...(entity.properties ?? {})\r\n };\r\n\r\n return {\r\n ...entity,\r\n properties: {\r\n ...currentProperties,\r\n [propertyName]: this.chill.toJsonValue(schema, propertyName, value)\r\n }\r\n };\r\n }\r\n\r\n private async autocompleteAndValidateEntity(entity: ChillEntity): Promise<void> {\r\n const schema = this.resultSchema();\r\n if (!schema) {\r\n return;\r\n }\r\n\r\n let currentEntity = entity;\r\n try {\r\n const autocompletedEntity = await firstValueFrom(this.chill.autocomplete(this.normalizeCreateEntity(entity, schema) as JsonObject));\r\n const autocompletedFields = this.extractValidationEntityFields(autocompletedEntity, schema);\r\n if (Object.keys(autocompletedFields).length > 0) {\r\n currentEntity = this.withCrudState({\r\n ...currentEntity,\r\n properties: {\r\n ...(currentEntity.properties ?? {}),\r\n ...autocompletedFields\r\n }\r\n }, this.readChillStateObject(currentEntity));\r\n this.replaceEntity(currentEntity, entity);\r\n }\r\n } catch {\r\n currentEntity = this.findEntityByKey(currentEntity) ?? currentEntity;\r\n }\r\n\r\n const updatedEntity = this.withCrudState(currentEntity, {\r\n ...this.readChillStateObject(currentEntity),\r\n validationErrors: null,\r\n genericErrors: null\r\n });\r\n this.replaceEntity(updatedEntity, currentEntity);\r\n }\r\n\r\n private async validatePendingEntities(entities: ChillEntity[], schema: ChillSchema): Promise<boolean> {\r\n if (entities.length === 0) {\r\n return true;\r\n }\r\n\r\n let hasErrors = false;\r\n let firstInvalidIndex = -1;\r\n\r\n for (const [index, entity] of entities.entries()) {\r\n try {\r\n const validationErrors = await firstValueFrom(this.chill.validate(this.normalizeCreateEntity(entity, schema) as JsonObject));\r\n const partitionedErrors = this.partitionValidationErrors(validationErrors, schema);\r\n const hasEntityErrors = Object.keys(partitionedErrors.fieldErrors).length > 0 || partitionedErrors.genericErrors.length > 0;\r\n if (hasEntityErrors) {\r\n hasErrors = true;\r\n if (firstInvalidIndex < 0) {\r\n firstInvalidIndex = index;\r\n }\r\n }\r\n\r\n const nextEntity = this.withCrudState(entity, {\r\n ...this.readChillStateObject(entity),\r\n validationErrors: Object.keys(partitionedErrors.fieldErrors).length > 0 ? partitionedErrors.fieldErrors : null,\r\n genericErrors: partitionedErrors.genericErrors.length > 0 ? partitionedErrors.genericErrors : null\r\n });\r\n this.replaceEntity(nextEntity, entity);\r\n } catch (error: unknown) {\r\n hasErrors = true;\r\n if (firstInvalidIndex < 0) {\r\n firstInvalidIndex = index;\r\n }\r\n\r\n const nextEntity = this.withCrudState(entity, {\r\n ...this.readChillStateObject(entity),\r\n genericErrors: [this.chill.formatError(error)],\r\n validationErrors: null\r\n });\r\n this.replaceEntity(nextEntity, entity);\r\n }\r\n }\r\n\r\n if (firstInvalidIndex >= 0) {\r\n const firstInvalidEntity = entities[firstInvalidIndex];\r\n const absoluteIndex = this.results().findIndex((entity) => this.readEntityKey(entity) === this.readEntityKey(firstInvalidEntity));\r\n if (absoluteIndex >= 0) {\r\n this.currentPage.set(this.serverWindowStartPage() + Math.floor(absoluteIndex / this.pageSize));\r\n }\r\n }\r\n\r\n return !hasErrors;\r\n }\r\n\r\n private replaceEntity(nextEntity: ChillEntity, previousEntity: ChillEntity): void {\r\n const previousEntityKey = this.readEntityKey(previousEntity);\r\n this.results.update((current) => current.map((entity) => this.readEntityKey(entity) === previousEntityKey ? nextEntity : entity));\r\n }\r\n\r\n private findEntityByKey(entity: ChillEntity): ChillEntity | null {\r\n const entityKey = this.readEntityKey(entity);\r\n return this.results().find((candidate) => this.readEntityKey(candidate) === entityKey) ?? null;\r\n }\r\n\r\n // private readChillStateObject(entity: ChillEntity): ChillState {\r\n // const currentState = this.readChillStateValue(entity);\r\n // const chillState = this.readChillStateObject(entity);\r\n // const isNew = chillState?.['isNew'] === true;\r\n // const isDeleting = chillState?.['isDeleting'] === true;\r\n // if (currentState && typeof currentState === 'object' && !Array.isArray(currentState)) {\r\n // const typedState = currentState as ChillState;\r\n // const resolvedIsNew = typedState.isNew === true || isNew;\r\n // const resolvedStatus = typedState.status === 'pristine' || typedState.status === 'draft' || typedState.status === 'dirty' || typedState.status === 'saving' || typedState.status === 'deleted' || typedState.status === 'error'\r\n // ? typedState.status\r\n // : (resolvedIsNew ? 'draft' : isDeleting ? 'deleted' : 'pristine');\r\n // return {\r\n // isNew: resolvedIsNew,\r\n // status: resolvedStatus,\r\n // errorMessage: typedState.errorMessage ?? null,\r\n // validationErrors: typedState.validationErrors ?? null,\r\n // genericErrors: typedState.genericErrors ?? null,\r\n // dirtyProperties: Array.isArray(typedState.dirtyProperties)\r\n // ? typedState.dirtyProperties.filter((propertyName): propertyName is string => typeof propertyName === 'string' && propertyName.trim().length > 0)\r\n // : null\r\n // };\r\n // }\r\n\r\n // return {\r\n // isNew,\r\n // status: isNew ? 'draft' : isDeleting ? 'deleted' : 'pristine',\r\n // dirtyProperties: isNew ? [] : null\r\n // };\r\n // }\r\n\r\n private isNewEntity(entity: ChillEntity): boolean {\r\n return this.readChillStateObject(entity)?.isNew ?? false;\r\n }\r\n\r\n private prepareEntityForSchema(entity: ChillEntity, schema: ChillSchema, isNew: boolean = false): ChillEntity {\r\n const clonedEntity = this.cloneEntity(entity);\r\n const nextProperties: Record<string, JsonValue> = {\r\n ...(isNew ? this.defaultEntityValues() : {}),\r\n ...(isNew ? this.fixedEntityValues() : {}),\r\n ...(clonedEntity.properties ?? {})\r\n };\r\n\r\n for (const property of schema.properties ?? []) {\r\n if (property.name in nextProperties) {\r\n continue;\r\n }\r\n\r\n nextProperties[property.name] = this.readEntityPropertyValue(clonedEntity, property.name) ?? null;\r\n\r\n if (!property.isNullable && nextProperties[property.name] === null)\r\n {\r\n if (property.propertyType == CHILL_PROPERTY_TYPE.Boolean)\r\n nextProperties[property.name] = false;\r\n else if (property.propertyType == CHILL_PROPERTY_TYPE.Integer)\r\n nextProperties[property.name] = 0;\r\n else if (property.propertyType == CHILL_PROPERTY_TYPE.Decimal)\r\n nextProperties[property.name] = 0;\r\n else if (property.propertyType == CHILL_PROPERTY_TYPE.String)\r\n nextProperties[property.name] = '';\r\n }\r\n\r\n }\r\n\r\n return {\r\n ...clonedEntity,\r\n chillType: this.readStringValue(clonedEntity['chillType']) || schema.chillType?.trim() || this.querySchema()?.queryRelatedChillType?.trim() || '',\r\n properties: nextProperties\r\n };\r\n }\r\n\r\n private readEntityPropertyValue(entity: ChillEntity, propertyName: string): JsonValue | undefined {\r\n const properties = entity.properties;\r\n if (properties && propertyName in properties) {\r\n return properties[propertyName];\r\n }\r\n\r\n if (propertyName in entity) {\r\n return entity[propertyName];\r\n }\r\n\r\n const pascalCaseName = propertyName.length > 0\r\n ? `${propertyName[0].toUpperCase()}${propertyName.slice(1)}`\r\n : propertyName;\r\n return entity[pascalCaseName];\r\n }\r\n\r\n private sanitizeCrudState(state: Record<string, JsonValue | undefined>): ChillState {\r\n return Object.fromEntries(\r\n Object.entries(state).filter(([, value]) => value !== undefined)\r\n ) as ChillState;\r\n }\r\n\r\n private normalizeServerEntity(entity: ChillEntity): ChillEntity {\r\n return this.withCrudState(entity, {\r\n isNew: false,\r\n status: 'pristine',\r\n dirtyProperties: null,\r\n validationErrors: null,\r\n genericErrors: null,\r\n errorMessage: null,\r\n ignoreNotificationsUntil: null\r\n });\r\n }\r\n\r\n private prepareDialogEntity(entity: ChillEntity, schema: ChillSchema): ChillEntity {\r\n const preparedEntity = this.prepareEntityForSchema(entity, schema);\r\n if (this.isNewEntity(entity)) {\r\n return this.withCrudState(preparedEntity, {\r\n ...this.readChillStateObject(preparedEntity),\r\n status: 'draft',\r\n dirtyProperties: this.normalizeDirtyProperties(this.readChillStateObject(preparedEntity).dirtyProperties),\r\n validationErrors: null,\r\n genericErrors: null,\r\n errorMessage: null,\r\n ignoreNotificationsUntil: null\r\n });\r\n }\r\n\r\n return this.withCrudState(preparedEntity, {\r\n ...this.readChillStateObject(preparedEntity),\r\n status: 'pristine',\r\n dirtyProperties: null,\r\n validationErrors: null,\r\n genericErrors: null,\r\n errorMessage: null,\r\n ignoreNotificationsUntil: null\r\n });\r\n }\r\n\r\n private prepareSavedDialogEntity(entity: ChillEntity, schema: ChillSchema): ChillEntity {\r\n return this.withCrudState(\r\n this.normalizeServerEntity(this.prepareEntityForSchema(entity, schema)),\r\n {\r\n ignoreNotificationsUntil: Date.now() + ENTITY_NOTIFICATION_IGNORE_WINDOW_MS\r\n }\r\n );\r\n }\r\n\r\n private readChillStateObject(entity: ChillEntity): ChillState {\r\n const chillState = entity['chillState'] as ChillState | null;\r\n return chillState && typeof chillState === 'object' && !Array.isArray(chillState)\r\n ? chillState as ChillState\r\n : { } as ChillState;\r\n }\r\n\r\n\r\n private normalizeDirtyProperties(propertyNames: string[] | null | undefined): string[] | null {\r\n const normalizedPropertyNames = (propertyNames ?? [])\r\n .map((propertyName) => propertyName.trim())\r\n .filter((propertyName) => propertyName.length > 0);\r\n return normalizedPropertyNames.length > 0\r\n ? [...new Set(normalizedPropertyNames)]\r\n : null;\r\n }\r\n\r\n private extractValidationEntityFields(source: JsonObject, schema: ChillSchema): Record<string, JsonValue> {\r\n const nextFields: Record<string, JsonValue> = {};\r\n for (const property of schema.properties ?? []) {\r\n const fieldName = property.name;\r\n const propertiesValue = source['properties'];\r\n if (propertiesValue && typeof propertiesValue === 'object' && !Array.isArray(propertiesValue) && fieldName in propertiesValue) {\r\n nextFields[fieldName] = (propertiesValue as Record<string, JsonValue>)[fieldName];\r\n continue;\r\n }\r\n\r\n const pascalPropertiesValue = source['Properties'];\r\n if (pascalPropertiesValue && typeof pascalPropertiesValue === 'object' && !Array.isArray(pascalPropertiesValue) && fieldName in pascalPropertiesValue) {\r\n nextFields[fieldName] = (pascalPropertiesValue as Record<string, JsonValue>)[fieldName];\r\n }\r\n }\r\n return nextFields;\r\n }\r\n\r\n private partitionValidationErrors(\r\n errors: ChillValidationError[],\r\n schema: ChillSchema\r\n ): { fieldErrors: Record<string, string>; genericErrors: string[] } {\r\n const propertyNameMap = new Map(\r\n (schema.properties ?? [])\r\n .map((property) => property.name.trim())\r\n .filter((propertyName) => propertyName.length > 0)\r\n .map((propertyName) => [propertyName.toLowerCase(), propertyName] as const)\r\n );\r\n const fieldErrors: Record<string, string> = {};\r\n const genericErrors: string[] = [];\r\n\r\n for (const error of errors) {\r\n const fieldName = typeof error.fieldName === 'string' ? error.fieldName.trim() : '';\r\n const message = typeof error.message === 'string' ? error.message.trim() : '';\r\n if (!message) {\r\n continue;\r\n }\r\n\r\n const resolvedFieldName = fieldName ? propertyNameMap.get(fieldName.toLowerCase()) : undefined;\r\n if (resolvedFieldName) {\r\n fieldErrors[resolvedFieldName] = fieldErrors[resolvedFieldName]\r\n ? `${fieldErrors[resolvedFieldName]} ${message}`\r\n : message;\r\n continue;\r\n }\r\n\r\n genericErrors.push(message);\r\n }\r\n\r\n return { fieldErrors, genericErrors };\r\n }\r\n\r\n private extractEntities(response: JsonObject): ChillEntity[] {\r\n const candidates = [\r\n response,\r\n response['results'],\r\n response['entities'],\r\n response['items'],\r\n response['value'],\r\n response['data']\r\n ];\r\n\r\n for (const candidate of candidates) {\r\n const entities = this.toEntityArray(candidate);\r\n if (entities.length > 0) {\r\n return entities.map((entity) => this.normalizeServerEntity(entity));\r\n }\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private toEntityArray(value: JsonValue | undefined): ChillEntity[] {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n return value.filter((item): item is ChillEntity => this.isJsonObject(item));\r\n }\r\n\r\n private isJsonObject(value: JsonValue | undefined): value is JsonObject {\r\n return !!value && typeof value === 'object' && !Array.isArray(value);\r\n }\r\n\r\n private readStringValue(value: JsonValue | undefined): string {\r\n return typeof value === 'string'\r\n ? value.trim()\r\n : '';\r\n }\r\n\r\n private configuredResultChillType(): string {\r\n return this.normalizedConfiguration().chillType?.trim() || '';\r\n }\r\n\r\n private configuredQueryChillType(): string {\r\n return this.normalizedConfiguration().chillQuery?.trim() || '';\r\n }\r\n\r\n private defaultEntityValues(): Record<string, JsonValue> {\r\n return this.resolveConfigRecord(this.normalizedConfiguration().defaultValues);\r\n }\r\n\r\n private fixedEntityValues(): Record<string, JsonValue> {\r\n return this.resolveConfigRecord(this.normalizedConfiguration().fixedValues);\r\n }\r\n\r\n private defaultQueryValues(): Record<string, JsonValue> {\r\n return this.resolveConfigRecord(this.normalizedConfiguration().defaultQueryValues);\r\n }\r\n\r\n private fixedQueryValues(): Record<string, JsonValue> {\r\n return this.resolveConfigRecord(this.normalizedConfiguration().fixedQueryValues);\r\n }\r\n\r\n private relations(): CrudPageComponentConfiguration[] {\r\n return this.normalizedConfiguration().relations ?? [];\r\n }\r\n\r\n private normalizeComponentConfiguration(configuration: CrudPageComponentConfiguration | null): CrudPageComponentConfiguration {\r\n const normalizedConfiguration = new CrudPageComponentConfiguration();\r\n if (!configuration) {\r\n return normalizedConfiguration;\r\n }\r\n\r\n normalizedConfiguration.chillType = this.readConfigString(configuration['chillType']);\r\n normalizedConfiguration.chillQuery = this.readConfigString(configuration['chillQuery']) || null;\r\n normalizedConfiguration.viewCode = this.readConfigString(configuration['viewCode']) || null;\r\n normalizedConfiguration.disableAdd = this.readConfigBoolean(configuration['disableAdd']);\r\n normalizedConfiguration.disableCreate = this.readConfigBoolean(configuration['disableCreate']);\r\n normalizedConfiguration.disableEdit = this.readConfigBoolean(configuration['disableEdit']);\r\n normalizedConfiguration.disableInlineEdit = this.readConfigBoolean(configuration['disableInlineEdit']);\r\n normalizedConfiguration.disableDelete = this.readConfigBoolean(configuration['disableDelete']);\r\n normalizedConfiguration.relationLabel = this.readRelationLabel(configuration['relationLabel']);\r\n normalizedConfiguration.defaultValues = this.readConfigRecord(configuration['defaultValues']);\r\n normalizedConfiguration.fixedValues = this.readConfigRecord(configuration['fixedValues']);\r\n normalizedConfiguration.fixedQueryValues = this.readConfigRecord(configuration['fixedQueryValues']);\r\n normalizedConfiguration.defaultQueryValues = this.readConfigRecord(configuration['defaultQueryValues']);\r\n normalizedConfiguration.relations = this.readRelationConfigurations(configuration.relations);\r\n return normalizedConfiguration;\r\n }\r\n\r\n private readConfigString(value: unknown): string {\r\n return typeof value === 'string'\r\n ? value.trim()\r\n : '';\r\n }\r\n\r\n private readConfigBoolean(value: unknown): boolean {\r\n return value === true;\r\n }\r\n\r\n private readConfigRecord(value: unknown): Record<string, JsonValue> {\r\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\r\n return {};\r\n }\r\n\r\n return Object.fromEntries(\r\n Object.entries(value as Record<string, JsonValue>)\r\n .map(([key, entryValue]) => [key.trim(), entryValue] as const)\r\n .filter(([key]) => key.length > 0)\r\n );\r\n }\r\n\r\n private readRelationLabel(value: unknown): string | I18nText | null {\r\n if (typeof value === 'string') {\r\n const normalizedValue = value.trim();\r\n return normalizedValue ? normalizedValue : null;\r\n }\r\n\r\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\r\n return null;\r\n }\r\n\r\n const source = value as Record<string, unknown>;\r\n const labelGuid = this.readConfigString(source['labelGuid'] ?? source['guid']);\r\n const primaryDefaultText = this.readConfigString(source['primaryDefaultText'] ?? source['primaryText']);\r\n const secondaryDefaultText = this.readConfigString(source['secondaryDefaultText'] ?? source['secondaryText']);\r\n if (!labelGuid || !primaryDefaultText || !secondaryDefaultText) {\r\n return null;\r\n }\r\n\r\n return {\r\n labelGuid,\r\n primaryDefaultText,\r\n secondaryDefaultText\r\n };\r\n }\r\n\r\n private readRelationConfigurations(value: unknown): CrudPageComponentConfiguration[] {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n return value\r\n .map((entry) => this.normalizeComponentConfiguration(this.isJsonObject(entry)\r\n ? entry as unknown as CrudPageComponentConfiguration\r\n : null))\r\n .filter((entry) => entry.chillType.trim().length > 0);\r\n }\r\n\r\n private createRelationRowActions(): ChillTableRowAction[] {\r\n return this.relations().map((relation, index) => {\r\n const relationLabel = relation.relationLabel;\r\n const plainLabel = this.relationActionLabel(relation, index);\r\n\r\n return {\r\n icon: 'account_tree',\r\n iconClass: 'material-symbol-icon',\r\n ...(typeof relationLabel === 'string'\r\n ? { label: relationLabel.trim() }\r\n : relationLabel\r\n ? {\r\n labelGuid: relationLabel.labelGuid,\r\n primaryDefaultText: relationLabel.primaryDefaultText,\r\n secondaryDefaultText: relationLabel.secondaryDefaultText\r\n }\r\n : {}),\r\n ariaLabel: plainLabel,\r\n disabled: (entity) => this.isSaving() || this.isDeletedEntity(entity),\r\n handler: (entity) => this.openRelation(entity, relation)\r\n };\r\n });\r\n }\r\n\r\n private createAttachmentRowActions(): ChillTableRowAction[] {\r\n if (this.resultSchema()?.handleAttachments !== true || this.isAttachmentCrud()) {\r\n return [];\r\n }\r\n\r\n return [{\r\n icon: 'attach_file',\r\n iconClass: 'material-symbol-icon',\r\n labelGuid: '7A673274-5786-4E58-BA33-65D06BF6B9F3',\r\n primaryDefaultText: 'Attachments',\r\n secondaryDefaultText: 'Allegati',\r\n ariaLabel: this.chill.T('7A673274-5786-4E58-BA33-65D06BF6B9F3', 'Attachments', 'Allegati'),\r\n disabled: (entity) => this.isSaving()\r\n || this.isDeletedEntity(entity)\r\n || this.isNewEntity(entity)\r\n || !this.canOpenAttachmentCrud(entity),\r\n handler: (entity) => this.openAttachmentCrud(entity)\r\n }];\r\n }\r\n\r\n private createAttachmentDownloadRowActions(): ChillTableRowAction[] {\r\n if (!this.isAttachmentCrud()) {\r\n return [];\r\n }\r\n\r\n return [{\r\n icon: 'download',\r\n iconClass: 'material-symbol-icon',\r\n labelGuid: '3E0E4E83-A2FE-4C08-B389-0C3B26A0CCFF',\r\n primaryDefaultText: 'Download',\r\n secondaryDefaultText: 'Scarica',\r\n ariaLabel: this.chill.T('3E0E4E83-A2FE-4C08-B389-0C3B26A0CCFF', 'Download', 'Scarica'),\r\n disabled: (entity: ChillEntity) => this.isSaving() || this.isDeletedEntity(entity) || !this.readEntityKey(entity),\r\n handler: (entity: ChillEntity) => void this.downloadAttachment(entity)\r\n }];\r\n }\r\n\r\n private openRelation(entity: ChillEntity, relation: CrudPageComponentConfiguration): void {\r\n const resolvedRelation = this.resolveRelationConfiguration(relation, entity);\r\n const chillType = resolvedRelation.chillType.trim();\r\n if (!chillType) {\r\n return;\r\n }\r\n\r\n this.workspace.openCrudTask({\r\n chillType,\r\n queryChillType: resolvedRelation.chillQuery,\r\n viewCode: resolvedRelation.viewCode,\r\n displayName: this.resolveRelationLabel(resolvedRelation) || undefined,\r\n componentConfiguration: resolvedRelation,\r\n parentTaskId: this.workspace.activeTask()?.id\r\n });\r\n }\r\n\r\n private canOpenAttachmentCrud(entity: ChillEntity): boolean {\r\n return !!this.readEntityKey(entity) && !!this.readEntityChillType(entity);\r\n }\r\n\r\n private openAttachmentCrud(entity: ChillEntity): void {\r\n const attachToGuid = this.readEntityKey(entity);\r\n const attachToChillType = this.readEntityChillType(entity);\r\n if (!attachToGuid || !attachToChillType) {\r\n return;\r\n }\r\n\r\n const attachmentConfiguration: CrudPageComponentConfiguration = {\r\n chillType: FILE_METADATA_ENTITY_CHILL_TYPE,\r\n chillQuery: FILE_METADATA_QUERY_CHILL_TYPE,\r\n disableAdd: false,\r\n disableCreate: true,\r\n disableEdit: false,\r\n disableInlineEdit: false,\r\n disableDelete: false,\r\n fixedQueryValues: {\r\n AttachToChillType: attachToChillType,\r\n AttachToGuid: attachToGuid\r\n },\r\n defaultQueryValues: {\r\n AttachToChillType: attachToChillType,\r\n AttachToGuid: attachToGuid\r\n },\r\n defaultValues: {\r\n AttachToChillType: attachToChillType,\r\n AttachToGuid: attachToGuid\r\n }\r\n };\r\n\r\n this.workspace.openCrudTask({\r\n chillType: FILE_METADATA_ENTITY_CHILL_TYPE,\r\n queryChillType: FILE_METADATA_QUERY_CHILL_TYPE,\r\n displayName: this.chill.T('7A673274-5786-4E58-BA33-65D06BF6B9F3', 'Attachments', 'Allegati'),\r\n componentConfiguration: attachmentConfiguration,\r\n parentTaskId: this.workspace.activeTask()?.id\r\n });\r\n }\r\n\r\n private resolveRelationConfiguration(\r\n configuration: CrudPageComponentConfiguration,\r\n entity: ChillEntity\r\n ): CrudPageComponentConfiguration {\r\n return {\r\n chillType: configuration.chillType,\r\n chillQuery: configuration.chillQuery ?? null,\r\n viewCode: configuration.viewCode ?? null,\r\n disableAdd: configuration.disableAdd === true,\r\n disableCreate: configuration.disableCreate === true,\r\n disableEdit: configuration.disableEdit === true,\r\n disableInlineEdit: configuration.disableInlineEdit === true,\r\n disableDelete: configuration.disableDelete === true,\r\n relationLabel: configuration.relationLabel ?? null,\r\n defaultValues: {\r\n ...this.resolveConfigRecord(configuration.defaultValues, entity)\r\n },\r\n fixedValues: {\r\n ...this.resolveConfigRecord(configuration.fixedValues, entity)\r\n },\r\n fixedQueryValues: {\r\n ...this.resolveConfigRecord(configuration.fixedQueryValues, entity)\r\n },\r\n defaultQueryValues: {\r\n ...this.resolveConfigRecord(configuration.defaultQueryValues, entity)\r\n },\r\n relations: (configuration.relations ?? []).map((relation) => this.resolveRelationConfiguration(relation, entity))\r\n };\r\n }\r\n\r\n private relationActionLabel(relation: CrudPageComponentConfiguration, index: number): string {\r\n const relationLabel = this.resolveRelationLabel(relation);\r\n if (relationLabel) {\r\n return relationLabel;\r\n }\r\n\r\n const chillType = relation.chillType.trim();\r\n return chillType\r\n ? this.chill.T(\r\n `crud-relation-${index + 1}`,\r\n `Open related ${chillType}`,\r\n `Apri collegata ${chillType}`\r\n )\r\n : this.chill.T(\r\n `crud-relation-${index + 1}`,\r\n 'Open related CRUD',\r\n 'Apri CRUD collegata'\r\n );\r\n }\r\n\r\n private resolveRelationLabel(relation: CrudPageComponentConfiguration): string {\r\n const relationLabel = relation.relationLabel;\r\n if (typeof relationLabel === 'string') {\r\n return relationLabel.trim();\r\n }\r\n\r\n if (relationLabel && typeof relationLabel === 'object') {\r\n return this.chill.T(\r\n relationLabel.labelGuid,\r\n relationLabel.primaryDefaultText,\r\n relationLabel.secondaryDefaultText\r\n );\r\n }\r\n\r\n return '';\r\n }\r\n\r\n private resolveConfigRecord(\r\n value: Record<string, JsonValue> | null | undefined,\r\n entity?: ChillEntity | null\r\n ): Record<string, JsonValue> {\r\n if (!value) {\r\n return {};\r\n }\r\n\r\n return Object.fromEntries(\r\n Object.entries(value).map(([key, entryValue]) => [key, this.resolveConfigValue(entryValue, entity)] as const)\r\n );\r\n }\r\n\r\n private readAttachmentTargetInfo(): { attachToChillType: string; attachToGuid: string } {\r\n const fixedQueryValues = this.fixedQueryValues();\r\n const defaultQueryValues = this.defaultQueryValues();\r\n const queryProperties = this.queryModel()?.properties ?? {};\r\n\r\n const attachToChillType = this.readStringValue(\r\n fixedQueryValues['AttachToChillType']\r\n ?? defaultQueryValues['AttachToChillType']\r\n ?? queryProperties['AttachToChillType']\r\n ?? queryProperties['attachToChillType']\r\n );\r\n const attachToGuid = this.readStringValue(\r\n fixedQueryValues['AttachToGuid']\r\n ?? defaultQueryValues['AttachToGuid']\r\n ?? queryProperties['AttachToGuid']\r\n ?? queryProperties['attachToGuid']\r\n );\r\n\r\n return {\r\n attachToChillType,\r\n attachToGuid\r\n };\r\n }\r\n\r\n private resolveConfigValue(value: JsonValue, entity?: ChillEntity | null): JsonValue {\r\n if (typeof value !== 'string') {\r\n return value;\r\n }\r\n\r\n const placeholderMatch = /^@\\{(.+)\\}$/.exec(value.trim());\r\n if (!placeholderMatch) {\r\n return value;\r\n }\r\n\r\n const token = placeholderMatch[1].trim();\r\n if (!token) {\r\n return value;\r\n }\r\n\r\n if (!entity) {\r\n return value;\r\n }\r\n\r\n if (token.toLowerCase() === 'mock') {\r\n return this.createEntityMock(entity);\r\n }\r\n\r\n return this.readEntityPropertyValue(entity, token) ?? null;\r\n }\r\n\r\n private async downloadAttachment(entity: ChillEntity): Promise<void> {\r\n const attachmentGuid = this.readEntityKey(entity);\r\n if (!attachmentGuid) {\r\n return;\r\n }\r\n\r\n try {\r\n const blob = await firstValueFrom(this.chill.downloadAttachment(attachmentGuid));\r\n const downloadUrl = URL.createObjectURL(blob);\r\n const anchor = document.createElement('a');\r\n anchor.href = downloadUrl;\r\n anchor.download = this.readAttachmentFileName(entity);\r\n anchor.style.display = 'none';\r\n document.body.appendChild(anchor);\r\n anchor.click();\r\n anchor.remove();\r\n URL.revokeObjectURL(downloadUrl);\r\n } catch (error) {\r\n this.errorMessage.set(this.chill.formatError(error));\r\n }\r\n }\r\n\r\n private readAttachmentFileName(entity: ChillEntity): string {\r\n const originalFilename = this.readStringValue(this.readEntityPropertyValue(entity, 'OriginalFilename'));\r\n if (originalFilename) {\r\n return originalFilename;\r\n }\r\n\r\n const title = this.readStringValue(this.readEntityPropertyValue(entity, 'Title'));\r\n return title || `${this.readEntityKey(entity) || 'attachment'}.bin`;\r\n }\r\n\r\n private createEntityMock(entity: ChillEntity): ChillEntity {\r\n const clonedEntity = this.cloneEntity(entity);\r\n const guid = this.readEntityKey(clonedEntity);\r\n const chillType = this.readStringValue(clonedEntity['chillType']);\r\n const shortLabel = this.readStringValue(this.readEntityPropertyValue(clonedEntity, 'shortLabel'));\r\n const label = this.readStringValue(this.readEntityPropertyValue(clonedEntity, 'label'));\r\n return {\r\n ...(guid ? { guid } : {}),\r\n ...(chillType ? { chillType } : {}),\r\n ...(shortLabel ? { shortLabel } : {}),\r\n ...(label ? { label } : {}),\r\n properties: {\r\n ...(clonedEntity.properties ?? {})\r\n }\r\n };\r\n }\r\n\r\n private isQuerySchema(item: ChillSchemaListItem): boolean {\r\n const type = item.type?.trim().toLowerCase() ?? '';\r\n const name = item.name?.trim().toLowerCase() ?? '';\r\n const chillType = item.chillType?.trim().toLowerCase() ?? '';\r\n\r\n return type === 'query'\r\n || name.endsWith('query')\r\n || chillType.includes('.query.')\r\n || chillType.endsWith('.query');\r\n }\r\n\r\n schemaLabel(item: ChillSchemaListItem): string {\r\n return item.displayName?.trim() || item.name?.trim() || item.chillType?.trim() || '';\r\n }\r\n\r\n private normalizeViewCode(value: string | null | undefined): string {\r\n const normalizedValue = value?.trim();\r\n return normalizedValue ? normalizedValue : DEFAULT_VIEW_CODE;\r\n }\r\n\r\n private isEntitySelected(entity: ChillEntity): boolean {\r\n const entityKey = this.readEntityKey(entity);\r\n return !!entityKey && this.selectedEntityKeys().includes(entityKey);\r\n }\r\n\r\n private toggleSelectedEntity(entity: ChillEntity, selected: boolean): void {\r\n const entityKey = this.readEntityKey(entity);\r\n if (!entityKey) {\r\n return;\r\n }\r\n\r\n this.selectedEntityKeys.update((current) => {\r\n if (this.multipleSelection()) {\r\n if (selected) {\r\n return current.includes(entityKey) ? current : [...current, entityKey];\r\n }\r\n\r\n return current.filter((value) => value !== entityKey);\r\n }\r\n\r\n return selected ? [entityKey] : [];\r\n });\r\n }\r\n\r\n private selectedEntity(): ChillEntity | null {\r\n return this.selectedEntities()[0] ?? null;\r\n }\r\n\r\n private selectedEntities(): ChillEntity[] {\r\n const selectedEntityKeys = this.selectedEntityKeys();\r\n if (selectedEntityKeys.length === 0) {\r\n return [];\r\n }\r\n\r\n const selectedEntityMap = new Map<string, ChillEntity>();\r\n for (const entity of this.results()) {\r\n const entityKey = this.readEntityKey(entity);\r\n if (entityKey && selectedEntityKeys.includes(entityKey)) {\r\n selectedEntityMap.set(entityKey, entity);\r\n }\r\n }\r\n\r\n for (const entity of this.readInitialSelectedEntities()) {\r\n const entityKey = this.readEntityKey(entity);\r\n if (entityKey && selectedEntityKeys.includes(entityKey) && !selectedEntityMap.has(entityKey)) {\r\n selectedEntityMap.set(entityKey, entity);\r\n }\r\n }\r\n\r\n return selectedEntityKeys\r\n .map((entityKey) => selectedEntityMap.get(entityKey) ?? null)\r\n .filter((entity): entity is ChillEntity => entity !== null);\r\n }\r\n\r\n private readInitialSelectedEntityKeys(): string[] {\r\n const selectedKeys = this.readInitialSelectedEntities()\r\n .map((entity) => this.readEntityKey(entity))\r\n .filter((entityKey) => entityKey.length > 0);\r\n return [...new Set(selectedKeys)];\r\n }\r\n\r\n private readInitialSelectedEntities(): ChillEntity[] {\r\n if (this.multipleSelection()) {\r\n return this.initialSelectedEntities();\r\n }\r\n\r\n const initialSelectedEntity = this.initialSelectedEntity();\r\n return initialSelectedEntity ? [initialSelectedEntity] : [];\r\n }\r\n\r\n // #endregion\r\n}\r\n","<section class=\"crud-page\">\r\n @if (errorMessage()) {\r\n <div class=\"notice error notice-dismissible\">\r\n <span>{{ errorMessage() }}</span>\r\n <button type=\"button\" class=\"notice-close\" (click)=\"clearErrorMessage()\" [attr.aria-label]=\"chill.T('0C4C06EF-A105-468F-B1E2-AEA8EB96A4DC', 'Dismiss error', 'Chiudi errore')\">x</button>\r\n </div>\r\n }\r\n\r\n @if (validationErrorMessage()) {\r\n <div class=\"notice error\">\r\n <span>{{ validationErrorMessage() }}</span>\r\n </div>\r\n }\r\n\r\n @if (isLoadingSchemaList()) {\r\n <div class=\"notice\"><app-chill-i18n-label [labelGuid]=\"'77C1E6C4-D380-40C8-9BA8-31A611A9DA15'\" [primaryDefaultText]=\"'Loading query schemas...'\" [secondaryDefaultText]=\"'Caricamento degli schemi di query...'\" /></div>\r\n } @else if (isLoadingSchema()) {\r\n <div class=\"notice\"><app-chill-i18n-label [labelGuid]=\"'FE514A29-58AB-4842-ABDB-D348D05385E8'\" [primaryDefaultText]=\"'Loading selected schema...'\" [secondaryDefaultText]=\"'Caricamento dello schema selezionato...'\" /></div>\r\n } @else if (querySchema()) {\r\n <section class=\"panel\">\r\n <section class=\"content\">\r\n @if (isSearching()) {\r\n <div class=\"notice\">{{ chill.T('6734CE10-8F49-4E20-8ADB-C6AEF407399E', 'Running query...', 'Esecuzione query in corso...') }}</div>\r\n }\r\n\r\n <app-chill-table\r\n [schema]=\"resultSchema()\"\r\n [entities]=\"pagedResults()\"\r\n [selectionColumn]=\"selectionColumn()\"\r\n [rowActions]=\"activeRowActions()\"\r\n [ordering]=\"queryModel()?.ordering ?? null\"\r\n [enableInlineEditing]=\"!isInlineEditDisabled()\"\r\n [readonlyPropertyNames]=\"readonlyEntityPropertyNames()\"\r\n [showSchemaHeader]=\"showTableHeader()\"\r\n [showMobileTaskClose]=\"showMobileTaskClose()\"\r\n [enableFullTextSearch]=\"canOpenSearchDialog()\"\r\n [fullTextSearch]=\"currentFullTextSearch()\"\r\n [validationFocus]=\"validationFocus()\"\r\n (cellEditCommit)=\"handleInlineCellEdit($event)\"\r\n (fullTextSearchChange)=\"applyFullTextSearch($event)\"\r\n (mobileTaskClose)=\"closeActiveTask()\"\r\n (schemaUpdated)=\"handleResultSchemaUpdated($event)\"\r\n (sortChange)=\"applyOrdering($event)\" />\r\n\r\n @if (canGoToPreviousPage() || canGoToNextPage()) {\r\n <footer class=\"pagination\">\r\n <button type=\"button\" (click)=\"goToPreviousPage()\" [disabled]=\"!canGoToPreviousPage()\">\r\n {{ chill.T('15FA9D58-C1F9-4A70-8B67-C2D4232D6B89', 'Previous', 'Precedente') }}\r\n </button>\r\n <p>{{ pageLabel() }}</p>\r\n <button type=\"button\" (click)=\"goToNextPage()\" [disabled]=\"!canGoToNextPage()\">\r\n {{ chill.T('F42E54FE-F561-4251-B284-28B9230D70F7', 'Next', 'Successiva') }}\r\n </button>\r\n </footer>\r\n }\r\n </section>\r\n </section>\r\n }\r\n</section>\r\n","import { Component, OnDestroy, effect, inject, input, viewChild } from '@angular/core';\r\nimport { CrudPageComponent, type CrudPageComponentConfiguration } from '../../pages/crud/crud-page.component';\r\nimport type { ChillEntity } from '../../models/chill-schema.models';\r\nimport type { WorkspaceTaskComponentInterface, WorkspaceTaskConfiguration } from '../../models/workspace-task.models';\r\nimport { ChillService } from '../../services/chill.service';\r\nimport { WorkspaceDialogService } from '../../services/workspace-dialog.service';\r\nimport { WorkspaceToolbarService } from '../../services/workspace-toolbar.service';\r\n\r\n@Component({\r\n selector: 'app-crud-task',\r\n standalone: true,\r\n imports: [CrudPageComponent],\r\n template: `\r\n <section class=\"crud-task\">\r\n <app-crud-page\r\n [selectionEnabled]=\"selectionEnabled()\"\r\n [multipleSelection]=\"multipleSelection()\"\r\n [initialSelectedEntity]=\"initialSelectedEntity()\"\r\n [initialSelectedEntities]=\"initialSelectedEntities()\"\r\n [componentConfiguration]=\"resolvedComponentConfiguration()\"\r\n [showTableHeader]=\"toolbarScope() !== 'dialog'\"\r\n [showMobileTaskClose]=\"toolbarScope() !== 'dialog'\" />\r\n </section>\r\n `,\r\n styles: `\r\n :host,\r\n .crud-task {\r\n display: block;\r\n height: 100%;\r\n min-height: 0;\r\n }\r\n `\r\n})\r\nexport class CrudTaskComponent implements WorkspaceTaskComponentInterface, OnDestroy {\r\n static getComponentConfigurationJsonExample(): WorkspaceTaskConfiguration | null {\r\n return {\r\n chillType: '',\r\n chillQuery: null,\r\n viewCode: 'default',\r\n disableAdd: false,\r\n disableCreate: false,\r\n disableEdit: false,\r\n disableInlineEdit: false,\r\n disableDelete: false,\r\n relationLabel: {\r\n labelGuid: \"\",\r\n primaryDefaultText: \"\",\r\n secondaryDefaultText: \"\"\r\n },\r\n defaultValues: {},\r\n fixedQueryValues: {},\r\n defaultQueryValues: {},\r\n relations: []\r\n };\r\n }\r\n\r\n readonly chill = inject(ChillService);\r\n readonly dialog = inject(WorkspaceDialogService, { optional: true });\r\n readonly toolbar = inject(WorkspaceToolbarService);\r\n readonly selectionEnabled = input(false);\r\n readonly multipleSelection = input(false);\r\n readonly initialSelectedEntity = input<ChillEntity | null>(null);\r\n readonly initialSelectedEntities = input<ChillEntity[]>([]);\r\n readonly componentConfiguration = input<WorkspaceTaskConfiguration | null>(null);\r\n readonly taskTitle = input('');\r\n readonly taskDescription = input('');\r\n readonly toolbarScope = input('workspace');\r\n readonly visible = input(true);\r\n private readonly page = viewChild(CrudPageComponent);\r\n\r\n resolvedComponentConfiguration(): CrudPageComponentConfiguration | null {\r\n const configuration = this.componentConfiguration();\r\n if (!configuration) {\r\n return null;\r\n }\r\n\r\n return configuration as unknown as CrudPageComponentConfiguration;\r\n }\r\n\r\n constructor() {\r\n effect(() => {\r\n const page = this.page();\r\n const toolbarScope = this.toolbarScope();\r\n if (!page || !this.visible()) {\r\n this.toolbar.clearButtons(toolbarScope);\r\n return;\r\n }\r\n\r\n this.toolbar.setButtons([\r\n {\r\n id: 'crud-search',\r\n labelGuid: 'D513421E-1C00-425E-A89B-E736A440474F',\r\n primaryDefaultText: 'Search',\r\n secondaryDefaultText: 'Cerca',\r\n ariaLabel: this.chill.T('44972777-6760-4F48-BE39-B504E4467150', 'Search', 'Cerca'),\r\n icon: 'filter_alt',\r\n iconClass: 'material-symbol-icon',\r\n action: () => page.openSearchDialog(),\r\n disabled: !page.canOpenSearchDialog()\r\n },\r\n ...(page.isAttachmentCrud() ? [{\r\n id: 'crud-add-attachment',\r\n labelGuid: 'D31B58D6-32F2-443B-AD18-7BFA76AF2FB6',\r\n primaryDefaultText: 'Add attachment',\r\n secondaryDefaultText: 'Aggiungi allegato',\r\n ariaLabel: this.chill.T('D31B58D6-32F2-443B-AD18-7BFA76AF2FB6', 'Add attachment', 'Aggiungi allegato'),\r\n icon: 'upload_file',\r\n iconClass: 'material-symbol-icon',\r\n action: () => void page.openAttachmentUploadDialog(),\r\n disabled: !page.canOpenAttachmentUploadDialog() || page.isSaving()\r\n }] : []),\r\n ...(page.isAddDisabled() ? [] : [{\r\n id: 'crud-add',\r\n labelGuid: '23A5536E-8A94-4469-977C-D3BB57E5E621',\r\n primaryDefaultText: 'Add',\r\n secondaryDefaultText: 'Aggiungi',\r\n ariaLabel: this.chill.T('23A5536E-8A94-4469-977C-D3BB57E5E621', 'Add', 'Aggiungi'),\r\n icon: 'add',\r\n iconClass: 'material-symbol-icon',\r\n action: () => page.add(),\r\n disabled: !page.canAddEntity() || page.isSaving()\r\n }]),\r\n {\r\n id: 'crud-save-draft',\r\n labelGuid: 'B8076F7C-34A3-4C28-B4FC-F7D673C0D088',\r\n primaryDefaultText: 'Save',\r\n secondaryDefaultText: 'Salva',\r\n ariaLabel: this.chill.T('B8076F7C-34A3-4C28-B4FC-F7D673C0D088', 'Save', 'Salva'),\r\n icon: 'save',\r\n iconClass: 'material-symbol-icon',\r\n accent: page.hasPendingEntities(),\r\n action: () => void page.savePendingEntities(),\r\n disabled: !page.hasPendingEntities() || page.isSaving()\r\n }\r\n ], toolbarScope);\r\n });\r\n }\r\n\r\n submit(): void {\r\n if (this.selectionEnabled()) {\r\n this.dialog?.confirm(this.page()?.dialogResult() ?? null);\r\n return;\r\n }\r\n\r\n this.dialog?.confirm();\r\n }\r\n\r\n canDialogSubmit(): boolean {\r\n return this.selectionEnabled()\r\n ? (this.page()?.canConfirmSelection() ?? false)\r\n : true;\r\n }\r\n\r\n isAllSaved(): boolean {\r\n const page = this.page();\r\n if (!page) {\r\n return true;\r\n }\r\n\r\n return !page.isSaving() && !page.hasPendingEntities();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.toolbar.clearButtons(this.toolbarScope());\r\n }\r\n}\r\n","import { CommonModule, DOCUMENT } from '@angular/common';\r\nimport { Component, HostListener, OnDestroy, computed, effect, inject, input, signal } from '@angular/core';\r\nimport type { WorkspaceTaskComponentInterface, WorkspaceTaskConfiguration } from '../../models/workspace-task.models';\r\nimport { WorkspaceToolbarService } from '../../services/workspace-toolbar.service';\r\n\r\ninterface GoToUrlTaskConfiguration {\r\n url: string;\r\n target: string;\r\n}\r\n\r\ntype GoToUrlOpenState = 'pending' | 'opened' | 'blocked' | 'invalid';\r\n\r\n@Component({\r\n selector: 'app-goto-url-task',\r\n standalone: true,\r\n imports: [CommonModule],\r\n template: `\r\n <section class=\"goto-url-task\">\r\n <div class=\"goto-url-task__card\">\r\n <p class=\"goto-url-task__eyebrow\">GoToUrl</p>\r\n <h2>{{ heading() }}</h2>\r\n <p>{{ message() }}</p>\r\n\r\n @if (configuration(); as config) {\r\n <dl class=\"goto-url-task__details\">\r\n <div>\r\n <dt>URL</dt>\r\n <dd>{{ config.url }}</dd>\r\n </div>\r\n <div>\r\n <dt>Target</dt>\r\n <dd>{{ config.target }}</dd>\r\n </div>\r\n </dl>\r\n\r\n <a\r\n class=\"goto-url-task__link\"\r\n [href]=\"config.url\"\r\n [target]=\"config.target\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"openConfiguredUrl()\">\r\n Open link\r\n </a>\r\n }\r\n </div>\r\n </section>\r\n `,\r\n styles: `\r\n :host,\r\n .goto-url-task {\r\n display: block;\r\n height: 100%;\r\n min-height: 0;\r\n }\r\n\r\n .goto-url-task {\r\n display: grid;\r\n place-items: center;\r\n padding: 1.5rem;\r\n }\r\n\r\n .goto-url-task__card {\r\n width: min(100%, 38rem);\r\n display: grid;\r\n gap: 1rem;\r\n padding: 1.5rem;\r\n border: 1px solid var(--border-color);\r\n border-radius: 1rem;\r\n background: var(--surface-0);\r\n box-shadow: 0 1.25rem 2.5rem color-mix(in srgb, var(--shadow-color) 16%, transparent);\r\n }\r\n\r\n .goto-url-task__eyebrow,\r\n .goto-url-task__details dt {\r\n margin: 0;\r\n color: var(--text-muted);\r\n font-size: 0.8rem;\r\n font-weight: 700;\r\n letter-spacing: 0.08em;\r\n text-transform: uppercase;\r\n }\r\n\r\n .goto-url-task__card h2,\r\n .goto-url-task__card p,\r\n .goto-url-task__details,\r\n .goto-url-task__details dd {\r\n margin: 0;\r\n }\r\n\r\n .goto-url-task__details {\r\n display: grid;\r\n gap: 0.85rem;\r\n }\r\n\r\n .goto-url-task__details div {\r\n display: grid;\r\n gap: 0.25rem;\r\n padding: 0.85rem 1rem;\r\n border-radius: 0.85rem;\r\n background: color-mix(in srgb, var(--surface-1) 78%, transparent);\r\n }\r\n\r\n .goto-url-task__details dd {\r\n overflow-wrap: anywhere;\r\n color: var(--text-main);\r\n }\r\n\r\n .goto-url-task__link {\r\n justify-self: start;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 2.75rem;\r\n padding: 0.75rem 1rem;\r\n border-radius: 999px;\r\n background: linear-gradient(135deg, var(--accent), var(--accent-strong));\r\n color: #f8fffd;\r\n font-weight: 700;\r\n text-decoration: none;\r\n }\r\n `\r\n})\r\nexport class GoToUrlTaskComponent implements WorkspaceTaskComponentInterface, OnDestroy {\r\n static getComponentConfigurationJsonExample(): WorkspaceTaskConfiguration | null {\r\n return {\r\n url: 'https://example.com',\r\n target: '_blank'\r\n };\r\n }\r\n\r\n private readonly document = inject(DOCUMENT);\r\n private readonly toolbar = inject(WorkspaceToolbarService);\r\n\r\n readonly componentConfiguration = input<WorkspaceTaskConfiguration | null>(null);\r\n readonly toolbarScope = input('workspace');\r\n readonly visible = input(true);\r\n\r\n readonly openState = signal<GoToUrlOpenState>('pending');\r\n readonly configuration = computed(() => this.readConfiguration(this.componentConfiguration()));\r\n readonly heading = computed(() => {\r\n switch (this.openState()) {\r\n case 'opened':\r\n return 'Link opened';\r\n case 'blocked':\r\n return 'Popup blocked';\r\n case 'invalid':\r\n return 'Invalid configuration';\r\n default:\r\n return 'Opening link';\r\n }\r\n });\r\n readonly message = computed(() => {\r\n const config = this.configuration();\r\n switch (this.openState()) {\r\n case 'opened':\r\n return `The URL has been opened${config ? ` in target \"${config.target}\".` : '.'}`;\r\n case 'blocked':\r\n return 'The browser blocked the automatic navigation. Use the link below to continue.';\r\n case 'invalid':\r\n return 'The GoToUrl menu item requires both \"url\" and \"target\" in componentConfigurationJson.';\r\n default:\r\n return 'The configured URL is being opened. If nothing happens, use the link below.';\r\n }\r\n });\r\n\r\n private hasAttemptedOpen = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n this.toolbar.clearButtons(this.toolbarScope());\r\n });\r\n\r\n effect(() => {\r\n const config = this.configuration();\r\n const isVisible = this.visible();\r\n if (!isVisible || this.hasAttemptedOpen) {\r\n return;\r\n }\r\n\r\n this.hasAttemptedOpen = true;\r\n this.openConfiguredUrl();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.toolbar.clearButtons(this.toolbarScope());\r\n }\r\n\r\n @HostListener('window:keydown', ['$event'])\r\n handleWindowKeydown(event: KeyboardEvent): void {\r\n if (!this.visible() || !event.ctrlKey || !event.altKey || event.metaKey || event.shiftKey || event.key.toLowerCase() !== 'r') {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.openConfiguredUrl();\r\n }\r\n\r\n openConfiguredUrl(): void {\r\n const config = this.configuration();\r\n if (!config) {\r\n this.openState.set('invalid');\r\n return;\r\n }\r\n\r\n const view = this.document.defaultView;\r\n if (!view) {\r\n this.openState.set('blocked');\r\n return;\r\n }\r\n\r\n const result = view.open(config.url, config.target, 'noopener,noreferrer');\r\n this.openState.set(result ? 'opened' : 'blocked');\r\n }\r\n\r\n private readConfiguration(configuration: WorkspaceTaskConfiguration | null): GoToUrlTaskConfiguration | null {\r\n const url = this.readConfigurationString(configuration, 'url');\r\n const target = this.readConfigurationString(configuration, 'target');\r\n if (!url || !target) {\r\n return null;\r\n }\r\n\r\n return { url, target };\r\n }\r\n\r\n private readConfigurationString(\r\n configuration: WorkspaceTaskConfiguration | null,\r\n key: string\r\n ): string {\r\n if (!configuration) {\r\n return '';\r\n }\r\n\r\n const directValue = configuration[key];\r\n if (typeof directValue === 'string' && directValue.trim()) {\r\n return directValue.trim();\r\n }\r\n\r\n const matchedEntry = Object.entries(configuration)\r\n .find(([entryKey, entryValue]) => entryKey.toLowerCase() === key.toLowerCase()\r\n && typeof entryValue === 'string'\r\n && entryValue.trim());\r\n\r\n return typeof matchedEntry?.[1] === 'string'\r\n ? matchedEntry[1].trim()\r\n : '';\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { Injectable, computed, inject, signal } from '@angular/core';\r\nimport { PermissionsPageComponent } from '../pages/permissions/permissions-page.component';\r\nimport { CrudTaskComponent } from '../tasks/crud-task/crud-task.component';\r\nimport { GoToUrlTaskComponent } from '../tasks/goto-url-task/goto-url-task.component';\r\nimport type {\r\n WorkspaceFederationContainer,\r\n WorkspaceRemoteTaskDefinition,\r\n WorkspaceTaskComponentType,\r\n WorkspaceTaskRuntimeConfig,\r\n WorkspaceTaskSourceIndex\r\n} from '../models/workspace-task.models';\r\n\r\nexport interface WorkspaceTaskDefinition {\r\n componentName: string;\r\n title: string;\r\n description: string;\r\n kind: 'builtin' | 'remote';\r\n componentConfigurationJsonExample?: string | null;\r\n usesTaskConfigurationInputs?: boolean;\r\n showInQuickLaunch: boolean;\r\n loadComponent: () => Promise<WorkspaceTaskComponentType>;\r\n}\r\n\r\ninterface WorkspaceTaskDefinitionRecord extends WorkspaceTaskDefinition {\r\n aliases: string[];\r\n}\r\n\r\nconst DEFAULT_SOURCE_INDEX_FILE = 'workspace-tasks.index.json';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WorkspaceTaskRegistryService {\r\n private readonly document = inject(DOCUMENT);\r\n\r\n private readonly definitionsState = signal<WorkspaceTaskDefinitionRecord[]>([]);\r\n private readonly initializationErrorState = signal('');\r\n private readonly remoteEntryLoads = new Map<string, Promise<void>>();\r\n private readonly remoteComponentLoads = new Map<string, Promise<WorkspaceTaskComponentType>>();\r\n private initialized = false;\r\n\r\n readonly definitions = computed<WorkspaceTaskDefinition[]>(() => this.definitionsState()\r\n .map(({ aliases: _aliases, ...definition }) => definition));\r\n readonly initializationError = this.initializationErrorState.asReadonly();\r\n\r\n async initialize(): Promise<void> {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.initialized = true;\r\n this.registerBuiltInTasks();\r\n\r\n try {\r\n await this.loadRemoteTaskSources();\r\n } catch (error) {\r\n this.initializationErrorState.set(error instanceof Error ? error.message : 'Unable to initialize workspace task sources.');\r\n console.error(error);\r\n }\r\n }\r\n\r\n getTaskDefinition(componentName: string): WorkspaceTaskDefinition | null {\r\n const normalizedName = normalizeComponentName(componentName);\r\n return this.definitionsState().find((definition) => definition.aliases.includes(normalizedName)) ?? null;\r\n }\r\n\r\n async resolveComponent(componentName: string): Promise<WorkspaceTaskComponentType | null> {\r\n const definition = this.getTaskDefinition(componentName);\r\n if (!definition) {\r\n return null;\r\n }\r\n\r\n return definition.loadComponent();\r\n }\r\n\r\n private registerBuiltInTasks(): void {\r\n this.registerDefinition({\r\n componentName: 'permissions',\r\n title: 'Permissions',\r\n description: 'Manage roles, users, and access rules.',\r\n kind: 'builtin',\r\n componentConfigurationJsonExample: this.serializeComponentConfigurationJsonExample(PermissionsPageComponent),\r\n showInQuickLaunch: false,\r\n loadComponent: async () => PermissionsPageComponent,\r\n aliases: ['permissions', 'permission', 'permission-page']\r\n });\r\n\r\n this.registerDefinition({\r\n componentName: 'crud',\r\n title: 'CRUD',\r\n description: 'Inspect schemas and work with entities.',\r\n kind: 'builtin',\r\n componentConfigurationJsonExample: this.serializeComponentConfigurationJsonExample(CrudTaskComponent),\r\n usesTaskConfigurationInputs: true,\r\n showInQuickLaunch: false,\r\n loadComponent: async () => CrudTaskComponent,\r\n aliases: ['crud']\r\n });\r\n\r\n this.registerDefinition({\r\n componentName: 'gotourl',\r\n title: 'GoToUrl',\r\n description: 'Open a configured URL from a menu item.',\r\n kind: 'builtin',\r\n componentConfigurationJsonExample: this.serializeComponentConfigurationJsonExample(GoToUrlTaskComponent),\r\n usesTaskConfigurationInputs: true,\r\n showInQuickLaunch: false,\r\n loadComponent: async () => GoToUrlTaskComponent,\r\n aliases: ['gotourl', 'goto-url', 'go-to-url']\r\n });\r\n }\r\n\r\n private async loadRemoteTaskSources(): Promise<void> {\r\n const runtimeConfig = readWorkspaceRuntimeConfig();\r\n const sourceUrls = normalizeSourceUrls(runtimeConfig.workspaceTaskSources ?? []);\r\n if (sourceUrls.length === 0) {\r\n return;\r\n }\r\n\r\n const sourceResults = await Promise.all(sourceUrls.map(async (sourceUrl) => {\r\n const response = await globalThis.fetch(resolveSourceIndexUrl(sourceUrl));\r\n if (!response.ok) {\r\n throw new Error(`Unable to load workspace task index from ${sourceUrl}.`);\r\n }\r\n\r\n const index = await response.json() as WorkspaceTaskSourceIndex;\r\n return { sourceUrl, index };\r\n }));\r\n\r\n for (const { sourceUrl, index } of sourceResults) {\r\n for (const task of index.tasks ?? []) {\r\n this.registerRemoteTask(sourceUrl, task);\r\n }\r\n }\r\n }\r\n\r\n private registerRemoteTask(sourceUrl: string, task: WorkspaceRemoteTaskDefinition): void {\r\n const componentName = task.componentName?.trim();\r\n if (!componentName) {\r\n return;\r\n }\r\n\r\n const remoteEntryUrl = new URL(task.remoteEntry, ensureTrailingSlash(sourceUrl)).toString();\r\n const remoteName = task.remoteName?.trim();\r\n const exposedModule = task.exposedModule?.trim();\r\n if (!remoteName || !exposedModule) {\r\n return;\r\n }\r\n\r\n const cacheKey = [\r\n remoteEntryUrl,\r\n remoteName,\r\n exposedModule,\r\n task.exportedComponentName?.trim() || 'default'\r\n ].join('::');\r\n\r\n this.registerDefinition({\r\n componentName,\r\n title: task.title?.trim() || componentName,\r\n description: task.description?.trim() || 'External workspace task.',\r\n kind: 'remote',\r\n componentConfigurationJsonExample: null,\r\n showInQuickLaunch: Boolean(task.showInQuickLaunch),\r\n loadComponent: () => this.loadRemoteComponent(cacheKey, remoteEntryUrl, remoteName, exposedModule, task.exportedComponentName?.trim() || 'default'),\r\n aliases: [componentName]\r\n });\r\n }\r\n\r\n private registerDefinition(definition: WorkspaceTaskDefinitionRecord): void {\r\n const normalizedAliases = [...new Set(definition.aliases.map((alias) => normalizeComponentName(alias)).filter(Boolean))];\r\n if (normalizedAliases.length === 0) {\r\n return;\r\n }\r\n\r\n this.definitionsState.update((definitions) => {\r\n if (definitions.some((current) => normalizedAliases.some((alias) => current.aliases.includes(alias)))) {\r\n console.warn(`Skipping duplicate workspace task registration for \"${definition.componentName}\".`);\r\n return definitions;\r\n }\r\n\r\n return [...definitions, {\r\n ...definition,\r\n aliases: normalizedAliases\r\n }];\r\n });\r\n }\r\n\r\n private serializeComponentConfigurationJsonExample(component: WorkspaceTaskComponentType): string | null {\r\n const example = component.getComponentConfigurationJsonExample?.();\r\n if (!example || typeof example !== 'object' || Array.isArray(example)) {\r\n return '{}';\r\n }\r\n\r\n try {\r\n return JSON.stringify(example, null, 2);\r\n } catch {\r\n return '{}';\r\n }\r\n }\r\n\r\n private loadRemoteComponent(\r\n cacheKey: string,\r\n remoteEntryUrl: string,\r\n remoteName: string,\r\n exposedModule: string,\r\n exportedComponentName: string\r\n ): Promise<WorkspaceTaskComponentType> {\r\n const existingLoad = this.remoteComponentLoads.get(cacheKey);\r\n if (existingLoad) {\r\n return existingLoad;\r\n }\r\n\r\n const load = (async () => {\r\n await this.ensureRemoteEntry(remoteEntryUrl);\r\n const container = readFederationContainer(remoteName);\r\n if (!container) {\r\n throw new Error(`Remote container \"${remoteName}\" is not available after loading ${remoteEntryUrl}.`);\r\n }\r\n\r\n await initializeFederationContainer(container);\r\n const moduleFactory = await container.get(exposedModule);\r\n const moduleExports = moduleFactory();\r\n const component = readExportedComponent(moduleExports, exportedComponentName);\r\n if (!component) {\r\n throw new Error(`Remote task \"${remoteName}/${exposedModule}\" did not export component \"${exportedComponentName}\".`);\r\n }\r\n\r\n return component;\r\n })();\r\n\r\n this.remoteComponentLoads.set(cacheKey, load);\r\n return load;\r\n }\r\n\r\n private ensureRemoteEntry(remoteEntryUrl: string): Promise<void> {\r\n const existingLoad = this.remoteEntryLoads.get(remoteEntryUrl);\r\n if (existingLoad) {\r\n return existingLoad;\r\n }\r\n\r\n const load = new Promise<void>((resolve, reject) => {\r\n const script = this.document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = remoteEntryUrl;\r\n script.async = true;\r\n script.onload = () => resolve();\r\n script.onerror = () => reject(new Error(`Unable to load remote entry ${remoteEntryUrl}.`));\r\n this.document.head.appendChild(script);\r\n });\r\n\r\n this.remoteEntryLoads.set(remoteEntryUrl, load);\r\n return load;\r\n }\r\n}\r\n\r\nfunction normalizeComponentName(value: string): string {\r\n return value.trim().toLowerCase();\r\n}\r\n\r\nfunction normalizeSourceUrls(sourceUrls: string[]): string[] {\r\n return sourceUrls\r\n .map((sourceUrl) => sourceUrl.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nfunction resolveSourceIndexUrl(sourceUrl: string): string {\r\n return sourceUrl.toLowerCase().endsWith('.json')\r\n ? sourceUrl\r\n : `${ensureTrailingSlash(sourceUrl)}${DEFAULT_SOURCE_INDEX_FILE}`;\r\n}\r\n\r\nfunction ensureTrailingSlash(value: string): string {\r\n return value.endsWith('/') ? value : `${value}/`;\r\n}\r\n\r\nfunction readWorkspaceRuntimeConfig(): WorkspaceTaskRuntimeConfig {\r\n return globalThis.__chillSharpUiRuntimeConfig__ ?? {};\r\n}\r\n\r\nfunction readFederationContainer(remoteName: string): WorkspaceFederationContainer | null {\r\n const container = (globalThis as Record<string, unknown>)[remoteName];\r\n if (!container || typeof container !== 'object') {\r\n return null;\r\n }\r\n\r\n return container as WorkspaceFederationContainer;\r\n}\r\n\r\nasync function initializeFederationContainer(container: WorkspaceFederationContainer): Promise<void> {\r\n if (typeof container.init !== 'function') {\r\n return;\r\n }\r\n\r\n const globalScope = globalThis as typeof globalThis & {\r\n __webpack_init_sharing__?: (scope: string) => Promise<void>;\r\n __webpack_share_scopes__?: Record<string, unknown>;\r\n };\r\n\r\n if (typeof globalScope.__webpack_init_sharing__ === 'function') {\r\n await globalScope.__webpack_init_sharing__('default');\r\n await container.init(globalScope.__webpack_share_scopes__?.['default'] ?? {});\r\n return;\r\n }\r\n\r\n await container.init({});\r\n}\r\n\r\nfunction readExportedComponent(moduleExports: unknown, exportedComponentName: string): WorkspaceTaskComponentType | null {\r\n if (!moduleExports || typeof moduleExports !== 'object') {\r\n return null;\r\n }\r\n\r\n const exportsRecord = moduleExports as Record<string, unknown>;\r\n const namedExport = exportsRecord[exportedComponentName];\r\n if (isAngularComponentType(namedExport)) {\r\n return namedExport;\r\n }\r\n\r\n const defaultExport = exportsRecord['default'];\r\n return isAngularComponentType(defaultExport) ? defaultExport : null;\r\n}\r\n\r\nfunction isAngularComponentType(value: unknown): value is WorkspaceTaskComponentType {\r\n return typeof value === 'function';\r\n}\r\n","import { APP_INITIALIZER, InjectionToken, Provider, inject } from '@angular/core';\nimport { CHILL_SHARP_CLIENT, ChillSharpNgClient, provideChillSharpClient } from '@chill-sharp/ng-client';\r\nimport { CHILL_BASE_URL, CHILL_CULTURE } from './chill.config';\r\nimport { SESSION_STORAGE_KEY, USER_PREFERENCES_STORAGE_KEY } from './storage-keys';\r\nimport { ChillService } from './services/chill.service';\r\nimport { WorkspaceTaskRegistryService } from './services/workspace-task-registry.service';\r\n\r\nexport interface ChillSharpUiCoreOptions {\n /** Client-owned theme identifiers in addition to the built-in bright, dark, and soft themes. */\n additionalThemes?: readonly string[];\n}\n\nexport const CHILL_SHARP_UI_CORE_OPTIONS = new InjectionToken<ChillSharpUiCoreOptions>('CHILL_SHARP_UI_CORE_OPTIONS');\n\nexport function provideChillSharpUiCore(options: ChillSharpUiCoreOptions = {}): Provider[] {\n return [\r\n ...provideChillSharpClient({\r\n baseUrl: CHILL_BASE_URL,\r\n options: {\r\n cultureName: readStoredCultureName(),\r\n accessToken: readStoredAccessToken(),\r\n fetchImpl: authAwareFetch,\r\n signalRWithCredentials: false\r\n }\r\n }),\r\n {\n provide: ChillSharpNgClient,\n useFactory: () => new ChillSharpNgClient(inject(CHILL_SHARP_CLIENT))\n },\n {\n provide: CHILL_SHARP_UI_CORE_OPTIONS,\n useValue: options\n },\n {\r\n provide: APP_INITIALIZER,\r\n multi: true,\r\n useFactory: () => () => inject(WorkspaceTaskRegistryService).initialize()\r\n },\r\n {\r\n provide: APP_INITIALIZER,\r\n multi: true,\r\n useFactory: () => () => inject(ChillService).initialize()\r\n }\r\n ];\r\n}\r\n\r\nasync function authAwareFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\r\n const method = (init?.method ?? 'GET').toUpperCase();\r\n const headers = new Headers(init?.headers);\r\n const accessToken = readStoredAccessToken();\r\n if (accessToken && !headers.has('Authorization')) {\r\n headers.set('Authorization', `Bearer ${accessToken}`);\r\n }\r\n\r\n return globalThis.fetch(input, {\r\n ...init,\r\n method,\r\n headers\r\n });\r\n}\r\n\r\nfunction readStoredAccessToken(): string {\n const rawSession = globalThis.localStorage?.getItem(SESSION_STORAGE_KEY);\n if (!rawSession) {\r\n return '';\r\n }\r\n\r\n try {\n const parsed = JSON.parse(rawSession) as { accessToken?: string; accessTokenExpiresUtc?: string };\n const accessToken = parsed.accessToken?.trim() ?? '';\n if (!accessToken || isAccessTokenExpired(parsed.accessTokenExpiresUtc, accessToken)) {\n if (accessToken) {\n globalThis.localStorage?.removeItem(SESSION_STORAGE_KEY);\n }\n return '';\n }\n\n return accessToken;\n } catch {\n return '';\n }\n}\n\nfunction isAccessTokenExpired(accessTokenExpiresUtc: string | undefined, accessToken: string): boolean {\n const expiresAt = Date.parse(accessTokenExpiresUtc ?? '');\n if (Number.isFinite(expiresAt)) {\n return expiresAt <= Date.now();\n }\n\n const [, payload] = accessToken.split('.');\n if (!payload) {\n return false;\n }\n\n try {\n const normalizedPayload = payload.replace(/-/g, '+').replace(/_/g, '/');\n const decodedPayload = globalThis.atob(normalizedPayload.padEnd(Math.ceil(normalizedPayload.length / 4) * 4, '='));\n const expiresAtSeconds = JSON.parse(decodedPayload).exp;\n return typeof expiresAtSeconds === 'number'\n && Number.isFinite(expiresAtSeconds)\n && expiresAtSeconds * 1_000 <= Date.now();\n } catch {\n return false;\n }\n}\n\r\nfunction readStoredCultureName(): string {\n const rawSession = globalThis.localStorage?.getItem(SESSION_STORAGE_KEY);\n const rawPreferences = globalThis.localStorage?.getItem(USER_PREFERENCES_STORAGE_KEY);\n if (!rawSession || !rawPreferences) {\n return readBrowserCultureName();\n }\n\n try {\n const session = JSON.parse(rawSession) as { userId?: string };\n const preferences = JSON.parse(rawPreferences) as {\n userId?: string;\n preferences?: { displayCultureName?: string };\n };\n return session.userId?.trim() && session.userId.trim() === preferences.userId?.trim()\n ? preferences.preferences?.displayCultureName?.trim() || readBrowserCultureName()\n : readBrowserCultureName();\n } catch {\n return readBrowserCultureName();\n }\n}\n\nfunction readBrowserCultureName(): string {\n const languages = globalThis.navigator?.languages;\n const browserCultureName = languages?.find((language) => typeof language === 'string' && language.trim())\n ?? globalThis.navigator?.language\n ?? '';\n return browserCultureName.trim() || CHILL_CULTURE;\n}\n","import { DOCUMENT } from '@angular/common';\r\nimport { DestroyRef, Injectable, computed, effect, inject, signal } from '@angular/core';\r\nimport { ParamMap, Router } from '@angular/router';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport type { CrudPageComponentConfiguration } from '../pages/crud/crud-page.component';\r\nimport type { ChillMenuItem } from '../models/chill-menu.models';\r\nimport type { WorkspaceTaskComponent, WorkspaceTaskComponentType, WorkspaceTaskConfiguration } from '../models/workspace-task.models';\r\nimport { CHILL_SHARP_UI_CORE_OPTIONS } from '../provide-chill-sharp-ui-core';\r\nimport { ChillService } from './chill.service';\r\nimport { WorkspaceDialogService } from './workspace-dialog.service';\r\nimport { WorkspaceLayoutService } from './workspace-layout.service';\r\nimport { WorkspaceTaskDefinition, WorkspaceTaskRegistryService } from './workspace-task-registry.service';\r\nconst ACTIVE_MENU_ITEM_QUERY_PARAM = 'activeMenuItem';\r\n\r\nexport type WorkspaceTheme = string;\r\n\r\nconst BUILT_IN_THEMES = ['bright', 'dark', 'soft'];\r\n\r\ninterface WorkspaceTaskRoute {\r\n taskType: string;\r\n queryParams?: Record<string, string>;\r\n}\r\n\r\nexport interface WorkspaceTaskInstance {\r\n id: string;\r\n taskType: string;\r\n title: string;\r\n description: string;\r\n component: WorkspaceTaskComponentType;\r\n toolbarScope: string;\r\n /** The task that launched this task, when it is still open in the workspace. */\r\n parentTaskId?: string | null;\r\n menuItemGuid?: string | null;\r\n inputs?: Record<string, unknown>;\r\n route: WorkspaceTaskRoute;\r\n}\r\n\r\nexport interface OpenCrudTaskRequest {\r\n chillType: string;\r\n viewCode?: string | null;\r\n displayName?: string | null;\r\n queryChillType?: string | null;\r\n componentConfiguration?: CrudPageComponentConfiguration | null;\r\n parentTaskId?: string | null;\r\n}\r\n\r\nexport interface OpenWorkspaceTaskRequest {\r\n componentName: string;\r\n title?: string | null;\r\n description?: string | null;\r\n configuration?: WorkspaceTaskConfiguration | null;\r\n parentTaskId?: string | null;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WorkspaceService {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly router = inject(Router);\r\n private readonly chill = inject(ChillService);\r\n private readonly dialog = inject(WorkspaceDialogService);\r\n private readonly layout = inject(WorkspaceLayoutService);\r\n private readonly taskRegistry = inject(WorkspaceTaskRegistryService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly uiCoreOptions = inject(CHILL_SHARP_UI_CORE_OPTIONS, { optional: true });\r\n\r\n private readonly drawerOpenState = signal(true);\r\n private readonly activeTaskIdState = signal<string | null>(null);\r\n private readonly openTaskInstancesState = signal<WorkspaceTaskInstance[]>([]);\r\n private taskComponentResolver: ((taskId: string) => WorkspaceTaskComponent | null) | null = null;\r\n private readonly themeState = signal<WorkspaceTheme>(this.readSystemThemePreference());\r\n\r\n readonly availableTasks = computed(() => this.taskRegistry.definitions());\r\n readonly isDrawerOpen = this.drawerOpenState.asReadonly();\r\n readonly theme = this.themeState.asReadonly();\r\n readonly themes = this.resolveThemes();\r\n readonly canEditLayout = this.layout.canEditLayout;\r\n readonly isLayoutEditingEnabled = this.layout.isLayoutEditingEnabled;\r\n readonly openTasks = this.openTaskInstancesState.asReadonly();\r\n readonly activeTask = computed(() => this.openTaskInstancesState()\r\n .find((task) => task.id === this.activeTaskIdState()) ?? null);\r\n\r\n constructor() {\r\n effect(() => {\r\n const theme = this.themeState();\r\n this.document.documentElement.setAttribute('data-theme', theme);\r\n this.document.documentElement.style.setProperty('color-scheme', theme === 'dark' ? 'dark' : 'light');\r\n });\r\n\r\n effect(() => {\r\n const preferredTheme = this.chill.preferredTheme().trim().toLowerCase();\r\n this.themeState.set(this.isAvailableTheme(preferredTheme) ? preferredTheme : this.readSystemThemePreference());\r\n });\r\n\r\n this.bindSystemThemePreference();\r\n }\r\n\r\n async activateTaskFromRoute(taskType: string | null, queryParams: ParamMap): Promise<void> {\r\n const activeMenuItemGuid = this.readActiveMenuItemGuid(queryParams);\r\n if (activeMenuItemGuid) {\r\n const currentActiveMenuItemGuid = this.activeTask()?.menuItemGuid?.trim() ?? '';\r\n if (currentActiveMenuItemGuid === activeMenuItemGuid) {\r\n this.drawerOpenState.set(false);\r\n return;\r\n }\r\n\r\n const existingTask = this.findTaskByMenuItemGuid(activeMenuItemGuid);\r\n if (existingTask) {\r\n this.activeTaskIdState.set(existingTask.id);\r\n this.drawerOpenState.set(false);\r\n return;\r\n }\r\n\r\n const restoredTask = await this.restoreMenuTaskFromRoute(activeMenuItemGuid);\r\n if (!restoredTask) {\r\n if (this.openTaskInstancesState().length === 0) {\r\n this.activeTaskIdState.set(null);\r\n this.drawerOpenState.set(true);\r\n } else {\r\n this.drawerOpenState.set(false);\r\n }\r\n return;\r\n }\r\n\r\n if (this.openTaskInstancesState().length === 0) {\r\n this.openTaskInstancesState.set([restoredTask]);\r\n } else {\r\n this.openTaskInstancesState.update((tasks) => [...tasks, restoredTask]);\r\n }\r\n\r\n this.activeTaskIdState.set(restoredTask.id);\r\n this.drawerOpenState.set(false);\r\n return;\r\n }\r\n\r\n if (!taskType) {\r\n if (this.openTaskInstancesState().length === 0) {\r\n this.activeTaskIdState.set(null);\r\n this.drawerOpenState.set(true);\r\n }\r\n return;\r\n }\r\n\r\n const task = await this.resolveTaskFromRoute(taskType, queryParams);\r\n if (!task) {\r\n void this.router.navigateByUrl('/workspace');\r\n return;\r\n }\r\n\r\n const activeTask = this.activeTask();\r\n if (activeTask && this.isSameTaskRoute(activeTask.route, task.route)) {\r\n return;\r\n }\r\n\r\n const existingTask = this.findTaskByRoute(task.route);\r\n if (existingTask) {\r\n this.activeTaskIdState.set(existingTask.id);\r\n this.drawerOpenState.set(false);\r\n return;\r\n }\r\n\r\n this.openTaskInstance(task, false);\r\n }\r\n\r\n async openTask(componentName: string, navigate = true): Promise<void> {\r\n const taskDefinition = this.getTaskDefinition(componentName);\r\n if (!taskDefinition) {\r\n return;\r\n }\r\n\r\n const task = await this.createStaticTaskInstance(taskDefinition);\r\n if (!task) {\r\n return;\r\n }\r\n\r\n const existingTask = this.findTaskByRoute(task.route);\r\n if (existingTask) {\r\n this.activateTask(existingTask.id);\r\n return;\r\n }\r\n\r\n this.openTaskInstance(task, navigate);\r\n }\r\n\r\n async openWorkspaceTask(request: OpenWorkspaceTaskRequest): Promise<void> {\r\n const taskDefinition = this.getTaskDefinition(request.componentName);\r\n if (!taskDefinition) {\r\n return;\r\n }\r\n\r\n const task = await this.createStaticTaskInstance(\r\n taskDefinition,\r\n request.title,\r\n request.description,\r\n request.configuration ?? null,\r\n request.parentTaskId\r\n );\r\n if (!task) {\r\n return;\r\n }\r\n\r\n this.openTaskInstance(task);\r\n }\r\n\r\n openCrudTask(request: OpenCrudTaskRequest): void {\r\n const chillType = request.chillType.trim();\r\n if (!chillType) {\r\n return;\r\n }\r\n\r\n const configuration = this.buildCrudTaskConfiguration(request);\r\n void this.openWorkspaceTask({\r\n componentName: 'crud',\r\n title: request.displayName?.trim() || chillType,\r\n description: `CRUD task for ${chillType}`,\r\n configuration,\r\n parentTaskId: request.parentTaskId\r\n });\r\n }\r\n\r\n async openMenuItem(item: ChillMenuItem): Promise<void> {\r\n const task = await this.createMenuTaskInstance(item);\r\n if (!task) {\r\n return;\r\n }\r\n\r\n this.openTaskInstance(task);\r\n }\r\n\r\n isMenuItemActive(item: ChillMenuItem): boolean {\r\n return this.activeTask()?.menuItemGuid === item.guid;\r\n }\r\n\r\n async activateTask(taskInstanceId: string): Promise<void> {\r\n const task = this.openTaskInstancesState().find((candidate) => candidate.id === taskInstanceId) ?? null;\r\n if (!task) {\r\n return;\r\n }\r\n\r\n const currentActiveTaskId = this.activeTaskIdState();\r\n if (currentActiveTaskId && currentActiveTaskId !== task.id) {\r\n const canLeaveCurrentTask = await this.confirmTaskCanBeLeft(currentActiveTaskId);\r\n if (!canLeaveCurrentTask) {\r\n return;\r\n }\r\n }\r\n\r\n this.activeTaskIdState.set(task.id);\r\n this.drawerOpenState.set(false);\r\n this.navigateToTask(task);\r\n }\r\n\r\n async closeTask(taskInstanceId: string): Promise<void> {\r\n const taskIdsToClose = this.getTaskAndDescendantIds(taskInstanceId);\r\n for (const taskId of taskIdsToClose) {\r\n const canCloseTask = await this.confirmTaskCanBeLeft(taskId);\r\n if (!canCloseTask) {\r\n return;\r\n }\r\n }\r\n\r\n let nextActiveTaskId: string | null = this.activeTaskIdState();\r\n\r\n this.openTaskInstancesState.update((tasks) => {\r\n const nextTasks = tasks.filter((task) => !taskIdsToClose.has(task.id));\r\n if (nextActiveTaskId && taskIdsToClose.has(nextActiveTaskId)) {\r\n nextActiveTaskId = nextTasks[nextTasks.length - 1]?.id ?? null;\r\n }\r\n return nextTasks;\r\n });\r\n\r\n this.activeTaskIdState.set(nextActiveTaskId);\r\n const nextActiveTask = this.openTaskInstancesState().find((task) => task.id === nextActiveTaskId) ?? null;\r\n if (nextActiveTask) {\r\n this.navigateToTask(nextActiveTask);\r\n return;\r\n }\r\n\r\n this.drawerOpenState.set(true);\r\n void this.router.navigate(['/workspace']);\r\n }\r\n\r\n toggleDrawer(): void {\r\n if (this.openTaskInstancesState().length === 0) {\r\n this.drawerOpenState.set(true);\r\n return;\r\n }\r\n\r\n this.drawerOpenState.update((isOpen) => !isOpen);\r\n }\r\n\r\n closeDrawer(): void {\r\n if (this.openTaskInstancesState().length === 0) {\r\n this.drawerOpenState.set(true);\r\n return;\r\n }\r\n\r\n this.drawerOpenState.set(false);\r\n }\r\n\r\n setTheme(theme: WorkspaceTheme): void {\r\n if (!this.isAvailableTheme(theme)) {\r\n return;\r\n }\r\n\r\n this.themeState.set(theme);\r\n const userId = this.chill.session()?.userId.trim() ?? '';\r\n if (!userId) {\r\n return;\r\n }\r\n\r\n void firstValueFrom(this.chill.updatePreferredTheme(userId, theme)).catch(() => undefined);\r\n }\r\n\r\n toggleLayoutEditingEnabled(): void {\r\n this.layout.toggleLayoutEditingEnabled();\r\n }\r\n\r\n async reset(): Promise<boolean> {\r\n const canReset = await this.confirmAllTasksCanBeClosed();\r\n if (!canReset) {\r\n return false;\r\n }\r\n\r\n this.activeTaskIdState.set(null);\r\n this.openTaskInstancesState.set([]);\r\n this.drawerOpenState.set(true);\r\n return true;\r\n }\r\n\r\n registerTaskComponentResolver(resolver: ((taskId: string) => WorkspaceTaskComponent | null) | null): void {\r\n this.taskComponentResolver = resolver;\r\n }\r\n\r\n canUnloadWorkspace(): boolean {\r\n const activeTaskId = this.activeTaskIdState();\r\n if (!activeTaskId) {\r\n return true;\r\n }\r\n\r\n const component = this.taskComponentResolver?.(activeTaskId) ?? null;\r\n if (!component?.isAllSaved) {\r\n return true;\r\n }\r\n\r\n try {\r\n return component.isAllSaved() === true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n private openTaskInstance(task: WorkspaceTaskInstance, navigate = true): void {\r\n this.openTaskInstancesState.update((tasks) => tasks.some((candidate) => candidate.id === task.id)\r\n ? tasks\r\n : [...tasks, task]);\r\n this.activeTaskIdState.set(task.id);\r\n this.drawerOpenState.set(false);\r\n\r\n if (navigate) {\r\n this.navigateToTask(task);\r\n }\r\n }\r\n\r\n private navigateToTask(task: WorkspaceTaskInstance): void {\r\n void this.router.navigate(['/workspace'], {\r\n queryParams: this.buildWorkspaceQueryParams(task)\r\n });\r\n }\r\n\r\n private async resolveTaskFromRoute(taskType: string, queryParams: ParamMap): Promise<WorkspaceTaskInstance | null> {\r\n const taskDefinition = this.getTaskDefinition(taskType);\r\n if (!taskDefinition) {\r\n return null;\r\n }\r\n\r\n return this.createStaticTaskInstance(\r\n taskDefinition,\r\n queryParams.get('title'),\r\n queryParams.get('description'),\r\n this.deserializeConfiguration(queryParams.get('config'))\r\n );\r\n }\r\n\r\n private async createStaticTaskInstance(\r\n taskDefinition: WorkspaceTaskDefinition,\r\n titleOverride?: string | null,\r\n descriptionOverride?: string | null,\r\n configuration?: WorkspaceTaskConfiguration | null,\r\n parentTaskId?: string | null\r\n ): Promise<WorkspaceTaskInstance | null> {\r\n const component = await this.taskRegistry.resolveComponent(taskDefinition.componentName);\r\n if (!component) {\r\n return null;\r\n }\r\n\r\n const taskId = crypto.randomUUID();\r\n const title = titleOverride?.trim() || taskDefinition.title;\r\n const description = descriptionOverride?.trim() || taskDefinition.description;\r\n const normalizedConfiguration = this.normalizeConfiguration(configuration);\r\n const toolbarScope = `workspace-task-${taskId}`;\r\n\r\n return {\r\n id: taskId,\r\n taskType: taskDefinition.componentName,\r\n title,\r\n description,\r\n component,\r\n toolbarScope,\r\n parentTaskId: this.normalizeParentTaskId(parentTaskId),\r\n menuItemGuid: null,\r\n inputs: taskDefinition.kind === 'remote' || taskDefinition.usesTaskConfigurationInputs\r\n ? {\r\n componentConfiguration: normalizedConfiguration ?? {},\r\n taskTitle: title,\r\n taskDescription: description,\r\n toolbarScope\r\n }\r\n : undefined,\r\n route: this.createDefaultRoute(taskDefinition.componentName, title, description, normalizedConfiguration)\r\n };\r\n }\r\n\r\n private async createMenuTaskInstance(item: ChillMenuItem): Promise<WorkspaceTaskInstance | null> {\r\n const componentName = this.normalizeComponentName(item.componentName);\r\n const taskDefinition = this.getTaskDefinition(componentName);\r\n if (!taskDefinition) {\r\n return null;\r\n }\r\n\r\n const task = await this.createStaticTaskInstance(\r\n taskDefinition,\r\n item.title,\r\n item.description,\r\n this.parseMenuConfiguration(item.componentConfigurationJson)\r\n );\r\n if (!task) {\r\n return null;\r\n }\r\n\r\n return {\r\n ...task,\r\n menuItemGuid: item.guid?.trim() || null\r\n };\r\n }\r\n\r\n private getTaskDefinition(taskType: string): WorkspaceTaskDefinition | null {\r\n return this.taskRegistry.getTaskDefinition(taskType);\r\n }\r\n\r\n private findTaskByRoute(route: WorkspaceTaskRoute): WorkspaceTaskInstance | null {\r\n return this.openTaskInstancesState().find((task) => this.isSameTaskRoute(task.route, route)) ?? null;\r\n }\r\n\r\n private findTaskByMenuItemGuid(menuItemGuid: string): WorkspaceTaskInstance | null {\r\n const normalizedMenuItemGuid = menuItemGuid.trim();\r\n if (!normalizedMenuItemGuid) {\r\n return null;\r\n }\r\n\r\n return this.openTaskInstancesState().find((task) => task.menuItemGuid === normalizedMenuItemGuid) ?? null;\r\n }\r\n\r\n private isSameTaskRoute(left: WorkspaceTaskRoute, right: WorkspaceTaskRoute): boolean {\r\n if (left.taskType !== right.taskType) {\r\n return false;\r\n }\r\n\r\n const leftQueryParams = left.queryParams ?? {};\r\n const rightQueryParams = right.queryParams ?? {};\r\n const leftKeys = Object.keys(leftQueryParams);\r\n const rightKeys = Object.keys(rightQueryParams);\r\n if (leftKeys.length !== rightKeys.length) {\r\n return false;\r\n }\r\n\r\n return leftKeys.every((key) => leftQueryParams[key] === rightQueryParams[key]);\r\n }\r\n\r\n private bindSystemThemePreference(): void {\r\n if (typeof globalThis.matchMedia !== 'function') {\r\n return;\r\n }\r\n\r\n const mediaQuery = globalThis.matchMedia('(prefers-color-scheme: dark)');\r\n const applySystemTheme = () => {\r\n if (this.chill.preferredTheme().trim()) {\r\n return;\r\n }\r\n\r\n this.themeState.set(mediaQuery.matches ? 'dark' : 'bright');\r\n };\r\n\r\n applySystemTheme();\r\n\r\n const handleChange = () => applySystemTheme();\r\n mediaQuery.addEventListener('change', handleChange);\r\n this.destroyRef.onDestroy(() => mediaQuery.removeEventListener('change', handleChange));\r\n }\r\n\r\n private readSystemThemePreference(): WorkspaceTheme {\r\n return typeof globalThis.matchMedia === 'function' && globalThis.matchMedia('(prefers-color-scheme: dark)').matches\r\n ? 'dark'\r\n : 'bright';\r\n }\r\n\r\n private createDefaultRoute(\r\n componentName: string,\r\n title: string | null | undefined,\r\n description: string | null | undefined,\r\n configuration: WorkspaceTaskConfiguration | null\r\n ): WorkspaceTaskRoute {\r\n const queryParams: Record<string, string> = {};\r\n const normalizedTitle = title?.trim() ?? '';\r\n if (normalizedTitle) {\r\n queryParams['title'] = normalizedTitle;\r\n }\r\n const normalizedDescription = description?.trim() ?? '';\r\n if (normalizedDescription) {\r\n queryParams['description'] = normalizedDescription;\r\n }\r\n\r\n const serializedConfiguration = this.serializeConfiguration(configuration);\r\n if (serializedConfiguration) {\r\n queryParams['config'] = serializedConfiguration;\r\n }\r\n\r\n return {\r\n taskType: this.normalizeComponentName(componentName),\r\n queryParams\r\n };\r\n }\r\n\r\n private buildWorkspaceQueryParams(activeTask: WorkspaceTaskInstance | null): Record<string, string | string[]> {\r\n const activeMenuItem = activeTask?.menuItemGuid?.trim() ?? '';\r\n return activeMenuItem\r\n ? { [ACTIVE_MENU_ITEM_QUERY_PARAM]: activeMenuItem }\r\n : {};\r\n }\r\n\r\n private readActiveMenuItemGuid(queryParams: ParamMap): string {\r\n return queryParams.get(ACTIVE_MENU_ITEM_QUERY_PARAM)?.trim() ?? '';\r\n }\r\n\r\n private findActiveTaskIdForMenuItemGuid(activeMenuItemGuid: string): string | null {\r\n if (!activeMenuItemGuid) {\r\n return null;\r\n }\r\n\r\n return this.findTaskByMenuItemGuid(activeMenuItemGuid)?.id ?? null;\r\n }\r\n\r\n private findTaskIdByMenuItemGuid(tasks: WorkspaceTaskInstance[], menuItemGuid: string): string | null {\r\n if (!menuItemGuid) {\r\n return null;\r\n }\r\n\r\n return tasks.find((task) => task.menuItemGuid === menuItemGuid)?.id ?? null;\r\n }\r\n\r\n private async restoreMenuTaskFromRoute(activeMenuItemGuid: string): Promise<WorkspaceTaskInstance | null> {\r\n const menuItems = await this.loadMenuItemsByGuids([activeMenuItemGuid]);\r\n const menuItem = menuItems.get(activeMenuItemGuid);\r\n if (!menuItem) {\r\n return null;\r\n }\r\n\r\n return this.createMenuTaskInstance(menuItem);\r\n }\r\n\r\n private async loadMenuItemsByGuids(targetGuids: string[]): Promise<Map<string, ChillMenuItem>> {\r\n const remainingGuids = new Set(targetGuids.map((guid) => guid.trim()).filter((guid) => guid.length > 0));\r\n const resolvedMenuItems = new Map<string, ChillMenuItem>();\r\n const parentQueue: Array<string | null> = [null];\r\n const visitedParents = new Set<string>();\r\n\r\n while (parentQueue.length > 0 && remainingGuids.size > 0) {\r\n const parentGuid = parentQueue.shift() ?? null;\r\n const parentKey = parentGuid ?? '__root__';\r\n if (visitedParents.has(parentKey)) {\r\n continue;\r\n }\r\n\r\n visitedParents.add(parentKey);\r\n\r\n let items: ChillMenuItem[] = [];\r\n try {\r\n items = await firstValueFrom(this.chill.getMenu(parentGuid));\r\n } catch {\r\n continue;\r\n }\r\n\r\n for (const item of items) {\r\n const itemGuid = item.guid?.trim() ?? '';\r\n if (itemGuid) {\r\n parentQueue.push(itemGuid);\r\n }\r\n\r\n if (!itemGuid || !remainingGuids.has(itemGuid)) {\r\n continue;\r\n }\r\n\r\n resolvedMenuItems.set(itemGuid, item);\r\n remainingGuids.delete(itemGuid);\r\n }\r\n }\r\n\r\n return resolvedMenuItems;\r\n }\r\n\r\n private async confirmAllTasksCanBeClosed(): Promise<boolean> {\r\n const taskIds = this.openTaskInstancesState().map((task) => task.id);\r\n for (const taskId of taskIds) {\r\n const canLeaveTask = await this.confirmTaskCanBeLeft(taskId);\r\n if (!canLeaveTask) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private async confirmTaskCanBeLeft(taskId: string): Promise<boolean> {\r\n const component = this.taskComponentResolver?.(taskId) ?? null;\r\n if (!component?.isAllSaved) {\r\n return true;\r\n }\r\n\r\n let isAllSaved = true;\r\n try {\r\n isAllSaved = await component.isAllSaved();\r\n } catch {\r\n isAllSaved = false;\r\n }\r\n\r\n if (isAllSaved) {\r\n return true;\r\n }\r\n\r\n const taskTitle = this.openTaskInstancesState().find((task) => task.id === taskId)?.title\r\n || this.chill.T('68E40F26-CE4E-4FD1-9D2A-505B495D1608', 'this task', 'questa attivita');\r\n\r\n return this.dialog.confirmYesNo(\r\n this.chill.T('C215A6B1-F772-478D-8FB2-8A7A495F694E', 'Unsaved changes', 'Modifiche non salvate'),\r\n this.chill.T(\r\n '05105AA0-B849-4020-8018-03C97CB92605',\r\n `There is unsaved or unfinished work in ${taskTitle}. Do you want to leave it anyway?`,\r\n `Ci sono modifiche non salvate o attivita non completate in ${taskTitle}. Vuoi comunque uscire?`\r\n )\r\n );\r\n }\r\n\r\n private normalizeComponentName(value: string): string {\r\n return value.trim().toLowerCase();\r\n }\r\n\r\n private resolveThemes(): WorkspaceTheme[] {\r\n const additionalThemes = this.uiCoreOptions?.additionalThemes ?? [];\r\n return [...new Set([...BUILT_IN_THEMES, ...additionalThemes\r\n .map((theme) => theme.trim().toLowerCase())\r\n .filter((theme) => theme.length > 0)])];\r\n }\r\n\r\n private isAvailableTheme(theme: string): theme is WorkspaceTheme {\r\n return this.themes.includes(theme);\r\n }\r\n\r\n private getTaskAndDescendantIds(taskInstanceId: string): Set<string> {\r\n const taskIds = new Set<string>([taskInstanceId]);\r\n let hasNewDescendants = true;\r\n\r\n while (hasNewDescendants) {\r\n hasNewDescendants = false;\r\n for (const task of this.openTaskInstancesState()) {\r\n if (task.parentTaskId && taskIds.has(task.parentTaskId) && !taskIds.has(task.id)) {\r\n taskIds.add(task.id);\r\n hasNewDescendants = true;\r\n }\r\n }\r\n }\r\n\r\n return taskIds;\r\n }\r\n\r\n private normalizeParentTaskId(parentTaskId: string | null | undefined): string | null {\r\n const normalizedParentTaskId = parentTaskId?.trim() ?? '';\r\n return this.openTaskInstancesState().some((task) => task.id === normalizedParentTaskId)\r\n ? normalizedParentTaskId\r\n : null;\r\n }\r\n\r\n private normalizeConfiguration(configuration: WorkspaceTaskConfiguration | null | undefined): WorkspaceTaskConfiguration | null {\r\n if (!configuration || Object.keys(configuration).length === 0) {\r\n return null;\r\n }\r\n\r\n return configuration;\r\n }\r\n\r\n private serializeConfiguration(configuration: WorkspaceTaskConfiguration | null): string {\r\n if (!configuration) {\r\n return '';\r\n }\r\n\r\n try {\r\n return JSON.stringify(configuration);\r\n } catch {\r\n return '';\r\n }\r\n }\r\n\r\n private deserializeConfiguration(rawConfiguration: string | null): WorkspaceTaskConfiguration | null {\r\n if (!rawConfiguration?.trim()) {\r\n return null;\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(rawConfiguration);\r\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\r\n ? parsed as WorkspaceTaskConfiguration\r\n : null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private parseMenuConfiguration(value: string | null): WorkspaceTaskConfiguration | null {\r\n return this.deserializeConfiguration(value);\r\n }\r\n\r\n private toWorkspaceTaskConfiguration(configuration: CrudPageComponentConfiguration | null | undefined): WorkspaceTaskConfiguration | null {\r\n if (!configuration) {\r\n return null;\r\n }\r\n\r\n const entries = Object.entries(configuration)\r\n .filter(([, value]) => value !== undefined && value !== null);\r\n if (entries.length === 0) {\r\n return null;\r\n }\r\n\r\n return Object.fromEntries(entries) as WorkspaceTaskConfiguration;\r\n }\r\n\r\n private buildCrudTaskConfiguration(request: OpenCrudTaskRequest): WorkspaceTaskConfiguration {\r\n const configuration = this.toWorkspaceTaskConfiguration(request.componentConfiguration) ?? {};\r\n const chillType = request.chillType.trim();\r\n const viewCode = request.viewCode?.trim() || 'default';\r\n const queryChillType = request.queryChillType?.trim() || null;\r\n\r\n return {\r\n ...configuration,\r\n chillType,\r\n viewCode,\r\n ...(queryChillType ? { chillQuery: queryChillType } : {})\r\n };\r\n }\r\n\r\n private readConfigString(\r\n configuration: WorkspaceTaskConfiguration | null,\r\n keys: string[]\r\n ): string {\r\n if (!configuration) {\r\n return '';\r\n }\r\n\r\n for (const key of keys) {\r\n const value = configuration[key];\r\n if (typeof value === 'string' && value.trim()) {\r\n return value.trim();\r\n }\r\n }\r\n\r\n const normalizedKeys = keys.map((key) => key.toLowerCase());\r\n for (const [key, value] of Object.entries(configuration)) {\r\n if (typeof value === 'string' && value.trim() && normalizedKeys.includes(key.toLowerCase())) {\r\n return value.trim();\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n ComponentRef,\r\n ViewContainerRef,\r\n computed,\r\n effect,\r\n inject,\r\n signal,\r\n viewChildren\r\n} from '@angular/core';\r\nimport { ChillService } from '../services/chill.service';\r\nimport { WorkspaceDialogService } from '../services/workspace-dialog.service';\r\nimport type { WorkspaceTaskComponent } from '../models/workspace-task.models';\r\nimport { ChillI18nButtonLabelComponent } from '../lib/chill-i18n-button-label.component';\r\nimport { WorkspaceToolbarService } from '../services/workspace-toolbar.service';\r\n\r\ninterface DialogSubmitComponent {\r\n submit(): void | Promise<void>;\r\n canDialogSubmit?(): boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-workspace-dialog-host',\r\n standalone: true,\r\n imports: [CommonModule, ChillI18nButtonLabelComponent],\r\n template: `\r\n @if (dialog.dialogs().length > 0) {\r\n @for (activeDialog of dialog.dialogs(); track activeDialog.id) {\r\n @if (isTopDialog(activeDialog.id)) {\r\n <div class=\"workspace-dialog-backdrop\" (click)=\"cancel(activeDialog.id)\"></div>\r\n }\r\n\r\n <section\r\n class=\"workspace-dialog\"\r\n [ngClass]=\"activeDialog.panelClass\"\r\n [class.is-background]=\"!isTopDialog(activeDialog.id)\"\r\n role=\"dialog\"\r\n [attr.aria-modal]=\"isTopDialog(activeDialog.id) ? 'true' : null\"\r\n [attr.aria-hidden]=\"isTopDialog(activeDialog.id) ? null : 'true'\"\r\n [attr.aria-label]=\"activeDialog.title\">\r\n <header class=\"workspace-dialog__toolbar\">\r\n <div class=\"workspace-dialog__title\">\r\n <p>{{ chill.T('4ED0A2E7-CFF1-4593-8861-18B9EBF9F10A', 'Task dialog', 'Dialog attivita') }}</p>\r\n <h2>{{ activeDialog.title }}</h2>\r\n </div>\r\n\r\n @if (isTopDialog(activeDialog.id) && toolbarButtons().length > 0) {\r\n <div class=\"workspace-dialog__toolbar-actions\">\r\n @for (button of toolbarButtons(); track button.id) {\r\n <button\r\n type=\"button\"\r\n class=\"workspace-dialog__toolbar-button\"\r\n (click)=\"button.action()\"\r\n [disabled]=\"button.disabled\"\r\n [attr.aria-label]=\"button.ariaLabel || button.label || button.primaryDefaultText\">\r\n @if (button.icon) {\r\n <span\r\n class=\"workspace-dialog__toolbar-button-icon\"\r\n [class.material-symbol-icon]=\"button.iconClass === 'material-symbol-icon'\"\r\n aria-hidden=\"true\">{{ button.icon }}</span>\r\n }\r\n @if (button.labelGuid && button.primaryDefaultText && button.secondaryDefaultText) {\r\n <app-chill-i18n-button-label\r\n [labelGuid]=\"button.labelGuid\"\r\n [primaryDefaultText]=\"button.primaryDefaultText\"\r\n [secondaryDefaultText]=\"button.secondaryDefaultText\" />\r\n } @else {\r\n <span>{{ button.label }}</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n class=\"workspace-dialog__close\"\r\n (click)=\"cancel(activeDialog.id)\"\r\n [disabled]=\"isBusy() || !isTopDialog(activeDialog.id)\"\r\n [attr.aria-label]=\"activeDialog.cancelLabel || chill.T('C10CCB95-A6D7-40F1-ACAD-3A8F318958C2', 'Close dialog', 'Chiudi dialog')\">\r\n x\r\n </button>\r\n </header>\r\n\r\n <div class=\"workspace-dialog__content\">\r\n <ng-template #contentHost />\r\n </div>\r\n\r\n <footer class=\"workspace-dialog__bottom-bar\">\r\n @if (errorMessage()) {\r\n <p class=\"workspace-dialog__error\">{{ errorMessage() }}</p>\r\n }\r\n\r\n <div class=\"workspace-dialog__actions\">\r\n @if (activeDialog.showCancelButton !== false) {\r\n <button type=\"button\" class=\"workspace-dialog__button secondary\" (click)=\"cancel(activeDialog.id)\" [disabled]=\"isBusy() || !isTopDialog(activeDialog.id)\">\r\n @if (activeDialog.cancelLabel) {\r\n {{ activeDialog.cancelLabel }}\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'4DA4C4BA-0D5B-41B5-B49D-685D7C374D71'\" [primaryDefaultText]=\"'Cancel'\" [secondaryDefaultText]=\"'Annulla'\" />\r\n }\r\n </button>\r\n }\r\n\r\n @if (activeDialog.showOkButton !== false) {\r\n <button type=\"button\" class=\"workspace-dialog__button primary\" (click)=\"confirm(activeDialog.id)\" [disabled]=\"isBusy() || !isTopDialog(activeDialog.id) || !canConfirm()\">\r\n {{ isBusy()\r\n ? chill.T('08325F54-06AE-40E5-93EF-3C49B8E0B965', 'Working...', 'Elaborazione...')\r\n : '' }}\r\n @if (!isBusy()) {\r\n @if (activeDialog.okLabel) {\r\n {{ activeDialog.okLabel }}\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'AF183C6E-44B2-4CB3-97F7-01F0E7D01214'\" [primaryDefaultText]=\"'OK'\" [secondaryDefaultText]=\"'OK'\" />\r\n }\r\n }\r\n @if (isBusy()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'08325F54-06AE-40E5-93EF-3C49B8E0B965'\" [primaryDefaultText]=\"'Working...'\" [secondaryDefaultText]=\"'Elaborazione...'\" />\r\n }\r\n </button>\r\n }\r\n </div>\r\n </footer>\r\n </section>\r\n }\r\n }\r\n `,\r\n styles: `\r\n :host {\r\n position: fixed;\r\n inset: 0;\r\n z-index: 40;\r\n pointer-events: none;\r\n }\r\n\r\n .workspace-dialog-backdrop,\r\n .workspace-dialog {\r\n pointer-events: auto;\r\n }\r\n\r\n .workspace-dialog-backdrop {\r\n position: absolute;\r\n inset: 0;\r\n background: rgba(7, 15, 20, 0.45);\r\n backdrop-filter: blur(8px);\r\n }\r\n\r\n .workspace-dialog {\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n width: min(72rem, calc(100vw - 2rem));\r\n max-height: calc(100vh - 2rem);\r\n display: grid;\r\n grid-template-rows: auto minmax(0, 1fr) auto;\r\n transform: translate(-50%, -50%);\r\n border-radius: 1rem;\r\n border: 1px solid var(--border-color);\r\n background: var(--surface-3);\r\n box-shadow: var(--shadow);\r\n overflow: hidden;\r\n }\r\n\r\n .workspace-dialog.is-background {\r\n pointer-events: none;\r\n }\r\n\r\n .workspace-dialog__toolbar,\r\n .workspace-dialog__bottom-bar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 1rem;\r\n padding: 1rem 1.25rem;\r\n border-bottom: 1px solid var(--border-color);\r\n background: color-mix(in srgb, var(--surface-2) 88%, transparent);\r\n }\r\n\r\n .workspace-dialog__bottom-bar {\r\n border-top: 1px solid var(--border-color);\r\n border-bottom: 0;\r\n }\r\n\r\n .workspace-dialog__title p,\r\n .workspace-dialog__title h2 {\r\n margin: 0;\r\n }\r\n\r\n .workspace-dialog__title p {\r\n color: var(--accent);\r\n text-transform: uppercase;\r\n letter-spacing: 0.16em;\r\n font-size: 0.72rem;\r\n font-weight: 700;\r\n }\r\n\r\n .workspace-dialog__title h2 {\r\n margin-top: 0.25rem;\r\n font-size: 1.25rem;\r\n }\r\n\r\n .workspace-dialog__close,\r\n .workspace-dialog__button {\r\n border: 0;\r\n cursor: pointer;\r\n font: inherit;\r\n }\r\n\r\n .workspace-dialog__toolbar-actions {\r\n display: flex;\r\n flex: 1 1 auto;\r\n justify-content: flex-end;\r\n flex-wrap: wrap;\r\n gap: 0.65rem;\r\n }\r\n\r\n .workspace-dialog__toolbar-button {\r\n min-height: 2.5rem;\r\n padding: 0.6rem 0.9rem;\r\n border: 1px solid var(--border-color);\r\n border-radius: 999px;\r\n background: var(--surface-0);\r\n color: var(--text-main);\r\n cursor: pointer;\r\n font: inherit;\r\n font-weight: 700;\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.45rem;\r\n }\r\n\r\n .workspace-dialog__toolbar-button:disabled {\r\n cursor: not-allowed;\r\n opacity: 0.65;\r\n }\r\n\r\n .workspace-dialog__toolbar-button-icon {\r\n font-size: 0.8rem;\r\n }\r\n\r\n .workspace-dialog__close {\r\n width: 2.5rem;\r\n height: 2.5rem;\r\n border-radius: 0.8rem;\r\n background: var(--surface-2);\r\n color: var(--text-main);\r\n }\r\n\r\n .workspace-dialog__content {\r\n min-height: 0;\r\n overflow: auto;\r\n padding: 1.25rem;\r\n }\r\n\r\n .workspace-dialog__actions {\r\n margin-left: auto;\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 0.75rem;\r\n }\r\n\r\n .workspace-dialog__button {\r\n min-height: 2.9rem;\r\n padding: 0.75rem 1.1rem;\r\n border-radius: 0.8rem;\r\n font-weight: 700;\r\n }\r\n\r\n .workspace-dialog__button.secondary {\r\n border: 1px solid var(--border-color);\r\n background: var(--surface-0);\r\n color: var(--text-main);\r\n }\r\n\r\n .workspace-dialog__button.primary {\r\n background: linear-gradient(135deg, var(--accent), var(--accent-strong));\r\n color: var(--surface-0);\r\n }\r\n\r\n .workspace-dialog__error {\r\n margin: 0;\r\n color: var(--danger);\r\n max-width: 100%;\r\n max-height: 5rem;\r\n overflow-x: hidden;\r\n overflow-y: auto;\r\n overflow-wrap: anywhere;\r\n word-break: break-word;\r\n }\r\n\r\n @media (max-width: 720px) {\r\n .workspace-dialog {\r\n width: calc(100vw - 1rem);\r\n max-height: calc(100vh - 1rem);\r\n }\r\n\r\n .workspace-dialog.workspace-dialog--mobile-full-height {\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n max-height: 100vh;\r\n border-width: 0;\r\n border-radius: 0;\r\n transform: none;\r\n }\r\n\r\n .workspace-dialog.workspace-dialog--mobile-full-height .workspace-dialog__content {\r\n display: grid;\r\n }\r\n\r\n .workspace-dialog__toolbar,\r\n .workspace-dialog__bottom-bar,\r\n .workspace-dialog__content {\r\n padding: 0.9rem;\r\n }\r\n\r\n .workspace-dialog__toolbar {\r\n flex-wrap: wrap;\r\n }\r\n\r\n .workspace-dialog__toolbar-actions {\r\n width: 100%;\r\n justify-content: stretch;\r\n }\r\n\r\n .workspace-dialog__bottom-bar {\r\n flex-direction: column;\r\n align-items: stretch;\r\n }\r\n\r\n .workspace-dialog__actions {\r\n width: 100%;\r\n }\r\n\r\n .workspace-dialog__button {\r\n flex: 1 1 0;\r\n }\r\n\r\n .workspace-dialog__toolbar-button {\r\n flex: 1 1 10rem;\r\n justify-content: center;\r\n }\r\n }\r\n `\r\n})\r\nexport class WorkspaceDialogHostComponent {\r\n readonly chill = inject(ChillService);\r\n readonly dialog = inject(WorkspaceDialogService);\r\n readonly toolbar = inject(WorkspaceToolbarService);\r\n\r\n private readonly contentHosts = viewChildren('contentHost', { read: ViewContainerRef });\r\n\r\n readonly isBusy = signal(false);\r\n readonly errorMessage = signal('');\r\n readonly toolbarButtons = computed(() => this.toolbar.buttons('dialog'));\r\n\r\n private readonly contentRefs = new Map<number, ComponentRef<unknown>>();\r\n private readonly activeDialog = computed(() => this.dialog.activeDialog());\r\n private activeDialogId = 0;\r\n\r\n constructor() {\r\n effect(() => {\r\n const activeDialog = this.activeDialog();\r\n const activeDialogId = activeDialog?.id ?? 0;\r\n if (activeDialogId !== this.activeDialogId) {\r\n this.activeDialogId = activeDialogId;\r\n this.isBusy.set(false);\r\n this.errorMessage.set('');\r\n }\r\n });\r\n\r\n effect(() => {\r\n const dialogs = this.dialog.dialogs();\r\n const hosts = this.contentHosts();\r\n if (hosts.length < dialogs.length) {\r\n return;\r\n }\r\n\r\n const liveDialogIds = new Set(dialogs.map((activeDialog) => activeDialog.id));\r\n for (const [dialogId, contentRef] of this.contentRefs) {\r\n if (liveDialogIds.has(dialogId)) {\r\n continue;\r\n }\r\n\r\n contentRef.destroy();\r\n this.contentRefs.delete(dialogId);\r\n }\r\n\r\n dialogs.forEach((activeDialog, index) => {\r\n if (this.contentRefs.has(activeDialog.id)) {\r\n return;\r\n }\r\n\r\n const host = hosts[index];\r\n if (!host) {\r\n return;\r\n }\r\n\r\n host.clear();\r\n const contentRef = host.createComponent(activeDialog.component);\r\n for (const [key, value] of Object.entries(activeDialog.inputs ?? {})) {\r\n contentRef.setInput(key, value);\r\n }\r\n this.contentRefs.set(activeDialog.id, contentRef);\r\n });\r\n });\r\n }\r\n\r\n isTopDialog(dialogId: number): boolean {\r\n return this.activeDialog()?.id === dialogId;\r\n }\r\n\r\n cancel(dialogId?: number): void {\r\n if (this.isBusy() || (dialogId !== undefined && !this.isTopDialog(dialogId))) {\r\n return;\r\n }\r\n\r\n this.dialog.cancel();\r\n }\r\n\r\n async confirm(dialogId?: number): Promise<void> {\r\n if (this.isBusy() || (dialogId !== undefined && !this.isTopDialog(dialogId))) {\r\n return;\r\n }\r\n\r\n const activeDialog = this.activeDialog();\r\n if (!activeDialog) {\r\n return;\r\n }\r\n\r\n const contentRef = this.contentRefs.get(activeDialog.id) ?? null;\r\n this.errorMessage.set('');\r\n\r\n try {\r\n const componentInstance = contentRef?.instance;\r\n if (this.isDialogSubmitter(componentInstance)) {\r\n await componentInstance.submit();\r\n return;\r\n }\r\n\r\n this.isBusy.set(true);\r\n const value = this.isDialogTask(componentInstance)\r\n ? await componentInstance.dialogResult?.()\r\n : undefined;\r\n\r\n this.dialog.confirm(value);\r\n } catch (error) {\r\n this.errorMessage.set(this.chill.formatError(error));\r\n this.isBusy.set(false);\r\n }\r\n }\r\n\r\n canConfirm(): boolean {\r\n const activeDialog = this.activeDialog();\r\n const componentInstance = activeDialog\r\n ? this.contentRefs.get(activeDialog.id)?.instance\r\n : null;\r\n return this.isDialogSubmitter(componentInstance)\r\n ? (componentInstance.canDialogSubmit?.() ?? true)\r\n : true;\r\n }\r\n\r\n private isDialogTask(value: unknown): value is WorkspaceTaskComponent<unknown> {\r\n return !!value && typeof value === 'object' && 'dialogResult' in value;\r\n }\r\n\r\n private isDialogSubmitter(value: unknown): value is DialogSubmitComponent {\r\n return !!value && typeof value === 'object' && 'submit' in value && typeof value.submit === 'function';\r\n }\r\n}\r\n","import type { JsonValue } from '@chill-sharp/ng-client';\r\nimport type { ChillSchema, ChillSchemaRelation, ChillSchemaRelationLabel } from '../models/chill-schema.models';\r\n\r\nexport function applySchemaRelationsToCrudConfiguration(\r\n baseConfiguration: Record<string, unknown>,\r\n schema: ChillSchema | null\r\n): Record<string, unknown> {\r\n return {\r\n ...baseConfiguration,\r\n relations: buildCrudRelationsFromSchema(schema)\r\n };\r\n}\r\n\r\nexport function buildCrudRelationsFromSchema(schema: ChillSchema | null): Record<string, unknown>[] {\r\n if (!schema || !Array.isArray(schema.relations)) {\r\n return [];\r\n }\r\n\r\n return schema.relations\r\n .map((relation) => mapSchemaRelationToCrudConfiguration(relation))\r\n .filter((relation): relation is Record<string, unknown> => relation !== null);\r\n}\r\n\r\nfunction mapSchemaRelationToCrudConfiguration(relation: ChillSchemaRelation): Record<string, unknown> | null {\r\n const chillType = normalizeString(relation.chillType);\r\n if (!chillType) {\r\n return null;\r\n }\r\n\r\n const configuration: Record<string, unknown> = {\r\n chillType\r\n };\r\n\r\n const chillQuery = normalizeString(relation.chillQuery);\r\n if (chillQuery) {\r\n configuration['chillQuery'] = chillQuery;\r\n }\r\n\r\n const fixedValues = normalizeJsonRecord(relation.fixedValues);\r\n if (Object.keys(fixedValues).length > 0) {\r\n configuration['fixedValues'] = fixedValues;\r\n }\r\n\r\n const fixedQueryValues = normalizeJsonRecord(relation.fixedQueryValues);\r\n if (Object.keys(fixedQueryValues).length > 0) {\r\n configuration['fixedQueryValues'] = fixedQueryValues;\r\n }\r\n\r\n const relationLabel = mapRelationLabel(relation.relationLabel);\r\n if (relationLabel) {\r\n configuration['relationLabel'] = relationLabel;\r\n }\r\n\r\n return configuration;\r\n}\r\n\r\nfunction mapRelationLabel(relationLabel: ChillSchemaRelationLabel | null | undefined): Record<string, string> | null {\r\n if (!relationLabel) {\r\n return null;\r\n }\r\n\r\n const labelGuid = normalizeString(relationLabel.labelGuid);\r\n const primaryDefaultText = normalizeString(relationLabel.primaryDefaultText);\r\n const secondaryDefaultText = normalizeString(relationLabel.secondaryDefaultText);\r\n if (!labelGuid || !primaryDefaultText || !secondaryDefaultText) {\r\n return null;\r\n }\r\n\r\n return {\r\n labelGuid,\r\n primaryDefaultText,\r\n secondaryDefaultText\r\n };\r\n}\r\n\r\nfunction normalizeJsonRecord(value: Record<string, JsonValue> | undefined): Record<string, JsonValue> {\r\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\r\n return {};\r\n }\r\n\r\n return Object.fromEntries(\r\n Object.entries(value)\r\n .map(([key, entryValue]) => [key.trim(), entryValue] as const)\r\n .filter(([key]) => key.length > 0)\r\n );\r\n}\r\n\r\nfunction normalizeString(value: unknown): string {\r\n return typeof value === 'string'\r\n ? value.trim()\r\n : '';\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, OnDestroy, OnInit, computed, inject, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { applySchemaRelationsToCrudConfiguration } from '../lib/crud-configuration.utils';\r\nimport type { ChillMenuItem } from '../models/chill-menu.models';\r\nimport type { ChillSchema, ChillSchemaListItem } from '../models/chill-schema.models';\r\nimport { ChillService } from '../services/chill.service';\r\nimport { WorkspaceDialogService } from '../services/workspace-dialog.service';\r\nimport { WorkspaceLayoutService } from '../services/workspace-layout.service';\r\nimport { WorkspaceService } from '../services/workspace.service';\r\n\r\ninterface CrudSchemaOption {\r\n module: string;\r\n chillType: string;\r\n queryChillType: string;\r\n displayName: string;\r\n viewCode: string;\r\n}\r\n\r\ninterface EntityOptionsSchemaOption {\r\n module: string;\r\n chillType: string;\r\n displayName: string;\r\n kind: 'Entity' | 'Query';\r\n}\r\n\r\ninterface WorkspaceMenuNode {\r\n item: ChillMenuItem;\r\n children: WorkspaceMenuNode[];\r\n childrenLoaded: boolean;\r\n isExpanded: boolean;\r\n isLoadingChildren: boolean;\r\n childrenError: string;\r\n hasChildren: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-workspace-menu',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n styles: `\r\n :host {\r\n display: block;\r\n height: 100%;\r\n min-height: 0;\r\n }\r\n `,\r\n template: `\r\n <div class=\"workspace-menu\">\r\n <div class=\"workspace-menu__header\">\r\n <p class=\"eyebrow\">Workspace menu</p>\r\n <h2>Tasks</h2>\r\n <!-- <p>Task navigation lives here. The menu structure can be expanded later without changing the shell.</p> -->\r\n </div>\r\n\r\n <section class=\"workspace-menu__managed-menu\">\r\n <div class=\"workspace-menu__section-heading workspace-menu__section-heading--row\">\r\n <div>\r\n <strong>{{ chill.T('F0E48F17-2E1F-43CC-A37F-21A503E7A1BF', 'Application menu', 'Menu applicazione') }}</strong>\r\n <!-- <span>{{ chill.T('D7D35597-D998-4892-9288-4FC4B48C53A9', 'Root nodes are loaded first; child branches are prepared lazily.', 'I nodi radice sono caricati per primi; i rami figli sono preparati in modo lazy.') }}</span> -->\r\n </div>\r\n </div>\r\n\r\n @if (menuLoadError()) {\r\n <p class=\"workspace-menu__status error\">{{ menuLoadError() }}</p>\r\n } @else if (isLoadingMenu()) {\r\n <p class=\"workspace-menu__status\">{{ chill.T('E5B9FD29-47DA-40A6-810C-85BC6241D07A', 'Loading menu...', 'Caricamento menu...') }}</p>\r\n } @else if (menuRoots().length === 0) {\r\n <p class=\"workspace-menu__status\">{{ chill.T('96C1B2E5-D6CA-4C53-8353-D97D4F8E0B09', 'No menu items are available for the current user.', \"Nessuna voce menu disponibile per l'utente corrente.\") }}</p>\r\n } @else {\r\n <nav class=\"workspace-menu__tree\" aria-label=\"Application menu\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"treeCollection\"\r\n [ngTemplateOutletContext]=\"{ nodes: menuRoots(), depth: 0, parent: null }\" />\r\n </nav>\r\n }\r\n\r\n @if (layout.isLayoutEditingEnabled()) {\r\n <button\r\n type=\"button\"\r\n class=\"workspace-menu__item workspace-menu__item--compact workspace-menu__root-action\"\r\n (click)=\"createMenuItem(null)\">\r\n {{ chill.T('9CC0E7F1-D5E2-4A0F-B3BF-E11FB31C26D4', 'Add root item', 'Aggiungi nodo radice') }}\r\n </button>\r\n }\r\n </section>\r\n\r\n @if (layout.isLayoutEditingEnabled()) {\r\n <section class=\"workspace-menu__crud-launcher\">\r\n <div class=\"workspace-menu__section-heading\">\r\n <strong>Open CRUD task</strong>\r\n <span>Select a module and type, then confirm the view code.</span>\r\n </div>\r\n\r\n @if (schemaLoadError()) {\r\n <p class=\"workspace-menu__status error\">{{ schemaLoadError() }}</p>\r\n } @else if (isLoadingSchemas()) {\r\n <p class=\"workspace-menu__status\">Loading CRUD types...</p>\r\n }\r\n\r\n <label class=\"workspace-menu__field\">\r\n <span>Module</span>\r\n <select\r\n [ngModel]=\"selectedModule()\"\r\n (ngModelChange)=\"selectModule($event)\"\r\n [disabled]=\"isLoadingSchemas() || moduleOptions().length === 0\">\r\n @for (module of moduleOptions(); track module) {\r\n <option [value]=\"module\">{{ module }}</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <label class=\"workspace-menu__field\">\r\n <span>Type</span>\r\n <select\r\n [ngModel]=\"selectedChillType()\"\r\n (ngModelChange)=\"selectedChillType.set($event)\"\r\n [disabled]=\"isLoadingSchemas() || filteredCrudTypes().length === 0\">\r\n @for (schema of filteredCrudTypes(); track schema.chillType) {\r\n <option [value]=\"schema.chillType\">{{ schema.displayName }} ({{ schema.chillType }})</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <label class=\"workspace-menu__field\">\r\n <span>View code</span>\r\n <input\r\n type=\"text\"\r\n [ngModel]=\"viewCode()\"\r\n (ngModelChange)=\"viewCode.set(normalizeViewCode($event))\"\r\n placeholder=\"default\" />\r\n </label>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"workspace-menu__item workspace-menu__item--launch\"\r\n (click)=\"openCrudTask()\"\r\n [disabled]=\"!selectedCrudSchema()\">\r\n <strong>Open CRUD</strong>\r\n <span>{{ selectedCrudSchema()?.displayName || 'Choose a type to create a CRUD task.' }}</span>\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"workspace-menu__item workspace-menu__item--launch\"\r\n (click)=\"addCrudTaskToMenu()\"\r\n [disabled]=\"!selectedCrudSchema()\">\r\n <strong>Add to menu</strong>\r\n <span>{{ selectedCrudSchema()?.displayName || 'Choose a type to add it to the application menu.' }}</span>\r\n </button>\r\n </section>\r\n\r\n <section class=\"workspace-menu__crud-launcher\">\r\n <div class=\"workspace-menu__section-heading\">\r\n <strong>Entity option</strong>\r\n <span>Select a model and type, including query types, then configure its options.</span>\r\n </div>\r\n\r\n @if (schemaLoadError()) {\r\n <p class=\"workspace-menu__status error\">{{ schemaLoadError() }}</p>\r\n } @else if (isLoadingSchemas()) {\r\n <p class=\"workspace-menu__status\">Loading types...</p>\r\n }\r\n\r\n <label class=\"workspace-menu__field\">\r\n <span>Model</span>\r\n <select\r\n [ngModel]=\"selectedEntityOptionsModule()\"\r\n (ngModelChange)=\"selectEntityOptionsModule($event)\"\r\n [disabled]=\"isLoadingSchemas() || entityOptionsModuleOptions().length === 0\">\r\n @for (module of entityOptionsModuleOptions(); track module) {\r\n <option [value]=\"module\">{{ module }}</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <label class=\"workspace-menu__field\">\r\n <span>Type</span>\r\n <select\r\n [ngModel]=\"selectedEntityOptionsChillType()\"\r\n (ngModelChange)=\"selectedEntityOptionsChillType.set($event)\"\r\n [disabled]=\"isLoadingSchemas() || filteredEntityOptionsTypes().length === 0\">\r\n @for (schema of filteredEntityOptionsTypes(); track schema.chillType) {\r\n <option [value]=\"schema.chillType\">{{ schema.displayName }} ({{ schema.kind }}: {{ schema.chillType }})</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"workspace-menu__item workspace-menu__item--launch\"\r\n (click)=\"openEntityOptionsDialog()\"\r\n [disabled]=\"!selectedEntityOptionsSchema()\">\r\n <strong>Configure</strong>\r\n <span>{{ selectedEntityOptionsSchema()?.displayName || 'Choose a type to configure its options.' }}</span>\r\n </button>\r\n </section>\r\n }\r\n\r\n <!-- <nav class=\"workspace-menu__list\">\r\n @for (task of quickTasks(); track task.componentName) {\r\n <button\r\n type=\"button\"\r\n class=\"workspace-menu__item\"\r\n [class.active]=\"workspace.activeTask()?.taskType === task.componentName\"\r\n (click)=\"openQuickTask(task.componentName)\">\r\n <strong>{{ task.title }}</strong>\r\n <span>{{ task.description }}</span>\r\n </button>\r\n }\r\n </nav> -->\r\n\r\n <ng-template #treeCollection let-nodes=\"nodes\" let-depth=\"depth\" let-parent=\"parent\">\r\n @for (node of nodes; track node.item.guid; let index = $index) {\r\n @if (layout.isLayoutEditingEnabled()) {\r\n <div\r\n class=\"workspace-menu__drop-zone\"\r\n [style.--menu-depth]=\"depth\"\r\n [class.is-active]=\"isDropTarget(parent, index)\"\r\n (dragover)=\"allowMenuDrop($event)\"\r\n (drop)=\"dropMenuItem(parent, index)\">\r\n </div>\r\n }\r\n\r\n <ng-container [ngTemplateOutlet]=\"treeNode\" [ngTemplateOutletContext]=\"{ $implicit: node, depth: depth }\" />\r\n }\r\n\r\n @if (layout.isLayoutEditingEnabled()) {\r\n <div\r\n class=\"workspace-menu__drop-zone\"\r\n [style.--menu-depth]=\"depth\"\r\n [class.is-active]=\"isDropTarget(parent, nodes.length)\"\r\n (dragover)=\"allowMenuDrop($event)\"\r\n (drop)=\"dropMenuItem(parent, nodes.length)\">\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #treeNode let-node let-depth=\"depth\">\r\n <div class=\"workspace-menu__tree-node\" [style.--menu-depth]=\"depth\">\r\n <div\r\n class=\"workspace-menu__tree-row\"\r\n [class.is-dragging]=\"draggedMenuItemGuid() === node.item.guid\"\r\n [draggable]=\"layout.isLayoutEditingEnabled()\"\r\n (dragstart)=\"beginMenuDrag(node.item)\"\r\n (dragend)=\"endMenuDrag()\">\r\n <div\r\n class=\"workspace-menu__tree-main\"\r\n [class.is-active]=\"isMenuTaskActive(node.item)\"\r\n [class.is-pending-expand]=\"dragHoverExpandGuid() === node.item.guid\"\r\n (dragover)=\"allowMenuDrop($event); hoverMenuItem(node)\"\r\n (drop)=\"dropMenuItemAsChild(node, $event)\"\r\n (dragleave)=\"leaveMenuItem(node, $event)\">\r\n <div class=\"workspace-menu__tree-body\">\r\n <button\r\n type=\"button\"\r\n class=\"workspace-menu__tree-trigger\"\r\n [disabled]=\"node.item.componentName === null || node.item.componentName === ''\"\r\n (click)=\"openMenuItem(node.item)\">\r\n <span class=\"workspace-menu__tree-label\">\r\n <strong>{{ node.item.title }}</strong>\r\n </span>\r\n </button>\r\n\r\n @if (layout.isLayoutEditingEnabled()) {\r\n <div class=\"workspace-menu__tree-actions workspace-menu__tree-actions--inline\">\r\n <button\r\n type=\"button\"\r\n class=\"workspace-menu__tree-action\"\r\n [attr.aria-label]=\"chill.T('918FE5BA-CF28-4A7E-BDD8-E9546CC53A67', 'Add child', 'Aggiungi figlio')\"\r\n [title]=\"chill.T('918FE5BA-CF28-4A7E-BDD8-E9546CC53A67', 'Add child', 'Aggiungi figlio')\"\r\n (click)=\"createMenuItem(node.item)\">\r\n <span class=\"material-symbol-icon\" aria-hidden=\"true\">add</span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"workspace-menu__tree-action\"\r\n [attr.aria-label]=\"chill.T('6E9A69C0-C4A1-433A-97BC-9E8D1CBD2B53', 'Edit', 'Modifica')\"\r\n [title]=\"chill.T('6E9A69C0-C4A1-433A-97BC-9E8D1CBD2B53', 'Edit', 'Modifica')\"\r\n (click)=\"editMenuItem(node.item)\">\r\n <span class=\"material-symbol-icon\" aria-hidden=\"true\">edit</span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"workspace-menu__tree-action\"\r\n [attr.aria-label]=\"chill.T('0D13D4B2-4D2B-4D17-9A89-C30979DA24D5', 'Delete', 'Elimina')\"\r\n [title]=\"chill.T('0D13D4B2-4D2B-4D17-9A89-C30979DA24D5', 'Delete', 'Elimina')\"\r\n (click)=\"deleteMenuItem(node.item)\">\r\n <span class=\"material-symbol-icon\" aria-hidden=\"true\">delete</span>\r\n </button>\r\n </div>\r\n } @else if (node.isExpanded) {\r\n <div class=\"workspace-menu__tree-meta\">\r\n @if (node.item.description) {\r\n <span>{{ node.item.description }}</span>\r\n } @else {\r\n <span>{{ node.item.componentName }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(node.isLoadingChildren || node.hasChildren)\r\n {\r\n <button\r\n type=\"button\"\r\n class=\"workspace-menu__tree-expander\"\r\n [disabled]=\"!node.hasChildren && !node.isLoadingChildren\"\r\n [class.is-placeholder]=\"!node.hasChildren && !node.isLoadingChildren\"\r\n (click)=\"toggleNode(node)\"\r\n [attr.aria-label]=\"node.isExpanded\r\n ? chill.T('3E81EBAA-9CF7-4259-BCA8-483D30FC0A93', 'Collapse menu branch', 'Comprimi ramo menu')\r\n : chill.T('D2EEB263-B9CA-4C31-910B-BB9C5DC585DF', 'Expand menu branch', 'Espandi ramo menu')\">\r\n @if (node.isLoadingChildren) {\r\n <span class=\"workspace-menu__tree-expander-icon material-symbol-icon\">more_horiz</span>\r\n } @else if (node.hasChildren) {\r\n <span class=\"workspace-menu__tree-expander-icon material-symbol-icon\">\r\n {{ node.isExpanded ? 'expand_less' : 'expand_more' }}\r\n </span>\r\n } @else {\r\n <span class=\"workspace-menu__tree-expander-icon material-symbol-icon\">chevron_right</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (node.childrenError) {\r\n <p class=\"workspace-menu__status error workspace-menu__status--nested\">{{ node.childrenError }}</p>\r\n }\r\n\r\n @if (node.isExpanded && node.children.length > 0) {\r\n <div class=\"workspace-menu__tree-children\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"treeCollection\"\r\n [ngTemplateOutletContext]=\"{ nodes: node.children, depth: depth + 1, parent: node.item }\" />\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </div>\r\n `\r\n})\r\nexport class WorkspaceMenuComponent implements OnInit, OnDestroy {\r\n readonly chill = inject(ChillService);\r\n readonly workspace = inject(WorkspaceService);\r\n readonly dialog = inject(WorkspaceDialogService);\r\n readonly layout = inject(WorkspaceLayoutService);\r\n readonly isLoadingSchemas = signal(true);\r\n readonly schemaLoadError = signal('');\r\n readonly crudTypes = signal<CrudSchemaOption[]>([]);\r\n readonly entityOptionsTypes = signal<EntityOptionsSchemaOption[]>([]);\r\n readonly selectedModule = signal('');\r\n readonly selectedChillType = signal('');\r\n readonly selectedEntityOptionsModule = signal('');\r\n readonly selectedEntityOptionsChillType = signal('');\r\n readonly viewCode = signal('default');\r\n readonly isLoadingMenu = signal(true);\r\n readonly menuLoadError = signal('');\r\n readonly menuRoots = signal<WorkspaceMenuNode[]>([]);\r\n readonly draggedMenuItemGuid = signal('');\r\n readonly dragHoverExpandGuid = signal('');\r\n private readonly dragHoverExpandTimers = new Map<string, ReturnType<typeof setTimeout>>();\r\n readonly quickTasks = computed(() => this.workspace.availableTasks()\r\n .filter((task) => task.showInQuickLaunch && task.componentName !== 'crud' && task.componentName !== 'permissions'));\r\n readonly moduleOptions = computed(() => [...new Set(this.crudTypes().map((schema) => schema.module))]);\r\n readonly filteredCrudTypes = computed(() => this.crudTypes()\r\n .filter((schema) => schema.module === this.selectedModule()));\r\n readonly selectedCrudSchema = computed(() => this.filteredCrudTypes()\r\n .find((schema) => schema.chillType === this.selectedChillType()) ?? null);\r\n readonly entityOptionsModuleOptions = computed(() => [...new Set(this.entityOptionsTypes().map((schema) => schema.module))]);\r\n readonly filteredEntityOptionsTypes = computed(() => this.entityOptionsTypes()\r\n .filter((schema) => schema.module === this.selectedEntityOptionsModule()));\r\n readonly selectedEntityOptionsSchema = computed(() => this.filteredEntityOptionsTypes()\r\n .find((schema) => schema.chillType === this.selectedEntityOptionsChillType()) ?? null);\r\n\r\n ngOnInit(): void {\r\n this.loadCrudTypes();\r\n void this.loadRootMenu();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearAllDragHoverExpandTimers();\r\n }\r\n\r\n selectModule(module: string): void {\r\n this.selectedModule.set(module);\r\n const firstSchema = this.filteredCrudTypes()[0] ?? null;\r\n this.selectedChillType.set(firstSchema?.chillType ?? '');\r\n }\r\n\r\n selectEntityOptionsModule(module: string): void {\r\n this.selectedEntityOptionsModule.set(module);\r\n const firstSchema = this.filteredEntityOptionsTypes()[0] ?? null;\r\n this.selectedEntityOptionsChillType.set(firstSchema?.chillType ?? '');\r\n }\r\n\r\n openCrudTask(): void {\r\n const schema = this.selectedCrudSchema();\r\n if (!schema) {\r\n return;\r\n }\r\n\r\n this.workspace.openCrudTask({\r\n chillType: schema.chillType,\r\n queryChillType: schema.queryChillType,\r\n viewCode: this.normalizeViewCode(this.viewCode()),\r\n displayName: schema.displayName\r\n });\r\n }\r\n\r\n async addCrudTaskToMenu(): Promise<void> {\r\n const schema = this.selectedCrudSchema();\r\n if (!schema) {\r\n return;\r\n }\r\n\r\n try {\r\n const configuration = await this.buildCrudMenuConfiguration(schema);\r\n const savedItem = await firstValueFrom(this.chill.setMenu({\r\n guid: crypto.randomUUID(),\r\n positionNo: this.menuRoots().length + 1,\r\n title: schema.displayName || schema.chillType,\r\n description: `CRUD task for ${schema.chillType}`,\r\n parent: null,\r\n componentName: 'crud',\r\n componentConfigurationJson: JSON.stringify(configuration, null, 2),\r\n menuHierarchy: schema.module\r\n }));\r\n\r\n await this.refreshMenuBranch(savedItem.parent?.guid ?? null);\r\n } catch (error) {\r\n this.schemaLoadError.set(this.chill.formatError(error));\r\n }\r\n }\r\n\r\n async openEntityOptionsDialog(): Promise<void> {\r\n const schema = this.selectedEntityOptionsSchema();\r\n if (!schema) {\r\n return;\r\n }\r\n\r\n const { EntityOptionsDialogComponent } = await import('./entity-options-dialog.component');\r\n await this.dialog.openDialog<unknown>({\r\n title: `${schema.displayName || schema.chillType} entity options`,\r\n component: EntityOptionsDialogComponent,\r\n inputs: {\r\n chillType: schema.chillType,\r\n displayName: schema.displayName\r\n },\r\n okLabel: this.chill.T('62953302-B951-4FD1-BD08-4B7649A91BAF', 'Save', 'Salva')\r\n });\r\n }\r\n\r\n openQuickTask(componentName: string): void {\r\n void this.workspace.openTask(componentName);\r\n }\r\n\r\n normalizeViewCode(value: string): string {\r\n const normalizedValue = value.trim();\r\n return normalizedValue ? normalizedValue : 'default';\r\n }\r\n\r\n toggleNode(node: WorkspaceMenuNode): void {\r\n if (!node.hasChildren && !node.isLoadingChildren) {\r\n return;\r\n }\r\n\r\n if (!node.childrenLoaded && !node.isLoadingChildren) {\r\n void this.loadNodeChildren(node, true);\r\n return;\r\n }\r\n\r\n this.menuRoots.update((roots) => this.updateNodeCollection(roots, node.item.guid, (current) => ({\r\n ...current,\r\n isExpanded: !current.isExpanded\r\n })));\r\n }\r\n\r\n openMenuItem(item: ChillMenuItem): void {\r\n void this.workspace.openMenuItem(item);\r\n }\r\n\r\n beginMenuDrag(item: ChillMenuItem): void {\r\n if (!this.layout.isLayoutEditingEnabled()) {\r\n return;\r\n }\r\n\r\n this.draggedMenuItemGuid.set(item.guid);\r\n }\r\n\r\n hoverMenuItem(node: WorkspaceMenuNode): void {\r\n if (!this.layout.isLayoutEditingEnabled() || !this.draggedMenuItemGuid() || node.isExpanded || node.isLoadingChildren) {\r\n return;\r\n }\r\n\r\n const draggedGuid = this.draggedMenuItemGuid();\r\n if (!draggedGuid || draggedGuid === node.item.guid) {\r\n return;\r\n }\r\n\r\n const sourceContext = this.findNodeContext(draggedGuid, this.menuRoots(), null);\r\n if (!sourceContext || this.isDescendantOf(sourceContext.node, node.item.guid)) {\r\n return;\r\n }\r\n\r\n if (this.dragHoverExpandTimers.has(node.item.guid)) {\r\n return;\r\n }\r\n\r\n this.dragHoverExpandGuid.set(node.item.guid);\r\n const timer = setTimeout(() => {\r\n this.dragHoverExpandTimers.delete(node.item.guid);\r\n this.dragHoverExpandGuid.update((current) => current === node.item.guid ? '' : current);\r\n void this.expandNodeForHover(node);\r\n }, 1000);\r\n\r\n this.dragHoverExpandTimers.set(node.item.guid, timer);\r\n }\r\n\r\n leaveMenuItem(node: WorkspaceMenuNode, event: DragEvent): void {\r\n const nextTarget = event.relatedTarget;\r\n if (nextTarget instanceof Node && event.currentTarget instanceof Node && event.currentTarget.contains(nextTarget)) {\r\n return;\r\n }\r\n\r\n this.clearDragHoverExpandTimer(node.item.guid);\r\n }\r\n\r\n allowMenuDrop(event: DragEvent): void {\r\n if (!this.layout.isLayoutEditingEnabled() || !this.draggedMenuItemGuid()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n }\r\n\r\n async dropMenuItem(parent: ChillMenuItem | null, targetIndex: number): Promise<void> {\r\n const sourceGuid = this.draggedMenuItemGuid();\r\n this.draggedMenuItemGuid.set('');\r\n this.clearAllDragHoverExpandTimers();\r\n\r\n if (!sourceGuid) {\r\n return;\r\n }\r\n\r\n const sourceContext = this.findNodeContext(sourceGuid, this.menuRoots(), null);\r\n if (!sourceContext) {\r\n return;\r\n }\r\n\r\n if (parent && (parent.guid === sourceGuid || this.isDescendantOf(sourceContext.node, parent.guid))) {\r\n return;\r\n }\r\n\r\n const sourceParentGuid = sourceContext.parent?.item.guid ?? null;\r\n const targetParentGuid = parent?.guid ?? null;\r\n const sourceSiblings = [...sourceContext.siblings];\r\n const targetSiblings = sourceParentGuid === targetParentGuid\r\n ? sourceSiblings\r\n : [...(this.findChildCollection(targetParentGuid) ?? [])];\r\n\r\n if (sourceParentGuid !== targetParentGuid && !this.findChildCollection(targetParentGuid)) {\r\n return;\r\n }\r\n\r\n const [movedNode] = sourceSiblings.splice(sourceContext.index, 1);\r\n if (!movedNode) {\r\n return;\r\n }\r\n\r\n const normalizedTargetIndex = sourceParentGuid === targetParentGuid && sourceContext.index < targetIndex\r\n ? targetIndex - 1\r\n : targetIndex;\r\n const boundedTargetIndex = Math.max(0, Math.min(normalizedTargetIndex, targetSiblings.length));\r\n\r\n if (sourceParentGuid === targetParentGuid && boundedTargetIndex === sourceContext.index) {\r\n return;\r\n }\r\n\r\n const movedParent = parent ? this.toParentReference(parent) : null;\r\n targetSiblings.splice(boundedTargetIndex, 0, {\r\n ...movedNode,\r\n item: {\r\n ...movedNode.item,\r\n parent: movedParent\r\n }\r\n });\r\n\r\n const itemsToSave = sourceParentGuid === targetParentGuid\r\n ? this.reindexMenuItems(targetSiblings, movedParent)\r\n : [\r\n ...this.reindexMenuItems(\r\n sourceSiblings,\r\n sourceContext.parent ? this.toParentReference(sourceContext.parent.item) : null\r\n ),\r\n ...this.reindexMenuItems(targetSiblings, movedParent)\r\n ];\r\n\r\n for (const item of itemsToSave) {\r\n await firstValueFrom(this.chill.setMenu(item));\r\n }\r\n\r\n await this.loadRootMenu();\r\n }\r\n\r\n async dropMenuItemAsChild(node: WorkspaceMenuNode, event: DragEvent): Promise<void> {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n await this.dropMenuItem(node.item, node.children.length);\r\n }\r\n\r\n endMenuDrag(): void {\r\n this.draggedMenuItemGuid.set('');\r\n this.clearAllDragHoverExpandTimers();\r\n }\r\n\r\n isDropTarget(parent: ChillMenuItem | null, targetIndex: number): boolean {\r\n const draggedGuid = this.draggedMenuItemGuid();\r\n if (!draggedGuid) {\r\n return false;\r\n }\r\n\r\n const sourceContext = this.findNodeContext(draggedGuid, this.menuRoots(), null);\r\n if (!sourceContext) {\r\n return false;\r\n }\r\n\r\n const sourceParentGuid = sourceContext.parent?.item.guid ?? null;\r\n const targetParentGuid = parent?.guid ?? null;\r\n const normalizedTargetIndex = sourceParentGuid === targetParentGuid && sourceContext.index < targetIndex\r\n ? targetIndex - 1\r\n : targetIndex;\r\n\r\n return sourceParentGuid === targetParentGuid && normalizedTargetIndex === sourceContext.index;\r\n }\r\n\r\n isMenuTaskActive(item: ChillMenuItem): boolean {\r\n return this.workspace.isMenuItemActive(item);\r\n }\r\n\r\n async createMenuItem(parent: ChillMenuItem | null): Promise<void> {\r\n await this.editOrCreateMenuItem(null, parent);\r\n }\r\n\r\n async editMenuItem(item: ChillMenuItem): Promise<void> {\r\n await this.editOrCreateMenuItem(item, item.parent);\r\n }\r\n\r\n async deleteMenuItem(item: ChillMenuItem): Promise<void> {\r\n const confirmed = await this.dialog.confirmYesNo(\r\n this.chill.T('601728DD-B38F-4B1D-B3AC-4B4BC2A49D6B', 'Delete menu item', 'Elimina voce di menu'),\r\n this.chill.T(\r\n '0B714FA0-6F35-4C99-8C0C-C5EC2955B5B5',\r\n `Delete \"${item.title}\" from the application menu?`,\r\n `Eliminare \"${item.title}\" dal menu applicazione?`\r\n )\r\n );\r\n\r\n if (!confirmed) {\r\n return;\r\n }\r\n\r\n await firstValueFrom(this.chill.deleteMenu(item.guid));\r\n await this.refreshMenuBranch(item.parent?.guid ?? null);\r\n }\r\n\r\n private loadCrudTypes(): void {\r\n this.isLoadingSchemas.set(true);\r\n this.schemaLoadError.set('');\r\n\r\n this.chill.getSchemaList().subscribe({\r\n next: (schemaList) => {\r\n const crudTypes = schemaList\r\n .filter((schema) => this.isQuerySchema(schema))\r\n .map((schema) => this.toCrudSchemaOption(schema))\r\n .sort((left, right) => left.displayName.localeCompare(right.displayName));\r\n const entityOptionsTypes = schemaList\r\n .map((schema) => this.toEntityOptionsSchemaOption(schema))\r\n .filter((schema): schema is EntityOptionsSchemaOption => schema !== null)\r\n .filter((schema, index, options) => index === options.findIndex((option) =>\r\n option.module === schema.module && option.chillType === schema.chillType\r\n ))\r\n .sort((left, right) => left.displayName.localeCompare(right.displayName));\r\n\r\n this.crudTypes.set(crudTypes);\r\n this.entityOptionsTypes.set(entityOptionsTypes);\r\n this.isLoadingSchemas.set(false);\r\n\r\n const firstModule = crudTypes[0]?.module ?? '';\r\n this.selectedModule.set(firstModule);\r\n const firstSchema = crudTypes.find((schema) => schema.module === firstModule) ?? null;\r\n this.selectedChillType.set(firstSchema?.chillType ?? '');\r\n\r\n const firstEntityOptionsModule = entityOptionsTypes[0]?.module ?? '';\r\n this.selectedEntityOptionsModule.set(firstEntityOptionsModule);\r\n const firstEntityOptionsSchema = entityOptionsTypes.find((schema) => schema.module === firstEntityOptionsModule) ?? null;\r\n this.selectedEntityOptionsChillType.set(firstEntityOptionsSchema?.chillType ?? '');\r\n },\r\n error: (error: unknown) => {\r\n this.crudTypes.set([]);\r\n this.entityOptionsTypes.set([]);\r\n this.schemaLoadError.set(this.chill.formatError(error));\r\n this.isLoadingSchemas.set(false);\r\n }\r\n });\r\n }\r\n\r\n private async loadRootMenu(): Promise<void> {\r\n this.isLoadingMenu.set(true);\r\n this.menuLoadError.set('');\r\n\r\n try {\r\n const items = await firstValueFrom(this.chill.getMenu());\r\n const roots = items.map((item) => this.createNode(item));\r\n this.menuRoots.set(roots);\r\n this.isLoadingMenu.set(false);\r\n await Promise.all(roots.map((node) => this.preloadNodeChildren(node)));\r\n } catch (error) {\r\n this.menuRoots.set([]);\r\n this.menuLoadError.set(this.chill.formatError(error));\r\n this.isLoadingMenu.set(false);\r\n }\r\n }\r\n\r\n private async preloadNodeChildren(node: WorkspaceMenuNode): Promise<void> {\r\n if (!node.item.guid.trim()) {\r\n return;\r\n }\r\n\r\n this.menuRoots.update((roots) => this.updateNodeCollection(roots, node.item.guid, (current) => ({\r\n ...current,\r\n isLoadingChildren: true,\r\n childrenError: ''\r\n })));\r\n\r\n try {\r\n const children = await firstValueFrom(this.chill.getMenu(node.item.guid));\r\n const childNodes = children.map((item) => this.createNode(item));\r\n this.menuRoots.update((roots) => this.updateNodeCollection(roots, node.item.guid, (current) => ({\r\n ...current,\r\n children: childNodes,\r\n childrenLoaded: true,\r\n isLoadingChildren: false,\r\n hasChildren: childNodes.length > 0\r\n })));\r\n await Promise.all(childNodes.map((child) => this.preloadNodeChildren(child)));\r\n } catch (error) {\r\n this.menuRoots.update((roots) => this.updateNodeCollection(roots, node.item.guid, (current) => ({\r\n ...current,\r\n childrenLoaded: false,\r\n isLoadingChildren: false,\r\n hasChildren: false,\r\n childrenError: this.chill.formatError(error)\r\n })));\r\n }\r\n }\r\n\r\n private async loadNodeChildren(node: WorkspaceMenuNode, expandAfterLoad: boolean): Promise<void> {\r\n this.menuRoots.update((roots) => this.updateNodeCollection(roots, node.item.guid, (current) => ({\r\n ...current,\r\n isLoadingChildren: true,\r\n childrenError: ''\r\n })));\r\n\r\n try {\r\n const children = await firstValueFrom(this.chill.getMenu(node.item.guid));\r\n const childNodes = children.map((item) => this.createNode(item));\r\n this.menuRoots.update((roots) => this.updateNodeCollection(roots, node.item.guid, (current) => ({\r\n ...current,\r\n children: childNodes,\r\n childrenLoaded: true,\r\n isExpanded: expandAfterLoad,\r\n isLoadingChildren: false,\r\n hasChildren: childNodes.length > 0\r\n })));\r\n await Promise.all(childNodes.map((child) => this.preloadNodeChildren(child)));\r\n } catch (error) {\r\n this.menuRoots.update((roots) => this.updateNodeCollection(roots, node.item.guid, (current) => ({\r\n ...current,\r\n childrenLoaded: false,\r\n isLoadingChildren: false,\r\n hasChildren: false,\r\n childrenError: this.chill.formatError(error)\r\n })));\r\n }\r\n }\r\n\r\n private isQuerySchema(item: ChillSchemaListItem): boolean {\r\n const type = item.type?.trim().toLowerCase() ?? '';\r\n const name = item.name?.trim().toLowerCase() ?? '';\r\n const chillType = item.chillType?.trim().toLowerCase() ?? '';\r\n\r\n return type === 'query'\r\n || name.endsWith('query')\r\n || chillType.includes('.query.')\r\n || chillType.endsWith('.query');\r\n }\r\n\r\n private toCrudSchemaOption(schema: ChillSchemaListItem): CrudSchemaOption {\r\n const chillType = schema.relatedChillType?.trim() || schema.chillType?.trim() || '';\r\n return {\r\n module: schema.module?.trim() || chillType.split('.')[0] || 'Default',\r\n chillType,\r\n queryChillType: schema.chillType?.trim() ?? '',\r\n displayName: schema.displayName?.trim() || schema.name?.trim() || chillType,\r\n viewCode: schema.chillViewCode?.trim() || 'default'\r\n };\r\n }\r\n\r\n private toEntityOptionsSchemaOption(schema: ChillSchemaListItem): EntityOptionsSchemaOption | null {\r\n const chillType = schema.chillType?.trim() ?? '';\r\n if (!chillType) {\r\n return null;\r\n }\r\n\r\n return {\r\n module: schema.module?.trim() || chillType.split('.')[0] || 'Default',\r\n chillType,\r\n displayName: schema.displayName?.trim() || schema.name?.trim() || chillType,\r\n kind: this.isQuerySchema(schema) ? 'Query' : 'Entity'\r\n };\r\n }\r\n\r\n private createNode(item: ChillMenuItem): WorkspaceMenuNode {\r\n return {\r\n item,\r\n children: [],\r\n childrenLoaded: false,\r\n isExpanded: false,\r\n isLoadingChildren: false,\r\n childrenError: '',\r\n hasChildren: false\r\n };\r\n }\r\n\r\n private async buildCrudMenuConfiguration(schema: CrudSchemaOption): Promise<Record<string, unknown>> {\r\n const viewCode = this.normalizeViewCode(this.viewCode());\r\n const baseConfiguration: Record<string, unknown> = {\r\n chillType: schema.chillType,\r\n viewCode\r\n };\r\n const queryChillType = schema.queryChillType.trim();\r\n if (queryChillType) {\r\n baseConfiguration['chillQuery'] = queryChillType;\r\n }\r\n\r\n const entitySchema = await firstValueFrom(this.chill.getSchema(schema.chillType, viewCode, undefined, true));\r\n return applySchemaRelationsToCrudConfiguration(baseConfiguration, entitySchema as ChillSchema | null);\r\n }\r\n\r\n private async expandNodeForHover(node: WorkspaceMenuNode): Promise<void> {\r\n if (node.isExpanded || node.isLoadingChildren) {\r\n return;\r\n }\r\n\r\n if (!node.childrenLoaded) {\r\n await this.loadNodeChildren(node, true);\r\n return;\r\n }\r\n\r\n this.menuRoots.update((roots) => this.updateNodeCollection(roots, node.item.guid, (current) => ({\r\n ...current,\r\n isExpanded: true\r\n })));\r\n }\r\n\r\n private findNodeContext(\r\n targetGuid: string,\r\n nodes: WorkspaceMenuNode[],\r\n parent: WorkspaceMenuNode | null\r\n ): { node: WorkspaceMenuNode; parent: WorkspaceMenuNode | null; siblings: WorkspaceMenuNode[]; index: number } | null {\r\n for (let index = 0; index < nodes.length; index += 1) {\r\n const node = nodes[index];\r\n if (node.item.guid === targetGuid) {\r\n return { node, parent, siblings: nodes, index };\r\n }\r\n\r\n const childResult = this.findNodeContext(targetGuid, node.children, node);\r\n if (childResult) {\r\n return childResult;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private findChildCollection(parentGuid: string | null): WorkspaceMenuNode[] | null {\r\n if (!parentGuid) {\r\n return this.menuRoots();\r\n }\r\n\r\n return this.findNodeContext(parentGuid, this.menuRoots(), null)?.node.children ?? null;\r\n }\r\n\r\n private isDescendantOf(node: WorkspaceMenuNode, possibleDescendantGuid: string): boolean {\r\n for (const child of node.children) {\r\n if (child.item.guid === possibleDescendantGuid || this.isDescendantOf(child, possibleDescendantGuid)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private reindexMenuItems(nodes: WorkspaceMenuNode[], parent: ChillMenuItem | null): ChillMenuItem[] {\r\n return nodes.map((node, index) => ({\r\n ...node.item,\r\n parent,\r\n positionNo: index + 1\r\n }));\r\n }\r\n\r\n private toParentReference(item: ChillMenuItem): ChillMenuItem {\r\n return {\r\n guid: item.guid,\r\n positionNo: item.positionNo,\r\n title: item.title,\r\n description: item.description,\r\n parent: null,\r\n componentName: item.componentName,\r\n componentConfigurationJson: item.componentConfigurationJson,\r\n menuHierarchy: item.menuHierarchy\r\n };\r\n }\r\n\r\n private updateNodeCollection(\r\n nodes: WorkspaceMenuNode[],\r\n targetGuid: string,\r\n updater: (node: WorkspaceMenuNode) => WorkspaceMenuNode\r\n ): WorkspaceMenuNode[] {\r\n return nodes.map((node) => {\r\n if (node.item.guid === targetGuid) {\r\n return updater(node);\r\n }\r\n\r\n if (node.children.length === 0) {\r\n return node;\r\n }\r\n\r\n const nextChildren = this.updateNodeCollection(node.children, targetGuid, updater);\r\n return nextChildren === node.children\r\n ? node\r\n : {\r\n ...node,\r\n children: nextChildren\r\n };\r\n });\r\n }\r\n\r\n private clearDragHoverExpandTimer(nodeGuid: string): void {\r\n const timer = this.dragHoverExpandTimers.get(nodeGuid);\r\n if (!timer) {\r\n return;\r\n }\r\n\r\n clearTimeout(timer);\r\n this.dragHoverExpandTimers.delete(nodeGuid);\r\n this.dragHoverExpandGuid.update((current) => current === nodeGuid ? '' : current);\r\n }\r\n\r\n private clearAllDragHoverExpandTimers(): void {\r\n for (const timer of this.dragHoverExpandTimers.values()) {\r\n clearTimeout(timer);\r\n }\r\n\r\n this.dragHoverExpandTimers.clear();\r\n this.dragHoverExpandGuid.set('');\r\n }\r\n\r\n private async editOrCreateMenuItem(item: ChillMenuItem | null, parent: ChillMenuItem | null): Promise<void> {\r\n const { WorkspaceMenuItemDialogComponent } = await import('./workspace-menu-item-dialog.component');\r\n const result = await this.dialog.openDialog<{ value: ChillMenuItem }>({\r\n title: item\r\n ? this.chill.T('35B8C58D-45AB-47D9-BDC0-6A7D3686981E', 'Edit menu item', 'Modifica voce di menu')\r\n : this.chill.T('4B47BBA2-8823-4629-BE14-B9B374F8C6F1', 'New menu item', 'Nuova voce di menu'),\r\n component: WorkspaceMenuItemDialogComponent,\r\n inputs: { item, parent },\r\n okLabel: this.chill.T('62953302-B951-4FD1-BD08-4B7649A91BAF', 'Save', 'Salva')\r\n });\r\n\r\n if (result.status !== 'confirmed' || !result.value?.value) {\r\n return;\r\n }\r\n\r\n // Set guid if missing\r\n if (!result.value?.value?.guid || result.value?.value?.guid === \"\")\r\n result.value.value.guid = crypto.randomUUID();\r\n\r\n const savedItem = await firstValueFrom(this.chill.setMenu(result.value.value));\r\n await this.refreshMenuBranch(savedItem.parent?.guid ?? null);\r\n }\r\n\r\n private async refreshMenuBranch(parentGuid: string | null): Promise<void> {\r\n if (!parentGuid) {\r\n await this.loadRootMenu();\r\n return;\r\n }\r\n\r\n try {\r\n const children = await firstValueFrom(this.chill.getMenu(parentGuid));\r\n const childNodes = children.map((item) => this.createNode(item));\r\n this.menuRoots.update((roots) => this.updateNodeCollection(roots, parentGuid, (current) => ({\r\n ...current,\r\n children: childNodes,\r\n childrenLoaded: true,\r\n isExpanded: true,\r\n isLoadingChildren: false,\r\n hasChildren: childNodes.length > 0,\r\n childrenError: ''\r\n })));\r\n await Promise.all(childNodes.map((child) => this.preloadNodeChildren(child)));\r\n } catch (error) {\r\n this.menuRoots.update((roots) => this.updateNodeCollection(roots, parentGuid, (current) => ({\r\n ...current,\r\n childrenError: this.chill.formatError(error),\r\n isLoadingChildren: false\r\n })));\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { WorkspaceService, type WorkspaceTaskInstance } from '../services/workspace.service';\n\r\n@Component({\r\n selector: 'app-workspace-taskbar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n styles: `\r\n .taskbar {\r\n min-width: 0;\r\n width: 100%;\r\n }\r\n\r\n .taskbar__mobile {\r\n display: none;\r\n width: 100%;\r\n }\r\n\r\n .taskbar__mobile-select {\r\n width: 100%;\r\n height: 3rem;\r\n min-height: 3rem;\r\n border: 1px solid var(--border-color);\r\n border-radius: 3rem;\r\n background: var(--surface-0);\r\n color: var(--text-main);\r\n padding: 0.5rem 0.75rem;\r\n font: inherit;\r\n }\r\n\r\n @media (max-width: 720px) {\r\n .taskbar__desktop {\r\n display: none;\r\n }\r\n\r\n .taskbar__mobile {\r\n display: block;\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n }\r\n }\r\n `,\r\n template: `\r\n <div class=\"taskbar\">\r\n @if (workspace.openTasks().length === 0) {\r\n <p class=\"taskbar__empty\">Open tasks will appear here.</p>\r\n } @else {\r\n <div class=\"taskbar__mobile\">\r\n <select\r\n class=\"taskbar__mobile-select\"\r\n [ngModel]=\"workspace.activeTask()?.id ?? ''\"\r\n (ngModelChange)=\"activateTask($event)\">\r\n @for (task of workspace.openTasks(); track task.id) {\r\n <option [value]=\"task.id\">{{ task.title }}</option>\r\n }\r\n </select>\r\n </div>\r\n\r\n <div class=\"taskbar__desktop\">\n @for (task of workspace.openTasks(); track task.id) {\n <div class=\"taskbar__item\" [class.active]=\"workspace.activeTask()?.id === task.id\">\n <button type=\"button\" class=\"taskbar__link\" (click)=\"activateTask(task.id)\">\n @if (taskBreadcrumb(task); as breadcrumb) {\n <span class=\"taskbar__breadcrumb\">{{ breadcrumb }} ></span>\n }\n {{ task.title }}\n </button>\n <button\n type=\"button\"\n class=\"taskbar__close\"\n (click)=\"closeTask(task.id)\"\n [attr.aria-label]=\"'Close ' + task.title\">\n x\n </button>\n </div>\n }\n </div>\n }\n </div>\n `\n})\nexport class WorkspaceTaskbarComponent {\r\n readonly workspace = inject(WorkspaceService);\r\n\r\n activateTask(taskId: string): void {\r\n void this.workspace.activateTask(taskId);\r\n }\r\n\r\n closeTask(taskId: string): void {\n void this.workspace.closeTask(taskId);\n }\n\n taskBreadcrumb(task: WorkspaceTaskInstance): string {\n if (!task.parentTaskId) {\n return '';\n }\n\n const componentConfiguration = task.inputs?.['componentConfiguration'];\n if (!this.isRecord(componentConfiguration)) {\n return '';\n }\n\n const fixedQueryValues = componentConfiguration['fixedQueryValues'];\n if (!this.isRecord(fixedQueryValues)) {\n return '';\n }\n\n return Object.values(fixedQueryValues)\n .map((value) => this.entityBreadcrumbLabel(value))\n .filter((label): label is string => !!label)\n .join(', ');\n }\n\n private entityBreadcrumbLabel(value: unknown): string | null {\n if (!this.isRecord(value)) {\n return null;\n }\n\n const properties = this.isRecord(value['properties']) ? value['properties'] : null;\n return this.readText(value, ['shortLabel', 'ShortLabel'])\n || this.readText(properties, ['shortLabel', 'ShortLabel'])\n || this.readText(value, ['label', 'Label'])\n || this.readText(properties, ['label', 'Label'])\n || this.readText(value, ['guid', 'Guid']).slice(0, 8)\n || null;\n }\n\n private readText(record: Record<string, unknown> | null, keys: string[]): string {\n if (!record) {\n return '';\n }\n\n for (const key of keys) {\n const value = record[key];\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n\n return '';\n }\n\n private isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n }\n}\n","import { CommonModule, NgComponentOutlet } from '@angular/common';\r\nimport { Component, ElementRef, HostListener, OnDestroy, OnInit, computed, inject, signal, viewChild, viewChildren } from '@angular/core';\r\nimport { ActivatedRoute, ParamMap, Router } from '@angular/router';\r\nimport { combineLatest, firstValueFrom } from 'rxjs';\r\nimport { ChillService } from '../services/chill.service';\r\nimport { WorkspaceDialogService } from '../services/workspace-dialog.service';\r\nimport { ChillI18nLabelComponent } from '../lib/chill-i18n-label.component';\r\nimport { ChillI18nButtonLabelComponent } from '../lib/chill-i18n-button-label.component';\r\nimport { WorkspaceService, type WorkspaceTheme } from '../services/workspace.service';\r\nimport { WorkspaceToolbarService } from '../services/workspace-toolbar.service';\r\nimport { WorkspaceDialogHostComponent } from '../workspace/workspace-dialog-host.component';\r\nimport { WorkspaceMenuComponent } from '../workspace/workspace-menu.component';\r\nimport { WorkspaceTaskbarComponent } from '../workspace/workspace-taskbar.component';\r\nimport type { WorkspaceTaskComponent, WorkspaceTaskComponentType } from '../models/workspace-task.models';\r\nimport type { WorkspaceTaskInstance } from '../services/workspace.service';\r\n\r\n@Component({\r\n selector: 'app-workspace-page',\r\n standalone: true,\r\n imports: [CommonModule, NgComponentOutlet, WorkspaceTaskbarComponent, WorkspaceMenuComponent, WorkspaceDialogHostComponent, ChillI18nLabelComponent, ChillI18nButtonLabelComponent],\r\n styles: `\r\n .workspace-topbar {\r\n display: grid;\r\n grid-template-columns: auto minmax(0, 1fr) auto auto;\r\n align-items: center;\r\n gap: 0.75rem;\r\n }\r\n\r\n .workspace-topbar__left {\r\n grid-column: 1;\r\n }\r\n\r\n .workspace-topbar__center {\r\n grid-column: 2;\r\n min-width: 0;\r\n }\r\n\r\n .workspace-topbar__controls {\r\n grid-column: 4;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n gap: 0.75rem;\r\n }\r\n\r\n .workspace-toolbar-actions {\r\n grid-column: 3;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n flex-wrap: wrap;\r\n gap: 0.65rem;\r\n min-width: 0;\r\n }\r\n\r\n .workspace-task-host,\r\n .workspace-task-pane {\r\n display: block;\r\n height: 100%;\r\n min-height: 0;\r\n }\r\n\r\n .workspace-task-pane[hidden] {\r\n display: none !important;\r\n }\r\n\r\n .workspace-toolbar-button--accent {\r\n border-color: color-mix(in srgb, var(--accent) 45%, var(--border-color));\r\n background: linear-gradient(135deg, var(--accent), var(--accent-strong));\r\n color: #f8fffd;\r\n }\r\n\r\n .workspace-toolbar-button--accent .workspace-toolbar-button__text,\r\n .workspace-toolbar-button--accent .workspace-toolbar-button__icon {\r\n color: #f8fffd;\r\n }\r\n\r\n .workspace-toolbar-button--accent:disabled {\r\n border-color: var(--border-color);\r\n background: var(--surface-0);\r\n color: var(--text-main);\r\n }\r\n\r\n .workspace-toolbar-button__text {\r\n display: inline-flex;\r\n align-items: center;\r\n }\r\n\r\n @media (max-width: 720px) {\r\n .workspace-topbar {\r\n grid-template-columns: auto minmax(0, 1fr) auto;\r\n row-gap: 0.6rem;\r\n }\r\n\r\n .workspace-topbar__left {\r\n grid-column: 1;\r\n grid-row: 1;\r\n }\r\n\r\n .workspace-topbar__center {\r\n grid-column: 2;\r\n grid-row: 1;\r\n width: 100%;\r\n }\r\n\r\n .workspace-topbar__controls {\r\n grid-column: 3;\r\n grid-row: 1;\r\n }\r\n\r\n .workspace-toolbar-actions {\r\n grid-column: 1 / -1;\r\n grid-row: 2;\r\n justify-content: flex-start;\r\n }\r\n\r\n .workspace-toolbar-button--has-icon {\r\n min-width: 2.75rem;\r\n justify-content: center;\r\n padding-inline: 0.75rem;\r\n }\r\n\r\n .workspace-toolbar-button--has-icon .workspace-toolbar-button__text {\r\n display: none;\r\n }\r\n\r\n .theme-menu__label {\r\n display: none;\r\n }\r\n }\r\n `,\r\n template: `\r\n <section class=\"workspace-shell\">\r\n <header class=\"workspace-topbar\">\r\n <div class=\"workspace-topbar__left\">\r\n <button\r\n type=\"button\"\r\n class=\"icon-button\"\r\n (click)=\"workspace.toggleDrawer()\"\r\n [attr.aria-expanded]=\"workspace.isDrawerOpen()\"\r\n [attr.aria-label]=\"chill.T('D3C89A1B-4D98-4264-A836-785998F8F09F', 'Open navigation menu', 'Apri menu di navigazione')\">\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n </button>\r\n </div>\r\n\r\n <app-workspace-taskbar class=\"workspace-topbar__center\" />\r\n\r\n @if (activeToolbarButtons().length > 0) {\r\n <div class=\"workspace-toolbar-actions\">\r\n @for (button of activeToolbarButtons(); track button.id) {\r\n <button\r\n type=\"button\"\r\n class=\"workspace-toolbar-button\"\r\n [class.workspace-toolbar-button--accent]=\"button.accent\"\r\n [class.workspace-toolbar-button--has-icon]=\"!!button.icon\"\r\n (click)=\"button.action()\"\r\n [disabled]=\"button.disabled\"\r\n [attr.aria-label]=\"button.ariaLabel || button.label || button.primaryDefaultText\">\r\n @if (button.icon) {\r\n <span\r\n class=\"workspace-toolbar-button__icon\"\r\n [class.material-symbol-icon]=\"button.iconClass === 'material-symbol-icon'\"\r\n aria-hidden=\"true\">{{ button.icon }}</span>\r\n }\r\n @if (button.labelGuid && button.primaryDefaultText && button.secondaryDefaultText) {\r\n <span class=\"workspace-toolbar-button__text\">\r\n <app-chill-i18n-button-label\r\n [labelGuid]=\"button.labelGuid\"\r\n [primaryDefaultText]=\"button.primaryDefaultText\"\r\n [secondaryDefaultText]=\"button.secondaryDefaultText\" />\r\n </span>\r\n } @else {\r\n <span class=\"workspace-toolbar-button__text\">{{ button.label }}</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"workspace-topbar__controls\">\r\n <details class=\"theme-menu\" #themeMenu>\r\n <summary\r\n class=\"theme-menu__summary\"\r\n [attr.aria-label]=\"chill.T('C698F19E-58EA-41E2-8D31-05137F17C292', 'Theme selection', 'Selezione tema')\">\r\n <span class=\"theme-menu__swatch\" [attr.data-theme]=\"workspace.theme()\"></span>\r\n <span class=\"theme-menu__label\">{{ workspace.theme() }}</span>\r\n </summary>\r\n\r\n <div class=\"theme-menu__panel\">\r\n @for (theme of themes; track theme) {\r\n <button\r\n type=\"button\"\r\n class=\"theme-pill\"\r\n [class.active]=\"workspace.theme() === theme\"\r\n (click)=\"setTheme(theme)\">\r\n {{ theme }}\r\n </button>\r\n }\r\n </div>\r\n </details>\r\n\r\n <details class=\"user-menu\" #userMenu>\r\n <summary>\r\n <span class=\"user-avatar\">{{ userInitial() }}</span>\r\n </summary>\r\n\r\n <div class=\"user-menu__panel\">\r\n <p class=\"user-menu__name\">{{ chill.userName() || chill.T('B0311DA4-F864-4E15-93A4-894D177F7017', 'current user', 'utente corrente') }}</p>\r\n <button\r\n type=\"button\"\r\n (click)=\"copyAuthToken()\"\r\n [disabled]=\"!chill.session()?.accessToken\"\r\n [attr.aria-label]=\"authTokenCopyLabel()\">\r\n {{ authTokenCopyLabel() }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n (click)=\"renewAuthToken()\"\r\n [disabled]=\"isRenewingToken() || !chill.session()?.refreshToken\">\r\n @if (isRenewingToken()) {\r\n {{ chill.T('3606439C-1C2C-45D4-BAC9-2F0C2AB1E783', 'Renewing token...', 'Rinnovo token...') }}\r\n } @else {\r\n {{ chill.T('B9C91C98-E52E-49DA-A3BC-6593F38BB93D', 'Renew token', 'Rinnova token') }}\r\n }\r\n </button>\r\n @if (chill.canManagePermissions()) {\r\n <button type=\"button\" (click)=\"openPermissionsTask()\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'830A6D96-0332-4B08-8EC7-B850702B4337'\" [primaryDefaultText]=\"'Permissions'\" [secondaryDefaultText]=\"'Permessi'\" />\r\n </button>\r\n }\r\n @if (workspace.canEditLayout()) {\r\n <button type=\"button\" (click)=\"workspace.toggleLayoutEditingEnabled()\">\r\n @if (workspace.isLayoutEditingEnabled()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'84A896C2-2A1F-4DCE-8B33-A0F586F1DBE8'\" [primaryDefaultText]=\"'Disable layout editing'\" [secondaryDefaultText]=\"'Disabilita modifica layout'\" />\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'A94DDDE0-3CDB-495A-84D7-8226AB21D6C7'\" [primaryDefaultText]=\"'Enable layout editing'\" [secondaryDefaultText]=\"'Abilita modifica layout'\" />\r\n }\r\n </button>\r\n }\r\n <button type=\"button\" (click)=\"goToChangePassword()\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'56083997-E7B4-4AE0-B7C6-DB2B82186232'\" [primaryDefaultText]=\"'Change password'\" [secondaryDefaultText]=\"'Cambia password'\" />\r\n </button>\r\n <button type=\"button\" (click)=\"logout()\">\r\n <app-chill-i18n-button-label [labelGuid]=\"'9177351F-738D-447C-8A75-06536CA6E50C'\" [primaryDefaultText]=\"'Logout'\" [secondaryDefaultText]=\"'Disconnetti'\" />\r\n </button>\r\n </div>\r\n </details>\r\n </div>\r\n </header>\r\n\r\n <div class=\"workspace-main\">\r\n <aside class=\"workspace-drawer\" [class.open]=\"workspace.isDrawerOpen()\">\r\n <app-workspace-menu />\r\n </aside>\r\n\r\n <main class=\"workspace-content\">\r\n @if (workspace.openTasks().length > 0) {\r\n <div class=\"workspace-task-host\">\r\n @for (task of workspace.openTasks(); track task.id) {\r\n <div class=\"workspace-task-pane\" [hidden]=\"!isTaskVisible(task.id)\">\r\n <ng-container *ngComponentOutlet=\"task.component; inputs: taskInputs(task)\" />\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <section class=\"workspace-empty-state\">\r\n <p class=\"eyebrow\">\r\n <app-chill-i18n-label\r\n [labelGuid]=\"'D8E9F1A4-3E8A-47A7-BE9C-1C702F81C6B0'\"\r\n [primaryDefaultText]=\"'ChillSharp UI'\"\r\n [secondaryDefaultText]=\"'ChillSharp UI'\" />\r\n </p>\r\n <h2>\r\n <app-chill-i18n-label\r\n [labelGuid]=\"'6E9CFCD5-61BD-42DA-9666-1570CAEF87D7'\"\r\n [primaryDefaultText]=\"'No active task'\"\r\n [secondaryDefaultText]=\"'Nessuna attivita'\" />\r\n </h2>\r\n <p>\r\n <app-chill-i18n-label\r\n [labelGuid]=\"'3C4B25A7-6208-4C74-8515-47A2E6E8655A'\"\r\n [primaryDefaultText]=\"'Open a task from the drawer to start working inside the workspace.'\"\r\n [secondaryDefaultText]=\"'Apri una attivita dal drawer per iniziare a lavorare nel workspace.'\" />\r\n </p>\r\n </section>\r\n }\r\n </main>\r\n </div>\r\n\r\n @if (dialog.activeDialog()) {\r\n <app-workspace-dialog-host />\r\n }\r\n </section>\r\n `\r\n})\r\nexport class WorkspacePageComponent implements OnInit, OnDestroy {\r\n readonly chill = inject(ChillService);\r\n readonly workspace = inject(WorkspaceService);\r\n readonly dialog = inject(WorkspaceDialogService);\r\n readonly toolbar = inject(WorkspaceToolbarService);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly router = inject(Router);\r\n private readonly themeMenu = viewChild<ElementRef<HTMLDetailsElement>>('themeMenu');\r\n private readonly userMenu = viewChild<ElementRef<HTMLDetailsElement>>('userMenu');\r\n private readonly taskOutlets = viewChildren(NgComponentOutlet);\r\n private tokenClockHandle: ReturnType<typeof globalThis.setInterval> | null = null;\r\n\r\n readonly themes = this.workspace.themes;\r\n readonly nowMs = signal(Date.now());\r\n readonly isRenewingToken = signal(false);\r\n readonly activeToolbarButtons = computed(() =>\r\n this.toolbar.buttons(this.workspace.activeTask()?.toolbarScope ?? 'workspace')\r\n );\r\n readonly authTokenCopyLabel = computed(() => {\r\n this.nowMs();\r\n const hoursLabel = this.authTokenRemainingHoursLabel();\r\n const baseText = this.chill.T('59083B57-F07E-4F5F-AF93-1B67F2A717B5', 'Copy auth token', 'Copia token auth');\r\n return hoursLabel ? `${baseText} (${hoursLabel})` : baseText;\r\n });\r\n\r\n ngOnInit(): void {\r\n this.tokenClockHandle = globalThis.setInterval(() => {\r\n this.nowMs.set(Date.now());\r\n }, 60000);\r\n\r\n this.workspace.registerTaskComponentResolver((taskId) => this.resolveTaskComponent(taskId));\r\n combineLatest([this.route.paramMap, this.route.queryParamMap]).subscribe(([paramMap, queryParamMap]: [ParamMap, ParamMap]) => {\r\n void this.workspace.activateTaskFromRoute(paramMap.get('taskId'), queryParamMap);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.tokenClockHandle) {\r\n globalThis.clearInterval(this.tokenClockHandle);\r\n this.tokenClockHandle = null;\r\n }\r\n }\r\n\r\n @HostListener('window:keydown', ['$event'])\r\n handleWindowKeydown(event: KeyboardEvent): void {\r\n if (event.key !== 'F2'\r\n || event.altKey\r\n || event.ctrlKey\r\n || event.metaKey\r\n || event.shiftKey\r\n || !this.workspace.canEditLayout()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.workspace.toggleLayoutEditingEnabled();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n handleDocumentClick(event: MouseEvent): void {\r\n const target = event.target;\r\n if (!(target instanceof Node)) {\r\n return;\r\n }\r\n\r\n const themeMenu = this.themeMenu()?.nativeElement;\r\n if (themeMenu?.open && !themeMenu.contains(target)) {\r\n themeMenu.open = false;\r\n }\r\n\r\n const userMenu = this.userMenu()?.nativeElement;\r\n if (userMenu?.open && !userMenu.contains(target)) {\r\n userMenu.open = false;\r\n }\r\n }\r\n\r\n @HostListener('window:beforeunload', ['$event'])\r\n handleBeforeUnload(event: BeforeUnloadEvent): void {\r\n if (this.workspace.canUnloadWorkspace()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.returnValue = '';\r\n }\r\n\r\n userInitial(): string {\r\n const userName = this.chill.userName().trim();\r\n return userName ? userName[0].toUpperCase() : 'U';\r\n }\r\n\r\n setTheme(theme: WorkspaceTheme): void {\r\n this.workspace.setTheme(theme);\r\n const themeMenu = this.themeMenu()?.nativeElement;\r\n if (themeMenu) {\r\n themeMenu.open = false;\r\n }\r\n }\r\n\r\n openPermissionsTask(): void {\r\n this.closeUserMenu();\r\n void this.workspace.openTask('permissions');\r\n }\r\n\r\n async copyAuthToken(): Promise<void> {\r\n const token = this.chill.session()?.accessToken ?? '';\r\n if (!token) {\r\n return;\r\n }\r\n\r\n await this.writeClipboardText(token);\r\n }\r\n\r\n async renewAuthToken(): Promise<void> {\r\n if (this.isRenewingToken() || !this.chill.session()?.refreshToken) {\r\n return;\r\n }\r\n\r\n this.isRenewingToken.set(true);\r\n try {\r\n await firstValueFrom(this.chill.refreshSession());\r\n this.nowMs.set(Date.now());\r\n } finally {\r\n this.isRenewingToken.set(false);\r\n }\r\n }\r\n\r\n goToChangePassword(): void {\r\n this.closeUserMenu();\r\n this.workspace.closeDrawer();\r\n void this.navigateAway('/reset-password');\r\n }\r\n\r\n logout(): void {\r\n this.closeUserMenu();\r\n this.chill.logout();\r\n void this.logoutAndReset();\r\n }\r\n\r\n private closeUserMenu(): void {\r\n const userMenu = this.userMenu()?.nativeElement;\r\n if (userMenu) {\r\n userMenu.open = false;\r\n }\r\n }\r\n\r\n private authTokenRemainingHoursLabel(): string {\r\n const expiresUtc = this.chill.session()?.accessTokenExpiresUtc?.trim() ?? '';\r\n if (!expiresUtc) {\r\n return '';\r\n }\r\n\r\n const expiresMs = Date.parse(expiresUtc);\r\n if (!Number.isFinite(expiresMs)) {\r\n return '';\r\n }\r\n\r\n const remainingMs = expiresMs - this.nowMs();\r\n if (remainingMs <= 0) {\r\n return this.chill.T('8B5933DD-3500-4EEC-B28E-038CA7C2DF3D', 'expired', 'scaduto');\r\n }\r\n\r\n const remainingHours = remainingMs / 3_600_000;\r\n const formattedHours = remainingHours >= 10\r\n ? Math.floor(remainingHours).toString()\r\n : Math.max(0.1, Math.floor(remainingHours * 10) / 10).toLocaleString(undefined, {\r\n maximumFractionDigits: 1\r\n });\r\n return this.chill.T('53A9DE67-EDAF-4B43-AC07-EEC3F6F5F98F', `${formattedHours} h left`, `${formattedHours} h rimanenti`);\r\n }\r\n\r\n private async writeClipboardText(text: string): Promise<void> {\r\n if (navigator.clipboard?.writeText) {\r\n await navigator.clipboard.writeText(text);\r\n return;\r\n }\r\n\r\n const textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n textarea.setAttribute('readonly', '');\r\n textarea.style.position = 'fixed';\r\n textarea.style.opacity = '0';\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n\r\n try {\r\n document.execCommand('copy');\r\n } finally {\r\n document.body.removeChild(textarea);\r\n }\r\n }\r\n\r\n isTaskVisible(taskId: string): boolean {\r\n return this.workspace.activeTask()?.id === taskId;\r\n }\r\n\r\n taskInputs(task: WorkspaceTaskInstance): Record<string, unknown> {\r\n const inputs = { ...(task.inputs ?? {}) };\r\n if (this.supportsInput(task.component, 'visible')) {\r\n inputs['visible'] = this.isTaskVisible(task.id);\r\n }\r\n\r\n if (this.supportsInput(task.component, 'toolbarScope')) {\r\n inputs['toolbarScope'] = task.toolbarScope;\r\n }\r\n\r\n return inputs;\r\n }\r\n\r\n private supportsInput(component: WorkspaceTaskComponentType, inputName: string): boolean {\r\n const definition = (component as WorkspaceTaskComponentType & {\r\n ɵcmp?: { inputs?: Record<string, string> };\r\n }).ɵcmp;\r\n\r\n if (!definition?.inputs) {\r\n return false;\r\n }\r\n\r\n return Object.prototype.hasOwnProperty.call(definition.inputs, inputName);\r\n }\r\n\r\n private resolveTaskComponent(taskId: string): WorkspaceTaskComponent | null {\r\n const taskIndex = this.workspace.openTasks().findIndex((task) => task.id === taskId);\r\n if (taskIndex < 0) {\r\n return null;\r\n }\r\n\r\n const outlet = this.taskOutlets()[taskIndex];\r\n const componentInstance = (outlet as NgComponentOutlet & { componentInstance?: unknown }).componentInstance;\r\n return this.isWorkspaceTaskComponent(componentInstance)\r\n ? componentInstance\r\n : null;\r\n }\r\n\r\n private isWorkspaceTaskComponent(value: unknown): value is WorkspaceTaskComponent {\r\n return !!value && typeof value === 'object';\r\n }\r\n\r\n private async navigateAway(url: string): Promise<void> {\r\n const reset = await this.workspace.reset();\r\n if (!reset) {\r\n return;\r\n }\r\n\r\n void this.router.navigateByUrl(url);\r\n }\r\n\r\n private async logoutAndReset(): Promise<void> {\r\n const reset = await this.workspace.reset();\r\n if (!reset) {\r\n return;\r\n }\r\n\r\n this.chill.logout();\r\n void this.router.navigateByUrl('/login');\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, signal } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, ReactiveFormsModule, ValidationErrors, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\r\nimport { ChillI18nLabelComponent } from '../lib/chill-i18n-label.component';\r\nimport { ChillI18nButtonLabelComponent } from '../lib/chill-i18n-button-label.component';\r\nimport { NoticeTransitionDirective } from '../lib/notice-transition.directive';\r\nimport { ChillService } from '../services/chill.service';\r\n\r\nfunction passwordMatchValidator(control: AbstractControl): ValidationErrors | null {\r\n const password = control.get('newPassword')?.value;\r\n const confirmPassword = control.get('confirmPassword')?.value;\r\n return password === confirmPassword ? null : { passwordMismatch: true };\r\n}\r\n\r\n@Component({\r\n selector: 'app-confirm-reset-page',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, RouterLink, ChillI18nLabelComponent, ChillI18nButtonLabelComponent, NoticeTransitionDirective],\r\n template: `\r\n <section class=\"auth-page\">\r\n <div class=\"auth-card wide\">\r\n <p class=\"eyebrow\"><app-chill-i18n-label [labelGuid]=\"'A651A560-1828-4D67-8D60-8B97011231D7'\" [primaryDefaultText]=\"'ChillSharp Auth'\" [secondaryDefaultText]=\"'Autenticazione ChillSharp'\" /></p>\r\n <h1><app-chill-i18n-label [labelGuid]=\"'5346E633-5DF8-4A90-8349-7D5622312A84'\" [primaryDefaultText]=\"'Confirm reset'\" [secondaryDefaultText]=\"'Conferma reimpostazione'\" /></h1>\r\n <p class=\"lede\"><app-chill-i18n-label [labelGuid]=\"'A97AAEAA-92FA-4F47-B7DD-D84824ECE053'\" [primaryDefaultText]=\"'Submit the UserId, ResetToken, and new password to complete the ChillSharp reset flow.'\" [secondaryDefaultText]=\"'Invia UserId, ResetToken e la nuova password per completare il flusso di reset di ChillSharp.'\" /></p>\r\n\r\n @if (successMessage()) {\r\n <div class=\"notice success\">{{ successMessage() }}</div>\r\n }\r\n\r\n @if (errorMessage()) {\r\n <div class=\"notice error\">{{ errorMessage() }}</div>\r\n }\r\n\r\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\" class=\"auth-form two-columns\">\r\n <label class=\"full-width\">\r\n <span><app-chill-i18n-label [labelGuid]=\"'CEB1B59C-FD4E-46D4-B11C-F8B33EA4C32E'\" [primaryDefaultText]=\"'User ID'\" [secondaryDefaultText]=\"'ID utente'\" /></span>\r\n <input type=\"text\" formControlName=\"userId\" />\r\n </label>\r\n\r\n <label class=\"full-width\">\r\n <span><app-chill-i18n-label [labelGuid]=\"'3D525E29-B464-49FF-AC72-6D7E05D0F226'\" [primaryDefaultText]=\"'Reset token'\" [secondaryDefaultText]=\"'Token di reset'\" /></span>\r\n <textarea rows=\"5\" formControlName=\"resetToken\"></textarea>\r\n </label>\r\n\r\n <label>\r\n <span><app-chill-i18n-label [labelGuid]=\"'7B9AA727-6032-47E3-917E-EBA35C9C264F'\" [primaryDefaultText]=\"'New password'\" [secondaryDefaultText]=\"'Nuova password'\" /></span>\r\n <input type=\"password\" formControlName=\"newPassword\" autocomplete=\"new-password\" />\r\n </label>\r\n\r\n <label>\r\n <span><app-chill-i18n-label [labelGuid]=\"'14EB51FA-9D9B-427C-AFD6-CC54031B9B26'\" [primaryDefaultText]=\"'Confirm password'\" [secondaryDefaultText]=\"'Conferma password'\" /></span>\r\n <input type=\"password\" formControlName=\"confirmPassword\" autocomplete=\"new-password\" />\r\n </label>\r\n\r\n @if (form.hasError('passwordMismatch') && form.touched) {\r\n <div class=\"notice error full-width\">{{ chill.T('12632967-9A9B-4A16-B7DF-D64B7BA7914A', 'Password confirmation does not match.', 'La conferma della password non corrisponde.') }}</div>\r\n }\r\n\r\n <button type=\"submit\" class=\"full-width\" [disabled]=\"isSubmitting() || form.invalid\">\r\n @if (isSubmitting()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'34936727-D552-4649-A178-3377D418D5B6'\" [primaryDefaultText]=\"'Applying reset...'\" [secondaryDefaultText]=\"'Applicazione reset in corso...'\" />\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'5346E633-5DF8-4A90-8349-7D5622312A84'\" [primaryDefaultText]=\"'Confirm reset'\" [secondaryDefaultText]=\"'Conferma reimpostazione'\" />\r\n }\r\n </button>\r\n </form>\r\n\r\n <nav class=\"auth-links\">\r\n <a routerLink=\"/reset-password\">{{ chill.T('D5B5D31E-1F31-4080-A628-0674B00ECF07', 'Request token again', 'Richiedi di nuovo il token') }}</a>\r\n <a routerLink=\"/login\">{{ chill.T('1919121D-A2BC-403E-8FCA-E120630A1FAC', 'Back to login', 'Torna al login') }}</a>\r\n </nav>\r\n </div>\r\n </section>\r\n `\r\n})\r\nexport class ConfirmResetPageComponent {\r\n readonly chill = inject(ChillService);\r\n private readonly formBuilder = inject(FormBuilder);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly router = inject(Router);\r\n\r\n readonly isSubmitting = signal(false);\r\n readonly errorMessage = signal('');\r\n readonly successMessage = signal('');\r\n readonly form = this.formBuilder.nonNullable.group({\r\n userId: [this.route.snapshot.queryParamMap.get('userId') ?? '', Validators.required],\r\n resetToken: [this.route.snapshot.paramMap.get('token') ?? this.route.snapshot.queryParamMap.get('token') ?? '', Validators.required],\r\n newPassword: ['', [Validators.required, Validators.minLength(6)]],\r\n confirmPassword: ['', [Validators.required, Validators.minLength(6)]]\r\n }, { validators: passwordMatchValidator });\r\n\r\n submit(): void {\r\n if (this.form.invalid || this.isSubmitting()) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n\r\n this.isSubmitting.set(true);\r\n this.errorMessage.set('');\r\n this.successMessage.set('');\r\n\r\n const value = this.form.getRawValue();\r\n this.chill.confirmPasswordReset({\r\n UserId: value.userId,\r\n ResetToken: value.resetToken,\r\n NewPassword: value.newPassword\r\n }).subscribe({\r\n next: (response: { Succeeded?: boolean }) => {\r\n this.isSubmitting.set(false);\r\n if (!response.Succeeded) {\r\n this.errorMessage.set(this.chill.T('42917D4F-BE30-4D5C-9428-EC231D485C11', 'Password reset was rejected by the server.', 'La reimpostazione della password è stata rifiutata dal server.'));\r\n return;\r\n }\r\n\r\n this.successMessage.set(this.chill.T('2B08DE64-CF1B-467A-A355-F541B8485D7E', 'Password updated successfully. Redirecting to login...', 'Password aggiornata correttamente. Reindirizzamento al login...'));\r\n setTimeout(() => {\r\n void this.router.navigateByUrl('/login');\r\n }, 900);\r\n },\r\n error: (error: unknown) => {\r\n this.isSubmitting.set(false);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, OnInit, inject, signal } from '@angular/core';\r\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { Router, RouterLink } from '@angular/router';\r\nimport { ChillI18nLabelComponent } from '../lib/chill-i18n-label.component';\r\nimport { ChillI18nButtonLabelComponent } from '../lib/chill-i18n-button-label.component';\r\nimport { NoticeTransitionDirective } from '../lib/notice-transition.directive';\r\nimport { ChillService } from '../services/chill.service';\r\n\r\n@Component({\r\n selector: 'app-login-page',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, RouterLink, ChillI18nLabelComponent, ChillI18nButtonLabelComponent, NoticeTransitionDirective],\r\n template: `\r\n <section class=\"auth-page\">\r\n <div class=\"auth-card\">\r\n <p class=\"eyebrow\"><app-chill-i18n-label [labelGuid]=\"'A651A560-1828-4D67-8D60-8B97011231D7'\" [primaryDefaultText]=\"'ChillSharp Auth'\" [secondaryDefaultText]=\"'Autenticazione ChillSharp'\" /></p>\r\n <h1><app-chill-i18n-label [labelGuid]=\"'0C4F53D0-2087-486B-9F2A-AEBCC226AF09'\" [primaryDefaultText]=\"'Login'\" [secondaryDefaultText]=\"'Accesso'\" /></h1>\r\n <p class=\"lede\"><app-chill-i18n-label [labelGuid]=\"'D22E0294-1500-4C13-9008-6980F84F2758'\" [primaryDefaultText]=\"'Authenticate against the ChillSharp Identity endpoints through a single Angular service.'\" [secondaryDefaultText]=\"'Autenticati agli endpoint Identity di ChillSharp tramite un singolo servizio Angular.'\" /></p>\r\n\r\n @if (chill.isAuthenticated()) {\r\n <div class=\"notice success\">\r\n {{ chill.T('F1F3C98A-655B-438A-BF7F-F730BF947EB0', 'Active session for', 'Sessione attiva per') }} <strong>{{ chill.userName() || chill.T('B0311DA4-F864-4E15-93A4-894D177F7017', 'current user', 'utente corrente') }}</strong>.\r\n </div>\r\n }\r\n\r\n <div class=\"notice\" [class.success]=\"serviceStatusKind() === 'success'\" [class.error]=\"serviceStatusKind() === 'error'\">\r\n {{ serviceStatusMessage() }}\r\n </div>\r\n\r\n @if (errorMessage()) {\r\n <div class=\"notice error\">{{ errorMessage() }}</div>\r\n }\r\n\r\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\" class=\"auth-form\">\r\n <label>\r\n <span><app-chill-i18n-label [labelGuid]=\"'EA8C79F7-B95E-40A8-B638-C09BFD355A94'\" [primaryDefaultText]=\"'Username or email'\" [secondaryDefaultText]=\"'Nome utente o email'\" /></span>\r\n <input type=\"text\" formControlName=\"userNameOrEmail\" autocomplete=\"username\" />\r\n </label>\r\n\r\n <label>\r\n <span><app-chill-i18n-label [labelGuid]=\"'A76807CB-91F6-41A5-B565-D86EEA811241'\" [primaryDefaultText]=\"'Password'\" [secondaryDefaultText]=\"'Password'\" /></span>\r\n <input type=\"password\" formControlName=\"password\" autocomplete=\"current-password\" />\r\n </label>\r\n\r\n <button type=\"submit\" [disabled]=\"isSubmitting() || form.invalid\">\r\n @if (isSubmitting()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'8B825C06-0160-4B9F-B697-C624456C87CA'\" [primaryDefaultText]=\"'Signing in...'\" [secondaryDefaultText]=\"'Accesso in corso...'\" />\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'CA6A46A2-9E63-4AA8-849F-63EEB430A227'\" [primaryDefaultText]=\"'Sign in'\" [secondaryDefaultText]=\"'Accedi'\" />\r\n }\r\n </button>\r\n </form>\r\n\r\n <nav class=\"auth-links\">\r\n <a routerLink=\"/register\">{{ chill.T('61E5DBBB-413A-449B-BE0E-B4A991FA1E39', 'Create account', 'Crea account') }}</a>\r\n <a routerLink=\"/reset-password\">{{ chill.T('E61B1755-5FB6-40ED-A8D2-B9158BF410D8', 'Forgot password', 'Password dimenticata') }}</a>\r\n </nav>\r\n </div>\r\n </section>\r\n `\r\n})\r\nexport class LoginPageComponent implements OnInit {\r\n readonly chill = inject(ChillService);\r\n private readonly formBuilder = inject(FormBuilder);\r\n private readonly router = inject(Router);\r\n\r\n readonly isSubmitting = signal(false);\r\n readonly errorMessage = signal('');\r\n readonly serviceStatusMessage = signal(this.chill.T('A4AE0C28-6837-4586-B6D4-26FA90E7C458', 'Checking Chill service...', 'Verifica del servizio Chill in corso...'));\r\n readonly serviceStatusKind = signal<'info' | 'success' | 'error'>('info');\r\n readonly form = this.formBuilder.nonNullable.group({\r\n userNameOrEmail: ['', Validators.required],\r\n password: ['', Validators.required]\r\n });\r\n\r\n ngOnInit(): void {\r\n this.chill.test().subscribe({\r\n next: (response: string) => {\r\n this.serviceStatusKind.set('success');\r\n this.serviceStatusMessage.set(response || this.chill.T('C99B0A5B-433D-48DD-96D2-69D730A3EBCC', 'Chill service is available.', 'Il servizio Chill è disponibile.'));\r\n },\r\n error: (error: unknown) => {\r\n this.serviceStatusKind.set('error');\r\n this.serviceStatusMessage.set(`${this.chill.T('E271909F-89FE-4A7F-8763-A730FE770145', 'Chill service unavailable:', 'Servizio Chill non disponibile:')} ${this.chill.formatError(error)}`);\r\n }\r\n });\r\n }\r\n\r\n submit(): void {\r\n if (this.form.invalid || this.isSubmitting()) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n\r\n this.isSubmitting.set(true);\r\n this.errorMessage.set('');\r\n\r\n this.chill.login({\r\n UserNameOrEmail: this.form.getRawValue().userNameOrEmail,\r\n Password: this.form.getRawValue().password\r\n }).subscribe({\r\n next: () => {\r\n this.isSubmitting.set(false);\r\n if (!this.chill.isAuthenticated()) {\r\n this.errorMessage.set(this.chill.T(\r\n '8995E23D-2E60-4D55-9E68-92BA746B9E16',\r\n 'Login returned successfully, but no access token was persisted.',\r\n 'Il login e riuscito, ma nessun token di accesso e stato salvato.'\r\n ));\r\n return;\r\n }\r\n void this.router.navigate(['/workspace']);\r\n },\r\n error: (error: unknown) => {\r\n this.isSubmitting.set(false);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, signal } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, ReactiveFormsModule, ValidationErrors, Validators } from '@angular/forms';\r\nimport { Router, RouterLink } from '@angular/router';\r\nimport { ChillI18nLabelComponent } from '../lib/chill-i18n-label.component';\r\nimport { ChillI18nButtonLabelComponent } from '../lib/chill-i18n-button-label.component';\r\nimport { NoticeTransitionDirective } from '../lib/notice-transition.directive';\r\nimport { CHILL_CULTURE } from '../chill.config';\r\nimport { ChillService } from '../services/chill.service';\r\n\r\nfunction passwordMatchValidator(control: AbstractControl): ValidationErrors | null {\r\n const password = control.get('password')?.value;\r\n const confirmPassword = control.get('confirmPassword')?.value;\r\n return password === confirmPassword ? null : { passwordMismatch: true };\r\n}\r\n\r\n@Component({\r\n selector: 'app-register-page',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, RouterLink, ChillI18nLabelComponent, ChillI18nButtonLabelComponent, NoticeTransitionDirective],\r\n template: `\r\n <section class=\"auth-page\">\r\n <div class=\"auth-card wide\">\r\n <p class=\"eyebrow\"><app-chill-i18n-label [labelGuid]=\"'A651A560-1828-4D67-8D60-8B97011231D7'\" [primaryDefaultText]=\"'ChillSharp Auth'\" [secondaryDefaultText]=\"'Autenticazione ChillSharp'\" /></p>\r\n <h1><app-chill-i18n-label [labelGuid]=\"'0A777B5C-F7D1-4084-B32F-D5162E100AF6'\" [primaryDefaultText]=\"'Register'\" [secondaryDefaultText]=\"'Registrazione'\" /></h1>\r\n <p class=\"lede\"><app-chill-i18n-label [labelGuid]=\"'E4AB90A6-DB4D-4D34-BA80-8D07F6F5595D'\" [primaryDefaultText]=\"'Create an ASP.NET Core Identity account and optionally the linked ChillSharp auth user.'\" [secondaryDefaultText]=\""Crea un account ASP.NET Core Identity e, facoltativamente, l'utente auth collegato di ChillSharp."\" /></p>\r\n\r\n @if (successMessage()) {\r\n <div class=\"notice success\">{{ successMessage() }}</div>\r\n }\r\n\r\n @if (errorMessage()) {\r\n <div class=\"notice error\">{{ errorMessage() }}</div>\r\n }\r\n\r\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\" class=\"auth-form two-columns\">\r\n <label>\r\n <span><app-chill-i18n-label [labelGuid]=\"'2AF5EB08-932E-4D4D-9338-75E1808B5F16'\" [primaryDefaultText]=\"'Username'\" [secondaryDefaultText]=\"'Nome utente'\" /></span>\r\n <input type=\"text\" formControlName=\"userName\" autocomplete=\"username\" />\r\n </label>\r\n\r\n <label>\r\n <span><app-chill-i18n-label [labelGuid]=\"'311C8595-76C7-41DF-B4A0-0D0EF8E9A3D7'\" [primaryDefaultText]=\"'Email'\" [secondaryDefaultText]=\"'Email'\" /></span>\r\n <input type=\"email\" formControlName=\"email\" autocomplete=\"email\" />\r\n </label>\r\n\r\n <label class=\"full-width\">\r\n <span><app-chill-i18n-label [labelGuid]=\"'C0D8A063-E084-460D-BF83-BCE32CB68588'\" [primaryDefaultText]=\"'Display name'\" [secondaryDefaultText]=\"'Nome visualizzato'\" /></span>\r\n <input type=\"text\" formControlName=\"displayName\" autocomplete=\"name\" />\r\n </label>\r\n\r\n <label>\r\n <span><app-chill-i18n-label [labelGuid]=\"'A76807CB-91F6-41A5-B565-D86EEA811241'\" [primaryDefaultText]=\"'Password'\" [secondaryDefaultText]=\"'Password'\" /></span>\r\n <input type=\"password\" formControlName=\"password\" autocomplete=\"new-password\" />\r\n </label>\r\n\r\n <label>\r\n <span><app-chill-i18n-label [labelGuid]=\"'14EB51FA-9D9B-427C-AFD6-CC54031B9B26'\" [primaryDefaultText]=\"'Confirm password'\" [secondaryDefaultText]=\"'Conferma password'\" /></span>\r\n <input type=\"password\" formControlName=\"confirmPassword\" autocomplete=\"new-password\" />\r\n </label>\r\n\r\n <label class=\"checkbox full-width\">\r\n <input type=\"checkbox\" formControlName=\"createChillAuthUser\" />\r\n <span><app-chill-i18n-label [labelGuid]=\"'E69C6D4F-07EC-42BA-B30D-AFA77B84E595'\" [primaryDefaultText]=\"'Create linked Chill auth user'\" [secondaryDefaultText]=\"'Crea utente auth Chill collegato'\" /></span>\r\n </label>\r\n\r\n @if (form.hasError('passwordMismatch') && form.touched) {\r\n <div class=\"notice error full-width\">{{ chill.T('12632967-9A9B-4A16-B7DF-D64B7BA7914A', 'Password confirmation does not match.', 'La conferma della password non corrisponde.') }}</div>\r\n }\r\n\r\n <button type=\"submit\" class=\"full-width\" [disabled]=\"isSubmitting() || form.invalid\">\r\n @if (isSubmitting()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'A39321BE-5534-40B7-B1A7-F32BF872C997'\" [primaryDefaultText]=\"'Creating account...'\" [secondaryDefaultText]=\"'Creazione account in corso...'\" />\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'61E5DBBB-413A-449B-BE0E-B4A991FA1E39'\" [primaryDefaultText]=\"'Create account'\" [secondaryDefaultText]=\"'Crea account'\" />\r\n }\r\n </button>\r\n </form>\r\n\r\n <nav class=\"auth-links\">\r\n <a routerLink=\"/login\">{{ chill.T('1919121D-A2BC-403E-8FCA-E120630A1FAC', 'Back to login', 'Torna al login') }}</a>\r\n <a routerLink=\"/reset-password\">{{ chill.T('1322FAE4-DBD5-4C8D-8988-FA6035551E02', 'Reset password', 'Reimposta password') }}</a>\r\n </nav>\r\n </div>\r\n </section>\r\n `\r\n})\r\nexport class RegisterPageComponent {\r\n readonly chill = inject(ChillService);\r\n private readonly formBuilder = inject(FormBuilder);\r\n private readonly router = inject(Router);\r\n\r\n readonly isSubmitting = signal(false);\r\n readonly errorMessage = signal('');\r\n readonly successMessage = signal('');\r\n readonly form = this.formBuilder.nonNullable.group({\r\n userName: ['', Validators.required],\r\n email: ['', [Validators.required, Validators.email]],\r\n displayName: [''],\r\n password: ['', [Validators.required, Validators.minLength(6)]],\r\n confirmPassword: ['', [Validators.required, Validators.minLength(6)]],\r\n createChillAuthUser: [true]\r\n }, { validators: passwordMatchValidator });\r\n\r\n submit(): void {\r\n if (this.form.invalid || this.isSubmitting()) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n\r\n this.isSubmitting.set(true);\r\n this.errorMessage.set('');\r\n this.successMessage.set('');\r\n\r\n const value = this.form.getRawValue();\r\n this.chill.register({\r\n UserName: value.userName,\r\n Email: value.email,\r\n Password: value.password,\r\n DisplayName: value.displayName,\r\n DisplayCultureName: this.readBrowserCultureName(),\r\n DisplayTimeZone: this.readBrowserTimeZone(),\r\n CreateChillAuthUser: value.createChillAuthUser\r\n }).subscribe({\r\n next: () => {\r\n this.isSubmitting.set(false);\r\n this.successMessage.set(this.chill.T('C91817F6-2CA4-461E-9D2B-EAD56F4B79BF', 'Account created and authenticated successfully.', 'Account creato e autenticato correttamente.'));\r\n setTimeout(() => {\r\n void this.router.navigate(['/workspace']);\r\n }, 700);\r\n },\r\n error: (error: unknown) => {\r\n this.isSubmitting.set(false);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n\r\n private readBrowserCultureName(): string {\r\n const languages = globalThis.navigator?.languages;\r\n const browserCultureName = languages?.find((language) => typeof language === 'string' && language.trim())\r\n ?? globalThis.navigator?.language\r\n ?? '';\r\n return browserCultureName.trim() || CHILL_CULTURE;\r\n }\r\n\r\n private readBrowserTimeZone(): string {\r\n return Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, signal } from '@angular/core';\r\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { RouterLink } from '@angular/router';\r\nimport { ChillI18nLabelComponent } from '../lib/chill-i18n-label.component';\r\nimport { ChillI18nButtonLabelComponent } from '../lib/chill-i18n-button-label.component';\r\nimport { NoticeTransitionDirective } from '../lib/notice-transition.directive';\r\nimport type { PasswordResetTokenResponse } from '../models/chill-auth.models';\r\nimport { ChillService } from '../services/chill.service';\r\n\r\n@Component({\r\n selector: 'app-reset-password-page',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, RouterLink, ChillI18nLabelComponent, ChillI18nButtonLabelComponent, NoticeTransitionDirective],\r\n template: `\r\n <section class=\"auth-page\">\r\n <div class=\"auth-card\">\r\n <p class=\"eyebrow\"><app-chill-i18n-label [labelGuid]=\"'A651A560-1828-4D67-8D60-8B97011231D7'\" [primaryDefaultText]=\"'ChillSharp Auth'\" [secondaryDefaultText]=\"'Autenticazione ChillSharp'\" /></p>\r\n <h1><app-chill-i18n-label [labelGuid]=\"'1322FAE4-DBD5-4C8D-8988-FA6035551E02'\" [primaryDefaultText]=\"'Reset password'\" [secondaryDefaultText]=\"'Reimposta password'\" /></h1>\r\n <p class=\"lede\"><app-chill-i18n-label [labelGuid]=\"'6F70BF2E-01D1-4102-A544-2B22CF54C2EA'\" [primaryDefaultText]=\"'Request a password-reset token through the ChillSharp auth reset endpoint.'\" [secondaryDefaultText]=\""Richiedi un token di reimpostazione password tramite l'endpoint auth di reset di ChillSharp."\" /></p>\r\n\r\n @if (successMessage()) {\r\n <div class=\"notice success\">{{ successMessage() }}</div>\r\n }\r\n\r\n @if (errorMessage()) {\r\n <div class=\"notice error\">{{ errorMessage() }}</div>\r\n }\r\n\r\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\" class=\"auth-form\">\r\n <label>\r\n <span><app-chill-i18n-label [labelGuid]=\"'EA8C79F7-B95E-40A8-B638-C09BFD355A94'\" [primaryDefaultText]=\"'Username or email'\" [secondaryDefaultText]=\"'Nome utente o email'\" /></span>\r\n <input type=\"text\" formControlName=\"userNameOrEmail\" autocomplete=\"username\" />\r\n </label>\r\n\r\n <button type=\"submit\" [disabled]=\"isSubmitting() || form.invalid\">\r\n @if (isSubmitting()) {\r\n <app-chill-i18n-button-label [labelGuid]=\"'33346EC7-C16F-4E58-A24E-097534F42BBE'\" [primaryDefaultText]=\"'Requesting...'\" [secondaryDefaultText]=\"'Richiesta in corso...'\" />\r\n } @else {\r\n <app-chill-i18n-button-label [labelGuid]=\"'6E44886E-EA78-4749-AABF-53E1BE8022D8'\" [primaryDefaultText]=\"'Request reset token'\" [secondaryDefaultText]=\"'Richiedi token di reset'\" />\r\n }\r\n </button>\r\n </form>\r\n\r\n @if (response()) {\r\n <div class=\"token-panel\">\r\n <p class=\"token-title\"><app-chill-i18n-label [labelGuid]=\"'DCCDB0A2-80BA-465D-8D96-8A5FF9A0179D'\" [primaryDefaultText]=\"'Reset response'\" [secondaryDefaultText]=\"'Risposta reset'\" /></p>\r\n <dl>\r\n <div>\r\n <dt><app-chill-i18n-label [labelGuid]=\"'970FE371-F8CB-4C64-9DFE-7F72241D8D9A'\" [primaryDefaultText]=\"'Accepted'\" [secondaryDefaultText]=\"'Accettato'\" /></dt>\r\n <dd>{{ response()?.IsAccepted\r\n ? chill.T('E7FE0A44-0957-453A-A2AA-4F08FD38D8E1', 'Yes', 'Sì')\r\n : chill.T('27EC1CA2-5AAA-4A14-B89A-9E4317349917', 'No', 'No') }}</dd>\r\n </div>\r\n <div>\r\n <dt><app-chill-i18n-label [labelGuid]=\"'CEB1B59C-FD4E-46D4-B11C-F8B33EA4C32E'\" [primaryDefaultText]=\"'User ID'\" [secondaryDefaultText]=\"'ID utente'\" /></dt>\r\n <dd>{{ response()?.UserId || chill.T('6D5C3326-1F96-434A-B6EC-0E72C5A79A0F', 'Not returned by the server', 'Non restituito dal server') }}</dd>\r\n </div>\r\n <div>\r\n <dt><app-chill-i18n-label [labelGuid]=\"'3D525E29-B464-49FF-AC72-6D7E05D0F226'\" [primaryDefaultText]=\"'Reset token'\" [secondaryDefaultText]=\"'Token di reset'\" /></dt>\r\n <dd class=\"wrap\">{{ response()?.ResetToken || chill.T('6D5C3326-1F96-434A-B6EC-0E72C5A79A0F', 'Not returned by the server', 'Non restituito dal server') }}</dd>\r\n </div>\r\n </dl>\r\n\r\n @if (response()?.UserId && response()?.ResetToken) {\r\n <a\r\n class=\"button-link\"\r\n [routerLink]=\"['/confirm-reset-password', response()?.ResetToken]\"\r\n [queryParams]=\"{ userId: response()?.UserId }\">\r\n {{ chill.T('8FA3C95A-E55C-40F4-BFF7-E712A11EEB22', 'Continue to confirmation', 'Continua alla conferma') }}\r\n </a>\r\n }\r\n </div>\r\n }\r\n\r\n <nav class=\"auth-links\">\r\n <a routerLink=\"/login\">{{ chill.T('1919121D-A2BC-403E-8FCA-E120630A1FAC', 'Back to login', 'Torna al login') }}</a>\r\n <a routerLink=\"/register\">{{ chill.T('61E5DBBB-413A-449B-BE0E-B4A991FA1E39', 'Create account', 'Crea account') }}</a>\r\n </nav>\r\n </div>\r\n </section>\r\n `\r\n})\r\nexport class ResetPasswordPageComponent {\r\n readonly chill = inject(ChillService);\r\n private readonly formBuilder = inject(FormBuilder);\r\n\r\n readonly isSubmitting = signal(false);\r\n readonly errorMessage = signal('');\r\n readonly successMessage = signal('');\r\n readonly response = signal<PasswordResetTokenResponse | null>(null);\r\n readonly form = this.formBuilder.nonNullable.group({\r\n userNameOrEmail: ['', Validators.required]\r\n });\r\n\r\n submit(): void {\r\n if (this.form.invalid || this.isSubmitting()) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n\r\n this.isSubmitting.set(true);\r\n this.errorMessage.set('');\r\n this.successMessage.set('');\r\n this.response.set(null);\r\n\r\n this.chill.requestPasswordReset({\r\n UserNameOrEmail: this.form.getRawValue().userNameOrEmail\r\n }).subscribe({\r\n next: (response: PasswordResetTokenResponse) => {\r\n this.isSubmitting.set(false);\r\n this.response.set(response);\r\n this.successMessage.set(this.chill.T('0C3066C3-C623-4895-8C0A-28DAB44AF6A1', 'Reset request accepted by the ChillSharp auth endpoint.', 'Richiesta di reset accettata dall\\'endpoint auth di ChillSharp.'));\r\n },\r\n error: (error: unknown) => {\r\n this.isSubmitting.set(false);\r\n this.errorMessage.set(this.chill.formatError(error));\r\n }\r\n });\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn, Router, Routes } from '@angular/router';\r\nimport { AuthShellComponent } from './layouts/auth-shell.component';\r\nimport { WorkspacePageComponent } from './layouts/workspace-page.component';\r\nimport { ConfirmResetPageComponent } from './pages/confirm-reset-page.component';\r\nimport { LoginPageComponent } from './pages/login-page.component';\r\nimport { RegisterPageComponent } from './pages/register-page.component';\r\nimport { ResetPasswordPageComponent } from './pages/reset-password-page.component';\r\nimport { ChillService } from './services/chill.service';\r\n\r\nconst requireAuthGuard: CanActivateFn = () => {\n const chill = inject(ChillService);\n if (!chill.expireSessionIfNeeded() && chill.isAuthenticated()) {\n return true;\r\n }\r\n\r\n return inject(Router).createUrlTree(['/login']);\r\n};\r\n\r\nconst guestOnlyGuard: CanActivateFn = () => {\r\n const chill = inject(ChillService);\r\n if (!chill.isAuthenticated()) {\r\n return true;\r\n }\r\n\r\n return inject(Router).createUrlTree(['/workspace']);\r\n};\r\n\r\nexport const CHILL_SHARP_UI_ROUTES: Routes = [\r\n {\r\n path: '',\r\n pathMatch: 'full',\r\n redirectTo: 'login'\r\n },\r\n {\r\n path: '',\r\n component: AuthShellComponent,\r\n children: [\r\n { path: 'login', component: LoginPageComponent, canActivate: [guestOnlyGuard] },\r\n { path: 'register', component: RegisterPageComponent, canActivate: [guestOnlyGuard] },\r\n { path: 'reset-password', component: ResetPasswordPageComponent },\r\n { path: 'confirm-reset-password', component: ConfirmResetPageComponent },\r\n { path: 'confirm-reset-password/:token', component: ConfirmResetPageComponent }\r\n ]\r\n },\r\n { path: 'confirm-reset', pathMatch: 'full', redirectTo: 'confirm-reset-password' },\r\n { path: 'confirm-reset/:token', pathMatch: 'full', redirectTo: 'confirm-reset-password/:token' },\r\n { path: 'workspace', component: WorkspacePageComponent, canActivate: [requireAuthGuard] },\r\n { path: 'workspace/:taskId', component: WorkspacePageComponent, canActivate: [requireAuthGuard] },\r\n { path: '**', redirectTo: 'login' }\r\n];\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, input, signal, effect } from '@angular/core';\r\nimport { WorkspaceDialogService } from '../services/workspace-dialog.service';\r\nimport { ChillJsonInputComponent } from './chill-json-input.component';\r\n\r\n@Component({\r\n selector: 'app-chill-text-editor-dialog',\r\n standalone: true,\r\n imports: [CommonModule, ChillJsonInputComponent],\r\n template: `\r\n <section class=\"text-editor-dialog\">\r\n <app-chill-json-input\r\n [value]=\"draft()\"\r\n [language]=\"language()\"\r\n [placeholder]=\"placeholder()\"\r\n [disabled]=\"disabled()\"\r\n [mobileFullHeight]=\"true\"\r\n minHeight=\"18rem\"\r\n maxHeight=\"70vh\"\r\n (valueChange)=\"draft.set($event)\"></app-chill-json-input>\r\n </section>\r\n `,\r\n styles: [`\r\n :host {\r\n display: block;\r\n min-height: 0;\r\n }\r\n\r\n .text-editor-dialog {\r\n display: grid;\r\n min-width: min(58rem, calc(100vw - 5rem));\r\n min-height: 0;\r\n }\r\n\r\n .text-editor-dialog app-chill-json-input {\r\n min-height: 0;\r\n }\r\n\r\n @media (max-width: 720px) {\r\n :host,\r\n .text-editor-dialog {\r\n height: 100%;\r\n min-width: 0;\r\n }\r\n }\r\n `]\r\n})\r\nexport class ChillTextEditorDialogComponent {\r\n private readonly dialog = inject(WorkspaceDialogService);\r\n\r\n readonly value = input('');\r\n readonly language = input<'json' | 'plaintext'>('plaintext');\r\n readonly placeholder = input('');\r\n readonly disabled = input(false);\r\n\r\n readonly draft = signal('');\r\n\r\n constructor() {\r\n effect(() => {\r\n this.draft.set(this.value());\r\n });\r\n }\r\n\r\n submit(): void {\r\n this.dialog.confirm(this.draft());\r\n }\r\n}\r\n","import type { ChillPropertySelectOptionTuple } from '../models/chill-schema.models';\r\n\r\nconst STANDARD_CULTURE_NAMES = [\r\n 'it-IT',\r\n 'en-GB',\r\n 'en-US',\r\n 'fr-FR',\r\n 'de-DE',\r\n 'es-ES',\r\n 'pt-PT',\r\n 'pt-BR',\r\n 'nl-NL',\r\n 'sv-SE',\r\n 'da-DK',\r\n 'nb-NO',\r\n 'fi-FI',\r\n 'pl-PL',\r\n 'cs-CZ',\r\n 'sk-SK',\r\n 'hu-HU',\r\n 'ro-RO',\r\n 'el-GR',\r\n 'tr-TR',\r\n 'ru-RU',\r\n 'uk-UA',\r\n 'ar-SA',\r\n 'he-IL',\r\n 'hi-IN',\r\n 'th-TH',\r\n 'zh-CN',\r\n 'zh-TW',\r\n 'ja-JP',\r\n 'ko-KR'\r\n];\r\n\r\nexport function getCultureNameOptions(): ChillPropertySelectOptionTuple[] {\r\n return STANDARD_CULTURE_NAMES\r\n .map((cultureName) => [cultureName, cultureName] as ChillPropertySelectOptionTuple);\r\n}\r\n","import type { ChillPropertySelectOptionTuple } from '../models/chill-schema.models';\r\n\r\nconst DATE_FORMAT_OPTIONS: ReadonlyArray<ChillPropertySelectOptionTuple> = [\r\n ['dd/MM/yyyy', 'dd/MM/yyyy'],\r\n ['MM/dd/yyyy', 'MM/dd/yyyy'],\r\n ['yyyy-MM-dd', 'yyyy-MM-dd'],\r\n ['DD/MM/YYYY', 'DD/MM/YYYY'],\r\n ['MM/DD/YYYY', 'MM/DD/YYYY'],\r\n ['YYYY-MM-DD', 'YYYY-MM-DD']\r\n];\r\n\r\nexport function getDateFormatOptions(): ChillPropertySelectOptionTuple[] {\r\n return [...DATE_FORMAT_OPTIONS];\r\n}\r\n","import type { ChillPropertySelectOptionTuple } from '../models/chill-schema.models';\r\n\r\nconst FALLBACK_IANA_TIME_ZONES: string[] = [\r\n 'UTC',\r\n 'Europe/London',\r\n 'Europe/Rome',\r\n 'Europe/Paris',\r\n 'Europe/Berlin',\r\n 'Europe/Madrid',\r\n 'Europe/Athens',\r\n 'America/New_York',\r\n 'America/Chicago',\r\n 'America/Denver',\r\n 'America/Los_Angeles',\r\n 'America/Sao_Paulo',\r\n 'Asia/Dubai',\r\n 'Asia/Kolkata',\r\n 'Asia/Bangkok',\r\n 'Asia/Singapore',\r\n 'Asia/Tokyo',\r\n 'Australia/Sydney'\r\n];\r\n\r\nexport function getIanaTimeZoneOptions(): ChillPropertySelectOptionTuple[] {\r\n const supportedValuesOf = (Intl as typeof Intl & {\r\n supportedValuesOf?: (key: string) => string[];\r\n }).supportedValuesOf;\r\n const timeZones = typeof supportedValuesOf === 'function'\r\n ? supportedValuesOf('timeZone')\r\n : FALLBACK_IANA_TIME_ZONES;\r\n\r\n return [...new Set(timeZones)]\r\n .filter((timeZone) => typeof timeZone === 'string' && timeZone.trim().length > 0)\r\n .sort((left, right) => left.localeCompare(right))\r\n .map((timeZone) => [timeZone, timeZone] as ChillPropertySelectOptionTuple);\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, effect, inject, input, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { WorkspaceDialogService } from '../services/workspace-dialog.service';\r\nimport { ChillService } from '../services/chill.service';\r\nimport { ChillJsonInputComponent } from './chill-json-input.component';\r\nimport { getDateFormatOptions } from './date-format-options';\r\nimport { CHILL_PROPERTY_TYPE, CHILL_PROPERTY_TYPE_OPTIONS, canChangeChillPropertyType, chillSimplePropertyType, type ChillMetadataRecord, type ChillPropertySchema, type ChillSchema } from '../models/chill-schema.models';\r\n\r\ntype SchemaPropertyDraft = {\r\n name: string;\r\n displayName: string;\r\n propertyType: number;\r\n isNullable: boolean;\r\n isReadOnly: boolean;\r\n minLength: string;\r\n maxLength: string;\r\n integerMinValue: string;\r\n integerMaxValue: string;\r\n decimalMinValue: string;\r\n decimalMaxValue: string;\r\n decimalPlaces: string;\r\n precision: string;\r\n scale: string;\r\n dateFormat: string;\r\n customFormat: string;\r\n regexPattern: string;\r\n enumValues: string;\r\n lookupQueryValues: string;\r\n metadataJson: string;\r\n};\r\n\r\nconst MANAGED_METADATA_KEYS = ['required', 'readonly', 'minLength', 'maxLength', 'pattern', 'min', 'max', 'options'] as const;\r\n\r\n@Component({\r\n selector: 'app-schema-property-dialog',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, ChillJsonInputComponent],\r\n templateUrl: './schema-property-dialog.component.html',\r\n styleUrl: './schema-property-dialog.component.scss'\r\n})\r\nexport class SchemaPropertyDialogComponent {\r\n readonly chill = inject(ChillService);\r\n private readonly dialog = inject(WorkspaceDialogService);\r\n\r\n readonly schema = input<ChillSchema | null>(null);\r\n readonly property = input<ChillPropertySchema | null>(null);\r\n\r\n readonly draft = signal<SchemaPropertyDraft>(this.createEmptyDraft());\r\n readonly dateFormatOptions = getDateFormatOptions();\r\n readonly schemaTypeLabel = computed(() => this.schema()?.displayName?.trim() || this.schema()?.chillType?.trim() || '');\r\n readonly metadataJsonInvalid = computed(() => !this.tryParseMetadata(this.draft().metadataJson).ok);\r\n readonly selectedPropertyType = computed(() => this.draft().propertyType);\r\n readonly showLengthSettings = computed(() => {\r\n const propertyType = this.selectedPropertyType();\r\n return propertyType === CHILL_PROPERTY_TYPE.String\r\n || propertyType === CHILL_PROPERTY_TYPE.Text\r\n || propertyType === CHILL_PROPERTY_TYPE.Json\r\n || propertyType === CHILL_PROPERTY_TYPE.Select;\r\n });\r\n readonly showRegexPattern = computed(() => {\r\n const propertyType = this.selectedPropertyType();\r\n return propertyType === CHILL_PROPERTY_TYPE.String\r\n || propertyType === CHILL_PROPERTY_TYPE.Text;\r\n });\r\n readonly showIntegerRange = computed(() => this.selectedPropertyType() === CHILL_PROPERTY_TYPE.Integer);\r\n readonly showDecimalSettings = computed(() => this.selectedPropertyType() === CHILL_PROPERTY_TYPE.Decimal);\r\n readonly showDateFormat = computed(() => {\r\n const propertyType = this.selectedPropertyType();\r\n return propertyType === CHILL_PROPERTY_TYPE.Date || propertyType === CHILL_PROPERTY_TYPE.DateTime;\r\n });\r\n readonly showCustomFormat = computed(() => {\r\n const propertyType = this.selectedPropertyType();\r\n return propertyType === CHILL_PROPERTY_TYPE.String\r\n || propertyType === CHILL_PROPERTY_TYPE.Text\r\n || propertyType === CHILL_PROPERTY_TYPE.Json\r\n || propertyType === CHILL_PROPERTY_TYPE.Date\r\n || propertyType === CHILL_PROPERTY_TYPE.Time\r\n || propertyType === CHILL_PROPERTY_TYPE.DateTime\r\n || propertyType === CHILL_PROPERTY_TYPE.Duration;\r\n });\r\n readonly showEnumValues = computed(() => this.selectedPropertyType() === CHILL_PROPERTY_TYPE.Select);\r\n readonly showLookupQueryValues = computed(() => this.selectedPropertyType() === CHILL_PROPERTY_TYPE.ChillEntity || this.selectedPropertyType() === CHILL_PROPERTY_TYPE.ChillEntityCollection);\r\n readonly validationMessages = computed(() => this.validateDraft(this.draft()));\r\n\r\n readonly propertyTypeOptions = CHILL_PROPERTY_TYPE_OPTIONS;\r\n\r\n constructor() {\r\n effect(() => {\r\n const property = this.property();\r\n this.draft.set(property ? this.createDraft(property) : this.createEmptyDraft());\r\n });\r\n }\r\n\r\n canDialogSubmit(): boolean {\r\n return this.validationMessages().length === 0;\r\n }\r\n\r\n submit(): void {\r\n const source = this.property();\r\n if (!source || !this.canDialogSubmit()) {\r\n return;\r\n }\r\n\r\n this.dialog.confirm(this.buildProperty(source, this.draft()));\r\n }\r\n\r\n updateText<K extends keyof SchemaPropertyDraft>(key: K, value: SchemaPropertyDraft[K]): void {\r\n this.draft.update((current) => ({\r\n ...current,\r\n [key]: value\r\n }));\r\n }\r\n\r\n updateBoolean(key: 'isNullable' | 'isReadOnly', value: boolean): void {\r\n this.draft.update((current) => ({\r\n ...current,\r\n [key]: value === true\r\n }));\r\n }\r\n\r\n updatePropertyType(value: number | string): void {\r\n const parsed = typeof value === 'number' ? value : Number(value);\r\n const property = this.property();\r\n if (!property || !Number.isFinite(parsed) || !canChangeChillPropertyType(property.propertyType, parsed)) {\r\n return;\r\n }\r\n\r\n this.draft.update((current) => ({\r\n ...current,\r\n propertyType: parsed\r\n }));\r\n }\r\n\r\n isPropertyTypeOptionDisabled(value: number): boolean {\r\n const property = this.property();\r\n return !!property && !canChangeChillPropertyType(property.propertyType, value);\r\n }\r\n\r\n enumValuesPlaceholder(): string {\r\n return this.chill.T(\r\n '563559B9-F9B4-4E7A-923A-086A517CDE8A',\r\n 'One value per line. Use \"value = label\" to customize the shown text.',\r\n 'Un valore per riga. Usa \"valore = etichetta\" per personalizzare il testo mostrato.'\r\n );\r\n }\r\n\r\n lookupQueryValuesPlaceholder(): string {\r\n return this.chill.T(\r\n 'f697f658-7e4e-46d6-b8ea-e71a7ee02415',\r\n 'Lookup query values, example { \"OptionalSearchProperty\": \"@{OtherField}\", \"MandatorySearchProperty\": \"${AlternativeField}\" }'+\r\n ' true for boolean'+\r\n ' 1 for numbers'+\r\n ' \"hello\" for strings'+\r\n ' \"@{FieldName}\" optional value from other fields of the same entity'+\r\n ' \"${FieldName}\" mandatory value from other fields of the same entity',\r\n 'Valori da utilizzare per la ricerca, esempio { \"OptionalSearchProperty\": \"@{OtherField}\", \"MandatorySearchProperty\": \"${AlternativeField}\" }'+\r\n ' true per booleani'+\r\n ' 1 per numeri'+\r\n ' \"hello\" per stringhe'+\r\n ' \"@{FieldName}\" valore opzionale da altro campo della stessa entity'+\r\n ' \"${FieldName}\" valore obbligatorio da altro campo della stessa entity'\r\n );\r\n }\r\n\r\n metadataPlaceholder(): string {\r\n return '{\\n \\n}';\r\n }\r\n\r\n private createDraft(property: ChillPropertySchema): SchemaPropertyDraft {\r\n return {\r\n name: property.name ?? '',\r\n displayName: property.displayName ?? property.name ?? '',\r\n propertyType: property.propertyType ?? CHILL_PROPERTY_TYPE.Unknown,\r\n isNullable: property.isNullable !== false,\r\n isReadOnly: property.isReadOnly ?? this.readBooleanMetadata(property.metadata, 'readonly'),\r\n minLength: this.formatOptionalNumber(property.minLength ?? this.readMetadataNumber(property.metadata, 'minLength')),\r\n maxLength: this.formatOptionalNumber(property.maxLength ?? this.readMetadataNumber(property.metadata, 'maxLength')),\r\n integerMinValue: this.formatOptionalNumber(property.integerMinValue ?? this.readMetadataNumber(property.metadata, 'min')),\r\n integerMaxValue: this.formatOptionalNumber(property.integerMaxValue ?? this.readMetadataNumber(property.metadata, 'max')),\r\n decimalMinValue: this.formatOptionalNumber(property.decimalMinValue ?? this.readMetadataNumber(property.metadata, 'min')),\r\n decimalMaxValue: this.formatOptionalNumber(property.decimalMaxValue ?? this.readMetadataNumber(property.metadata, 'max')),\r\n decimalPlaces: this.formatOptionalNumber(property.decimalPlaces),\r\n precision: this.formatOptionalNumber(property.precision),\r\n scale: this.formatOptionalNumber(property.scale),\r\n dateFormat: property.dateFormat ?? '',\r\n customFormat: property.customFormat ?? '',\r\n regexPattern: property.regexPattern ?? this.readMetadataString(property.metadata, 'pattern'),\r\n enumValues: this.serializeEnumValues(property),\r\n lookupQueryValues: property.lookupQueryValues ?? '',\r\n metadataJson: this.stringifyMetadata(property.metadata)\r\n };\r\n }\r\n\r\n private createEmptyDraft(): SchemaPropertyDraft {\r\n return {\r\n name: '',\r\n displayName: '',\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: true,\r\n isReadOnly: false,\r\n minLength: '',\r\n maxLength: '',\r\n integerMinValue: '',\r\n integerMaxValue: '',\r\n decimalMinValue: '',\r\n decimalMaxValue: '',\r\n decimalPlaces: '',\r\n precision: '',\r\n scale: '',\r\n dateFormat: '',\r\n customFormat: '',\r\n regexPattern: '',\r\n enumValues: '',\r\n lookupQueryValues: '',\r\n metadataJson: '{\\n \\n}'\r\n };\r\n }\r\n\r\n private validateDraft(draft: SchemaPropertyDraft): string[] {\r\n const messages: string[] = [];\r\n if (!draft.name.trim()) {\r\n messages.push(this.chill.T('93531950-1BC3-470F-A460-84296F0E8569', 'Property name is required.', 'Il nome proprietà è obbligatorio.'));\r\n }\r\n\r\n if (!this.tryParseMetadata(draft.metadataJson).ok) {\r\n messages.push(this.chill.T('00B1B7D1-F59B-4D53-8D0A-C99D7D0A7180', 'Metadata must be a valid JSON object.', 'I metadata devono essere un oggetto JSON valido.'));\r\n }\r\n\r\n const minLength = this.parseOptionalInteger(draft.minLength);\r\n const maxLength = this.parseOptionalInteger(draft.maxLength);\r\n if (this.showLengthSettings()) {\r\n if (draft.minLength.trim() && minLength === null) {\r\n messages.push(this.chill.T('7A070C4A-8E91-4736-B7B6-65E58D4ED1F4', 'Min length must be an integer.', 'La lunghezza minima deve essere un intero.'));\r\n }\r\n if (draft.maxLength.trim() && maxLength === null) {\r\n messages.push(this.chill.T('4C6079A7-B5D8-4A05-B9D3-4349B4518D9A', 'Max length must be an integer.', 'La lunghezza massima deve essere un intero.'));\r\n }\r\n if (minLength !== null && maxLength !== null && minLength > maxLength) {\r\n messages.push(this.chill.T('E7502A18-FB9A-4E61-83BC-51E2D86CE83C', 'Min length cannot exceed max length.', 'La lunghezza minima non può superare la lunghezza massima.'));\r\n }\r\n }\r\n\r\n const integerMin = this.parseOptionalInteger(draft.integerMinValue);\r\n const integerMax = this.parseOptionalInteger(draft.integerMaxValue);\r\n if (this.showIntegerRange()) {\r\n if (draft.integerMinValue.trim() && integerMin === null) {\r\n messages.push(this.chill.T('389A718A-A7A3-4D91-8E93-0D7284F940B4', 'Integer min value must be an integer.', 'Il valore intero minimo deve essere un intero.'));\r\n }\r\n if (draft.integerMaxValue.trim() && integerMax === null) {\r\n messages.push(this.chill.T('68B76D88-8E84-4C49-A6AF-CBDBCB7A8892', 'Integer max value must be an integer.', 'Il valore intero massimo deve essere un intero.'));\r\n }\r\n if (integerMin !== null && integerMax !== null && integerMin > integerMax) {\r\n messages.push(this.chill.T('2A0B5BEA-E98A-43E1-8AE6-BF90105A10A1', 'Integer min value cannot exceed integer max value.', 'Il valore intero minimo non può superare il valore intero massimo.'));\r\n }\r\n }\r\n\r\n const decimalMin = this.parseOptionalDecimal(draft.decimalMinValue);\r\n const decimalMax = this.parseOptionalDecimal(draft.decimalMaxValue);\r\n if (this.showDecimalSettings()) {\r\n if (draft.decimalMinValue.trim() && decimalMin === null) {\r\n messages.push(this.chill.T('113D8E72-BF6E-489A-912C-7D19C85173CA', 'Decimal min value must be numeric.', 'Il valore decimale minimo deve essere numerico.'));\r\n }\r\n if (draft.decimalMaxValue.trim() && decimalMax === null) {\r\n messages.push(this.chill.T('74D8A6F0-B66C-4B06-BDE4-E64F210205F6', 'Decimal max value must be numeric.', 'Il valore decimale massimo deve essere numerico.'));\r\n }\r\n if (decimalMin !== null && decimalMax !== null && decimalMin > decimalMax) {\r\n messages.push(this.chill.T('A36EB919-7C96-4C93-A29C-5A4350E3B995', 'Decimal min value cannot exceed decimal max value.', 'Il valore decimale minimo non può superare il valore decimale massimo.'));\r\n }\r\n if (draft.decimalPlaces.trim() && this.parseOptionalInteger(draft.decimalPlaces) === null) {\r\n messages.push(this.chill.T('D01A619A-28B0-42B7-B246-8799D6A0F6D0', 'Decimal places must be an integer.', 'Le cifre decimali devono essere un intero.'));\r\n }\r\n if (draft.precision.trim() && this.parseOptionalInteger(draft.precision) === null) {\r\n messages.push(this.chill.T('3AB179E4-AC9A-40AA-A1A1-B81232A3FEA1', 'Precision must be an integer.', 'La precisione deve essere un intero.'));\r\n }\r\n if (draft.scale.trim() && this.parseOptionalInteger(draft.scale) === null) {\r\n messages.push(this.chill.T('5753A4E0-14B3-4E43-91E6-1592F6E87045', 'Scale must be an integer.', 'La scala deve essere un intero.'));\r\n }\r\n }\r\n\r\n if (this.showRegexPattern() && draft.regexPattern.trim()) {\r\n try {\r\n new RegExp(draft.regexPattern);\r\n } catch {\r\n messages.push(this.chill.T('6A78E1B5-7733-4663-8A7D-E4E4F09AE499', 'Regex pattern is invalid.', 'Il pattern regex non è valido.'));\r\n }\r\n }\r\n\r\n if (this.showEnumValues() && this.parseEnumOptions(draft.enumValues).length === 0) {\r\n messages.push(this.chill.T('18D2378E-C16D-4220-924C-0BC6F3EE62C4', 'Select properties need at least one enum value.', 'Le proprietà select richiedono almeno un valore enum.'));\r\n }\r\n\r\n return messages;\r\n }\r\n\r\n private buildProperty(source: ChillPropertySchema, draft: SchemaPropertyDraft): ChillPropertySchema {\r\n const metadataResult = this.tryParseMetadata(draft.metadataJson);\r\n const metadata: ChillMetadataRecord = metadataResult.ok ? { ...metadataResult.value } : {};\r\n for (const key of MANAGED_METADATA_KEYS) {\r\n delete metadata[key];\r\n }\r\n\r\n metadata['required'] = draft.isNullable ? 'false' : 'true';\r\n if (draft.isReadOnly) {\r\n metadata['readonly'] = 'true';\r\n }\r\n\r\n const minLength = this.showLengthSettings() ? this.parseOptionalInteger(draft.minLength) : null;\r\n const maxLength = this.showLengthSettings() ? this.parseOptionalInteger(draft.maxLength) : null;\r\n const regexPattern = this.showRegexPattern() ? draft.regexPattern.trim() : '';\r\n if (minLength !== null) {\r\n metadata['minLength'] = String(minLength);\r\n }\r\n if (maxLength !== null) {\r\n metadata['maxLength'] = String(maxLength);\r\n }\r\n if (regexPattern) {\r\n metadata['pattern'] = regexPattern;\r\n }\r\n\r\n const integerMinValue = this.showIntegerRange() ? this.parseOptionalInteger(draft.integerMinValue) : null;\r\n const integerMaxValue = this.showIntegerRange() ? this.parseOptionalInteger(draft.integerMaxValue) : null;\r\n const decimalMinValue = this.showDecimalSettings() ? this.parseOptionalDecimal(draft.decimalMinValue) : null;\r\n const decimalMaxValue = this.showDecimalSettings() ? this.parseOptionalDecimal(draft.decimalMaxValue) : null;\r\n const decimalPlaces = this.showDecimalSettings() ? this.parseOptionalInteger(draft.decimalPlaces) : null;\r\n const precision = this.showDecimalSettings() ? this.parseOptionalInteger(draft.precision) : null;\r\n const scale = this.showDecimalSettings() ? this.parseOptionalInteger(draft.scale) : null;\r\n\r\n if (integerMinValue !== null) {\r\n metadata['min'] = String(integerMinValue);\r\n } else if (decimalMinValue !== null) {\r\n metadata['min'] = String(decimalMinValue);\r\n }\r\n if (integerMaxValue !== null) {\r\n metadata['max'] = String(integerMaxValue);\r\n } else if (decimalMaxValue !== null) {\r\n metadata['max'] = String(decimalMaxValue);\r\n }\r\n\r\n const enumOptions = this.showEnumValues() ? this.parseEnumOptions(draft.enumValues) : [];\r\n if (enumOptions.length > 0) {\r\n metadata['options'] = enumOptions.map((option) => [option.value, option.label]);\r\n }\r\n\r\n return {\r\n ...source,\r\n name: draft.name.trim(),\r\n displayName: draft.displayName.trim() || draft.name.trim(),\r\n propertyType: draft.propertyType,\r\n simplePropertyType: chillSimplePropertyType(draft.propertyType),\r\n isNullable: draft.isNullable,\r\n isReadOnly: draft.isReadOnly,\r\n minLength,\r\n maxLength,\r\n integerMinValue,\r\n integerMaxValue,\r\n decimalMinValue,\r\n decimalMaxValue,\r\n decimalPlaces,\r\n precision,\r\n scale,\r\n dateFormat: this.showDateFormat() ? draft.dateFormat.trim() : '',\r\n customFormat: this.showCustomFormat() ? draft.customFormat.trim() : '',\r\n regexPattern,\r\n enumValues: enumOptions.length > 0 ? enumOptions.map((option) => option.value) : null,\r\n metadata\r\n };\r\n }\r\n\r\n private parseEnumOptions(value: string): Array<{ value: string; label: string }> {\r\n return value\r\n .split(/\\r?\\n/)\r\n .map((line) => line.trim())\r\n .filter((line) => line.length > 0)\r\n .map((line) => {\r\n const separatorIndex = line.indexOf('=');\r\n if (separatorIndex < 0) {\r\n return { value: line, label: line };\r\n }\r\n\r\n const optionValue = line.slice(0, separatorIndex).trim();\r\n const optionLabel = line.slice(separatorIndex + 1).trim();\r\n return {\r\n value: optionValue || optionLabel,\r\n label: optionLabel || optionValue\r\n };\r\n })\r\n .filter((option) => option.value.length > 0 && option.label.length > 0);\r\n }\r\n\r\n private serializeEnumValues(property: ChillPropertySchema): string {\r\n const enumValues = Array.isArray(property.enumValues)\r\n ? property.enumValues.filter((value): value is string => typeof value === 'string' && value.trim().length > 0)\r\n : [];\r\n if (enumValues.length > 0) {\r\n return enumValues.join('\\n');\r\n }\r\n\r\n const rawOptions = property.metadata?.['options'];\r\n if (!Array.isArray(rawOptions)) {\r\n return '';\r\n }\r\n\r\n return rawOptions.flatMap((entry) => {\r\n if (!Array.isArray(entry) || entry.length < 2) {\r\n return [];\r\n }\r\n\r\n const [value, label] = entry;\r\n const normalizedValue = typeof value === 'string' || typeof value === 'number' ? String(value).trim() : '';\r\n const normalizedLabel = typeof label === 'string' || typeof label === 'number' ? String(label).trim() : '';\r\n if (!normalizedValue || !normalizedLabel) {\r\n return [];\r\n }\r\n\r\n return [normalizedValue === normalizedLabel ? normalizedValue : `${normalizedValue} = ${normalizedLabel}`];\r\n }).join('\\n');\r\n }\r\n\r\n private tryParseMetadata(value: string): { ok: true; value: ChillMetadataRecord } | { ok: false } {\r\n const normalized = value.trim();\r\n if (!normalized) {\r\n return { ok: true, value: {} };\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(normalized);\r\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\r\n return { ok: false };\r\n }\r\n\r\n return { ok: true, value: parsed as ChillMetadataRecord };\r\n } catch {\r\n return { ok: false };\r\n }\r\n }\r\n\r\n private stringifyMetadata(metadata: ChillMetadataRecord | undefined): string {\r\n try {\r\n return JSON.stringify(metadata ?? {}, null, 2);\r\n } catch {\r\n return '{\\n \\n}';\r\n }\r\n }\r\n\r\n private readMetadataNumber(metadata: ChillMetadataRecord | undefined, key: string): number | null {\r\n const value = metadata?.[key];\r\n if (typeof value === 'number' && Number.isFinite(value)) {\r\n return value;\r\n }\r\n if (typeof value === 'string' && value.trim()) {\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? parsed : null;\r\n }\r\n return null;\r\n }\r\n\r\n private readMetadataString(metadata: ChillMetadataRecord | undefined, key: string): string {\r\n const value = metadata?.[key];\r\n return typeof value === 'string'\r\n ? value.trim()\r\n : typeof value === 'number'\r\n ? String(value)\r\n : '';\r\n }\r\n\r\n private readBooleanMetadata(metadata: ChillMetadataRecord | undefined, key: string): boolean {\r\n const value = this.readMetadataString(metadata, key).toLowerCase();\r\n return value === 'true' || value === '1' || value === 'readonly';\r\n }\r\n\r\n private parseOptionalInteger(value: string): number | null {\r\n const normalized = value.trim();\r\n if (!normalized || !/^-?\\d+$/.test(normalized)) {\r\n return normalized ? null : null;\r\n }\r\n\r\n const parsed = Number(normalized);\r\n return Number.isSafeInteger(parsed) ? parsed : null;\r\n }\r\n\r\n private parseOptionalDecimal(value: string): number | null {\r\n const normalized = value.trim();\r\n if (!normalized) {\r\n return null;\r\n }\r\n\r\n const parsed = Number(normalized.replace(',', '.'));\r\n return Number.isFinite(parsed) ? parsed : null;\r\n }\r\n\r\n private formatOptionalNumber(value: number | null | undefined): string {\r\n return value === null || value === undefined || Number.isNaN(value)\r\n ? ''\r\n : String(value);\r\n }\r\n}\r\n","<section class=\"schema-property-dialog\">\r\n <p class=\"schema-property-dialog__lede\">\r\n {{ chill.T(\r\n 'FF4665A2-D898-4CC5-B911-B90F3B44AC25',\r\n 'Edit the selected schema property and save the updated behavior.',\r\n 'Modifica la proprietà di schema selezionata e salva il comportamento aggiornato.'\r\n ) }}\r\n </p>\r\n\r\n @if (schemaTypeLabel()) {\r\n <p class=\"schema-property-dialog__context\">\r\n {{ chill.T('C797A0B9-9AB2-4E71-84DE-677416293548', 'Schema type', 'Tipo schema') }}:\r\n <strong>{{ schemaTypeLabel() }}</strong>\r\n </p>\r\n }\r\n\r\n @if (validationMessages().length > 0) {\r\n <div class=\"schema-property-dialog__errors\">\r\n @for (message of validationMessages(); track message) {\r\n <p>{{ message }}</p>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"schema-property-dialog__grid\">\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('57D9358A-8052-460F-8C0C-5B93B572E73A', 'Name', 'Nome') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().name\" (ngModelChange)=\"updateText('name', $event)\" name=\"schema-property-name\" />\r\n </label>\r\n\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('A276C7C0-E297-41EC-88D8-80C151BCA646', 'Display name', 'Nome visualizzato') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().displayName\" (ngModelChange)=\"updateText('displayName', $event)\" name=\"schema-property-display-name\" />\r\n </label>\r\n\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('A1803D67-C40D-41AF-BFD2-8F9B0E34C48B', 'Property type', 'Tipo proprietà') }}</span>\r\n <select [ngModel]=\"draft().propertyType\" (ngModelChange)=\"updatePropertyType($event)\" name=\"schema-property-type\">\r\n @for (option of propertyTypeOptions; track option.value) {\r\n <option [ngValue]=\"option.value\" [disabled]=\"isPropertyTypeOptionDisabled(option.value)\">{{ option.label }}</option>\r\n }\r\n </select>\r\n </label>\r\n\r\n <label class=\"schema-property-dialog__field schema-property-dialog__field--toggle\">\r\n <span>{{ chill.T('749AB7D9-6F87-488B-90A7-EB2CB0D9BA52', 'Nullable', 'Nullabile') }}</span>\r\n <input type=\"checkbox\" [ngModel]=\"draft().isNullable\" (ngModelChange)=\"updateBoolean('isNullable', $event)\" name=\"schema-property-nullable\" />\r\n </label>\r\n\r\n <label class=\"schema-property-dialog__field schema-property-dialog__field--toggle\">\r\n <span>{{ chill.T('7C94BA39-3A2B-4D04-9551-E4E7FB698D5D', 'Read only', 'Sola lettura') }}</span>\r\n <input type=\"checkbox\" [ngModel]=\"draft().isReadOnly\" (ngModelChange)=\"updateBoolean('isReadOnly', $event)\" name=\"schema-property-readonly\" />\r\n </label>\r\n\r\n @if (showLengthSettings()) {\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('97CC1ABF-E541-4B39-91B3-1F907B3B73E4', 'Min length', 'Lunghezza minima') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().minLength\" (ngModelChange)=\"updateText('minLength', $event)\" name=\"schema-property-min-length\" />\r\n </label>\r\n\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('0D6433DA-7D03-469C-B175-872252D12B12', 'Max length', 'Lunghezza massima') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().maxLength\" (ngModelChange)=\"updateText('maxLength', $event)\" name=\"schema-property-max-length\" />\r\n </label>\r\n }\r\n\r\n @if (showRegexPattern()) {\r\n <label class=\"schema-property-dialog__field schema-property-dialog__field--full\">\r\n <span>{{ chill.T('375A5A93-8BDE-4731-91A4-CF0F2A6D52B5', 'Regex pattern', 'Pattern regex') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().regexPattern\" (ngModelChange)=\"updateText('regexPattern', $event)\" name=\"schema-property-regex-pattern\" />\r\n </label>\r\n }\r\n\r\n @if (showIntegerRange()) {\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('30BAA302-7E62-49B7-96F8-BE5A7E3A4D28', 'Integer min value', 'Valore intero minimo') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().integerMinValue\" (ngModelChange)=\"updateText('integerMinValue', $event)\" name=\"schema-property-integer-min\" />\r\n </label>\r\n\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('9DEFC702-E6D3-40D1-B8A8-B677A38AB707', 'Integer max value', 'Valore intero massimo') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().integerMaxValue\" (ngModelChange)=\"updateText('integerMaxValue', $event)\" name=\"schema-property-integer-max\" />\r\n </label>\r\n }\r\n\r\n @if (showDecimalSettings()) {\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('7D7A019B-B605-4B80-8AA2-BBEF519EAE72', 'Decimal min value', 'Valore decimale minimo') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().decimalMinValue\" (ngModelChange)=\"updateText('decimalMinValue', $event)\" name=\"schema-property-decimal-min\" />\r\n </label>\r\n\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('6B3A021A-4E64-48C5-9EF6-3043E414D83E', 'Decimal max value', 'Valore decimale massimo') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().decimalMaxValue\" (ngModelChange)=\"updateText('decimalMaxValue', $event)\" name=\"schema-property-decimal-max\" />\r\n </label>\r\n\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('8A948B20-50A2-4E3B-BF6A-DB13D9A4A4A5', 'Decimal places', 'Cifre decimali') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().decimalPlaces\" (ngModelChange)=\"updateText('decimalPlaces', $event)\" name=\"schema-property-decimal-places\" />\r\n </label>\r\n\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('B5F90B96-E2CF-4688-8CB1-1F22A4F6BCA0', 'Precision', 'Precisione') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().precision\" (ngModelChange)=\"updateText('precision', $event)\" name=\"schema-property-precision\" />\r\n </label>\r\n\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('65D01B52-5D8B-4540-8B76-5D155B8A50EA', 'Scale', 'Scala') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().scale\" (ngModelChange)=\"updateText('scale', $event)\" name=\"schema-property-scale\" />\r\n </label>\r\n }\r\n\r\n @if (showDateFormat()) {\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('9AB02B9F-6516-42D1-A8A8-9F5A977F31BB', 'Date format', 'Formato data') }}</span>\r\n <input type=\"text\" list=\"schema-property-date-format-options\" [ngModel]=\"draft().dateFormat\" (ngModelChange)=\"updateText('dateFormat', $event)\" name=\"schema-property-date-format\" />\r\n <datalist id=\"schema-property-date-format-options\">\r\n @for (option of dateFormatOptions; track option[0]) {\r\n <option [value]=\"option[0]\">{{ option[1] }}</option>\r\n }\r\n </datalist>\r\n </label>\r\n }\r\n\r\n @if (showCustomFormat()) {\r\n <label class=\"schema-property-dialog__field\">\r\n <span>{{ chill.T('D7A9229B-2EFC-417D-B8E0-88A6C1B38106', 'Custom format', 'Formato personalizzato') }}</span>\r\n <input type=\"text\" [ngModel]=\"draft().customFormat\" (ngModelChange)=\"updateText('customFormat', $event)\" name=\"schema-property-custom-format\" />\r\n </label>\r\n }\r\n\r\n @if (showEnumValues()) {\r\n <label class=\"schema-property-dialog__field schema-property-dialog__field--full\">\r\n <span>{{ chill.T('5C131694-1FE7-4B91-861E-C331E8636409', 'Enum values', 'Valori enum') }}</span>\r\n <textarea rows=\"6\" [ngModel]=\"draft().enumValues\" (ngModelChange)=\"updateText('enumValues', $event)\" name=\"schema-property-enum-values\" [placeholder]=\"enumValuesPlaceholder()\"></textarea>\r\n </label>\r\n }\r\n\r\n @if (showLookupQueryValues()) {\r\n <label class=\"schema-property-dialog__field schema-property-dialog__field--full\">\r\n <span>{{ chill.T('56c285f0-2ff0-4584-8f8e-ad1d0fb5fe34', 'Lookup query values', 'Valori query di lookup') }}</span>\r\n <textarea rows=\"6\" [ngModel]=\"draft().lookupQueryValues\" (ngModelChange)=\"updateText('lookupQueryValues', $event)\" name=\"schema-property-lookup-query-values\" [placeholder]=\"lookupQueryValuesPlaceholder()\"></textarea>\r\n </label>\r\n }\r\n </div>\r\n\r\n <div class=\"schema-property-dialog__metadata\">\r\n <div class=\"schema-property-dialog__metadata-header\">\r\n <h3>{{ chill.T('01D8D2BD-F9B7-49F8-90EC-E96CFAB15811', 'Metadata', 'Metadata') }}</h3>\r\n <p>{{ chill.T('ED433939-FE09-4B8D-92DB-67480D13F350', 'Dedicated fields override matching metadata keys when you save.', 'I campi dedicati sovrascrivono le chiavi metadata corrispondenti al salvataggio.') }}</p>\r\n </div>\r\n\r\n <app-chill-json-input\r\n [value]=\"draft().metadataJson\"\r\n [invalid]=\"metadataJsonInvalid()\"\r\n [placeholder]=\"metadataPlaceholder()\"\r\n (valueChange)=\"updateText('metadataJson', $event)\"></app-chill-json-input>\r\n </div>\r\n</section>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, input, signal } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport type { JsonObject, JsonValue } from '@chill-sharp/ng-client';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ChillService } from '../../services/chill.service';\r\nimport { WorkspaceDialogService } from '../../services/workspace-dialog.service';\r\n\r\ninterface AttachmentUploadFormValue {\r\n title: FormControl<string>;\r\n description: FormControl<string>;\r\n isPublic: FormControl<boolean>;\r\n}\r\n\r\n@Component({\r\n selector: 'app-attachment-upload-dialog',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <section class=\"attachment-upload-dialog\">\r\n <p class=\"attachment-upload-dialog__lede\">\r\n {{ chill.T(\r\n '47A55AC3-9013-4A7E-81C4-E549EFE248E8',\r\n 'Upload one attachment for the selected entity.',\r\n 'Carica un allegato per l entita selezionata.'\r\n ) }}\r\n </p>\r\n\r\n <p class=\"attachment-upload-dialog__target\">\r\n <strong>{{ attachToChillType() }}</strong>\r\n <span>{{ attachToGuid() }}</span>\r\n </p>\r\n\r\n <label class=\"attachment-upload-dialog__field\">\r\n <span>{{ chill.T('E9E11821-898B-449D-BF17-E7136CB737D9', 'File', 'File') }}</span>\r\n <input type=\"file\" (change)=\"onFileSelected($event)\" />\r\n </label>\r\n\r\n @if (selectedFileName()) {\r\n <p class=\"attachment-upload-dialog__file\">{{ selectedFileName() }}</p>\r\n }\r\n\r\n <form [formGroup]=\"form\" class=\"attachment-upload-dialog__form\">\r\n <label class=\"attachment-upload-dialog__field\">\r\n <span>{{ chill.T('92C31A96-D747-490D-8A4D-2175C181E80C', 'Title', 'Titolo') }}</span>\r\n <input type=\"text\" formControlName=\"title\" />\r\n </label>\r\n\r\n <label class=\"attachment-upload-dialog__field\">\r\n <span>{{ chill.T('D679D4D4-FB4E-474B-848C-5BBBE38A4F0C', 'Description', 'Descrizione') }}</span>\r\n <textarea rows=\"4\" formControlName=\"description\"></textarea>\r\n </label>\r\n\r\n <label class=\"attachment-upload-dialog__checkbox\">\r\n <input type=\"checkbox\" formControlName=\"isPublic\" />\r\n <span>{{ chill.T('BC4B1775-3937-4B56-9EF2-A4F1962A5AF7', 'Public', 'Pubblico') }}</span>\r\n </label>\r\n </form>\r\n </section>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n }\r\n\r\n .attachment-upload-dialog {\r\n display: grid;\r\n gap: 1rem;\r\n }\r\n\r\n .attachment-upload-dialog__lede,\r\n .attachment-upload-dialog__target,\r\n .attachment-upload-dialog__file {\r\n margin: 0;\r\n }\r\n\r\n .attachment-upload-dialog__lede,\r\n .attachment-upload-dialog__target span,\r\n .attachment-upload-dialog__file {\r\n color: var(--text-muted);\r\n }\r\n\r\n .attachment-upload-dialog__target {\r\n display: grid;\r\n gap: 0.25rem;\r\n }\r\n\r\n .attachment-upload-dialog__target strong {\r\n color: var(--text-main);\r\n }\r\n\r\n .attachment-upload-dialog__form {\r\n display: grid;\r\n gap: 1rem;\r\n }\r\n\r\n .attachment-upload-dialog__field {\r\n display: grid;\r\n gap: 0.45rem;\r\n }\r\n\r\n .attachment-upload-dialog__field input,\r\n .attachment-upload-dialog__field textarea {\r\n width: 100%;\r\n padding: 0.75rem 0.85rem;\r\n border: 1px solid var(--border-color);\r\n border-radius: 0.75rem;\r\n background: var(--surface-0);\r\n color: var(--text-main);\r\n font: inherit;\r\n }\r\n\r\n .attachment-upload-dialog__checkbox {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.6rem;\r\n }\r\n `\r\n})\r\nexport class AttachmentUploadDialogComponent {\r\n readonly chill = inject(ChillService);\r\n private readonly dialog = inject(WorkspaceDialogService);\r\n\r\n readonly attachToChillType = input('');\r\n readonly attachToGuid = input('');\r\n\r\n readonly form = new FormGroup<AttachmentUploadFormValue>({\r\n title: new FormControl('', { nonNullable: true }),\r\n description: new FormControl('', { nonNullable: true }),\r\n isPublic: new FormControl(false, { nonNullable: true })\r\n });\r\n\r\n readonly selectedFile = signal<File | null>(null);\r\n readonly selectedFileName = signal('');\r\n\r\n canDialogSubmit(): boolean {\r\n return !!this.selectedFile() && !!this.attachToChillType().trim() && !!this.attachToGuid().trim();\r\n }\r\n\r\n async submit(): Promise<void> {\r\n const file = this.selectedFile();\r\n const attachToChillType = this.attachToChillType().trim();\r\n const attachToGuid = this.attachToGuid().trim();\r\n if (!file || !attachToChillType || !attachToGuid) {\r\n return;\r\n }\r\n\r\n const uploaded = await firstValueFrom(this.chill.uploadAttachment(\r\n {\r\n chillType: attachToChillType,\r\n guid: attachToGuid\r\n } as JsonObject,\r\n {\r\n fileName: file.name,\r\n content: file,\r\n contentType: file.type || undefined\r\n },\r\n {\r\n title: this.form.controls.title.value.trim() || null,\r\n description: this.form.controls.description.value.trim() || null,\r\n isPublic: this.form.controls.isPublic.value\r\n }\r\n ));\r\n\r\n this.dialog.confirm(uploaded[0] ?? null);\r\n }\r\n\r\n onFileSelected(event: Event): void {\r\n const input = event.target as HTMLInputElement | null;\r\n const file = input?.files?.[0] ?? null;\r\n this.selectedFile.set(file);\r\n this.selectedFileName.set(file?.name ?? '');\r\n\r\n if (file && !this.form.controls.title.value.trim()) {\r\n const fileName = file.name.replace(/\\.[^.]+$/, '').trim();\r\n this.form.controls.title.setValue(fileName || file.name);\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, effect, inject, input, signal } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport type { JsonValue } from '@chill-sharp/ng-client';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ChillPolymorphicInputComponent } from '../../lib/chill-polymorphic-input.component';\r\nimport type { CreateAuthRoleRequest, UpdateAuthRoleRequest } from '../../models/chill-auth.models';\r\nimport { CHILL_PROPERTY_TYPE, type ChillPropertySchema, type ChillSchema } from '../../models/chill-schema.models';\r\nimport { WorkspaceDialogService } from '../../services/workspace-dialog.service';\r\nimport { ChillService } from '../../services/chill.service';\r\n\r\ntype AuthRoleFormGroup = FormGroup<Record<string, FormControl<JsonValue>>>;\r\n\r\n@Component({\r\n selector: 'app-auth-role-dialog',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, ChillPolymorphicInputComponent],\r\n template: `\r\n <section class=\"auth-entity-dialog\">\r\n <p class=\"auth-entity-dialog__lede\">\r\n {{ isEditMode()\r\n ? chill.T('65FB65D7-7D87-4661-9AD4-0FE7384983E7', 'Update role details and save the changes.', 'Aggiorna i dettagli ruolo e salva le modifiche.')\r\n : chill.T('C1264E7A-11D0-44E2-9026-2A1AA6F9AF82', 'Create a new role and use it immediately in permission assignments.', 'Crea un nuovo ruolo e usalo subito nelle assegnazioni dei permessi.') }}\r\n </p>\r\n\r\n @if (loadError()) {\r\n <p class=\"auth-entity-dialog__message auth-entity-dialog__message--error\">{{ loadError() }}</p>\r\n } @else if (isLoading()) {\r\n <p class=\"auth-entity-dialog__message\">\r\n {{ chill.T('39994747-E0B9-4404-BF92-CB98BA434832', 'Loading role details...', 'Caricamento dettagli ruolo...') }}\r\n </p>\r\n } @else {\r\n <app-chill-polymorphic-input\r\n [form]=\"form\"\r\n [schema]=\"schema()\"\r\n [showLabels]=\"true\"\r\n (validityChange)=\"isValid.set($event)\"></app-chill-polymorphic-input>\r\n }\r\n </section>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n }\r\n\r\n .auth-entity-dialog {\r\n display: grid;\r\n gap: 1rem;\r\n }\r\n\r\n .auth-entity-dialog__lede,\r\n .auth-entity-dialog__message {\r\n margin: 0;\r\n color: var(--text-muted);\r\n }\r\n\r\n .auth-entity-dialog__message--error {\r\n color: var(--danger);\r\n }\r\n `\r\n})\r\nexport class AuthRoleDialogComponent {\r\n readonly chill = inject(ChillService);\r\n private readonly dialog = inject(WorkspaceDialogService);\r\n\r\n readonly roleGuid = input('');\r\n\r\n readonly isLoading = signal(false);\r\n readonly isValid = signal(true);\r\n readonly loadError = signal('');\r\n readonly isEditMode = computed(() => !!this.roleGuid().trim());\r\n readonly schema = computed<ChillSchema>(() => ({\r\n chillType: 'Auth.Role',\r\n chillViewCode: 'dialog',\r\n displayName: this.isEditMode()\r\n ? this.chill.T('6E9A69C0-C4A1-433A-97BC-9E8D1CBD2B53', 'Edit', 'Modifica')\r\n : this.chill.T('0B47EAA4-33BC-4D1C-B8C6-F75D3A5C8864', 'Create role', 'Crea ruolo'),\r\n metadata: {},\r\n properties: this.properties\r\n }));\r\n\r\n readonly form: AuthRoleFormGroup = new FormGroup<Record<string, FormControl<JsonValue>>>({\r\n name: new FormControl<JsonValue>('', { nonNullable: true }),\r\n description: new FormControl<JsonValue>('', { nonNullable: true }),\r\n isActive: new FormControl<JsonValue>(true, { nonNullable: true })\r\n });\r\n\r\n private readonly properties: ChillPropertySchema[] = [\r\n {\r\n name: 'name',\r\n displayName: this.chill.T('7767C44A-8F47-4E39-BB2A-0B297887A0D3', 'Name', 'Nome'),\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: false,\r\n metadata: { required: 'true', maxLength: '255' }\r\n },\r\n {\r\n name: 'description',\r\n displayName: this.chill.T('97A7BFE7-22A7-4665-B0D8-C75506A8F794', 'Description', 'Descrizione'),\r\n propertyType: CHILL_PROPERTY_TYPE.Text,\r\n isNullable: true,\r\n metadata: { maxLength: '1000', multiline: 'true' }\r\n },\r\n {\r\n name: 'isActive',\r\n displayName: this.chill.T('7A2D49F9-9A14-4FD1-8A8B-9B604CA3796C', 'Role is active', 'Ruolo attivo'),\r\n propertyType: CHILL_PROPERTY_TYPE.Boolean,\r\n isNullable: false,\r\n metadata: {}\r\n }\r\n ];\r\n\r\n constructor() {\r\n effect(() => {\r\n const roleGuid = this.roleGuid().trim();\r\n this.loadError.set('');\r\n\r\n if (!roleGuid) {\r\n this.isLoading.set(false);\r\n this.populateForm({\r\n name: '',\r\n description: '',\r\n isActive: true\r\n });\r\n return;\r\n }\r\n\r\n this.isLoading.set(true);\r\n void this.loadRole(roleGuid);\r\n });\r\n }\r\n\r\n canDialogSubmit(): boolean {\r\n return !this.isLoading() && !this.loadError() && this.isValid();\r\n }\r\n\r\n async submit(): Promise<void> {\r\n if (!this.canDialogSubmit()) {\r\n return;\r\n }\r\n\r\n const roleGuid = this.roleGuid().trim();\r\n const payload = this.readPayload();\r\n const savedRole = roleGuid\r\n ? await firstValueFrom(this.chill.updateAuthRole(roleGuid, payload as UpdateAuthRoleRequest))\r\n : await firstValueFrom(this.chill.createAuthRole(payload));\r\n\r\n this.dialog.confirm(savedRole);\r\n }\r\n\r\n private async loadRole(roleGuid: string): Promise<void> {\r\n try {\r\n const role = await firstValueFrom(this.chill.getAuthRoleAccess(roleGuid));\r\n this.populateForm({\r\n name: role.role.name,\r\n description: role.role.description,\r\n isActive: role.role.isActive\r\n });\r\n } catch (error) {\r\n this.loadError.set(this.chill.formatError(error));\r\n } finally {\r\n this.isLoading.set(false);\r\n }\r\n }\r\n\r\n private populateForm(role: CreateAuthRoleRequest): void {\r\n this.form.controls['name'].setValue(role.name);\r\n this.form.controls['description'].setValue(role.description);\r\n this.form.controls['isActive'].setValue(role.isActive);\r\n }\r\n\r\n private readPayload(): CreateAuthRoleRequest {\r\n return {\r\n name: this.readString('name'),\r\n description: this.readString('description'),\r\n isActive: this.form.controls['isActive'].value === true\r\n };\r\n }\r\n\r\n private readString(controlName: string): string {\r\n const value = this.form.controls[controlName].value;\r\n return typeof value === 'string' ? value.trim() : '';\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, effect, inject, input, signal } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport type { JsonValue } from '@chill-sharp/ng-client';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { getCultureNameOptions } from '../../lib/culture-name-options';\r\nimport { getDateFormatOptions } from '../../lib/date-format-options';\r\nimport { getIanaTimeZoneOptions } from '../../lib/iana-time-zone-options';\r\nimport { ChillPolymorphicInputComponent } from '../../lib/chill-polymorphic-input.component';\r\nimport type { AuthUser, CreateAuthUserRequest, UpdateAuthUserRequest } from '../../models/chill-auth.models';\r\nimport { CHILL_PROPERTY_TYPE, type ChillMetadataRecord, type ChillPropertySchema, type ChillSchema } from '../../models/chill-schema.models';\r\nimport { WorkspaceDialogService } from '../../services/workspace-dialog.service';\r\nimport { ChillService } from '../../services/chill.service';\r\n\r\ntype AuthUserFormGroup = FormGroup<Record<string, FormControl<JsonValue>>>;\r\n\r\n@Component({\r\n selector: 'app-auth-user-dialog',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, ChillPolymorphicInputComponent],\r\n template: `\r\n <section class=\"auth-entity-dialog\">\r\n <p class=\"auth-entity-dialog__lede\">\r\n {{ isEditMode()\r\n ? chill.T('1D88DB28-33B4-4D07-97D0-3BD2D8DDF1D0', 'Update user details and save the changes.', 'Aggiorna i dettagli utente e salva le modifiche.')\r\n : chill.T('104D3BC3-A842-4929-BD05-EAAE482900AD', 'Create a new user and make it immediately available for permission editing.', 'Crea un nuovo utente e rendilo subito disponibile per la modifica dei permessi.') }}\r\n </p>\r\n\r\n @if (loadError()) {\r\n <p class=\"auth-entity-dialog__message auth-entity-dialog__message--error\">{{ loadError() }}</p>\r\n } @else if (isLoading()) {\r\n <p class=\"auth-entity-dialog__message\">\r\n {{ chill.T('B80FE0B4-3BB7-4A7E-B9EB-1A456E3A8F68', 'Loading user details...', 'Caricamento dettagli utente...') }}\r\n </p>\r\n } @else {\r\n <app-chill-polymorphic-input\r\n [form]=\"form\"\r\n [schema]=\"schema()\"\r\n [showLabels]=\"true\"\r\n (validityChange)=\"isValid.set($event)\"></app-chill-polymorphic-input>\r\n }\r\n </section>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n }\r\n\r\n .auth-entity-dialog {\r\n display: grid;\r\n gap: 1rem;\r\n }\r\n\r\n .auth-entity-dialog__lede,\r\n .auth-entity-dialog__message {\r\n margin: 0;\r\n color: var(--text-muted);\r\n }\r\n\r\n .auth-entity-dialog__message--error {\r\n color: var(--danger);\r\n }\r\n `\r\n})\r\nexport class AuthUserDialogComponent {\r\n readonly chill = inject(ChillService);\r\n private readonly dialog = inject(WorkspaceDialogService);\r\n\r\n readonly userGuid = input('');\r\n\r\n readonly isLoading = signal(false);\r\n readonly isValid = signal(true);\r\n readonly loadError = signal('');\r\n readonly isEditMode = computed(() => !!this.userGuid().trim());\r\n readonly schema = computed<ChillSchema>(() => ({\r\n chillType: 'Auth.User',\r\n chillViewCode: 'dialog',\r\n displayName: this.isEditMode()\r\n ? this.chill.T('C082531D-0F50-49D4-B677-C752D1A4DAA4', 'Edit user', 'Modifica utente')\r\n : this.chill.T('9E2BFF8D-BF6C-4C8D-BE6A-972425BA63DB', 'New user', 'Nuovo utente'),\r\n metadata: {},\r\n properties: this.properties\r\n }));\r\n\r\n readonly form: AuthUserFormGroup = new FormGroup<Record<string, FormControl<JsonValue>>>({\r\n externalId: new FormControl<JsonValue>('', { nonNullable: true }),\r\n userName: new FormControl<JsonValue>('', { nonNullable: true }),\r\n displayName: new FormControl<JsonValue>('', { nonNullable: true }),\r\n displayCultureName: new FormControl<JsonValue>('', { nonNullable: true }),\r\n displayTimeZone: new FormControl<JsonValue>('', { nonNullable: true }),\r\n displayDateFormat: new FormControl<JsonValue>('', { nonNullable: true }),\r\n displayNumberFormat: new FormControl<JsonValue>('', { nonNullable: true }),\r\n isActive: new FormControl<JsonValue>(true, { nonNullable: true }),\r\n canManagePermissions: new FormControl<JsonValue>(false, { nonNullable: true }),\r\n canManageSchema: new FormControl<JsonValue>(false, { nonNullable: true }),\r\n menuHierarchy: new FormControl<JsonValue>('', { nonNullable: true })\r\n });\r\n private readonly cultureNameOptions = getCultureNameOptions();\r\n private readonly dateFormatOptions = getDateFormatOptions();\r\n private readonly timeZoneOptions = getIanaTimeZoneOptions();\r\n\r\n private readonly properties: ChillPropertySchema[] = [\r\n {\r\n name: 'userName',\r\n displayName: this.chill.T('2AF5EB08-932E-4D4D-9338-75E1808B5F16', 'Username', 'Nome utente'),\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: false,\r\n metadata: { required: 'true', maxLength: '255' }\r\n },\r\n {\r\n name: 'displayName',\r\n displayName: this.chill.T('C0D8A063-E084-460D-BF83-BCE32CB68588', 'Display name', 'Nome visualizzato'),\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: false,\r\n metadata: { required: 'true', maxLength: '255' }\r\n },\r\n {\r\n name: 'externalId',\r\n displayName: this.chill.T('12FB2D99-C4BF-4F0A-9FD5-9C10AFB5B38A', 'External id', 'Id esterno'),\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: true,\r\n metadata: { maxLength: '255' }\r\n },\r\n {\r\n name: 'displayCultureName',\r\n displayName: this.chill.T('771A6B48-7330-4852-A6B5-5BD314EC5662', 'Culture', 'Cultura'),\r\n propertyType: CHILL_PROPERTY_TYPE.Select,\r\n isNullable: false,\r\n metadata: {\r\n required: 'true',\r\n options: this.cultureNameOptions\r\n } as ChillMetadataRecord\r\n },\r\n {\r\n name: 'displayTimeZone',\r\n displayName: this.chill.T('98E424F1-0183-4D9E-9B69-CDB16EBD41CF', 'Time zone', 'Fuso orario'),\r\n propertyType: CHILL_PROPERTY_TYPE.Select,\r\n isNullable: false,\r\n metadata: {\r\n required: 'true',\r\n options: this.timeZoneOptions\r\n } as ChillMetadataRecord\r\n },\r\n {\r\n name: 'displayDateFormat',\r\n displayName: this.chill.T('49988673-8DBD-4C2B-9430-DA3054F0E294', 'Date format', 'Formato data'),\r\n propertyType: CHILL_PROPERTY_TYPE.Select,\r\n isNullable: false,\r\n metadata: {\r\n required: 'true',\r\n options: this.dateFormatOptions\r\n } as ChillMetadataRecord\r\n },\r\n {\r\n name: 'displayNumberFormat',\r\n displayName: this.chill.T('22A3BF58-7889-4AD7-A9EF-06B6A69A8D3C', 'Number format', 'Formato numerico'),\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: false,\r\n metadata: { required: 'true', maxLength: '64' }\r\n },\r\n {\r\n name: 'menuHierarchy',\r\n displayName: this.chill.T('D133779C-B96F-4DB8-9F4B-7FE8874228C9', 'Menu hierarchy', 'Gerarchia menu'),\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: true,\r\n metadata: { maxLength: '255' }\r\n },\r\n {\r\n name: 'isActive',\r\n displayName: this.chill.T('8159D7BE-FBAA-44EB-9B41-A72B5F38F34C', 'User is active', 'Utente attivo'),\r\n propertyType: CHILL_PROPERTY_TYPE.Boolean,\r\n isNullable: false,\r\n metadata: {}\r\n },\r\n {\r\n name: 'canManagePermissions',\r\n displayName: this.chill.T('3E834972-E367-492B-9C2E-14CFEDB3607E', 'Can manage permissions', 'Può gestire i permessi'),\r\n propertyType: CHILL_PROPERTY_TYPE.Boolean,\r\n isNullable: false,\r\n metadata: {}\r\n },\r\n {\r\n name: 'canManageSchema',\r\n displayName: this.chill.T('5BCDD500-C65B-45D7-8B5A-EC0D9B8B82DE', 'Can manage schema', 'Può gestire lo schema'),\r\n propertyType: CHILL_PROPERTY_TYPE.Boolean,\r\n isNullable: false,\r\n metadata: {}\r\n }\r\n ];\r\n\r\n constructor() {\r\n effect(() => {\r\n const userGuid = this.userGuid().trim();\r\n this.loadError.set('');\r\n\r\n if (!userGuid) {\r\n this.isLoading.set(false);\r\n this.populateForm(null);\r\n return;\r\n }\r\n\r\n this.isLoading.set(true);\r\n void this.loadUser(userGuid);\r\n });\r\n }\r\n\r\n canDialogSubmit(): boolean {\r\n return !this.isLoading() && !this.loadError() && this.isValid();\r\n }\r\n\r\n async submit(): Promise<void> {\r\n if (!this.canDialogSubmit()) {\r\n return;\r\n }\r\n\r\n const userGuid = this.userGuid().trim();\r\n const payload = this.readPayload();\r\n const savedUser = userGuid\r\n ? await firstValueFrom(this.chill.updateAuthUser(userGuid, payload as UpdateAuthUserRequest))\r\n : await firstValueFrom(this.chill.createAuthUser(payload));\r\n\r\n this.dialog.confirm(savedUser);\r\n }\r\n\r\n private async loadUser(userGuid: string): Promise<void> {\r\n try {\r\n const user = await firstValueFrom(this.chill.getAuthUserDetails(userGuid));\r\n this.populateForm(user);\r\n } catch (error) {\r\n this.loadError.set(this.chill.formatError(error));\r\n } finally {\r\n this.isLoading.set(false);\r\n }\r\n }\r\n\r\n private populateForm(user: AuthUser | null): void {\r\n this.form.controls['externalId'].setValue(user?.externalId ?? '');\r\n this.form.controls['userName'].setValue(user?.userName ?? '');\r\n this.form.controls['displayName'].setValue(user?.displayName ?? '');\r\n this.form.controls['displayCultureName'].setValue(user?.displayCultureName ?? this.readBrowserCultureName());\r\n this.form.controls['displayTimeZone'].setValue(user?.displayTimeZone ?? this.readBrowserTimeZone());\r\n this.form.controls['displayDateFormat'].setValue(user?.displayDateFormat ?? 'dd/MM/yyyy');\r\n this.form.controls['displayNumberFormat'].setValue(user?.displayNumberFormat ?? 'it-IT');\r\n this.form.controls['isActive'].setValue(user?.isActive ?? true);\r\n this.form.controls['canManagePermissions'].setValue(user?.canManagePermissions ?? false);\r\n this.form.controls['canManageSchema'].setValue(user?.canManageSchema ?? false);\r\n this.form.controls['menuHierarchy'].setValue(user?.menuHierarchy ?? '');\r\n }\r\n\r\n private readPayload(): CreateAuthUserRequest {\r\n return {\r\n externalId: this.readString('externalId'),\r\n userName: this.readString('userName'),\r\n displayName: this.readString('displayName'),\r\n displayCultureName: this.readString('displayCultureName'),\r\n displayTimeZone: this.readString('displayTimeZone'),\r\n displayDateFormat: this.readString('displayDateFormat'),\r\n displayNumberFormat: this.readString('displayNumberFormat'),\r\n isActive: this.readBoolean('isActive'),\r\n canManagePermissions: this.readBoolean('canManagePermissions'),\r\n canManageSchema: this.readBoolean('canManageSchema'),\r\n menuHierarchy: this.readString('menuHierarchy')\r\n };\r\n }\r\n\r\n private readString(controlName: string): string {\r\n const value = this.form.controls[controlName].value;\r\n return typeof value === 'string' ? value.trim() : '';\r\n }\r\n\r\n private readBoolean(controlName: string): boolean {\r\n return this.form.controls[controlName].value === true;\r\n }\r\n\r\n private readBrowserCultureName(): string {\r\n const languages = globalThis.navigator?.languages;\r\n const browserCultureName = languages?.find((language) => typeof language === 'string' && language.trim())\r\n ?? globalThis.navigator?.language\r\n ?? '';\r\n return browserCultureName.trim() || 'it-IT';\r\n }\r\n\r\n private readBrowserTimeZone(): string {\r\n return Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, input } from '@angular/core';\r\nimport { WorkspaceDialogService } from '../services/workspace-dialog.service';\r\n\r\nexport interface ConfirmMessageDialogButton<TResult = unknown> {\r\n label: string;\r\n value: TResult;\r\n primary?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-confirm-message-dialog',\r\n standalone: true,\r\n imports: [CommonModule],\r\n template: `\r\n <section class=\"confirm-message-dialog\">\r\n @if (description()) {\r\n <p class=\"confirm-message-dialog__description\">{{ description() }}</p>\r\n }\r\n\r\n <div class=\"confirm-message-dialog__actions\">\r\n @for (button of buttons(); track $index) {\r\n <button\r\n type=\"button\"\r\n class=\"confirm-message-dialog__button\"\r\n [class.primary]=\"button.primary === true\"\r\n [class.secondary]=\"button.primary !== true\"\r\n (click)=\"select(button.value)\">\r\n {{ button.label }}\r\n </button>\r\n }\r\n </div>\r\n </section>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n }\r\n\r\n .confirm-message-dialog {\r\n display: grid;\r\n gap: 1rem;\r\n }\r\n\r\n .confirm-message-dialog__description {\r\n margin: 0;\r\n color: var(--text-main);\r\n line-height: 1.5;\r\n overflow-wrap: anywhere;\r\n word-break: break-word;\r\n }\r\n\r\n .confirm-message-dialog__actions {\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: flex-end;\r\n gap: 0.75rem;\r\n }\r\n\r\n .confirm-message-dialog__button {\r\n min-height: 2.9rem;\r\n padding: 0.75rem 1.1rem;\r\n border-radius: 0.8rem;\r\n border: 1px solid var(--border-color);\r\n cursor: pointer;\r\n font: inherit;\r\n font-weight: 700;\r\n }\r\n\r\n .confirm-message-dialog__button.secondary {\r\n background: var(--surface-0);\r\n color: var(--text-main);\r\n }\r\n\r\n .confirm-message-dialog__button.primary {\r\n border-color: transparent;\r\n background: linear-gradient(135deg, var(--accent), var(--accent-strong));\r\n color: var(--surface-0);\r\n }\r\n\r\n @media (max-width: 720px) {\r\n .confirm-message-dialog__actions {\r\n display: grid;\r\n }\r\n }\r\n `\r\n})\r\nexport class ConfirmMessageDialogComponent {\r\n readonly dialog = inject(WorkspaceDialogService);\r\n readonly description = input('');\r\n readonly buttons = input<ConfirmMessageDialogButton[]>([]);\r\n\r\n select(value: unknown): void {\r\n this.dialog.confirm(value);\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, effect, inject, input, signal } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport type { JsonValue } from '@chill-sharp/ng-client';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ChillPolymorphicInputComponent } from '../lib/chill-polymorphic-input.component';\r\nimport { CHILL_PROPERTY_TYPE, type ChillEntityOptions, type ChillMetadataRecord, type ChillPropertySchema, type ChillSchema } from '../models/chill-schema.models';\r\nimport { WorkspaceDialogService } from '../services/workspace-dialog.service';\r\nimport { ChillService } from '../services/chill.service';\r\n\r\ntype EntityOptionsFormGroup = FormGroup<Record<string, FormControl<JsonValue>>>;\r\n\r\n@Component({\r\n selector: 'app-entity-options-dialog',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, ChillPolymorphicInputComponent],\r\n template: `\r\n <section class=\"entity-options-dialog\">\r\n <p class=\"entity-options-dialog__lede\">\r\n {{ chill.T(\r\n 'A63A8D6A-85B4-48A3-822D-AF4F6C67D5AA',\r\n 'Update the behavior and label formatting used by the selected type.',\r\n 'Aggiorna il comportamento e la formattazione delle etichette usata dal tipo selezionato.'\r\n ) }}\r\n </p>\r\n\r\n <p class=\"entity-options-dialog__type\">\r\n {{ chill.T('E17E30B7-A5A7-4A29-AE1F-9AC4F7F752AB', 'Configured type', 'Tipo configurato') }}:\r\n <strong>{{ chillType() }}</strong>\r\n </p>\r\n\r\n @if (loadError()) {\r\n <p class=\"entity-options-dialog__message entity-options-dialog__message--error\">{{ loadError() }}</p>\r\n } @else if (isLoading()) {\r\n <p class=\"entity-options-dialog__message\">\r\n {{ chill.T('F60D8E5F-A52A-44C1-A6D5-7B59AF04B3D5', 'Loading entity options...', 'Caricamento opzioni entita...') }}\r\n </p>\r\n } @else {\r\n <app-chill-polymorphic-input\r\n [form]=\"form\"\r\n [schema]=\"schema()\"\r\n [showLabels]=\"true\"\r\n (validityChange)=\"isValid.set($event)\"></app-chill-polymorphic-input>\r\n }\r\n </section>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n }\r\n\r\n .entity-options-dialog {\r\n display: grid;\r\n gap: 1rem;\r\n }\r\n\r\n .entity-options-dialog__lede,\r\n .entity-options-dialog__type,\r\n .entity-options-dialog__message {\r\n margin: 0;\r\n color: var(--text-muted);\r\n }\r\n\r\n .entity-options-dialog__type strong {\r\n color: var(--text-main);\r\n }\r\n\r\n .entity-options-dialog__message--error {\r\n color: var(--danger);\r\n }\r\n `\r\n})\r\nexport class EntityOptionsDialogComponent {\r\n readonly chill = inject(ChillService);\r\n private readonly dialog = inject(WorkspaceDialogService);\r\n\r\n readonly chillType = input('');\r\n readonly displayName = input('');\r\n\r\n readonly isLoading = signal(true);\r\n readonly isValid = signal(true);\r\n readonly loadError = signal('');\r\n readonly entityOptions = signal<ChillEntityOptions | null>(null);\r\n readonly schema = computed<ChillSchema>(() => ({\r\n chillType: this.chillType().trim() || 'Entity.Options',\r\n chillViewCode: 'dialog',\r\n displayName: this.displayName().trim() || this.chill.T('F03D0E56-1B98-40C3-80E0-33054E81A020', 'Entity options', 'Opzioni entita'),\r\n metadata: {},\r\n properties: this.properties\r\n }));\r\n\r\n readonly form: EntityOptionsFormGroup = new FormGroup<Record<string, FormControl<JsonValue>>>({\r\n checksumEnabled: new FormControl<JsonValue>(false, { nonNullable: true }),\r\n handleAttachments: new FormControl<JsonValue>(false, { nonNullable: true }),\r\n labelFormatString: new FormControl<JsonValue>('', { nonNullable: true }),\r\n shortLabelFormatString: new FormControl<JsonValue>('', { nonNullable: true }),\r\n fullTextContentFormatString: new FormControl<JsonValue>('', { nonNullable: true }),\r\n changeLogEnabled: new FormControl<JsonValue>(false, { nonNullable: true }),\r\n enableMCP: new FormControl<JsonValue>(false, { nonNullable: true }),\r\n mcpDescription: new FormControl<JsonValue>('', { nonNullable: true })\r\n });\r\n\r\n private readonly properties: ChillPropertySchema[] = [\r\n {\r\n name: 'checksumEnabled',\r\n displayName: this.chill.T('A479967A-677D-4F6E-A979-4597AE47FA97', 'Checksum enabled', 'Checksum abilitato'),\r\n propertyType: CHILL_PROPERTY_TYPE.Boolean,\r\n isNullable: false,\r\n metadata: {} as ChillMetadataRecord\r\n },\r\n {\r\n name: 'handleAttachments',\r\n displayName: this.chill.T('64A3253C-1767-4384-A27A-D2A13FDC1634', 'Handle attachments', 'Gestisci allegati'),\r\n propertyType: CHILL_PROPERTY_TYPE.Boolean,\r\n isNullable: false,\r\n metadata: {} as ChillMetadataRecord\r\n },\r\n {\r\n name: 'labelFormatString',\r\n displayName: this.chill.T('DA742D97-35D6-4F9F-9E58-3D476C9DA5A4', 'Label format string', 'Formato etichetta'),\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: true,\r\n metadata: { maxLength: '4000' } as ChillMetadataRecord\r\n },\r\n {\r\n name: 'shortLabelFormatString',\r\n displayName: this.chill.T('7FCB4208-0CD6-450F-9028-D5A1CC185610', 'Short label format string', 'Formato etichetta breve'),\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: true,\r\n metadata: { maxLength: '4000' } as ChillMetadataRecord\r\n },\r\n {\r\n name: 'fullTextContentFormatString',\r\n displayName: this.chill.T('B79CA08C-3E94-45FC-B2B2-9A6B2E630B01', 'Full text content format string', 'Formato contenuto full text'),\r\n propertyType: CHILL_PROPERTY_TYPE.Text,\r\n isNullable: true,\r\n metadata: { maxLength: '4000' } as ChillMetadataRecord\r\n },\r\n {\r\n name: 'changeLogEnabled',\r\n displayName: this.chill.T('CC8E9A2C-4A5B-48B3-9FA8-489F73F149E5', 'Change log enabled', 'Change log abilitato'),\r\n propertyType: CHILL_PROPERTY_TYPE.Boolean,\r\n isNullable: false,\r\n metadata: {} as ChillMetadataRecord\r\n },\r\n {\r\n name: 'enableMCP',\r\n displayName: this.chill.T('08469F6C-2B99-4BE9-8191-C3D085FF55C3', 'MCP enabled', 'MCP abilitato'),\r\n propertyType: CHILL_PROPERTY_TYPE.Boolean,\r\n isNullable: false,\r\n metadata: {} as ChillMetadataRecord\r\n },\r\n {\r\n name: 'mcpDescription',\r\n displayName: this.chill.T('5265F0B1-B0BE-448E-88CB-80C99BF6AB92', 'MCP description', 'Descrizione MCP'),\r\n propertyType: CHILL_PROPERTY_TYPE.Text,\r\n isNullable: true,\r\n metadata: { maxLength: '4000' } as ChillMetadataRecord\r\n }\r\n ];\r\n\r\n constructor() {\r\n effect(() => {\r\n const chillType = this.chillType().trim();\r\n if (!chillType) {\r\n this.isLoading.set(false);\r\n this.loadError.set(this.chill.T(\r\n '0F90C3B9-A9B7-4FFB-9465-D07D66737AA4',\r\n 'The selected entity type is unavailable.',\r\n 'Il tipo entita selezionato non e disponibile.'\r\n ));\r\n return;\r\n }\r\n\r\n this.isLoading.set(true);\r\n this.loadError.set('');\r\n void this.loadEntityOptions(chillType);\r\n });\r\n }\r\n\r\n canDialogSubmit(): boolean {\r\n return !this.isLoading() && !this.loadError() && this.isValid();\r\n }\r\n\r\n async submit(): Promise<void> {\r\n const currentOptions = this.entityOptions();\r\n const chillType = this.chillType().trim();\r\n if (!currentOptions || !chillType || !this.canDialogSubmit()) {\r\n return;\r\n }\r\n\r\n const payload: ChillEntityOptions = {\r\n chillType,\r\n checksumEnabled: this.readBoolean('checksumEnabled'),\r\n handleAttachments: this.readBoolean('handleAttachments'),\r\n labelFormatString: this.readOptionalString('labelFormatString'),\r\n shortLabelFormatString: this.readOptionalString('shortLabelFormatString'),\r\n fullTextContentFormatString: this.readOptionalString('fullTextContentFormatString'),\r\n changeLogEnabled: this.readBoolean('changeLogEnabled'),\r\n enableMCP: this.readBoolean('enableMCP'),\r\n mcpDescription: this.readOptionalString('mcpDescription')\r\n };\r\n\r\n const savedOptions = await firstValueFrom(this.chill.setEntityOptions(payload));\r\n this.entityOptions.set(savedOptions);\r\n this.dialog.confirm(savedOptions);\r\n }\r\n\r\n private async loadEntityOptions(chillType: string): Promise<void> {\r\n try {\r\n const entityOptions = await firstValueFrom(this.chill.getEntityOptions(chillType));\r\n this.entityOptions.set(entityOptions);\r\n this.form.controls['checksumEnabled'].setValue(entityOptions.checksumEnabled);\r\n this.form.controls['handleAttachments'].setValue(entityOptions.handleAttachments);\r\n this.form.controls['labelFormatString'].setValue(entityOptions.labelFormatString ?? '');\r\n this.form.controls['shortLabelFormatString'].setValue(entityOptions.shortLabelFormatString ?? '');\r\n this.form.controls['fullTextContentFormatString'].setValue(entityOptions.fullTextContentFormatString ?? '');\r\n this.form.controls['changeLogEnabled'].setValue(entityOptions.changeLogEnabled);\r\n this.form.controls['enableMCP'].setValue(entityOptions.enableMCP);\r\n this.form.controls['mcpDescription'].setValue(entityOptions.mcpDescription ?? '');\r\n } catch (error) {\r\n this.entityOptions.set(null);\r\n this.loadError.set(this.chill.formatError(error));\r\n } finally {\r\n this.isLoading.set(false);\r\n }\r\n }\r\n\r\n private readOptionalString(controlName: string): string | null {\r\n const value = this.form.controls[controlName].value;\r\n return typeof value === 'string' && value.trim() ? value.trim() : null;\r\n }\r\n\r\n private readBoolean(controlName: string): boolean {\r\n return this.form.controls[controlName].value === true;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, effect, inject, input, signal } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport type { AuthUserDetailsResponse, JsonValue } from '@chill-sharp/ng-client';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { getCultureNameOptions } from '../lib/culture-name-options';\r\nimport { getDateFormatOptions } from '../lib/date-format-options';\r\nimport { getIanaTimeZoneOptions } from '../lib/iana-time-zone-options';\r\nimport { ChillPolymorphicInputComponent } from '../lib/chill-polymorphic-input.component';\r\nimport { CHILL_PROPERTY_TYPE, type ChillMetadataRecord, type ChillPropertySchema, type ChillSchema } from '../models/chill-schema.models';\r\nimport type { UpdateUserProfileRequest } from '../models/chill-auth.models';\r\nimport { WorkspaceDialogService } from '../services/workspace-dialog.service';\r\nimport { ChillService } from '../services/chill.service';\r\n\r\ntype UserProfileFormGroup = FormGroup<Record<string, FormControl<JsonValue>>>;\r\n\r\n@Component({\r\n selector: 'app-user-profile-dialog',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, ChillPolymorphicInputComponent],\r\n template: `\r\n <section class=\"user-profile-dialog\">\r\n <p class=\"user-profile-dialog__lede\">\r\n {{ chill.T(\r\n '90F2A89E-7E41-449B-B8DA-934ECA76E4B8',\r\n 'Update your personal preferences and save them to your account.',\r\n 'Aggiorna le tue preferenze personali e salvale nel tuo account.'\r\n ) }}\r\n </p>\r\n\r\n @if (loadError()) {\r\n <p class=\"user-profile-dialog__message user-profile-dialog__message--error\">{{ loadError() }}</p>\r\n } @else if (isLoading()) {\r\n <p class=\"user-profile-dialog__message\">\r\n {{ chill.T('B58564E5-6F58-4068-812F-B1A9344E474F', 'Loading user profile...', 'Caricamento profilo utente...') }}\r\n </p>\r\n } @else {\r\n <app-chill-polymorphic-input\r\n [form]=\"form\"\r\n [schema]=\"schema()\"\r\n [showLabels]=\"true\"\r\n (validityChange)=\"isValid.set($event)\"></app-chill-polymorphic-input>\r\n }\r\n </section>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n }\r\n\r\n .user-profile-dialog {\r\n display: grid;\r\n gap: 1rem;\r\n }\r\n\r\n .user-profile-dialog__lede,\r\n .user-profile-dialog__message {\r\n margin: 0;\r\n color: var(--text-muted);\r\n }\r\n\r\n .user-profile-dialog__message--error {\r\n color: var(--danger);\r\n }\r\n `\r\n})\r\nexport class UserProfileDialogComponent {\r\n readonly chill = inject(ChillService);\r\n private readonly dialog = inject(WorkspaceDialogService);\r\n\r\n readonly userGuid = input('');\r\n\r\n readonly isLoading = signal(true);\r\n readonly isValid = signal(true);\r\n readonly loadError = signal('');\r\n readonly user = signal<AuthUserDetailsResponse | null>(null);\r\n readonly schema = computed<ChillSchema>(() => ({\r\n chillType: 'Auth.User',\r\n chillViewCode: 'dialog',\r\n displayName: this.chill.T('EF63959A-FF5D-4AC5-8AE5-BEB27B2FAE90', 'User profile', 'Profilo utente'),\r\n metadata: {},\r\n properties: this.properties\r\n }));\r\n\r\n readonly form: UserProfileFormGroup = new FormGroup<Record<string, FormControl<JsonValue>>>({\r\n displayName: new FormControl<JsonValue>('', { nonNullable: true }),\r\n displayCultureName: new FormControl<JsonValue>('', { nonNullable: true }),\r\n displayTimeZone: new FormControl<JsonValue>('', { nonNullable: true }),\r\n displayDateFormat: new FormControl<JsonValue>('', { nonNullable: true }),\r\n displayNumberFormat: new FormControl<JsonValue>('', { nonNullable: true })\r\n });\r\n private readonly cultureNameOptions = getCultureNameOptions();\r\n private readonly dateFormatOptions = getDateFormatOptions();\r\n private readonly timeZoneOptions = getIanaTimeZoneOptions();\r\n\r\n private readonly properties: ChillPropertySchema[] = [\r\n {\r\n name: 'displayName',\r\n displayName: this.chill.T('4971B652-5F24-4D38-9D9B-6D9BCE10BCB0', 'Display name', 'Nome visualizzato'),\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: false,\r\n metadata: { required: 'true', maxLength: '255' }\r\n },\r\n {\r\n name: 'displayCultureName',\r\n displayName: this.chill.T('771A6B48-7330-4852-A6B5-5BD314EC5662', 'Culture', 'Cultura'),\r\n propertyType: CHILL_PROPERTY_TYPE.Select,\r\n isNullable: false,\r\n metadata: {\r\n required: 'true',\r\n options: this.cultureNameOptions\r\n } as ChillMetadataRecord\r\n },\r\n {\r\n name: 'displayTimeZone',\r\n displayName: this.chill.T('98E424F1-0183-4D9E-9B69-CDB16EBD41CF', 'Time zone', 'Fuso orario'),\r\n propertyType: CHILL_PROPERTY_TYPE.Select,\r\n isNullable: false,\r\n metadata: {\r\n required: 'true',\r\n options: this.timeZoneOptions\r\n } as ChillMetadataRecord\r\n },\r\n {\r\n name: 'displayDateFormat',\r\n displayName: this.chill.T('49988673-8DBD-4C2B-9430-DA3054F0E294', 'Date format', 'Formato data'),\r\n propertyType: CHILL_PROPERTY_TYPE.Select,\r\n isNullable: false,\r\n metadata: {\r\n required: 'true',\r\n options: this.dateFormatOptions\r\n } as ChillMetadataRecord\r\n },\r\n {\r\n name: 'displayNumberFormat',\r\n displayName: this.chill.T('22A3BF58-7889-4AD7-A9EF-06B6A69A8D3C', 'Number format', 'Formato numerico'),\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: false,\r\n metadata: { required: 'true', maxLength: '64' }\r\n }\r\n ];\r\n\r\n constructor() {\r\n effect(() => {\r\n const userGuid = this.userGuid().trim();\r\n if (!userGuid) {\r\n this.isLoading.set(false);\r\n this.loadError.set(this.chill.T(\r\n 'A7EC70B4-4788-4850-A135-8743E2D9D86B',\r\n 'The current user identifier is unavailable.',\r\n 'L identificatore dell utente corrente non e disponibile.'\r\n ));\r\n return;\r\n }\r\n\r\n this.isLoading.set(true);\r\n this.loadError.set('');\r\n\r\n void this.loadUser(userGuid);\r\n });\r\n }\r\n\r\n canDialogSubmit(): boolean {\r\n return !this.isLoading() && !this.loadError() && this.isValid();\r\n }\r\n\r\n async submit(): Promise<void> {\r\n const userGuid = this.userGuid().trim();\r\n const currentUser = this.user();\r\n if (!userGuid || !currentUser || !this.canDialogSubmit()) {\r\n return;\r\n }\r\n\r\n const request: UpdateUserProfileRequest = {\r\n displayName: this.readString('displayName'),\r\n displayCultureName: this.readString('displayCultureName'),\r\n displayTimeZone: this.readString('displayTimeZone'),\r\n displayDateFormat: this.readString('displayDateFormat'),\r\n displayNumberFormat: this.readString('displayNumberFormat')\r\n };\r\n\r\n await firstValueFrom(this.chill.updateUserProfile(userGuid, request));\r\n this.dialog.confirm(request);\r\n }\r\n\r\n private async loadUser(userGuid: string): Promise<void> {\r\n try {\r\n const user = await firstValueFrom(this.chill.getAuthUserDetails(userGuid));\r\n this.user.set(user);\r\n this.form.controls['displayName'].setValue(user.displayName ?? '');\r\n this.form.controls['displayCultureName'].setValue(user.displayCultureName ?? '');\r\n this.form.controls['displayTimeZone'].setValue(user.displayTimeZone ?? '');\r\n this.form.controls['displayDateFormat'].setValue(user.displayDateFormat ?? '');\r\n this.form.controls['displayNumberFormat'].setValue(user.displayNumberFormat ?? '');\r\n } catch (error) {\r\n this.user.set(null);\r\n this.loadError.set(this.chill.formatError(error));\r\n } finally {\r\n this.isLoading.set(false);\r\n }\r\n }\r\n\r\n private readString(controlName: string): string {\r\n const value = this.form.controls[controlName].value;\r\n return typeof value === 'string' ? value.trim() : '';\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, OnDestroy, computed, effect, inject, input, signal } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport type { JsonValue } from '@chill-sharp/ng-client';\r\nimport { Subscription, firstValueFrom } from 'rxjs';\r\nimport { ChillPolymorphicInputComponent } from '../lib/chill-polymorphic-input.component';\r\nimport {\r\n CHILL_PROPERTY_TYPE,\r\n type ChillMetadataRecord,\r\n type ChillPropertySchema,\r\n type ChillSchema,\r\n type ChillSchemaRelation,\r\n type ChillSchemaRelationLabel\r\n} from '../models/chill-schema.models';\r\nimport type { ChillMenuItem } from '../models/chill-menu.models';\r\nimport { ChillService } from '../services/chill.service';\r\nimport { WorkspaceService } from '../services/workspace.service';\r\nimport type { WorkspaceTaskComponent } from '../models/workspace-task.models';\r\nimport { WorkspaceToolbarService } from '../services/workspace-toolbar.service';\r\n\r\ntype MenuFormGroup = FormGroup<Record<string, FormControl<JsonValue>>>;\r\n\r\ninterface MenuItemDialogResult {\r\n value: ChillMenuItem;\r\n}\r\n\r\nconst CRUD_CONFIGURATION_KEYS = new Set([\r\n 'chillType',\r\n 'chillQuery',\r\n 'viewCode',\r\n 'disableAdd',\r\n 'disableCreate',\r\n 'disableEdit',\r\n 'disableInlineEdit',\r\n 'disableDelete',\r\n 'relationLabel',\r\n 'defaultValues',\r\n 'fixedValues',\r\n 'fixedQueryValues',\r\n 'defaultQueryValues',\r\n 'relations'\r\n]);\r\n\r\n@Component({\r\n selector: 'app-workspace-menu-item-dialog',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, ChillPolymorphicInputComponent],\r\n template: `\r\n <section class=\"menu-item-dialog\">\r\n <p class=\"menu-item-dialog__lede\">\r\n {{ parentTitle()\r\n ? chill.T('E603B25F-2943-4FE0-A4B0-11A0D8884D38', 'Configure the selected child menu item.', 'Configura la voce di menu figlia selezionata.')\r\n : chill.T('E7E1166A-D146-49C6-BE63-8C514B2D6097', 'Configure the selected root menu item.', 'Configura la voce di menu radice selezionata.') }}\r\n </p>\r\n\r\n @if (parentTitle()) {\r\n <p class=\"menu-item-dialog__parent\">\r\n {{ chill.T('35D75951-2BAA-4DEB-959A-9ED9D75BE4C8', 'Parent', 'Padre') }}: <strong>{{ parentTitle() }}</strong>\r\n </p>\r\n }\r\n\r\n <app-chill-polymorphic-input\r\n [form]=\"form\"\r\n [schema]=\"schema()\"\r\n [showLabels]=\"true\"\r\n (validityChange)=\"isValid.set($event)\"></app-chill-polymorphic-input>\r\n </section>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n }\r\n\r\n .menu-item-dialog {\r\n display: grid;\r\n gap: 1rem;\r\n }\r\n\r\n .menu-item-dialog__lede,\r\n .menu-item-dialog__parent {\r\n margin: 0;\r\n color: var(--text-muted);\r\n }\r\n\r\n .menu-item-dialog__parent strong {\r\n color: var(--text-main);\r\n }\r\n `\r\n})\r\nexport class WorkspaceMenuItemDialogComponent implements WorkspaceTaskComponent<MenuItemDialogResult>, OnDestroy {\r\n readonly chill = inject(ChillService);\r\n readonly workspace = inject(WorkspaceService);\r\n readonly toolbar = inject(WorkspaceToolbarService);\r\n\r\n readonly item = input<ChillMenuItem | null>(null);\r\n readonly parent = input<ChillMenuItem | null>(null);\r\n readonly visible = input(true);\r\n\r\n readonly isValid = signal(true);\r\n readonly isGeneratingConfigurationExample = signal(false);\r\n readonly selectedComponentName = signal('');\r\n readonly componentOptions = computed<[string, string][]>(() => {\r\n const registryOptions = this.workspace.availableTasks()\r\n .map((task) => [task.componentName, `${task.title} (${task.componentName})`] as [string, string])\r\n .sort((left, right) => left[1].localeCompare(right[1]));\r\n\r\n return [\r\n ['', 'Menu empty node'],\r\n ...registryOptions\r\n ];\r\n });\r\n readonly selectedTaskDefinition = computed(() => {\r\n const componentName = this.selectedComponentName().toLowerCase();\r\n if (!componentName) {\r\n return null;\r\n }\r\n\r\n return this.workspace.availableTasks().find((task) => task.componentName === componentName) ?? null;\r\n });\r\n readonly selectedComponentConfigurationJsonExample = computed(() =>\r\n this.selectedTaskDefinition()?.componentConfigurationJsonExample?.trim() || '{}'\r\n );\r\n readonly properties = computed<ChillPropertySchema[]>(() => [\r\n {\r\n name: 'title',\r\n displayName: 'Title',\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: false,\r\n metadata: { required: 'true', maxLength: '255' } as ChillMetadataRecord\r\n },\r\n {\r\n name: 'description',\r\n displayName: 'Description',\r\n propertyType: CHILL_PROPERTY_TYPE.Text,\r\n isNullable: true,\r\n metadata: {} as ChillMetadataRecord\r\n },\r\n {\r\n name: 'componentName',\r\n displayName: 'ComponentName',\r\n propertyType: CHILL_PROPERTY_TYPE.Select,\r\n isNullable: true,\r\n metadata: {\r\n required: 'false',\r\n options: this.componentOptions()\r\n } as ChillMetadataRecord\r\n },\r\n {\r\n name: 'componentConfigurationJson',\r\n displayName: 'ComponentConfigurationJson',\r\n propertyType: CHILL_PROPERTY_TYPE.Json,\r\n isNullable: true,\r\n metadata: {} as ChillMetadataRecord\r\n },\r\n {\r\n name: 'menuHierarchy',\r\n displayName: 'MenuHierarchy',\r\n propertyType: CHILL_PROPERTY_TYPE.String,\r\n isNullable: true,\r\n metadata: { required: 'false', maxLength: '255' } as ChillMetadataRecord\r\n }\r\n ]);\r\n readonly schema = computed<ChillSchema>(() => ({\r\n chillType: 'Workspace.MenuItem',\r\n chillViewCode: 'dialog',\r\n displayName: this.chill.T('A92F5438-A4FB-4FC4-BA51-308D38208E77', 'Menu item', 'Voce di menu'),\r\n metadata: {},\r\n properties: this.properties()\r\n }));\r\n\r\n readonly form: MenuFormGroup = new FormGroup<Record<string, FormControl<JsonValue>>>({\r\n title: new FormControl<JsonValue>('', { nonNullable: true }),\r\n description: new FormControl<JsonValue>('', { nonNullable: true }),\r\n componentName: new FormControl<JsonValue>('', { nonNullable: true }),\r\n componentConfigurationJson: new FormControl<JsonValue>('', { nonNullable: true }),\r\n menuHierarchy: new FormControl<JsonValue>('', { nonNullable: true })\r\n });\r\n private readonly componentNameSubscription: Subscription;\r\n\r\n constructor() {\r\n this.componentNameSubscription = this.form.controls['componentName'].valueChanges.subscribe((value) => {\r\n this.selectedComponentName.set(typeof value === 'string' ? value.trim() : '');\r\n });\r\n\r\n effect(() => {\r\n const source = this.item();\r\n this.form.controls['title'].setValue(source?.title ?? '');\r\n this.form.controls['description'].setValue(source?.description ?? '');\r\n this.form.controls['componentName'].setValue(source?.componentName ?? '');\r\n this.selectedComponentName.set(source?.componentName?.trim() ?? '');\r\n this.form.controls['componentConfigurationJson'].setValue(source?.componentConfigurationJson ?? '');\r\n this.form.controls['menuHierarchy'].setValue(source?.menuHierarchy ?? '');\r\n });\r\n\r\n effect(() => {\r\n const selectedTask = this.selectedTaskDefinition();\r\n this.toolbar.setButtons([\r\n {\r\n id: 'menu-item-apply-configuration-example',\r\n labelGuid: '64BFBDFC-EA1B-47C5-95E1-8B5074B9E98A',\r\n primaryDefaultText: 'Use config example',\r\n secondaryDefaultText: 'Usa esempio config',\r\n ariaLabel: this.chill.T(\r\n '64BFBDFC-EA1B-47C5-95E1-8B5074B9E98A',\r\n 'Use config example',\r\n 'Usa esempio config'\r\n ),\r\n icon: 'data_object',\r\n iconClass: 'material-symbol-icon',\r\n action: () => void this.applyComponentConfigurationJsonExample(),\r\n disabled: !selectedTask || this.isGeneratingConfigurationExample()\r\n }\r\n ], 'dialog');\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.componentNameSubscription.unsubscribe();\r\n this.toolbar.clearButtons('dialog');\r\n }\r\n\r\n canDialogSubmit(): boolean {\r\n return this.isValid();\r\n }\r\n\r\n dialogResult(): MenuItemDialogResult {\r\n const source = this.item();\r\n const parent = this.parent();\r\n return {\r\n value: {\r\n guid: source?.guid ?? '',\r\n positionNo: source?.positionNo ?? 0,\r\n title: this.readString('title'),\r\n description: this.readOptionalString('description'),\r\n parent,\r\n componentName: this.readString('componentName'),\r\n componentConfigurationJson: this.readOptionalString('componentConfigurationJson'),\r\n menuHierarchy: this.readString('menuHierarchy')\r\n }\r\n };\r\n }\r\n\r\n parentTitle(): string {\r\n return this.parent()?.title?.trim() ?? '';\r\n }\r\n\r\n async applyComponentConfigurationJsonExample(): Promise<void> {\r\n const selectedTask = this.selectedTaskDefinition();\r\n if (!selectedTask) {\r\n return;\r\n }\r\n\r\n this.isGeneratingConfigurationExample.set(true);\r\n try {\r\n const nextValue = this.selectedComponentName().trim().toLowerCase() === 'crud'\r\n ? await this.generateCrudComponentConfigurationJsonExample()\r\n : this.selectedComponentConfigurationJsonExample();\r\n this.form.controls['componentConfigurationJson'].setValue(nextValue);\r\n } catch {\r\n this.form.controls['componentConfigurationJson'].setValue(\r\n this.readString('componentConfigurationJson') || this.selectedComponentConfigurationJsonExample()\r\n );\r\n } finally {\r\n this.isGeneratingConfigurationExample.set(false);\r\n }\r\n\r\n this.form.controls['componentConfigurationJson'].markAsDirty();\r\n this.form.controls['componentConfigurationJson'].markAsTouched();\r\n }\r\n\r\n private readString(controlName: string): string {\r\n const value = this.form.controls[controlName].value;\r\n return typeof value === 'string' ? value.trim() : '';\r\n }\r\n private readOptionalString(controlName: string): string | null {\r\n const value = this.readString(controlName);\r\n return value ? value : null;\r\n }\r\n\r\n private async generateCrudComponentConfigurationJsonExample(): Promise<string> {\r\n const currentConfiguration = this.parseConfigurationJson(\r\n this.readString('componentConfigurationJson')\r\n ) ?? this.parseConfigurationJson(this.selectedComponentConfigurationJsonExample());\r\n\r\n if (!currentConfiguration) {\r\n return this.selectedComponentConfigurationJsonExample();\r\n }\r\n\r\n const templateConfiguration = this.parseConfigurationJson(this.selectedComponentConfigurationJsonExample())\r\n ?? this.createEmptyCrudConfiguration();\r\n const seedConfiguration = this.composeCrudConfigurationSeed(templateConfiguration, currentConfiguration);\r\n const chillType = this.readConfigurationString(seedConfiguration, 'chillType');\r\n if (!chillType) {\r\n return JSON.stringify(seedConfiguration, null, 2);\r\n }\r\n\r\n const viewCode = this.readConfigurationString(seedConfiguration, 'viewCode') || 'default';\r\n const nextConfiguration = await this.buildCrudConfigurationFromSchema(\r\n seedConfiguration,\r\n chillType,\r\n viewCode,\r\n new Set<string>()\r\n );\r\n\r\n return JSON.stringify(nextConfiguration, null, 2);\r\n }\r\n\r\n private async buildCrudConfigurationFromSchema(\r\n seedConfiguration: Record<string, unknown>,\r\n chillType: string,\r\n viewCode: string,\r\n visited: Set<string>\r\n ): Promise<Record<string, unknown>> {\r\n const normalizedChillType = chillType.trim();\r\n const normalizedViewCode = viewCode.trim() || 'default';\r\n const visitKey = `${normalizedChillType.toLowerCase()}|${normalizedViewCode.toLowerCase()}`;\r\n if (visited.has(visitKey)) {\r\n return this.createCrudConfigurationObject(seedConfiguration, []);\r\n }\r\n\r\n const nextVisited = new Set(visited);\r\n nextVisited.add(visitKey);\r\n\r\n const schema = await firstValueFrom(this.chill.getSchema(normalizedChillType, normalizedViewCode, undefined, true));\r\n const relationConfigurations = await Promise.all((schema?.relations ?? []).map((relation) =>\r\n this.buildCrudRelationConfiguration(relation, normalizedViewCode, nextVisited)\r\n ));\r\n\r\n return this.createCrudConfigurationObject(\r\n seedConfiguration,\r\n relationConfigurations.filter((configuration): configuration is Record<string, unknown> => configuration !== null)\r\n );\r\n }\r\n\r\n private async buildCrudRelationConfiguration(\r\n relation: ChillSchemaRelation,\r\n viewCode: string,\r\n visited: Set<string>\r\n ): Promise<Record<string, unknown> | null> {\r\n const chillType = this.normalizeString(relation.chillType);\r\n if (!chillType) {\r\n return null;\r\n }\r\n\r\n const seedConfiguration = this.createCrudConfigurationObject({\r\n chillType,\r\n chillQuery: this.normalizeString(relation.chillQuery) || null,\r\n viewCode,\r\n relationLabel: this.mapRelationLabel(relation.relationLabel) ?? this.createEmptyRelationLabel(),\r\n fixedValues: this.normalizeJsonRecord(relation.fixedValues),\r\n fixedQueryValues: this.normalizeJsonRecord(relation.fixedQueryValues)\r\n }, []);\r\n\r\n try {\r\n return await this.buildCrudConfigurationFromSchema(seedConfiguration, chillType, viewCode, visited);\r\n } catch {\r\n return seedConfiguration;\r\n }\r\n }\r\n\r\n private composeCrudConfigurationSeed(\r\n templateConfiguration: Record<string, unknown>,\r\n currentConfiguration: Record<string, unknown>\r\n ): Record<string, unknown> {\r\n const chillType = this.readConfigurationString(currentConfiguration, 'chillType')\r\n || this.readConfigurationString(templateConfiguration, 'chillType');\r\n const chillQuery = this.readConfigurationString(currentConfiguration, 'chillQuery')\r\n || this.readConfigurationString(templateConfiguration, 'chillQuery');\r\n const viewCode = this.readConfigurationString(currentConfiguration, 'viewCode')\r\n || this.readConfigurationString(templateConfiguration, 'viewCode')\r\n || 'default';\r\n\r\n return this.createCrudConfigurationObject({\r\n chillType,\r\n chillQuery: chillQuery || null,\r\n viewCode,\r\n disableAdd: this.readConfigurationBoolean(\r\n currentConfiguration,\r\n 'disableAdd',\r\n this.readConfigurationBoolean(templateConfiguration, 'disableAdd', false)\r\n ),\r\n disableCreate: this.readConfigurationBoolean(\r\n currentConfiguration,\r\n 'disableCreate',\r\n this.readConfigurationBoolean(templateConfiguration, 'disableCreate', false)\r\n ),\r\n disableEdit: this.readConfigurationBoolean(\r\n currentConfiguration,\r\n 'disableEdit',\r\n this.readConfigurationBoolean(templateConfiguration, 'disableEdit', false)\r\n ),\r\n disableInlineEdit: this.readConfigurationBoolean(\r\n currentConfiguration,\r\n 'disableInlineEdit',\r\n this.readConfigurationBoolean(templateConfiguration, 'disableInlineEdit', false)\r\n ),\r\n disableDelete: this.readConfigurationBoolean(\r\n currentConfiguration,\r\n 'disableDelete',\r\n this.readConfigurationBoolean(templateConfiguration, 'disableDelete', false)\r\n ),\r\n relationLabel: this.readRelationLabelValue(currentConfiguration, 'relationLabel')\r\n ?? this.readRelationLabelValue(templateConfiguration, 'relationLabel')\r\n ?? this.createEmptyRelationLabel(),\r\n defaultValues: this.readConfigurationRecord(currentConfiguration, 'defaultValues')\r\n ?? this.readConfigurationRecord(templateConfiguration, 'defaultValues')\r\n ?? {},\r\n fixedValues: this.readConfigurationRecord(currentConfiguration, 'fixedValues')\r\n ?? this.readConfigurationRecord(templateConfiguration, 'fixedValues')\r\n ?? {},\r\n fixedQueryValues: this.readConfigurationRecord(currentConfiguration, 'fixedQueryValues')\r\n ?? this.readConfigurationRecord(templateConfiguration, 'fixedQueryValues')\r\n ?? {},\r\n defaultQueryValues: this.readConfigurationRecord(currentConfiguration, 'defaultQueryValues')\r\n ?? this.readConfigurationRecord(templateConfiguration, 'defaultQueryValues')\r\n ?? {},\r\n ...this.readAdditionalConfigurationEntries(templateConfiguration),\r\n ...this.readAdditionalConfigurationEntries(currentConfiguration)\r\n }, []);\r\n }\r\n\r\n private createCrudConfigurationObject(\r\n configuration: Record<string, unknown>,\r\n relations: Record<string, unknown>[]\r\n ): Record<string, unknown> {\r\n const chillType = this.readConfigurationString(configuration, 'chillType');\r\n const chillQuery = this.readConfigurationString(configuration, 'chillQuery');\r\n const viewCode = this.readConfigurationString(configuration, 'viewCode') || 'default';\r\n\r\n return {\r\n chillType,\r\n chillQuery: chillQuery || null,\r\n viewCode,\r\n disableAdd: this.readConfigurationBoolean(configuration, 'disableAdd', false),\r\n disableCreate: this.readConfigurationBoolean(configuration, 'disableCreate', false),\r\n disableEdit: this.readConfigurationBoolean(configuration, 'disableEdit', false),\r\n disableInlineEdit: this.readConfigurationBoolean(configuration, 'disableInlineEdit', false),\r\n disableDelete: this.readConfigurationBoolean(configuration, 'disableDelete', false),\r\n relationLabel: this.readRelationLabelValue(configuration, 'relationLabel') ?? this.createEmptyRelationLabel(),\r\n defaultValues: this.readConfigurationRecord(configuration, 'defaultValues') ?? {},\r\n fixedValues: this.readConfigurationRecord(configuration, 'fixedValues') ?? {},\r\n fixedQueryValues: this.readConfigurationRecord(configuration, 'fixedQueryValues') ?? {},\r\n defaultQueryValues: this.readConfigurationRecord(configuration, 'defaultQueryValues') ?? {},\r\n relations,\r\n ...this.readAdditionalConfigurationEntries(configuration)\r\n };\r\n }\r\n\r\n private createEmptyCrudConfiguration(): Record<string, unknown> {\r\n return {\r\n chillType: '',\r\n chillQuery: null,\r\n viewCode: 'default',\r\n disableAdd: false,\r\n disableCreate: false,\r\n disableEdit: false,\r\n disableInlineEdit: false,\r\n disableDelete: false,\r\n relationLabel: this.createEmptyRelationLabel(),\r\n defaultValues: {},\r\n fixedValues: {},\r\n fixedQueryValues: {},\r\n defaultQueryValues: {},\r\n relations: []\r\n };\r\n }\r\n\r\n private createEmptyRelationLabel(): Record<string, string> {\r\n return {\r\n labelGuid: '',\r\n primaryDefaultText: '',\r\n secondaryDefaultText: ''\r\n };\r\n }\r\n\r\n private parseConfigurationJson(value: string): Record<string, unknown> | null {\r\n const normalizedValue = value.trim();\r\n if (!normalizedValue) {\r\n return {};\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(normalizedValue);\r\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\r\n ? parsed as Record<string, unknown>\r\n : null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private readConfigurationString(configuration: Record<string, unknown>, key: string): string {\r\n const value = this.readConfigurationValue(configuration, key);\r\n return typeof value === 'string' && value.trim()\r\n ? value.trim()\r\n : '';\r\n }\r\n\r\n private readConfigurationBoolean(configuration: Record<string, unknown>, key: string, fallbackValue: boolean): boolean {\r\n const value = this.readConfigurationValue(configuration, key);\r\n return typeof value === 'boolean'\r\n ? value\r\n : fallbackValue;\r\n }\r\n\r\n private readConfigurationRecord(configuration: Record<string, unknown>, key: string): Record<string, JsonValue> | null {\r\n const value = this.readConfigurationValue(configuration, key);\r\n return this.normalizeJsonRecord(value);\r\n }\r\n\r\n private readRelationLabelValue(\r\n configuration: Record<string, unknown>,\r\n key: string\r\n ): string | Record<string, string> | null {\r\n const value = this.readConfigurationValue(configuration, key);\r\n if (typeof value === 'string') {\r\n const normalizedValue = value.trim();\r\n return normalizedValue ? normalizedValue : null;\r\n }\r\n\r\n return this.mapRelationLabel(value);\r\n }\r\n\r\n private readAdditionalConfigurationEntries(configuration: Record<string, unknown>): Record<string, unknown> {\r\n return Object.fromEntries(\r\n Object.entries(configuration)\r\n .filter(([key]) => !CRUD_CONFIGURATION_KEYS.has(key.toLowerCase()))\r\n );\r\n }\r\n\r\n private readConfigurationValue(configuration: Record<string, unknown>, key: string): unknown {\r\n const directValue = configuration[key];\r\n if (directValue !== undefined) {\r\n return directValue;\r\n }\r\n\r\n const matchedKey = Object.keys(configuration).find((candidate) => candidate.toLowerCase() === key.toLowerCase());\r\n return matchedKey ? configuration[matchedKey] : undefined;\r\n }\r\n\r\n private mapRelationLabel(value: unknown): Record<string, string> | null {\r\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\r\n return null;\r\n }\r\n\r\n const relationLabel = value as ChillSchemaRelationLabel;\r\n return {\r\n labelGuid: this.normalizeString(relationLabel.labelGuid),\r\n primaryDefaultText: this.normalizeString(relationLabel.primaryDefaultText),\r\n secondaryDefaultText: this.normalizeString(relationLabel.secondaryDefaultText)\r\n };\r\n }\r\n\r\n private normalizeJsonRecord(value: unknown): Record<string, JsonValue> | null {\r\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\r\n return null;\r\n }\r\n\r\n return Object.fromEntries(\r\n Object.entries(value as Record<string, JsonValue>)\r\n .map(([key, entryValue]) => [key.trim(), entryValue] as const)\r\n .filter(([key]) => key.length > 0)\r\n );\r\n }\r\n\r\n private normalizeString(value: unknown): string {\r\n return typeof value === 'string'\r\n ? value.trim()\r\n : '';\r\n }\r\n}\r\n","/// <reference path=\"./lib/runtime-config.d.ts\" />\r\n\r\nexport * from './lib/chill.config';\r\nexport * from './lib/storage-keys';\r\nexport * from './lib/chill-sharp-ui-root.component';\r\nexport * from './lib/chill-sharp-ui.routes';\r\nexport * from './lib/provide-chill-sharp-ui-core';\r\n\r\nexport * from './lib/layouts/auth-shell.component';\r\nexport * from './lib/layouts/workspace-page.component';\r\n\r\nexport * from './lib/lib/chill-form.component';\r\nexport * from './lib/lib/chill-i18n-button-label.component';\r\nexport * from './lib/lib/chill-i18n-label.component';\r\nexport * from './lib/lib/chill-json-input.component';\r\nexport * from './lib/lib/chill-polymorphic-input.component';\r\nexport * from './lib/lib/chill-polymorphic-output.component';\r\nexport * from './lib/lib/chill-table.component';\r\nexport * from './lib/lib/chill-text-editor-dialog.component';\r\nexport * from './lib/lib/crud-configuration.utils';\r\nexport * from './lib/lib/culture-name-options';\r\nexport * from './lib/lib/date-format-options';\r\nexport * from './lib/lib/iana-time-zone-options';\r\nexport * from './lib/lib/notice-transition.directive';\r\nexport * from './lib/lib/schema-property-dialog.component';\r\n\r\nexport * from './lib/models/chill-auth.models';\r\nexport * from './lib/models/chill-menu.models';\r\nexport * from './lib/models/chill-schema.models';\r\nexport * from './lib/models/workspace-dialog.models';\r\nexport * from './lib/models/workspace-task.models';\r\n\r\nexport * from './lib/pages/confirm-reset-page.component';\r\nexport * from './lib/pages/crud/attachment-upload-dialog.component';\r\nexport * from './lib/pages/crud/crud-page.component';\r\nexport * from './lib/pages/login-page.component';\r\nexport * from './lib/pages/permissions/auth-role-dialog.component';\r\nexport * from './lib/pages/permissions/auth-search-select.component';\r\nexport * from './lib/pages/permissions/auth-user-dialog.component';\r\nexport * from './lib/pages/permissions/permission-editor.component';\r\nexport * from './lib/pages/permissions/permissions-page.component';\r\nexport * from './lib/pages/permissions/role-permission.component';\r\nexport * from './lib/pages/permissions/user-permission.component';\r\nexport * from './lib/pages/register-page.component';\r\nexport * from './lib/pages/reset-password-page.component';\r\n\r\nexport * from './lib/services/chill.service';\r\nexport * from './lib/services/workspace-dialog.service';\r\nexport * from './lib/services/workspace-layout.service';\r\nexport * from './lib/services/workspace-task-registry.service';\r\nexport * from './lib/services/workspace-toolbar.service';\r\nexport * from './lib/services/workspace.service';\r\n\r\nexport * from './lib/tasks/crud-task/crud-task.component';\r\nexport * from './lib/tasks/goto-url-task/goto-url-task.component';\r\n\r\nexport * from './lib/workspace/confirm-message-dialog.component';\r\nexport * from './lib/workspace/entity-options-dialog.component';\r\nexport * from './lib/workspace/external-task-api';\r\nexport * from './lib/workspace/user-profile-dialog.component';\r\nexport * from './lib/workspace/workspace-dialog-host.component';\r\nexport * from './lib/workspace/workspace-menu-item-dialog.component';\r\nexport * from './lib/workspace/workspace-menu.component';\r\nexport * from './lib/workspace/workspace-taskbar.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["CHILL_PROPERTY_TYPE","i1","i2","passwordMatchValidator"],"mappings":"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"}
|