@burdenoff/microfe-cosmicintersection 2026.827.1 → 2026.830.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cosmicintersection/components/ActionMenu.d.ts +1 -1
- package/dist/cosmicintersection/components/ActionMenu.d.ts.map +1 -1
- package/dist/cosmicintersection/components/ActionMenu.js +51 -54
- package/dist/cosmicintersection/components/ActionMenu.js.map +1 -1
- package/dist/cosmicintersection/components/EntityFormShell.d.ts +1 -1
- package/dist/cosmicintersection/components/EntityFormShell.d.ts.map +1 -1
- package/dist/cosmicintersection/components/EntityFormShell.js +29 -27
- package/dist/cosmicintersection/components/EntityFormShell.js.map +1 -1
- package/dist/cosmicintersection/components/ErrorState.d.ts +1 -1
- package/dist/cosmicintersection/components/ErrorState.d.ts.map +1 -1
- package/dist/cosmicintersection/components/ErrorState.js +19 -17
- package/dist/cosmicintersection/components/ErrorState.js.map +1 -1
- package/dist/cosmicintersection/components/FileUploadField.d.ts.map +1 -1
- package/dist/cosmicintersection/components/FileUploadField.js +61 -60
- package/dist/cosmicintersection/components/FileUploadField.js.map +1 -1
- package/dist/cosmicintersection/components/LoadingState.d.ts +1 -1
- package/dist/cosmicintersection/components/LoadingState.d.ts.map +1 -1
- package/dist/cosmicintersection/components/LoadingState.js +15 -13
- package/dist/cosmicintersection/components/LoadingState.js.map +1 -1
- package/dist/cosmicintersection/components/PageLayout.d.ts.map +1 -1
- package/dist/cosmicintersection/components/PageLayout.js +28 -27
- package/dist/cosmicintersection/components/PageLayout.js.map +1 -1
- package/dist/cosmicintersection/components/Pagination.d.ts.map +1 -1
- package/dist/cosmicintersection/components/Pagination.js +38 -35
- package/dist/cosmicintersection/components/Pagination.js.map +1 -1
- package/dist/cosmicintersection/components/StatusBadge.d.ts.map +1 -1
- package/dist/cosmicintersection/components/StatusBadge.js +30 -9
- package/dist/cosmicintersection/components/StatusBadge.js.map +1 -1
- package/dist/cosmicintersection/pages/access/AccessPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/access/AccessPage.js +147 -146
- package/dist/cosmicintersection/pages/access/AccessPage.js.map +1 -1
- package/dist/cosmicintersection/pages/analyses/AnalysesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/analyses/AnalysesPage.js +260 -259
- package/dist/cosmicintersection/pages/analyses/AnalysesPage.js.map +1 -1
- package/dist/cosmicintersection/pages/collections/CollectionsPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/collections/CollectionsPage.js +63 -62
- package/dist/cosmicintersection/pages/collections/CollectionsPage.js.map +1 -1
- package/dist/cosmicintersection/pages/dashboard/DashboardPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/dashboard/DashboardPage.js +132 -131
- package/dist/cosmicintersection/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/cosmicintersection/pages/datasets/DatasetsPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/datasets/DatasetsPage.js +178 -177
- package/dist/cosmicintersection/pages/datasets/DatasetsPage.js.map +1 -1
- package/dist/cosmicintersection/pages/discovery/DiscoveryPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js +138 -145
- package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js.map +1 -1
- package/dist/cosmicintersection/pages/lineage/LineagePage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/lineage/LineagePage.js +78 -88
- package/dist/cosmicintersection/pages/lineage/LineagePage.js.map +1 -1
- package/dist/cosmicintersection/pages/notebooks/NotebooksPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js +125 -124
- package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js.map +1 -1
- package/dist/cosmicintersection/pages/pipelines/PipelinesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js +152 -151
- package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js.map +1 -1
- package/dist/cosmicintersection/pages/releases/ReleasesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/releases/ReleasesPage.js +175 -174
- package/dist/cosmicintersection/pages/releases/ReleasesPage.js.map +1 -1
- package/dist/cosmicintersection/pages/runs/RunsPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/runs/RunsPage.js +197 -188
- package/dist/cosmicintersection/pages/runs/RunsPage.js.map +1 -1
- package/dist/cosmicintersection/pages/sources/SourcesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/sources/SourcesPage.js +65 -64
- package/dist/cosmicintersection/pages/sources/SourcesPage.js.map +1 -1
- package/dist/dev/main.d.ts.map +1 -1
- package/dist/shared/hooks/useTr.d.ts +12 -0
- package/dist/shared/hooks/useTr.d.ts.map +1 -0
- package/dist/shared/hooks/useTr.js +16 -0
- package/dist/shared/hooks/useTr.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasetsPage.js","names":[],"sources":["../../../../src/cosmicintersection/pages/datasets/DatasetsPage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { Compass, Database, Plus } from 'lucide-react';\nimport {\n Badge,\n Button,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@burdenoff/fe-libs/ui';\n\nimport {\n useCosArchiveDatasetMutation,\n useCosCollectionsQuery,\n useCosDatasetsQuery,\n useCosPublishDatasetMutation,\n useCosSourcesQuery,\n type CosAccessLevel,\n type CosDataset,\n type CosDatasetStatus,\n} from '../../api/cosmicApi';\nimport {\n ActionMenu,\n EmptyState,\n ErrorState,\n LoadingState,\n PageLayout,\n Pagination,\n StatusBadge,\n formatEnumLabel,\n usePagination,\n} from '../../components';\nimport { useCosmicIntersection } from '../../context/CosmicIntersectionContext';\nimport { notify } from '../../lib/toast';\n\nconst DATASET_STATUSES: CosDatasetStatus[] = [\n 'DRAFT',\n 'INGESTING',\n 'AVAILABLE',\n 'DEPRECATED',\n 'ARCHIVED',\n];\n\nconst ACCESS_LEVELS: CosAccessLevel[] = ['PUBLIC', 'WORKSPACE', 'RESTRICTED', 'EMBARGOED'];\n\nconst ALL = '__all__';\n\n/** Generous ceiling for deriving the distinct-format dropdown options. */\nconst FORMAT_POOL_LIMIT = 200;\n\n/** BigInt byte string → human-readable size, or an em dash when absent/zero. */\nfunction formatBytes(raw: string | null | undefined): string {\n if (!raw) {\n return '—';\n }\n const bytes = Number(raw);\n if (!Number.isFinite(bytes) || bytes <= 0) {\n return '—';\n }\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n let value = bytes;\n let unit = 0;\n while (value >= 1024 && unit < units.length - 1) {\n value /= 1024;\n unit += 1;\n }\n return `${value >= 10 || unit === 0 ? Math.round(value) : value.toFixed(1)} ${units[unit]}`;\n}\n\nfunction formatDate(raw: string | null | undefined): string {\n if (!raw) {\n return '—';\n }\n const date = new Date(raw);\n return Number.isNaN(date.getTime()) ? '—' : date.toLocaleDateString();\n}\n\nexport default function DatasetsPage() {\n const { navigate } = useCosmicIntersection();\n\n const [status, setStatus] = useState<string>(ALL);\n const [sourceId, setSourceId] = useState<string>(ALL);\n const [collectionId, setCollectionId] = useState<string>(ALL);\n const [format, setFormat] = useState<string>(ALL);\n const [accessLevel, setAccessLevel] = useState<string>(ALL);\n\n const pagination = usePagination({\n pageSize: 20,\n resetKey: `${status}|${sourceId}|${collectionId}|${format}|${accessLevel}`,\n });\n\n const { data, loading, error, refetch } = useCosDatasetsQuery({\n status: status === ALL ? undefined : (status as CosDatasetStatus),\n sourceId: sourceId === ALL ? undefined : sourceId,\n collectionId: collectionId === ALL ? undefined : collectionId,\n format: format === ALL ? undefined : format,\n accessLevel: accessLevel === ALL ? undefined : (accessLevel as CosAccessLevel),\n pagination: { limit: pagination.limit, offset: pagination.offset },\n });\n\n const sourcesQuery = useCosSourcesQuery({ pagination: { limit: 100, offset: 0 } });\n const collectionsQuery = useCosCollectionsQuery();\n // Distinct format values are derived from a real sample of the catalog so the\n // Format dropdown reflects what actually exists (format is free-text, no enum).\n const formatsPool = useCosDatasetsQuery({\n pagination: { limit: FORMAT_POOL_LIMIT, offset: 0 },\n });\n\n const [publishDataset] = useCosPublishDatasetMutation();\n const [archiveDataset] = useCosArchiveDatasetMutation();\n\n const datasets = useMemo(() => data?.cosListDatasets?.items ?? [], [data]);\n const pageInfo = data?.cosListDatasets?.pageInfo;\n const sources = sourcesQuery.data?.cosListSources?.items ?? [];\n const collections = collectionsQuery.data?.cosListCollections ?? [];\n const formats = useMemo(() => {\n const seen = new Set<string>();\n for (const dataset of formatsPool.data?.cosListDatasets?.items ?? []) {\n if (dataset.format) {\n seen.add(dataset.format);\n }\n }\n return [...seen].sort((a, b) => a.localeCompare(b));\n }, [formatsPool.data]);\n\n const noFilters =\n status === ALL &&\n sourceId === ALL &&\n collectionId === ALL &&\n format === ALL &&\n accessLevel === ALL;\n\n const handlePublish = async (dataset: CosDataset) => {\n const response = await publishDataset({ variables: { id: dataset.id } });\n if (response.data?.cosPublishDataset) {\n notify.success('Dataset published', `“${dataset.name}” is now available.`);\n await refetch();\n }\n };\n\n const handleArchive = async (dataset: CosDataset) => {\n const response = await archiveDataset({ variables: { id: dataset.id } });\n if (response.error) {\n throw new Error(response.error.message);\n }\n if (!response.data?.cosArchiveDataset) {\n notify.error('Could not archive dataset', 'The server did not confirm the change.');\n throw new Error('Archive not confirmed');\n }\n notify.success('Dataset archived');\n await refetch();\n };\n\n return (\n <PageLayout\n title=\"Datasets\"\n description=\"Federated science datasets — catalog, schema, lineage and access, all from live data.\"\n actions={\n <>\n <Button type=\"button\" variant=\"outline\" onClick={() => navigate('discovery')}>\n <Compass className=\"size-4\" />\n Discover\n </Button>\n <Button type=\"button\" onClick={() => navigate('datasets/create')}>\n <Plus className=\"size-4\" />\n New dataset\n </Button>\n </>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-end gap-3\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">Status</span>\n <Select value={status} onValueChange={setStatus}>\n <SelectTrigger aria-label=\"Filter by status\" className=\"w-44\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>All statuses</SelectItem>\n {DATASET_STATUSES.map((value) => (\n <SelectItem key={value} value={value}>\n {formatEnumLabel(value)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">Source</span>\n <Select value={sourceId} onValueChange={setSourceId}>\n <SelectTrigger aria-label=\"Filter by source\" className=\"w-48\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>All sources</SelectItem>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">Collection</span>\n <Select value={collectionId} onValueChange={setCollectionId}>\n <SelectTrigger aria-label=\"Filter by collection\" className=\"w-48\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>All collections</SelectItem>\n {collections.map((collection) => (\n <SelectItem key={collection.id} value={collection.id}>\n {collection.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">Format</span>\n <Select value={format} onValueChange={setFormat} disabled={formats.length === 0}>\n <SelectTrigger aria-label=\"Filter by format\" className=\"w-40\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>All formats</SelectItem>\n {formats.map((value) => (\n <SelectItem key={value} value={value}>\n {value}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">Access</span>\n <Select value={accessLevel} onValueChange={setAccessLevel}>\n <SelectTrigger aria-label=\"Filter by access level\" className=\"w-44\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>All access levels</SelectItem>\n {ACCESS_LEVELS.map((value) => (\n <SelectItem key={value} value={value}>\n {formatEnumLabel(value)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n {loading ? (\n <LoadingState variant=\"rows\" rows={6} label=\"Loading datasets…\" />\n ) : error ? (\n <ErrorState\n message=\"We could not load datasets. Please try again.\"\n onRetry={() => void refetch()}\n />\n ) : datasets.length === 0 ? (\n <EmptyState\n icon={Database}\n title={noFilters ? 'No datasets yet.' : 'No datasets match these filters.'}\n description={\n noFilters\n ? 'Register your first dataset to start federating science data across sources.'\n : 'Try a different status, source, collection, format or access level.'\n }\n action={\n noFilters ? (\n <Button type=\"button\" onClick={() => navigate('datasets/create')}>\n <Plus className=\"size-4\" />\n New dataset\n </Button>\n ) : undefined\n }\n />\n ) : (\n <>\n {/* Desktop / tablet: table */}\n <div className=\"hidden rounded-card border border-border-default bg-bg-elevated md:block\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Status</TableHead>\n <TableHead>Access</TableHead>\n <TableHead>Format</TableHead>\n <TableHead className=\"text-right\">Size</TableHead>\n <TableHead>Tags</TableHead>\n <TableHead>Updated</TableHead>\n <TableHead className=\"text-right\">Actions</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {datasets.map((dataset) => (\n <TableRow\n key={dataset.id}\n className=\"cursor-pointer\"\n onClick={() => navigate(`datasets/${dataset.id}`)}\n >\n <TableCell>\n <span className=\"font-medium text-text-primary\">{dataset.name}</span>\n {dataset.description ? (\n <p className=\"mt-0.5 line-clamp-1 max-w-xs text-xs text-text-secondary\">\n {dataset.description}\n </p>\n ) : null}\n </TableCell>\n <TableCell>\n <StatusBadge status={dataset.status} />\n </TableCell>\n <TableCell>\n <span className=\"text-sm text-text-secondary\">\n {formatEnumLabel(dataset.accessLevel)}\n </span>\n </TableCell>\n <TableCell>\n <span className=\"text-sm text-text-secondary\">{dataset.format || '—'}</span>\n </TableCell>\n <TableCell className=\"text-right text-sm tabular-nums text-text-secondary\">\n {formatBytes(dataset.sizeBytes)}\n </TableCell>\n <TableCell>\n <div className=\"flex max-w-[12rem] flex-wrap gap-1\">\n {dataset.tags.length === 0 ? (\n <span className=\"text-xs text-text-secondary\">—</span>\n ) : (\n <>\n {dataset.tags.slice(0, 2).map((tag) => (\n <Badge key={tag} variant=\"secondary\">\n {tag}\n </Badge>\n ))}\n {dataset.tags.length > 2 ? (\n <Badge variant=\"secondary\">+{dataset.tags.length - 2}</Badge>\n ) : null}\n </>\n )}\n </div>\n </TableCell>\n <TableCell className=\"whitespace-nowrap text-sm text-text-secondary\">\n {formatDate(dataset.updatedAt)}\n </TableCell>\n <TableCell className=\"text-right\">\n <ActionMenu\n ariaLabel={`Actions for ${dataset.name}`}\n entityName={dataset.name}\n onView={() => navigate(`datasets/${dataset.id}`)}\n onEdit={() => navigate(`datasets/${dataset.id}/edit`)}\n extraItems={\n dataset.status === 'AVAILABLE' || dataset.status === 'ARCHIVED'\n ? []\n : [\n {\n key: 'publish',\n label: 'Publish',\n onSelect: () => void handlePublish(dataset),\n },\n ]\n }\n onDelete={() => handleArchive(dataset)}\n deleteLabel=\"Archive dataset\"\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n\n {/* Mobile: stacked cards */}\n <ul className=\"space-y-3 md:hidden\">\n {datasets.map((dataset) => (\n <li key={dataset.id}>\n <div\n role=\"button\"\n tabIndex={0}\n aria-label={`Open ${dataset.name}`}\n onClick={() => navigate(`datasets/${dataset.id}`)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n navigate(`datasets/${dataset.id}`);\n }\n }}\n className=\"flex flex-col gap-3 rounded-card border border-border-default bg-bg-elevated p-4 outline-none transition-colors hover:bg-bg-sunken focus-visible:ring-2 focus-visible:ring-border-focus\"\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"font-medium text-text-primary\">{dataset.name}</p>\n {dataset.description ? (\n <p className=\"mt-0.5 line-clamp-2 text-xs text-text-secondary\">\n {dataset.description}\n </p>\n ) : null}\n </div>\n <div onClick={(event) => event.stopPropagation()}>\n <ActionMenu\n ariaLabel={`Actions for ${dataset.name}`}\n entityName={dataset.name}\n onView={() => navigate(`datasets/${dataset.id}`)}\n onEdit={() => navigate(`datasets/${dataset.id}/edit`)}\n extraItems={\n dataset.status === 'AVAILABLE' || dataset.status === 'ARCHIVED'\n ? []\n : [\n {\n key: 'publish',\n label: 'Publish',\n onSelect: () => void handlePublish(dataset),\n },\n ]\n }\n onDelete={() => handleArchive(dataset)}\n deleteLabel=\"Archive dataset\"\n />\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <StatusBadge status={dataset.status} />\n <StatusBadge status={dataset.accessLevel} />\n </div>\n\n <dl className=\"grid grid-cols-2 gap-x-4 gap-y-1 text-xs\">\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Format</dt>\n <dd className=\"text-text-primary\">{dataset.format || '—'}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Size</dt>\n <dd className=\"tabular-nums text-text-primary\">\n {formatBytes(dataset.sizeBytes)}\n </dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">Updated</dt>\n <dd className=\"text-text-primary\">{formatDate(dataset.updatedAt)}</dd>\n </div>\n </dl>\n\n {dataset.tags.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\">\n {dataset.tags.slice(0, 4).map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n {dataset.tags.length > 4 ? (\n <span className=\"text-xs text-text-secondary\">\n +{dataset.tags.length - 4}\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n\n <Pagination\n offset={pagination.offset}\n limit={pagination.limit}\n loadedCount={datasets.length}\n hasMore={Boolean(pageInfo?.hasMore)}\n onPrev={pagination.prevPage}\n onNext={pagination.nextPage}\n itemLabel=\"datasets\"\n loading={loading}\n />\n </>\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatasetsPage.js","names":[],"sources":["../../../../src/cosmicintersection/pages/datasets/DatasetsPage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { Compass, Database, Plus } from 'lucide-react';\nimport {\n Badge,\n Button,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@burdenoff/fe-libs/ui';\n\nimport {\n useCosArchiveDatasetMutation,\n useCosCollectionsQuery,\n useCosDatasetsQuery,\n useCosPublishDatasetMutation,\n useCosSourcesQuery,\n type CosAccessLevel,\n type CosDataset,\n type CosDatasetStatus,\n} from '../../api/cosmicApi';\nimport {\n ActionMenu,\n EmptyState,\n ErrorState,\n LoadingState,\n PageLayout,\n Pagination,\n StatusBadge,\n formatEnumLabel,\n usePagination,\n} from '../../components';\nimport { useCosmicIntersection } from '../../context/CosmicIntersectionContext';\nimport { notify } from '../../lib/toast';\nimport { useTr } from '../../../shared/hooks/useTr';\n\nconst DATASET_STATUSES: CosDatasetStatus[] = [\n 'DRAFT',\n 'INGESTING',\n 'AVAILABLE',\n 'DEPRECATED',\n 'ARCHIVED',\n];\n\nconst ACCESS_LEVELS: CosAccessLevel[] = ['PUBLIC', 'WORKSPACE', 'RESTRICTED', 'EMBARGOED'];\n\nconst ALL = '__all__';\n\n/** Generous ceiling for deriving the distinct-format dropdown options. */\nconst FORMAT_POOL_LIMIT = 200;\n\n/** BigInt byte string → human-readable size, or an em dash when absent/zero. */\nfunction formatBytes(raw: string | null | undefined): string {\n if (!raw) {\n return '—';\n }\n const bytes = Number(raw);\n if (!Number.isFinite(bytes) || bytes <= 0) {\n return '—';\n }\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n let value = bytes;\n let unit = 0;\n while (value >= 1024 && unit < units.length - 1) {\n value /= 1024;\n unit += 1;\n }\n return `${value >= 10 || unit === 0 ? Math.round(value) : value.toFixed(1)} ${units[unit]}`;\n}\n\nfunction formatDate(raw: string | null | undefined): string {\n if (!raw) {\n return '—';\n }\n const date = new Date(raw);\n return Number.isNaN(date.getTime()) ? '—' : date.toLocaleDateString();\n}\n\nexport default function DatasetsPage() {\n const { navigate } = useCosmicIntersection();\n const tr = useTr();\n\n const [status, setStatus] = useState<string>(ALL);\n const [sourceId, setSourceId] = useState<string>(ALL);\n const [collectionId, setCollectionId] = useState<string>(ALL);\n const [format, setFormat] = useState<string>(ALL);\n const [accessLevel, setAccessLevel] = useState<string>(ALL);\n\n const pagination = usePagination({\n pageSize: 20,\n resetKey: `${status}|${sourceId}|${collectionId}|${format}|${accessLevel}`,\n });\n\n const { data, loading, error, refetch } = useCosDatasetsQuery({\n status: status === ALL ? undefined : (status as CosDatasetStatus),\n sourceId: sourceId === ALL ? undefined : sourceId,\n collectionId: collectionId === ALL ? undefined : collectionId,\n format: format === ALL ? undefined : format,\n accessLevel: accessLevel === ALL ? undefined : (accessLevel as CosAccessLevel),\n pagination: { limit: pagination.limit, offset: pagination.offset },\n });\n\n const sourcesQuery = useCosSourcesQuery({ pagination: { limit: 100, offset: 0 } });\n const collectionsQuery = useCosCollectionsQuery();\n // Distinct format values are derived from a real sample of the catalog so the\n // Format dropdown reflects what actually exists (format is free-text, no enum).\n const formatsPool = useCosDatasetsQuery({\n pagination: { limit: FORMAT_POOL_LIMIT, offset: 0 },\n });\n\n const [publishDataset] = useCosPublishDatasetMutation();\n const [archiveDataset] = useCosArchiveDatasetMutation();\n\n const datasets = useMemo(() => data?.cosListDatasets?.items ?? [], [data]);\n const pageInfo = data?.cosListDatasets?.pageInfo;\n const sources = sourcesQuery.data?.cosListSources?.items ?? [];\n const collections = collectionsQuery.data?.cosListCollections ?? [];\n const formats = useMemo(() => {\n const seen = new Set<string>();\n for (const dataset of formatsPool.data?.cosListDatasets?.items ?? []) {\n if (dataset.format) {\n seen.add(dataset.format);\n }\n }\n return [...seen].sort((a, b) => a.localeCompare(b));\n }, [formatsPool.data]);\n\n const noFilters =\n status === ALL &&\n sourceId === ALL &&\n collectionId === ALL &&\n format === ALL &&\n accessLevel === ALL;\n\n const handlePublish = async (dataset: CosDataset) => {\n const response = await publishDataset({ variables: { id: dataset.id } });\n if (response.data?.cosPublishDataset) {\n notify.success(\n tr('cosmicintersection.pages.datasets.publishSuccess', 'Dataset published'),\n tr(\n 'cosmicintersection.pages.datasets.publishSuccessDescription',\n '“{{name}}” is now available.',\n { name: dataset.name }\n )\n );\n await refetch();\n }\n };\n\n const handleArchive = async (dataset: CosDataset) => {\n const response = await archiveDataset({ variables: { id: dataset.id } });\n if (response.error) {\n throw new Error(response.error.message);\n }\n if (!response.data?.cosArchiveDataset) {\n notify.error(\n tr('cosmicintersection.pages.datasets.archiveError', 'Could not archive dataset'),\n tr(\n 'cosmicintersection.pages.datasets.archiveErrorDescription',\n 'The server did not confirm the change.'\n )\n );\n throw new Error('Archive not confirmed');\n }\n notify.success(tr('cosmicintersection.pages.datasets.archiveSuccess', 'Dataset archived'));\n await refetch();\n };\n\n return (\n <PageLayout\n title={tr('cosmicintersection.pages.datasets.title', 'Datasets')}\n description={tr(\n 'cosmicintersection.pages.datasets.description',\n 'Federated science datasets — catalog, schema, lineage and access, all from live data.'\n )}\n actions={\n <>\n <Button type=\"button\" variant=\"outline\" onClick={() => navigate('discovery')}>\n <Compass className=\"size-4\" />\n {tr('nav.discover', 'Discover')}\n </Button>\n <Button type=\"button\" onClick={() => navigate('datasets/create')}>\n <Plus className=\"size-4\" />\n {tr('cosmicintersection.pages.datasets.create', 'New dataset')}\n </Button>\n </>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-end gap-3\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">\n {tr('cosmicintersection.common.status', 'Status')}\n </span>\n <Select value={status} onValueChange={setStatus}>\n <SelectTrigger\n aria-label={tr('cosmicintersection.common.filterByStatus', 'Filter by status')}\n className=\"w-44\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>\n {tr('cosmicintersection.common.allStatuses', 'All statuses')}\n </SelectItem>\n {DATASET_STATUSES.map((value) => (\n <SelectItem key={value} value={value}>\n {formatEnumLabel(value)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">\n {tr('cosmicintersection.common.source', 'Source')}\n </span>\n <Select value={sourceId} onValueChange={setSourceId}>\n <SelectTrigger\n aria-label={tr('cosmicintersection.common.filterBySource', 'Filter by source')}\n className=\"w-48\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>\n {tr('cosmicintersection.common.allSources', 'All sources')}\n </SelectItem>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">\n {tr('cosmicintersection.common.collection', 'Collection')}\n </span>\n <Select value={collectionId} onValueChange={setCollectionId}>\n <SelectTrigger\n aria-label={tr(\n 'cosmicintersection.common.filterByCollection',\n 'Filter by collection'\n )}\n className=\"w-48\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>\n {tr('cosmicintersection.common.allCollections', 'All collections')}\n </SelectItem>\n {collections.map((collection) => (\n <SelectItem key={collection.id} value={collection.id}>\n {collection.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">\n {tr('cosmicintersection.common.format', 'Format')}\n </span>\n <Select value={format} onValueChange={setFormat} disabled={formats.length === 0}>\n <SelectTrigger\n aria-label={tr('cosmicintersection.common.filterByFormat', 'Filter by format')}\n className=\"w-40\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>\n {tr('cosmicintersection.common.allFormats', 'All formats')}\n </SelectItem>\n {formats.map((value) => (\n <SelectItem key={value} value={value}>\n {value}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">\n {tr('cosmicintersection.common.access', 'Access')}\n </span>\n <Select value={accessLevel} onValueChange={setAccessLevel}>\n <SelectTrigger\n aria-label={tr(\n 'cosmicintersection.common.filterByAccess',\n 'Filter by access level'\n )}\n className=\"w-44\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={ALL}>\n {tr('cosmicintersection.common.allAccessLevels', 'All access levels')}\n </SelectItem>\n {ACCESS_LEVELS.map((value) => (\n <SelectItem key={value} value={value}>\n {formatEnumLabel(value)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n {loading ? (\n <LoadingState\n variant=\"rows\"\n rows={6}\n label={tr('cosmicintersection.pages.datasets.loading', 'Loading datasets…')}\n />\n ) : error ? (\n <ErrorState\n message={tr(\n 'cosmicintersection.pages.datasets.error',\n 'We could not load datasets. Please try again.'\n )}\n onRetry={() => void refetch()}\n />\n ) : datasets.length === 0 ? (\n <EmptyState\n icon={Database}\n title={\n noFilters\n ? tr('cosmicintersection.pages.datasets.emptyTitle', 'No datasets yet.')\n : tr(\n 'cosmicintersection.pages.datasets.emptyFilterTitle',\n 'No datasets match these filters.'\n )\n }\n description={\n noFilters\n ? tr(\n 'cosmicintersection.pages.datasets.emptyDescription',\n 'Register your first dataset to start federating science data across sources.'\n )\n : tr(\n 'cosmicintersection.pages.datasets.emptyFilterDescription',\n 'Try a different status, source, collection, format or access level.'\n )\n }\n action={\n noFilters ? (\n <Button type=\"button\" onClick={() => navigate('datasets/create')}>\n <Plus className=\"size-4\" />\n {tr('cosmicintersection.pages.datasets.create', 'New dataset')}\n </Button>\n ) : undefined\n }\n />\n ) : (\n <>\n {/* Desktop / tablet: table */}\n <div className=\"hidden rounded-card border border-border-default bg-bg-elevated md:block\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{tr('cosmicintersection.common.name', 'Name')}</TableHead>\n <TableHead>{tr('cosmicintersection.common.status', 'Status')}</TableHead>\n <TableHead>{tr('cosmicintersection.common.access', 'Access')}</TableHead>\n <TableHead>{tr('cosmicintersection.common.format', 'Format')}</TableHead>\n <TableHead className=\"text-right\">\n {tr('cosmicintersection.common.size', 'Size')}\n </TableHead>\n <TableHead>{tr('cosmicintersection.common.tags', 'Tags')}</TableHead>\n <TableHead>{tr('cosmicintersection.common.updated', 'Updated')}</TableHead>\n <TableHead className=\"text-right\">\n {tr('cosmicintersection.common.actions', 'Actions')}\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {datasets.map((dataset) => (\n <TableRow\n key={dataset.id}\n className=\"cursor-pointer\"\n onClick={() => navigate(`datasets/${dataset.id}`)}\n >\n <TableCell>\n <span className=\"font-medium text-text-primary\">{dataset.name}</span>\n {dataset.description ? (\n <p className=\"mt-0.5 line-clamp-1 max-w-xs text-xs text-text-secondary\">\n {dataset.description}\n </p>\n ) : null}\n </TableCell>\n <TableCell>\n <StatusBadge status={dataset.status} />\n </TableCell>\n <TableCell>\n <span className=\"text-sm text-text-secondary\">\n {formatEnumLabel(dataset.accessLevel)}\n </span>\n </TableCell>\n <TableCell>\n <span className=\"text-sm text-text-secondary\">{dataset.format || '—'}</span>\n </TableCell>\n <TableCell className=\"text-right text-sm tabular-nums text-text-secondary\">\n {formatBytes(dataset.sizeBytes)}\n </TableCell>\n <TableCell>\n <div className=\"flex max-w-[12rem] flex-wrap gap-1\">\n {dataset.tags.length === 0 ? (\n <span className=\"text-xs text-text-secondary\">—</span>\n ) : (\n <>\n {dataset.tags.slice(0, 2).map((tag) => (\n <Badge key={tag} variant=\"secondary\">\n {tag}\n </Badge>\n ))}\n {dataset.tags.length > 2 ? (\n <Badge variant=\"secondary\">+{dataset.tags.length - 2}</Badge>\n ) : null}\n </>\n )}\n </div>\n </TableCell>\n <TableCell className=\"whitespace-nowrap text-sm text-text-secondary\">\n {formatDate(dataset.updatedAt)}\n </TableCell>\n <TableCell className=\"text-right\">\n <ActionMenu\n ariaLabel={tr(\n 'cosmicintersection.common.actionsFor',\n 'Actions for {{name}}',\n { name: dataset.name }\n )}\n entityName={dataset.name}\n onView={() => navigate(`datasets/${dataset.id}`)}\n onEdit={() => navigate(`datasets/${dataset.id}/edit`)}\n extraItems={\n dataset.status === 'AVAILABLE' || dataset.status === 'ARCHIVED'\n ? []\n : [\n {\n key: 'publish',\n label: tr('cosmicintersection.common.publish', 'Publish'),\n onSelect: () => void handlePublish(dataset),\n },\n ]\n }\n onDelete={() => handleArchive(dataset)}\n deleteLabel={tr(\n 'cosmicintersection.pages.datasets.archive',\n 'Archive dataset'\n )}\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n\n {/* Mobile: stacked cards */}\n <ul className=\"space-y-3 md:hidden\">\n {datasets.map((dataset) => (\n <li key={dataset.id}>\n <div\n role=\"button\"\n tabIndex={0}\n aria-label={tr('cosmicintersection.common.open', 'Open {{name}}', {\n name: dataset.name,\n })}\n onClick={() => navigate(`datasets/${dataset.id}`)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n navigate(`datasets/${dataset.id}`);\n }\n }}\n className=\"flex flex-col gap-3 rounded-card border border-border-default bg-bg-elevated p-4 outline-none transition-colors hover:bg-bg-sunken focus-visible:ring-2 focus-visible:ring-border-focus\"\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"font-medium text-text-primary\">{dataset.name}</p>\n {dataset.description ? (\n <p className=\"mt-0.5 line-clamp-2 text-xs text-text-secondary\">\n {dataset.description}\n </p>\n ) : null}\n </div>\n <div onClick={(event) => event.stopPropagation()}>\n <ActionMenu\n ariaLabel={tr(\n 'cosmicintersection.common.actionsFor',\n 'Actions for {{name}}',\n { name: dataset.name }\n )}\n entityName={dataset.name}\n onView={() => navigate(`datasets/${dataset.id}`)}\n onEdit={() => navigate(`datasets/${dataset.id}/edit`)}\n extraItems={\n dataset.status === 'AVAILABLE' || dataset.status === 'ARCHIVED'\n ? []\n : [\n {\n key: 'publish',\n label: tr('cosmicintersection.common.publish', 'Publish'),\n onSelect: () => void handlePublish(dataset),\n },\n ]\n }\n onDelete={() => handleArchive(dataset)}\n deleteLabel={tr(\n 'cosmicintersection.pages.datasets.archive',\n 'Archive dataset'\n )}\n />\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <StatusBadge status={dataset.status} />\n <StatusBadge status={dataset.accessLevel} />\n </div>\n\n <dl className=\"grid grid-cols-2 gap-x-4 gap-y-1 text-xs\">\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">\n {tr('cosmicintersection.common.format', 'Format')}\n </dt>\n <dd className=\"text-text-primary\">{dataset.format || '—'}</dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">\n {tr('cosmicintersection.common.size', 'Size')}\n </dt>\n <dd className=\"tabular-nums text-text-primary\">\n {formatBytes(dataset.sizeBytes)}\n </dd>\n </div>\n <div className=\"flex justify-between gap-2\">\n <dt className=\"text-text-secondary\">\n {tr('cosmicintersection.common.updated', 'Updated')}\n </dt>\n <dd className=\"text-text-primary\">{formatDate(dataset.updatedAt)}</dd>\n </div>\n </dl>\n\n {dataset.tags.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\">\n {dataset.tags.slice(0, 4).map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n {dataset.tags.length > 4 ? (\n <span className=\"text-xs text-text-secondary\">\n +{dataset.tags.length - 4}\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n\n <Pagination\n offset={pagination.offset}\n limit={pagination.limit}\n loadedCount={datasets.length}\n hasMore={Boolean(pageInfo?.hasMore)}\n onPrev={pagination.prevPage}\n onNext={pagination.nextPage}\n itemLabel={tr('cosmicintersection.pages.datasets.itemLabel', 'datasets')}\n loading={loading}\n />\n </>\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiscoveryPage.d.ts","sourceRoot":"","sources":["../../../../src/cosmicintersection/pages/discovery/DiscoveryPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DiscoveryPage.d.ts","sourceRoot":"","sources":["../../../../src/cosmicintersection/pages/discovery/DiscoveryPage.tsx"],"names":[],"mappings":"AAoGA,MAAM,CAAC,OAAO,UAAU,aAAa,4CAgbpC"}
|