({
secrets,
isLoading,
hasLoaded,
isDeleting,
onAddSecret,
onEditSecret,
onDeleteSecret,
})
| 37 | }; |
| 38 | |
| 39 | export const SecretsTable: FC<SecretsTableProps> = ({ |
| 40 | secrets, |
| 41 | isLoading, |
| 42 | hasLoaded, |
| 43 | isDeleting, |
| 44 | onAddSecret, |
| 45 | onEditSecret, |
| 46 | onDeleteSecret, |
| 47 | }) => { |
| 48 | const [secretToDelete, setSecretToDelete] = useState<UserSecret>(); |
| 49 | |
| 50 | return ( |
| 51 | <> |
| 52 | <DeleteSecretDialog |
| 53 | secret={secretToDelete} |
| 54 | isDeleting={isDeleting} |
| 55 | onCancel={() => setSecretToDelete(undefined)} |
| 56 | onConfirm={(secret) => { |
| 57 | void Promise.resolve() |
| 58 | .then(() => onDeleteSecret(secret)) |
| 59 | .then(() => { |
| 60 | setSecretToDelete(undefined); |
| 61 | }) |
| 62 | .catch(() => { |
| 63 | // onDeleteSecret reports failures with a toast before rejecting. |
| 64 | // Swallow the rejection here to avoid an unhandled promise rejection warning. |
| 65 | }); |
| 66 | }} |
| 67 | /> |
| 68 | |
| 69 | <Table aria-label="User secrets"> |
| 70 | <TableHeader> |
| 71 | <TableRow> |
| 72 | <TableHead className="w-[16%]">Name</TableHead> |
| 73 | <TableHead className="w-[14%]">Environment variable</TableHead> |
| 74 | <TableHead className="w-[18%]">File path</TableHead> |
| 75 | <TableHead className="w-[11%]">Type</TableHead> |
| 76 | <TableHead className="w-[23%]">Description</TableHead> |
| 77 | <TableHead className="w-[12%]">Updated</TableHead> |
| 78 | <TableHead className="w-[1%]" /> |
| 79 | </TableRow> |
| 80 | </TableHeader> |
| 81 | <TableBody> |
| 82 | {isLoading && <TableLoader />} |
| 83 | {hasLoaded && !isLoading && (!secrets || secrets.length === 0) && ( |
| 84 | <TableEmpty |
| 85 | message="No secrets yet" |
| 86 | description="Create a secret to inject it into workspaces you own." |
| 87 | cta={ |
| 88 | <Button onClick={(event) => onAddSecret(event.currentTarget)}> |
| 89 | Add secret |
| 90 | </Button> |
| 91 | } |
| 92 | /> |
| 93 | )} |
| 94 | {!isLoading && |
| 95 | secrets?.map((secret) => ( |
| 96 | <TableRow key={secret.id}> |
nothing calls this directly
no test coverage detected