@masterteam/system-settings 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/ar.json +1 -0
- package/assets/i18n/en.json +1 -0
- package/assets/system-settings.css +2 -2
- package/fesm2022/masterteam-system-settings.mjs +56 -5
- package/fesm2022/masterteam-system-settings.mjs.map +1 -1
- package/package.json +2 -2
- package/types/masterteam-system-settings.d.ts +50 -0
package/assets/i18n/ar.json
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"page-title": "إعدادات النظام",
|
|
4
4
|
"page-subtitle": "إدارة العطلات, عطلات نهاية الأسبوع, المنطقة الزمنية, العملة, وSMTP من شاشة واحدة.",
|
|
5
5
|
"save": "حفظ",
|
|
6
|
+
"save-tooltip": "حفظ التغييرات ",
|
|
6
7
|
"cancel": "إلغاء",
|
|
7
8
|
"loading": "جاري تحميل الإعدادات",
|
|
8
9
|
"holidays-title": "العطلات",
|
package/assets/i18n/en.json
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"page-title": "System Settings",
|
|
4
4
|
"page-subtitle": "Manage holidays, weekend, timezone, currency, and SMTP from one screen.",
|
|
5
5
|
"save": "Save",
|
|
6
|
+
"save-tooltip": "Save changes ",
|
|
6
7
|
"cancel": "Cancel",
|
|
7
8
|
"loading": "Loading settings...",
|
|
8
9
|
"holidays-title": "Holidays",
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! tailwindcss v4.
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-800:oklch(47.3% .137 46.201);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--spacing:.25rem;--container-3xl:48rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-semibold:600;--font-weight-bold:700;--radius-xl:.75rem;--animate-spin:spin 1s linear infinite;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\!absolute{position:absolute!important}.absolute{position:absolute}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.-m-px{margin:-1px}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.h-8{height:calc(var(--spacing) * 8)}.h-px{height:1px}.\!w-\[30rem\]{width:30rem!important}.w-8{width:calc(var(--spacing) * 8)}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.animate-spin{animation:var(--animate-spin)}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:3.40282e38px}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-solid{--tw-border-style:solid;border-style:solid}.border-amber-200{border-color:var(--color-amber-200)}.border-current{border-color:currentColor}.border-neutral-300{border-color:var(--color-neutral-300)}.border-red-200{border-color:var(--color-red-200)}.border-e-transparent{border-inline-end-color:#0000}.bg-amber-50{background-color:var(--color-amber-50)}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-red-50{background-color:var(--color-red-50)}.p-0{padding:calc(var(--spacing) * 0)}.p-3{padding:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.text-center{text-align:center}.align-\[-0\.125em\]{vertical-align:-.125em}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-amber-800{color:var(--color-amber-800)}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-900{color:var(--color-neutral-900)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.\!shadow-none{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.\[clip\:rect\(0\,0\,0\,0\)\]{clip:rect(0,0,0,0)}@media (min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:justify-between{justify-content:space-between}}@media (min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}@keyframes enter{0%{opacity:var(--p-enter-opacity,1);transform:translate3d(var(--p-enter-translate-x,0), var(--p-enter-translate-y,0), 0) scale3d(var(--p-enter-scale,1), var(--p-enter-scale,1), var(--p-enter-scale,1)) rotate(var(--p-enter-rotate,0))}}@keyframes leave{to{opacity:var(--p-leave-opacity,1);transform:translate3d(var(--p-leave-translate-x,0), var(--p-leave-translate-y,0), 0) scale3d(var(--p-leave-scale,1), var(--p-leave-scale,1), var(--p-leave-scale,1)) rotate(var(--p-leave-rotate,0))}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@keyframes spin{to{transform:rotate(360deg)}}
|
|
1
|
+
/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-800:oklch(47.3% .137 46.201);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-semibold:600;--font-weight-bold:700;--radius-xl:.75rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\!absolute{position:absolute!important}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.\!w-\[30rem\]{width:30rem!important}.flex-col{flex-direction:column}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing) * 1)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-neutral-300{border-color:var(--color-neutral-300)}.border-red-200{border-color:var(--color-red-200)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-red-50{background-color:var(--color-red-50)}.p-3{padding:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-10{padding-block:calc(var(--spacing) * 10)}.text-center{text-align:center}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-amber-800{color:var(--color-amber-800)}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-900{color:var(--color-neutral-900)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.\!shadow-none{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}@media (min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-end{align-items:flex-end}.md\:items-start{align-items:flex-start}.md\:justify-between{justify-content:space-between}}@media (min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}@keyframes enter{0%{opacity:var(--p-enter-opacity,1);transform:translate3d(var(--p-enter-translate-x,0), var(--p-enter-translate-y,0), 0) scale3d(var(--p-enter-scale,1), var(--p-enter-scale,1), var(--p-enter-scale,1)) rotate(var(--p-enter-rotate,0))}}@keyframes leave{to{opacity:var(--p-leave-opacity,1);transform:translate3d(var(--p-leave-translate-x,0), var(--p-leave-translate-y,0), 0) scale3d(var(--p-leave-scale,1), var(--p-leave-scale,1), var(--p-leave-scale,1)) rotate(var(--p-leave-rotate,0))}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
|
|
@@ -7,15 +7,19 @@ import * as i1 from '@angular/forms';
|
|
|
7
7
|
import { ReactiveFormsModule, FormGroup, FormControl, Validators } from '@angular/forms';
|
|
8
8
|
import { Router } from '@angular/router';
|
|
9
9
|
import { TranslocoDirective, TranslocoService } from '@jsverse/transloco';
|
|
10
|
+
import { Breadcrumb } from '@masterteam/components/breadcrumb';
|
|
10
11
|
import { Button } from '@masterteam/components/button';
|
|
11
12
|
import { Page } from '@masterteam/components/page';
|
|
12
13
|
import { ModalService } from '@masterteam/components/modal';
|
|
13
14
|
import { ToastService } from '@masterteam/components/toast';
|
|
15
|
+
import * as i1$1 from 'primeng/skeleton';
|
|
16
|
+
import { SkeletonModule } from 'primeng/skeleton';
|
|
14
17
|
import { Card } from '@masterteam/components/card';
|
|
15
18
|
import { MultiSelectField } from '@masterteam/components/multi-select-field';
|
|
16
19
|
import { SelectField } from '@masterteam/components/select-field';
|
|
17
20
|
import { ModalRef } from '@masterteam/components/dialog';
|
|
18
21
|
import { DateField } from '@masterteam/components/date-field';
|
|
22
|
+
import { FieldValidation } from '@masterteam/components/field-validation';
|
|
19
23
|
import { TextField } from '@masterteam/components/text-field';
|
|
20
24
|
import { Table } from '@masterteam/components/table';
|
|
21
25
|
|
|
@@ -63,6 +67,13 @@ class SystemSettingsHolidayEditor {
|
|
|
63
67
|
validators: [holidayRangeValidator()],
|
|
64
68
|
});
|
|
65
69
|
actionLabel = computed(() => this.isEditMode() ? 'update-holiday' : 'add-holiday', ...(ngDevMode ? [{ debugName: "actionLabel" }] : /* istanbul ignore next */ []));
|
|
70
|
+
fromValue = toSignal(this.form.controls.from.valueChanges, {
|
|
71
|
+
initialValue: this.form.controls.from.value,
|
|
72
|
+
});
|
|
73
|
+
toPickerInputs = computed(() => {
|
|
74
|
+
const from = this.fromValue();
|
|
75
|
+
return from instanceof Date ? { minDate: from } : {};
|
|
76
|
+
}, ...(ngDevMode ? [{ debugName: "toPickerInputs" }] : /* istanbul ignore next */ []));
|
|
66
77
|
constructor() {
|
|
67
78
|
effect(() => {
|
|
68
79
|
const holiday = this.holiday();
|
|
@@ -94,7 +105,7 @@ class SystemSettingsHolidayEditor {
|
|
|
94
105
|
this.ref.close(null);
|
|
95
106
|
}
|
|
96
107
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: SystemSettingsHolidayEditor, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
97
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: SystemSettingsHolidayEditor, isStandalone: true, selector: "mt-system-settings-holiday-editor", inputs: { holiday: { classPropertyName: "holiday", publicName: "holiday", isSignal: true, isRequired: false, transformFunction: null }, isEditMode: { classPropertyName: "isEditMode", publicName: "isEditMode", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <div [class]=\"' ' + (modal.contentClass || '')\">\r\n <form [formGroup]=\"form\" class=\"space-y-4 p-3\" (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
|
|
108
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: SystemSettingsHolidayEditor, isStandalone: true, selector: "mt-system-settings-holiday-editor", inputs: { holiday: { classPropertyName: "holiday", publicName: "holiday", isSignal: true, isRequired: false, transformFunction: null }, isEditMode: { classPropertyName: "isEditMode", publicName: "isEditMode", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <div [class]=\"' ' + (modal.contentClass || '')\">\r\n <form [formGroup]=\"form\" class=\"space-y-4 p-3\" (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 <div class=\"grid gap-1\">\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 <mt-field-validation [control]=\"form.controls.from\" />\r\n </div>\r\n\r\n <div class=\"grid gap-1\">\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 [pInputs]=\"toPickerInputs()\"\r\n />\r\n <mt-field-validation [control]=\"form.controls.to\" />\r\n </div>\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 </form>\r\n </div>\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n type=\"button\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button [label]=\"t(actionLabel())\" type=\"button\" (onClick)=\"onSave()\" />\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: DateField, selector: "mt-date-field", inputs: ["field", "hint", "label", "placeholder", "class", "readonly", "showIcon", "showClear", "showTime", "pInputs", "required"] }, { kind: "component", type: FieldValidation, selector: "mt-field-validation", inputs: ["control", "touched"] }, { kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
98
109
|
}
|
|
99
110
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: SystemSettingsHolidayEditor, decorators: [{
|
|
100
111
|
type: Component,
|
|
@@ -103,8 +114,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
103
114
|
TranslocoDirective,
|
|
104
115
|
Button,
|
|
105
116
|
DateField,
|
|
117
|
+
FieldValidation,
|
|
106
118
|
TextField,
|
|
107
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <div [class]=\"' ' + (modal.contentClass || '')\">\r\n <form [formGroup]=\"form\" class=\"space-y-4 p-3\" (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
|
|
119
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *transloco=\"let t; prefix: 'system-settings'\">\r\n <div [class]=\"' ' + (modal.contentClass || '')\">\r\n <form [formGroup]=\"form\" class=\"space-y-4 p-3\" (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 <div class=\"grid gap-1\">\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 <mt-field-validation [control]=\"form.controls.from\" />\r\n </div>\r\n\r\n <div class=\"grid gap-1\">\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 [pInputs]=\"toPickerInputs()\"\r\n />\r\n <mt-field-validation [control]=\"form.controls.to\" />\r\n </div>\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 </form>\r\n </div>\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n type=\"button\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button [label]=\"t(actionLabel())\" type=\"button\" (onClick)=\"onSave()\" />\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:block}\n"] }]
|
|
108
120
|
}], ctorParameters: () => [], propDecorators: { holiday: [{ type: i0.Input, args: [{ isSignal: true, alias: "holiday", required: false }] }], isEditMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "isEditMode", required: false }] }] } });
|
|
109
121
|
function holidayRangeValidator() {
|
|
110
122
|
return (control) => {
|
|
@@ -264,6 +276,20 @@ class SystemSettings {
|
|
|
264
276
|
apiBasePath = input('settings', ...(ngDevMode ? [{ debugName: "apiBasePath" }] : /* istanbul ignore next */ []));
|
|
265
277
|
backRoute = input('/control-panel/product-settings', ...(ngDevMode ? [{ debugName: "backRoute" }] : /* istanbul ignore next */ []));
|
|
266
278
|
formatSchema = input(null, ...(ngDevMode ? [{ debugName: "formatSchema" }] : /* istanbul ignore next */ []));
|
|
279
|
+
breadcrumbItems = [
|
|
280
|
+
{
|
|
281
|
+
label: '',
|
|
282
|
+
icon: 'general.home-line',
|
|
283
|
+
routerLink: '/control-panel/workspaces',
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
label: this.transloco.translate('product-settings.product-settings'),
|
|
287
|
+
routerLink: '/control-panel/product-settings',
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
label: this.transloco.translate('system-settings.page-title'),
|
|
291
|
+
},
|
|
292
|
+
];
|
|
267
293
|
form = new FormGroup({
|
|
268
294
|
timezone: new FormGroup({
|
|
269
295
|
regionId: new FormControl(null, Validators.required),
|
|
@@ -312,6 +338,9 @@ class SystemSettings {
|
|
|
312
338
|
selectedCurrencyCode = toSignal(this.form.controls.currency.controls.code.valueChanges, {
|
|
313
339
|
initialValue: this.form.controls.currency.controls.code.value,
|
|
314
340
|
});
|
|
341
|
+
formValue = toSignal(this.form.valueChanges, {
|
|
342
|
+
initialValue: this.form.getRawValue(),
|
|
343
|
+
});
|
|
315
344
|
holidaysSetting = computed(() => this.findSettingByKey('Holidays'), ...(ngDevMode ? [{ debugName: "holidaysSetting" }] : /* istanbul ignore next */ []));
|
|
316
345
|
timezoneSetting = computed(() => this.findSettingByKey('Timezone'), ...(ngDevMode ? [{ debugName: "timezoneSetting" }] : /* istanbul ignore next */ []));
|
|
317
346
|
currencySetting = computed(() => this.findSettingByKey('Currency'), ...(ngDevMode ? [{ debugName: "currencySetting" }] : /* istanbul ignore next */ []));
|
|
@@ -351,7 +380,27 @@ class SystemSettings {
|
|
|
351
380
|
}, ...(ngDevMode ? [{ debugName: "weekendOptions" }] : /* istanbul ignore next */ []));
|
|
352
381
|
isReady = computed(() => this.hydrationVersion() !== null && this.initialSnapshot() !== null, ...(ngDevMode ? [{ debugName: "isReady" }] : /* istanbul ignore next */ []));
|
|
353
382
|
isLoading = computed(() => this.settingsLoading() || this.timezonesLoading() || !this.isReady(), ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
|
|
354
|
-
|
|
383
|
+
hasChanges = computed(() => {
|
|
384
|
+
this.formValue();
|
|
385
|
+
this.holidayItems();
|
|
386
|
+
const initial = this.initialSnapshot();
|
|
387
|
+
if (!initial) {
|
|
388
|
+
return false;
|
|
389
|
+
}
|
|
390
|
+
const current = this.buildCurrentSnapshot();
|
|
391
|
+
if (!current) {
|
|
392
|
+
return false;
|
|
393
|
+
}
|
|
394
|
+
return (!this.areEqual(initial.holidays, current.holidays) ||
|
|
395
|
+
!this.areEqual(initial.timezone, current.timezone) ||
|
|
396
|
+
!this.areEqual(initial.currency, current.currency) ||
|
|
397
|
+
!this.areEqual(initial.weekend, current.weekend) ||
|
|
398
|
+
!this.areEqual(initial.smtp, current.smtp));
|
|
399
|
+
}, ...(ngDevMode ? [{ debugName: "hasChanges" }] : /* istanbul ignore next */ []));
|
|
400
|
+
canSaveSettings = computed(() => !this.isLoading() &&
|
|
401
|
+
!this.updating() &&
|
|
402
|
+
this.formStatus() === 'VALID' &&
|
|
403
|
+
this.hasChanges(), ...(ngDevMode ? [{ debugName: "canSaveSettings" }] : /* istanbul ignore next */ []));
|
|
355
404
|
holidayTableRows = computed(() => this.holidayItems().map((holiday, index) => ({
|
|
356
405
|
rowKey: `${index}`,
|
|
357
406
|
rowIndex: index,
|
|
@@ -952,7 +1001,7 @@ class SystemSettings {
|
|
|
952
1001
|
return JSON.stringify(left) === JSON.stringify(right);
|
|
953
1002
|
}
|
|
954
1003
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: SystemSettings, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
955
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: SystemSettings, isStandalone: true, selector: "mt-system-settings", inputs: { apiBasePath: { classPropertyName: "apiBasePath", publicName: "apiBasePath", isSignal: true, isRequired: false, transformFunction: null }, backRoute: { classPropertyName: "backRoute", publicName: "backRoute", isSignal: true, isRequired: false, transformFunction: null }, formatSchema: { classPropertyName: "formatSchema", publicName: "formatSchema", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<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-
|
|
1004
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: SystemSettings, isStandalone: true, selector: "mt-system-settings", inputs: { apiBasePath: { classPropertyName: "apiBasePath", publicName: "apiBasePath", isSignal: true, isRequired: false, transformFunction: null }, backRoute: { classPropertyName: "backRoute", publicName: "backRoute", isSignal: true, isRequired: false, transformFunction: null }, formatSchema: { classPropertyName: "formatSchema", publicName: "formatSchema", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<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 [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-emerald-100)',\r\n '--p-avatar-color': 'var(--p-emerald-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n >\r\n <div class=\"flex flex-col gap-3\">\r\n <div\r\n class=\"flex flex-col gap-4 md:flex-row md:items-end md:justify-between\"\r\n >\r\n <div>\r\n <h3 class=\"text-lg font-bold text-neutral-900\">\r\n {{ t(\"page-title\") }}\r\n </h3>\r\n <mt-breadcrumb\r\n [items]=\"breadcrumbItems\"\r\n [styleClass]=\"'flex justify-start mx-1'\"\r\n />\r\n </div>\r\n\r\n <mt-button\r\n [label]=\"t('save')\"\r\n icon=\"general.save-01\"\r\n [tooltip]=\"t('save-tooltip')\"\r\n [badge]=\"hasChanges() ? '!' : ''\"\r\n badgeSeverity=\"warn\"\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=\"space-y-4\">\r\n <p-skeleton width=\"100%\" height=\"12rem\" borderRadius=\"0.75rem\" />\r\n <p-skeleton width=\"100%\" height=\"18rem\" borderRadius=\"0.75rem\" />\r\n <p-skeleton width=\"100%\" height=\"14rem\" borderRadius=\"0.75rem\" />\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", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: Page, selector: "mt-page", inputs: ["backButton", "backButtonIcon", "avatarIcon", "avatarStyle", "avatarShape", "title", "tabs", "activeTab", "contentClass", "contentId"], outputs: ["backButtonClick", "tabChange"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Breadcrumb, selector: "mt-breadcrumb", inputs: ["items", "styleClass"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i1$1.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: SystemSettingsHolidaysSection, selector: "mt-system-settings-holidays-section", inputs: ["holidays"], outputs: ["addHoliday", "editHoliday", "deleteHoliday"] }, { kind: "component", type: SystemSettingsGeneralSection, selector: "mt-system-settings-general-section", inputs: ["timezoneForm", "currencyForm", "weekendForm", "timezoneOptions", "dateFormatOptions", "timeFormatOptions", "currencyOptions", "currencyFormatOptions", "weekendOptions"] }, { kind: "component", type: SystemSettingsSmtpSection, selector: "mt-system-settings-smtp-section", inputs: ["smtpForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
956
1005
|
}
|
|
957
1006
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: SystemSettings, decorators: [{
|
|
958
1007
|
type: Component,
|
|
@@ -962,10 +1011,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
962
1011
|
TranslocoDirective,
|
|
963
1012
|
Page,
|
|
964
1013
|
Button,
|
|
1014
|
+
Breadcrumb,
|
|
1015
|
+
SkeletonModule,
|
|
965
1016
|
SystemSettingsHolidaysSection,
|
|
966
1017
|
SystemSettingsGeneralSection,
|
|
967
1018
|
SystemSettingsSmtpSection,
|
|
968
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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-
|
|
1019
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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 [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-emerald-100)',\r\n '--p-avatar-color': 'var(--p-emerald-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n >\r\n <div class=\"flex flex-col gap-3\">\r\n <div\r\n class=\"flex flex-col gap-4 md:flex-row md:items-end md:justify-between\"\r\n >\r\n <div>\r\n <h3 class=\"text-lg font-bold text-neutral-900\">\r\n {{ t(\"page-title\") }}\r\n </h3>\r\n <mt-breadcrumb\r\n [items]=\"breadcrumbItems\"\r\n [styleClass]=\"'flex justify-start mx-1'\"\r\n />\r\n </div>\r\n\r\n <mt-button\r\n [label]=\"t('save')\"\r\n icon=\"general.save-01\"\r\n [tooltip]=\"t('save-tooltip')\"\r\n [badge]=\"hasChanges() ? '!' : ''\"\r\n badgeSeverity=\"warn\"\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=\"space-y-4\">\r\n <p-skeleton width=\"100%\" height=\"12rem\" borderRadius=\"0.75rem\" />\r\n <p-skeleton width=\"100%\" height=\"18rem\" borderRadius=\"0.75rem\" />\r\n <p-skeleton width=\"100%\" height=\"14rem\" borderRadius=\"0.75rem\" />\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", styles: [":host{display:block}\n"] }]
|
|
969
1020
|
}], ctorParameters: () => [], propDecorators: { apiBasePath: [{ type: i0.Input, args: [{ isSignal: true, alias: "apiBasePath", required: false }] }], backRoute: [{ type: i0.Input, args: [{ isSignal: true, alias: "backRoute", required: false }] }], formatSchema: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatSchema", required: false }] }] } });
|
|
970
1021
|
function isRecord(value) {
|
|
971
1022
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
@@ -1 +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\nimport { ModalService } from '@masterteam/components/modal';\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 modal = inject(ModalService);\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 <div [class]=\"' ' + (modal.contentClass || '')\">\r\n <form [formGroup]=\"form\" class=\"space-y-4 p-3\" (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 </form>\r\n </div>\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n type=\"button\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button [label]=\"t(actionLabel())\" type=\"submit\" />\r\n </div>\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 noCard\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 },\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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"}
|
|
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 { toSignal } from '@angular/core/rxjs-interop';\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 type { DatePicker } from 'primeng/datepicker';\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 { FieldValidation } from '@masterteam/components/field-validation';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport type { HolidayItem } from '../../system-settings.model';\r\nimport { ModalService } from '@masterteam/components/modal';\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 FieldValidation,\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 modal = inject(ModalService);\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 private readonly fromValue = toSignal(this.form.controls.from.valueChanges, {\r\n initialValue: this.form.controls.from.value,\r\n });\r\n\r\n readonly toPickerInputs = computed<Partial<DatePicker>>(() => {\r\n const from = this.fromValue();\r\n return from instanceof Date ? { minDate: from } : {};\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 <div [class]=\"' ' + (modal.contentClass || '')\">\r\n <form [formGroup]=\"form\" class=\"space-y-4 p-3\" (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 <div class=\"grid gap-1\">\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 <mt-field-validation [control]=\"form.controls.from\" />\r\n </div>\r\n\r\n <div class=\"grid gap-1\">\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 [pInputs]=\"toPickerInputs()\"\r\n />\r\n <mt-field-validation [control]=\"form.controls.to\" />\r\n </div>\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 </form>\r\n </div>\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n type=\"button\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button [label]=\"t(actionLabel())\" type=\"button\" (onClick)=\"onSave()\" />\r\n </div>\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 noCard\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 { Breadcrumb } from '@masterteam/components/breadcrumb';\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 { SkeletonModule } from 'primeng/skeleton';\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 Breadcrumb,\r\n SkeletonModule,\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 breadcrumbItems: {\r\n label?: string;\r\n routerLink?: string;\r\n icon?: string;\r\n }[] = [\r\n {\r\n label: '',\r\n icon: 'general.home-line',\r\n routerLink: '/control-panel/workspaces',\r\n },\r\n {\r\n label: this.transloco.translate('product-settings.product-settings'),\r\n routerLink: '/control-panel/product-settings',\r\n },\r\n {\r\n label: this.transloco.translate('system-settings.page-title'),\r\n },\r\n ];\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 readonly formValue = toSignal(this.form.valueChanges, {\r\n initialValue: this.form.getRawValue(),\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 hasChanges = computed(() => {\r\n this.formValue();\r\n this.holidayItems();\r\n\r\n const initial = this.initialSnapshot();\r\n if (!initial) {\r\n return false;\r\n }\r\n\r\n const current = this.buildCurrentSnapshot();\r\n if (!current) {\r\n return false;\r\n }\r\n\r\n return (\r\n !this.areEqual(initial.holidays, current.holidays) ||\r\n !this.areEqual(initial.timezone, current.timezone) ||\r\n !this.areEqual(initial.currency, current.currency) ||\r\n !this.areEqual(initial.weekend, current.weekend) ||\r\n !this.areEqual(initial.smtp, current.smtp)\r\n );\r\n });\r\n\r\n readonly canSaveSettings = computed(\r\n () =>\r\n !this.isLoading() &&\r\n !this.updating() &&\r\n this.formStatus() === 'VALID' &&\r\n this.hasChanges(),\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 },\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 [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-emerald-100)',\r\n '--p-avatar-color': 'var(--p-emerald-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n >\r\n <div class=\"flex flex-col gap-3\">\r\n <div\r\n class=\"flex flex-col gap-4 md:flex-row md:items-end md:justify-between\"\r\n >\r\n <div>\r\n <h3 class=\"text-lg font-bold text-neutral-900\">\r\n {{ t(\"page-title\") }}\r\n </h3>\r\n <mt-breadcrumb\r\n [items]=\"breadcrumbItems\"\r\n [styleClass]=\"'flex justify-start mx-1'\"\r\n />\r\n </div>\r\n\r\n <mt-button\r\n [label]=\"t('save')\"\r\n icon=\"general.save-01\"\r\n [tooltip]=\"t('save-tooltip')\"\r\n [badge]=\"hasChanges() ? '!' : ''\"\r\n badgeSeverity=\"warn\"\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=\"space-y-4\">\r\n <p-skeleton width=\"100%\" height=\"12rem\" borderRadius=\"0.75rem\" />\r\n <p-skeleton width=\"100%\" height=\"18rem\" borderRadius=\"0.75rem\" />\r\n <p-skeleton width=\"100%\" height=\"14rem\" borderRadius=\"0.75rem\" />\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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masterteam/system-settings",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"directory": "../../../dist/masterteam/system-settings",
|
|
6
6
|
"linkDirectory": false,
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"rxjs": "^7.8.2",
|
|
20
20
|
"tailwindcss": "^4.2.2",
|
|
21
21
|
"tailwindcss-primeui": "^0.6.1",
|
|
22
|
-
"@masterteam/components": "^0.0.
|
|
22
|
+
"@masterteam/components": "^0.0.173",
|
|
23
23
|
"@masterteam/icons": "^0.0.15"
|
|
24
24
|
},
|
|
25
25
|
"sideEffects": false,
|
|
@@ -2,6 +2,7 @@ import * as _angular_forms from '@angular/forms';
|
|
|
2
2
|
import { FormGroup, FormControl } from '@angular/forms';
|
|
3
3
|
import * as _angular_core from '@angular/core';
|
|
4
4
|
import { OnInit } from '@angular/core';
|
|
5
|
+
import { DatePicker } from 'primeng/datepicker';
|
|
5
6
|
import { ModalService } from '@masterteam/components/modal';
|
|
6
7
|
|
|
7
8
|
type SystemSettingPrimitive = string | number | boolean | null;
|
|
@@ -159,6 +160,11 @@ declare class SystemSettings implements OnInit {
|
|
|
159
160
|
readonly apiBasePath: _angular_core.InputSignal<string>;
|
|
160
161
|
readonly backRoute: _angular_core.InputSignal<string | null>;
|
|
161
162
|
readonly formatSchema: _angular_core.InputSignal<SystemSettingsFormatSchema | null>;
|
|
163
|
+
readonly breadcrumbItems: {
|
|
164
|
+
label?: string;
|
|
165
|
+
routerLink?: string;
|
|
166
|
+
icon?: string;
|
|
167
|
+
}[];
|
|
162
168
|
readonly form: SystemSettingsForm;
|
|
163
169
|
readonly settings: _angular_core.WritableSignal<SystemSetting[] | null>;
|
|
164
170
|
readonly settingsLoading: _angular_core.WritableSignal<boolean>;
|
|
@@ -177,6 +183,47 @@ declare class SystemSettings implements OnInit {
|
|
|
177
183
|
readonly selectedDateFormat: _angular_core.Signal<string | null>;
|
|
178
184
|
readonly selectedTimeFormat: _angular_core.Signal<string | null>;
|
|
179
185
|
readonly selectedCurrencyCode: _angular_core.Signal<string | null>;
|
|
186
|
+
readonly formValue: _angular_core.Signal<Partial<{
|
|
187
|
+
timezone: Partial<{
|
|
188
|
+
regionId: string | null;
|
|
189
|
+
dateFormat: string | null;
|
|
190
|
+
timeFormat: string | null;
|
|
191
|
+
}>;
|
|
192
|
+
currency: Partial<{
|
|
193
|
+
code: string | null;
|
|
194
|
+
format: string | null;
|
|
195
|
+
}>;
|
|
196
|
+
weekend: Partial<{
|
|
197
|
+
days: number[];
|
|
198
|
+
}>;
|
|
199
|
+
smtp: Partial<{
|
|
200
|
+
mail: string;
|
|
201
|
+
name: string;
|
|
202
|
+
password: string;
|
|
203
|
+
host: string;
|
|
204
|
+
port: string;
|
|
205
|
+
}>;
|
|
206
|
+
}> | {
|
|
207
|
+
timezone: {
|
|
208
|
+
regionId: string | null;
|
|
209
|
+
dateFormat: string | null;
|
|
210
|
+
timeFormat: string | null;
|
|
211
|
+
};
|
|
212
|
+
currency: {
|
|
213
|
+
code: string | null;
|
|
214
|
+
format: string | null;
|
|
215
|
+
};
|
|
216
|
+
weekend: {
|
|
217
|
+
days: number[];
|
|
218
|
+
};
|
|
219
|
+
smtp: {
|
|
220
|
+
mail: string;
|
|
221
|
+
name: string;
|
|
222
|
+
password: string;
|
|
223
|
+
host: string;
|
|
224
|
+
port: string;
|
|
225
|
+
};
|
|
226
|
+
}>;
|
|
180
227
|
readonly holidaysSetting: _angular_core.Signal<SystemSetting | null>;
|
|
181
228
|
readonly timezoneSetting: _angular_core.Signal<SystemSetting | null>;
|
|
182
229
|
readonly currencySetting: _angular_core.Signal<SystemSetting | null>;
|
|
@@ -198,6 +245,7 @@ declare class SystemSettings implements OnInit {
|
|
|
198
245
|
readonly weekendOptions: _angular_core.Signal<WeekendDayOption[]>;
|
|
199
246
|
readonly isReady: _angular_core.Signal<boolean>;
|
|
200
247
|
readonly isLoading: _angular_core.Signal<boolean>;
|
|
248
|
+
readonly hasChanges: _angular_core.Signal<boolean>;
|
|
201
249
|
readonly canSaveSettings: _angular_core.Signal<boolean>;
|
|
202
250
|
readonly holidayTableRows: _angular_core.Signal<HolidayTableRow[]>;
|
|
203
251
|
constructor();
|
|
@@ -257,6 +305,8 @@ declare class SystemSettingsHolidayEditor {
|
|
|
257
305
|
readonly isEditMode: _angular_core.InputSignal<boolean>;
|
|
258
306
|
readonly form: HolidayEditorForm;
|
|
259
307
|
readonly actionLabel: _angular_core.Signal<"update-holiday" | "add-holiday">;
|
|
308
|
+
private readonly fromValue;
|
|
309
|
+
readonly toPickerInputs: _angular_core.Signal<Partial<DatePicker>>;
|
|
260
310
|
constructor();
|
|
261
311
|
onSave(): void;
|
|
262
312
|
onCancel(): void;
|