@cccteam/ccc-lib 0.0.17 → 0.0.18

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":"cccteam-ccc-lib.mjs","sources":["../../../projects/ccc-lib/src/auth-service/auth.service.ts","../../../projects/ccc-lib/src/ui-core-service/ui-core.service.ts","../../../projects/ccc-lib/src/auth-has-permission/has-permission.directive.ts","../../../projects/ccc-lib/src/auth-forms/ccc-field/ccc-field.component.ts","../../../projects/ccc-lib/src/auth-authentication-guard/authentication.guard.ts","../../../projects/ccc-lib/src/auth-authorization-guard/authorization.guard.ts","../../../projects/ccc-lib/src/util-request-options/request-options.ts","../../../projects/ccc-lib/src/types/resource-types.ts","../../../projects/ccc-lib/src/types/configs.ts","../../../projects/ccc-lib/src/types/notification-message.ts","../../../projects/ccc-lib/src/types/permissions.ts","../../../projects/ccc-lib/src/types/resource-meta.ts","../../../projects/ccc-lib/src/types/tokens.ts","../../../projects/ccc-lib/src/types/validators.ts","../../../projects/ccc-lib/src/ui-alert/alert.component.ts","../../../projects/ccc-lib/src/ui-alert/alert.component.html","../../../projects/ccc-lib/src/ui-sidenav/sidenav.component.ts","../../../projects/ccc-lib/src/ui-sidenav/sidenav.component.html","../../../projects/ccc-lib/src/ui-interceptor/api.interceptor.ts","../../../projects/ccc-lib/src/ui-notification-service/notification.service.ts","../../../projects/ccc-lib/src/ccc-resource/actions/action-button-smart/action-access-control-wrapper.component.ts","../../../projects/ccc-lib/src/ccc-resource/gui-constants.ts","../../../projects/ccc-lib/src/ccc-resource/padding-element/padding-element.component.ts","../../../projects/ccc-lib/src/ccc-resource/padding-element/padding-element.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/computed-field/computed-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/computed-field/computed-field.component.html","../../../projects/ccc-lib/src/ccc-resource/empty-readonly-field/empty-readonly-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/empty-readonly-field/empty-readonly-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-store.service.ts","../../../projects/ccc-lib/src/ccc-resource/form-state.service.ts","../../../projects/ccc-lib/src/ccc-resource/leave-page-confirmation-modal/leave-page-confirmation-modal.component.ts","../../../projects/ccc-lib/src/ccc-resource/leave-page-confirmation-modal/leave-page-confirmation-modal.component.html","../../../projects/ccc-lib/src/ccc-resource/can-deactivate.guard.ts","../../../projects/ccc-lib/src/ccc-resource/resources-helpers.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/base-field.directive.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/boolean-field/boolean-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/boolean-field/boolean-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/date-field/date-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/date-field/date-field.component.html","../../../projects/ccc-lib/src/ccc-resource/concat-fns.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/enumerated-field/enumerated-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/enumerated-field/enumerated-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/nullboolean-field/nullboolean-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/nullboolean-field/nullboolean-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/number-field/number-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/number-field/number-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/text-field/text-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/text-field/text-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/resource-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/resource-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-layout/resource-layout.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-layout/resource-layout.component.html","../../../projects/ccc-lib/src/ccc-resource/base-rpc-modal/base-rpc-modal.component.ts","../../../projects/ccc-lib/src/ccc-resource/base-rpc-modal/base-rpc-modal.component.html","../../../projects/ccc-lib/src/ccc-resource/actions/rpc-button/rpc-button.component.ts","../../../projects/ccc-lib/src/ccc-resource/actions/rpc-button/rpc-button.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-create/resource-create.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-create/resource-create.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-array-view/resource-array-view.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-array-view/resource-array-view.component.html","../../../projects/ccc-lib/src/ccc-resource/format-fns.ts","../../../projects/ccc-lib/src/ccc-resource/resource-list/resource-list.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-list/resource-list.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-list-create/resource-list-create.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-list-create/resource-list-create.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-resolver/resource-resolver.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-resolver/resource-resolver.component.html","../../../projects/ccc-lib/src/ccc-resource/delete-resource-confirmation-modal/delete-resource-confirmation-modal.component.ts","../../../projects/ccc-lib/src/ccc-resource/delete-resource-confirmation-modal/delete-resource-confirmation-modal.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-view/resource-view.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-view/resource-view.component.html","../../../projects/ccc-lib/src/ccc-resource/compound-resource/compound-resource.component.ts","../../../projects/ccc-lib/src/ccc-resource/compound-resource/compound-resource.component.html","../../../projects/ccc-lib/src/ccc-camel-case-to-title/camel-case-to-title.pipe.ts","../../../projects/ccc-lib/src/ccc-grid/table-button/table-button.component.ts","../../../projects/ccc-lib/src/ccc-grid/table-button/table-button.component.html","../../../projects/ccc-lib/src/ccc-grid/ccc-grid.component.ts","../../../projects/ccc-lib/src/ui-idle-service/idle.service.ts","../../../projects/ccc-lib/src/forms/index.ts","../../../projects/ccc-lib/src/index.ts","../../../projects/ccc-lib/src/cccteam-ccc-lib.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, signal } from '@angular/core';\nimport {\n API_URL,\n FRONTEND_LOGIN_PATH,\n Permission,\n PERMISSION_REQUIRED,\n PermissionScope,\n Resource,\n SESSION_PATH,\n SessionInfo\n} from '@cccteam/ccc-lib/src/types';\nimport { errorOptions } from '@cccteam/ccc-lib/src/util-request-options';\nimport { map, Observable, tap } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private apiUrl = inject(API_URL);\n private loginUrl = inject(FRONTEND_LOGIN_PATH);\n private sessionUrl = inject(SESSION_PATH);\n\n http = inject(HttpClient);\n private authenticatedSignal = signal(false);\n private sessionInfoSignal = signal({} as SessionInfo);\n\n redirectUrl = signal('');\n authenticated = this.authenticatedSignal.asReadonly();\n sessionInfo = this.sessionInfoSignal.asReadonly();\n\n constructor() {\n this.initializePermissionFn();\n }\n\n private static permissionFn: (resource: Resource, permission: Permission) => boolean;\n\n hasPermission(scope?: PermissionScope): boolean {\n if (!scope) return true;\n const resourcePermissions = this.sessionInfo().permissions?.[scope.domain]?.[scope.resource];\n return Array.isArray(resourcePermissions) && resourcePermissions.includes(scope.permission);\n }\n\n static requiresPermission(resource: Resource, permission: Permission): boolean {\n if (!AuthService.permissionFn) {\n throw new Error(\n `AuthState has not been initialized. Ensure AuthState is provided in your module or instantiated at least once.`,\n );\n }\n return AuthService.permissionFn(resource, permission);\n }\n\n private initializePermissionFn(): void {\n if (!AuthService.permissionFn) {\n AuthService.permissionFn = inject(PERMISSION_REQUIRED);\n }\n }\n\n /**\n * Logs a user out.\n *\n * @returns Observable with a boolean indicating whether they were logged out.\n */\n logout(): Observable<boolean> {\n return this.http\n .delete(`${this.apiUrl}/${this.sessionUrl}`, errorOptions(false))\n .pipe(map(() => true))\n .pipe(\n tap(() => {\n this.authenticatedSignal.set(false);\n this.sessionInfoSignal.set({} as SessionInfo);\n }),\n );\n }\n\n /**\n * Checks a user's session with the server.\n *\n * @returns Observable with the user session info\n */\n checkUserSession(): Observable<SessionInfo> {\n return this.http.get<SessionInfo>(`${this.apiUrl}/${this.sessionUrl}`, errorOptions(false)).pipe(\n tap((sessionInfo) => {\n this.authenticatedSignal.set(!!sessionInfo?.authenticated);\n this.sessionInfoSignal.set(sessionInfo);\n }),\n );\n }\n\n loginRoute(): string {\n return this.loginUrl;\n }\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { CreateNotificationMessage } from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UiCoreService {\n notifications = inject(NotificationService);\n loadingSignal = signal([] as string[]);\n sidenavOpened = signal(true);\n currentSidenavIdentifier = signal('');\n\n private loading = this.loadingSignal.asReadonly();\n isLoading = computed(() => this.loading().length > 0);\n\n publishError(message: CreateNotificationMessage): void {\n this.notifications.addGlobalNotification(message);\n }\n\n beginActivity(process: string): void {\n if (!this.loading().includes(process)) {\n this.loadingSignal.update((current) => [...current, process]);\n }\n }\n\n endActivity(process: string): void {\n this.loadingSignal.update((current) => current.filter((p) => p !== process));\n }\n\n toggleSidenav(): void {\n this.sidenavOpened.update((opened) => !opened);\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef, effect, inject, signal } from '@angular/core';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport { PermissionScope } from '@cccteam/ccc-lib/src/types';\n\n@Directive({\n selector: '[cccHasPermission]',\n standalone: true,\n})\nexport class HasPermissionDirective {\n private auth = inject(AuthService);\n private templateRef = inject(TemplateRef<unknown>);\n private viewContainer = inject(ViewContainerRef);\n\n private scope = signal<PermissionScope | undefined>(undefined);\n\n @Input()\n set cccHasPermission(scope: PermissionScope) {\n this.scope.set(scope);\n }\n\n constructor() {\n effect(() => {\n const scope = this.scope();\n\n if (this.auth.hasPermission(scope) && this.auth.authenticated()) {\n if (!this.viewContainer.get(0)) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n } else {\n this.viewContainer.clear();\n }\n });\n }\n}\n","import { Component, computed, inject, input, OnInit, signal, Signal } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport { Domain, ReadPermission, Resource, UpdatePermission } from '@cccteam/ccc-lib/src/types';\n\nexport enum InputMode {\n Read = 'read',\n Edit = 'edit',\n}\n\n@Component({\n selector: 'ccc-input-field',\n imports: [MatFormFieldModule, MatInputModule],\n template: `\n <mat-form-field [class]=\"className()\">\n <mat-label>{{ name() }}</mat-label>\n <input matInput [disabled]=\"mode() === inputMode.Edit && canEdit()\" [value]=\"value()\" />\n </mat-form-field>\n `,\n styleUrl: './ccc-field.component.scss',\n})\nexport class CccInputFieldComponent implements OnInit {\n auth = inject(AuthService);\n className = input();\n mode = input.required<InputMode>();\n resource = input.required<Resource>();\n domain = input.required<Domain>();\n value = input.required();\n name = input.required<string>();\n\n inputMode = InputMode;\n\n canEdit: Signal<boolean> = signal(false);\n canEditSelector = false;\n\n canRead: Signal<boolean> = signal(false);\n canReadSelector = false;\n\n ngOnInit(): void {\n this.canEditSelector = this.auth.hasPermission({\n resource: this.resource(),\n permission: ReadPermission,\n domain: this.domain(),\n });\n this.canReadSelector = this.auth.hasPermission({\n resource: this.resource(),\n permission: UpdatePermission,\n domain: this.domain(),\n });\n\n this.canRead = computed(() => {\n const res = this.resource();\n if (!res) {\n return false;\n }\n if (AuthService.requiresPermission(this.resource(), ReadPermission)) {\n return this.canReadSelector;\n }\n return false;\n });\n\n this.canEdit = computed(() => {\n const res = this.resource();\n if (!res) {\n return false;\n }\n if (AuthService.requiresPermission(this.resource(), UpdatePermission)) {\n return this.canEditSelector;\n }\n return false;\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport { BASE_URL } from '@cccteam/ccc-lib/src/types';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nexport const AuthenticationGuard = (\n route: ActivatedRouteSnapshot,\n routerState: RouterStateSnapshot,\n): Observable<boolean> => {\n const authService = inject(AuthService);\n const baseUrl = inject(BASE_URL);\n\n const authenticate = (): void => {\n const url = routerState.url;\n const absoluteUrl = baseUrl + (!url.toString().startsWith('/') ? '/' + url : url);\n const encodedUrl = encodeURIComponent(absoluteUrl);\n window.location.href = `${authService.loginRoute()}?returnUrl=${encodedUrl}`;\n };\n\n if (authService.authenticated()) {\n return of(true);\n }\n\n return authService.checkUserSession().pipe(\n map((sessionInfo) => {\n if (sessionInfo?.authenticated) {\n return true;\n }\n\n authenticate();\n return false;\n }),\n catchError(() => {\n authenticate();\n return of(false);\n }),\n );\n};\n","import { computed, inject, Signal } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\n\nexport const AuthorizationGuard = (route: ActivatedRouteSnapshot): Signal<boolean> => {\n const router = inject(Router);\n const auth = inject(AuthService);\n return computed(() => {\n const hasPermission = auth.hasPermission(route.data['scope']);\n if (hasPermission) {\n return true;\n } else {\n router.navigate(['/']);\n return false;\n }\n });\n};\n","import { HttpContext, HttpContextToken } from '@angular/common/http';\n\nexport interface CustomHttpRequestOptions {\n suppressGlobalError: boolean;\n}\n\nexport const CUSTOM_HTTP_REQUEST_OPTIONS = new HttpContextToken<CustomHttpRequestOptions>(() => ({\n suppressGlobalError: false,\n}));\n\nexport function errorOptions(suppressGlobalError: boolean | undefined): { context: HttpContext } {\n return {\n context: new HttpContext().set(CUSTOM_HTTP_REQUEST_OPTIONS, {\n suppressGlobalError: suppressGlobalError ?? false,\n }),\n };\n}\n","// Shared types and constants used across the ccc-resource module\n// This file exists to break circular dependencies between types and ccc-resource\n\nexport const defaultEmptyFieldValue = '-';\n\nexport type NullBoolean = null | true | false;\n\nexport type ConcatFn = 'space-concat' | 'hyphen-concat' | 'space-hyphen-concat' | 'hyphen-space-concat';\n","import { TooltipPosition } from '@angular/material/tooltip';\nimport { FieldName, Method, Resource } from './permissions';\nimport { ConcatFn, defaultEmptyFieldValue, NullBoolean } from './resource-types';\nimport { ResourceValidatorFn } from './validators';\n\nexport interface FieldPointer {\n field: FieldName;\n}\n\nexport interface MenuItem {\n label: string;\n route?: string[];\n children?: MenuItem[];\n}\n\nexport interface RouteResourceData {\n config: RootConfig;\n}\n\nexport type DataType = string | number | number[] | string[] | boolean | undefined | Date;\nexport type RecordData = Record<string, DataType | null>;\n\nexport type RPCDataType = string | number | string[] | number[] | boolean | Date;\nexport type RPCRecordData = Record<string, RPCDataType>;\nexport type RpcMethod = Record<string, DataType>;\n\nexport type ParentResourceConfig = ListViewConfig | ViewConfig | ArrayConfig;\nexport type ChildResourceConfig = ListViewConfig | ViewConfig | ComponentConfig | ArrayConfig;\n\nexport type ActionType = 'function' | 'link';\n\nexport type ListConcatFn =\n | 'space-concat'\n | 'hyphen-concat'\n | 'space-hyphen-concat'\n | 'hyphen-space-concat'\n | 'no-space-concat';\nexport type ConfigType = ChildResourceConfig;\nexport type FormatType = 'simpleSlashDateFormat';\nexport type RPCPlacement = 'inline' | 'end';\n\nexport type ColumnConfig = SingleColumnConfig | MultiColumnConfig;\n\nexport interface ActionButtonConfig {\n label: string;\n icon: string;\n action?: (resource: { id: string }) => void;\n viewRoute?: string;\n actionType?: ActionType;\n color?: string;\n disabledLabel?: string;\n}\nexport interface ActionButtonConfigOptions {\n label: string;\n icon: string;\n action?: (resource: { id: string }) => void;\n viewRoute?: string;\n actionType?: ActionType;\n color?: string;\n disabledLabel?: string;\n}\n\nexport function actionButtonConfig(config: ActionButtonConfigOptions): ActionButtonConfig {\n return {\n ...actionButtonConfigDefaults,\n ...config,\n } satisfies ActionButtonConfig;\n}\n\nexport const actionButtonConfigDefaults = {\n label: '',\n icon: '',\n actionType: 'function' as ActionType,\n color: '',\n disabledLabel: '',\n} satisfies ActionButtonConfig;\n\nexport interface SingleColumnConfig {\n id: FieldName;\n header?: string;\n width?: number;\n resizable?: boolean;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n valueGetter?: (data: any) => string;\n valueFormatter?: (data: any) => string;\n tooltipPosition?: TooltipPosition;\n viewRoute?: Resource;\n buttonConfig?: ActionButtonConfig;\n actionType?: ActionType;\n formatType?: FormatType | string;\n hidden?: boolean;\n emptyDataValue?: DataType;\n filterable?: boolean;\n hideHeader?: boolean;\n}\nexport interface SingleColumnConfigOptions {\n id: FieldName;\n header?: string;\n width?: number;\n resizable?: boolean;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n valueGetter?: (data: any) => string;\n valueFormatter?: (data: any) => string;\n tooltipPosition?: TooltipPosition;\n viewRoute?: Resource;\n buttonConfig?: ActionButtonConfig;\n actionType?: ActionType;\n formatType?: FormatType | string;\n hidden?: boolean;\n emptyDataValue?: DataType;\n filterable?: boolean;\n hideHeader?: boolean;\n}\n\nexport function singleColumnConfig(config: SingleColumnConfigOptions): SingleColumnConfig {\n return {\n ...singleColumnConfigDefaults,\n ...config,\n } satisfies SingleColumnConfig;\n}\n\nexport const singleColumnConfigDefaults = {\n id: '' as FieldName,\n header: '',\n resizable: true,\n actionType: 'function' as ActionType,\n hidden: false,\n filterable: true,\n hideHeader: false,\n} satisfies SingleColumnConfig;\n\nexport interface MultiColumnConfig extends SingleColumnConfig {\n // todo: additionalIds name is not clear. the id provided is fetched from a different resource, such as a typeId\n additionalIds: AdditionalResourceConfig[];\n concatFn: ListConcatFn;\n}\nexport interface MultiColumnConfigOptions extends SingleColumnConfigOptions {\n additionalIds: AdditionalResourceConfig[];\n concatFn: ListConcatFn;\n}\n\nexport function multiColumnConfig(config: MultiColumnConfigOptions): MultiColumnConfig {\n return {\n ...multiColumnConfigDefaults,\n ...config,\n } satisfies MultiColumnConfig;\n}\n\nexport const multiColumnConfigDefaults = {\n ...singleColumnConfigDefaults,\n additionalIds: [] as AdditionalResourceConfig[],\n concatFn: 'hyphen-concat' as ListConcatFn,\n} satisfies MultiColumnConfig;\n\nexport interface AdditionalResourceConfig {\n resource?: Resource;\n id: FieldName;\n field?: FieldName;\n hidden?: boolean;\n}\nexport interface AdditionalResourceConfigOptions {\n id: FieldName;\n resource?: Resource;\n field?: FieldName;\n hidden?: boolean;\n}\n\nexport function additionalResourceConfig(config: AdditionalResourceConfigOptions): AdditionalResourceConfig {\n return {\n ...additionalResourceConfigDefaults,\n ...config,\n } satisfies AdditionalResourceConfig;\n}\n\nexport const additionalResourceConfigDefaults = {\n id: '' as FieldName,\n resource: '' as Resource,\n field: '' as FieldName,\n hidden: false,\n} satisfies AdditionalResourceConfig;\n\nexport interface FieldSort {\n field: FieldName;\n direction: 'asc' | 'desc';\n}\nexport interface FieldSortOptions {\n field: FieldName;\n direction?: 'asc' | 'desc';\n}\n\nexport function fieldSort(config: FieldSortOptions): FieldSort {\n return {\n ...fieldSortDefaults,\n ...config,\n } satisfies FieldSort;\n}\n\nexport const fieldSortDefaults = {\n field: '' as FieldName,\n direction: 'asc' as 'asc' | 'desc',\n} satisfies FieldSort;\n\nexport interface EnumeratedConfigOptions {\n // primaryResource comes from the metadata\n overrideResource?: Resource;\n /* A function to filter the list of enumerated options.\n * The `parentResource` argument contains the data of the resource that this enumerated field is part of.\n * It will be an object with the current form values, which can be empty during resource creation.\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n filter?: (resource: any) => string;\n /**\n * Set disableCacheForFilterPii to `true` to promote the GET to a POST when PII is used in the filter\n * POST requests cannot be cached\n */\n disableCacheForFilterPii?: boolean;\n /**\n * Specifies which resource data to pass to the filter function:\n * - 'rootResource': Pass in the root resource data\n * - 'parentResource': Pass in the parent resource data\n * @default 'parentResource'\n */\n filterType?: FilterType;\n sorts?: FieldSort[];\n listDisplay?: FieldName[];\n viewDisplay: FieldName[];\n viewConcatFn?: ConcatFn;\n listConcatFn?: ConcatFn;\n viewDetails?: boolean;\n searchable?: boolean;\n}\n\ntype FilterType = 'parentResource' | 'rootResource';\nexport interface EnumeratedConfig {\n overrideResource: Resource;\n filter: (resource: any) => string;\n disableCacheForFilterPii: boolean;\n filterType: FilterType;\n sorts: FieldSort[];\n listDisplay: FieldName[];\n viewDisplay: FieldName[];\n viewConcatFn: ConcatFn;\n listConcatFn: ConcatFn;\n viewDetails: boolean;\n searchable: boolean;\n}\nexport function enumeratedConfig(config: EnumeratedConfigOptions): EnumeratedConfig {\n return {\n ...enumeratedConfigDefaults,\n ...config,\n } satisfies EnumeratedConfig;\n}\nexport const enumeratedConfigDefaults = {\n overrideResource: '' as Resource,\n filter: (): string => '',\n disableCacheForFilterPii: false,\n filterType: 'parentResource' as FilterType,\n sorts: [] as FieldSort[],\n listDisplay: [] as FieldName[],\n viewDisplay: [] as FieldName[],\n viewConcatFn: 'hyphen-concat' as ConcatFn,\n listConcatFn: 'hyphen-concat' as ConcatFn,\n viewDetails: false,\n searchable: false,\n};\n\nexport type FieldDefault = ForeignKeyDefault | StaticDefault | null;\n\nexport interface NullBooleanConfigOptions {\n displayValues?: Record<'null' | 'true' | 'false', { label: string; value: NullBoolean }>;\n}\nexport interface NullBooleanConfig {\n /** This property maps the three possible values for this\n * nullboolean field with the display values users will see\n * on the screen for each\n */\n displayValues: Record<'null' | 'true' | 'false', { label: string; value: NullBoolean }>;\n\n /** TODO: In FUTURE PHASES once field change history is implemented\n * When this field is first displayed on screen, set the\n * value to null based on the value present in it.\n * Useful if the database doesn't have support nulling but you want\n * users to make a conscious selection, but the database\n * will either contain a true or false. Will need to check the\n * 'last edited' on the field to ensure that we don't repeatedly spam\n * users with this though\n */\n // nullOnEdit: {\n // nullIfTrue: boolean;\n // nullIfFalse: boolean;\n // };\n}\nexport function nullBooleanConfig(config: NullBooleanConfigOptions): NullBooleanConfig {\n return {\n ...nullBooleanConfigDefaults,\n ...config,\n } satisfies NullBooleanConfig;\n}\nconst defaultBooleanDisplay = Object.freeze({\n null: {\n label: defaultEmptyFieldValue,\n value: null,\n },\n true: {\n label: 'Yes',\n value: true,\n },\n false: {\n label: 'No',\n value: false,\n },\n});\n\nexport const nullBooleanConfigDefaults = {\n displayValues: defaultBooleanDisplay,\n};\n\nexport interface ForeignKeyDefaultOptions {\n parentId: FieldName;\n}\nexport interface ForeignKeyDefault {\n type: 'foreignKey';\n parentId: FieldName;\n}\nexport function foreignKeyDefault(config: ForeignKeyDefaultOptions): ForeignKeyDefault {\n return {\n ...foreignKeyDefaultDefaults,\n ...config,\n } satisfies ForeignKeyDefault;\n}\nexport const foreignKeyDefaultDefaults = {\n type: 'foreignKey',\n parentId: '' as FieldName,\n} satisfies ForeignKeyDefault;\n\nexport interface StaticDefault {\n type: 'static';\n value: string | boolean;\n}\nexport interface staticDefaultOptions {\n value: string | boolean;\n}\nexport function staticDefault(config: staticDefaultOptions): StaticDefault {\n return {\n ...staticDefaultDefaults,\n ...config,\n } satisfies StaticDefault;\n}\nexport const staticDefaultDefaults = {\n type: 'static',\n value: '',\n} satisfies StaticDefault;\n\nexport type Affix = string | remoteData | parentData;\n\ninterface remoteData {\n resource: Resource;\n id: FieldName;\n field: FieldName;\n}\n\ninterface parentData {\n field: FieldName;\n}\n\nexport type ConfigElement = FieldElement | SectionElement | ComputedDisplayFieldElement | PaddingElement;\n\nexport type ColSize = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\nexport interface ComputedDisplayFieldElementOptions {\n label?: string;\n class?: string;\n cols?: ColSize;\n calculatedValue?: (data: any) => string;\n shouldRender?: ((data: any) => boolean) | boolean;\n}\nexport interface ComputedDisplayFieldElement {\n type: 'computedDisplayField';\n label: string;\n class: string;\n cols: ColSize;\n calculatedValue: (data: any) => string;\n shouldRender: ((data: any) => boolean) | boolean;\n}\nexport function computedDisplayField(config: ComputedDisplayFieldElementOptions): ComputedDisplayFieldElement {\n return {\n ...computedDisplayFieldElementDefaults,\n ...config,\n } satisfies ComputedDisplayFieldElement;\n}\nexport const computedDisplayFieldElementDefaults = {\n type: 'computedDisplayField',\n label: '',\n class: '',\n cols: 6,\n calculatedValue: (): string => '',\n shouldRender: true,\n} satisfies ComputedDisplayFieldElement;\n\nexport interface PaddingElementOptions {\n cols?: ColSize;\n shouldRender?: ((data: any) => boolean) | boolean;\n}\nexport interface PaddingElement {\n type: 'padding';\n cols: ColSize;\n /** Determines whether the padding is shown\n */\n shouldRender: ((data: any) => boolean) | boolean;\n}\nexport function padding(config?: PaddingElementOptions): PaddingElement {\n return {\n ...paddingElementDefaults,\n ...config,\n } satisfies PaddingElement;\n}\nexport const paddingElementDefaults = {\n type: 'padding',\n cols: 12,\n shouldRender: true,\n} satisfies PaddingElement;\n\nexport interface SectionElementOptions {\n label?: string;\n class?: string;\n cols?: ColSize;\n shouldRender?: ((data: any) => boolean) | boolean;\n nullAllChildrenIfConditionallyHidden?: boolean;\n children?: ConfigElement[];\n}\nexport interface SectionElement {\n type: 'section';\n label: string;\n class: string;\n cols: ColSize;\n /**\n * shouldRender is used to determine if the section should be\n * displayed to users.\n * When assigning shouldRender a function, the first argument\n * is the current state of the resource being displayed\n * Hides the layout AND all of its children\n */\n shouldRender: ((data: any) => boolean) | boolean;\n /** If shouldRender is NOT a function, this property does nothing\n * If shouldRender is a function, this property\n * sets children's values to null if shouldRender hides it (returns false)\n * within the resource-layout.component\n */\n nullAllChildrenIfConditionallyHidden: boolean;\n children: ConfigElement[];\n}\nexport function section(config: SectionElementOptions): SectionElement {\n return {\n ...sectionElementDefaults,\n ...config,\n } satisfies SectionElement;\n}\nexport const sectionElementDefaults = {\n type: 'section',\n label: '',\n class: '',\n cols: 12,\n shouldRender: true,\n nullAllChildrenIfConditionallyHidden: false,\n children: [],\n} satisfies SectionElement;\n\nexport interface FieldElementOptions {\n name: FieldName;\n label?: string;\n cols?: ColSize;\n class?: string;\n enumeratedConfig?: EnumeratedConfig;\n default?: FieldDefault;\n nullBooleanConfig?: NullBooleanConfig;\n validators?: ((data: any) => ResourceValidatorFn[]) | ResourceValidatorFn[];\n readOnly?: boolean;\n prefixes?: Affix[];\n suffixes?: Affix[];\n shouldRender?: ((data: any) => boolean) | boolean;\n nullIfConditionallyHidden?: boolean;\n}\nexport interface FieldElement {\n type: 'field';\n name: string;\n label: string;\n cols: ColSize;\n class: string;\n enumeratedConfig: EnumeratedConfig;\n default: FieldDefault;\n nullBooleanConfig: NullBooleanConfig;\n /**\n * A list of validators that must pass to allow a field to be submitted.\n * Utilize existing validators in the resourceValidators object, and\n * add any new or custom validators to it\n */\n validators: ((data: any) => ResourceValidatorFn[]) | ResourceValidatorFn[];\n readOnly: boolean;\n prefixes: Affix[];\n suffixes: Affix[];\n /**\n * shouldRender is used to determine if the element should be\n * displayed to users.\n * When assigning shouldRender a function, the first argument\n * is the current state of the resource being displayed\n */\n shouldRender: ((data: any) => boolean) | boolean;\n /** If shouldRender is NOT a function, this property does nothing\n * If shouldRender is a function, this property\n * determines whether the form control associated\n * with this config element should have its value\n * set to null if shouldRender hides it (returns false)\n */\n nullIfConditionallyHidden: boolean;\n}\n\nexport function field(config: FieldElementOptions): FieldElement {\n return {\n ...fieldElementDefaults,\n ...config,\n } satisfies FieldElement;\n}\nexport const fieldElementDefaults = {\n type: 'field',\n name: '',\n label: '',\n cols: 6,\n class: '',\n enumeratedConfig: { ...enumeratedConfigDefaults },\n default: null,\n validators: [],\n nullBooleanConfig: { ...nullBooleanConfigDefaults },\n readOnly: false,\n prefixes: [],\n suffixes: [],\n shouldRender: true,\n nullIfConditionallyHidden: false,\n} satisfies FieldElement;\n\n/**\n * RouteData is used to define the route for a config\n * route: the route for the config\n * hasViewRoute: when true, a route will be created for route/:uuid\n */\nexport interface RootRouteData {\n route?: string;\n hasViewRoute?: boolean;\n}\n\nexport interface RPCConfigOptions {\n label: string;\n afterMethodRedirect?: string;\n conditions: {\n field: FieldName;\n matchValues: string[];\n }[];\n methodBodyTemplate?: any;\n successMessage?: string;\n elements?: ConfigElement[];\n placement?: RPCPlacement;\n method: Method;\n customComponent?: ComponentConfig;\n refreshResources?: Resource[];\n defaultModalWidth?: string;\n shouldRender?: () => boolean;\n}\nexport interface RPCConfig {\n label: string;\n afterMethodRedirect: string | string[];\n conditions: {\n field: FieldName;\n matchValues: string[];\n }[];\n methodBodyTemplate: any;\n method: Method;\n successMessage: string;\n elements: ConfigElement[];\n placement: RPCPlacement;\n customComponent: ComponentConfig;\n refreshResources: Resource[];\n defaultModalWidth: string;\n shouldRender: () => boolean;\n}\nexport function rpcConfig(config: RPCConfigOptions): RPCConfig {\n return {\n ...rpcConfigDefaults,\n ...config,\n } satisfies RPCConfig;\n}\nexport const rpcConfigDefaults = {\n label: '',\n afterMethodRedirect: '',\n conditions: [] as {\n field: FieldName;\n matchValues: string[];\n }[],\n methodBodyTemplate: {} as any,\n successMessage: '',\n elements: [] as ConfigElement[],\n placement: 'end' as RPCPlacement,\n method: '' as Method,\n customComponent: {} as ComponentConfig,\n refreshResources: [] as Resource[],\n defaultModalWidth: '',\n shouldRender: (): boolean => true,\n} satisfies RPCConfig;\n\nexport interface RPCBaseFormData {\n elements: FieldElement[];\n label: string;\n method: Method;\n}\n\n// Config is the base type that all configurations should start with\nexport interface RootConfigOptions {\n routeData?: RootRouteData;\n nav?: {\n navItem: MenuItem;\n group?: string;\n };\n parentConfig: ParentResourceConfig;\n relatedConfigs?: ChildResourceConfig[];\n rpcConfigs?: RPCConfig[];\n}\nexport interface RootConfig {\n routeData: RootRouteData;\n nav: {\n navItem: MenuItem;\n group?: string;\n };\n parentConfig: ParentResourceConfig;\n relatedConfigs: ChildResourceConfig[];\n rpcConfigs?: RPCConfig[];\n}\nexport const rootConfigDefaults = {\n routeData: {} as RootRouteData,\n nav: {\n navItem: {} as MenuItem,\n },\n parentConfig: {} as ParentResourceConfig,\n relatedConfigs: [] as ChildResourceConfig[],\n rpcConfigs: [] as RPCConfig[],\n} satisfies RootConfig;\n\nexport function rootConfig(config: RootConfigOptions): RootConfig {\n return {\n ...rootConfigDefaults,\n ...config,\n } satisfies RootConfig;\n}\n\n// Base type config is the base type for all resource configurations\nexport interface BaseConfigOptions {\n title?: string;\n createTitle?: string;\n createButtonLabel?: string;\n primaryResource: Resource;\n parentClass?: string;\n fieldClass?: string;\n elements: ConfigElement[];\n createConfig?: ConfigType;\n parentRelation?: {\n parentKey: FieldName;\n childKey: FieldName;\n };\n showBackButton?: boolean;\n createNavigation?: string[];\n}\nexport interface BaseConfig {\n title: string;\n createTitle: string;\n createButtonLabel: string;\n primaryResource: Resource;\n parentClass: string;\n fieldClass: string;\n elements: ConfigElement[];\n createConfig: ConfigType;\n parentRelation: {\n parentKey: FieldName;\n childKey: FieldName;\n };\n showBackButton: boolean;\n createNavigation: string[];\n}\n\n// Available components for a component config\nexport type AvailableComponents = 'SwitchResolver';\n\n// Available param types for a component config\nexport type ConfigParam = SwitchConfigParam;\n\n// Custom component config renders a custom component and supplies params to it\nexport interface ComponentConfigOptions {\n // todo: it's weird that we have a primary resource here. Would be nice to remove but this adds a null check to all other configs\n primaryResource: Resource;\n component: AvailableComponents;\n params?: ConfigParam;\n relatedConfig?: ParentResourceConfig[];\n shouldRenderActions?: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\nexport interface ComponentConfig {\n type: 'Component';\n primaryResource: Resource;\n component: AvailableComponents;\n params: ConfigParam;\n relatedConfig: ParentResourceConfig[];\n shouldRenderActions: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\nexport function componentConfig(config: ComponentConfigOptions): ComponentConfig {\n return {\n ...componentConfigDefaults,\n ...config,\n } satisfies ComponentConfig;\n}\nexport const componentConfigDefaults = {\n type: 'Component',\n primaryResource: '' as Resource,\n component: 'SwitchResolver' as AvailableComponents,\n params: {\n cases: [],\n } satisfies ConfigParam,\n relatedConfig: [] as ParentResourceConfig[],\n shouldRenderActions: {\n create: (): boolean => true,\n edit: (): boolean => true,\n delete: (): boolean => true,\n },\n} satisfies ComponentConfig;\n\n// A switch is a component type that allows for conditional rendering of child components based on the value of a parent field\n// When parentData[c.parentField] equals c.caseId render the caseConfig with parentData[c.childId] as the uuid\nexport interface switchCase {\n caseId: string;\n parentField: string;\n childId: string;\n config: ChildResourceConfig;\n}\nexport interface SwitchConfigParamOptions {\n cases: switchCase[];\n}\nexport interface SwitchConfigParam {\n cases: switchCase[];\n}\nexport function switchParams(config: SwitchConfigParamOptions): SwitchConfigParam {\n return {\n ...switchParamsDefaults,\n ...config,\n } satisfies SwitchConfigParam;\n}\nexport const switchParamsDefaults = {\n cases: [] as switchCase[],\n} satisfies SwitchConfigParam;\n\nexport interface ListViewConfigOptions extends BaseConfigOptions {\n showViewButton?: boolean;\n loadCreatedResource?: boolean;\n collapsible?: boolean;\n overrideResource?: Resource;\n searchable?: boolean;\n enableRowExpansion?: boolean;\n rowExpansionConfig?: ChildResourceConfig;\n requireSearchToDisplayResults?: boolean;\n listColumns: ColumnConfig[];\n relatedConfigs?: ChildResourceConfig[];\n viewResource?: Resource | string;\n actionType?: ActionType;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n filter?: (parentResource: any) => string;\n disableCacheForFilterPii?: boolean;\n rpcConfigs?: RPCConfig[];\n sorts?: FieldSort[];\n shouldRenderActions?: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\nexport interface ListViewConfig extends BaseConfig {\n type: 'ListView';\n showViewButton: boolean;\n loadCreatedResource: boolean;\n collapsible: boolean;\n overrideResource: Resource;\n searchable: boolean;\n enableRowExpansion: boolean;\n rowExpansionConfig: ChildResourceConfig;\n requireSearchToDisplayResults: boolean;\n listColumns: ColumnConfig[];\n relatedConfigs: ChildResourceConfig[];\n viewResource: Resource | string;\n actionType: ActionType;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n filter: (parentResource: any) => string;\n disableCacheForFilterPii: boolean;\n rpcConfigs?: RPCConfig[];\n sorts: FieldSort[];\n shouldRenderActions: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\n\nexport function listViewConfig(config: ListViewConfigOptions): ListViewConfig {\n return {\n ...listViewConfigDefaults,\n ...config,\n } satisfies ListViewConfig;\n}\nexport const listViewConfigDefaults = {\n title: '',\n primaryResource: '' as Resource,\n type: 'ListView',\n createTitle: '',\n createButtonLabel: 'Create',\n loadCreatedResource: false,\n showViewButton: true,\n collapsible: false,\n listColumns: [],\n elements: [],\n parentClass: '',\n fieldClass: '',\n createConfig: {} as ListViewConfig,\n createNavigation: [],\n relatedConfigs: [],\n parentRelation: {\n parentKey: '' as FieldName,\n childKey: '' as FieldName,\n },\n overrideResource: '' as Resource,\n searchable: false,\n enableRowExpansion: false,\n rowExpansionConfig: {} as ChildResourceConfig,\n requireSearchToDisplayResults: false,\n showBackButton: true,\n filter: (): string => '',\n disableCacheForFilterPii: false,\n sorts: [] as FieldSort[],\n viewResource: '' as Resource,\n actionType: 'function' as ActionType,\n rpcConfigs: [],\n shouldRenderActions: {\n create: (): boolean => true,\n edit: (): boolean => true,\n delete: (): boolean => true,\n },\n} satisfies ListViewConfig;\n\nexport type ViewType = 'OneToOne' | 'OneToMany';\n\nexport interface ViewConfigOptions extends BaseConfigOptions {\n collapsible?: boolean;\n connectorResource?: Resource;\n relatedConfigs?: ChildResourceConfig[];\n rpcConfigs?: RPCConfig[];\n shouldRenderActions?: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\nexport interface ViewConfig extends BaseConfig {\n type: 'View';\n collapsible: boolean;\n // todo: remove this comment once full documentation has been added. Populate this value when a database view resource is used to connect the ViewConfig's parent resource to its primary resource\n connectorResource: Resource;\n rpcConfigs?: RPCConfig[];\n relatedConfigs: ChildResourceConfig[];\n /** A set of functions that allows for\n * conditional display of non-RPC\n * actions based on the pristine state of the resource\n * (if such a state is applicable. Creation for example won't\n * have such data)\n * This is separate from ABAC control which takes\n * precedence and is based on a user's attributes\n */\n shouldRenderActions: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\n\nexport function viewConfig(config: ViewConfigOptions): ViewConfig {\n return {\n ...viewConfigDefaults,\n ...config,\n } satisfies ViewConfig;\n}\nexport const viewConfigDefaults = {\n title: '',\n primaryResource: '' as Resource,\n type: 'View',\n createTitle: '',\n createButtonLabel: 'Create',\n parentClass: '',\n fieldClass: '',\n elements: [],\n collapsible: true,\n connectorResource: '' as Resource,\n relatedConfigs: [],\n createConfig: {} as ViewConfig,\n shouldRenderActions: {\n create: (): boolean => true,\n edit: (): boolean => true,\n delete: (): boolean => true,\n },\n createNavigation: [],\n parentRelation: {\n parentKey: '' as FieldName,\n childKey: '' as FieldName,\n },\n showBackButton: true,\n rpcConfigs: [],\n} satisfies ViewConfig;\n\nexport interface arrayConfigOptions {\n iteratedConfig: ChildResourceConfig;\n viewType?: ViewType;\n collapsible?: boolean;\n createConfig?: ConfigType;\n connectorResource?: Resource;\n connectorField?: FieldName;\n primaryResource: Resource;\n listFilter: (parentResource: any) => string;\n disableCacheForFilterPii?: boolean;\n sorts?: FieldSort[];\n title?: string;\n createButtonLabel?: string;\n limit?: number;\n shouldRenderActions?: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\nexport interface ArrayConfig {\n type: 'Array';\n iteratedConfig: ChildResourceConfig;\n viewType: ViewType;\n collapsible: boolean;\n createConfig: ConfigType;\n connectorResource: Resource;\n connectorField: FieldName;\n primaryResource: Resource;\n listFilter: (parentResource: any) => string;\n disableCacheForFilterPii: boolean;\n sorts: FieldSort[];\n title: string;\n createButtonLabel: string;\n shouldRenderActions: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n limit: number;\n}\nexport function arrayConfig(config: arrayConfigOptions): ArrayConfig {\n return {\n ...arrayConfigDefaults,\n ...config,\n } satisfies ArrayConfig;\n}\nexport const arrayConfigDefaults = {\n type: 'Array',\n iteratedConfig: {} as ChildResourceConfig,\n viewType: 'OneToMany' as ViewType,\n collapsible: true,\n createConfig: {} as ViewConfig,\n connectorResource: '' as Resource,\n connectorField: '' as FieldName,\n primaryResource: '' as Resource,\n listFilter: (): string => '',\n disableCacheForFilterPii: false,\n sorts: [] as FieldSort[],\n title: '',\n createButtonLabel: 'Create',\n limit: Infinity,\n shouldRenderActions: {\n create: (): boolean => true,\n edit: (): boolean => true,\n delete: (): boolean => true,\n },\n} satisfies ArrayConfig;\n","export enum AlertLevel {\n ERROR = 'warn',\n INFO = 'accent',\n SUCCESS = 'success',\n}\n\nexport interface CreateNotificationMessage {\n duration?: number;\n message: string;\n link: string;\n level: AlertLevel;\n}\n\nexport interface NotificationMessage {\n id: number;\n duration?: number;\n message: string;\n link: string;\n level: AlertLevel;\n}\n","type Brand<K, T> = K & { __brand: T };\n\nexport type Permission = Brand<string, 'Permission'>;\nexport type Resource = Brand<string, 'Resource'>;\nexport type Domain = Brand<string, 'Domain'>;\nexport type FieldName = Brand<string, 'FieldName'>;\nexport type Method = Brand<string, 'Method'>;\nexport type DomainPermissions = Record<Domain, Record<Resource, Record<Permission, Permissions>>>;\n\nexport interface PermissionScope {\n resource: Resource;\n permission: Permission;\n domain: Domain;\n}\n\nexport const ReadPermission = 'Read' as Permission;\nexport const UpdatePermission = 'Update' as Permission;\n","// Meta interfaces for resources and methods\n// This file exists to break circular dependencies between types and ccc-resource\n\nimport { Resource } from './permissions';\n\nexport type ValidDisplayTypes =\n | 'boolean'\n | 'nullboolean'\n | 'number'\n | 'string'\n | 'date'\n | 'enumerated'\n | 'link'\n | 'uuid'\n | 'civildate'\n | 'string[]'\n | 'customtypes.document';\n\nexport type ValidRPCTypes = ValidDisplayTypes | `${Exclude<ValidDisplayTypes, 'string[]'>}[]`;\n\nexport interface RPCFieldMeta {\n fieldName: string;\n displayType: ValidRPCTypes;\n enumeratedResource?: Resource;\n}\n\nexport interface MethodMeta {\n route: string;\n fields: RPCFieldMeta[];\n}\n\nexport interface FieldMeta {\n fieldName: string;\n /** Indicates whether the field is required and only applies during resource creation.\n * Use the validators config parameter in all other contexts\n */\n required: boolean;\n primaryKey?: { ordinalPosition: number };\n displayType: ValidDisplayTypes;\n enumeratedResource?: Resource;\n isIndex: boolean;\n}\n\nexport interface ResourceMeta {\n route: string;\n consolidatedRoute?: string;\n listDisabled?: boolean;\n readDisabled?: boolean;\n createDisabled?: boolean;\n updateDisabled?: boolean;\n deleteDisabled?: boolean;\n substringSearchParameter?: string;\n fields: FieldMeta[];\n}\n\nexport type Meta = MethodMeta | ResourceMeta;\n\nexport namespace CustomTypes {\n export interface Document {\n // todo/fixme: implement the actual rich text document interface here\n placeholder: string;\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Domain, Permission, Resource } from './permissions';\nimport { MethodMeta, ResourceMeta } from './resource-meta';\n\n/**\n * The base URL for API requests (e.g., 'https://api.example.com/').\n */\nexport const BASE_URL = new InjectionToken<string>('BASE_URL');\n\n/**\n * The path to the frontend login page (e.g., '/login').\n */\nexport const FRONTEND_LOGIN_PATH = new InjectionToken<string>('FRONTEND_LOGIN_PATH');\n\n/**\n * The path to the session endpoint (e.g., 'user/session').\n */\nexport const SESSION_PATH = new InjectionToken<string>('SESSION_PATH');\n\n/**\n * The base URL for API requests (e.g., '/api').\n */\nexport const API_URL = new InjectionToken<string>('API_URL');\n\nexport const PERMISSION_REQUIRED = new InjectionToken<(resource: Resource, permission: Permission) => boolean>(\n 'PERMISSION_REQUIRED',\n);\n\nexport const AVAILABLE_PERMISSIONS = new InjectionToken<{\n Create: Permission;\n Delete: Permission;\n List: Permission;\n Read: Permission;\n Update: Permission;\n}>('AVAILABLE_PERMISSIONS');\nexport const AVAILABLE_DOMAINS = new InjectionToken<Record<string, Domain>[]>('AVAILABLE_DOMAINS');\n\nexport const RESOURCE_META = new InjectionToken<(resource: Resource) => ResourceMeta>('RESOURCE_META');\nexport const METHOD_META = new InjectionToken<(method: string) => MethodMeta>('METHOD_META');\n\nexport const IDLE_SESSION_DURATION = new InjectionToken<number>('IDLE_SESSION_DURATION');\nexport const IDLE_WARNING_DURATION = new InjectionToken<number>('IDLE_WARNING_DURATION');\nexport const IDLE_KEEPALIVE_DURATION = new InjectionToken<number>('IDLE_KEEPALIVE_DURATION');\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport const validatorsPresent = (\n control: AbstractControl<unknown, unknown>,\n validators: ValidatorFn[],\n previousValidatorCount: number,\n): boolean => {\n if (validators.length === previousValidatorCount) {\n return true;\n }\n\n let hasAllValidators = true;\n for (const validator of validators) {\n if (!control.hasValidator(validator)) {\n hasAllValidators = false;\n break;\n }\n }\n return hasAllValidators;\n};\n\nexport const requiredIf = (predicate: () => boolean, validator: ValidatorFn) => {\n return (formControl: AbstractControl): ValidationErrors | null => {\n if (!formControl.parent) {\n return null;\n }\n if (predicate()) {\n return validator(formControl);\n }\n return null;\n };\n};\n\ndeclare const __singletonValidatorBrand: unique symbol;\nexport type ResourceValidatorFn = ValidatorFn & {\n readonly [__singletonValidatorBrand]: true;\n};\nexport function createResourceValidator(validator: ValidatorFn): ResourceValidatorFn {\n return validator as ResourceValidatorFn;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterModule } from '@angular/router';\nimport { NotificationMessage } from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\n\n@Component({\n selector: 'ccc-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n imports: [MatIconModule, MatButtonModule, CommonModule, RouterModule],\n})\nexport class AlertComponent implements OnInit {\n @Input({ required: true }) error!: NotificationMessage;\n @Output() dismiss = new EventEmitter();\n\n errors = inject(NotificationService);\n ngOnInit(): void {\n if (this.error.duration === undefined) {\n this.error.duration = 30000;\n }\n\n setTimeout(() => {\n this.dismissAlert();\n }, this.error.duration);\n }\n\n dismissAlert(): void {\n if (this.error.id !== undefined) {\n this.errors.dismissGlobalNotification(this.error);\n }\n }\n}\n","<div class=\"alert\" [ngClass]=\"error.level\">\n <div class=\"message\">\n <span>{{ error.message }}</span>\n </div>\n <div class=\"alert-end\">\n @if (error.link) {\n <span [routerLink]=\"error.link\" class=\"link\">View</span>\n }\n <button (click)=\"dismissAlert()\" mat-icon-button aria-label=\"Close Alert\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, Input, Signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { RouterModule } from '@angular/router';\n\nimport { HasPermissionDirective } from '@cccteam/ccc-lib/src/auth-has-permission';\nimport { PermissionScope } from '@cccteam/ccc-lib/src/types';\nimport { UiCoreService } from '@cccteam/ccc-lib/src/ui-core-service';\n\nexport interface NavItem {\n type: 'link' | 'header' | 'expandable';\n routerLink?: string[];\n label: string;\n icon?: string;\n permission?: PermissionScope;\n children?: NavItem[];\n isExpanded?: boolean;\n attentionCount?: Signal<number>;\n}\n\nexport type NavGroups = Record<string, NavItem[]>;\n\n@Component({\n selector: 'ccc-sidenav',\n templateUrl: './sidenav.component.html',\n styleUrls: ['./sidenav.component.scss'],\n imports: [\n MatIconModule,\n RouterModule,\n CommonModule,\n MatExpansionModule,\n MatButtonModule,\n MatSidenavModule,\n HasPermissionDirective,\n ],\n})\nexport class SidenavComponent {\n ui = inject(UiCoreService);\n\n @Input() navGroups?: NavGroups;\n currentNav = computed(() => {\n return this.updateNavItems(this.ui.currentSidenavIdentifier());\n });\n\n /**\n * Updates the currentNav based on the identifier\n * @param identifier\n * @returns NavItem[]\n * @memberof SidenavComponent\n */\n updateNavItems(identifier: string): NavItem[] {\n if (!this.navGroups) {\n return [];\n }\n if (!this.navGroups[identifier]) {\n // pick the first one if the identifier is not found so we don't break the UI\n identifier = Object.keys(this.navGroups)[0];\n }\n return this.navGroups[identifier];\n }\n}\n","<div class=\"nav-container\">\n <nav>\n @for (navItem of currentNav(); track navItem) {\n <ng-container *ngTemplateOutlet=\"typeRendererTemplate; context: { navItem: navItem }\"></ng-container>\n }\n </nav>\n</div>\n<ng-template #typeRendererTemplate let-navItem=\"navItem\">\n @switch (navItem.type) {\n @case ('header') {\n <ng-container [ngTemplateOutlet]=\"headerTemplate\" [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n @case ('link') {\n <ng-container [ngTemplateOutlet]=\"linkTemplate\" [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n @case ('expandable') {\n <ng-container\n [ngTemplateOutlet]=\"expandableTemplate\"\n [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n }\n</ng-template>\n<ng-template #headerTemplate let-navItem=\"navItem\">\n <div class=\"link-header\">{{ navItem.label }}</div>\n</ng-template>\n<ng-template #linkTemplate let-navItem=\"navItem\">\n <a [routerLink]=\"navItem.routerLink\" *cccHasPermission=\"navItem.permission\">\n <div class=\"nav-item\" routerLinkActive=\"active-link\">\n <div class=\"link-button\">\n <div class=\"icon\">\n <mat-icon class=\"material-icons-outlined\" [inline]=\"true\">\n {{ navItem.icon }}\n </mat-icon>\n </div>\n <div class=\"text\">\n {{ navItem.label | titlecase }}\n </div>\n </div>\n </div>\n </a>\n</ng-template>\n<ng-template #expandableTemplate let-navItem=\"navItem\">\n <div class=\"nav-item\" aria-hidden=\"true\" (click)=\"navItem.isExpanded = !navItem.isExpanded\">\n <div class=\"link-button\">\n <div class=\"icon\">\n <mat-icon class=\"material-icons-outlined\" [inline]=\"true\">\n {{ navItem.isExpanded ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </div>\n <div class=\"text\">{{ navItem.label }}</div>\n </div>\n </div>\n @if (navItem.isExpanded) {\n <div class=\"expandable-links\">\n @for (navItemChild of navItem.children; track navItemChild) {\n <ng-container *ngTemplateOutlet=\"typeRendererTemplate; context: { navItem: navItemChild }\"> </ng-container>\n }\n </div>\n }\n</ng-template>\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable, NgZone } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport { AlertLevel, BASE_URL } from '@cccteam/ccc-lib/src/types';\nimport { UiCoreService } from '@cccteam/ccc-lib/src/ui-core-service';\nimport { CUSTOM_HTTP_REQUEST_OPTIONS } from '@cccteam/ccc-lib/src/util-request-options';\nimport { catchError, finalize, Observable, throwError } from 'rxjs';\n\n@Injectable()\nexport class ApiInterceptor implements HttpInterceptor {\n private ui = inject(UiCoreService);\n private auth = inject(AuthService);\n private router = inject(Router);\n private ngZone = inject(NgZone);\n private baseUrl = inject(BASE_URL);\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n this.ui.beginActivity(request.method + ' ' + request.url);\n\n return next.handle(request).pipe(\n catchError((error: HttpErrorResponse): Observable<HttpEvent<unknown>> => {\n if (error.status === 401) {\n this.ngZone.run(() => {\n this.auth.redirectUrl.set(this.baseUrl + this.router.url);\n this.router.navigate([this.auth.loginRoute()]);\n });\n }\n if (!request.context.get(CUSTOM_HTTP_REQUEST_OPTIONS).suppressGlobalError) {\n const message = error.error?.message ?? error.message ?? error.error;\n this.ui.publishError({\n message: message,\n level: AlertLevel.ERROR,\n link: '',\n });\n }\n\n return throwError(() => error);\n }),\n finalize(() => {\n this.ui.endActivity(request.method + ' ' + request.url);\n }),\n );\n }\n}\n","import { Injectable, signal } from '@angular/core';\nimport { CreateNotificationMessage, NotificationMessage } from '@cccteam/ccc-lib/src/types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationService {\n private notificationId = signal(0);\n private _notifications = signal<NotificationMessage[]>([]);\n notifications = this._notifications.asReadonly();\n\n /**\n * Adds a new global notification.\n * @param notification The notification message to add.\n * @returns The unique ID assigned to the notification.\n */\n addGlobalNotification(notification: CreateNotificationMessage): number {\n this.notificationId.update((id) => id + 1);\n const newNotification: NotificationMessage = {\n ...notification,\n id: this.notificationId(),\n };\n const existingNotification = this._notifications().find((n) => n.message === newNotification.message);\n if (existingNotification) {\n this.updateNotification({ ...existingNotification, ...newNotification });\n return existingNotification.id;\n }\n this._notifications.update((current) => [...current, newNotification]);\n return newNotification.id;\n }\n\n /**\n * Dismisses a global notification by its ID.\n * @param notificationId The ID of the notification to dismiss.\n */\n dismissGlobalNotificationById(notificationId: number): void {\n this._notifications.update((current) => current.filter((notification) => notification.id !== notificationId));\n }\n\n /**\n * Dismisses a specific global notification.\n * @param notification The notification to dismiss.\n */\n dismissGlobalNotification(notification: NotificationMessage): void {\n this.dismissGlobalNotificationById(notification.id);\n }\n\n /**\n * Updates an existing notification.\n * @param updatedNotification The notification with updated information.\n */\n updateNotification(updatedNotification: NotificationMessage): void {\n this._notifications.update((current) =>\n current.map((notification) =>\n notification.id === updatedNotification.id ? { ...notification, ...updatedNotification } : notification,\n ),\n );\n }\n}\n","import { Component, computed, input } from '@angular/core';\n\nimport { RecordData, ResourceMeta } from '@cccteam/ccc-lib/src/types';\n\nexport type ActionButtonContext =\n | {\n actionType: 'create' | 'edit' | 'delete';\n meta: ResourceMeta;\n resourceData: RecordData;\n shouldRender: (data: RecordData) => boolean;\n }\n | {\n actionType: 'rpc';\n // meta: RpcMethod; // Currently unused, but likely where ABAC permissions should live once implemented\n resourceData: RecordData;\n shouldRender: (data: RecordData) => boolean;\n };\n\n@Component({\n selector: 'action-access-control-wrapper',\n styles: `\n :host {\n margin-top: auto;\n margin-bottom: auto;\n }\n `,\n template: `@if (showAction()) {\n <ng-content />\n }`,\n})\nexport class ActionAccessControlWrapperComponent {\n actionContext = input<ActionButtonContext>();\n\n showAction = computed(() => {\n const context = this.actionContext();\n let isActionPermittedForUser = true;\n\n if (context === undefined) {\n return true;\n }\n\n const actionType = context.actionType;\n if (actionType === 'rpc') {\n //TODO: When ABAC permissions is completed, update this logic\n isActionPermittedForUser = true;\n }\n\n if (actionType === 'create') {\n isActionPermittedForUser = !context.meta.createDisabled;\n }\n\n if (actionType === 'edit') {\n isActionPermittedForUser = !context.meta.updateDisabled;\n }\n\n if (actionType === 'delete') {\n isActionPermittedForUser = !context.meta.deleteDisabled;\n }\n\n if (!isActionPermittedForUser) {\n console.debug('ACCESS CONTROL | ', actionType, ' action not permitted for user in context: ', context);\n return false;\n }\n\n let showAction = true;\n try {\n showAction = context.shouldRender(context.resourceData);\n } catch (e) {\n console.error('Failed to calculate value for should Render function for action: ', actionType);\n console.error(e);\n }\n return showAction;\n });\n}\n","import { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { ConfigElement, createResourceValidator } from '@cccteam/ccc-lib/src/types';\nimport { isDate } from 'date-fns';\nimport { formatInTimeZone } from 'date-fns-tz';\nimport { isNumber } from 'lodash-es';\n\nexport const maxConfigElementRecursionDepth = 240;\nexport const maxLayoutNestingDepth = 48;\n\n/** Returns a flat array of nested elements by recursively traversing\n * through the elements graph */\nexport const flattenElements: (elements: ConfigElement[], depth?: number) => ConfigElement[] = (\n elements: ConfigElement[],\n depth = 0,\n) => {\n depth++;\n if (!elements || elements.length === 0 || depth > maxConfigElementRecursionDepth) {\n return [];\n }\n return elements.reduce((acc, element) => {\n if (element.type === 'section') {\n return acc.concat(element, flattenElements(element.children, depth));\n }\n return acc.concat(element);\n }, [] as ConfigElement[]);\n};\n\nexport const civildateCoercion = (value: string): Date => {\n if (value === undefined || value === '') {\n return new Date(value);\n }\n return new Date(formatInTimeZone(new Date(value), 'UTC', 'yyyy-MM-dd HH:mm:ss'));\n};\n\nconst currentOrFutureDateValidator = (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) {\n return null; // Let \"REQUIRED\" validator handle empty values\n }\n\n if (!isDate(control.value)) {\n return { errorMsg: 'Value must be a valid date' };\n }\n\n const selectedDate = new Date(control.value);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n if (selectedDate >= today) {\n return null;\n }\n\n return { errorMsg: 'Past date not allowed' };\n};\n\nconst positiveNumberValidator = (control: AbstractControl): ValidationErrors | null => {\n if (!control.value && control.value !== 0) {\n return null; // Let \"REQUIRED\" validator handle \"empty\" values\n }\n\n if (isNumber(control.value) && control.value > 0) {\n return null;\n }\n\n return { errorMsg: 'Value must be a positive number' };\n};\n\nconst notFutureDateValidator = (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) {\n return null; // Let \"REQUIRED\" validator handle empty values\n }\n\n if (!isDate(control.value)) {\n return { errorMsg: 'Value must be a valid date' };\n }\n\n const selectedDate = new Date(control.value);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n if (selectedDate <= today) {\n return null;\n }\n\n return { errorMsg: 'Future date not allowed' };\n};\n\nconst valueInRangeInclusive = (min: number, max: number) => {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value && control.value !== 0) {\n return null; // Let \"REQUIRED\" validator handle \"empty\" values\n }\n\n if (isNumber(control.value) && control.value >= min && control.value <= max) {\n return null;\n }\n\n return { errorMsg: `Value must be in the range [${min}, ${max}]` };\n };\n};\n\n/**\n * This object stores every possible validator used across the application\n * Add all validators that are used in configs to this object\n *\n * Available validators that may be added: min, max, required, requiredTrue,\n * email, minLength, maxLength, pattern, nullValidator\n */\nexport const resourceValidators = Object.freeze({\n REQUIRED: createResourceValidator(Validators.required),\n EMAIL: createResourceValidator(Validators.email),\n CURRENT_OR_FUTURE_DATE: createResourceValidator(currentOrFutureDateValidator),\n POSITIVE_NUMBER: createResourceValidator(positiveNumberValidator),\n NOT_FUTURE_DATE: createResourceValidator(notFutureDateValidator),\n VALUE_IN_RANGE_INCLUSIVE: (min: number, max: number) => createResourceValidator(valueInRangeInclusive(min, max)),\n MAX_LENGTH: (maxLength: number) => createResourceValidator(Validators.maxLength(maxLength)),\n\n // Add any additional validators here. They may be defined in\n // a different file if they are too large. E.g.:\n // MIN_LENGTH_3: createResourceValidator(Validators.minLength(3)),\n});\n","import { Component, HostBinding, input, OnInit } from '@angular/core';\nimport { PaddingElement } from '@cccteam/ccc-lib/src/types';\n\n@Component({\n selector: 'ccc-padding-element',\n imports: [],\n templateUrl: './padding-element.component.html',\n styleUrls: ['./padding-element.component.scss'],\n})\nexport class PaddingElementComponent implements OnInit {\n paddingElement = input.required<PaddingElement>();\n\n @HostBinding('class') class = 'col-6';\n\n ngOnInit(): void {\n if (this.paddingElement().cols) {\n this.class = 'col-' + this.paddingElement()?.cols;\n }\n }\n}\n","<div class=\"padding-container\"></div>\n","import { Component, computed, effect, HostBinding, input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { ComputedDisplayFieldElement, RecordData } from '@cccteam/ccc-lib/src/types';\n\n@Component({\n selector: 'ccc-computed-field',\n imports: [MatFormFieldModule, MatButtonModule, MatInputModule],\n templateUrl: './computed-field.component.html',\n styleUrl: './computed-field.component.scss',\n})\nexport class ComputedFieldComponent {\n fieldConfig = input.required<ComputedDisplayFieldElement>();\n fieldClass = input<string>();\n formDataState = input<RecordData>();\n\n computedValue = computed(() => {\n try {\n return this.fieldConfig().calculatedValue(this.formDataState());\n } catch (e) {\n console.error('Failed to calculate value for computed field: ', this.fieldConfig().label);\n console.error(e);\n return '';\n }\n });\n\n showField = computed(() => {\n const shouldRender = this.fieldConfig().shouldRender;\n if (typeof shouldRender === 'boolean') {\n return shouldRender;\n }\n\n try {\n return shouldRender(this.formDataState());\n } catch (e) {\n console.error('Failed to calculate value for should Render function for field: ', this.fieldConfig().label);\n console.error(e);\n return true;\n }\n });\n\n @HostBinding('class') class = '';\n\n constructor() {\n effect(() => {\n this.class = this.showField() ? 'col-' + this.fieldConfig()?.cols : 'hidden-field';\n });\n }\n}\n","@if (showField()) {\n <div class=\"readonly-field\">\n <mat-form-field class=\"field {{ fieldClass() }}\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <input\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"true\"\n type=\"text\"\n [value]=\"computedValue()\" />\n </mat-form-field>\n </div>\n}\n","import { Component, input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { defaultEmptyFieldValue } from '@cccteam/ccc-lib/src/types';\n\n@Component({\n selector: 'ccc-empty-readonly-field',\n imports: [MatFormFieldModule, MatButtonModule, MatInputModule],\n templateUrl: './empty-readonly-field.component.html',\n styleUrl: './empty-readonly-field.component.scss',\n})\nexport class EmptyReadonlyFieldComponent {\n label = input.required<string>();\n\n displayValue = defaultEmptyFieldValue;\n}\n","<div class=\"readonly-field\">\n <mat-form-field class=\"field\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ label() }}</mat-label>\n <input\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"true\"\n type=\"text\"\n [value]=\"displayValue\"\n id=\"{{ label() }}-readonly-input-text\" />\n </mat-form-field>\n</div>\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { computed, inject, Injectable, Injector, ResourceRef, Signal, signal, untracked } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport {\n AlertLevel,\n API_URL,\n ColumnConfig,\n CreateNotificationMessage,\n FieldName,\n FieldSort,\n METHOD_META,\n RecordData,\n Resource,\n ResourceMeta,\n RPCConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\nimport { Observable, of, tap } from 'rxjs';\nimport { Operation } from './resources-helpers';\n\n@Injectable()\nexport class ResourceStore {\n resourceMeta = signal({} as ResourceMeta);\n resourceName = signal<Resource>('' as Resource);\n filter = signal<string>('');\n disableCacheForFilterPii = signal(false);\n searchTokens = signal<string>('');\n sorts = signal<FieldSort[]>([]);\n listColumns = signal<ColumnConfig[]>([]);\n requireSearchToDisplayResults = signal(false);\n uuid = signal<string>('');\n error = signal<string>('');\n\n notifications = inject(NotificationService);\n http = inject(HttpClient);\n router = inject(Router);\n injector = inject(Injector);\n apiUrl = inject(API_URL);\n methodMeta = inject(METHOD_META);\n\n private resourceListRef = signal<ResourceRef<RecordData[]> | undefined>(undefined);\n listData = computed(() => {\n const ref = this.resourceListRef();\n if (ref && ref.status() === 'resolved') {\n return ref.value();\n }\n return [];\n });\n listStatus = computed(() => {\n return this.resourceListRef()?.status();\n });\n\n private resourceViewRef = signal<ResourceRef<RecordData> | undefined>(undefined);\n viewData = computed(() => {\n const ref = this.resourceViewRef();\n if (ref && ref.status() === 'resolved') {\n return ref.value();\n }\n return {} as RecordData;\n });\n viewStatus = computed(() => {\n return this.resourceViewRef()?.status();\n });\n\n overrideRoute = signal<string>('');\n resourceRoute = computed(() => this.resourceMeta()?.route);\n route = computed(() => {\n if (this.overrideRoute()) {\n return this.overrideRoute();\n }\n const route = this.resourceRoute();\n if (route) {\n return route;\n }\n return '';\n });\n\n reloadViewData(): void {\n this.resourceViewRef()?.reload();\n }\n\n reloadListData(): void {\n this.resourceListRef()?.reload();\n }\n\n buildStoreListData(): void {\n const route = this.route();\n const name = this.resourceName();\n if (!route || name === '') {\n return;\n }\n const columnIds = this.listColumns().flatMap((col) => {\n return [col.id];\n });\n const resourceMeta = this.resourceMeta();\n if (resourceMeta && resourceMeta.fields.some((field) => field.fieldName === 'id')) {\n columnIds.push('id' as FieldName);\n }\n const uniqueColumns = signal([...new Set([...columnIds])]);\n\n const ref = this.resourceList(\n this.route,\n this.filter,\n uniqueColumns,\n this.disableCacheForFilterPii,\n this.searchTokens,\n this.sorts,\n );\n this.resourceListRef.set(ref);\n this.reloadListData();\n }\n\n buildStoreViewData(): void {\n const route = this.route();\n const uuid = this.uuid();\n if (!route || !uuid || uuid === 'undefined') {\n return;\n }\n\n const ref = this.resourceView(this.route, this.uuid);\n this.resourceViewRef.set(ref);\n this.reloadListData();\n }\n\n routes = {\n resources: (rootUrl: string, resources: string): string => `${rootUrl}/${resources}`,\n resource: (rootUrl: string, resources: string, uuid: string): string => `${rootUrl}/${resources}/${uuid}`,\n method: (rootUrl: string, method: string): string => `${rootUrl}/${method}`,\n };\n\n makePatches(operations: Operation[], route: string, resource: Resource): Observable<Record<string, unknown>> {\n return this.patchMultiple(String(route), operations).pipe(\n tap(() => {\n this.notifications.addGlobalNotification({\n message: `${resource} updated successfully`,\n level: AlertLevel.SUCCESS,\n duration: 5000,\n link: '',\n } satisfies CreateNotificationMessage);\n }),\n );\n }\n\n createPatch(operation: Operation, route: string, resource: Resource): Observable<Record<string, unknown>> {\n return this.patchMultiple(String(route), [operation]).pipe(\n tap(() => {\n this.notifications.addGlobalNotification({\n message: `${resource} created successfully`,\n level: AlertLevel.SUCCESS,\n duration: 5000,\n link: '',\n } satisfies CreateNotificationMessage);\n }),\n );\n }\n\n private patchMultiple(resourceRoute: string, data: Operation[]): Observable<Record<string, unknown>> {\n return this.http.patch<Record<string, unknown>>(this.routes.resources(this.apiUrl, resourceRoute), data);\n }\n\n resourceView(route: Signal<string>, uuid: Signal<string>): ResourceRef<RecordData> {\n return untracked(\n () =>\n rxResource({\n injector: this.injector,\n params: () => ({\n route: route,\n uuid: uuid,\n }),\n stream: ({ params }) => {\n if (!params.route() || !params.uuid() || params.uuid() === 'undefined') return of({} as RecordData);\n return this.http.get<RecordData>(\n this.routes.resource(this.apiUrl, String(params.route()), params.uuid() || ''),\n );\n },\n }) as ResourceRef<RecordData>,\n );\n }\n\n resourceList(\n route: Signal<string>,\n filter: Signal<string> = signal(''),\n columns: Signal<string[]> = signal([]),\n disableCacheForFilterPii: Signal<boolean> = signal(false),\n searchTokens: Signal<string> = signal(''),\n sorts: Signal<FieldSort[]> = signal([]),\n defaultEmpty = false,\n ): ResourceRef<RecordData[]> {\n return untracked(() => {\n return rxResource({\n defaultValue: [] as RecordData[],\n injector: this.injector,\n params: () => ({\n route: route(),\n filter: filter(),\n columns: columns(),\n searchTokens: searchTokens(),\n sorts: sorts(),\n }),\n stream: ({ params }) => {\n if (!params.route) return of([] as RecordData[]);\n if (defaultEmpty && (!params.searchTokens || params.searchTokens.trim() === '')) {\n return of([] as RecordData[]);\n }\n return this.list<RecordData>(\n String(params.route),\n params.filter,\n disableCacheForFilterPii(),\n params.columns,\n params.searchTokens,\n params.sorts,\n );\n },\n }) as ResourceRef<RecordData[]>;\n });\n }\n\n private list<T>(\n resourceRoute: string,\n filter?: string,\n disableCacheForFilterPii?: boolean,\n columns?: string[],\n searchTokens?: string,\n sort?: FieldSort[],\n ): Observable<T[]> {\n const paramsObj: Record<string, string> = {};\n if (filter && filter.trim() !== '') paramsObj['filter'] = filter;\n if (columns && columns.length > 0) paramsObj['columns'] = columns.join(',');\n if (searchTokens && searchTokens.trim() !== '') paramsObj['SearchTokens'] = searchTokens;\n if (sort && sort.length > 0) {\n paramsObj['sort'] = sort.map((s) => `${s.field}:${s.direction}`).join(',');\n }\n const params = new HttpParams({ fromObject: paramsObj });\n if (disableCacheForFilterPii) {\n const paramsObjWithoutFilter = { ...paramsObj };\n delete paramsObjWithoutFilter['filter'];\n return this.http.post<T[]>(\n this.routes.resources(this.apiUrl, resourceRoute),\n { filter: filter },\n paramsObjWithoutFilter,\n );\n }\n return this.http.get<T[]>(this.routes.resources(this.apiUrl, resourceRoute), { params });\n }\n\n rpcCall<T>(rpcConfig: RPCConfig, body: T): Observable<T> {\n const methodData = this.methodMeta(rpcConfig.method);\n if (!methodData) {\n console.error('Method not found in methodMap:', rpcConfig.method);\n return of({} as T);\n }\n\n return this.http.post<T>(this.routes.method(this.apiUrl, methodData.route), body).pipe(\n tap(() => {\n this.notifications.addGlobalNotification({\n message: rpcConfig.successMessage ? rpcConfig.successMessage : `${rpcConfig.method} called successfully`,\n level: AlertLevel.SUCCESS,\n duration: 5000,\n link: '',\n } satisfies CreateNotificationMessage);\n if (rpcConfig.afterMethodRedirect) {\n if (typeof rpcConfig.afterMethodRedirect === 'string') {\n this.router.navigate([rpcConfig.afterMethodRedirect]);\n } else {\n this.router.navigate(rpcConfig.afterMethodRedirect);\n }\n }\n }),\n );\n }\n}\n","import { computed, Injectable, signal } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormStateService {\n dirtyForms = signal(0);\n\n incrementDirtyForms(): void {\n this.dirtyForms.set(this.dirtyForms() + 1);\n }\n\n decrementDirtyForms(): void {\n this.dirtyForms.set(this.dirtyForms() - 1);\n }\n\n resetDirtyForms(): void {\n this.dirtyForms.set(0);\n }\n\n isDirty = computed(() => {\n return this.dirtyForms() > 0;\n });\n}\n","import { Component } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogActions, MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\n@Component({\n selector: 'ccc-leave-page-confirmation-modal',\n imports: [MatDialogModule, MatFormFieldModule, MatDialogActions, MatButtonModule],\n templateUrl: './leave-page-confirmation-modal.component.html',\n styleUrls: ['./leave-page-confirmation-modal.component.scss'],\n})\nexport class LeavePageConfirmationModalComponent {}\n","<div mat-dialog-title>You have unsaved changes, are you sure you want to leave?</div>\n<mat-dialog-content>\n <p>Any unsaved changes will be lost.</p>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"false\">Cancel</button>\n <button mat-raised-button color=\"accent\" [mat-dialog-close]=\"true\">Confirm</button>\n</mat-dialog-actions>\n","import { inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { CanDeactivateFn, UrlTree } from '@angular/router';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport { firstValueFrom, Observable, tap } from 'rxjs';\nimport { FormStateService } from './form-state.service';\nimport { LeavePageConfirmationModalComponent } from './leave-page-confirmation-modal/leave-page-confirmation-modal.component';\n\nexport type CanDeactivateType = Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;\n\nexport interface CanComponentDeactivate {\n canDeactivate: () => CanDeactivateType;\n}\n\nexport const canDeactivateGuard: CanDeactivateFn<CanComponentDeactivate> = async (_, __, ___, nextState) => {\n const auth = inject(AuthService);\n const dialog = inject(MatDialog);\n const formStateService = inject(FormStateService);\n\n if (nextState?.url.includes(auth.loginRoute())) {\n return true;\n }\n\n if (!formStateService.isDirty()) {\n return true;\n }\n\n const existingDialog = dialog.openDialogs.find(\n (d) => d.componentInstance instanceof LeavePageConfirmationModalComponent,\n );\n\n const dialogRef = existingDialog ?? dialog.open(LeavePageConfirmationModalComponent, { delayFocusTrap: false });\n\n const result = dialogRef.afterClosed().pipe(\n tap((value) => {\n if (value === true) {\n formStateService.resetDirtyForms();\n }\n }),\n );\n\n return firstValueFrom(result);\n};\n","import { ModelSignal } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { Route } from '@angular/router';\nimport {\n ConfigElement,\n DataType,\n FieldElement,\n MenuItem,\n MethodMeta,\n RecordData,\n Resource,\n ResourceMeta,\n RootConfig,\n RouteResourceData,\n RPCRecordData,\n ViewConfig\n} from '@cccteam/ccc-lib/src/types';\nimport { format, isValid } from 'date-fns';\nimport { canDeactivateGuard } from './can-deactivate.guard';\nimport { civildateCoercion, flattenElements } from './gui-constants';\n\nexport const generatedNavItems = [] as MenuItem[];\nexport const generatedNavGroups = [] as string[];\n\nexport interface Link {\n id: string;\n resource: Resource;\n text: string;\n}\n\nexport type ResourceMap = Record<Resource, ResourceMeta>;\n\nexport type PristineData = Record<string, DataType | null>;\n\nexport const createFormGroup = (\n meta: ResourceMeta,\n resourceData: RecordData,\n config: ViewConfig,\n formDataState?: ModelSignal<RecordData>,\n): {\n formGroup: FormGroup;\n pristineFormValues: PristineData;\n} => {\n const fg = new FormGroup({});\n const pristineValues: Record<string, DataType | null> = {};\n const allElements = flattenElements(config.elements);\n\n for (const field of meta.fields || []) {\n const isFieldNameRegistered = fg.get(field.fieldName) !== null;\n if (isFieldNameRegistered) {\n continue;\n }\n\n const findConfig = allElements.find((element) => element.type === 'field' && element.name === field.fieldName);\n const fieldConfig = findConfig as FieldElement | undefined;\n if (!fieldConfig) {\n continue;\n }\n\n let value: DataType | null = null;\n const stringValue = resourceData?.[field.fieldName] ? String(resourceData[field.fieldName]) : '';\n\n if (field.displayType === 'civildate' && stringValue) {\n value = civildateCoercion(stringValue);\n } else if (resourceData[field.fieldName] !== undefined) {\n value = resourceData[field.fieldName];\n }\n\n const control = new FormControl(value);\n\n if (fieldConfig.validators.length > 0) {\n control.setValidators(fieldConfig.validators);\n }\n\n fg.addControl(field.fieldName, control);\n pristineValues[field.fieldName] = value;\n }\n // todo: swap this with a manual subscription where the form data is subscribed to and\n // is dstroyed once the form is destroyed, similar to gui/src/app/components/Resource/resource-view/resource-view.component.ts\n // constructor effect\n console.debug(formDataState);\n // formDataState && formDataState.set(pristineValues);\n\n return {\n formGroup: fg,\n pristineFormValues: pristineValues,\n };\n};\n\nexport const resourceRoutes = (config: RootConfig, resourceMeta: (resource: Resource) => ResourceMeta): Route => {\n const meta = resourceMeta(config.parentConfig.primaryResource as Resource);\n if (!meta) {\n return {} as Route;\n }\n\n if (config.nav.group) {\n if (config.routeData.route) {\n addToNavItems(config.nav, config.routeData.route);\n } else {\n addToNavItems(config.nav, meta.route);\n }\n }\n\n if (config.routeData.route) {\n const baseRoute: Route = {\n path: config.routeData.route,\n data: { config: config } satisfies RouteResourceData,\n children: [\n {\n path: '',\n loadComponent: () => import('./resource-list-create/resource-list-create.component').then((mod) => mod.ResourceListCreateComponent),\n canDeactivate: [canDeactivateGuard],\n },\n ],\n };\n if (config.routeData.hasViewRoute !== false) {\n baseRoute.children?.push({\n path: ':uuid',\n loadComponent: () => import('./compound-resource/compound-resource.component').then((mod) => mod.CompoundResourceComponent),\n canDeactivate: [canDeactivateGuard],\n });\n return baseRoute;\n }\n }\n\n return {\n path: meta.route,\n data: { config: config } as RouteResourceData,\n children: [\n {\n path: ':uuid',\n loadComponent: () => import('./compound-resource/compound-resource.component').then((mod) => mod.CompoundResourceComponent),\n canDeactivate: [canDeactivateGuard],\n },\n {\n path: '',\n loadComponent: () => import('./resource-list-create/resource-list-create.component').then((mod) => mod.ResourceListCreateComponent),\n canDeactivate: [canDeactivateGuard],\n },\n ],\n } satisfies Route;\n};\n\nfunction addToNavItems(\n nav: {\n navItem: MenuItem;\n group?: string;\n },\n route: string,\n): void {\n nav.navItem.route = [route];\n\n if (!nav.group) {\n generatedNavItems.push(nav.navItem);\n return;\n }\n\n if (!generatedNavGroups.includes(nav.group)) {\n generatedNavGroups.push(nav.group);\n }\n\n let groupItem = generatedNavItems.find((item) => item.label === nav.group);\n\n if (!groupItem) {\n groupItem = { label: nav.group, children: [] };\n generatedNavItems.push(groupItem);\n }\n\n groupItem.children = groupItem.children || [];\n groupItem.children.push(nav.navItem);\n\n generatedNavItems.sort((a, b) => (a.label > b.label ? -1 : 1));\n}\n\n/**\n * Recursive function to extract nested field names from a config.\n * @param elements - The elements to extract field names from.\n * @returns - An array of field names.\n */\nexport function extractFieldNames(elements: ConfigElement[]): string[] {\n const fields: string[] = [];\n for (const element of elements) {\n if (element.type === 'section') {\n fields.push(...extractFieldNames(element.children));\n } else if (element.type === 'field') {\n fields.push(element.name as string);\n }\n }\n return fields;\n}\n\nexport type PatchOperation = 'add' | 'patch' | 'remove';\n\nexport interface Operation {\n op: PatchOperation;\n value?: Record<string, unknown>;\n path: string;\n}\n\nexport interface CreateOperation extends Operation {\n op: 'add';\n}\n\nexport interface UpdateOperation extends Operation {\n op: 'patch';\n}\n\nexport interface DeleteOperation extends Operation {\n op: 'remove';\n}\n\n/**\n * Checks if a string is a valid UUID (versions 1-5) according to RFC 4122.\n *\n * @param str - The string to validate.\n * @returns `true` if the string is a valid UUID, otherwise `false`.\n */\nexport function isUUID(str: string): boolean {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return uuidRegex.test(str);\n}\n\n/**\n * Coerces metadata types in a record according to the metadata.\n *\n * @param record - The record to coerce.\n * @param meta - The metadata (resource or method).\n * @returns The coerced record.\n */\nexport function metadataTypeCoercion(record: RecordData, meta: ResourceMeta): RecordData;\nexport function metadataTypeCoercion(record: RPCRecordData, meta: MethodMeta): RPCRecordData;\nexport function metadataTypeCoercion(\n record: RecordData | RPCRecordData,\n meta: ResourceMeta | MethodMeta,\n): RecordData | RPCRecordData {\n if (!meta?.fields) return record;\n\n const displayTypeByField = new Map(meta.fields.map((f) => [f.fieldName, f.displayType]));\n\n for (const [key, value] of Object.entries(record)) {\n const displayType = displayTypeByField.get(key);\n if (displayType === 'civildate' && value && isValid(value)) {\n const date = value as Date;\n record[key] = format(date, 'yyyy-MM-dd');\n }\n }\n\n return record;\n}\n","import { computed, Directive, inject, Injector, input, ResourceRef, signal } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n DataType,\n FieldElement,\n FieldMeta,\n Meta,\n RecordData,\n RESOURCE_META,\n RPCFieldMeta,\n} from '@cccteam/ccc-lib/src/types';\nimport { ResourceStore } from '../resource-store.service';\nimport { isUUID } from '../resources-helpers';\n/*\n * Base class for all resource input components.\n */\n@Directive()\nexport abstract class BaseInputComponent {\n resourceMeta = inject(RESOURCE_META);\n injector = inject(Injector);\n store = inject(ResourceStore);\n\n meta = input.required<Meta>();\n pristineValue = input<DataType | null>();\n editMode = input.required<'edit' | 'view'>();\n showField = input<boolean>();\n fieldConfig = input.required<FieldElement>();\n fieldClass = input<string>();\n fieldMeta = input.required<FieldMeta | RPCFieldMeta>();\n form = input.required<FormGroup>();\n relatedData = input<RecordData>();\n\n /**\n * Resets the field back to its pristine value.\n */\n reset(): void {\n const control = this.form().get(this.fieldConfig().name as string);\n if (control) {\n control.setValue(this.pristineValue());\n control.markAsPristine();\n }\n }\n\n private affixResources = new Map<string, ResourceRef<RecordData>>();\n\n prefixString = computed(() => {\n const relatedData = this.relatedData();\n let builtPrefix = '';\n this.fieldConfig().prefixes.forEach((prefix) => {\n if (typeof prefix === 'string') {\n builtPrefix += prefix;\n } else if ('resource' in prefix) {\n if (!relatedData || !relatedData[prefix.id]) {\n return;\n }\n const id = relatedData[prefix.id];\n if (typeof id !== 'string' || !id || !isUUID(id)) {\n return;\n }\n\n const cacheKey = `${prefix.resource}-${id}`;\n let resourceRef = this.affixResources.get(cacheKey);\n\n if (!resourceRef) {\n const prefixResourceMeta = this.resourceMeta(prefix.resource);\n resourceRef = this.store.resourceView(signal(prefixResourceMeta.route), signal(id));\n this.affixResources.set(cacheKey, resourceRef!);\n }\n\n const resource = resourceRef.value();\n if (resource && prefix.field in resource) {\n builtPrefix += resource[String(prefix.field)];\n }\n } else if ('field' in prefix) {\n if (relatedData) {\n const fieldValue = relatedData[prefix.field];\n builtPrefix += fieldValue ? fieldValue : '';\n }\n }\n });\n return builtPrefix;\n });\n\n suffixString = computed(() => {\n const relatedData = this.relatedData();\n let builtSuffix = '';\n this.fieldConfig().suffixes.forEach((suffix) => {\n if (typeof suffix === 'string') {\n builtSuffix += suffix;\n } else if ('resource' in suffix) {\n if (!relatedData || !relatedData[suffix.id]) {\n return;\n }\n const id = relatedData[suffix.id];\n if (typeof id !== 'string' || !id || !isUUID(id)) {\n return;\n }\n\n const cacheKey = `${suffix.resource}-${id}`;\n let resourceRef = this.affixResources.get(cacheKey);\n\n if (!resourceRef) {\n const suffixResourceMeta = this.resourceMeta(suffix.resource);\n resourceRef = this.store.resourceView(signal(suffixResourceMeta.route), signal(id));\n this.affixResources.set(cacheKey, resourceRef!);\n }\n\n const resource = resourceRef.value();\n if (resource && suffix.field in resource) {\n builtSuffix += resource[suffix.field];\n }\n } else if ('field' in suffix) {\n if (relatedData) {\n const fieldValue = relatedData[suffix.field];\n builtSuffix += fieldValue ? fieldValue : '';\n }\n }\n });\n return builtSuffix;\n });\n\n floatLabel = computed(() => {\n if (this.fieldConfig().prefixes.length > 0 || this.fieldConfig().suffixes.length > 0) {\n return 'always';\n } else {\n return 'auto';\n }\n });\n}\n","import { Component } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-boolean-field',\n imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule, ReactiveFormsModule, MatCheckboxModule],\n templateUrl: './boolean-field.component.html',\n styleUrl: './boolean-field.component.scss',\n})\nexport class BooleanFieldComponent extends BaseInputComponent {}\n","@if (showField()) {\n <ng-container [formGroup]=\"form()\">\n <div [class.readonly-field]=\"editMode() === 'view'\">\n <mat-checkbox\n class=\"field checkbox {{ fieldClass() }}\"\n [formControlName]=\"fieldConfig().name\"\n (keydown.enter)=\"$event.preventDefault()\">\n {{ fieldConfig().label }}\n </mat-checkbox>\n </div>\n </ng-container>\n} @else {\n <ng-container [formGroup]=\"form()\">\n <input type=\"hidden\" [formControlName]=\"fieldConfig().name\" />\n </ng-container>\n}\n","import { Component } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-date-field',\n imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule, ReactiveFormsModule],\n templateUrl: './date-field.component.html',\n styleUrl: './date-field.component.scss',\n})\nexport class DateFieldComponent extends BaseInputComponent {}\n","@if (showField()) {\n <div [class.readonly-field]=\"editMode() === 'view'\">\n <mat-form-field class=\"field {{ fieldClass() }}\" [formGroup]=\"form()\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <input\n matInput\n [readonly]=\"editMode() === 'view'\"\n [matDatepicker]=\"picker\"\n type=\"text\"\n (keydown.enter)=\"$event.preventDefault()\"\n [formControlName]=\"fieldConfig().name\" />\n @if (editMode() === 'edit') {\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n }\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n} @else {\n <ng-container [formGroup]=\"form()\">\n <input type=\"hidden\" [formControlName]=\"fieldConfig().name\" />\n </ng-container>\n}\n","export const concatFunctions = {\n 'space-concat': spaceConcat,\n 'hyphen-concat': hyphenConcat,\n 'space-hyphen-concat': spaceHyphenConcat,\n 'hyphen-space-concat': hyphenSpaceConcat,\n};\n\n/**\n * Concatenates the strings corresponding to the given keys in the resource,\n * using a space separator.\n * @param resource A record mapping keys to string values.\n * @param args Keys of the resource to concatenate.\n * @returns Concatenated string.\n * @example\n * const resource = { foo: 'foo', bar: 'bar', baz: 'baz' };\n * spaceConcat(resource, 'foo', 'bar', 'baz'); // returns 'foo bar baz'\n */\nexport function spaceConcat(resource: Record<string, string>, ...args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return resource[args[0] ?? ''] ?? '';\n return args.map((arg) => resource[arg] ?? '').join(' ');\n}\n\n/**\n * Concatenates the strings corresponding to the given keys in the resource,\n * using a hyphen separator.\n * @param resource A record mapping keys to string values.\n * @param args Keys of the resource to concatenate.\n * @returns Concatenated string.\n * @example\n * const resource = { foo: 'foo', bar: 'bar', baz: 'baz' };\n * hyphenConcat(resource, 'foo', 'bar', 'baz'); // returns 'foo - bar - baz'\n */\nexport function hyphenConcat(resource: Record<string, string>, ...args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return resource[args[0] ?? ''] ?? '';\n return args.map((arg) => resource[arg] ?? '').join(' - ');\n}\n\n/**\n * Concatenates the given strings so that all but the last are joined with a space,\n * and the last string is appended with a \" - \" separator.\n * @param resource A mapping of keys to string values.\n * @param args Keys of strings to concatenate.\n * @returns Concatenated string.\n * @example spaceHyphenConcat(resource, 'foo', 'bar', 'baz') => 'foo bar - baz'\n */\nexport function spaceHyphenConcat(resource: Record<string, string>, ...args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return resource[args[0] || ''] || '';\n\n const initialPart = args\n .slice(0, -1)\n .map((arg) => resource[arg] || '')\n .join(' ');\n\n const lastPart = resource[args[args.length - 1] || ''] || '';\n\n return `${initialPart} - ${lastPart}`;\n}\n\n/**\n * Concatenates the given strings so that all but the first are joined with a space,\n * and the first string is appended with a \" - \" separator.\n * @param resource A mapping of keys to string values.\n * @param args Keys of strings to concatenate.\n * @returns Concatenated string.\n * @example spaceHyphenConcat(resource, 'foo', 'bar', 'baz') => 'foo - bar baz'\n */\nexport function hyphenSpaceConcat(resource: Record<string, string>, ...args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return resource[args[0] || ''] || '';\n\n const initialPart = args[0] !== undefined ? resource[args[0]] || '' : '';\n\n const lastPart = args\n .slice(1, args.length)\n .map((arg) => resource[arg] || '')\n .join(' ');\n\n return `${initialPart} - ${lastPart}`;\n}\n\n/**\n * Concatenates the strings using a space separator.\n * @param args Strings to concatenate.\n * @returns Concatenated string.\n * @example\n * spaceConcatWithoutResource(['foo', 'bar', 'baz']); // returns 'foo bar baz'\n */\nexport function spaceConcatWithoutResource(args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return args[0] ?? '';\n return args.map((arg) => arg ?? '').join(' ');\n}\n\n/**\n * Concatenates the strings using a hyphen separator.\n * @param args Strings to concatenate.\n * @returns Concatenated string.\n * @example\n * hyphenConcatWithoutResource(['foo', 'bar', 'baz']); // returns 'foo - bar - baz'\n */\nexport function hyphenConcatWithoutResource(args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return args[0] || '';\n return args.join(' - ');\n}\n\n/**\n * Concatenates the given strings so that all but the last are joined with a space,\n * and the last string is appended with a \" - \" separator.\n * @param args Strings to concatenate.\n * @returns Concatenated string.\n * @example spaceHyphenConcatWithoutResource(['foo', 'bar', 'baz']) => 'foo bar - baz'\n */\nexport function spaceHyphenConcatWithoutResource(args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return args[0] || '';\n\n const initialPart = args\n .slice(0, -1)\n .map((arg) => arg || '')\n .join(' ');\n\n const lastPart = args[args.length - 1] || '';\n\n return `${initialPart} - ${lastPart}`;\n}\n\n/**\n * Concatenates the given strings so that all but the first are joined with a space,\n * and the first string is appended with a \" - \" separator.\n * @param args Strings to concatenate.\n * @returns Concatenated string.\n * @example hyphenSpaceConcatWithoutResource(['foo', 'bar', 'baz']) => 'foo - bar baz'\n */\nexport function hyphenSpaceConcatWithoutResource(args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return args[0] || '';\n\n const initialPart = args[0] || '';\n\n const lastPart = args\n .slice(1, args.length)\n .map((arg) => arg || '')\n .join(' ');\n\n return `${initialPart} - ${lastPart}`;\n}\n\n/**\n * Concatenates the given strings without any space,\n * @param args Strings to concatenate.\n * @returns Concatenated string.\n * @example noSpaceConcatWithoutResource(['foo', 'bar', 'baz']) => 'foobarbaz'\n */\nexport function noSpaceConcatWithoutResource(args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return args[0] || '';\n return args.join('');\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, signal, untracked } from '@angular/core';\nimport { ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { defaultEmptyFieldValue, EnumeratedConfig, FieldElement, Resource, RootConfig } from '@cccteam/ccc-lib/src/types';\nimport { concatFunctions, hyphenConcat } from '../../../../ccc-resource/concat-fns';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-enumerated-field',\n imports: [\n MatFormFieldModule,\n MatInputModule,\n MatDatepickerModule,\n ReactiveFormsModule,\n MatOptionModule,\n MatSelectModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n RouterModule,\n MatAutocompleteModule,\n ],\n templateUrl: './enumerated-field.component.html',\n styleUrl: './enumerated-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EnumeratedFieldComponent extends BaseInputComponent {\n activatedRoute = inject(ActivatedRoute);\n router = inject(Router);\n reloadSignal = signal(false);\n\n query = signal('');\n\n resource = computed(() => {\n if (this.fieldConfig()?.enumeratedConfig?.overrideResource) {\n return this.fieldConfig()?.enumeratedConfig?.overrideResource;\n }\n return this.fieldMeta()?.enumeratedResource as Resource;\n });\n\n tooltipMessage = computed(() => {\n const label = this.fieldConfig().label;\n return 'View ' + label + ' details';\n });\n\n route = computed(() => {\n const resource = this.fieldMeta()?.enumeratedResource;\n return this.resourceMeta(resource as Resource)?.route;\n });\n\n viewDetails = computed(() => {\n return this.editMode() === 'view' && this.fieldConfig().enumeratedConfig.viewDetails === true;\n });\n\n sorts = computed(() => {\n return this.fieldConfig().enumeratedConfig.sorts;\n });\n\n singleEnumResourceRef = computed(() => {\n this.editMode();\n if (this.showField() === false) {\n return undefined;\n }\n\n const route = this.route();\n const resource = this.resource();\n\n this.reloadSignal();\n const fieldValue = this.form().get(this.fieldConfig().name)?.value;\n\n if (fieldValue && route && resource) {\n return untracked(() => this.store.resourceView(this.route, signal(fieldValue)));\n }\n return undefined;\n });\n\n rootResourceRef = computed(() => {\n const rootConfig = this.activatedRoute.snapshot.data['config'] as RootConfig;\n const uuid = (this.activatedRoute.snapshot.params['uuid'] || '') as string;\n const rootMeta = this.resourceMeta(rootConfig.parentConfig.primaryResource);\n return this.store.resourceView(signal(rootMeta.route), signal(uuid));\n });\n\n enumResourceRef = computed(() => {\n if (this.showField() === false) return undefined;\n const enumeratedMeta = this.resourceMeta(this.resource() as Resource);\n const config = this.fieldConfig().enumeratedConfig;\n const filter =\n config.filterType === 'rootResource'\n ? config?.filter?.(this.rootResourceRef()?.value() || {})\n : config?.filter?.(this.relatedData() || {});\n return this.store.resourceList(\n signal(enumeratedMeta.route),\n signal(filter),\n signal([]),\n signal(config.disableCacheForFilterPii),\n this.query,\n this.sorts,\n );\n });\n\n singleEnumDisplayText = computed(() => {\n const showField = this.showField();\n if (showField === false) {\n return undefined;\n }\n\n const form = this.form();\n const fieldConfig = this.fieldConfig();\n const singleEnumResourceRef = this.singleEnumResourceRef();\n\n if (form === undefined || fieldConfig === undefined || singleEnumResourceRef === undefined) {\n return defaultEmptyFieldValue;\n }\n\n const record = singleEnumResourceRef.value();\n if (record === undefined) {\n return defaultEmptyFieldValue;\n }\n\n const enumeratedValues = this.toEnumerated(record as Record<string, string>, fieldConfig);\n return enumeratedValues.display;\n });\n\n hasRequiredValidator = computed(() => {\n const form = this.form();\n const fieldConfig = this.fieldConfig();\n\n if (form === undefined || fieldConfig === undefined) {\n return false;\n }\n\n const control = form.get(fieldConfig.name);\n if (!control) {\n return false;\n }\n\n return control.hasValidator(Validators.required);\n });\n\n singleEnumValue = computed(() => {\n if (this.showField() === false) return undefined;\n const currentValue = this.form().get(this.fieldConfig().name)?.value;\n const record = this.singleEnumResourceRef()?.value();\n if (!currentValue) return [];\n if (!record) return [];\n return [this.toEnumerated(record as Record<string, string>, this.fieldConfig())];\n });\n\n listEnumValues = computed(() => {\n if (this.showField() === false) return [];\n const currentValue = this.singleEnumValue();\n const records = this.enumResourceRef()?.value();\n if (!records || !records.length) return currentValue || [];\n return records.map((record) => this.toEnumerated(record as Record<string, string>, this.fieldConfig()));\n });\n\n availableEnumOptions = computed(() => {\n if (this.editMode() === 'edit') {\n return this.listEnumValues();\n }\n return this.singleEnumValue();\n });\n\n toEnumerated(resource: Record<string, string>, element: FieldElement): { id: string; display: string } {\n const enumeratedConfig = element.enumeratedConfig as EnumeratedConfig;\n const displayFields =\n this.editMode() === 'edit' && enumeratedConfig.listDisplay.length > 0\n ? enumeratedConfig.listDisplay\n : enumeratedConfig.viewDisplay;\n const concat =\n this.editMode() === 'edit'\n ? enumeratedConfig.listConcatFn || enumeratedConfig.viewConcatFn\n : enumeratedConfig.viewConcatFn;\n\n const concatFunction = concatFunctions[concat] || hyphenConcat;\n\n return {\n id: resource['id'] ?? '',\n display: concatFunction(resource, ...displayFields),\n };\n }\n\n getDisplayText = (value: string | Record<string, string> | null): string => {\n if (!value) return '';\n\n if (typeof value === 'string') {\n const option = this.availableEnumOptions()?.find((o) => o.id === value);\n return option ? option['display'] || this.formatDisplay(option) : '';\n }\n\n return value['display'] || this.formatDisplay(value);\n };\n\n private formatDisplay(resource: Record<string, string>): string {\n return this.toEnumerated(resource, this.fieldConfig()).display;\n }\n\n search(value: string): void {\n this.query.set(value);\n }\n\n select(value: string): void {\n this.form().patchValue({ [this.fieldConfig().name]: value });\n this.form().markAsDirty();\n this.form().markAsTouched();\n this.reloadSignal.update((prev) => !prev);\n }\n}\n","<ng-container [formGroup]=\"form()\">\n @if (showField()) {\n @let options = availableEnumOptions();\n @if (editMode() === 'edit') {\n <div class=\"enumerated-field-container\">\n <mat-form-field class=\"field {{ fieldClass() }}\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n @if (fieldConfig().enumeratedConfig.searchable) {\n <input\n #input\n type=\"text\"\n placeholder=\"Search\"\n matInput\n [matAutocomplete]=\"auto\"\n [formControlName]=\"fieldConfig().name\"\n (input)=\"search(input.value)\" />\n <mat-autocomplete\n (optionSelected)=\"select($event.option.value)\"\n #auto=\"matAutocomplete\"\n [displayWith]=\"getDisplayText\">\n @for (option of options; track option.id) {\n <mat-option [value]=\"option.id\">{{ option?.display }}</mat-option>\n }\n </mat-autocomplete>\n } @else {\n <mat-select\n [formControlName]=\"fieldConfig().name\"\n (keydown.enter)=\"$event.preventDefault()\"\n (selectionChange)=\"select($event.value)\"\n [ariaReadOnly]=\"editMode() === 'view'\">\n @for (option of options; track option.id) {\n @if (option?.id === form().get(this.fieldConfig().name)?.value) {\n <mat-option [value]=\"option?.id\" selected>{{ option?.display }}</mat-option>\n } @else {\n <mat-option [value]=\"option?.id\">{{ option?.display }}</mat-option>\n }\n }\n </mat-select>\n }\n </mat-form-field>\n </div>\n } @else {\n <div class=\"enumerated-field-container readonly-field\">\n <mat-form-field class=\"field {{ fieldClass() }}\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <input\n id=\"{{ fieldConfig().name }}-readonly-input-text\"\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"true\"\n type=\"text\"\n [required]=\"hasRequiredValidator()\"\n [value]=\"singleEnumDisplayText()\" />\n </mat-form-field>\n @if (viewDetails()) {\n <a\n mat-icon-button\n color=\"accent\"\n [matTooltip]=\"tooltipMessage()\"\n matTooltipPosition=\"below\"\n [routerLink]=\"['/', route(), form().get(this.fieldConfig().name)?.value]\">\n <mat-icon>arrow_forward</mat-icon>\n </a>\n }\n </div>\n <input class=\"display-none\" [formControlName]=\"fieldConfig().name\" />\n }\n } @else {\n <input class=\"display-none\" [formControlName]=\"fieldConfig().name\" />\n }\n</ng-container>\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { NullBoolean } from '@cccteam/ccc-lib/src/types';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-nullboolean-field',\n imports: [\n MatFormFieldModule,\n MatInputModule,\n MatDatepickerModule,\n ReactiveFormsModule,\n MatOptionModule,\n MatSelectModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n RouterModule,\n MatAutocompleteModule,\n ],\n templateUrl: './nullboolean-field.component.html',\n styleUrl: './nullboolean-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NullBooleanFieldComponent extends BaseInputComponent {\n availableEnumOptions = computed(() => {\n const fieldConfig = this.fieldConfig();\n if (fieldConfig === undefined) {\n return;\n }\n const valueMap = new Map<NullBoolean, string>();\n\n Object.values(fieldConfig.nullBooleanConfig.displayValues).forEach((value) => {\n valueMap.set(value.value, value.label);\n });\n\n return valueMap;\n });\n\n currentValue = computed(() => {\n const form = this.form();\n const fieldConfig = this.fieldConfig();\n\n if (form === undefined || fieldConfig === undefined) {\n return;\n }\n\n return form.get(fieldConfig.name)?.value;\n });\n\n currentDisplayText = computed(() => {\n const value = this.currentValue();\n const availableOptions = this.availableEnumOptions();\n\n if (availableOptions === undefined || value === undefined) {\n return;\n }\n\n return availableOptions.get(value);\n });\n\n hasRequiredValidator = computed(() => {\n const form = this.form();\n const fieldConfig = this.fieldConfig();\n\n if (form === undefined || fieldConfig === undefined) {\n return false;\n }\n\n const control = form.get(fieldConfig.name);\n if (control === null) {\n return false;\n }\n\n return control.hasValidator(Validators.required);\n });\n}\n","<ng-container [formGroup]=\"form()\">\n @if (showField()) {\n @let options = availableEnumOptions();\n @if (editMode() === 'edit') {\n <mat-form-field class=\"field {{ fieldClass() }}\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <mat-select\n [formControlName]=\"fieldConfig().name\"\n (keydown.enter)=\"$event.preventDefault()\"\n [canSelectNullableOptions]=\"true\"\n [ariaReadOnly]=\"editMode() === 'view'\">\n @for (option of options; track option[0]) {\n @if (option[0] === currentValue()) {\n <mat-option [value]=\"option[0]\" selected>{{ option[1] }}</mat-option>\n } @else {\n <mat-option [value]=\"option[0]\">{{ option[1] }}</mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n } @else {\n <div class=\"readonly-field\">\n <mat-form-field class=\"field {{ fieldClass() }}\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <input\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"true\"\n type=\"text\"\n [required]=\"hasRequiredValidator()\"\n [value]=\"currentDisplayText()\" />\n </mat-form-field>\n </div>\n }\n } @else {\n <input class=\"display-none\" [formControlName]=\"fieldConfig().name\" />\n }\n</ng-container>\n","import { Component } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-number-field',\n imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule, ReactiveFormsModule],\n templateUrl: './number-field.component.html',\n styleUrl: './number-field.component.scss',\n})\nexport class NumberFieldComponent extends BaseInputComponent {}\n","@if (showField()) {\n <div [class.readonly-field]=\"editMode() === 'view'\">\n <mat-form-field\n class=\"field {{ fieldClass() }}\"\n [formGroup]=\"form()\"\n [subscriptSizing]=\"'dynamic'\"\n [floatLabel]=\"floatLabel()\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <span matTextPrefix class=\"prefix\">{{ prefixString() }}</span>\n <span matTextSuffix class=\"suffix\">{{ suffixString() }}</span>\n <input\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"editMode() === 'view'\"\n type=\"number\"\n [formControlName]=\"fieldConfig().name\" />\n </mat-form-field>\n </div>\n} @else {\n <ng-container [formGroup]=\"form()\">\n <input type=\"hidden\" [formControlName]=\"fieldConfig().name\" />\n </ng-container>\n}\n","import { Component } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-text-field',\n imports: [\n MatFormFieldModule,\n MatInputModule,\n MatDatepickerModule,\n ReactiveFormsModule,\n MatIconModule,\n MatButtonModule,\n ],\n templateUrl: './text-field.component.html',\n styleUrl: './text-field.component.scss',\n})\nexport class TextFieldComponent extends BaseInputComponent {}\n","@if (showField()) {\n <div [class.readonly-field]=\"editMode() === 'view'\">\n <mat-form-field\n class=\"field {{ fieldClass() }}\"\n [formGroup]=\"form()\"\n [subscriptSizing]=\"'dynamic'\"\n [floatLabel]=\"floatLabel()\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <span matTextPrefix class=\"prefix\">{{ prefixString() }}</span>\n <span matTextSuffix class=\"suffix\">{{ suffixString() }}</span>\n <input\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"editMode() === 'view'\"\n type=\"text\"\n [formControlName]=\"fieldConfig().name\"\n [class.dirty-input]=\"form().get(fieldConfig().name)?.dirty\" />\n @if (editMode() === 'edit' && form().get(fieldConfig().name)?.dirty) {\n <button matSuffix mat-icon-button (click)=\"reset()\" tabindex=\"-1\">\n <mat-icon>refresh</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n} @else {\n <ng-container [formGroup]=\"form()\">\n <input type=\"hidden\" [formControlName]=\"fieldConfig().name\" />\n </ng-container>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n HostBinding,\n input,\n Signal,\n untracked,\n} from '@angular/core';\nimport { FormGroup, Validators } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { DataType, FieldElement, FieldMeta, Meta, RecordData, validatorsPresent, ValidDisplayTypes } from '@cccteam/ccc-lib/src/types';\nimport { EmptyReadonlyFieldComponent } from '../empty-readonly-field/empty-readonly-field.component';\nimport { BooleanFieldComponent } from './fields/boolean-field/boolean-field.component';\nimport { DateFieldComponent } from './fields/date-field/date-field.component';\nimport { EnumeratedFieldComponent } from './fields/enumerated-field/enumerated-field.component';\nimport { NullBooleanFieldComponent } from './fields/nullboolean-field/nullboolean-field.component';\nimport { NumberFieldComponent } from './fields/number-field/number-field.component';\nimport { TextFieldComponent } from './fields/text-field/text-field.component';\n\n@Component({\n selector: 'ccc-resource-field',\n imports: [\n DateFieldComponent,\n BooleanFieldComponent,\n TextFieldComponent,\n NumberFieldComponent,\n EnumeratedFieldComponent,\n MatFormFieldModule,\n EmptyReadonlyFieldComponent,\n NullBooleanFieldComponent,\n NgTemplateOutlet,\n ],\n templateUrl: './resource-field.component.html',\n styleUrl: './resource-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResourceFieldComponent {\n fieldConfig = input.required<FieldElement>();\n meta = input.required<Meta>();\n fieldClass = input<string>();\n editMode = input<'edit' | 'view'>('edit');\n form = input.required<FormGroup>();\n formDataState = input<RecordData>();\n pristineValue = input<DataType | null>();\n data = input<RecordData>();\n previouslyNulled: boolean | null = null;\n\n fieldMeta: Signal<FieldMeta> = computed(() => {\n return (\n (this.meta().fields?.find((field) => field.fieldName === this.fieldConfig().name) as FieldMeta) ||\n ({} as FieldMeta)\n );\n });\n\n mode = computed(() => {\n if (this.fieldConfig().readOnly) {\n return 'view';\n }\n return this.editMode();\n });\n\n showField = computed(() => {\n const shouldRender = this.fieldConfig().shouldRender;\n const conditionallyNull = this.fieldConfig().nullIfConditionallyHidden;\n const isForeignKeyDefault = this.fieldConfig().default?.type === 'foreignKey';\n\n if (typeof shouldRender === 'boolean') {\n return shouldRender && !isForeignKeyDefault;\n }\n const formValues = this.formDataState();\n if (!formValues) {\n return true;\n }\n\n console.debug('Field: ', this.fieldConfig().name, ' | Values to be used in showField calculation ', formValues);\n\n try {\n const showField = shouldRender(formValues) && !isForeignKeyDefault;\n\n if (!conditionallyNull) {\n return showField;\n }\n\n const formControlName = this.fieldConfig()?.name;\n const control = this.form()?.controls[formControlName];\n const pristineFieldValue = this.data()?.[formControlName];\n const previouslyNulled = this.previouslyNulled;\n\n untracked(() => {\n if (!showField && !previouslyNulled) {\n this.previouslyNulled = true;\n control?.setValue(null);\n }\n\n if (showField && previouslyNulled) {\n this.previouslyNulled = false;\n control?.setValue(pristineFieldValue);\n }\n });\n\n return showField;\n } catch (e) {\n console.error('Failed to calculate value for should Render function for field: ', this.fieldConfig().name);\n console.error(e);\n return true;\n }\n });\n\n showEmptyField = computed(() => {\n const editMode = this.mode();\n const showField = this.showField();\n\n if (!showField || editMode === 'edit') {\n return false;\n }\n\n const form = this.form();\n const config = this.fieldConfig();\n const meta = this.fieldMeta();\n if (form === undefined || config === undefined || meta === undefined) {\n return false;\n }\n\n if (meta.displayType === 'nullboolean') {\n return false;\n }\n\n const value = form.get(config.name)?.value;\n if (value === null || value === '') {\n return true;\n }\n\n return false;\n });\n\n @HostBinding('class') class = '';\n\n booleanEditDisplayType: Signal<BooleanDisplayTypes> = computed(() => {\n const fieldConfig = this.fieldConfig();\n const fieldMeta = this.fieldMeta();\n const form = this.form();\n\n if (fieldConfig === undefined || fieldMeta === undefined || form === undefined) {\n return 'boolean';\n }\n\n const control = form.get(fieldConfig.name);\n if (control === null) {\n console.warn(\"Unable to find control for field '\" + fieldConfig.name + \"' to determine boolean display type\");\n return 'boolean';\n }\n\n // Frontend forcing users to make a choice displays nullboolean to\n // trigger form validation - users must interact and explicitly\n // choose a true or false value\n if (control.hasValidator(Validators.required) || fieldMeta.displayType === 'nullboolean') {\n return 'nullboolean';\n }\n\n return 'boolean';\n });\n\n previousValidatorCount = 0;\n\n constructor() {\n effect(() => {\n this.class = this.showField() ? 'col-' + this.fieldConfig()?.cols : 'hidden-field';\n });\n\n effect(() => {\n const getValidators = this.fieldConfig().validators;\n\n if (typeof getValidators !== 'function') {\n return;\n }\n\n const formValues = this.formDataState();\n\n if (!formValues) {\n return;\n }\n\n console.debug('Field: ', this.fieldConfig().name, ' | Values to be used in validators calculation ', formValues);\n\n try {\n const newValidators = getValidators(formValues);\n\n const formControlName = this.fieldConfig().name;\n const control = this.form().get(formControlName);\n\n if (control === null) {\n throw new Error(`Control with name ${this.fieldConfig().name} not found during forceRequired calculation`);\n }\n\n const addValidators = !validatorsPresent(control, newValidators, this.previousValidatorCount);\n\n if (addValidators) {\n control.setValidators(newValidators);\n control.updateValueAndValidity();\n }\n\n this.previousValidatorCount = newValidators.length;\n } catch (e) {\n console.error('Failed to calculate value for forceRequired function for field: ', this.fieldConfig().name);\n console.error(e);\n return;\n }\n });\n }\n}\n\ntype BooleanDisplayTypes = Extract<ValidDisplayTypes, 'boolean' | 'nullboolean'>;\n","<div [class.hidden-field]=\"!showField()\">\n @if (showEmptyField()) {\n <ccc-empty-readonly-field [label]=\"fieldConfig().label\"></ccc-empty-readonly-field>\n } @else {\n @switch (fieldMeta().displayType) {\n @case ('date') {\n <ccc-date-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-date-field>\n }\n\n @case ('civildate') {\n <ccc-date-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-date-field>\n }\n\n @case ('number') {\n <ccc-number-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-number-field>\n }\n\n @case ('boolean') {\n <ng-container *ngTemplateOutlet=\"booleanFragment\"></ng-container>\n }\n @case ('nullboolean') {\n <ng-container *ngTemplateOutlet=\"booleanFragment\"></ng-container>\n }\n\n @case ('enumerated') {\n <ccc-enumerated-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-enumerated-field>\n }\n\n @default {\n <ccc-text-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-text-field>\n }\n }\n }\n</div>\n\n<ng-template #booleanFragment>\n @if (booleanEditDisplayType() === 'boolean') {\n <ccc-boolean-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-boolean-field>\n } @else if (booleanEditDisplayType() === 'nullboolean') {\n <ccc-nullboolean-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-nullboolean-field>\n }\n</ng-template>\n","import { Component, computed, effect, HostBinding, input, model, OnInit, untracked } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ConfigElement, DataType, FieldElement, Meta, RecordData } from '@cccteam/ccc-lib/src/types';\nimport { flattenElements, maxLayoutNestingDepth } from '../gui-constants';\nimport { PaddingElementComponent } from '../padding-element/padding-element.component';\nimport { ComputedFieldComponent } from '../resource-field/fields/computed-field/computed-field.component';\nimport { ResourceFieldComponent } from '../resource-field/resource-field.component';\n\n@Component({\n selector: 'ccc-resource-layout-template',\n imports: [PaddingElementComponent, ResourceFieldComponent, ComputedFieldComponent],\n templateUrl: './resource-layout.component.html',\n styleUrls: ['./resource-layout.component.scss'],\n})\nexport class ResourceLayoutComponent implements OnInit {\n element = input.required<ConfigElement>();\n meta = input.required<Meta>();\n fieldClass = input<string>();\n editMode = input.required<'edit' | 'view'>();\n form = input.required<FormGroup>();\n formDataState = model<RecordData>();\n pristineValue = input<DataType | null>('');\n relatedData = input<RecordData>();\n parentClass = input<string>();\n layoutNestingDepth = input<number>(1);\n\n maxLayoutNestingDepth = maxLayoutNestingDepth;\n\n children = computed(() => {\n const element = this.element();\n if (element.type === 'section') {\n return element.children;\n }\n return [];\n });\n\n layoutChildrenConfig = computed(() => {\n return flattenElements(this.children());\n });\n previouslyNulled = false;\n\n nullIfConditionallyHidden = computed(() => {\n const element = this.element();\n if (element.type === 'field') {\n return element.nullIfConditionallyHidden;\n }\n if (element.type === 'section') {\n return element.nullAllChildrenIfConditionallyHidden;\n }\n return false;\n });\n\n showLayout = computed(() => {\n const element = this.element();\n const shouldRender = element.shouldRender;\n const conditionallyNull = this.nullIfConditionallyHidden();\n const form = this.form();\n const label = 'label' in element ? element.label : 'padding';\n const isForeignKeyDefault = element.type === 'field' && element.default?.type === 'foreignKey';\n\n if (typeof shouldRender === 'boolean') {\n return shouldRender && !isForeignKeyDefault;\n }\n\n const formValues = this.formDataState();\n if (!formValues) {\n return true;\n }\n\n console.debug('Layout: ', label, ' | Values to be used in showLayout calculation ', formValues);\n try {\n const showLayout = shouldRender(formValues) && !isForeignKeyDefault;\n\n if (!conditionallyNull) {\n return showLayout;\n }\n const previouslyNulled = this.previouslyNulled;\n\n untracked(() => {\n this.layoutChildrenConfig().forEach((configElement) => {\n const isFormControl = configElement.type === 'field';\n if (!isFormControl) {\n return;\n }\n\n const control = form?.controls[configElement.name];\n const pristineFieldValue = this.relatedData()?.[configElement.name];\n\n if (!showLayout && !previouslyNulled) {\n this.previouslyNulled = true;\n control?.setValue(null);\n }\n\n if (showLayout && previouslyNulled) {\n this.previouslyNulled = false;\n control?.setValue(pristineFieldValue);\n }\n });\n });\n\n return showLayout;\n } catch (e) {\n console.error('Failed to calculate value for should Render function for layout: ', label);\n console.error(e);\n return true;\n }\n });\n\n @HostBinding('class') class = '';\n\n constructor() {\n // TODO: Remove this effect once Angular supports signals in Reactive forms to obtain changes to form values.\n // This effect has been necessary because translating from Observables to Signals, specifically via an input signal\n // doesn't have a clean solution\n\n effect((onCleanup) => {\n const element = this.element();\n if (element === undefined) {\n return;\n }\n const currentForm = this.form();\n const shouldRender = element.shouldRender;\n const nestingDepth = this.layoutNestingDepth();\n const layoutChildren = this.layoutChildrenConfig();\n const label = 'label' in element ? element.label : 'padding';\n if (!this.shouldInitializeFormData(currentForm, nestingDepth, shouldRender, layoutChildren)) {\n return;\n }\n console.debug('USAGE | New subscription for formValuesSignal created for layout: ', label);\n\n this.formDataState.set(currentForm.getRawValue());\n const subscription = currentForm.valueChanges.subscribe((value) => {\n this.formDataState.set(value);\n });\n\n onCleanup(() => {\n console.debug('USAGE | Unsubscribing from valueChanges for layout: ', label);\n subscription.unsubscribe();\n });\n });\n }\n\n ngOnInit(): void {\n this.class = 'col-' + this.element().cols;\n }\n\n shouldInitializeFormData(\n form: FormGroup,\n layoutNestingDepth: number,\n shouldRender: ConfigElement['shouldRender'],\n layoutChildren: ConfigElement[],\n ): boolean {\n const childrenNeedFormDataState = layoutChildren.some((config) => {\n const shouldRenderIsFunction = typeof config.shouldRender === 'function';\n const isComputedField = config.type === 'computedDisplayField';\n let validatorsIsFunction = false;\n\n const castConfig = config as FieldElement;\n if (castConfig.validators && typeof castConfig.validators === 'function') {\n validatorsIsFunction = true;\n }\n\n return shouldRenderIsFunction || isComputedField || validatorsIsFunction;\n });\n\n if (!form || layoutNestingDepth > 1) {\n return false;\n }\n\n if (!childrenNeedFormDataState && typeof shouldRender !== 'function') {\n return false;\n }\n\n return true;\n }\n}\n","<div class=\"section {{ parentClass() }}\" [class.hidden-field]=\"!showLayout()\">\n @let parentElement = element();\n @if (children().length > 0) {\n <div\n class=\"section-elements dense-1 resource-layout-container\"\n [class]=\"layoutNestingDepth() % 2 === 0 ? 'resource-layout-container-even' : 'resource-layout-container-odd'\">\n @if (parentElement.type !== 'padding' && parentElement.label !== '') {\n <div class=\"label\">{{ parentElement.label }}</div>\n }\n @for (elementField of children(); track elementField) {\n @let childElement = elementField;\n @if (childElement.type === 'section') {\n @if (layoutNestingDepth() < maxLayoutNestingDepth) {\n <ccc-resource-layout-template\n [layoutNestingDepth]=\"layoutNestingDepth() + 1\"\n [element]=\"childElement\"\n [meta]=\"meta()\"\n [fieldClass]=\"fieldClass()\"\n [editMode]=\"editMode()\"\n [form]=\"form()\"\n [formDataState]=\"formDataState()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"relatedData()\"\n [parentClass]=\"parentClass()\">\n </ccc-resource-layout-template>\n }\n } @else if (childElement.type === 'field') {\n <ccc-resource-field\n [meta]=\"meta()\"\n [fieldClass]=\"fieldClass()\"\n [fieldConfig]=\"childElement\"\n [editMode]=\"editMode()\"\n [form]=\"form()\"\n [formDataState]=\"formDataState()\"\n [pristineValue]=\"pristineValue()\"\n [data]=\"relatedData()\">\n </ccc-resource-field>\n } @else if (childElement.type === 'computedDisplayField') {\n <ccc-computed-field\n [fieldClass]=\"fieldClass()\"\n [fieldConfig]=\"childElement\"\n [formDataState]=\"formDataState()\"></ccc-computed-field>\n } @else if (childElement.type === 'padding') {\n <ccc-padding-element [paddingElement]=\"childElement\"></ccc-padding-element>\n }\n }\n </div>\n } @else {\n @if (parentElement.type === 'field') {\n <div\n class=\"section-elements dense-1 resource-layout-container\"\n [class]=\"layoutNestingDepth() % 2 === 0 ? 'resource-layout-container-even' : 'resource-layout-container-odd'\">\n <ccc-resource-field\n [meta]=\"meta()\"\n [fieldClass]=\"fieldClass()\"\n [fieldConfig]=\"parentElement\"\n [editMode]=\"editMode()\"\n [form]=\"form()\"\n [formDataState]=\"formDataState()\"\n [pristineValue]=\"pristineValue()\"\n [data]=\"relatedData()\">\n </ccc-resource-field>\n </div>\n } @else if (parentElement.type === 'computedDisplayField') {\n <ccc-computed-field\n [fieldClass]=\"fieldClass()\"\n [fieldConfig]=\"parentElement\"\n [formDataState]=\"formDataState()\"></ccc-computed-field>\n } @else if (parentElement.type === 'padding') {\n <ccc-padding-element [paddingElement]=\"parentElement\"></ccc-padding-element>\n }\n }\n</div>\n","import { Component, computed, inject, signal } from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\nimport { DataType, FieldElement, Method, METHOD_META, RPCBaseFormData } from '@cccteam/ccc-lib/src/types';\nimport { flattenElements } from '../gui-constants';\nimport { ResourceLayoutComponent } from '../resource-layout/resource-layout.component';\nimport { ResourceStore } from '../resource-store.service';\n\n@Component({\n selector: 'ccc-base-rpc-modal',\n imports: [\n MatDialogModule,\n MatDialogActions,\n MatButtonModule,\n ResourceLayoutComponent,\n FormsModule,\n MatInputModule,\n ReactiveFormsModule,\n ],\n templateUrl: './base-rpc-modal.component.html',\n styleUrls: ['./base-rpc-modal.component.scss'],\n providers: [ResourceStore],\n})\nexport class BaseRPCModalComponent {\n methodMeta = inject(METHOD_META);\n private dialogRef = inject(MatDialogRef);\n\n data = inject<{ elements: FieldElement[]; label: string; method: Method; width: string }>(MAT_DIALOG_DATA);\n formData = signal({} as RPCBaseFormData);\n meta = computed(() => {\n return this.methodMeta(this.formData().method as Method);\n });\n\n constructor() {\n this.formData.set(this.data);\n if (this.data.width) {\n this.dialogRef.updateSize(this.data.width);\n }\n }\n\n onConfirm(): void {\n this.dialogRef.close(this.form());\n }\n\n form = computed(() => {\n const fg = new FormGroup({});\n this.formData();\n const meta = this.meta();\n const allElements = flattenElements(this.data.elements);\n if (meta) {\n for (const field of meta.fields || []) {\n const value = '';\n const control = new FormControl(value);\n const findConfig = allElements.find((element) => element.type === 'field' && element.name === field.fieldName);\n const fieldConfig = findConfig as FieldElement | undefined;\n if (!fieldConfig) {\n continue;\n }\n if (fieldConfig.validators.length > 0) {\n control.setValidators(fieldConfig.validators);\n }\n fg.addControl(field.fieldName, control);\n this.pristineForm[field.fieldName] = value;\n }\n }\n return fg;\n });\n\n pristineForm: Record<string, DataType> = {};\n}\n","<div mat-dialog-title>{{ formData().label }}</div>\n<mat-dialog-content>\n <div class=\"resource-container\">\n <form [formGroup]=\"form()\">\n <div class=\"resource row\">\n @for (element of formData().elements; track element) {\n <ccc-resource-layout-template\n [element]=\"element\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineForm[element.name]\"\n editMode=\"edit\"\n [form]=\"form()\"></ccc-resource-layout-template>\n }\n </div>\n </form>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"false\">Cancel</button>\n <button mat-raised-button color=\"accent\" [mat-dialog-close]=\"form().getRawValue()\" [disabled]=\"!form().valid\">\n Complete\n </button>\n</mat-dialog-actions>\n","import { Component, computed, inject, input, ResourceRef } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AlertLevel,\n FieldPointer,\n ListViewConfig,\n METHOD_META,\n RecordData,\n Resource,\n RootConfig,\n RPCConfig,\n rpcConfigDefaults,\n RPCFieldMeta,\n RpcMethod,\n RPCRecordData,\n ViewConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\nimport { filter, tap } from 'rxjs';\nimport { BaseRPCModalComponent } from '../../base-rpc-modal/base-rpc-modal.component';\nimport { FormStateService } from '../../form-state.service';\nimport { ResourceStore } from '../../resource-store.service';\nimport { metadataTypeCoercion } from '../../resources-helpers';\n\n@Component({\n selector: 'ccc-rpc-button',\n imports: [MatButtonModule],\n templateUrl: './rpc-button.component.html',\n styleUrls: ['./rpc-button.component.scss'],\n providers: [ResourceStore],\n})\nexport class RpcButtonComponent {\n activatedRoute = inject(ActivatedRoute);\n router = inject(Router);\n notifications = inject(NotificationService);\n formState = inject(FormStateService);\n dialog = inject(MatDialog);\n store = inject(ResourceStore);\n\n methodMeta = inject(METHOD_META);\n\n relatedData = input.required<RecordData>({});\n rpcConfig = input.required<RPCConfig>();\n primaryResource = input.required<Resource>();\n dependentResources = input<ResourceRef<RecordData[]>[]>([]);\n\n resourceConfigRouteSnapshot = computed(() => {\n return (\n this.rpcConfig() ||\n (this.activatedRoute.snapshot.data['config'] as RootConfig)?.parentConfig ||\n ({} as ViewConfig | ListViewConfig)\n );\n });\n\n showRPCButton = computed(() => {\n const rpcConfig = this.rpcConfig();\n if (!rpcConfig) {\n return false;\n }\n let canView = true;\n for (const condition of rpcConfig.conditions || []) {\n const filterField = condition.field;\n const matchValues = condition.matchValues;\n const parentFieldData = this.relatedData()[filterField ? filterField : ''];\n for (const matchValue of matchValues) {\n if (parentFieldData === matchValue) {\n canView = true;\n break;\n }\n canView = false;\n }\n if (!canView) {\n break;\n }\n }\n return canView;\n });\n\n submitRPC(): void {\n const rpcConfig = this.rpcConfig();\n if (!rpcConfig) {\n console.error('RPC config is not defined');\n return;\n }\n\n const submitBody: RPCRecordData = {};\n let dialogRef: MatDialogRef<BaseRPCModalComponent> | undefined;\n\n if (rpcConfig.customComponent !== rpcConfigDefaults.customComponent) {\n let componentToOpen;\n if (!componentToOpen) {\n console.error('Custom RPC component ' + rpcConfig.customComponent.component + ' not found.');\n return;\n }\n\n if (!dialogRef) {\n console.error('Dialog reference is undefined.');\n return;\n }\n } else if (rpcConfig.elements.length > 0) {\n dialogRef = this.dialog.open(BaseRPCModalComponent, {\n data: {\n label: rpcConfig.label,\n elements: rpcConfig.elements,\n method: rpcConfig.method,\n width: rpcConfig.defaultModalWidth,\n },\n });\n } else {\n this.buildRpcBody(rpcConfig, submitBody);\n return;\n }\n\n const meta = this.methodMeta(rpcConfig.method);\n dialogRef\n .afterClosed()\n .pipe(\n filter((data) => !!data),\n tap((data) => {\n const coercedData = metadataTypeCoercion(data as RPCRecordData, meta);\n Object.keys(coercedData).forEach((key: string) => {\n const value = coercedData[key];\n if (value) {\n submitBody[key] = value;\n }\n });\n this.buildRpcBody(rpcConfig, submitBody);\n }),\n tap(() => {\n this.reloadDependentResources();\n }),\n )\n .subscribe();\n }\n\n buildRpcBody(rpcConfig: RPCConfig, submitBody: RPCRecordData): void {\n let canSubmitRPC = true;\n const method = this.methodMeta(rpcConfig.method);\n if (method.fields) {\n method.fields.forEach((methodField: RPCFieldMeta) => {\n const key = methodField.fieldName;\n if (submitBody[key] === undefined || submitBody[key] === null || submitBody[key] === '') {\n if (!method.fields) {\n return;\n }\n const value = rpcConfig.methodBodyTemplate[key as keyof RpcMethod] as string | FieldPointer;\n if (value == undefined) {\n return;\n }\n if (typeof value !== 'string') {\n const returnValue = this.relatedData()[value.field];\n if (returnValue === undefined) {\n this.notifications.addGlobalNotification({\n message: 'Value not found for field: ' + value.field,\n link: '',\n level: AlertLevel.ERROR,\n });\n canSubmitRPC = false;\n return;\n }\n if (returnValue) submitBody[key] = returnValue as string | number | string[] | number[] | boolean;\n } else {\n submitBody[key] = value;\n }\n }\n });\n }\n\n if (!canSubmitRPC) {\n return;\n }\n this.callRpc(rpcConfig, submitBody);\n }\n\n callRpc(rpc: RPCConfig, submitBody: RPCRecordData): void {\n this.store\n .rpcCall(rpc, submitBody)\n .pipe(\n tap(() => {\n this.reloadDependentResources();\n }),\n )\n .subscribe();\n }\n\n reloadDependentResources(): void {\n // TODO: this does not work. We need to invalidate the cache via resource names.\n for (const ref of this.dependentResources()) {\n ref.reload();\n }\n }\n}\n","@if (showRPCButton()) {\n <div class=\"button-container\">\n <button mat-raised-button color=\"accent\" (click)=\"submitRPC()\" [disabled]=\"formState.isDirty()\">\n {{ rpcConfig().label }}\n </button>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { CamelCaseToTitlePipe } from '@cccteam/ccc-lib/src/ccc-camel-case-to-title';\nimport { cleanStringForm } from '@cccteam/ccc-lib/src/forms';\nimport {\n ChildResourceConfig,\n DataType,\n FieldElement,\n ListViewConfig,\n RecordData,\n Resource,\n RESOURCE_META,\n RootConfig,\n ViewConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\nimport { camelCase } from 'lodash-es';\nimport { tap } from 'rxjs';\nimport { FormStateService } from '../form-state.service';\nimport { flattenElements } from '../gui-constants';\nimport { ResourceLayoutComponent } from '../resource-layout/resource-layout.component';\nimport { ResourceStore } from '../resource-store.service';\nimport { CreateOperation, metadataTypeCoercion } from '../resources-helpers';\n\n@Component({\n selector: 'ccc-resource-create',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n RouterModule,\n MatButtonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatDividerModule,\n ResourceLayoutComponent,\n ],\n templateUrl: './resource-create.component.html',\n styleUrl: './resource-create.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ResourceStore],\n})\nexport class ResourceCreateComponent implements OnInit {\n resourceMeta = inject(RESOURCE_META);\n activatedRoute = inject(ActivatedRoute);\n notifications = inject(NotificationService);\n store = inject(ResourceStore);\n router = inject(Router);\n destroyRef = inject(DestroyRef);\n formState = inject(FormStateService);\n\n isDirty = signal(false);\n submitted = signal<boolean>(false);\n complete = output<boolean>();\n resourceConfig = input<ChildResourceConfig>();\n parentData = input<RecordData>({});\n loadCreatedResource = input<boolean>(false);\n\n rootConfig = computed(() => {\n return this.activatedRoute.snapshot.data['config'] as RootConfig;\n });\n\n config = computed(() => {\n const inputConfig = this.resourceConfig() as ViewConfig;\n if (inputConfig !== undefined) {\n return inputConfig;\n }\n return this.rootConfig().parentConfig as ListViewConfig;\n });\n\n indentTitle = computed(() => {\n if (this.config().collapsible || this.resourceConfig() === undefined) {\n return false;\n }\n\n return true;\n });\n\n form = computed(() => {\n const meta = this.store.resourceMeta();\n const fg = new FormGroup({});\n const allElements = flattenElements(this.config().elements);\n\n for (const field of meta.fields || []) {\n if (fg.get(field.fieldName)) {\n continue;\n }\n\n let control = new FormControl<DataType>('');\n if (field.displayType === 'boolean') {\n control = new FormControl<boolean>(false);\n }\n\n const findElement = allElements.find((element) => element.type === 'field' && element.name === field.fieldName);\n const fieldConfig = findElement as FieldElement | undefined;\n if (!fieldConfig) {\n continue;\n }\n const fieldDefault = fieldConfig.default;\n if (field.displayType === 'boolean') {\n const booleanDefaultValue =\n fieldDefault?.type == 'static' && typeof fieldDefault?.value === 'boolean' ? fieldDefault.value : null;\n if (booleanDefaultValue === null) {\n console.error(\n `Default value for boolean field, ${field.fieldName}, is null, add a default value to the config`,\n );\n }\n control = new FormControl<boolean | null>(booleanDefaultValue);\n }\n\n if (fieldDefault?.type === 'foreignKey' && this.parentData()) {\n const parentValue = this.parentData()[fieldDefault.parentId];\n if (parentValue !== undefined) {\n control.setValue(parentValue);\n }\n } else if (fieldDefault?.type == 'static') {\n const staticDefault = fieldDefault;\n if (staticDefault.value) {\n control.setValue(staticDefault.value);\n }\n }\n\n control.setValidators([]);\n if (fieldConfig.validators.length > 0) {\n control.addValidators(fieldConfig.validators);\n }\n\n if (field.required && !control.hasValidator(Validators.required)) {\n control.addValidators(Validators.required);\n }\n fg.addControl(field.fieldName, control);\n }\n return fg;\n });\n\n route = computed(() => {\n const meta = this.store.resourceMeta();\n if (!meta) return '';\n return meta.consolidatedRoute || meta.route;\n });\n\n primaryKeys = computed(() => {\n const meta = this.store.resourceMeta();\n if (!meta) return [];\n return meta.fields\n .filter((field) => field.primaryKey)\n .sort((a, b) => a.primaryKey!.ordinalPosition - b.primaryKey!.ordinalPosition);\n });\n\n hasRequiredPrimaryKey = computed(() => {\n const meta = this.store.resourceMeta();\n if (!meta) {\n return false;\n }\n return meta.fields.some((field) => field.primaryKey && field.required);\n });\n\n primaryKeyPath = computed(() => {\n const meta = this.store.resourceMeta();\n const isConsolidated = meta.consolidatedRoute !== undefined;\n const pathPrefix = isConsolidated ? '/' + meta.route : '';\n const keyPath = this.primaryKeys()\n .map((field) => this.form().get(field.fieldName)?.value)\n .join('/');\n\n if (keyPath === '' && pathPrefix === '') {\n return '/';\n }\n\n if (keyPath === '') {\n return pathPrefix;\n }\n\n return pathPrefix + '/' + keyPath;\n });\n\n camelCaseToTitlePipe = new CamelCaseToTitlePipe();\n\n ngOnInit(): void {\n if (this.resourceMeta(this.config().primaryResource as Resource)) {\n this.store.resourceName.set(this.config().primaryResource as Resource);\n this.store.resourceMeta.set(this.resourceMeta(this.config().primaryResource as Resource));\n }\n }\n\n saveForm(): void {\n if (!this.form().valid) {\n this.submitted.set(true);\n this.form().markAllAsTouched();\n const formElement = document.getElementById('resource-form');\n const invalidField = formElement?.querySelector('.mdc-text-field--invalid');\n if (invalidField) {\n invalidField.scrollIntoView({ behavior: 'smooth' });\n }\n return;\n }\n\n const resourceMeta = this.store.resourceMeta();\n if (!resourceMeta) {\n return;\n }\n const cleanedForm = cleanStringForm<Record<string, string>>(this.form());\n if (cleanedForm === undefined || cleanedForm === null) {\n return;\n }\n const coercedCleanedData = metadataTypeCoercion(cleanedForm, this.store.resourceMeta());\n\n const cleanedDataWithoutPrimaryKeys = Object.fromEntries(\n Object.entries(coercedCleanedData).filter(\n ([key]) => !this.primaryKeys().some((field) => field.fieldName === key),\n ),\n );\n\n const createPatch: CreateOperation = {\n op: 'add',\n value: cleanedDataWithoutPrimaryKeys,\n path: this.primaryKeyPath(),\n };\n\n this.store\n .createPatch(createPatch, this.route(), this.store.resourceName())\n .pipe(\n tap((response) => {\n this.formState.decrementDirtyForms();\n\n if (!response) {\n this.complete.emit(true);\n return;\n }\n\n let createIds: string[] = [];\n if (resourceMeta.consolidatedRoute) {\n const resourceName = camelCase(this.store.resourceName());\n createIds = (response[resourceName] as string[]) || [];\n } else {\n createIds = (response['iDs'] || []) as string[];\n }\n\n if (this.loadCreatedResource() && createIds.length === 1) {\n let route = this.rootConfig().routeData.route;\n if (this.parentData() || !route) {\n route = resourceMeta.route;\n }\n\n const navigationRoutes = this.config().createNavigation;\n if (navigationRoutes.length === 0) {\n this.router.navigate([route, createIds[0]]);\n } else {\n if (createIds[0]) {\n navigationRoutes.push(createIds[0]);\n }\n this.router.navigate(navigationRoutes);\n }\n } else {\n this.complete.emit(true);\n }\n }),\n )\n .subscribe();\n }\n\n cancelForm(): void {\n if (this.form().dirty) {\n this.formState.decrementDirtyForms();\n }\n this.complete.emit(true);\n }\n\n constructor() {\n effect(() => {\n console.debug('USAGE | New FormGroup subscription for: ', this.config().title);\n\n this.form()\n .valueChanges.pipe(\n tap(() => {\n const dirty = this.form().dirty;\n\n if (dirty !== this.isDirty()) {\n this.isDirty.set(dirty);\n if (dirty) {\n this.formState.incrementDirtyForms();\n } else {\n this.formState.decrementDirtyForms();\n }\n }\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n });\n }\n}\n","<div class=\"page-container\">\n <div class=\"header-container\">\n <div class=\"title\" [class.indent]=\"indentTitle()\">\n <h1>Create {{ config().title }}</h1>\n </div>\n\n <div class=\"state-buttons\">\n @if (!form().valid && submitted()) {\n <div class=\"invalid message\">Please complete or fix required fields.</div>\n }\n <button mat-raised-button color=\"primary\" (click)=\"cancelForm()\">Cancel</button>\n <button mat-raised-button color=\"accent\" (click)=\"saveForm()\" [disabled]=\"form().pristine\">Create</button>\n </div>\n </div>\n\n <div class=\"resource-container\">\n <form [formGroup]=\"form()\">\n <div class=\"resource row\">\n @for (element of config().elements; track element) {\n <ccc-resource-layout-template\n [element]=\"element\"\n [meta]=\"store.resourceMeta()\"\n [fieldClass]=\"config().fieldClass\"\n [relatedData]=\"parentData()\"\n editMode=\"edit\"\n [form]=\"form()\"></ccc-resource-layout-template>\n }\n </div>\n </form>\n </div>\n</div>\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n Component,\n computed,\n effect,\n inject,\n Injector,\n input,\n OnInit,\n output,\n Signal,\n signal,\n Type,\n viewChild\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule, MatExpansionPanel } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ArrayConfig, ColumnConfig, RecordData, RESOURCE_META, ViewConfig } from '@cccteam/ccc-lib/src/types';\nimport { ActionAccessControlWrapperComponent } from '../actions/action-button-smart/action-access-control-wrapper.component';\nimport { ActionButtonContext } from '../actions/actions.interface';\nimport { ResourceCreateComponent } from '../resource-create/resource-create.component';\nimport { ResourceStore } from '../resource-store.service';\n\n@Component({\n selector: 'ccc-resource-array-view',\n templateUrl: './resource-array-view.component.html',\n styleUrl: './resource-array-view.component.scss',\n imports: [\n MatButtonModule,\n MatExpansionModule,\n MatIconModule,\n MatTooltipModule,\n ResourceCreateComponent,\n ActionAccessControlWrapperComponent,\n NgComponentOutlet,\n ],\n providers: [ResourceStore],\n})\nexport class ResourceArrayViewComponent implements OnInit {\n resourceMeta = inject(RESOURCE_META);\n store = inject(ResourceStore);\n injector = inject(Injector);\n\n resourceConfig = input.required<ArrayConfig>();\n parentData = input<RecordData>({});\n expPanel = viewChild<MatExpansionPanel, MatExpansionPanel>('expPanel', { read: MatExpansionPanel });\n\n emptyOneToOne = output<boolean>();\n\n createMode = signal(false);\n/* eslint-disable @typescript-eslint/no-explicit-any */\n compoundResourceComponent = input.required<Type<any>>();\n\n showCreateButton = computed(() => {\n const list = this.store.listData();\n const resourceConfig = this.resourceConfig();\n const iteratedConfig = resourceConfig.iteratedConfig;\n if (list && resourceConfig?.viewType === 'OneToOne') {\n this.emptyOneToOne.emit(list.length === 0);\n return list.length === 0;\n }\n if ('createTitle' in iteratedConfig && iteratedConfig.createTitle !== '') {\n return true;\n }\n return false;\n });\n\n createActionConfig: Signal<ActionButtonContext | undefined> = computed(() => {\n const config = this.resourceConfig();\n const showCreate = this.showCreateButton();\n const meta = this.store.resourceMeta();\n\n if (config === undefined || showCreate === undefined || meta === undefined) {\n return undefined;\n }\n\n return {\n actionType: 'create',\n meta: this.store.resourceMeta(),\n shouldRender: () => (showCreate && config.shouldRenderActions?.create?.(this.parentData())) ?? false,\n resourceData: this.parentData(),\n };\n });\n\n createConfig = computed(() => {\n const config = this.resourceConfig();\n if (config.createConfig && Object.keys(config.createConfig).length !== 0) {\n return config.createConfig as ViewConfig;\n }\n if (config.iteratedConfig && Object.keys(config.iteratedConfig).length !== 0) {\n return config.iteratedConfig as ViewConfig;\n }\n return config;\n });\n\n resourceListRoute = computed(() => {\n const config = this.resourceConfig();\n const meta = this.resourceMeta(config.connectorResource || config.primaryResource);\n return meta.route;\n });\n\n setCreateMode(value: boolean): void {\n this.createMode.set(value);\n if (value && this.expPanel && this.expPanel()?.closed) {\n this.expPanel()?.open();\n }\n }\n\n ngOnInit(): void {\n this.store.resourceName.set(this.resourceConfig().primaryResource);\n const meta = this.resourceMeta(this.resourceConfig().primaryResource);\n this.store.resourceMeta.set(meta);\n this.store.overrideRoute.set(this.resourceListRoute());\n const columnArray = [];\n if (this.resourceConfig().connectorField !== '') {\n columnArray.push({ id: this.resourceConfig().connectorField });\n } else {\n columnArray.push({ id: 'id' } as ColumnConfig);\n }\n this.store.listColumns.set(columnArray);\n this.store.sorts.set(this.resourceConfig().sorts);\n }\n\n constructor() {\n effect(() => {\n const parentData = this.parentData();\n const resourceConfig = this.resourceConfig();\n\n if (resourceConfig && 'listFilter' in resourceConfig && parentData) {\n const filter = resourceConfig.listFilter(parentData);\n\n this.store.filter.set(filter);\n this.store.disableCacheForFilterPii.set(resourceConfig.disableCacheForFilterPii);\n this.store.buildStoreListData();\n }\n });\n }\n\n createResource(event: MouseEvent): void {\n event.stopPropagation();\n const expPanel = this.expPanel();\n\n if (!expPanel) {\n this.setCreateMode(true);\n return;\n }\n this.setCreateMode(true);\n if (expPanel.closed) {\n expPanel.open();\n }\n }\n\n onResourceDeleted(): void {\n this.setCreateMode(false);\n }\n\n onCreateCompleted(): void {\n this.store.reloadListData();\n this.setCreateMode(false);\n }\n}\n","@if (resourceConfig().title !== '') {\n <div class=\"resource-array-view\">\n <mat-expansion-panel\n #expPanel\n [@.disabled]=\"true\"\n [disabled]=\"!resourceConfig().collapsible\"\n [expanded]=\"!resourceConfig().collapsible\">\n <mat-expansion-panel-header>\n @if (resourceConfig().title) {\n <mat-panel-title>\n <h1 class=\"title\">\n {{ resourceConfig().title }}\n </h1>\n </mat-panel-title>\n }\n <action-access-control-wrapper [actionContext]=\"createActionConfig()\">\n <button\n mat-icon-button\n class=\"exp-panel-add-element-btn\"\n color=\"accent\"\n (click)=\"createResource($event)\"\n [matTooltip]=\"resourceConfig().createButtonLabel\"\n matTooltipPosition=\"above\">\n <mat-icon color=\"accent\">add_circle</mat-icon>\n </button>\n </action-access-control-wrapper>\n </mat-expansion-panel-header>\n\n @if (!resourceConfig().collapsible && !resourceConfig().title) {\n <div class=\"no-title-exp-panel-padding\"></div>\n }\n\n @if (createMode()) {\n <ccc-resource-create\n [resourceConfig]=\"createConfig()\"\n [parentData]=\"parentData()\"\n (complete)=\"onCreateCompleted()\">\n </ccc-resource-create>\n }\n @if (store.listStatus() === 'resolved') {\n @for (resource of store.listData(); track resource['id']; let i = $index) {\n @let resourceId = (resource[resourceConfig().connectorField] || resource['id']) + '';\n\n @if (parentData() && resourceConfig().iteratedConfig && resourceId && i + 1 <= resourceConfig().limit) {\n <ng-container *ngComponentOutlet=\"compoundResourceComponent();\n inputs: { \n uuid: resourceId, \n parentData: parentData(), \n isArrayChild: true, \n resourceConfig: resourceConfig().iteratedConfig \n }\">\n </ng-container>\n }\n }\n } @else {\n <div class=\"resource-container empty\">\n <div class=\"resource row\"></div>\n </div>\n }\n\n @if (store.listData().length === 0) {\n <div>No records found</div>\n }\n </mat-expansion-panel>\n </div>\n} @else {\n @if (createMode()) {\n <ccc-resource-create [resourceConfig]=\"createConfig()\" [parentData]=\"parentData()\" (complete)=\"onCreateCompleted()\">\n </ccc-resource-create>\n }\n @if (store.listStatus() === 'resolved') {\n @for (resource of store.listData(); track resource['id']; let i = $index) {\n @if (parentData() && resourceConfig().iteratedConfig && resource['id'] && i + 1 <= resourceConfig().limit) {\n <ng-container *ngComponentOutlet=\"compoundResourceComponent();\n inputs: { \n uuid: resource['id'] + '', \n parentData: parentData(), \n isArrayChild: true, \n resourceConfig: resourceConfig().iteratedConfig \n }\">\n </ng-container>\n }\n }\n } @else {\n <div class=\"resource-container empty\">\n <div class=\"resource row\"></div>\n </div>\n }\n\n @if (store.listData().length === 0) {\n <div>No records found</div>\n }\n}\n","import { FormatType } from '@cccteam/ccc-lib/src/types';\nimport { format, isValid, parseISO } from 'date-fns';\n\nexport type FormatterFn = (value: string) => string;\n\nexport const simpleSlashDateFormatter = (value: string): string => {\n if (!value) return '';\n const parsedDate = parseISO(value.toString());\n\n if (isValid(parsedDate)) {\n return format(parsedDate, 'M/d/yyyy');\n }\n\n console.error('Applying simpleSlashDateFormatter to invalid date value:', value);\n return value.toString();\n};\n\nexport const ValueFormatters: Record<FormatType, FormatterFn> = {\n ['simpleSlashDateFormat']: simpleSlashDateFormatter,\n};\n\nexport function applyFormatting(formatString: string, value: string): string {\n if (!value) return '';\n if (formatString in ValueFormatters) {\n return ValueFormatters[formatString as FormatType](value);\n }\n\n //default to formatting as a date with provided format string\n const parsedDate = parseISO(value.toString());\n\n if (isValid(parsedDate)) {\n return format(parsedDate, formatString);\n }\n\n return value.toString();\n}\n\nexport function formatDateString(formatString: string, value: string): string {\n if (!value) return '';\n\n //default to formatting as a date with provided format string\n const parsedDate = parseISO(value.toString());\n\n if (isValid(parsedDate)) {\n return format(parsedDate, formatString);\n }\n\n return value.toString();\n}\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n Component,\n computed,\n effect,\n inject,\n Injector,\n input,\n OnInit,\n output,\n ResourceRef,\n runInInjectionContext,\n signal,\n Type,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { AppGridComponent } from '@cccteam/ccc-lib/src/ccc-grid';\nimport {\n ChildResourceConfig,\n ColumnConfig,\n FieldName,\n ListViewConfig,\n RecordData,\n Resource,\n RESOURCE_META,\n RootConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { ActionAccessControlWrapperComponent } from '../actions/action-button-smart/action-access-control-wrapper.component';\nimport { ActionButtonContext } from '../actions/actions.interface';\nimport {\n hyphenConcatWithoutResource,\n hyphenSpaceConcatWithoutResource,\n noSpaceConcatWithoutResource,\n spaceConcatWithoutResource,\n spaceHyphenConcatWithoutResource,\n} from '../concat-fns';\nimport { applyFormatting, formatDateString } from '../format-fns';\nimport { ResourceStore } from '../resource-store.service';\n\n@Component({\n standalone: true,\n imports: [\n AppGridComponent,\n RouterModule,\n MatIconModule,\n MatButtonModule,\n MatExpansionModule,\n MatTooltipModule,\n ReactiveFormsModule,\n MatInputModule,\n ActionAccessControlWrapperComponent,\n NgComponentOutlet,\n ],\n selector: 'ccc-resource-list',\n templateUrl: './resource-list.component.html',\n styleUrls: ['./resource-list.component.scss'],\n providers: [ResourceStore],\n})\nexport class ResourceListComponent implements OnInit {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n compoundResourceComponent = input.required<Type<any>>();\n\n resourceMeta = inject(RESOURCE_META);\n router = inject(Router);\n store = inject(ResourceStore);\n injector = inject(Injector);\n activatedRoute = inject(ActivatedRoute);\n\n hideCreateButton = input<boolean>(true);\n createMode = output<boolean>();\n resourceConfig = input<ChildResourceConfig>();\n viewRoute = input<string>();\n filter = input<string>('');\n linkCreateType = input<boolean>(false);\n isRootList = input<boolean>(true);\n\n showCreateButton = computed(() => {\n const config = this.config();\n if (config.createTitle !== '' && !config.collapsible && !this.hideCreateButton()) {\n return true;\n }\n if (config.createConfig && Object.keys(config.createConfig).length !== 0) {\n return true;\n }\n return false;\n });\n\n createButtonContext = computed(() => {\n const config = this.resourceConfig();\n const showCreate = this.showCreateButton();\n\n if (config === undefined || showCreate === undefined) {\n return undefined;\n }\n\n if (config.shouldRenderActions === undefined) {\n return undefined;\n }\n\n return {\n actionType: 'create',\n meta: this.meta(),\n shouldRender: (data: RecordData): boolean => showCreate && config.shouldRenderActions.create(data),\n resourceData: this.relatedData() ?? {},\n } satisfies ActionButtonContext;\n });\n\n searchableFields = computed(() => {\n const meta = this.meta();\n if (!meta) return '';\n return `over fields of ${meta.route}`;\n // TODO: implement searchable fields based on resource meta\n // return meta.searchableFields.join(', ') || '';\n });\n\n relatedData = input<RecordData>();\n parentId = input<string>();\n\n routeConfig = computed(() => {\n return this.activatedRoute.snapshot.data['config'] as RootConfig;\n });\n\n config = computed(() => {\n return this.resourceConfig() as ListViewConfig;\n });\n\n expansionConfig = computed(() => {\n const config = this.config().rowExpansionConfig;\n if (config.type !== 'Component' && config.type !== 'Array') {\n config.showBackButton = false;\n }\n return config;\n });\n\n viewRouteFallback = computed(() => {\n if (this.viewRoute()) {\n return this.viewRoute();\n }\n\n return this.resourceMeta(this.config().primaryResource).route;\n });\n\n listTitle = computed(() => {\n if (this.config()?.collapsible) return '';\n return this.config().title || '';\n });\n\n indentTitle = computed(() => {\n if (this.config() === undefined) {\n return false;\n }\n\n return true;\n });\n\n createButtonLabel = computed(() => {\n return this.config().createButtonLabel || 'Create';\n });\n\n meta = computed(() => {\n const config = this.config();\n return this.resourceMeta(config.overrideResource || config.primaryResource);\n });\n resourceRefMap = signal(new Map<Resource, ResourceRef<RecordData[]>>());\n primaryKeys = computed(() => {\n const meta = this.meta();\n if (!meta) {\n return [];\n }\n return meta.fields.filter((field) => field.primaryKey !== undefined);\n });\n rootColumns = computed(() => {\n const config = this.config();\n const idCols = [];\n for (const pk of this.primaryKeys()) {\n if (pk.required) {\n continue;\n }\n idCols.push({\n id: pk.fieldName as FieldName,\n hidden: true,\n });\n }\n for (const col of config.listColumns) {\n if (!('additionalIds' in col)) continue;\n for (const additionalCol of col.additionalIds) {\n if (additionalCol.resource !== undefined) continue;\n idCols.push({\n id: additionalCol.id as FieldName,\n hidden: true,\n });\n }\n }\n\n return [...new Set([...idCols, ...config.listColumns])];\n });\n columns = computed(() => {\n const refmap = this.resourceRefMap();\n const cols = this.rootColumns();\n const columns: ColumnConfig[] = [];\n const usedIds = new Set<string>();\n\n for (const col of cols) {\n const indexId = this.getUniqueId(col.id, usedIds) as FieldName;\n usedIds.add(indexId);\n\n if (col.hidden) {\n continue;\n }\n\n if ('additionalIds' in col) {\n columns.push({\n id: indexId,\n header: col.header,\n width: col.width,\n resizable: col.resizable,\n valueGetter: (data) => {\n const concatArray: string[] = [];\n\n col.additionalIds.forEach((additionalCol) => {\n if (!additionalCol.resource) {\n concatArray.push(data[additionalCol.id]);\n } else {\n const resource = signal(additionalCol.resource as Resource);\n const resourceRef = refmap.get(resource());\n const resData = resourceRef?.value();\n if (!resData) {\n return;\n }\n for (const res of resData) {\n if (res[additionalCol.id] === data[col.id] && additionalCol.field) {\n const value = res[additionalCol.field];\n if (col.formatType && typeof value === 'string') {\n concatArray.push(formatDateString(col.formatType, value));\n } else if (value) {\n concatArray.push(value as string);\n }\n }\n }\n }\n });\n\n if (concatArray.length === 0) {\n return col.emptyDataValue as string;\n }\n\n switch (col.concatFn) {\n case 'space-concat':\n return spaceConcatWithoutResource(concatArray);\n case 'space-hyphen-concat':\n return spaceHyphenConcatWithoutResource(concatArray);\n case 'hyphen-space-concat':\n return hyphenSpaceConcatWithoutResource(concatArray);\n case 'no-space-concat':\n return noSpaceConcatWithoutResource(concatArray);\n default: {\n // default case is hyphen-concat\n return hyphenConcatWithoutResource(concatArray);\n }\n }\n },\n });\n } else {\n columns.push({\n id: indexId,\n header: col.header,\n width: col.width,\n resizable: col.resizable,\n valueFormatter: (params) => {\n if (col.formatType) {\n const retValue = applyFormatting(col.formatType, params);\n return retValue || col.emptyDataValue;\n }\n return params || col.emptyDataValue;\n },\n });\n }\n }\n\n if (this.config().showViewButton) {\n let route = '';\n const isRootList = this.isRootList() === undefined;\n\n if (this.viewRouteFallback() && isRootList) {\n route = this.viewRouteFallback() || '';\n } else {\n let viewResource = this.config().viewResource;\n if (!viewResource || viewResource === '') {\n viewResource = this.config().primaryResource;\n }\n\n const meta = this.resourceMeta(viewResource as Resource);\n if (meta !== undefined) {\n route = meta.route;\n }\n }\n\n columns.push({\n id: 'view' as FieldName,\n header: 'View',\n hideHeader: true,\n buttonConfig: {\n label: 'View',\n icon: 'arrow_forward',\n viewRoute: route,\n actionType: 'link',\n },\n });\n }\n\n return columns;\n });\n\n reloadListData(): void {\n this.store.reloadListData();\n }\n\n processedRowData = computed(() => {\n this.filter();\n this.relatedData();\n const data = this.store.listData();\n if (!data) return [];\n const columns = this.columns();\n\n return data.map((row) => {\n const updatedRow = { ...row };\n for (const col of columns) {\n if (col.valueGetter) {\n updatedRow[col.id] = col.valueGetter(row);\n } else {\n updatedRow[col.id] = row[col.id];\n }\n\n if (typeof col.valueFormatter === 'function') {\n updatedRow[col.id] = col.valueFormatter(updatedRow[col.id]);\n }\n }\n return updatedRow;\n });\n });\n\n filters = computed(() => {\n const configFilter = this.config().filter?.(this.relatedData()) || '';\n const inputFilter = this.filter();\n if (inputFilter && configFilter) {\n return `(${inputFilter}),(${configFilter})`;\n }\n if (inputFilter) {\n return `(${inputFilter})`;\n }\n return configFilter || '';\n });\n\n createResource(event: MouseEvent): void {\n event.stopPropagation();\n this.createMode.emit(true);\n }\n\n parentKey = computed(() => {\n if (this.relatedData() === undefined || this.childKey() === undefined) {\n return '';\n }\n const parent = this.config().parentRelation?.parentKey;\n return this.relatedData()?.[parent] || '';\n });\n\n childKey = computed(() => {\n if (!this.config().parentRelation) {\n return '';\n }\n return this.config().parentRelation?.childKey as string;\n });\n\n private getUniqueId(baseId: string, usedIds: Set<string>): string {\n if (!usedIds.has(baseId)) {\n return baseId;\n }\n\n let counter = 1;\n let newId = `${baseId}_${counter}`;\n while (usedIds.has(newId)) {\n counter++;\n newId = `${baseId}_${counter}`;\n }\n return newId;\n }\n\n ngOnInit(): void {\n const primaryResource = this.config().primaryResource;\n if (this.meta()) {\n this.store.resourceName.set(primaryResource);\n this.store.resourceMeta.set(this.meta());\n this.store.listColumns.set(this.config().listColumns || []);\n this.store.requireSearchToDisplayResults.set(this.config().requireSearchToDisplayResults || false);\n this.store.sorts.set(this.config().sorts || []);\n }\n\n this.store.filter.set(this.filters());\n this.store.disableCacheForFilterPii.set(this.config().disableCacheForFilterPii);\n\n runInInjectionContext(this.injector, () => {\n this.config().listColumns.forEach((element) => {\n if (!('additionalIds' in element)) {\n return;\n }\n element.additionalIds.forEach((id) => {\n if (id.resource === undefined) {\n return;\n }\n const meta = this.resourceMeta(id.resource);\n if (meta === undefined) {\n return;\n }\n const route = signal(meta.route);\n const resource = signal(id.resource);\n if (!this.resourceRefMap().has(resource())) {\n const ref = this.store.resourceList(route);\n if (ref === undefined) {\n return;\n }\n this.resourceRefMap.set(this.resourceRefMap().set(resource(), ref));\n }\n });\n });\n\n effect(() => {\n this.filter();\n this.relatedData();\n this.store.filter.set(this.filters());\n this.store.disableCacheForFilterPii.set(this.config().disableCacheForFilterPii);\n this.store.buildStoreListData();\n });\n });\n }\n}\n","<div [class]=\"linkCreateType() ? 'page-container hide' : 'page-container'\">\n <div class=\"header-container\" [class.show-background]=\"!config().collapsible\" [class.indent]=\"indentTitle()\">\n <h1 class=\"title\">{{ listTitle() }}</h1>\n <action-access-control-wrapper [actionContext]=\"createButtonContext()\">\n <div class=\"create-button\">\n <button mat-raised-button color=\"accent\" (click)=\"createResource($event)\">\n <div class=\"edit-text\">\n <mat-icon>create</mat-icon>\n <span class=\"edit-button-text\"> {{ createButtonLabel() }} </span>\n </div>\n </button>\n </div>\n </action-access-control-wrapper>\n </div>\n <div class=\"resource-container\">\n @if (config().searchable) {\n <mat-form-field class=\"search\">\n <input matInput #qry (keyup)=\"store.searchTokens.set(qry.value)\" placeholder=\"Search\" aria-label=\"Search\" />\n @if (searchableFields() !== '') {\n <mat-hint>Search {{ searchableFields() }}</mat-hint>\n }\n <mat-icon matPrefix>search</mat-icon>\n </mat-form-field>\n }\n <ccc-grid\n [rowData]=\"processedRowData()\"\n [columnDefs]=\"columns()\"\n [enableRowExpansion]=\"config().enableRowExpansion\"\n [detailTemplate]=\"expandedRowTemplate\">\n </ccc-grid>\n </div>\n</div>\n\n<ng-template #expandedRowTemplate let-rowData>\n <ng-container\n *ngComponentOutlet=\"\n compoundResourceComponent();\n inputs: {\n uuid: rowData.id,\n navAfterDelete: false,\n deleted: store.reloadListData.bind(store),\n resourceConfig: expansionConfig(),\n }\n \">\n </ng-container>\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, Injector, input, signal, Type, viewChild } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule, MatExpansionPanel } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ListViewConfig, RecordData, RootConfig } from '@cccteam/ccc-lib/src/types';\nimport { ResourceCreateComponent } from '../resource-create/resource-create.component';\nimport { ResourceListComponent } from '../resource-list/resource-list.component';\nimport { ResourceStore } from '../resource-store.service';\n\n@Component({\n standalone: true,\n selector: 'ccc-resource-list-create',\n templateUrl: './resource-list-create.component.html',\n styleUrl: './resource-list-create.component.scss',\n imports: [\n MatExpansionModule,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n ResourceCreateComponent,\n ResourceListComponent,\n NgTemplateOutlet,\n ],\n providers: [ResourceStore],\n})\nexport class ResourceListCreateComponent {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n compoundResourceComponent = input.required<Type<any>>();\n\n injector = inject(Injector);\n store = inject(ResourceStore);\n listChild = viewChild<ResourceListComponent, ResourceListComponent>('list', { read: ResourceListComponent });\n\n route = inject(ActivatedRoute);\n router = inject(Router);\n create = signal<boolean>(false);\n parentId = input<string>();\n parentData = input<RecordData>({});\n searchParams = input<Record<string, string>[]>([]);\n resourceConfig = input<ListViewConfig>();\n isRootList = input<boolean>(true);\n\n childKey = computed(() => {\n if (!this.config().parentRelation) {\n return '';\n }\n return this.config().parentRelation?.childKey as string;\n });\n\n filter = computed(() => {\n const filters = [];\n if (this.childKey() !== '' && this.parentKey() !== '') {\n filters.push(`${this.childKey()}:eq:${this.parentKey()}`);\n }\n return filters.join(',');\n });\n\n parentKey = computed(() => {\n if (this.parentData() === undefined || this.childKey() === undefined) {\n return '';\n }\n const parent = this.config().parentRelation?.parentKey;\n return this.parentData()?.[parent] || '';\n });\n\n config = computed(() => {\n const inputConfig = this.resourceConfig();\n if (inputConfig) {\n return inputConfig as ListViewConfig;\n }\n return this.rootConfig().parentConfig as ListViewConfig;\n });\n\n expPanel = viewChild<MatExpansionPanel, MatExpansionPanel>('expPanel', { read: MatExpansionPanel });\n\n rootConfig = computed(() => {\n return this.route.snapshot.data['config'] as RootConfig;\n });\n\n createLinkType = computed(() => {\n return this.config().loadCreatedResource && this.create();\n });\n\n createConfig = computed(() => {\n const config = this.config();\n if (Object.keys(config.createConfig).length !== 0) {\n return config.createConfig;\n }\n return config;\n });\n\n createResource(event: MouseEvent): void {\n event.stopPropagation();\n this.create.set(true);\n\n if (this.expPanel() && this.expPanel()?.closed) {\n this.expPanel()?.open();\n }\n }\n\n makeCreatePatches(): void {\n if (this.create()) {\n this.listChild()?.reloadListData();\n this.create.set(false);\n }\n }\n}\n","@if (config().collapsible) {\n <div class=\"page-container\">\n <mat-expansion-panel\n #expPanel\n [@.disabled]=\"true\"\n disabled=\"{{ !config().collapsible }}\"\n expanded=\"{{ !config().collapsible }}\">\n @if (config().collapsible || config().title) {\n <mat-expansion-panel-header>\n <mat-panel-title>\n <h1 class=\"title\">\n {{ config().title }}\n </h1>\n </mat-panel-title>\n @if (config().createTitle !== '') {\n <button\n mat-icon-button\n class=\"exp-panel-add-element-btn\"\n color=\"accent\"\n (click)=\"createResource($event)\"\n matTooltip=\"{{ config().createButtonLabel }}\"\n matTooltipPosition=\"above\">\n <mat-icon color=\"accent\">add_circle</mat-icon>\n </button>\n }\n </mat-expansion-panel-header>\n } @else {\n <div class=\"no-title-exp-panel-padding\"></div>\n }\n\n <ng-container *ngTemplateOutlet=\"resourceComponents\"></ng-container>\n </mat-expansion-panel>\n </div>\n} @else {\n <ng-container *ngTemplateOutlet=\"resourceComponents\"></ng-container>\n}\n\n<ng-template #resourceComponents>\n @if (create()) {\n <ccc-resource-create\n [resourceConfig]=\"createConfig()\"\n [parentData]=\"parentData()\"\n [loadCreatedResource]=\"config().loadCreatedResource\"\n (complete)=\"makeCreatePatches()\">\n </ccc-resource-create>\n }\n\n <ccc-resource-list\n #list\n [viewRoute]=\"rootConfig().routeData.route\"\n [resourceConfig]=\"config()\"\n [filter]=\"filter()\"\n [hideCreateButton]=\"create()\"\n [relatedData]=\"parentData()\"\n [parentId]=\"parentId()\"\n [linkCreateType]=\"createLinkType()\"\n [isRootList]=\"isRootList()\"\n (createMode)=\"create.set($event)\"\n [compoundResourceComponent]=\"compoundResourceComponent()\">\n </ccc-resource-list>\n</ng-template>\n","import { Component, computed, effect, input, Type, untracked, viewChild, ViewContainerRef } from '@angular/core';\nimport { ChildResourceConfig, ComponentConfig, FieldName, RecordData } from '@cccteam/ccc-lib/src/types';\nimport { ResourceStore } from '../resource-store.service';\n\n@Component({\n selector: 'ccc-resource-resolver',\n imports: [],\n templateUrl: './resource-resolver.component.html',\n styleUrl: './resource-resolver.component.scss',\n providers: [ResourceStore],\n})\nexport class ResourceResolverComponent {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n compoundResourceComponent = input.required<Type<any>>();\n resourceConfig = input<ChildResourceConfig>();\n\n config = computed(() => {\n return this.resourceConfig() as ComponentConfig;\n });\n\n dynamicSlot = viewChild.required<ViewContainerRef, ViewContainerRef>('dynamicSlot', { read: ViewContainerRef });\n\n parentData = input.required<RecordData>();\n\n constructor() {\n effect(() => {\n const parentData = this.parentData();\n const config = this.config();\n const params = config?.params;\n if (params === undefined || config === undefined) {\n return;\n }\n\n untracked(() => {\n this.dynamicSlot().clear();\n const component = config.component;\n switch (component) {\n case 'SwitchResolver': {\n let uuid = '';\n let caseConfig = {} as ChildResourceConfig;\n for (const c of params.cases) {\n if (parentData) {\n if (parentData[c.parentField] === c.caseId) {\n uuid = String(parentData[c.childId]);\n caseConfig = c.config;\n if ('parentRelation' in caseConfig) {\n caseConfig.parentRelation.childKey = '' as FieldName;\n caseConfig.parentRelation.parentKey = '' as FieldName;\n }\n break;\n }\n }\n }\n\n if (uuid == '') {\n return;\n }\n\n // Use dynamic import to avoid circular dependency\n const primaryComponentRef = this.dynamicSlot().createComponent(this.compoundResourceComponent());\n primaryComponentRef.setInput('resourceConfig', caseConfig);\n primaryComponentRef.setInput('uuid', uuid);\n primaryComponentRef.setInput('parentData', parentData);\n break;\n }\n default:\n console.warn('Component not found', component);\n // add default component to dynamic slot\n break;\n }\n });\n });\n }\n}\n","<ng-template #dynamicSlot></ng-template>","import { Component } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogActions, MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'ccc-delete-resource-confirmation-modal',\n imports: [MatDialogModule, MatFormFieldModule, MatDialogActions, MatButtonModule, MatInputModule],\n templateUrl: './delete-resource-confirmation-modal.component.html',\n styleUrls: ['./delete-resource-confirmation-modal.component.scss'],\n})\nexport class DeleteResourceConfirmationModalComponent {}\n","<div mat-dialog-title>Are you sure you want to delete this resource?</div>\n<mat-dialog-actions align=\"end\">\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"false\">Cancel</button>\n <button mat-raised-button color=\"accent\" [mat-dialog-close]=\"true\">Confirm</button>\n</mat-dialog-actions>\n","import { CommonModule, Location } from '@angular/common';\nimport {\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n input,\n model,\n OnInit,\n output,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { sparseFormData } from '@cccteam/ccc-lib/src/forms';\nimport {\n AlertLevel,\n DataType,\n FieldElement,\n ListViewConfig,\n RecordData,\n Resource,\n RESOURCE_META,\n RootConfig,\n RPCConfig,\n ViewConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\nimport { filter, tap } from 'rxjs';\nimport { ActionAccessControlWrapperComponent } from '../actions/action-button-smart/action-access-control-wrapper.component';\nimport { ActionButtonContext } from '../actions/actions.interface';\nimport { RpcButtonComponent } from '../actions/rpc-button/rpc-button.component';\nimport { DeleteResourceConfirmationModalComponent } from '../delete-resource-confirmation-modal/delete-resource-confirmation-modal.component';\nimport { FormStateService } from '../form-state.service';\nimport { civildateCoercion, flattenElements } from '../gui-constants';\nimport { ResourceCreateComponent } from '../resource-create/resource-create.component';\nimport { ResourceLayoutComponent } from '../resource-layout/resource-layout.component';\nimport { ResourceStore } from '../resource-store.service';\nimport { DeleteOperation, metadataTypeCoercion, UpdateOperation } from '../resources-helpers';\n\n@Component({\n selector: 'ccc-resource-view',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n RouterModule,\n MatButtonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatDividerModule,\n ResourceLayoutComponent,\n MatExpansionPanel,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n RpcButtonComponent,\n CommonModule,\n ActionAccessControlWrapperComponent,\n ResourceCreateComponent,\n ],\n templateUrl: './resource-view.component.html',\n styleUrl: './resource-view.component.scss',\n providers: [ResourceStore],\n})\nexport class ResourceViewComponent implements OnInit {\n resourceMeta = inject(RESOURCE_META);\n location = inject(Location);\n router = inject(Router);\n activatedRoute = inject(ActivatedRoute);\n notifications = inject(NotificationService);\n store = inject(ResourceStore);\n injector = inject(Injector);\n destroyRef = inject(DestroyRef);\n formState = inject(FormStateService);\n dialog = inject(MatDialog);\n\n editMode: WritableSignal<'edit' | 'view'> = signal('view');\n uuid = input.required<string>();\n config = input.required<ViewConfig | ListViewConfig>();\n relatedData = input<RecordData>({});\n compoundResourceView = input<boolean>(false);\n isDirty = signal(false);\n\n displayFormInvalidMessage = signal<boolean>(false);\n deleted = output<boolean>();\n navAfterDelete = input(true);\n\n showCreateForm = model(false);\n createConfig = computed(() => {\n if (Object.keys(this.config().createConfig || {}).length > 0) {\n return this.config().createConfig;\n }\n return this.config();\n });\n\n rootConfig = computed(() => {\n return this.activatedRoute.snapshot.data['config'] as RootConfig;\n });\n\n showCloseButton = computed(() => {\n const config = this.config();\n const showBackButton = config.showBackButton ?? true;\n if (config) {\n return showBackButton && config.primaryResource === this.rootConfig().parentConfig.primaryResource;\n }\n return showBackButton;\n });\n\n commonButtonConfig = computed(() => {\n const config = this.config();\n\n if (config === undefined) {\n return undefined;\n }\n\n if (config.shouldRenderActions === undefined) {\n return undefined;\n }\n\n return {\n meta: this.store.resourceMeta(),\n resourceData: this.relatedData(),\n config,\n };\n });\n\n editButtonContext = computed(() => {\n const commonConfig = this.commonButtonConfig();\n\n if (commonConfig === undefined) {\n return undefined;\n }\n\n return {\n actionType: 'edit',\n meta: commonConfig.meta,\n resourceData: commonConfig.resourceData,\n shouldRender: commonConfig.config.shouldRenderActions.edit,\n } satisfies ActionButtonContext;\n });\n\n deleteButtonContext = computed(() => {\n const commonConfig = this.commonButtonConfig();\n\n if (commonConfig === undefined) {\n return undefined;\n }\n\n return {\n actionType: 'delete',\n meta: commonConfig.meta,\n resourceData: commonConfig.resourceData,\n shouldRender: (data: RecordData): boolean => commonConfig.config.shouldRenderActions.delete(data),\n } satisfies ActionButtonContext;\n });\n\n inlineRpcConfigs = computed(() => {\n const config = this.config();\n if (config === undefined) {\n return [];\n }\n\n const rpcConfigs = config.rpcConfigs?.filter((rpc: RPCConfig) => rpc.placement === 'inline');\n\n return rpcConfigs?.map((config) => {\n return {\n config,\n context: {\n actionType: 'rpc',\n shouldRender: config.shouldRender,\n resourceData: this.relatedData(),\n } satisfies ActionButtonContext,\n };\n });\n });\n\n endRpcConfigs = computed(() => {\n const config = this.config();\n\n if (config === undefined) {\n return [];\n }\n\n const rpcConfigs = config.rpcConfigs?.filter((rpc: RPCConfig) => rpc.placement === 'end');\n\n return rpcConfigs?.map((config) => {\n return {\n config,\n context: {\n actionType: 'rpc',\n shouldRender: config.shouldRender,\n resourceData: this.relatedData(),\n } satisfies ActionButtonContext,\n };\n });\n });\n\n useExpansionPanel = computed(() => {\n const config = this.config();\n // TODO: Investigate why we're doing this check, it's weird because viewType is not part of the input configs\n if (config && 'viewType' in config && config.viewType !== 'View') {\n return false;\n }\n\n return config.collapsible || !this.compoundResourceView();\n });\n\n resourceConfigRouteSnapshot = computed(() => {\n return (\n this.config() ||\n (this.activatedRoute.snapshot.data['config'] as RootConfig)?.parentConfig ||\n ({} as ViewConfig | ListViewConfig)\n );\n });\n\n emptyFormGroup = new FormGroup({});\n\n form = computed(() => {\n const meta = this.store.resourceMeta();\n const resourceData = this.store.viewData();\n const config = this.config();\n\n if (meta === undefined || resourceData === undefined || config === undefined) {\n return this.emptyFormGroup;\n }\n\n const fg = new FormGroup({});\n const pristineValues: Record<string, DataType | null> = {};\n const allElements = flattenElements(config.elements);\n\n for (const field of meta.fields || []) {\n const isFieldNameRegistered = fg.get(field.fieldName) !== null;\n if (isFieldNameRegistered) {\n continue;\n }\n\n const findConfig = allElements.find((element) => element.type === 'field' && element.name === field.fieldName);\n const fieldConfig = findConfig as FieldElement | undefined;\n if (!fieldConfig) {\n continue;\n }\n\n let value: DataType | null = null;\n const stringValue = resourceData?.[field.fieldName] ? String(resourceData[field.fieldName]) : '';\n\n if (field.displayType === 'civildate' && stringValue) {\n value = civildateCoercion(stringValue);\n } else if (resourceData[field.fieldName] !== undefined) {\n value = resourceData[field.fieldName];\n }\n\n const control = new FormControl(value);\n\n if (fieldConfig.validators.length > 0) {\n control.setValidators(fieldConfig.validators);\n }\n\n fg.addControl(field.fieldName, control);\n pristineValues[field.fieldName] = value;\n }\n this.pristineFormValues = pristineValues;\n\n return fg;\n });\n\n pristineFormValues: Record<string, DataType | null> = {};\n\n route = computed(() => {\n const meta = this.store.resourceMeta();\n if (!meta) return '';\n return meta.consolidatedRoute || meta.route;\n });\n\n primaryKeys = computed(() => {\n const meta = this.store.resourceMeta();\n if (!meta) return [];\n return meta.fields\n .filter((field) => field.primaryKey)\n .sort((a, b) => a.primaryKey!.ordinalPosition - b.primaryKey!.ordinalPosition);\n });\n\n primaryKeyPath = computed(() => {\n const meta = this.store.resourceMeta();\n const isConsolidated = !!meta.consolidatedRoute;\n let resourceIdentifier = '';\n if (isConsolidated) {\n resourceIdentifier = '/' + String(meta.route);\n }\n return (\n resourceIdentifier +\n '/' +\n this.primaryKeys()\n .map((field) => this.store.viewData()[field.fieldName])\n .join('/')\n );\n });\n\n ngOnInit(): void {\n if (this.resourceMeta(this.config().primaryResource as Resource)) {\n this.store.resourceName.set(this.config().primaryResource as Resource);\n this.store.resourceMeta.set(this.resourceMeta(this.config().primaryResource as Resource));\n }\n\n this.inlineRpcConfigs();\n this.endRpcConfigs();\n }\n\n setEditMode(mode: 'edit' | 'view'): void {\n if (mode === 'view') {\n const changeData = sparseFormData(this.form(), this.pristineFormValues);\n if (Object.keys(changeData).length !== 0) {\n this.notifications.addGlobalNotification({\n message: 'You have unsaved changes.',\n link: '',\n level: AlertLevel.ERROR,\n });\n return;\n }\n this.editMode.set('view');\n } else if (mode === 'edit') {\n this.editMode.set('edit');\n }\n }\n\n saveForm(): void {\n if (!this.form().valid) {\n this.displayFormInvalidMessage.set(true);\n this.form().markAllAsTouched();\n return;\n }\n\n this.displayFormInvalidMessage.set(false);\n\n const resourceMeta = this.store.resourceMeta();\n if (!resourceMeta) {\n return;\n }\n\n const sparseData = sparseFormData(this.form(), this.pristineFormValues);\n const coercedSparseData = metadataTypeCoercion(sparseData, resourceMeta);\n\n const updatePatch: UpdateOperation = {\n op: 'patch',\n value: coercedSparseData,\n path: this.primaryKeyPath(),\n };\n\n this.pristineFormValues = this.form().getRawValue();\n\n if (Object.keys(coercedSparseData).length === 0) {\n return;\n }\n this.store\n .makePatches([updatePatch], this.route(), this.store.resourceName())\n .pipe(\n tap(() => {\n this.form().markAsPristine();\n this.setEditMode('view');\n this.formState.decrementDirtyForms();\n this.store.reloadViewData();\n }),\n )\n .subscribe();\n }\n\n resetForm(): void {\n this.form().reset();\n this.form().patchValue(this.pristineFormValues);\n this.setEditMode('view');\n if (this.form().dirty) {\n this.formState.decrementDirtyForms();\n }\n }\n\n confirmDeleteResource(): void {\n const existingDialog = this.dialog.openDialogs.find(\n (d) => d.componentInstance instanceof DeleteResourceConfirmationModalComponent,\n );\n\n const dialogRef =\n existingDialog ?? this.dialog.open(DeleteResourceConfirmationModalComponent, { delayFocusTrap: false });\n\n const result = dialogRef.afterClosed().pipe(\n tap((value) => {\n if (value === true) {\n console.debug('Deleting resource | ', this.config().title, '|', this.relatedId());\n this.deleteResource();\n }\n }),\n takeUntilDestroyed(this.destroyRef),\n );\n\n result.subscribe();\n }\n\n deleteResource(): void {\n const deletePatch: DeleteOperation = {\n op: 'remove',\n value: {},\n path: this.primaryKeyPath(),\n };\n\n this.store\n .makePatches([deletePatch], this.route(), this.store.resourceName())\n .pipe(\n tap(() => {\n this.deleted.emit(true);\n }),\n filter(() => this.compoundResourceView()),\n tap(() => {\n const navAfterDelete = this.navAfterDelete() !== false;\n if (navAfterDelete) {\n this.location.back();\n } else {\n this.showCreateForm.set(true);\n }\n }),\n )\n .subscribe();\n }\n\n relatedId(): string {\n const uuid = this.uuid();\n const relatedData = this.relatedData();\n const config = this.config();\n if (config.parentRelation?.parentKey) {\n return String(relatedData[config.parentRelation.parentKey]);\n }\n return uuid;\n }\n\n constructor() {\n effect(() => {\n console.debug('USAGE | New FormGroup subscription for: ', this.config().title);\n\n this.form()\n .valueChanges.pipe(\n tap(() => {\n const dirty = this.form().dirty;\n if (dirty !== this.isDirty()) {\n this.isDirty.set(dirty);\n if (dirty) {\n this.formState.incrementDirtyForms();\n } else {\n this.formState.decrementDirtyForms();\n }\n }\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n });\n\n effect(() => {\n const id = this.relatedId();\n const create = this.showCreateForm();\n this.store.uuid.set(id);\n if (!create) {\n this.store.buildStoreViewData();\n }\n });\n }\n\n createResource(): void {\n this.showCreateForm.set(false);\n this.store.buildStoreViewData();\n }\n}\n","@if (useExpansionPanel()) {\n <div class=\"resource-view\">\n <mat-expansion-panel [@.disabled]=\"true\" [disabled]=\"!config().collapsible\" [expanded]=\"!config().collapsible\">\n @if (config().title) {\n <mat-expansion-panel-header>\n <mat-panel-title>\n <h1 class=\"title\">{{ showCreateForm() ? 'Create' : '' }}{{ config().title }}</h1>\n </mat-panel-title>\n </mat-expansion-panel-header>\n } @else {\n <div class=\"no-title-exp-panel-padding\"></div>\n }\n <ng-container *ngTemplateOutlet=\"headerSlot\"></ng-container>\n @if (store.viewStatus() === 'resolved') {\n <div class=\"resource-container\" [class.form-edit-mode]=\"editMode() === 'edit'\">\n <form [formGroup]=\"form()\">\n <div class=\"resource row\">\n @if (showCreateForm()) {\n <ccc-resource-create\n [resourceConfig]=\"createConfig()\"\n [parentData]=\"relatedData()\"\n (complete)=\"createResource()\">\n </ccc-resource-create>\n } @else {\n <ng-container *ngTemplateOutlet=\"formSlot\"></ng-container>\n }\n </div>\n </form>\n <ng-container *ngTemplateOutlet=\"footerSlot\"></ng-container>\n </div>\n } @else {\n <div class=\"resource-container empty\">\n <div class=\"resource row\"></div>\n </div>\n }\n </mat-expansion-panel>\n </div>\n} @else {\n <div class=\"page-container\">\n @if (!showCreateForm()) {\n <ng-container *ngTemplateOutlet=\"headerSlot\"></ng-container>\n }\n @if (store.viewStatus() === 'resolved') {\n <div class=\"resource-container base-container-bg\" [class.form-edit-mode]=\"editMode() === 'edit'\">\n <form [formGroup]=\"form()\">\n <div class=\"resource row\">\n @if (showCreateForm()) {\n <ccc-resource-create\n [resourceConfig]=\"createConfig()\"\n [parentData]=\"relatedData()\"\n (complete)=\"createResource()\">\n </ccc-resource-create>\n } @else {\n <ng-container *ngTemplateOutlet=\"formSlot\"></ng-container>\n }\n </div>\n </form>\n </div>\n } @else {\n <div class=\"resource-container\">\n <div class=\"resource row empty\"></div>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"footerSlot\"></ng-container>\n </div>\n}\n\n<ng-template #formSlot>\n @for (element of config().elements; track element) {\n @if (element.type === 'section' || element.type === 'computedDisplayField' || element.type === 'padding') {\n <ccc-resource-layout-template\n [element]=\"element\"\n [meta]=\"store.resourceMeta()\"\n [fieldClass]=\"config().fieldClass\"\n [editMode]=\"editMode()\"\n [relatedData]=\"relatedData()\"\n [form]=\"form()\">\n </ccc-resource-layout-template>\n } @else {\n <ccc-resource-layout-template\n [element]=\"element\"\n [meta]=\"store.resourceMeta()\"\n [fieldClass]=\"config().fieldClass\"\n [pristineValue]=\"pristineFormValues[element.name]\"\n [editMode]=\"editMode()\"\n [relatedData]=\"relatedData()\"\n [form]=\"form()\">\n </ccc-resource-layout-template>\n }\n }\n</ng-template>\n\n<ng-template #headerSlot>\n <div class=\"header-container\">\n <div class=\"state-buttons\">\n @if (store.viewStatus() === 'resolved') {\n @for (rpc of inlineRpcConfigs(); track rpc.context) {\n <action-access-control-wrapper [actionContext]=\"rpc.context\">\n <ccc-rpc-button\n [rpcConfig]=\"rpc.config\"\n [relatedData]=\"relatedData()\"\n [primaryResource]=\"config().primaryResource\">\n </ccc-rpc-button>\n </action-access-control-wrapper>\n }\n @if (editMode() === 'view') {\n <action-access-control-wrapper [actionContext]=\"editButtonContext()\">\n <div class=\"edit-button\">\n <button mat-raised-button color=\"accent\" (click)=\"setEditMode('edit')\">\n <div class=\"button-text\">\n <mat-icon>edit</mat-icon>\n <span class=\"mode-text\"> Edit </span>\n </div>\n </button>\n </div>\n </action-access-control-wrapper>\n\n <action-access-control-wrapper [actionContext]=\"deleteButtonContext()\">\n <button mat-raised-button color=\"primary\" (click)=\"confirmDeleteResource()\">Delete</button>\n </action-access-control-wrapper>\n }\n\n @if (editMode() === 'edit') {\n @if (form().dirty) {\n <div class=\"unsaved message\">You have unsaved changes!</div>\n }\n @if (!form().valid && displayFormInvalidMessage()) {\n <div class=\"invalid message\">Please complete or fix required fields.</div>\n }\n <button mat-raised-button color=\"primary\" (click)=\"resetForm()\">Cancel</button>\n <button mat-raised-button color=\"accent\" (click)=\"saveForm()\" [disabled]=\"form().pristine\">Save</button>\n }\n\n @if (showCloseButton()) {\n <div class=\"close-button\">\n <button mat-icon-button color=\"warn\" (click)=\"location.back()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #footerSlot>\n @for (rpc of endRpcConfigs(); track rpc) {\n <action-access-control-wrapper [actionContext]=\"rpc.context\">\n <ccc-rpc-button\n [rpcConfig]=\"rpc.config\"\n [relatedData]=\"relatedData()\"\n [primaryResource]=\"config().primaryResource\">\n </ccc-rpc-button>\n </action-access-control-wrapper>\n }\n</ng-template>\n","import { Location } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n Injector,\n input,\n OnInit,\n output,\n signal,\n Type,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport {\n ChildResourceConfig,\n ParentResourceConfig,\n RecordData,\n Resource,\n RESOURCE_META,\n RootConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { ActionAccessControlWrapperComponent } from '../actions/action-button-smart/action-access-control-wrapper.component';\nimport { ActionButtonContext } from '../actions/actions.interface';\nimport { RpcButtonComponent } from '../actions/rpc-button/rpc-button.component';\nimport { ResourceArrayViewComponent } from '../resource-array-view/resource-array-view.component';\nimport { ResourceListCreateComponent } from '../resource-list-create/resource-list-create.component';\nimport { ResourceResolverComponent } from '../resource-resolver/resource-resolver.component';\nimport { ResourceStore } from '../resource-store.service';\nimport { ResourceViewComponent } from '../resource-view/resource-view.component';\n\n@Component({\n selector: 'compound-resource',\n templateUrl: './compound-resource.component.html',\n styleUrl: './compound-resource.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatIconModule,\n RouterModule,\n MatButtonModule,\n RpcButtonComponent,\n ResourceViewComponent,\n ResourceListCreateComponent,\n ResourceArrayViewComponent,\n ResourceResolverComponent,\n ActionAccessControlWrapperComponent,\n RouterModule,\n ],\n providers: [ResourceStore],\n})\nexport class CompoundResourceComponent implements OnInit {\n location = inject(Location);\n route = inject(ActivatedRoute);\n store = inject(ResourceStore);\n injector = inject(Injector);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n componentRef: Type<any> = CompoundResourceComponent;\n resourceMeta = inject(RESOURCE_META);\n\n resourceConfig = input<ParentResourceConfig | ChildResourceConfig>();\n isArrayChild = input<boolean>(false);\n uuid = input.required<string>();\n parentData = input<RecordData>();\n\n rootConfig = computed(() => this.route.snapshot.data['config'] as RootConfig);\n\n emptyOneToOne = signal(false);\n missingRoot = input(false);\n resourceCreate = output();\n deleted = output<boolean>();\n navAfterDelete = input<boolean>(true);\n navAfterDeleteConsideringRoot = computed(() => {\n const navAfterDeleteInput = this.navAfterDelete();\n if (navAfterDeleteInput === undefined) return true;\n return false;\n });\n\n hasElements = computed(() => {\n const config = this.primaryConfig();\n return config && (config.type === 'ListView' || config.type === 'View') && config.elements.length > 0;\n });\n\n primaryConfigParentId = computed(() => {\n const config = this.primaryConfig();\n const data = this.resolvedData();\n if (config.type === 'View' || config.type === 'ListView') {\n const parentKey = config.parentRelation?.parentKey;\n if (parentKey !== '') {\n return String(data[parentKey]);\n }\n }\n return this.uuid();\n });\n\n primaryConfig = computed(() => {\n const config = this.resourceConfig();\n if (config) {\n return config;\n }\n return this.rootConfig().parentConfig;\n });\n\n title = computed(() => {\n if (this.isArrayChild()) {\n return '';\n }\n const config = this.primaryConfig();\n if (config.type !== 'Component') {\n return config.title;\n }\n return '';\n });\n\n isRootConfig = computed(() => {\n return this.resourceConfig() === undefined;\n });\n\n configs = computed(() => {\n if (this.hasElements() && this.emptyOneToOne()) {\n return [];\n }\n\n if (this.isRootConfig()) {\n return this.rootConfig().relatedConfigs;\n }\n\n const config = this.primaryConfig();\n if (config.type === 'ListView' || config.type === 'View') {\n return config.relatedConfigs;\n }\n return [];\n });\n\n rpcConfigs = computed(() => {\n const isRootConfig = this.isRootConfig();\n const rootConfig = this.rootConfig();\n\n if (isRootConfig === undefined || rootConfig === undefined) {\n return [];\n }\n\n if (!isRootConfig || rootConfig.rpcConfigs === undefined) {\n return [];\n }\n\n return rootConfig.rpcConfigs?.map((config) => ({\n config,\n context: {\n actionType: 'rpc',\n shouldRender: config.shouldRender,\n resourceData: this.resolvedData(),\n } satisfies ActionButtonContext,\n }));\n });\n hasRpcConfigs = computed(() => !!this.rpcConfigs() && this.rpcConfigs()!.length > 0);\n\n resolvedData = computed(() => {\n if (Object.keys(this.store.viewData()).length > 0) {\n return this.store.viewData() as RecordData;\n }\n\n return this.parentData() || ({} as RecordData);\n });\n\n ngOnInit(): void {\n const resource = this.primaryConfig().primaryResource as Resource;\n const meta = this.resourceMeta(resource);\n\n if (meta) {\n this.store.resourceName.set(resource);\n this.store.resourceMeta.set(meta);\n }\n }\n\n constructor() {\n effect(() => {\n this.store.uuid.set(this.primaryConfigParentId());\n\n const c = this.primaryConfig();\n if (this.missingRoot()) {\n return;\n }\n if (c.type === 'View') {\n this.store.buildStoreViewData();\n } else if (c.type === 'ListView') {\n this.store.buildStoreListData();\n this.store.buildStoreViewData();\n }\n });\n }\n\n goBack(): void {\n this.location.back();\n }\n}\n","<div class=\"page-container\">\n <div class=\"header-container\">\n <div class=\"title\" [class.title-without-back]=\"title()\">\n @if (title() !== '') {\n <h1>{{ title() }}</h1>\n }\n </div>\n </div>\n\n @if (hasElements() || configs().length > 0) {\n <div class=\"resource-container\" [class.empty-elements]=\"!hasElements()\">\n @let primaryConfigRef = primaryConfig();\n @if (primaryConfigRef.type === 'View' || primaryConfigRef.type === 'ListView') {\n <ccc-resource-view\n [uuid]=\"uuid()\"\n [config]=\"primaryConfigRef\"\n [relatedData]=\"resolvedData()\"\n [showCreateForm]=\"missingRoot()\"\n [compoundResourceView]=\"true\"\n [navAfterDelete]=\"navAfterDeleteConsideringRoot()\"\n (createChange)=\"resourceCreate.emit()\"\n (deleted)=\"deleted.emit(true)\">\n </ccc-resource-view>\n }\n\n @for (config of configs(); track config) {\n @let hasrelatedConfigs = 'relatedConfigs' in config && config.relatedConfigs.length > 0;\n @if (hasrelatedConfigs) {\n <compound-resource [uuid]=\"primaryConfigParentId()\" [parentData]=\"resolvedData()\" [resourceConfig]=\"config\">\n </compound-resource>\n } @else if (config.type === 'ListView') {\n <ccc-resource-list-create\n [resourceConfig]=\"config\"\n [parentData]=\"resolvedData()\"\n [isRootList]=\"false\"\n [parentId]=\"primaryConfigParentId()\"\n [compoundResourceComponent]=\"componentRef\">\n </ccc-resource-list-create>\n } @else if (config.type === 'Array') {\n <ccc-resource-array-view\n [resourceConfig]=\"config\"\n [parentData]=\"store.viewData()\"\n [compoundResourceComponent]=\"componentRef\">\n </ccc-resource-array-view>\n } @else if (config.type === 'View') {\n @let relatedId = resolvedData()[config.parentRelation.parentKey] || primaryConfigParentId();\n @if (relatedId) {\n <ccc-resource-view\n [navAfterDelete]=\"navAfterDeleteConsideringRoot()\"\n [uuid]=\"relatedId + ''\"\n [config]=\"config\"\n [relatedData]=\"resolvedData()\"></ccc-resource-view>\n }\n } @else if (config.type === 'Component') {\n <ccc-resource-resolver\n [parentData]=\"resolvedData()\"\n [resourceConfig]=\"config\"\n [compoundResourceComponent]=\"componentRef\">\n </ccc-resource-resolver>\n }\n }\n @if (hasRpcConfigs()) {\n <div class=\"rpc-buttons-container\">\n @for (rpc of rpcConfigs(); track rpc.config.label) {\n <action-access-control-wrapper [actionContext]=\"rpc.context\">\n <ccc-rpc-button\n [rpcConfig]=\"rpc.config\"\n [relatedData]=\"resolvedData()\"\n [primaryResource]=\"primaryConfig().primaryResource\">\n </ccc-rpc-button>\n </action-access-control-wrapper>\n }\n </div>\n }\n </div>\n }\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'camelCaseToTitle',\n})\nexport class CamelCaseToTitlePipe implements PipeTransform {\n transform(value: string): string {\n if (!value) {\n return value;\n }\n\n if (value === value.toUpperCase() && !/[0-9]/.test(value)) {\n return value;\n }\n\n let transformed = value.replace(/([A-Z])/g, ' $1');\n transformed = transformed.replace(/([a-zA-Z])([0-9])/g, '$1 $2');\n transformed = transformed.trim();\n transformed = transformed.charAt(0).toUpperCase() + transformed.slice(1);\n\n return transformed;\n }\n}\n","import { Component, computed, input, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule, TooltipPosition } from '@angular/material/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { ActionButtonConfig } from '@cccteam/ccc-lib/src/types';\n\n@Component({\n selector: 'ccc-table-button',\n standalone: true,\n imports: [MatButtonModule, MatIconModule, MatTooltipModule, RouterModule],\n templateUrl: './table-button.component.html',\n styleUrl: './table-button.component.scss',\n})\nexport class TableButtonComponent<T> {\n config = input.required<ActionButtonConfig>();\n\n rowData = input.required<T>();\n tooltipPosition = input<TooltipPosition>('above' as TooltipPosition);\n color = input<string>('');\n disabled = signal<boolean>(false);\n viewRoute = input<string>('');\n id = input<string>('');\n\n link = computed(() => {\n const viewRoute = this.viewRoute();\n const id = this.id();\n\n if (!viewRoute || !id) {\n return '';\n }\n\n if (!viewRoute.startsWith('/')) {\n return `${viewRoute}/${id}`;\n }\n\n return `${viewRoute}/${id}`;\n });\n\n callAction(): void {\n const rowData = this.rowData();\n const action = this.config().action;\n if (rowData && action !== undefined) {\n const id = 'id' as keyof T;\n const idVal = rowData[id] as string;\n action({ id: idVal });\n }\n }\n}\n","<span\n [matTooltip]=\"disabled() ? config().disabledLabel : config().label\"\n [matTooltipPosition]=\"tooltipPosition()\"\n class=\"parent\">\n @if (config().actionType === 'link') {\n <a [routerLink]=\"viewRoute()\">\n <button mat-icon-button [disabled]=\"disabled()\" [color]=\"config().color\">\n <mat-icon>{{ config().icon }}</mat-icon>\n </button>\n </a>\n } @else if (config().actionType === 'function') {\n <button mat-icon-button (click)=\"callAction()\" [disabled]=\"disabled()\" [color]=\"color()\">\n <mat-icon>{{ config().icon }}</mat-icon>\n </button>\n }\n</span>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input, output, TemplateRef } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { CamelCaseToTitlePipe } from '@cccteam/ccc-lib/src/ccc-camel-case-to-title';\nimport { ColumnConfig, RecordData } from '@cccteam/ccc-lib/src/types';\nimport { GridModule, SelectableMode, SelectableSettings } from '@progress/kendo-angular-grid';\nimport { TableButtonComponent } from './table-button/table-button.component';\n\n@Component({\n selector: 'ccc-grid',\n standalone: true,\n imports: [\n GridModule,\n CommonModule,\n TableButtonComponent,\n CamelCaseToTitlePipe,\n RouterModule,\n MatIconButton,\n MatIconModule,\n MatTooltipModule,\n ],\n template: `\n <kendo-grid\n [data]=\"rowData()\"\n filterable=\"menu\"\n [sortable]=\"true\"\n scrollable=\"none\"\n [selectable]=\"selectionMode()\"\n [selectedKeys]=\"selectedKeys\"\n kendoGridSelectBy=\"id\"\n (selectedKeysChange)=\"onSelectedKeysChange($event)\">\n @if (selectionMode() !== false) {\n <kendo-grid-checkbox-column\n [width]=\"40\"\n [showSelectAll]=\"selectionType() === 'multiple'\"></kendo-grid-checkbox-column>\n }\n @for (col of columnDefs(); track col.id + col.header) {\n @if (col.buttonConfig) {\n <kendo-grid-column\n [field]=\"col.id\"\n [filterable]=\"false\"\n [sortable]=\"false\"\n [width]=\"66\"\n [resizable]=\"col.resizable ?? true\">\n <ng-template kendoGridHeaderTemplate> </ng-template>\n <ng-template kendoGridCellTemplate let-dataItem>\n @if (col.buttonConfig.actionType === 'link' && col.buttonConfig.viewRoute) {\n <a\n mat-icon-button\n [routerLink]=\"['/', col.buttonConfig.viewRoute, dataItem['id']]\"\n [matTooltip]=\"col.buttonConfig.label || ''\"\n [matTooltipPosition]=\"col.tooltipPosition || 'above'\">\n <mat-icon>{{ col.buttonConfig.icon || 'arrow_forward' }}</mat-icon>\n </a>\n } @else {\n <ccc-table-button\n [config]=\"col.buttonConfig\"\n [rowData]=\"dataItem\"\n [tooltipPosition]=\"col.tooltipPosition || 'above'\"\n [viewRoute]=\"col.buttonConfig.viewRoute || ''\"\n [id]=\"dataItem['id']\">\n </ccc-table-button>\n }\n </ng-template>\n </kendo-grid-column>\n } @else {\n @if (col.width) {\n <kendo-grid-column [field]=\"col.id\" [width]=\"col.width\" [resizable]=\"col.resizable ?? true\">\n <ng-template kendoGridHeaderTemplate>\n @if (!col.hideHeader) {\n <span class=\"col-header\">{{ col.header || col.id | camelCaseToTitle }}</span>\n }\n </ng-template>\n <ng-template kendoGridCellTemplate let-dataItem>{{ dataItem[col.id] }} </ng-template>\n </kendo-grid-column>\n } @else {\n <kendo-grid-column [field]=\"col.id\" [resizable]=\"col.resizable ?? true\">\n <ng-template kendoGridHeaderTemplate>\n @if (!col.hideHeader) {\n <span class=\"col-header\">{{ col.header || col.id | camelCaseToTitle }}</span>\n }\n </ng-template>\n <ng-template kendoGridCellTemplate let-dataItem>{{ dataItem[col.id] }} </ng-template>\n </kendo-grid-column>\n }\n }\n }\n @if (enableRowExpansion() && detailTemplate()) {\n <ng-template kendoGridDetailTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"detailTemplate()!; context: { $implicit: dataItem }\"></ng-container>\n </ng-template>\n }\n <ng-template kendoGridNoRecordsTemplate>\n <div style=\"text-align: center; padding: 20px;\">No records found</div>\n </ng-template>\n </kendo-grid>\n `,\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n }\n kendo-grid {\n height: 100%;\n }\n .col-header {\n font-weight: bold;\n }\n app-table-button {\n position: relative;\n z-index: 10;\n }\n a[mat-button] {\n position: relative;\n z-index: 11;\n }\n ::ng-deep .k-grid .k-grid-aria-root {\n overflow-x: auto; /* Allow horizontal scrolling */\n overflow-y: hidden; /* Keep vertical behavior as needed */\n }\n ::ng-deep .k-grid .k-detail-cell {\n padding: 16px;\n }\n `,\n ],\n})\nexport class AppGridComponent {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n rowData = input<any[]>([]);\n columnDefs = input<ColumnConfig[]>([]);\n enableRowExpansion = input<boolean>(false);\n detailTemplate = input<TemplateRef<unknown>>();\n selectionType = input<'multiple' | 'single' | 'none'>('none');\n selectedRows = output<RecordData[]>();\n\n public selectedKeys: number[] = [];\n\n onSelectedKeysChange(keys: number[]): void {\n this.selectedKeys = keys;\n const selectedRows = this.rowData().filter((row: any) => keys.includes(row.id));\n this.selectedRows.emit(selectedRows);\n }\n\n selectionMode = computed(() => {\n if (this.selectionType() === 'none') {\n return false;\n } else if (this.selectionType() === 'single') {\n return {\n mode: 'single' as SelectableMode,\n checkboxOnly: true,\n } as SelectableSettings;\n } else {\n return {\n mode: 'multiple' as SelectableMode,\n checkboxOnly: true,\n } as SelectableSettings;\n }\n });\n}\n","import { computed, inject, Injectable, OnDestroy, signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport {\n AlertLevel,\n IDLE_KEEPALIVE_DURATION,\n IDLE_SESSION_DURATION,\n IDLE_WARNING_DURATION,\n} from '@cccteam/ccc-lib/src/types';\nimport { UiCoreService } from '@cccteam/ccc-lib/src/ui-core-service';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\nimport { interval, Subscription } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IdleService implements OnDestroy {\n private auth = inject(AuthService);\n private core = inject(UiCoreService);\n private router = inject(Router);\n private notifications = inject(NotificationService);\n\n private readonly sessionDuration = inject(IDLE_SESSION_DURATION);\n private readonly warningDuration = inject(IDLE_WARNING_DURATION);\n private readonly keepAliveDuration = inject(IDLE_KEEPALIVE_DURATION);\n private readonly idleCheckFrequency = 1000;\n private readonly warningThreshold = this.sessionDuration - this.warningDuration;\n\n public readonly isActive = signal(false);\n private lastActivityTimestamp: WritableSignal<number> = signal(0);\n private tick = signal(Date.now()); // A signal to represent the current time\n\n public readonly secondsIdle = computed(() => {\n if (!this.isActive() || this.lastActivityTimestamp() === 0) {\n return 0;\n }\n // Depends on tick() to force re-evaluation as time passes\n return Math.floor((this.tick() - this.lastActivityTimestamp()) / 1000);\n });\n\n public readonly isWarning = computed(() => this.secondsIdle() >= this.warningThreshold);\n public readonly countdown = computed(() => {\n if (!this.isWarning()) {\n return 0;\n }\n const remaining = this.sessionDuration - this.secondsIdle();\n return Math.max(0, remaining);\n });\n\n private alertId: number | undefined;\n private mainTickerSubscription: Subscription | undefined;\n\n private readonly activityEvents = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart', 'click'];\n\n constructor() {\n interval(this.keepAliveDuration * 1000)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.checkSession());\n }\n\n ngOnDestroy(): void {\n this.stop();\n }\n\n /**\n * Starts the idle monitoring service.\n */\n start(): void {\n if (this.isActive()) {\n return;\n }\n this.isActive.set(true);\n this.lastActivityTimestamp.set(Date.now());\n this.addActivityListeners();\n this.startMainTicker();\n }\n\n /**\n * Stops the idle monitoring service and cleans up timers and alerts.\n */\n stop(): void {\n this.isActive.set(false);\n this.mainTickerSubscription?.unsubscribe();\n this.removeActivityListeners();\n this.dismissWarningAlert();\n }\n\n /**\n * Logs out the user due to inactivity and stops the service.\n */\n logoutAndStop(): void {\n this.stop();\n\n this.router.navigate([this.auth.loginRoute()]);\n this.core.publishError({\n message: 'You have been logged out due to inactivity.',\n level: AlertLevel.INFO,\n link: '',\n });\n }\n\n private startMainTicker(): void {\n this.mainTickerSubscription = interval(this.idleCheckFrequency).subscribe(() => {\n this.tick.set(Date.now());\n\n if (this.secondsIdle() >= this.sessionDuration) {\n this.logoutAndStop();\n return;\n }\n\n if (this.isWarning()) {\n this.showOrUpdateWarningAlert(this.countdown());\n } else {\n this.dismissWarningAlert();\n }\n });\n }\n\n private checkSession(): void {\n if (this.auth.authenticated()) {\n this.auth.checkUserSession().subscribe({\n next: () => {\n if (!this.auth.authenticated()) {\n this.logoutAndStop();\n }\n },\n });\n }\n }\n\n setLastActivity(): void {\n this.lastActivityTimestamp.set(Date.now());\n }\n boundActivity = this.setLastActivity.bind(this);\n\n private addActivityListeners(): void {\n this.activityEvents.forEach((event) => {\n document.addEventListener(event, this.boundActivity, true);\n });\n }\n\n private removeActivityListeners(): void {\n this.activityEvents.forEach((event) => {\n document.removeEventListener(event, this.boundActivity, true);\n });\n }\n\n private showOrUpdateWarningAlert(countdown: number): void {\n const message = `You will be logged out in ${countdown} seconds due to inactivity.`;\n if (this.alertId !== undefined) {\n this.notifications.updateNotification({ id: this.alertId, level: AlertLevel.INFO, link: '', message });\n } else {\n this.alertId = this.notifications.addGlobalNotification({\n message,\n level: AlertLevel.INFO,\n link: '',\n });\n }\n }\n\n private dismissWarningAlert(): void {\n if (this.alertId !== undefined) {\n this.notifications.dismissGlobalNotificationById(this.alertId);\n this.alertId = undefined;\n }\n }\n}\n","import { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { isEqual } from 'lodash-es';\n\n/**\n * Compares two objects and returns a sparse object containing only the differing key-value pairs\n * @param data - object to compare\n * @param compareData - object to compare against\n * @returns Partial<T>\n * @example sparseData<UserCreate>(this.user, initUser)\n */\nexport function sparseData<T extends Record<string, unknown>>(data: T, compareData: T): Partial<T> {\n const sparseData: Partial<T> = {};\n\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n if (!isEqual(data[key], compareData[key])) {\n sparseData[key] = data[key];\n }\n }\n }\n\n return sparseData;\n}\n\n/**\n * Iterates through a form group's controls and returns a sparse object with only the changed values.\n * @param form - The form group to iterate through\n * @param compareData - The object to compare the form's values to\n * @returns - A sparse object with only the changed values\n * @example sparseFormData<UserCreate>(this.userForm, initUser)\n */\nexport function sparseFormData<T>(form: FormGroup, compareData: T): T {\n const sparseFormData: T = {} as T;\n for (const key in form.controls) {\n if (Object.prototype.hasOwnProperty.call(form.controls, key)) {\n const control = form.controls[key];\n const controlValue = control.value;\n const compareValue = compareData[key as keyof T];\n if (controlValue !== compareValue) {\n sparseFormData[key as keyof T] = controlValue as T[keyof T];\n }\n }\n }\n return sparseFormData;\n}\n\n/**\n * Recursively cleans a FormGroup or FormArray, removing controls with empty string values.\n * Similar to sparseFormData, but doesn't compare to an initial state\n * @param control - The FormGroup or FormArray to clean.\n * @returns A cleaned object with non-empty values.\n */\nexport function cleanStringForm<T>(control: AbstractControl): T | undefined {\n if (control instanceof FormGroup) {\n const cleanedGroup: Record<string, unknown> = {};\n for (const key of Object.keys(control.controls)) {\n const childControl = control.get(key);\n if (childControl) {\n const cleanedValue = cleanStringForm(childControl);\n if (cleanedValue !== undefined && cleanedValue !== null && cleanedValue !== '') {\n cleanedGroup[key] = cleanedValue;\n }\n }\n }\n return cleanedGroup as T;\n } else if (control instanceof FormArray) {\n const cleanedArray = control.controls\n .map((childControl) => cleanStringForm(childControl))\n .filter((item) => item !== undefined && item !== null && item !== '');\n return cleanedArray as unknown as T;\n } else {\n return control.value !== '' ? control.value : undefined;\n }\n}\n","/*\n * Public API Surface of ccc-lib\n */\n\n// Auth service\nexport * from './auth-service';\n\n// UI Core service\nexport * from './ui-core-service';\n\n// Auth directives\nexport * from './auth-has-permission';\n\n// Auth forms\nexport * from './auth-forms';\n\n// Auth guards\nexport * from './auth-authentication-guard';\nexport * from './auth-authorization-guard';\n\n// Util\nexport * from './util-request-options';\n\n// Types\nexport * from './types';\n\n// Ui components\nexport * from './ui-alert';\nexport * from './ui-sidenav';\n\n// Ui interceptor\nexport * from './ui-interceptor';\n\n// Ui services\nexport * from './ui-notification-service';\n\n// Resources\nexport * from './ccc-resource';\n\n// Camel case pipe\nexport * from './ccc-camel-case-to-title';\n\n// Grid\nexport * from './ccc-grid';\n\n// Idle\nexport * from './ui-idle-service';\n\n// Forms\nexport * from './forms';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["API_URL","FRONTEND_LOGIN_PATH","SESSION_PATH","PERMISSION_REQUIRED","errorOptions","NotificationService","AuthService","ReadPermission","UpdatePermission","BASE_URL","map","i2","i4","UiCoreService","HasPermissionDirective","catchError","CUSTOM_HTTP_REQUEST_OPTIONS","AlertLevel","createResourceValidator","defaultEmptyFieldValue","METHOD_META","i1","RESOURCE_META","i3","i6","i8","i9","i5","validatorsPresent","rpcConfigDefaults","CamelCaseToTitlePipe","cleanStringForm","AppGridComponent","sparseFormData","IDLE_SESSION_DURATION","IDLE_WARNING_DURATION","IDLE_KEEPALIVE_DURATION"],"mappings":"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"}
1
+ {"version":3,"file":"cccteam-ccc-lib.mjs","sources":["../../../projects/ccc-lib/src/auth-service/auth.service.ts","../../../projects/ccc-lib/src/ui-core-service/ui-core.service.ts","../../../projects/ccc-lib/src/auth-has-permission/has-permission.directive.ts","../../../projects/ccc-lib/src/auth-forms/ccc-field/ccc-field.component.ts","../../../projects/ccc-lib/src/auth-authentication-guard/authentication.guard.ts","../../../projects/ccc-lib/src/auth-authorization-guard/authorization.guard.ts","../../../projects/ccc-lib/src/util-request-options/request-options.ts","../../../projects/ccc-lib/src/types/resource-types.ts","../../../projects/ccc-lib/src/types/configs.ts","../../../projects/ccc-lib/src/types/notification-message.ts","../../../projects/ccc-lib/src/types/permissions.ts","../../../projects/ccc-lib/src/types/resource-meta.ts","../../../projects/ccc-lib/src/types/tokens.ts","../../../projects/ccc-lib/src/types/validators.ts","../../../projects/ccc-lib/src/ui-alert/alert.component.ts","../../../projects/ccc-lib/src/ui-alert/alert.component.html","../../../projects/ccc-lib/src/ui-sidenav/sidenav.component.ts","../../../projects/ccc-lib/src/ui-sidenav/sidenav.component.html","../../../projects/ccc-lib/src/ui-interceptor/api.interceptor.ts","../../../projects/ccc-lib/src/ui-notification-service/notification.service.ts","../../../projects/ccc-lib/src/ccc-resource/actions/action-button-smart/action-access-control-wrapper.component.ts","../../../projects/ccc-lib/src/ccc-resource/gui-constants.ts","../../../projects/ccc-lib/src/ccc-resource/padding-element/padding-element.component.ts","../../../projects/ccc-lib/src/ccc-resource/padding-element/padding-element.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/computed-field/computed-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/computed-field/computed-field.component.html","../../../projects/ccc-lib/src/ccc-resource/empty-readonly-field/empty-readonly-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/empty-readonly-field/empty-readonly-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-store.service.ts","../../../projects/ccc-lib/src/ccc-resource/form-state.service.ts","../../../projects/ccc-lib/src/ccc-resource/leave-page-confirmation-modal/leave-page-confirmation-modal.component.ts","../../../projects/ccc-lib/src/ccc-resource/leave-page-confirmation-modal/leave-page-confirmation-modal.component.html","../../../projects/ccc-lib/src/ccc-resource/can-deactivate.guard.ts","../../../projects/ccc-lib/src/ccc-resource/resources-helpers.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/base-field.directive.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/boolean-field/boolean-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/boolean-field/boolean-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/date-field/date-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/date-field/date-field.component.html","../../../projects/ccc-lib/src/ccc-resource/concat-fns.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/enumerated-field/enumerated-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/enumerated-field/enumerated-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/nullboolean-field/nullboolean-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/nullboolean-field/nullboolean-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/number-field/number-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/number-field/number-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/text-field/text-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/fields/text-field/text-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-field/resource-field.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-field/resource-field.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-layout/resource-layout.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-layout/resource-layout.component.html","../../../projects/ccc-lib/src/ccc-resource/base-rpc-modal/base-rpc-modal.component.ts","../../../projects/ccc-lib/src/ccc-resource/base-rpc-modal/base-rpc-modal.component.html","../../../projects/ccc-lib/src/ccc-resource/actions/rpc-button/rpc-button.component.ts","../../../projects/ccc-lib/src/ccc-resource/actions/rpc-button/rpc-button.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-create/resource-create.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-create/resource-create.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-array-view/resource-array-view.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-array-view/resource-array-view.component.html","../../../projects/ccc-lib/src/ccc-resource/format-fns.ts","../../../projects/ccc-lib/src/ccc-resource/resource-list/resource-list.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-list/resource-list.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-list-create/resource-list-create.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-list-create/resource-list-create.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-resolver/resource-resolver.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-resolver/resource-resolver.component.html","../../../projects/ccc-lib/src/ccc-resource/delete-resource-confirmation-modal/delete-resource-confirmation-modal.component.ts","../../../projects/ccc-lib/src/ccc-resource/delete-resource-confirmation-modal/delete-resource-confirmation-modal.component.html","../../../projects/ccc-lib/src/ccc-resource/resource-view/resource-view.component.ts","../../../projects/ccc-lib/src/ccc-resource/resource-view/resource-view.component.html","../../../projects/ccc-lib/src/ccc-resource/compound-resource/compound-resource.component.ts","../../../projects/ccc-lib/src/ccc-resource/compound-resource/compound-resource.component.html","../../../projects/ccc-lib/src/ccc-camel-case-to-title/camel-case-to-title.pipe.ts","../../../projects/ccc-lib/src/ccc-grid/table-button/table-button.component.ts","../../../projects/ccc-lib/src/ccc-grid/table-button/table-button.component.html","../../../projects/ccc-lib/src/ccc-grid/ccc-grid.component.ts","../../../projects/ccc-lib/src/ui-idle-service/idle.service.ts","../../../projects/ccc-lib/src/forms/index.ts","../../../projects/ccc-lib/src/index.ts","../../../projects/ccc-lib/src/cccteam-ccc-lib.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, signal } from '@angular/core';\nimport {\n API_URL,\n FRONTEND_LOGIN_PATH,\n Permission,\n PERMISSION_REQUIRED,\n PermissionScope,\n Resource,\n SESSION_PATH,\n SessionInfo\n} from '@cccteam/ccc-lib/src/types';\nimport { errorOptions } from '@cccteam/ccc-lib/src/util-request-options';\nimport { map, Observable, tap } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private apiUrl = inject(API_URL);\n private loginUrl = inject(FRONTEND_LOGIN_PATH);\n private sessionUrl = inject(SESSION_PATH);\n\n http = inject(HttpClient);\n private authenticatedSignal = signal(false);\n private sessionInfoSignal = signal({} as SessionInfo);\n\n redirectUrl = signal('');\n authenticated = this.authenticatedSignal.asReadonly();\n sessionInfo = this.sessionInfoSignal.asReadonly();\n\n constructor() {\n this.initializePermissionFn();\n }\n\n private static permissionFn: (resource: Resource, permission: Permission) => boolean;\n\n hasPermission(scope?: PermissionScope): boolean {\n if (!scope) return true;\n const resourcePermissions = this.sessionInfo().permissions?.[scope.domain]?.[scope.resource];\n return Array.isArray(resourcePermissions) && resourcePermissions.includes(scope.permission);\n }\n\n static requiresPermission(resource: Resource, permission: Permission): boolean {\n if (!AuthService.permissionFn) {\n throw new Error(\n `AuthState has not been initialized. Ensure AuthState is provided in your module or instantiated at least once.`,\n );\n }\n return AuthService.permissionFn(resource, permission);\n }\n\n private initializePermissionFn(): void {\n if (!AuthService.permissionFn) {\n AuthService.permissionFn = inject(PERMISSION_REQUIRED);\n }\n }\n\n /**\n * Logs a user out.\n *\n * @returns Observable with a boolean indicating whether they were logged out.\n */\n logout(): Observable<boolean> {\n return this.http\n .delete(`${this.apiUrl}/${this.sessionUrl}`, errorOptions(false))\n .pipe(map(() => true))\n .pipe(\n tap(() => {\n this.authenticatedSignal.set(false);\n this.sessionInfoSignal.set({} as SessionInfo);\n }),\n );\n }\n\n /**\n * Checks a user's session with the server.\n *\n * @returns Observable with the user session info\n */\n checkUserSession(): Observable<SessionInfo> {\n return this.http.get<SessionInfo>(`${this.apiUrl}/${this.sessionUrl}`, errorOptions(false)).pipe(\n tap((sessionInfo) => {\n this.authenticatedSignal.set(!!sessionInfo?.authenticated);\n this.sessionInfoSignal.set(sessionInfo);\n }),\n );\n }\n\n loginRoute(): string {\n return this.loginUrl;\n }\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { CreateNotificationMessage } from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UiCoreService {\n notifications = inject(NotificationService);\n loadingSignal = signal([] as string[]);\n sidenavOpened = signal(true);\n currentSidenavIdentifier = signal('');\n\n private loading = this.loadingSignal.asReadonly();\n isLoading = computed(() => this.loading().length > 0);\n\n publishError(message: CreateNotificationMessage): void {\n this.notifications.addGlobalNotification(message);\n }\n\n beginActivity(process: string): void {\n if (!this.loading().includes(process)) {\n this.loadingSignal.update((current) => [...current, process]);\n }\n }\n\n endActivity(process: string): void {\n this.loadingSignal.update((current) => current.filter((p) => p !== process));\n }\n\n toggleSidenav(): void {\n this.sidenavOpened.update((opened) => !opened);\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef, effect, inject, signal } from '@angular/core';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport { PermissionScope } from '@cccteam/ccc-lib/src/types';\n\n@Directive({\n selector: '[cccHasPermission]',\n standalone: true,\n})\nexport class HasPermissionDirective {\n private auth = inject(AuthService);\n private templateRef = inject(TemplateRef<unknown>);\n private viewContainer = inject(ViewContainerRef);\n\n private scope = signal<PermissionScope | undefined>(undefined);\n\n @Input()\n set cccHasPermission(scope: PermissionScope) {\n this.scope.set(scope);\n }\n\n constructor() {\n effect(() => {\n const scope = this.scope();\n\n if (this.auth.hasPermission(scope) && this.auth.authenticated()) {\n if (!this.viewContainer.get(0)) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n } else {\n this.viewContainer.clear();\n }\n });\n }\n}\n","import { Component, computed, inject, input, OnInit, signal, Signal } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport { Domain, ReadPermission, Resource, UpdatePermission } from '@cccteam/ccc-lib/src/types';\n\nexport enum InputMode {\n Read = 'read',\n Edit = 'edit',\n}\n\n@Component({\n selector: 'ccc-input-field',\n imports: [MatFormFieldModule, MatInputModule],\n template: `\n <mat-form-field [class]=\"className()\">\n <mat-label>{{ name() }}</mat-label>\n <input matInput [disabled]=\"mode() === inputMode.Edit && canEdit()\" [value]=\"value()\" />\n </mat-form-field>\n `,\n styleUrl: './ccc-field.component.scss',\n})\nexport class CccInputFieldComponent implements OnInit {\n auth = inject(AuthService);\n className = input();\n mode = input.required<InputMode>();\n resource = input.required<Resource>();\n domain = input.required<Domain>();\n value = input.required();\n name = input.required<string>();\n\n inputMode = InputMode;\n\n canEdit: Signal<boolean> = signal(false);\n canEditSelector = false;\n\n canRead: Signal<boolean> = signal(false);\n canReadSelector = false;\n\n ngOnInit(): void {\n this.canEditSelector = this.auth.hasPermission({\n resource: this.resource(),\n permission: ReadPermission,\n domain: this.domain(),\n });\n this.canReadSelector = this.auth.hasPermission({\n resource: this.resource(),\n permission: UpdatePermission,\n domain: this.domain(),\n });\n\n this.canRead = computed(() => {\n const res = this.resource();\n if (!res) {\n return false;\n }\n if (AuthService.requiresPermission(this.resource(), ReadPermission)) {\n return this.canReadSelector;\n }\n return false;\n });\n\n this.canEdit = computed(() => {\n const res = this.resource();\n if (!res) {\n return false;\n }\n if (AuthService.requiresPermission(this.resource(), UpdatePermission)) {\n return this.canEditSelector;\n }\n return false;\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport { BASE_URL } from '@cccteam/ccc-lib/src/types';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nexport const AuthenticationGuard = (\n route: ActivatedRouteSnapshot,\n routerState: RouterStateSnapshot,\n): Observable<boolean> => {\n const authService = inject(AuthService);\n const baseUrl = inject(BASE_URL);\n\n const authenticate = (): void => {\n const url = routerState.url;\n const absoluteUrl = baseUrl + (!url.toString().startsWith('/') ? '/' + url : url);\n const encodedUrl = encodeURIComponent(absoluteUrl);\n window.location.href = `${authService.loginRoute()}?returnUrl=${encodedUrl}`;\n };\n\n if (authService.authenticated()) {\n return of(true);\n }\n\n return authService.checkUserSession().pipe(\n map((sessionInfo) => {\n if (sessionInfo?.authenticated) {\n return true;\n }\n\n authenticate();\n return false;\n }),\n catchError(() => {\n authenticate();\n return of(false);\n }),\n );\n};\n","import { computed, inject, Signal } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\n\nexport const AuthorizationGuard = (route: ActivatedRouteSnapshot): Signal<boolean> => {\n const router = inject(Router);\n const auth = inject(AuthService);\n return computed(() => {\n const hasPermission = auth.hasPermission(route.data['scope']);\n if (hasPermission) {\n return true;\n } else {\n router.navigate(['/']);\n return false;\n }\n });\n};\n","import { HttpContext, HttpContextToken } from '@angular/common/http';\n\nexport interface CustomHttpRequestOptions {\n suppressGlobalError: boolean;\n}\n\nexport const CUSTOM_HTTP_REQUEST_OPTIONS = new HttpContextToken<CustomHttpRequestOptions>(() => ({\n suppressGlobalError: false,\n}));\n\nexport function errorOptions(suppressGlobalError: boolean | undefined): { context: HttpContext } {\n return {\n context: new HttpContext().set(CUSTOM_HTTP_REQUEST_OPTIONS, {\n suppressGlobalError: suppressGlobalError ?? false,\n }),\n };\n}\n","// Shared types and constants used across the ccc-resource module\n// This file exists to break circular dependencies between types and ccc-resource\n\nexport const defaultEmptyFieldValue = '-';\n\nexport type NullBoolean = null | true | false;\n\nexport type ConcatFn = 'space-concat' | 'hyphen-concat' | 'space-hyphen-concat' | 'hyphen-space-concat';\n","import { Directive, input, Type } from '@angular/core';\nimport { TooltipPosition } from '@angular/material/tooltip';\nimport { FieldName, Method, Resource } from './permissions';\nimport { ConcatFn, defaultEmptyFieldValue, NullBoolean } from './resource-types';\nimport { ResourceValidatorFn } from './validators';\n\nexport interface FieldPointer {\n field: FieldName;\n}\n\nexport interface MenuItem {\n label: string;\n route?: string[];\n children?: MenuItem[];\n}\n\nexport interface RouteResourceData {\n config: RootConfig;\n}\n\nexport type DataType = string | number | number[] | string[] | boolean | undefined | Date;\nexport type RecordData = Record<string, DataType | null>;\n\nexport type RPCDataType = string | number | string[] | number[] | boolean | Date;\nexport type RPCRecordData = Record<string, RPCDataType>;\nexport type RpcMethod = Record<string, DataType>;\n\nexport type ParentResourceConfig = ListViewConfig | ViewConfig | ArrayConfig;\nexport type ChildResourceConfig = ListViewConfig | ViewConfig | ComponentConfig | ArrayConfig;\n\nexport type ActionType = 'function' | 'link';\n\nexport type ListConcatFn =\n | 'space-concat'\n | 'hyphen-concat'\n | 'space-hyphen-concat'\n | 'hyphen-space-concat'\n | 'no-space-concat';\nexport type ConfigType = ChildResourceConfig;\nexport type FormatType = 'simpleSlashDateFormat';\nexport type RPCPlacement = 'inline' | 'end';\n\nexport type ColumnConfig = SingleColumnConfig | MultiColumnConfig;\n\nexport interface ActionButtonConfig {\n label: string;\n icon: string;\n action?: (resource: { id: string }) => void;\n viewRoute?: string;\n actionType?: ActionType;\n color?: string;\n disabledLabel?: string;\n}\nexport interface ActionButtonConfigOptions {\n label: string;\n icon: string;\n action?: (resource: { id: string }) => void;\n viewRoute?: string;\n actionType?: ActionType;\n color?: string;\n disabledLabel?: string;\n}\n\nexport function actionButtonConfig(config: ActionButtonConfigOptions): ActionButtonConfig {\n return {\n ...actionButtonConfigDefaults,\n ...config,\n } satisfies ActionButtonConfig;\n}\n\nexport const actionButtonConfigDefaults = {\n label: '',\n icon: '',\n actionType: 'function' as ActionType,\n color: '',\n disabledLabel: '',\n} satisfies ActionButtonConfig;\n\nexport interface SingleColumnConfig {\n id: FieldName;\n header?: string;\n width?: number;\n resizable?: boolean;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n valueGetter?: (data: any) => string;\n valueFormatter?: (data: any) => string;\n tooltipPosition?: TooltipPosition;\n viewRoute?: Resource;\n buttonConfig?: ActionButtonConfig;\n actionType?: ActionType;\n formatType?: FormatType | string;\n hidden?: boolean;\n emptyDataValue?: DataType;\n filterable?: boolean;\n hideHeader?: boolean;\n}\nexport interface SingleColumnConfigOptions {\n id: FieldName;\n header?: string;\n width?: number;\n resizable?: boolean;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n valueGetter?: (data: any) => string;\n valueFormatter?: (data: any) => string;\n tooltipPosition?: TooltipPosition;\n viewRoute?: Resource;\n buttonConfig?: ActionButtonConfig;\n actionType?: ActionType;\n formatType?: FormatType | string;\n hidden?: boolean;\n emptyDataValue?: DataType;\n filterable?: boolean;\n hideHeader?: boolean;\n}\n\nexport function singleColumnConfig(config: SingleColumnConfigOptions): SingleColumnConfig {\n return {\n ...singleColumnConfigDefaults,\n ...config,\n } satisfies SingleColumnConfig;\n}\n\nexport const singleColumnConfigDefaults = {\n id: '' as FieldName,\n header: '',\n resizable: true,\n actionType: 'function' as ActionType,\n hidden: false,\n filterable: true,\n hideHeader: false,\n} satisfies SingleColumnConfig;\n\nexport interface MultiColumnConfig extends SingleColumnConfig {\n // todo: additionalIds name is not clear. the id provided is fetched from a different resource, such as a typeId\n additionalIds: AdditionalResourceConfig[];\n concatFn: ListConcatFn;\n}\nexport interface MultiColumnConfigOptions extends SingleColumnConfigOptions {\n additionalIds: AdditionalResourceConfig[];\n concatFn: ListConcatFn;\n}\n\nexport function multiColumnConfig(config: MultiColumnConfigOptions): MultiColumnConfig {\n return {\n ...multiColumnConfigDefaults,\n ...config,\n } satisfies MultiColumnConfig;\n}\n\nexport const multiColumnConfigDefaults = {\n ...singleColumnConfigDefaults,\n additionalIds: [] as AdditionalResourceConfig[],\n concatFn: 'hyphen-concat' as ListConcatFn,\n} satisfies MultiColumnConfig;\n\nexport interface AdditionalResourceConfig {\n resource?: Resource;\n id: FieldName;\n field?: FieldName;\n hidden?: boolean;\n}\nexport interface AdditionalResourceConfigOptions {\n id: FieldName;\n resource?: Resource;\n field?: FieldName;\n hidden?: boolean;\n}\n\nexport function additionalResourceConfig(config: AdditionalResourceConfigOptions): AdditionalResourceConfig {\n return {\n ...additionalResourceConfigDefaults,\n ...config,\n } satisfies AdditionalResourceConfig;\n}\n\nexport const additionalResourceConfigDefaults = {\n id: '' as FieldName,\n resource: '' as Resource,\n field: '' as FieldName,\n hidden: false,\n} satisfies AdditionalResourceConfig;\n\nexport interface FieldSort {\n field: FieldName;\n direction: 'asc' | 'desc';\n}\nexport interface FieldSortOptions {\n field: FieldName;\n direction?: 'asc' | 'desc';\n}\n\nexport function fieldSort(config: FieldSortOptions): FieldSort {\n return {\n ...fieldSortDefaults,\n ...config,\n } satisfies FieldSort;\n}\n\nexport const fieldSortDefaults = {\n field: '' as FieldName,\n direction: 'asc' as 'asc' | 'desc',\n} satisfies FieldSort;\n\nexport interface EnumeratedConfigOptions {\n // primaryResource comes from the metadata\n overrideResource?: Resource;\n /* A function to filter the list of enumerated options.\n * The `parentResource` argument contains the data of the resource that this enumerated field is part of.\n * It will be an object with the current form values, which can be empty during resource creation.\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n filter?: (resource: any) => string;\n /**\n * Set disableCacheForFilterPii to `true` to promote the GET to a POST when PII is used in the filter\n * POST requests cannot be cached\n */\n disableCacheForFilterPii?: boolean;\n /**\n * Specifies which resource data to pass to the filter function:\n * - 'rootResource': Pass in the root resource data\n * - 'parentResource': Pass in the parent resource data\n * @default 'parentResource'\n */\n filterType?: FilterType;\n sorts?: FieldSort[];\n listDisplay?: FieldName[];\n viewDisplay: FieldName[];\n viewConcatFn?: ConcatFn;\n listConcatFn?: ConcatFn;\n viewDetails?: boolean;\n searchable?: boolean;\n}\n\ntype FilterType = 'parentResource' | 'rootResource';\nexport interface EnumeratedConfig {\n overrideResource: Resource;\n filter: (resource: any) => string;\n disableCacheForFilterPii: boolean;\n filterType: FilterType;\n sorts: FieldSort[];\n listDisplay: FieldName[];\n viewDisplay: FieldName[];\n viewConcatFn: ConcatFn;\n listConcatFn: ConcatFn;\n viewDetails: boolean;\n searchable: boolean;\n}\nexport function enumeratedConfig(config: EnumeratedConfigOptions): EnumeratedConfig {\n return {\n ...enumeratedConfigDefaults,\n ...config,\n } satisfies EnumeratedConfig;\n}\nexport const enumeratedConfigDefaults = {\n overrideResource: '' as Resource,\n filter: (): string => '',\n disableCacheForFilterPii: false,\n filterType: 'parentResource' as FilterType,\n sorts: [] as FieldSort[],\n listDisplay: [] as FieldName[],\n viewDisplay: [] as FieldName[],\n viewConcatFn: 'hyphen-concat' as ConcatFn,\n listConcatFn: 'hyphen-concat' as ConcatFn,\n viewDetails: false,\n searchable: false,\n};\n\nexport type FieldDefault = ForeignKeyDefault | StaticDefault | null;\n\nexport interface NullBooleanConfigOptions {\n displayValues?: Record<'null' | 'true' | 'false', { label: string; value: NullBoolean }>;\n}\nexport interface NullBooleanConfig {\n /** This property maps the three possible values for this\n * nullboolean field with the display values users will see\n * on the screen for each\n */\n displayValues: Record<'null' | 'true' | 'false', { label: string; value: NullBoolean }>;\n\n /** TODO: In FUTURE PHASES once field change history is implemented\n * When this field is first displayed on screen, set the\n * value to null based on the value present in it.\n * Useful if the database doesn't have support nulling but you want\n * users to make a conscious selection, but the database\n * will either contain a true or false. Will need to check the\n * 'last edited' on the field to ensure that we don't repeatedly spam\n * users with this though\n */\n // nullOnEdit: {\n // nullIfTrue: boolean;\n // nullIfFalse: boolean;\n // };\n}\nexport function nullBooleanConfig(config: NullBooleanConfigOptions): NullBooleanConfig {\n return {\n ...nullBooleanConfigDefaults,\n ...config,\n } satisfies NullBooleanConfig;\n}\nconst defaultBooleanDisplay = Object.freeze({\n null: {\n label: defaultEmptyFieldValue,\n value: null,\n },\n true: {\n label: 'Yes',\n value: true,\n },\n false: {\n label: 'No',\n value: false,\n },\n});\n\nexport const nullBooleanConfigDefaults = {\n displayValues: defaultBooleanDisplay,\n};\n\nexport interface ForeignKeyDefaultOptions {\n parentId: FieldName;\n}\nexport interface ForeignKeyDefault {\n type: 'foreignKey';\n parentId: FieldName;\n}\nexport function foreignKeyDefault(config: ForeignKeyDefaultOptions): ForeignKeyDefault {\n return {\n ...foreignKeyDefaultDefaults,\n ...config,\n } satisfies ForeignKeyDefault;\n}\nexport const foreignKeyDefaultDefaults = {\n type: 'foreignKey',\n parentId: '' as FieldName,\n} satisfies ForeignKeyDefault;\n\nexport interface StaticDefault {\n type: 'static';\n value: string | boolean;\n}\nexport interface staticDefaultOptions {\n value: string | boolean;\n}\nexport function staticDefault(config: staticDefaultOptions): StaticDefault {\n return {\n ...staticDefaultDefaults,\n ...config,\n } satisfies StaticDefault;\n}\nexport const staticDefaultDefaults = {\n type: 'static',\n value: '',\n} satisfies StaticDefault;\n\nexport type Affix = string | remoteData | parentData;\n\ninterface remoteData {\n resource: Resource;\n id: FieldName;\n field: FieldName;\n}\n\ninterface parentData {\n field: FieldName;\n}\n\nexport type ConfigElement = FieldElement | SectionElement | ComputedDisplayFieldElement | PaddingElement;\n\nexport type ColSize = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\nexport interface ComputedDisplayFieldElementOptions {\n label?: string;\n class?: string;\n cols?: ColSize;\n calculatedValue?: (data: any) => string;\n shouldRender?: ((data: any) => boolean) | boolean;\n}\nexport interface ComputedDisplayFieldElement {\n type: 'computedDisplayField';\n label: string;\n class: string;\n cols: ColSize;\n calculatedValue: (data: any) => string;\n shouldRender: ((data: any) => boolean) | boolean;\n}\nexport function computedDisplayField(config: ComputedDisplayFieldElementOptions): ComputedDisplayFieldElement {\n return {\n ...computedDisplayFieldElementDefaults,\n ...config,\n } satisfies ComputedDisplayFieldElement;\n}\nexport const computedDisplayFieldElementDefaults = {\n type: 'computedDisplayField',\n label: '',\n class: '',\n cols: 6,\n calculatedValue: (): string => '',\n shouldRender: true,\n} satisfies ComputedDisplayFieldElement;\n\nexport interface PaddingElementOptions {\n cols?: ColSize;\n shouldRender?: ((data: any) => boolean) | boolean;\n}\nexport interface PaddingElement {\n type: 'padding';\n cols: ColSize;\n /** Determines whether the padding is shown\n */\n shouldRender: ((data: any) => boolean) | boolean;\n}\nexport function padding(config?: PaddingElementOptions): PaddingElement {\n return {\n ...paddingElementDefaults,\n ...config,\n } satisfies PaddingElement;\n}\nexport const paddingElementDefaults = {\n type: 'padding',\n cols: 12,\n shouldRender: true,\n} satisfies PaddingElement;\n\nexport interface SectionElementOptions {\n label?: string;\n class?: string;\n cols?: ColSize;\n shouldRender?: ((data: any) => boolean) | boolean;\n nullAllChildrenIfConditionallyHidden?: boolean;\n children?: ConfigElement[];\n}\nexport interface SectionElement {\n type: 'section';\n label: string;\n class: string;\n cols: ColSize;\n /**\n * shouldRender is used to determine if the section should be\n * displayed to users.\n * When assigning shouldRender a function, the first argument\n * is the current state of the resource being displayed\n * Hides the layout AND all of its children\n */\n shouldRender: ((data: any) => boolean) | boolean;\n /** If shouldRender is NOT a function, this property does nothing\n * If shouldRender is a function, this property\n * sets children's values to null if shouldRender hides it (returns false)\n * within the resource-layout.component\n */\n nullAllChildrenIfConditionallyHidden: boolean;\n children: ConfigElement[];\n}\nexport function section(config: SectionElementOptions): SectionElement {\n return {\n ...sectionElementDefaults,\n ...config,\n } satisfies SectionElement;\n}\nexport const sectionElementDefaults = {\n type: 'section',\n label: '',\n class: '',\n cols: 12,\n shouldRender: true,\n nullAllChildrenIfConditionallyHidden: false,\n children: [],\n} satisfies SectionElement;\n\nexport interface FieldElementOptions {\n name: FieldName;\n label?: string;\n cols?: ColSize;\n class?: string;\n enumeratedConfig?: EnumeratedConfig;\n default?: FieldDefault;\n nullBooleanConfig?: NullBooleanConfig;\n validators?: ((data: any) => ResourceValidatorFn[]) | ResourceValidatorFn[];\n readOnly?: boolean;\n prefixes?: Affix[];\n suffixes?: Affix[];\n shouldRender?: ((data: any) => boolean) | boolean;\n nullIfConditionallyHidden?: boolean;\n}\nexport interface FieldElement {\n type: 'field';\n name: string;\n label: string;\n cols: ColSize;\n class: string;\n enumeratedConfig: EnumeratedConfig;\n default: FieldDefault;\n nullBooleanConfig: NullBooleanConfig;\n /**\n * A list of validators that must pass to allow a field to be submitted.\n * Utilize existing validators in the resourceValidators object, and\n * add any new or custom validators to it\n */\n validators: ((data: any) => ResourceValidatorFn[]) | ResourceValidatorFn[];\n readOnly: boolean;\n prefixes: Affix[];\n suffixes: Affix[];\n /**\n * shouldRender is used to determine if the element should be\n * displayed to users.\n * When assigning shouldRender a function, the first argument\n * is the current state of the resource being displayed\n */\n shouldRender: ((data: any) => boolean) | boolean;\n /** If shouldRender is NOT a function, this property does nothing\n * If shouldRender is a function, this property\n * determines whether the form control associated\n * with this config element should have its value\n * set to null if shouldRender hides it (returns false)\n */\n nullIfConditionallyHidden: boolean;\n}\n\nexport function field(config: FieldElementOptions): FieldElement {\n return {\n ...fieldElementDefaults,\n ...config,\n } satisfies FieldElement;\n}\nexport const fieldElementDefaults = {\n type: 'field',\n name: '',\n label: '',\n cols: 6,\n class: '',\n enumeratedConfig: { ...enumeratedConfigDefaults },\n default: null,\n validators: [],\n nullBooleanConfig: { ...nullBooleanConfigDefaults },\n readOnly: false,\n prefixes: [],\n suffixes: [],\n shouldRender: true,\n nullIfConditionallyHidden: false,\n} satisfies FieldElement;\n\n/**\n * RouteData is used to define the route for a config\n * route: the route for the config\n * hasViewRoute: when true, a route will be created for route/:uuid\n */\nexport interface RootRouteData {\n route?: string;\n hasViewRoute?: boolean;\n}\n\nexport interface RPCConfigOptions {\n label: string;\n afterMethodRedirect?: string;\n conditions: {\n field: FieldName;\n matchValues: string[];\n }[];\n methodBodyTemplate?: any;\n successMessage?: string;\n elements?: ConfigElement[];\n placement?: RPCPlacement;\n method: Method;\n customComponent?: ComponentConfig;\n refreshResources?: Resource[];\n defaultModalWidth?: string;\n shouldRender?: () => boolean;\n}\nexport interface RPCConfig {\n label: string;\n afterMethodRedirect: string | string[];\n conditions: {\n field: FieldName;\n matchValues: string[];\n }[];\n methodBodyTemplate: any;\n method: Method;\n successMessage: string;\n elements: ConfigElement[];\n placement: RPCPlacement;\n customComponent: ComponentConfig;\n refreshResources: Resource[];\n defaultModalWidth: string;\n shouldRender: () => boolean;\n}\nexport function rpcConfig(config: RPCConfigOptions): RPCConfig {\n return {\n ...rpcConfigDefaults,\n ...config,\n } satisfies RPCConfig;\n}\nexport const rpcConfigDefaults = {\n label: '',\n afterMethodRedirect: '',\n conditions: [] as {\n field: FieldName;\n matchValues: string[];\n }[],\n methodBodyTemplate: {} as any,\n successMessage: '',\n elements: [] as ConfigElement[],\n placement: 'end' as RPCPlacement,\n method: '' as Method,\n customComponent: {} as ComponentConfig,\n refreshResources: [] as Resource[],\n defaultModalWidth: '',\n shouldRender: (): boolean => true,\n} satisfies RPCConfig;\n\nexport interface RPCBaseFormData {\n elements: FieldElement[];\n label: string;\n method: Method;\n}\n\n// Config is the base type that all configurations should start with\nexport interface RootConfigOptions {\n routeData?: RootRouteData;\n nav?: {\n navItem: MenuItem;\n group?: string;\n };\n parentConfig: ParentResourceConfig;\n relatedConfigs?: ChildResourceConfig[];\n rpcConfigs?: RPCConfig[];\n}\nexport interface RootConfig {\n routeData: RootRouteData;\n nav: {\n navItem: MenuItem;\n group?: string;\n };\n parentConfig: ParentResourceConfig;\n relatedConfigs: ChildResourceConfig[];\n rpcConfigs?: RPCConfig[];\n}\nexport const rootConfigDefaults = {\n routeData: {} as RootRouteData,\n nav: {\n navItem: {} as MenuItem,\n },\n parentConfig: {} as ParentResourceConfig,\n relatedConfigs: [] as ChildResourceConfig[],\n rpcConfigs: [] as RPCConfig[],\n} satisfies RootConfig;\n\nexport function rootConfig(config: RootConfigOptions): RootConfig {\n return {\n ...rootConfigDefaults,\n ...config,\n } satisfies RootConfig;\n}\n\n// Base type config is the base type for all resource configurations\nexport interface BaseConfigOptions {\n title?: string;\n createTitle?: string;\n createButtonLabel?: string;\n primaryResource: Resource;\n parentClass?: string;\n fieldClass?: string;\n elements: ConfigElement[];\n createConfig?: ConfigType;\n parentRelation?: {\n parentKey: FieldName;\n childKey: FieldName;\n };\n showBackButton?: boolean;\n createNavigation?: string[];\n}\nexport interface BaseConfig {\n title: string;\n createTitle: string;\n createButtonLabel: string;\n primaryResource: Resource;\n parentClass: string;\n fieldClass: string;\n elements: ConfigElement[];\n createConfig: ConfigType;\n parentRelation: {\n parentKey: FieldName;\n childKey: FieldName;\n };\n showBackButton: boolean;\n createNavigation: string[];\n}\n\n@Directive()\nexport abstract class CustomConfigComponent {\n uuid = input<string>();\n parentData = input<RecordData>();\n config = input<ComponentConfig>();\n}\n\n// Available param types for a component config\nexport type ConfigParam = SwitchConfigParam;\n\n// Custom component config renders a custom component and supplies params to it\nexport interface ComponentConfigOptions {\n // todo: it's weird that we have a primary resource here. Would be nice to remove but this adds a null check to all other configs\n primaryResource: Resource;\n component: Type<CustomConfigComponent> | 'SwitchResolver';\n params?: ConfigParam;\n relatedConfig?: ParentResourceConfig[];\n shouldRenderActions?: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\nexport interface ComponentConfig {\n type: 'Component';\n primaryResource: Resource;\n component: Type<CustomConfigComponent> | 'SwitchResolver';\n params: ConfigParam;\n relatedConfig: ParentResourceConfig[];\n shouldRenderActions: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\nexport function componentConfig(config: ComponentConfigOptions): ComponentConfig {\n return {\n ...componentConfigDefaults,\n ...config,\n } satisfies ComponentConfig;\n}\nexport const componentConfigDefaults = {\n type: 'Component',\n primaryResource: '' as Resource,\n component: 'SwitchResolver',\n params: {\n cases: [],\n } satisfies ConfigParam,\n relatedConfig: [] as ParentResourceConfig[],\n shouldRenderActions: {\n create: (): boolean => true,\n edit: (): boolean => true,\n delete: (): boolean => true,\n },\n} satisfies ComponentConfig;\n\n// A switch is a component type that allows for conditional rendering of child components based on the value of a parent field\n// When parentData[c.parentField] equals c.caseId render the caseConfig with parentData[c.childId] as the uuid\nexport interface switchCase {\n caseId: string;\n parentField: string;\n childId: string;\n config: ChildResourceConfig;\n}\nexport interface SwitchConfigParamOptions {\n cases: switchCase[];\n}\nexport interface SwitchConfigParam {\n cases: switchCase[];\n}\nexport function switchParams(config: SwitchConfigParamOptions): SwitchConfigParam {\n return {\n ...switchParamsDefaults,\n ...config,\n } satisfies SwitchConfigParam;\n}\nexport const switchParamsDefaults = {\n cases: [] as switchCase[],\n} satisfies SwitchConfigParam;\n\nexport interface ListViewConfigOptions extends BaseConfigOptions {\n showViewButton?: boolean;\n loadCreatedResource?: boolean;\n collapsible?: boolean;\n overrideResource?: Resource;\n searchable?: boolean;\n enableRowExpansion?: boolean;\n rowExpansionConfig?: ChildResourceConfig;\n requireSearchToDisplayResults?: boolean;\n listColumns: ColumnConfig[];\n relatedConfigs?: ChildResourceConfig[];\n viewResource?: Resource | string;\n actionType?: ActionType;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n filter?: (parentResource: any) => string;\n disableCacheForFilterPii?: boolean;\n rpcConfigs?: RPCConfig[];\n sorts?: FieldSort[];\n shouldRenderActions?: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\nexport interface ListViewConfig extends BaseConfig {\n type: 'ListView';\n showViewButton: boolean;\n loadCreatedResource: boolean;\n collapsible: boolean;\n overrideResource: Resource;\n searchable: boolean;\n enableRowExpansion: boolean;\n rowExpansionConfig: ChildResourceConfig;\n requireSearchToDisplayResults: boolean;\n listColumns: ColumnConfig[];\n relatedConfigs: ChildResourceConfig[];\n viewResource: Resource | string;\n actionType: ActionType;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n filter: (parentResource: any) => string;\n disableCacheForFilterPii: boolean;\n rpcConfigs?: RPCConfig[];\n sorts: FieldSort[];\n shouldRenderActions: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\n\nexport function listViewConfig(config: ListViewConfigOptions): ListViewConfig {\n return {\n ...listViewConfigDefaults,\n ...config,\n } satisfies ListViewConfig;\n}\nexport const listViewConfigDefaults = {\n title: '',\n primaryResource: '' as Resource,\n type: 'ListView',\n createTitle: '',\n createButtonLabel: 'Create',\n loadCreatedResource: false,\n showViewButton: true,\n collapsible: false,\n listColumns: [],\n elements: [],\n parentClass: '',\n fieldClass: '',\n createConfig: {} as ListViewConfig,\n createNavigation: [],\n relatedConfigs: [],\n parentRelation: {\n parentKey: '' as FieldName,\n childKey: '' as FieldName,\n },\n overrideResource: '' as Resource,\n searchable: false,\n enableRowExpansion: false,\n rowExpansionConfig: {} as ChildResourceConfig,\n requireSearchToDisplayResults: false,\n showBackButton: true,\n filter: (): string => '',\n disableCacheForFilterPii: false,\n sorts: [] as FieldSort[],\n viewResource: '' as Resource,\n actionType: 'function' as ActionType,\n rpcConfigs: [],\n shouldRenderActions: {\n create: (): boolean => true,\n edit: (): boolean => true,\n delete: (): boolean => true,\n },\n} satisfies ListViewConfig;\n\nexport type ViewType = 'OneToOne' | 'OneToMany';\n\nexport interface ViewConfigOptions extends BaseConfigOptions {\n collapsible?: boolean;\n connectorResource?: Resource;\n relatedConfigs?: ChildResourceConfig[];\n rpcConfigs?: RPCConfig[];\n shouldRenderActions?: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\nexport interface ViewConfig extends BaseConfig {\n type: 'View';\n collapsible: boolean;\n // todo: remove this comment once full documentation has been added. Populate this value when a database view resource is used to connect the ViewConfig's parent resource to its primary resource\n connectorResource: Resource;\n rpcConfigs?: RPCConfig[];\n relatedConfigs: ChildResourceConfig[];\n /** A set of functions that allows for\n * conditional display of non-RPC\n * actions based on the pristine state of the resource\n * (if such a state is applicable. Creation for example won't\n * have such data)\n * This is separate from ABAC control which takes\n * precedence and is based on a user's attributes\n */\n shouldRenderActions: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\n\nexport function viewConfig(config: ViewConfigOptions): ViewConfig {\n return {\n ...viewConfigDefaults,\n ...config,\n } satisfies ViewConfig;\n}\nexport const viewConfigDefaults = {\n title: '',\n primaryResource: '' as Resource,\n type: 'View',\n createTitle: '',\n createButtonLabel: 'Create',\n parentClass: '',\n fieldClass: '',\n elements: [],\n collapsible: true,\n connectorResource: '' as Resource,\n relatedConfigs: [],\n createConfig: {} as ViewConfig,\n shouldRenderActions: {\n create: (): boolean => true,\n edit: (): boolean => true,\n delete: (): boolean => true,\n },\n createNavigation: [],\n parentRelation: {\n parentKey: '' as FieldName,\n childKey: '' as FieldName,\n },\n showBackButton: true,\n rpcConfigs: [],\n} satisfies ViewConfig;\n\nexport interface arrayConfigOptions {\n iteratedConfig: ChildResourceConfig;\n viewType?: ViewType;\n collapsible?: boolean;\n createConfig?: ConfigType;\n connectorResource?: Resource;\n connectorField?: FieldName;\n primaryResource: Resource;\n listFilter: (parentResource: any) => string;\n disableCacheForFilterPii?: boolean;\n sorts?: FieldSort[];\n title?: string;\n createButtonLabel?: string;\n limit?: number;\n shouldRenderActions?: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n}\nexport interface ArrayConfig {\n type: 'Array';\n iteratedConfig: ChildResourceConfig;\n viewType: ViewType;\n collapsible: boolean;\n createConfig: ConfigType;\n connectorResource: Resource;\n connectorField: FieldName;\n primaryResource: Resource;\n listFilter: (parentResource: any) => string;\n disableCacheForFilterPii: boolean;\n sorts: FieldSort[];\n title: string;\n createButtonLabel: string;\n shouldRenderActions: Record<'edit' | 'delete' | 'create', (data: any) => boolean>;\n limit: number;\n}\nexport function arrayConfig(config: arrayConfigOptions): ArrayConfig {\n return {\n ...arrayConfigDefaults,\n ...config,\n } satisfies ArrayConfig;\n}\nexport const arrayConfigDefaults = {\n type: 'Array',\n iteratedConfig: {} as ChildResourceConfig,\n viewType: 'OneToMany' as ViewType,\n collapsible: true,\n createConfig: {} as ViewConfig,\n connectorResource: '' as Resource,\n connectorField: '' as FieldName,\n primaryResource: '' as Resource,\n listFilter: (): string => '',\n disableCacheForFilterPii: false,\n sorts: [] as FieldSort[],\n title: '',\n createButtonLabel: 'Create',\n limit: Infinity,\n shouldRenderActions: {\n create: (): boolean => true,\n edit: (): boolean => true,\n delete: (): boolean => true,\n },\n} satisfies ArrayConfig;\n","export enum AlertLevel {\n ERROR = 'warn',\n INFO = 'accent',\n SUCCESS = 'success',\n}\n\nexport interface CreateNotificationMessage {\n duration?: number;\n message: string;\n link: string;\n level: AlertLevel;\n}\n\nexport interface NotificationMessage {\n id: number;\n duration?: number;\n message: string;\n link: string;\n level: AlertLevel;\n}\n","type Brand<K, T> = K & { __brand: T };\n\nexport type Permission = Brand<string, 'Permission'>;\nexport type Resource = Brand<string, 'Resource'>;\nexport type Domain = Brand<string, 'Domain'>;\nexport type FieldName = Brand<string, 'FieldName'>;\nexport type Method = Brand<string, 'Method'>;\nexport type DomainPermissions = Record<Domain, Record<Resource, Record<Permission, Permissions>>>;\n\nexport interface PermissionScope {\n resource: Resource;\n permission: Permission;\n domain: Domain;\n}\n\nexport const ReadPermission = 'Read' as Permission;\nexport const UpdatePermission = 'Update' as Permission;\n","// Meta interfaces for resources and methods\n// This file exists to break circular dependencies between types and ccc-resource\n\nimport { Resource } from './permissions';\n\nexport type ValidDisplayTypes =\n | 'boolean'\n | 'nullboolean'\n | 'number'\n | 'string'\n | 'date'\n | 'enumerated'\n | 'link'\n | 'uuid'\n | 'civildate'\n | 'string[]'\n | 'customtypes.document';\n\nexport type ValidRPCTypes = ValidDisplayTypes | `${Exclude<ValidDisplayTypes, 'string[]'>}[]`;\n\nexport interface RPCFieldMeta {\n fieldName: string;\n displayType: ValidRPCTypes;\n enumeratedResource?: Resource;\n}\n\nexport interface MethodMeta {\n route: string;\n fields: RPCFieldMeta[];\n}\n\nexport interface FieldMeta {\n fieldName: string;\n /** Indicates whether the field is required and only applies during resource creation.\n * Use the validators config parameter in all other contexts\n */\n required: boolean;\n primaryKey?: { ordinalPosition: number };\n displayType: ValidDisplayTypes;\n enumeratedResource?: Resource;\n isIndex: boolean;\n}\n\nexport interface ResourceMeta {\n route: string;\n consolidatedRoute?: string;\n listDisabled?: boolean;\n readDisabled?: boolean;\n createDisabled?: boolean;\n updateDisabled?: boolean;\n deleteDisabled?: boolean;\n substringSearchParameter?: string;\n fields: FieldMeta[];\n}\n\nexport type Meta = MethodMeta | ResourceMeta;\n\nexport namespace CustomTypes {\n export interface Document {\n // todo/fixme: implement the actual rich text document interface here\n placeholder: string;\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Domain, Permission, Resource } from './permissions';\nimport { MethodMeta, ResourceMeta } from './resource-meta';\n\n/**\n * The base URL for API requests (e.g., 'https://api.example.com/').\n */\nexport const BASE_URL = new InjectionToken<string>('BASE_URL');\n\n/**\n * The path to the frontend login page (e.g., '/login').\n */\nexport const FRONTEND_LOGIN_PATH = new InjectionToken<string>('FRONTEND_LOGIN_PATH');\n\n/**\n * The path to the session endpoint (e.g., 'user/session').\n */\nexport const SESSION_PATH = new InjectionToken<string>('SESSION_PATH');\n\n/**\n * The base URL for API requests (e.g., '/api').\n */\nexport const API_URL = new InjectionToken<string>('API_URL');\n\nexport const PERMISSION_REQUIRED = new InjectionToken<(resource: Resource, permission: Permission) => boolean>(\n 'PERMISSION_REQUIRED',\n);\n\nexport const AVAILABLE_PERMISSIONS = new InjectionToken<{\n Create: Permission;\n Delete: Permission;\n List: Permission;\n Read: Permission;\n Update: Permission;\n}>('AVAILABLE_PERMISSIONS');\nexport const AVAILABLE_DOMAINS = new InjectionToken<Record<string, Domain>[]>('AVAILABLE_DOMAINS');\n\nexport const RESOURCE_META = new InjectionToken<(resource: Resource) => ResourceMeta>('RESOURCE_META');\nexport const METHOD_META = new InjectionToken<(method: string) => MethodMeta>('METHOD_META');\n\nexport const IDLE_SESSION_DURATION = new InjectionToken<number>('IDLE_SESSION_DURATION');\nexport const IDLE_WARNING_DURATION = new InjectionToken<number>('IDLE_WARNING_DURATION');\nexport const IDLE_KEEPALIVE_DURATION = new InjectionToken<number>('IDLE_KEEPALIVE_DURATION');\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport const validatorsPresent = (\n control: AbstractControl<unknown, unknown>,\n validators: ValidatorFn[],\n previousValidatorCount: number,\n): boolean => {\n if (validators.length === previousValidatorCount) {\n return true;\n }\n\n let hasAllValidators = true;\n for (const validator of validators) {\n if (!control.hasValidator(validator)) {\n hasAllValidators = false;\n break;\n }\n }\n return hasAllValidators;\n};\n\nexport const requiredIf = (predicate: () => boolean, validator: ValidatorFn) => {\n return (formControl: AbstractControl): ValidationErrors | null => {\n if (!formControl.parent) {\n return null;\n }\n if (predicate()) {\n return validator(formControl);\n }\n return null;\n };\n};\n\ndeclare const __singletonValidatorBrand: unique symbol;\nexport type ResourceValidatorFn = ValidatorFn & {\n readonly [__singletonValidatorBrand]: true;\n};\nexport function createResourceValidator(validator: ValidatorFn): ResourceValidatorFn {\n return validator as ResourceValidatorFn;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterModule } from '@angular/router';\nimport { NotificationMessage } from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\n\n@Component({\n selector: 'ccc-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n imports: [MatIconModule, MatButtonModule, CommonModule, RouterModule],\n})\nexport class AlertComponent implements OnInit {\n @Input({ required: true }) error!: NotificationMessage;\n @Output() dismiss = new EventEmitter();\n\n errors = inject(NotificationService);\n ngOnInit(): void {\n if (this.error.duration === undefined) {\n this.error.duration = 30000;\n }\n\n setTimeout(() => {\n this.dismissAlert();\n }, this.error.duration);\n }\n\n dismissAlert(): void {\n if (this.error.id !== undefined) {\n this.errors.dismissGlobalNotification(this.error);\n }\n }\n}\n","<div class=\"alert\" [ngClass]=\"error.level\">\n <div class=\"message\">\n <span>{{ error.message }}</span>\n </div>\n <div class=\"alert-end\">\n @if (error.link) {\n <span [routerLink]=\"error.link\" class=\"link\">View</span>\n }\n <button (click)=\"dismissAlert()\" mat-icon-button aria-label=\"Close Alert\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, Input, Signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { RouterModule } from '@angular/router';\n\nimport { HasPermissionDirective } from '@cccteam/ccc-lib/src/auth-has-permission';\nimport { PermissionScope } from '@cccteam/ccc-lib/src/types';\nimport { UiCoreService } from '@cccteam/ccc-lib/src/ui-core-service';\n\nexport interface NavItem {\n type: 'link' | 'header' | 'expandable';\n routerLink?: string[];\n label: string;\n icon?: string;\n permission?: PermissionScope;\n children?: NavItem[];\n isExpanded?: boolean;\n attentionCount?: Signal<number>;\n}\n\nexport type NavGroups = Record<string, NavItem[]>;\n\n@Component({\n selector: 'ccc-sidenav',\n templateUrl: './sidenav.component.html',\n styleUrls: ['./sidenav.component.scss'],\n imports: [\n MatIconModule,\n RouterModule,\n CommonModule,\n MatExpansionModule,\n MatButtonModule,\n MatSidenavModule,\n HasPermissionDirective,\n ],\n})\nexport class SidenavComponent {\n ui = inject(UiCoreService);\n\n @Input() navGroups?: NavGroups;\n currentNav = computed(() => {\n return this.updateNavItems(this.ui.currentSidenavIdentifier());\n });\n\n /**\n * Updates the currentNav based on the identifier\n * @param identifier\n * @returns NavItem[]\n * @memberof SidenavComponent\n */\n updateNavItems(identifier: string): NavItem[] {\n if (!this.navGroups) {\n return [];\n }\n if (!this.navGroups[identifier]) {\n // pick the first one if the identifier is not found so we don't break the UI\n identifier = Object.keys(this.navGroups)[0];\n }\n return this.navGroups[identifier];\n }\n}\n","<div class=\"nav-container\">\n <nav>\n @for (navItem of currentNav(); track navItem) {\n <ng-container *ngTemplateOutlet=\"typeRendererTemplate; context: { navItem: navItem }\"></ng-container>\n }\n </nav>\n</div>\n<ng-template #typeRendererTemplate let-navItem=\"navItem\">\n @switch (navItem.type) {\n @case ('header') {\n <ng-container [ngTemplateOutlet]=\"headerTemplate\" [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n @case ('link') {\n <ng-container [ngTemplateOutlet]=\"linkTemplate\" [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n @case ('expandable') {\n <ng-container\n [ngTemplateOutlet]=\"expandableTemplate\"\n [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n }\n</ng-template>\n<ng-template #headerTemplate let-navItem=\"navItem\">\n <div class=\"link-header\">{{ navItem.label }}</div>\n</ng-template>\n<ng-template #linkTemplate let-navItem=\"navItem\">\n <a [routerLink]=\"navItem.routerLink\" *cccHasPermission=\"navItem.permission\">\n <div class=\"nav-item\" routerLinkActive=\"active-link\">\n <div class=\"link-button\">\n <div class=\"icon\">\n <mat-icon class=\"material-icons-outlined\" [inline]=\"true\">\n {{ navItem.icon }}\n </mat-icon>\n </div>\n <div class=\"text\">\n {{ navItem.label | titlecase }}\n </div>\n </div>\n </div>\n </a>\n</ng-template>\n<ng-template #expandableTemplate let-navItem=\"navItem\">\n <div class=\"nav-item\" aria-hidden=\"true\" (click)=\"navItem.isExpanded = !navItem.isExpanded\">\n <div class=\"link-button\">\n <div class=\"icon\">\n <mat-icon class=\"material-icons-outlined\" [inline]=\"true\">\n {{ navItem.isExpanded ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </div>\n <div class=\"text\">{{ navItem.label }}</div>\n </div>\n </div>\n @if (navItem.isExpanded) {\n <div class=\"expandable-links\">\n @for (navItemChild of navItem.children; track navItemChild) {\n <ng-container *ngTemplateOutlet=\"typeRendererTemplate; context: { navItem: navItemChild }\"> </ng-container>\n }\n </div>\n }\n</ng-template>\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable, NgZone } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport { AlertLevel, BASE_URL } from '@cccteam/ccc-lib/src/types';\nimport { UiCoreService } from '@cccteam/ccc-lib/src/ui-core-service';\nimport { CUSTOM_HTTP_REQUEST_OPTIONS } from '@cccteam/ccc-lib/src/util-request-options';\nimport { catchError, finalize, Observable, throwError } from 'rxjs';\n\n@Injectable()\nexport class ApiInterceptor implements HttpInterceptor {\n private ui = inject(UiCoreService);\n private auth = inject(AuthService);\n private router = inject(Router);\n private ngZone = inject(NgZone);\n private baseUrl = inject(BASE_URL);\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n this.ui.beginActivity(request.method + ' ' + request.url);\n\n return next.handle(request).pipe(\n catchError((error: HttpErrorResponse): Observable<HttpEvent<unknown>> => {\n if (error.status === 401) {\n this.ngZone.run(() => {\n this.auth.redirectUrl.set(this.baseUrl + this.router.url);\n this.router.navigate([this.auth.loginRoute()]);\n });\n }\n if (!request.context.get(CUSTOM_HTTP_REQUEST_OPTIONS).suppressGlobalError) {\n const message = error.error?.message ?? error.message ?? error.error;\n this.ui.publishError({\n message: message,\n level: AlertLevel.ERROR,\n link: '',\n });\n }\n\n return throwError(() => error);\n }),\n finalize(() => {\n this.ui.endActivity(request.method + ' ' + request.url);\n }),\n );\n }\n}\n","import { Injectable, signal } from '@angular/core';\nimport { CreateNotificationMessage, NotificationMessage } from '@cccteam/ccc-lib/src/types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationService {\n private notificationId = signal(0);\n private _notifications = signal<NotificationMessage[]>([]);\n notifications = this._notifications.asReadonly();\n\n /**\n * Adds a new global notification.\n * @param notification The notification message to add.\n * @returns The unique ID assigned to the notification.\n */\n addGlobalNotification(notification: CreateNotificationMessage): number {\n this.notificationId.update((id) => id + 1);\n const newNotification: NotificationMessage = {\n ...notification,\n id: this.notificationId(),\n };\n const existingNotification = this._notifications().find((n) => n.message === newNotification.message);\n if (existingNotification) {\n this.updateNotification({ ...existingNotification, ...newNotification });\n return existingNotification.id;\n }\n this._notifications.update((current) => [...current, newNotification]);\n return newNotification.id;\n }\n\n /**\n * Dismisses a global notification by its ID.\n * @param notificationId The ID of the notification to dismiss.\n */\n dismissGlobalNotificationById(notificationId: number): void {\n this._notifications.update((current) => current.filter((notification) => notification.id !== notificationId));\n }\n\n /**\n * Dismisses a specific global notification.\n * @param notification The notification to dismiss.\n */\n dismissGlobalNotification(notification: NotificationMessage): void {\n this.dismissGlobalNotificationById(notification.id);\n }\n\n /**\n * Updates an existing notification.\n * @param updatedNotification The notification with updated information.\n */\n updateNotification(updatedNotification: NotificationMessage): void {\n this._notifications.update((current) =>\n current.map((notification) =>\n notification.id === updatedNotification.id ? { ...notification, ...updatedNotification } : notification,\n ),\n );\n }\n}\n","import { Component, computed, input } from '@angular/core';\n\nimport { RecordData, ResourceMeta } from '@cccteam/ccc-lib/src/types';\n\nexport type ActionButtonContext =\n | {\n actionType: 'create' | 'edit' | 'delete';\n meta: ResourceMeta;\n resourceData: RecordData;\n shouldRender: (data: RecordData) => boolean;\n }\n | {\n actionType: 'rpc';\n // meta: RpcMethod; // Currently unused, but likely where ABAC permissions should live once implemented\n resourceData: RecordData;\n shouldRender: (data: RecordData) => boolean;\n };\n\n@Component({\n selector: 'action-access-control-wrapper',\n styles: `\n :host {\n margin-top: auto;\n margin-bottom: auto;\n }\n `,\n template: `@if (showAction()) {\n <ng-content />\n }`,\n})\nexport class ActionAccessControlWrapperComponent {\n actionContext = input<ActionButtonContext>();\n\n showAction = computed(() => {\n const context = this.actionContext();\n let isActionPermittedForUser = true;\n\n if (context === undefined) {\n return true;\n }\n\n const actionType = context.actionType;\n if (actionType === 'rpc') {\n //TODO: When ABAC permissions is completed, update this logic\n isActionPermittedForUser = true;\n }\n\n if (actionType === 'create') {\n isActionPermittedForUser = !context.meta.createDisabled;\n }\n\n if (actionType === 'edit') {\n isActionPermittedForUser = !context.meta.updateDisabled;\n }\n\n if (actionType === 'delete') {\n isActionPermittedForUser = !context.meta.deleteDisabled;\n }\n\n if (!isActionPermittedForUser) {\n console.debug('ACCESS CONTROL | ', actionType, ' action not permitted for user in context: ', context);\n return false;\n }\n\n let showAction = true;\n try {\n showAction = context.shouldRender(context.resourceData);\n } catch (e) {\n console.error('Failed to calculate value for should Render function for action: ', actionType);\n console.error(e);\n }\n return showAction;\n });\n}\n","import { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { ConfigElement, createResourceValidator } from '@cccteam/ccc-lib/src/types';\nimport { isDate } from 'date-fns';\nimport { formatInTimeZone } from 'date-fns-tz';\nimport { isNumber } from 'lodash-es';\n\nexport const maxConfigElementRecursionDepth = 240;\nexport const maxLayoutNestingDepth = 48;\n\n/** Returns a flat array of nested elements by recursively traversing\n * through the elements graph */\nexport const flattenElements: (elements: ConfigElement[], depth?: number) => ConfigElement[] = (\n elements: ConfigElement[],\n depth = 0,\n) => {\n depth++;\n if (!elements || elements.length === 0 || depth > maxConfigElementRecursionDepth) {\n return [];\n }\n return elements.reduce((acc, element) => {\n if (element.type === 'section') {\n return acc.concat(element, flattenElements(element.children, depth));\n }\n return acc.concat(element);\n }, [] as ConfigElement[]);\n};\n\nexport const civildateCoercion = (value: string): Date => {\n if (value === undefined || value === '') {\n return new Date(value);\n }\n return new Date(formatInTimeZone(new Date(value), 'UTC', 'yyyy-MM-dd HH:mm:ss'));\n};\n\nconst currentOrFutureDateValidator = (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) {\n return null; // Let \"REQUIRED\" validator handle empty values\n }\n\n if (!isDate(control.value)) {\n return { errorMsg: 'Value must be a valid date' };\n }\n\n const selectedDate = new Date(control.value);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n if (selectedDate >= today) {\n return null;\n }\n\n return { errorMsg: 'Past date not allowed' };\n};\n\nconst positiveNumberValidator = (control: AbstractControl): ValidationErrors | null => {\n if (!control.value && control.value !== 0) {\n return null; // Let \"REQUIRED\" validator handle \"empty\" values\n }\n\n if (isNumber(control.value) && control.value > 0) {\n return null;\n }\n\n return { errorMsg: 'Value must be a positive number' };\n};\n\nconst notFutureDateValidator = (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) {\n return null; // Let \"REQUIRED\" validator handle empty values\n }\n\n if (!isDate(control.value)) {\n return { errorMsg: 'Value must be a valid date' };\n }\n\n const selectedDate = new Date(control.value);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n if (selectedDate <= today) {\n return null;\n }\n\n return { errorMsg: 'Future date not allowed' };\n};\n\nconst valueInRangeInclusive = (min: number, max: number) => {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value && control.value !== 0) {\n return null; // Let \"REQUIRED\" validator handle \"empty\" values\n }\n\n if (isNumber(control.value) && control.value >= min && control.value <= max) {\n return null;\n }\n\n return { errorMsg: `Value must be in the range [${min}, ${max}]` };\n };\n};\n\n/**\n * This object stores every possible validator used across the application\n * Add all validators that are used in configs to this object\n *\n * Available validators that may be added: min, max, required, requiredTrue,\n * email, minLength, maxLength, pattern, nullValidator\n */\nexport const resourceValidators = Object.freeze({\n REQUIRED: createResourceValidator(Validators.required),\n EMAIL: createResourceValidator(Validators.email),\n CURRENT_OR_FUTURE_DATE: createResourceValidator(currentOrFutureDateValidator),\n POSITIVE_NUMBER: createResourceValidator(positiveNumberValidator),\n NOT_FUTURE_DATE: createResourceValidator(notFutureDateValidator),\n VALUE_IN_RANGE_INCLUSIVE: (min: number, max: number) => createResourceValidator(valueInRangeInclusive(min, max)),\n MAX_LENGTH: (maxLength: number) => createResourceValidator(Validators.maxLength(maxLength)),\n\n // Add any additional validators here. They may be defined in\n // a different file if they are too large. E.g.:\n // MIN_LENGTH_3: createResourceValidator(Validators.minLength(3)),\n});\n","import { Component, HostBinding, input, OnInit } from '@angular/core';\nimport { PaddingElement } from '@cccteam/ccc-lib/src/types';\n\n@Component({\n selector: 'ccc-padding-element',\n imports: [],\n templateUrl: './padding-element.component.html',\n styleUrls: ['./padding-element.component.scss'],\n})\nexport class PaddingElementComponent implements OnInit {\n paddingElement = input.required<PaddingElement>();\n\n @HostBinding('class') class = 'col-6';\n\n ngOnInit(): void {\n if (this.paddingElement().cols) {\n this.class = 'col-' + this.paddingElement()?.cols;\n }\n }\n}\n","<div class=\"padding-container\"></div>\n","import { Component, computed, effect, HostBinding, input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { ComputedDisplayFieldElement, RecordData } from '@cccteam/ccc-lib/src/types';\n\n@Component({\n selector: 'ccc-computed-field',\n imports: [MatFormFieldModule, MatButtonModule, MatInputModule],\n templateUrl: './computed-field.component.html',\n styleUrl: './computed-field.component.scss',\n})\nexport class ComputedFieldComponent {\n fieldConfig = input.required<ComputedDisplayFieldElement>();\n fieldClass = input<string>();\n formDataState = input<RecordData>();\n\n computedValue = computed(() => {\n try {\n return this.fieldConfig().calculatedValue(this.formDataState());\n } catch (e) {\n console.error('Failed to calculate value for computed field: ', this.fieldConfig().label);\n console.error(e);\n return '';\n }\n });\n\n showField = computed(() => {\n const shouldRender = this.fieldConfig().shouldRender;\n if (typeof shouldRender === 'boolean') {\n return shouldRender;\n }\n\n try {\n return shouldRender(this.formDataState());\n } catch (e) {\n console.error('Failed to calculate value for should Render function for field: ', this.fieldConfig().label);\n console.error(e);\n return true;\n }\n });\n\n @HostBinding('class') class = '';\n\n constructor() {\n effect(() => {\n this.class = this.showField() ? 'col-' + this.fieldConfig()?.cols : 'hidden-field';\n });\n }\n}\n","@if (showField()) {\n <div class=\"readonly-field\">\n <mat-form-field class=\"field {{ fieldClass() }}\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <input\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"true\"\n type=\"text\"\n [value]=\"computedValue()\" />\n </mat-form-field>\n </div>\n}\n","import { Component, input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { defaultEmptyFieldValue } from '@cccteam/ccc-lib/src/types';\n\n@Component({\n selector: 'ccc-empty-readonly-field',\n imports: [MatFormFieldModule, MatButtonModule, MatInputModule],\n templateUrl: './empty-readonly-field.component.html',\n styleUrl: './empty-readonly-field.component.scss',\n})\nexport class EmptyReadonlyFieldComponent {\n label = input.required<string>();\n\n displayValue = defaultEmptyFieldValue;\n}\n","<div class=\"readonly-field\">\n <mat-form-field class=\"field\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ label() }}</mat-label>\n <input\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"true\"\n type=\"text\"\n [value]=\"displayValue\"\n id=\"{{ label() }}-readonly-input-text\" />\n </mat-form-field>\n</div>\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { computed, inject, Injectable, Injector, ResourceRef, Signal, signal, untracked } from '@angular/core';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport {\n AlertLevel,\n API_URL,\n ColumnConfig,\n CreateNotificationMessage,\n FieldName,\n FieldSort,\n METHOD_META,\n RecordData,\n Resource,\n ResourceMeta,\n RPCConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\nimport { Observable, of, tap } from 'rxjs';\nimport { Operation } from './resources-helpers';\n\n@Injectable()\nexport class ResourceStore {\n resourceMeta = signal({} as ResourceMeta);\n resourceName = signal<Resource>('' as Resource);\n filter = signal<string>('');\n disableCacheForFilterPii = signal(false);\n searchTokens = signal<string>('');\n sorts = signal<FieldSort[]>([]);\n listColumns = signal<ColumnConfig[]>([]);\n requireSearchToDisplayResults = signal(false);\n uuid = signal<string>('');\n error = signal<string>('');\n\n notifications = inject(NotificationService);\n http = inject(HttpClient);\n router = inject(Router);\n injector = inject(Injector);\n apiUrl = inject(API_URL);\n methodMeta = inject(METHOD_META);\n\n private resourceListRef = signal<ResourceRef<RecordData[]> | undefined>(undefined);\n listData = computed(() => {\n const ref = this.resourceListRef();\n if (ref && ref.status() === 'resolved') {\n return ref.value();\n }\n return [];\n });\n listStatus = computed(() => {\n return this.resourceListRef()?.status();\n });\n\n private resourceViewRef = signal<ResourceRef<RecordData> | undefined>(undefined);\n viewData = computed(() => {\n const ref = this.resourceViewRef();\n if (ref && ref.status() === 'resolved') {\n return ref.value();\n }\n return {} as RecordData;\n });\n viewStatus = computed(() => {\n return this.resourceViewRef()?.status();\n });\n\n overrideRoute = signal<string>('');\n resourceRoute = computed(() => this.resourceMeta()?.route);\n route = computed(() => {\n if (this.overrideRoute()) {\n return this.overrideRoute();\n }\n const route = this.resourceRoute();\n if (route) {\n return route;\n }\n return '';\n });\n\n reloadViewData(): void {\n this.resourceViewRef()?.reload();\n }\n\n reloadListData(): void {\n this.resourceListRef()?.reload();\n }\n\n buildStoreListData(): void {\n const route = this.route();\n const name = this.resourceName();\n if (!route || name === '') {\n return;\n }\n const columnIds = this.listColumns().flatMap((col) => {\n return [col.id];\n });\n const resourceMeta = this.resourceMeta();\n if (resourceMeta && resourceMeta.fields.some((field) => field.fieldName === 'id')) {\n columnIds.push('id' as FieldName);\n }\n const uniqueColumns = signal([...new Set([...columnIds])]);\n\n const ref = this.resourceList(\n this.route,\n this.filter,\n uniqueColumns,\n this.disableCacheForFilterPii,\n this.searchTokens,\n this.sorts,\n );\n this.resourceListRef.set(ref);\n this.reloadListData();\n }\n\n buildStoreViewData(): void {\n const route = this.route();\n const uuid = this.uuid();\n if (!route || !uuid || uuid === 'undefined') {\n return;\n }\n\n const ref = this.resourceView(this.route, this.uuid);\n this.resourceViewRef.set(ref);\n this.reloadListData();\n }\n\n routes = {\n resources: (rootUrl: string, resources: string): string => `${rootUrl}/${resources}`,\n resource: (rootUrl: string, resources: string, uuid: string): string => `${rootUrl}/${resources}/${uuid}`,\n method: (rootUrl: string, method: string): string => `${rootUrl}/${method}`,\n };\n\n makePatches(operations: Operation[], route: string, resource: Resource): Observable<Record<string, unknown>> {\n return this.patchMultiple(String(route), operations).pipe(\n tap(() => {\n this.notifications.addGlobalNotification({\n message: `${resource} updated successfully`,\n level: AlertLevel.SUCCESS,\n duration: 5000,\n link: '',\n } satisfies CreateNotificationMessage);\n }),\n );\n }\n\n createPatch(operation: Operation, route: string, resource: Resource): Observable<Record<string, unknown>> {\n return this.patchMultiple(String(route), [operation]).pipe(\n tap(() => {\n this.notifications.addGlobalNotification({\n message: `${resource} created successfully`,\n level: AlertLevel.SUCCESS,\n duration: 5000,\n link: '',\n } satisfies CreateNotificationMessage);\n }),\n );\n }\n\n private patchMultiple(resourceRoute: string, data: Operation[]): Observable<Record<string, unknown>> {\n return this.http.patch<Record<string, unknown>>(this.routes.resources(this.apiUrl, resourceRoute), data);\n }\n\n resourceView(route: Signal<string>, uuid: Signal<string>): ResourceRef<RecordData> {\n return untracked(\n () =>\n rxResource({\n injector: this.injector,\n params: () => ({\n route: route,\n uuid: uuid,\n }),\n stream: ({ params }) => {\n if (!params.route() || !params.uuid() || params.uuid() === 'undefined') return of({} as RecordData);\n return this.http.get<RecordData>(\n this.routes.resource(this.apiUrl, String(params.route()), params.uuid() || ''),\n );\n },\n }) as ResourceRef<RecordData>,\n );\n }\n\n resourceList(\n route: Signal<string>,\n filter: Signal<string> = signal(''),\n columns: Signal<string[]> = signal([]),\n disableCacheForFilterPii: Signal<boolean> = signal(false),\n searchTokens: Signal<string> = signal(''),\n sorts: Signal<FieldSort[]> = signal([]),\n defaultEmpty = false,\n ): ResourceRef<RecordData[]> {\n return untracked(() => {\n return rxResource({\n defaultValue: [] as RecordData[],\n injector: this.injector,\n params: () => ({\n route: route(),\n filter: filter(),\n columns: columns(),\n searchTokens: searchTokens(),\n sorts: sorts(),\n }),\n stream: ({ params }) => {\n if (!params.route) return of([] as RecordData[]);\n if (defaultEmpty && (!params.searchTokens || params.searchTokens.trim() === '')) {\n return of([] as RecordData[]);\n }\n return this.list<RecordData>(\n String(params.route),\n params.filter,\n disableCacheForFilterPii(),\n params.columns,\n params.searchTokens,\n params.sorts,\n );\n },\n }) as ResourceRef<RecordData[]>;\n });\n }\n\n private list<T>(\n resourceRoute: string,\n filter?: string,\n disableCacheForFilterPii?: boolean,\n columns?: string[],\n searchTokens?: string,\n sort?: FieldSort[],\n ): Observable<T[]> {\n const paramsObj: Record<string, string> = {};\n if (filter && filter.trim() !== '') paramsObj['filter'] = filter;\n if (columns && columns.length > 0) paramsObj['columns'] = columns.join(',');\n if (searchTokens && searchTokens.trim() !== '') paramsObj['SearchTokens'] = searchTokens;\n if (sort && sort.length > 0) {\n paramsObj['sort'] = sort.map((s) => `${s.field}:${s.direction}`).join(',');\n }\n const params = new HttpParams({ fromObject: paramsObj });\n if (disableCacheForFilterPii) {\n const paramsObjWithoutFilter = { ...paramsObj };\n delete paramsObjWithoutFilter['filter'];\n return this.http.post<T[]>(\n this.routes.resources(this.apiUrl, resourceRoute),\n { filter: filter },\n paramsObjWithoutFilter,\n );\n }\n return this.http.get<T[]>(this.routes.resources(this.apiUrl, resourceRoute), { params });\n }\n\n rpcCall<T>(rpcConfig: RPCConfig, body: T): Observable<T> {\n const methodData = this.methodMeta(rpcConfig.method);\n if (!methodData) {\n console.error('Method not found in methodMap:', rpcConfig.method);\n return of({} as T);\n }\n\n return this.http.post<T>(this.routes.method(this.apiUrl, methodData.route), body).pipe(\n tap(() => {\n this.notifications.addGlobalNotification({\n message: rpcConfig.successMessage ? rpcConfig.successMessage : `${rpcConfig.method} called successfully`,\n level: AlertLevel.SUCCESS,\n duration: 5000,\n link: '',\n } satisfies CreateNotificationMessage);\n if (rpcConfig.afterMethodRedirect) {\n if (typeof rpcConfig.afterMethodRedirect === 'string') {\n this.router.navigate([rpcConfig.afterMethodRedirect]);\n } else {\n this.router.navigate(rpcConfig.afterMethodRedirect);\n }\n }\n }),\n );\n }\n}\n","import { computed, Injectable, signal } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormStateService {\n dirtyForms = signal(0);\n\n incrementDirtyForms(): void {\n this.dirtyForms.set(this.dirtyForms() + 1);\n }\n\n decrementDirtyForms(): void {\n this.dirtyForms.set(this.dirtyForms() - 1);\n }\n\n resetDirtyForms(): void {\n this.dirtyForms.set(0);\n }\n\n isDirty = computed(() => {\n return this.dirtyForms() > 0;\n });\n}\n","import { Component } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogActions, MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\n@Component({\n selector: 'ccc-leave-page-confirmation-modal',\n imports: [MatDialogModule, MatFormFieldModule, MatDialogActions, MatButtonModule],\n templateUrl: './leave-page-confirmation-modal.component.html',\n styleUrls: ['./leave-page-confirmation-modal.component.scss'],\n})\nexport class LeavePageConfirmationModalComponent {}\n","<div mat-dialog-title>You have unsaved changes, are you sure you want to leave?</div>\n<mat-dialog-content>\n <p>Any unsaved changes will be lost.</p>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"false\">Cancel</button>\n <button mat-raised-button color=\"accent\" [mat-dialog-close]=\"true\">Confirm</button>\n</mat-dialog-actions>\n","import { inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { CanDeactivateFn, UrlTree } from '@angular/router';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport { firstValueFrom, Observable, tap } from 'rxjs';\nimport { FormStateService } from './form-state.service';\nimport { LeavePageConfirmationModalComponent } from './leave-page-confirmation-modal/leave-page-confirmation-modal.component';\n\nexport type CanDeactivateType = Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;\n\nexport interface CanComponentDeactivate {\n canDeactivate: () => CanDeactivateType;\n}\n\nexport const canDeactivateGuard: CanDeactivateFn<CanComponentDeactivate> = async (_, __, ___, nextState) => {\n const auth = inject(AuthService);\n const dialog = inject(MatDialog);\n const formStateService = inject(FormStateService);\n\n if (nextState?.url.includes(auth.loginRoute())) {\n return true;\n }\n\n if (!formStateService.isDirty()) {\n return true;\n }\n\n const existingDialog = dialog.openDialogs.find(\n (d) => d.componentInstance instanceof LeavePageConfirmationModalComponent,\n );\n\n const dialogRef = existingDialog ?? dialog.open(LeavePageConfirmationModalComponent, { delayFocusTrap: false });\n\n const result = dialogRef.afterClosed().pipe(\n tap((value) => {\n if (value === true) {\n formStateService.resetDirtyForms();\n }\n }),\n );\n\n return firstValueFrom(result);\n};\n","import { ModelSignal } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { Route } from '@angular/router';\nimport {\n ConfigElement,\n DataType,\n FieldElement,\n MenuItem,\n MethodMeta,\n RecordData,\n Resource,\n ResourceMeta,\n RootConfig,\n RouteResourceData,\n RPCRecordData,\n ViewConfig\n} from '@cccteam/ccc-lib/src/types';\nimport { format, isValid } from 'date-fns';\nimport { canDeactivateGuard } from './can-deactivate.guard';\nimport { civildateCoercion, flattenElements } from './gui-constants';\n\nexport const generatedNavItems = [] as MenuItem[];\nexport const generatedNavGroups = [] as string[];\n\nexport interface Link {\n id: string;\n resource: Resource;\n text: string;\n}\n\nexport type ResourceMap = Record<Resource, ResourceMeta>;\n\nexport type PristineData = Record<string, DataType | null>;\n\nexport const createFormGroup = (\n meta: ResourceMeta,\n resourceData: RecordData,\n config: ViewConfig,\n formDataState?: ModelSignal<RecordData>,\n): {\n formGroup: FormGroup;\n pristineFormValues: PristineData;\n} => {\n const fg = new FormGroup({});\n const pristineValues: Record<string, DataType | null> = {};\n const allElements = flattenElements(config.elements);\n\n for (const field of meta.fields || []) {\n const isFieldNameRegistered = fg.get(field.fieldName) !== null;\n if (isFieldNameRegistered) {\n continue;\n }\n\n const findConfig = allElements.find((element) => element.type === 'field' && element.name === field.fieldName);\n const fieldConfig = findConfig as FieldElement | undefined;\n if (!fieldConfig) {\n continue;\n }\n\n let value: DataType | null = null;\n const stringValue = resourceData?.[field.fieldName] ? String(resourceData[field.fieldName]) : '';\n\n if (field.displayType === 'civildate' && stringValue) {\n value = civildateCoercion(stringValue);\n } else if (resourceData[field.fieldName] !== undefined) {\n value = resourceData[field.fieldName];\n }\n\n const control = new FormControl(value);\n\n if (fieldConfig.validators.length > 0) {\n control.setValidators(fieldConfig.validators);\n }\n\n fg.addControl(field.fieldName, control);\n pristineValues[field.fieldName] = value;\n }\n // todo: swap this with a manual subscription where the form data is subscribed to and\n // is dstroyed once the form is destroyed, similar to gui/src/app/components/Resource/resource-view/resource-view.component.ts\n // constructor effect\n console.debug(formDataState);\n // formDataState && formDataState.set(pristineValues);\n\n return {\n formGroup: fg,\n pristineFormValues: pristineValues,\n };\n};\n\nexport const resourceRoutes = (config: RootConfig, resourceMeta: (resource: Resource) => ResourceMeta): Route => {\n const meta = resourceMeta(config.parentConfig.primaryResource as Resource);\n if (!meta) {\n return {} as Route;\n }\n\n if (config.nav.group) {\n if (config.routeData.route) {\n addToNavItems(config.nav, config.routeData.route);\n } else {\n addToNavItems(config.nav, meta.route);\n }\n }\n\n if (config.routeData.route) {\n const baseRoute: Route = {\n path: config.routeData.route,\n data: { config: config } satisfies RouteResourceData,\n children: [\n {\n path: '',\n loadComponent: () => import('./resource-list-create/resource-list-create.component').then((mod) => mod.ResourceListCreateComponent),\n canDeactivate: [canDeactivateGuard],\n },\n ],\n };\n if (config.routeData.hasViewRoute !== false) {\n baseRoute.children?.push({\n path: ':uuid',\n loadComponent: () => import('./compound-resource/compound-resource.component').then((mod) => mod.CompoundResourceComponent),\n canDeactivate: [canDeactivateGuard],\n });\n return baseRoute;\n }\n }\n\n return {\n path: meta.route,\n data: { config: config } as RouteResourceData,\n children: [\n {\n path: ':uuid',\n loadComponent: () => import('./compound-resource/compound-resource.component').then((mod) => mod.CompoundResourceComponent),\n canDeactivate: [canDeactivateGuard],\n },\n {\n path: '',\n loadComponent: () => import('./resource-list-create/resource-list-create.component').then((mod) => mod.ResourceListCreateComponent),\n canDeactivate: [canDeactivateGuard],\n },\n ],\n } satisfies Route;\n};\n\nfunction addToNavItems(\n nav: {\n navItem: MenuItem;\n group?: string;\n },\n route: string,\n): void {\n nav.navItem.route = [route];\n\n if (!nav.group) {\n generatedNavItems.push(nav.navItem);\n return;\n }\n\n if (!generatedNavGroups.includes(nav.group)) {\n generatedNavGroups.push(nav.group);\n }\n\n let groupItem = generatedNavItems.find((item) => item.label === nav.group);\n\n if (!groupItem) {\n groupItem = { label: nav.group, children: [] };\n generatedNavItems.push(groupItem);\n }\n\n groupItem.children = groupItem.children || [];\n groupItem.children.push(nav.navItem);\n\n generatedNavItems.sort((a, b) => (a.label > b.label ? -1 : 1));\n}\n\n/**\n * Recursive function to extract nested field names from a config.\n * @param elements - The elements to extract field names from.\n * @returns - An array of field names.\n */\nexport function extractFieldNames(elements: ConfigElement[]): string[] {\n const fields: string[] = [];\n for (const element of elements) {\n if (element.type === 'section') {\n fields.push(...extractFieldNames(element.children));\n } else if (element.type === 'field') {\n fields.push(element.name as string);\n }\n }\n return fields;\n}\n\nexport type PatchOperation = 'add' | 'patch' | 'remove';\n\nexport interface Operation {\n op: PatchOperation;\n value?: Record<string, unknown>;\n path: string;\n}\n\nexport interface CreateOperation extends Operation {\n op: 'add';\n}\n\nexport interface UpdateOperation extends Operation {\n op: 'patch';\n}\n\nexport interface DeleteOperation extends Operation {\n op: 'remove';\n}\n\n/**\n * Checks if a string is a valid UUID (versions 1-5) according to RFC 4122.\n *\n * @param str - The string to validate.\n * @returns `true` if the string is a valid UUID, otherwise `false`.\n */\nexport function isUUID(str: string): boolean {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return uuidRegex.test(str);\n}\n\n/**\n * Coerces metadata types in a record according to the metadata.\n *\n * @param record - The record to coerce.\n * @param meta - The metadata (resource or method).\n * @returns The coerced record.\n */\nexport function metadataTypeCoercion(record: RecordData, meta: ResourceMeta): RecordData;\nexport function metadataTypeCoercion(record: RPCRecordData, meta: MethodMeta): RPCRecordData;\nexport function metadataTypeCoercion(\n record: RecordData | RPCRecordData,\n meta: ResourceMeta | MethodMeta,\n): RecordData | RPCRecordData {\n if (!meta?.fields) return record;\n\n const displayTypeByField = new Map(meta.fields.map((f) => [f.fieldName, f.displayType]));\n\n for (const [key, value] of Object.entries(record)) {\n const displayType = displayTypeByField.get(key);\n if (displayType === 'civildate' && value && isValid(value)) {\n const date = value as Date;\n record[key] = format(date, 'yyyy-MM-dd');\n }\n }\n\n return record;\n}\n","import { computed, Directive, inject, Injector, input, ResourceRef, signal } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport {\n DataType,\n FieldElement,\n FieldMeta,\n Meta,\n RecordData,\n RESOURCE_META,\n RPCFieldMeta,\n} from '@cccteam/ccc-lib/src/types';\nimport { ResourceStore } from '../resource-store.service';\nimport { isUUID } from '../resources-helpers';\n/*\n * Base class for all resource input components.\n */\n@Directive()\nexport abstract class BaseInputComponent {\n resourceMeta = inject(RESOURCE_META);\n injector = inject(Injector);\n store = inject(ResourceStore);\n\n meta = input.required<Meta>();\n pristineValue = input<DataType | null>();\n editMode = input.required<'edit' | 'view'>();\n showField = input<boolean>();\n fieldConfig = input.required<FieldElement>();\n fieldClass = input<string>();\n fieldMeta = input.required<FieldMeta | RPCFieldMeta>();\n form = input.required<FormGroup>();\n relatedData = input<RecordData>();\n\n /**\n * Resets the field back to its pristine value.\n */\n reset(): void {\n const control = this.form().get(this.fieldConfig().name as string);\n if (control) {\n control.setValue(this.pristineValue());\n control.markAsPristine();\n }\n }\n\n private affixResources = new Map<string, ResourceRef<RecordData>>();\n\n prefixString = computed(() => {\n const relatedData = this.relatedData();\n let builtPrefix = '';\n this.fieldConfig().prefixes.forEach((prefix) => {\n if (typeof prefix === 'string') {\n builtPrefix += prefix;\n } else if ('resource' in prefix) {\n if (!relatedData || !relatedData[prefix.id]) {\n return;\n }\n const id = relatedData[prefix.id];\n if (typeof id !== 'string' || !id || !isUUID(id)) {\n return;\n }\n\n const cacheKey = `${prefix.resource}-${id}`;\n let resourceRef = this.affixResources.get(cacheKey);\n\n if (!resourceRef) {\n const prefixResourceMeta = this.resourceMeta(prefix.resource);\n resourceRef = this.store.resourceView(signal(prefixResourceMeta.route), signal(id));\n this.affixResources.set(cacheKey, resourceRef!);\n }\n\n const resource = resourceRef.value();\n if (resource && prefix.field in resource) {\n builtPrefix += resource[String(prefix.field)];\n }\n } else if ('field' in prefix) {\n if (relatedData) {\n const fieldValue = relatedData[prefix.field];\n builtPrefix += fieldValue ? fieldValue : '';\n }\n }\n });\n return builtPrefix;\n });\n\n suffixString = computed(() => {\n const relatedData = this.relatedData();\n let builtSuffix = '';\n this.fieldConfig().suffixes.forEach((suffix) => {\n if (typeof suffix === 'string') {\n builtSuffix += suffix;\n } else if ('resource' in suffix) {\n if (!relatedData || !relatedData[suffix.id]) {\n return;\n }\n const id = relatedData[suffix.id];\n if (typeof id !== 'string' || !id || !isUUID(id)) {\n return;\n }\n\n const cacheKey = `${suffix.resource}-${id}`;\n let resourceRef = this.affixResources.get(cacheKey);\n\n if (!resourceRef) {\n const suffixResourceMeta = this.resourceMeta(suffix.resource);\n resourceRef = this.store.resourceView(signal(suffixResourceMeta.route), signal(id));\n this.affixResources.set(cacheKey, resourceRef!);\n }\n\n const resource = resourceRef.value();\n if (resource && suffix.field in resource) {\n builtSuffix += resource[suffix.field];\n }\n } else if ('field' in suffix) {\n if (relatedData) {\n const fieldValue = relatedData[suffix.field];\n builtSuffix += fieldValue ? fieldValue : '';\n }\n }\n });\n return builtSuffix;\n });\n\n floatLabel = computed(() => {\n if (this.fieldConfig().prefixes.length > 0 || this.fieldConfig().suffixes.length > 0) {\n return 'always';\n } else {\n return 'auto';\n }\n });\n}\n","import { Component } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-boolean-field',\n imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule, ReactiveFormsModule, MatCheckboxModule],\n templateUrl: './boolean-field.component.html',\n styleUrl: './boolean-field.component.scss',\n})\nexport class BooleanFieldComponent extends BaseInputComponent {}\n","@if (showField()) {\n <ng-container [formGroup]=\"form()\">\n <div [class.readonly-field]=\"editMode() === 'view'\">\n <mat-checkbox\n class=\"field checkbox {{ fieldClass() }}\"\n [formControlName]=\"fieldConfig().name\"\n (keydown.enter)=\"$event.preventDefault()\">\n {{ fieldConfig().label }}\n </mat-checkbox>\n </div>\n </ng-container>\n} @else {\n <ng-container [formGroup]=\"form()\">\n <input type=\"hidden\" [formControlName]=\"fieldConfig().name\" />\n </ng-container>\n}\n","import { Component } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-date-field',\n imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule, ReactiveFormsModule],\n templateUrl: './date-field.component.html',\n styleUrl: './date-field.component.scss',\n})\nexport class DateFieldComponent extends BaseInputComponent {}\n","@if (showField()) {\n <div [class.readonly-field]=\"editMode() === 'view'\">\n <mat-form-field class=\"field {{ fieldClass() }}\" [formGroup]=\"form()\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <input\n matInput\n [readonly]=\"editMode() === 'view'\"\n [matDatepicker]=\"picker\"\n type=\"text\"\n (keydown.enter)=\"$event.preventDefault()\"\n [formControlName]=\"fieldConfig().name\" />\n @if (editMode() === 'edit') {\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n }\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n} @else {\n <ng-container [formGroup]=\"form()\">\n <input type=\"hidden\" [formControlName]=\"fieldConfig().name\" />\n </ng-container>\n}\n","export const concatFunctions = {\n 'space-concat': spaceConcat,\n 'hyphen-concat': hyphenConcat,\n 'space-hyphen-concat': spaceHyphenConcat,\n 'hyphen-space-concat': hyphenSpaceConcat,\n};\n\n/**\n * Concatenates the strings corresponding to the given keys in the resource,\n * using a space separator.\n * @param resource A record mapping keys to string values.\n * @param args Keys of the resource to concatenate.\n * @returns Concatenated string.\n * @example\n * const resource = { foo: 'foo', bar: 'bar', baz: 'baz' };\n * spaceConcat(resource, 'foo', 'bar', 'baz'); // returns 'foo bar baz'\n */\nexport function spaceConcat(resource: Record<string, string>, ...args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return resource[args[0] ?? ''] ?? '';\n return args.map((arg) => resource[arg] ?? '').join(' ');\n}\n\n/**\n * Concatenates the strings corresponding to the given keys in the resource,\n * using a hyphen separator.\n * @param resource A record mapping keys to string values.\n * @param args Keys of the resource to concatenate.\n * @returns Concatenated string.\n * @example\n * const resource = { foo: 'foo', bar: 'bar', baz: 'baz' };\n * hyphenConcat(resource, 'foo', 'bar', 'baz'); // returns 'foo - bar - baz'\n */\nexport function hyphenConcat(resource: Record<string, string>, ...args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return resource[args[0] ?? ''] ?? '';\n return args.map((arg) => resource[arg] ?? '').join(' - ');\n}\n\n/**\n * Concatenates the given strings so that all but the last are joined with a space,\n * and the last string is appended with a \" - \" separator.\n * @param resource A mapping of keys to string values.\n * @param args Keys of strings to concatenate.\n * @returns Concatenated string.\n * @example spaceHyphenConcat(resource, 'foo', 'bar', 'baz') => 'foo bar - baz'\n */\nexport function spaceHyphenConcat(resource: Record<string, string>, ...args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return resource[args[0] || ''] || '';\n\n const initialPart = args\n .slice(0, -1)\n .map((arg) => resource[arg] || '')\n .join(' ');\n\n const lastPart = resource[args[args.length - 1] || ''] || '';\n\n return `${initialPart} - ${lastPart}`;\n}\n\n/**\n * Concatenates the given strings so that all but the first are joined with a space,\n * and the first string is appended with a \" - \" separator.\n * @param resource A mapping of keys to string values.\n * @param args Keys of strings to concatenate.\n * @returns Concatenated string.\n * @example spaceHyphenConcat(resource, 'foo', 'bar', 'baz') => 'foo - bar baz'\n */\nexport function hyphenSpaceConcat(resource: Record<string, string>, ...args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return resource[args[0] || ''] || '';\n\n const initialPart = args[0] !== undefined ? resource[args[0]] || '' : '';\n\n const lastPart = args\n .slice(1, args.length)\n .map((arg) => resource[arg] || '')\n .join(' ');\n\n return `${initialPart} - ${lastPart}`;\n}\n\n/**\n * Concatenates the strings using a space separator.\n * @param args Strings to concatenate.\n * @returns Concatenated string.\n * @example\n * spaceConcatWithoutResource(['foo', 'bar', 'baz']); // returns 'foo bar baz'\n */\nexport function spaceConcatWithoutResource(args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return args[0] ?? '';\n return args.map((arg) => arg ?? '').join(' ');\n}\n\n/**\n * Concatenates the strings using a hyphen separator.\n * @param args Strings to concatenate.\n * @returns Concatenated string.\n * @example\n * hyphenConcatWithoutResource(['foo', 'bar', 'baz']); // returns 'foo - bar - baz'\n */\nexport function hyphenConcatWithoutResource(args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return args[0] || '';\n return args.join(' - ');\n}\n\n/**\n * Concatenates the given strings so that all but the last are joined with a space,\n * and the last string is appended with a \" - \" separator.\n * @param args Strings to concatenate.\n * @returns Concatenated string.\n * @example spaceHyphenConcatWithoutResource(['foo', 'bar', 'baz']) => 'foo bar - baz'\n */\nexport function spaceHyphenConcatWithoutResource(args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return args[0] || '';\n\n const initialPart = args\n .slice(0, -1)\n .map((arg) => arg || '')\n .join(' ');\n\n const lastPart = args[args.length - 1] || '';\n\n return `${initialPart} - ${lastPart}`;\n}\n\n/**\n * Concatenates the given strings so that all but the first are joined with a space,\n * and the first string is appended with a \" - \" separator.\n * @param args Strings to concatenate.\n * @returns Concatenated string.\n * @example hyphenSpaceConcatWithoutResource(['foo', 'bar', 'baz']) => 'foo - bar baz'\n */\nexport function hyphenSpaceConcatWithoutResource(args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return args[0] || '';\n\n const initialPart = args[0] || '';\n\n const lastPart = args\n .slice(1, args.length)\n .map((arg) => arg || '')\n .join(' ');\n\n return `${initialPart} - ${lastPart}`;\n}\n\n/**\n * Concatenates the given strings without any space,\n * @param args Strings to concatenate.\n * @returns Concatenated string.\n * @example noSpaceConcatWithoutResource(['foo', 'bar', 'baz']) => 'foobarbaz'\n */\nexport function noSpaceConcatWithoutResource(args: string[]): string {\n if (args.length === 0) return '';\n if (args.length === 1) return args[0] || '';\n return args.join('');\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, signal, untracked } from '@angular/core';\nimport { ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { defaultEmptyFieldValue, EnumeratedConfig, FieldElement, Resource, RootConfig } from '@cccteam/ccc-lib/src/types';\nimport { concatFunctions, hyphenConcat } from '../../../../ccc-resource/concat-fns';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-enumerated-field',\n imports: [\n MatFormFieldModule,\n MatInputModule,\n MatDatepickerModule,\n ReactiveFormsModule,\n MatOptionModule,\n MatSelectModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n RouterModule,\n MatAutocompleteModule,\n ],\n templateUrl: './enumerated-field.component.html',\n styleUrl: './enumerated-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EnumeratedFieldComponent extends BaseInputComponent {\n activatedRoute = inject(ActivatedRoute);\n router = inject(Router);\n reloadSignal = signal(false);\n\n query = signal('');\n\n resource = computed(() => {\n if (this.fieldConfig()?.enumeratedConfig?.overrideResource) {\n return this.fieldConfig()?.enumeratedConfig?.overrideResource;\n }\n return this.fieldMeta()?.enumeratedResource as Resource;\n });\n\n tooltipMessage = computed(() => {\n const label = this.fieldConfig().label;\n return 'View ' + label + ' details';\n });\n\n route = computed(() => {\n const resource = this.fieldMeta()?.enumeratedResource;\n return this.resourceMeta(resource as Resource)?.route;\n });\n\n viewDetails = computed(() => {\n return this.editMode() === 'view' && this.fieldConfig().enumeratedConfig.viewDetails === true;\n });\n\n sorts = computed(() => {\n return this.fieldConfig().enumeratedConfig.sorts;\n });\n\n singleEnumResourceRef = computed(() => {\n this.editMode();\n if (this.showField() === false) {\n return undefined;\n }\n\n const route = this.route();\n const resource = this.resource();\n\n this.reloadSignal();\n const fieldValue = this.form().get(this.fieldConfig().name)?.value;\n\n if (fieldValue && route && resource) {\n return untracked(() => this.store.resourceView(this.route, signal(fieldValue)));\n }\n return undefined;\n });\n\n rootResourceRef = computed(() => {\n const rootConfig = this.activatedRoute.snapshot.data['config'] as RootConfig;\n const uuid = (this.activatedRoute.snapshot.params['uuid'] || '') as string;\n const rootMeta = this.resourceMeta(rootConfig.parentConfig.primaryResource);\n return this.store.resourceView(signal(rootMeta.route), signal(uuid));\n });\n\n enumResourceRef = computed(() => {\n if (this.showField() === false) return undefined;\n const enumeratedMeta = this.resourceMeta(this.resource() as Resource);\n const config = this.fieldConfig().enumeratedConfig;\n const filter =\n config.filterType === 'rootResource'\n ? config?.filter?.(this.rootResourceRef()?.value() || {})\n : config?.filter?.(this.relatedData() || {});\n return this.store.resourceList(\n signal(enumeratedMeta.route),\n signal(filter),\n signal([]),\n signal(config.disableCacheForFilterPii),\n this.query,\n this.sorts,\n );\n });\n\n singleEnumDisplayText = computed(() => {\n const showField = this.showField();\n if (showField === false) {\n return undefined;\n }\n\n const form = this.form();\n const fieldConfig = this.fieldConfig();\n const singleEnumResourceRef = this.singleEnumResourceRef();\n\n if (form === undefined || fieldConfig === undefined || singleEnumResourceRef === undefined) {\n return defaultEmptyFieldValue;\n }\n\n const record = singleEnumResourceRef.value();\n if (record === undefined) {\n return defaultEmptyFieldValue;\n }\n\n const enumeratedValues = this.toEnumerated(record as Record<string, string>, fieldConfig);\n return enumeratedValues.display;\n });\n\n hasRequiredValidator = computed(() => {\n const form = this.form();\n const fieldConfig = this.fieldConfig();\n\n if (form === undefined || fieldConfig === undefined) {\n return false;\n }\n\n const control = form.get(fieldConfig.name);\n if (!control) {\n return false;\n }\n\n return control.hasValidator(Validators.required);\n });\n\n singleEnumValue = computed(() => {\n if (this.showField() === false) return undefined;\n const currentValue = this.form().get(this.fieldConfig().name)?.value;\n const record = this.singleEnumResourceRef()?.value();\n if (!currentValue) return [];\n if (!record) return [];\n return [this.toEnumerated(record as Record<string, string>, this.fieldConfig())];\n });\n\n listEnumValues = computed(() => {\n if (this.showField() === false) return [];\n const currentValue = this.singleEnumValue();\n const records = this.enumResourceRef()?.value();\n if (!records || !records.length) return currentValue || [];\n return records.map((record) => this.toEnumerated(record as Record<string, string>, this.fieldConfig()));\n });\n\n availableEnumOptions = computed(() => {\n if (this.editMode() === 'edit') {\n return this.listEnumValues();\n }\n return this.singleEnumValue();\n });\n\n toEnumerated(resource: Record<string, string>, element: FieldElement): { id: string; display: string } {\n const enumeratedConfig = element.enumeratedConfig as EnumeratedConfig;\n const displayFields =\n this.editMode() === 'edit' && enumeratedConfig.listDisplay.length > 0\n ? enumeratedConfig.listDisplay\n : enumeratedConfig.viewDisplay;\n const concat =\n this.editMode() === 'edit'\n ? enumeratedConfig.listConcatFn || enumeratedConfig.viewConcatFn\n : enumeratedConfig.viewConcatFn;\n\n const concatFunction = concatFunctions[concat] || hyphenConcat;\n\n return {\n id: resource['id'] ?? '',\n display: concatFunction(resource, ...displayFields),\n };\n }\n\n getDisplayText = (value: string | Record<string, string> | null): string => {\n if (!value) return '';\n\n if (typeof value === 'string') {\n const option = this.availableEnumOptions()?.find((o) => o.id === value);\n return option ? option['display'] || this.formatDisplay(option) : '';\n }\n\n return value['display'] || this.formatDisplay(value);\n };\n\n private formatDisplay(resource: Record<string, string>): string {\n return this.toEnumerated(resource, this.fieldConfig()).display;\n }\n\n search(value: string): void {\n this.query.set(value);\n }\n\n select(value: string): void {\n this.form().patchValue({ [this.fieldConfig().name]: value });\n this.form().markAsDirty();\n this.form().markAsTouched();\n this.reloadSignal.update((prev) => !prev);\n }\n}\n","<ng-container [formGroup]=\"form()\">\n @if (showField()) {\n @let options = availableEnumOptions();\n @if (editMode() === 'edit') {\n <div class=\"enumerated-field-container\">\n <mat-form-field class=\"field {{ fieldClass() }}\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n @if (fieldConfig().enumeratedConfig.searchable) {\n <input\n #input\n type=\"text\"\n placeholder=\"Search\"\n matInput\n [matAutocomplete]=\"auto\"\n [formControlName]=\"fieldConfig().name\"\n (input)=\"search(input.value)\" />\n <mat-autocomplete\n (optionSelected)=\"select($event.option.value)\"\n #auto=\"matAutocomplete\"\n [displayWith]=\"getDisplayText\">\n @for (option of options; track option.id) {\n <mat-option [value]=\"option.id\">{{ option?.display }}</mat-option>\n }\n </mat-autocomplete>\n } @else {\n <mat-select\n [formControlName]=\"fieldConfig().name\"\n (keydown.enter)=\"$event.preventDefault()\"\n (selectionChange)=\"select($event.value)\"\n [ariaReadOnly]=\"editMode() === 'view'\">\n @for (option of options; track option.id) {\n @if (option?.id === form().get(this.fieldConfig().name)?.value) {\n <mat-option [value]=\"option?.id\" selected>{{ option?.display }}</mat-option>\n } @else {\n <mat-option [value]=\"option?.id\">{{ option?.display }}</mat-option>\n }\n }\n </mat-select>\n }\n </mat-form-field>\n </div>\n } @else {\n <div class=\"enumerated-field-container readonly-field\">\n <mat-form-field class=\"field {{ fieldClass() }}\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <input\n id=\"{{ fieldConfig().name }}-readonly-input-text\"\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"true\"\n type=\"text\"\n [required]=\"hasRequiredValidator()\"\n [value]=\"singleEnumDisplayText()\" />\n </mat-form-field>\n @if (viewDetails()) {\n <a\n mat-icon-button\n color=\"accent\"\n [matTooltip]=\"tooltipMessage()\"\n matTooltipPosition=\"below\"\n [routerLink]=\"['/', route(), form().get(this.fieldConfig().name)?.value]\">\n <mat-icon>arrow_forward</mat-icon>\n </a>\n }\n </div>\n <input class=\"display-none\" [formControlName]=\"fieldConfig().name\" />\n }\n } @else {\n <input class=\"display-none\" [formControlName]=\"fieldConfig().name\" />\n }\n</ng-container>\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { NullBoolean } from '@cccteam/ccc-lib/src/types';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-nullboolean-field',\n imports: [\n MatFormFieldModule,\n MatInputModule,\n MatDatepickerModule,\n ReactiveFormsModule,\n MatOptionModule,\n MatSelectModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n RouterModule,\n MatAutocompleteModule,\n ],\n templateUrl: './nullboolean-field.component.html',\n styleUrl: './nullboolean-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NullBooleanFieldComponent extends BaseInputComponent {\n availableEnumOptions = computed(() => {\n const fieldConfig = this.fieldConfig();\n if (fieldConfig === undefined) {\n return;\n }\n const valueMap = new Map<NullBoolean, string>();\n\n Object.values(fieldConfig.nullBooleanConfig.displayValues).forEach((value) => {\n valueMap.set(value.value, value.label);\n });\n\n return valueMap;\n });\n\n currentValue = computed(() => {\n const form = this.form();\n const fieldConfig = this.fieldConfig();\n\n if (form === undefined || fieldConfig === undefined) {\n return;\n }\n\n return form.get(fieldConfig.name)?.value;\n });\n\n currentDisplayText = computed(() => {\n const value = this.currentValue();\n const availableOptions = this.availableEnumOptions();\n\n if (availableOptions === undefined || value === undefined) {\n return;\n }\n\n return availableOptions.get(value);\n });\n\n hasRequiredValidator = computed(() => {\n const form = this.form();\n const fieldConfig = this.fieldConfig();\n\n if (form === undefined || fieldConfig === undefined) {\n return false;\n }\n\n const control = form.get(fieldConfig.name);\n if (control === null) {\n return false;\n }\n\n return control.hasValidator(Validators.required);\n });\n}\n","<ng-container [formGroup]=\"form()\">\n @if (showField()) {\n @let options = availableEnumOptions();\n @if (editMode() === 'edit') {\n <mat-form-field class=\"field {{ fieldClass() }}\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <mat-select\n [formControlName]=\"fieldConfig().name\"\n (keydown.enter)=\"$event.preventDefault()\"\n [canSelectNullableOptions]=\"true\"\n [ariaReadOnly]=\"editMode() === 'view'\">\n @for (option of options; track option[0]) {\n @if (option[0] === currentValue()) {\n <mat-option [value]=\"option[0]\" selected>{{ option[1] }}</mat-option>\n } @else {\n <mat-option [value]=\"option[0]\">{{ option[1] }}</mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n } @else {\n <div class=\"readonly-field\">\n <mat-form-field class=\"field {{ fieldClass() }}\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <input\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"true\"\n type=\"text\"\n [required]=\"hasRequiredValidator()\"\n [value]=\"currentDisplayText()\" />\n </mat-form-field>\n </div>\n }\n } @else {\n <input class=\"display-none\" [formControlName]=\"fieldConfig().name\" />\n }\n</ng-container>\n","import { Component } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-number-field',\n imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule, ReactiveFormsModule],\n templateUrl: './number-field.component.html',\n styleUrl: './number-field.component.scss',\n})\nexport class NumberFieldComponent extends BaseInputComponent {}\n","@if (showField()) {\n <div [class.readonly-field]=\"editMode() === 'view'\">\n <mat-form-field\n class=\"field {{ fieldClass() }}\"\n [formGroup]=\"form()\"\n [subscriptSizing]=\"'dynamic'\"\n [floatLabel]=\"floatLabel()\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <span matTextPrefix class=\"prefix\">{{ prefixString() }}</span>\n <span matTextSuffix class=\"suffix\">{{ suffixString() }}</span>\n <input\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"editMode() === 'view'\"\n type=\"number\"\n [formControlName]=\"fieldConfig().name\" />\n </mat-form-field>\n </div>\n} @else {\n <ng-container [formGroup]=\"form()\">\n <input type=\"hidden\" [formControlName]=\"fieldConfig().name\" />\n </ng-container>\n}\n","import { Component } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { BaseInputComponent } from '../../base-field.directive';\n\n@Component({\n selector: 'ccc-text-field',\n imports: [\n MatFormFieldModule,\n MatInputModule,\n MatDatepickerModule,\n ReactiveFormsModule,\n MatIconModule,\n MatButtonModule,\n ],\n templateUrl: './text-field.component.html',\n styleUrl: './text-field.component.scss',\n})\nexport class TextFieldComponent extends BaseInputComponent {}\n","@if (showField()) {\n <div [class.readonly-field]=\"editMode() === 'view'\">\n <mat-form-field\n class=\"field {{ fieldClass() }}\"\n [formGroup]=\"form()\"\n [subscriptSizing]=\"'dynamic'\"\n [floatLabel]=\"floatLabel()\">\n <mat-label>{{ fieldConfig().label }}</mat-label>\n <span matTextPrefix class=\"prefix\">{{ prefixString() }}</span>\n <span matTextSuffix class=\"suffix\">{{ suffixString() }}</span>\n <input\n matInput\n (keydown.enter)=\"$event.preventDefault()\"\n [readonly]=\"editMode() === 'view'\"\n type=\"text\"\n [formControlName]=\"fieldConfig().name\"\n [class.dirty-input]=\"form().get(fieldConfig().name)?.dirty\" />\n @if (editMode() === 'edit' && form().get(fieldConfig().name)?.dirty) {\n <button matSuffix mat-icon-button (click)=\"reset()\" tabindex=\"-1\">\n <mat-icon>refresh</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n} @else {\n <ng-container [formGroup]=\"form()\">\n <input type=\"hidden\" [formControlName]=\"fieldConfig().name\" />\n </ng-container>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n HostBinding,\n input,\n Signal,\n untracked,\n} from '@angular/core';\nimport { FormGroup, Validators } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { DataType, FieldElement, FieldMeta, Meta, RecordData, validatorsPresent, ValidDisplayTypes } from '@cccteam/ccc-lib/src/types';\nimport { EmptyReadonlyFieldComponent } from '../empty-readonly-field/empty-readonly-field.component';\nimport { BooleanFieldComponent } from './fields/boolean-field/boolean-field.component';\nimport { DateFieldComponent } from './fields/date-field/date-field.component';\nimport { EnumeratedFieldComponent } from './fields/enumerated-field/enumerated-field.component';\nimport { NullBooleanFieldComponent } from './fields/nullboolean-field/nullboolean-field.component';\nimport { NumberFieldComponent } from './fields/number-field/number-field.component';\nimport { TextFieldComponent } from './fields/text-field/text-field.component';\n\n@Component({\n selector: 'ccc-resource-field',\n imports: [\n DateFieldComponent,\n BooleanFieldComponent,\n TextFieldComponent,\n NumberFieldComponent,\n EnumeratedFieldComponent,\n MatFormFieldModule,\n EmptyReadonlyFieldComponent,\n NullBooleanFieldComponent,\n NgTemplateOutlet,\n ],\n templateUrl: './resource-field.component.html',\n styleUrl: './resource-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResourceFieldComponent {\n fieldConfig = input.required<FieldElement>();\n meta = input.required<Meta>();\n fieldClass = input<string>();\n editMode = input<'edit' | 'view'>('edit');\n form = input.required<FormGroup>();\n formDataState = input<RecordData>();\n pristineValue = input<DataType | null>();\n data = input<RecordData>();\n previouslyNulled: boolean | null = null;\n\n fieldMeta: Signal<FieldMeta> = computed(() => {\n return (\n (this.meta().fields?.find((field) => field.fieldName === this.fieldConfig().name) as FieldMeta) ||\n ({} as FieldMeta)\n );\n });\n\n mode = computed(() => {\n if (this.fieldConfig().readOnly) {\n return 'view';\n }\n return this.editMode();\n });\n\n showField = computed(() => {\n const shouldRender = this.fieldConfig().shouldRender;\n const conditionallyNull = this.fieldConfig().nullIfConditionallyHidden;\n const isForeignKeyDefault = this.fieldConfig().default?.type === 'foreignKey';\n\n if (typeof shouldRender === 'boolean') {\n return shouldRender && !isForeignKeyDefault;\n }\n const formValues = this.formDataState();\n if (!formValues) {\n return true;\n }\n\n console.debug('Field: ', this.fieldConfig().name, ' | Values to be used in showField calculation ', formValues);\n\n try {\n const showField = shouldRender(formValues) && !isForeignKeyDefault;\n\n if (!conditionallyNull) {\n return showField;\n }\n\n const formControlName = this.fieldConfig()?.name;\n const control = this.form()?.controls[formControlName];\n const pristineFieldValue = this.data()?.[formControlName];\n const previouslyNulled = this.previouslyNulled;\n\n untracked(() => {\n if (!showField && !previouslyNulled) {\n this.previouslyNulled = true;\n control?.setValue(null);\n }\n\n if (showField && previouslyNulled) {\n this.previouslyNulled = false;\n control?.setValue(pristineFieldValue);\n }\n });\n\n return showField;\n } catch (e) {\n console.error('Failed to calculate value for should Render function for field: ', this.fieldConfig().name);\n console.error(e);\n return true;\n }\n });\n\n showEmptyField = computed(() => {\n const editMode = this.mode();\n const showField = this.showField();\n\n if (!showField || editMode === 'edit') {\n return false;\n }\n\n const form = this.form();\n const config = this.fieldConfig();\n const meta = this.fieldMeta();\n if (form === undefined || config === undefined || meta === undefined) {\n return false;\n }\n\n if (meta.displayType === 'nullboolean') {\n return false;\n }\n\n const value = form.get(config.name)?.value;\n if (value === null || value === '') {\n return true;\n }\n\n return false;\n });\n\n @HostBinding('class') class = '';\n\n booleanEditDisplayType: Signal<BooleanDisplayTypes> = computed(() => {\n const fieldConfig = this.fieldConfig();\n const fieldMeta = this.fieldMeta();\n const form = this.form();\n\n if (fieldConfig === undefined || fieldMeta === undefined || form === undefined) {\n return 'boolean';\n }\n\n const control = form.get(fieldConfig.name);\n if (control === null) {\n console.warn(\"Unable to find control for field '\" + fieldConfig.name + \"' to determine boolean display type\");\n return 'boolean';\n }\n\n // Frontend forcing users to make a choice displays nullboolean to\n // trigger form validation - users must interact and explicitly\n // choose a true or false value\n if (control.hasValidator(Validators.required) || fieldMeta.displayType === 'nullboolean') {\n return 'nullboolean';\n }\n\n return 'boolean';\n });\n\n previousValidatorCount = 0;\n\n constructor() {\n effect(() => {\n this.class = this.showField() ? 'col-' + this.fieldConfig()?.cols : 'hidden-field';\n });\n\n effect(() => {\n const getValidators = this.fieldConfig().validators;\n\n if (typeof getValidators !== 'function') {\n return;\n }\n\n const formValues = this.formDataState();\n\n if (!formValues) {\n return;\n }\n\n console.debug('Field: ', this.fieldConfig().name, ' | Values to be used in validators calculation ', formValues);\n\n try {\n const newValidators = getValidators(formValues);\n\n const formControlName = this.fieldConfig().name;\n const control = this.form().get(formControlName);\n\n if (control === null) {\n throw new Error(`Control with name ${this.fieldConfig().name} not found during forceRequired calculation`);\n }\n\n const addValidators = !validatorsPresent(control, newValidators, this.previousValidatorCount);\n\n if (addValidators) {\n control.setValidators(newValidators);\n control.updateValueAndValidity();\n }\n\n this.previousValidatorCount = newValidators.length;\n } catch (e) {\n console.error('Failed to calculate value for forceRequired function for field: ', this.fieldConfig().name);\n console.error(e);\n return;\n }\n });\n }\n}\n\ntype BooleanDisplayTypes = Extract<ValidDisplayTypes, 'boolean' | 'nullboolean'>;\n","<div [class.hidden-field]=\"!showField()\">\n @if (showEmptyField()) {\n <ccc-empty-readonly-field [label]=\"fieldConfig().label\"></ccc-empty-readonly-field>\n } @else {\n @switch (fieldMeta().displayType) {\n @case ('date') {\n <ccc-date-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-date-field>\n }\n\n @case ('civildate') {\n <ccc-date-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-date-field>\n }\n\n @case ('number') {\n <ccc-number-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-number-field>\n }\n\n @case ('boolean') {\n <ng-container *ngTemplateOutlet=\"booleanFragment\"></ng-container>\n }\n @case ('nullboolean') {\n <ng-container *ngTemplateOutlet=\"booleanFragment\"></ng-container>\n }\n\n @case ('enumerated') {\n <ccc-enumerated-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-enumerated-field>\n }\n\n @default {\n <ccc-text-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-text-field>\n }\n }\n }\n</div>\n\n<ng-template #booleanFragment>\n @if (booleanEditDisplayType() === 'boolean') {\n <ccc-boolean-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-boolean-field>\n } @else if (booleanEditDisplayType() === 'nullboolean') {\n <ccc-nullboolean-field\n [form]=\"form()\"\n [fieldConfig]=\"fieldConfig()\"\n [editMode]=\"mode()\"\n [fieldClass]=\"fieldClass()\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"data()\"\n [fieldMeta]=\"fieldMeta()\"\n [showField]=\"showField()\">\n </ccc-nullboolean-field>\n }\n</ng-template>\n","import { Component, computed, effect, HostBinding, input, model, OnInit, untracked } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ConfigElement, DataType, FieldElement, Meta, RecordData } from '@cccteam/ccc-lib/src/types';\nimport { flattenElements, maxLayoutNestingDepth } from '../gui-constants';\nimport { PaddingElementComponent } from '../padding-element/padding-element.component';\nimport { ComputedFieldComponent } from '../resource-field/fields/computed-field/computed-field.component';\nimport { ResourceFieldComponent } from '../resource-field/resource-field.component';\n\n@Component({\n selector: 'ccc-resource-layout-template',\n imports: [PaddingElementComponent, ResourceFieldComponent, ComputedFieldComponent],\n templateUrl: './resource-layout.component.html',\n styleUrls: ['./resource-layout.component.scss'],\n})\nexport class ResourceLayoutComponent implements OnInit {\n element = input.required<ConfigElement>();\n meta = input.required<Meta>();\n fieldClass = input<string>();\n editMode = input.required<'edit' | 'view'>();\n form = input.required<FormGroup>();\n formDataState = model<RecordData>();\n pristineValue = input<DataType | null>('');\n relatedData = input<RecordData>();\n parentClass = input<string>();\n layoutNestingDepth = input<number>(1);\n\n maxLayoutNestingDepth = maxLayoutNestingDepth;\n\n children = computed(() => {\n const element = this.element();\n if (element.type === 'section') {\n return element.children;\n }\n return [];\n });\n\n layoutChildrenConfig = computed(() => {\n return flattenElements(this.children());\n });\n previouslyNulled = false;\n\n nullIfConditionallyHidden = computed(() => {\n const element = this.element();\n if (element.type === 'field') {\n return element.nullIfConditionallyHidden;\n }\n if (element.type === 'section') {\n return element.nullAllChildrenIfConditionallyHidden;\n }\n return false;\n });\n\n showLayout = computed(() => {\n const element = this.element();\n const shouldRender = element.shouldRender;\n const conditionallyNull = this.nullIfConditionallyHidden();\n const form = this.form();\n const label = 'label' in element ? element.label : 'padding';\n const isForeignKeyDefault = element.type === 'field' && element.default?.type === 'foreignKey';\n\n if (typeof shouldRender === 'boolean') {\n return shouldRender && !isForeignKeyDefault;\n }\n\n const formValues = this.formDataState();\n if (!formValues) {\n return true;\n }\n\n console.debug('Layout: ', label, ' | Values to be used in showLayout calculation ', formValues);\n try {\n const showLayout = shouldRender(formValues) && !isForeignKeyDefault;\n\n if (!conditionallyNull) {\n return showLayout;\n }\n const previouslyNulled = this.previouslyNulled;\n\n untracked(() => {\n this.layoutChildrenConfig().forEach((configElement) => {\n const isFormControl = configElement.type === 'field';\n if (!isFormControl) {\n return;\n }\n\n const control = form?.controls[configElement.name];\n const pristineFieldValue = this.relatedData()?.[configElement.name];\n\n if (!showLayout && !previouslyNulled) {\n this.previouslyNulled = true;\n control?.setValue(null);\n }\n\n if (showLayout && previouslyNulled) {\n this.previouslyNulled = false;\n control?.setValue(pristineFieldValue);\n }\n });\n });\n\n return showLayout;\n } catch (e) {\n console.error('Failed to calculate value for should Render function for layout: ', label);\n console.error(e);\n return true;\n }\n });\n\n @HostBinding('class') class = '';\n\n constructor() {\n // TODO: Remove this effect once Angular supports signals in Reactive forms to obtain changes to form values.\n // This effect has been necessary because translating from Observables to Signals, specifically via an input signal\n // doesn't have a clean solution\n\n effect((onCleanup) => {\n const element = this.element();\n if (element === undefined) {\n return;\n }\n const currentForm = this.form();\n const shouldRender = element.shouldRender;\n const nestingDepth = this.layoutNestingDepth();\n const layoutChildren = this.layoutChildrenConfig();\n const label = 'label' in element ? element.label : 'padding';\n if (!this.shouldInitializeFormData(currentForm, nestingDepth, shouldRender, layoutChildren)) {\n return;\n }\n console.debug('USAGE | New subscription for formValuesSignal created for layout: ', label);\n\n this.formDataState.set(currentForm.getRawValue());\n const subscription = currentForm.valueChanges.subscribe((value) => {\n this.formDataState.set(value);\n });\n\n onCleanup(() => {\n console.debug('USAGE | Unsubscribing from valueChanges for layout: ', label);\n subscription.unsubscribe();\n });\n });\n }\n\n ngOnInit(): void {\n this.class = 'col-' + this.element().cols;\n }\n\n shouldInitializeFormData(\n form: FormGroup,\n layoutNestingDepth: number,\n shouldRender: ConfigElement['shouldRender'],\n layoutChildren: ConfigElement[],\n ): boolean {\n const childrenNeedFormDataState = layoutChildren.some((config) => {\n const shouldRenderIsFunction = typeof config.shouldRender === 'function';\n const isComputedField = config.type === 'computedDisplayField';\n let validatorsIsFunction = false;\n\n const castConfig = config as FieldElement;\n if (castConfig.validators && typeof castConfig.validators === 'function') {\n validatorsIsFunction = true;\n }\n\n return shouldRenderIsFunction || isComputedField || validatorsIsFunction;\n });\n\n if (!form || layoutNestingDepth > 1) {\n return false;\n }\n\n if (!childrenNeedFormDataState && typeof shouldRender !== 'function') {\n return false;\n }\n\n return true;\n }\n}\n","<div class=\"section {{ parentClass() }}\" [class.hidden-field]=\"!showLayout()\">\n @let parentElement = element();\n @if (children().length > 0) {\n <div\n class=\"section-elements dense-1 resource-layout-container\"\n [class]=\"layoutNestingDepth() % 2 === 0 ? 'resource-layout-container-even' : 'resource-layout-container-odd'\">\n @if (parentElement.type !== 'padding' && parentElement.label !== '') {\n <div class=\"label\">{{ parentElement.label }}</div>\n }\n @for (elementField of children(); track elementField) {\n @let childElement = elementField;\n @if (childElement.type === 'section') {\n @if (layoutNestingDepth() < maxLayoutNestingDepth) {\n <ccc-resource-layout-template\n [layoutNestingDepth]=\"layoutNestingDepth() + 1\"\n [element]=\"childElement\"\n [meta]=\"meta()\"\n [fieldClass]=\"fieldClass()\"\n [editMode]=\"editMode()\"\n [form]=\"form()\"\n [formDataState]=\"formDataState()\"\n [pristineValue]=\"pristineValue()\"\n [relatedData]=\"relatedData()\"\n [parentClass]=\"parentClass()\">\n </ccc-resource-layout-template>\n }\n } @else if (childElement.type === 'field') {\n <ccc-resource-field\n [meta]=\"meta()\"\n [fieldClass]=\"fieldClass()\"\n [fieldConfig]=\"childElement\"\n [editMode]=\"editMode()\"\n [form]=\"form()\"\n [formDataState]=\"formDataState()\"\n [pristineValue]=\"pristineValue()\"\n [data]=\"relatedData()\">\n </ccc-resource-field>\n } @else if (childElement.type === 'computedDisplayField') {\n <ccc-computed-field\n [fieldClass]=\"fieldClass()\"\n [fieldConfig]=\"childElement\"\n [formDataState]=\"formDataState()\"></ccc-computed-field>\n } @else if (childElement.type === 'padding') {\n <ccc-padding-element [paddingElement]=\"childElement\"></ccc-padding-element>\n }\n }\n </div>\n } @else {\n @if (parentElement.type === 'field') {\n <div\n class=\"section-elements dense-1 resource-layout-container\"\n [class]=\"layoutNestingDepth() % 2 === 0 ? 'resource-layout-container-even' : 'resource-layout-container-odd'\">\n <ccc-resource-field\n [meta]=\"meta()\"\n [fieldClass]=\"fieldClass()\"\n [fieldConfig]=\"parentElement\"\n [editMode]=\"editMode()\"\n [form]=\"form()\"\n [formDataState]=\"formDataState()\"\n [pristineValue]=\"pristineValue()\"\n [data]=\"relatedData()\">\n </ccc-resource-field>\n </div>\n } @else if (parentElement.type === 'computedDisplayField') {\n <ccc-computed-field\n [fieldClass]=\"fieldClass()\"\n [fieldConfig]=\"parentElement\"\n [formDataState]=\"formDataState()\"></ccc-computed-field>\n } @else if (parentElement.type === 'padding') {\n <ccc-padding-element [paddingElement]=\"parentElement\"></ccc-padding-element>\n }\n }\n</div>\n","import { Component, computed, inject, signal } from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\nimport { DataType, FieldElement, Method, METHOD_META, RPCBaseFormData } from '@cccteam/ccc-lib/src/types';\nimport { flattenElements } from '../gui-constants';\nimport { ResourceLayoutComponent } from '../resource-layout/resource-layout.component';\nimport { ResourceStore } from '../resource-store.service';\n\n@Component({\n selector: 'ccc-base-rpc-modal',\n imports: [\n MatDialogModule,\n MatDialogActions,\n MatButtonModule,\n ResourceLayoutComponent,\n FormsModule,\n MatInputModule,\n ReactiveFormsModule,\n ],\n templateUrl: './base-rpc-modal.component.html',\n styleUrls: ['./base-rpc-modal.component.scss'],\n providers: [ResourceStore],\n})\nexport class BaseRPCModalComponent {\n methodMeta = inject(METHOD_META);\n private dialogRef = inject(MatDialogRef);\n\n data = inject<{ elements: FieldElement[]; label: string; method: Method; width: string }>(MAT_DIALOG_DATA);\n formData = signal({} as RPCBaseFormData);\n meta = computed(() => {\n return this.methodMeta(this.formData().method as Method);\n });\n\n constructor() {\n this.formData.set(this.data);\n if (this.data.width) {\n this.dialogRef.updateSize(this.data.width);\n }\n }\n\n onConfirm(): void {\n this.dialogRef.close(this.form());\n }\n\n form = computed(() => {\n const fg = new FormGroup({});\n this.formData();\n const meta = this.meta();\n const allElements = flattenElements(this.data.elements);\n if (meta) {\n for (const field of meta.fields || []) {\n const value = '';\n const control = new FormControl(value);\n const findConfig = allElements.find((element) => element.type === 'field' && element.name === field.fieldName);\n const fieldConfig = findConfig as FieldElement | undefined;\n if (!fieldConfig) {\n continue;\n }\n if (fieldConfig.validators.length > 0) {\n control.setValidators(fieldConfig.validators);\n }\n fg.addControl(field.fieldName, control);\n this.pristineForm[field.fieldName] = value;\n }\n }\n return fg;\n });\n\n pristineForm: Record<string, DataType> = {};\n}\n","<div mat-dialog-title>{{ formData().label }}</div>\n<mat-dialog-content>\n <div class=\"resource-container\">\n <form [formGroup]=\"form()\">\n <div class=\"resource row\">\n @for (element of formData().elements; track element) {\n <ccc-resource-layout-template\n [element]=\"element\"\n [meta]=\"meta()\"\n [pristineValue]=\"pristineForm[element.name]\"\n editMode=\"edit\"\n [form]=\"form()\"></ccc-resource-layout-template>\n }\n </div>\n </form>\n </div>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"false\">Cancel</button>\n <button mat-raised-button color=\"accent\" [mat-dialog-close]=\"form().getRawValue()\" [disabled]=\"!form().valid\">\n Complete\n </button>\n</mat-dialog-actions>\n","import { Component, computed, inject, input, ResourceRef } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AlertLevel,\n FieldPointer,\n ListViewConfig,\n METHOD_META,\n RecordData,\n Resource,\n RootConfig,\n RPCConfig,\n rpcConfigDefaults,\n RPCFieldMeta,\n RpcMethod,\n RPCRecordData,\n ViewConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\nimport { filter, tap } from 'rxjs';\nimport { BaseRPCModalComponent } from '../../base-rpc-modal/base-rpc-modal.component';\nimport { FormStateService } from '../../form-state.service';\nimport { ResourceStore } from '../../resource-store.service';\nimport { metadataTypeCoercion } from '../../resources-helpers';\n\n@Component({\n selector: 'ccc-rpc-button',\n imports: [MatButtonModule],\n templateUrl: './rpc-button.component.html',\n styleUrls: ['./rpc-button.component.scss'],\n providers: [ResourceStore],\n})\nexport class RpcButtonComponent {\n activatedRoute = inject(ActivatedRoute);\n router = inject(Router);\n notifications = inject(NotificationService);\n formState = inject(FormStateService);\n dialog = inject(MatDialog);\n store = inject(ResourceStore);\n\n methodMeta = inject(METHOD_META);\n\n relatedData = input.required<RecordData>({});\n rpcConfig = input.required<RPCConfig>();\n primaryResource = input.required<Resource>();\n dependentResources = input<ResourceRef<RecordData[]>[]>([]);\n\n resourceConfigRouteSnapshot = computed(() => {\n return (\n this.rpcConfig() ||\n (this.activatedRoute.snapshot.data['config'] as RootConfig)?.parentConfig ||\n ({} as ViewConfig | ListViewConfig)\n );\n });\n\n showRPCButton = computed(() => {\n const rpcConfig = this.rpcConfig();\n if (!rpcConfig) {\n return false;\n }\n let canView = true;\n for (const condition of rpcConfig.conditions || []) {\n const filterField = condition.field;\n const matchValues = condition.matchValues;\n const parentFieldData = this.relatedData()[filterField ? filterField : ''];\n for (const matchValue of matchValues) {\n if (parentFieldData === matchValue) {\n canView = true;\n break;\n }\n canView = false;\n }\n if (!canView) {\n break;\n }\n }\n return canView;\n });\n\n submitRPC(): void {\n const rpcConfig = this.rpcConfig();\n if (!rpcConfig) {\n console.error('RPC config is not defined');\n return;\n }\n\n const submitBody: RPCRecordData = {};\n let dialogRef: MatDialogRef<BaseRPCModalComponent> | undefined;\n\n if (rpcConfig.customComponent !== rpcConfigDefaults.customComponent) {\n let componentToOpen;\n if (!componentToOpen) {\n console.error('Custom RPC component ' + rpcConfig.customComponent.component + ' not found.');\n return;\n }\n\n if (!dialogRef) {\n console.error('Dialog reference is undefined.');\n return;\n }\n } else if (rpcConfig.elements.length > 0) {\n dialogRef = this.dialog.open(BaseRPCModalComponent, {\n data: {\n label: rpcConfig.label,\n elements: rpcConfig.elements,\n method: rpcConfig.method,\n width: rpcConfig.defaultModalWidth,\n },\n });\n } else {\n this.buildRpcBody(rpcConfig, submitBody);\n return;\n }\n\n const meta = this.methodMeta(rpcConfig.method);\n dialogRef\n .afterClosed()\n .pipe(\n filter((data) => !!data),\n tap((data) => {\n const coercedData = metadataTypeCoercion(data as RPCRecordData, meta);\n Object.keys(coercedData).forEach((key: string) => {\n const value = coercedData[key];\n if (value) {\n submitBody[key] = value;\n }\n });\n this.buildRpcBody(rpcConfig, submitBody);\n }),\n tap(() => {\n this.reloadDependentResources();\n }),\n )\n .subscribe();\n }\n\n buildRpcBody(rpcConfig: RPCConfig, submitBody: RPCRecordData): void {\n let canSubmitRPC = true;\n const method = this.methodMeta(rpcConfig.method);\n if (method.fields) {\n method.fields.forEach((methodField: RPCFieldMeta) => {\n const key = methodField.fieldName;\n if (submitBody[key] === undefined || submitBody[key] === null || submitBody[key] === '') {\n if (!method.fields) {\n return;\n }\n const value = rpcConfig.methodBodyTemplate[key as keyof RpcMethod] as string | FieldPointer;\n if (value == undefined) {\n return;\n }\n if (typeof value !== 'string') {\n const returnValue = this.relatedData()[value.field];\n if (returnValue === undefined) {\n this.notifications.addGlobalNotification({\n message: 'Value not found for field: ' + value.field,\n link: '',\n level: AlertLevel.ERROR,\n });\n canSubmitRPC = false;\n return;\n }\n if (returnValue) submitBody[key] = returnValue as string | number | string[] | number[] | boolean;\n } else {\n submitBody[key] = value;\n }\n }\n });\n }\n\n if (!canSubmitRPC) {\n return;\n }\n this.callRpc(rpcConfig, submitBody);\n }\n\n callRpc(rpc: RPCConfig, submitBody: RPCRecordData): void {\n this.store\n .rpcCall(rpc, submitBody)\n .pipe(\n tap(() => {\n this.reloadDependentResources();\n }),\n )\n .subscribe();\n }\n\n reloadDependentResources(): void {\n // TODO: this does not work. We need to invalidate the cache via resource names.\n for (const ref of this.dependentResources()) {\n ref.reload();\n }\n }\n}\n","@if (showRPCButton()) {\n <div class=\"button-container\">\n <button mat-raised-button color=\"accent\" (click)=\"submitRPC()\" [disabled]=\"formState.isDirty()\">\n {{ rpcConfig().label }}\n </button>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { CamelCaseToTitlePipe } from '@cccteam/ccc-lib/src/ccc-camel-case-to-title';\nimport { cleanStringForm } from '@cccteam/ccc-lib/src/forms';\nimport {\n ChildResourceConfig,\n DataType,\n FieldElement,\n ListViewConfig,\n RecordData,\n Resource,\n RESOURCE_META,\n RootConfig,\n ViewConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\nimport { camelCase } from 'lodash-es';\nimport { tap } from 'rxjs';\nimport { FormStateService } from '../form-state.service';\nimport { flattenElements } from '../gui-constants';\nimport { ResourceLayoutComponent } from '../resource-layout/resource-layout.component';\nimport { ResourceStore } from '../resource-store.service';\nimport { CreateOperation, metadataTypeCoercion } from '../resources-helpers';\n\n@Component({\n selector: 'ccc-resource-create',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n RouterModule,\n MatButtonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatDividerModule,\n ResourceLayoutComponent,\n ],\n templateUrl: './resource-create.component.html',\n styleUrl: './resource-create.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ResourceStore],\n})\nexport class ResourceCreateComponent implements OnInit {\n resourceMeta = inject(RESOURCE_META);\n activatedRoute = inject(ActivatedRoute);\n notifications = inject(NotificationService);\n store = inject(ResourceStore);\n router = inject(Router);\n destroyRef = inject(DestroyRef);\n formState = inject(FormStateService);\n\n isDirty = signal(false);\n submitted = signal<boolean>(false);\n complete = output<boolean>();\n resourceConfig = input<ChildResourceConfig>();\n parentData = input<RecordData>({});\n loadCreatedResource = input<boolean>(false);\n\n rootConfig = computed(() => {\n return this.activatedRoute.snapshot.data['config'] as RootConfig;\n });\n\n config = computed(() => {\n const inputConfig = this.resourceConfig() as ViewConfig;\n if (inputConfig !== undefined) {\n return inputConfig;\n }\n return this.rootConfig().parentConfig as ListViewConfig;\n });\n\n indentTitle = computed(() => {\n if (this.config().collapsible || this.resourceConfig() === undefined) {\n return false;\n }\n\n return true;\n });\n\n form = computed(() => {\n const meta = this.store.resourceMeta();\n const fg = new FormGroup({});\n const allElements = flattenElements(this.config().elements);\n\n for (const field of meta.fields || []) {\n if (fg.get(field.fieldName)) {\n continue;\n }\n\n let control = new FormControl<DataType>('');\n if (field.displayType === 'boolean') {\n control = new FormControl<boolean>(false);\n }\n\n const findElement = allElements.find((element) => element.type === 'field' && element.name === field.fieldName);\n const fieldConfig = findElement as FieldElement | undefined;\n if (!fieldConfig) {\n continue;\n }\n const fieldDefault = fieldConfig.default;\n if (field.displayType === 'boolean') {\n const booleanDefaultValue =\n fieldDefault?.type == 'static' && typeof fieldDefault?.value === 'boolean' ? fieldDefault.value : null;\n if (booleanDefaultValue === null) {\n console.error(\n `Default value for boolean field, ${field.fieldName}, is null, add a default value to the config`,\n );\n }\n control = new FormControl<boolean | null>(booleanDefaultValue);\n }\n\n if (fieldDefault?.type === 'foreignKey' && this.parentData()) {\n const parentValue = this.parentData()[fieldDefault.parentId];\n if (parentValue !== undefined) {\n control.setValue(parentValue);\n }\n } else if (fieldDefault?.type == 'static') {\n const staticDefault = fieldDefault;\n if (staticDefault.value) {\n control.setValue(staticDefault.value);\n }\n }\n\n control.setValidators([]);\n if (fieldConfig.validators.length > 0) {\n control.addValidators(fieldConfig.validators);\n }\n\n if (field.required && !control.hasValidator(Validators.required)) {\n control.addValidators(Validators.required);\n }\n fg.addControl(field.fieldName, control);\n }\n return fg;\n });\n\n route = computed(() => {\n const meta = this.store.resourceMeta();\n if (!meta) return '';\n return meta.consolidatedRoute || meta.route;\n });\n\n primaryKeys = computed(() => {\n const meta = this.store.resourceMeta();\n if (!meta) return [];\n return meta.fields\n .filter((field) => field.primaryKey)\n .sort((a, b) => a.primaryKey!.ordinalPosition - b.primaryKey!.ordinalPosition);\n });\n\n hasRequiredPrimaryKey = computed(() => {\n const meta = this.store.resourceMeta();\n if (!meta) {\n return false;\n }\n return meta.fields.some((field) => field.primaryKey && field.required);\n });\n\n primaryKeyPath = computed(() => {\n const meta = this.store.resourceMeta();\n const isConsolidated = meta.consolidatedRoute !== undefined;\n const pathPrefix = isConsolidated ? '/' + meta.route : '';\n const keyPath = this.primaryKeys()\n .map((field) => this.form().get(field.fieldName)?.value)\n .join('/');\n\n if (keyPath === '' && pathPrefix === '') {\n return '/';\n }\n\n if (keyPath === '') {\n return pathPrefix;\n }\n\n return pathPrefix + '/' + keyPath;\n });\n\n camelCaseToTitlePipe = new CamelCaseToTitlePipe();\n\n ngOnInit(): void {\n if (this.resourceMeta(this.config().primaryResource as Resource)) {\n this.store.resourceName.set(this.config().primaryResource as Resource);\n this.store.resourceMeta.set(this.resourceMeta(this.config().primaryResource as Resource));\n }\n }\n\n saveForm(): void {\n if (!this.form().valid) {\n this.submitted.set(true);\n this.form().markAllAsTouched();\n const formElement = document.getElementById('resource-form');\n const invalidField = formElement?.querySelector('.mdc-text-field--invalid');\n if (invalidField) {\n invalidField.scrollIntoView({ behavior: 'smooth' });\n }\n return;\n }\n\n const resourceMeta = this.store.resourceMeta();\n if (!resourceMeta) {\n return;\n }\n const cleanedForm = cleanStringForm<Record<string, string>>(this.form());\n if (cleanedForm === undefined || cleanedForm === null) {\n return;\n }\n const coercedCleanedData = metadataTypeCoercion(cleanedForm, this.store.resourceMeta());\n\n const cleanedDataWithoutPrimaryKeys = Object.fromEntries(\n Object.entries(coercedCleanedData).filter(\n ([key]) => !this.primaryKeys().some((field) => field.fieldName === key),\n ),\n );\n\n const createPatch: CreateOperation = {\n op: 'add',\n value: cleanedDataWithoutPrimaryKeys,\n path: this.primaryKeyPath(),\n };\n\n this.store\n .createPatch(createPatch, this.route(), this.store.resourceName())\n .pipe(\n tap((response) => {\n this.formState.decrementDirtyForms();\n\n if (!response) {\n this.complete.emit(true);\n return;\n }\n\n let createIds: string[] = [];\n if (resourceMeta.consolidatedRoute) {\n const resourceName = camelCase(this.store.resourceName());\n createIds = (response[resourceName] as string[]) || [];\n } else {\n createIds = (response['iDs'] || []) as string[];\n }\n\n if (this.loadCreatedResource() && createIds.length === 1) {\n let route = this.rootConfig().routeData.route;\n if (this.parentData() || !route) {\n route = resourceMeta.route;\n }\n\n const navigationRoutes = this.config().createNavigation;\n if (navigationRoutes.length === 0) {\n this.router.navigate([route, createIds[0]]);\n } else {\n if (createIds[0]) {\n navigationRoutes.push(createIds[0]);\n }\n this.router.navigate(navigationRoutes);\n }\n } else {\n this.complete.emit(true);\n }\n }),\n )\n .subscribe();\n }\n\n cancelForm(): void {\n if (this.form().dirty) {\n this.formState.decrementDirtyForms();\n }\n this.complete.emit(true);\n }\n\n constructor() {\n effect(() => {\n console.debug('USAGE | New FormGroup subscription for: ', this.config().title);\n\n this.form()\n .valueChanges.pipe(\n tap(() => {\n const dirty = this.form().dirty;\n\n if (dirty !== this.isDirty()) {\n this.isDirty.set(dirty);\n if (dirty) {\n this.formState.incrementDirtyForms();\n } else {\n this.formState.decrementDirtyForms();\n }\n }\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n });\n }\n}\n","<div class=\"page-container\">\n <div class=\"header-container\">\n <div class=\"title\" [class.indent]=\"indentTitle()\">\n <h1>Create {{ config().title }}</h1>\n </div>\n\n <div class=\"state-buttons\">\n @if (!form().valid && submitted()) {\n <div class=\"invalid message\">Please complete or fix required fields.</div>\n }\n <button mat-raised-button color=\"primary\" (click)=\"cancelForm()\">Cancel</button>\n <button mat-raised-button color=\"accent\" (click)=\"saveForm()\" [disabled]=\"form().pristine\">Create</button>\n </div>\n </div>\n\n <div class=\"resource-container\">\n <form [formGroup]=\"form()\">\n <div class=\"resource row\">\n @for (element of config().elements; track element) {\n <ccc-resource-layout-template\n [element]=\"element\"\n [meta]=\"store.resourceMeta()\"\n [fieldClass]=\"config().fieldClass\"\n [relatedData]=\"parentData()\"\n editMode=\"edit\"\n [form]=\"form()\"></ccc-resource-layout-template>\n }\n </div>\n </form>\n </div>\n</div>\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n Component,\n computed,\n effect,\n inject,\n Injector,\n input,\n OnInit,\n output,\n Signal,\n signal,\n Type,\n viewChild\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule, MatExpansionPanel } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ArrayConfig, ColumnConfig, RecordData, RESOURCE_META, ViewConfig } from '@cccteam/ccc-lib/src/types';\nimport { ActionAccessControlWrapperComponent } from '../actions/action-button-smart/action-access-control-wrapper.component';\nimport { ActionButtonContext } from '../actions/actions.interface';\nimport { ResourceCreateComponent } from '../resource-create/resource-create.component';\nimport { ResourceStore } from '../resource-store.service';\n\n@Component({\n selector: 'ccc-resource-array-view',\n templateUrl: './resource-array-view.component.html',\n styleUrl: './resource-array-view.component.scss',\n imports: [\n MatButtonModule,\n MatExpansionModule,\n MatIconModule,\n MatTooltipModule,\n ResourceCreateComponent,\n ActionAccessControlWrapperComponent,\n NgComponentOutlet,\n ],\n providers: [ResourceStore],\n})\nexport class ResourceArrayViewComponent implements OnInit {\n resourceMeta = inject(RESOURCE_META);\n store = inject(ResourceStore);\n injector = inject(Injector);\n\n resourceConfig = input.required<ArrayConfig>();\n parentData = input<RecordData>({});\n expPanel = viewChild<MatExpansionPanel, MatExpansionPanel>('expPanel', { read: MatExpansionPanel });\n\n emptyOneToOne = output<boolean>();\n\n createMode = signal(false);\n/* eslint-disable @typescript-eslint/no-explicit-any */\n compoundResourceComponent = input.required<Type<any>>();\n\n showCreateButton = computed(() => {\n const list = this.store.listData();\n const resourceConfig = this.resourceConfig();\n const iteratedConfig = resourceConfig.iteratedConfig;\n if (list && resourceConfig?.viewType === 'OneToOne') {\n this.emptyOneToOne.emit(list.length === 0);\n return list.length === 0;\n }\n if ('createTitle' in iteratedConfig && iteratedConfig.createTitle !== '') {\n return true;\n }\n return false;\n });\n\n createActionConfig: Signal<ActionButtonContext | undefined> = computed(() => {\n const config = this.resourceConfig();\n const showCreate = this.showCreateButton();\n const meta = this.store.resourceMeta();\n\n if (config === undefined || showCreate === undefined || meta === undefined) {\n return undefined;\n }\n\n return {\n actionType: 'create',\n meta: this.store.resourceMeta(),\n shouldRender: () => (showCreate && config.shouldRenderActions?.create?.(this.parentData())) ?? false,\n resourceData: this.parentData(),\n };\n });\n\n createConfig = computed(() => {\n const config = this.resourceConfig();\n if (config.createConfig && Object.keys(config.createConfig).length !== 0) {\n return config.createConfig as ViewConfig;\n }\n if (config.iteratedConfig && Object.keys(config.iteratedConfig).length !== 0) {\n return config.iteratedConfig as ViewConfig;\n }\n return config;\n });\n\n resourceListRoute = computed(() => {\n const config = this.resourceConfig();\n const meta = this.resourceMeta(config.connectorResource || config.primaryResource);\n return meta.route;\n });\n\n setCreateMode(value: boolean): void {\n this.createMode.set(value);\n if (value && this.expPanel && this.expPanel()?.closed) {\n this.expPanel()?.open();\n }\n }\n\n ngOnInit(): void {\n this.store.resourceName.set(this.resourceConfig().primaryResource);\n const meta = this.resourceMeta(this.resourceConfig().primaryResource);\n this.store.resourceMeta.set(meta);\n this.store.overrideRoute.set(this.resourceListRoute());\n const columnArray = [];\n if (this.resourceConfig().connectorField !== '') {\n columnArray.push({ id: this.resourceConfig().connectorField });\n } else {\n columnArray.push({ id: 'id' } as ColumnConfig);\n }\n this.store.listColumns.set(columnArray);\n this.store.sorts.set(this.resourceConfig().sorts);\n }\n\n constructor() {\n effect(() => {\n const parentData = this.parentData();\n const resourceConfig = this.resourceConfig();\n\n if (resourceConfig && 'listFilter' in resourceConfig && parentData) {\n const filter = resourceConfig.listFilter(parentData);\n\n this.store.filter.set(filter);\n this.store.disableCacheForFilterPii.set(resourceConfig.disableCacheForFilterPii);\n this.store.buildStoreListData();\n }\n });\n }\n\n createResource(event: MouseEvent): void {\n event.stopPropagation();\n const expPanel = this.expPanel();\n\n if (!expPanel) {\n this.setCreateMode(true);\n return;\n }\n this.setCreateMode(true);\n if (expPanel.closed) {\n expPanel.open();\n }\n }\n\n onResourceDeleted(): void {\n this.setCreateMode(false);\n }\n\n onCreateCompleted(): void {\n this.store.reloadListData();\n this.setCreateMode(false);\n }\n}\n","@if (resourceConfig().title !== '') {\n <div class=\"resource-array-view\">\n <mat-expansion-panel\n #expPanel\n [@.disabled]=\"true\"\n [disabled]=\"!resourceConfig().collapsible\"\n [expanded]=\"!resourceConfig().collapsible\">\n <mat-expansion-panel-header>\n @if (resourceConfig().title) {\n <mat-panel-title>\n <h1 class=\"title\">\n {{ resourceConfig().title }}\n </h1>\n </mat-panel-title>\n }\n <action-access-control-wrapper [actionContext]=\"createActionConfig()\">\n <button\n mat-icon-button\n class=\"exp-panel-add-element-btn\"\n color=\"accent\"\n (click)=\"createResource($event)\"\n [matTooltip]=\"resourceConfig().createButtonLabel\"\n matTooltipPosition=\"above\">\n <mat-icon color=\"accent\">add_circle</mat-icon>\n </button>\n </action-access-control-wrapper>\n </mat-expansion-panel-header>\n\n @if (!resourceConfig().collapsible && !resourceConfig().title) {\n <div class=\"no-title-exp-panel-padding\"></div>\n }\n\n @if (createMode()) {\n <ccc-resource-create\n [resourceConfig]=\"createConfig()\"\n [parentData]=\"parentData()\"\n (complete)=\"onCreateCompleted()\">\n </ccc-resource-create>\n }\n @if (store.listStatus() === 'resolved') {\n @for (resource of store.listData(); track resource['id']; let i = $index) {\n @let resourceId = (resource[resourceConfig().connectorField] || resource['id']) + '';\n\n @if (parentData() && resourceConfig().iteratedConfig && resourceId && i + 1 <= resourceConfig().limit) {\n <ng-container *ngComponentOutlet=\"compoundResourceComponent();\n inputs: { \n uuid: resourceId, \n parentData: parentData(), \n isArrayChild: true, \n resourceConfig: resourceConfig().iteratedConfig \n }\">\n </ng-container>\n }\n }\n } @else {\n <div class=\"resource-container empty\">\n <div class=\"resource row\"></div>\n </div>\n }\n\n @if (store.listData().length === 0) {\n <div>No records found</div>\n }\n </mat-expansion-panel>\n </div>\n} @else {\n @if (createMode()) {\n <ccc-resource-create [resourceConfig]=\"createConfig()\" [parentData]=\"parentData()\" (complete)=\"onCreateCompleted()\">\n </ccc-resource-create>\n }\n @if (store.listStatus() === 'resolved') {\n @for (resource of store.listData(); track resource['id']; let i = $index) {\n @if (parentData() && resourceConfig().iteratedConfig && resource['id'] && i + 1 <= resourceConfig().limit) {\n <ng-container *ngComponentOutlet=\"compoundResourceComponent();\n inputs: { \n uuid: resource['id'] + '', \n parentData: parentData(), \n isArrayChild: true, \n resourceConfig: resourceConfig().iteratedConfig \n }\">\n </ng-container>\n }\n }\n } @else {\n <div class=\"resource-container empty\">\n <div class=\"resource row\"></div>\n </div>\n }\n\n @if (store.listData().length === 0) {\n <div>No records found</div>\n }\n}\n","import { FormatType } from '@cccteam/ccc-lib/src/types';\nimport { format, isValid, parseISO } from 'date-fns';\n\nexport type FormatterFn = (value: string) => string;\n\nexport const simpleSlashDateFormatter = (value: string): string => {\n if (!value) return '';\n const parsedDate = parseISO(value.toString());\n\n if (isValid(parsedDate)) {\n return format(parsedDate, 'M/d/yyyy');\n }\n\n console.error('Applying simpleSlashDateFormatter to invalid date value:', value);\n return value.toString();\n};\n\nexport const ValueFormatters: Record<FormatType, FormatterFn> = {\n ['simpleSlashDateFormat']: simpleSlashDateFormatter,\n};\n\nexport function applyFormatting(formatString: string, value: string): string {\n if (!value) return '';\n if (formatString in ValueFormatters) {\n return ValueFormatters[formatString as FormatType](value);\n }\n\n //default to formatting as a date with provided format string\n const parsedDate = parseISO(value.toString());\n\n if (isValid(parsedDate)) {\n return format(parsedDate, formatString);\n }\n\n return value.toString();\n}\n\nexport function formatDateString(formatString: string, value: string): string {\n if (!value) return '';\n\n //default to formatting as a date with provided format string\n const parsedDate = parseISO(value.toString());\n\n if (isValid(parsedDate)) {\n return format(parsedDate, formatString);\n }\n\n return value.toString();\n}\n","import { NgComponentOutlet } from '@angular/common';\nimport {\n Component,\n computed,\n effect,\n inject,\n Injector,\n input,\n OnInit,\n output,\n ResourceRef,\n runInInjectionContext,\n signal,\n Type,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { AppGridComponent } from '@cccteam/ccc-lib/src/ccc-grid';\nimport {\n ChildResourceConfig,\n ColumnConfig,\n FieldName,\n ListViewConfig,\n RecordData,\n Resource,\n RESOURCE_META,\n RootConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { ActionAccessControlWrapperComponent } from '../actions/action-button-smart/action-access-control-wrapper.component';\nimport { ActionButtonContext } from '../actions/actions.interface';\nimport {\n hyphenConcatWithoutResource,\n hyphenSpaceConcatWithoutResource,\n noSpaceConcatWithoutResource,\n spaceConcatWithoutResource,\n spaceHyphenConcatWithoutResource,\n} from '../concat-fns';\nimport { applyFormatting, formatDateString } from '../format-fns';\nimport { ResourceStore } from '../resource-store.service';\n\n@Component({\n standalone: true,\n imports: [\n AppGridComponent,\n RouterModule,\n MatIconModule,\n MatButtonModule,\n MatExpansionModule,\n MatTooltipModule,\n ReactiveFormsModule,\n MatInputModule,\n ActionAccessControlWrapperComponent,\n NgComponentOutlet,\n ],\n selector: 'ccc-resource-list',\n templateUrl: './resource-list.component.html',\n styleUrls: ['./resource-list.component.scss'],\n providers: [ResourceStore],\n})\nexport class ResourceListComponent implements OnInit {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n compoundResourceComponent = input.required<Type<any>>();\n\n resourceMeta = inject(RESOURCE_META);\n router = inject(Router);\n store = inject(ResourceStore);\n injector = inject(Injector);\n activatedRoute = inject(ActivatedRoute);\n\n hideCreateButton = input<boolean>(true);\n createMode = output<boolean>();\n resourceConfig = input<ChildResourceConfig>();\n viewRoute = input<string>();\n filter = input<string>('');\n linkCreateType = input<boolean>(false);\n isRootList = input<boolean>(true);\n\n showCreateButton = computed(() => {\n const config = this.config();\n if (config.createTitle !== '' && !config.collapsible && !this.hideCreateButton()) {\n return true;\n }\n if (config.createConfig && Object.keys(config.createConfig).length !== 0) {\n return true;\n }\n return false;\n });\n\n createButtonContext = computed(() => {\n const config = this.resourceConfig();\n const showCreate = this.showCreateButton();\n\n if (config === undefined || showCreate === undefined) {\n return undefined;\n }\n\n if (config.shouldRenderActions === undefined) {\n return undefined;\n }\n\n return {\n actionType: 'create',\n meta: this.meta(),\n shouldRender: (data: RecordData): boolean => showCreate && config.shouldRenderActions.create(data),\n resourceData: this.relatedData() ?? {},\n } satisfies ActionButtonContext;\n });\n\n searchableFields = computed(() => {\n const meta = this.meta();\n if (!meta) return '';\n return `over fields of ${meta.route}`;\n // TODO: implement searchable fields based on resource meta\n // return meta.searchableFields.join(', ') || '';\n });\n\n relatedData = input<RecordData>();\n parentId = input<string>();\n\n routeConfig = computed(() => {\n return this.activatedRoute.snapshot.data['config'] as RootConfig;\n });\n\n config = computed(() => {\n return this.resourceConfig() as ListViewConfig;\n });\n\n expansionConfig = computed(() => {\n const config = this.config().rowExpansionConfig;\n if (config.type !== 'Component' && config.type !== 'Array') {\n config.showBackButton = false;\n }\n return config;\n });\n\n viewRouteFallback = computed(() => {\n if (this.viewRoute()) {\n return this.viewRoute();\n }\n\n return this.resourceMeta(this.config().primaryResource).route;\n });\n\n listTitle = computed(() => {\n if (this.config()?.collapsible) return '';\n return this.config().title || '';\n });\n\n indentTitle = computed(() => {\n if (this.config() === undefined) {\n return false;\n }\n\n return true;\n });\n\n createButtonLabel = computed(() => {\n return this.config().createButtonLabel || 'Create';\n });\n\n meta = computed(() => {\n const config = this.config();\n return this.resourceMeta(config.overrideResource || config.primaryResource);\n });\n resourceRefMap = signal(new Map<Resource, ResourceRef<RecordData[]>>());\n primaryKeys = computed(() => {\n const meta = this.meta();\n if (!meta) {\n return [];\n }\n return meta.fields.filter((field) => field.primaryKey !== undefined);\n });\n rootColumns = computed(() => {\n const config = this.config();\n const idCols = [];\n for (const pk of this.primaryKeys()) {\n if (pk.required) {\n continue;\n }\n idCols.push({\n id: pk.fieldName as FieldName,\n hidden: true,\n });\n }\n for (const col of config.listColumns) {\n if (!('additionalIds' in col)) continue;\n for (const additionalCol of col.additionalIds) {\n if (additionalCol.resource !== undefined) continue;\n idCols.push({\n id: additionalCol.id as FieldName,\n hidden: true,\n });\n }\n }\n\n return [...new Set([...idCols, ...config.listColumns])];\n });\n columns = computed(() => {\n const refmap = this.resourceRefMap();\n const cols = this.rootColumns();\n const columns: ColumnConfig[] = [];\n const usedIds = new Set<string>();\n\n for (const col of cols) {\n const indexId = this.getUniqueId(col.id, usedIds) as FieldName;\n usedIds.add(indexId);\n\n if (col.hidden) {\n continue;\n }\n\n if ('additionalIds' in col) {\n columns.push({\n id: indexId,\n header: col.header,\n width: col.width,\n resizable: col.resizable,\n valueGetter: (data) => {\n const concatArray: string[] = [];\n\n col.additionalIds.forEach((additionalCol) => {\n if (!additionalCol.resource) {\n concatArray.push(data[additionalCol.id]);\n } else {\n const resource = signal(additionalCol.resource as Resource);\n const resourceRef = refmap.get(resource());\n const resData = resourceRef?.value();\n if (!resData) {\n return;\n }\n for (const res of resData) {\n if (res[additionalCol.id] === data[col.id] && additionalCol.field) {\n const value = res[additionalCol.field];\n if (col.formatType && typeof value === 'string') {\n concatArray.push(formatDateString(col.formatType, value));\n } else if (value) {\n concatArray.push(value as string);\n }\n }\n }\n }\n });\n\n if (concatArray.length === 0) {\n return col.emptyDataValue as string;\n }\n\n switch (col.concatFn) {\n case 'space-concat':\n return spaceConcatWithoutResource(concatArray);\n case 'space-hyphen-concat':\n return spaceHyphenConcatWithoutResource(concatArray);\n case 'hyphen-space-concat':\n return hyphenSpaceConcatWithoutResource(concatArray);\n case 'no-space-concat':\n return noSpaceConcatWithoutResource(concatArray);\n default: {\n // default case is hyphen-concat\n return hyphenConcatWithoutResource(concatArray);\n }\n }\n },\n });\n } else {\n columns.push({\n id: indexId,\n header: col.header,\n width: col.width,\n resizable: col.resizable,\n valueFormatter: (params) => {\n if (col.formatType) {\n const retValue = applyFormatting(col.formatType, params);\n return retValue || col.emptyDataValue;\n }\n return params || col.emptyDataValue;\n },\n });\n }\n }\n\n if (this.config().showViewButton) {\n let route = '';\n const isRootList = this.isRootList() === undefined;\n\n if (this.viewRouteFallback() && isRootList) {\n route = this.viewRouteFallback() || '';\n } else {\n let viewResource = this.config().viewResource;\n if (!viewResource || viewResource === '') {\n viewResource = this.config().primaryResource;\n }\n\n const meta = this.resourceMeta(viewResource as Resource);\n if (meta !== undefined) {\n route = meta.route;\n }\n }\n\n columns.push({\n id: 'view' as FieldName,\n header: 'View',\n hideHeader: true,\n buttonConfig: {\n label: 'View',\n icon: 'arrow_forward',\n viewRoute: route,\n actionType: 'link',\n },\n });\n }\n\n return columns;\n });\n\n reloadListData(): void {\n this.store.reloadListData();\n }\n\n processedRowData = computed(() => {\n this.filter();\n this.relatedData();\n const data = this.store.listData();\n if (!data) return [];\n const columns = this.columns();\n\n return data.map((row) => {\n const updatedRow = { ...row };\n for (const col of columns) {\n if (col.valueGetter) {\n updatedRow[col.id] = col.valueGetter(row);\n } else {\n updatedRow[col.id] = row[col.id];\n }\n\n if (typeof col.valueFormatter === 'function') {\n updatedRow[col.id] = col.valueFormatter(updatedRow[col.id]);\n }\n }\n return updatedRow;\n });\n });\n\n filters = computed(() => {\n const configFilter = this.config().filter?.(this.relatedData()) || '';\n const inputFilter = this.filter();\n if (inputFilter && configFilter) {\n return `(${inputFilter}),(${configFilter})`;\n }\n if (inputFilter) {\n return `(${inputFilter})`;\n }\n return configFilter || '';\n });\n\n createResource(event: MouseEvent): void {\n event.stopPropagation();\n this.createMode.emit(true);\n }\n\n parentKey = computed(() => {\n if (this.relatedData() === undefined || this.childKey() === undefined) {\n return '';\n }\n const parent = this.config().parentRelation?.parentKey;\n return this.relatedData()?.[parent] || '';\n });\n\n childKey = computed(() => {\n if (!this.config().parentRelation) {\n return '';\n }\n return this.config().parentRelation?.childKey as string;\n });\n\n private getUniqueId(baseId: string, usedIds: Set<string>): string {\n if (!usedIds.has(baseId)) {\n return baseId;\n }\n\n let counter = 1;\n let newId = `${baseId}_${counter}`;\n while (usedIds.has(newId)) {\n counter++;\n newId = `${baseId}_${counter}`;\n }\n return newId;\n }\n\n ngOnInit(): void {\n const primaryResource = this.config().primaryResource;\n if (this.meta()) {\n this.store.resourceName.set(primaryResource);\n this.store.resourceMeta.set(this.meta());\n this.store.listColumns.set(this.config().listColumns || []);\n this.store.requireSearchToDisplayResults.set(this.config().requireSearchToDisplayResults || false);\n this.store.sorts.set(this.config().sorts || []);\n }\n\n this.store.filter.set(this.filters());\n this.store.disableCacheForFilterPii.set(this.config().disableCacheForFilterPii);\n\n runInInjectionContext(this.injector, () => {\n this.config().listColumns.forEach((element) => {\n if (!('additionalIds' in element)) {\n return;\n }\n element.additionalIds.forEach((id) => {\n if (id.resource === undefined) {\n return;\n }\n const meta = this.resourceMeta(id.resource);\n if (meta === undefined) {\n return;\n }\n const route = signal(meta.route);\n const resource = signal(id.resource);\n if (!this.resourceRefMap().has(resource())) {\n const ref = this.store.resourceList(route);\n if (ref === undefined) {\n return;\n }\n this.resourceRefMap.set(this.resourceRefMap().set(resource(), ref));\n }\n });\n });\n\n effect(() => {\n this.filter();\n this.relatedData();\n this.store.filter.set(this.filters());\n this.store.disableCacheForFilterPii.set(this.config().disableCacheForFilterPii);\n this.store.buildStoreListData();\n });\n });\n }\n}\n","<div [class]=\"linkCreateType() ? 'page-container hide' : 'page-container'\">\n <div class=\"header-container\" [class.show-background]=\"!config().collapsible\" [class.indent]=\"indentTitle()\">\n <h1 class=\"title\">{{ listTitle() }}</h1>\n <action-access-control-wrapper [actionContext]=\"createButtonContext()\">\n <div class=\"create-button\">\n <button mat-raised-button color=\"accent\" (click)=\"createResource($event)\">\n <div class=\"edit-text\">\n <mat-icon>create</mat-icon>\n <span class=\"edit-button-text\"> {{ createButtonLabel() }} </span>\n </div>\n </button>\n </div>\n </action-access-control-wrapper>\n </div>\n <div class=\"resource-container\">\n @if (config().searchable) {\n <mat-form-field class=\"search\">\n <input matInput #qry (keyup)=\"store.searchTokens.set(qry.value)\" placeholder=\"Search\" aria-label=\"Search\" />\n @if (searchableFields() !== '') {\n <mat-hint>Search {{ searchableFields() }}</mat-hint>\n }\n <mat-icon matPrefix>search</mat-icon>\n </mat-form-field>\n }\n <ccc-grid\n [rowData]=\"processedRowData()\"\n [columnDefs]=\"columns()\"\n [enableRowExpansion]=\"config().enableRowExpansion\"\n [detailTemplate]=\"expandedRowTemplate\">\n </ccc-grid>\n </div>\n</div>\n\n<ng-template #expandedRowTemplate let-rowData>\n <ng-container\n *ngComponentOutlet=\"\n compoundResourceComponent();\n inputs: {\n uuid: rowData.id,\n navAfterDelete: false,\n deleted: store.reloadListData.bind(store),\n resourceConfig: expansionConfig(),\n }\n \">\n </ng-container>\n</ng-template>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, Injector, input, signal, Type, viewChild } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule, MatExpansionPanel } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ListViewConfig, RecordData, RootConfig } from '@cccteam/ccc-lib/src/types';\nimport { ResourceCreateComponent } from '../resource-create/resource-create.component';\nimport { ResourceListComponent } from '../resource-list/resource-list.component';\nimport { ResourceStore } from '../resource-store.service';\n\n@Component({\n standalone: true,\n selector: 'ccc-resource-list-create',\n templateUrl: './resource-list-create.component.html',\n styleUrl: './resource-list-create.component.scss',\n imports: [\n MatExpansionModule,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n ResourceCreateComponent,\n ResourceListComponent,\n NgTemplateOutlet,\n ],\n providers: [ResourceStore],\n})\nexport class ResourceListCreateComponent {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n compoundResourceComponent = input.required<Type<any>>();\n\n injector = inject(Injector);\n store = inject(ResourceStore);\n listChild = viewChild<ResourceListComponent, ResourceListComponent>('list', { read: ResourceListComponent });\n\n route = inject(ActivatedRoute);\n router = inject(Router);\n create = signal<boolean>(false);\n parentId = input<string>();\n parentData = input<RecordData>({});\n searchParams = input<Record<string, string>[]>([]);\n resourceConfig = input<ListViewConfig>();\n isRootList = input<boolean>(true);\n\n childKey = computed(() => {\n if (!this.config().parentRelation) {\n return '';\n }\n return this.config().parentRelation?.childKey as string;\n });\n\n filter = computed(() => {\n const filters = [];\n if (this.childKey() !== '' && this.parentKey() !== '') {\n filters.push(`${this.childKey()}:eq:${this.parentKey()}`);\n }\n return filters.join(',');\n });\n\n parentKey = computed(() => {\n if (this.parentData() === undefined || this.childKey() === undefined) {\n return '';\n }\n const parent = this.config().parentRelation?.parentKey;\n return this.parentData()?.[parent] || '';\n });\n\n config = computed(() => {\n const inputConfig = this.resourceConfig();\n if (inputConfig) {\n return inputConfig as ListViewConfig;\n }\n return this.rootConfig().parentConfig as ListViewConfig;\n });\n\n expPanel = viewChild<MatExpansionPanel, MatExpansionPanel>('expPanel', { read: MatExpansionPanel });\n\n rootConfig = computed(() => {\n return this.route.snapshot.data['config'] as RootConfig;\n });\n\n createLinkType = computed(() => {\n return this.config().loadCreatedResource && this.create();\n });\n\n createConfig = computed(() => {\n const config = this.config();\n if (Object.keys(config.createConfig).length !== 0) {\n return config.createConfig;\n }\n return config;\n });\n\n createResource(event: MouseEvent): void {\n event.stopPropagation();\n this.create.set(true);\n\n if (this.expPanel() && this.expPanel()?.closed) {\n this.expPanel()?.open();\n }\n }\n\n makeCreatePatches(): void {\n if (this.create()) {\n this.listChild()?.reloadListData();\n this.create.set(false);\n }\n }\n}\n","@if (config().collapsible) {\n <div class=\"page-container\">\n <mat-expansion-panel\n #expPanel\n [@.disabled]=\"true\"\n disabled=\"{{ !config().collapsible }}\"\n expanded=\"{{ !config().collapsible }}\">\n @if (config().collapsible || config().title) {\n <mat-expansion-panel-header>\n <mat-panel-title>\n <h1 class=\"title\">\n {{ config().title }}\n </h1>\n </mat-panel-title>\n @if (config().createTitle !== '') {\n <button\n mat-icon-button\n class=\"exp-panel-add-element-btn\"\n color=\"accent\"\n (click)=\"createResource($event)\"\n matTooltip=\"{{ config().createButtonLabel }}\"\n matTooltipPosition=\"above\">\n <mat-icon color=\"accent\">add_circle</mat-icon>\n </button>\n }\n </mat-expansion-panel-header>\n } @else {\n <div class=\"no-title-exp-panel-padding\"></div>\n }\n\n <ng-container *ngTemplateOutlet=\"resourceComponents\"></ng-container>\n </mat-expansion-panel>\n </div>\n} @else {\n <ng-container *ngTemplateOutlet=\"resourceComponents\"></ng-container>\n}\n\n<ng-template #resourceComponents>\n @if (create()) {\n <ccc-resource-create\n [resourceConfig]=\"createConfig()\"\n [parentData]=\"parentData()\"\n [loadCreatedResource]=\"config().loadCreatedResource\"\n (complete)=\"makeCreatePatches()\">\n </ccc-resource-create>\n }\n\n <ccc-resource-list\n #list\n [viewRoute]=\"rootConfig().routeData.route\"\n [resourceConfig]=\"config()\"\n [filter]=\"filter()\"\n [hideCreateButton]=\"create()\"\n [relatedData]=\"parentData()\"\n [parentId]=\"parentId()\"\n [linkCreateType]=\"createLinkType()\"\n [isRootList]=\"isRootList()\"\n (createMode)=\"create.set($event)\"\n [compoundResourceComponent]=\"compoundResourceComponent()\">\n </ccc-resource-list>\n</ng-template>\n","import { Component, computed, effect, input, Type, untracked, viewChild, ViewContainerRef } from '@angular/core';\nimport { ChildResourceConfig, ComponentConfig, FieldName, RecordData } from '@cccteam/ccc-lib/src/types';\nimport { ResourceStore } from '../resource-store.service';\n\n@Component({\n selector: 'ccc-resource-resolver',\n imports: [],\n templateUrl: './resource-resolver.component.html',\n styleUrl: './resource-resolver.component.scss',\n providers: [ResourceStore],\n})\nexport class ResourceResolverComponent {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n compoundResourceComponent = input.required<Type<any>>();\n resourceConfig = input<ChildResourceConfig>();\n\n config = computed(() => {\n return this.resourceConfig() as ComponentConfig;\n });\n\n dynamicSlot = viewChild.required<ViewContainerRef, ViewContainerRef>('dynamicSlot', { read: ViewContainerRef });\n\n parentData = input.required<RecordData>();\n\n constructor() {\n effect(() => {\n const parentData = this.parentData();\n const config = this.config();\n const params = config?.params;\n if (params === undefined || config === undefined) {\n return;\n }\n\n untracked(() => {\n this.dynamicSlot().clear();\n const component = config.component;\n if (component === 'SwitchResolver') {\n let uuid = '';\n let caseConfig = {} as ChildResourceConfig;\n for (const c of params.cases) {\n if (parentData) {\n if (parentData[c.parentField] === c.caseId) {\n uuid = String(parentData[c.childId]);\n caseConfig = c.config;\n if ('parentRelation' in caseConfig) {\n caseConfig.parentRelation.childKey = '' as FieldName;\n caseConfig.parentRelation.parentKey = '' as FieldName;\n }\n break;\n }\n }\n }\n\n if (uuid == '') {\n return;\n }\n\n // Use dynamic import to avoid circular dependency\n const primaryComponentRef = this.dynamicSlot().createComponent(this.compoundResourceComponent());\n primaryComponentRef.setInput('resourceConfig', caseConfig);\n primaryComponentRef.setInput('uuid', uuid);\n primaryComponentRef.setInput('parentData', parentData);\n } else if (typeof component === 'function') {\n const primaryComponentRef = this.dynamicSlot().createComponent(component);\n primaryComponentRef.setInput('uuid', parentData['uuid'] || '');\n primaryComponentRef.setInput('config', config);\n primaryComponentRef.setInput('parentData', parentData);\n }\n });\n });\n }\n}\n","<ng-template #dynamicSlot></ng-template>","import { Component } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogActions, MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'ccc-delete-resource-confirmation-modal',\n imports: [MatDialogModule, MatFormFieldModule, MatDialogActions, MatButtonModule, MatInputModule],\n templateUrl: './delete-resource-confirmation-modal.component.html',\n styleUrls: ['./delete-resource-confirmation-modal.component.scss'],\n})\nexport class DeleteResourceConfirmationModalComponent {}\n","<div mat-dialog-title>Are you sure you want to delete this resource?</div>\n<mat-dialog-actions align=\"end\">\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"false\">Cancel</button>\n <button mat-raised-button color=\"accent\" [mat-dialog-close]=\"true\">Confirm</button>\n</mat-dialog-actions>\n","import { CommonModule, Location } from '@angular/common';\nimport {\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n input,\n model,\n OnInit,\n output,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { sparseFormData } from '@cccteam/ccc-lib/src/forms';\nimport {\n AlertLevel,\n DataType,\n FieldElement,\n ListViewConfig,\n RecordData,\n Resource,\n RESOURCE_META,\n RootConfig,\n RPCConfig,\n ViewConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\nimport { filter, tap } from 'rxjs';\nimport { ActionAccessControlWrapperComponent } from '../actions/action-button-smart/action-access-control-wrapper.component';\nimport { ActionButtonContext } from '../actions/actions.interface';\nimport { RpcButtonComponent } from '../actions/rpc-button/rpc-button.component';\nimport { DeleteResourceConfirmationModalComponent } from '../delete-resource-confirmation-modal/delete-resource-confirmation-modal.component';\nimport { FormStateService } from '../form-state.service';\nimport { civildateCoercion, flattenElements } from '../gui-constants';\nimport { ResourceCreateComponent } from '../resource-create/resource-create.component';\nimport { ResourceLayoutComponent } from '../resource-layout/resource-layout.component';\nimport { ResourceStore } from '../resource-store.service';\nimport { DeleteOperation, metadataTypeCoercion, UpdateOperation } from '../resources-helpers';\n\n@Component({\n selector: 'ccc-resource-view',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n RouterModule,\n MatButtonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatDividerModule,\n ResourceLayoutComponent,\n MatExpansionPanel,\n MatExpansionPanelHeader,\n MatExpansionPanelTitle,\n RpcButtonComponent,\n CommonModule,\n ActionAccessControlWrapperComponent,\n ResourceCreateComponent,\n ],\n templateUrl: './resource-view.component.html',\n styleUrl: './resource-view.component.scss',\n providers: [ResourceStore],\n})\nexport class ResourceViewComponent implements OnInit {\n resourceMeta = inject(RESOURCE_META);\n location = inject(Location);\n router = inject(Router);\n activatedRoute = inject(ActivatedRoute);\n notifications = inject(NotificationService);\n store = inject(ResourceStore);\n injector = inject(Injector);\n destroyRef = inject(DestroyRef);\n formState = inject(FormStateService);\n dialog = inject(MatDialog);\n\n editMode: WritableSignal<'edit' | 'view'> = signal('view');\n uuid = input.required<string>();\n config = input.required<ViewConfig | ListViewConfig>();\n relatedData = input<RecordData>({});\n compoundResourceView = input<boolean>(false);\n isDirty = signal(false);\n\n displayFormInvalidMessage = signal<boolean>(false);\n deleted = output<boolean>();\n navAfterDelete = input(true);\n\n showCreateForm = model(false);\n createConfig = computed(() => {\n if (Object.keys(this.config().createConfig || {}).length > 0) {\n return this.config().createConfig;\n }\n return this.config();\n });\n\n rootConfig = computed(() => {\n return this.activatedRoute.snapshot.data['config'] as RootConfig;\n });\n\n showCloseButton = computed(() => {\n const config = this.config();\n const showBackButton = config.showBackButton ?? true;\n if (config) {\n return showBackButton && config.primaryResource === this.rootConfig().parentConfig.primaryResource;\n }\n return showBackButton;\n });\n\n commonButtonConfig = computed(() => {\n const config = this.config();\n\n if (config === undefined) {\n return undefined;\n }\n\n if (config.shouldRenderActions === undefined) {\n return undefined;\n }\n\n return {\n meta: this.store.resourceMeta(),\n resourceData: this.relatedData(),\n config,\n };\n });\n\n editButtonContext = computed(() => {\n const commonConfig = this.commonButtonConfig();\n\n if (commonConfig === undefined) {\n return undefined;\n }\n\n return {\n actionType: 'edit',\n meta: commonConfig.meta,\n resourceData: commonConfig.resourceData,\n shouldRender: commonConfig.config.shouldRenderActions.edit,\n } satisfies ActionButtonContext;\n });\n\n deleteButtonContext = computed(() => {\n const commonConfig = this.commonButtonConfig();\n\n if (commonConfig === undefined) {\n return undefined;\n }\n\n return {\n actionType: 'delete',\n meta: commonConfig.meta,\n resourceData: commonConfig.resourceData,\n shouldRender: (data: RecordData): boolean => commonConfig.config.shouldRenderActions.delete(data),\n } satisfies ActionButtonContext;\n });\n\n inlineRpcConfigs = computed(() => {\n const config = this.config();\n if (config === undefined) {\n return [];\n }\n\n const rpcConfigs = config.rpcConfigs?.filter((rpc: RPCConfig) => rpc.placement === 'inline');\n\n return rpcConfigs?.map((config) => {\n return {\n config,\n context: {\n actionType: 'rpc',\n shouldRender: config.shouldRender,\n resourceData: this.relatedData(),\n } satisfies ActionButtonContext,\n };\n });\n });\n\n endRpcConfigs = computed(() => {\n const config = this.config();\n\n if (config === undefined) {\n return [];\n }\n\n const rpcConfigs = config.rpcConfigs?.filter((rpc: RPCConfig) => rpc.placement === 'end');\n\n return rpcConfigs?.map((config) => {\n return {\n config,\n context: {\n actionType: 'rpc',\n shouldRender: config.shouldRender,\n resourceData: this.relatedData(),\n } satisfies ActionButtonContext,\n };\n });\n });\n\n useExpansionPanel = computed(() => {\n const config = this.config();\n // TODO: Investigate why we're doing this check, it's weird because viewType is not part of the input configs\n if (config && 'viewType' in config && config.viewType !== 'View') {\n return false;\n }\n\n return config.collapsible || !this.compoundResourceView();\n });\n\n resourceConfigRouteSnapshot = computed(() => {\n return (\n this.config() ||\n (this.activatedRoute.snapshot.data['config'] as RootConfig)?.parentConfig ||\n ({} as ViewConfig | ListViewConfig)\n );\n });\n\n emptyFormGroup = new FormGroup({});\n\n form = computed(() => {\n const meta = this.store.resourceMeta();\n const resourceData = this.store.viewData();\n const config = this.config();\n\n if (meta === undefined || resourceData === undefined || config === undefined) {\n return this.emptyFormGroup;\n }\n\n const fg = new FormGroup({});\n const pristineValues: Record<string, DataType | null> = {};\n const allElements = flattenElements(config.elements);\n\n for (const field of meta.fields || []) {\n const isFieldNameRegistered = fg.get(field.fieldName) !== null;\n if (isFieldNameRegistered) {\n continue;\n }\n\n const findConfig = allElements.find((element) => element.type === 'field' && element.name === field.fieldName);\n const fieldConfig = findConfig as FieldElement | undefined;\n if (!fieldConfig) {\n continue;\n }\n\n let value: DataType | null = null;\n const stringValue = resourceData?.[field.fieldName] ? String(resourceData[field.fieldName]) : '';\n\n if (field.displayType === 'civildate' && stringValue) {\n value = civildateCoercion(stringValue);\n } else if (resourceData[field.fieldName] !== undefined) {\n value = resourceData[field.fieldName];\n }\n\n const control = new FormControl(value);\n\n if (fieldConfig.validators.length > 0) {\n control.setValidators(fieldConfig.validators);\n }\n\n fg.addControl(field.fieldName, control);\n pristineValues[field.fieldName] = value;\n }\n this.pristineFormValues = pristineValues;\n\n return fg;\n });\n\n pristineFormValues: Record<string, DataType | null> = {};\n\n route = computed(() => {\n const meta = this.store.resourceMeta();\n if (!meta) return '';\n return meta.consolidatedRoute || meta.route;\n });\n\n primaryKeys = computed(() => {\n const meta = this.store.resourceMeta();\n if (!meta) return [];\n return meta.fields\n .filter((field) => field.primaryKey)\n .sort((a, b) => a.primaryKey!.ordinalPosition - b.primaryKey!.ordinalPosition);\n });\n\n primaryKeyPath = computed(() => {\n const meta = this.store.resourceMeta();\n const isConsolidated = !!meta.consolidatedRoute;\n let resourceIdentifier = '';\n if (isConsolidated) {\n resourceIdentifier = '/' + String(meta.route);\n }\n return (\n resourceIdentifier +\n '/' +\n this.primaryKeys()\n .map((field) => this.store.viewData()[field.fieldName])\n .join('/')\n );\n });\n\n ngOnInit(): void {\n if (this.resourceMeta(this.config().primaryResource as Resource)) {\n this.store.resourceName.set(this.config().primaryResource as Resource);\n this.store.resourceMeta.set(this.resourceMeta(this.config().primaryResource as Resource));\n }\n\n this.inlineRpcConfigs();\n this.endRpcConfigs();\n }\n\n setEditMode(mode: 'edit' | 'view'): void {\n if (mode === 'view') {\n const changeData = sparseFormData(this.form(), this.pristineFormValues);\n if (Object.keys(changeData).length !== 0) {\n this.notifications.addGlobalNotification({\n message: 'You have unsaved changes.',\n link: '',\n level: AlertLevel.ERROR,\n });\n return;\n }\n this.editMode.set('view');\n } else if (mode === 'edit') {\n this.editMode.set('edit');\n }\n }\n\n saveForm(): void {\n if (!this.form().valid) {\n this.displayFormInvalidMessage.set(true);\n this.form().markAllAsTouched();\n return;\n }\n\n this.displayFormInvalidMessage.set(false);\n\n const resourceMeta = this.store.resourceMeta();\n if (!resourceMeta) {\n return;\n }\n\n const sparseData = sparseFormData(this.form(), this.pristineFormValues);\n const coercedSparseData = metadataTypeCoercion(sparseData, resourceMeta);\n\n const updatePatch: UpdateOperation = {\n op: 'patch',\n value: coercedSparseData,\n path: this.primaryKeyPath(),\n };\n\n this.pristineFormValues = this.form().getRawValue();\n\n if (Object.keys(coercedSparseData).length === 0) {\n return;\n }\n this.store\n .makePatches([updatePatch], this.route(), this.store.resourceName())\n .pipe(\n tap(() => {\n this.form().markAsPristine();\n this.setEditMode('view');\n this.formState.decrementDirtyForms();\n this.store.reloadViewData();\n }),\n )\n .subscribe();\n }\n\n resetForm(): void {\n this.form().reset();\n this.form().patchValue(this.pristineFormValues);\n this.setEditMode('view');\n if (this.form().dirty) {\n this.formState.decrementDirtyForms();\n }\n }\n\n confirmDeleteResource(): void {\n const existingDialog = this.dialog.openDialogs.find(\n (d) => d.componentInstance instanceof DeleteResourceConfirmationModalComponent,\n );\n\n const dialogRef =\n existingDialog ?? this.dialog.open(DeleteResourceConfirmationModalComponent, { delayFocusTrap: false });\n\n const result = dialogRef.afterClosed().pipe(\n tap((value) => {\n if (value === true) {\n console.debug('Deleting resource | ', this.config().title, '|', this.relatedId());\n this.deleteResource();\n }\n }),\n takeUntilDestroyed(this.destroyRef),\n );\n\n result.subscribe();\n }\n\n deleteResource(): void {\n const deletePatch: DeleteOperation = {\n op: 'remove',\n value: {},\n path: this.primaryKeyPath(),\n };\n\n this.store\n .makePatches([deletePatch], this.route(), this.store.resourceName())\n .pipe(\n tap(() => {\n this.deleted.emit(true);\n }),\n filter(() => this.compoundResourceView()),\n tap(() => {\n const navAfterDelete = this.navAfterDelete() !== false;\n if (navAfterDelete) {\n this.location.back();\n } else {\n this.showCreateForm.set(true);\n }\n }),\n )\n .subscribe();\n }\n\n relatedId(): string {\n const uuid = this.uuid();\n const relatedData = this.relatedData();\n const config = this.config();\n if (config.parentRelation?.parentKey) {\n return String(relatedData[config.parentRelation.parentKey]);\n }\n return uuid;\n }\n\n constructor() {\n effect(() => {\n console.debug('USAGE | New FormGroup subscription for: ', this.config().title);\n\n this.form()\n .valueChanges.pipe(\n tap(() => {\n const dirty = this.form().dirty;\n if (dirty !== this.isDirty()) {\n this.isDirty.set(dirty);\n if (dirty) {\n this.formState.incrementDirtyForms();\n } else {\n this.formState.decrementDirtyForms();\n }\n }\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n });\n\n effect(() => {\n const id = this.relatedId();\n const create = this.showCreateForm();\n this.store.uuid.set(id);\n if (!create) {\n this.store.buildStoreViewData();\n }\n });\n }\n\n createResource(): void {\n this.showCreateForm.set(false);\n this.store.buildStoreViewData();\n }\n}\n","@if (useExpansionPanel()) {\n <div class=\"resource-view\">\n <mat-expansion-panel [@.disabled]=\"true\" [disabled]=\"!config().collapsible\" [expanded]=\"!config().collapsible\">\n @if (config().title) {\n <mat-expansion-panel-header>\n <mat-panel-title>\n <h1 class=\"title\">{{ showCreateForm() ? 'Create' : '' }}{{ config().title }}</h1>\n </mat-panel-title>\n </mat-expansion-panel-header>\n } @else {\n <div class=\"no-title-exp-panel-padding\"></div>\n }\n <ng-container *ngTemplateOutlet=\"headerSlot\"></ng-container>\n @if (store.viewStatus() === 'resolved') {\n <div class=\"resource-container\" [class.form-edit-mode]=\"editMode() === 'edit'\">\n <form [formGroup]=\"form()\">\n <div class=\"resource row\">\n @if (showCreateForm()) {\n <ccc-resource-create\n [resourceConfig]=\"createConfig()\"\n [parentData]=\"relatedData()\"\n (complete)=\"createResource()\">\n </ccc-resource-create>\n } @else {\n <ng-container *ngTemplateOutlet=\"formSlot\"></ng-container>\n }\n </div>\n </form>\n <ng-container *ngTemplateOutlet=\"footerSlot\"></ng-container>\n </div>\n } @else {\n <div class=\"resource-container empty\">\n <div class=\"resource row\"></div>\n </div>\n }\n </mat-expansion-panel>\n </div>\n} @else {\n <div class=\"page-container\">\n @if (!showCreateForm()) {\n <ng-container *ngTemplateOutlet=\"headerSlot\"></ng-container>\n }\n @if (store.viewStatus() === 'resolved') {\n <div class=\"resource-container base-container-bg\" [class.form-edit-mode]=\"editMode() === 'edit'\">\n <form [formGroup]=\"form()\">\n <div class=\"resource row\">\n @if (showCreateForm()) {\n <ccc-resource-create\n [resourceConfig]=\"createConfig()\"\n [parentData]=\"relatedData()\"\n (complete)=\"createResource()\">\n </ccc-resource-create>\n } @else {\n <ng-container *ngTemplateOutlet=\"formSlot\"></ng-container>\n }\n </div>\n </form>\n </div>\n } @else {\n <div class=\"resource-container\">\n <div class=\"resource row empty\"></div>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"footerSlot\"></ng-container>\n </div>\n}\n\n<ng-template #formSlot>\n @for (element of config().elements; track element) {\n @if (element.type === 'section' || element.type === 'computedDisplayField' || element.type === 'padding') {\n <ccc-resource-layout-template\n [element]=\"element\"\n [meta]=\"store.resourceMeta()\"\n [fieldClass]=\"config().fieldClass\"\n [editMode]=\"editMode()\"\n [relatedData]=\"relatedData()\"\n [form]=\"form()\">\n </ccc-resource-layout-template>\n } @else {\n <ccc-resource-layout-template\n [element]=\"element\"\n [meta]=\"store.resourceMeta()\"\n [fieldClass]=\"config().fieldClass\"\n [pristineValue]=\"pristineFormValues[element.name]\"\n [editMode]=\"editMode()\"\n [relatedData]=\"relatedData()\"\n [form]=\"form()\">\n </ccc-resource-layout-template>\n }\n }\n</ng-template>\n\n<ng-template #headerSlot>\n <div class=\"header-container\">\n <div class=\"state-buttons\">\n @if (store.viewStatus() === 'resolved') {\n @for (rpc of inlineRpcConfigs(); track rpc.context) {\n <action-access-control-wrapper [actionContext]=\"rpc.context\">\n <ccc-rpc-button\n [rpcConfig]=\"rpc.config\"\n [relatedData]=\"relatedData()\"\n [primaryResource]=\"config().primaryResource\">\n </ccc-rpc-button>\n </action-access-control-wrapper>\n }\n @if (editMode() === 'view') {\n <action-access-control-wrapper [actionContext]=\"editButtonContext()\">\n <div class=\"edit-button\">\n <button mat-raised-button color=\"accent\" (click)=\"setEditMode('edit')\">\n <div class=\"button-text\">\n <mat-icon>edit</mat-icon>\n <span class=\"mode-text\"> Edit </span>\n </div>\n </button>\n </div>\n </action-access-control-wrapper>\n\n <action-access-control-wrapper [actionContext]=\"deleteButtonContext()\">\n <button mat-raised-button color=\"primary\" (click)=\"confirmDeleteResource()\">Delete</button>\n </action-access-control-wrapper>\n }\n\n @if (editMode() === 'edit') {\n @if (form().dirty) {\n <div class=\"unsaved message\">You have unsaved changes!</div>\n }\n @if (!form().valid && displayFormInvalidMessage()) {\n <div class=\"invalid message\">Please complete or fix required fields.</div>\n }\n <button mat-raised-button color=\"primary\" (click)=\"resetForm()\">Cancel</button>\n <button mat-raised-button color=\"accent\" (click)=\"saveForm()\" [disabled]=\"form().pristine\">Save</button>\n }\n\n @if (showCloseButton()) {\n <div class=\"close-button\">\n <button mat-icon-button color=\"warn\" (click)=\"location.back()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #footerSlot>\n @for (rpc of endRpcConfigs(); track rpc) {\n <action-access-control-wrapper [actionContext]=\"rpc.context\">\n <ccc-rpc-button\n [rpcConfig]=\"rpc.config\"\n [relatedData]=\"relatedData()\"\n [primaryResource]=\"config().primaryResource\">\n </ccc-rpc-button>\n </action-access-control-wrapper>\n }\n</ng-template>\n","import { Location } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n Injector,\n input,\n OnInit,\n output,\n signal,\n Type,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport {\n ChildResourceConfig,\n ParentResourceConfig,\n RecordData,\n Resource,\n RESOURCE_META,\n RootConfig,\n} from '@cccteam/ccc-lib/src/types';\nimport { ActionAccessControlWrapperComponent } from '../actions/action-button-smart/action-access-control-wrapper.component';\nimport { ActionButtonContext } from '../actions/actions.interface';\nimport { RpcButtonComponent } from '../actions/rpc-button/rpc-button.component';\nimport { ResourceArrayViewComponent } from '../resource-array-view/resource-array-view.component';\nimport { ResourceListCreateComponent } from '../resource-list-create/resource-list-create.component';\nimport { ResourceResolverComponent } from '../resource-resolver/resource-resolver.component';\nimport { ResourceStore } from '../resource-store.service';\nimport { ResourceViewComponent } from '../resource-view/resource-view.component';\n\n@Component({\n selector: 'compound-resource',\n templateUrl: './compound-resource.component.html',\n styleUrl: './compound-resource.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatIconModule,\n RouterModule,\n MatButtonModule,\n RpcButtonComponent,\n ResourceViewComponent,\n ResourceListCreateComponent,\n ResourceArrayViewComponent,\n ResourceResolverComponent,\n ActionAccessControlWrapperComponent,\n RouterModule,\n ],\n providers: [ResourceStore],\n})\nexport class CompoundResourceComponent implements OnInit {\n location = inject(Location);\n route = inject(ActivatedRoute);\n store = inject(ResourceStore);\n injector = inject(Injector);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n componentRef: Type<any> = CompoundResourceComponent;\n resourceMeta = inject(RESOURCE_META);\n\n resourceConfig = input<ParentResourceConfig | ChildResourceConfig>();\n isArrayChild = input<boolean>(false);\n uuid = input.required<string>();\n parentData = input<RecordData>();\n\n rootConfig = computed(() => this.route.snapshot.data['config'] as RootConfig);\n\n emptyOneToOne = signal(false);\n missingRoot = input(false);\n resourceCreate = output();\n deleted = output<boolean>();\n navAfterDelete = input<boolean>(true);\n navAfterDeleteConsideringRoot = computed(() => {\n const navAfterDeleteInput = this.navAfterDelete();\n if (navAfterDeleteInput === undefined) return true;\n return false;\n });\n\n hasElements = computed(() => {\n const config = this.primaryConfig();\n return config && (config.type === 'ListView' || config.type === 'View') && config.elements.length > 0;\n });\n\n primaryConfigParentId = computed(() => {\n const config = this.primaryConfig();\n const data = this.resolvedData();\n if (config.type === 'View' || config.type === 'ListView') {\n const parentKey = config.parentRelation?.parentKey;\n if (parentKey !== '') {\n return String(data[parentKey]);\n }\n }\n return this.uuid();\n });\n\n primaryConfig = computed(() => {\n const config = this.resourceConfig();\n if (config) {\n return config;\n }\n return this.rootConfig().parentConfig;\n });\n\n title = computed(() => {\n if (this.isArrayChild()) {\n return '';\n }\n const config = this.primaryConfig();\n if (config.type !== 'Component') {\n return config.title;\n }\n return '';\n });\n\n isRootConfig = computed(() => {\n return this.resourceConfig() === undefined;\n });\n\n configs = computed(() => {\n if (this.hasElements() && this.emptyOneToOne()) {\n return [];\n }\n\n if (this.isRootConfig()) {\n return this.rootConfig().relatedConfigs;\n }\n\n const config = this.primaryConfig();\n if (config.type === 'ListView' || config.type === 'View') {\n return config.relatedConfigs;\n }\n return [];\n });\n\n rpcConfigs = computed(() => {\n const isRootConfig = this.isRootConfig();\n const rootConfig = this.rootConfig();\n\n if (isRootConfig === undefined || rootConfig === undefined) {\n return [];\n }\n\n if (!isRootConfig || rootConfig.rpcConfigs === undefined) {\n return [];\n }\n\n return rootConfig.rpcConfigs?.map((config) => ({\n config,\n context: {\n actionType: 'rpc',\n shouldRender: config.shouldRender,\n resourceData: this.resolvedData(),\n } satisfies ActionButtonContext,\n }));\n });\n hasRpcConfigs = computed(() => !!this.rpcConfigs() && this.rpcConfigs()!.length > 0);\n\n resolvedData = computed(() => {\n if (Object.keys(this.store.viewData()).length > 0) {\n return this.store.viewData() as RecordData;\n }\n\n return this.parentData() || ({} as RecordData);\n });\n\n ngOnInit(): void {\n const resource = this.primaryConfig().primaryResource as Resource;\n const meta = this.resourceMeta(resource);\n\n if (meta) {\n this.store.resourceName.set(resource);\n this.store.resourceMeta.set(meta);\n }\n }\n\n constructor() {\n effect(() => {\n this.store.uuid.set(this.primaryConfigParentId());\n\n const c = this.primaryConfig();\n if (this.missingRoot()) {\n return;\n }\n if (c.type === 'View') {\n this.store.buildStoreViewData();\n } else if (c.type === 'ListView') {\n this.store.buildStoreListData();\n this.store.buildStoreViewData();\n }\n });\n }\n\n goBack(): void {\n this.location.back();\n }\n}\n","<div class=\"page-container\">\n <div class=\"header-container\">\n <div class=\"title\" [class.title-without-back]=\"title()\">\n @if (title() !== '') {\n <h1>{{ title() }}</h1>\n }\n </div>\n </div>\n\n @if (hasElements() || configs().length > 0) {\n <div class=\"resource-container\" [class.empty-elements]=\"!hasElements()\">\n @let primaryConfigRef = primaryConfig();\n @if (primaryConfigRef.type === 'View' || primaryConfigRef.type === 'ListView') {\n <ccc-resource-view\n [uuid]=\"uuid()\"\n [config]=\"primaryConfigRef\"\n [relatedData]=\"resolvedData()\"\n [showCreateForm]=\"missingRoot()\"\n [compoundResourceView]=\"true\"\n [navAfterDelete]=\"navAfterDeleteConsideringRoot()\"\n (createChange)=\"resourceCreate.emit()\"\n (deleted)=\"deleted.emit(true)\">\n </ccc-resource-view>\n }\n\n @for (config of configs(); track config) {\n @let hasrelatedConfigs = 'relatedConfigs' in config && config.relatedConfigs.length > 0;\n @if (hasrelatedConfigs) {\n <compound-resource [uuid]=\"primaryConfigParentId()\" [parentData]=\"resolvedData()\" [resourceConfig]=\"config\">\n </compound-resource>\n } @else if (config.type === 'ListView') {\n <ccc-resource-list-create\n [resourceConfig]=\"config\"\n [parentData]=\"resolvedData()\"\n [isRootList]=\"false\"\n [parentId]=\"primaryConfigParentId()\"\n [compoundResourceComponent]=\"componentRef\">\n </ccc-resource-list-create>\n } @else if (config.type === 'Array') {\n <ccc-resource-array-view\n [resourceConfig]=\"config\"\n [parentData]=\"store.viewData()\"\n [compoundResourceComponent]=\"componentRef\">\n </ccc-resource-array-view>\n } @else if (config.type === 'View') {\n @let relatedId = resolvedData()[config.parentRelation.parentKey] || primaryConfigParentId();\n @if (relatedId) {\n <ccc-resource-view\n [navAfterDelete]=\"navAfterDeleteConsideringRoot()\"\n [uuid]=\"relatedId + ''\"\n [config]=\"config\"\n [relatedData]=\"resolvedData()\"></ccc-resource-view>\n }\n } @else if (config.type === 'Component') {\n <ccc-resource-resolver\n [parentData]=\"resolvedData()\"\n [resourceConfig]=\"config\"\n [compoundResourceComponent]=\"componentRef\">\n </ccc-resource-resolver>\n }\n }\n @if (hasRpcConfigs()) {\n <div class=\"rpc-buttons-container\">\n @for (rpc of rpcConfigs(); track rpc.config.label) {\n <action-access-control-wrapper [actionContext]=\"rpc.context\">\n <ccc-rpc-button\n [rpcConfig]=\"rpc.config\"\n [relatedData]=\"resolvedData()\"\n [primaryResource]=\"primaryConfig().primaryResource\">\n </ccc-rpc-button>\n </action-access-control-wrapper>\n }\n </div>\n }\n </div>\n }\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'camelCaseToTitle',\n})\nexport class CamelCaseToTitlePipe implements PipeTransform {\n transform(value: string): string {\n if (!value) {\n return value;\n }\n\n if (value === value.toUpperCase() && !/[0-9]/.test(value)) {\n return value;\n }\n\n let transformed = value.replace(/([A-Z])/g, ' $1');\n transformed = transformed.replace(/([a-zA-Z])([0-9])/g, '$1 $2');\n transformed = transformed.trim();\n transformed = transformed.charAt(0).toUpperCase() + transformed.slice(1);\n\n return transformed;\n }\n}\n","import { Component, computed, input, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule, TooltipPosition } from '@angular/material/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { ActionButtonConfig } from '@cccteam/ccc-lib/src/types';\n\n@Component({\n selector: 'ccc-table-button',\n standalone: true,\n imports: [MatButtonModule, MatIconModule, MatTooltipModule, RouterModule],\n templateUrl: './table-button.component.html',\n styleUrl: './table-button.component.scss',\n})\nexport class TableButtonComponent<T> {\n config = input.required<ActionButtonConfig>();\n\n rowData = input.required<T>();\n tooltipPosition = input<TooltipPosition>('above' as TooltipPosition);\n color = input<string>('');\n disabled = signal<boolean>(false);\n viewRoute = input<string>('');\n id = input<string>('');\n\n link = computed(() => {\n const viewRoute = this.viewRoute();\n const id = this.id();\n\n if (!viewRoute || !id) {\n return '';\n }\n\n if (!viewRoute.startsWith('/')) {\n return `${viewRoute}/${id}`;\n }\n\n return `${viewRoute}/${id}`;\n });\n\n callAction(): void {\n const rowData = this.rowData();\n const action = this.config().action;\n if (rowData && action !== undefined) {\n const id = 'id' as keyof T;\n const idVal = rowData[id] as string;\n action({ id: idVal });\n }\n }\n}\n","<span\n [matTooltip]=\"disabled() ? config().disabledLabel : config().label\"\n [matTooltipPosition]=\"tooltipPosition()\"\n class=\"parent\">\n @if (config().actionType === 'link') {\n <a [routerLink]=\"viewRoute()\">\n <button mat-icon-button [disabled]=\"disabled()\" [color]=\"config().color\">\n <mat-icon>{{ config().icon }}</mat-icon>\n </button>\n </a>\n } @else if (config().actionType === 'function') {\n <button mat-icon-button (click)=\"callAction()\" [disabled]=\"disabled()\" [color]=\"color()\">\n <mat-icon>{{ config().icon }}</mat-icon>\n </button>\n }\n</span>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input, output, TemplateRef } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { CamelCaseToTitlePipe } from '@cccteam/ccc-lib/src/ccc-camel-case-to-title';\nimport { ColumnConfig, RecordData } from '@cccteam/ccc-lib/src/types';\nimport { GridModule, SelectableMode, SelectableSettings } from '@progress/kendo-angular-grid';\nimport { TableButtonComponent } from './table-button/table-button.component';\n\n@Component({\n selector: 'ccc-grid',\n standalone: true,\n imports: [\n GridModule,\n CommonModule,\n TableButtonComponent,\n CamelCaseToTitlePipe,\n RouterModule,\n MatIconButton,\n MatIconModule,\n MatTooltipModule,\n ],\n template: `\n <kendo-grid\n [data]=\"rowData()\"\n filterable=\"menu\"\n [sortable]=\"true\"\n scrollable=\"none\"\n [selectable]=\"selectionMode()\"\n [selectedKeys]=\"selectedKeys\"\n kendoGridSelectBy=\"id\"\n (selectedKeysChange)=\"onSelectedKeysChange($event)\">\n @if (selectionMode() !== false) {\n <kendo-grid-checkbox-column\n [width]=\"40\"\n [showSelectAll]=\"selectionType() === 'multiple'\"></kendo-grid-checkbox-column>\n }\n @for (col of columnDefs(); track col.id + col.header) {\n @if (col.buttonConfig) {\n <kendo-grid-column\n [field]=\"col.id\"\n [filterable]=\"false\"\n [sortable]=\"false\"\n [width]=\"66\"\n [resizable]=\"col.resizable ?? true\">\n <ng-template kendoGridHeaderTemplate> </ng-template>\n <ng-template kendoGridCellTemplate let-dataItem>\n @if (col.buttonConfig.actionType === 'link' && col.buttonConfig.viewRoute) {\n <a\n mat-icon-button\n [routerLink]=\"['/', col.buttonConfig.viewRoute, dataItem['id']]\"\n [matTooltip]=\"col.buttonConfig.label || ''\"\n [matTooltipPosition]=\"col.tooltipPosition || 'above'\">\n <mat-icon>{{ col.buttonConfig.icon || 'arrow_forward' }}</mat-icon>\n </a>\n } @else {\n <ccc-table-button\n [config]=\"col.buttonConfig\"\n [rowData]=\"dataItem\"\n [tooltipPosition]=\"col.tooltipPosition || 'above'\"\n [viewRoute]=\"col.buttonConfig.viewRoute || ''\"\n [id]=\"dataItem['id']\">\n </ccc-table-button>\n }\n </ng-template>\n </kendo-grid-column>\n } @else {\n @if (col.width) {\n <kendo-grid-column [field]=\"col.id\" [width]=\"col.width\" [resizable]=\"col.resizable ?? true\">\n <ng-template kendoGridHeaderTemplate>\n @if (!col.hideHeader) {\n <span class=\"col-header\">{{ col.header || col.id | camelCaseToTitle }}</span>\n }\n </ng-template>\n <ng-template kendoGridCellTemplate let-dataItem>{{ dataItem[col.id] }} </ng-template>\n </kendo-grid-column>\n } @else {\n <kendo-grid-column [field]=\"col.id\" [resizable]=\"col.resizable ?? true\">\n <ng-template kendoGridHeaderTemplate>\n @if (!col.hideHeader) {\n <span class=\"col-header\">{{ col.header || col.id | camelCaseToTitle }}</span>\n }\n </ng-template>\n <ng-template kendoGridCellTemplate let-dataItem>{{ dataItem[col.id] }} </ng-template>\n </kendo-grid-column>\n }\n }\n }\n @if (enableRowExpansion() && detailTemplate()) {\n <ng-template kendoGridDetailTemplate let-dataItem>\n <ng-container *ngTemplateOutlet=\"detailTemplate()!; context: { $implicit: dataItem }\"></ng-container>\n </ng-template>\n }\n <ng-template kendoGridNoRecordsTemplate>\n <div style=\"text-align: center; padding: 20px;\">No records found</div>\n </ng-template>\n </kendo-grid>\n `,\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n }\n kendo-grid {\n height: 100%;\n }\n .col-header {\n font-weight: bold;\n }\n app-table-button {\n position: relative;\n z-index: 10;\n }\n a[mat-button] {\n position: relative;\n z-index: 11;\n }\n ::ng-deep .k-grid .k-grid-aria-root {\n overflow-x: auto; /* Allow horizontal scrolling */\n overflow-y: hidden; /* Keep vertical behavior as needed */\n }\n ::ng-deep .k-grid .k-detail-cell {\n padding: 16px;\n }\n `,\n ],\n})\nexport class AppGridComponent {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n rowData = input<any[]>([]);\n columnDefs = input<ColumnConfig[]>([]);\n enableRowExpansion = input<boolean>(false);\n detailTemplate = input<TemplateRef<unknown>>();\n selectionType = input<'multiple' | 'single' | 'none'>('none');\n selectedRows = output<RecordData[]>();\n\n public selectedKeys: number[] = [];\n\n onSelectedKeysChange(keys: number[]): void {\n this.selectedKeys = keys;\n const selectedRows = this.rowData().filter((row: any) => keys.includes(row.id));\n this.selectedRows.emit(selectedRows);\n }\n\n selectionMode = computed(() => {\n if (this.selectionType() === 'none') {\n return false;\n } else if (this.selectionType() === 'single') {\n return {\n mode: 'single' as SelectableMode,\n checkboxOnly: true,\n } as SelectableSettings;\n } else {\n return {\n mode: 'multiple' as SelectableMode,\n checkboxOnly: true,\n } as SelectableSettings;\n }\n });\n}\n","import { computed, inject, Injectable, OnDestroy, signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@cccteam/ccc-lib/src/auth-service';\nimport {\n AlertLevel,\n IDLE_KEEPALIVE_DURATION,\n IDLE_SESSION_DURATION,\n IDLE_WARNING_DURATION,\n} from '@cccteam/ccc-lib/src/types';\nimport { UiCoreService } from '@cccteam/ccc-lib/src/ui-core-service';\nimport { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';\nimport { interval, Subscription } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IdleService implements OnDestroy {\n private auth = inject(AuthService);\n private core = inject(UiCoreService);\n private router = inject(Router);\n private notifications = inject(NotificationService);\n\n private readonly sessionDuration = inject(IDLE_SESSION_DURATION);\n private readonly warningDuration = inject(IDLE_WARNING_DURATION);\n private readonly keepAliveDuration = inject(IDLE_KEEPALIVE_DURATION);\n private readonly idleCheckFrequency = 1000;\n private readonly warningThreshold = this.sessionDuration - this.warningDuration;\n\n public readonly isActive = signal(false);\n private lastActivityTimestamp: WritableSignal<number> = signal(0);\n private tick = signal(Date.now()); // A signal to represent the current time\n\n public readonly secondsIdle = computed(() => {\n if (!this.isActive() || this.lastActivityTimestamp() === 0) {\n return 0;\n }\n // Depends on tick() to force re-evaluation as time passes\n return Math.floor((this.tick() - this.lastActivityTimestamp()) / 1000);\n });\n\n public readonly isWarning = computed(() => this.secondsIdle() >= this.warningThreshold);\n public readonly countdown = computed(() => {\n if (!this.isWarning()) {\n return 0;\n }\n const remaining = this.sessionDuration - this.secondsIdle();\n return Math.max(0, remaining);\n });\n\n private alertId: number | undefined;\n private mainTickerSubscription: Subscription | undefined;\n\n private readonly activityEvents = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart', 'click'];\n\n constructor() {\n interval(this.keepAliveDuration * 1000)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.checkSession());\n }\n\n ngOnDestroy(): void {\n this.stop();\n }\n\n /**\n * Starts the idle monitoring service.\n */\n start(): void {\n if (this.isActive()) {\n return;\n }\n this.isActive.set(true);\n this.lastActivityTimestamp.set(Date.now());\n this.addActivityListeners();\n this.startMainTicker();\n }\n\n /**\n * Stops the idle monitoring service and cleans up timers and alerts.\n */\n stop(): void {\n this.isActive.set(false);\n this.mainTickerSubscription?.unsubscribe();\n this.removeActivityListeners();\n this.dismissWarningAlert();\n }\n\n /**\n * Logs out the user due to inactivity and stops the service.\n */\n logoutAndStop(): void {\n this.stop();\n\n this.router.navigate([this.auth.loginRoute()]);\n this.core.publishError({\n message: 'You have been logged out due to inactivity.',\n level: AlertLevel.INFO,\n link: '',\n });\n }\n\n private startMainTicker(): void {\n this.mainTickerSubscription = interval(this.idleCheckFrequency).subscribe(() => {\n this.tick.set(Date.now());\n\n if (this.secondsIdle() >= this.sessionDuration) {\n this.logoutAndStop();\n return;\n }\n\n if (this.isWarning()) {\n this.showOrUpdateWarningAlert(this.countdown());\n } else {\n this.dismissWarningAlert();\n }\n });\n }\n\n private checkSession(): void {\n if (this.auth.authenticated()) {\n this.auth.checkUserSession().subscribe({\n next: () => {\n if (!this.auth.authenticated()) {\n this.logoutAndStop();\n }\n },\n });\n }\n }\n\n setLastActivity(): void {\n this.lastActivityTimestamp.set(Date.now());\n }\n boundActivity = this.setLastActivity.bind(this);\n\n private addActivityListeners(): void {\n this.activityEvents.forEach((event) => {\n document.addEventListener(event, this.boundActivity, true);\n });\n }\n\n private removeActivityListeners(): void {\n this.activityEvents.forEach((event) => {\n document.removeEventListener(event, this.boundActivity, true);\n });\n }\n\n private showOrUpdateWarningAlert(countdown: number): void {\n const message = `You will be logged out in ${countdown} seconds due to inactivity.`;\n if (this.alertId !== undefined) {\n this.notifications.updateNotification({ id: this.alertId, level: AlertLevel.INFO, link: '', message });\n } else {\n this.alertId = this.notifications.addGlobalNotification({\n message,\n level: AlertLevel.INFO,\n link: '',\n });\n }\n }\n\n private dismissWarningAlert(): void {\n if (this.alertId !== undefined) {\n this.notifications.dismissGlobalNotificationById(this.alertId);\n this.alertId = undefined;\n }\n }\n}\n","import { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { isEqual } from 'lodash-es';\n\n/**\n * Compares two objects and returns a sparse object containing only the differing key-value pairs\n * @param data - object to compare\n * @param compareData - object to compare against\n * @returns Partial<T>\n * @example sparseData<UserCreate>(this.user, initUser)\n */\nexport function sparseData<T extends Record<string, unknown>>(data: T, compareData: T): Partial<T> {\n const sparseData: Partial<T> = {};\n\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n if (!isEqual(data[key], compareData[key])) {\n sparseData[key] = data[key];\n }\n }\n }\n\n return sparseData;\n}\n\n/**\n * Iterates through a form group's controls and returns a sparse object with only the changed values.\n * @param form - The form group to iterate through\n * @param compareData - The object to compare the form's values to\n * @returns - A sparse object with only the changed values\n * @example sparseFormData<UserCreate>(this.userForm, initUser)\n */\nexport function sparseFormData<T>(form: FormGroup, compareData: T): T {\n const sparseFormData: T = {} as T;\n for (const key in form.controls) {\n if (Object.prototype.hasOwnProperty.call(form.controls, key)) {\n const control = form.controls[key];\n const controlValue = control.value;\n const compareValue = compareData[key as keyof T];\n if (controlValue !== compareValue) {\n sparseFormData[key as keyof T] = controlValue as T[keyof T];\n }\n }\n }\n return sparseFormData;\n}\n\n/**\n * Recursively cleans a FormGroup or FormArray, removing controls with empty string values.\n * Similar to sparseFormData, but doesn't compare to an initial state\n * @param control - The FormGroup or FormArray to clean.\n * @returns A cleaned object with non-empty values.\n */\nexport function cleanStringForm<T>(control: AbstractControl): T | undefined {\n if (control instanceof FormGroup) {\n const cleanedGroup: Record<string, unknown> = {};\n for (const key of Object.keys(control.controls)) {\n const childControl = control.get(key);\n if (childControl) {\n const cleanedValue = cleanStringForm(childControl);\n if (cleanedValue !== undefined && cleanedValue !== null && cleanedValue !== '') {\n cleanedGroup[key] = cleanedValue;\n }\n }\n }\n return cleanedGroup as T;\n } else if (control instanceof FormArray) {\n const cleanedArray = control.controls\n .map((childControl) => cleanStringForm(childControl))\n .filter((item) => item !== undefined && item !== null && item !== '');\n return cleanedArray as unknown as T;\n } else {\n return control.value !== '' ? control.value : undefined;\n }\n}\n","/*\n * Public API Surface of ccc-lib\n */\n\n// Auth service\nexport * from './auth-service';\n\n// UI Core service\nexport * from './ui-core-service';\n\n// Auth directives\nexport * from './auth-has-permission';\n\n// Auth forms\nexport * from './auth-forms';\n\n// Auth guards\nexport * from './auth-authentication-guard';\nexport * from './auth-authorization-guard';\n\n// Util\nexport * from './util-request-options';\n\n// Types\nexport * from './types';\n\n// Ui components\nexport * from './ui-alert';\nexport * from './ui-sidenav';\n\n// Ui interceptor\nexport * from './ui-interceptor';\n\n// Ui services\nexport * from './ui-notification-service';\n\n// Resources\nexport * from './ccc-resource';\n\n// Camel case pipe\nexport * from './ccc-camel-case-to-title';\n\n// Grid\nexport * from './ccc-grid';\n\n// Idle\nexport * from './ui-idle-service';\n\n// Forms\nexport * from './forms';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["API_URL","FRONTEND_LOGIN_PATH","SESSION_PATH","PERMISSION_REQUIRED","errorOptions","NotificationService","AuthService","ReadPermission","UpdatePermission","BASE_URL","map","i2","i4","UiCoreService","HasPermissionDirective","catchError","CUSTOM_HTTP_REQUEST_OPTIONS","AlertLevel","createResourceValidator","defaultEmptyFieldValue","METHOD_META","i1","RESOURCE_META","i3","i6","i8","i9","i5","validatorsPresent","rpcConfigDefaults","CamelCaseToTitlePipe","cleanStringForm","AppGridComponent","sparseFormData","IDLE_SESSION_DURATION","IDLE_WARNING_DURATION","IDLE_KEEPALIVE_DURATION"],"mappings":"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"}