@masterteam/permissions 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- /*! tailwindcss v4.1.18 | 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-gray-300:oklch(87.2% .01 258.338);--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-medium:500;--font-weight-semibold:600;--radius-lg:.5rem;--radius-2xl:1rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--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}.static{position:static}.mx-4{margin-inline:calc(var(--spacing)*4)}.my-4{margin-block:calc(var(--spacing)*4)}.my-5{margin-block:calc(var(--spacing)*5)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.flex{display:flex}.h-full{height:100%}.\!w-\[24\%\]{width:24%!important}.w-1\/2{width:50%}.w-1\/5{width:20%}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-lg{border-radius:var(--radius-lg)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.border,.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-gray-300{border-color:var(--color-gray-300)}.border-primary-400{border-color:var(--p-primary-400)}@supports (color:color-mix(in lab, red, red)){.border-primary-400{border-color:color-mix(in srgb,var(--p-primary-400)calc(100%*1),transparent)}}.border-surface{border-color:var(--p-content-border-color)}.bg-primary-50{background-color:var(--p-primary-50)}@supports (color:color-mix(in lab, red, red)){.bg-primary-50{background-color:color-mix(in srgb,var(--p-primary-50)calc(100%*1),transparent)}}.bg-surface-50{background-color:var(--p-surface-50)}@supports (color:color-mix(in lab, red, red)){.bg-surface-50{background-color:color-mix(in srgb,var(--p-surface-50)calc(100%*1),transparent)}}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-4{padding-inline:calc(var(--spacing)*4)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.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))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-muted-color{color:var(--p-text-muted-color)}.\!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}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:bg-surface-100:hover{background-color:var(--p-surface-100)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-100:hover{background-color:color-mix(in srgb,var(--p-surface-100)calc(100%*1),transparent)}}}}@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}
1
+ /*! tailwindcss v4.2.1 | 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-gray-300:oklch(87.2% .01 258.338);--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--radius-lg:.5rem;--radius-2xl:1rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--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}.static{position:static}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.my-4{margin-block:calc(var(--spacing) * 4)}.my-5{margin-block:calc(var(--spacing) * 5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.flex{display:flex}.h-full{height:100%}.w-full{width:100%}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-lg{border-radius:var(--radius-lg)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.border,.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-gray-300{border-color:var(--color-gray-300)}.border-primary-400{border-color:var(--p-primary-400)}@supports (color:color-mix(in lab, red, red)){.border-primary-400{border-color:color-mix(in srgb, var(--p-primary-400) calc(100% * 1), transparent)}}.border-surface{border-color:var(--p-content-border-color)}.bg-primary-50{background-color:var(--p-primary-50)}@supports (color:color-mix(in lab, red, red)){.bg-primary-50{background-color:color-mix(in srgb, var(--p-primary-50) calc(100% * 1), transparent)}}.bg-surface-50{background-color:var(--p-surface-50)}@supports (color:color-mix(in lab, red, red)){.bg-surface-50{background-color:color-mix(in srgb, var(--p-surface-50) calc(100% * 1), transparent)}}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-4{padding-inline:calc(var(--spacing) * 4)}.pb-0{padding-bottom:calc(var(--spacing) * 0)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.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))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-muted-color{color:var(--p-text-muted-color)}.\!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}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:bg-surface-100:hover{background-color:var(--p-surface-100)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-100:hover{background-color:color-mix(in srgb, var(--p-surface-100) calc(100% * 1), transparent)}}}@media (min-width:64rem){.lg\:w-1\/4{width:25%}.lg\:flex-1{flex:1}.lg\:flex-row{flex-direction:row}}@media (min-width:80rem){.xl\:w-1\/5{width:20%}}}@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}
@@ -742,18 +742,32 @@ class PermissionsPage {
742
742
  return;
743
743
  }
744
744
  }
745
- if (this.permissions().length == 0 && this.selectedTab() == 'roles') {
746
- if (this.groupOrRoleId() && this.levelRoles().length > 0) {
747
- const role = this.levelRoles()
748
- .map((levelRoles) => levelRoles.roles)
749
- .flat()
750
- .find((r) => r?.value === this.groupOrRoleId()?.toString());
751
- if (role) {
752
- this.selectedRole.set(this.groupOrRoleId().toString());
753
- this.permissionsFacade.selectRole(role.value);
754
- }
745
+ });
746
+ effect(() => {
747
+ if (this.selectedTab() !== 'roles' || this.loading()) {
748
+ return;
749
+ }
750
+ const roles = this.getRoles();
751
+ if (!roles.length) {
752
+ return;
753
+ }
754
+ const routeRoleValue = this.groupOrRoleId()?.toString();
755
+ const selectedRoleValue = this.selectedRoleValue();
756
+ const routeRole = routeRoleValue
757
+ ? roles.find((role) => role?.value === routeRoleValue)
758
+ : null;
759
+ if (routeRole) {
760
+ if (selectedRoleValue !== routeRole.value) {
761
+ this.selectedRole.set(routeRole.value);
762
+ this.permissionsFacade.selectRole(routeRole.value);
755
763
  }
764
+ return;
756
765
  }
766
+ if (selectedRoleValue &&
767
+ roles.some((role) => role?.value === selectedRoleValue)) {
768
+ return;
769
+ }
770
+ this.selectFirstRole(true);
757
771
  });
758
772
  }
759
773
  ngOnInit() {
@@ -782,6 +796,23 @@ class PermissionsPage {
782
796
  this.router.navigate(['roles', roleValue], { relativeTo: this.route });
783
797
  this.permissionsFacade.selectRole(roleValue);
784
798
  }
799
+ getRoles() {
800
+ return this.levelRoles()
801
+ .map((levelRoles) => levelRoles.roles ?? [])
802
+ .flat();
803
+ }
804
+ selectFirstRole(replaceUrl = false) {
805
+ const firstRoleValue = this.getRoles()[0]?.value;
806
+ if (!firstRoleValue) {
807
+ return;
808
+ }
809
+ this.selectedRole.set(firstRoleValue);
810
+ this.router.navigate(['roles', firstRoleValue], {
811
+ relativeTo: this.route,
812
+ replaceUrl,
813
+ });
814
+ this.permissionsFacade.selectRole(firstRoleValue);
815
+ }
785
816
  selectGroup(groupId) {
786
817
  this.router.navigate(['groups', groupId], { relativeTo: this.route });
787
818
  this.permissionsFacade.selectGroup(groupId);
@@ -791,7 +822,8 @@ class PermissionsPage {
791
822
  this.modal.openModal(PermissionsEditDialog, 'drawer', {
792
823
  header: this.translocoService.translate('permissions.setPermissions'),
793
824
  position: 'end',
794
- styleClass: '!w-[24%] !absolute !shadow-none',
825
+ styleClass: '!absolute !shadow-none',
826
+ responsivePreset: 'drawer-narrow',
795
827
  appendTo: 'page-content',
796
828
  inputValues: {
797
829
  permissionGroup: group,
@@ -830,15 +862,8 @@ class PermissionsPage {
830
862
  }
831
863
  onTabChange($event) {
832
864
  if ($event == 'roles') {
833
- // Navigate to first role if available
834
- const firstRole = this.levelRoles()
835
- .map((levelRoles) => levelRoles.roles)
836
- .flat()[0];
837
- if (firstRole?.value) {
838
- this.router.navigate(['roles', firstRole.value], {
839
- relativeTo: this.route,
840
- });
841
- this.permissionsFacade.selectRole(firstRole.value);
865
+ if (this.levelRoles().length) {
866
+ this.selectFirstRole();
842
867
  }
843
868
  else {
844
869
  this.router.navigate(['roles'], { relativeTo: this.route });
@@ -862,7 +887,7 @@ class PermissionsPage {
862
887
  this.permissionsFacade.reset();
863
888
  }
864
889
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsPage, deps: [], target: i0.ɵɵFactoryTarget.Component });
865
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PermissionsPage, isStandalone: true, selector: "mt-permissions-page", ngImport: i0, template: "<div id=\"permissions-page-card\" class=\"flex gap-4 p-1\">\r\n <div class=\"w-1/5 flex-shrink-0\">\r\n <mt-card class=\"h-full flex flex-col\">\r\n <ng-template #headless>\r\n <div class=\"flex flex-col h-full\">\r\n <div\r\n class=\"p-4 pb-0 bg-surface-50 rounded-t-2xl border-b border-surface\"\r\n >\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.rolesAndGroups\" | transloco }}\r\n </h2>\r\n\r\n <mt-tabs\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n (onChange)=\"onTabChange($event)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex-1 overflow-y-auto p-4\">\r\n @if (loading()) {\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n } @else {\r\n @if (selectedTab() === \"roles\") {\r\n @for (level of levelRoles(); track level) {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n <h2 class=\"font-semibold\">{{ level?.level?.display }}</h2>\r\n @for (role of level.roles; track role.value) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedRole() === role.value\"\r\n [class.hover:bg-surface]=\"selectedRole() !== role.value\"\r\n [class.border-primary-400]=\"\r\n selectedRole() === role.value\r\n \"\r\n [style.--p-avatar-background]=\"\r\n selectedRole() === role.value\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedRole() === role.value ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectRole(role.value)\"\r\n >\r\n <mt-avatar [icon]=\"'user.user-check-01'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ role.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noRolesFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noLevelRolesFound\" | transloco }}\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n @for (group of groups(); track group.name) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedGroup() === group.id\"\r\n [class.hover:bg-surface]=\"selectedGroup() !== group.id\"\r\n [class.border-primary-400]=\"selectedGroup() === group.id\"\r\n [style.--p-avatar-background]=\"\r\n selectedGroup() === group.id\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedGroup() === group.id ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectGroup(group.id)\"\r\n >\r\n <mt-avatar [icon]=\"'user.users-check'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ group.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noGroupsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n\r\n <div class=\"min-w-0 w-1/2\">\r\n @if (!selectedRole() && !selectedGroup()) {\r\n <mt-card class=\"h-full\">\r\n <ng-template #headless>\r\n <div class=\"flex items-center justify-center h-full text-muted-color\">\r\n {{ \"permissions.selectRoleOrGroupToViewPermissions\" | transloco }}\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n } @else {\r\n <mt-card class=\"h-full\">\r\n <div class=\"flex flex-col h-full\">\r\n <ng-template #headless>\r\n <div class=\"p-4 pb-2 mb-5 border-b border-surface\">\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.permissions\" | transloco }}\r\n </h2>\r\n </div>\r\n @if (permissionsLoading()) {\r\n <div class=\"mx-4\">\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"mb-5 p-3 mx-4 rounded-lg border-1 border-surface flex items-center justify-between\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'security.lock-unlocked-01'\"\r\n shape=\"square\"\r\n size=\"large\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + 'primary' + '-600)'\"\r\n >\r\n </mt-avatar>\r\n <div>\r\n <div class=\"text-sm font-semibold\">\r\n {{ \"permissions.setAllPermissions\" | transloco }}\r\n </div>\r\n <div class=\"text-xs text-muted-color\">\r\n {{ \"permissions.recommendedForSimpleForms\" | transloco }}\r\n </div>\r\n </div>\r\n </div>\r\n <mt-toggle-field\r\n [formControl]=\"allPermissionsToggle\"\r\n ></mt-toggle-field>\r\n </div>\r\n\r\n <div class=\"flex-1 px-4 overflow-y-auto border-t border-surface\">\r\n <div class=\"space-y-3 my-5\">\r\n @for (group of permissions(); track group.name) {\r\n <div\r\n class=\"p-2 border-1 border-surface rounded-lg flex items-center justify-between hover:bg-surface-100 transition-colors\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"text-sm\">{{ group.name?.display }}</span>\r\n </div>\r\n <mt-button\r\n [text]=\"true\"\r\n icon=\"custom.pencil\"\r\n severity=\"primary\"\r\n (click)=\"openPermissionDialog(group)\"\r\n >\r\n </mt-button>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noPermissionsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { 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: ToggleField, selector: "mt-toggle-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required", "toggleShape", "size", "icon", "descriptionCard"], outputs: ["onChange"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2$1.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
890
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PermissionsPage, isStandalone: true, selector: "mt-permissions-page", ngImport: i0, template: "<div id=\"permissions-page-card\" class=\"flex flex-col lg:flex-row gap-4 p-1\">\r\n <div class=\"w-full lg:w-1/4 xl:w-1/5 flex-shrink-0\">\r\n <mt-card class=\"h-full flex flex-col\">\r\n <ng-template #headless>\r\n <div class=\"flex flex-col h-full\">\r\n <div\r\n class=\"p-4 pb-0 bg-surface-50 rounded-t-2xl border-b border-surface\"\r\n >\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.rolesAndGroups\" | transloco }}\r\n </h2>\r\n\r\n <mt-tabs\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n (onChange)=\"onTabChange($event)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex-1 overflow-y-auto p-4\">\r\n @if (loading()) {\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n } @else {\r\n @if (selectedTab() === \"roles\") {\r\n @for (level of levelRoles(); track level) {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n <h2 class=\"font-semibold\">{{ level?.level?.display }}</h2>\r\n @for (role of level.roles; track role.value) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedRole() === role.value\"\r\n [class.hover:bg-surface]=\"selectedRole() !== role.value\"\r\n [class.border-primary-400]=\"\r\n selectedRole() === role.value\r\n \"\r\n [style.--p-avatar-background]=\"\r\n selectedRole() === role.value\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedRole() === role.value ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectRole(role.value)\"\r\n >\r\n <mt-avatar [icon]=\"'user.user-check-01'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ role.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noRolesFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noLevelRolesFound\" | transloco }}\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n @for (group of groups(); track group.name) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedGroup() === group.id\"\r\n [class.hover:bg-surface]=\"selectedGroup() !== group.id\"\r\n [class.border-primary-400]=\"selectedGroup() === group.id\"\r\n [style.--p-avatar-background]=\"\r\n selectedGroup() === group.id\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedGroup() === group.id ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectGroup(group.id)\"\r\n >\r\n <mt-avatar [icon]=\"'user.users-check'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ group.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noGroupsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n\r\n <div class=\"min-w-0 w-full lg:flex-1\">\r\n @if (!selectedRole() && !selectedGroup()) {\r\n <mt-card class=\"h-full\">\r\n <ng-template #headless>\r\n <div class=\"flex items-center justify-center h-full text-muted-color\">\r\n {{ \"permissions.selectRoleOrGroupToViewPermissions\" | transloco }}\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n } @else {\r\n <mt-card class=\"h-full\">\r\n <div class=\"flex flex-col h-full\">\r\n <ng-template #headless>\r\n <div class=\"p-4 pb-2 mb-5 border-b border-surface\">\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.permissions\" | transloco }}\r\n </h2>\r\n </div>\r\n @if (permissionsLoading()) {\r\n <div class=\"mx-4\">\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"mb-5 p-3 mx-4 rounded-lg border-1 border-surface flex items-center justify-between\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'security.lock-unlocked-01'\"\r\n shape=\"square\"\r\n size=\"large\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + 'primary' + '-600)'\"\r\n >\r\n </mt-avatar>\r\n <div>\r\n <div class=\"text-sm font-semibold\">\r\n {{ \"permissions.setAllPermissions\" | transloco }}\r\n </div>\r\n <div class=\"text-xs text-muted-color\">\r\n {{ \"permissions.recommendedForSimpleForms\" | transloco }}\r\n </div>\r\n </div>\r\n </div>\r\n <mt-toggle-field\r\n [formControl]=\"allPermissionsToggle\"\r\n ></mt-toggle-field>\r\n </div>\r\n\r\n <div class=\"flex-1 px-4 overflow-y-auto border-t border-surface\">\r\n <div class=\"space-y-3 my-5\">\r\n @for (group of permissions(); track group.name) {\r\n <div\r\n class=\"p-2 border-1 border-surface rounded-lg flex items-center justify-between hover:bg-surface-100 transition-colors\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"text-sm\">{{ group.name?.display }}</span>\r\n </div>\r\n <mt-button\r\n [text]=\"true\"\r\n icon=\"custom.pencil\"\r\n severity=\"primary\"\r\n (click)=\"openPermissionDialog(group)\"\r\n >\r\n </mt-button>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noPermissionsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { 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: ToggleField, selector: "mt-toggle-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required", "toggleShape", "size", "icon", "descriptionCard"], outputs: ["onChange"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2$1.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
866
891
  }
867
892
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PermissionsPage, decorators: [{
868
893
  type: Component,
@@ -876,7 +901,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
876
901
  Avatar,
877
902
  SkeletonModule,
878
903
  Tabs,
879
- ], template: "<div id=\"permissions-page-card\" class=\"flex gap-4 p-1\">\r\n <div class=\"w-1/5 flex-shrink-0\">\r\n <mt-card class=\"h-full flex flex-col\">\r\n <ng-template #headless>\r\n <div class=\"flex flex-col h-full\">\r\n <div\r\n class=\"p-4 pb-0 bg-surface-50 rounded-t-2xl border-b border-surface\"\r\n >\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.rolesAndGroups\" | transloco }}\r\n </h2>\r\n\r\n <mt-tabs\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n (onChange)=\"onTabChange($event)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex-1 overflow-y-auto p-4\">\r\n @if (loading()) {\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n } @else {\r\n @if (selectedTab() === \"roles\") {\r\n @for (level of levelRoles(); track level) {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n <h2 class=\"font-semibold\">{{ level?.level?.display }}</h2>\r\n @for (role of level.roles; track role.value) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedRole() === role.value\"\r\n [class.hover:bg-surface]=\"selectedRole() !== role.value\"\r\n [class.border-primary-400]=\"\r\n selectedRole() === role.value\r\n \"\r\n [style.--p-avatar-background]=\"\r\n selectedRole() === role.value\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedRole() === role.value ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectRole(role.value)\"\r\n >\r\n <mt-avatar [icon]=\"'user.user-check-01'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ role.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noRolesFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noLevelRolesFound\" | transloco }}\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n @for (group of groups(); track group.name) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedGroup() === group.id\"\r\n [class.hover:bg-surface]=\"selectedGroup() !== group.id\"\r\n [class.border-primary-400]=\"selectedGroup() === group.id\"\r\n [style.--p-avatar-background]=\"\r\n selectedGroup() === group.id\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedGroup() === group.id ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectGroup(group.id)\"\r\n >\r\n <mt-avatar [icon]=\"'user.users-check'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ group.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noGroupsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n\r\n <div class=\"min-w-0 w-1/2\">\r\n @if (!selectedRole() && !selectedGroup()) {\r\n <mt-card class=\"h-full\">\r\n <ng-template #headless>\r\n <div class=\"flex items-center justify-center h-full text-muted-color\">\r\n {{ \"permissions.selectRoleOrGroupToViewPermissions\" | transloco }}\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n } @else {\r\n <mt-card class=\"h-full\">\r\n <div class=\"flex flex-col h-full\">\r\n <ng-template #headless>\r\n <div class=\"p-4 pb-2 mb-5 border-b border-surface\">\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.permissions\" | transloco }}\r\n </h2>\r\n </div>\r\n @if (permissionsLoading()) {\r\n <div class=\"mx-4\">\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"mb-5 p-3 mx-4 rounded-lg border-1 border-surface flex items-center justify-between\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'security.lock-unlocked-01'\"\r\n shape=\"square\"\r\n size=\"large\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + 'primary' + '-600)'\"\r\n >\r\n </mt-avatar>\r\n <div>\r\n <div class=\"text-sm font-semibold\">\r\n {{ \"permissions.setAllPermissions\" | transloco }}\r\n </div>\r\n <div class=\"text-xs text-muted-color\">\r\n {{ \"permissions.recommendedForSimpleForms\" | transloco }}\r\n </div>\r\n </div>\r\n </div>\r\n <mt-toggle-field\r\n [formControl]=\"allPermissionsToggle\"\r\n ></mt-toggle-field>\r\n </div>\r\n\r\n <div class=\"flex-1 px-4 overflow-y-auto border-t border-surface\">\r\n <div class=\"space-y-3 my-5\">\r\n @for (group of permissions(); track group.name) {\r\n <div\r\n class=\"p-2 border-1 border-surface rounded-lg flex items-center justify-between hover:bg-surface-100 transition-colors\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"text-sm\">{{ group.name?.display }}</span>\r\n </div>\r\n <mt-button\r\n [text]=\"true\"\r\n icon=\"custom.pencil\"\r\n severity=\"primary\"\r\n (click)=\"openPermissionDialog(group)\"\r\n >\r\n </mt-button>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noPermissionsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n" }]
904
+ ], template: "<div id=\"permissions-page-card\" class=\"flex flex-col lg:flex-row gap-4 p-1\">\r\n <div class=\"w-full lg:w-1/4 xl:w-1/5 flex-shrink-0\">\r\n <mt-card class=\"h-full flex flex-col\">\r\n <ng-template #headless>\r\n <div class=\"flex flex-col h-full\">\r\n <div\r\n class=\"p-4 pb-0 bg-surface-50 rounded-t-2xl border-b border-surface\"\r\n >\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.rolesAndGroups\" | transloco }}\r\n </h2>\r\n\r\n <mt-tabs\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n (onChange)=\"onTabChange($event)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex-1 overflow-y-auto p-4\">\r\n @if (loading()) {\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n } @else {\r\n @if (selectedTab() === \"roles\") {\r\n @for (level of levelRoles(); track level) {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n <h2 class=\"font-semibold\">{{ level?.level?.display }}</h2>\r\n @for (role of level.roles; track role.value) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedRole() === role.value\"\r\n [class.hover:bg-surface]=\"selectedRole() !== role.value\"\r\n [class.border-primary-400]=\"\r\n selectedRole() === role.value\r\n \"\r\n [style.--p-avatar-background]=\"\r\n selectedRole() === role.value\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedRole() === role.value ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectRole(role.value)\"\r\n >\r\n <mt-avatar [icon]=\"'user.user-check-01'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ role.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noRolesFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noLevelRolesFound\" | transloco }}\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n @for (group of groups(); track group.name) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedGroup() === group.id\"\r\n [class.hover:bg-surface]=\"selectedGroup() !== group.id\"\r\n [class.border-primary-400]=\"selectedGroup() === group.id\"\r\n [style.--p-avatar-background]=\"\r\n selectedGroup() === group.id\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedGroup() === group.id ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectGroup(group.id)\"\r\n >\r\n <mt-avatar [icon]=\"'user.users-check'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ group.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noGroupsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n\r\n <div class=\"min-w-0 w-full lg:flex-1\">\r\n @if (!selectedRole() && !selectedGroup()) {\r\n <mt-card class=\"h-full\">\r\n <ng-template #headless>\r\n <div class=\"flex items-center justify-center h-full text-muted-color\">\r\n {{ \"permissions.selectRoleOrGroupToViewPermissions\" | transloco }}\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n } @else {\r\n <mt-card class=\"h-full\">\r\n <div class=\"flex flex-col h-full\">\r\n <ng-template #headless>\r\n <div class=\"p-4 pb-2 mb-5 border-b border-surface\">\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.permissions\" | transloco }}\r\n </h2>\r\n </div>\r\n @if (permissionsLoading()) {\r\n <div class=\"mx-4\">\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"mb-5 p-3 mx-4 rounded-lg border-1 border-surface flex items-center justify-between\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'security.lock-unlocked-01'\"\r\n shape=\"square\"\r\n size=\"large\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + 'primary' + '-600)'\"\r\n >\r\n </mt-avatar>\r\n <div>\r\n <div class=\"text-sm font-semibold\">\r\n {{ \"permissions.setAllPermissions\" | transloco }}\r\n </div>\r\n <div class=\"text-xs text-muted-color\">\r\n {{ \"permissions.recommendedForSimpleForms\" | transloco }}\r\n </div>\r\n </div>\r\n </div>\r\n <mt-toggle-field\r\n [formControl]=\"allPermissionsToggle\"\r\n ></mt-toggle-field>\r\n </div>\r\n\r\n <div class=\"flex-1 px-4 overflow-y-auto border-t border-surface\">\r\n <div class=\"space-y-3 my-5\">\r\n @for (group of permissions(); track group.name) {\r\n <div\r\n class=\"p-2 border-1 border-surface rounded-lg flex items-center justify-between hover:bg-surface-100 transition-colors\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"text-sm\">{{ group.name?.display }}</span>\r\n </div>\r\n <mt-button\r\n [text]=\"true\"\r\n icon=\"custom.pencil\"\r\n severity=\"primary\"\r\n (click)=\"openPermissionDialog(group)\"\r\n >\r\n </mt-button>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noPermissionsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n" }]
880
905
  }], ctorParameters: () => [] });
881
906
 
882
907
  // store/index.ts
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-permissions.mjs","sources":["../../../../packages/masterteam/permissions/src/store/permissions/permissions.model.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.actions.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.state.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.facade.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-edit-dialog/permissions-edit-dialog.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-edit-dialog/permissions-edit-dialog.html","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-page.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-page.html","../../../../packages/masterteam/permissions/src/store/index.ts","../../../../packages/masterteam/permissions/src/masterteam-permissions.ts"],"sourcesContent":["import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport interface Role {\r\n name: string;\r\n value: string;\r\n}\r\nexport interface LevelRoles {\r\n level?: string;\r\n levelKey?: string;\r\n scopeType?: string;\r\n scopeId?: string;\r\n roles?: Role[];\r\n}\r\n\r\nexport interface PermissionAction {\r\n id: number;\r\n name: string;\r\n isSelected: boolean;\r\n}\r\n\r\nexport interface PermissionLog {\r\n name: string;\r\n actions: PermissionAction[];\r\n}\r\n\r\nexport interface LevelPermission {\r\n levelName: string;\r\n modules: PermissionLog[];\r\n}\r\n\r\nexport interface RolesResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: LevelRoles[];\r\n cacheSession: string;\r\n}\r\n\r\nexport interface PermissionsResponseData {\r\n modules: PermissionLog[];\r\n}\r\n\r\nexport interface PermissionsResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: PermissionsResponseData;\r\n cacheSession: string;\r\n}\r\n\r\nexport interface GroupPermissionsResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: LevelPermission[];\r\n cacheSession: string;\r\n}\r\n\r\nexport interface UpdatePermissionPayload {\r\n roleValue: string;\r\n levelId: string;\r\n permissions: LevelPermission[];\r\n}\r\n\r\nexport enum PermissionsActionKey {\r\n LoadRoles = 'loadRoles',\r\n SelectRole = 'selectRole',\r\n SelectGroup = 'selectGroup',\r\n LoadPermissions = 'loadPermissions',\r\n LoadGroupPermissions = 'loadGroupPermissions',\r\n UpdatePermission = 'updatePermission',\r\n UpdateGroupPermission = 'updateGroupPermission',\r\n ToggleAllLevelPermissions = 'toggleAllLevelPermissions',\r\n ToggleAllGroupPermissions = 'toggleAllGroupPermissions',\r\n}\r\n\r\nexport interface PermissionsStateModel extends LoadingStateShape<PermissionsActionKey> {\r\n roles: LevelRoles[];\r\n selectedRoleValue: string | null;\r\n selectedGroupValue: string | number | null;\r\n permissions: PermissionLog[];\r\n groupPermissions: LevelPermission[];\r\n currentLevelId: string | null;\r\n moduleType: string;\r\n moduleId: string | number;\r\n parentModuleType?: string | null;\r\n parentModuleId?: string | number | null;\r\n parentPath?: string;\r\n}\r\n\r\nexport enum ModuleType {\r\n LEVEL = 'level',\r\n LOG = 'log',\r\n LEVELLOG = 'levelLog',\r\n}\r\n","export class LoadRoles {\r\n static readonly type = '[Permissions] Load Roles';\r\n constructor() {}\r\n}\r\n\r\nexport class SelectRole {\r\n static readonly type = '[Permissions] Select Role';\r\n constructor(public roleValue: string) {}\r\n}\r\n\r\nexport class SelectGroup {\r\n static readonly type = '[Permissions] Select Group';\r\n constructor(public groupId: number) {}\r\n}\r\n\r\nexport class LoadPermissions {\r\n static readonly type = '[Permissions] Load Permissions';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class LoadGroupPermissions {\r\n static readonly type = '[Permissions] Load Group Permissions';\r\n constructor(\r\n public groupId: number,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class UpdatePermissionLocally {\r\n static readonly type = '[Permissions] Update Permission Locally';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n public actionId: number,\r\n public isSelected: boolean,\r\n ) {}\r\n}\r\n\r\nexport class UpdatePermission {\r\n static readonly type = '[Permissions] Update Permission';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class UpdateGroupPermission {\r\n static readonly type = '[Permissions] Update Group Permission';\r\n constructor(\r\n public groupId: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class ToggleAllLevelPermissions {\r\n static readonly type = '[Permissions] Toggle All Level Permissions';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n public levelName: string,\r\n public enabled: boolean,\r\n ) {}\r\n}\r\n\r\nexport class ToggleAllGroupPermissions {\r\n static readonly type = '[Permissions] Toggle All Group Permissions';\r\n constructor(\r\n public levelId: string,\r\n public groupId: string,\r\n public enabled: boolean,\r\n ) {}\r\n}\r\n\r\nexport class SetModuleInfo {\r\n static readonly type = '[Permissions] Set Module Info';\r\n\r\n constructor(\r\n public readonly moduleType: string,\r\n public readonly moduleId: string | number,\r\n public readonly parentModuleType?: string,\r\n public readonly parentModuleId?: string | number,\r\n public readonly parentPath?: string,\r\n ) {}\r\n}\r\n\r\nexport class Reset {\r\n static readonly type = '[Permissions] Reset Module Info';\r\n\r\n constructor() {}\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { map } from 'rxjs';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\nimport {\r\n GroupPermissionsResponse,\r\n LevelPermission,\r\n LevelRoles,\r\n ModuleType,\r\n PermissionLog,\r\n PermissionsResponse,\r\n PermissionsActionKey,\r\n PermissionsStateModel,\r\n RolesResponse,\r\n} from './permissions.model';\r\nimport * as PermissionsActions from './permissions.actions';\r\n\r\n@State<PermissionsStateModel>({\r\n name: 'permissions',\r\n defaults: {\r\n roles: [],\r\n selectedRoleValue: null,\r\n selectedGroupValue: null,\r\n permissions: [],\r\n groupPermissions: [],\r\n currentLevelId: null,\r\n moduleType: '',\r\n moduleId: '',\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n loadingActive: [], // Required by LoadingStateShape\r\n errors: {}, // Required by LoadingStateShape\r\n },\r\n})\r\n@Injectable()\r\nexport class PermissionsState extends CrudStateBase<\r\n LevelRoles,\r\n PermissionsStateModel,\r\n PermissionsActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n\r\n // ============================================================================\r\n // Data Selectors - Individual for fine-grained reactivity\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getRoles(state: PermissionsStateModel): LevelRoles[] {\r\n return state.roles;\r\n }\r\n\r\n @Selector()\r\n static getSelectedRoleValue(state: PermissionsStateModel): string | null {\r\n return state.selectedRoleValue;\r\n }\r\n\r\n @Selector()\r\n static getSelectedGroupValue(\r\n state: PermissionsStateModel,\r\n ): string | number | null {\r\n return state.selectedGroupValue;\r\n }\r\n\r\n @Selector()\r\n static getPermissions(state: PermissionsStateModel): PermissionLog[] {\r\n return state.permissions;\r\n }\r\n\r\n @Selector()\r\n static getGroupPermissions(state: PermissionsStateModel): LevelPermission[] {\r\n return state.groupPermissions;\r\n }\r\n\r\n @Selector()\r\n static getModuleType(state: PermissionsStateModel): string {\r\n return state.moduleType;\r\n }\r\n\r\n @Selector()\r\n static getModuleId(state: PermissionsStateModel): string | number {\r\n return state.moduleId;\r\n }\r\n\r\n @Selector()\r\n static getLevelId(state: PermissionsStateModel): string {\r\n return state.moduleType === 'module'\r\n ? state.parentModuleId!.toString()\r\n : state.moduleId.toString();\r\n }\r\n\r\n // ============================================================================\r\n // Loading/Error Slice Selectors - REQUIRED for optimal performance\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getLoadingActive(state: PermissionsStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: PermissionsStateModel,\r\n ): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n // ============================================================================\r\n // CRUD Actions\r\n // ============================================================================\r\n\r\n // ============================================================================\r\n // CRUD Actions\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.LoadRoles)\r\n loadRoles(ctx: StateContext<PermissionsStateModel>) {\r\n const { moduleType, moduleId, parentPath } = ctx.getState();\r\n const state = ctx.getState();\r\n const req$ = this.http\r\n .get<RolesResponse>(\r\n `identity/roles${parentPath ? '' : '/scopes'}${parentPath}/${moduleType}/${moduleId}${parentPath ? '' : '?inherited=true'}`,\r\n )\r\n .pipe(map((response) => response.data));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadRoles,\r\n request$: req$,\r\n onSuccess: (roles: any) => ({\r\n roles: state.moduleType === 'module' ? [{ roles: roles }] : roles,\r\n currentLevelId: moduleId.toString() || '',\r\n }),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Simple State Updates (No HTTP)\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.SelectRole)\r\n selectRole(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SelectRole,\r\n ) {\r\n const state = ctx.getState();\r\n ctx.patchState({ selectedRoleValue: action.roleValue });\r\n\r\n if (state.currentLevelId && action.roleValue) {\r\n ctx.dispatch(\r\n new PermissionsActions.LoadPermissions(\r\n action.roleValue,\r\n state.currentLevelId,\r\n ),\r\n );\r\n }\r\n }\r\n\r\n @Action(PermissionsActions.SelectGroup)\r\n selectGroup(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SelectGroup,\r\n ) {\r\n const state = ctx.getState();\r\n ctx.patchState({ selectedGroupValue: action.groupId });\r\n\r\n if (state.currentLevelId) {\r\n ctx.dispatch(\r\n new PermissionsActions.LoadGroupPermissions(\r\n action.groupId,\r\n state.currentLevelId,\r\n ),\r\n );\r\n }\r\n }\r\n\r\n @Action(PermissionsActions.LoadPermissions)\r\n loadPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.LoadPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n const modulePath =\r\n state.moduleType === 'module' ? `module/${state.moduleId}/` : '';\r\n const levelId =\r\n state.moduleType === 'module' ? state.parentModuleId! : state.moduleId;\r\n\r\n const req$ = this.http\r\n .get<PermissionsResponse>(\r\n `identity/roles/level/${levelId}/${modulePath}${action.roleValue}/permissions`,\r\n )\r\n .pipe(map((response) => response.data.modules));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadPermissions,\r\n request$: req$,\r\n onSuccess: (permissions) => ({\r\n permissions,\r\n }),\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.LoadGroupPermissions)\r\n loadGroupPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.LoadGroupPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n const modulePath =\r\n state.moduleType === 'module' ? `module/${state.moduleId}/` : '';\r\n const levelId =\r\n state.moduleType === 'module' ? state.parentModuleId! : state.moduleId;\r\n\r\n const req$ = this.http\r\n .get<GroupPermissionsResponse>(\r\n `identity/groups/level/${levelId}/${modulePath}${action.groupId}/permissions`,\r\n )\r\n .pipe(map((response: any) => response.data.modules));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadPermissions,\r\n request$: req$,\r\n onSuccess: (permissions) => ({\r\n permissions,\r\n }),\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.UpdatePermissionLocally)\r\n updatePermissionLocally(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdatePermissionLocally,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions = state.permissions.map((log) => ({\r\n ...log,\r\n actions: log.actions.map((act) =>\r\n act.id === action.actionId\r\n ? { ...act, isSelected: action.isSelected }\r\n : act,\r\n ),\r\n }));\r\n\r\n ctx.patchState({ permissions: updatedPermissions });\r\n }\r\n\r\n // ============================================================================\r\n // Complex Operations - use handleApiRequest for transformations\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.UpdatePermission)\r\n updatePermission(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdatePermission,\r\n ) {\r\n const state = ctx.getState();\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: a?.isSelected });\r\n });\r\n });\r\n const scopeId =\r\n state.moduleType === 'module' ? state.parentModuleId! : state.moduleId;\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/roles/${action.roleValue}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n {\r\n params: {\r\n scopeId,\r\n scopeType: ModuleType.LEVEL,\r\n },\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.UpdatePermission,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: (error, currentState) => {\r\n // Rollback on error\r\n return { permissions: currentState.permissions };\r\n },\r\n errorMessage: 'Failed to update permission',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.UpdateGroupPermission)\r\n updateGroupPermission(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdateGroupPermission,\r\n ) {\r\n const state = ctx.getState();\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: a?.isSelected });\r\n });\r\n });\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/groups/${action.groupId}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.UpdateGroupPermission,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: (error, currentState) => {\r\n // Rollback on error\r\n return { permissions: currentState.permissions };\r\n },\r\n errorMessage: 'Failed to update permission',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.ToggleAllLevelPermissions)\r\n toggleAllLevelPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.ToggleAllLevelPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: action.enabled });\r\n });\r\n });\r\n\r\n const scopeId =\r\n state.moduleType === 'module' ? state.parentModuleId! : state.moduleId;\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/roles/${action.roleValue}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n {\r\n params: {\r\n scopeId,\r\n scopeType: ModuleType.LEVEL,\r\n },\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.ToggleAllLevelPermissions,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: () => ({\r\n permissions: state.permissions,\r\n }),\r\n errorMessage: 'Failed to toggle all permissions',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.ToggleAllGroupPermissions)\r\n toggleAllGroupPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.ToggleAllGroupPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: action.enabled });\r\n });\r\n });\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/groups/${action.groupId}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.ToggleAllGroupPermissions,\r\n request$: req$,\r\n onSuccess: () => ({\r\n groupPermissions: updatedPermissions,\r\n }),\r\n onError: () => ({\r\n groupPermissions: state.groupPermissions,\r\n }),\r\n errorMessage: 'Failed to toggle all permissions',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.SetModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SetModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.Reset)\r\n reset(ctx: StateContext<PermissionsStateModel>) {\r\n ctx.patchState({\r\n moduleType: '',\r\n moduleId: '',\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n roles: [],\r\n selectedRoleValue: null,\r\n selectedGroupValue: null,\r\n permissions: [],\r\n groupPermissions: [],\r\n });\r\n }\r\n}\r\n","import { inject, Injectable, computed } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\nimport { PermissionsState } from './permissions.state';\r\nimport * as PermissionsActions from './permissions.actions';\r\nimport { Observable } from 'rxjs';\r\nimport { PermissionsActionKey } from './permissions.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PermissionsFacade {\r\n private store = inject(Store);\r\n\r\n // ============================================================================\r\n // Data Selectors - Memoized by NGXS (fine-grained reactivity)\r\n // ============================================================================\r\n readonly roles = select(PermissionsState.getRoles);\r\n readonly selectedRoleValue = select(PermissionsState.getSelectedRoleValue);\r\n readonly selectedGroupValue = select(PermissionsState.getSelectedGroupValue);\r\n readonly permissions = select(PermissionsState.getPermissions);\r\n readonly groupPermissions = select(PermissionsState.getGroupPermissions);\r\n readonly moduleType = select(PermissionsState.getModuleType);\r\n readonly moduleId = select(PermissionsState.getModuleId);\r\n readonly levelId = select(PermissionsState.getLevelId);\r\n\r\n // ============================================================================\r\n // Loading/Error Slices - Memoized by NGXS\r\n // ============================================================================\r\n private readonly loadingActive = select(PermissionsState.getLoadingActive);\r\n private readonly errors = select(PermissionsState.getErrors);\r\n\r\n // ============================================================================\r\n // Loading Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly isLoadingRoles = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadRoles),\r\n );\r\n readonly isLoadingPermissions = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadPermissions),\r\n );\r\n readonly isLoadingGroupPermissions = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadGroupPermissions),\r\n );\r\n readonly isUpdatingPermission = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.UpdatePermission),\r\n );\r\n readonly isUpdatingGroupPermission = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.UpdateGroupPermission),\r\n );\r\n readonly isTogglingLevelPermissions = computed(() =>\r\n this.loadingActive().includes(\r\n PermissionsActionKey.ToggleAllLevelPermissions,\r\n ),\r\n );\r\n readonly isTogglingGroupPermissions = computed(() =>\r\n this.loadingActive().includes(\r\n PermissionsActionKey.ToggleAllGroupPermissions,\r\n ),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly rolesError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadRoles] ?? null,\r\n );\r\n readonly permissionsError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadPermissions] ?? null,\r\n );\r\n readonly groupPermissionsError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadGroupPermissions] ?? null,\r\n );\r\n readonly updatePermissionError = computed(\r\n () => this.errors()[PermissionsActionKey.UpdatePermission] ?? null,\r\n );\r\n readonly updateGroupPermissionError = computed(\r\n () => this.errors()[PermissionsActionKey.UpdateGroupPermission] ?? null,\r\n );\r\n\r\n // ============================================================================\r\n // Action Dispatchers\r\n // ============================================================================\r\n\r\n loadRoles() {\r\n return this.store.dispatch(new PermissionsActions.LoadRoles());\r\n }\r\n\r\n selectRole(roleValue: string) {\r\n if (roleValue) {\r\n return this.store.dispatch(new PermissionsActions.SelectRole(roleValue));\r\n }\r\n return;\r\n }\r\n\r\n selectGroup(groupId: number) {\r\n if (groupId) {\r\n return this.store.dispatch(new PermissionsActions.SelectGroup(groupId));\r\n }\r\n return;\r\n }\r\n\r\n loadPermissions(roleValue: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.LoadPermissions(roleValue, levelId),\r\n );\r\n }\r\n\r\n loadGroupPermissions(groupId: number, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.LoadGroupPermissions(groupId, levelId),\r\n );\r\n }\r\n\r\n updatePermissionLocally(\r\n roleValue: string,\r\n levelId: string,\r\n actionId: number,\r\n isSelected: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdatePermissionLocally(\r\n roleValue,\r\n levelId,\r\n actionId,\r\n isSelected,\r\n ),\r\n );\r\n }\r\n\r\n updatePermission(roleValue: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdatePermission(roleValue, levelId),\r\n );\r\n }\r\n updateGroupPermission(groupId: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdateGroupPermission(groupId, levelId),\r\n );\r\n }\r\n\r\n toggleAllLevelPermissions(\r\n roleValue: string,\r\n levelId: string,\r\n levelName: string,\r\n enabled: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.ToggleAllLevelPermissions(\r\n roleValue,\r\n levelId,\r\n levelName,\r\n enabled,\r\n ),\r\n );\r\n }\r\n toggleAllGroupPermissions(\r\n levelId: string,\r\n groupId: string,\r\n enabled: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.ToggleAllGroupPermissions(\r\n levelId,\r\n groupId,\r\n enabled,\r\n ),\r\n );\r\n }\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new PermissionsActions.SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n reset() {\r\n return this.store.dispatch(new PermissionsActions.Reset());\r\n }\r\n}\r\n","import {\r\n Component,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { PermissionsFacade } from '../../../store/permissions/permissions.facade';\r\nimport {\r\n PermissionLog,\r\n PermissionAction,\r\n} from '../../../store/permissions/permissions.model';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-permissions-edit-dialog',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n ToggleField,\r\n TranslocoModule,\r\n FormsModule,\r\n Button,\r\n ],\r\n templateUrl: './permissions-edit-dialog.html',\r\n styleUrl: './permissions-edit-dialog.scss',\r\n})\r\nexport class PermissionsEditDialog {\r\n private permissionsFacade = inject(PermissionsFacade);\r\n modal = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n // permissionGroup = input.required<PermissionLog | null>();\r\n permissionGroup = input<PermissionLog | null>(null);\r\n\r\n // Use new facade pattern\r\n addPermissionsLoading = this.permissionsFacade.isUpdatingPermission;\r\n addPermissionsError = this.permissionsFacade.updatePermissionError;\r\n\r\n levelId = input.required<string>();\r\n roleValue = input.required<string>();\r\n isGroup = input.required<boolean>();\r\n\r\n closeDialog = output<void>();\r\n\r\n actionControls = signal<Map<number, FormControl>>(new Map());\r\n toggleAll = signal<boolean>(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n const group = this.permissionGroup();\r\n if (group) {\r\n const controls = new Map<number, FormControl>();\r\n group.actions.forEach((action) => {\r\n const control = new FormControl(action.isSelected);\r\n control.valueChanges.subscribe((value) => {\r\n if (value !== null) {\r\n this.onPermissionToggle(action.id, value);\r\n }\r\n });\r\n controls.set(action.id, control);\r\n });\r\n this.actionControls.set(controls);\r\n this.toggleAll.set(group.actions.every((action) => action.isSelected));\r\n }\r\n });\r\n }\r\n\r\n onPermissionToggle(actionId: number, isSelected: boolean) {\r\n const levelId = this.levelId();\r\n const roleValue = this.roleValue();\r\n if (levelId && roleValue) {\r\n this.permissionsFacade.updatePermissionLocally(\r\n roleValue,\r\n levelId,\r\n actionId,\r\n isSelected,\r\n );\r\n }\r\n }\r\n\r\n onClose() {\r\n // this.closeDialog.emit();\r\n this.ref.close();\r\n }\r\n\r\n trackByActionId(_index: number, action: PermissionAction) {\r\n return action.id;\r\n }\r\n\r\n getControl(actionId: number): FormControl {\r\n return this.actionControls().get(actionId) || new FormControl(false);\r\n }\r\n\r\n onSave(): void {\r\n const levelId = this.levelId();\r\n const roleValue = this.roleValue();\r\n const isGroup = this.isGroup();\r\n if (levelId && roleValue) {\r\n let subscription;\r\n if (isGroup) {\r\n subscription = this.permissionsFacade.updateGroupPermission(\r\n roleValue,\r\n levelId,\r\n );\r\n } else {\r\n subscription = this.permissionsFacade.updatePermission(\r\n roleValue,\r\n levelId,\r\n );\r\n }\r\n subscription.subscribe({\r\n next: () => {\r\n this.onClose();\r\n },\r\n error: (error: any) => {\r\n console.error('Failed to save accessibility permissions:', error);\r\n },\r\n });\r\n }\r\n }\r\n\r\n selectAll() {\r\n const group = this.permissionGroup();\r\n const actions = group?.actions || [];\r\n for (let i = 0; i < actions?.length; i++) {\r\n const control = this.actionControls().get(actions[i].id);\r\n control?.setValue(this.toggleAll());\r\n }\r\n }\r\n}\r\n","<div [class]=\"'flex flex-col gap-3 p-4 ' + modal.contentClass\">\r\n @if (permissionGroup(); as group) {\r\n <div\r\n class=\"flex items-center justify-between border rounded-lg p-3 border-surface mb-4\"\r\n >\r\n <span class=\"text-sm font-medium\">{{\r\n \"permissions.selectAll\" | transloco\r\n }}</span>\r\n <mt-toggle-field\r\n [(ngModel)]=\"toggleAll\"\r\n (onChange)=\"selectAll()\"\r\n ></mt-toggle-field>\r\n </div>\r\n @for (action of group.actions; track trackByActionId($index, action)) {\r\n <div\r\n class=\"flex items-center justify-between border rounded-lg p-3 border-surface\"\r\n >\r\n <span class=\"text-sm font-medium\">{{ action.name?.display }}</span>\r\n <mt-toggle-field\r\n [formControl]=\"getControl(action.id)\"\r\n ></mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n</div>\r\n<div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"'save'\"\r\n (click)=\"onSave()\"\r\n [loading]=\"addPermissionsLoading()\"\r\n />\r\n</div>\r\n","import {\r\n Component,\r\n computed,\r\n DestroyRef,\r\n effect,\r\n inject,\r\n linkedSignal,\r\n OnDestroy,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { PermissionsFacade } from '../../store/permissions/permissions.facade';\r\nimport { PermissionLog } from '../../store/permissions/permissions.model';\r\nimport { PermissionsEditDialog } from './permissions-edit-dialog/permissions-edit-dialog';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { AccessibilitiesFacade } from '@masterteam/accessibilities';\r\n\r\n@Component({\r\n selector: 'mt-permissions-page',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n Card,\r\n Button,\r\n ToggleField,\r\n TranslocoModule,\r\n Avatar,\r\n SkeletonModule,\r\n Tabs,\r\n ],\r\n templateUrl: './permissions-page.html',\r\n styleUrl: './permissions-page.scss',\r\n})\r\nexport default class PermissionsPage implements OnInit, OnDestroy {\r\n private readonly permissionsFacade = inject(PermissionsFacade);\r\n private readonly accessibilitiesFacade: any = inject(AccessibilitiesFacade);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly router = inject(Router);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly modal = inject(ModalService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n private readonly defaultLevelName = 'Project';\r\n\r\n // Use new facade pattern\r\n levelRoles = this.permissionsFacade.roles;\r\n selectedRoleValue = this.permissionsFacade.selectedRoleValue;\r\n selectedRole = linkedSignal(this.selectedRoleValue);\r\n selectedGroupValue = this.permissionsFacade.selectedGroupValue;\r\n selectedGroup = linkedSignal(this.selectedGroupValue);\r\n permissions = this.permissionsFacade.permissions;\r\n loading = this.permissionsFacade.isLoadingRoles;\r\n permissionsLoading = this.permissionsFacade.isLoadingPermissions;\r\n levelId = this.permissionsFacade.levelId;\r\n groups = this.accessibilitiesFacade.groups;\r\n\r\n allPermissionsToggle = new FormControl<boolean>(false);\r\n\r\n readonly groupOrRoleId = computed(() => {\r\n const idParam = this.route.snapshot.firstChild?.paramMap.get('id');\r\n return idParam ? idParam : '';\r\n });\r\n\r\n readonly selectedTabFromParams = computed(() => {\r\n const idParam = this.route.snapshot.firstChild?.data['selectedTab'];\r\n return idParam ? idParam : 'roles';\r\n });\r\n\r\n selectedTab = linkedSignal<string>(this.selectedTabFromParams);\r\n tabsList = signal<any[]>([\r\n {\r\n label: this.translocoService.translate('permissions.roles'),\r\n value: 'roles',\r\n },\r\n {\r\n label: this.translocoService.translate('permissions.groups'),\r\n value: 'groups',\r\n },\r\n ]);\r\n firstLoad = signal(true);\r\n\r\n constructor() {\r\n effect(() => {\r\n const allEnabled = this.isAllPermissionsEnabled();\r\n this.allPermissionsToggle.setValue(allEnabled, { emitEvent: false });\r\n });\r\n effect(() => {\r\n if (this.selectedTab() == 'roles') {\r\n if (this.levelRoles().length == 0) {\r\n if (this.firstLoad() && !this.loading()) {\r\n this.permissionsFacade.loadRoles();\r\n this.firstLoad.set(false);\r\n }\r\n return;\r\n }\r\n }\r\n if (this.permissions().length == 0 && this.selectedTab() == 'roles') {\r\n if (this.groupOrRoleId() && this.levelRoles().length > 0) {\r\n const role = this.levelRoles()\r\n .map((levelRoles) => levelRoles.roles)\r\n .flat()\r\n .find((r) => r?.value === this.groupOrRoleId()?.toString());\r\n if (role) {\r\n this.selectedRole.set(this.groupOrRoleId().toString());\r\n this.permissionsFacade.selectRole(role.value);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.permissionsFacade.selectRole('');\r\n this.route.parent?.paramMap\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((params) => {\r\n const levelIdFromRoute = params.get('levelId');\r\n\r\n if (levelIdFromRoute) {\r\n this.permissionsFacade.reset();\r\n this.permissionsFacade.setModuleInfo('level', levelIdFromRoute);\r\n this.permissionsFacade.loadRoles();\r\n }\r\n });\r\n this.permissionsFacade.loadRoles();\r\n this.accessibilitiesFacade.getGroups();\r\n\r\n this.allPermissionsToggle.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((value) => {\r\n if (value !== null) {\r\n this.onToggleAllLevel(this.defaultLevelName, value);\r\n }\r\n });\r\n }\r\n\r\n selectRole(roleValue: string): void {\r\n this.router.navigate(['roles', roleValue], { relativeTo: this.route });\r\n this.permissionsFacade.selectRole(roleValue);\r\n }\r\n\r\n selectGroup(groupId: number): void {\r\n this.router.navigate(['groups', groupId], { relativeTo: this.route });\r\n this.permissionsFacade.selectGroup(groupId);\r\n }\r\n\r\n openPermissionDialog(group: PermissionLog): void {\r\n if (this.levelId() && (this.selectedRoleValue() || this.selectedGroup())) {\r\n this.modal.openModal(PermissionsEditDialog, 'drawer', {\r\n header: this.translocoService.translate('permissions.setPermissions'),\r\n position: 'end',\r\n styleClass: '!w-[24%] !absolute !shadow-none',\r\n appendTo: 'page-content',\r\n inputValues: {\r\n permissionGroup: group,\r\n levelId: this.levelId(),\r\n roleValue:\r\n this.selectedTab() == 'roles'\r\n ? this.selectedRoleValue()\r\n : this.selectedGroup(),\r\n isGroup: this.selectedTab() != 'roles',\r\n },\r\n dismissible: true,\r\n });\r\n }\r\n }\r\n\r\n onToggleAllLevel(levelName: string, enabled: boolean): void {\r\n const levelId = this.levelId();\r\n const roleValue = this.selectedRoleValue();\r\n\r\n if (levelId) {\r\n if (this.selectedTab() != 'roles') {\r\n this.permissionsFacade.toggleAllGroupPermissions(\r\n levelId,\r\n this.selectedGroup()!.toString(),\r\n enabled,\r\n );\r\n return;\r\n } else {\r\n if (!!roleValue) {\r\n this.permissionsFacade.toggleAllLevelPermissions(\r\n roleValue,\r\n levelId,\r\n levelName,\r\n enabled,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n isAllPermissionsEnabled(): boolean {\r\n if (this.permissions().length === 0) return false;\r\n\r\n return this.permissions().every((log) =>\r\n log?.actions.every((action) => action?.isSelected),\r\n );\r\n }\r\n\r\n trackByRoleValue(_index: number, role: any) {\r\n return role.value;\r\n }\r\n\r\n onTabChange($event: any) {\r\n if ($event == 'roles') {\r\n // Navigate to first role if available\r\n const firstRole = this.levelRoles()\r\n .map((levelRoles) => levelRoles.roles)\r\n .flat()[0];\r\n\r\n if (firstRole?.value) {\r\n this.router.navigate(['roles', firstRole.value], {\r\n relativeTo: this.route,\r\n });\r\n this.permissionsFacade.selectRole(firstRole.value);\r\n } else {\r\n this.router.navigate(['roles'], { relativeTo: this.route });\r\n }\r\n } else if ($event == 'groups') {\r\n // Navigate to first group if available\r\n const firstGroup = this.groups()[0];\r\n\r\n if (firstGroup?.id) {\r\n this.router.navigate(['groups', firstGroup.id], {\r\n relativeTo: this.route,\r\n });\r\n this.permissionsFacade.selectGroup(firstGroup.id);\r\n } else {\r\n this.router.navigate(['groups'], { relativeTo: this.route });\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.permissionsFacade.reset();\r\n }\r\n}\r\n","<div id=\"permissions-page-card\" class=\"flex gap-4 p-1\">\r\n <div class=\"w-1/5 flex-shrink-0\">\r\n <mt-card class=\"h-full flex flex-col\">\r\n <ng-template #headless>\r\n <div class=\"flex flex-col h-full\">\r\n <div\r\n class=\"p-4 pb-0 bg-surface-50 rounded-t-2xl border-b border-surface\"\r\n >\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.rolesAndGroups\" | transloco }}\r\n </h2>\r\n\r\n <mt-tabs\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n (onChange)=\"onTabChange($event)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex-1 overflow-y-auto p-4\">\r\n @if (loading()) {\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n } @else {\r\n @if (selectedTab() === \"roles\") {\r\n @for (level of levelRoles(); track level) {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n <h2 class=\"font-semibold\">{{ level?.level?.display }}</h2>\r\n @for (role of level.roles; track role.value) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedRole() === role.value\"\r\n [class.hover:bg-surface]=\"selectedRole() !== role.value\"\r\n [class.border-primary-400]=\"\r\n selectedRole() === role.value\r\n \"\r\n [style.--p-avatar-background]=\"\r\n selectedRole() === role.value\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedRole() === role.value ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectRole(role.value)\"\r\n >\r\n <mt-avatar [icon]=\"'user.user-check-01'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ role.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noRolesFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noLevelRolesFound\" | transloco }}\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n @for (group of groups(); track group.name) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedGroup() === group.id\"\r\n [class.hover:bg-surface]=\"selectedGroup() !== group.id\"\r\n [class.border-primary-400]=\"selectedGroup() === group.id\"\r\n [style.--p-avatar-background]=\"\r\n selectedGroup() === group.id\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedGroup() === group.id ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectGroup(group.id)\"\r\n >\r\n <mt-avatar [icon]=\"'user.users-check'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ group.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noGroupsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n\r\n <div class=\"min-w-0 w-1/2\">\r\n @if (!selectedRole() && !selectedGroup()) {\r\n <mt-card class=\"h-full\">\r\n <ng-template #headless>\r\n <div class=\"flex items-center justify-center h-full text-muted-color\">\r\n {{ \"permissions.selectRoleOrGroupToViewPermissions\" | transloco }}\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n } @else {\r\n <mt-card class=\"h-full\">\r\n <div class=\"flex flex-col h-full\">\r\n <ng-template #headless>\r\n <div class=\"p-4 pb-2 mb-5 border-b border-surface\">\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.permissions\" | transloco }}\r\n </h2>\r\n </div>\r\n @if (permissionsLoading()) {\r\n <div class=\"mx-4\">\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"mb-5 p-3 mx-4 rounded-lg border-1 border-surface flex items-center justify-between\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'security.lock-unlocked-01'\"\r\n shape=\"square\"\r\n size=\"large\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + 'primary' + '-600)'\"\r\n >\r\n </mt-avatar>\r\n <div>\r\n <div class=\"text-sm font-semibold\">\r\n {{ \"permissions.setAllPermissions\" | transloco }}\r\n </div>\r\n <div class=\"text-xs text-muted-color\">\r\n {{ \"permissions.recommendedForSimpleForms\" | transloco }}\r\n </div>\r\n </div>\r\n </div>\r\n <mt-toggle-field\r\n [formControl]=\"allPermissionsToggle\"\r\n ></mt-toggle-field>\r\n </div>\r\n\r\n <div class=\"flex-1 px-4 overflow-y-auto border-t border-surface\">\r\n <div class=\"space-y-3 my-5\">\r\n @for (group of permissions(); track group.name) {\r\n <div\r\n class=\"p-2 border-1 border-surface rounded-lg flex items-center justify-between hover:bg-surface-100 transition-colors\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"text-sm\">{{ group.name?.display }}</span>\r\n </div>\r\n <mt-button\r\n [text]=\"true\"\r\n icon=\"custom.pencil\"\r\n severity=\"primary\"\r\n (click)=\"openPermissionDialog(group)\"\r\n >\r\n </mt-button>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noPermissionsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n","// store/index.ts\r\nexport * from './permissions';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PermissionsActions.LoadPermissions","PermissionsActions.LoadGroupPermissions","PermissionsActions.LoadRoles","PermissionsActions.SelectRole","PermissionsActions.SelectGroup","PermissionsActions.UpdatePermissionLocally","PermissionsActions.UpdatePermission","PermissionsActions.UpdateGroupPermission","PermissionsActions.ToggleAllLevelPermissions","PermissionsActions.ToggleAllGroupPermissions","PermissionsActions.SetModuleInfo","PermissionsActions.Reset","i3"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-permissions.mjs","sources":["../../../../packages/masterteam/permissions/src/store/permissions/permissions.model.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.actions.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.state.ts","../../../../packages/masterteam/permissions/src/store/permissions/permissions.facade.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-edit-dialog/permissions-edit-dialog.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-edit-dialog/permissions-edit-dialog.html","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-page.ts","../../../../packages/masterteam/permissions/src/lib/permissions-page/permissions-page.html","../../../../packages/masterteam/permissions/src/store/index.ts","../../../../packages/masterteam/permissions/src/masterteam-permissions.ts"],"sourcesContent":["import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\nexport interface Role {\r\n name: string;\r\n value: string;\r\n}\r\nexport interface LevelRoles {\r\n level?: string;\r\n levelKey?: string;\r\n scopeType?: string;\r\n scopeId?: string;\r\n roles?: Role[];\r\n}\r\n\r\nexport interface PermissionAction {\r\n id: number;\r\n name: string;\r\n isSelected: boolean;\r\n}\r\n\r\nexport interface PermissionLog {\r\n name: string;\r\n actions: PermissionAction[];\r\n}\r\n\r\nexport interface LevelPermission {\r\n levelName: string;\r\n modules: PermissionLog[];\r\n}\r\n\r\nexport interface RolesResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: LevelRoles[];\r\n cacheSession: string;\r\n}\r\n\r\nexport interface PermissionsResponseData {\r\n modules: PermissionLog[];\r\n}\r\n\r\nexport interface PermissionsResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: PermissionsResponseData;\r\n cacheSession: string;\r\n}\r\n\r\nexport interface GroupPermissionsResponse {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message: string;\r\n errors: null | string[];\r\n data: LevelPermission[];\r\n cacheSession: string;\r\n}\r\n\r\nexport interface UpdatePermissionPayload {\r\n roleValue: string;\r\n levelId: string;\r\n permissions: LevelPermission[];\r\n}\r\n\r\nexport enum PermissionsActionKey {\r\n LoadRoles = 'loadRoles',\r\n SelectRole = 'selectRole',\r\n SelectGroup = 'selectGroup',\r\n LoadPermissions = 'loadPermissions',\r\n LoadGroupPermissions = 'loadGroupPermissions',\r\n UpdatePermission = 'updatePermission',\r\n UpdateGroupPermission = 'updateGroupPermission',\r\n ToggleAllLevelPermissions = 'toggleAllLevelPermissions',\r\n ToggleAllGroupPermissions = 'toggleAllGroupPermissions',\r\n}\r\n\r\nexport interface PermissionsStateModel extends LoadingStateShape<PermissionsActionKey> {\r\n roles: LevelRoles[];\r\n selectedRoleValue: string | null;\r\n selectedGroupValue: string | number | null;\r\n permissions: PermissionLog[];\r\n groupPermissions: LevelPermission[];\r\n currentLevelId: string | null;\r\n moduleType: string;\r\n moduleId: string | number;\r\n parentModuleType?: string | null;\r\n parentModuleId?: string | number | null;\r\n parentPath?: string;\r\n}\r\n\r\nexport enum ModuleType {\r\n LEVEL = 'level',\r\n LOG = 'log',\r\n LEVELLOG = 'levelLog',\r\n}\r\n","export class LoadRoles {\r\n static readonly type = '[Permissions] Load Roles';\r\n constructor() {}\r\n}\r\n\r\nexport class SelectRole {\r\n static readonly type = '[Permissions] Select Role';\r\n constructor(public roleValue: string) {}\r\n}\r\n\r\nexport class SelectGroup {\r\n static readonly type = '[Permissions] Select Group';\r\n constructor(public groupId: number) {}\r\n}\r\n\r\nexport class LoadPermissions {\r\n static readonly type = '[Permissions] Load Permissions';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class LoadGroupPermissions {\r\n static readonly type = '[Permissions] Load Group Permissions';\r\n constructor(\r\n public groupId: number,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class UpdatePermissionLocally {\r\n static readonly type = '[Permissions] Update Permission Locally';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n public actionId: number,\r\n public isSelected: boolean,\r\n ) {}\r\n}\r\n\r\nexport class UpdatePermission {\r\n static readonly type = '[Permissions] Update Permission';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class UpdateGroupPermission {\r\n static readonly type = '[Permissions] Update Group Permission';\r\n constructor(\r\n public groupId: string,\r\n public levelId: string,\r\n ) {}\r\n}\r\n\r\nexport class ToggleAllLevelPermissions {\r\n static readonly type = '[Permissions] Toggle All Level Permissions';\r\n constructor(\r\n public roleValue: string,\r\n public levelId: string,\r\n public levelName: string,\r\n public enabled: boolean,\r\n ) {}\r\n}\r\n\r\nexport class ToggleAllGroupPermissions {\r\n static readonly type = '[Permissions] Toggle All Group Permissions';\r\n constructor(\r\n public levelId: string,\r\n public groupId: string,\r\n public enabled: boolean,\r\n ) {}\r\n}\r\n\r\nexport class SetModuleInfo {\r\n static readonly type = '[Permissions] Set Module Info';\r\n\r\n constructor(\r\n public readonly moduleType: string,\r\n public readonly moduleId: string | number,\r\n public readonly parentModuleType?: string,\r\n public readonly parentModuleId?: string | number,\r\n public readonly parentPath?: string,\r\n ) {}\r\n}\r\n\r\nexport class Reset {\r\n static readonly type = '[Permissions] Reset Module Info';\r\n\r\n constructor() {}\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { map } from 'rxjs';\r\nimport { CrudStateBase, handleApiRequest } from '@masterteam/components';\r\nimport {\r\n GroupPermissionsResponse,\r\n LevelPermission,\r\n LevelRoles,\r\n ModuleType,\r\n PermissionLog,\r\n PermissionsResponse,\r\n PermissionsActionKey,\r\n PermissionsStateModel,\r\n RolesResponse,\r\n} from './permissions.model';\r\nimport * as PermissionsActions from './permissions.actions';\r\n\r\n@State<PermissionsStateModel>({\r\n name: 'permissions',\r\n defaults: {\r\n roles: [],\r\n selectedRoleValue: null,\r\n selectedGroupValue: null,\r\n permissions: [],\r\n groupPermissions: [],\r\n currentLevelId: null,\r\n moduleType: '',\r\n moduleId: '',\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n loadingActive: [], // Required by LoadingStateShape\r\n errors: {}, // Required by LoadingStateShape\r\n },\r\n})\r\n@Injectable()\r\nexport class PermissionsState extends CrudStateBase<\r\n LevelRoles,\r\n PermissionsStateModel,\r\n PermissionsActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n\r\n // ============================================================================\r\n // Data Selectors - Individual for fine-grained reactivity\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getRoles(state: PermissionsStateModel): LevelRoles[] {\r\n return state.roles;\r\n }\r\n\r\n @Selector()\r\n static getSelectedRoleValue(state: PermissionsStateModel): string | null {\r\n return state.selectedRoleValue;\r\n }\r\n\r\n @Selector()\r\n static getSelectedGroupValue(\r\n state: PermissionsStateModel,\r\n ): string | number | null {\r\n return state.selectedGroupValue;\r\n }\r\n\r\n @Selector()\r\n static getPermissions(state: PermissionsStateModel): PermissionLog[] {\r\n return state.permissions;\r\n }\r\n\r\n @Selector()\r\n static getGroupPermissions(state: PermissionsStateModel): LevelPermission[] {\r\n return state.groupPermissions;\r\n }\r\n\r\n @Selector()\r\n static getModuleType(state: PermissionsStateModel): string {\r\n return state.moduleType;\r\n }\r\n\r\n @Selector()\r\n static getModuleId(state: PermissionsStateModel): string | number {\r\n return state.moduleId;\r\n }\r\n\r\n @Selector()\r\n static getLevelId(state: PermissionsStateModel): string {\r\n return state.moduleType === 'module'\r\n ? state.parentModuleId!.toString()\r\n : state.moduleId.toString();\r\n }\r\n\r\n // ============================================================================\r\n // Loading/Error Slice Selectors - REQUIRED for optimal performance\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getLoadingActive(state: PermissionsStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: PermissionsStateModel,\r\n ): Record<string, string | null> {\r\n return state.errors;\r\n }\r\n\r\n // ============================================================================\r\n // CRUD Actions\r\n // ============================================================================\r\n\r\n // ============================================================================\r\n // CRUD Actions\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.LoadRoles)\r\n loadRoles(ctx: StateContext<PermissionsStateModel>) {\r\n const { moduleType, moduleId, parentPath } = ctx.getState();\r\n const state = ctx.getState();\r\n const req$ = this.http\r\n .get<RolesResponse>(\r\n `identity/roles${parentPath ? '' : '/scopes'}${parentPath}/${moduleType}/${moduleId}${parentPath ? '' : '?inherited=true'}`,\r\n )\r\n .pipe(map((response) => response.data));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadRoles,\r\n request$: req$,\r\n onSuccess: (roles: any) => ({\r\n roles: state.moduleType === 'module' ? [{ roles: roles }] : roles,\r\n currentLevelId: moduleId.toString() || '',\r\n }),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Simple State Updates (No HTTP)\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.SelectRole)\r\n selectRole(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SelectRole,\r\n ) {\r\n const state = ctx.getState();\r\n ctx.patchState({ selectedRoleValue: action.roleValue });\r\n\r\n if (state.currentLevelId && action.roleValue) {\r\n ctx.dispatch(\r\n new PermissionsActions.LoadPermissions(\r\n action.roleValue,\r\n state.currentLevelId,\r\n ),\r\n );\r\n }\r\n }\r\n\r\n @Action(PermissionsActions.SelectGroup)\r\n selectGroup(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SelectGroup,\r\n ) {\r\n const state = ctx.getState();\r\n ctx.patchState({ selectedGroupValue: action.groupId });\r\n\r\n if (state.currentLevelId) {\r\n ctx.dispatch(\r\n new PermissionsActions.LoadGroupPermissions(\r\n action.groupId,\r\n state.currentLevelId,\r\n ),\r\n );\r\n }\r\n }\r\n\r\n @Action(PermissionsActions.LoadPermissions)\r\n loadPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.LoadPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n const modulePath =\r\n state.moduleType === 'module' ? `module/${state.moduleId}/` : '';\r\n const levelId =\r\n state.moduleType === 'module' ? state.parentModuleId! : state.moduleId;\r\n\r\n const req$ = this.http\r\n .get<PermissionsResponse>(\r\n `identity/roles/level/${levelId}/${modulePath}${action.roleValue}/permissions`,\r\n )\r\n .pipe(map((response) => response.data.modules));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadPermissions,\r\n request$: req$,\r\n onSuccess: (permissions) => ({\r\n permissions,\r\n }),\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.LoadGroupPermissions)\r\n loadGroupPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.LoadGroupPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n const modulePath =\r\n state.moduleType === 'module' ? `module/${state.moduleId}/` : '';\r\n const levelId =\r\n state.moduleType === 'module' ? state.parentModuleId! : state.moduleId;\r\n\r\n const req$ = this.http\r\n .get<GroupPermissionsResponse>(\r\n `identity/groups/level/${levelId}/${modulePath}${action.groupId}/permissions`,\r\n )\r\n .pipe(map((response: any) => response.data.modules));\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.LoadPermissions,\r\n request$: req$,\r\n onSuccess: (permissions) => ({\r\n permissions,\r\n }),\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.UpdatePermissionLocally)\r\n updatePermissionLocally(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdatePermissionLocally,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions = state.permissions.map((log) => ({\r\n ...log,\r\n actions: log.actions.map((act) =>\r\n act.id === action.actionId\r\n ? { ...act, isSelected: action.isSelected }\r\n : act,\r\n ),\r\n }));\r\n\r\n ctx.patchState({ permissions: updatedPermissions });\r\n }\r\n\r\n // ============================================================================\r\n // Complex Operations - use handleApiRequest for transformations\r\n // ============================================================================\r\n\r\n @Action(PermissionsActions.UpdatePermission)\r\n updatePermission(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdatePermission,\r\n ) {\r\n const state = ctx.getState();\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: a?.isSelected });\r\n });\r\n });\r\n const scopeId =\r\n state.moduleType === 'module' ? state.parentModuleId! : state.moduleId;\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/roles/${action.roleValue}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n {\r\n params: {\r\n scopeId,\r\n scopeType: ModuleType.LEVEL,\r\n },\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.UpdatePermission,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: (error, currentState) => {\r\n // Rollback on error\r\n return { permissions: currentState.permissions };\r\n },\r\n errorMessage: 'Failed to update permission',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.UpdateGroupPermission)\r\n updateGroupPermission(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.UpdateGroupPermission,\r\n ) {\r\n const state = ctx.getState();\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: a?.isSelected });\r\n });\r\n });\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/groups/${action.groupId}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.UpdateGroupPermission,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: (error, currentState) => {\r\n // Rollback on error\r\n return { permissions: currentState.permissions };\r\n },\r\n errorMessage: 'Failed to update permission',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.ToggleAllLevelPermissions)\r\n toggleAllLevelPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.ToggleAllLevelPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: action.enabled });\r\n });\r\n });\r\n\r\n const scopeId =\r\n state.moduleType === 'module' ? state.parentModuleId! : state.moduleId;\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/roles/${action.roleValue}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n {\r\n params: {\r\n scopeId,\r\n scopeType: ModuleType.LEVEL,\r\n },\r\n },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.ToggleAllLevelPermissions,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n onError: () => ({\r\n permissions: state.permissions,\r\n }),\r\n errorMessage: 'Failed to toggle all permissions',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.ToggleAllGroupPermissions)\r\n toggleAllGroupPermissions(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.ToggleAllGroupPermissions,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n const updatedPermissions: any[] = [];\r\n state.permissions?.forEach((p) => {\r\n p?.actions.forEach((a: any) => {\r\n updatedPermissions.push({ id: a?.id, isSelected: action.enabled });\r\n });\r\n });\r\n\r\n const req$ = this.http.put<PermissionsResponse>(\r\n `identity/groups/${action.groupId}/setAllPermissions`,\r\n { permissions: updatedPermissions },\r\n );\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: PermissionsActionKey.ToggleAllGroupPermissions,\r\n request$: req$,\r\n onSuccess: () => ({\r\n groupPermissions: updatedPermissions,\r\n }),\r\n onError: () => ({\r\n groupPermissions: state.groupPermissions,\r\n }),\r\n errorMessage: 'Failed to toggle all permissions',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.SetModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<PermissionsStateModel>,\r\n action: PermissionsActions.SetModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(PermissionsActions.Reset)\r\n reset(ctx: StateContext<PermissionsStateModel>) {\r\n ctx.patchState({\r\n moduleType: '',\r\n moduleId: '',\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n roles: [],\r\n selectedRoleValue: null,\r\n selectedGroupValue: null,\r\n permissions: [],\r\n groupPermissions: [],\r\n });\r\n }\r\n}\r\n","import { inject, Injectable, computed } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\nimport { PermissionsState } from './permissions.state';\r\nimport * as PermissionsActions from './permissions.actions';\r\nimport { Observable } from 'rxjs';\r\nimport { PermissionsActionKey } from './permissions.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PermissionsFacade {\r\n private store = inject(Store);\r\n\r\n // ============================================================================\r\n // Data Selectors - Memoized by NGXS (fine-grained reactivity)\r\n // ============================================================================\r\n readonly roles = select(PermissionsState.getRoles);\r\n readonly selectedRoleValue = select(PermissionsState.getSelectedRoleValue);\r\n readonly selectedGroupValue = select(PermissionsState.getSelectedGroupValue);\r\n readonly permissions = select(PermissionsState.getPermissions);\r\n readonly groupPermissions = select(PermissionsState.getGroupPermissions);\r\n readonly moduleType = select(PermissionsState.getModuleType);\r\n readonly moduleId = select(PermissionsState.getModuleId);\r\n readonly levelId = select(PermissionsState.getLevelId);\r\n\r\n // ============================================================================\r\n // Loading/Error Slices - Memoized by NGXS\r\n // ============================================================================\r\n private readonly loadingActive = select(PermissionsState.getLoadingActive);\r\n private readonly errors = select(PermissionsState.getErrors);\r\n\r\n // ============================================================================\r\n // Loading Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly isLoadingRoles = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadRoles),\r\n );\r\n readonly isLoadingPermissions = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadPermissions),\r\n );\r\n readonly isLoadingGroupPermissions = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.LoadGroupPermissions),\r\n );\r\n readonly isUpdatingPermission = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.UpdatePermission),\r\n );\r\n readonly isUpdatingGroupPermission = computed(() =>\r\n this.loadingActive().includes(PermissionsActionKey.UpdateGroupPermission),\r\n );\r\n readonly isTogglingLevelPermissions = computed(() =>\r\n this.loadingActive().includes(\r\n PermissionsActionKey.ToggleAllLevelPermissions,\r\n ),\r\n );\r\n readonly isTogglingGroupPermissions = computed(() =>\r\n this.loadingActive().includes(\r\n PermissionsActionKey.ToggleAllGroupPermissions,\r\n ),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals - Computed from slice (minimal reactivity)\r\n // ============================================================================\r\n readonly rolesError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadRoles] ?? null,\r\n );\r\n readonly permissionsError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadPermissions] ?? null,\r\n );\r\n readonly groupPermissionsError = computed(\r\n () => this.errors()[PermissionsActionKey.LoadGroupPermissions] ?? null,\r\n );\r\n readonly updatePermissionError = computed(\r\n () => this.errors()[PermissionsActionKey.UpdatePermission] ?? null,\r\n );\r\n readonly updateGroupPermissionError = computed(\r\n () => this.errors()[PermissionsActionKey.UpdateGroupPermission] ?? null,\r\n );\r\n\r\n // ============================================================================\r\n // Action Dispatchers\r\n // ============================================================================\r\n\r\n loadRoles() {\r\n return this.store.dispatch(new PermissionsActions.LoadRoles());\r\n }\r\n\r\n selectRole(roleValue: string) {\r\n if (roleValue) {\r\n return this.store.dispatch(new PermissionsActions.SelectRole(roleValue));\r\n }\r\n return;\r\n }\r\n\r\n selectGroup(groupId: number) {\r\n if (groupId) {\r\n return this.store.dispatch(new PermissionsActions.SelectGroup(groupId));\r\n }\r\n return;\r\n }\r\n\r\n loadPermissions(roleValue: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.LoadPermissions(roleValue, levelId),\r\n );\r\n }\r\n\r\n loadGroupPermissions(groupId: number, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.LoadGroupPermissions(groupId, levelId),\r\n );\r\n }\r\n\r\n updatePermissionLocally(\r\n roleValue: string,\r\n levelId: string,\r\n actionId: number,\r\n isSelected: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdatePermissionLocally(\r\n roleValue,\r\n levelId,\r\n actionId,\r\n isSelected,\r\n ),\r\n );\r\n }\r\n\r\n updatePermission(roleValue: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdatePermission(roleValue, levelId),\r\n );\r\n }\r\n updateGroupPermission(groupId: string, levelId: string) {\r\n return this.store.dispatch(\r\n new PermissionsActions.UpdateGroupPermission(groupId, levelId),\r\n );\r\n }\r\n\r\n toggleAllLevelPermissions(\r\n roleValue: string,\r\n levelId: string,\r\n levelName: string,\r\n enabled: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.ToggleAllLevelPermissions(\r\n roleValue,\r\n levelId,\r\n levelName,\r\n enabled,\r\n ),\r\n );\r\n }\r\n toggleAllGroupPermissions(\r\n levelId: string,\r\n groupId: string,\r\n enabled: boolean,\r\n ) {\r\n return this.store.dispatch(\r\n new PermissionsActions.ToggleAllGroupPermissions(\r\n levelId,\r\n groupId,\r\n enabled,\r\n ),\r\n );\r\n }\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new PermissionsActions.SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n reset() {\r\n return this.store.dispatch(new PermissionsActions.Reset());\r\n }\r\n}\r\n","import {\r\n Component,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { PermissionsFacade } from '../../../store/permissions/permissions.facade';\r\nimport {\r\n PermissionLog,\r\n PermissionAction,\r\n} from '../../../store/permissions/permissions.model';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-permissions-edit-dialog',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n ToggleField,\r\n TranslocoModule,\r\n FormsModule,\r\n Button,\r\n ],\r\n templateUrl: './permissions-edit-dialog.html',\r\n styleUrl: './permissions-edit-dialog.scss',\r\n})\r\nexport class PermissionsEditDialog {\r\n private permissionsFacade = inject(PermissionsFacade);\r\n modal = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n // permissionGroup = input.required<PermissionLog | null>();\r\n permissionGroup = input<PermissionLog | null>(null);\r\n\r\n // Use new facade pattern\r\n addPermissionsLoading = this.permissionsFacade.isUpdatingPermission;\r\n addPermissionsError = this.permissionsFacade.updatePermissionError;\r\n\r\n levelId = input.required<string>();\r\n roleValue = input.required<string>();\r\n isGroup = input.required<boolean>();\r\n\r\n closeDialog = output<void>();\r\n\r\n actionControls = signal<Map<number, FormControl>>(new Map());\r\n toggleAll = signal<boolean>(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n const group = this.permissionGroup();\r\n if (group) {\r\n const controls = new Map<number, FormControl>();\r\n group.actions.forEach((action) => {\r\n const control = new FormControl(action.isSelected);\r\n control.valueChanges.subscribe((value) => {\r\n if (value !== null) {\r\n this.onPermissionToggle(action.id, value);\r\n }\r\n });\r\n controls.set(action.id, control);\r\n });\r\n this.actionControls.set(controls);\r\n this.toggleAll.set(group.actions.every((action) => action.isSelected));\r\n }\r\n });\r\n }\r\n\r\n onPermissionToggle(actionId: number, isSelected: boolean) {\r\n const levelId = this.levelId();\r\n const roleValue = this.roleValue();\r\n if (levelId && roleValue) {\r\n this.permissionsFacade.updatePermissionLocally(\r\n roleValue,\r\n levelId,\r\n actionId,\r\n isSelected,\r\n );\r\n }\r\n }\r\n\r\n onClose() {\r\n // this.closeDialog.emit();\r\n this.ref.close();\r\n }\r\n\r\n trackByActionId(_index: number, action: PermissionAction) {\r\n return action.id;\r\n }\r\n\r\n getControl(actionId: number): FormControl {\r\n return this.actionControls().get(actionId) || new FormControl(false);\r\n }\r\n\r\n onSave(): void {\r\n const levelId = this.levelId();\r\n const roleValue = this.roleValue();\r\n const isGroup = this.isGroup();\r\n if (levelId && roleValue) {\r\n let subscription;\r\n if (isGroup) {\r\n subscription = this.permissionsFacade.updateGroupPermission(\r\n roleValue,\r\n levelId,\r\n );\r\n } else {\r\n subscription = this.permissionsFacade.updatePermission(\r\n roleValue,\r\n levelId,\r\n );\r\n }\r\n subscription.subscribe({\r\n next: () => {\r\n this.onClose();\r\n },\r\n error: (error: any) => {\r\n console.error('Failed to save accessibility permissions:', error);\r\n },\r\n });\r\n }\r\n }\r\n\r\n selectAll() {\r\n const group = this.permissionGroup();\r\n const actions = group?.actions || [];\r\n for (let i = 0; i < actions?.length; i++) {\r\n const control = this.actionControls().get(actions[i].id);\r\n control?.setValue(this.toggleAll());\r\n }\r\n }\r\n}\r\n","<div [class]=\"'flex flex-col gap-3 p-4 ' + modal.contentClass\">\r\n @if (permissionGroup(); as group) {\r\n <div\r\n class=\"flex items-center justify-between border rounded-lg p-3 border-surface mb-4\"\r\n >\r\n <span class=\"text-sm font-medium\">{{\r\n \"permissions.selectAll\" | transloco\r\n }}</span>\r\n <mt-toggle-field\r\n [(ngModel)]=\"toggleAll\"\r\n (onChange)=\"selectAll()\"\r\n ></mt-toggle-field>\r\n </div>\r\n @for (action of group.actions; track trackByActionId($index, action)) {\r\n <div\r\n class=\"flex items-center justify-between border rounded-lg p-3 border-surface\"\r\n >\r\n <span class=\"text-sm font-medium\">{{ action.name?.display }}</span>\r\n <mt-toggle-field\r\n [formControl]=\"getControl(action.id)\"\r\n ></mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n</div>\r\n<div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"'save'\"\r\n (click)=\"onSave()\"\r\n [loading]=\"addPermissionsLoading()\"\r\n />\r\n</div>\r\n","import {\r\n Component,\r\n computed,\r\n DestroyRef,\r\n effect,\r\n inject,\r\n linkedSignal,\r\n OnDestroy,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { PermissionsFacade } from '../../store/permissions/permissions.facade';\r\nimport { PermissionLog } from '../../store/permissions/permissions.model';\r\nimport { PermissionsEditDialog } from './permissions-edit-dialog/permissions-edit-dialog';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { AccessibilitiesFacade } from '@masterteam/accessibilities';\r\n\r\n@Component({\r\n selector: 'mt-permissions-page',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n Card,\r\n Button,\r\n ToggleField,\r\n TranslocoModule,\r\n Avatar,\r\n SkeletonModule,\r\n Tabs,\r\n ],\r\n templateUrl: './permissions-page.html',\r\n styleUrl: './permissions-page.scss',\r\n})\r\nexport default class PermissionsPage implements OnInit, OnDestroy {\r\n private readonly permissionsFacade = inject(PermissionsFacade);\r\n private readonly accessibilitiesFacade: any = inject(AccessibilitiesFacade);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly router = inject(Router);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly modal = inject(ModalService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n private readonly defaultLevelName = 'Project';\r\n\r\n // Use new facade pattern\r\n levelRoles = this.permissionsFacade.roles;\r\n selectedRoleValue = this.permissionsFacade.selectedRoleValue;\r\n selectedRole = linkedSignal(this.selectedRoleValue);\r\n selectedGroupValue = this.permissionsFacade.selectedGroupValue;\r\n selectedGroup = linkedSignal(this.selectedGroupValue);\r\n permissions = this.permissionsFacade.permissions;\r\n loading = this.permissionsFacade.isLoadingRoles;\r\n permissionsLoading = this.permissionsFacade.isLoadingPermissions;\r\n levelId = this.permissionsFacade.levelId;\r\n groups = this.accessibilitiesFacade.groups;\r\n\r\n allPermissionsToggle = new FormControl<boolean>(false);\r\n\r\n readonly groupOrRoleId = computed(() => {\r\n const idParam = this.route.snapshot.firstChild?.paramMap.get('id');\r\n return idParam ? idParam : '';\r\n });\r\n\r\n readonly selectedTabFromParams = computed(() => {\r\n const idParam = this.route.snapshot.firstChild?.data['selectedTab'];\r\n return idParam ? idParam : 'roles';\r\n });\r\n\r\n selectedTab = linkedSignal<string>(this.selectedTabFromParams);\r\n tabsList = signal<any[]>([\r\n {\r\n label: this.translocoService.translate('permissions.roles'),\r\n value: 'roles',\r\n },\r\n {\r\n label: this.translocoService.translate('permissions.groups'),\r\n value: 'groups',\r\n },\r\n ]);\r\n firstLoad = signal(true);\r\n\r\n constructor() {\r\n effect(() => {\r\n const allEnabled = this.isAllPermissionsEnabled();\r\n this.allPermissionsToggle.setValue(allEnabled, { emitEvent: false });\r\n });\r\n effect(() => {\r\n if (this.selectedTab() == 'roles') {\r\n if (this.levelRoles().length == 0) {\r\n if (this.firstLoad() && !this.loading()) {\r\n this.permissionsFacade.loadRoles();\r\n this.firstLoad.set(false);\r\n }\r\n return;\r\n }\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (this.selectedTab() !== 'roles' || this.loading()) {\r\n return;\r\n }\r\n\r\n const roles = this.getRoles();\r\n if (!roles.length) {\r\n return;\r\n }\r\n\r\n const routeRoleValue = this.groupOrRoleId()?.toString();\r\n const selectedRoleValue = this.selectedRoleValue();\r\n const routeRole = routeRoleValue\r\n ? roles.find((role) => role?.value === routeRoleValue)\r\n : null;\r\n\r\n if (routeRole) {\r\n if (selectedRoleValue !== routeRole.value) {\r\n this.selectedRole.set(routeRole.value);\r\n this.permissionsFacade.selectRole(routeRole.value);\r\n }\r\n return;\r\n }\r\n\r\n if (\r\n selectedRoleValue &&\r\n roles.some((role) => role?.value === selectedRoleValue)\r\n ) {\r\n return;\r\n }\r\n\r\n this.selectFirstRole(true);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.permissionsFacade.selectRole('');\r\n this.route.parent?.paramMap\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((params) => {\r\n const levelIdFromRoute = params.get('levelId');\r\n\r\n if (levelIdFromRoute) {\r\n this.permissionsFacade.reset();\r\n this.permissionsFacade.setModuleInfo('level', levelIdFromRoute);\r\n this.permissionsFacade.loadRoles();\r\n }\r\n });\r\n this.permissionsFacade.loadRoles();\r\n this.accessibilitiesFacade.getGroups();\r\n\r\n this.allPermissionsToggle.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((value) => {\r\n if (value !== null) {\r\n this.onToggleAllLevel(this.defaultLevelName, value);\r\n }\r\n });\r\n }\r\n\r\n selectRole(roleValue: string): void {\r\n this.router.navigate(['roles', roleValue], { relativeTo: this.route });\r\n this.permissionsFacade.selectRole(roleValue);\r\n }\r\n\r\n private getRoles() {\r\n return this.levelRoles()\r\n .map((levelRoles) => levelRoles.roles ?? [])\r\n .flat();\r\n }\r\n\r\n private selectFirstRole(replaceUrl = false): void {\r\n const firstRoleValue = this.getRoles()[0]?.value;\r\n\r\n if (!firstRoleValue) {\r\n return;\r\n }\r\n\r\n this.selectedRole.set(firstRoleValue);\r\n this.router.navigate(['roles', firstRoleValue], {\r\n relativeTo: this.route,\r\n replaceUrl,\r\n });\r\n this.permissionsFacade.selectRole(firstRoleValue);\r\n }\r\n\r\n selectGroup(groupId: number): void {\r\n this.router.navigate(['groups', groupId], { relativeTo: this.route });\r\n this.permissionsFacade.selectGroup(groupId);\r\n }\r\n\r\n openPermissionDialog(group: PermissionLog): void {\r\n if (this.levelId() && (this.selectedRoleValue() || this.selectedGroup())) {\r\n this.modal.openModal(PermissionsEditDialog, 'drawer', {\r\n header: this.translocoService.translate('permissions.setPermissions'),\r\n position: 'end',\r\n styleClass: '!absolute !shadow-none',\r\n responsivePreset: 'drawer-narrow',\r\n appendTo: 'page-content',\r\n inputValues: {\r\n permissionGroup: group,\r\n levelId: this.levelId(),\r\n roleValue:\r\n this.selectedTab() == 'roles'\r\n ? this.selectedRoleValue()\r\n : this.selectedGroup(),\r\n isGroup: this.selectedTab() != 'roles',\r\n },\r\n dismissible: true,\r\n });\r\n }\r\n }\r\n\r\n onToggleAllLevel(levelName: string, enabled: boolean): void {\r\n const levelId = this.levelId();\r\n const roleValue = this.selectedRoleValue();\r\n\r\n if (levelId) {\r\n if (this.selectedTab() != 'roles') {\r\n this.permissionsFacade.toggleAllGroupPermissions(\r\n levelId,\r\n this.selectedGroup()!.toString(),\r\n enabled,\r\n );\r\n return;\r\n } else {\r\n if (!!roleValue) {\r\n this.permissionsFacade.toggleAllLevelPermissions(\r\n roleValue,\r\n levelId,\r\n levelName,\r\n enabled,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n isAllPermissionsEnabled(): boolean {\r\n if (this.permissions().length === 0) return false;\r\n\r\n return this.permissions().every((log) =>\r\n log?.actions.every((action) => action?.isSelected),\r\n );\r\n }\r\n\r\n trackByRoleValue(_index: number, role: any) {\r\n return role.value;\r\n }\r\n\r\n onTabChange($event: any) {\r\n if ($event == 'roles') {\r\n if (this.levelRoles().length) {\r\n this.selectFirstRole();\r\n } else {\r\n this.router.navigate(['roles'], { relativeTo: this.route });\r\n }\r\n } else if ($event == 'groups') {\r\n // Navigate to first group if available\r\n const firstGroup = this.groups()[0];\r\n\r\n if (firstGroup?.id) {\r\n this.router.navigate(['groups', firstGroup.id], {\r\n relativeTo: this.route,\r\n });\r\n this.permissionsFacade.selectGroup(firstGroup.id);\r\n } else {\r\n this.router.navigate(['groups'], { relativeTo: this.route });\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.permissionsFacade.reset();\r\n }\r\n}\r\n","<div id=\"permissions-page-card\" class=\"flex flex-col lg:flex-row gap-4 p-1\">\r\n <div class=\"w-full lg:w-1/4 xl:w-1/5 flex-shrink-0\">\r\n <mt-card class=\"h-full flex flex-col\">\r\n <ng-template #headless>\r\n <div class=\"flex flex-col h-full\">\r\n <div\r\n class=\"p-4 pb-0 bg-surface-50 rounded-t-2xl border-b border-surface\"\r\n >\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.rolesAndGroups\" | transloco }}\r\n </h2>\r\n\r\n <mt-tabs\r\n [(active)]=\"selectedTab\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n (onChange)=\"onTabChange($event)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex-1 overflow-y-auto p-4\">\r\n @if (loading()) {\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n } @else {\r\n @if (selectedTab() === \"roles\") {\r\n @for (level of levelRoles(); track level) {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n <h2 class=\"font-semibold\">{{ level?.level?.display }}</h2>\r\n @for (role of level.roles; track role.value) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedRole() === role.value\"\r\n [class.hover:bg-surface]=\"selectedRole() !== role.value\"\r\n [class.border-primary-400]=\"\r\n selectedRole() === role.value\r\n \"\r\n [style.--p-avatar-background]=\"\r\n selectedRole() === role.value\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedRole() === role.value ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectRole(role.value)\"\r\n >\r\n <mt-avatar [icon]=\"'user.user-check-01'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ role.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noRolesFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noLevelRolesFound\" | transloco }}\r\n </div>\r\n }\r\n } @else {\r\n <div class=\"flex flex-col gap-2 mb-4\">\r\n @for (group of groups(); track group.name) {\r\n <div\r\n class=\"p-3 border-2 border-dashed border-gray-300 rounded-lg cursor-pointer transition-colors flex items-center gap-3\"\r\n [class.bg-primary-50]=\"selectedGroup() === group.id\"\r\n [class.hover:bg-surface]=\"selectedGroup() !== group.id\"\r\n [class.border-primary-400]=\"selectedGroup() === group.id\"\r\n [style.--p-avatar-background]=\"\r\n selectedGroup() === group.id\r\n ? 'var(--p-primary-color)'\r\n : 'var(--p-surface-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n selectedGroup() === group.id ? '#ffffff' : ''\r\n \"\r\n (click)=\"selectGroup(group.id)\"\r\n >\r\n <mt-avatar [icon]=\"'user.users-check'\" shape=\"square\">\r\n </mt-avatar>\r\n <div class=\"flex-1 min-w-0\">\r\n <div class=\"font-medium truncate\">\r\n {{ group.name?.display }}\r\n </div>\r\n </div>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noGroupsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n </div>\r\n\r\n <div class=\"min-w-0 w-full lg:flex-1\">\r\n @if (!selectedRole() && !selectedGroup()) {\r\n <mt-card class=\"h-full\">\r\n <ng-template #headless>\r\n <div class=\"flex items-center justify-center h-full text-muted-color\">\r\n {{ \"permissions.selectRoleOrGroupToViewPermissions\" | transloco }}\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n } @else {\r\n <mt-card class=\"h-full\">\r\n <div class=\"flex flex-col h-full\">\r\n <ng-template #headless>\r\n <div class=\"p-4 pb-2 mb-5 border-b border-surface\">\r\n <h2 class=\"text-lg font-semibold mb-3\">\r\n {{ \"permissions.permissions\" | transloco }}\r\n </h2>\r\n </div>\r\n @if (permissionsLoading()) {\r\n <div class=\"mx-4\">\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n <p-skeleton class=\"my-4\" height=\"4rem\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"mb-5 p-3 mx-4 rounded-lg border-1 border-surface flex items-center justify-between\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'security.lock-unlocked-01'\"\r\n shape=\"square\"\r\n size=\"large\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"'var(--p-' + 'primary' + '-600)'\"\r\n >\r\n </mt-avatar>\r\n <div>\r\n <div class=\"text-sm font-semibold\">\r\n {{ \"permissions.setAllPermissions\" | transloco }}\r\n </div>\r\n <div class=\"text-xs text-muted-color\">\r\n {{ \"permissions.recommendedForSimpleForms\" | transloco }}\r\n </div>\r\n </div>\r\n </div>\r\n <mt-toggle-field\r\n [formControl]=\"allPermissionsToggle\"\r\n ></mt-toggle-field>\r\n </div>\r\n\r\n <div class=\"flex-1 px-4 overflow-y-auto border-t border-surface\">\r\n <div class=\"space-y-3 my-5\">\r\n @for (group of permissions(); track group.name) {\r\n <div\r\n class=\"p-2 border-1 border-surface rounded-lg flex items-center justify-between hover:bg-surface-100 transition-colors\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <mt-avatar\r\n [icon]=\"'editor.dotpoints-02'\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n [style.--p-avatar-background]=\"\r\n 'var(--p-' + 'surface' + '-100)'\r\n \"\r\n [style.--p-avatar-color]=\"\r\n 'var(--p-' + 'primary' + '-600)'\r\n \"\r\n >\r\n </mt-avatar>\r\n <span class=\"text-sm\">{{ group.name?.display }}</span>\r\n </div>\r\n <mt-button\r\n [text]=\"true\"\r\n icon=\"custom.pencil\"\r\n severity=\"primary\"\r\n (click)=\"openPermissionDialog(group)\"\r\n >\r\n </mt-button>\r\n </div>\r\n } @empty {\r\n <div\r\n class=\"flex items-center justify-center h-full text-muted-color\"\r\n >\r\n {{ \"permissions.noPermissionsFound\" | transloco }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n","// store/index.ts\r\nexport * from './permissions';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PermissionsActions.LoadPermissions","PermissionsActions.LoadGroupPermissions","PermissionsActions.LoadRoles","PermissionsActions.SelectRole","PermissionsActions.SelectGroup","PermissionsActions.UpdatePermissionLocally","PermissionsActions.UpdatePermission","PermissionsActions.UpdateGroupPermission","PermissionsActions.ToggleAllLevelPermissions","PermissionsActions.ToggleAllGroupPermissions","PermissionsActions.SetModuleInfo","PermissionsActions.Reset","i3"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterteam/permissions",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "publishConfig": {
5
5
  "directory": "../../../dist/masterteam/permissions",
6
6
  "linkDirectory": false,
@@ -20,8 +20,8 @@
20
20
  "tailwindcss": "^4.1.17",
21
21
  "tailwindcss-primeui": "^0.6.1",
22
22
  "@ngxs/store": "^20.1.0",
23
- "@masterteam/accessibilities": "^0.0.2",
24
- "@masterteam/components": "^0.0.87"
23
+ "@masterteam/accessibilities": "^0.0.3",
24
+ "@masterteam/components": "^0.0.102"
25
25
  },
26
26
  "sideEffects": false,
27
27
  "exports": {
@@ -134,6 +134,8 @@ declare class PermissionsPage implements OnInit, OnDestroy {
134
134
  constructor();
135
135
  ngOnInit(): void;
136
136
  selectRole(roleValue: string): void;
137
+ private getRoles;
138
+ private selectFirstRole;
137
139
  selectGroup(groupId: number): void;
138
140
  openPermissionDialog(group: PermissionLog): void;
139
141
  onToggleAllLevel(levelName: string, enabled: boolean): void;