@masterteam/system-settings 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masterteam-system-settings.mjs","sources":["../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-general-section/system-settings-general-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-general-section/system-settings-general-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holiday-editor/system-settings-holiday-editor.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holiday-editor/system-settings-holiday-editor.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holidays-section/system-settings-holidays-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-holidays-section/system-settings-holidays-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-smtp-section/system-settings-smtp-section.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/components/system-settings-smtp-section/system-settings-smtp-section.html","../../../../packages/masterteam/system-settings/src/lib/system-settings/system-settings.model.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/system-settings.ts","../../../../packages/masterteam/system-settings/src/lib/system-settings/system-settings.html","../../../../packages/masterteam/system-settings/src/masterteam-system-settings.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { MultiSelectField } from '@masterteam/components/multi-select-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport type {\r\n SelectOption,\r\n TimezoneRegionOption,\r\n WeekendDayOption,\r\n} from '../../system-settings.model';\r\n\r\n@Component({\r\n selector: 'mt-system-settings-general-section',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Card,\r\n SelectField,\r\n MultiSelectField,\r\n ],\r\n templateUrl: './system-settings-general-section.html',\r\n styleUrl: './system-settings-general-section.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsGeneralSection {\r\n readonly timezoneForm = input.required<FormGroup>();\r\n readonly currencyForm = input.required<FormGroup>();\r\n readonly weekendForm = input.required<FormGroup>();\r\n readonly timezoneOptions = input<TimezoneRegionOption[]>([]);\r\n readonly dateFormatOptions = input<SelectOption[]>([]);\r\n readonly timeFormatOptions = input<SelectOption[]>([]);\r\n readonly currencyOptions = input<SelectOption[]>([]);\r\n readonly currencyFormatOptions = input<SelectOption[]>([]);\r\n readonly weekendOptions = input<WeekendDayOption[]>([]);\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <div class=\"grid gap-6 xl:grid-cols-3\">\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"timezoneForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"timezone-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"timezone-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-select-field\r\n formControlName=\"regionId\"\r\n [options]=\"timezoneOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('timezone')\"\r\n [placeholder]=\"t('timezone-placeholder')\"\r\n [required]=\"true\"\r\n [filter]=\"true\"\r\n />\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-select-field\r\n formControlName=\"dateFormat\"\r\n [options]=\"dateFormatOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('date-format')\"\r\n [placeholder]=\"t('date-format-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-select-field\r\n formControlName=\"timeFormat\"\r\n [options]=\"timeFormatOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('time-format')\"\r\n [placeholder]=\"t('time-format-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n </div>\r\n </mt-card>\r\n\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"currencyForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"currency-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"currency-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-select-field\r\n formControlName=\"code\"\r\n [options]=\"currencyOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('currency')\"\r\n [placeholder]=\"t('currency-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-select-field\r\n formControlName=\"format\"\r\n [options]=\"currencyFormatOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'id'\"\r\n [label]=\"t('currency-format')\"\r\n [placeholder]=\"t('currency-format-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n </mt-card>\r\n\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"weekendForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"weekend-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"weekend-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-multi-select-field\r\n formControlName=\"days\"\r\n [options]=\"weekendOptions()\"\r\n [optionLabel]=\"'name'\"\r\n [optionValue]=\"'dayNumber'\"\r\n [label]=\"t('weekend-days')\"\r\n [placeholder]=\"t('weekend-placeholder')\"\r\n [display]=\"'chip'\"\r\n [filter]=\"false\"\r\n [showClear]=\"true\"\r\n [maxSelectedLabels]=\"3\"\r\n />\r\n </div>\r\n </mt-card>\r\n </div>\r\n</ng-container>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n ValidationErrors,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport type { HolidayItem } from '../../system-settings.model';\r\n\r\ntype HolidayEditorForm = FormGroup<{\r\n label: FormControl<string>;\r\n from: FormControl<Date | null>;\r\n to: FormControl<Date | null>;\r\n}>;\r\n\r\n@Component({\r\n selector: 'mt-system-settings-holiday-editor',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Button,\r\n DateField,\r\n TextField,\r\n ],\r\n templateUrl: './system-settings-holiday-editor.html',\r\n styleUrl: './system-settings-holiday-editor.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsHolidayEditor {\r\n private readonly ref = inject(ModalRef);\r\n\r\n readonly holiday = input<HolidayItem | null>(null);\r\n readonly isEditMode = input(false);\r\n\r\n readonly form: HolidayEditorForm = new FormGroup(\r\n {\r\n label: new FormControl('', {\r\n nonNullable: true,\r\n validators: [Validators.required],\r\n }),\r\n from: new FormControl<Date | null>(null, {\r\n validators: [Validators.required],\r\n }),\r\n to: new FormControl<Date | null>(null, {\r\n validators: [Validators.required],\r\n }),\r\n },\r\n {\r\n validators: [holidayRangeValidator()],\r\n },\r\n );\r\n\r\n readonly actionLabel = computed(() =>\r\n this.isEditMode() ? 'update-holiday' : 'add-holiday',\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const holiday = this.holiday();\r\n this.form.reset(\r\n {\r\n label: holiday?.label ?? '',\r\n from: holiday?.from ?? null,\r\n to: holiday?.to ?? null,\r\n },\r\n { emitEvent: false },\r\n );\r\n this.form.markAsPristine();\r\n this.form.markAsUntouched();\r\n });\r\n }\r\n\r\n onSave(): void {\r\n this.form.markAllAsTouched();\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n\r\n const value = this.form.getRawValue();\r\n if (!(value.from instanceof Date) || !(value.to instanceof Date)) {\r\n return;\r\n }\r\n\r\n this.ref.close({\r\n label: value.label.trim(),\r\n from: value.from,\r\n to: value.to,\r\n } satisfies HolidayItem);\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(null);\r\n }\r\n}\r\n\r\nfunction holidayRangeValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const from = control.get('from')?.value;\r\n const to = control.get('to')?.value;\r\n\r\n if (!from || !to) {\r\n return null;\r\n }\r\n\r\n return from <= to ? null : { invalidRange: true };\r\n };\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <form [formGroup]=\"form\" class=\"space-y-4 p-1\" (ngSubmit)=\"onSave()\">\r\n <mt-text-field\r\n formControlName=\"label\"\r\n [label]=\"t('holiday-name')\"\r\n [placeholder]=\"t('holiday-name-placeholder')\"\r\n [required]=\"true\"\r\n />\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-date-field\r\n formControlName=\"from\"\r\n [label]=\"t('from-date')\"\r\n [placeholder]=\"t('from-date')\"\r\n [showIcon]=\"true\"\r\n [required]=\"true\"\r\n />\r\n\r\n <mt-date-field\r\n formControlName=\"to\"\r\n [label]=\"t('to-date')\"\r\n [placeholder]=\"t('to-date')\"\r\n [showIcon]=\"true\"\r\n [required]=\"true\"\r\n />\r\n </div>\r\n\r\n @if (form.errors?.[\"invalidRange\"] && (form.dirty || form.touched)) {\r\n <div class=\"text-sm text-red-600\">\r\n {{ t(\"holiday-range-error\") }}\r\n </div>\r\n }\r\n\r\n <div class=\"flex justify-end gap-3 pt-2\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n severity=\"secondary\"\r\n type=\"button\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button [label]=\"t(actionLabel())\" type=\"submit\" />\r\n </div>\r\n </form>\r\n</ng-container>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport type { HolidayTableRow } from '../../system-settings.model';\r\n\r\n@Component({\r\n selector: 'mt-system-settings-holidays-section',\r\n imports: [TranslocoDirective, Button, Card, Table],\r\n templateUrl: './system-settings-holidays-section.html',\r\n styleUrl: './system-settings-holidays-section.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsHolidaysSection {\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly holidays = input<HolidayTableRow[]>([]);\r\n readonly addHoliday = output<void>();\r\n readonly editHoliday = output<number>();\r\n readonly deleteHoliday = output<number>();\r\n\r\n readonly columns = computed<ColumnDef[]>(() => [\r\n {\r\n key: 'label',\r\n label: this.transloco.translate('system-settings.holiday-name'),\r\n },\r\n {\r\n key: 'from',\r\n label: this.transloco.translate('system-settings.from-date'),\r\n },\r\n {\r\n key: 'to',\r\n label: this.transloco.translate('system-settings.to-date'),\r\n },\r\n ]);\r\n\r\n readonly rowActions = computed<TableAction[]>(() => [\r\n {\r\n icon: 'general.edit-01',\r\n tooltip: this.transloco.translate('system-settings.edit-holiday'),\r\n color: 'secondary',\r\n variant: 'outlined',\r\n action: (row) => this.editHoliday.emit(row.rowIndex as number),\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n tooltip: this.transloco.translate('system-settings.remove-holiday'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row) => this.deleteHoliday.emit(row.rowIndex as number),\r\n },\r\n ]);\r\n\r\n readonly hasHolidays = computed(() => this.holidays().length > 0);\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <mt-card class=\"block\">\r\n <div class=\"space-y-6\">\r\n <div\r\n class=\"flex flex-col gap-4 md:flex-row md:items-start md:justify-between\"\r\n >\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"holidays-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"holidays-description\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-button\r\n [label]=\"t('add-holiday')\"\r\n icon=\"general.plus\"\r\n (onClick)=\"addHoliday.emit()\"\r\n />\r\n </div>\r\n\r\n @if (hasHolidays()) {\r\n <mt-table\r\n [data]=\"holidays()\"\r\n [columns]=\"columns()\"\r\n [rowActions]=\"rowActions()\"\r\n [generalSearch]=\"false\"\r\n [showFilters]=\"false\"\r\n [dataKey]=\"'rowKey'\"\r\n storageKey=\"admin-system-settings-holidays-table\"\r\n >\r\n </mt-table>\r\n } @else {\r\n <div\r\n class=\"rounded-xl border border-dashed border-neutral-300 bg-neutral-50 px-6 py-10 text-center\"\r\n >\r\n <h5 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"no-holidays-title\") }}\r\n </h5>\r\n <p class=\"mt-2 text-sm text-neutral-600\">\r\n {{ t(\"no-holidays-description\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </mt-card>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { TextField } from '@masterteam/components/text-field';\r\n\r\n@Component({\r\n selector: 'mt-system-settings-smtp-section',\r\n imports: [ReactiveFormsModule, TranslocoDirective, Card, TextField],\r\n templateUrl: './system-settings-smtp-section.html',\r\n styleUrl: './system-settings-smtp-section.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SystemSettingsSmtpSection {\r\n readonly smtpForm = input.required<FormGroup>();\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <mt-card class=\"block\">\r\n <div [formGroup]=\"smtpForm()\" class=\"space-y-4\">\r\n <div class=\"space-y-1\">\r\n <h4 class=\"text-base font-semibold text-neutral-900\">\r\n {{ t(\"smtp-title\") }}\r\n </h4>\r\n <p class=\"text-sm text-neutral-600\">\r\n {{ t(\"smtp-description\") }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-text-field\r\n formControlName=\"mail\"\r\n [label]=\"t('smtp-mail')\"\r\n [placeholder]=\"t('smtp-mail-placeholder')\"\r\n type=\"email\"\r\n />\r\n\r\n <mt-text-field\r\n formControlName=\"name\"\r\n [label]=\"t('smtp-name')\"\r\n [placeholder]=\"t('smtp-name-placeholder')\"\r\n />\r\n\r\n <mt-text-field\r\n formControlName=\"host\"\r\n [label]=\"t('smtp-host')\"\r\n [placeholder]=\"t('smtp-host-placeholder')\"\r\n />\r\n\r\n <mt-text-field\r\n formControlName=\"port\"\r\n [label]=\"t('smtp-port')\"\r\n [placeholder]=\"t('smtp-port-placeholder')\"\r\n type=\"number\"\r\n />\r\n\r\n <div class=\"md:col-span-2\">\r\n <mt-text-field\r\n formControlName=\"password\"\r\n [label]=\"t('smtp-password')\"\r\n [placeholder]=\"t('smtp-password-placeholder')\"\r\n type=\"password\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </mt-card>\r\n</ng-container>\r\n","import { FormControl, FormGroup } from '@angular/forms';\r\n\r\nexport type SystemSettingPrimitive = string | number | boolean | null;\r\nexport type SystemSettingObject = Record<string, unknown>;\r\nexport type SystemSettingValue =\r\n | SystemSettingPrimitive\r\n | SystemSettingObject\r\n | unknown[];\r\n\r\nexport interface SystemSetting {\r\n key: string;\r\n label: string;\r\n description: string;\r\n value: SystemSettingValue;\r\n}\r\n\r\nexport interface UpdateSystemSettingItem<TValue = SystemSettingValue> {\r\n key: string;\r\n value: TValue;\r\n}\r\n\r\nexport interface ApiResponse<TData> {\r\n data: TData;\r\n message?: string | null;\r\n endpoint?: string;\r\n status?: number;\r\n code?: number;\r\n locale?: string;\r\n cacheSession?: string | null;\r\n}\r\n\r\nexport interface FormatSchemaOption {\r\n key: string;\r\n sample: string;\r\n isSelected: boolean;\r\n}\r\n\r\nexport interface SystemSettingsFormatSchema {\r\n dateFormats: FormatSchemaOption[];\r\n timeFormats: FormatSchemaOption[];\r\n}\r\n\r\nexport interface HolidayItem {\r\n label: string;\r\n from: Date;\r\n to: Date;\r\n}\r\n\r\nexport interface HolidaysSettingValue extends SystemSettingObject {\r\n data: HolidayItem[];\r\n}\r\n\r\nexport interface TimezoneRegionOption extends SystemSettingObject {\r\n id: string;\r\n baseUtcOffset: string;\r\n standardName: string;\r\n displayName: string;\r\n daylightName: string;\r\n name?: string;\r\n}\r\n\r\nexport interface TimezoneSettingValue extends SystemSettingObject {\r\n region: TimezoneRegionOption | null;\r\n dateFormat: string | null;\r\n timeFormat: string | null;\r\n}\r\n\r\nexport interface CurrencyUnitLabel extends SystemSettingObject {\r\n en: string;\r\n ar: string;\r\n}\r\n\r\nexport interface CurrencySettingValue extends SystemSettingObject {\r\n name: string;\r\n unit: CurrencyUnitLabel;\r\n format: string | null;\r\n}\r\n\r\nexport interface WeekendSettingValue extends SystemSettingObject {\r\n days: number[];\r\n}\r\n\r\nexport interface SmtpSettingValue extends SystemSettingObject {\r\n mail: string;\r\n name: string;\r\n password: string;\r\n host: string;\r\n port: number | null;\r\n}\r\n\r\nexport interface CurrencyCatalogItem {\r\n code: string;\r\n englishLabel: string;\r\n arabicLabel: string;\r\n unit: CurrencyUnitLabel;\r\n}\r\n\r\nexport interface SelectOption {\r\n id: string;\r\n name: string;\r\n isSelected?: boolean;\r\n}\r\n\r\nexport interface WeekendDayOption extends SelectOption {\r\n dayNumber: number;\r\n}\r\n\r\nexport interface HolidayTableRow {\r\n rowKey: string;\r\n rowIndex: number;\r\n label: string;\r\n from: string;\r\n to: string;\r\n}\r\n\r\nexport interface SystemSettingsSnapshot {\r\n holidays: HolidaysSettingValue;\r\n timezone: TimezoneSettingValue;\r\n currency: CurrencySettingValue;\r\n weekend: WeekendSettingValue;\r\n smtp: SmtpSettingValue;\r\n}\r\n\r\nexport type SystemSettingsForm = FormGroup<{\r\n timezone: FormGroup<{\r\n regionId: FormControl<string | null>;\r\n dateFormat: FormControl<string | null>;\r\n timeFormat: FormControl<string | null>;\r\n }>;\r\n currency: FormGroup<{\r\n code: FormControl<string | null>;\r\n format: FormControl<string | null>;\r\n }>;\r\n weekend: FormGroup<{\r\n days: FormControl<number[]>;\r\n }>;\r\n smtp: FormGroup<{\r\n mail: FormControl<string>;\r\n name: FormControl<string>;\r\n password: FormControl<string>;\r\n host: FormControl<string>;\r\n port: FormControl<string>;\r\n }>;\r\n}>;\r\n\r\nexport const FIXED_CURRENCIES: CurrencyCatalogItem[] = [\r\n {\r\n code: 'SAR',\r\n englishLabel: 'Saudi Riyal (SAR)',\r\n arabicLabel: '???? ????? (SAR)',\r\n unit: {\r\n en: 'SAR',\r\n ar: '???? ?????',\r\n },\r\n },\r\n {\r\n code: 'OMR',\r\n englishLabel: 'Omani Rial (OMR)',\r\n arabicLabel: '???? ????? (OMR)',\r\n unit: {\r\n en: 'OMR',\r\n ar: '???? ?????',\r\n },\r\n },\r\n {\r\n code: 'AED',\r\n englishLabel: 'UAE Dirham (AED)',\r\n arabicLabel: '???? ??????? (AED)',\r\n unit: {\r\n en: 'AED',\r\n ar: '???? ???????',\r\n },\r\n },\r\n];\r\n\r\nexport const DEFAULT_DATE_FORMAT_OPTIONS: FormatSchemaOption[] = [\r\n {\r\n key: 'MM/dd/yyyy',\r\n sample: 'MM/dd/yyyy [01/20/2023]',\r\n isSelected: true,\r\n },\r\n {\r\n key: 'yyyy/MM/dd',\r\n sample: 'yyyy/MM/dd [2023/01/20]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'dd-MM-yyyy',\r\n sample: 'dd-MM-yyyy [20-01-2023]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'yyyy-MM-dd',\r\n sample: 'yyyy-MM-dd [2023-01-20]',\r\n isSelected: false,\r\n },\r\n];\r\n\r\nexport const DEFAULT_TIME_FORMAT_OPTIONS: FormatSchemaOption[] = [\r\n {\r\n key: 'hh:mm tt',\r\n sample: 'hh:mm tt [03:00 PM]',\r\n isSelected: true,\r\n },\r\n {\r\n key: 'HH:mm',\r\n sample: 'HH:mm [15:00]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'H:mm:ss',\r\n sample: 'H:mm:ss [15:00:00]',\r\n isSelected: false,\r\n },\r\n {\r\n key: 'hh:mm:ss',\r\n sample: 'hh:mm:ss [03:00:00]',\r\n isSelected: false,\r\n },\r\n];\r\n\r\nexport const WEEKEND_DAY_DEFINITIONS = [\r\n { dayNumber: 1, translationKey: 'monday' },\r\n { dayNumber: 2, translationKey: 'tuesday' },\r\n { dayNumber: 3, translationKey: 'wednesday' },\r\n { dayNumber: 4, translationKey: 'thursday' },\r\n { dayNumber: 5, translationKey: 'friday' },\r\n { dayNumber: 6, translationKey: 'saturday' },\r\n { dayNumber: 7, translationKey: 'sunday' },\r\n] as const;\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport {\r\n FormControl,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Page } from '@masterteam/components/page';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ToastService } from '@masterteam/components/toast';\r\nimport { SystemSettingsGeneralSection } from './components/system-settings-general-section/system-settings-general-section';\r\nimport { SystemSettingsHolidayEditor } from './components/system-settings-holiday-editor/system-settings-holiday-editor';\r\nimport { SystemSettingsHolidaysSection } from './components/system-settings-holidays-section/system-settings-holidays-section';\r\nimport { SystemSettingsSmtpSection } from './components/system-settings-smtp-section/system-settings-smtp-section';\r\nimport type {\r\n ApiResponse,\r\n CurrencyCatalogItem,\r\n CurrencySettingValue,\r\n FormatSchemaOption,\r\n HolidayItem,\r\n HolidayTableRow,\r\n HolidaysSettingValue,\r\n SelectOption,\r\n SmtpSettingValue,\r\n SystemSetting,\r\n SystemSettingObject,\r\n SystemSettingsForm,\r\n SystemSettingsFormatSchema,\r\n SystemSettingsSnapshot,\r\n TimezoneRegionOption,\r\n TimezoneSettingValue,\r\n UpdateSystemSettingItem,\r\n WeekendDayOption,\r\n WeekendSettingValue,\r\n} from './system-settings.model';\r\nimport {\r\n DEFAULT_DATE_FORMAT_OPTIONS,\r\n DEFAULT_TIME_FORMAT_OPTIONS,\r\n FIXED_CURRENCIES,\r\n WEEKEND_DAY_DEFINITIONS,\r\n} from './system-settings.model';\r\n\r\n@Component({\r\n selector: 'mt-system-settings',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Page,\r\n Button,\r\n SystemSettingsHolidaysSection,\r\n SystemSettingsGeneralSection,\r\n SystemSettingsSmtpSection,\r\n ],\r\n templateUrl: './system-settings.html',\r\n styleUrl: './system-settings.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport default class SystemSettings implements OnInit {\r\n private readonly http = inject(HttpClient);\r\n private readonly router = inject(Router);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly modal = inject(ModalService);\r\n private readonly toast = inject(ToastService);\r\n\r\n readonly apiBasePath = input('settings');\r\n readonly backRoute = input<string | null>('/control-panel/product-settings');\r\n readonly formatSchema = input<SystemSettingsFormatSchema | null>(null);\r\n\r\n readonly form: SystemSettingsForm = new FormGroup({\r\n timezone: new FormGroup({\r\n regionId: new FormControl<string | null>(null, Validators.required),\r\n dateFormat: new FormControl<string | null>(null, Validators.required),\r\n timeFormat: new FormControl<string | null>(null, Validators.required),\r\n }),\r\n currency: new FormGroup({\r\n code: new FormControl<string | null>(null, Validators.required),\r\n format: new FormControl<string | null>(null, Validators.required),\r\n }),\r\n weekend: new FormGroup({\r\n days: new FormControl<number[]>([], { nonNullable: true }),\r\n }),\r\n smtp: new FormGroup({\r\n mail: new FormControl('', { nonNullable: true }),\r\n name: new FormControl('', { nonNullable: true }),\r\n password: new FormControl('', { nonNullable: true }),\r\n host: new FormControl('', { nonNullable: true }),\r\n port: new FormControl('', { nonNullable: true }),\r\n }),\r\n });\r\n\r\n readonly settings = signal<SystemSetting[] | null>(null);\r\n readonly settingsLoading = signal(false);\r\n readonly settingsError = signal<string | null>(null);\r\n readonly settingsLastUpdated = signal<string | null>(null);\r\n readonly updating = signal(false);\r\n readonly updateError = signal<string | null>(null);\r\n readonly timezones = signal<TimezoneRegionOption[]>([]);\r\n readonly timezonesLoading = signal(false);\r\n readonly timezonesError = signal<string | null>(null);\r\n readonly holidayItems = signal<HolidayItem[]>([]);\r\n readonly initialSnapshot = signal<SystemSettingsSnapshot | null>(null);\r\n readonly hydrationVersion = signal<string | null>(null);\r\n\r\n readonly activeLang = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n readonly formStatus = toSignal(this.form.statusChanges, {\r\n initialValue: this.form.status,\r\n });\r\n readonly selectedDateFormat = toSignal(\r\n this.form.controls.timezone.controls.dateFormat.valueChanges,\r\n {\r\n initialValue: this.form.controls.timezone.controls.dateFormat.value,\r\n },\r\n );\r\n readonly selectedTimeFormat = toSignal(\r\n this.form.controls.timezone.controls.timeFormat.valueChanges,\r\n {\r\n initialValue: this.form.controls.timezone.controls.timeFormat.value,\r\n },\r\n );\r\n readonly selectedCurrencyCode = toSignal(\r\n this.form.controls.currency.controls.code.valueChanges,\r\n {\r\n initialValue: this.form.controls.currency.controls.code.value,\r\n },\r\n );\r\n\r\n readonly holidaysSetting = computed(() => this.findSettingByKey('Holidays'));\r\n readonly timezoneSetting = computed(() => this.findSettingByKey('Timezone'));\r\n readonly currencySetting = computed(() => this.findSettingByKey('Currency'));\r\n readonly weekendSetting = computed(() => this.findSettingByKey('Weekend'));\r\n readonly smtpSetting = computed(() => this.findSettingByKey('SMTP'));\r\n\r\n readonly resolvedFormatSchema = computed<SystemSettingsFormatSchema>(() => {\r\n const schema = this.formatSchema();\r\n return {\r\n dateFormats: schema?.dateFormats ?? DEFAULT_DATE_FORMAT_OPTIONS,\r\n timeFormats: schema?.timeFormats ?? DEFAULT_TIME_FORMAT_OPTIONS,\r\n };\r\n });\r\n\r\n readonly timezoneOptions = computed(() =>\r\n this.timezones().map((timezone) => ({\r\n ...timezone,\r\n name: timezone.name ?? timezone.displayName,\r\n })),\r\n );\r\n\r\n readonly dateFormatOptions = computed(() =>\r\n this.mapFormatOptions(\r\n this.resolvedFormatSchema().dateFormats,\r\n this.selectedDateFormat(),\r\n ),\r\n );\r\n\r\n readonly timeFormatOptions = computed(() =>\r\n this.mapFormatOptions(\r\n this.resolvedFormatSchema().timeFormats,\r\n this.selectedTimeFormat(),\r\n ),\r\n );\r\n\r\n readonly currencyOptions = computed<SelectOption[]>(() => {\r\n const lang = this.activeLang();\r\n return FIXED_CURRENCIES.map((currency) => ({\r\n id: currency.code,\r\n name: lang === 'ar' ? currency.arabicLabel : currency.englishLabel,\r\n }));\r\n });\r\n\r\n readonly currencyFormatOptions = computed(() => {\r\n const currency = FIXED_CURRENCIES.find(\r\n (item) => item.code === this.selectedCurrencyCode(),\r\n );\r\n\r\n return this.buildCurrencyFormatOptions(currency);\r\n });\r\n\r\n readonly weekendOptions = computed<WeekendDayOption[]>(() => {\r\n this.activeLang();\r\n\r\n return WEEKEND_DAY_DEFINITIONS.map((day) => ({\r\n id: `${day.dayNumber}`,\r\n dayNumber: day.dayNumber,\r\n name: this.transloco.translate(`system-settings.${day.translationKey}`),\r\n }));\r\n });\r\n\r\n readonly isReady = computed(\r\n () => this.hydrationVersion() !== null && this.initialSnapshot() !== null,\r\n );\r\n\r\n readonly isLoading = computed(\r\n () => this.settingsLoading() || this.timezonesLoading() || !this.isReady(),\r\n );\r\n\r\n readonly canSaveSettings = computed(\r\n () =>\r\n !this.isLoading() && !this.updating() && this.formStatus() === 'VALID',\r\n );\r\n\r\n readonly holidayTableRows = computed<HolidayTableRow[]>(() =>\r\n this.holidayItems().map((holiday, index) => ({\r\n rowKey: `${index}`,\r\n rowIndex: index,\r\n label: holiday.label,\r\n from: formatDateOnly(holiday.from),\r\n to: formatDateOnly(holiday.to),\r\n })),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const version = [\r\n this.settingsLastUpdated() ?? 'none',\r\n this.settingsError() ?? 'none',\r\n this.timezonesError() ?? 'none',\r\n String(this.timezones().length),\r\n JSON.stringify(this.resolvedFormatSchema()),\r\n ].join('::');\r\n\r\n if (this.settingsLoading() || this.timezonesLoading()) {\r\n return;\r\n }\r\n\r\n if (version === this.hydrationVersion()) {\r\n return;\r\n }\r\n\r\n this.hydrateForm(\r\n this.holidaysSetting() ?? this.createFallbackSetting('Holidays'),\r\n this.timezoneSetting() ?? this.createFallbackSetting('Timezone'),\r\n this.currencySetting() ?? this.createFallbackSetting('Currency'),\r\n this.weekendSetting() ?? this.createFallbackSetting('Weekend'),\r\n this.smtpSetting() ?? this.createFallbackSetting('SMTP'),\r\n );\r\n\r\n this.hydrationVersion.set(version);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loadSettings();\r\n this.loadTimezones();\r\n }\r\n\r\n goBack(): void {\r\n const backRoute = this.backRoute();\r\n if (!backRoute) {\r\n return;\r\n }\r\n\r\n this.router.navigateByUrl(backRoute);\r\n }\r\n\r\n openAddHoliday(): void {\r\n const modalRef = this.modal.openModal(\r\n SystemSettingsHolidayEditor,\r\n 'dialog',\r\n {\r\n header: this.transloco.translate('system-settings.add-holiday'),\r\n width: '42rem',\r\n appendTo: 'body',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n holiday: null,\r\n isEditMode: false,\r\n },\r\n },\r\n );\r\n\r\n modalRef.onClose.subscribe((result: HolidayItem | null) => {\r\n if (!result) {\r\n return;\r\n }\r\n\r\n this.holidayItems.update((items) => [...items, result]);\r\n });\r\n }\r\n\r\n editHoliday(index: number): void {\r\n const holiday = this.holidayItems()[index];\r\n if (!holiday) {\r\n return;\r\n }\r\n\r\n const modalRef = this.modal.openModal(\r\n SystemSettingsHolidayEditor,\r\n 'drawer',\r\n {\r\n header: this.transloco.translate('system-settings.edit-holiday'),\r\n styleClass: '!w-[30rem] !absolute !shadow-none',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissible: true,\r\n inputValues: {\r\n holiday,\r\n isEditMode: true,\r\n },\r\n },\r\n );\r\n\r\n modalRef.onClose.subscribe((result: HolidayItem | null) => {\r\n if (!result) {\r\n return;\r\n }\r\n\r\n this.holidayItems.update((items) =>\r\n items.map((item, itemIndex) => (itemIndex === index ? result : item)),\r\n );\r\n });\r\n }\r\n\r\n deleteHoliday(index: number): void {\r\n this.holidayItems.update((items) =>\r\n items.filter((_, itemIndex) => itemIndex !== index),\r\n );\r\n }\r\n\r\n onSave(): void {\r\n this.form.markAllAsTouched();\r\n\r\n const nextSnapshot = this.buildCurrentSnapshot();\r\n const initialSnapshot = this.initialSnapshot();\r\n if (!nextSnapshot || !initialSnapshot) {\r\n return;\r\n }\r\n\r\n const values: UpdateSystemSettingItem[] = [];\r\n\r\n if (!this.areEqual(initialSnapshot.holidays, nextSnapshot.holidays)) {\r\n values.push({\r\n key: 'Holidays',\r\n value: this.serializeHolidaysValue(nextSnapshot.holidays),\r\n });\r\n }\r\n\r\n if (!this.areEqual(initialSnapshot.timezone, nextSnapshot.timezone)) {\r\n values.push({\r\n key: 'Timezone',\r\n value: nextSnapshot.timezone,\r\n });\r\n }\r\n\r\n if (!this.areEqual(initialSnapshot.currency, nextSnapshot.currency)) {\r\n values.push({\r\n key: 'Currency',\r\n value: nextSnapshot.currency,\r\n });\r\n }\r\n\r\n if (!this.areEqual(initialSnapshot.weekend, nextSnapshot.weekend)) {\r\n values.push({\r\n key: 'Weekend',\r\n value: nextSnapshot.weekend,\r\n });\r\n }\r\n\r\n if (!this.areEqual(initialSnapshot.smtp, nextSnapshot.smtp)) {\r\n values.push({\r\n key: 'SMTP',\r\n value: nextSnapshot.smtp,\r\n });\r\n }\r\n\r\n if (!values.length) {\r\n this.toast.info(\r\n this.transloco.translate('system-settings.no-changes-message'),\r\n );\r\n return;\r\n }\r\n\r\n this.updateSettings(values);\r\n }\r\n\r\n private loadSettings(): void {\r\n this.settingsLoading.set(true);\r\n this.settingsError.set(null);\r\n\r\n this.http\r\n .get<\r\n ApiResponse<SystemSetting[]>\r\n >(this.buildEndpoint('getsystemsettings'))\r\n .subscribe({\r\n next: (response) => {\r\n this.settings.set(response.data ?? []);\r\n this.settingsLoading.set(false);\r\n this.settingsLastUpdated.set(new Date().toISOString());\r\n },\r\n error: (error) => {\r\n this.settingsLoading.set(false);\r\n this.settingsError.set(\r\n error?.message ?? 'Failed to load system settings',\r\n );\r\n this.settingsLastUpdated.set(new Date().toISOString());\r\n },\r\n });\r\n }\r\n\r\n private loadTimezones(): void {\r\n this.timezonesLoading.set(true);\r\n this.timezonesError.set(null);\r\n\r\n this.http\r\n .get<ApiResponse<TimezoneRegionOption[]>>(this.buildEndpoint('timezones'))\r\n .subscribe({\r\n next: (response) => {\r\n this.timezones.set(response.data ?? []);\r\n this.timezonesLoading.set(false);\r\n },\r\n error: (error) => {\r\n this.timezonesLoading.set(false);\r\n this.timezonesError.set(\r\n error?.message ?? 'Failed to load timezone options',\r\n );\r\n },\r\n });\r\n }\r\n\r\n private updateSettings(values: UpdateSystemSettingItem[]): void {\r\n this.updating.set(true);\r\n this.updateError.set(null);\r\n\r\n this.http\r\n .put<ApiResponse<boolean>>(this.buildEndpoint('updatesystemsettings'), {\r\n values,\r\n })\r\n .subscribe({\r\n next: () => {\r\n const nextSettings = this.applyUpdatedSettings(\r\n this.settings() ?? [],\r\n values,\r\n );\r\n this.settings.set(nextSettings);\r\n this.updating.set(false);\r\n this.updateError.set(null);\r\n this.settingsLastUpdated.set(new Date().toISOString());\r\n this.toast.success(\r\n this.transloco.translate('system-settings.saved-successfully'),\r\n );\r\n },\r\n error: (error) => {\r\n this.updating.set(false);\r\n this.updateError.set(\r\n error?.message ?? 'Failed to update system settings',\r\n );\r\n },\r\n });\r\n }\r\n\r\n private hydrateForm(\r\n holidaysSetting: SystemSetting,\r\n timezoneSetting: SystemSetting,\r\n currencySetting: SystemSetting,\r\n weekendSetting: SystemSetting,\r\n smtpSetting: SystemSetting,\r\n ): void {\r\n const holidays = this.extractHolidaysValue(holidaysSetting);\r\n const timezone = this.normalizeTimezoneSnapshot(\r\n this.extractTimezoneValue(timezoneSetting),\r\n );\r\n const currency = this.normalizeCurrencySnapshot(\r\n this.extractCurrencyValue(currencySetting),\r\n );\r\n const weekend = this.normalizeWeekendSnapshot(\r\n this.extractWeekendValue(weekendSetting),\r\n );\r\n const smtp = this.normalizeSmtpSnapshot(this.extractSmtpValue(smtpSetting));\r\n\r\n this.holidayItems.set(holidays.data);\r\n this.form.controls.timezone.setValue({\r\n regionId: timezone.region?.id ?? null,\r\n dateFormat: timezone.dateFormat,\r\n timeFormat: timezone.timeFormat,\r\n });\r\n this.form.controls.currency.setValue({\r\n code: this.resolveCurrencyCode(currency),\r\n format: currency.format,\r\n });\r\n this.form.controls.weekend.setValue({\r\n days: weekend.days,\r\n });\r\n this.form.controls.smtp.setValue({\r\n mail: smtp.mail,\r\n name: smtp.name,\r\n password: smtp.password,\r\n host: smtp.host,\r\n port: smtp.port === null ? '' : String(smtp.port),\r\n });\r\n\r\n this.form.markAsPristine();\r\n this.form.markAsUntouched();\r\n this.initialSnapshot.set({\r\n holidays,\r\n timezone,\r\n currency,\r\n weekend,\r\n smtp,\r\n });\r\n }\r\n\r\n private buildCurrentSnapshot(): SystemSettingsSnapshot | null {\r\n const timezone = this.buildTimezoneValue();\r\n const currency = this.buildCurrencyValue();\r\n if (!timezone || !currency || this.form.invalid) {\r\n return null;\r\n }\r\n\r\n return {\r\n holidays: {\r\n data: this.holidayItems().map((item) => ({\r\n label: item.label.trim(),\r\n from: item.from,\r\n to: item.to,\r\n })),\r\n },\r\n timezone,\r\n currency,\r\n weekend: this.buildWeekendValue(),\r\n smtp: this.buildSmtpValue(),\r\n };\r\n }\r\n\r\n private buildTimezoneValue(): TimezoneSettingValue | null {\r\n const timezoneForm = this.form.controls.timezone.getRawValue();\r\n if (\r\n !timezoneForm.regionId ||\r\n !timezoneForm.dateFormat ||\r\n !timezoneForm.timeFormat\r\n ) {\r\n return null;\r\n }\r\n\r\n const region = this.timezones().find(\r\n (item) => item.id === timezoneForm.regionId,\r\n );\r\n if (!region) {\r\n return null;\r\n }\r\n\r\n return {\r\n region: {\r\n ...region,\r\n name: region.name ?? region.displayName,\r\n },\r\n dateFormat: timezoneForm.dateFormat,\r\n timeFormat: timezoneForm.timeFormat,\r\n };\r\n }\r\n\r\n private buildCurrencyValue(): CurrencySettingValue | null {\r\n const currencyForm = this.form.controls.currency.getRawValue();\r\n if (!currencyForm.code || !currencyForm.format) {\r\n return null;\r\n }\r\n\r\n const currency = FIXED_CURRENCIES.find(\r\n (item) => item.code === currencyForm.code,\r\n );\r\n if (!currency) {\r\n return null;\r\n }\r\n\r\n return {\r\n name: currency.code,\r\n unit: currency.unit,\r\n format: currencyForm.format,\r\n };\r\n }\r\n\r\n private buildWeekendValue(): WeekendSettingValue {\r\n return {\r\n days: normalizeWeekendDays(\r\n this.form.controls.weekend.controls.days.value,\r\n ),\r\n };\r\n }\r\n\r\n private buildSmtpValue(): SmtpSettingValue {\r\n const smtpForm = this.form.controls.smtp.getRawValue();\r\n return {\r\n mail: smtpForm.mail.trim(),\r\n name: smtpForm.name.trim(),\r\n password: smtpForm.password,\r\n host: smtpForm.host.trim(),\r\n port: parsePort(smtpForm.port),\r\n };\r\n }\r\n\r\n private findSettingByKey(key: string): SystemSetting | null {\r\n const normalizedKey = key.trim().toLowerCase();\r\n return (\r\n this.settings()?.find(\r\n (setting) => setting.key.trim().toLowerCase() === normalizedKey,\r\n ) ?? null\r\n );\r\n }\r\n\r\n private extractHolidaysValue(setting: SystemSetting): HolidaysSettingValue {\r\n if (!isRecord(setting.value)) {\r\n return { data: [] };\r\n }\r\n\r\n const rawData = setting.value['data'];\r\n if (!Array.isArray(rawData)) {\r\n return { data: [] };\r\n }\r\n\r\n return {\r\n data: rawData\r\n .map((item) => this.normalizeHolidayItem(item))\r\n .filter((item): item is HolidayItem => item !== null),\r\n };\r\n }\r\n\r\n private extractTimezoneValue(setting: SystemSetting): TimezoneSettingValue {\r\n if (!isRecord(setting.value)) {\r\n return {\r\n region: null,\r\n dateFormat: null,\r\n timeFormat: null,\r\n };\r\n }\r\n\r\n return {\r\n region: this.normalizeTimezoneRegion(\r\n setting.value['region'] ?? setting.value['Region'],\r\n ),\r\n dateFormat: getNullableString(\r\n setting.value['dateFormat'] ??\r\n setting.value['DateFormat'] ??\r\n setting.value['dateformat'],\r\n ),\r\n timeFormat: getNullableString(\r\n setting.value['timeFormat'] ??\r\n setting.value['TimeFormat'] ??\r\n setting.value['timeformat'],\r\n ),\r\n };\r\n }\r\n\r\n private extractCurrencyValue(setting: SystemSetting): CurrencySettingValue {\r\n if (!isRecord(setting.value)) {\r\n return this.getDefaultCurrencyValue();\r\n }\r\n\r\n return {\r\n name: getString(setting.value['name']) ?? FIXED_CURRENCIES[0].code,\r\n unit: this.normalizeCurrencyUnit(setting.value['unit']),\r\n format: getNullableString(setting.value['format']),\r\n };\r\n }\r\n\r\n private extractWeekendValue(setting: SystemSetting): WeekendSettingValue {\r\n if (!isRecord(setting.value)) {\r\n return { days: [] };\r\n }\r\n\r\n return {\r\n days: normalizeWeekendDays(\r\n setting.value['days'] ?? setting.value['Days'],\r\n ),\r\n };\r\n }\r\n\r\n private extractSmtpValue(setting: SystemSetting): SmtpSettingValue {\r\n if (!isRecord(setting.value)) {\r\n return this.getDefaultSmtpValue();\r\n }\r\n\r\n return {\r\n mail:\r\n getNullableString(setting.value['mail'] ?? setting.value['Mail']) ?? '',\r\n name:\r\n getNullableString(setting.value['name'] ?? setting.value['Name']) ?? '',\r\n password:\r\n getNullableString(\r\n setting.value['password'] ?? setting.value['Password'],\r\n ) ?? '',\r\n host:\r\n getNullableString(setting.value['host'] ?? setting.value['Host']) ?? '',\r\n port: getNullableNumber(setting.value['port'] ?? setting.value['Port']),\r\n };\r\n }\r\n\r\n private normalizeHolidayItem(value: unknown): HolidayItem | null {\r\n if (!isRecord(value)) {\r\n return null;\r\n }\r\n\r\n const label = getString(value['label'] ?? value['name']);\r\n const from = normalizeDateInput(value['from']);\r\n const to = normalizeDateInput(value['to']);\r\n if (!label || !from || !to) {\r\n return null;\r\n }\r\n\r\n return { label, from, to };\r\n }\r\n\r\n private normalizeTimezoneRegion(value: unknown): TimezoneRegionOption | null {\r\n if (typeof value === 'string' && value.trim()) {\r\n const normalizedValue = value.trim().toLowerCase();\r\n const region =\r\n this.timezones().find(\r\n (item) => item.id.trim().toLowerCase() === normalizedValue,\r\n ) ?? null;\r\n\r\n return region\r\n ? {\r\n ...region,\r\n name: region.name ?? region.displayName,\r\n }\r\n : null;\r\n }\r\n\r\n if (!isRecord(value)) {\r\n return null;\r\n }\r\n\r\n const id = getString(value['id'] ?? value['Id']);\r\n if (!id) {\r\n return null;\r\n }\r\n\r\n const matchedRegion = this.timezones().find(\r\n (item) => item.id.trim().toLowerCase() === id.trim().toLowerCase(),\r\n );\r\n\r\n if (matchedRegion) {\r\n return {\r\n ...matchedRegion,\r\n name:\r\n getString(value['name'] ?? value['Name']) ??\r\n matchedRegion.name ??\r\n matchedRegion.displayName,\r\n };\r\n }\r\n\r\n const standardName =\r\n getString(value['standardName'] ?? value['StandardName']) ?? id;\r\n const displayName =\r\n getString(value['displayName'] ?? value['DisplayName']) ?? id;\r\n\r\n return {\r\n id,\r\n baseUtcOffset:\r\n getString(value['baseUtcOffset'] ?? value['BaseUtcOffset']) ?? '',\r\n standardName,\r\n displayName,\r\n daylightName:\r\n getString(value['daylightName'] ?? value['DaylightName']) ??\r\n standardName,\r\n name: getString(value['name'] ?? value['Name']) ?? displayName,\r\n };\r\n }\r\n\r\n private normalizeCurrencyUnit(value: unknown): CurrencySettingValue['unit'] {\r\n if (!isRecord(value)) {\r\n return FIXED_CURRENCIES[0].unit;\r\n }\r\n\r\n return {\r\n en: getString(value['en']) ?? FIXED_CURRENCIES[0].unit.en,\r\n ar: getString(value['ar']) ?? FIXED_CURRENCIES[0].unit.ar,\r\n };\r\n }\r\n\r\n private normalizeTimezoneSnapshot(\r\n value: TimezoneSettingValue,\r\n ): TimezoneSettingValue {\r\n const defaults = this.getDefaultTimezoneValue();\r\n return {\r\n region: value.region ?? defaults.region,\r\n dateFormat: value.dateFormat ?? defaults.dateFormat,\r\n timeFormat: value.timeFormat ?? defaults.timeFormat,\r\n };\r\n }\r\n\r\n private normalizeCurrencySnapshot(\r\n value: CurrencySettingValue,\r\n ): CurrencySettingValue {\r\n const code = this.resolveCurrencyCode(value);\r\n const currency =\r\n FIXED_CURRENCIES.find((item) => item.code === code) ??\r\n FIXED_CURRENCIES[0];\r\n const defaultFormat =\r\n this.buildCurrencyFormatOptions(currency)[0]?.id ?? null;\r\n\r\n return {\r\n name: currency.code,\r\n unit: currency.unit,\r\n format: value.format ?? defaultFormat,\r\n };\r\n }\r\n\r\n private normalizeWeekendSnapshot(\r\n value: WeekendSettingValue,\r\n ): WeekendSettingValue {\r\n return {\r\n days: normalizeWeekendDays(value.days),\r\n };\r\n }\r\n\r\n private normalizeSmtpSnapshot(value: SmtpSettingValue): SmtpSettingValue {\r\n return {\r\n mail: value.mail.trim(),\r\n name: value.name.trim(),\r\n password: value.password,\r\n host: value.host.trim(),\r\n port: value.port,\r\n };\r\n }\r\n\r\n private createFallbackSetting(\r\n key: 'Holidays' | 'Timezone' | 'Currency' | 'Weekend' | 'SMTP',\r\n ): SystemSetting {\r\n switch (key) {\r\n case 'Holidays':\r\n return { key, label: key, description: key, value: { data: [] } };\r\n case 'Timezone':\r\n return {\r\n key,\r\n label: key,\r\n description: key,\r\n value: this.getDefaultTimezoneValue(),\r\n };\r\n case 'Currency':\r\n return {\r\n key,\r\n label: key,\r\n description: key,\r\n value: this.getDefaultCurrencyValue(),\r\n };\r\n case 'Weekend':\r\n return { key, label: key, description: key, value: { days: [] } };\r\n case 'SMTP':\r\n return {\r\n key,\r\n label: key,\r\n description: key,\r\n value: this.getDefaultSmtpValue(),\r\n };\r\n }\r\n }\r\n\r\n private getDefaultTimezoneValue(): TimezoneSettingValue {\r\n const region = this.timezones()[0] ?? null;\r\n const defaultDateFormat =\r\n this.dateFormatOptions().find((option) => option.isSelected)?.id ??\r\n this.dateFormatOptions()[0]?.id ??\r\n null;\r\n const defaultTimeFormat =\r\n this.timeFormatOptions().find((option) => option.isSelected)?.id ??\r\n this.timeFormatOptions()[0]?.id ??\r\n null;\r\n\r\n return {\r\n region: region\r\n ? {\r\n ...region,\r\n name: region.name ?? region.displayName,\r\n }\r\n : null,\r\n dateFormat: defaultDateFormat,\r\n timeFormat: defaultTimeFormat,\r\n };\r\n }\r\n\r\n private getDefaultCurrencyValue(): CurrencySettingValue {\r\n const currency = FIXED_CURRENCIES[0];\r\n return {\r\n name: currency.code,\r\n unit: currency.unit,\r\n format: this.buildCurrencyFormatOptions(currency)[0]?.id ?? null,\r\n };\r\n }\r\n\r\n private getDefaultSmtpValue(): SmtpSettingValue {\r\n return {\r\n mail: '',\r\n name: '',\r\n password: '',\r\n host: '',\r\n port: null,\r\n };\r\n }\r\n\r\n private resolveCurrencyCode(value: CurrencySettingValue): string {\r\n const candidates = [value.name, value.unit.en, value.unit.ar].filter(\r\n (candidate): candidate is string => !!candidate,\r\n );\r\n\r\n for (const candidate of candidates) {\r\n const normalizedCandidate = candidate.trim().toLowerCase();\r\n const extractedCode =\r\n candidate.match(/\\(([A-Za-z]{3})\\)/)?.[1]?.toUpperCase() ?? null;\r\n if (extractedCode) {\r\n const directCodeMatch = FIXED_CURRENCIES.find(\r\n (item) => item.code === extractedCode,\r\n );\r\n\r\n if (directCodeMatch) {\r\n return directCodeMatch.code;\r\n }\r\n }\r\n\r\n const match = FIXED_CURRENCIES.find(\r\n (item) =>\r\n item.code.toLowerCase() === normalizedCandidate ||\r\n item.englishLabel.toLowerCase() === normalizedCandidate ||\r\n item.arabicLabel.toLowerCase() === normalizedCandidate ||\r\n item.unit.en.toLowerCase() === normalizedCandidate ||\r\n item.unit.ar.toLowerCase() === normalizedCandidate,\r\n );\r\n\r\n if (match) {\r\n return match.code;\r\n }\r\n }\r\n\r\n return FIXED_CURRENCIES[0].code;\r\n }\r\n\r\n private mapFormatOptions(\r\n options: FormatSchemaOption[],\r\n selectedKey: string | null,\r\n ): SelectOption[] {\r\n return options.map((option) => ({\r\n id: option.key,\r\n name: option.sample,\r\n isSelected: selectedKey ? option.key === selectedKey : option.isSelected,\r\n }));\r\n }\r\n\r\n private serializeHolidaysValue(value: HolidaysSettingValue): {\r\n data: Array<{ label: string; from: string; to: string }>;\r\n } {\r\n return {\r\n data: value.data.map((item) => ({\r\n label: item.label,\r\n from: formatDateOnly(item.from),\r\n to: formatDateOnly(item.to),\r\n })),\r\n };\r\n }\r\n\r\n private buildCurrencyFormatOptions(\r\n currency: CurrencyCatalogItem | undefined,\r\n ): SelectOption[] {\r\n const unitLabel = this.getCurrencyFormatLabel(currency);\r\n\r\n return [\r\n { id: '{0:0}', name: `1000 ${unitLabel}` },\r\n { id: '{0:0.0}', name: `1000.0 ${unitLabel}` },\r\n { id: '{0:0.00}', name: `1000.00 ${unitLabel}` },\r\n { id: '{0:#,0}', name: `1,000 ${unitLabel}` },\r\n { id: '{0:#,0.0}', name: `1,000.0 ${unitLabel}` },\r\n { id: '{0:#,0.00}', name: `1,000.00 ${unitLabel}` },\r\n { id: '{0:#,0, K}', name: `1 K ${unitLabel}` },\r\n { id: '{0:N3}', name: `1,000 N3 ${unitLabel}` },\r\n ];\r\n }\r\n\r\n private getCurrencyFormatLabel(\r\n currency: CurrencyCatalogItem | undefined,\r\n ): string {\r\n if (!currency) {\r\n return '';\r\n }\r\n\r\n return this.activeLang() === 'ar' ? currency.unit.ar : currency.unit.en;\r\n }\r\n\r\n private buildEndpoint(path: string): string {\r\n return `${this.apiBasePath().replace(/\\/$/, '')}/${path}`;\r\n }\r\n\r\n private applyUpdatedSettings(\r\n settings: SystemSetting[],\r\n values: UpdateSystemSettingItem[],\r\n ): SystemSetting[] {\r\n const valueMap = new Map(values.map((item) => [item.key, item.value]));\r\n const nextSettings: SystemSetting[] = settings.map((setting) => {\r\n if (!valueMap.has(setting.key)) {\r\n return setting;\r\n }\r\n\r\n return {\r\n ...setting,\r\n value: valueMap.get(setting.key)!,\r\n };\r\n });\r\n\r\n const existingKeys = new Set(nextSettings.map((setting) => setting.key));\r\n\r\n for (const item of values) {\r\n if (existingKeys.has(item.key)) {\r\n continue;\r\n }\r\n\r\n nextSettings.push({\r\n key: item.key,\r\n label: item.key,\r\n description: item.key,\r\n value: item.value,\r\n });\r\n }\r\n\r\n return nextSettings.sort((left, right) =>\r\n left.key.localeCompare(right.key),\r\n );\r\n }\r\n\r\n private areEqual(left: unknown, right: unknown): boolean {\r\n return JSON.stringify(left) === JSON.stringify(right);\r\n }\r\n}\r\n\r\nfunction isRecord(value: unknown): value is SystemSettingObject {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\r\n}\r\n\r\nfunction getString(value: unknown): string | null {\r\n if (typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n const normalizedValue = value.trim();\r\n return normalizedValue ? normalizedValue : null;\r\n}\r\n\r\nfunction getNullableString(value: unknown): string | null {\r\n if (typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n return value.trim() || null;\r\n}\r\n\r\nfunction getNullableNumber(value: unknown): number | null {\r\n if (typeof value === 'number' && !Number.isNaN(value)) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim()) {\r\n const parsedValue = Number(value);\r\n return Number.isNaN(parsedValue) ? null : parsedValue;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction parsePort(value: string): number | null {\r\n const normalizedValue = value.trim();\r\n if (!normalizedValue) {\r\n return null;\r\n }\r\n\r\n const parsedValue = Number(normalizedValue);\r\n return Number.isNaN(parsedValue) ? null : parsedValue;\r\n}\r\n\r\nfunction normalizeWeekendDays(value: unknown): number[] {\r\n if (!Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n return value\r\n .map((item) => (typeof item === 'number' ? item : Number(item)))\r\n .filter((item) => Number.isInteger(item) && item >= 1 && item <= 7)\r\n .sort((left, right) => left - right);\r\n}\r\n\r\nfunction normalizeDateInput(value: unknown): Date | null {\r\n if (value instanceof Date) {\r\n if (Number.isNaN(value.getTime())) {\r\n return null;\r\n }\r\n\r\n return createLocalDate(\r\n value.getFullYear(),\r\n value.getMonth() + 1,\r\n value.getDate(),\r\n );\r\n }\r\n\r\n if (typeof value !== 'string') {\r\n return null;\r\n }\r\n\r\n const normalizedValue = value.trim();\r\n if (!normalizedValue) {\r\n return null;\r\n }\r\n\r\n const dateOnlyMatch = normalizedValue.match(/^(\\d{4})[-/](\\d{2})[-/](\\d{2})/);\r\n if (dateOnlyMatch) {\r\n const [, year, month, day] = dateOnlyMatch;\r\n return createLocalDate(Number(year), Number(month), Number(day));\r\n }\r\n\r\n const parsedDate = new Date(normalizedValue);\r\n if (Number.isNaN(parsedDate.getTime())) {\r\n return null;\r\n }\r\n\r\n return createLocalDate(\r\n parsedDate.getFullYear(),\r\n parsedDate.getMonth() + 1,\r\n parsedDate.getDate(),\r\n );\r\n}\r\n\r\nfunction createLocalDate(year: number, month: number, day: number): Date {\r\n return new Date(year, month - 1, day, 12, 0, 0, 0);\r\n}\r\n\r\nfunction formatDateOnly(value: Date): string {\r\n const year = value.getFullYear();\r\n const month = String(value.getMonth() + 1).padStart(2, '0');\r\n const day = String(value.getDate()).padStart(2, '0');\r\n return `${year}-${month}-${day}`;\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <mt-page\r\n [title]=\"t('page-title')\"\r\n [avatarIcon]=\"'general.settings-02'\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n >\r\n <div class=\"flex flex-col gap-6\">\r\n <div\r\n class=\"flex flex-col gap-4 md:flex-row md:items-start md:justify-between\"\r\n >\r\n <div class=\"space-y-2\">\r\n <h3 class=\"text-lg font-bold text-neutral-900\">\r\n {{ t(\"page-title\") }}\r\n </h3>\r\n <p class=\"max-w-3xl text-sm text-neutral-600\">\r\n {{ t(\"page-subtitle\") }}\r\n </p>\r\n </div>\r\n\r\n <mt-button\r\n [label]=\"t('save')\"\r\n [loading]=\"updating()\"\r\n [disabled]=\"!canSaveSettings()\"\r\n (onClick)=\"onSave()\"\r\n />\r\n </div>\r\n\r\n @if (isLoading()) {\r\n <div class=\"flex items-center justify-center py-16\">\r\n <div class=\"text-center\">\r\n <div\r\n class=\"inline-block h-8 w-8 animate-spin rounded-full border-4 border-solid border-current border-e-transparent align-[-0.125em]\"\r\n role=\"status\"\r\n >\r\n <span\r\n class=\"absolute -m-px h-px w-px overflow-hidden whitespace-nowrap border-0 p-0 [clip:rect(0,0,0,0)]\"\r\n >\r\n {{ t(\"loading\") }}\r\n </span>\r\n </div>\r\n <p class=\"mt-3 text-sm text-neutral-600\">\r\n {{ t(\"loading\") }}\r\n </p>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"space-y-4\">\r\n @if (timezonesError(); as timezonesErrorMessage) {\r\n <div\r\n class=\"rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700\"\r\n >\r\n {{ timezonesErrorMessage }}\r\n </div>\r\n }\r\n\r\n @if (settingsError(); as settingsErrorMessage) {\r\n <div\r\n class=\"rounded-xl border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-800\"\r\n >\r\n {{ settingsErrorMessage }}\r\n </div>\r\n }\r\n\r\n @if (updateError(); as saveErrorMessage) {\r\n <div\r\n class=\"rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700\"\r\n >\r\n {{ saveErrorMessage }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"space-y-6\">\r\n <mt-system-settings-holidays-section\r\n [holidays]=\"holidayTableRows()\"\r\n (addHoliday)=\"openAddHoliday()\"\r\n (editHoliday)=\"editHoliday($event)\"\r\n (deleteHoliday)=\"deleteHoliday($event)\"\r\n />\r\n\r\n <mt-system-settings-general-section\r\n [timezoneForm]=\"form.controls.timezone\"\r\n [currencyForm]=\"form.controls.currency\"\r\n [weekendForm]=\"form.controls.weekend\"\r\n [timezoneOptions]=\"timezoneOptions()\"\r\n [dateFormatOptions]=\"dateFormatOptions()\"\r\n [timeFormatOptions]=\"timeFormatOptions()\"\r\n [currencyOptions]=\"currencyOptions()\"\r\n [currencyFormatOptions]=\"currencyFormatOptions()\"\r\n [weekendOptions]=\"weekendOptions()\"\r\n />\r\n\r\n <mt-system-settings-smtp-section [smtpForm]=\"form.controls.smtp\" />\r\n </div>\r\n }\r\n </div>\r\n </mt-page>\r\n</ng-container>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@masterteam/system-settings",
3
+ "version": "0.0.1",
4
+ "publishConfig": {
5
+ "directory": "../../../dist/masterteam/system-settings",
6
+ "linkDirectory": false,
7
+ "access": "public"
8
+ },
9
+ "peerDependencies": {
10
+ "@angular/common": "^21.2.8",
11
+ "@angular/core": "^21.2.8",
12
+ "@angular/forms": "^21.2.8",
13
+ "@angular/router": "^21.2.8",
14
+ "@jsverse/transloco": "^8.3.0",
15
+ "@primeuix/themes": "^2.0.3",
16
+ "@tailwindcss/postcss": "^4.2.2",
17
+ "postcss": "^8.5.9",
18
+ "primeng": "21.1.5",
19
+ "rxjs": "^7.8.2",
20
+ "tailwindcss": "^4.2.2",
21
+ "tailwindcss-primeui": "^0.6.1",
22
+ "@masterteam/icons": "^0.0.14",
23
+ "@masterteam/components": "^0.0.145"
24
+ },
25
+ "sideEffects": false,
26
+ "exports": {
27
+ "./assets/system-settings.css": {
28
+ "style": "./assets/system-settings.css"
29
+ },
30
+ "./assets/i18n/*.json": {
31
+ "default": "./assets/i18n/*.json"
32
+ },
33
+ "./package.json": {
34
+ "default": "./package.json"
35
+ },
36
+ ".": {
37
+ "types": "./types/masterteam-system-settings.d.ts",
38
+ "default": "./fesm2022/masterteam-system-settings.mjs"
39
+ }
40
+ },
41
+ "module": "fesm2022/masterteam-system-settings.mjs",
42
+ "typings": "types/masterteam-system-settings.d.ts",
43
+ "type": "module",
44
+ "dependencies": {
45
+ "tslib": "^2.8.1"
46
+ }
47
+ }
@@ -0,0 +1,266 @@
1
+ import * as _angular_forms from '@angular/forms';
2
+ import { FormGroup, FormControl } from '@angular/forms';
3
+ import * as _angular_core from '@angular/core';
4
+ import { OnInit } from '@angular/core';
5
+
6
+ type SystemSettingPrimitive = string | number | boolean | null;
7
+ type SystemSettingObject = Record<string, unknown>;
8
+ type SystemSettingValue = SystemSettingPrimitive | SystemSettingObject | unknown[];
9
+ interface SystemSetting {
10
+ key: string;
11
+ label: string;
12
+ description: string;
13
+ value: SystemSettingValue;
14
+ }
15
+ interface UpdateSystemSettingItem<TValue = SystemSettingValue> {
16
+ key: string;
17
+ value: TValue;
18
+ }
19
+ interface ApiResponse<TData> {
20
+ data: TData;
21
+ message?: string | null;
22
+ endpoint?: string;
23
+ status?: number;
24
+ code?: number;
25
+ locale?: string;
26
+ cacheSession?: string | null;
27
+ }
28
+ interface FormatSchemaOption {
29
+ key: string;
30
+ sample: string;
31
+ isSelected: boolean;
32
+ }
33
+ interface SystemSettingsFormatSchema {
34
+ dateFormats: FormatSchemaOption[];
35
+ timeFormats: FormatSchemaOption[];
36
+ }
37
+ interface HolidayItem {
38
+ label: string;
39
+ from: Date;
40
+ to: Date;
41
+ }
42
+ interface HolidaysSettingValue extends SystemSettingObject {
43
+ data: HolidayItem[];
44
+ }
45
+ interface TimezoneRegionOption extends SystemSettingObject {
46
+ id: string;
47
+ baseUtcOffset: string;
48
+ standardName: string;
49
+ displayName: string;
50
+ daylightName: string;
51
+ name?: string;
52
+ }
53
+ interface TimezoneSettingValue extends SystemSettingObject {
54
+ region: TimezoneRegionOption | null;
55
+ dateFormat: string | null;
56
+ timeFormat: string | null;
57
+ }
58
+ interface CurrencyUnitLabel extends SystemSettingObject {
59
+ en: string;
60
+ ar: string;
61
+ }
62
+ interface CurrencySettingValue extends SystemSettingObject {
63
+ name: string;
64
+ unit: CurrencyUnitLabel;
65
+ format: string | null;
66
+ }
67
+ interface WeekendSettingValue extends SystemSettingObject {
68
+ days: number[];
69
+ }
70
+ interface SmtpSettingValue extends SystemSettingObject {
71
+ mail: string;
72
+ name: string;
73
+ password: string;
74
+ host: string;
75
+ port: number | null;
76
+ }
77
+ interface CurrencyCatalogItem {
78
+ code: string;
79
+ englishLabel: string;
80
+ arabicLabel: string;
81
+ unit: CurrencyUnitLabel;
82
+ }
83
+ interface SelectOption {
84
+ id: string;
85
+ name: string;
86
+ isSelected?: boolean;
87
+ }
88
+ interface WeekendDayOption extends SelectOption {
89
+ dayNumber: number;
90
+ }
91
+ interface HolidayTableRow {
92
+ rowKey: string;
93
+ rowIndex: number;
94
+ label: string;
95
+ from: string;
96
+ to: string;
97
+ }
98
+ interface SystemSettingsSnapshot {
99
+ holidays: HolidaysSettingValue;
100
+ timezone: TimezoneSettingValue;
101
+ currency: CurrencySettingValue;
102
+ weekend: WeekendSettingValue;
103
+ smtp: SmtpSettingValue;
104
+ }
105
+ type SystemSettingsForm = FormGroup<{
106
+ timezone: FormGroup<{
107
+ regionId: FormControl<string | null>;
108
+ dateFormat: FormControl<string | null>;
109
+ timeFormat: FormControl<string | null>;
110
+ }>;
111
+ currency: FormGroup<{
112
+ code: FormControl<string | null>;
113
+ format: FormControl<string | null>;
114
+ }>;
115
+ weekend: FormGroup<{
116
+ days: FormControl<number[]>;
117
+ }>;
118
+ smtp: FormGroup<{
119
+ mail: FormControl<string>;
120
+ name: FormControl<string>;
121
+ password: FormControl<string>;
122
+ host: FormControl<string>;
123
+ port: FormControl<string>;
124
+ }>;
125
+ }>;
126
+ declare const FIXED_CURRENCIES: CurrencyCatalogItem[];
127
+ declare const DEFAULT_DATE_FORMAT_OPTIONS: FormatSchemaOption[];
128
+ declare const DEFAULT_TIME_FORMAT_OPTIONS: FormatSchemaOption[];
129
+ declare const WEEKEND_DAY_DEFINITIONS: readonly [{
130
+ readonly dayNumber: 1;
131
+ readonly translationKey: "monday";
132
+ }, {
133
+ readonly dayNumber: 2;
134
+ readonly translationKey: "tuesday";
135
+ }, {
136
+ readonly dayNumber: 3;
137
+ readonly translationKey: "wednesday";
138
+ }, {
139
+ readonly dayNumber: 4;
140
+ readonly translationKey: "thursday";
141
+ }, {
142
+ readonly dayNumber: 5;
143
+ readonly translationKey: "friday";
144
+ }, {
145
+ readonly dayNumber: 6;
146
+ readonly translationKey: "saturday";
147
+ }, {
148
+ readonly dayNumber: 7;
149
+ readonly translationKey: "sunday";
150
+ }];
151
+
152
+ declare class SystemSettings implements OnInit {
153
+ private readonly http;
154
+ private readonly router;
155
+ private readonly transloco;
156
+ private readonly modal;
157
+ private readonly toast;
158
+ readonly apiBasePath: _angular_core.InputSignal<string>;
159
+ readonly backRoute: _angular_core.InputSignal<string | null>;
160
+ readonly formatSchema: _angular_core.InputSignal<SystemSettingsFormatSchema | null>;
161
+ readonly form: SystemSettingsForm;
162
+ readonly settings: _angular_core.WritableSignal<SystemSetting[] | null>;
163
+ readonly settingsLoading: _angular_core.WritableSignal<boolean>;
164
+ readonly settingsError: _angular_core.WritableSignal<string | null>;
165
+ readonly settingsLastUpdated: _angular_core.WritableSignal<string | null>;
166
+ readonly updating: _angular_core.WritableSignal<boolean>;
167
+ readonly updateError: _angular_core.WritableSignal<string | null>;
168
+ readonly timezones: _angular_core.WritableSignal<TimezoneRegionOption[]>;
169
+ readonly timezonesLoading: _angular_core.WritableSignal<boolean>;
170
+ readonly timezonesError: _angular_core.WritableSignal<string | null>;
171
+ readonly holidayItems: _angular_core.WritableSignal<HolidayItem[]>;
172
+ readonly initialSnapshot: _angular_core.WritableSignal<SystemSettingsSnapshot | null>;
173
+ readonly hydrationVersion: _angular_core.WritableSignal<string | null>;
174
+ readonly activeLang: _angular_core.Signal<string>;
175
+ readonly formStatus: _angular_core.Signal<_angular_forms.FormControlStatus>;
176
+ readonly selectedDateFormat: _angular_core.Signal<string | null>;
177
+ readonly selectedTimeFormat: _angular_core.Signal<string | null>;
178
+ readonly selectedCurrencyCode: _angular_core.Signal<string | null>;
179
+ readonly holidaysSetting: _angular_core.Signal<SystemSetting | null>;
180
+ readonly timezoneSetting: _angular_core.Signal<SystemSetting | null>;
181
+ readonly currencySetting: _angular_core.Signal<SystemSetting | null>;
182
+ readonly weekendSetting: _angular_core.Signal<SystemSetting | null>;
183
+ readonly smtpSetting: _angular_core.Signal<SystemSetting | null>;
184
+ readonly resolvedFormatSchema: _angular_core.Signal<SystemSettingsFormatSchema>;
185
+ readonly timezoneOptions: _angular_core.Signal<{
186
+ name: string;
187
+ id: string;
188
+ baseUtcOffset: string;
189
+ standardName: string;
190
+ displayName: string;
191
+ daylightName: string;
192
+ }[]>;
193
+ readonly dateFormatOptions: _angular_core.Signal<SelectOption[]>;
194
+ readonly timeFormatOptions: _angular_core.Signal<SelectOption[]>;
195
+ readonly currencyOptions: _angular_core.Signal<SelectOption[]>;
196
+ readonly currencyFormatOptions: _angular_core.Signal<SelectOption[]>;
197
+ readonly weekendOptions: _angular_core.Signal<WeekendDayOption[]>;
198
+ readonly isReady: _angular_core.Signal<boolean>;
199
+ readonly isLoading: _angular_core.Signal<boolean>;
200
+ readonly canSaveSettings: _angular_core.Signal<boolean>;
201
+ readonly holidayTableRows: _angular_core.Signal<HolidayTableRow[]>;
202
+ constructor();
203
+ ngOnInit(): void;
204
+ goBack(): void;
205
+ openAddHoliday(): void;
206
+ editHoliday(index: number): void;
207
+ deleteHoliday(index: number): void;
208
+ onSave(): void;
209
+ private loadSettings;
210
+ private loadTimezones;
211
+ private updateSettings;
212
+ private hydrateForm;
213
+ private buildCurrentSnapshot;
214
+ private buildTimezoneValue;
215
+ private buildCurrencyValue;
216
+ private buildWeekendValue;
217
+ private buildSmtpValue;
218
+ private findSettingByKey;
219
+ private extractHolidaysValue;
220
+ private extractTimezoneValue;
221
+ private extractCurrencyValue;
222
+ private extractWeekendValue;
223
+ private extractSmtpValue;
224
+ private normalizeHolidayItem;
225
+ private normalizeTimezoneRegion;
226
+ private normalizeCurrencyUnit;
227
+ private normalizeTimezoneSnapshot;
228
+ private normalizeCurrencySnapshot;
229
+ private normalizeWeekendSnapshot;
230
+ private normalizeSmtpSnapshot;
231
+ private createFallbackSetting;
232
+ private getDefaultTimezoneValue;
233
+ private getDefaultCurrencyValue;
234
+ private getDefaultSmtpValue;
235
+ private resolveCurrencyCode;
236
+ private mapFormatOptions;
237
+ private serializeHolidaysValue;
238
+ private buildCurrencyFormatOptions;
239
+ private getCurrencyFormatLabel;
240
+ private buildEndpoint;
241
+ private applyUpdatedSettings;
242
+ private areEqual;
243
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SystemSettings, never>;
244
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SystemSettings, "mt-system-settings", never, { "apiBasePath": { "alias": "apiBasePath"; "required": false; "isSignal": true; }; "backRoute": { "alias": "backRoute"; "required": false; "isSignal": true; }; "formatSchema": { "alias": "formatSchema"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
245
+ }
246
+
247
+ type HolidayEditorForm = FormGroup<{
248
+ label: FormControl<string>;
249
+ from: FormControl<Date | null>;
250
+ to: FormControl<Date | null>;
251
+ }>;
252
+ declare class SystemSettingsHolidayEditor {
253
+ private readonly ref;
254
+ readonly holiday: _angular_core.InputSignal<HolidayItem | null>;
255
+ readonly isEditMode: _angular_core.InputSignal<boolean>;
256
+ readonly form: HolidayEditorForm;
257
+ readonly actionLabel: _angular_core.Signal<"update-holiday" | "add-holiday">;
258
+ constructor();
259
+ onSave(): void;
260
+ onCancel(): void;
261
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SystemSettingsHolidayEditor, never>;
262
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SystemSettingsHolidayEditor, "mt-system-settings-holiday-editor", never, { "holiday": { "alias": "holiday"; "required": false; "isSignal": true; }; "isEditMode": { "alias": "isEditMode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
263
+ }
264
+
265
+ export { DEFAULT_DATE_FORMAT_OPTIONS, DEFAULT_TIME_FORMAT_OPTIONS, FIXED_CURRENCIES, SystemSettings, SystemSettingsHolidayEditor, WEEKEND_DAY_DEFINITIONS };
266
+ export type { ApiResponse, CurrencyCatalogItem, CurrencySettingValue, CurrencyUnitLabel, FormatSchemaOption, HolidayItem, HolidayTableRow, HolidaysSettingValue, SelectOption, SmtpSettingValue, SystemSetting, SystemSettingObject, SystemSettingPrimitive, SystemSettingValue, SystemSettingsForm, SystemSettingsFormatSchema, SystemSettingsSnapshot, TimezoneRegionOption, TimezoneSettingValue, UpdateSystemSettingItem, WeekendDayOption, WeekendSettingValue };