{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/enums/view-modes.ts","../../../../packages/permission-management/src/lib/services/resource-permission-state.service.ts","../../../../packages/permission-management/src/lib/defaults/default-resource-permission-entity-props.ts","../../../../packages/permission-management/src/lib/tokens/extensions.token.ts","../../../../packages/permission-management/src/lib/services/extensions.service.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-list/resource-permission-list.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-list/resource-permission-list.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/provider-key-search/provider-key-search.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/provider-key-search/provider-key-search.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/permission-checkbox-list/permission-checkbox-list.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-form/resource-permission-form.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-form/resource-permission-form.component.html","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-management.component.ts","../../../../packages/permission-management/src/lib/components/resource-permission-management/resource-permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  computed,\r\n  DOCUMENT,\r\n  effect,\r\n  inject,\r\n  input,\r\n  output,\r\n  signal,\r\n  TrackByFunction,\r\n  untracked,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Tabs, TabList, Tab, TabPanel, TabContent } from '@angular/aria/tabs';\r\nimport { of } from 'rxjs';\r\nimport { finalize, switchMap, tap } from 'rxjs/operators';\r\n\r\nimport { ConfigStateService, CurrentUserDto, LocalizationPipe } from '@abp/ng.core';\r\nimport {\r\n  ButtonComponent,\r\n  LocaleDirection,\r\n  ModalCloseDirective,\r\n  ModalComponent,\r\n  ToasterService,\r\n} from '@abp/ng.theme.shared';\r\nimport {\r\n  GetPermissionListResultDto,\r\n  PermissionGrantInfoDto,\r\n  PermissionGroupDto,\r\n  PermissionsService,\r\n  ProviderInfoDto,\r\n  UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n  style: Record<string, number>;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n  groupName: string;\r\n};\r\n\r\ntype SelectAllCheckboxState = {\r\n  checked: boolean;\r\n  indeterminate: boolean;\r\n};\r\n\r\n@Component({\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  selector: 'abp-permission-management',\r\n  templateUrl: './permission-management.component.html',\r\n  exportAs: 'abpPermissionManagement',\r\n  styles: [\r\n    `\r\n      .scroll-in-modal {\r\n        overflow: auto;\r\n        /*\r\n        To maintain a 28px top margin and 28px bottom margin when the modal reaches full height, the scrollable area needs to be 100vh - 23.1rem\r\n         */\r\n        max-height: calc(100vh - 23.1rem);\r\n      }\r\n\r\n      .lpx-scroll-pills-container .nav-pills {\r\n        display: block;\r\n        overflow-y: auto;\r\n      }\r\n\r\n      /* Target mobile screens */\r\n      @media (max-width: 768px) {\r\n        .scroll-in-modal {\r\n          max-height: calc(100vh - 15rem);\r\n        }\r\n        .lpx-scroll-pills-container .nav-pills {\r\n          max-height: 500px;\r\n        }\r\n      }\r\n\r\n      fieldset legend {\r\n        float: none;\r\n        width: auto;\r\n      }\r\n\r\n      .lpx-scroll-pills-container .tab-content {\r\n        padding-top: 0 !important;\r\n        padding-bottom: 0 !important;\r\n      }\r\n\r\n      .lpx-scroll-pills-container .nav-item {\r\n        margin-bottom: 10px;\r\n        border-radius: 10px;\r\n      }\r\n\r\n      .lpx-scroll-pills-container .nav-item .nav-link.active {\r\n        color: #fff !important;\r\n        border-color: #6c5dd3 !important;\r\n        background-color: #6c5dd3 !important;\r\n      }\r\n    `,\r\n  ],\r\n  imports: [\r\n    FormsModule,\r\n    NgStyle,\r\n    ModalComponent,\r\n    LocalizationPipe,\r\n    ButtonComponent,\r\n    ModalCloseDirective,\r\n    Tabs,\r\n    TabList,\r\n    Tab,\r\n    TabPanel,\r\n    TabContent,\r\n  ],\r\n})\r\nexport class PermissionManagementComponent {\r\n  protected readonly service = inject(PermissionsService);\r\n  protected readonly configState = inject(ConfigStateService);\r\n  protected readonly toasterService = inject(ToasterService);\r\n  private document = inject(DOCUMENT);\r\n\r\n  readonly providerNameInput = input('', { alias: 'providerName' });\r\n  readonly providerKeyInput = input('', { alias: 'providerKey' });\r\n  readonly hideBadgesInput = input(false, { alias: 'hideBadges' });\r\n  readonly entityDisplayName = input<string | undefined>(undefined);\r\n  readonly visibleInput = input(false, { alias: 'visible' });\r\n\r\n  readonly visibleChange = output<boolean>();\r\n\r\n  protected readonly modalVisible = signal(false);\r\n  protected readonly modalBusy = signal(false);\r\n  protected readonly filter = signal<string>('');\r\n\r\n  private isOpening = false;\r\n  private isClosingModal = false;\r\n\r\n  // Backward-compatible getters/setters for ReplaceableTemplateDirective.\r\n  private _providerNameOverride?: string;\r\n  get providerName(): string {\r\n    return this._providerNameOverride ?? this.providerNameInput();\r\n  }\r\n  set providerName(value: string) {\r\n    this._providerNameOverride = value;\r\n  }\r\n\r\n  private _providerKeyOverride?: string;\r\n  get providerKey(): string {\r\n    return this._providerKeyOverride ?? this.providerKeyInput();\r\n  }\r\n  set providerKey(value: string) {\r\n    this._providerKeyOverride = value;\r\n  }\r\n\r\n  private _hideBadgesOverride?: boolean;\r\n  get hideBadges(): boolean {\r\n    return this._hideBadgesOverride ?? this.hideBadgesInput();\r\n  }\r\n  set hideBadges(value: boolean) {\r\n    this._hideBadgesOverride = value;\r\n  }\r\n\r\n  data: GetPermissionListResultDto = { groups: [], entityDisplayName: '' };\r\n\r\n  private readonly permissionsState = signal<PermissionWithGroupName[]>([]);\r\n  private readonly selectedGroupState = signal<PermissionGroupDto | null>(null);\r\n  private readonly permissionGroupSignal = signal<PermissionGroupDto[]>([]);\r\n\r\n  protected readonly selectedGroupPermissions = computed(() => {\r\n    const group = this.selectedGroupState();\r\n    if (!group) {\r\n      return [] as PermissionWithStyle[];\r\n    }\r\n\r\n    const margin = `margin-${\r\n      (this.document.body?.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n    }.px`;\r\n\r\n    const groupPermissions =\r\n      this.permissionGroupSignal().find(item => item.name === group.name)?.permissions || [];\r\n    const permissions = this.permissionsState();\r\n\r\n    return groupPermissions.map(permission => ({\r\n      ...permission,\r\n      style: { [margin]: findMargin(groupPermissions, permission) },\r\n      isGranted: (permissions.find(per => per.name === permission.name) || {}).isGranted,\r\n    })) as PermissionWithStyle[];\r\n  });\r\n\r\n  protected readonly selectThisTabState = computed(() =>\r\n    getSelectAllCheckboxState(this.selectedGroupPermissions()),\r\n  );\r\n\r\n  protected readonly selectAllTabState = computed(() =>\r\n    getSelectAllCheckboxState(this.permissionsState()),\r\n  );\r\n\r\n  // Disabled state is based on the API snapshot (not live edits) so select-all stays toggleable.\r\n  protected readonly disableSelectAllTab = computed(() =>\r\n    isSelectAllDisabled(this.selectedGroupState()?.permissions, this.providerName),\r\n  );\r\n\r\n  private readonly disabledSelectAllInAllTabsState = signal(false);\r\n  protected readonly disabledSelectAllInAllTabs = this.disabledSelectAllInAllTabsState.asReadonly();\r\n\r\n  permissionGroups = computed(() => {\r\n    const search = this.filter().toLowerCase().trim();\r\n    const groups = this.permissionGroupSignal();\r\n\r\n    if (!search) {\r\n      return groups;\r\n    }\r\n\r\n    const includesSearch = (text: string) => text.toLowerCase().includes(search);\r\n    return groups.filter(group =>\r\n      group.permissions.some(\r\n        permission => includesSearch(permission.displayName) || includesSearch(group.displayName),\r\n      ),\r\n    );\r\n  });\r\n\r\n  trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n  // Backward-compatible getters/setters for ReplaceableTemplateDirective.\r\n  get visible(): boolean {\r\n    return this.modalVisible();\r\n  }\r\n\r\n  set visible(value: boolean) {\r\n    this.setVisible(value);\r\n  }\r\n\r\n  private setVisible(value: boolean) {\r\n    if (value && this.isClosingModal) {\r\n      return;\r\n    }\r\n\r\n    if (value === this.modalVisible()) {\r\n      return;\r\n    }\r\n\r\n    if (value) {\r\n      this.showModal();\r\n    } else {\r\n      this.hideModal();\r\n    }\r\n  }\r\n\r\n  get permissions(): PermissionWithGroupName[] {\r\n    return this.permissionsState();\r\n  }\r\n\r\n  set permissions(value: PermissionWithGroupName[]) {\r\n    this.permissionsState.set(value);\r\n  }\r\n\r\n  get selectedGroup(): PermissionGroupDto | null | undefined {\r\n    return this.selectedGroupState();\r\n  }\r\n\r\n  get selectThisTab(): boolean {\r\n    return this.selectThisTabState().checked;\r\n  }\r\n\r\n  get selectAllTab(): boolean {\r\n    return this.selectAllTabState().checked;\r\n  }\r\n\r\n  onModalVisibleChange(value: boolean) {\r\n    this.visibleChange.emit(value);\r\n  }\r\n\r\n  onModalDisappear() {\r\n    setTimeout(() => {\r\n      if (!this.modalVisible()) {\r\n        this.resetModalState();\r\n      }\r\n      this.isClosingModal = false;\r\n    });\r\n  }\r\n\r\n  private showModal() {\r\n    if (this.isOpening || this.modalVisible()) {\r\n      return;\r\n    }\r\n\r\n    this.isClosingModal = false;\r\n    this.isOpening = true;\r\n    this.openModal()\r\n      .pipe(finalize(() => (this.isOpening = false)))\r\n      .subscribe(() => {\r\n        this.modalVisible.set(true);\r\n        this.visibleChange.emit(true);\r\n      });\r\n  }\r\n\r\n  private hideModal() {\r\n    if (!this.modalVisible()) {\r\n      return;\r\n    }\r\n\r\n    this.isClosingModal = true;\r\n    this.visibleChange.emit(false);\r\n    this.modalVisible.set(false);\r\n  }\r\n\r\n  private resetModalState() {\r\n    this.setSelectedGroup(null);\r\n    this.filter.set('');\r\n    this.disabledSelectAllInAllTabsState.set(false);\r\n  }\r\n\r\n  // constructor() {\r\n  //   effect(() => {\r\n  //     this.setVisible(this.visibleInput());\r\n  //   });\r\n  // }\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      const visible = this.visibleInput();\r\n      untracked(() => this.setVisible(visible));\r\n    });\r\n  }\r\n\r\n  getChecked(name: string) {\r\n    return (this.permissionsState().find(per => per.name === name) || { isGranted: false })\r\n      .isGranted;\r\n  }\r\n\r\n  setSelectedGroup(group: PermissionGroupDto | null) {\r\n    this.selectedGroupState.set(group);\r\n  }\r\n\r\n  isGrantedByOtherProviderName(grantedProviders?: ProviderInfoDto[]): boolean {\r\n    if (grantedProviders?.length) {\r\n      return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  onClickCheckbox(clickedPermission: PermissionGrantInfoDto) {\r\n    const { isGranted, grantedProviders } = clickedPermission;\r\n    if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) {\r\n      return;\r\n    }\r\n\r\n    setTimeout(() => {\r\n      this.updatePermissionStatus(clickedPermission);\r\n      this.setParentClicked(clickedPermission);\r\n    }, 0);\r\n  }\r\n\r\n  updatePermissionStatus(clickedPermission: PermissionGrantInfoDto) {\r\n    this.permissionsState.update(permissions =>\r\n      permissions.map(permission => {\r\n        const isExactMatch = clickedPermission.name == permission.name;\r\n        const isParentOfPermission = clickedPermission.parentName === permission.name;\r\n        const isChildOfPermission = clickedPermission.name === permission.parentName;\r\n\r\n        if (isExactMatch) {\r\n          return { ...permission, isGranted: !permission.isGranted };\r\n        }\r\n\r\n        if (isChildOfPermission && permission.isGranted) {\r\n          return { ...permission, isGranted: false };\r\n        }\r\n\r\n        if (isParentOfPermission && !permission.isGranted) {\r\n          return { ...permission, isGranted: true };\r\n        }\r\n\r\n        return permission;\r\n      }),\r\n    );\r\n  }\r\n\r\n  setParentClicked(clickedPermission: PermissionGrantInfoDto) {\r\n    if (clickedPermission.parentName) {\r\n      const parentPermissions = findParentPermissions(this.permissionsState(), clickedPermission);\r\n      if (parentPermissions.length > 0) {\r\n        const parentNames = new Set(parentPermissions.map(parent => parent.name));\r\n\r\n        this.permissionsState.update(permissions =>\r\n          permissions.map(per => {\r\n            let updatedIsGranted = per.isGranted;\r\n\r\n            if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) {\r\n              updatedIsGranted = false;\r\n            }\r\n\r\n            if (parentNames.has(per.name)) {\r\n              updatedIsGranted = true;\r\n            }\r\n\r\n            return { ...per, isGranted: updatedIsGranted };\r\n          }),\r\n        );\r\n      }\r\n      return;\r\n    }\r\n\r\n    this.permissionsState.update(permissions =>\r\n      permissions.map(per => {\r\n        const parents = findParentPermissions(permissions, per);\r\n        if (parents.length > 0) {\r\n          const rootParent = parents[parents.length - 1];\r\n\r\n          if (rootParent.name === clickedPermission.name && !rootParent.isGranted) {\r\n            return { ...per, isGranted: false };\r\n          }\r\n        }\r\n        return per;\r\n      }),\r\n    );\r\n  }\r\n\r\n  onSelectThisTabChange(event: Event) {\r\n    if (this.disableSelectAllTab()) {\r\n      return;\r\n    }\r\n\r\n    const state = this.selectThisTabState();\r\n    const checked = !state.checked || state.indeterminate;\r\n\r\n    this.permissionsState.update(permissions => {\r\n      let updatedPermissions = [...permissions];\r\n\r\n      this.selectedGroupPermissions().forEach(permission => {\r\n        if (this.isGrantedByOtherProviderName(permission.grantedProviders)) {\r\n          return;\r\n        }\r\n\r\n        const index = updatedPermissions.findIndex(per => per.name === permission.name);\r\n        if (index < 0) {\r\n          return;\r\n        }\r\n\r\n        updatedPermissions = [\r\n          ...updatedPermissions.slice(0, index),\r\n          { ...updatedPermissions[index], isGranted: checked },\r\n          ...updatedPermissions.slice(index + 1),\r\n        ];\r\n      });\r\n\r\n      return updatedPermissions;\r\n    });\r\n  }\r\n\r\n  onSelectAllChange(event: Event) {\r\n    if (this.disabledSelectAllInAllTabs()) {\r\n      return;\r\n    }\r\n\r\n    const state = this.selectAllTabState();\r\n    const checked = !state.checked || state.indeterminate;\r\n\r\n    if (this.filter()) {\r\n      this.onFilterChange('');\r\n    }\r\n\r\n    this.permissionsState.update(permissions =>\r\n      permissions.map(permission => ({\r\n        ...permission,\r\n        isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || checked,\r\n      })),\r\n    );\r\n  }\r\n\r\n  onFilterChange(value: string) {\r\n    this.filter.set(value);\r\n    this.syncSelectedGroupWithFilter();\r\n  }\r\n\r\n  private syncSelectedGroupWithFilter() {\r\n    const groups = this.permissionGroups();\r\n\r\n    if (!groups.length) {\r\n      this.setSelectedGroup(null);\r\n      return;\r\n    }\r\n\r\n    if (!groups.some(group => group.name === this.selectedGroupState()?.name)) {\r\n      this.onChangeGroup(groups[0]);\r\n    }\r\n  }\r\n\r\n  onTabChange(groupName: string) {\r\n    const group = this.permissionGroups().find(g => g.name === groupName);\r\n    if (group) {\r\n      this.onChangeGroup(group);\r\n    }\r\n  }\r\n\r\n  onChangeGroup(group: PermissionGroupDto) {\r\n    this.setSelectedGroup(group);\r\n  }\r\n\r\n  submit() {\r\n    if (this.modalBusy()) {\r\n      return;\r\n    }\r\n\r\n    const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n    const changedPermissions: UpdatePermissionDto[] = this.permissionsState()\r\n      .filter(per =>\r\n        (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\r\n        per.isGranted\r\n          ? false\r\n          : true,\r\n      )\r\n      .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n    if (!changedPermissions.length) {\r\n      this.hideModal();\r\n      return;\r\n    }\r\n\r\n    this.modalBusy.set(true);\r\n    this.service\r\n      .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n      .pipe(\r\n        tap(() => this.hideModal()),\r\n        switchMap(() =>\r\n          this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n        ),\r\n        finalize(() => this.modalBusy.set(false)),\r\n      )\r\n      .subscribe(() => {\r\n        this.toasterService.success('AbpUi::SavedSuccessfully');\r\n      });\r\n  }\r\n\r\n  openModal() {\r\n    const providerName = this.providerName;\r\n    const providerKey = this.providerKey;\r\n\r\n    if (!providerKey || !providerName) {\r\n      throw new Error('Provider Key and Provider Name are required.');\r\n    }\r\n\r\n    return this.service.get(providerName, providerKey).pipe(\r\n      tap((permissionRes: GetPermissionListResultDto) => {\r\n        const { groups } = permissionRes || {};\r\n\r\n        this.data = permissionRes;\r\n        this.permissionGroupSignal.set(groups);\r\n        const permissions = getPermissions(groups);\r\n        this.permissionsState.set(permissions);\r\n        this.disabledSelectAllInAllTabsState.set(isSelectAllDisabled(permissions, providerName));\r\n        this.setSelectedGroup(groups[0] ?? null);\r\n      }),\r\n    );\r\n  }\r\n\r\n  getAssignedCount(groupName: string) {\r\n    return this.permissionsState().reduce(\r\n      (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n      0,\r\n    );\r\n  }\r\n\r\n  shouldFetchAppConfig() {\r\n    const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n    const providerName = this.providerName;\r\n    const providerKey = this.providerKey;\r\n\r\n    if (providerName === 'R') return currentUser.roles.some(role => role === providerKey);\r\n\r\n    if (providerName === 'U') return currentUser.id === providerKey;\r\n\r\n    return false;\r\n  }\r\n}\r\n\r\nfunction isSelectAllDisabled(\r\n  permissions: PermissionGrantInfoDto[] | undefined,\r\n  providerName: string,\r\n): boolean {\r\n  if (!permissions?.length) {\r\n    return false;\r\n  }\r\n\r\n  return permissions.every(\r\n    permission =>\r\n      permission.isGranted &&\r\n      permission.grantedProviders?.every(p => p.providerName !== providerName),\r\n  );\r\n}\r\n\r\nfunction getSelectAllCheckboxState(permissions: PermissionGrantInfoDto[]): SelectAllCheckboxState {\r\n  if (!permissions.length) {\r\n    return { checked: false, indeterminate: false };\r\n  }\r\n\r\n  const grantedCount = permissions.filter(permission => permission.isGranted).length;\r\n\r\n  if (grantedCount === 0) {\r\n    return { checked: false, indeterminate: false };\r\n  }\r\n\r\n  if (grantedCount === permissions.length) {\r\n    return { checked: true, indeterminate: false };\r\n  }\r\n\r\n  return { checked: false, indeterminate: true };\r\n}\r\n\r\nfunction findParentPermissions(\r\n  permissions: PermissionGrantInfoDto[],\r\n  permission: PermissionGrantInfoDto,\r\n): PermissionGrantInfoDto[] {\r\n  const permissionMap = new Map(permissions.map(p => [p.name, p]));\r\n  let currentPermission = permissionMap.get(permission.name) ?? null;\r\n  const parentPermissions: PermissionGrantInfoDto[] = [];\r\n\r\n  while (currentPermission && currentPermission.parentName) {\r\n    const parentPermission = permissionMap.get(currentPermission.parentName);\r\n    if (!parentPermission) {\r\n      break;\r\n    }\r\n    parentPermissions.push(parentPermission);\r\n    currentPermission = parentPermission;\r\n  }\r\n\r\n  return parentPermissions;\r\n}\r\n\r\nfunction findMargin(\r\n  permissions: PermissionGrantInfoDto[],\r\n  permission: PermissionGrantInfoDto,\r\n): number {\r\n  const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n  if (parentPermission && parentPermission.parentName) {\r\n    let margin = 20;\r\n    return (margin += findMargin(permissions, parentPermission));\r\n  }\r\n\r\n  return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n  return groups.reduce(\r\n    (acc, val) => [\r\n      ...acc,\r\n      ...val.permissions.map<PermissionWithGroupName>(p => ({ ...p, groupName: val.name || '' })),\r\n    ],\r\n    [] as PermissionWithGroupName[],\r\n  );\r\n}\r\n","<abp-modal\r\n  [(visible)]=\"modalVisible\"\r\n  (visibleChange)=\"onModalVisibleChange($event)\"\r\n  (disappear)=\"onModalDisappear()\"\r\n  [busy]=\"modalBusy()\"\r\n  [suppressUnsavedChangesWarning]=\"true\"\r\n  [options]=\"{ size: 'lg', scrollable: false }\"\r\n>\r\n  @if (data.entityDisplayName || entityDisplayName()) {\r\n    <ng-template #abpHeader>\r\n      <h4>\r\n        {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n        {{ entityDisplayName() || data.entityDisplayName }}\r\n      </h4>\r\n    </ng-template>\r\n    <ng-template #abpBody>\r\n      <div class=\"row d-flex align-items-center mb-2\">\r\n        <div class=\"col\">\r\n          <div class=\"input-group mb-2\">\r\n            <span class=\"input-group-text\" id=\"basic-addon1\"><i class=\"bi bi-search\"></i></span>\r\n            <input\r\n              type=\"text\"\r\n              class=\"form-control\"\r\n              id=\"permission-search\"\r\n              placeholder=\"Filter\"\r\n              [ngModel]=\"filter()\"\r\n              (ngModelChange)=\"onFilterChange($event)\"\r\n            />\r\n          </div>\r\n        </div>\r\n        <div class=\"col-auto\">\r\n          <div class=\"form-check mb-2\">\r\n            <input\r\n              #selectAllInAllTabsRef\r\n              type=\"checkbox\"\r\n              id=\"select-all-in-all-tabs\"\r\n              name=\"select-all-in-all-tabs\"\r\n              class=\"form-check-input\"\r\n              [checked]=\"selectAllTabState().checked\"\r\n              [indeterminate]=\"selectAllTabState().indeterminate\"\r\n              (change)=\"onSelectAllChange($event)\"\r\n              [disabled]=\"disabledSelectAllInAllTabs()\"\r\n            />\r\n            <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n              'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n            }}</label>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <fieldset class=\"border rounded-4 p-3\">\r\n        <legend class=\"px-1 h5 mb-0\">\r\n          {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\r\n        </legend>\r\n        <div class=\"row\" ngTabs orientation=\"vertical\">\r\n          <div class=\"col-md-4\">\r\n            <div\r\n              class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\"\r\n              ngTabList\r\n              orientation=\"vertical\"\r\n              selectionMode=\"follow\"\r\n              [selectedTab]=\"selectedGroup?.name\"\r\n              (selectedTabChange)=\"onTabChange($event)\"\r\n            >\r\n              <div class=\"nav nav-pills flex-column\">\r\n                @for (group of permissionGroups(); track $index) {\r\n                  <div class=\"border nav-item\">\r\n                    @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n                      <button\r\n                        ngTab\r\n                        [value]=\"group.name\"\r\n                        class=\"nav-link pointer text-start w-100\"\r\n                        #tab=\"ngTab\"\r\n                        [class.active]=\"tab.selected()\"\r\n                        type=\"button\"\r\n                      >\r\n                        <div [class.font-weight-bold]=\"count.assignedCount\">\r\n                          {{ group?.displayName }}\r\n                          @if (count.assignedCount > 0) {\r\n                            <span>({{ count.assignedCount }})</span>\r\n                          }\r\n                        </div>\r\n                      </button>\r\n                    }\r\n                  </div>\r\n                }\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"col-md-8 scroll-in-modal\">\r\n            @for (group of permissionGroups(); track $index) {\r\n              <div ngTabPanel [value]=\"group.name\">\r\n                <ng-template ngTabContent>\r\n                  <div class=\"ps-1\">\r\n                    @if (selectedGroup?.name === group.name && selectedGroupPermissions().length) {\r\n                      <div class=\"form-check mb-2\">\r\n                        <input\r\n                          #selectAllInThisTabsRef\r\n                          type=\"checkbox\"\r\n                          id=\"select-all-in-this-tabs\"\r\n                          name=\"select-all-in-this-tabs\"\r\n                          class=\"form-check-input\"\r\n                          [checked]=\"selectThisTabState().checked\"\r\n                          [indeterminate]=\"selectThisTabState().indeterminate\"\r\n                          [disabled]=\"disableSelectAllTab()\"\r\n                          (change)=\"onSelectThisTabChange($event)\"\r\n                        />\r\n                        <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n                          'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n                        }}</label>\r\n                      </div>\r\n                      <hr class=\"my-2\" />\r\n                      @for (permission of selectedGroupPermissions(); track $index; let i = $index) {\r\n                        <div [ngStyle]=\"permission.style\" class=\"form-check mb-2\">\r\n                          <input\r\n                            #permissionCheckbox\r\n                            type=\"checkbox\"\r\n                            [checked]=\"getChecked(permission.name)\"\r\n                            [value]=\"getChecked(permission.name)\"\r\n                            [attr.id]=\"permission.name\"\r\n                            class=\"form-check-input\"\r\n                            [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n                            (click)=\"onClickCheckbox(permission)\"\r\n                          />\r\n                          <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n                            >{{ permission.displayName }}\r\n                            @if (!hideBadges) {\r\n                              @for (provider of permission.grantedProviders; track $index) {\r\n                                <span class=\"badge bg-primary text-dark\"\r\n                                  >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n                                >\r\n                              }\r\n                            }\r\n                          </label>\r\n                        </div>\r\n                      }\r\n                    }\r\n                  </div>\r\n                </ng-template>\r\n              </div>\r\n            }\r\n          </div>\r\n        </div>\r\n      </fieldset>\r\n    </ng-template>\r\n    <ng-template #abpFooter>\r\n      <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n        {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n      </button>\r\n      <abp-button iconClass=\"fa fa-check\" buttonType=\"button\" (click)=\"submit()\">{{\r\n        'AbpIdentity::Save' | abpLocalization\r\n      }}</abp-button>\r\n    </ng-template>\r\n  }\r\n</abp-modal>\r\n","export enum eResourcePermissionViewModes {\r\n    List = 'list',\r\n    Add = 'add',\r\n    Edit = 'edit',\r\n}\r\n","import { Injectable, signal, computed } from '@angular/core';\r\nimport {\r\n    ResourcePermissionGrantInfoDto,\r\n    ResourceProviderDto,\r\n    ResourcePermissionDefinitionDto,\r\n    SearchProviderKeyInfo,\r\n    ResourcePermissionWithProdiverGrantInfoDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { eResourcePermissionViewModes } from '../enums/view-modes';\r\n\r\n@Injectable()\r\nexport class ResourcePermissionStateService {\r\n    // View state\r\n    readonly viewMode = signal<eResourcePermissionViewModes>(eResourcePermissionViewModes.List);\r\n    readonly modalBusy = signal(false);\r\n    readonly hasResourcePermission = signal(false);\r\n    readonly hasProviderKeyLookupService = signal(false);\r\n\r\n    // Resource data\r\n    readonly resourceName = signal('');\r\n    readonly resourceKey = signal('');\r\n    readonly resourceDisplayName = signal<string | undefined>(undefined);\r\n\r\n    // Permissions data\r\n    readonly allResourcePermissions = signal<ResourcePermissionGrantInfoDto[]>([]);\r\n    readonly resourcePermissions = signal<ResourcePermissionGrantInfoDto[]>([]);\r\n    readonly totalCount = signal(0);\r\n    readonly permissionDefinitions = signal<ResourcePermissionDefinitionDto[]>([]);\r\n    readonly permissionsWithProvider = signal<ResourcePermissionWithProdiverGrantInfoDto[]>([]);\r\n    readonly selectedPermissions = signal<string[]>([]);\r\n\r\n    // Provider data\r\n    readonly providers = signal<ResourceProviderDto[]>([]);\r\n    readonly selectedProviderName = signal('');\r\n    readonly selectedProviderKey = signal('');\r\n\r\n    // Edit mode specific\r\n    readonly editProviderName = signal('');\r\n    readonly editProviderKey = signal('');\r\n\r\n    // Search state\r\n    readonly searchFilter = signal('');\r\n    readonly searchResults = signal<SearchProviderKeyInfo[]>([]);\r\n    readonly showDropdown = signal(false);\r\n\r\n    // Computed properties\r\n    readonly isAddMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Add);\r\n    readonly isEditMode = computed(() => this.viewMode() === eResourcePermissionViewModes.Edit);\r\n    readonly isListMode = computed(() => this.viewMode() === eResourcePermissionViewModes.List);\r\n\r\n    readonly currentPermissionsList = computed(() =>\r\n        this.isAddMode() ? this.permissionDefinitions() : this.permissionsWithProvider()\r\n    );\r\n\r\n    readonly allPermissionsSelected = computed(() => {\r\n        const definitions = this.currentPermissionsList();\r\n        return definitions.length > 0 &&\r\n            definitions.every(p => this.selectedPermissions().includes(p.name || ''));\r\n    });\r\n\r\n    readonly canSave = computed(() => {\r\n        if (this.isAddMode()) {\r\n            return !!this.selectedProviderKey() && this.selectedPermissions().length > 0;\r\n        }\r\n        return this.selectedPermissions().length >= 0;\r\n    });\r\n\r\n    // State transition methods\r\n    goToListMode() {\r\n        this.viewMode.set(eResourcePermissionViewModes.List);\r\n        this.selectedPermissions.set([]);\r\n    }\r\n\r\n    goToAddMode() {\r\n        this.viewMode.set(eResourcePermissionViewModes.Add);\r\n        this.selectedPermissions.set([]);\r\n        this.selectedProviderKey.set('');\r\n        this.searchResults.set([]);\r\n        this.searchFilter.set('');\r\n    }\r\n\r\n    prepareEditMode(grant: ResourcePermissionGrantInfoDto) {\r\n        this.editProviderName.set(grant.providerName || '');\r\n        this.editProviderKey.set(grant.providerKey || '');\r\n    }\r\n\r\n    setEditModePermissions(permissions: ResourcePermissionWithProdiverGrantInfoDto[]) {\r\n        this.permissionsWithProvider.set(permissions);\r\n        this.selectedPermissions.set(\r\n            permissions.filter(p => p.isGranted).map(p => p.name || '')\r\n        );\r\n        this.viewMode.set(eResourcePermissionViewModes.Edit);\r\n    }\r\n\r\n    // Permission selection methods\r\n    togglePermission(permissionName: string) {\r\n        const current = this.selectedPermissions();\r\n        if (current.includes(permissionName)) {\r\n            this.selectedPermissions.set(current.filter(p => p !== permissionName));\r\n        } else {\r\n            this.selectedPermissions.set([...current, permissionName]);\r\n        }\r\n    }\r\n\r\n    toggleAllPermissions(selectAll: boolean) {\r\n        const permissions = this.currentPermissionsList();\r\n        this.selectedPermissions.set(\r\n            selectAll ? permissions.map(p => p.name || '') : []\r\n        );\r\n    }\r\n\r\n    isPermissionSelected(permissionName: string): boolean {\r\n        return this.selectedPermissions().includes(permissionName);\r\n    }\r\n\r\n    // Provider search methods\r\n    onProviderChange(providerName: string) {\r\n        this.selectedProviderName.set(providerName);\r\n        this.selectedProviderKey.set('');\r\n        this.searchResults.set([]);\r\n        this.searchFilter.set('');\r\n    }\r\n\r\n    selectProviderKey(key: SearchProviderKeyInfo) {\r\n        this.selectedProviderKey.set(key.providerKey || '');\r\n        this.searchFilter.set(key.providerDisplayName || key.providerKey || '');\r\n        this.searchResults.set([]);\r\n        this.showDropdown.set(false);\r\n    }\r\n\r\n    // Reset all state\r\n    reset() {\r\n        this.viewMode.set(eResourcePermissionViewModes.List);\r\n        this.allResourcePermissions.set([]);\r\n        this.resourcePermissions.set([]);\r\n        this.totalCount.set(0);\r\n        this.selectedProviderName.set('');\r\n        this.selectedProviderKey.set('');\r\n        this.searchFilter.set('');\r\n        this.selectedPermissions.set([]);\r\n        this.searchResults.set([]);\r\n        this.editProviderName.set('');\r\n        this.editProviderKey.set('');\r\n    }\r\n\r\n    // Data loading helpers\r\n    setResourceData(permissions: ResourcePermissionGrantInfoDto[]) {\r\n        this.allResourcePermissions.set(permissions);\r\n        this.totalCount.set(permissions.length);\r\n    }\r\n\r\n    setProviders(providers: ResourceProviderDto[]) {\r\n        this.providers.set(providers);\r\n        this.hasProviderKeyLookupService.set(providers.length > 0);\r\n        if (providers.length) {\r\n            this.selectedProviderName.set(providers[0].name || '');\r\n        }\r\n    }\r\n\r\n    setDefinitions(permissions: ResourcePermissionDefinitionDto[]) {\r\n        this.permissionDefinitions.set(permissions);\r\n        this.hasResourcePermission.set(permissions.length > 0);\r\n    }\r\n}\r\n","import { EntityProp, ePropType } from '@abp/ng.components/extensible';\r\nimport { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';\r\nimport { of } from 'rxjs';\r\n\r\nexport const DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS = EntityProp.createMany<ResourcePermissionGrantInfoDto>([\r\n    {\r\n        type: ePropType.String,\r\n        name: 'providerWithKey',\r\n        displayName: 'AbpPermissionManagement::Provider',\r\n        sortable: false,\r\n        valueResolver: data => {\r\n            const providerName = data.record.providerName || '';\r\n            const providerDisplayName = data.record.providerDisplayName || data.record.providerKey || '';\r\n            // Get first letter of provider name for abbreviation\r\n            const abbr = providerName.charAt(0).toUpperCase();\r\n            return of(\r\n                `<span class=\"d-inline-block bg-light rounded-pill px-2 me-1 ms-1 mb-1\" title=\"${data.record.providerNameDisplayName || providerName}\">${abbr}</span>${providerDisplayName}`\r\n            );\r\n        },\r\n    },\r\n    {\r\n        type: ePropType.String,\r\n        name: 'permissions',\r\n        displayName: 'AbpPermissionManagement::Permissions',\r\n        sortable: false,\r\n        valueResolver: data => {\r\n            const permissions = data.record.permissions || [];\r\n            const pills = permissions\r\n                .map(p => `<span class=\"d-inline-block bg-light rounded-pill px-2 me-1 mb-1\">${p.displayName}</span>`)\r\n                .join('');\r\n            return of(pills);\r\n        },\r\n    },\r\n]);\r\n","import { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';\r\nimport { EntityPropContributorCallback } from '@abp/ng.components/extensible';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS } from '../defaults/default-resource-permission-entity-props';\r\nimport { ePermissionManagementComponents } from '../enums/components';\r\n\r\nexport const DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP = {\r\n    [ePermissionManagementComponents.ResourcePermissions]: DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS,\r\n};\r\n\r\nexport const RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS = new InjectionToken<EntityPropContributors>(\r\n    'RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS',\r\n);\r\n\r\ntype EntityPropContributors = Partial<{\r\n    [ePermissionManagementComponents.ResourcePermissions]: EntityPropContributorCallback<ResourcePermissionGrantInfoDto>[];\r\n}>;\r\n","import {\r\n    ExtensionsService,\r\n    mergeWithDefaultProps,\r\n} from '@abp/ng.components/extensible';\r\nimport { inject } from '@angular/core';\r\nimport {\r\n    RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS,\r\n    DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP,\r\n} from '../tokens';\r\n\r\nexport function configureResourcePermissionExtensions() {\r\n    const extensions = inject(ExtensionsService);\r\n\r\n    const config = { optional: true };\r\n\r\n    const propContributors = inject(RESOURCE_PERMISSION_ENTITY_PROP_CONTRIBUTORS, config) || {};\r\n\r\n    mergeWithDefaultProps(\r\n        extensions.entityProps,\r\n        DEFAULT_RESOURCE_PERMISSION_ENTITY_PROPS_MAP,\r\n        propContributors,\r\n    );\r\n}\r\n","import { Component, inject, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { ListService, LocalizationPipe } from '@abp/ng.core';\r\nimport { ExtensibleTableComponent, EXTENSIONS_IDENTIFIER } from '@abp/ng.components/extensible';\r\nimport { ResourcePermissionGrantInfoDto } from '@abp/ng.permission-management/proxy';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\nimport { ePermissionManagementComponents } from '../../../enums/components';\r\nimport { configureResourcePermissionExtensions } from '../../../services/extensions.service';\r\n\r\n@Component({\r\n    selector: 'abp-resource-permission-list',\r\n    templateUrl: './resource-permission-list.component.html',\r\n    providers: [\r\n        ListService,\r\n        {\r\n            provide: EXTENSIONS_IDENTIFIER,\r\n            useValue: ePermissionManagementComponents.ResourcePermissions,\r\n        },\r\n    ],\r\n    imports: [LocalizationPipe, ExtensibleTableComponent],\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ResourcePermissionListComponent {\r\n    readonly state = inject(ResourcePermissionStateService);\r\n    readonly list = inject(ListService);\r\n\r\n    readonly addClicked = output<void>();\r\n    readonly editClicked = output<ResourcePermissionGrantInfoDto>();\r\n    readonly deleteClicked = output<ResourcePermissionGrantInfoDto>();\r\n\r\n    constructor() {\r\n        configureResourcePermissionExtensions();\r\n    }\r\n}\r\n","<div class=\"d-grid gap-2 mb-3 d-md-flex justify-content-md-end\">\r\n  <button class=\"btn btn-sm btn-primary\" type=\"button\" (click)=\"addClicked.emit()\">\r\n    <i class=\"fa fa-plus me-1\"></i>\r\n    {{ 'AbpPermissionManagement::AddResourcePermission' | abpLocalization }}\r\n  </button>\r\n</div>\r\n\r\n<ng-template #actionsTemplate let-row>\r\n  <div class=\"btn-group btn-group-sm\" role=\"group\">\r\n    <button\r\n      class=\"btn btn-outline-primary\"\r\n      type=\"button\"\r\n      (click)=\"editClicked.emit(row)\"\r\n      [title]=\"'AbpUi::Edit' | abpLocalization\"\r\n    >\r\n      <i class=\"fa fa-edit\"></i>\r\n    </button>\r\n    <button\r\n      class=\"btn btn-outline-danger\"\r\n      type=\"button\"\r\n      (click)=\"deleteClicked.emit(row)\"\r\n      [title]=\"'AbpUi::Delete' | abpLocalization\"\r\n    >\r\n      <i class=\"fa fa-trash\"></i>\r\n    </button>\r\n  </div>\r\n</ng-template>\r\n\r\n@if (state.resourcePermissions().length > 0) {\r\n  <abp-extensible-table\r\n    [data]=\"state.resourcePermissions()\"\r\n    [recordsTotal]=\"state.totalCount()\"\r\n    [list]=\"list\"\r\n    [actionsTemplate]=\"actionsTemplate\"\r\n    actionsText=\"AbpUi::Actions\"\r\n  />\r\n} @else {\r\n  <div class=\"alert alert-info\">\r\n    {{ 'AbpPermissionManagement::NoPermissionsAssigned' | abpLocalization }}\r\n  </div>\r\n}\r\n","import {\r\n  Component,\r\n  input,\r\n  inject,\r\n  OnInit,\r\n  ChangeDetectionStrategy,\r\n  DestroyRef,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { PermissionsService } from '@abp/ng.permission-management/proxy';\r\nimport { LookupSearchComponent, LookupItem } from '@abp/ng.components/lookup';\r\nimport { Observable, map } from 'rxjs';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\n\r\ninterface ProviderKeyLookupItem extends LookupItem {\r\n  providerKey: string;\r\n  providerDisplayName?: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'abp-provider-key-search',\r\n  templateUrl: './provider-key-search.component.html',\r\n  imports: [LookupSearchComponent],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProviderKeySearchComponent implements OnInit {\r\n  readonly state = inject(ResourcePermissionStateService);\r\n  private readonly service = inject(PermissionsService);\r\n  private readonly destroyRef = inject(DestroyRef);\r\n\r\n  readonly resourceName = input.required<string>();\r\n\r\n  searchFn: (filter: string) => Observable<ProviderKeyLookupItem[]> = () => new Observable();\r\n\r\n  ngOnInit() {\r\n    this.searchFn = (filter: string) => this.loadProviderKeys(filter);\r\n  }\r\n\r\n  onItemSelected(item: ProviderKeyLookupItem) {\r\n    // State is already updated via displayValue and selectedValue bindings\r\n    // This handler can be used for additional side effects if needed\r\n  }\r\n\r\n  private loadProviderKeys(filter: string): Observable<ProviderKeyLookupItem[]> {\r\n    const providerName = this.state.selectedProviderName();\r\n    if (!providerName) {\r\n      return new Observable(subscriber => {\r\n        subscriber.next([]);\r\n        subscriber.complete();\r\n      });\r\n    }\r\n\r\n    return this.service\r\n      .searchResourceProviderKey(this.resourceName(), providerName, filter, 1)\r\n      .pipe(\r\n        map(res =>\r\n          (res.keys || []).map(k => ({\r\n            key: k.providerKey || '',\r\n            displayName: k.providerDisplayName || k.providerKey || '',\r\n            providerKey: k.providerKey || '',\r\n            providerDisplayName: k.providerDisplayName || undefined,\r\n          })),\r\n        ),\r\n        takeUntilDestroyed(this.destroyRef),\r\n      );\r\n  }\r\n}\r\n","<abp-lookup-search\r\n  label=\"AbpPermissionManagement::SearchProviderKey\"\r\n  placeholder=\"AbpPermissionManagement::SearchProviderKey\"\r\n  [searchFn]=\"searchFn\"\r\n  [displayValue]=\"state.searchFilter()\"\r\n  (displayValueChange)=\"state.searchFilter.set($event)\"\r\n  [selectedValue]=\"state.selectedProviderKey()\"\r\n  (selectedValueChange)=\"state.selectedProviderKey.set($event)\"\r\n  (itemSelected)=\"onItemSelected($event)\"\r\n/>\r\n","import { Component, input, inject, ChangeDetectionStrategy } from '@angular/core';\r\nimport { LocalizationPipe } from '@abp/ng.core';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\n\r\ninterface PermissionItem {\r\n    name?: string | null;\r\n    displayName?: string | null;\r\n}\r\n\r\n@Component({\r\n    selector: 'abp-permission-checkbox-list',\r\n    templateUrl: './permission-checkbox-list.component.html',\r\n    styleUrl: './permission-checkbox-list.component.scss',\r\n    imports: [LocalizationPipe],\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PermissionCheckboxListComponent {\r\n    readonly state = inject(ResourcePermissionStateService);\r\n\r\n    readonly permissions = input.required<PermissionItem[]>();\r\n    readonly idPrefix = input<string>('default');\r\n    readonly title = input<string>('AbpPermissionManagement::ResourcePermissionPermissions');\r\n    readonly showTitle = input<boolean>(true);\r\n}\r\n","<div class=\"mb-3\">\r\n  @if (showTitle()) {\r\n    <h5>{{ title() | abpLocalization }}</h5>\r\n  }\r\n  <div class=\"form-check form-switch mb-2\">\r\n    <input\r\n      class=\"form-check-input\"\r\n      type=\"checkbox\"\r\n      id=\"grantAll-{{ idPrefix() }}\"\r\n      [checked]=\"state.allPermissionsSelected()\"\r\n      (change)=\"state.toggleAllPermissions(!state.allPermissionsSelected())\"\r\n    />\r\n    <label class=\"form-check-label\" for=\"grantAll-{{ idPrefix() }}\">\r\n      {{ 'AbpPermissionManagement::GrantAllResourcePermissions' | abpLocalization }}\r\n    </label>\r\n  </div>\r\n  <div class=\"abp-permission-list-container border rounded p-3\">\r\n    @for (perm of permissions(); track perm.name) {\r\n      <div class=\"form-check\">\r\n        <input\r\n          class=\"form-check-input\"\r\n          type=\"checkbox\"\r\n          id=\"perm-{{ idPrefix() }}-{{ perm.name }}\"\r\n          [checked]=\"state.isPermissionSelected(perm.name || '')\"\r\n          (change)=\"state.togglePermission(perm.name || '')\"\r\n        />\r\n        <label class=\"form-check-label\" for=\"perm-{{ idPrefix() }}-{{ perm.name }}\">\r\n          {{ perm.displayName }}\r\n        </label>\r\n      </div>\r\n    }\r\n  </div>\r\n</div>\r\n","import { Component, input, inject, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { LocalizationPipe } from '@abp/ng.core';\r\nimport { ResourcePermissionStateService } from '../../../services/resource-permission-state.service';\r\nimport { ProviderKeySearchComponent } from '../provider-key-search/provider-key-search.component';\r\nimport { PermissionCheckboxListComponent } from '../permission-checkbox-list/permission-checkbox-list.component';\r\n\r\nimport { eResourcePermissionViewModes } from '../../../enums/view-modes';\r\n\r\n@Component({\r\n    selector: 'abp-resource-permission-form',\r\n    templateUrl: './resource-permission-form.component.html',\r\n    imports: [\r\n        FormsModule,\r\n        LocalizationPipe,\r\n        ProviderKeySearchComponent,\r\n        PermissionCheckboxListComponent,\r\n    ],\r\n    changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ResourcePermissionFormComponent {\r\n    readonly state = inject(ResourcePermissionStateService);\r\n    readonly eResourcePermissionViewModes = eResourcePermissionViewModes;\r\n\r\n    readonly mode = input.required<eResourcePermissionViewModes>();\r\n    readonly resourceName = input.required<string>();\r\n\r\n    readonly save = output<void>();\r\n    readonly cancel = output<void>();\r\n}\r\n\r\n","@if (mode() === eResourcePermissionViewModes.Add) {\r\n  <div class=\"mb-3\">\r\n    <label class=\"form-label fw-bold\">\r\n      {{ 'AbpPermissionManagement::SelectProvider' | abpLocalization }}\r\n    </label>\r\n    <div class=\"mb-2\">\r\n      @for (provider of state.providers(); track provider.name; let i = $index) {\r\n        <div class=\"form-check form-check-inline\">\r\n          <input\r\n            class=\"form-check-input\"\r\n            type=\"radio\"\r\n            [id]=\"'provider-' + i\"\r\n            [value]=\"provider.name\"\r\n            [checked]=\"state.selectedProviderName() === provider.name\"\r\n            (change)=\"state.onProviderChange(provider.name || '')\"\r\n          />\r\n          <label class=\"form-check-label\" [for]=\"'provider-' + i\">\r\n            {{ provider.displayName }}\r\n          </label>\r\n        </div>\r\n      }\r\n    </div>\r\n\r\n    <abp-provider-key-search [resourceName]=\"resourceName()\" />\r\n  </div>\r\n\r\n  <abp-permission-checkbox-list [permissions]=\"state.permissionDefinitions()\" idPrefix=\"add\" />\r\n} @else {\r\n  <div class=\"mb-3\" id=\"permissionList\">\r\n    <abp-permission-checkbox-list\r\n      [permissions]=\"state.permissionsWithProvider()\"\r\n      idPrefix=\"edit\"\r\n      [showTitle]=\"false\"\r\n    />\r\n  </div>\r\n}\r\n","import { ListService, LocalizationPipe } from '@abp/ng.core';\r\nimport {\r\n  ButtonComponent,\r\n  Confirmation,\r\n  ConfirmationService,\r\n  ModalCloseDirective,\r\n  ModalComponent,\r\n  ToasterService,\r\n} from '@abp/ng.theme.shared';\r\nimport {\r\n  PermissionsService,\r\n  ResourcePermissionGrantInfoDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport {\r\n  Component,\r\n  effect,\r\n  inject,\r\n  input,\r\n  model,\r\n  signal,\r\n  untracked,\r\n  ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { finalize, switchMap, of } from 'rxjs';\r\nimport { ResourcePermissionStateService } from '../../services/resource-permission-state.service';\r\nimport { ResourcePermissionListComponent } from './resource-permission-list/resource-permission-list.component';\r\nimport { ResourcePermissionFormComponent } from './resource-permission-form/resource-permission-form.component';\r\n\r\nimport { eResourcePermissionViewModes } from '../../enums/view-modes';\r\n\r\nconst DEFAULT_MAX_RESULT_COUNT = 10;\r\n\r\n@Component({\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  selector: 'abp-resource-permission-management',\r\n  templateUrl: './resource-permission-management.component.html',\r\n  exportAs: 'abpResourcePermissionManagement',\r\n  providers: [ResourcePermissionStateService, ListService],\r\n  imports: [\r\n    ModalComponent,\r\n    LocalizationPipe,\r\n    ButtonComponent,\r\n    ModalCloseDirective,\r\n    ResourcePermissionListComponent,\r\n    ResourcePermissionFormComponent,\r\n  ],\r\n})\r\nexport class ResourcePermissionManagementComponent {\r\n  readonly eResourcePermissionViewModes = eResourcePermissionViewModes;\r\n\r\n  protected readonly service = inject(PermissionsService);\r\n  protected readonly toasterService = inject(ToasterService);\r\n  protected readonly confirmationService = inject(ConfirmationService);\r\n  protected readonly state = inject(ResourcePermissionStateService);\r\n  protected readonly list = inject(ListService);\r\n\r\n  readonly resourceName = input.required<string>();\r\n  readonly resourceKey = input.required<string>();\r\n  readonly resourceDisplayName = input<string>();\r\n\r\n  readonly visible = model<boolean>(false);\r\n\r\n  private readonly previousVisible = signal(false);\r\n\r\n  private readonly listData = toSignal(\r\n    this.list.hookToQuery(query => {\r\n      const allData = this.state.allResourcePermissions();\r\n      const skipCount = query.skipCount || 0;\r\n      const maxResultCount = query.maxResultCount || DEFAULT_MAX_RESULT_COUNT;\r\n\r\n      const paginatedData = allData.slice(skipCount, skipCount + maxResultCount);\r\n\r\n      return of({\r\n        items: paginatedData,\r\n        totalCount: allData.length,\r\n      });\r\n    }),\r\n    { initialValue: { items: [] as ResourcePermissionGrantInfoDto[], totalCount: 0 } },\r\n  );\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      const result = this.listData();\r\n      untracked(() => {\r\n        this.state.resourcePermissions.set(result.items);\r\n        this.state.totalCount.set(result.totalCount);\r\n      });\r\n    });\r\n\r\n    effect(() => {\r\n      const resourceName = this.resourceName();\r\n      const resourceKey = this.resourceKey();\r\n      const resourceDisplayName = this.resourceDisplayName();\r\n\r\n      untracked(() => {\r\n        this.state.resourceName.set(resourceName);\r\n        this.state.resourceKey.set(resourceKey);\r\n        this.state.resourceDisplayName.set(resourceDisplayName);\r\n      });\r\n    });\r\n\r\n    effect(() => {\r\n      const isVisible = this.visible();\r\n      const wasVisible = this.previousVisible();\r\n      if (isVisible && !wasVisible) {\r\n        this.openModal();\r\n      } else if (!isVisible && wasVisible) {\r\n        this.state.reset();\r\n      }\r\n      untracked(() => this.previousVisible.set(isVisible));\r\n    });\r\n  }\r\n\r\n  openModal() {\r\n    this.state.modalBusy.set(true);\r\n\r\n    this.service\r\n      .getResource(this.resourceName(), this.resourceKey())\r\n      .pipe(\r\n        switchMap(permRes => {\r\n          this.state.setResourceData(permRes.permissions || []);\r\n          this.list.get();\r\n          return this.service.getResourceProviderKeyLookupServices(this.resourceName());\r\n        }),\r\n        switchMap(providerRes => {\r\n          this.state.setProviders(providerRes.providers || []);\r\n          return this.service.getResourceDefinitions(this.resourceName());\r\n        }),\r\n        finalize(() => this.state.modalBusy.set(false)),\r\n      )\r\n      .subscribe({\r\n        next: defRes => {\r\n          this.state.setDefinitions(defRes.permissions || []);\r\n        },\r\n        error: () => {\r\n          this.toasterService.error('AbpPermissionManagement::ErrorLoadingPermissions');\r\n        },\r\n      });\r\n  }\r\n\r\n  onAddClicked() {\r\n    this.state.goToAddMode();\r\n  }\r\n\r\n  onEditClicked(grant: ResourcePermissionGrantInfoDto) {\r\n    this.state.prepareEditMode(grant);\r\n    this.state.modalBusy.set(true);\r\n\r\n    this.service\r\n      .getResourceByProvider(\r\n        this.resourceName(),\r\n        this.resourceKey(),\r\n        grant.providerName || '',\r\n        grant.providerKey || '',\r\n      )\r\n      .pipe(finalize(() => this.state.modalBusy.set(false)))\r\n      .subscribe({\r\n        next: res => {\r\n          this.state.setEditModePermissions(res.permissions || []);\r\n        },\r\n      });\r\n  }\r\n\r\n  onDeleteClicked(grant: ResourcePermissionGrantInfoDto) {\r\n    this.confirmationService\r\n      .warn(\r\n        'AbpPermissionManagement::ResourcePermissionDeletionConfirmationMessage',\r\n        'AbpPermissionManagement::AreYouSure',\r\n        {\r\n          messageLocalizationParams: [grant.providerKey || ''],\r\n        },\r\n      )\r\n      .subscribe((status: Confirmation.Status) => {\r\n        if (status === Confirmation.Status.confirm) {\r\n          this.state.modalBusy.set(true);\r\n          this.service\r\n            .deleteResource(\r\n              this.resourceName(),\r\n              this.resourceKey(),\r\n              grant.providerName || '',\r\n              grant.providerKey || '',\r\n            )\r\n            .pipe(\r\n              switchMap(() => this.service.getResource(this.resourceName(), this.resourceKey())),\r\n              finalize(() => this.state.modalBusy.set(false)),\r\n            )\r\n            .subscribe({\r\n              next: res => {\r\n                this.state.setResourceData(res.permissions || []);\r\n                this.list.get();\r\n                this.toasterService.success('AbpUi::DeletedSuccessfully');\r\n              },\r\n            });\r\n        }\r\n      });\r\n  }\r\n\r\n  savePermission() {\r\n    const isEdit = this.state.isEditMode();\r\n    const providerName = isEdit ? this.state.editProviderName() : this.state.selectedProviderName();\r\n    const providerKey = isEdit ? this.state.editProviderKey() : this.state.selectedProviderKey();\r\n\r\n    if (!isEdit && !this.state.canSave()) {\r\n      this.toasterService.warn('AbpPermissionManagement::PleaseSelectProviderAndPermissions');\r\n      return;\r\n    }\r\n\r\n    this.state.modalBusy.set(true);\r\n    this.service\r\n      .updateResource(this.resourceName(), this.resourceKey(), {\r\n        providerName,\r\n        providerKey,\r\n        permissions: this.state.selectedPermissions(),\r\n      })\r\n      .pipe(\r\n        switchMap(() => this.service.getResource(this.resourceName(), this.resourceKey())),\r\n        finalize(() => this.state.modalBusy.set(false)),\r\n      )\r\n      .subscribe({\r\n        next: res => {\r\n          this.state.setResourceData(res.permissions || []);\r\n          this.list.get();\r\n          this.toasterService.success('AbpUi::SavedSuccessfully');\r\n          this.state.goToListMode();\r\n        },\r\n      });\r\n  }\r\n}\r\n","<abp-modal\r\n  [(visible)]=\"visible\"\r\n  [busy]=\"state.modalBusy()\"\r\n  [options]=\"{ size: 'xl', scrollable: false }\"\r\n>\r\n  <ng-template #abpHeader>\r\n    <h5 class=\"modal-title\">\r\n      @switch (state.viewMode()) {\r\n        @case (eResourcePermissionViewModes.Edit) {\r\n          {{ 'AbpPermissionManagement::UpdatePermission' | abpLocalization }}\r\n        }\r\n        @case (eResourcePermissionViewModes.Add) {\r\n          {{ 'AbpPermissionManagement::AddResourcePermission' | abpLocalization }}\r\n        }\r\n        @default {\r\n          {{ 'AbpPermissionManagement::ResourcePermissions' | abpLocalization }}\r\n          @if (resourceDisplayName()) {\r\n            - {{ resourceDisplayName() }}\r\n          }\r\n        }\r\n      }\r\n    </h5>\r\n  </ng-template>\r\n\r\n  <ng-template #abpBody>\r\n    @if (!state.hasResourcePermission() || !state.hasProviderKeyLookupService()) {\r\n      <div class=\"alert alert-warning\" role=\"alert\">\r\n        @if (!state.hasResourcePermission()) {\r\n          {{ 'AbpPermissionManagement::NoResourcePermissionFound' | abpLocalization }}\r\n        } @else {\r\n          {{ 'AbpPermissionManagement::NoResourceProviderKeyLookupServiceFound' | abpLocalization }}\r\n        }\r\n      </div>\r\n    } @else {\r\n      @switch (state.viewMode()) {\r\n        @case (eResourcePermissionViewModes.List) {\r\n          <abp-resource-permission-list\r\n            (addClicked)=\"onAddClicked()\"\r\n            (editClicked)=\"onEditClicked($event)\"\r\n            (deleteClicked)=\"onDeleteClicked($event)\"\r\n          />\r\n        }\r\n        @case (eResourcePermissionViewModes.Add) {\r\n          <abp-resource-permission-form [mode]=\"eResourcePermissionViewModes.Add\" [resourceName]=\"resourceName()\" />\r\n        }\r\n        @case (eResourcePermissionViewModes.Edit) {\r\n          <abp-resource-permission-form [mode]=\"eResourcePermissionViewModes.Edit\" [resourceName]=\"resourceName()\" />\r\n        }\r\n      }\r\n    }\r\n  </ng-template>\r\n\r\n  <ng-template #abpFooter>\r\n    @if (state.isListMode()) {\r\n      <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n        {{ 'AbpUi::Close' | abpLocalization }}\r\n      </button>\r\n    } @else {\r\n      <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"state.goToListMode()\">\r\n        {{ 'AbpUi::Cancel' | abpLocalization }}\r\n      </button>\r\n      <abp-button iconClass=\"fa fa-check\" (click)=\"savePermission()\">\r\n        {{ 'AbpUi::Save' | abpLocalization }}\r\n      </abp-button>\r\n    }\r\n  </ng-template>\r\n</abp-modal>\r\n","import { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components';\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [PermissionManagementComponent],\r\n  exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["switchMap","finalize"],"mappings":"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"}