@masterteam/properties 0.0.73 → 0.0.74

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.
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-properties.mjs","sources":["../../../../packages/masterteam/properties/src/store/properties/properties.model.ts","../../../../packages/masterteam/properties/src/store/properties/properties.actions.ts","../../../../packages/masterteam/properties/src/store/properties/properties.state.ts","../../../../packages/masterteam/properties/src/store/properties/properties.facade.ts","../../../../packages/masterteam/properties/src/store/app.state.ts","../../../../packages/masterteam/properties/src/store/index.ts","../../../../packages/masterteam/properties/src/lib/properties-list/properties-list.ts","../../../../packages/masterteam/properties/src/lib/properties-list/properties-list.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/api-configuration/api-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/api-configuration/api-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/check-list-form-configuration/check-list-form-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/check-list-form-configuration/check-list-form-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/entity-list-configuration/entity-list-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/entity-list-configuration/entity-list-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/location-configuration/location-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/location-configuration/location-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/lookup-configuration/lookup-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/lookup-configuration/lookup-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/percentage-configuration/percentage-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/percentage-configuration/percentage-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/status-configuration/status-item-form/status-item-form.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/status-configuration/status-item-form/status-item-form.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/status-configuration/status-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/status-configuration/status-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/user-configuration/user-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/user-configuration/user-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/attachment-configuration/attachment-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/attachment-configuration/attachment-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/property-form-request.ts","../../../../packages/masterteam/properties/src/lib/property-form/property-form.ts","../../../../packages/masterteam/properties/src/lib/property-form/property-form.html","../../../../packages/masterteam/properties/src/public-api.ts","../../../../packages/masterteam/properties/src/masterteam-properties.ts"],"sourcesContent":["import { BreadcrumbItem } from '@masterteam/components/breadcrumb';\r\nimport type { FormulaBuilderValue } from '@masterteam/formula-builder';\r\nimport type { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport type PropertiesScopeId = string | number;\r\n\r\nexport interface PropertiesScopeTarget {\r\n type: string;\r\n id: PropertiesScopeId;\r\n}\r\n\r\n/**\r\n * Identifies the effective scope in which properties are being managed.\r\n *\r\n * A module nested under a level uses the module as `target` and the level as\r\n * `parent`. Keeping the route vocabulary out of this contract lets hosts map\r\n * any URL shape to the same package API.\r\n */\r\nexport interface PropertiesScope {\r\n target: PropertiesScopeTarget;\r\n parent?: PropertiesScopeTarget;\r\n parentPath?: string;\r\n}\r\n\r\nexport function buildPropertiesScopeContextKey(scope: PropertiesScope): string {\r\n return [scope.parent, scope.target]\r\n .filter((target): target is PropertiesScopeTarget => target != null)\r\n .map((target) => `${target.type}:${target.id}`)\r\n .join('/');\r\n}\r\n\r\nexport interface PropertyItem {\r\n id: number;\r\n key: string;\r\n normalizedKey: string;\r\n viewType: string;\r\n viewTypeLabel: string;\r\n name: string | Record<string, string>;\r\n description?: Record<string, string>;\r\n defaultValue?: unknown;\r\n order?: number;\r\n canBeDeleted?: boolean;\r\n displayOverView?: boolean;\r\n enabled?: boolean;\r\n formula?: FormulaBuilderValue | null;\r\n addToForm?: boolean;\r\n isBasic?: boolean;\r\n isCalculated?: boolean;\r\n isConfigurable?: boolean;\r\n isHiddenInCreation?: boolean;\r\n isHiddenInEdition?: boolean;\r\n isLive?: boolean;\r\n isLog?: boolean;\r\n isRequired?: boolean;\r\n isSystem?: boolean;\r\n isTranslatable?: boolean;\r\n shownInTable?: boolean;\r\n includeInSummary?: boolean;\r\n dependsOn?: unknown[];\r\n isFilterFormula?: boolean;\r\n configuration?: Record<string, unknown>;\r\n category?: string;\r\n valueOnCreation?: boolean;\r\n isRelated?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface LookupDefinitionItem {\r\n id: number;\r\n key?: string;\r\n name?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface LookupDefinition {\r\n id: number;\r\n key: string;\r\n name: string;\r\n allowDelete: boolean;\r\n allowManage: boolean;\r\n allowEdit: boolean;\r\n items: LookupDefinitionItem[];\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface GroupDefinition {\r\n id: number;\r\n name: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface LogDefinition {\r\n id: number;\r\n name: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface ConfigScope {\r\n scope: string;\r\n items: Array<{\r\n id: number;\r\n name?: string;\r\n [key: string]: unknown;\r\n }>;\r\n}\r\n\r\nexport interface CountryDefinition {\r\n name: string;\r\n name_ar?: string;\r\n code?: string;\r\n viewBox?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface ApiSchemaProperty {\r\n type?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface ApiSchema {\r\n properties?: Record<string, ApiSchemaProperty>;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface ApiPropertyOption {\r\n key: string;\r\n name: string;\r\n type?: string;\r\n}\r\n\r\nexport interface ApiConfigurationValue {\r\n endpoint: string;\r\n headers: Record<string, string>;\r\n key: string;\r\n value: string;\r\n schema?: ApiSchema | null;\r\n supportMultiSelect?: boolean;\r\n}\r\n\r\nexport interface ApiTestPayload {\r\n endpoint: string;\r\n headers?: Record<string, string>;\r\n}\r\n\r\nexport interface ApiTestResponse {\r\n schema?: ApiSchema | null;\r\n data?: unknown;\r\n}\r\n\r\nexport interface PropertyStatusItem {\r\n id: number;\r\n propertyId: number;\r\n key: string;\r\n type?: string | null;\r\n display?: Record<string, string>;\r\n description?: Record<string, string>;\r\n color?: string | null;\r\n icon?: string | null;\r\n formula?: FormulaBuilderValue | string | null;\r\n formulaRaw?: unknown;\r\n order?: number | null;\r\n createdAt?: unknown;\r\n createdBy?: unknown;\r\n updatedAt?: unknown;\r\n updatedBy?: unknown;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface PropertyStatusPayload {\r\n type?: string | null;\r\n display?: Record<string, string>;\r\n description?: Record<string, string>;\r\n color?: string | null;\r\n icon?: string | null;\r\n formula?: FormulaBuilderValue | null;\r\n}\r\n\r\nexport interface PropertyStatusOrderPayload {\r\n orders: Array<{\r\n statusId: number;\r\n order: number;\r\n }>;\r\n}\r\n\r\nexport enum PropertiesActionKey {\r\n GetAll = 'getAll',\r\n GetOne = 'getOne',\r\n Create = 'create',\r\n Update = 'update',\r\n Delete = 'delete',\r\n GetLookups = 'getLookups',\r\n GetGroups = 'getGroups',\r\n GetConfigProperties = 'getConfigProperties',\r\n GetConfigAsType = 'getConfigAsType',\r\n GetCountries = 'getCountries',\r\n TestApiConfiguration = 'testApiConfiguration',\r\n GetPropertyStatuses = 'getPropertyStatuses',\r\n CreatePropertyStatus = 'createPropertyStatus',\r\n UpdatePropertyStatus = 'updatePropertyStatus',\r\n DeletePropertyStatus = 'deletePropertyStatus',\r\n ReorderPropertyStatuses = 'reorderPropertyStatuses',\r\n}\r\n\r\nexport type PropertiesLoadingName = PropertiesActionKey;\r\n\r\nexport interface PropertiesStateModel extends LoadingStateShape<PropertiesActionKey> {\r\n properties: PropertyItem[];\r\n selectedProperty: PropertyItem | null;\r\n moduleType: string | null;\r\n moduleId: string | number | null;\r\n parentModuleType?: string | null;\r\n parentModuleId?: string | number | null;\r\n parentPath?: string;\r\n lastQueryParams: PropertiesQueryParams | null;\r\n lookups: LookupDefinition[];\r\n configTypeProperties: PropertyItem[];\r\n groups: GroupDefinition[];\r\n configScopes: ConfigScope[];\r\n countries: CountryDefinition[];\r\n apiSchema: ApiSchema | null;\r\n apiProperties: ApiPropertyOption[];\r\n propertyStatuses: PropertyStatusItem[];\r\n propertyTypes?: any;\r\n breadcrumbItems: BreadcrumbItem[];\r\n defaultViewType: string | null;\r\n}\r\n\r\nexport interface PropertiesQueryParams {\r\n includeLog?: boolean;\r\n includeLevel?: boolean;\r\n includeLevelParent?: boolean;\r\n isDynamicList?: boolean;\r\n isSystem?: boolean;\r\n isCSharpMethod?: boolean;\r\n}\r\n\r\nexport interface PropertyPayload {\r\n viewType: string;\r\n isCalculated: boolean;\r\n isTranslatable?: boolean;\r\n addToForm?: boolean;\r\n formula?: FormulaBuilderValue | null;\r\n name: Record<string, string>;\r\n description?: Record<string, string>;\r\n defaultValue?: any;\r\n configuration?: Record<string, any> | string | null;\r\n}\r\n","import type {\r\n PropertiesQueryParams,\r\n PropertyPayload,\r\n ApiTestPayload,\r\n PropertyStatusPayload,\r\n PropertyStatusOrderPayload,\r\n} from './properties.model';\r\nimport type { BreadcrumbItem } from '@masterteam/components/breadcrumb';\r\n\r\nexport class GetProperties {\r\n static readonly type = '[Properties] Get All';\r\n\r\n constructor(public readonly params?: PropertiesQueryParams) {}\r\n}\r\n\r\nexport class GetProperty {\r\n static readonly type = '[Properties] Get One';\r\n\r\n constructor(\r\n public readonly id: string | number,\r\n public readonly mode: 'edit' = 'edit',\r\n ) {}\r\n}\r\n\r\nexport class GetLookups {\r\n static readonly type = '[Properties] Get Lookups';\r\n}\r\n\r\nexport class GetGroups {\r\n static readonly type = '[Properties] Get Groups';\r\n}\r\n\r\nexport class GetConfigAsType {\r\n static readonly type = '[Properties] Get Config As Type';\r\n\r\n constructor(public readonly viewType: string) {}\r\n}\r\n\r\nexport class GetCountries {\r\n static readonly type = '[Properties] Get Countries';\r\n}\r\n\r\nexport class TestApiConfiguration {\r\n static readonly type = '[Properties] Test API Configuration';\r\n\r\n constructor(public readonly payload: ApiTestPayload) {}\r\n}\r\n\r\nexport class ResetApiConfiguration {\r\n static readonly type = '[Properties] Reset API Configuration';\r\n}\r\n\r\nexport class GetPropertyStatuses {\r\n static readonly type = '[Properties] Get Property Statuses';\r\n\r\n constructor(public readonly propertyId: string | number) {}\r\n}\r\n\r\nexport class CreatePropertyStatus {\r\n static readonly type = '[Properties] Create Property Status';\r\n\r\n constructor(\r\n public readonly propertyId: string | number,\r\n public readonly payload: PropertyStatusPayload,\r\n ) {}\r\n}\r\n\r\nexport class UpdatePropertyStatus {\r\n static readonly type = '[Properties] Update Property Status';\r\n\r\n constructor(\r\n public readonly propertyId: string | number,\r\n public readonly statusId: string | number,\r\n public readonly payload: PropertyStatusPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeletePropertyStatus {\r\n static readonly type = '[Properties] Delete Property Status';\r\n\r\n constructor(\r\n public readonly propertyId: string | number,\r\n public readonly statusId: string | number,\r\n ) {}\r\n}\r\n\r\nexport class ReorderPropertyStatuses {\r\n static readonly type = '[Properties] Reorder Property Statuses';\r\n\r\n constructor(public readonly payload: PropertyStatusOrderPayload) {}\r\n}\r\n\r\nexport class ResetPropertyStatuses {\r\n static readonly type = '[Properties] Reset Property Statuses';\r\n}\r\n\r\nexport class GetPropertiesForConfigType {\r\n static readonly type = '[Properties] Get By Config Type';\r\n\r\n constructor(\r\n public readonly moduleType: string,\r\n public readonly moduleId: string | number,\r\n ) {}\r\n}\r\n\r\nexport class ResetConfigProperties {\r\n static readonly type = '[Properties] Reset Config Properties';\r\n}\r\n\r\nexport class ResetConfigScopes {\r\n static readonly type = '[Properties] Reset Config Scopes';\r\n}\r\n\r\nexport class ResetSelectedProperty {\r\n static readonly type = '[Properties] Reset Selected Property';\r\n}\r\n\r\nexport class DeleteProperty {\r\n static readonly type = '[Properties] Delete';\r\n\r\n constructor(public readonly id: string | number) {}\r\n}\r\n\r\nexport class CreateProperty {\r\n static readonly type = '[Properties] Create';\r\n\r\n constructor(public readonly payload: PropertyPayload) {}\r\n}\r\n\r\nexport class UpdateProperty {\r\n static readonly type = '[Properties] Update';\r\n\r\n constructor(\r\n public readonly id: string | number,\r\n public readonly payload: PropertyPayload,\r\n ) {}\r\n}\r\n\r\nexport class SetPropertiesModuleInfo {\r\n static readonly type = '[Properties] Set Module Info';\r\n\r\n constructor(\r\n public readonly moduleType: string,\r\n public readonly moduleId: string | number,\r\n public readonly parentModuleType?: string,\r\n public readonly parentModuleId?: string | number,\r\n public readonly parentPath?: string,\r\n ) {}\r\n}\r\nexport class SetPropertyTypes {\r\n static readonly type = '[Properties] Set Property Types';\r\n\r\n constructor(public readonly payload: any) {}\r\n}\r\n\r\nexport class SetBreadcrumb {\r\n static readonly type = '[Properties] Set Breadcrumb';\r\n\r\n constructor(public readonly items: BreadcrumbItem[]) {}\r\n}\r\n\r\nexport class SetDefaultViewType {\r\n static readonly type = '[Properties] Set Default ViewType';\r\n\r\n constructor(public readonly viewType: string) {}\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { of } from 'rxjs';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\n\r\nimport {\r\n ApiPropertyOption,\r\n ApiSchema,\r\n ApiSchemaProperty,\r\n ConfigScope,\r\n CountryDefinition,\r\n GroupDefinition,\r\n LookupDefinition,\r\n buildPropertiesScopeContextKey,\r\n PropertiesActionKey,\r\n PropertiesStateModel,\r\n PropertyItem,\r\n PropertyStatusItem,\r\n} from './properties.model';\r\nimport type { BreadcrumbItem } from '@masterteam/components/breadcrumb';\r\nimport {\r\n CreateProperty,\r\n DeleteProperty,\r\n GetGroups,\r\n GetConfigAsType,\r\n GetLookups,\r\n GetPropertiesForConfigType,\r\n GetProperties,\r\n GetProperty,\r\n GetCountries,\r\n TestApiConfiguration,\r\n ResetApiConfiguration,\r\n GetPropertyStatuses,\r\n CreatePropertyStatus,\r\n UpdatePropertyStatus,\r\n DeletePropertyStatus,\r\n ReorderPropertyStatuses,\r\n ResetPropertyStatuses,\r\n ResetConfigProperties,\r\n ResetConfigScopes,\r\n ResetSelectedProperty,\r\n SetPropertiesModuleInfo,\r\n UpdateProperty,\r\n SetPropertyTypes,\r\n SetBreadcrumb,\r\n SetDefaultViewType,\r\n} from './properties.actions';\r\nimport {\r\n CatalogPropertyDto,\r\n PropertyCatalogResponseDto,\r\n Response,\r\n} from './api.model';\r\n\r\nconst DEFAULT_STATE: PropertiesStateModel = {\r\n properties: [],\r\n selectedProperty: null,\r\n loadingActive: [],\r\n errors: {},\r\n moduleType: null,\r\n moduleId: null,\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n lastQueryParams: null,\r\n lookups: [],\r\n configTypeProperties: [],\r\n groups: [],\r\n configScopes: [],\r\n countries: [],\r\n apiSchema: null,\r\n apiProperties: [],\r\n propertyStatuses: [],\r\n breadcrumbItems: [],\r\n defaultViewType: null,\r\n};\r\n\r\n@State<PropertiesStateModel>({\r\n name: 'properties',\r\n defaults: DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class PropertiesState extends CrudStateBase<\r\n PropertyItem,\r\n PropertiesStateModel,\r\n PropertiesActionKey\r\n> {\r\n private readonly http = inject(HttpClient);\r\n private readonly baseUrl = 'Properties';\r\n private readonly lookupsUrl = 'Lookups';\r\n private readonly configPropertiesUrl = 'Properties';\r\n private readonly groupsUrl = 'identity/Groups';\r\n private readonly countriesUrl = '/assets/countries/countries.json';\r\n private readonly apiTestUrl = 'app/testAPI';\r\n private readonly propertyStatusOrderUrl = 'Properties/Status/Order';\r\n\r\n // ============================================================================\r\n // Data Selectors - Individual for fine-grained reactivity\r\n // ============================================================================\r\n\r\n @Selector()\r\n static properties(state: PropertiesStateModel): PropertyItem[] {\r\n return state.properties;\r\n }\r\n\r\n @Selector()\r\n static selectedProperty(state: PropertiesStateModel): PropertyItem | null {\r\n return state.selectedProperty;\r\n }\r\n\r\n @Selector()\r\n static moduleId(state: PropertiesStateModel): string | number | null {\r\n return state.moduleId;\r\n }\r\n\r\n @Selector()\r\n static parentModuleId(state: PropertiesStateModel): string | number | null {\r\n return state.parentModuleId ?? null;\r\n }\r\n\r\n /**\r\n * Canonical formula-builder context key for the current scope, in the same\r\n * format used for the catalog request: `Level:5/Module:10` (module under a\r\n * level), `Level:5` (level), or `Module:10` (standalone module). Returns\r\n * null when no scope is set. This lets the formula builder address a\r\n * standalone module as `Module:{id}` instead of mistaking it for a level.\r\n */\r\n @Selector()\r\n static formulaContextKey(state: PropertiesStateModel): string | null {\r\n if (state.moduleType == null || state.moduleId == null) {\r\n return null;\r\n }\r\n\r\n return buildPropertiesScopeContextKey({\r\n target: { type: state.moduleType, id: state.moduleId },\r\n parent:\r\n state.parentModuleType != null && state.parentModuleId != null\r\n ? { type: state.parentModuleType, id: state.parentModuleId }\r\n : undefined,\r\n });\r\n }\r\n\r\n @Selector()\r\n static lookups(state: PropertiesStateModel): LookupDefinition[] {\r\n return state.lookups;\r\n }\r\n\r\n @Selector()\r\n static configTypeProperties(state: PropertiesStateModel): PropertyItem[] {\r\n return state.configTypeProperties;\r\n }\r\n\r\n @Selector()\r\n static groups(state: PropertiesStateModel): GroupDefinition[] {\r\n return state.groups;\r\n }\r\n\r\n @Selector()\r\n static configScopes(state: PropertiesStateModel): ConfigScope[] {\r\n return state.configScopes;\r\n }\r\n\r\n @Selector()\r\n static countries(state: PropertiesStateModel): CountryDefinition[] {\r\n return state.countries;\r\n }\r\n\r\n @Selector()\r\n static apiSchema(state: PropertiesStateModel): ApiSchema | null {\r\n return state.apiSchema;\r\n }\r\n\r\n @Selector()\r\n static apiProperties(state: PropertiesStateModel): ApiPropertyOption[] {\r\n return state.apiProperties;\r\n }\r\n\r\n @Selector()\r\n static propertyStatuses(state: PropertiesStateModel): PropertyStatusItem[] {\r\n return state.propertyStatuses;\r\n }\r\n\r\n @Selector()\r\n static propertyTypes(state: PropertiesStateModel): any {\r\n return state.propertyTypes ?? {};\r\n }\r\n\r\n @Selector()\r\n static breadcrumbItems(state: PropertiesStateModel): BreadcrumbItem[] {\r\n return state.breadcrumbItems;\r\n }\r\n\r\n @Selector()\r\n static defaultViewType(state: PropertiesStateModel): string | null {\r\n return state.defaultViewType;\r\n }\r\n\r\n // ============================================================================\r\n // Loading/Error Slice Selectors - REQUIRED for optimal performance\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getLoadingActive(state: PropertiesStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(state: PropertiesStateModel): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n // ============================================================================\r\n // Derived Selectors\r\n // ============================================================================\r\n\r\n @Selector()\r\n static propertyById(state: PropertiesStateModel) {\r\n return (id: number | string) =>\r\n state.properties.find((property) => property.id === Number(id)) ?? null;\r\n }\r\n\r\n // ============================================================================\r\n // CRUD Actions\r\n // ============================================================================\r\n\r\n @Action(GetProperties)\r\n getAll(ctx: StateContext<PropertiesStateModel>, action: GetProperties) {\r\n const state = ctx.getState();\r\n\r\n ctx.patchState({\r\n lastQueryParams: action.params ?? null,\r\n });\r\n\r\n // Build contextKey in format \"Level:5/Module:10\" or \"Level:5\" or \"Module:10\"\r\n const contextKey = PropertiesState.formulaContextKey(state) ?? '';\r\n\r\n const params = {\r\n ...action.params,\r\n contextKey,\r\n IncludeVirtual: false,\r\n };\r\n\r\n const req$ = this.http.get<Response<PropertyCatalogResponseDto>>(\r\n `${this.baseUrl}/catalog`,\r\n { params },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetAll,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n properties: (response.data?.properties ?? []).map(mapCatalogProperty),\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetProperty)\r\n getOne(ctx: StateContext<PropertiesStateModel>, action: GetProperty) {\r\n const state = ctx.getState();\r\n const params: Record<string, string> = {\r\n mode: action.mode ?? 'edit',\r\n ...this.getScopedEditParams(state),\r\n };\r\n const req$ = this.http.get<Response<PropertyItem>>(\r\n `${this.baseUrl}/${action.id}`,\r\n { params },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetOne,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n selectedProperty: response.data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n private getScopedEditParams(\r\n state: PropertiesStateModel,\r\n ): Record<string, string> {\r\n const parentModuleType = state.parentModuleType?.toString().toLowerCase();\r\n const moduleType = state.moduleType?.toString().toLowerCase();\r\n const levelId = this.toQueryId(state.parentModuleId);\r\n const moduleId = this.toQueryId(state.moduleId);\r\n\r\n if (\r\n parentModuleType !== 'level' ||\r\n moduleType !== 'module' ||\r\n !levelId ||\r\n !moduleId\r\n ) {\r\n return {};\r\n }\r\n\r\n return {\r\n moduleType: 'LevelModule',\r\n levelId,\r\n moduleId,\r\n };\r\n }\r\n\r\n private toQueryId(value: string | number | null | undefined): string | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n return value.toString();\r\n }\r\n\r\n @Action(GetLookups)\r\n getLookups(ctx: StateContext<PropertiesStateModel>, _action: GetLookups) {\r\n const state = ctx.getState();\r\n if (state.lookups.length) {\r\n return of(state.lookups);\r\n }\r\n\r\n const req$ = this.http.get<Response<LookupDefinition[]>>(this.lookupsUrl);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetLookups,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n lookups: response.data ?? [],\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetGroups)\r\n getGroups(ctx: StateContext<PropertiesStateModel>, _action: GetGroups) {\r\n const state = ctx.getState();\r\n if (state.groups.length) {\r\n return of(state.groups);\r\n }\r\n\r\n const req$ = this.http.get<Response<GroupDefinition[]>>(this.groupsUrl);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetGroups,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n groups: response.data ?? [],\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetConfigAsType)\r\n getConfigAsType(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: GetConfigAsType,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n // Don't reload if we already have data for this viewType\r\n if (state.configScopes.length) {\r\n return of(state.configScopes);\r\n }\r\n\r\n const url = `${this.baseUrl}/${action.viewType}/GetViewTypeProperties`;\r\n const req$ = this.http.get<Response<ConfigScope[]>>(url);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetConfigAsType,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n configScopes: response.data ?? [],\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetCountries)\r\n getCountries(ctx: StateContext<PropertiesStateModel>, _action: GetCountries) {\r\n const state = ctx.getState();\r\n if (state.countries.length) {\r\n return of(state.countries);\r\n }\r\n\r\n const req$ = this.http.get<CountryDefinition[]>(this.countriesUrl);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetCountries,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n countries: Array.isArray(response) ? response : [],\r\n }),\r\n errorMessage: 'Failed to load countries',\r\n });\r\n }\r\n\r\n @Action(TestApiConfiguration)\r\n testApiConfiguration(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: TestApiConfiguration,\r\n ) {\r\n ctx.patchState({\r\n apiSchema: null,\r\n apiProperties: [],\r\n });\r\n\r\n const req$ = this.http.post<Response<Record<string, unknown>>>(\r\n this.apiTestUrl,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.TestApiConfiguration,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n const schema = this.buildSchemaFromRecord(response.data);\r\n return {\r\n apiSchema: schema,\r\n apiProperties: this.mapSchemaToOptions(schema),\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(GetPropertyStatuses)\r\n getPropertyStatuses(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: GetPropertyStatuses,\r\n ) {\r\n const req$ = this.http.get<Response<PropertyStatusItem[]>>(\r\n `${this.baseUrl}/${action.propertyId}/Status`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetPropertyStatuses,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n propertyStatuses: Array.isArray(response.data) ? response.data : [],\r\n }),\r\n });\r\n }\r\n\r\n @Action(CreatePropertyStatus)\r\n createPropertyStatus(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: CreatePropertyStatus,\r\n ) {\r\n const req$ = this.http.post<Response<PropertyStatusItem>>(\r\n `${this.baseUrl}/${action.propertyId}/Status`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.CreatePropertyStatus,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const created = response.data;\r\n if (!created) {\r\n return {};\r\n }\r\n\r\n return {\r\n propertyStatuses: [...state.propertyStatuses, created],\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdatePropertyStatus)\r\n updatePropertyStatus(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: UpdatePropertyStatus,\r\n ) {\r\n const req$ = this.http.put<Response<PropertyStatusItem>>(\r\n `${this.baseUrl}/${action.propertyId}/Status/${action.statusId}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.UpdatePropertyStatus,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const updated = response.data;\r\n if (!updated) {\r\n return {};\r\n }\r\n\r\n return {\r\n propertyStatuses: state.propertyStatuses.map((status) =>\r\n status.id === updated.id ? updated : status,\r\n ),\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeletePropertyStatus)\r\n deletePropertyStatus(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: DeletePropertyStatus,\r\n ) {\r\n const req$ = this.http.delete<Response<boolean>>(\r\n `${this.baseUrl}/${action.propertyId}/Status/${action.statusId}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.DeletePropertyStatus,\r\n request$: req$,\r\n onSuccess: (_, state) => ({\r\n propertyStatuses: state.propertyStatuses.filter(\r\n (status) => status.id !== Number(action.statusId),\r\n ),\r\n }),\r\n });\r\n }\r\n\r\n @Action(ReorderPropertyStatuses)\r\n reorderPropertyStatuses(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: ReorderPropertyStatuses,\r\n ) {\r\n const req$ = this.http.put<Response<unknown>>(\r\n this.propertyStatusOrderUrl,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.ReorderPropertyStatuses,\r\n request$: req$,\r\n onSuccess: (_, state) => {\r\n const orderMap = new Map(\r\n action.payload.orders.map((item) => [item.statusId, item.order]),\r\n );\r\n\r\n return {\r\n propertyStatuses: [...state.propertyStatuses]\r\n .map((status) => ({\r\n ...status,\r\n order: orderMap.get(status.id) ?? status.order ?? null,\r\n }))\r\n .sort((left, right) => {\r\n const leftOrder = left.order ?? Number.MAX_SAFE_INTEGER;\r\n const rightOrder = right.order ?? Number.MAX_SAFE_INTEGER;\r\n return leftOrder - rightOrder || left.id - right.id;\r\n }),\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(GetPropertiesForConfigType)\r\n getPropertiesForConfigType(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: GetPropertiesForConfigType,\r\n ) {\r\n const { moduleType, moduleId } = action;\r\n const req$ = this.http.get<Response<CatalogPropertyDto[]>>(\r\n `${this.configPropertiesUrl}/${moduleType}/${moduleId}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetConfigProperties,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n configTypeProperties: (response.data ?? []).map(mapCatalogProperty),\r\n }),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Simple State Updates (No HTTP)\r\n // ============================================================================\r\n\r\n @Action(ResetConfigProperties)\r\n resetConfigProperties(ctx: StateContext<PropertiesStateModel>) {\r\n ctx.patchState({ configTypeProperties: [] });\r\n }\r\n\r\n @Action(ResetConfigScopes)\r\n resetConfigScopes(ctx: StateContext<PropertiesStateModel>) {\r\n ctx.patchState({ configScopes: [] });\r\n }\r\n\r\n @Action(ResetSelectedProperty)\r\n resetSelectedProperty(ctx: StateContext<PropertiesStateModel>) {\r\n ctx.patchState({ selectedProperty: null });\r\n }\r\n\r\n @Action(ResetApiConfiguration)\r\n resetApiConfiguration(ctx: StateContext<PropertiesStateModel>) {\r\n ctx.patchState({\r\n apiSchema: null,\r\n apiProperties: [],\r\n });\r\n }\r\n\r\n @Action(ResetPropertyStatuses)\r\n resetPropertyStatuses(ctx: StateContext<PropertiesStateModel>) {\r\n ctx.patchState({\r\n propertyStatuses: [],\r\n });\r\n }\r\n\r\n @Action(SetPropertiesModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: SetPropertiesModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(SetPropertyTypes)\r\n SetPropertyTypes(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: SetPropertyTypes,\r\n ) {\r\n ctx.patchState({\r\n propertyTypes: action.payload,\r\n });\r\n }\r\n\r\n @Action(SetBreadcrumb)\r\n setBreadcrumb(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: SetBreadcrumb,\r\n ) {\r\n ctx.patchState({\r\n breadcrumbItems: action.items,\r\n });\r\n }\r\n\r\n @Action(SetDefaultViewType)\r\n setDefaultViewType(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: SetDefaultViewType,\r\n ) {\r\n ctx.patchState({\r\n defaultViewType: action.viewType,\r\n });\r\n }\r\n\r\n @Action(CreateProperty)\r\n createProperty(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: CreateProperty,\r\n ) {\r\n const state = ctx.getState();\r\n const moduleType = state.moduleType ?? undefined;\r\n const moduleId = state.moduleId ?? undefined;\r\n const parentPath = state.parentPath ?? '';\r\n\r\n if (!moduleType || moduleId === undefined || moduleId === null) {\r\n console.error('Missing module context for creating property');\r\n return of(null);\r\n }\r\n\r\n const req$ = this.http.post<Response<PropertyItem>>(\r\n `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.Create,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const created = response.data;\r\n if (!created) return {};\r\n\r\n return {\r\n properties: this.adapter.addOne(state.properties, created),\r\n selectedProperty: created,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateProperty)\r\n updateProperty(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: UpdateProperty,\r\n ) {\r\n const state = ctx.getState();\r\n const moduleType = state.moduleType ?? undefined;\r\n const moduleId = state.moduleId ?? undefined;\r\n const parentPath = state.parentPath ?? '';\r\n\r\n if (!moduleType || moduleId === undefined || moduleId === null) {\r\n console.error('Missing module context for updating property');\r\n return of(null);\r\n }\r\n\r\n const req$ = this.http.put<Response<PropertyItem>>(\r\n `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/${action.id}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.Update,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const updated = response.data;\r\n if (!updated) return {};\r\n\r\n return {\r\n properties: this.adapter.upsertOne(state.properties, updated, 'id'),\r\n selectedProperty: updated,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteProperty)\r\n deleteProperty(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: DeleteProperty,\r\n ) {\r\n const req$ = this.http.delete<void>(\r\n `${this.baseUrl}/${encodeURIComponent(String(action.id))}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.Delete,\r\n request$: req$,\r\n onSuccess: (_, state) => {\r\n const remaining = this.adapter.removeOne(\r\n state.properties,\r\n Number(action.id),\r\n 'id',\r\n );\r\n const nextSelected =\r\n state.selectedProperty &&\r\n state.selectedProperty.id === Number(action.id)\r\n ? null\r\n : state.selectedProperty;\r\n\r\n return {\r\n properties: remaining,\r\n selectedProperty: nextSelected,\r\n };\r\n },\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Helper Methods\r\n // ============================================================================\r\n\r\n private mapSchemaToOptions(schema: ApiSchema | null): ApiPropertyOption[] {\r\n if (!schema?.properties) {\r\n return [];\r\n }\r\n\r\n return Object.entries(schema.properties).map(([key, definition]) => {\r\n const typeLabel = definition?.type ? ` | ${definition.type}` : '';\r\n return {\r\n key,\r\n name: `${key}${typeLabel}`,\r\n type: definition?.type,\r\n } as ApiPropertyOption;\r\n });\r\n }\r\n\r\n private buildSchemaFromRecord(\r\n record: Record<string, unknown> | null | undefined,\r\n ): ApiSchema | null {\r\n if (!record) {\r\n return null;\r\n }\r\n\r\n const properties = Object.entries(record).reduce<\r\n Record<string, ApiSchemaProperty>\r\n >((acc, [key, value]) => {\r\n acc[key] = { type: this.inferApiFieldType(value) };\r\n return acc;\r\n }, {});\r\n\r\n return Object.keys(properties).length ? { properties } : null;\r\n }\r\n\r\n private inferApiFieldType(value: unknown): string | undefined {\r\n if (Array.isArray(value)) {\r\n return 'array';\r\n }\r\n\r\n if (value === null) {\r\n return 'null';\r\n }\r\n\r\n switch (typeof value) {\r\n case 'string':\r\n case 'number':\r\n case 'boolean':\r\n return typeof value;\r\n case 'object':\r\n return 'object';\r\n default:\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\nfunction mapCatalogProperty(property: CatalogPropertyDto): PropertyItem {\r\n return {\r\n id: property.id,\r\n key: property.key,\r\n normalizedKey: property.normalizedKey,\r\n viewType: property.viewType,\r\n viewTypeLabel: property.viewTypeName?.display ?? property.viewType,\r\n name: { display: property.label },\r\n order: property.order,\r\n isRequired: property.isRequired,\r\n isSystem: property.isSystem,\r\n isCalculated: property.isCalculated ?? false,\r\n isTranslatable: property.isTranslatable ?? false,\r\n configuration: property.configuration ?? undefined,\r\n };\r\n}\r\n","import { Injectable, computed, inject } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\nimport type { Observable } from 'rxjs';\r\nimport {\r\n PropertiesActionKey,\r\n type ApiTestPayload,\r\n type PropertyStatusOrderPayload,\r\n type PropertyStatusPayload,\r\n} from './properties.model';\r\nimport type { BreadcrumbItem } from '@masterteam/components/breadcrumb';\r\nimport {\r\n CreateProperty,\r\n DeleteProperty,\r\n GetGroups,\r\n GetConfigAsType,\r\n GetLookups,\r\n GetCountries,\r\n TestApiConfiguration,\r\n ResetApiConfiguration,\r\n GetPropertyStatuses,\r\n CreatePropertyStatus,\r\n UpdatePropertyStatus,\r\n DeletePropertyStatus,\r\n ReorderPropertyStatuses,\r\n ResetPropertyStatuses,\r\n GetPropertiesForConfigType,\r\n GetProperties,\r\n GetProperty,\r\n ResetConfigProperties,\r\n ResetConfigScopes,\r\n ResetSelectedProperty,\r\n SetPropertiesModuleInfo,\r\n UpdateProperty,\r\n SetPropertyTypes,\r\n SetBreadcrumb,\r\n SetDefaultViewType,\r\n} from './properties.actions';\r\nimport { PropertiesState } from './properties.state';\r\nimport type {\r\n PropertiesQueryParams,\r\n PropertiesScope,\r\n PropertyPayload,\r\n} from './properties.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PropertiesFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ============================================================================\r\n // Data Selectors - Memoized by NGXS (fine-grained reactivity)\r\n // ============================================================================\r\n readonly list = select(PropertiesState.properties);\r\n readonly propertyTypes = select(PropertiesState.propertyTypes);\r\n readonly selected = select(PropertiesState.selectedProperty);\r\n readonly moduleId = select(PropertiesState.moduleId);\r\n readonly parentModuleId = select(PropertiesState.parentModuleId);\r\n readonly formulaContextKey = select(PropertiesState.formulaContextKey);\r\n readonly lookups = select(PropertiesState.lookups);\r\n readonly configProperties = select(PropertiesState.configTypeProperties);\r\n readonly groups = select(PropertiesState.groups);\r\n readonly configScopes = select(PropertiesState.configScopes);\r\n readonly countries = select(PropertiesState.countries);\r\n readonly apiSchema = select(PropertiesState.apiSchema);\r\n readonly apiProperties = select(PropertiesState.apiProperties);\r\n readonly propertyStatuses = select(PropertiesState.propertyStatuses);\r\n readonly breadcrumbItems = select(PropertiesState.breadcrumbItems);\r\n readonly defaultViewType = select(PropertiesState.defaultViewType);\r\n\r\n // ============================================================================\r\n // Loading/Error Slices - Memoized by NGXS\r\n // ============================================================================\r\n private readonly loadingActive = select(PropertiesState.getLoadingActive);\r\n private readonly errors = select(PropertiesState.getErrors);\r\n\r\n // ============================================================================\r\n // Loading Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly isLoadingAll = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetAll),\r\n );\r\n readonly isLoadingOne = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetOne),\r\n );\r\n readonly isCreating = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.Create),\r\n );\r\n readonly isUpdating = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.Update),\r\n );\r\n readonly isDeleting = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.Delete),\r\n );\r\n readonly isLoadingLookups = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetLookups),\r\n );\r\n readonly isLoadingGroups = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetGroups),\r\n );\r\n readonly isLoadingConfigProperties = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetConfigProperties),\r\n );\r\n readonly isLoadingConfigAsType = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetConfigAsType),\r\n );\r\n readonly isLoadingCountries = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetCountries),\r\n );\r\n readonly isTestingApi = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.TestApiConfiguration),\r\n );\r\n readonly isLoadingPropertyStatuses = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetPropertyStatuses),\r\n );\r\n readonly isCreatingPropertyStatus = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.CreatePropertyStatus),\r\n );\r\n readonly isUpdatingPropertyStatus = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.UpdatePropertyStatus),\r\n );\r\n readonly isDeletingPropertyStatus = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.DeletePropertyStatus),\r\n );\r\n readonly isReorderingPropertyStatuses = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.ReorderPropertyStatuses),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly allError = computed(\r\n () => this.errors()[PropertiesActionKey.GetAll] ?? null,\r\n );\r\n readonly oneError = computed(\r\n () => this.errors()[PropertiesActionKey.GetOne] ?? null,\r\n );\r\n readonly createError = computed(\r\n () => this.errors()[PropertiesActionKey.Create] ?? null,\r\n );\r\n readonly updateError = computed(\r\n () => this.errors()[PropertiesActionKey.Update] ?? null,\r\n );\r\n readonly deleteError = computed(\r\n () => this.errors()[PropertiesActionKey.Delete] ?? null,\r\n );\r\n readonly lookupsError = computed(\r\n () => this.errors()[PropertiesActionKey.GetLookups] ?? null,\r\n );\r\n readonly groupsError = computed(\r\n () => this.errors()[PropertiesActionKey.GetGroups] ?? null,\r\n );\r\n readonly configPropertiesError = computed(\r\n () => this.errors()[PropertiesActionKey.GetConfigProperties] ?? null,\r\n );\r\n readonly configAsTypeError = computed(\r\n () => this.errors()[PropertiesActionKey.GetConfigAsType] ?? null,\r\n );\r\n readonly countriesError = computed(\r\n () => this.errors()[PropertiesActionKey.GetCountries] ?? null,\r\n );\r\n readonly apiTestError = computed(\r\n () => this.errors()[PropertiesActionKey.TestApiConfiguration] ?? null,\r\n );\r\n readonly propertyStatusesError = computed(\r\n () => this.errors()[PropertiesActionKey.GetPropertyStatuses] ?? null,\r\n );\r\n\r\n // ============================================================================\r\n // Derived Data - Computed from data selectors\r\n // ============================================================================\r\n readonly systemProperties = computed(() =>\r\n this.list().filter((property) => Boolean(property.isSystem)),\r\n );\r\n readonly customProperties = computed(() =>\r\n this.list().filter((property) => !Boolean(property.isSystem)),\r\n );\r\n\r\n // ============================================================================\r\n // Action Dispatchers\r\n // ============================================================================\r\n\r\n loadAll(params?: Partial<PropertiesQueryParams>): Observable<unknown> {\r\n return this.store.dispatch(new GetProperties(params));\r\n }\r\n\r\n loadOne(id: string | number, mode: 'edit' = 'edit'): Observable<unknown> {\r\n return this.store.dispatch(new GetProperty(id, mode));\r\n }\r\n\r\n delete(id: string | number): Observable<unknown> {\r\n return this.store.dispatch(new DeleteProperty(id));\r\n }\r\n\r\n create(payload: PropertyPayload): Observable<unknown> {\r\n return this.store.dispatch(new CreateProperty(payload));\r\n }\r\n\r\n update(id: string | number, payload: PropertyPayload): Observable<unknown> {\r\n return this.store.dispatch(new UpdateProperty(id, payload));\r\n }\r\n\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new SetPropertiesModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n setScope(scope: PropertiesScope): Observable<unknown> {\r\n return this.setModuleInfo(\r\n scope.target.type,\r\n scope.target.id,\r\n scope.parent?.type,\r\n scope.parent?.id,\r\n scope.parentPath,\r\n );\r\n }\r\n\r\n loadLookups(): Observable<unknown> {\r\n return this.store.dispatch(new GetLookups());\r\n }\r\n\r\n loadGroups(): Observable<unknown> {\r\n return this.store.dispatch(new GetGroups());\r\n }\r\n\r\n loadConfigAsType(viewType: string): Observable<unknown> {\r\n return this.store.dispatch(new GetConfigAsType(viewType));\r\n }\r\n\r\n loadCountries(): Observable<unknown> {\r\n return this.store.dispatch(new GetCountries());\r\n }\r\n\r\n testApiConfiguration(payload: ApiTestPayload): Observable<unknown> {\r\n return this.store.dispatch(new TestApiConfiguration(payload));\r\n }\r\n\r\n resetApiConfiguration(): Observable<unknown> {\r\n return this.store.dispatch(new ResetApiConfiguration());\r\n }\r\n\r\n loadPropertyStatuses(propertyId: string | number): Observable<unknown> {\r\n return this.store.dispatch(new GetPropertyStatuses(propertyId));\r\n }\r\n\r\n createPropertyStatus(\r\n propertyId: string | number,\r\n payload: PropertyStatusPayload,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(new CreatePropertyStatus(propertyId, payload));\r\n }\r\n\r\n updatePropertyStatus(\r\n propertyId: string | number,\r\n statusId: string | number,\r\n payload: PropertyStatusPayload,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new UpdatePropertyStatus(propertyId, statusId, payload),\r\n );\r\n }\r\n\r\n deletePropertyStatus(\r\n propertyId: string | number,\r\n statusId: string | number,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(new DeletePropertyStatus(propertyId, statusId));\r\n }\r\n\r\n reorderPropertyStatuses(\r\n payload: PropertyStatusOrderPayload,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(new ReorderPropertyStatuses(payload));\r\n }\r\n\r\n resetPropertyStatuses(): Observable<unknown> {\r\n return this.store.dispatch(new ResetPropertyStatuses());\r\n }\r\n\r\n setPropertyTypes(propertyTypes: any) {\r\n return this.store.dispatch(new SetPropertyTypes(propertyTypes));\r\n }\r\n\r\n loadPropertiesForConfigType(\r\n moduleType: string,\r\n moduleId: string | number,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new GetPropertiesForConfigType(moduleType, moduleId),\r\n );\r\n }\r\n\r\n resetSelectedProperty(): Observable<unknown> {\r\n return this.store.dispatch(new ResetSelectedProperty());\r\n }\r\n\r\n resetConfigProperties(): Observable<unknown> {\r\n return this.store.dispatch(new ResetConfigProperties());\r\n }\r\n\r\n resetConfigScopes(): Observable<unknown> {\r\n return this.store.dispatch(new ResetConfigScopes());\r\n }\r\n\r\n setBreadcrumb(items: BreadcrumbItem[]): Observable<unknown> {\r\n return this.store.dispatch(new SetBreadcrumb(items));\r\n }\r\n\r\n setDefaultViewType(viewType: string): Observable<unknown> {\r\n return this.store.dispatch(new SetDefaultViewType(viewType));\r\n }\r\n}\r\n","// store/app.state.ts\r\n\r\nimport { HttpContextToken } from '@angular/common/http';\r\n\r\nexport const REQUEST_CONTEXT = new HttpContextToken<{ useBaseUrl: boolean }>(\r\n () => ({\r\n useBaseUrl: false,\r\n }),\r\n);\r\n","// store/index.ts\r\n// This file exports EVERYTHING - one import for all state needs\r\n\r\n// States\r\n\r\nexport * from './properties/properties.state';\r\nexport * from './properties/properties.model';\r\n\r\n// Actions\r\n\r\nexport * from './properties/properties.actions';\r\n\r\n// Facades\r\n\r\nexport * from './properties/properties.facade';\r\n\r\n// Re-export app state\r\nexport * from './app.state';\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n linkedSignal,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Table, ColumnDef, TableAction } from '@masterteam/components/table';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { PropertiesFacade, PropertyItem } from '../../store';\r\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Divider } from 'primeng/divider';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { finalize } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-properties-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Table,\r\n Breadcrumb,\r\n Card,\r\n Avatar,\r\n Divider,\r\n Button,\r\n TranslocoModule,\r\n Icon,\r\n ],\r\n templateUrl: './properties-list.html',\r\n styleUrl: './properties-list.scss',\r\n})\r\nexport class PropertiesList {\r\n readonly isCalculatedTpl =\r\n viewChild.required<TemplateRef<any>>('isCalculatedTpl');\r\n readonly viewTypeTpl = viewChild.required<TemplateRef<any>>('viewTypeTpl');\r\n\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly router = inject(Router);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly defaultTab = 'all';\r\n\r\n tab = input<string>();\r\n\r\n tabs = linkedSignal(() => {\r\n const systemProperties = this.facade.systemProperties();\r\n if (!systemProperties || systemProperties.length === 0) {\r\n return [];\r\n }\r\n return [\r\n {\r\n label: this.transloco.translate('properties.list.tabAll'),\r\n value: 'all',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.tabSystem'),\r\n value: 'system',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.tabCustom'),\r\n value: 'custom',\r\n },\r\n ];\r\n });\r\n\r\n activeTab = linkedSignal(() => {\r\n return this.tab() || this.defaultTab;\r\n });\r\n\r\n /**\r\n * Curated quick-create cards shown in the empty state only. The Type\r\n * column filter is data-driven (see `viewTypeOptions`) and no longer\r\n * uses this list.\r\n */\r\n propertyTypes = signal([\r\n {\r\n label: this.transloco.translate('properties.list.typeShortText'),\r\n icon: 'editor.type-square',\r\n value: 'Text',\r\n color: 'pink',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.typeParagraph'),\r\n icon: 'editor.line-height',\r\n value: 'LongText',\r\n color: 'sky',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.typeUser'),\r\n icon: 'user.user-01',\r\n value: 'User',\r\n color: 'yellow',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.typeNumber'),\r\n icon: 'editor.letter-spacing-01',\r\n value: 'Number',\r\n color: 'violet',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.typeCurrency'),\r\n icon: 'finance.currency-dollar',\r\n value: 'Currency',\r\n color: 'indigo',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.typeLookup'),\r\n icon: 'custom.list-cards',\r\n value: 'Lookup',\r\n color: 'lime',\r\n },\r\n ]);\r\n\r\n /**\r\n * Type filter options derived from the loaded properties: option value is\r\n * the raw `viewType` (so it matches the `viewType` column key) while the\r\n * label is the localized `viewTypeName` (`viewTypeLabel`). Built from the\r\n * full list — not the tab-filtered data — so options stay stable per tab.\r\n */\r\n readonly viewTypeOptions = computed(() => {\r\n const seen = new Map<string, string>();\r\n for (const property of this.facade.list()) {\r\n if (property.viewType && !seen.has(property.viewType)) {\r\n seen.set(\r\n property.viewType,\r\n property.viewTypeLabel || property.viewType,\r\n );\r\n }\r\n }\r\n return Array.from(seen, ([value, label]) => ({ label, value })).sort(\r\n (a, b) => a.label.localeCompare(b.label),\r\n );\r\n });\r\n\r\n readonly tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'name.display',\r\n label: this.transloco.translate('properties.list.columnName'),\r\n filterConfig: {\r\n type: 'text',\r\n label: this.transloco.translate('properties.list.columnName'),\r\n },\r\n },\r\n {\r\n key: 'viewType',\r\n label: this.transloco.translate('properties.list.columnType'),\r\n type: 'custom',\r\n customCellTpl: this.viewTypeTpl(),\r\n filterConfig: {\r\n type: 'select',\r\n label: this.transloco.translate('properties.list.columnType'),\r\n options: this.viewTypeOptions(),\r\n },\r\n },\r\n {\r\n key: 'isCalculated',\r\n label: this.transloco.translate('properties.list.columnCalculated'),\r\n type: 'custom',\r\n customCellTpl: this.isCalculatedTpl(),\r\n filterConfig: {\r\n type: 'select',\r\n label: this.transloco.translate('properties.list.columnCalculated'),\r\n options: [\r\n {\r\n label: this.transloco.translate('properties.list.yes'),\r\n value: true,\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.no'),\r\n value: false,\r\n },\r\n ],\r\n },\r\n },\r\n ]);\r\n\r\n tableActions = computed<TableAction[]>(() => {\r\n if (this.tableData().length === 0 || this.activeTab() === 'system') {\r\n return [];\r\n }\r\n return [\r\n {\r\n icon: 'general.plus',\r\n label: this.transloco.translate('properties.list.createAction'),\r\n color: 'primary',\r\n action: () => {\r\n this.createProperty();\r\n },\r\n },\r\n ];\r\n });\r\n deletingRowIds = signal<any[]>([]);\r\n readonly rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.transloco.translate('properties.list.deleteAction'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row) => this.deleteRow(row),\r\n hidden: (row: PropertyItem) => !!row.isSystem || row.id < 0,\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n loading: (row: PropertyItem) => this.deletingRowIds().includes(row.id),\r\n },\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.transloco.translate('properties.list.editAction'),\r\n color: 'primary',\r\n action: (row) => this.editRow(row),\r\n hidden: (row: PropertyItem) => row.id < 0,\r\n },\r\n ]);\r\n\r\n readonly loading = this.facade.isLoadingAll;\r\n\r\n readonly tableData = computed(() => {\r\n const tab = this.activeTab();\r\n const allProperties = this.facade.list();\r\n\r\n switch (tab) {\r\n case 'system':\r\n return this.facade.systemProperties();\r\n case 'custom':\r\n return this.facade.customProperties();\r\n case 'all':\r\n default:\r\n return allProperties;\r\n }\r\n });\r\n\r\n readonly breadcrumbItems = this.facade.breadcrumbItems;\r\n\r\n private editRow(row: PropertyItem): void {\r\n if (!row?.id) {\r\n return;\r\n }\r\n this.navigatePreservingTab(['../properties-form', row.id]);\r\n }\r\n\r\n private deleteRow(row: PropertyItem): void {\r\n if (!row?.id) {\r\n return;\r\n }\r\n this.deletingRowIds.update((ids) => [...ids, row.id]);\r\n this.facade\r\n .delete(row.id)\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== row.id),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n }\r\n\r\n createProperty() {\r\n this.navigatePreservingTab(['../properties-form']);\r\n }\r\n\r\n createPropertyWithType(viewType: string) {\r\n this.facade.setDefaultViewType(viewType);\r\n this.createProperty();\r\n }\r\n onTabChange(tab: string): void {\r\n const currentTab = tab;\r\n if (currentTab != this.tab()) {\r\n this.updateTabQueryParam(currentTab);\r\n }\r\n }\r\n private updateTabQueryParam(tab: string): void {\r\n this.router.navigate([], {\r\n relativeTo: this.route,\r\n queryParams: { tab },\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true,\r\n });\r\n }\r\n\r\n private navigatePreservingTab(commands: any[]): void {\r\n this.router.navigate(commands, {\r\n relativeTo: this.route,\r\n queryParams: { tab: this.activeTab() },\r\n queryParamsHandling: 'merge',\r\n });\r\n }\r\n}\r\n","<div class=\"space-y-3\">\r\n <div class=\"flex items-center justify-between\">\r\n <div class=\"space-y-1\">\r\n <h1 class=\"text-xl font-semibold text-slate-900 tracking-tight\">\r\n {{ \"properties.list.pageTitle\" | transloco }}\r\n </h1>\r\n <mt-breadcrumb\r\n [items]=\"breadcrumbItems()\"\r\n [styleClass]=\"'flex justify-center'\"\r\n >\r\n </mt-breadcrumb>\r\n </div>\r\n </div>\r\n <mt-table\r\n [tabs]=\"tabs()\"\r\n [(activeTab)]=\"activeTab\"\r\n (onTabChange)=\"onTabChange($event)\"\r\n [data]=\"tableData()\"\r\n [actions]=\"tableActions()\"\r\n [columns]=\"tableColumns()\"\r\n dataKey=\"id\"\r\n storageKey=\"properties-list-table\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n [loading]=\"loading()\"\r\n >\r\n <ng-template #viewTypeTpl let-row>\r\n <span class=\"text-sm text-slate-700 dark:text-slate-200\">\r\n {{ row.viewTypeLabel || row.viewType }}\r\n </span>\r\n </ng-template>\r\n\r\n <ng-template #isCalculatedTpl let-row>\r\n @if (row.isCalculated) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-blue-50 dark:bg-blue-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"education.calculator\"\r\n class=\"text-blue-600 dark:text-blue-300 text-sm\"\r\n />\r\n <span class=\"text-blue-700 dark:text-blue-200 text-xs font-medium\">\r\n {{ \"properties.list.calculated\" | transloco }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-100 dark:bg-slate-800/50 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.minus-circle\"\r\n class=\"text-slate-500 dark:text-slate-400 text-sm\"\r\n />\r\n <span class=\"text-slate-600 dark:text-slate-300 text-xs font-medium\">\r\n {{ \"properties.list.uncalculated\" | transloco }}\r\n </span>\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #empty>\r\n <div headless class=\"flex-col justify-center items-center w-full p-5\">\r\n <div class=\"content flex flex-col gap-5 items-center text-center mb-5\">\r\n <svg\r\n width=\"152\"\r\n height=\"120\"\r\n viewBox=\"0 0 152 120\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <circle cx=\"76\" cy=\"52\" r=\"52\" fill=\"#E9EAEB\" />\r\n <g filter=\"url(#filter0_ddd_2474_28277)\">\r\n <path\r\n d=\"M77.6 16C66.8273 16 57.2978 21.3233 51.4987 29.4829C49.605 29.0363 47.6301 28.8 45.6 28.8C31.4615 28.8 20 40.2615 20 54.4C20 68.5385 31.4615 80 45.6 80L109.6 80C121.971 80 132 69.9712 132 57.6C132 45.2288 121.971 35.2 109.6 35.2C108.721 35.2 107.854 35.2506 107.002 35.349C102.098 23.9677 90.7797 16 77.6 16Z\"\r\n fill=\"#FAFAFA\"\r\n />\r\n <ellipse\r\n cx=\"45.6\"\r\n cy=\"54.3998\"\r\n rx=\"25.6\"\r\n ry=\"25.6\"\r\n fill=\"url(#paint0_linear_2474_28277)\"\r\n />\r\n <circle\r\n cx=\"77.6016\"\r\n cy=\"48\"\r\n r=\"32\"\r\n fill=\"url(#paint1_linear_2474_28277)\"\r\n />\r\n <ellipse\r\n cx=\"109.599\"\r\n cy=\"57.6002\"\r\n rx=\"22.4\"\r\n ry=\"22.4\"\r\n fill=\"url(#paint2_linear_2474_28277)\"\r\n />\r\n </g>\r\n <circle cx=\"21\" cy=\"19\" r=\"5\" fill=\"#F5F5F5\" />\r\n <circle cx=\"18\" cy=\"109\" r=\"7\" fill=\"#F5F5F5\" />\r\n <circle cx=\"145\" cy=\"35\" r=\"7\" fill=\"#F5F5F5\" />\r\n <circle cx=\"134\" cy=\"8\" r=\"4\" fill=\"#F5F5F5\" />\r\n <foreignObject x=\"44\" y=\"54\" width=\"64\" height=\"64\">\r\n <div\r\n xmlns=\"http://www.w3.org/1999/xhtml\"\r\n style=\"\r\n backdrop-filter: blur(4px);\r\n clip-path: url(#bgblur_0_2474_28277_clip_path);\r\n height: 100%;\r\n width: 100%;\r\n \"\r\n ></div>\r\n </foreignObject>\r\n <g data-figma-bg-blur-radius=\"8\">\r\n <path\r\n d=\"M52 86C52 72.7452 62.7452 62 76 62C89.2548 62 100 72.7452 100 86C100 99.2548 89.2548 110 76 110C62.7452 110 52 99.2548 52 86Z\"\r\n fill=\"#344054\"\r\n fill-opacity=\"0.4\"\r\n />\r\n <path\r\n d=\"M85 95L81.5001 91.5M84 85.5C84 90.1944 80.1944 94 75.5 94C70.8056 94 67 90.1944 67 85.5C67 80.8056 70.8056 77 75.5 77C80.1944 77 84 80.8056 84 85.5Z\"\r\n stroke=\"white\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_ddd_2474_28277\"\r\n x=\"0\"\r\n y=\"16\"\r\n width=\"152\"\r\n height=\"104\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\"\r\n >\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"1.5\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect1_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"3\" />\r\n <feGaussianBlur stdDeviation=\"1.5\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.04 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2474_28277\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect2_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"8\" />\r\n <feGaussianBlur stdDeviation=\"4\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.03 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"effect1_dropShadow_2474_28277\"\r\n result=\"effect2_dropShadow_2474_28277\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect3_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"20\" />\r\n <feGaussianBlur stdDeviation=\"12\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.08 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"effect2_dropShadow_2474_28277\"\r\n result=\"effect3_dropShadow_2474_28277\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in=\"SourceGraphic\"\r\n in2=\"effect3_dropShadow_2474_28277\"\r\n result=\"shape\"\r\n />\r\n </filter>\r\n <clipPath\r\n id=\"bgblur_0_2474_28277_clip_path\"\r\n transform=\"translate(-44 -54)\"\r\n >\r\n <path\r\n d=\"M52 86C52 72.7452 62.7452 62 76 62C89.2548 62 100 72.7452 100 86C100 99.2548 89.2548 110 76 110C62.7452 110 52 99.2548 52 86Z\"\r\n />\r\n </clipPath>\r\n <linearGradient\r\n id=\"paint0_linear_2474_28277\"\r\n x1=\"25.9429\"\r\n y1=\"37.4855\"\r\n x2=\"71.2\"\r\n y2=\"79.9998\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stop-color=\"white\" stop-opacity=\"0\" />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint1_linear_2474_28277\"\r\n x1=\"53.0301\"\r\n y1=\"26.8571\"\r\n x2=\"109.602\"\r\n y2=\"80\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stop-color=\"white\" stop-opacity=\"0\" />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint2_linear_2474_28277\"\r\n x1=\"92.3992\"\r\n y1=\"42.8002\"\r\n x2=\"131.999\"\r\n y2=\"80.0002\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stop-color=\"white\" stop-opacity=\"0\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"text-md text-surface-600\">\r\n {{ \"properties.list.emptyStateNoData\" | transloco }}\r\n </div>\r\n </div>\r\n <div>\r\n <mt-button\r\n [label]=\"'properties.list.addNewProperty' | transloco\"\r\n icon=\"general.plus\"\r\n (click)=\"createProperty()\"\r\n />\r\n </div>\r\n </div>\r\n <p-divider type=\"solid\">\r\n <div class=\"text-lg text-surface-600\">\r\n {{ \"properties.list.emptyStateTemplate\" | transloco }}\r\n </div>\r\n </p-divider>\r\n <div class=\"flex gap-3 mt-5 justify-center\">\r\n @for (card of propertyTypes(); track card.label) {\r\n <mt-card\r\n headless\r\n class=\"w-25 tailwind-4 cursor-pointer\"\r\n style=\"background-color: #fafafa\"\r\n (click)=\"createPropertyWithType(card.value)\"\r\n >\r\n <div class=\"content flex flex-col gap-3 items-center text-center\">\r\n <mt-avatar\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + card.color + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + card.color + '-600)'\"\r\n [icon]=\"card.icon\"\r\n shape=\"square\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"text-xs font-normal\">{{ card.label }}</div>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-table>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n effect,\r\n forwardRef,\r\n inject,\r\n signal,\r\n computed,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormArray,\r\n FormControl,\r\n FormGroup,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ReactiveFormsModule,\r\n ValidationErrors,\r\n Validator,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { TranslocoService, TranslocoModule } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { PropertiesFacade } from '../../../../store';\r\nimport type { ApiConfigurationValue, ApiSchema } from '../../../../store';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\n\r\ntype HeaderFormGroup = FormGroup<{\r\n key: FormControl<string>;\r\n value: FormControl<string>;\r\n}>;\r\n\r\n@Component({\r\n selector: 'mt-api-configuration',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n TextField,\r\n SelectField,\r\n ToggleField,\r\n Button,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './api-configuration.html',\r\n styleUrl: './api-configuration.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ApiConfiguration),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => ApiConfiguration),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class ApiConfiguration implements ControlValueAccessor, Validator {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly destroyRef = inject(DestroyRef);\r\n readonly transloco = inject(TranslocoService);\r\n\r\n private readonly schema = signal<ApiSchema | null>(null);\r\n private lastLoadedPayloadSignature: string | null = null;\r\n private isWriting = false;\r\n private touched = false;\r\n\r\n readonly isTesting = this.facade.isTestingApi;\r\n readonly apiProperties = this.facade.apiProperties;\r\n readonly resolvedApiProperties = computed(() => {\r\n const loadedProperties = this.apiProperties();\r\n if (loadedProperties.length) {\r\n return loadedProperties;\r\n }\r\n\r\n return this.mapSchemaToOptions(this.schema());\r\n });\r\n readonly hasDetectedSchema = computed(\r\n () => this.resolvedApiProperties().length > 0,\r\n );\r\n\r\n readonly form = new FormGroup({\r\n endpoint: new FormControl<string>('', {\r\n nonNullable: true,\r\n validators: [Validators.required],\r\n }),\r\n headers: new FormArray<HeaderFormGroup>([]),\r\n key: new FormControl<string>('', {\r\n nonNullable: true,\r\n validators: [Validators.required],\r\n }),\r\n value: new FormControl<string>('', {\r\n nonNullable: true,\r\n validators: [Validators.required],\r\n }),\r\n supportMultiSelect: new FormControl<boolean>(false, { nonNullable: true }),\r\n });\r\n\r\n private onChange: (value: ApiConfigurationValue | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n private readonly formChanges = toSignal(this.form.valueChanges, {\r\n initialValue: this.form.getRawValue(),\r\n });\r\n\r\n constructor() {\r\n this.facade.resetApiConfiguration();\r\n effect(() => {\r\n this.formChanges();\r\n this.emitValue();\r\n this.onValidatorChange();\r\n });\r\n\r\n effect(() => {\r\n const latestSchema = this.facade.apiSchema();\r\n if (latestSchema !== undefined) {\r\n this.schema.set(latestSchema);\r\n if (!this.isWriting) {\r\n this.emitValue(false);\r\n }\r\n }\r\n });\r\n\r\n this.destroyRef.onDestroy(() => {\r\n this.facade.resetApiConfiguration();\r\n });\r\n }\r\n\r\n get headers(): FormArray<HeaderFormGroup> {\r\n return this.form.controls.headers;\r\n }\r\n\r\n writeValue(value: ApiConfigurationValue | null): void {\r\n this.isWriting = true;\r\n try {\r\n if (!value) {\r\n this.form.reset(\r\n {\r\n endpoint: '',\r\n key: '',\r\n value: '',\r\n supportMultiSelect: false,\r\n },\r\n { emitEvent: false },\r\n );\r\n this.setHeadersFromRecord({});\r\n this.lastLoadedPayloadSignature = null;\r\n this.facade.resetApiConfiguration().subscribe();\r\n this.schema.set(null);\r\n this.touched = false;\r\n return;\r\n }\r\n\r\n this.schema.set(value.schema ?? null);\r\n this.form.patchValue(\r\n {\r\n endpoint: value.endpoint ?? '',\r\n key: value.key ?? '',\r\n value: value.value ?? '',\r\n supportMultiSelect: !!value.supportMultiSelect,\r\n },\r\n { emitEvent: false },\r\n );\r\n this.setHeadersFromRecord(value.headers ?? {});\r\n this.touched = false;\r\n this.loadApiFields(value.endpoint ?? '', value.headers ?? {});\r\n } finally {\r\n this.isWriting = false;\r\n this.emitValue(false);\r\n this.onValidatorChange();\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: ApiConfigurationValue | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n validate(_: AbstractControl): ValidationErrors | null {\r\n return this.form.valid ? null : { apiConfigurationInvalid: true };\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.form.disable({ emitEvent: false });\r\n } else {\r\n this.form.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n addHeader(): void {\r\n this.headers.push(this.createHeaderGroup());\r\n }\r\n\r\n removeHeader(index: number): void {\r\n this.headers.removeAt(index);\r\n this.emitValue();\r\n }\r\n\r\n testApi(): void {\r\n if (!this.form.controls.endpoint.valid) {\r\n this.form.controls.endpoint.markAsTouched();\r\n return;\r\n }\r\n\r\n const headers = this.headersToRecord();\r\n this.loadApiFields(this.form.controls.endpoint.value, headers, true);\r\n }\r\n\r\n private emitValue(triggerTouched = true): void {\r\n if (this.isWriting) {\r\n return;\r\n }\r\n\r\n const headers = this.headersToRecord();\r\n const value: ApiConfigurationValue = {\r\n endpoint: this.form.controls.endpoint.value,\r\n headers,\r\n key: this.form.controls.key.value,\r\n value: this.form.controls.value.value,\r\n supportMultiSelect: this.form.controls.supportMultiSelect.value,\r\n schema: this.schema(),\r\n };\r\n\r\n this.onChange(value);\r\n\r\n if (triggerTouched && !this.touched) {\r\n this.onTouched();\r\n this.touched = true;\r\n }\r\n }\r\n\r\n private createHeaderGroup(\r\n initial: Partial<{ key: string; value: string }> = {},\r\n ): HeaderFormGroup {\r\n return new FormGroup({\r\n key: new FormControl(initial.key ?? '', { nonNullable: true }),\r\n value: new FormControl(initial.value ?? '', { nonNullable: true }),\r\n });\r\n }\r\n\r\n private setHeadersFromRecord(headers: Record<string, string>): void {\r\n while (this.headers.length) {\r\n this.headers.removeAt(0);\r\n }\r\n\r\n Object.entries(headers).forEach(([key, value]) => {\r\n this.headers.push(this.createHeaderGroup({ key, value }));\r\n });\r\n }\r\n\r\n private headersToRecord(): Record<string, string> {\r\n return this.headers.controls.reduce<Record<string, string>>(\r\n (acc, group) => {\r\n const key = group.controls.key.value?.trim();\r\n if (key) {\r\n acc[key] = group.controls.value.value ?? '';\r\n }\r\n return acc;\r\n },\r\n {},\r\n );\r\n }\r\n\r\n private loadApiFields(\r\n endpoint: string,\r\n headers: Record<string, string>,\r\n force = false,\r\n ): void {\r\n const trimmedEndpoint = endpoint.trim();\r\n if (!trimmedEndpoint) {\r\n return;\r\n }\r\n\r\n const payload = {\r\n endpoint: trimmedEndpoint,\r\n headers: Object.keys(headers).length ? headers : undefined,\r\n };\r\n const payloadSignature = JSON.stringify(payload);\r\n if (!force && payloadSignature === this.lastLoadedPayloadSignature) {\r\n return;\r\n }\r\n\r\n this.lastLoadedPayloadSignature = payloadSignature;\r\n this.facade.testApiConfiguration(payload).subscribe();\r\n }\r\n\r\n private mapSchemaToOptions(schema: ApiSchema | null): Array<{\r\n key: string;\r\n name: string;\r\n type?: string;\r\n }> {\r\n if (!schema?.properties) {\r\n return [];\r\n }\r\n\r\n return Object.entries(schema.properties).map(([key, definition]) => {\r\n const typeLabel = definition?.type ? ` | ${definition.type}` : '';\r\n return {\r\n key,\r\n name: `${key}${typeLabel}`,\r\n type: definition?.type,\r\n };\r\n });\r\n }\r\n}\r\n","<div [formGroup]=\"form\" class=\"space-y-6\">\r\n <div class=\"space-y-4 rounded-xl bg-content px-6 py-4 shadow-sm\">\r\n <div class=\"grid items-end gap-3 md:grid-cols-[minmax(0,1fr)_auto]\">\r\n <mt-text-field\r\n formControlName=\"endpoint\"\r\n [label]=\"'properties.form.endpoint' | transloco\"\r\n [placeholder]=\"'properties.form.endpointPlaceholder' | transloco\"\r\n />\r\n <div class=\"flex justify-end gap-2\">\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n icon=\"general.plus\"\r\n [label]=\"'properties.form.addHeader' | transloco\"\r\n (click)=\"addHeader()\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n [label]=\"'properties.form.testApi' | transloco\"\r\n [loading]=\"isTesting()\"\r\n (click)=\"testApi()\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (headers.controls.length) {\r\n <div class=\"space-y-3\">\r\n <div class=\"text-sm font-medium text-surface-500\">\r\n {{ \"properties.form.headers\" | transloco }}\r\n </div>\r\n <div class=\"space-y-3\">\r\n @for (\r\n headerCtrl of headers.controls;\r\n track headerCtrl;\r\n let i = $index\r\n ) {\r\n <div\r\n [formGroup]=\"headerCtrl\"\r\n class=\"grid items-end gap-3 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto]\"\r\n >\r\n <mt-text-field\r\n formControlName=\"key\"\r\n [label]=\"'properties.form.headerKey' | transloco\"\r\n />\r\n <mt-text-field\r\n formControlName=\"value\"\r\n [label]=\"'properties.form.headerValue' | transloco\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n icon=\"general.trash-01\"\r\n (click)=\"removeHeader(i)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n <p class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.noHeadersMessage\" | transloco }}\r\n </p>\r\n }\r\n </div>\r\n\r\n <div class=\"space-y-4 rounded-xl bg-content px-6 py-4 shadow-sm\">\r\n @if (hasDetectedSchema()) {\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-select-field\r\n formControlName=\"key\"\r\n [options]=\"resolvedApiProperties()\"\r\n [showClear]=\"true\"\r\n optionLabel=\"name\"\r\n optionValue=\"key\"\r\n [label]=\"'properties.form.keyField' | transloco\"\r\n />\r\n <mt-select-field\r\n formControlName=\"value\"\r\n [options]=\"resolvedApiProperties()\"\r\n [showClear]=\"true\"\r\n optionLabel=\"name\"\r\n optionValue=\"key\"\r\n [label]=\"'properties.form.valueField' | transloco\"\r\n />\r\n </div>\r\n } @else {\r\n <p class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.messageTestApiPrompt\" | transloco }}\r\n </p>\r\n }\r\n\r\n <div class=\"flex items-center justify-between gap-4\">\r\n <mt-toggle-field\r\n formControlName=\"supportMultiSelect\"\r\n [label]=\"'properties.form.labelSupportMultiSelect' | transloco\"\r\n />\r\n @if (isTesting()) {\r\n <span class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.messageTesting\" | transloco }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n DynamicFormConfig,\r\n PickListFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormGroup,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { PropertiesFacade } from '../../../../store';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { distinctUntilChanged, map, startWith } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-check-list-form-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './check-list-form-configuration.html',\r\n styleUrl: './check-list-form-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class CheckListFormConfiguration implements OnDestroy {\r\n private readonly propertiesFacade = inject(PropertiesFacade);\r\n private readonly controlContainer = inject(ControlContainer);\r\n private readonly parentGroup = this.controlContainer.control as FormGroup;\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly lookups = this.propertiesFacade.lookups;\r\n readonly configScopes = this.propertiesFacade.configScopes;\r\n readonly configProperties = this.propertiesFacade.configProperties;\r\n\r\n readonly configuration = toSignal(\r\n this.parentGroup.valueChanges.pipe(\r\n startWith(this.parentGroup.value),\r\n map((value) => value?.configuration),\r\n distinctUntilChanged(),\r\n ),\r\n { initialValue: this.parentGroup.value?.configuration },\r\n );\r\n\r\n readonly scopeItems = computed(() => {\r\n const scope = this.configScopes()[0];\r\n return scope?.items ?? [];\r\n });\r\n\r\n readonly formConfig = linkedSignal<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass: 'grid grid-cols-1 md:grid-cols-2 gap-3',\r\n fields: [\r\n {\r\n key: 'lookup',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectLookup'),\r\n optionLabel: 'name.display',\r\n optionValue: 'id',\r\n filter: true,\r\n options: this.lookups(),\r\n validators: [ValidatorConfig.required()],\r\n },\r\n {\r\n key: 'scopeId',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectScope'),\r\n optionLabel: 'name',\r\n optionValue: 'id',\r\n options: this.scopeItems(),\r\n filter: true,\r\n validators: [ValidatorConfig.required()],\r\n },\r\n new PickListFieldConfig({\r\n key: 'properties',\r\n cssClass: 'md:col-span-2',\r\n options: this.configProperties(),\r\n optionLabel: 'name.display',\r\n optionValue: 'key',\r\n sourceHeader: this.transloco.translate(\r\n 'properties.form.availableProperties',\r\n ),\r\n targetHeader: this.transloco.translate(\r\n 'properties.form.selectedProperties',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n }),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.lookups().length) {\r\n this.propertiesFacade.loadLookups();\r\n }\r\n });\r\n\r\n effect(() => {\r\n const scopeId = this.configuration()?.scopeId;\r\n if (scopeId) {\r\n const scopeType = this.configScopes()[0]?.scope;\r\n if (scopeType) {\r\n this.propertiesFacade.loadPropertiesForConfigType(scopeType, scopeId);\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.propertiesFacade.resetConfigProperties();\r\n }\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import {\r\n Component,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n linkedSignal,\r\n signal,\r\n} from '@angular/core';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n DynamicFormConfig,\r\n PickListFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormControl,\r\n FormGroup,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { PropertiesFacade } from '../../../../store';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport { distinctUntilChanged, map, startWith } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-entity-list-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './entity-list-configuration.html',\r\n styleUrl: './entity-list-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class EntityListConfiguration implements OnDestroy {\r\n private readonly propertiesFacade = inject(PropertiesFacade);\r\n private readonly controlContainer = inject(ControlContainer);\r\n private readonly parentGroup = this.controlContainer.control as FormGroup;\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly previousModuleId = signal<string | number | null>(null);\r\n\r\n private readonly configurationControl = this.parentGroup.get(\r\n 'configuration',\r\n ) as FormControl<Record<string, unknown> | null>;\r\n\r\n readonly configScopes = this.propertiesFacade.configScopes;\r\n readonly configProperties = this.propertiesFacade.configProperties;\r\n\r\n readonly configuration = toSignal(\r\n this.parentGroup.valueChanges.pipe(\r\n startWith(this.parentGroup.value),\r\n map((value) => value?.configuration),\r\n distinctUntilChanged(),\r\n ),\r\n { initialValue: this.parentGroup.value?.configuration },\r\n );\r\n\r\n readonly moduleItems = computed(() => {\r\n const scope = this.configScopes()[0];\r\n return scope?.items ?? [];\r\n });\r\n\r\n readonly accessModeOptions = [\r\n {\r\n label:\r\n 'Get a module list, with the ability to add, edit, and delete records',\r\n value: 'ReadWrite',\r\n },\r\n {\r\n label: 'View a list of module data',\r\n value: 'Read',\r\n },\r\n {\r\n label: 'Write to some fields using useful module data',\r\n value: 'Write',\r\n },\r\n ];\r\n\r\n private readonly ACCESS_SNAPSHOT_MAP: Record<string, string | null> = {\r\n ReadWrite: 'Realtime',\r\n Read: 'Realtime',\r\n Write: null,\r\n };\r\n\r\n readonly formConfig = linkedSignal<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass: 'grid grid-cols-1 md:grid-cols-2 gap-3',\r\n fields: [\r\n {\r\n key: 'moduleId',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectScope'),\r\n optionLabel: 'name',\r\n optionValue: 'id',\r\n options: this.moduleItems(),\r\n filter: true,\r\n validators: [ValidatorConfig.required()],\r\n },\r\n {\r\n key: 'access',\r\n type: 'select',\r\n label: 'Access',\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n options: this.accessModeOptions,\r\n validators: [ValidatorConfig.required()],\r\n },\r\n new PickListFieldConfig({\r\n key: 'readFields',\r\n cssClass: 'md:col-span-2',\r\n options: this.configProperties(),\r\n optionLabel: 'name.display',\r\n optionValue: 'key',\r\n sourceHeader: 'Available Read Fields',\r\n targetHeader: 'Selected Read Fields',\r\n validators: [ValidatorConfig.required()],\r\n }),\r\n new PickListFieldConfig({\r\n key: 'writeFields',\r\n cssClass: 'md:col-span-2',\r\n options: this.configProperties(),\r\n optionLabel: 'name.display',\r\n optionValue: 'key',\r\n sourceHeader: 'Available Write Fields',\r\n targetHeader: 'Selected Write Fields',\r\n validators: [ValidatorConfig.required()],\r\n relations: [\r\n { action: 'show', key: 'access', value: 'Write' },\r\n { action: 'show', key: 'access', value: 'ReadWrite' },\r\n ],\r\n }),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n this.applyEntityListDefaults();\r\n this.loadModuleProperties();\r\n this.syncSnapshotMode();\r\n }\r\n\r\n private applyEntityListDefaults() {\r\n const config = this.configurationControl.value;\r\n if (config) return;\r\n\r\n this.configurationControl.setValue(\r\n {\r\n moduleId: 0,\r\n access: 'ReadWrite',\r\n snapshotMode: 'Realtime',\r\n readFields: [],\r\n writeFields: [],\r\n },\r\n { emitEvent: true },\r\n );\r\n }\r\n\r\n private loadModuleProperties() {\r\n effect(() => {\r\n const config = this.configuration();\r\n const moduleId = config?.moduleId;\r\n if (!moduleId || moduleId === this.previousModuleId()) {\r\n return;\r\n }\r\n\r\n const scopeType = this.configScopes()[0]?.scope;\r\n if (!scopeType) {\r\n return;\r\n }\r\n\r\n this.previousModuleId.set(moduleId);\r\n this.propertiesFacade.loadPropertiesForConfigType(scopeType, moduleId);\r\n });\r\n }\r\n\r\n private syncSnapshotMode() {\r\n this.configurationControl.valueChanges\r\n .pipe(\r\n map(\r\n (v) =>\r\n (v as Record<string, unknown> | null)?.['access'] as\r\n | string\r\n | undefined,\r\n ),\r\n distinctUntilChanged(),\r\n takeUntilDestroyed(),\r\n )\r\n .subscribe((access) => {\r\n if (!access) return;\r\n const snapshotMode = this.ACCESS_SNAPSHOT_MAP[access] ?? null;\r\n const current =\r\n ((this.configurationControl.value ?? {}) as Record<string, unknown>)[\r\n 'snapshotMode'\r\n ] ?? null;\r\n if (snapshotMode === current) return;\r\n this.configurationControl.patchValue(\r\n { ...(this.configurationControl.value ?? {}), snapshotMode },\r\n { emitEvent: false, emitModelToViewChange: false },\r\n );\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.propertiesFacade.resetConfigProperties();\r\n }\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import { Component, computed, effect, inject } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig, ValidatorConfig } from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { PropertiesFacade } from '../../../../store';\r\n\r\n@Component({\r\n selector: 'mt-location-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './location-configuration.html',\r\n styleUrl: './location-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class LocationConfiguration {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n readonly countries = this.facade.countries;\r\n private readonly activeLang = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n\r\n readonly formConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass:\r\n 'grid grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)] gap-3',\r\n fields: [\r\n {\r\n key: 'country',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectCountry'),\r\n optionLabel: this.activeLang() === 'ar' ? 'name_ar' : 'name',\r\n optionValue: 'name',\r\n options: this.countries(),\r\n filter: true,\r\n validators: [ValidatorConfig.required()],\r\n },\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.countries().length) {\r\n this.facade.loadCountries();\r\n }\r\n });\r\n }\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import { Component, computed, effect, inject } from '@angular/core';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig, ValidatorConfig } from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { PropertiesFacade } from '../../../../store';\r\n\r\n@Component({\r\n selector: 'mt-lookup-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './lookup-configuration.html',\r\n styleUrl: './lookup-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class LookupConfiguration {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n readonly lookups = this.facade.lookups;\r\n\r\n readonly formConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass:\r\n 'grid grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)] gap-3',\r\n fields: [\r\n {\r\n key: 'lookup',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectLookup'),\r\n optionLabel: 'name.display',\r\n optionValue: 'id',\r\n options: this.lookups(),\r\n filter: true,\r\n validators: [ValidatorConfig.required()],\r\n },\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.lookups().length) {\r\n this.facade.loadLookups();\r\n }\r\n });\r\n }\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import { Component, inject, signal } from '@angular/core';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig } from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\n@Component({\r\n selector: 'mt-percentage-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './percentage-configuration.html',\r\n styleUrl: './percentage-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class PercentageConfiguration {\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly formConfig = signal<DynamicFormConfig>({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass:\r\n 'grid grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)] gap-3',\r\n fields: [\r\n {\r\n key: 'color',\r\n type: 'color-picker',\r\n label: this.transloco.translate('properties.form.selectColor'),\r\n },\r\n ],\r\n },\r\n ],\r\n });\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport {\r\n ColorPickerFieldConfig,\r\n DynamicFormConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n FormulaBuilder,\r\n type FormulaBuilderValue,\r\n} from '@masterteam/formula-builder';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport {\r\n PropertiesFacade,\r\n type PropertyStatusItem,\r\n type PropertyStatusPayload,\r\n} from '../../../../../store';\r\nimport { map, startWith } from 'rxjs';\r\n\r\ninterface StatusTranslatableValue {\r\n en: string;\r\n ar: string;\r\n}\r\n\r\ninterface StatusFormValue {\r\n display: StatusTranslatableValue;\r\n description: StatusTranslatableValue;\r\n type: string;\r\n color: string;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-status-item-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n DynamicForm,\r\n FormulaBuilder,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './status-item-form.html',\r\n})\r\nexport class StatusItemForm {\r\n readonly modal = inject(ModalService);\r\n readonly ref = inject(ModalRef);\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly propertyId = input.required<number>();\r\n readonly contextKey = input<string | undefined>(undefined);\r\n readonly levelSchemaId = input<number | undefined>(undefined);\r\n readonly moduleId = input<number | undefined>(undefined);\r\n readonly statusData = input<PropertyStatusItem | null>(null);\r\n\r\n readonly editMode = computed(() => !!this.statusData());\r\n readonly isSubmitting = computed(() =>\r\n this.editMode()\r\n ? this.facade.isUpdatingPropertyStatus()\r\n : this.facade.isCreatingPropertyStatus(),\r\n );\r\n readonly buttonLabel = computed(() =>\r\n this.editMode()\r\n ? this.transloco.translate('properties.form.statusUpdateButton')\r\n : this.transloco.translate('properties.form.statusCreateButton'),\r\n );\r\n readonly cancelLabel = computed(() =>\r\n this.transloco.translate('properties.form.cancelButton'),\r\n );\r\n\r\n readonly statusFormConfig = linkedSignal<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'statusItemForm',\r\n type: 'header',\r\n columns: 12,\r\n fields: [\r\n {\r\n key: 'display.en',\r\n colSpan: 6,\r\n label: this.transloco.translate(\r\n 'properties.form.statusEnglishDisplay',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n },\r\n {\r\n key: 'display.ar',\r\n colSpan: 6,\r\n label: this.transloco.translate(\r\n 'properties.form.statusArabicDisplay',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n },\r\n {\r\n key: 'description.en',\r\n type: 'textarea',\r\n colSpan: 6,\r\n label: this.transloco.translate(\r\n 'properties.form.statusEnglishDescription',\r\n ),\r\n },\r\n {\r\n key: 'description.ar',\r\n type: 'textarea',\r\n colSpan: 6,\r\n label: this.transloco.translate(\r\n 'properties.form.statusArabicDescription',\r\n ),\r\n },\r\n {\r\n key: 'type',\r\n type: 'select',\r\n colSpan: 6,\r\n label: this.transloco.translate('properties.form.statusType'),\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n options: [\r\n {\r\n label: this.transloco.translate(\r\n 'properties.form.statusTypePerformance',\r\n ),\r\n value: 'Performance',\r\n },\r\n {\r\n label: this.transloco.translate(\r\n 'properties.form.statusTypeNonePerformance',\r\n ),\r\n value: 'NonePerformance',\r\n },\r\n ],\r\n },\r\n new ColorPickerFieldConfig({\r\n key: 'color',\r\n colSpan: 6,\r\n label: this.transloco.translate('properties.form.statusColor'),\r\n }),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n readonly statusFormControl = new FormControl<StatusFormValue>(\r\n {\r\n display: {\r\n en: '',\r\n ar: '',\r\n },\r\n description: {\r\n en: '',\r\n ar: '',\r\n },\r\n type: 'Performance',\r\n color: '#64748b',\r\n },\r\n { nonNullable: true },\r\n );\r\n readonly formulaControl = new FormControl<FormulaBuilderValue | null>(null);\r\n readonly statusType = toSignal(\r\n this.statusFormControl.valueChanges.pipe(\r\n startWith(this.statusFormControl.value),\r\n map((value) => value?.type ?? 'Performance'),\r\n ),\r\n {\r\n initialValue: this.statusFormControl.value?.type ?? 'Performance',\r\n },\r\n );\r\n readonly showFormula = computed(() => this.statusType() === 'Performance');\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.showFormula()) {\r\n this.formulaControl.setValidators(Validators.required);\r\n } else {\r\n this.formulaControl.clearValidators();\r\n }\r\n\r\n this.formulaControl.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n effect(() => {\r\n const status = this.statusData();\r\n if (!status) {\r\n this.statusFormControl.patchValue(\r\n {\r\n display: {\r\n en: '',\r\n ar: '',\r\n },\r\n description: {\r\n en: '',\r\n ar: '',\r\n },\r\n type: 'Performance',\r\n color: '#64748b',\r\n },\r\n {\r\n emitEvent: false,\r\n },\r\n );\r\n this.formulaControl.patchValue(null, {\r\n emitEvent: false,\r\n });\r\n return;\r\n }\r\n\r\n this.statusFormControl.patchValue(\r\n {\r\n display: {\r\n en: status.display?.['en'] ?? '',\r\n ar: status.display?.['ar'] ?? '',\r\n },\r\n description: {\r\n en: status.description?.['en'] ?? '',\r\n ar: status.description?.['ar'] ?? '',\r\n },\r\n type: status.type ?? 'Performance',\r\n color: status.color ?? '#64748b',\r\n },\r\n { emitEvent: false },\r\n );\r\n this.formulaControl.patchValue(\r\n status.formula as FormulaBuilderValue | null,\r\n {\r\n emitEvent: false,\r\n },\r\n );\r\n });\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.statusFormControl.invalid || this.isSubmitting()) {\r\n this.statusFormControl.markAllAsTouched();\r\n return;\r\n }\r\n\r\n if (this.showFormula() && this.formulaControl.invalid) {\r\n this.formulaControl.markAsTouched();\r\n return;\r\n }\r\n\r\n const value = this.statusFormControl.value;\r\n const payload: PropertyStatusPayload = {\r\n type: value.type,\r\n display: value.display as unknown as Record<string, string>,\r\n description: value.description as unknown as Record<string, string>,\r\n color: value.color,\r\n formula: this.showFormula() ? this.formulaControl.value : null,\r\n };\r\n\r\n const request$ =\r\n this.editMode() && this.statusData()\r\n ? this.facade.updatePropertyStatus(\r\n this.propertyId(),\r\n this.statusData()!.id,\r\n payload,\r\n )\r\n : this.facade.createPropertyStatus(this.propertyId(), payload);\r\n\r\n request$.subscribe(() => {\r\n this.ref.close({ success: true });\r\n });\r\n }\r\n}\r\n","<div\r\n [class]=\"\r\n 'flex max-h-[75vh] flex-col gap-4 overflow-y-auto p-4 my-4 ' +\r\n modal.contentClass\r\n \"\r\n>\r\n <form class=\"space-y-6\">\r\n <mt-dynamic-form\r\n class=\"block\"\r\n [formConfig]=\"statusFormConfig()\"\r\n [formControl]=\"statusFormControl\"\r\n />\r\n\r\n @if (showFormula()) {\r\n <div class=\"rounded-xl border border-surface-200 bg-content px-4 py-4\">\r\n <div class=\"mb-3 font-medium text-surface-700\">\r\n {{ \"properties.form.statusFormula\" | transloco }}\r\n <span class=\"text-red-500 dark:text-red-600\" aria-hidden=\"true\"\r\n >*</span\r\n >\r\n </div>\r\n\r\n <mt-formula-builder\r\n [formControl]=\"formulaControl\"\r\n [contextKey]=\"contextKey()\"\r\n [levelSchemaId]=\"levelSchemaId()\"\r\n [moduleId]=\"moduleId()\"\r\n />\r\n </div>\r\n }\r\n </form>\r\n</div>\r\n\r\n<div [class]=\"modal.footerClass\" class=\"mt-7\">\r\n <mt-button [label]=\"cancelLabel()\" variant=\"outlined\" (click)=\"ref.close()\" />\r\n <mt-button\r\n [label]=\"buttonLabel()\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"isSubmitting()\"\r\n [disabled]=\"\r\n statusFormControl.invalid ||\r\n (showFormula() && formulaControl.invalid) ||\r\n isSubmitting()\r\n \"\r\n />\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n OnDestroy,\r\n TemplateRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n linkedSignal,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { finalize } from 'rxjs';\r\nimport { PropertiesFacade, type PropertyStatusItem } from '../../../../store';\r\nimport { StatusItemForm } from './status-item-form/status-item-form';\r\n\r\n@Component({\r\n selector: 'mt-status-configuration',\r\n standalone: true,\r\n imports: [CommonModule, Card, Table, TranslocoModule],\r\n templateUrl: './status-configuration.html',\r\n})\r\nexport class StatusConfiguration implements OnDestroy {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly modalService = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly lastLoadedPropertyId = signal<number | null>(null);\r\n\r\n readonly colorTpl = viewChild.required<TemplateRef<any>>('colorTpl');\r\n\r\n readonly propertyId = input<string | number | null>(null);\r\n readonly contextKey = input<string | undefined>(undefined);\r\n readonly levelSchemaId = input<number | undefined>(undefined);\r\n readonly moduleId = input<number | undefined>(undefined);\r\n\r\n readonly deletingRowIds = signal<number[]>([]);\r\n readonly statuses = computed(() =>\r\n [...this.facade.propertyStatuses()].sort((left, right) => {\r\n const leftOrder = left.order ?? Number.MAX_SAFE_INTEGER;\r\n const rightOrder = right.order ?? Number.MAX_SAFE_INTEGER;\r\n\r\n if (leftOrder !== rightOrder) {\r\n return leftOrder - rightOrder;\r\n }\r\n\r\n return left.id - right.id;\r\n }),\r\n );\r\n readonly loading = this.facade.isLoadingPropertyStatuses;\r\n readonly reordering = this.facade.isReorderingPropertyStatuses;\r\n readonly resolvedPropertyId = computed(() =>\r\n this.normalizePropertyId(this.propertyId()),\r\n );\r\n readonly canManageStatuses = computed(() => !!this.resolvedPropertyId());\r\n\r\n readonly tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'display.en',\r\n label: this.transloco.translate('properties.form.statusColumnDisplay'),\r\n },\r\n {\r\n key: 'type',\r\n label: this.transloco.translate('properties.form.statusColumnType'),\r\n },\r\n {\r\n key: 'color',\r\n label: this.transloco.translate('properties.form.statusColumnColor'),\r\n type: 'custom',\r\n customCellTpl: this.colorTpl(),\r\n },\r\n ]);\r\n\r\n readonly tableActions = computed<TableAction[]>(() => {\r\n if (!this.canManageStatuses()) {\r\n return [];\r\n }\r\n\r\n return [\r\n {\r\n icon: 'general.plus',\r\n label: this.transloco.translate('properties.form.statusAddAction'),\r\n color: 'primary',\r\n action: () => this.openStatusDialog(),\r\n },\r\n ];\r\n });\r\n\r\n readonly rowActions = computed<TableAction[]>(() => {\r\n const propertyId = this.resolvedPropertyId();\r\n if (!propertyId) {\r\n return [];\r\n }\r\n\r\n return [\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.transloco.translate('properties.form.statusEditAction'),\r\n color: 'primary',\r\n action: (row) => this.openStatusDialog(row as PropertyStatusItem),\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.transloco.translate('properties.form.statusDeleteAction'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row) => this.deleteStatus(row as PropertyStatusItem),\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n loading: (row) =>\r\n this.deletingRowIds().includes((row as PropertyStatusItem).id),\r\n },\r\n ];\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const propertyId = this.resolvedPropertyId();\r\n if (!propertyId) {\r\n this.lastLoadedPropertyId.set(null);\r\n this.facade.resetPropertyStatuses().subscribe();\r\n return;\r\n }\r\n\r\n if (this.lastLoadedPropertyId() === propertyId) {\r\n return;\r\n }\r\n\r\n this.lastLoadedPropertyId.set(propertyId);\r\n this.facade.resetPropertyStatuses().subscribe();\r\n this.facade.loadPropertyStatuses(propertyId).subscribe();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.facade.resetPropertyStatuses().subscribe();\r\n }\r\n\r\n private openStatusDialog(statusData: PropertyStatusItem | null = null): void {\r\n const propertyId = this.resolvedPropertyId();\r\n if (!propertyId) {\r\n return;\r\n }\r\n\r\n this.modalService.openModal(StatusItemForm, 'dialog', {\r\n header: statusData\r\n ? this.transloco.translate('properties.form.statusEditTitle')\r\n : this.transloco.translate('properties.form.statusCreateTitle'),\r\n styleClass: '!w-[72vw] max-w-6xl',\r\n appendTo: 'body',\r\n dismissableMask: true,\r\n inputValues: {\r\n propertyId,\r\n contextKey: this.contextKey(),\r\n levelSchemaId: this.levelSchemaId(),\r\n moduleId: this.moduleId(),\r\n statusData,\r\n },\r\n });\r\n }\r\n\r\n private deleteStatus(status: PropertyStatusItem): void {\r\n const propertyId = this.resolvedPropertyId();\r\n if (!propertyId || !status?.id) {\r\n return;\r\n }\r\n\r\n this.deletingRowIds.update((ids) => [...ids, status.id]);\r\n this.facade\r\n .deletePropertyStatus(propertyId, status.id)\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== status.id),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n }\r\n\r\n onRowReorder(event: { value?: PropertyStatusItem[] }): void {\r\n const reordered = Array.isArray(event.value)\r\n ? event.value\r\n : this.statuses();\r\n const orders = reordered.map((status, index) => ({\r\n statusId: status.id,\r\n order: index + 1,\r\n }));\r\n\r\n this.facade.reorderPropertyStatuses({ orders }).subscribe();\r\n }\r\n\r\n private normalizePropertyId(\r\n value: string | number | null | undefined,\r\n ): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const parsed = typeof value === 'string' ? Number(value) : value;\r\n return Number.isFinite(parsed) ? parsed : null;\r\n }\r\n}\r\n","<mt-card [title]=\"'properties.form.statusesSection' | transloco\">\r\n @if (canManageStatuses()) {\r\n <mt-table\r\n [data]=\"statuses()\"\r\n [columns]=\"tableColumns()\"\r\n [actions]=\"tableActions()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"true\"\r\n [loading]=\"loading()\"\r\n [updating]=\"reordering()\"\r\n [reorderableRows]=\"true\"\r\n dataKey=\"id\"\r\n storageKey=\"properties-status-configuration-table\"\r\n (rowReorder)=\"onRowReorder($event)\"\r\n >\r\n <ng-template #colorTpl let-row>\r\n @if (row.color) {\r\n <span\r\n class=\"inline-block h-5 w-5 rounded-full border border-surface-300\"\r\n [style.background-color]=\"row.color\"\r\n [title]=\"row.color\"\r\n ></span>\r\n } @else {\r\n <span class=\"text-surface-400\">—</span>\r\n }\r\n </ng-template>\r\n </mt-table>\r\n } @else {\r\n <div\r\n class=\"rounded-xl border border-dashed border-surface-300 bg-surface-50 px-4 py-6 text-sm text-surface-600\"\r\n >\r\n {{ \"properties.form.statusesSavePrompt\" | transloco }}\r\n </div>\r\n }\r\n</mt-card>\r\n","import { Component, computed, effect, inject } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig } from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormControl,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { EMPTY } from 'rxjs';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { PropertiesFacade } from '../../../../store';\r\n\r\n@Component({\r\n selector: 'mt-user-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './user-configuration.html',\r\n styleUrl: './user-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class UserConfiguration {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly formGroupDirective = inject(FormGroupDirective);\r\n readonly groups = this.facade.groups;\r\n private readonly moduleId = this.facade.moduleId;\r\n private readonly parentModuleId = this.facade.parentModuleId;\r\n\r\n private readonly isInsideModule = computed(\r\n () => this.moduleId() != null && this.parentModuleId() != null,\r\n );\r\n\r\n private readonly ctrl = this.formGroupDirective.form?.get(\r\n 'configuration',\r\n ) as FormControl | null;\r\n\r\n private readonly configValue = toSignal(this.ctrl?.valueChanges ?? EMPTY, {\r\n initialValue: this.ctrl?.value ?? null,\r\n });\r\n\r\n private readonly justTeamMembers = computed(\r\n () => !!this.configValue()?.['justTeamMembers'],\r\n );\r\n\r\n readonly formConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass:\r\n 'grid grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)] gap-3',\r\n fields: [\r\n {\r\n key: 'group',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectGroup'),\r\n optionLabel: 'name.display',\r\n optionValue: 'id',\r\n options: this.groups(),\r\n filter: true,\r\n showClear: true,\r\n relations: [\r\n { key: 'justTeamMembers', value: true, action: 'disable' },\r\n ],\r\n },\r\n ...(this.isInsideModule()\r\n ? [\r\n {\r\n key: 'justTeamMembers',\r\n type: 'toggle',\r\n cssClass: 'mt-8',\r\n label: this.transloco.translate(\r\n 'properties.form.justTeamMembers',\r\n ),\r\n },\r\n ]\r\n : []),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.groups().length) {\r\n this.facade.loadGroups();\r\n }\r\n });\r\n\r\n // Clear group value whenever justTeamMembers is enabled\r\n effect(() => {\r\n if (this.justTeamMembers()) {\r\n const ctrl = this.ctrl;\r\n if (ctrl) {\r\n const current = ctrl.value ?? {};\r\n if (current.group != null) {\r\n ctrl.patchValue({ ...current, group: null }, { emitEvent: false });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import { Component, inject, signal } from '@angular/core';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n DynamicFormConfig,\r\n PickListFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\nexport const ATTACHMENT_ACCEPT = [\r\n {\r\n key: 'image/*',\r\n name: 'image',\r\n },\r\n {\r\n key: 'application/pdf',\r\n name: 'pdf',\r\n },\r\n {\r\n key: '.mpp',\r\n name: 'mpp',\r\n },\r\n {\r\n key: '.xer',\r\n name: 'xer',\r\n },\r\n {\r\n key: '.eml',\r\n name: 'eml',\r\n },\r\n {\r\n key: '.doc',\r\n name: 'doc',\r\n },\r\n {\r\n key: '.docx',\r\n name: 'docx',\r\n },\r\n {\r\n key: '.ppt',\r\n name: 'ppt',\r\n },\r\n {\r\n key: '.pptx',\r\n name: 'pptx',\r\n },\r\n {\r\n key: '.xls',\r\n name: 'xls',\r\n },\r\n {\r\n key: '.xlsx',\r\n name: 'xlsx',\r\n },\r\n {\r\n key: '.csv',\r\n name: 'csv',\r\n },\r\n {\r\n key: '.mp4',\r\n name: 'mp4',\r\n },\r\n {\r\n key: '.mov',\r\n name: 'mov',\r\n },\r\n {\r\n key: '.wmv',\r\n name: 'wmv',\r\n },\r\n {\r\n key: '.avi',\r\n name: 'avi',\r\n },\r\n {\r\n key: '.mkv',\r\n name: 'mkv',\r\n },\r\n {\r\n key: '.msg',\r\n name: 'msg',\r\n },\r\n {\r\n key: '.zip',\r\n name: 'zip',\r\n },\r\n {\r\n key: '.rar',\r\n name: 'rar',\r\n },\r\n {\r\n key: '.7z',\r\n name: '7z',\r\n },\r\n {\r\n key: '.gz',\r\n name: 'gz',\r\n },\r\n {\r\n key: '.gzip',\r\n name: 'gzip',\r\n },\r\n];\r\n\r\n@Component({\r\n selector: 'mt-attachment-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './attachment-configuration.html',\r\n styleUrl: './attachment-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class AttachmentConfiguration {\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly formConfig = signal<DynamicFormConfig>({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass: 'grid grid-cols-1 md:grid-cols-2 gap-3',\r\n fields: [\r\n new PickListFieldConfig({\r\n key: 'AcceptTypes',\r\n options: ATTACHMENT_ACCEPT,\r\n optionLabel: 'name',\r\n optionValue: 'key',\r\n sourceHeader: this.transloco.translate(\r\n 'properties.form.availableTypes',\r\n ),\r\n targetHeader: this.transloco.translate(\r\n 'properties.form.selectedTypes',\r\n ),\r\n showSourceControls: false,\r\n cssClass: 'md:col-span-2',\r\n validators: [ValidatorConfig.required()],\r\n }),\r\n {\r\n key: 'IsMulitple',\r\n type: 'toggle',\r\n label: this.transloco.translate('properties.form.allowMultiple'),\r\n },\r\n ],\r\n },\r\n ],\r\n });\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import { switchMap, type Observable } from 'rxjs';\r\n\r\nimport type { PropertiesScope } from '../../store/properties/properties.model';\r\n\r\nexport interface PropertyFormRequestOperations {\r\n setScope(scope: PropertiesScope): Observable<unknown>;\r\n loadOne(propertyId: string): Observable<unknown>;\r\n}\r\n\r\nexport function createPropertyFormRequest(\r\n operations: PropertyFormRequestOperations,\r\n scope: PropertiesScope | null,\r\n propertyId: string,\r\n): Observable<unknown> | null {\r\n if (scope) {\r\n const scopeRequest$ = operations.setScope(scope);\r\n return propertyId\r\n ? scopeRequest$.pipe(switchMap(() => operations.loadOne(propertyId)))\r\n : scopeRequest$;\r\n }\r\n\r\n return propertyId ? operations.loadOne(propertyId) : null;\r\n}\r\n","import {\r\n Component,\r\n ComponentRef,\r\n ElementRef,\r\n EnvironmentInjector,\r\n OnDestroy,\r\n Type,\r\n ViewChild,\r\n ViewContainerRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n linkedSignal,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\n\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Page } from '@masterteam/components/page';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig, ValidatorConfig } from '@masterteam/components';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport {\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { TranslocoService, TranslocoModule } from '@jsverse/transloco';\r\nimport {\r\n FormulaBuilder,\r\n type FormulaBuilderValue,\r\n} from '@masterteam/formula-builder';\r\nimport { ApiConfiguration } from './configuration-types/api-configuration/api-configuration';\r\nimport { CheckListFormConfiguration } from './configuration-types/check-list-form-configuration/check-list-form-configuration';\r\nimport { EntityListConfiguration } from './configuration-types/entity-list-configuration/entity-list-configuration';\r\nimport { LocationConfiguration } from './configuration-types/location-configuration/location-configuration';\r\nimport { LookupConfiguration } from './configuration-types/lookup-configuration/lookup-configuration';\r\nimport { PercentageConfiguration } from './configuration-types/percentage-configuration/percentage-configuration';\r\nimport { StatusConfiguration } from './configuration-types/status-configuration/status-configuration';\r\nimport { UserConfiguration } from './configuration-types/user-configuration/user-configuration';\r\nimport {\r\n buildPropertiesScopeContextKey,\r\n PropertyItem,\r\n PropertyPayload,\r\n PropertiesScope,\r\n} from '../../store/properties/properties.model';\r\nimport { AttachmentConfiguration } from './configuration-types/attachment-configuration/attachment-configuration';\r\nimport { PropertiesFacade } from '../../store';\r\nimport { createPropertyFormRequest } from './property-form-request';\r\n\r\n@Component({\r\n selector: 'mt-property-form',\r\n imports: [\r\n Page,\r\n Button,\r\n Card,\r\n DynamicForm,\r\n ReactiveFormsModule,\r\n FormulaBuilder,\r\n ApiConfiguration,\r\n CheckListFormConfiguration,\r\n EntityListConfiguration,\r\n LocationConfiguration,\r\n LookupConfiguration,\r\n PercentageConfiguration,\r\n StatusConfiguration,\r\n UserConfiguration,\r\n AttachmentConfiguration,\r\n SkeletonModule,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './property-form.html',\r\n styleUrl: './property-form.scss',\r\n})\r\nexport class PropertyForm implements OnDestroy {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly router = inject(Router);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n\r\n private readonly activeLang = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n\r\n propertyId = input<string>('');\r\n readonly scope = input<PropertiesScope | null>(null);\r\n\r\n private readonly propertyTypes = this.facade.propertyTypes;\r\n private readonly legacyReplacedViewTypes = [\r\n 'DynamicList',\r\n 'EditableListView',\r\n 'InternalModule',\r\n ];\r\n private readonly calculatedToggleViewTypes = [\r\n 'Text',\r\n 'LongText',\r\n 'Percentage',\r\n 'Date',\r\n 'Currency',\r\n 'Number',\r\n 'Checkbox',\r\n 'Time',\r\n 'PhaseGate',\r\n ];\r\n /**\r\n * View types whose value is always produced by a formula — the backend owns\r\n * the value and nothing in the runtime writes it back. The Calculated toggle\r\n * is still rendered (it is what reveals the formula card) but is pinned on\r\n * and locked: authoring the formula is the only thing left to the user, on\r\n * create and on edit alike, whether or not the property is a system one.\r\n */\r\n private readonly alwaysCalculatedViewTypes = ['PhaseGate'];\r\n private readonly translatableToggleViewTypes = ['Text', 'LongText'];\r\n\r\n submitLabel = computed(() =>\r\n this.propertyId()\r\n ? this.transloco.translate('properties.form.updateButton')\r\n : this.transloco.translate('properties.form.createButton'),\r\n );\r\n isEditing = computed(() => !!this.propertyId());\r\n\r\n // Keep your original structure: \"main\" is a FormControl<any>, \"configuration\" is FormControl<any|null>\r\n readonly propertyForm = new FormGroup({\r\n main: new FormControl<any>({\r\n isCalculated: false,\r\n isTranslatable: false,\r\n viewType: null,\r\n name: { ar: '', en: '' },\r\n description: { ar: '', en: '' },\r\n }),\r\n configuration: new FormControl<any | null>(null),\r\n formula: new FormControl<FormulaBuilderValue | null>(null),\r\n });\r\n\r\n private readonly mainControl = this.propertyForm.get(\r\n 'main',\r\n ) as FormControl<any>;\r\n private readonly configurationControl = this.propertyForm.get(\r\n 'configuration',\r\n ) as FormControl<any | null>;\r\n private readonly formulaControl = this.propertyForm.get(\r\n 'formula',\r\n ) as FormControl<FormulaBuilderValue | null>;\r\n private readonly mainValue = signal(this.mainControl.value);\r\n\r\n private readonly creating = this.facade.isCreating;\r\n private readonly updating = this.facade.isUpdating;\r\n readonly loading = this.facade.isLoadingOne;\r\n readonly submitting = computed(() => this.creating() || this.updating());\r\n readonly propertyType = computed(() => this.mainValue()?.viewType ?? null);\r\n /** True while the selected view type is calculated by definition. */\r\n readonly isAlwaysCalculatedType = computed(() =>\r\n this.alwaysCalculatedViewTypes.includes(this.propertyType() ?? ''),\r\n );\r\n /**\r\n * Keys DynamicForm must lock in the \"main\" form. `forcedDisabledFieldKeys`\r\n * (rather than a `disabled` field config) is what keeps the pinned `true`\r\n * intact — a field disabled by config is treated as a normal disable and has\r\n * its value reset, a forced-disabled one is treated as a context lock.\r\n */\r\n readonly lockedMainFieldKeys = computed(() =>\r\n this.isAlwaysCalculatedType() ? ['isCalculated'] : [],\r\n );\r\n readonly isCalculated = computed(\r\n () =>\r\n this.isAlwaysCalculatedType() || Boolean(this.mainValue()?.isCalculated),\r\n );\r\n readonly hideFormulaBuilder = computed(() => {\r\n // An always-calculated type has nothing to show without its formula.\r\n if (this.isAlwaysCalculatedType()) {\r\n return false;\r\n }\r\n\r\n const normalizedKey = (\r\n (this.facade.selected() as { normalizedKey?: string } | null)\r\n ?.normalizedKey ??\r\n (this.mainValue()?.normalizedKey as string | undefined) ??\r\n ''\r\n )\r\n .toString()\r\n .toLowerCase();\r\n return (\r\n normalizedKey === 'levelcode' ||\r\n normalizedKey === 'modulecode' ||\r\n normalizedKey === 'levelmodulecode'\r\n );\r\n });\r\n\r\n /**\r\n * Canonical context key (`Level:5/Module:10` | `Level:5` | `Module:10`) the\r\n * formula builder uses as the source of truth for the context kind — so a\r\n * standalone module is addressed as `Module:{id}` rather than mistaken for a\r\n * level. Undefined when no scope is set.\r\n */\r\n readonly formulaContextKey = computed(() => {\r\n const scope = this.scope();\r\n return scope\r\n ? buildPropertiesScopeContextKey(scope)\r\n : (this.facade.formulaContextKey() ?? undefined);\r\n });\r\n\r\n readonly formulaSchemaId = computed(() => {\r\n const scope = this.scope();\r\n return this.resolveSchemaId(\r\n scope\r\n ? (scope.parent?.id ?? scope.target.id)\r\n : (this.facade.parentModuleId() ?? this.facade.moduleId()),\r\n );\r\n });\r\n readonly formulaModuleId = computed(() => {\r\n const scope = this.scope();\r\n const parentModuleId = this.resolveSchemaId(\r\n scope ? (scope.parent?.id ?? null) : this.facade.parentModuleId(),\r\n );\r\n if (parentModuleId === undefined) {\r\n return undefined;\r\n }\r\n\r\n return this.resolveSchemaId(\r\n scope ? scope.target.id : this.facade.moduleId(),\r\n );\r\n });\r\n readonly selectedViewType = computed(\r\n () =>\r\n this.propertyType() ??\r\n (this.facade.selected()?.viewType as string | null),\r\n );\r\n readonly statusPropertyId = computed(() =>\r\n this.resolveSchemaId(this.facade.selected()?.id ?? this.propertyId()),\r\n );\r\n readonly availablePropertyTypes = computed(() => {\r\n const allTypes = this.propertyTypes()?.value ?? [];\r\n return allTypes.filter(\r\n (item: any) =>\r\n !this.legacyReplacedViewTypes.includes(item?.viewType ?? ''),\r\n );\r\n });\r\n\r\n private readonly selectedPropertyTypeConfiguration = computed(() => {\r\n const propertyTypesSetting = this.propertyTypes();\r\n const selectedViewType = this.propertyType();\r\n\r\n if (!propertyTypesSetting?.value || !selectedViewType) return null;\r\n const match = propertyTypesSetting.value.find(\r\n (item: any) =>\r\n item.viewType?.toLowerCase() === selectedViewType.toLowerCase(),\r\n );\r\n\r\n return match?.configuration ?? null;\r\n });\r\n\r\n readonly configurationFormConfig = computed(\r\n () => this.selectedPropertyTypeConfiguration()?.configurationForm ?? null,\r\n );\r\n\r\n @ViewChild('configurationHost', { read: ViewContainerRef })\r\n private configurationHost?: ViewContainerRef;\r\n private readonly statusConfigurationSection = viewChild<\r\n ElementRef<HTMLElement>\r\n >('statusConfigurationSection');\r\n\r\n private readonly environmentInjector = inject(EnvironmentInjector);\r\n private readonly routeFragment = toSignal(this.route.fragment, {\r\n initialValue: this.route.snapshot.fragment,\r\n });\r\n\r\n private readonly configurationComponentType = signal<Type<any> | null>(null);\r\n private configurationComponentRef: ComponentRef<any> | null = null;\r\n private configurationComponentLoadId = 0;\r\n private readonly externalConfigurationForm = signal<FormGroup | null>(null);\r\n private externalConfigurationSubscriptions = new Subscription();\r\n private readonly subscriptions = new Subscription();\r\n private readonly externalConfigurationInvalid = signal(false);\r\n private readonly lastStatusScrollKey = signal<string | null>(null);\r\n\r\n readonly configurationComponentExists = computed(\r\n () => !!this.configurationComponentType(),\r\n );\r\n readonly configurationFormInvalid = computed(() =>\r\n this.externalConfigurationInvalid(),\r\n );\r\n readonly submitDisabled = computed(\r\n () => this.submitting() || this.configurationFormInvalid(),\r\n );\r\n // Your existing dynamic form config unchanged\r\n dynamicFormConfigMain = linkedSignal<DynamicFormConfig>(() => ({\r\n layout: {\r\n containerClass: `space-y-2`,\r\n },\r\n sections: [\r\n {\r\n key: 'top-row',\r\n type: 'none',\r\n cssClass: ' rounded-xl bg-content shadow-sm p-6 mt-3 mb-0',\r\n bodyClass: 'flex items-center gap-6',\r\n fields: [\r\n {\r\n key: 'viewType',\r\n type: 'select',\r\n placeholder: this.transloco.translate(\r\n 'properties.form.selectPropertyType',\r\n ),\r\n optionLabel: `label.${this.activeLang() === 'ar' ? 'ar' : 'en'}`,\r\n optionValue: 'viewType',\r\n // me-auto (RTL-safe) absorbs the free space so the Calculated\r\n // toggle is pushed to the end of the row. viewType is never\r\n // hidden, so anchoring the auto margin here is robust even when\r\n // isCalculated is hidden by its relations.\r\n cssClass: 'w-1/2 me-auto',\r\n options: this.availablePropertyTypes(),\r\n disabled: this.isEditing(),\r\n filter: true,\r\n hasPlaceholderPrefix: false,\r\n validators: [new ValidatorConfig({ type: 'required' })],\r\n },\r\n\r\n {\r\n key: 'isCalculated',\r\n type: 'toggle',\r\n colSpan: 1,\r\n\r\n label: this.transloco.translate('properties.form.calculated'),\r\n cssClass: 'shrink-0',\r\n relations: this.calculatedToggleViewTypes.map((value) => ({\r\n action: 'show',\r\n key: 'viewType',\r\n value,\r\n })),\r\n },\r\n {\r\n key: 'isTranslatable',\r\n type: 'toggle',\r\n colSpan: 1,\r\n label: this.transloco.translate('properties.form.translatable'),\r\n cssClass: 'shrink-0',\r\n relations: this.translatableToggleViewTypes.map((value) => ({\r\n action: 'show',\r\n key: 'viewType',\r\n value,\r\n })),\r\n },\r\n ],\r\n },\r\n {\r\n key: 'default-info',\r\n label: this.transloco.translate('properties.form.defaultInfoSection'),\r\n type: 'header',\r\n cssClass: ' rounded-xl bg-content shadow-sm p-6',\r\n bodyClass: 'grid grid-cols-1 md:grid-cols-2 gap-3',\r\n fields: [\r\n {\r\n key: 'name.en',\r\n label: this.transloco.translate('properties.form.englishName'),\r\n placeholder: this.transloco.translate(\r\n 'properties.form.enterEnglishName',\r\n ),\r\n validators: [new ValidatorConfig({ type: 'required' })],\r\n },\r\n {\r\n key: 'name.ar',\r\n label: this.transloco.translate('properties.form.arabicName'),\r\n placeholder: this.transloco.translate(\r\n 'properties.form.enterArabicName',\r\n ),\r\n validators: [new ValidatorConfig({ type: 'required' })],\r\n },\r\n {\r\n key: 'description.en',\r\n label: this.transloco.translate(\r\n 'properties.form.englishDescription',\r\n ),\r\n type: 'textarea',\r\n },\r\n {\r\n key: 'description.ar',\r\n label: this.transloco.translate(\r\n 'properties.form.arabicDescription',\r\n ),\r\n type: 'textarea',\r\n },\r\n // {\r\n // key: 'defaultValue',\r\n // label: 'Default Value',\r\n // cssClass: 'md:col-span-2',\r\n // },\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n this.subscriptions.add(\r\n this.mainControl.valueChanges.subscribe((value) =>\r\n this.mainValue.set(value),\r\n ),\r\n );\r\n\r\n // Apply an explicit scope before loading an edit. This must remain one\r\n // serialized effect: separate context/load effects have no ordering\r\n // guarantee during the initial change-detection pass.\r\n effect((onCleanup) => {\r\n const scope = this.scope();\r\n const propertyId = this.propertyId();\r\n\r\n const request$ = createPropertyFormRequest(\r\n this.facade,\r\n scope,\r\n propertyId,\r\n );\r\n\r\n if (!request$) {\r\n return;\r\n }\r\n\r\n const subscription = request$.subscribe();\r\n onCleanup(() => subscription.unsubscribe());\r\n });\r\n\r\n // Patch viewType from store when creating new property\r\n effect(() => {\r\n const defaultViewType = this.facade.defaultViewType();\r\n if (!this.propertyId() && defaultViewType) {\r\n // untracked: see syncFormWithSelectedProperty effect — patchValue runs\r\n // DynamicForm.writeValue → evaluateRelations (reads+writes its signals),\r\n // which would otherwise make this effect self-dependent and loop.\r\n untracked(() =>\r\n this.mainControl.patchValue(\r\n { ...this.mainControl.value, viewType: defaultViewType },\r\n { emitEvent: true },\r\n ),\r\n );\r\n }\r\n });\r\n\r\n // Track previous property type\r\n let prev: any;\r\n effect(() => {\r\n const currentPropertyType = this.propertyType();\r\n if (!currentPropertyType || !prev || prev == currentPropertyType) {\r\n prev = this.propertyType();\r\n return;\r\n }\r\n\r\n // untracked: reset can reach a bound config DynamicForm.writeValue →\r\n // evaluateRelations (reads+writes its signals); keep this effect bound\r\n // only to propertyType so it doesn't self-trigger.\r\n untracked(() => this.configurationControl.reset(null));\r\n });\r\n effect(() => {\r\n const currentPropertyType = this.propertyType();\r\n if (!currentPropertyType) return;\r\n\r\n // Reset config scopes before loading new ones\r\n this.facade.resetConfigScopes();\r\n\r\n // Load config scopes for specific property types\r\n const supportedTypes = ['EntityList', 'LookupModuleCheckList'];\r\n if (supportedTypes.includes(currentPropertyType)) {\r\n this.facade.loadConfigAsType(currentPropertyType);\r\n }\r\n });\r\n effect(() => {\r\n const property = this.facade.selected();\r\n // Patch the form imperatively, untracked: mainControl.patchValue triggers\r\n // DynamicForm.writeValue → evaluateRelations, which both reads and writes\r\n // the DynamicForm's signals (fieldStates, etc.). Without untracked those\r\n // reads register as dependencies of THIS effect, which the same call then\r\n // mutates — so the effect re-runs forever (the freeze-on-save loop).\r\n untracked(() => this.syncFormWithSelectedProperty(property));\r\n });\r\n\r\n effect(() => {\r\n this.resolveConfigurationComponent(\r\n this.selectedPropertyTypeConfiguration(),\r\n );\r\n });\r\n\r\n effect(() => {\r\n this.renderConfigurationComponent(this.configurationComponentType());\r\n });\r\n\r\n // Pin the Calculated toggle on for view types that are calculated by\r\n // definition. The lock in `lockedMainFieldKeys` only stops the user from\r\n // switching it off; the value itself still has to be written, both for a\r\n // freshly picked view type and for a stored property the backend sent with\r\n // the flag unset. Releasing the pin on the way out matters on create only\r\n // (viewType is disabled while editing): the next type must start from the\r\n // user's own choice, not from a value this effect wrote.\r\n let pinnedCalculated = false;\r\n effect(() => {\r\n const alwaysCalculated = this.isAlwaysCalculatedType();\r\n\r\n // untracked: see syncFormWithSelectedProperty effect — patchValue runs\r\n // DynamicForm.writeValue → evaluateRelations (reads+writes its signals),\r\n // which would otherwise make this effect self-dependent and loop.\r\n untracked(() => {\r\n const value = this.mainControl.value;\r\n\r\n if (alwaysCalculated) {\r\n pinnedCalculated = true;\r\n if (value?.isCalculated === true) return;\r\n this.mainControl.patchValue(\r\n { ...value, isCalculated: true },\r\n { emitEvent: true },\r\n );\r\n return;\r\n }\r\n\r\n if (!pinnedCalculated) return;\r\n pinnedCalculated = false;\r\n this.mainControl.patchValue(\r\n { ...value, isCalculated: false },\r\n { emitEvent: true },\r\n );\r\n });\r\n });\r\n\r\n effect(() => {\r\n const calculated = this.isCalculated();\r\n this.formulaControl.setValidators(\r\n calculated ? [Validators.required] : [],\r\n );\r\n this.formulaControl.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n effect(() => {\r\n const fragment = this.routeFragment();\r\n const section = this.statusConfigurationSection();\r\n const propertyId = this.statusPropertyId();\r\n const viewType = this.selectedViewType();\r\n\r\n if (\r\n fragment !== 'status-configuration' ||\r\n !section ||\r\n !propertyId ||\r\n viewType !== 'Status'\r\n ) {\r\n return;\r\n }\r\n\r\n const scrollKey = `${propertyId}:${fragment}`;\r\n if (this.lastStatusScrollKey() === scrollKey) {\r\n return;\r\n }\r\n\r\n this.lastStatusScrollKey.set(scrollKey);\r\n setTimeout(() => {\r\n section.nativeElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'start',\r\n });\r\n });\r\n });\r\n }\r\n\r\n private renderConfigurationComponent(componentType: Type<any> | null) {\r\n if (!this.configurationHost) return;\r\n\r\n this.destroyConfigurationComponent();\r\n\r\n if (!componentType) return;\r\n\r\n const componentRef = this.configurationHost.createComponent(componentType, {\r\n environmentInjector: this.environmentInjector,\r\n });\r\n\r\n this.configurationComponentRef = componentRef;\r\n this.connectExternalConfigurationForm(componentRef.instance);\r\n }\r\n\r\n private destroyConfigurationComponent() {\r\n const formSubscriptions = this.externalConfigurationSubscriptions;\r\n this.externalConfigurationSubscriptions = new Subscription();\r\n formSubscriptions.unsubscribe();\r\n this.externalConfigurationForm.set(null);\r\n this.externalConfigurationInvalid.set(false);\r\n this.configurationComponentRef?.destroy();\r\n this.configurationComponentRef = null;\r\n this.configurationHost?.clear();\r\n }\r\n\r\n private connectExternalConfigurationForm(instance: any) {\r\n const form = this.extractConfigurationForm(instance);\r\n if (!form) return;\r\n\r\n this.externalConfigurationForm.set(form);\r\n this.externalConfigurationInvalid.set(form.invalid);\r\n\r\n const currentValue = this.configurationControl.value;\r\n if (currentValue) {\r\n form.patchValue(currentValue);\r\n }\r\n\r\n this.configurationControl.setValue(form.value ?? null, {\r\n emitEvent: false,\r\n });\r\n\r\n this.externalConfigurationSubscriptions.add(\r\n form.valueChanges.subscribe((value) =>\r\n this.configurationControl.setValue(value, { emitEvent: false }),\r\n ),\r\n );\r\n this.externalConfigurationSubscriptions.add(\r\n form.statusChanges.subscribe(() =>\r\n this.externalConfigurationInvalid.set(form.invalid),\r\n ),\r\n );\r\n }\r\n\r\n private extractConfigurationForm(instance: any): FormGroup | null {\r\n const form = (instance as { form?: any })?.form;\r\n return form instanceof FormGroup ? form : null;\r\n }\r\n // PropertyTypeConfiguration\r\n private resolveConfigurationComponent(configuration: any | null) {\r\n const componentLoader = configuration?.configurationComponent;\r\n const loadId = ++this.configurationComponentLoadId;\r\n\r\n if (!componentLoader) {\r\n this.configurationComponentType.set(null);\r\n return;\r\n }\r\n\r\n // Direct component type\r\n if (typeof componentLoader !== 'function' || componentLoader.prototype) {\r\n this.configurationComponentType.set(componentLoader as Type<any>);\r\n return;\r\n }\r\n\r\n // Async loader factory\r\n try {\r\n const result = (\r\n componentLoader as () => Type<any> | Promise<Type<any>>\r\n )();\r\n this.applyConfigurationComponentResult(result, loadId);\r\n } catch (error) {\r\n console.error('Failed to resolve configuration component.', error);\r\n this.configurationComponentType.set(null);\r\n }\r\n }\r\n\r\n private applyConfigurationComponentResult(\r\n result: Type<any> | Promise<Type<any>>,\r\n loadId: number,\r\n ) {\r\n // Async promise result\r\n if (result instanceof Promise) {\r\n this.configurationComponentType.set(null);\r\n result\r\n .then((component) => {\r\n if (loadId !== this.configurationComponentLoadId) return;\r\n\r\n // Handle default export\r\n const resolved = (component as any)?.default ?? component;\r\n this.configurationComponentType.set(resolved as Type<any>);\r\n })\r\n .catch((error) => {\r\n if (loadId === this.configurationComponentLoadId) {\r\n this.configurationComponentType.set(null);\r\n }\r\n console.error('Unable to load configuration component.', error);\r\n });\r\n return;\r\n }\r\n\r\n // Direct component type\r\n this.configurationComponentType.set(result);\r\n }\r\n\r\n private resolveSchemaId(value: string | number | null): number | undefined {\r\n if (value === null || value === undefined) {\r\n return undefined;\r\n }\r\n const parsed = typeof value === 'string' ? Number(value) : value;\r\n return Number.isFinite(parsed) ? parsed : undefined;\r\n }\r\n\r\n createOrEditProperty(event?: Event) {\r\n const mainValue = this.mainControl.value;\r\n if (!mainValue) return;\r\n\r\n const isCalculated = this.resolveIsCalculated(mainValue);\r\n const supportsTranslatableToggle =\r\n this.translatableToggleViewTypes.includes(mainValue.viewType);\r\n const isTranslatable = supportsTranslatableToggle\r\n ? Boolean(mainValue.isTranslatable)\r\n : Boolean(this.facade.selected()?.isTranslatable);\r\n\r\n const payload: PropertyPayload = {\r\n ...mainValue,\r\n isCalculated,\r\n isTranslatable,\r\n formula: isCalculated ? this.formulaControl.value : null,\r\n Configuration:\r\n this.configurationControl.value ?? mainValue.Configuration ?? null,\r\n };\r\n\r\n // On edit, never prompt: any addToForm value loaded into the form passes\r\n // through via the spread above so the backend flag stays untouched.\r\n if (this.propertyId()) {\r\n this.submitProperty(payload);\r\n return;\r\n }\r\n\r\n // On create, ask (via a popup anchored to the Save button) whether the\r\n // new property should also be added to the form. ConfirmPopup only fires\r\n // `accept`/`reject` on the buttons; clicking outside or pressing Escape\r\n // closes it silently, which cancels the save. `event` comes from the\r\n // Save button click and is required to position the popup.\r\n this.confirmationService.confirm({\r\n type: 'popup',\r\n event: event as Event,\r\n message: this.transloco.translate(\r\n 'properties.form.addToFormConfirmMessage',\r\n ),\r\n icon: 'general.plus',\r\n rejectButton: {\r\n variant: 'outlined',\r\n },\r\n acceptLabel: this.transloco.translate('properties.form.addToFormAccept'),\r\n rejectLabel: this.transloco.translate('properties.form.addToFormReject'),\r\n accept: () => this.submitProperty({ ...payload, addToForm: true }),\r\n reject: () => this.submitProperty({ ...payload, addToForm: false }),\r\n });\r\n }\r\n\r\n /**\r\n * The flag to persist for the given view type:\r\n * - always-calculated types are `true` regardless of what the form holds;\r\n * - types that render the toggle use the toggle's value;\r\n * - for the rest the toggle is hidden, and DynamicForm clears hidden field\r\n * values, so the loaded property's backend-managed flag is preserved.\r\n */\r\n private resolveIsCalculated(mainValue: any): boolean {\r\n const viewType = mainValue.viewType;\r\n if (this.alwaysCalculatedViewTypes.includes(viewType)) {\r\n return true;\r\n }\r\n\r\n return this.calculatedToggleViewTypes.includes(viewType)\r\n ? Boolean(mainValue.isCalculated)\r\n : Boolean(this.facade.selected()?.isCalculated);\r\n }\r\n\r\n private submitProperty(payload: PropertyPayload) {\r\n const request$ = this.propertyId()\r\n ? this.facade.update(this.propertyId(), payload)\r\n : this.facade.create(payload);\r\n\r\n request$.subscribe(() => {\r\n if (payload.viewType === 'Status') {\r\n this.handleStatusPropertySave();\r\n return;\r\n }\r\n\r\n this.goBack();\r\n });\r\n }\r\n\r\n private syncFormWithSelectedProperty(\r\n property: PropertyItem | PropertyPayload | null,\r\n ) {\r\n if (!property) return;\r\n this.mainControl.patchValue(property, {\r\n emitEvent: false,\r\n });\r\n this.mainValue.set(this.mainControl.value);\r\n this.configurationControl.setValue(property?.configuration);\r\n this.formulaControl.setValue(property.formula ?? null, {\r\n emitEvent: false,\r\n });\r\n }\r\n\r\n goBack() {\r\n const path = this.isEditing()\r\n ? '../../properties-list'\r\n : '../properties-list';\r\n this.router.navigate([path], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n });\r\n }\r\n\r\n private handleStatusPropertySave() {\r\n const savedId = this.statusPropertyId();\r\n if (!savedId) {\r\n return;\r\n }\r\n\r\n if (this.propertyId()) {\r\n this.facade.loadOne(savedId).subscribe(() => {\r\n this.router\r\n .navigate([], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n fragment: 'status-configuration',\r\n replaceUrl: true,\r\n })\r\n .then(() => this.scrollToStatusConfiguration());\r\n });\r\n return;\r\n }\r\n\r\n this.router.navigate([savedId], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n fragment: 'status-configuration',\r\n replaceUrl: true,\r\n });\r\n }\r\n\r\n private scrollToStatusConfiguration() {\r\n const section = this.statusConfigurationSection();\r\n if (!section) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n section.nativeElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'start',\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.facade.resetSelectedProperty();\r\n this.facade.setDefaultViewType('');\r\n this.destroyConfigurationComponent();\r\n this.subscriptions.unsubscribe();\r\n }\r\n}\r\n","<mt-page\r\n [title]=\"\r\n propertyId()\r\n ? ('properties.form.editProperty' | transloco)\r\n : ('properties.form.createNewProperty' | transloco)\r\n \"\r\n avatarIcon=\"custom.products-and-services\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-sky-50)',\r\n '--p-avatar-color': 'var(--p-sky-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n class=\"h-full\"\r\n>\r\n <ng-template #headerEnd>\r\n <mt-button\r\n class=\"mx-2\"\r\n [label]=\"submitLabel()\"\r\n [icon]=\"isEditing() ? 'custom.pencil' : 'general.plus'\"\r\n [loading]=\"submitting()\"\r\n [disabled]=\"submitDisabled() || this.propertyForm.invalid\"\r\n (click)=\"createOrEditProperty($event)\"\r\n />\r\n </ng-template>\r\n <div\r\n [formGroup]=\"propertyForm\"\r\n class=\"h-full py-4 h-full overflow-y-auto flex justify-center\"\r\n >\r\n <div class=\"w-2/3 flex flex-col gap-6\">\r\n @if (loading()) {\r\n <!-- Skeleton Loading State -->\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <div class=\"flex justify-between items-center gap-6\">\r\n <p-skeleton width=\"50%\" height=\"3rem\"></p-skeleton>\r\n <p-skeleton width=\"8rem\" height=\"2.5rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"12rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"6rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n <p-skeleton height=\"3rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"8rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n } @else {\r\n <mt-dynamic-form\r\n [formConfig]=\"dynamicFormConfigMain()\"\r\n [forcedDisabledFieldKeys]=\"lockedMainFieldKeys()\"\r\n [formControlName]=\"'main'\"\r\n />\r\n @if (configurationFormConfig()) {\r\n <mt-dynamic-form\r\n formControlName=\"configuration\"\r\n [formConfig]=\"configurationFormConfig()!\"\r\n />\r\n } @else {\r\n <ng-container #configurationHost></ng-container>\r\n @if (!configurationComponentExists()) {\r\n @switch (propertyType()) {\r\n @case (\"User\") {\r\n <mt-user-configuration />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-percentage-configuration />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-lookup-configuration />\r\n }\r\n @case (\"LookupMultiSelect\") {\r\n <mt-lookup-configuration />\r\n }\r\n @case (\"EntityList\") {\r\n <mt-entity-list-configuration />\r\n }\r\n @case (\"API\") {\r\n <mt-api-configuration formControlName=\"configuration\" />\r\n }\r\n @case (\"Status\") {\r\n <section #statusConfigurationSection>\r\n <mt-status-configuration\r\n [propertyId]=\"statusPropertyId()\"\r\n [contextKey]=\"formulaContextKey()\"\r\n [levelSchemaId]=\"formulaSchemaId()\"\r\n [moduleId]=\"formulaModuleId()\"\r\n />\r\n </section>\r\n }\r\n <!-- @case('ViewList') { REMOVED FOR NOW\r\n <mt-view-list-configuration />\r\n } -->\r\n @case (\"Attachment\") {\r\n <mt-attachment-configuration />\r\n }\r\n <!-- @case('ReferenceProperty') { REMOVED FOR NOW\r\n } -->\r\n @case (\"LookupModuleCheckList\") {\r\n <mt-check-list-form-configuration />\r\n }\r\n <!-- @case('LookupMatrix') { REMOVED FOR NOW\r\n <mt-lookup-configuration />\r\n } -->\r\n @case (\"Location\") {\r\n <mt-location-configuration />\r\n }\r\n }\r\n }\r\n }\r\n @if (isCalculated() && !hideFormulaBuilder()) {\r\n <mt-card>\r\n <ng-template #headless>\r\n <div\r\n class=\"flex items-center justify-between px-4 py-5 border-b border-surface\"\r\n >\r\n <h3 class=\"text-xl font-semibold\">\r\n {{ \"properties.form.formula\" | transloco }}\r\n <span class=\"text-red-500\">*</span>\r\n </h3>\r\n </div>\r\n <div class=\"flex-1 min-h-0 p-4\">\r\n <mt-formula-builder\r\n formControlName=\"formula\"\r\n [contextKey]=\"formulaContextKey()\"\r\n [levelSchemaId]=\"formulaSchemaId()\"\r\n [moduleId]=\"formulaModuleId()\"\r\n />\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</mt-page>\r\n","/*\r\n * Public API Surface of structure-builder\r\n */\r\n\r\nexport * from './lib/properties-list/properties-list';\r\nexport * from './lib/property-form/property-form';\r\n\r\nexport * from './store';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-properties.mjs","sources":["../../../../packages/masterteam/properties/src/store/properties/properties.model.ts","../../../../packages/masterteam/properties/src/store/properties/properties.actions.ts","../../../../packages/masterteam/properties/src/store/properties/properties.state.ts","../../../../packages/masterteam/properties/src/store/properties/properties.facade.ts","../../../../packages/masterteam/properties/src/store/app.state.ts","../../../../packages/masterteam/properties/src/store/index.ts","../../../../packages/masterteam/properties/src/lib/properties-list/properties-list.ts","../../../../packages/masterteam/properties/src/lib/properties-list/properties-list.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/api-configuration/api-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/api-configuration/api-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/check-list-form-configuration/check-list-form-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/check-list-form-configuration/check-list-form-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/entity-list-configuration/entity-list-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/entity-list-configuration/entity-list-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/location-configuration/location-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/location-configuration/location-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/lookup-configuration/lookup-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/lookup-configuration/lookup-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/percentage-configuration/percentage-configuration.model.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/percentage-configuration/percentage-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/percentage-configuration/percentage-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/status-configuration/status-item-form/status-item-form.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/status-configuration/status-item-form/status-item-form.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/status-configuration/status-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/status-configuration/status-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/user-configuration/user-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/user-configuration/user-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/attachment-configuration/attachment-configuration.ts","../../../../packages/masterteam/properties/src/lib/property-form/configuration-types/attachment-configuration/attachment-configuration.html","../../../../packages/masterteam/properties/src/lib/property-form/property-form-request.ts","../../../../packages/masterteam/properties/src/lib/property-form/property-form.ts","../../../../packages/masterteam/properties/src/lib/property-form/property-form.html","../../../../packages/masterteam/properties/src/public-api.ts","../../../../packages/masterteam/properties/src/masterteam-properties.ts"],"sourcesContent":["import { BreadcrumbItem } from '@masterteam/components/breadcrumb';\r\nimport type { FormulaBuilderValue } from '@masterteam/formula-builder';\r\nimport type { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport type PropertiesScopeId = string | number;\r\n\r\nexport interface PropertiesScopeTarget {\r\n type: string;\r\n id: PropertiesScopeId;\r\n}\r\n\r\n/**\r\n * Identifies the effective scope in which properties are being managed.\r\n *\r\n * A module nested under a level uses the module as `target` and the level as\r\n * `parent`. Keeping the route vocabulary out of this contract lets hosts map\r\n * any URL shape to the same package API.\r\n */\r\nexport interface PropertiesScope {\r\n target: PropertiesScopeTarget;\r\n parent?: PropertiesScopeTarget;\r\n parentPath?: string;\r\n}\r\n\r\nexport function buildPropertiesScopeContextKey(scope: PropertiesScope): string {\r\n return [scope.parent, scope.target]\r\n .filter((target): target is PropertiesScopeTarget => target != null)\r\n .map((target) => `${target.type}:${target.id}`)\r\n .join('/');\r\n}\r\n\r\nexport interface PropertyItem {\r\n id: number;\r\n key: string;\r\n normalizedKey: string;\r\n viewType: string;\r\n viewTypeLabel: string;\r\n name: string | Record<string, string>;\r\n description?: Record<string, string>;\r\n defaultValue?: unknown;\r\n order?: number;\r\n canBeDeleted?: boolean;\r\n displayOverView?: boolean;\r\n enabled?: boolean;\r\n formula?: FormulaBuilderValue | null;\r\n addToForm?: boolean;\r\n isBasic?: boolean;\r\n isCalculated?: boolean;\r\n isConfigurable?: boolean;\r\n isHiddenInCreation?: boolean;\r\n isHiddenInEdition?: boolean;\r\n isLive?: boolean;\r\n isLog?: boolean;\r\n isRequired?: boolean;\r\n isSystem?: boolean;\r\n isTranslatable?: boolean;\r\n shownInTable?: boolean;\r\n includeInSummary?: boolean;\r\n dependsOn?: unknown[];\r\n isFilterFormula?: boolean;\r\n configuration?: Record<string, unknown>;\r\n category?: string;\r\n valueOnCreation?: boolean;\r\n isRelated?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface LookupDefinitionItem {\r\n id: number;\r\n key?: string;\r\n name?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface LookupDefinition {\r\n id: number;\r\n key: string;\r\n name: string;\r\n allowDelete: boolean;\r\n allowManage: boolean;\r\n allowEdit: boolean;\r\n items: LookupDefinitionItem[];\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface GroupDefinition {\r\n id: number;\r\n name: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface LogDefinition {\r\n id: number;\r\n name: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface ConfigScope {\r\n scope: string;\r\n items: Array<{\r\n id: number;\r\n name?: string;\r\n [key: string]: unknown;\r\n }>;\r\n}\r\n\r\nexport interface CountryDefinition {\r\n name: string;\r\n name_ar?: string;\r\n code?: string;\r\n viewBox?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface ApiSchemaProperty {\r\n type?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface ApiSchema {\r\n properties?: Record<string, ApiSchemaProperty>;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface ApiPropertyOption {\r\n key: string;\r\n name: string;\r\n type?: string;\r\n}\r\n\r\nexport interface ApiConfigurationValue {\r\n endpoint: string;\r\n headers: Record<string, string>;\r\n key: string;\r\n value: string;\r\n schema?: ApiSchema | null;\r\n supportMultiSelect?: boolean;\r\n}\r\n\r\nexport interface ApiTestPayload {\r\n endpoint: string;\r\n headers?: Record<string, string>;\r\n}\r\n\r\nexport interface ApiTestResponse {\r\n schema?: ApiSchema | null;\r\n data?: unknown;\r\n}\r\n\r\nexport interface PropertyStatusItem {\r\n id: number;\r\n propertyId: number;\r\n key: string;\r\n type?: string | null;\r\n display?: Record<string, string>;\r\n description?: Record<string, string>;\r\n color?: string | null;\r\n icon?: string | null;\r\n formula?: FormulaBuilderValue | string | null;\r\n formulaRaw?: unknown;\r\n order?: number | null;\r\n createdAt?: unknown;\r\n createdBy?: unknown;\r\n updatedAt?: unknown;\r\n updatedBy?: unknown;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface PropertyStatusPayload {\r\n type?: string | null;\r\n display?: Record<string, string>;\r\n description?: Record<string, string>;\r\n color?: string | null;\r\n icon?: string | null;\r\n formula?: FormulaBuilderValue | null;\r\n}\r\n\r\nexport interface PropertyStatusOrderPayload {\r\n orders: Array<{\r\n statusId: number;\r\n order: number;\r\n }>;\r\n}\r\n\r\nexport enum PropertiesActionKey {\r\n GetAll = 'getAll',\r\n GetOne = 'getOne',\r\n Create = 'create',\r\n Update = 'update',\r\n Delete = 'delete',\r\n GetLookups = 'getLookups',\r\n GetGroups = 'getGroups',\r\n GetConfigProperties = 'getConfigProperties',\r\n GetConfigAsType = 'getConfigAsType',\r\n GetCountries = 'getCountries',\r\n TestApiConfiguration = 'testApiConfiguration',\r\n GetPropertyStatuses = 'getPropertyStatuses',\r\n CreatePropertyStatus = 'createPropertyStatus',\r\n UpdatePropertyStatus = 'updatePropertyStatus',\r\n DeletePropertyStatus = 'deletePropertyStatus',\r\n ReorderPropertyStatuses = 'reorderPropertyStatuses',\r\n}\r\n\r\nexport type PropertiesLoadingName = PropertiesActionKey;\r\n\r\nexport interface PropertiesStateModel extends LoadingStateShape<PropertiesActionKey> {\r\n properties: PropertyItem[];\r\n selectedProperty: PropertyItem | null;\r\n moduleType: string | null;\r\n moduleId: string | number | null;\r\n parentModuleType?: string | null;\r\n parentModuleId?: string | number | null;\r\n parentPath?: string;\r\n lastQueryParams: PropertiesQueryParams | null;\r\n lookups: LookupDefinition[];\r\n configTypeProperties: PropertyItem[];\r\n groups: GroupDefinition[];\r\n configScopes: ConfigScope[];\r\n countries: CountryDefinition[];\r\n apiSchema: ApiSchema | null;\r\n apiProperties: ApiPropertyOption[];\r\n propertyStatuses: PropertyStatusItem[];\r\n propertyTypes?: any;\r\n breadcrumbItems: BreadcrumbItem[];\r\n defaultViewType: string | null;\r\n}\r\n\r\nexport interface PropertiesQueryParams {\r\n includeLog?: boolean;\r\n includeLevel?: boolean;\r\n includeLevelParent?: boolean;\r\n isDynamicList?: boolean;\r\n isSystem?: boolean;\r\n isCSharpMethod?: boolean;\r\n}\r\n\r\nexport interface PropertyPayload {\r\n viewType: string;\r\n isCalculated: boolean;\r\n isTranslatable?: boolean;\r\n addToForm?: boolean;\r\n formula?: FormulaBuilderValue | null;\r\n name: Record<string, string>;\r\n description?: Record<string, string>;\r\n defaultValue?: any;\r\n configuration?: Record<string, any> | string | null;\r\n}\r\n","import type {\r\n PropertiesQueryParams,\r\n PropertyPayload,\r\n ApiTestPayload,\r\n PropertyStatusPayload,\r\n PropertyStatusOrderPayload,\r\n} from './properties.model';\r\nimport type { BreadcrumbItem } from '@masterteam/components/breadcrumb';\r\n\r\nexport class GetProperties {\r\n static readonly type = '[Properties] Get All';\r\n\r\n constructor(public readonly params?: PropertiesQueryParams) {}\r\n}\r\n\r\nexport class GetProperty {\r\n static readonly type = '[Properties] Get One';\r\n\r\n constructor(\r\n public readonly id: string | number,\r\n public readonly mode: 'edit' = 'edit',\r\n ) {}\r\n}\r\n\r\nexport class GetLookups {\r\n static readonly type = '[Properties] Get Lookups';\r\n}\r\n\r\nexport class GetGroups {\r\n static readonly type = '[Properties] Get Groups';\r\n}\r\n\r\nexport class GetConfigAsType {\r\n static readonly type = '[Properties] Get Config As Type';\r\n\r\n constructor(public readonly viewType: string) {}\r\n}\r\n\r\nexport class GetCountries {\r\n static readonly type = '[Properties] Get Countries';\r\n}\r\n\r\nexport class TestApiConfiguration {\r\n static readonly type = '[Properties] Test API Configuration';\r\n\r\n constructor(public readonly payload: ApiTestPayload) {}\r\n}\r\n\r\nexport class ResetApiConfiguration {\r\n static readonly type = '[Properties] Reset API Configuration';\r\n}\r\n\r\nexport class GetPropertyStatuses {\r\n static readonly type = '[Properties] Get Property Statuses';\r\n\r\n constructor(public readonly propertyId: string | number) {}\r\n}\r\n\r\nexport class CreatePropertyStatus {\r\n static readonly type = '[Properties] Create Property Status';\r\n\r\n constructor(\r\n public readonly propertyId: string | number,\r\n public readonly payload: PropertyStatusPayload,\r\n ) {}\r\n}\r\n\r\nexport class UpdatePropertyStatus {\r\n static readonly type = '[Properties] Update Property Status';\r\n\r\n constructor(\r\n public readonly propertyId: string | number,\r\n public readonly statusId: string | number,\r\n public readonly payload: PropertyStatusPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeletePropertyStatus {\r\n static readonly type = '[Properties] Delete Property Status';\r\n\r\n constructor(\r\n public readonly propertyId: string | number,\r\n public readonly statusId: string | number,\r\n ) {}\r\n}\r\n\r\nexport class ReorderPropertyStatuses {\r\n static readonly type = '[Properties] Reorder Property Statuses';\r\n\r\n constructor(public readonly payload: PropertyStatusOrderPayload) {}\r\n}\r\n\r\nexport class ResetPropertyStatuses {\r\n static readonly type = '[Properties] Reset Property Statuses';\r\n}\r\n\r\nexport class GetPropertiesForConfigType {\r\n static readonly type = '[Properties] Get By Config Type';\r\n\r\n constructor(\r\n public readonly moduleType: string,\r\n public readonly moduleId: string | number,\r\n ) {}\r\n}\r\n\r\nexport class ResetConfigProperties {\r\n static readonly type = '[Properties] Reset Config Properties';\r\n}\r\n\r\nexport class ResetConfigScopes {\r\n static readonly type = '[Properties] Reset Config Scopes';\r\n}\r\n\r\nexport class ResetSelectedProperty {\r\n static readonly type = '[Properties] Reset Selected Property';\r\n}\r\n\r\nexport class DeleteProperty {\r\n static readonly type = '[Properties] Delete';\r\n\r\n constructor(public readonly id: string | number) {}\r\n}\r\n\r\nexport class CreateProperty {\r\n static readonly type = '[Properties] Create';\r\n\r\n constructor(public readonly payload: PropertyPayload) {}\r\n}\r\n\r\nexport class UpdateProperty {\r\n static readonly type = '[Properties] Update';\r\n\r\n constructor(\r\n public readonly id: string | number,\r\n public readonly payload: PropertyPayload,\r\n ) {}\r\n}\r\n\r\nexport class SetPropertiesModuleInfo {\r\n static readonly type = '[Properties] Set Module Info';\r\n\r\n constructor(\r\n public readonly moduleType: string,\r\n public readonly moduleId: string | number,\r\n public readonly parentModuleType?: string,\r\n public readonly parentModuleId?: string | number,\r\n public readonly parentPath?: string,\r\n ) {}\r\n}\r\nexport class SetPropertyTypes {\r\n static readonly type = '[Properties] Set Property Types';\r\n\r\n constructor(public readonly payload: any) {}\r\n}\r\n\r\nexport class SetBreadcrumb {\r\n static readonly type = '[Properties] Set Breadcrumb';\r\n\r\n constructor(public readonly items: BreadcrumbItem[]) {}\r\n}\r\n\r\nexport class SetDefaultViewType {\r\n static readonly type = '[Properties] Set Default ViewType';\r\n\r\n constructor(public readonly viewType: string) {}\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { of } from 'rxjs';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\n\r\nimport {\r\n ApiPropertyOption,\r\n ApiSchema,\r\n ApiSchemaProperty,\r\n ConfigScope,\r\n CountryDefinition,\r\n GroupDefinition,\r\n LookupDefinition,\r\n buildPropertiesScopeContextKey,\r\n PropertiesActionKey,\r\n PropertiesStateModel,\r\n PropertyItem,\r\n PropertyStatusItem,\r\n} from './properties.model';\r\nimport type { BreadcrumbItem } from '@masterteam/components/breadcrumb';\r\nimport {\r\n CreateProperty,\r\n DeleteProperty,\r\n GetGroups,\r\n GetConfigAsType,\r\n GetLookups,\r\n GetPropertiesForConfigType,\r\n GetProperties,\r\n GetProperty,\r\n GetCountries,\r\n TestApiConfiguration,\r\n ResetApiConfiguration,\r\n GetPropertyStatuses,\r\n CreatePropertyStatus,\r\n UpdatePropertyStatus,\r\n DeletePropertyStatus,\r\n ReorderPropertyStatuses,\r\n ResetPropertyStatuses,\r\n ResetConfigProperties,\r\n ResetConfigScopes,\r\n ResetSelectedProperty,\r\n SetPropertiesModuleInfo,\r\n UpdateProperty,\r\n SetPropertyTypes,\r\n SetBreadcrumb,\r\n SetDefaultViewType,\r\n} from './properties.actions';\r\nimport {\r\n CatalogPropertyDto,\r\n PropertyCatalogResponseDto,\r\n Response,\r\n} from './api.model';\r\n\r\nconst DEFAULT_STATE: PropertiesStateModel = {\r\n properties: [],\r\n selectedProperty: null,\r\n loadingActive: [],\r\n errors: {},\r\n moduleType: null,\r\n moduleId: null,\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n lastQueryParams: null,\r\n lookups: [],\r\n configTypeProperties: [],\r\n groups: [],\r\n configScopes: [],\r\n countries: [],\r\n apiSchema: null,\r\n apiProperties: [],\r\n propertyStatuses: [],\r\n breadcrumbItems: [],\r\n defaultViewType: null,\r\n};\r\n\r\n@State<PropertiesStateModel>({\r\n name: 'properties',\r\n defaults: DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class PropertiesState extends CrudStateBase<\r\n PropertyItem,\r\n PropertiesStateModel,\r\n PropertiesActionKey\r\n> {\r\n private readonly http = inject(HttpClient);\r\n private readonly baseUrl = 'Properties';\r\n private readonly lookupsUrl = 'Lookups';\r\n private readonly configPropertiesUrl = 'Properties';\r\n private readonly groupsUrl = 'identity/Groups';\r\n private readonly countriesUrl = '/assets/countries/countries.json';\r\n private readonly apiTestUrl = 'app/testAPI';\r\n private readonly propertyStatusOrderUrl = 'Properties/Status/Order';\r\n\r\n // ============================================================================\r\n // Data Selectors - Individual for fine-grained reactivity\r\n // ============================================================================\r\n\r\n @Selector()\r\n static properties(state: PropertiesStateModel): PropertyItem[] {\r\n return state.properties;\r\n }\r\n\r\n @Selector()\r\n static selectedProperty(state: PropertiesStateModel): PropertyItem | null {\r\n return state.selectedProperty;\r\n }\r\n\r\n @Selector()\r\n static moduleId(state: PropertiesStateModel): string | number | null {\r\n return state.moduleId;\r\n }\r\n\r\n @Selector()\r\n static parentModuleId(state: PropertiesStateModel): string | number | null {\r\n return state.parentModuleId ?? null;\r\n }\r\n\r\n /**\r\n * Canonical formula-builder context key for the current scope, in the same\r\n * format used for the catalog request: `Level:5/Module:10` (module under a\r\n * level), `Level:5` (level), or `Module:10` (standalone module). Returns\r\n * null when no scope is set. This lets the formula builder address a\r\n * standalone module as `Module:{id}` instead of mistaking it for a level.\r\n */\r\n @Selector()\r\n static formulaContextKey(state: PropertiesStateModel): string | null {\r\n if (state.moduleType == null || state.moduleId == null) {\r\n return null;\r\n }\r\n\r\n return buildPropertiesScopeContextKey({\r\n target: { type: state.moduleType, id: state.moduleId },\r\n parent:\r\n state.parentModuleType != null && state.parentModuleId != null\r\n ? { type: state.parentModuleType, id: state.parentModuleId }\r\n : undefined,\r\n });\r\n }\r\n\r\n @Selector()\r\n static lookups(state: PropertiesStateModel): LookupDefinition[] {\r\n return state.lookups;\r\n }\r\n\r\n @Selector()\r\n static configTypeProperties(state: PropertiesStateModel): PropertyItem[] {\r\n return state.configTypeProperties;\r\n }\r\n\r\n @Selector()\r\n static groups(state: PropertiesStateModel): GroupDefinition[] {\r\n return state.groups;\r\n }\r\n\r\n @Selector()\r\n static configScopes(state: PropertiesStateModel): ConfigScope[] {\r\n return state.configScopes;\r\n }\r\n\r\n @Selector()\r\n static countries(state: PropertiesStateModel): CountryDefinition[] {\r\n return state.countries;\r\n }\r\n\r\n @Selector()\r\n static apiSchema(state: PropertiesStateModel): ApiSchema | null {\r\n return state.apiSchema;\r\n }\r\n\r\n @Selector()\r\n static apiProperties(state: PropertiesStateModel): ApiPropertyOption[] {\r\n return state.apiProperties;\r\n }\r\n\r\n @Selector()\r\n static propertyStatuses(state: PropertiesStateModel): PropertyStatusItem[] {\r\n return state.propertyStatuses;\r\n }\r\n\r\n @Selector()\r\n static propertyTypes(state: PropertiesStateModel): any {\r\n return state.propertyTypes ?? {};\r\n }\r\n\r\n @Selector()\r\n static breadcrumbItems(state: PropertiesStateModel): BreadcrumbItem[] {\r\n return state.breadcrumbItems;\r\n }\r\n\r\n @Selector()\r\n static defaultViewType(state: PropertiesStateModel): string | null {\r\n return state.defaultViewType;\r\n }\r\n\r\n // ============================================================================\r\n // Loading/Error Slice Selectors - REQUIRED for optimal performance\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getLoadingActive(state: PropertiesStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(state: PropertiesStateModel): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n // ============================================================================\r\n // Derived Selectors\r\n // ============================================================================\r\n\r\n @Selector()\r\n static propertyById(state: PropertiesStateModel) {\r\n return (id: number | string) =>\r\n state.properties.find((property) => property.id === Number(id)) ?? null;\r\n }\r\n\r\n // ============================================================================\r\n // CRUD Actions\r\n // ============================================================================\r\n\r\n @Action(GetProperties)\r\n getAll(ctx: StateContext<PropertiesStateModel>, action: GetProperties) {\r\n const state = ctx.getState();\r\n\r\n ctx.patchState({\r\n lastQueryParams: action.params ?? null,\r\n });\r\n\r\n // Build contextKey in format \"Level:5/Module:10\" or \"Level:5\" or \"Module:10\"\r\n const contextKey = PropertiesState.formulaContextKey(state) ?? '';\r\n\r\n const params = {\r\n ...action.params,\r\n contextKey,\r\n IncludeVirtual: false,\r\n };\r\n\r\n const req$ = this.http.get<Response<PropertyCatalogResponseDto>>(\r\n `${this.baseUrl}/catalog`,\r\n { params },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetAll,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n properties: (response.data?.properties ?? []).map(mapCatalogProperty),\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetProperty)\r\n getOne(ctx: StateContext<PropertiesStateModel>, action: GetProperty) {\r\n const state = ctx.getState();\r\n const params: Record<string, string> = {\r\n mode: action.mode ?? 'edit',\r\n ...this.getScopedEditParams(state),\r\n };\r\n const req$ = this.http.get<Response<PropertyItem>>(\r\n `${this.baseUrl}/${action.id}`,\r\n { params },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetOne,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n selectedProperty: response.data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n private getScopedEditParams(\r\n state: PropertiesStateModel,\r\n ): Record<string, string> {\r\n const parentModuleType = state.parentModuleType?.toString().toLowerCase();\r\n const moduleType = state.moduleType?.toString().toLowerCase();\r\n const levelId = this.toQueryId(state.parentModuleId);\r\n const moduleId = this.toQueryId(state.moduleId);\r\n\r\n if (\r\n parentModuleType !== 'level' ||\r\n moduleType !== 'module' ||\r\n !levelId ||\r\n !moduleId\r\n ) {\r\n return {};\r\n }\r\n\r\n return {\r\n moduleType: 'LevelModule',\r\n levelId,\r\n moduleId,\r\n };\r\n }\r\n\r\n private toQueryId(value: string | number | null | undefined): string | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n return value.toString();\r\n }\r\n\r\n @Action(GetLookups)\r\n getLookups(ctx: StateContext<PropertiesStateModel>, _action: GetLookups) {\r\n const state = ctx.getState();\r\n if (state.lookups.length) {\r\n return of(state.lookups);\r\n }\r\n\r\n const req$ = this.http.get<Response<LookupDefinition[]>>(this.lookupsUrl);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetLookups,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n lookups: response.data ?? [],\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetGroups)\r\n getGroups(ctx: StateContext<PropertiesStateModel>, _action: GetGroups) {\r\n const state = ctx.getState();\r\n if (state.groups.length) {\r\n return of(state.groups);\r\n }\r\n\r\n const req$ = this.http.get<Response<GroupDefinition[]>>(this.groupsUrl);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetGroups,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n groups: response.data ?? [],\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetConfigAsType)\r\n getConfigAsType(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: GetConfigAsType,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n // Don't reload if we already have data for this viewType\r\n if (state.configScopes.length) {\r\n return of(state.configScopes);\r\n }\r\n\r\n const url = `${this.baseUrl}/${action.viewType}/GetViewTypeProperties`;\r\n const req$ = this.http.get<Response<ConfigScope[]>>(url);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetConfigAsType,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n configScopes: response.data ?? [],\r\n }),\r\n });\r\n }\r\n\r\n @Action(GetCountries)\r\n getCountries(ctx: StateContext<PropertiesStateModel>, _action: GetCountries) {\r\n const state = ctx.getState();\r\n if (state.countries.length) {\r\n return of(state.countries);\r\n }\r\n\r\n const req$ = this.http.get<CountryDefinition[]>(this.countriesUrl);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetCountries,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n countries: Array.isArray(response) ? response : [],\r\n }),\r\n errorMessage: 'Failed to load countries',\r\n });\r\n }\r\n\r\n @Action(TestApiConfiguration)\r\n testApiConfiguration(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: TestApiConfiguration,\r\n ) {\r\n ctx.patchState({\r\n apiSchema: null,\r\n apiProperties: [],\r\n });\r\n\r\n const req$ = this.http.post<Response<Record<string, unknown>>>(\r\n this.apiTestUrl,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.TestApiConfiguration,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n const schema = this.buildSchemaFromRecord(response.data);\r\n return {\r\n apiSchema: schema,\r\n apiProperties: this.mapSchemaToOptions(schema),\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(GetPropertyStatuses)\r\n getPropertyStatuses(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: GetPropertyStatuses,\r\n ) {\r\n const req$ = this.http.get<Response<PropertyStatusItem[]>>(\r\n `${this.baseUrl}/${action.propertyId}/Status`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetPropertyStatuses,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n propertyStatuses: Array.isArray(response.data) ? response.data : [],\r\n }),\r\n });\r\n }\r\n\r\n @Action(CreatePropertyStatus)\r\n createPropertyStatus(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: CreatePropertyStatus,\r\n ) {\r\n const req$ = this.http.post<Response<PropertyStatusItem>>(\r\n `${this.baseUrl}/${action.propertyId}/Status`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.CreatePropertyStatus,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const created = response.data;\r\n if (!created) {\r\n return {};\r\n }\r\n\r\n return {\r\n propertyStatuses: [...state.propertyStatuses, created],\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdatePropertyStatus)\r\n updatePropertyStatus(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: UpdatePropertyStatus,\r\n ) {\r\n const req$ = this.http.put<Response<PropertyStatusItem>>(\r\n `${this.baseUrl}/${action.propertyId}/Status/${action.statusId}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.UpdatePropertyStatus,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const updated = response.data;\r\n if (!updated) {\r\n return {};\r\n }\r\n\r\n return {\r\n propertyStatuses: state.propertyStatuses.map((status) =>\r\n status.id === updated.id ? updated : status,\r\n ),\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeletePropertyStatus)\r\n deletePropertyStatus(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: DeletePropertyStatus,\r\n ) {\r\n const req$ = this.http.delete<Response<boolean>>(\r\n `${this.baseUrl}/${action.propertyId}/Status/${action.statusId}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.DeletePropertyStatus,\r\n request$: req$,\r\n onSuccess: (_, state) => ({\r\n propertyStatuses: state.propertyStatuses.filter(\r\n (status) => status.id !== Number(action.statusId),\r\n ),\r\n }),\r\n });\r\n }\r\n\r\n @Action(ReorderPropertyStatuses)\r\n reorderPropertyStatuses(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: ReorderPropertyStatuses,\r\n ) {\r\n const req$ = this.http.put<Response<unknown>>(\r\n this.propertyStatusOrderUrl,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.ReorderPropertyStatuses,\r\n request$: req$,\r\n onSuccess: (_, state) => {\r\n const orderMap = new Map(\r\n action.payload.orders.map((item) => [item.statusId, item.order]),\r\n );\r\n\r\n return {\r\n propertyStatuses: [...state.propertyStatuses]\r\n .map((status) => ({\r\n ...status,\r\n order: orderMap.get(status.id) ?? status.order ?? null,\r\n }))\r\n .sort((left, right) => {\r\n const leftOrder = left.order ?? Number.MAX_SAFE_INTEGER;\r\n const rightOrder = right.order ?? Number.MAX_SAFE_INTEGER;\r\n return leftOrder - rightOrder || left.id - right.id;\r\n }),\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(GetPropertiesForConfigType)\r\n getPropertiesForConfigType(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: GetPropertiesForConfigType,\r\n ) {\r\n const { moduleType, moduleId } = action;\r\n const req$ = this.http.get<Response<CatalogPropertyDto[]>>(\r\n `${this.configPropertiesUrl}/${moduleType}/${moduleId}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.GetConfigProperties,\r\n request$: req$,\r\n onSuccess: (response) => ({\r\n configTypeProperties: (response.data ?? []).map(mapCatalogProperty),\r\n }),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Simple State Updates (No HTTP)\r\n // ============================================================================\r\n\r\n @Action(ResetConfigProperties)\r\n resetConfigProperties(ctx: StateContext<PropertiesStateModel>) {\r\n ctx.patchState({ configTypeProperties: [] });\r\n }\r\n\r\n @Action(ResetConfigScopes)\r\n resetConfigScopes(ctx: StateContext<PropertiesStateModel>) {\r\n ctx.patchState({ configScopes: [] });\r\n }\r\n\r\n @Action(ResetSelectedProperty)\r\n resetSelectedProperty(ctx: StateContext<PropertiesStateModel>) {\r\n ctx.patchState({ selectedProperty: null });\r\n }\r\n\r\n @Action(ResetApiConfiguration)\r\n resetApiConfiguration(ctx: StateContext<PropertiesStateModel>) {\r\n ctx.patchState({\r\n apiSchema: null,\r\n apiProperties: [],\r\n });\r\n }\r\n\r\n @Action(ResetPropertyStatuses)\r\n resetPropertyStatuses(ctx: StateContext<PropertiesStateModel>) {\r\n ctx.patchState({\r\n propertyStatuses: [],\r\n });\r\n }\r\n\r\n @Action(SetPropertiesModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: SetPropertiesModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(SetPropertyTypes)\r\n SetPropertyTypes(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: SetPropertyTypes,\r\n ) {\r\n ctx.patchState({\r\n propertyTypes: action.payload,\r\n });\r\n }\r\n\r\n @Action(SetBreadcrumb)\r\n setBreadcrumb(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: SetBreadcrumb,\r\n ) {\r\n ctx.patchState({\r\n breadcrumbItems: action.items,\r\n });\r\n }\r\n\r\n @Action(SetDefaultViewType)\r\n setDefaultViewType(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: SetDefaultViewType,\r\n ) {\r\n ctx.patchState({\r\n defaultViewType: action.viewType,\r\n });\r\n }\r\n\r\n @Action(CreateProperty)\r\n createProperty(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: CreateProperty,\r\n ) {\r\n const state = ctx.getState();\r\n const moduleType = state.moduleType ?? undefined;\r\n const moduleId = state.moduleId ?? undefined;\r\n const parentPath = state.parentPath ?? '';\r\n\r\n if (!moduleType || moduleId === undefined || moduleId === null) {\r\n console.error('Missing module context for creating property');\r\n return of(null);\r\n }\r\n\r\n const req$ = this.http.post<Response<PropertyItem>>(\r\n `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.Create,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const created = response.data;\r\n if (!created) return {};\r\n\r\n return {\r\n properties: this.adapter.addOne(state.properties, created),\r\n selectedProperty: created,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateProperty)\r\n updateProperty(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: UpdateProperty,\r\n ) {\r\n const state = ctx.getState();\r\n const moduleType = state.moduleType ?? undefined;\r\n const moduleId = state.moduleId ?? undefined;\r\n const parentPath = state.parentPath ?? '';\r\n\r\n if (!moduleType || moduleId === undefined || moduleId === null) {\r\n console.error('Missing module context for updating property');\r\n return of(null);\r\n }\r\n\r\n const req$ = this.http.put<Response<PropertyItem>>(\r\n `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/${action.id}`,\r\n action.payload,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.Update,\r\n request$: req$,\r\n onSuccess: (response, state) => {\r\n const updated = response.data;\r\n if (!updated) return {};\r\n\r\n return {\r\n properties: this.adapter.upsertOne(state.properties, updated, 'id'),\r\n selectedProperty: updated,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteProperty)\r\n deleteProperty(\r\n ctx: StateContext<PropertiesStateModel>,\r\n action: DeleteProperty,\r\n ) {\r\n const req$ = this.http.delete<void>(\r\n `${this.baseUrl}/${encodeURIComponent(String(action.id))}`,\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PropertiesActionKey.Delete,\r\n request$: req$,\r\n onSuccess: (_, state) => {\r\n const remaining = this.adapter.removeOne(\r\n state.properties,\r\n Number(action.id),\r\n 'id',\r\n );\r\n const nextSelected =\r\n state.selectedProperty &&\r\n state.selectedProperty.id === Number(action.id)\r\n ? null\r\n : state.selectedProperty;\r\n\r\n return {\r\n properties: remaining,\r\n selectedProperty: nextSelected,\r\n };\r\n },\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Helper Methods\r\n // ============================================================================\r\n\r\n private mapSchemaToOptions(schema: ApiSchema | null): ApiPropertyOption[] {\r\n if (!schema?.properties) {\r\n return [];\r\n }\r\n\r\n return Object.entries(schema.properties).map(([key, definition]) => {\r\n const typeLabel = definition?.type ? ` | ${definition.type}` : '';\r\n return {\r\n key,\r\n name: `${key}${typeLabel}`,\r\n type: definition?.type,\r\n } as ApiPropertyOption;\r\n });\r\n }\r\n\r\n private buildSchemaFromRecord(\r\n record: Record<string, unknown> | null | undefined,\r\n ): ApiSchema | null {\r\n if (!record) {\r\n return null;\r\n }\r\n\r\n const properties = Object.entries(record).reduce<\r\n Record<string, ApiSchemaProperty>\r\n >((acc, [key, value]) => {\r\n acc[key] = { type: this.inferApiFieldType(value) };\r\n return acc;\r\n }, {});\r\n\r\n return Object.keys(properties).length ? { properties } : null;\r\n }\r\n\r\n private inferApiFieldType(value: unknown): string | undefined {\r\n if (Array.isArray(value)) {\r\n return 'array';\r\n }\r\n\r\n if (value === null) {\r\n return 'null';\r\n }\r\n\r\n switch (typeof value) {\r\n case 'string':\r\n case 'number':\r\n case 'boolean':\r\n return typeof value;\r\n case 'object':\r\n return 'object';\r\n default:\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\nfunction mapCatalogProperty(property: CatalogPropertyDto): PropertyItem {\r\n return {\r\n id: property.id,\r\n key: property.key,\r\n normalizedKey: property.normalizedKey,\r\n viewType: property.viewType,\r\n viewTypeLabel: property.viewTypeName?.display ?? property.viewType,\r\n name: { display: property.label },\r\n order: property.order,\r\n isRequired: property.isRequired,\r\n isSystem: property.isSystem,\r\n isCalculated: property.isCalculated ?? false,\r\n isTranslatable: property.isTranslatable ?? false,\r\n configuration: property.configuration ?? undefined,\r\n };\r\n}\r\n","import { Injectable, computed, inject } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\nimport type { Observable } from 'rxjs';\r\nimport {\r\n PropertiesActionKey,\r\n type ApiTestPayload,\r\n type PropertyStatusOrderPayload,\r\n type PropertyStatusPayload,\r\n} from './properties.model';\r\nimport type { BreadcrumbItem } from '@masterteam/components/breadcrumb';\r\nimport {\r\n CreateProperty,\r\n DeleteProperty,\r\n GetGroups,\r\n GetConfigAsType,\r\n GetLookups,\r\n GetCountries,\r\n TestApiConfiguration,\r\n ResetApiConfiguration,\r\n GetPropertyStatuses,\r\n CreatePropertyStatus,\r\n UpdatePropertyStatus,\r\n DeletePropertyStatus,\r\n ReorderPropertyStatuses,\r\n ResetPropertyStatuses,\r\n GetPropertiesForConfigType,\r\n GetProperties,\r\n GetProperty,\r\n ResetConfigProperties,\r\n ResetConfigScopes,\r\n ResetSelectedProperty,\r\n SetPropertiesModuleInfo,\r\n UpdateProperty,\r\n SetPropertyTypes,\r\n SetBreadcrumb,\r\n SetDefaultViewType,\r\n} from './properties.actions';\r\nimport { PropertiesState } from './properties.state';\r\nimport type {\r\n PropertiesQueryParams,\r\n PropertiesScope,\r\n PropertyPayload,\r\n} from './properties.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PropertiesFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ============================================================================\r\n // Data Selectors - Memoized by NGXS (fine-grained reactivity)\r\n // ============================================================================\r\n readonly list = select(PropertiesState.properties);\r\n readonly propertyTypes = select(PropertiesState.propertyTypes);\r\n readonly selected = select(PropertiesState.selectedProperty);\r\n readonly moduleId = select(PropertiesState.moduleId);\r\n readonly parentModuleId = select(PropertiesState.parentModuleId);\r\n readonly formulaContextKey = select(PropertiesState.formulaContextKey);\r\n readonly lookups = select(PropertiesState.lookups);\r\n readonly configProperties = select(PropertiesState.configTypeProperties);\r\n readonly groups = select(PropertiesState.groups);\r\n readonly configScopes = select(PropertiesState.configScopes);\r\n readonly countries = select(PropertiesState.countries);\r\n readonly apiSchema = select(PropertiesState.apiSchema);\r\n readonly apiProperties = select(PropertiesState.apiProperties);\r\n readonly propertyStatuses = select(PropertiesState.propertyStatuses);\r\n readonly breadcrumbItems = select(PropertiesState.breadcrumbItems);\r\n readonly defaultViewType = select(PropertiesState.defaultViewType);\r\n\r\n // ============================================================================\r\n // Loading/Error Slices - Memoized by NGXS\r\n // ============================================================================\r\n private readonly loadingActive = select(PropertiesState.getLoadingActive);\r\n private readonly errors = select(PropertiesState.getErrors);\r\n\r\n // ============================================================================\r\n // Loading Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly isLoadingAll = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetAll),\r\n );\r\n readonly isLoadingOne = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetOne),\r\n );\r\n readonly isCreating = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.Create),\r\n );\r\n readonly isUpdating = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.Update),\r\n );\r\n readonly isDeleting = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.Delete),\r\n );\r\n readonly isLoadingLookups = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetLookups),\r\n );\r\n readonly isLoadingGroups = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetGroups),\r\n );\r\n readonly isLoadingConfigProperties = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetConfigProperties),\r\n );\r\n readonly isLoadingConfigAsType = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetConfigAsType),\r\n );\r\n readonly isLoadingCountries = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetCountries),\r\n );\r\n readonly isTestingApi = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.TestApiConfiguration),\r\n );\r\n readonly isLoadingPropertyStatuses = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.GetPropertyStatuses),\r\n );\r\n readonly isCreatingPropertyStatus = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.CreatePropertyStatus),\r\n );\r\n readonly isUpdatingPropertyStatus = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.UpdatePropertyStatus),\r\n );\r\n readonly isDeletingPropertyStatus = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.DeletePropertyStatus),\r\n );\r\n readonly isReorderingPropertyStatuses = computed(() =>\r\n this.loadingActive().includes(PropertiesActionKey.ReorderPropertyStatuses),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly allError = computed(\r\n () => this.errors()[PropertiesActionKey.GetAll] ?? null,\r\n );\r\n readonly oneError = computed(\r\n () => this.errors()[PropertiesActionKey.GetOne] ?? null,\r\n );\r\n readonly createError = computed(\r\n () => this.errors()[PropertiesActionKey.Create] ?? null,\r\n );\r\n readonly updateError = computed(\r\n () => this.errors()[PropertiesActionKey.Update] ?? null,\r\n );\r\n readonly deleteError = computed(\r\n () => this.errors()[PropertiesActionKey.Delete] ?? null,\r\n );\r\n readonly lookupsError = computed(\r\n () => this.errors()[PropertiesActionKey.GetLookups] ?? null,\r\n );\r\n readonly groupsError = computed(\r\n () => this.errors()[PropertiesActionKey.GetGroups] ?? null,\r\n );\r\n readonly configPropertiesError = computed(\r\n () => this.errors()[PropertiesActionKey.GetConfigProperties] ?? null,\r\n );\r\n readonly configAsTypeError = computed(\r\n () => this.errors()[PropertiesActionKey.GetConfigAsType] ?? null,\r\n );\r\n readonly countriesError = computed(\r\n () => this.errors()[PropertiesActionKey.GetCountries] ?? null,\r\n );\r\n readonly apiTestError = computed(\r\n () => this.errors()[PropertiesActionKey.TestApiConfiguration] ?? null,\r\n );\r\n readonly propertyStatusesError = computed(\r\n () => this.errors()[PropertiesActionKey.GetPropertyStatuses] ?? null,\r\n );\r\n\r\n // ============================================================================\r\n // Derived Data - Computed from data selectors\r\n // ============================================================================\r\n readonly systemProperties = computed(() =>\r\n this.list().filter((property) => Boolean(property.isSystem)),\r\n );\r\n readonly customProperties = computed(() =>\r\n this.list().filter((property) => !Boolean(property.isSystem)),\r\n );\r\n\r\n // ============================================================================\r\n // Action Dispatchers\r\n // ============================================================================\r\n\r\n loadAll(params?: Partial<PropertiesQueryParams>): Observable<unknown> {\r\n return this.store.dispatch(new GetProperties(params));\r\n }\r\n\r\n loadOne(id: string | number, mode: 'edit' = 'edit'): Observable<unknown> {\r\n return this.store.dispatch(new GetProperty(id, mode));\r\n }\r\n\r\n delete(id: string | number): Observable<unknown> {\r\n return this.store.dispatch(new DeleteProperty(id));\r\n }\r\n\r\n create(payload: PropertyPayload): Observable<unknown> {\r\n return this.store.dispatch(new CreateProperty(payload));\r\n }\r\n\r\n update(id: string | number, payload: PropertyPayload): Observable<unknown> {\r\n return this.store.dispatch(new UpdateProperty(id, payload));\r\n }\r\n\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new SetPropertiesModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n setScope(scope: PropertiesScope): Observable<unknown> {\r\n return this.setModuleInfo(\r\n scope.target.type,\r\n scope.target.id,\r\n scope.parent?.type,\r\n scope.parent?.id,\r\n scope.parentPath,\r\n );\r\n }\r\n\r\n loadLookups(): Observable<unknown> {\r\n return this.store.dispatch(new GetLookups());\r\n }\r\n\r\n loadGroups(): Observable<unknown> {\r\n return this.store.dispatch(new GetGroups());\r\n }\r\n\r\n loadConfigAsType(viewType: string): Observable<unknown> {\r\n return this.store.dispatch(new GetConfigAsType(viewType));\r\n }\r\n\r\n loadCountries(): Observable<unknown> {\r\n return this.store.dispatch(new GetCountries());\r\n }\r\n\r\n testApiConfiguration(payload: ApiTestPayload): Observable<unknown> {\r\n return this.store.dispatch(new TestApiConfiguration(payload));\r\n }\r\n\r\n resetApiConfiguration(): Observable<unknown> {\r\n return this.store.dispatch(new ResetApiConfiguration());\r\n }\r\n\r\n loadPropertyStatuses(propertyId: string | number): Observable<unknown> {\r\n return this.store.dispatch(new GetPropertyStatuses(propertyId));\r\n }\r\n\r\n createPropertyStatus(\r\n propertyId: string | number,\r\n payload: PropertyStatusPayload,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(new CreatePropertyStatus(propertyId, payload));\r\n }\r\n\r\n updatePropertyStatus(\r\n propertyId: string | number,\r\n statusId: string | number,\r\n payload: PropertyStatusPayload,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new UpdatePropertyStatus(propertyId, statusId, payload),\r\n );\r\n }\r\n\r\n deletePropertyStatus(\r\n propertyId: string | number,\r\n statusId: string | number,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(new DeletePropertyStatus(propertyId, statusId));\r\n }\r\n\r\n reorderPropertyStatuses(\r\n payload: PropertyStatusOrderPayload,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(new ReorderPropertyStatuses(payload));\r\n }\r\n\r\n resetPropertyStatuses(): Observable<unknown> {\r\n return this.store.dispatch(new ResetPropertyStatuses());\r\n }\r\n\r\n setPropertyTypes(propertyTypes: any) {\r\n return this.store.dispatch(new SetPropertyTypes(propertyTypes));\r\n }\r\n\r\n loadPropertiesForConfigType(\r\n moduleType: string,\r\n moduleId: string | number,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new GetPropertiesForConfigType(moduleType, moduleId),\r\n );\r\n }\r\n\r\n resetSelectedProperty(): Observable<unknown> {\r\n return this.store.dispatch(new ResetSelectedProperty());\r\n }\r\n\r\n resetConfigProperties(): Observable<unknown> {\r\n return this.store.dispatch(new ResetConfigProperties());\r\n }\r\n\r\n resetConfigScopes(): Observable<unknown> {\r\n return this.store.dispatch(new ResetConfigScopes());\r\n }\r\n\r\n setBreadcrumb(items: BreadcrumbItem[]): Observable<unknown> {\r\n return this.store.dispatch(new SetBreadcrumb(items));\r\n }\r\n\r\n setDefaultViewType(viewType: string): Observable<unknown> {\r\n return this.store.dispatch(new SetDefaultViewType(viewType));\r\n }\r\n}\r\n","// store/app.state.ts\r\n\r\nimport { HttpContextToken } from '@angular/common/http';\r\n\r\nexport const REQUEST_CONTEXT = new HttpContextToken<{ useBaseUrl: boolean }>(\r\n () => ({\r\n useBaseUrl: false,\r\n }),\r\n);\r\n","// store/index.ts\r\n// This file exports EVERYTHING - one import for all state needs\r\n\r\n// States\r\n\r\nexport * from './properties/properties.state';\r\nexport * from './properties/properties.model';\r\n\r\n// Actions\r\n\r\nexport * from './properties/properties.actions';\r\n\r\n// Facades\r\n\r\nexport * from './properties/properties.facade';\r\n\r\n// Re-export app state\r\nexport * from './app.state';\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n linkedSignal,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Table, ColumnDef, TableAction } from '@masterteam/components/table';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { PropertiesFacade, PropertyItem } from '../../store';\r\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Divider } from 'primeng/divider';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { finalize } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-properties-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Table,\r\n Breadcrumb,\r\n Card,\r\n Avatar,\r\n Divider,\r\n Button,\r\n TranslocoModule,\r\n Icon,\r\n ],\r\n templateUrl: './properties-list.html',\r\n styleUrl: './properties-list.scss',\r\n})\r\nexport class PropertiesList {\r\n readonly isCalculatedTpl =\r\n viewChild.required<TemplateRef<any>>('isCalculatedTpl');\r\n readonly viewTypeTpl = viewChild.required<TemplateRef<any>>('viewTypeTpl');\r\n\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly router = inject(Router);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly defaultTab = 'all';\r\n\r\n tab = input<string>();\r\n\r\n tabs = linkedSignal(() => {\r\n const systemProperties = this.facade.systemProperties();\r\n if (!systemProperties || systemProperties.length === 0) {\r\n return [];\r\n }\r\n return [\r\n {\r\n label: this.transloco.translate('properties.list.tabAll'),\r\n value: 'all',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.tabSystem'),\r\n value: 'system',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.tabCustom'),\r\n value: 'custom',\r\n },\r\n ];\r\n });\r\n\r\n activeTab = linkedSignal(() => {\r\n return this.tab() || this.defaultTab;\r\n });\r\n\r\n /**\r\n * Curated quick-create cards shown in the empty state only. The Type\r\n * column filter is data-driven (see `viewTypeOptions`) and no longer\r\n * uses this list.\r\n */\r\n propertyTypes = signal([\r\n {\r\n label: this.transloco.translate('properties.list.typeShortText'),\r\n icon: 'editor.type-square',\r\n value: 'Text',\r\n color: 'pink',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.typeParagraph'),\r\n icon: 'editor.line-height',\r\n value: 'LongText',\r\n color: 'sky',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.typeUser'),\r\n icon: 'user.user-01',\r\n value: 'User',\r\n color: 'yellow',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.typeNumber'),\r\n icon: 'editor.letter-spacing-01',\r\n value: 'Number',\r\n color: 'violet',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.typeCurrency'),\r\n icon: 'finance.currency-dollar',\r\n value: 'Currency',\r\n color: 'indigo',\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.typeLookup'),\r\n icon: 'custom.list-cards',\r\n value: 'Lookup',\r\n color: 'lime',\r\n },\r\n ]);\r\n\r\n /**\r\n * Type filter options derived from the loaded properties: option value is\r\n * the raw `viewType` (so it matches the `viewType` column key) while the\r\n * label is the localized `viewTypeName` (`viewTypeLabel`). Built from the\r\n * full list — not the tab-filtered data — so options stay stable per tab.\r\n */\r\n readonly viewTypeOptions = computed(() => {\r\n const seen = new Map<string, string>();\r\n for (const property of this.facade.list()) {\r\n if (property.viewType && !seen.has(property.viewType)) {\r\n seen.set(\r\n property.viewType,\r\n property.viewTypeLabel || property.viewType,\r\n );\r\n }\r\n }\r\n return Array.from(seen, ([value, label]) => ({ label, value })).sort(\r\n (a, b) => a.label.localeCompare(b.label),\r\n );\r\n });\r\n\r\n readonly tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'name.display',\r\n label: this.transloco.translate('properties.list.columnName'),\r\n filterConfig: {\r\n type: 'text',\r\n label: this.transloco.translate('properties.list.columnName'),\r\n },\r\n },\r\n {\r\n key: 'viewType',\r\n label: this.transloco.translate('properties.list.columnType'),\r\n type: 'custom',\r\n customCellTpl: this.viewTypeTpl(),\r\n filterConfig: {\r\n type: 'select',\r\n label: this.transloco.translate('properties.list.columnType'),\r\n options: this.viewTypeOptions(),\r\n },\r\n },\r\n {\r\n key: 'isCalculated',\r\n label: this.transloco.translate('properties.list.columnCalculated'),\r\n type: 'custom',\r\n customCellTpl: this.isCalculatedTpl(),\r\n filterConfig: {\r\n type: 'select',\r\n label: this.transloco.translate('properties.list.columnCalculated'),\r\n options: [\r\n {\r\n label: this.transloco.translate('properties.list.yes'),\r\n value: true,\r\n },\r\n {\r\n label: this.transloco.translate('properties.list.no'),\r\n value: false,\r\n },\r\n ],\r\n },\r\n },\r\n ]);\r\n\r\n tableActions = computed<TableAction[]>(() => {\r\n if (this.tableData().length === 0 || this.activeTab() === 'system') {\r\n return [];\r\n }\r\n return [\r\n {\r\n icon: 'general.plus',\r\n label: this.transloco.translate('properties.list.createAction'),\r\n color: 'primary',\r\n action: () => {\r\n this.createProperty();\r\n },\r\n },\r\n ];\r\n });\r\n deletingRowIds = signal<any[]>([]);\r\n readonly rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.transloco.translate('properties.list.deleteAction'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row) => this.deleteRow(row),\r\n hidden: (row: PropertyItem) => !!row.isSystem || row.id < 0,\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n loading: (row: PropertyItem) => this.deletingRowIds().includes(row.id),\r\n },\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.transloco.translate('properties.list.editAction'),\r\n color: 'primary',\r\n action: (row) => this.editRow(row),\r\n hidden: (row: PropertyItem) => row.id < 0,\r\n },\r\n ]);\r\n\r\n readonly loading = this.facade.isLoadingAll;\r\n\r\n readonly tableData = computed(() => {\r\n const tab = this.activeTab();\r\n const allProperties = this.facade.list();\r\n\r\n switch (tab) {\r\n case 'system':\r\n return this.facade.systemProperties();\r\n case 'custom':\r\n return this.facade.customProperties();\r\n case 'all':\r\n default:\r\n return allProperties;\r\n }\r\n });\r\n\r\n readonly breadcrumbItems = this.facade.breadcrumbItems;\r\n\r\n private editRow(row: PropertyItem): void {\r\n if (!row?.id) {\r\n return;\r\n }\r\n this.navigatePreservingTab(['../properties-form', row.id]);\r\n }\r\n\r\n private deleteRow(row: PropertyItem): void {\r\n if (!row?.id) {\r\n return;\r\n }\r\n this.deletingRowIds.update((ids) => [...ids, row.id]);\r\n this.facade\r\n .delete(row.id)\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== row.id),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n }\r\n\r\n createProperty() {\r\n this.navigatePreservingTab(['../properties-form']);\r\n }\r\n\r\n createPropertyWithType(viewType: string) {\r\n this.facade.setDefaultViewType(viewType);\r\n this.createProperty();\r\n }\r\n onTabChange(tab: string): void {\r\n const currentTab = tab;\r\n if (currentTab != this.tab()) {\r\n this.updateTabQueryParam(currentTab);\r\n }\r\n }\r\n private updateTabQueryParam(tab: string): void {\r\n this.router.navigate([], {\r\n relativeTo: this.route,\r\n queryParams: { tab },\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true,\r\n });\r\n }\r\n\r\n private navigatePreservingTab(commands: any[]): void {\r\n this.router.navigate(commands, {\r\n relativeTo: this.route,\r\n queryParams: { tab: this.activeTab() },\r\n queryParamsHandling: 'merge',\r\n });\r\n }\r\n}\r\n","<div class=\"space-y-3\">\r\n <div class=\"flex items-center justify-between\">\r\n <div class=\"space-y-1\">\r\n <h1 class=\"text-xl font-semibold text-slate-900 tracking-tight\">\r\n {{ \"properties.list.pageTitle\" | transloco }}\r\n </h1>\r\n <mt-breadcrumb\r\n [items]=\"breadcrumbItems()\"\r\n [styleClass]=\"'flex justify-center'\"\r\n >\r\n </mt-breadcrumb>\r\n </div>\r\n </div>\r\n <mt-table\r\n [tabs]=\"tabs()\"\r\n [(activeTab)]=\"activeTab\"\r\n (onTabChange)=\"onTabChange($event)\"\r\n [data]=\"tableData()\"\r\n [actions]=\"tableActions()\"\r\n [columns]=\"tableColumns()\"\r\n dataKey=\"id\"\r\n storageKey=\"properties-list-table\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n [loading]=\"loading()\"\r\n >\r\n <ng-template #viewTypeTpl let-row>\r\n <span class=\"text-sm text-slate-700 dark:text-slate-200\">\r\n {{ row.viewTypeLabel || row.viewType }}\r\n </span>\r\n </ng-template>\r\n\r\n <ng-template #isCalculatedTpl let-row>\r\n @if (row.isCalculated) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-blue-50 dark:bg-blue-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"education.calculator\"\r\n class=\"text-blue-600 dark:text-blue-300 text-sm\"\r\n />\r\n <span class=\"text-blue-700 dark:text-blue-200 text-xs font-medium\">\r\n {{ \"properties.list.calculated\" | transloco }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-slate-100 dark:bg-slate-800/50 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.minus-circle\"\r\n class=\"text-slate-500 dark:text-slate-400 text-sm\"\r\n />\r\n <span class=\"text-slate-600 dark:text-slate-300 text-xs font-medium\">\r\n {{ \"properties.list.uncalculated\" | transloco }}\r\n </span>\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #empty>\r\n <div headless class=\"flex-col justify-center items-center w-full p-5\">\r\n <div class=\"content flex flex-col gap-5 items-center text-center mb-5\">\r\n <svg\r\n width=\"152\"\r\n height=\"120\"\r\n viewBox=\"0 0 152 120\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <circle cx=\"76\" cy=\"52\" r=\"52\" fill=\"#E9EAEB\" />\r\n <g filter=\"url(#filter0_ddd_2474_28277)\">\r\n <path\r\n d=\"M77.6 16C66.8273 16 57.2978 21.3233 51.4987 29.4829C49.605 29.0363 47.6301 28.8 45.6 28.8C31.4615 28.8 20 40.2615 20 54.4C20 68.5385 31.4615 80 45.6 80L109.6 80C121.971 80 132 69.9712 132 57.6C132 45.2288 121.971 35.2 109.6 35.2C108.721 35.2 107.854 35.2506 107.002 35.349C102.098 23.9677 90.7797 16 77.6 16Z\"\r\n fill=\"#FAFAFA\"\r\n />\r\n <ellipse\r\n cx=\"45.6\"\r\n cy=\"54.3998\"\r\n rx=\"25.6\"\r\n ry=\"25.6\"\r\n fill=\"url(#paint0_linear_2474_28277)\"\r\n />\r\n <circle\r\n cx=\"77.6016\"\r\n cy=\"48\"\r\n r=\"32\"\r\n fill=\"url(#paint1_linear_2474_28277)\"\r\n />\r\n <ellipse\r\n cx=\"109.599\"\r\n cy=\"57.6002\"\r\n rx=\"22.4\"\r\n ry=\"22.4\"\r\n fill=\"url(#paint2_linear_2474_28277)\"\r\n />\r\n </g>\r\n <circle cx=\"21\" cy=\"19\" r=\"5\" fill=\"#F5F5F5\" />\r\n <circle cx=\"18\" cy=\"109\" r=\"7\" fill=\"#F5F5F5\" />\r\n <circle cx=\"145\" cy=\"35\" r=\"7\" fill=\"#F5F5F5\" />\r\n <circle cx=\"134\" cy=\"8\" r=\"4\" fill=\"#F5F5F5\" />\r\n <foreignObject x=\"44\" y=\"54\" width=\"64\" height=\"64\">\r\n <div\r\n xmlns=\"http://www.w3.org/1999/xhtml\"\r\n style=\"\r\n backdrop-filter: blur(4px);\r\n clip-path: url(#bgblur_0_2474_28277_clip_path);\r\n height: 100%;\r\n width: 100%;\r\n \"\r\n ></div>\r\n </foreignObject>\r\n <g data-figma-bg-blur-radius=\"8\">\r\n <path\r\n d=\"M52 86C52 72.7452 62.7452 62 76 62C89.2548 62 100 72.7452 100 86C100 99.2548 89.2548 110 76 110C62.7452 110 52 99.2548 52 86Z\"\r\n fill=\"#344054\"\r\n fill-opacity=\"0.4\"\r\n />\r\n <path\r\n d=\"M85 95L81.5001 91.5M84 85.5C84 90.1944 80.1944 94 75.5 94C70.8056 94 67 90.1944 67 85.5C67 80.8056 70.8056 77 75.5 77C80.1944 77 84 80.8056 84 85.5Z\"\r\n stroke=\"white\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_ddd_2474_28277\"\r\n x=\"0\"\r\n y=\"16\"\r\n width=\"152\"\r\n height=\"104\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\"\r\n >\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"1.5\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect1_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"3\" />\r\n <feGaussianBlur stdDeviation=\"1.5\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.04 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2474_28277\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect2_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"8\" />\r\n <feGaussianBlur stdDeviation=\"4\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.03 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"effect1_dropShadow_2474_28277\"\r\n result=\"effect2_dropShadow_2474_28277\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect3_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"20\" />\r\n <feGaussianBlur stdDeviation=\"12\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.08 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"effect2_dropShadow_2474_28277\"\r\n result=\"effect3_dropShadow_2474_28277\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in=\"SourceGraphic\"\r\n in2=\"effect3_dropShadow_2474_28277\"\r\n result=\"shape\"\r\n />\r\n </filter>\r\n <clipPath\r\n id=\"bgblur_0_2474_28277_clip_path\"\r\n transform=\"translate(-44 -54)\"\r\n >\r\n <path\r\n d=\"M52 86C52 72.7452 62.7452 62 76 62C89.2548 62 100 72.7452 100 86C100 99.2548 89.2548 110 76 110C62.7452 110 52 99.2548 52 86Z\"\r\n />\r\n </clipPath>\r\n <linearGradient\r\n id=\"paint0_linear_2474_28277\"\r\n x1=\"25.9429\"\r\n y1=\"37.4855\"\r\n x2=\"71.2\"\r\n y2=\"79.9998\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stop-color=\"white\" stop-opacity=\"0\" />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint1_linear_2474_28277\"\r\n x1=\"53.0301\"\r\n y1=\"26.8571\"\r\n x2=\"109.602\"\r\n y2=\"80\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stop-color=\"white\" stop-opacity=\"0\" />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint2_linear_2474_28277\"\r\n x1=\"92.3992\"\r\n y1=\"42.8002\"\r\n x2=\"131.999\"\r\n y2=\"80.0002\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stop-color=\"white\" stop-opacity=\"0\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"text-md text-surface-600\">\r\n {{ \"properties.list.emptyStateNoData\" | transloco }}\r\n </div>\r\n </div>\r\n <div>\r\n <mt-button\r\n [label]=\"'properties.list.addNewProperty' | transloco\"\r\n icon=\"general.plus\"\r\n (click)=\"createProperty()\"\r\n />\r\n </div>\r\n </div>\r\n <p-divider type=\"solid\">\r\n <div class=\"text-lg text-surface-600\">\r\n {{ \"properties.list.emptyStateTemplate\" | transloco }}\r\n </div>\r\n </p-divider>\r\n <div class=\"flex gap-3 mt-5 justify-center\">\r\n @for (card of propertyTypes(); track card.label) {\r\n <mt-card\r\n headless\r\n class=\"w-25 tailwind-4 cursor-pointer\"\r\n style=\"background-color: #fafafa\"\r\n (click)=\"createPropertyWithType(card.value)\"\r\n >\r\n <div class=\"content flex flex-col gap-3 items-center text-center\">\r\n <mt-avatar\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + card.color + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + card.color + '-600)'\"\r\n [icon]=\"card.icon\"\r\n shape=\"square\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"text-xs font-normal\">{{ card.label }}</div>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-table>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n effect,\r\n forwardRef,\r\n inject,\r\n signal,\r\n computed,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormArray,\r\n FormControl,\r\n FormGroup,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ReactiveFormsModule,\r\n ValidationErrors,\r\n Validator,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { TranslocoService, TranslocoModule } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { PropertiesFacade } from '../../../../store';\r\nimport type { ApiConfigurationValue, ApiSchema } from '../../../../store';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\n\r\ntype HeaderFormGroup = FormGroup<{\r\n key: FormControl<string>;\r\n value: FormControl<string>;\r\n}>;\r\n\r\n@Component({\r\n selector: 'mt-api-configuration',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n TextField,\r\n SelectField,\r\n ToggleField,\r\n Button,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './api-configuration.html',\r\n styleUrl: './api-configuration.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ApiConfiguration),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => ApiConfiguration),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class ApiConfiguration implements ControlValueAccessor, Validator {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly destroyRef = inject(DestroyRef);\r\n readonly transloco = inject(TranslocoService);\r\n\r\n private readonly schema = signal<ApiSchema | null>(null);\r\n private lastLoadedPayloadSignature: string | null = null;\r\n private isWriting = false;\r\n private touched = false;\r\n\r\n readonly isTesting = this.facade.isTestingApi;\r\n readonly apiProperties = this.facade.apiProperties;\r\n readonly resolvedApiProperties = computed(() => {\r\n const loadedProperties = this.apiProperties();\r\n if (loadedProperties.length) {\r\n return loadedProperties;\r\n }\r\n\r\n return this.mapSchemaToOptions(this.schema());\r\n });\r\n readonly hasDetectedSchema = computed(\r\n () => this.resolvedApiProperties().length > 0,\r\n );\r\n\r\n readonly form = new FormGroup({\r\n endpoint: new FormControl<string>('', {\r\n nonNullable: true,\r\n validators: [Validators.required],\r\n }),\r\n headers: new FormArray<HeaderFormGroup>([]),\r\n key: new FormControl<string>('', {\r\n nonNullable: true,\r\n validators: [Validators.required],\r\n }),\r\n value: new FormControl<string>('', {\r\n nonNullable: true,\r\n validators: [Validators.required],\r\n }),\r\n supportMultiSelect: new FormControl<boolean>(false, { nonNullable: true }),\r\n });\r\n\r\n private onChange: (value: ApiConfigurationValue | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n private readonly formChanges = toSignal(this.form.valueChanges, {\r\n initialValue: this.form.getRawValue(),\r\n });\r\n\r\n constructor() {\r\n this.facade.resetApiConfiguration();\r\n effect(() => {\r\n this.formChanges();\r\n this.emitValue();\r\n this.onValidatorChange();\r\n });\r\n\r\n effect(() => {\r\n const latestSchema = this.facade.apiSchema();\r\n if (latestSchema !== undefined) {\r\n this.schema.set(latestSchema);\r\n if (!this.isWriting) {\r\n this.emitValue(false);\r\n }\r\n }\r\n });\r\n\r\n this.destroyRef.onDestroy(() => {\r\n this.facade.resetApiConfiguration();\r\n });\r\n }\r\n\r\n get headers(): FormArray<HeaderFormGroup> {\r\n return this.form.controls.headers;\r\n }\r\n\r\n writeValue(value: ApiConfigurationValue | null): void {\r\n this.isWriting = true;\r\n try {\r\n if (!value) {\r\n this.form.reset(\r\n {\r\n endpoint: '',\r\n key: '',\r\n value: '',\r\n supportMultiSelect: false,\r\n },\r\n { emitEvent: false },\r\n );\r\n this.setHeadersFromRecord({});\r\n this.lastLoadedPayloadSignature = null;\r\n this.facade.resetApiConfiguration().subscribe();\r\n this.schema.set(null);\r\n this.touched = false;\r\n return;\r\n }\r\n\r\n this.schema.set(value.schema ?? null);\r\n this.form.patchValue(\r\n {\r\n endpoint: value.endpoint ?? '',\r\n key: value.key ?? '',\r\n value: value.value ?? '',\r\n supportMultiSelect: !!value.supportMultiSelect,\r\n },\r\n { emitEvent: false },\r\n );\r\n this.setHeadersFromRecord(value.headers ?? {});\r\n this.touched = false;\r\n this.loadApiFields(value.endpoint ?? '', value.headers ?? {});\r\n } finally {\r\n this.isWriting = false;\r\n this.emitValue(false);\r\n this.onValidatorChange();\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: ApiConfigurationValue | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n validate(_: AbstractControl): ValidationErrors | null {\r\n return this.form.valid ? null : { apiConfigurationInvalid: true };\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.form.disable({ emitEvent: false });\r\n } else {\r\n this.form.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n addHeader(): void {\r\n this.headers.push(this.createHeaderGroup());\r\n }\r\n\r\n removeHeader(index: number): void {\r\n this.headers.removeAt(index);\r\n this.emitValue();\r\n }\r\n\r\n testApi(): void {\r\n if (!this.form.controls.endpoint.valid) {\r\n this.form.controls.endpoint.markAsTouched();\r\n return;\r\n }\r\n\r\n const headers = this.headersToRecord();\r\n this.loadApiFields(this.form.controls.endpoint.value, headers, true);\r\n }\r\n\r\n private emitValue(triggerTouched = true): void {\r\n if (this.isWriting) {\r\n return;\r\n }\r\n\r\n const headers = this.headersToRecord();\r\n const value: ApiConfigurationValue = {\r\n endpoint: this.form.controls.endpoint.value,\r\n headers,\r\n key: this.form.controls.key.value,\r\n value: this.form.controls.value.value,\r\n supportMultiSelect: this.form.controls.supportMultiSelect.value,\r\n schema: this.schema(),\r\n };\r\n\r\n this.onChange(value);\r\n\r\n if (triggerTouched && !this.touched) {\r\n this.onTouched();\r\n this.touched = true;\r\n }\r\n }\r\n\r\n private createHeaderGroup(\r\n initial: Partial<{ key: string; value: string }> = {},\r\n ): HeaderFormGroup {\r\n return new FormGroup({\r\n key: new FormControl(initial.key ?? '', { nonNullable: true }),\r\n value: new FormControl(initial.value ?? '', { nonNullable: true }),\r\n });\r\n }\r\n\r\n private setHeadersFromRecord(headers: Record<string, string>): void {\r\n while (this.headers.length) {\r\n this.headers.removeAt(0);\r\n }\r\n\r\n Object.entries(headers).forEach(([key, value]) => {\r\n this.headers.push(this.createHeaderGroup({ key, value }));\r\n });\r\n }\r\n\r\n private headersToRecord(): Record<string, string> {\r\n return this.headers.controls.reduce<Record<string, string>>(\r\n (acc, group) => {\r\n const key = group.controls.key.value?.trim();\r\n if (key) {\r\n acc[key] = group.controls.value.value ?? '';\r\n }\r\n return acc;\r\n },\r\n {},\r\n );\r\n }\r\n\r\n private loadApiFields(\r\n endpoint: string,\r\n headers: Record<string, string>,\r\n force = false,\r\n ): void {\r\n const trimmedEndpoint = endpoint.trim();\r\n if (!trimmedEndpoint) {\r\n return;\r\n }\r\n\r\n const payload = {\r\n endpoint: trimmedEndpoint,\r\n headers: Object.keys(headers).length ? headers : undefined,\r\n };\r\n const payloadSignature = JSON.stringify(payload);\r\n if (!force && payloadSignature === this.lastLoadedPayloadSignature) {\r\n return;\r\n }\r\n\r\n this.lastLoadedPayloadSignature = payloadSignature;\r\n this.facade.testApiConfiguration(payload).subscribe();\r\n }\r\n\r\n private mapSchemaToOptions(schema: ApiSchema | null): Array<{\r\n key: string;\r\n name: string;\r\n type?: string;\r\n }> {\r\n if (!schema?.properties) {\r\n return [];\r\n }\r\n\r\n return Object.entries(schema.properties).map(([key, definition]) => {\r\n const typeLabel = definition?.type ? ` | ${definition.type}` : '';\r\n return {\r\n key,\r\n name: `${key}${typeLabel}`,\r\n type: definition?.type,\r\n };\r\n });\r\n }\r\n}\r\n","<div [formGroup]=\"form\" class=\"space-y-6\">\r\n <div class=\"space-y-4 rounded-xl bg-content px-6 py-4 shadow-sm\">\r\n <div class=\"grid items-end gap-3 md:grid-cols-[minmax(0,1fr)_auto]\">\r\n <mt-text-field\r\n formControlName=\"endpoint\"\r\n [label]=\"'properties.form.endpoint' | transloco\"\r\n [placeholder]=\"'properties.form.endpointPlaceholder' | transloco\"\r\n />\r\n <div class=\"flex justify-end gap-2\">\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n icon=\"general.plus\"\r\n [label]=\"'properties.form.addHeader' | transloco\"\r\n (click)=\"addHeader()\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n [label]=\"'properties.form.testApi' | transloco\"\r\n [loading]=\"isTesting()\"\r\n (click)=\"testApi()\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (headers.controls.length) {\r\n <div class=\"space-y-3\">\r\n <div class=\"text-sm font-medium text-surface-500\">\r\n {{ \"properties.form.headers\" | transloco }}\r\n </div>\r\n <div class=\"space-y-3\">\r\n @for (\r\n headerCtrl of headers.controls;\r\n track headerCtrl;\r\n let i = $index\r\n ) {\r\n <div\r\n [formGroup]=\"headerCtrl\"\r\n class=\"grid items-end gap-3 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto]\"\r\n >\r\n <mt-text-field\r\n formControlName=\"key\"\r\n [label]=\"'properties.form.headerKey' | transloco\"\r\n />\r\n <mt-text-field\r\n formControlName=\"value\"\r\n [label]=\"'properties.form.headerValue' | transloco\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n icon=\"general.trash-01\"\r\n (click)=\"removeHeader(i)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n <p class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.noHeadersMessage\" | transloco }}\r\n </p>\r\n }\r\n </div>\r\n\r\n <div class=\"space-y-4 rounded-xl bg-content px-6 py-4 shadow-sm\">\r\n @if (hasDetectedSchema()) {\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-select-field\r\n formControlName=\"key\"\r\n [options]=\"resolvedApiProperties()\"\r\n [showClear]=\"true\"\r\n optionLabel=\"name\"\r\n optionValue=\"key\"\r\n [label]=\"'properties.form.keyField' | transloco\"\r\n />\r\n <mt-select-field\r\n formControlName=\"value\"\r\n [options]=\"resolvedApiProperties()\"\r\n [showClear]=\"true\"\r\n optionLabel=\"name\"\r\n optionValue=\"key\"\r\n [label]=\"'properties.form.valueField' | transloco\"\r\n />\r\n </div>\r\n } @else {\r\n <p class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.messageTestApiPrompt\" | transloco }}\r\n </p>\r\n }\r\n\r\n <div class=\"flex items-center justify-between gap-4\">\r\n <mt-toggle-field\r\n formControlName=\"supportMultiSelect\"\r\n [label]=\"'properties.form.labelSupportMultiSelect' | transloco\"\r\n />\r\n @if (isTesting()) {\r\n <span class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.messageTesting\" | transloco }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n DynamicFormConfig,\r\n PickListFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormGroup,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { PropertiesFacade } from '../../../../store';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { distinctUntilChanged, map, startWith } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-check-list-form-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './check-list-form-configuration.html',\r\n styleUrl: './check-list-form-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class CheckListFormConfiguration implements OnDestroy {\r\n private readonly propertiesFacade = inject(PropertiesFacade);\r\n private readonly controlContainer = inject(ControlContainer);\r\n private readonly parentGroup = this.controlContainer.control as FormGroup;\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly lookups = this.propertiesFacade.lookups;\r\n readonly configScopes = this.propertiesFacade.configScopes;\r\n readonly configProperties = this.propertiesFacade.configProperties;\r\n\r\n readonly configuration = toSignal(\r\n this.parentGroup.valueChanges.pipe(\r\n startWith(this.parentGroup.value),\r\n map((value) => value?.configuration),\r\n distinctUntilChanged(),\r\n ),\r\n { initialValue: this.parentGroup.value?.configuration },\r\n );\r\n\r\n readonly scopeItems = computed(() => {\r\n const scope = this.configScopes()[0];\r\n return scope?.items ?? [];\r\n });\r\n\r\n readonly formConfig = linkedSignal<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass: 'grid grid-cols-1 md:grid-cols-2 gap-3',\r\n fields: [\r\n {\r\n key: 'lookup',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectLookup'),\r\n optionLabel: 'name.display',\r\n optionValue: 'id',\r\n filter: true,\r\n options: this.lookups(),\r\n validators: [ValidatorConfig.required()],\r\n },\r\n {\r\n key: 'scopeId',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectScope'),\r\n optionLabel: 'name',\r\n optionValue: 'id',\r\n options: this.scopeItems(),\r\n filter: true,\r\n validators: [ValidatorConfig.required()],\r\n },\r\n new PickListFieldConfig({\r\n key: 'properties',\r\n cssClass: 'md:col-span-2',\r\n options: this.configProperties(),\r\n optionLabel: 'name.display',\r\n optionValue: 'key',\r\n sourceHeader: this.transloco.translate(\r\n 'properties.form.availableProperties',\r\n ),\r\n targetHeader: this.transloco.translate(\r\n 'properties.form.selectedProperties',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n }),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.lookups().length) {\r\n this.propertiesFacade.loadLookups();\r\n }\r\n });\r\n\r\n effect(() => {\r\n const scopeId = this.configuration()?.scopeId;\r\n if (scopeId) {\r\n const scopeType = this.configScopes()[0]?.scope;\r\n if (scopeType) {\r\n this.propertiesFacade.loadPropertiesForConfigType(scopeType, scopeId);\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.propertiesFacade.resetConfigProperties();\r\n }\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import {\r\n Component,\r\n OnDestroy,\r\n computed,\r\n effect,\r\n inject,\r\n linkedSignal,\r\n signal,\r\n} from '@angular/core';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n DynamicFormConfig,\r\n PickListFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormControl,\r\n FormGroup,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { PropertiesFacade } from '../../../../store';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport { distinctUntilChanged, map, startWith } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'mt-entity-list-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './entity-list-configuration.html',\r\n styleUrl: './entity-list-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class EntityListConfiguration implements OnDestroy {\r\n private readonly propertiesFacade = inject(PropertiesFacade);\r\n private readonly controlContainer = inject(ControlContainer);\r\n private readonly parentGroup = this.controlContainer.control as FormGroup;\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly previousModuleId = signal<string | number | null>(null);\r\n\r\n private readonly configurationControl = this.parentGroup.get(\r\n 'configuration',\r\n ) as FormControl<Record<string, unknown> | null>;\r\n\r\n readonly configScopes = this.propertiesFacade.configScopes;\r\n readonly configProperties = this.propertiesFacade.configProperties;\r\n\r\n readonly configuration = toSignal(\r\n this.parentGroup.valueChanges.pipe(\r\n startWith(this.parentGroup.value),\r\n map((value) => value?.configuration),\r\n distinctUntilChanged(),\r\n ),\r\n { initialValue: this.parentGroup.value?.configuration },\r\n );\r\n\r\n readonly moduleItems = computed(() => {\r\n const scope = this.configScopes()[0];\r\n return scope?.items ?? [];\r\n });\r\n\r\n readonly accessModeOptions = [\r\n {\r\n label:\r\n 'Get a module list, with the ability to add, edit, and delete records',\r\n value: 'ReadWrite',\r\n },\r\n {\r\n label: 'View a list of module data',\r\n value: 'Read',\r\n },\r\n {\r\n label: 'Write to some fields using useful module data',\r\n value: 'Write',\r\n },\r\n ];\r\n\r\n private readonly ACCESS_SNAPSHOT_MAP: Record<string, string | null> = {\r\n ReadWrite: 'Realtime',\r\n Read: 'Realtime',\r\n Write: null,\r\n };\r\n\r\n readonly formConfig = linkedSignal<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass: 'grid grid-cols-1 md:grid-cols-2 gap-3',\r\n fields: [\r\n {\r\n key: 'moduleId',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectScope'),\r\n optionLabel: 'name',\r\n optionValue: 'id',\r\n options: this.moduleItems(),\r\n filter: true,\r\n validators: [ValidatorConfig.required()],\r\n },\r\n {\r\n key: 'access',\r\n type: 'select',\r\n label: 'Access',\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n options: this.accessModeOptions,\r\n validators: [ValidatorConfig.required()],\r\n },\r\n new PickListFieldConfig({\r\n key: 'readFields',\r\n cssClass: 'md:col-span-2',\r\n options: this.configProperties(),\r\n optionLabel: 'name.display',\r\n optionValue: 'key',\r\n sourceHeader: 'Available Read Fields',\r\n targetHeader: 'Selected Read Fields',\r\n validators: [ValidatorConfig.required()],\r\n }),\r\n new PickListFieldConfig({\r\n key: 'writeFields',\r\n cssClass: 'md:col-span-2',\r\n options: this.configProperties(),\r\n optionLabel: 'name.display',\r\n optionValue: 'key',\r\n sourceHeader: 'Available Write Fields',\r\n targetHeader: 'Selected Write Fields',\r\n validators: [ValidatorConfig.required()],\r\n relations: [\r\n { action: 'show', key: 'access', value: 'Write' },\r\n { action: 'show', key: 'access', value: 'ReadWrite' },\r\n ],\r\n }),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n this.applyEntityListDefaults();\r\n this.loadModuleProperties();\r\n this.syncSnapshotMode();\r\n }\r\n\r\n private applyEntityListDefaults() {\r\n const config = this.configurationControl.value;\r\n if (config) return;\r\n\r\n this.configurationControl.setValue(\r\n {\r\n moduleId: 0,\r\n access: 'ReadWrite',\r\n snapshotMode: 'Realtime',\r\n readFields: [],\r\n writeFields: [],\r\n },\r\n { emitEvent: true },\r\n );\r\n }\r\n\r\n private loadModuleProperties() {\r\n effect(() => {\r\n const config = this.configuration();\r\n const moduleId = config?.moduleId;\r\n if (!moduleId || moduleId === this.previousModuleId()) {\r\n return;\r\n }\r\n\r\n const scopeType = this.configScopes()[0]?.scope;\r\n if (!scopeType) {\r\n return;\r\n }\r\n\r\n this.previousModuleId.set(moduleId);\r\n this.propertiesFacade.loadPropertiesForConfigType(scopeType, moduleId);\r\n });\r\n }\r\n\r\n private syncSnapshotMode() {\r\n this.configurationControl.valueChanges\r\n .pipe(\r\n map(\r\n (v) =>\r\n (v as Record<string, unknown> | null)?.['access'] as\r\n | string\r\n | undefined,\r\n ),\r\n distinctUntilChanged(),\r\n takeUntilDestroyed(),\r\n )\r\n .subscribe((access) => {\r\n if (!access) return;\r\n const snapshotMode = this.ACCESS_SNAPSHOT_MAP[access] ?? null;\r\n const current =\r\n ((this.configurationControl.value ?? {}) as Record<string, unknown>)[\r\n 'snapshotMode'\r\n ] ?? null;\r\n if (snapshotMode === current) return;\r\n this.configurationControl.patchValue(\r\n { ...(this.configurationControl.value ?? {}), snapshotMode },\r\n { emitEvent: false, emitModelToViewChange: false },\r\n );\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.propertiesFacade.resetConfigProperties();\r\n }\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import { Component, computed, effect, inject } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig, ValidatorConfig } from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { PropertiesFacade } from '../../../../store';\r\n\r\n@Component({\r\n selector: 'mt-location-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './location-configuration.html',\r\n styleUrl: './location-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class LocationConfiguration {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n readonly countries = this.facade.countries;\r\n private readonly activeLang = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n\r\n readonly formConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass:\r\n 'grid grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)] gap-3',\r\n fields: [\r\n {\r\n key: 'country',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectCountry'),\r\n optionLabel: this.activeLang() === 'ar' ? 'name_ar' : 'name',\r\n optionValue: 'name',\r\n options: this.countries(),\r\n filter: true,\r\n validators: [ValidatorConfig.required()],\r\n },\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.countries().length) {\r\n this.facade.loadCountries();\r\n }\r\n });\r\n }\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import { Component, computed, effect, inject } from '@angular/core';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig, ValidatorConfig } from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { PropertiesFacade } from '../../../../store';\r\n\r\n@Component({\r\n selector: 'mt-lookup-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './lookup-configuration.html',\r\n styleUrl: './lookup-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class LookupConfiguration {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n readonly lookups = this.facade.lookups;\r\n\r\n readonly formConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass:\r\n 'grid grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)] gap-3',\r\n fields: [\r\n {\r\n key: 'lookup',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectLookup'),\r\n optionLabel: 'name.display',\r\n optionValue: 'id',\r\n options: this.lookups(),\r\n filter: true,\r\n validators: [ValidatorConfig.required()],\r\n },\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.lookups().length) {\r\n this.facade.loadLookups();\r\n }\r\n });\r\n }\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import type { PercentageColorRule } from '@masterteam/components/entities';\r\n\r\n/** Fallback colour applied when no rule matches. */\r\nexport const PERCENTAGE_DEFAULT_COLOR = '#293558';\r\n\r\n/**\r\n * The colour scale the backend applies to Percentage properties that carry no\r\n * custom configuration. A newly created property starts from these so the form\r\n * never has to submit `{}` or an empty `colorRules` array.\r\n */\r\nexport const PERCENTAGE_DEFAULT_COLOR_RULES: readonly PercentageColorRule[] = [\r\n { maxValue: 25, color: '#ed2517' },\r\n { maxValue: 50, color: '#FFB300' },\r\n { maxValue: 75, color: '#0A5EBE' },\r\n { maxValue: 100, color: '#4caf50' },\r\n];\r\n\r\nexport const PERCENTAGE_MIN_VALUE = 0;\r\nexport const PERCENTAGE_MAX_VALUE = 100;\r\n\r\nexport const HEX_COLOR_PATTERN = /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/;\r\n\r\n/** The rules shape the backend expects for a Percentage property. */\r\nexport interface PercentageColorRulesConfiguration {\r\n colorRules: PercentageColorRule[];\r\n defaultColor: string;\r\n}\r\n\r\n/** The pre-rules shape, still accepted by the backend: one flat colour. */\r\nexport interface PercentageLegacyConfiguration {\r\n color: string;\r\n}\r\n\r\nexport type PercentageConfigurationValue =\r\n | PercentageColorRulesConfiguration\r\n | PercentageLegacyConfiguration;\r\n\r\n/**\r\n * The form's working state, before it is shaped into a payload. Field names\r\n * match `PercentageColorSource` so a draft can be handed straight to\r\n * `resolvePercentageColor` for the live preview.\r\n */\r\nexport interface PercentageConfigurationDraft {\r\n colorRules: PercentageColorRule[];\r\n defaultColor: string;\r\n}\r\n\r\nfunction toFiniteNumber(value: unknown): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const parsed = typeof value === 'number' ? value : Number(value);\r\n return Number.isFinite(parsed) ? parsed : null;\r\n}\r\n\r\nfunction toColor(value: unknown, fallback: string): string {\r\n const color = typeof value === 'string' ? value.trim() : '';\r\n return color || fallback;\r\n}\r\n\r\nfunction cloneDefaultRules(): PercentageColorRule[] {\r\n return PERCENTAGE_DEFAULT_COLOR_RULES.map((rule) => ({ ...rule }));\r\n}\r\n\r\n/**\r\n * Reads whatever the backend stored into the draft the editor works on.\r\n *\r\n * Three inputs map to three different starting points, and the difference\r\n * matters: an absent configuration is a *new* property that should adopt the\r\n * default scale, while a legacy `{ color }` is an *existing* property whose\r\n * single colour must be preserved as-is — seeding it with default rules would\r\n * silently repaint it on the next save.\r\n */\r\nexport function normalizePercentageConfiguration(\r\n raw: unknown,\r\n): PercentageConfigurationDraft {\r\n const source =\r\n raw && typeof raw === 'object' && !Array.isArray(raw)\r\n ? (raw as Record<string, unknown>)\r\n : null;\r\n\r\n if (!source || Object.keys(source).length === 0) {\r\n return {\r\n colorRules: cloneDefaultRules(),\r\n defaultColor: PERCENTAGE_DEFAULT_COLOR,\r\n };\r\n }\r\n\r\n const defaultColor = toColor(\r\n source['defaultColor'] ?? source['color'],\r\n PERCENTAGE_DEFAULT_COLOR,\r\n );\r\n\r\n const rawRules = source['colorRules'];\r\n if (!Array.isArray(rawRules)) {\r\n // Legacy `{ color }`, or a shape with no rules at all: one flat colour.\r\n return { colorRules: [], defaultColor };\r\n }\r\n\r\n return {\r\n colorRules: rawRules\r\n .filter(\r\n (rule): rule is Record<string, unknown> =>\r\n !!rule && typeof rule === 'object',\r\n )\r\n .map((rule) => ({\r\n minValue: toFiniteNumber(rule['minValue']),\r\n maxValue: toFiniteNumber(rule['maxValue']),\r\n color: toColor(rule['color'], PERCENTAGE_DEFAULT_COLOR),\r\n })),\r\n defaultColor,\r\n };\r\n}\r\n\r\n/**\r\n * Shapes the draft into what gets sent.\r\n *\r\n * Two payloads, never a third: with rules it is `{ colorRules, defaultColor }`,\r\n * without them it falls back to the legacy `{ color }`. `{}` and an empty\r\n * `colorRules` array are both rejected by the backend, so neither is reachable\r\n * from here.\r\n */\r\nexport function serializePercentageConfiguration(\r\n draft: PercentageConfigurationDraft,\r\n): PercentageConfigurationValue {\r\n const defaultColor = toColor(draft.defaultColor, PERCENTAGE_DEFAULT_COLOR);\r\n const rules = draft.colorRules\r\n .filter(\r\n (rule) =>\r\n toFiniteNumber(rule.minValue) !== null ||\r\n toFiniteNumber(rule.maxValue) !== null,\r\n )\r\n .map((rule) => {\r\n const min = toFiniteNumber(rule.minValue);\r\n const max = toFiniteNumber(rule.maxValue);\r\n\r\n return {\r\n // `minValue`/`maxValue` are both optional; only send the bounds the\r\n // rule actually declares rather than padding them with nulls.\r\n ...(min === null ? {} : { minValue: min }),\r\n ...(max === null ? {} : { maxValue: max }),\r\n color: toColor(rule.color, defaultColor),\r\n } as PercentageColorRule;\r\n });\r\n\r\n return rules.length\r\n ? { colorRules: rules, defaultColor }\r\n : { color: defaultColor };\r\n}\r\n\r\n/** A closed-or-open band of the 0–100 scale. */\r\ninterface Band {\r\n from: number;\r\n to: number;\r\n /** True when `from` itself is not part of the band. */\r\n fromOpen: boolean;\r\n /** True when `to` itself is not part of the band. */\r\n toOpen: boolean;\r\n}\r\n\r\nexport interface PercentageCoverageGap {\r\n from: number;\r\n to: number;\r\n}\r\n\r\nexport interface PercentageRuleCoverage {\r\n /** Rules an earlier rule already fully covers — they can never match. */\r\n unreachableRuleIndexes: number[];\r\n /** Parts of 0–100 that no rule claims, so they fall back to the default. */\r\n gaps: PercentageCoverageGap[];\r\n}\r\n\r\nfunction isEmptyBand(band: Band): boolean {\r\n if (band.from > band.to) {\r\n return true;\r\n }\r\n\r\n return band.from === band.to && (band.fromOpen || band.toOpen);\r\n}\r\n\r\n/** The part of `band` the closed rule range `[min, max]` claims. */\r\nfunction intersectRule(band: Band, min: number, max: number): Band {\r\n return {\r\n from: Math.max(band.from, min),\r\n to: Math.min(band.to, max),\r\n // The rule range is closed on both ends, so only the band can contribute\r\n // an open boundary — and only where the band's own edge is the tighter one.\r\n fromOpen: min <= band.from && band.fromOpen,\r\n toOpen: max >= band.to && band.toOpen,\r\n };\r\n}\r\n\r\n/** `band` with everything inside `[min, max]` removed — 0, 1, or 2 pieces. */\r\nfunction subtractRule(band: Band, min: number, max: number): Band[] {\r\n if (isEmptyBand(intersectRule(band, min, max))) {\r\n return [band];\r\n }\r\n\r\n const remainder: Band[] = [\r\n { from: band.from, to: min, fromOpen: band.fromOpen, toOpen: true },\r\n { from: max, to: band.to, fromOpen: true, toOpen: band.toOpen },\r\n ];\r\n\r\n return remainder.filter((piece) => !isEmptyBand(piece));\r\n}\r\n\r\n/**\r\n * What the rule list actually covers, given that they are evaluated in order\r\n * and the first match wins. Both answers are advisory: a shadowed rule is dead\r\n * configuration, and a gap silently falls through to the default colour.\r\n */\r\nexport function analysePercentageRuleCoverage(\r\n rules: readonly PercentageColorRule[],\r\n): PercentageRuleCoverage {\r\n let remaining: Band[] = [\r\n {\r\n from: PERCENTAGE_MIN_VALUE,\r\n to: PERCENTAGE_MAX_VALUE,\r\n fromOpen: false,\r\n toOpen: false,\r\n },\r\n ];\r\n const unreachableRuleIndexes: number[] = [];\r\n\r\n rules.forEach((rule, index) => {\r\n const min = toFiniteNumber(rule.minValue) ?? PERCENTAGE_MIN_VALUE;\r\n const max = toFiniteNumber(rule.maxValue) ?? PERCENTAGE_MAX_VALUE;\r\n\r\n if (min > max) {\r\n // An inverted rule matches nothing, but that is already reported as a\r\n // validation error — don't pile a second warning on top of it.\r\n return;\r\n }\r\n\r\n const claimsSomething = remaining.some(\r\n (band) => !isEmptyBand(intersectRule(band, min, max)),\r\n );\r\n if (!claimsSomething) {\r\n unreachableRuleIndexes.push(index);\r\n return;\r\n }\r\n\r\n remaining = remaining.flatMap((band) => subtractRule(band, min, max));\r\n });\r\n\r\n return {\r\n unreachableRuleIndexes,\r\n gaps: remaining.map(({ from, to }) => ({ from, to })),\r\n };\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n forwardRef,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormArray,\r\n FormControl,\r\n FormGroup,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ReactiveFormsModule,\r\n ValidationErrors,\r\n Validator,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ColorPickerField } from '@masterteam/components/color-picker-field';\r\nimport { NumberField } from '@masterteam/components/number-field';\r\nimport { SliderField } from '@masterteam/components/slider-field';\r\nimport { Progress } from '@masterteam/components/progress';\r\nimport { resolvePercentageColor } from '@masterteam/components/entities';\r\nimport type { PercentageColorRule } from '@masterteam/components/entities';\r\nimport {\r\n analysePercentageRuleCoverage,\r\n HEX_COLOR_PATTERN,\r\n normalizePercentageConfiguration,\r\n PERCENTAGE_DEFAULT_COLOR,\r\n PERCENTAGE_DEFAULT_COLOR_RULES,\r\n PERCENTAGE_MAX_VALUE,\r\n PERCENTAGE_MIN_VALUE,\r\n serializePercentageConfiguration,\r\n type PercentageConfigurationDraft,\r\n type PercentageConfigurationValue,\r\n} from './percentage-configuration.model';\r\n\r\ntype RuleGroup = FormGroup<{\r\n minValue: FormControl<number | null>;\r\n maxValue: FormControl<number | null>;\r\n color: FormControl<string>;\r\n}>;\r\n\r\n/** One flex slice of the preview strip. */\r\ninterface PreviewSegment {\r\n color: string;\r\n weight: number;\r\n}\r\n\r\n/** How finely the preview strip samples the 0–100 scale. */\r\nconst PREVIEW_STEP = 0.5;\r\n\r\n@Component({\r\n selector: 'mt-percentage-configuration',\r\n standalone: true,\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n Button,\r\n ColorPickerField,\r\n NumberField,\r\n SliderField,\r\n Progress,\r\n ],\r\n templateUrl: './percentage-configuration.html',\r\n styleUrl: './percentage-configuration.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => PercentageConfiguration),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => PercentageConfiguration),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class PercentageConfiguration\r\n implements ControlValueAccessor, Validator\r\n{\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly minValue = PERCENTAGE_MIN_VALUE;\r\n readonly maxValue = PERCENTAGE_MAX_VALUE;\r\n\r\n readonly form = new FormGroup({\r\n defaultColor: new FormControl<string>(PERCENTAGE_DEFAULT_COLOR, {\r\n nonNullable: true,\r\n validators: [Validators.required, Validators.pattern(HEX_COLOR_PATTERN)],\r\n }),\r\n colorRules: new FormArray<RuleGroup>([]),\r\n });\r\n\r\n /** Preview-only; deliberately outside `form` so it never reaches the payload. */\r\n readonly previewControl = new FormControl<number>(60, { nonNullable: true });\r\n\r\n private touched = false;\r\n\r\n private onChange: (value: PercentageConfigurationValue) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n /**\r\n * Bumped on every form change *and* after `writeValue`, which rebuilds the\r\n * rule list silently — without this the preview would keep showing the rules\r\n * of the previously loaded property.\r\n */\r\n private readonly revision = signal(0);\r\n\r\n private readonly previewValue = toSignal(this.previewControl.valueChanges, {\r\n initialValue: this.previewControl.value,\r\n });\r\n\r\n /** The current rule set, as plain data, recomputed on every form change. */\r\n private readonly draft = computed(() => {\r\n this.revision();\r\n return this.readDraft();\r\n });\r\n\r\n readonly rules = computed(() => this.draft().colorRules);\r\n readonly hasRules = computed(() => this.rules().length > 0);\r\n\r\n readonly previewColor = computed(\r\n () =>\r\n resolvePercentageColor(this.previewValue(), this.draft()) ?? 'primary',\r\n );\r\n\r\n /**\r\n * The 0–100 scale painted with the colour each value resolves to. Sampling\r\n * and then collapsing equal neighbours keeps this to a handful of DOM nodes\r\n * regardless of how the rules are written, and flex ordering keeps it correct\r\n * in RTL without a direction-aware gradient.\r\n */\r\n readonly previewSegments = computed<PreviewSegment[]>(() => {\r\n const draft = this.draft();\r\n const segments: PreviewSegment[] = [];\r\n\r\n for (\r\n let value = PERCENTAGE_MIN_VALUE;\r\n value <= PERCENTAGE_MAX_VALUE;\r\n value += PREVIEW_STEP\r\n ) {\r\n const color = resolvePercentageColor(value, draft) ?? 'transparent';\r\n const last = segments[segments.length - 1];\r\n\r\n if (last && last.color === color) {\r\n last.weight += 1;\r\n } else {\r\n segments.push({ color, weight: 1 });\r\n }\r\n }\r\n\r\n return segments;\r\n });\r\n\r\n private readonly coverage = computed(() =>\r\n analysePercentageRuleCoverage(this.rules()),\r\n );\r\n\r\n /**\r\n * Non-blocking hints about rules that can never fire and values that quietly\r\n * fall through to the default colour — both are easy to author by accident\r\n * once order decides the winner.\r\n */\r\n readonly warnings = computed<string[]>(() => {\r\n if (!this.hasRules()) {\r\n return [];\r\n }\r\n\r\n const { unreachableRuleIndexes, gaps } = this.coverage();\r\n\r\n return [\r\n ...unreachableRuleIndexes.map((index) =>\r\n this.transloco.translate(\r\n 'properties.form.percentageWarningUnreachable',\r\n {\r\n index: index + 1,\r\n },\r\n ),\r\n ),\r\n ...gaps.map((gap) =>\r\n this.transloco.translate('properties.form.percentageWarningGap', {\r\n from: gap.from,\r\n to: gap.to,\r\n }),\r\n ),\r\n ];\r\n });\r\n\r\n constructor() {\r\n this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe(() => {\r\n this.revision.update((value) => value + 1);\r\n });\r\n\r\n // The value is pushed from an effect rather than straight from\r\n // `writeValue`/`valueChanges`, because Angular calls `writeValue` before\r\n // `registerOnChange` — anything emitted during setup would land on the\r\n // no-op callback and the property would save with no configuration at all.\r\n // By the time effects run the callback is registered.\r\n let initial = true;\r\n effect(() => {\r\n this.revision();\r\n this.emitValue(!initial);\r\n initial = false;\r\n this.onValidatorChange();\r\n });\r\n }\r\n\r\n get ruleControls(): RuleGroup[] {\r\n return this.form.controls.colorRules.controls;\r\n }\r\n\r\n // ── ControlValueAccessor ──\r\n\r\n writeValue(value: unknown): void {\r\n const draft = normalizePercentageConfiguration(value);\r\n\r\n this.form.controls.defaultColor.setValue(draft.defaultColor, {\r\n emitEvent: false,\r\n });\r\n this.setRules(draft.colorRules);\r\n this.touched = false;\r\n\r\n // Normalisation is lossy by design — an absent configuration becomes the\r\n // default scale, and a stored shape gets its bounds coerced — so the\r\n // control has to be told what the editor actually holds now. Bumping the\r\n // revision is what schedules that write, via the effect in the constructor.\r\n this.revision.update((current) => current + 1);\r\n }\r\n\r\n registerOnChange(fn: (value: PercentageConfigurationValue) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (isDisabled) {\r\n this.form.disable({ emitEvent: false });\r\n this.previewControl.disable({ emitEvent: false });\r\n return;\r\n }\r\n\r\n this.form.enable({ emitEvent: false });\r\n this.previewControl.enable({ emitEvent: false });\r\n }\r\n\r\n // ── Validator ──\r\n\r\n validate(_: AbstractControl): ValidationErrors | null {\r\n // A disabled form reports DISABLED rather than VALID; it has nothing to\r\n // block the save with.\r\n if (this.form.disabled || this.form.valid) {\r\n return null;\r\n }\r\n\r\n return { percentageConfigurationInvalid: true };\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n // ── Rule list ──\r\n\r\n addRule(): void {\r\n const rules = this.rules();\r\n const previous = rules[rules.length - 1];\r\n // Continue the scale rather than starting from a blank row: the next rule\r\n // almost always picks up where the previous one stopped.\r\n const previousMax = previous?.maxValue;\r\n const start =\r\n typeof previousMax === 'number' && previousMax < PERCENTAGE_MAX_VALUE\r\n ? previousMax + 1\r\n : null;\r\n\r\n this.form.controls.colorRules.push(\r\n this.createRuleGroup({\r\n minValue: start,\r\n maxValue: PERCENTAGE_MAX_VALUE,\r\n color: this.form.controls.defaultColor.value,\r\n }),\r\n );\r\n this.markTouched();\r\n }\r\n\r\n removeRule(index: number): void {\r\n this.form.controls.colorRules.removeAt(index);\r\n this.markTouched();\r\n }\r\n\r\n /** Moves a rule by `offset` positions — order is what decides the winner. */\r\n moveRule(index: number, offset: number): void {\r\n const rules = this.form.controls.colorRules;\r\n const target = index + offset;\r\n\r\n if (target < 0 || target >= rules.length) {\r\n return;\r\n }\r\n\r\n const [moved] = rules.controls.splice(index, 1);\r\n rules.controls.splice(target, 0, moved);\r\n rules.updateValueAndValidity();\r\n this.markTouched();\r\n }\r\n\r\n restoreDefaults(): void {\r\n this.form.controls.defaultColor.setValue(PERCENTAGE_DEFAULT_COLOR, {\r\n emitEvent: false,\r\n });\r\n this.setRules(\r\n PERCENTAGE_DEFAULT_COLOR_RULES.map((rule) => ({ ...rule })),\r\n true,\r\n );\r\n this.markTouched();\r\n }\r\n\r\n // ── Internals ──\r\n\r\n private readDraft(): PercentageConfigurationDraft {\r\n return {\r\n colorRules: this.ruleControls.map((group) => ({\r\n minValue: group.controls.minValue.value,\r\n maxValue: group.controls.maxValue.value,\r\n color: group.controls.color.value,\r\n })),\r\n defaultColor: this.form.controls.defaultColor.value,\r\n };\r\n }\r\n\r\n private setRules(rules: PercentageColorRule[], emitEvent = false): void {\r\n const array = this.form.controls.colorRules;\r\n array.clear({ emitEvent: false });\r\n rules.forEach((rule) =>\r\n array.push(this.createRuleGroup(rule), { emitEvent: false }),\r\n );\r\n array.updateValueAndValidity({ emitEvent });\r\n }\r\n\r\n private createRuleGroup(rule: Partial<PercentageColorRule>): RuleGroup {\r\n const bounds = [\r\n Validators.min(PERCENTAGE_MIN_VALUE),\r\n Validators.max(PERCENTAGE_MAX_VALUE),\r\n ];\r\n\r\n return new FormGroup(\r\n {\r\n minValue: new FormControl<number | null>(rule.minValue ?? null, {\r\n validators: bounds,\r\n }),\r\n maxValue: new FormControl<number | null>(rule.maxValue ?? null, {\r\n validators: bounds,\r\n }),\r\n color: new FormControl<string>(rule.color ?? PERCENTAGE_DEFAULT_COLOR, {\r\n nonNullable: true,\r\n validators: [\r\n Validators.required,\r\n Validators.pattern(HEX_COLOR_PATTERN),\r\n ],\r\n }),\r\n },\r\n { validators: (group) => this.validateRuleBounds(group) },\r\n );\r\n }\r\n\r\n /**\r\n * A rule needs at least one bound — with neither it would match nothing — and\r\n * an inverted pair is always a typo.\r\n */\r\n private validateRuleBounds(group: AbstractControl): ValidationErrors | null {\r\n const min = group.get('minValue')?.value;\r\n const max = group.get('maxValue')?.value;\r\n\r\n if (min === null && max === null) {\r\n return {\r\n boundsRequired: {\r\n message: this.transloco.translate(\r\n 'properties.form.percentageRuleBoundsRequired',\r\n ),\r\n },\r\n };\r\n }\r\n\r\n if (typeof min === 'number' && typeof max === 'number' && min > max) {\r\n return {\r\n boundsOrder: {\r\n message: this.transloco.translate(\r\n 'properties.form.percentageRuleBoundsOrder',\r\n ),\r\n },\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private emitValue(triggerTouched = true): void {\r\n this.onChange(serializePercentageConfiguration(this.readDraft()));\r\n\r\n if (triggerTouched && !this.touched) {\r\n this.onTouched();\r\n this.touched = true;\r\n }\r\n }\r\n\r\n private markTouched(): void {\r\n this.form.markAsDirty();\r\n if (!this.touched) {\r\n this.onTouched();\r\n this.touched = true;\r\n }\r\n }\r\n}\r\n","<div\r\n [formGroup]=\"form\"\r\n class=\"space-y-4 rounded-xl bg-content px-6 py-4 shadow-sm\"\r\n>\r\n <div class=\"flex flex-wrap items-start justify-between gap-3\">\r\n <div class=\"space-y-1\">\r\n <h3 class=\"text-base font-semibold\">\r\n {{ \"properties.form.percentageColorsSection\" | transloco }}\r\n </h3>\r\n <p class=\"max-w-prose text-xs text-surface-500\">\r\n {{ \"properties.form.percentageColorsHint\" | transloco }}\r\n </p>\r\n </div>\r\n <div class=\"flex shrink-0 items-center gap-2\">\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n icon=\"arrow.refresh-ccw-01\"\r\n [label]=\"'properties.form.percentageRestoreDefaults' | transloco\"\r\n (click)=\"restoreDefaults()\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.plus\"\r\n [label]=\"'properties.form.percentageAddRule' | transloco\"\r\n (click)=\"addRule()\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (ruleControls.length) {\r\n <div class=\"space-y-2\">\r\n @for (ruleCtrl of ruleControls; track ruleCtrl; let i = $index) {\r\n <div\r\n [formGroup]=\"ruleCtrl\"\r\n class=\"rounded-lg border border-surface-200 px-3 py-2\"\r\n >\r\n <div\r\n class=\"grid items-start gap-3 md:grid-cols-[auto_minmax(0,7rem)_minmax(0,7rem)_minmax(0,1fr)_auto]\"\r\n >\r\n <span\r\n class=\"mt-2 inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-surface-100 text-xs font-semibold text-surface-600\"\r\n [title]=\"'properties.form.percentageRuleOrderHint' | transloco\"\r\n >\r\n {{ i + 1 }}\r\n </span>\r\n <mt-number-field\r\n formControlName=\"minValue\"\r\n [min]=\"minValue\"\r\n [max]=\"maxValue\"\r\n [label]=\"'properties.form.percentageRuleFrom' | transloco\"\r\n [placeholder]=\"'properties.form.percentageRuleOpen' | transloco\"\r\n />\r\n <mt-number-field\r\n formControlName=\"maxValue\"\r\n [min]=\"minValue\"\r\n [max]=\"maxValue\"\r\n [label]=\"'properties.form.percentageRuleTo' | transloco\"\r\n [placeholder]=\"'properties.form.percentageRuleOpen' | transloco\"\r\n />\r\n <mt-color-picker-field\r\n formControlName=\"color\"\r\n [label]=\"'properties.form.percentageRuleColor' | transloco\"\r\n />\r\n <div class=\"flex items-center gap-1 md:mt-6\">\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n icon=\"arrow.chevron-up\"\r\n [disabled]=\"i === 0\"\r\n [tooltip]=\"'properties.form.percentageMoveUp' | transloco\"\r\n (click)=\"moveRule(i, -1)\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n icon=\"arrow.chevron-down\"\r\n [disabled]=\"i === ruleControls.length - 1\"\r\n [tooltip]=\"'properties.form.percentageMoveDown' | transloco\"\r\n (click)=\"moveRule(i, 1)\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n severity=\"danger\"\r\n icon=\"general.trash-01\"\r\n [tooltip]=\"'properties.form.percentageRemoveRule' | transloco\"\r\n (click)=\"removeRule(i)\"\r\n />\r\n </div>\r\n </div>\r\n @if (ruleCtrl.errors && ruleCtrl.touched) {\r\n <p class=\"text-xs text-red-500\">\r\n {{\r\n ruleCtrl.errors[\"boundsRequired\"]?.message ??\r\n ruleCtrl.errors[\"boundsOrder\"]?.message\r\n }}\r\n </p>\r\n }\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <p\r\n class=\"rounded-lg border border-dashed border-surface-300 px-4 py-3 text-xs text-surface-500\"\r\n >\r\n {{ \"properties.form.percentageNoRules\" | transloco }}\r\n </p>\r\n }\r\n\r\n <div class=\"grid gap-4 md:grid-cols-[minmax(0,18rem)_minmax(0,1fr)]\">\r\n <div class=\"space-y-1\">\r\n <mt-color-picker-field\r\n formControlName=\"defaultColor\"\r\n [label]=\"'properties.form.percentageDefaultColor' | transloco\"\r\n />\r\n <p class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.percentageDefaultColorHint\" | transloco }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"space-y-2\">\r\n <span class=\"text-xs font-medium text-surface-500\">\r\n {{ \"properties.form.percentagePreview\" | transloco }}\r\n </span>\r\n <div class=\"flex h-3 overflow-hidden rounded-full\">\r\n @for (segment of previewSegments(); track $index) {\r\n <span\r\n class=\"block h-full\"\r\n [style.flex-grow]=\"segment.weight\"\r\n [style.background-color]=\"segment.color\"\r\n ></span>\r\n }\r\n </div>\r\n <div class=\"flex justify-between text-[10px] text-surface-400\">\r\n <span>{{ minValue }}%</span>\r\n <span>{{ maxValue }}%</span>\r\n </div>\r\n <div class=\"grid items-center gap-3 md:grid-cols-[minmax(0,1fr)_9rem]\">\r\n <mt-slider-field\r\n [formControl]=\"previewControl\"\r\n [min]=\"minValue\"\r\n [max]=\"maxValue\"\r\n [label]=\"'properties.form.percentagePreviewValue' | transloco\"\r\n />\r\n <mt-progress\r\n [value]=\"previewControl.value\"\r\n [color]=\"previewColor()\"\r\n [height]=\"9\"\r\n [showLabel]=\"false\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n @if (warnings().length) {\r\n <ul class=\"space-y-1 text-xs text-amber-600\">\r\n @for (warning of warnings(); track warning) {\r\n <li>{{ warning }}</li>\r\n }\r\n </ul>\r\n }\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport {\r\n ColorPickerFieldConfig,\r\n DynamicFormConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n FormulaBuilder,\r\n type FormulaBuilderValue,\r\n} from '@masterteam/formula-builder';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport {\r\n PropertiesFacade,\r\n type PropertyStatusItem,\r\n type PropertyStatusPayload,\r\n} from '../../../../../store';\r\nimport { map, startWith } from 'rxjs';\r\n\r\ninterface StatusTranslatableValue {\r\n en: string;\r\n ar: string;\r\n}\r\n\r\ninterface StatusFormValue {\r\n display: StatusTranslatableValue;\r\n description: StatusTranslatableValue;\r\n type: string;\r\n color: string;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-status-item-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n DynamicForm,\r\n FormulaBuilder,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './status-item-form.html',\r\n})\r\nexport class StatusItemForm {\r\n readonly modal = inject(ModalService);\r\n readonly ref = inject(ModalRef);\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly propertyId = input.required<number>();\r\n readonly contextKey = input<string | undefined>(undefined);\r\n readonly levelSchemaId = input<number | undefined>(undefined);\r\n readonly moduleId = input<number | undefined>(undefined);\r\n readonly statusData = input<PropertyStatusItem | null>(null);\r\n\r\n readonly editMode = computed(() => !!this.statusData());\r\n readonly isSubmitting = computed(() =>\r\n this.editMode()\r\n ? this.facade.isUpdatingPropertyStatus()\r\n : this.facade.isCreatingPropertyStatus(),\r\n );\r\n readonly buttonLabel = computed(() =>\r\n this.editMode()\r\n ? this.transloco.translate('properties.form.statusUpdateButton')\r\n : this.transloco.translate('properties.form.statusCreateButton'),\r\n );\r\n readonly cancelLabel = computed(() =>\r\n this.transloco.translate('properties.form.cancelButton'),\r\n );\r\n\r\n readonly statusFormConfig = linkedSignal<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'statusItemForm',\r\n type: 'header',\r\n columns: 12,\r\n fields: [\r\n {\r\n key: 'display.en',\r\n colSpan: 6,\r\n label: this.transloco.translate(\r\n 'properties.form.statusEnglishDisplay',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n },\r\n {\r\n key: 'display.ar',\r\n colSpan: 6,\r\n label: this.transloco.translate(\r\n 'properties.form.statusArabicDisplay',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n },\r\n {\r\n key: 'description.en',\r\n type: 'textarea',\r\n colSpan: 6,\r\n label: this.transloco.translate(\r\n 'properties.form.statusEnglishDescription',\r\n ),\r\n },\r\n {\r\n key: 'description.ar',\r\n type: 'textarea',\r\n colSpan: 6,\r\n label: this.transloco.translate(\r\n 'properties.form.statusArabicDescription',\r\n ),\r\n },\r\n {\r\n key: 'type',\r\n type: 'select',\r\n colSpan: 6,\r\n label: this.transloco.translate('properties.form.statusType'),\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n options: [\r\n {\r\n label: this.transloco.translate(\r\n 'properties.form.statusTypePerformance',\r\n ),\r\n value: 'Performance',\r\n },\r\n {\r\n label: this.transloco.translate(\r\n 'properties.form.statusTypeNonePerformance',\r\n ),\r\n value: 'NonePerformance',\r\n },\r\n ],\r\n },\r\n new ColorPickerFieldConfig({\r\n key: 'color',\r\n colSpan: 6,\r\n label: this.transloco.translate('properties.form.statusColor'),\r\n }),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n readonly statusFormControl = new FormControl<StatusFormValue>(\r\n {\r\n display: {\r\n en: '',\r\n ar: '',\r\n },\r\n description: {\r\n en: '',\r\n ar: '',\r\n },\r\n type: 'Performance',\r\n color: '#64748b',\r\n },\r\n { nonNullable: true },\r\n );\r\n readonly formulaControl = new FormControl<FormulaBuilderValue | null>(null);\r\n readonly statusType = toSignal(\r\n this.statusFormControl.valueChanges.pipe(\r\n startWith(this.statusFormControl.value),\r\n map((value) => value?.type ?? 'Performance'),\r\n ),\r\n {\r\n initialValue: this.statusFormControl.value?.type ?? 'Performance',\r\n },\r\n );\r\n readonly showFormula = computed(() => this.statusType() === 'Performance');\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.showFormula()) {\r\n this.formulaControl.setValidators(Validators.required);\r\n } else {\r\n this.formulaControl.clearValidators();\r\n }\r\n\r\n this.formulaControl.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n effect(() => {\r\n const status = this.statusData();\r\n if (!status) {\r\n this.statusFormControl.patchValue(\r\n {\r\n display: {\r\n en: '',\r\n ar: '',\r\n },\r\n description: {\r\n en: '',\r\n ar: '',\r\n },\r\n type: 'Performance',\r\n color: '#64748b',\r\n },\r\n {\r\n emitEvent: false,\r\n },\r\n );\r\n this.formulaControl.patchValue(null, {\r\n emitEvent: false,\r\n });\r\n return;\r\n }\r\n\r\n this.statusFormControl.patchValue(\r\n {\r\n display: {\r\n en: status.display?.['en'] ?? '',\r\n ar: status.display?.['ar'] ?? '',\r\n },\r\n description: {\r\n en: status.description?.['en'] ?? '',\r\n ar: status.description?.['ar'] ?? '',\r\n },\r\n type: status.type ?? 'Performance',\r\n color: status.color ?? '#64748b',\r\n },\r\n { emitEvent: false },\r\n );\r\n this.formulaControl.patchValue(\r\n status.formula as FormulaBuilderValue | null,\r\n {\r\n emitEvent: false,\r\n },\r\n );\r\n });\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.statusFormControl.invalid || this.isSubmitting()) {\r\n this.statusFormControl.markAllAsTouched();\r\n return;\r\n }\r\n\r\n if (this.showFormula() && this.formulaControl.invalid) {\r\n this.formulaControl.markAsTouched();\r\n return;\r\n }\r\n\r\n const value = this.statusFormControl.value;\r\n const payload: PropertyStatusPayload = {\r\n type: value.type,\r\n display: value.display as unknown as Record<string, string>,\r\n description: value.description as unknown as Record<string, string>,\r\n color: value.color,\r\n formula: this.showFormula() ? this.formulaControl.value : null,\r\n };\r\n\r\n const request$ =\r\n this.editMode() && this.statusData()\r\n ? this.facade.updatePropertyStatus(\r\n this.propertyId(),\r\n this.statusData()!.id,\r\n payload,\r\n )\r\n : this.facade.createPropertyStatus(this.propertyId(), payload);\r\n\r\n request$.subscribe(() => {\r\n this.ref.close({ success: true });\r\n });\r\n }\r\n}\r\n","<div\r\n [class]=\"\r\n 'flex max-h-[75vh] flex-col gap-4 overflow-y-auto p-4 my-4 ' +\r\n modal.contentClass\r\n \"\r\n>\r\n <form class=\"space-y-6\">\r\n <mt-dynamic-form\r\n class=\"block\"\r\n [formConfig]=\"statusFormConfig()\"\r\n [formControl]=\"statusFormControl\"\r\n />\r\n\r\n @if (showFormula()) {\r\n <div class=\"rounded-xl border border-surface-200 bg-content px-4 py-4\">\r\n <div class=\"mb-3 font-medium text-surface-700\">\r\n {{ \"properties.form.statusFormula\" | transloco }}\r\n <span class=\"text-red-500 dark:text-red-600\" aria-hidden=\"true\"\r\n >*</span\r\n >\r\n </div>\r\n\r\n <mt-formula-builder\r\n [formControl]=\"formulaControl\"\r\n [contextKey]=\"contextKey()\"\r\n [levelSchemaId]=\"levelSchemaId()\"\r\n [moduleId]=\"moduleId()\"\r\n />\r\n </div>\r\n }\r\n </form>\r\n</div>\r\n\r\n<div [class]=\"modal.footerClass\" class=\"mt-7\">\r\n <mt-button [label]=\"cancelLabel()\" variant=\"outlined\" (click)=\"ref.close()\" />\r\n <mt-button\r\n [label]=\"buttonLabel()\"\r\n (click)=\"onSubmit()\"\r\n [loading]=\"isSubmitting()\"\r\n [disabled]=\"\r\n statusFormControl.invalid ||\r\n (showFormula() && formulaControl.invalid) ||\r\n isSubmitting()\r\n \"\r\n />\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n OnDestroy,\r\n TemplateRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n linkedSignal,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { finalize } from 'rxjs';\r\nimport { PropertiesFacade, type PropertyStatusItem } from '../../../../store';\r\nimport { StatusItemForm } from './status-item-form/status-item-form';\r\n\r\n@Component({\r\n selector: 'mt-status-configuration',\r\n standalone: true,\r\n imports: [CommonModule, Card, Table, TranslocoModule],\r\n templateUrl: './status-configuration.html',\r\n})\r\nexport class StatusConfiguration implements OnDestroy {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly modalService = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly lastLoadedPropertyId = signal<number | null>(null);\r\n\r\n readonly colorTpl = viewChild.required<TemplateRef<any>>('colorTpl');\r\n\r\n readonly propertyId = input<string | number | null>(null);\r\n readonly contextKey = input<string | undefined>(undefined);\r\n readonly levelSchemaId = input<number | undefined>(undefined);\r\n readonly moduleId = input<number | undefined>(undefined);\r\n\r\n readonly deletingRowIds = signal<number[]>([]);\r\n readonly statuses = computed(() =>\r\n [...this.facade.propertyStatuses()].sort((left, right) => {\r\n const leftOrder = left.order ?? Number.MAX_SAFE_INTEGER;\r\n const rightOrder = right.order ?? Number.MAX_SAFE_INTEGER;\r\n\r\n if (leftOrder !== rightOrder) {\r\n return leftOrder - rightOrder;\r\n }\r\n\r\n return left.id - right.id;\r\n }),\r\n );\r\n readonly loading = this.facade.isLoadingPropertyStatuses;\r\n readonly reordering = this.facade.isReorderingPropertyStatuses;\r\n readonly resolvedPropertyId = computed(() =>\r\n this.normalizePropertyId(this.propertyId()),\r\n );\r\n readonly canManageStatuses = computed(() => !!this.resolvedPropertyId());\r\n\r\n readonly tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'display.en',\r\n label: this.transloco.translate('properties.form.statusColumnDisplay'),\r\n },\r\n {\r\n key: 'type',\r\n label: this.transloco.translate('properties.form.statusColumnType'),\r\n },\r\n {\r\n key: 'color',\r\n label: this.transloco.translate('properties.form.statusColumnColor'),\r\n type: 'custom',\r\n customCellTpl: this.colorTpl(),\r\n },\r\n ]);\r\n\r\n readonly tableActions = computed<TableAction[]>(() => {\r\n if (!this.canManageStatuses()) {\r\n return [];\r\n }\r\n\r\n return [\r\n {\r\n icon: 'general.plus',\r\n label: this.transloco.translate('properties.form.statusAddAction'),\r\n color: 'primary',\r\n action: () => this.openStatusDialog(),\r\n },\r\n ];\r\n });\r\n\r\n readonly rowActions = computed<TableAction[]>(() => {\r\n const propertyId = this.resolvedPropertyId();\r\n if (!propertyId) {\r\n return [];\r\n }\r\n\r\n return [\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.transloco.translate('properties.form.statusEditAction'),\r\n color: 'primary',\r\n action: (row) => this.openStatusDialog(row as PropertyStatusItem),\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.transloco.translate('properties.form.statusDeleteAction'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row) => this.deleteStatus(row as PropertyStatusItem),\r\n confirmation: {\r\n type: 'popup',\r\n confirmationType: 'delete',\r\n },\r\n loading: (row) =>\r\n this.deletingRowIds().includes((row as PropertyStatusItem).id),\r\n },\r\n ];\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const propertyId = this.resolvedPropertyId();\r\n if (!propertyId) {\r\n this.lastLoadedPropertyId.set(null);\r\n this.facade.resetPropertyStatuses().subscribe();\r\n return;\r\n }\r\n\r\n if (this.lastLoadedPropertyId() === propertyId) {\r\n return;\r\n }\r\n\r\n this.lastLoadedPropertyId.set(propertyId);\r\n this.facade.resetPropertyStatuses().subscribe();\r\n this.facade.loadPropertyStatuses(propertyId).subscribe();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.facade.resetPropertyStatuses().subscribe();\r\n }\r\n\r\n private openStatusDialog(statusData: PropertyStatusItem | null = null): void {\r\n const propertyId = this.resolvedPropertyId();\r\n if (!propertyId) {\r\n return;\r\n }\r\n\r\n this.modalService.openModal(StatusItemForm, 'dialog', {\r\n header: statusData\r\n ? this.transloco.translate('properties.form.statusEditTitle')\r\n : this.transloco.translate('properties.form.statusCreateTitle'),\r\n styleClass: '!w-[72vw] max-w-6xl',\r\n appendTo: 'body',\r\n dismissableMask: true,\r\n inputValues: {\r\n propertyId,\r\n contextKey: this.contextKey(),\r\n levelSchemaId: this.levelSchemaId(),\r\n moduleId: this.moduleId(),\r\n statusData,\r\n },\r\n });\r\n }\r\n\r\n private deleteStatus(status: PropertyStatusItem): void {\r\n const propertyId = this.resolvedPropertyId();\r\n if (!propertyId || !status?.id) {\r\n return;\r\n }\r\n\r\n this.deletingRowIds.update((ids) => [...ids, status.id]);\r\n this.facade\r\n .deletePropertyStatus(propertyId, status.id)\r\n .pipe(\r\n finalize(() => {\r\n this.deletingRowIds.update((ids) =>\r\n ids.filter((id) => id !== status.id),\r\n );\r\n }),\r\n )\r\n .subscribe();\r\n }\r\n\r\n onRowReorder(event: { value?: PropertyStatusItem[] }): void {\r\n const reordered = Array.isArray(event.value)\r\n ? event.value\r\n : this.statuses();\r\n const orders = reordered.map((status, index) => ({\r\n statusId: status.id,\r\n order: index + 1,\r\n }));\r\n\r\n this.facade.reorderPropertyStatuses({ orders }).subscribe();\r\n }\r\n\r\n private normalizePropertyId(\r\n value: string | number | null | undefined,\r\n ): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const parsed = typeof value === 'string' ? Number(value) : value;\r\n return Number.isFinite(parsed) ? parsed : null;\r\n }\r\n}\r\n","<mt-card [title]=\"'properties.form.statusesSection' | transloco\">\r\n @if (canManageStatuses()) {\r\n <mt-table\r\n [data]=\"statuses()\"\r\n [columns]=\"tableColumns()\"\r\n [actions]=\"tableActions()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"true\"\r\n [loading]=\"loading()\"\r\n [updating]=\"reordering()\"\r\n [reorderableRows]=\"true\"\r\n dataKey=\"id\"\r\n storageKey=\"properties-status-configuration-table\"\r\n (rowReorder)=\"onRowReorder($event)\"\r\n >\r\n <ng-template #colorTpl let-row>\r\n @if (row.color) {\r\n <span\r\n class=\"inline-block h-5 w-5 rounded-full border border-surface-300\"\r\n [style.background-color]=\"row.color\"\r\n [title]=\"row.color\"\r\n ></span>\r\n } @else {\r\n <span class=\"text-surface-400\">—</span>\r\n }\r\n </ng-template>\r\n </mt-table>\r\n } @else {\r\n <div\r\n class=\"rounded-xl border border-dashed border-surface-300 bg-surface-50 px-4 py-6 text-sm text-surface-600\"\r\n >\r\n {{ \"properties.form.statusesSavePrompt\" | transloco }}\r\n </div>\r\n }\r\n</mt-card>\r\n","import { Component, computed, effect, inject } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig } from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormControl,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { EMPTY } from 'rxjs';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { PropertiesFacade } from '../../../../store';\r\n\r\n@Component({\r\n selector: 'mt-user-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './user-configuration.html',\r\n styleUrl: './user-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class UserConfiguration {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly formGroupDirective = inject(FormGroupDirective);\r\n readonly groups = this.facade.groups;\r\n private readonly moduleId = this.facade.moduleId;\r\n private readonly parentModuleId = this.facade.parentModuleId;\r\n\r\n private readonly isInsideModule = computed(\r\n () => this.moduleId() != null && this.parentModuleId() != null,\r\n );\r\n\r\n private readonly ctrl = this.formGroupDirective.form?.get(\r\n 'configuration',\r\n ) as FormControl | null;\r\n\r\n private readonly configValue = toSignal(this.ctrl?.valueChanges ?? EMPTY, {\r\n initialValue: this.ctrl?.value ?? null,\r\n });\r\n\r\n private readonly justTeamMembers = computed(\r\n () => !!this.configValue()?.['justTeamMembers'],\r\n );\r\n\r\n readonly formConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass:\r\n 'grid grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)] gap-3',\r\n fields: [\r\n {\r\n key: 'group',\r\n type: 'select',\r\n label: this.transloco.translate('properties.form.selectGroup'),\r\n optionLabel: 'name.display',\r\n optionValue: 'id',\r\n options: this.groups(),\r\n filter: true,\r\n showClear: true,\r\n relations: [\r\n { key: 'justTeamMembers', value: true, action: 'disable' },\r\n ],\r\n },\r\n ...(this.isInsideModule()\r\n ? [\r\n {\r\n key: 'justTeamMembers',\r\n type: 'toggle',\r\n cssClass: 'mt-8',\r\n label: this.transloco.translate(\r\n 'properties.form.justTeamMembers',\r\n ),\r\n },\r\n ]\r\n : []),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.groups().length) {\r\n this.facade.loadGroups();\r\n }\r\n });\r\n\r\n // Clear group value whenever justTeamMembers is enabled\r\n effect(() => {\r\n if (this.justTeamMembers()) {\r\n const ctrl = this.ctrl;\r\n if (ctrl) {\r\n const current = ctrl.value ?? {};\r\n if (current.group != null) {\r\n ctrl.patchValue({ ...current, group: null }, { emitEvent: false });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import { Component, inject, signal } from '@angular/core';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n DynamicFormConfig,\r\n PickListFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport {\r\n ControlContainer,\r\n FormGroupDirective,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\nexport const ATTACHMENT_ACCEPT = [\r\n {\r\n key: 'image/*',\r\n name: 'image',\r\n },\r\n {\r\n key: 'application/pdf',\r\n name: 'pdf',\r\n },\r\n {\r\n key: '.mpp',\r\n name: 'mpp',\r\n },\r\n {\r\n key: '.xer',\r\n name: 'xer',\r\n },\r\n {\r\n key: '.eml',\r\n name: 'eml',\r\n },\r\n {\r\n key: '.doc',\r\n name: 'doc',\r\n },\r\n {\r\n key: '.docx',\r\n name: 'docx',\r\n },\r\n {\r\n key: '.ppt',\r\n name: 'ppt',\r\n },\r\n {\r\n key: '.pptx',\r\n name: 'pptx',\r\n },\r\n {\r\n key: '.xls',\r\n name: 'xls',\r\n },\r\n {\r\n key: '.xlsx',\r\n name: 'xlsx',\r\n },\r\n {\r\n key: '.csv',\r\n name: 'csv',\r\n },\r\n {\r\n key: '.mp4',\r\n name: 'mp4',\r\n },\r\n {\r\n key: '.mov',\r\n name: 'mov',\r\n },\r\n {\r\n key: '.wmv',\r\n name: 'wmv',\r\n },\r\n {\r\n key: '.avi',\r\n name: 'avi',\r\n },\r\n {\r\n key: '.mkv',\r\n name: 'mkv',\r\n },\r\n {\r\n key: '.msg',\r\n name: 'msg',\r\n },\r\n {\r\n key: '.zip',\r\n name: 'zip',\r\n },\r\n {\r\n key: '.rar',\r\n name: 'rar',\r\n },\r\n {\r\n key: '.7z',\r\n name: '7z',\r\n },\r\n {\r\n key: '.gz',\r\n name: 'gz',\r\n },\r\n {\r\n key: '.gzip',\r\n name: 'gzip',\r\n },\r\n];\r\n\r\n@Component({\r\n selector: 'mt-attachment-configuration',\r\n imports: [DynamicForm, ReactiveFormsModule],\r\n templateUrl: './attachment-configuration.html',\r\n styleUrl: './attachment-configuration.scss',\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class AttachmentConfiguration {\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly formConfig = signal<DynamicFormConfig>({\r\n sections: [\r\n {\r\n key: 'configuration',\r\n label: this.transloco.translate('properties.form.configurationSection'),\r\n cssClass:\r\n ' rounded-xl bg-content \\\r\n shadow-sm \\\r\n px-6 py-4',\r\n type: 'header',\r\n bodyClass: 'grid grid-cols-1 md:grid-cols-2 gap-3',\r\n fields: [\r\n new PickListFieldConfig({\r\n key: 'AcceptTypes',\r\n options: ATTACHMENT_ACCEPT,\r\n optionLabel: 'name',\r\n optionValue: 'key',\r\n sourceHeader: this.transloco.translate(\r\n 'properties.form.availableTypes',\r\n ),\r\n targetHeader: this.transloco.translate(\r\n 'properties.form.selectedTypes',\r\n ),\r\n showSourceControls: false,\r\n cssClass: 'md:col-span-2',\r\n validators: [ValidatorConfig.required()],\r\n }),\r\n {\r\n key: 'IsMulitple',\r\n type: 'toggle',\r\n label: this.transloco.translate('properties.form.allowMultiple'),\r\n },\r\n ],\r\n },\r\n ],\r\n });\r\n}\r\n","<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n","import { switchMap, type Observable } from 'rxjs';\r\n\r\nimport type { PropertiesScope } from '../../store/properties/properties.model';\r\n\r\nexport interface PropertyFormRequestOperations {\r\n setScope(scope: PropertiesScope): Observable<unknown>;\r\n loadOne(propertyId: string): Observable<unknown>;\r\n}\r\n\r\nexport function createPropertyFormRequest(\r\n operations: PropertyFormRequestOperations,\r\n scope: PropertiesScope | null,\r\n propertyId: string,\r\n): Observable<unknown> | null {\r\n if (scope) {\r\n const scopeRequest$ = operations.setScope(scope);\r\n return propertyId\r\n ? scopeRequest$.pipe(switchMap(() => operations.loadOne(propertyId)))\r\n : scopeRequest$;\r\n }\r\n\r\n return propertyId ? operations.loadOne(propertyId) : null;\r\n}\r\n","import {\r\n Component,\r\n ComponentRef,\r\n ElementRef,\r\n EnvironmentInjector,\r\n OnDestroy,\r\n Type,\r\n ViewChild,\r\n ViewContainerRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n linkedSignal,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\n\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Page } from '@masterteam/components/page';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig, ValidatorConfig } from '@masterteam/components';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport {\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { TranslocoService, TranslocoModule } from '@jsverse/transloco';\r\nimport {\r\n FormulaBuilder,\r\n type FormulaBuilderValue,\r\n} from '@masterteam/formula-builder';\r\nimport { ApiConfiguration } from './configuration-types/api-configuration/api-configuration';\r\nimport { CheckListFormConfiguration } from './configuration-types/check-list-form-configuration/check-list-form-configuration';\r\nimport { EntityListConfiguration } from './configuration-types/entity-list-configuration/entity-list-configuration';\r\nimport { LocationConfiguration } from './configuration-types/location-configuration/location-configuration';\r\nimport { LookupConfiguration } from './configuration-types/lookup-configuration/lookup-configuration';\r\nimport { PercentageConfiguration } from './configuration-types/percentage-configuration/percentage-configuration';\r\nimport { StatusConfiguration } from './configuration-types/status-configuration/status-configuration';\r\nimport { UserConfiguration } from './configuration-types/user-configuration/user-configuration';\r\nimport {\r\n buildPropertiesScopeContextKey,\r\n PropertyItem,\r\n PropertyPayload,\r\n PropertiesScope,\r\n} from '../../store/properties/properties.model';\r\nimport { AttachmentConfiguration } from './configuration-types/attachment-configuration/attachment-configuration';\r\nimport { PropertiesFacade } from '../../store';\r\nimport { createPropertyFormRequest } from './property-form-request';\r\n\r\n@Component({\r\n selector: 'mt-property-form',\r\n imports: [\r\n Page,\r\n Button,\r\n Card,\r\n DynamicForm,\r\n ReactiveFormsModule,\r\n FormulaBuilder,\r\n ApiConfiguration,\r\n CheckListFormConfiguration,\r\n EntityListConfiguration,\r\n LocationConfiguration,\r\n LookupConfiguration,\r\n PercentageConfiguration,\r\n StatusConfiguration,\r\n UserConfiguration,\r\n AttachmentConfiguration,\r\n SkeletonModule,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './property-form.html',\r\n styleUrl: './property-form.scss',\r\n})\r\nexport class PropertyForm implements OnDestroy {\r\n private readonly facade = inject(PropertiesFacade);\r\n private readonly router = inject(Router);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n\r\n private readonly activeLang = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n\r\n propertyId = input<string>('');\r\n readonly scope = input<PropertiesScope | null>(null);\r\n\r\n private readonly propertyTypes = this.facade.propertyTypes;\r\n private readonly legacyReplacedViewTypes = [\r\n 'DynamicList',\r\n 'EditableListView',\r\n 'InternalModule',\r\n ];\r\n private readonly calculatedToggleViewTypes = [\r\n 'Text',\r\n 'LongText',\r\n 'Percentage',\r\n 'Date',\r\n 'Currency',\r\n 'Number',\r\n 'Checkbox',\r\n 'Time',\r\n 'PhaseGate',\r\n ];\r\n /**\r\n * View types whose value is always produced by a formula — the backend owns\r\n * the value and nothing in the runtime writes it back. The Calculated toggle\r\n * is still rendered (it is what reveals the formula card) but is pinned on\r\n * and locked: authoring the formula is the only thing left to the user, on\r\n * create and on edit alike, whether or not the property is a system one.\r\n */\r\n private readonly alwaysCalculatedViewTypes = ['PhaseGate'];\r\n private readonly translatableToggleViewTypes = ['Text', 'LongText'];\r\n\r\n submitLabel = computed(() =>\r\n this.propertyId()\r\n ? this.transloco.translate('properties.form.updateButton')\r\n : this.transloco.translate('properties.form.createButton'),\r\n );\r\n isEditing = computed(() => !!this.propertyId());\r\n\r\n // Keep your original structure: \"main\" is a FormControl<any>, \"configuration\" is FormControl<any|null>\r\n readonly propertyForm = new FormGroup({\r\n main: new FormControl<any>({\r\n isCalculated: false,\r\n isTranslatable: false,\r\n viewType: null,\r\n name: { ar: '', en: '' },\r\n description: { ar: '', en: '' },\r\n }),\r\n configuration: new FormControl<any | null>(null),\r\n formula: new FormControl<FormulaBuilderValue | null>(null),\r\n });\r\n\r\n private readonly mainControl = this.propertyForm.get(\r\n 'main',\r\n ) as FormControl<any>;\r\n private readonly configurationControl = this.propertyForm.get(\r\n 'configuration',\r\n ) as FormControl<any | null>;\r\n private readonly formulaControl = this.propertyForm.get(\r\n 'formula',\r\n ) as FormControl<FormulaBuilderValue | null>;\r\n private readonly mainValue = signal(this.mainControl.value);\r\n\r\n private readonly creating = this.facade.isCreating;\r\n private readonly updating = this.facade.isUpdating;\r\n readonly loading = this.facade.isLoadingOne;\r\n readonly submitting = computed(() => this.creating() || this.updating());\r\n readonly propertyType = computed(() => this.mainValue()?.viewType ?? null);\r\n /** True while the selected view type is calculated by definition. */\r\n readonly isAlwaysCalculatedType = computed(() =>\r\n this.alwaysCalculatedViewTypes.includes(this.propertyType() ?? ''),\r\n );\r\n /**\r\n * Keys DynamicForm must lock in the \"main\" form. `forcedDisabledFieldKeys`\r\n * (rather than a `disabled` field config) is what keeps the pinned `true`\r\n * intact — a field disabled by config is treated as a normal disable and has\r\n * its value reset, a forced-disabled one is treated as a context lock.\r\n */\r\n readonly lockedMainFieldKeys = computed(() =>\r\n this.isAlwaysCalculatedType() ? ['isCalculated'] : [],\r\n );\r\n readonly isCalculated = computed(\r\n () =>\r\n this.isAlwaysCalculatedType() || Boolean(this.mainValue()?.isCalculated),\r\n );\r\n readonly hideFormulaBuilder = computed(() => {\r\n // An always-calculated type has nothing to show without its formula.\r\n if (this.isAlwaysCalculatedType()) {\r\n return false;\r\n }\r\n\r\n const normalizedKey = (\r\n (this.facade.selected() as { normalizedKey?: string } | null)\r\n ?.normalizedKey ??\r\n (this.mainValue()?.normalizedKey as string | undefined) ??\r\n ''\r\n )\r\n .toString()\r\n .toLowerCase();\r\n return (\r\n normalizedKey === 'levelcode' ||\r\n normalizedKey === 'modulecode' ||\r\n normalizedKey === 'levelmodulecode'\r\n );\r\n });\r\n\r\n /**\r\n * Canonical context key (`Level:5/Module:10` | `Level:5` | `Module:10`) the\r\n * formula builder uses as the source of truth for the context kind — so a\r\n * standalone module is addressed as `Module:{id}` rather than mistaken for a\r\n * level. Undefined when no scope is set.\r\n */\r\n readonly formulaContextKey = computed(() => {\r\n const scope = this.scope();\r\n return scope\r\n ? buildPropertiesScopeContextKey(scope)\r\n : (this.facade.formulaContextKey() ?? undefined);\r\n });\r\n\r\n readonly formulaSchemaId = computed(() => {\r\n const scope = this.scope();\r\n return this.resolveSchemaId(\r\n scope\r\n ? (scope.parent?.id ?? scope.target.id)\r\n : (this.facade.parentModuleId() ?? this.facade.moduleId()),\r\n );\r\n });\r\n readonly formulaModuleId = computed(() => {\r\n const scope = this.scope();\r\n const parentModuleId = this.resolveSchemaId(\r\n scope ? (scope.parent?.id ?? null) : this.facade.parentModuleId(),\r\n );\r\n if (parentModuleId === undefined) {\r\n return undefined;\r\n }\r\n\r\n return this.resolveSchemaId(\r\n scope ? scope.target.id : this.facade.moduleId(),\r\n );\r\n });\r\n readonly selectedViewType = computed(\r\n () =>\r\n this.propertyType() ??\r\n (this.facade.selected()?.viewType as string | null),\r\n );\r\n readonly statusPropertyId = computed(() =>\r\n this.resolveSchemaId(this.facade.selected()?.id ?? this.propertyId()),\r\n );\r\n readonly availablePropertyTypes = computed(() => {\r\n const allTypes = this.propertyTypes()?.value ?? [];\r\n return allTypes.filter(\r\n (item: any) =>\r\n !this.legacyReplacedViewTypes.includes(item?.viewType ?? ''),\r\n );\r\n });\r\n\r\n private readonly selectedPropertyTypeConfiguration = computed(() => {\r\n const propertyTypesSetting = this.propertyTypes();\r\n const selectedViewType = this.propertyType();\r\n\r\n if (!propertyTypesSetting?.value || !selectedViewType) return null;\r\n const match = propertyTypesSetting.value.find(\r\n (item: any) =>\r\n item.viewType?.toLowerCase() === selectedViewType.toLowerCase(),\r\n );\r\n\r\n return match?.configuration ?? null;\r\n });\r\n\r\n readonly configurationFormConfig = computed(\r\n () => this.selectedPropertyTypeConfiguration()?.configurationForm ?? null,\r\n );\r\n\r\n @ViewChild('configurationHost', { read: ViewContainerRef })\r\n private configurationHost?: ViewContainerRef;\r\n private readonly statusConfigurationSection = viewChild<\r\n ElementRef<HTMLElement>\r\n >('statusConfigurationSection');\r\n\r\n private readonly environmentInjector = inject(EnvironmentInjector);\r\n private readonly routeFragment = toSignal(this.route.fragment, {\r\n initialValue: this.route.snapshot.fragment,\r\n });\r\n\r\n private readonly configurationComponentType = signal<Type<any> | null>(null);\r\n private configurationComponentRef: ComponentRef<any> | null = null;\r\n private configurationComponentLoadId = 0;\r\n private readonly externalConfigurationForm = signal<FormGroup | null>(null);\r\n private externalConfigurationSubscriptions = new Subscription();\r\n private readonly subscriptions = new Subscription();\r\n private readonly externalConfigurationInvalid = signal(false);\r\n private readonly lastStatusScrollKey = signal<string | null>(null);\r\n\r\n readonly configurationComponentExists = computed(\r\n () => !!this.configurationComponentType(),\r\n );\r\n readonly configurationFormInvalid = computed(() =>\r\n this.externalConfigurationInvalid(),\r\n );\r\n readonly submitDisabled = computed(\r\n () => this.submitting() || this.configurationFormInvalid(),\r\n );\r\n // Your existing dynamic form config unchanged\r\n dynamicFormConfigMain = linkedSignal<DynamicFormConfig>(() => ({\r\n layout: {\r\n containerClass: `space-y-2`,\r\n },\r\n sections: [\r\n {\r\n key: 'top-row',\r\n type: 'none',\r\n cssClass: ' rounded-xl bg-content shadow-sm p-6 mt-3 mb-0',\r\n bodyClass: 'flex items-center gap-6',\r\n fields: [\r\n {\r\n key: 'viewType',\r\n type: 'select',\r\n placeholder: this.transloco.translate(\r\n 'properties.form.selectPropertyType',\r\n ),\r\n optionLabel: `label.${this.activeLang() === 'ar' ? 'ar' : 'en'}`,\r\n optionValue: 'viewType',\r\n // me-auto (RTL-safe) absorbs the free space so the Calculated\r\n // toggle is pushed to the end of the row. viewType is never\r\n // hidden, so anchoring the auto margin here is robust even when\r\n // isCalculated is hidden by its relations.\r\n cssClass: 'w-1/2 me-auto',\r\n options: this.availablePropertyTypes(),\r\n disabled: this.isEditing(),\r\n filter: true,\r\n hasPlaceholderPrefix: false,\r\n validators: [new ValidatorConfig({ type: 'required' })],\r\n },\r\n\r\n {\r\n key: 'isCalculated',\r\n type: 'toggle',\r\n colSpan: 1,\r\n\r\n label: this.transloco.translate('properties.form.calculated'),\r\n cssClass: 'shrink-0',\r\n relations: this.calculatedToggleViewTypes.map((value) => ({\r\n action: 'show',\r\n key: 'viewType',\r\n value,\r\n })),\r\n },\r\n {\r\n key: 'isTranslatable',\r\n type: 'toggle',\r\n colSpan: 1,\r\n label: this.transloco.translate('properties.form.translatable'),\r\n cssClass: 'shrink-0',\r\n relations: this.translatableToggleViewTypes.map((value) => ({\r\n action: 'show',\r\n key: 'viewType',\r\n value,\r\n })),\r\n },\r\n ],\r\n },\r\n {\r\n key: 'default-info',\r\n label: this.transloco.translate('properties.form.defaultInfoSection'),\r\n type: 'header',\r\n cssClass: ' rounded-xl bg-content shadow-sm p-6',\r\n bodyClass: 'grid grid-cols-1 md:grid-cols-2 gap-3',\r\n fields: [\r\n {\r\n key: 'name.en',\r\n label: this.transloco.translate('properties.form.englishName'),\r\n placeholder: this.transloco.translate(\r\n 'properties.form.enterEnglishName',\r\n ),\r\n validators: [new ValidatorConfig({ type: 'required' })],\r\n },\r\n {\r\n key: 'name.ar',\r\n label: this.transloco.translate('properties.form.arabicName'),\r\n placeholder: this.transloco.translate(\r\n 'properties.form.enterArabicName',\r\n ),\r\n validators: [new ValidatorConfig({ type: 'required' })],\r\n },\r\n {\r\n key: 'description.en',\r\n label: this.transloco.translate(\r\n 'properties.form.englishDescription',\r\n ),\r\n type: 'textarea',\r\n },\r\n {\r\n key: 'description.ar',\r\n label: this.transloco.translate(\r\n 'properties.form.arabicDescription',\r\n ),\r\n type: 'textarea',\r\n },\r\n // {\r\n // key: 'defaultValue',\r\n // label: 'Default Value',\r\n // cssClass: 'md:col-span-2',\r\n // },\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n this.subscriptions.add(\r\n this.mainControl.valueChanges.subscribe((value) =>\r\n this.mainValue.set(value),\r\n ),\r\n );\r\n\r\n // Apply an explicit scope before loading an edit. This must remain one\r\n // serialized effect: separate context/load effects have no ordering\r\n // guarantee during the initial change-detection pass.\r\n effect((onCleanup) => {\r\n const scope = this.scope();\r\n const propertyId = this.propertyId();\r\n\r\n const request$ = createPropertyFormRequest(\r\n this.facade,\r\n scope,\r\n propertyId,\r\n );\r\n\r\n if (!request$) {\r\n return;\r\n }\r\n\r\n const subscription = request$.subscribe();\r\n onCleanup(() => subscription.unsubscribe());\r\n });\r\n\r\n // Patch viewType from store when creating new property\r\n effect(() => {\r\n const defaultViewType = this.facade.defaultViewType();\r\n if (!this.propertyId() && defaultViewType) {\r\n // untracked: see syncFormWithSelectedProperty effect — patchValue runs\r\n // DynamicForm.writeValue → evaluateRelations (reads+writes its signals),\r\n // which would otherwise make this effect self-dependent and loop.\r\n untracked(() =>\r\n this.mainControl.patchValue(\r\n { ...this.mainControl.value, viewType: defaultViewType },\r\n { emitEvent: true },\r\n ),\r\n );\r\n }\r\n });\r\n\r\n // Track previous property type\r\n let prev: any;\r\n effect(() => {\r\n const currentPropertyType = this.propertyType();\r\n if (!currentPropertyType || !prev || prev == currentPropertyType) {\r\n prev = this.propertyType();\r\n return;\r\n }\r\n\r\n // untracked: reset can reach a bound config DynamicForm.writeValue →\r\n // evaluateRelations (reads+writes its signals); keep this effect bound\r\n // only to propertyType so it doesn't self-trigger.\r\n untracked(() => this.configurationControl.reset(null));\r\n });\r\n effect(() => {\r\n const currentPropertyType = this.propertyType();\r\n if (!currentPropertyType) return;\r\n\r\n // Reset config scopes before loading new ones\r\n this.facade.resetConfigScopes();\r\n\r\n // Load config scopes for specific property types\r\n const supportedTypes = ['EntityList', 'LookupModuleCheckList'];\r\n if (supportedTypes.includes(currentPropertyType)) {\r\n this.facade.loadConfigAsType(currentPropertyType);\r\n }\r\n });\r\n effect(() => {\r\n const property = this.facade.selected();\r\n // Patch the form imperatively, untracked: mainControl.patchValue triggers\r\n // DynamicForm.writeValue → evaluateRelations, which both reads and writes\r\n // the DynamicForm's signals (fieldStates, etc.). Without untracked those\r\n // reads register as dependencies of THIS effect, which the same call then\r\n // mutates — so the effect re-runs forever (the freeze-on-save loop).\r\n untracked(() => this.syncFormWithSelectedProperty(property));\r\n });\r\n\r\n effect(() => {\r\n this.resolveConfigurationComponent(\r\n this.selectedPropertyTypeConfiguration(),\r\n );\r\n });\r\n\r\n effect(() => {\r\n this.renderConfigurationComponent(this.configurationComponentType());\r\n });\r\n\r\n // Pin the Calculated toggle on for view types that are calculated by\r\n // definition. The lock in `lockedMainFieldKeys` only stops the user from\r\n // switching it off; the value itself still has to be written, both for a\r\n // freshly picked view type and for a stored property the backend sent with\r\n // the flag unset. Releasing the pin on the way out matters on create only\r\n // (viewType is disabled while editing): the next type must start from the\r\n // user's own choice, not from a value this effect wrote.\r\n let pinnedCalculated = false;\r\n effect(() => {\r\n const alwaysCalculated = this.isAlwaysCalculatedType();\r\n\r\n // untracked: see syncFormWithSelectedProperty effect — patchValue runs\r\n // DynamicForm.writeValue → evaluateRelations (reads+writes its signals),\r\n // which would otherwise make this effect self-dependent and loop.\r\n untracked(() => {\r\n const value = this.mainControl.value;\r\n\r\n if (alwaysCalculated) {\r\n pinnedCalculated = true;\r\n if (value?.isCalculated === true) return;\r\n this.mainControl.patchValue(\r\n { ...value, isCalculated: true },\r\n { emitEvent: true },\r\n );\r\n return;\r\n }\r\n\r\n if (!pinnedCalculated) return;\r\n pinnedCalculated = false;\r\n this.mainControl.patchValue(\r\n { ...value, isCalculated: false },\r\n { emitEvent: true },\r\n );\r\n });\r\n });\r\n\r\n effect(() => {\r\n const calculated = this.isCalculated();\r\n this.formulaControl.setValidators(\r\n calculated ? [Validators.required] : [],\r\n );\r\n this.formulaControl.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n effect(() => {\r\n const fragment = this.routeFragment();\r\n const section = this.statusConfigurationSection();\r\n const propertyId = this.statusPropertyId();\r\n const viewType = this.selectedViewType();\r\n\r\n if (\r\n fragment !== 'status-configuration' ||\r\n !section ||\r\n !propertyId ||\r\n viewType !== 'Status'\r\n ) {\r\n return;\r\n }\r\n\r\n const scrollKey = `${propertyId}:${fragment}`;\r\n if (this.lastStatusScrollKey() === scrollKey) {\r\n return;\r\n }\r\n\r\n this.lastStatusScrollKey.set(scrollKey);\r\n setTimeout(() => {\r\n section.nativeElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'start',\r\n });\r\n });\r\n });\r\n }\r\n\r\n private renderConfigurationComponent(componentType: Type<any> | null) {\r\n if (!this.configurationHost) return;\r\n\r\n this.destroyConfigurationComponent();\r\n\r\n if (!componentType) return;\r\n\r\n const componentRef = this.configurationHost.createComponent(componentType, {\r\n environmentInjector: this.environmentInjector,\r\n });\r\n\r\n this.configurationComponentRef = componentRef;\r\n this.connectExternalConfigurationForm(componentRef.instance);\r\n }\r\n\r\n private destroyConfigurationComponent() {\r\n const formSubscriptions = this.externalConfigurationSubscriptions;\r\n this.externalConfigurationSubscriptions = new Subscription();\r\n formSubscriptions.unsubscribe();\r\n this.externalConfigurationForm.set(null);\r\n this.externalConfigurationInvalid.set(false);\r\n this.configurationComponentRef?.destroy();\r\n this.configurationComponentRef = null;\r\n this.configurationHost?.clear();\r\n }\r\n\r\n private connectExternalConfigurationForm(instance: any) {\r\n const form = this.extractConfigurationForm(instance);\r\n if (!form) return;\r\n\r\n this.externalConfigurationForm.set(form);\r\n this.externalConfigurationInvalid.set(form.invalid);\r\n\r\n const currentValue = this.configurationControl.value;\r\n if (currentValue) {\r\n form.patchValue(currentValue);\r\n }\r\n\r\n this.configurationControl.setValue(form.value ?? null, {\r\n emitEvent: false,\r\n });\r\n\r\n this.externalConfigurationSubscriptions.add(\r\n form.valueChanges.subscribe((value) =>\r\n this.configurationControl.setValue(value, { emitEvent: false }),\r\n ),\r\n );\r\n this.externalConfigurationSubscriptions.add(\r\n form.statusChanges.subscribe(() =>\r\n this.externalConfigurationInvalid.set(form.invalid),\r\n ),\r\n );\r\n }\r\n\r\n private extractConfigurationForm(instance: any): FormGroup | null {\r\n const form = (instance as { form?: any })?.form;\r\n return form instanceof FormGroup ? form : null;\r\n }\r\n // PropertyTypeConfiguration\r\n private resolveConfigurationComponent(configuration: any | null) {\r\n const componentLoader = configuration?.configurationComponent;\r\n const loadId = ++this.configurationComponentLoadId;\r\n\r\n if (!componentLoader) {\r\n this.configurationComponentType.set(null);\r\n return;\r\n }\r\n\r\n // Direct component type\r\n if (typeof componentLoader !== 'function' || componentLoader.prototype) {\r\n this.configurationComponentType.set(componentLoader as Type<any>);\r\n return;\r\n }\r\n\r\n // Async loader factory\r\n try {\r\n const result = (\r\n componentLoader as () => Type<any> | Promise<Type<any>>\r\n )();\r\n this.applyConfigurationComponentResult(result, loadId);\r\n } catch (error) {\r\n console.error('Failed to resolve configuration component.', error);\r\n this.configurationComponentType.set(null);\r\n }\r\n }\r\n\r\n private applyConfigurationComponentResult(\r\n result: Type<any> | Promise<Type<any>>,\r\n loadId: number,\r\n ) {\r\n // Async promise result\r\n if (result instanceof Promise) {\r\n this.configurationComponentType.set(null);\r\n result\r\n .then((component) => {\r\n if (loadId !== this.configurationComponentLoadId) return;\r\n\r\n // Handle default export\r\n const resolved = (component as any)?.default ?? component;\r\n this.configurationComponentType.set(resolved as Type<any>);\r\n })\r\n .catch((error) => {\r\n if (loadId === this.configurationComponentLoadId) {\r\n this.configurationComponentType.set(null);\r\n }\r\n console.error('Unable to load configuration component.', error);\r\n });\r\n return;\r\n }\r\n\r\n // Direct component type\r\n this.configurationComponentType.set(result);\r\n }\r\n\r\n private resolveSchemaId(value: string | number | null): number | undefined {\r\n if (value === null || value === undefined) {\r\n return undefined;\r\n }\r\n const parsed = typeof value === 'string' ? Number(value) : value;\r\n return Number.isFinite(parsed) ? parsed : undefined;\r\n }\r\n\r\n createOrEditProperty(event?: Event) {\r\n const mainValue = this.mainControl.value;\r\n if (!mainValue) return;\r\n\r\n const isCalculated = this.resolveIsCalculated(mainValue);\r\n const supportsTranslatableToggle =\r\n this.translatableToggleViewTypes.includes(mainValue.viewType);\r\n const isTranslatable = supportsTranslatableToggle\r\n ? Boolean(mainValue.isTranslatable)\r\n : Boolean(this.facade.selected()?.isTranslatable);\r\n\r\n // On edit `mainValue` is the whole loaded property, so it still carries the\r\n // stored lowercase `configuration`. The backend matches JSON keys\r\n // case-insensitively, so shipping it alongside `Configuration` leaves which\r\n // one binds up to key order — pull it out and send a single canonical key,\r\n // still falling back to the stored value for the view types that have no\r\n // configuration editor at all.\r\n const { configuration: loadedConfiguration, ...mainPayload } = mainValue;\r\n\r\n const payload: PropertyPayload = {\r\n ...mainPayload,\r\n isCalculated,\r\n isTranslatable,\r\n formula: isCalculated ? this.formulaControl.value : null,\r\n Configuration:\r\n this.configurationControl.value ??\r\n mainValue.Configuration ??\r\n loadedConfiguration ??\r\n null,\r\n };\r\n\r\n // On edit, never prompt: any addToForm value loaded into the form passes\r\n // through via the spread above so the backend flag stays untouched.\r\n if (this.propertyId()) {\r\n this.submitProperty(payload);\r\n return;\r\n }\r\n\r\n // On create, ask (via a popup anchored to the Save button) whether the\r\n // new property should also be added to the form. ConfirmPopup only fires\r\n // `accept`/`reject` on the buttons; clicking outside or pressing Escape\r\n // closes it silently, which cancels the save. `event` comes from the\r\n // Save button click and is required to position the popup.\r\n this.confirmationService.confirm({\r\n type: 'popup',\r\n event: event as Event,\r\n message: this.transloco.translate(\r\n 'properties.form.addToFormConfirmMessage',\r\n ),\r\n icon: 'general.plus',\r\n rejectButton: {\r\n variant: 'outlined',\r\n },\r\n acceptLabel: this.transloco.translate('properties.form.addToFormAccept'),\r\n rejectLabel: this.transloco.translate('properties.form.addToFormReject'),\r\n accept: () => this.submitProperty({ ...payload, addToForm: true }),\r\n reject: () => this.submitProperty({ ...payload, addToForm: false }),\r\n });\r\n }\r\n\r\n /**\r\n * The flag to persist for the given view type:\r\n * - always-calculated types are `true` regardless of what the form holds;\r\n * - types that render the toggle use the toggle's value;\r\n * - for the rest the toggle is hidden, and DynamicForm clears hidden field\r\n * values, so the loaded property's backend-managed flag is preserved.\r\n */\r\n private resolveIsCalculated(mainValue: any): boolean {\r\n const viewType = mainValue.viewType;\r\n if (this.alwaysCalculatedViewTypes.includes(viewType)) {\r\n return true;\r\n }\r\n\r\n return this.calculatedToggleViewTypes.includes(viewType)\r\n ? Boolean(mainValue.isCalculated)\r\n : Boolean(this.facade.selected()?.isCalculated);\r\n }\r\n\r\n private submitProperty(payload: PropertyPayload) {\r\n const request$ = this.propertyId()\r\n ? this.facade.update(this.propertyId(), payload)\r\n : this.facade.create(payload);\r\n\r\n request$.subscribe(() => {\r\n if (payload.viewType === 'Status') {\r\n this.handleStatusPropertySave();\r\n return;\r\n }\r\n\r\n this.goBack();\r\n });\r\n }\r\n\r\n private syncFormWithSelectedProperty(\r\n property: PropertyItem | PropertyPayload | null,\r\n ) {\r\n if (!property) return;\r\n this.mainControl.patchValue(property, {\r\n emitEvent: false,\r\n });\r\n this.mainValue.set(this.mainControl.value);\r\n this.configurationControl.setValue(property?.configuration);\r\n this.formulaControl.setValue(property.formula ?? null, {\r\n emitEvent: false,\r\n });\r\n }\r\n\r\n goBack() {\r\n const path = this.isEditing()\r\n ? '../../properties-list'\r\n : '../properties-list';\r\n this.router.navigate([path], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n });\r\n }\r\n\r\n private handleStatusPropertySave() {\r\n const savedId = this.statusPropertyId();\r\n if (!savedId) {\r\n return;\r\n }\r\n\r\n if (this.propertyId()) {\r\n this.facade.loadOne(savedId).subscribe(() => {\r\n this.router\r\n .navigate([], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n fragment: 'status-configuration',\r\n replaceUrl: true,\r\n })\r\n .then(() => this.scrollToStatusConfiguration());\r\n });\r\n return;\r\n }\r\n\r\n this.router.navigate([savedId], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n fragment: 'status-configuration',\r\n replaceUrl: true,\r\n });\r\n }\r\n\r\n private scrollToStatusConfiguration() {\r\n const section = this.statusConfigurationSection();\r\n if (!section) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n section.nativeElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'start',\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.facade.resetSelectedProperty();\r\n this.facade.setDefaultViewType('');\r\n this.destroyConfigurationComponent();\r\n this.subscriptions.unsubscribe();\r\n }\r\n}\r\n","<mt-page\r\n [title]=\"\r\n propertyId()\r\n ? ('properties.form.editProperty' | transloco)\r\n : ('properties.form.createNewProperty' | transloco)\r\n \"\r\n avatarIcon=\"custom.products-and-services\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-sky-50)',\r\n '--p-avatar-color': 'var(--p-sky-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n class=\"h-full\"\r\n>\r\n <ng-template #headerEnd>\r\n <mt-button\r\n class=\"mx-2\"\r\n [label]=\"submitLabel()\"\r\n [icon]=\"isEditing() ? 'custom.pencil' : 'general.plus'\"\r\n [loading]=\"submitting()\"\r\n [disabled]=\"submitDisabled() || this.propertyForm.invalid\"\r\n (click)=\"createOrEditProperty($event)\"\r\n />\r\n </ng-template>\r\n <div\r\n [formGroup]=\"propertyForm\"\r\n class=\"h-full py-4 h-full overflow-y-auto flex justify-center\"\r\n >\r\n <div class=\"w-2/3 flex flex-col gap-6\">\r\n @if (loading()) {\r\n <!-- Skeleton Loading State -->\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <div class=\"flex justify-between items-center gap-6\">\r\n <p-skeleton width=\"50%\" height=\"3rem\"></p-skeleton>\r\n <p-skeleton width=\"8rem\" height=\"2.5rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"12rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"6rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n <p-skeleton height=\"3rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"8rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n } @else {\r\n <mt-dynamic-form\r\n [formConfig]=\"dynamicFormConfigMain()\"\r\n [forcedDisabledFieldKeys]=\"lockedMainFieldKeys()\"\r\n [formControlName]=\"'main'\"\r\n />\r\n @if (configurationFormConfig()) {\r\n <mt-dynamic-form\r\n formControlName=\"configuration\"\r\n [formConfig]=\"configurationFormConfig()!\"\r\n />\r\n } @else {\r\n <ng-container #configurationHost></ng-container>\r\n @if (!configurationComponentExists()) {\r\n @switch (propertyType()) {\r\n @case (\"User\") {\r\n <mt-user-configuration />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-percentage-configuration formControlName=\"configuration\" />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-lookup-configuration />\r\n }\r\n @case (\"LookupMultiSelect\") {\r\n <mt-lookup-configuration />\r\n }\r\n @case (\"EntityList\") {\r\n <mt-entity-list-configuration />\r\n }\r\n @case (\"API\") {\r\n <mt-api-configuration formControlName=\"configuration\" />\r\n }\r\n @case (\"Status\") {\r\n <section #statusConfigurationSection>\r\n <mt-status-configuration\r\n [propertyId]=\"statusPropertyId()\"\r\n [contextKey]=\"formulaContextKey()\"\r\n [levelSchemaId]=\"formulaSchemaId()\"\r\n [moduleId]=\"formulaModuleId()\"\r\n />\r\n </section>\r\n }\r\n <!-- @case('ViewList') { REMOVED FOR NOW\r\n <mt-view-list-configuration />\r\n } -->\r\n @case (\"Attachment\") {\r\n <mt-attachment-configuration />\r\n }\r\n <!-- @case('ReferenceProperty') { REMOVED FOR NOW\r\n } -->\r\n @case (\"LookupModuleCheckList\") {\r\n <mt-check-list-form-configuration />\r\n }\r\n <!-- @case('LookupMatrix') { REMOVED FOR NOW\r\n <mt-lookup-configuration />\r\n } -->\r\n @case (\"Location\") {\r\n <mt-location-configuration />\r\n }\r\n }\r\n }\r\n }\r\n @if (isCalculated() && !hideFormulaBuilder()) {\r\n <mt-card>\r\n <ng-template #headless>\r\n <div\r\n class=\"flex items-center justify-between px-4 py-5 border-b border-surface\"\r\n >\r\n <h3 class=\"text-xl font-semibold\">\r\n {{ \"properties.form.formula\" | transloco }}\r\n <span class=\"text-red-500\">*</span>\r\n </h3>\r\n </div>\r\n <div class=\"flex-1 min-h-0 p-4\">\r\n <mt-formula-builder\r\n formControlName=\"formula\"\r\n [contextKey]=\"formulaContextKey()\"\r\n [levelSchemaId]=\"formulaSchemaId()\"\r\n [moduleId]=\"formulaModuleId()\"\r\n />\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</mt-page>\r\n","/*\r\n * Public API Surface of structure-builder\r\n */\r\n\r\nexport * from './lib/properties-list/properties-list';\r\nexport * from './lib/property-form/property-form';\r\n\r\nexport * from './store';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3"],"mappings":"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"}