import { useRouter } from 'next/router' import cx from 'classnames' import { slug as githubSlug } from 'github-slugger' import { CheckIcon, XIcon } from '@primer/octicons-react' import { HeadingLink } from '@/frame/components/article/HeadingLink' import { useTranslation } from '@/languages/components/useTranslation' import { Link } from '@/frame/components/Link' import { MainContextT } from '@/frame/components/context/MainContext' import { AutomatedPageContext, AutomatedPageContextT, } from '@/automated-pipelines/components/AutomatedPageContext' import { AutomatedPage } from '@/automated-pipelines/components/AutomatedPage' import { RestRedirect } from '@/rest/components/RestRedirect' import styles from '@/github-apps/components/PermissionTable.module.scss' const IAT_DOCS_REF = '/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation' const UAT_DOCS_REF = '/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user' type PermissionOperationsT = { slug: string category: string subcategory: string verb: string requestPath: string access: 'admin' | 'write' | 'read' 'user-to-server': boolean 'server-to-server': boolean 'additional-permissions': [] } export type PermissionT = { displayTitle: string resourceGroup: string permissions: PermissionOperationsT[] } export type PermissionListT = Record type Props = { items: PermissionListT currentVersion: string categoriesWithoutSubcategories: string[] mainContext: MainContextT automatedPageContext: AutomatedPageContextT tokenTypes?: boolean } export function PermissionsList({ items, currentVersion, categoriesWithoutSubcategories, automatedPageContext, mainContext, tokenTypes = false, }: Props) { const { locale } = useRouter() const DEFAULT_VERSION = mainContext.nonEnterpriseDefaultVersion const rootPath = currentVersion === DEFAULT_VERSION ? `/${locale}` : `/${locale}/${currentVersion}` // Translated strings const { t } = useTranslation('rest') const ENDPOINTS_TH = t('rest.overview.permissions.endpoints') const ACCESS_TH = t('rest.overview.permissions.access') const TOKENS_TH = t('rest.overview.permissions.tokens') const ADDITIONAL_TH = t('rest.overview.permissions.additionalPermissions') const UAT = t('rest.overview.permissions.uat') const IAT = t('rest.overview.permissions.iat') const content = Object.entries(items).map(([permissionName, permissionObject]) => { const { displayTitle, permissions } = permissionObject const adminPermissions = permissions.filter((permission) => permission.access === 'admin') const writePermissions = permissions.filter((permission) => permission.access === 'write') const readPermissions = permissions.filter((permission) => permission.access === 'read') const sortedPermissions = [...adminPermissions, ...writePermissions, ...readPermissions] return (
{displayTitle} {tokenTypes ? : null} {sortedPermissions.map((operation, index) => { const { slug, verb, requestPath } = operation const category = categoriesWithoutSubcategories.includes(operation.category) ? `${operation.category}` : `${operation.category}/${operation.subcategory}` const opPath = `${rootPath}/rest/${category}#${slug}` const iat = operation['server-to-server'] ? ( {IAT} ) : null const uat = operation['user-to-server'] ? ( {UAT} ) : null const permissionsClass = operation['additional-permissions'].length ? '' : 'text-center' return ( {tokenTypes ? ( ) : null} ) })}
{ENDPOINTS_TH} {ACCESS_TH}{TOKENS_TH}{ADDITIONAL_TH}
{verb.toUpperCase()} {`${requestPath}`} {operation.access} {uat}
{iat}
{operation['additional-permissions'] ? (
) }) return ( {content} ) }