diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessTokenList.tsx b/apps/studio/components/interfaces/Account/AccessTokens/AccessTokenList.tsx index 321bfcac4f5..87338307292 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessTokenList.tsx +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessTokenList.tsx @@ -204,6 +204,9 @@ const AccessTokenList = ({ searchString = '' }: AccessTokenListProps) => { onClose={() => { setIsPanelOpen(false) }} + onDeleteToken={() => { + if (token) onDeleteToken(token.id) + }} /> void + onDeleteToken?: () => void } export function ViewTokenPermissionsPanel({ visible, token, onClose, + onDeleteToken, }: ViewTokenPermissionsPanelProps) { + const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false) + // Dummy access settings for demonstration const getDummyAccess = (resource: string) => { // Define realistic access patterns based on resource type @@ -85,10 +85,37 @@ export function ViewTokenPermissionsPanel({ } } + // Group resources by access level + const groupResourcesByAccess = (resources: any[]) => { + const grouped = { + 'Read only': [] as string[], + 'Read-write': [] as string[], + 'No access': [] as string[], + } + + resources.forEach((resource) => { + const access = getDummyAccess(resource.resource) + const formattedAccess = formatAccessText(access) + grouped[formattedAccess as keyof typeof grouped].push(resource.title) + }) + + return grouped + } + + const handleDeleteClick = () => { + onClose() // Close the sheet when delete dialog appears + setIsDeleteModalOpen(true) + } + + const handleDeleteConfirm = () => { + onDeleteToken?.() + setIsDeleteModalOpen(false) + } + return ( - onClose()}> - -
+ <> + onClose()}> + @@ -97,75 +124,81 @@ export function ViewTokenPermissionsPanel({

- - -
- {/* Expiry Section */} - - -
-
-

Token Expiry

-
- Dec 31, 2024 + +
+ {/* Expiry Section */} + + +
+
+

Token Expiry

- - + Dec 31, 2024 +
+
+
- {/* Permissions Tables */} - {ACCESS_TOKEN_PERMISSIONS.map((permissionGroup) => ( + {/* Permissions Groups */} + {ACCESS_TOKEN_PERMISSIONS.map((permissionGroup) => { + const groupedResources = groupResourcesByAccess(permissionGroup.resources) + + return (

{permissionGroup.name}

- - - - - - Scope - - - Access - - - - - {permissionGroup.resources.map((resource) => ( - - -
-

{resource.title}

-
-
- - - {formatAccessText(getDummyAccess(resource.resource))} - - -
- ))} -
-
+ + {Object.entries(groupedResources).map(([accessLevel, resources]) => { + if (resources.length === 0) return null + + return ( +
+

+ {accessLevel} +

+
+ {resources.join(', ')} +
+
+ ) + })}
- ))} -
- -
- - {/* - - - */} -
- - + ) + })} +
+
+ +
+ + +
+
+
+
+ + setIsDeleteModalOpen(false)} + onConfirm={handleDeleteConfirm} + > +

+ {`This action cannot be undone. Are you sure you want to delete "${token?.name}" token?`} +

+
+ ) }