Files
supabase/apps/studio/components/interfaces/Storage/Storage.constants.ts
T
Danny WhiteandJoshen Lim 6f54cf8a57 feat(studio): inline storage buckets (#39154)
* chore: separate interfaces per bucket type

* chore: reuse existing bucket creation modal for files

* chore: allow external trigger for new bucket modal

* chore: minor fixes

* chore: full-size empty state

* chore: files other tabs

* fix: show tab bar when on file subroute

* chore: use existing table component to list buckets

* fix: tests

* fix: build error

* chore: remove future bucket type components from PR

* fix: dependency

* Couple of refactors to simplify implementation

* Fix TS

* chore: move s3 settings out to sidebar

* fix: minor nits

* fix: reuse existing loading spinners from schema visualiser

* fix: loading for files

* fix: prevent loading of table for zero buckets

* chore: improved loading state

* chore: shimmer on table

* chore: copywriting on S3

* chore: improve empty states

* fix: deprecated input instructions

* fix: filter/search bucket table

* chore: tidy

* fix: tests

* Minor refactors

* Rename

* Nit

* Shift V2 re-routing logic to layout level

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-10-07 10:59:37 +11:00

90 lines
2.3 KiB
TypeScript

import { DOCS_URL } from 'lib/constants'
// Original storage constants
export enum URL_EXPIRY_DURATION {
WEEK = 60 * 60 * 24 * 7,
MONTH = 60 * 60 * 24 * 30,
YEAR = 60 * 60 * 24 * 365,
}
export enum STORAGE_VIEWS {
COLUMNS = 'COLUMNS',
LIST = 'LIST',
}
export enum STORAGE_SORT_BY {
NAME = 'name',
UPDATED_AT = 'updated_at',
CREATED_AT = 'created_at',
LAST_ACCESSED_AT = 'last_accessed_at',
}
export enum STORAGE_BUCKET_SORT {
ALPHABETICAL = 'alphabetical',
CREATED_AT = 'created_at',
}
export enum STORAGE_SORT_BY_ORDER {
ASC = 'asc',
DESC = 'desc',
}
export enum STORAGE_ROW_TYPES {
BUCKET = 'BUCKET',
FILE = 'FILE',
FOLDER = 'FOLDER',
}
export enum STORAGE_ROW_STATUS {
READY = 'READY',
LOADING = 'LOADING',
EDITING = 'EDITING',
}
export const STORAGE_CLIENT_LIBRARY_MAPPINGS = {
upload: ['INSERT'],
download: ['SELECT'],
list: ['SELECT'],
update: ['SELECT', 'UPDATE'],
move: ['SELECT', 'UPDATE'],
copy: ['SELECT', 'INSERT'],
remove: ['SELECT', 'DELETE'],
createSignedUrl: ['SELECT'],
createSignedUrls: ['SELECT'],
getPublicUrl: [],
}
export const CONTEXT_MENU_KEYS = {
STORAGE_COLUMN: 'STORAGE_COLUMN',
STORAGE_ITEM: 'STORAGE_ITEM',
STORAGE_FOLDER: 'STORAGE_FOLDER',
}
// New bucket types configuration
export const BUCKET_TYPES = {
files: {
displayName: 'Files',
label: 'a file bucket',
description: 'General file storage for most types of digital content.',
valueProp: 'Store images, videos, documents, and any other file type.',
docsUrl: `${DOCS_URL}/guides/storage/buckets/fundamentals`,
},
analytics: {
displayName: 'Analytics',
label: 'an analytics bucket',
description: 'Purpose-built storage for analytical workloads.',
valueProp: 'Store large datasets for analytics and reporting.',
docsUrl: `${DOCS_URL}/guides/storage/analytics/introduction`,
},
vectors: {
displayName: 'Vectors',
label: 'a vector bucket',
description: 'Purpose-built storage for vector data.',
valueProp: 'Store, index, and query your vector embeddings at scale.',
docsUrl: `${DOCS_URL}/guides/storage/vectors`,
},
}
export const BUCKET_TYPE_KEYS = Object.keys(BUCKET_TYPES) as Array<keyof typeof BUCKET_TYPES>
export const DEFAULT_BUCKET_TYPE: keyof typeof BUCKET_TYPES = 'files'