From edb87fd3d1eb50061343264b3fccb97ceae1e9bd Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 13 May 2025 10:35:38 +0530 Subject: [PATCH] fix: expiration info, scroll indicator not shown for file tokens table. --- .../bucket-[bucket]/create/+page.svelte | 2 +- .../bucket-[bucket]/file-[file]/+page.svelte | 229 ++++++++++-------- .../bucket-[bucket]/file-[file]/store.ts | 2 +- 3 files changed, 124 insertions(+), 109 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte index 18baa01f7..ca1aa0cf5 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte @@ -114,7 +114,7 @@ size: f.size, name: f.name, removable: true, - extension: f.type, + extension: f.type }; })} on:remove={(e) => (files = removeFile(e.detail, files))} /> diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte index 92c45c8d2..0956c471e 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte @@ -3,7 +3,7 @@ import { Container } from '$lib/layout'; import { Button } from '$lib/elements/forms'; import { columns, file, tokens } from './store'; - import { toLocaleDate, toLocaleDateTime } from '$lib/helpers/date'; + import { diffDays, toLocaleDate, toLocaleDateTime } from '$lib/helpers/date'; import { sdk } from '$lib/stores/sdk'; import { addNotification } from '$lib/stores/notifications'; import { calculateSize } from '$lib/helpers/sizeConvertion'; @@ -19,6 +19,7 @@ import { ActionMenu, Alert, + Badge, Button as PinkButton, InteractiveText, Layout, @@ -189,6 +190,20 @@ return [...groups].join(', '); } + function getExpiryDetails(token: Models.ResourceToken): { + status: 'success' | 'warning' | 'error' | null; + message: string | null; + } { + if (token.expire === '') token.expire = null; + const isExpired = token.expire !== null && new Date(token.expire) < new Date(); + const isExpiring = token.expire && diffDays(new Date(), new Date(token.expire)) < 14; + + return { + status: isExpired ? 'error' : isExpiring ? 'warning' : null, + message: isExpired ? 'Expired' : isExpiring ? 'Expires soon' : null + }; + } + onMount(async () => { filePermissions = $file?.$permissions; }); @@ -240,119 +255,125 @@ -
- - File tokens - Use tokens to provide public access to the file. - - {#if $tokens.total} - - - + + File tokens + Use tokens to provide public access to the file. + + {#if $tokens.total} + + + - - - {#each $columns as { id, title } (id)} - {title} - {/each} - + + + {#each $columns as { id, title } (id)} + {title} + {/each} + - {#each $tokens.tokens as token} - - {toLocaleDate(token.$createdAt)} + {#each $tokens.tokens as token} + + {toLocaleDate(token.$createdAt)} - {token.expire - ? cleanFormattedDate(token.expire) - : 'never'} + + + {@const expiration = getExpiryDetails(token)} + {token.expire ? cleanFormattedDate(token.expire) : 'Never'} - {token.accessedAt - ? cleanFormattedDate(token.accessedAt, true) - : 'never'} - - - {#if token.$permissions.length} - - {getPermissionGroups(token.$permissions)} - - {:else} - none + {#if expiration.status} + {/if} - + + - - - - - - + {token.accessedAt + ? cleanFormattedDate(token.accessedAt, true) + : 'Never'} - - - - { - toggle(); - showCopyUrlModal = true; - selectedFileToken = token; - }} - leadingIcon={IconDuplicate}> - Copy URL - - + + {#if token.$permissions.length} + + {getPermissionGroups(token.$permissions)} + + {:else} + none + {/if} + + + + + + + + + + + + { toggle(); - showManageToken = true; + showCopyUrlModal = true; selectedFileToken = token; - }}> - Edit expiry - - { - toggle(); - showManageToken = true; - tokenPermissionsMode = true; - selectedFileToken = token; - }}> - Edit Permissions - - { - toggle(); - tokenDeleteMode = true; - showManageToken = true; - selectedFileToken = token; - }}> - Delete + }} + leadingIcon={IconDuplicate}> + Copy URL - - - - - - {/each} - - {:else} - (showManageToken = true)} - >Create new file token - {/if} - - -
+ { + toggle(); + showManageToken = true; + selectedFileToken = token; + }}> + Edit expiry + + { + toggle(); + showManageToken = true; + tokenPermissionsMode = true; + selectedFileToken = token; + }}> + Edit permissions + + { + toggle(); + tokenDeleteMode = true; + showManageToken = true; + selectedFileToken = token; + }}> + Delete + + + + + + + + {/each} + + {:else} + (showManageToken = true)}>Create new file token + {/if} + + Permissions @@ -424,9 +445,3 @@ on:deleted={async () => await deleteFileToken(selectedFileToken)} /> - - diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts index 8042caf2a..2f5748362 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts +++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts @@ -14,7 +14,7 @@ export const cachedJwts = writable>(new Map( export const columns = writable([ { id: 'created', title: 'Created', type: 'datetime', width: 200 }, - { id: 'expiry', title: 'Expiration', type: 'datetime', width: 200 }, + { id: 'expire', title: 'Expiration', type: 'datetime', width: 200 }, { id: 'last_accessed', title: 'Last accessed', type: 'datetime', width: 200 }, { id: 'permissions', title: 'Permissions', type: 'string', width: 200 }, { id: 'actions', title: '', type: 'string', width: 60 }