Add favicon and enable sorting on all table columns
- Add custom Orchard favicon (tree with apples) - Simplify browser tab title to "Orchard" - Enable sorting on all columns except description: - Home: name, visibility, owner, created, updated - Project: name, format, tags, artifacts, size, created - Package: tag, size, type, filename, created - Fix column keys to match API field names for proper sorting
This commit is contained in:
@@ -20,6 +20,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Replaced project card grid with sortable data table on Home page for better handling of large project lists
|
||||
- Replaced package card grid with sortable data table on Project page for consistency
|
||||
- Replaced SortDropdown with table header sorting on Package page for consistency
|
||||
- Enabled sorting on all table columns (except description) across Home, Project, and Package pages
|
||||
- Updated browser tab title to "Orchard" with custom favicon
|
||||
- Improved pod naming: Orchard pods now named `orchard-{env}-server-*` for clarity (#51)
|
||||
|
||||
### Fixed
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||
<link rel="icon" type="image/svg+xml" href="/orchard.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Orchard - Content-Addressable Storage</title>
|
||||
<title>Orchard</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
10
frontend/public/orchard.svg
Normal file
10
frontend/public/orchard.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none">
|
||||
<!-- Tree trunk -->
|
||||
<rect x="14" y="20" width="4" height="10" rx="1" fill="#8B5A2B"/>
|
||||
<!-- Tree crown -->
|
||||
<circle cx="16" cy="12" r="10" fill="#4CAF50"/>
|
||||
<!-- Fruits/apples -->
|
||||
<circle cx="12" cy="10" r="2.5" fill="#E53935"/>
|
||||
<circle cx="20" cy="11" r="2.5" fill="#E53935"/>
|
||||
<circle cx="16" cy="16" r="2.5" fill="#E53935"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 420 B |
@@ -234,6 +234,7 @@ function Home() {
|
||||
{
|
||||
key: 'visibility',
|
||||
header: 'Visibility',
|
||||
sortable: true,
|
||||
render: (project) => (
|
||||
<Badge variant={project.is_public ? 'public' : 'private'}>
|
||||
{project.is_public ? 'Public' : 'Private'}
|
||||
@@ -243,6 +244,7 @@ function Home() {
|
||||
{
|
||||
key: 'created_by',
|
||||
header: 'Owner',
|
||||
sortable: true,
|
||||
className: 'cell-owner',
|
||||
render: (project) => project.created_by,
|
||||
},
|
||||
|
||||
@@ -193,20 +193,23 @@ function PackagePage() {
|
||||
),
|
||||
},
|
||||
{
|
||||
key: 'size',
|
||||
key: 'artifact_size',
|
||||
header: 'Size',
|
||||
sortable: true,
|
||||
render: (t: TagDetail) => <span>{formatBytes(t.artifact_size)}</span>,
|
||||
},
|
||||
{
|
||||
key: 'content_type',
|
||||
key: 'artifact_content_type',
|
||||
header: 'Type',
|
||||
sortable: true,
|
||||
render: (t: TagDetail) => (
|
||||
<span className="content-type">{t.artifact_content_type || '-'}</span>
|
||||
),
|
||||
},
|
||||
{
|
||||
key: 'original_name',
|
||||
key: 'artifact_original_name',
|
||||
header: 'Filename',
|
||||
sortable: true,
|
||||
className: 'cell-truncate',
|
||||
render: (t: TagDetail) => (
|
||||
<span title={t.artifact_original_name || undefined}>{t.artifact_original_name || '-'}</span>
|
||||
|
||||
@@ -327,21 +327,25 @@ function ProjectPage() {
|
||||
{
|
||||
key: 'format',
|
||||
header: 'Format',
|
||||
sortable: true,
|
||||
render: (pkg) => <Badge variant="default">{pkg.format}</Badge>,
|
||||
},
|
||||
{
|
||||
key: 'tags',
|
||||
key: 'tag_count',
|
||||
header: 'Tags',
|
||||
sortable: true,
|
||||
render: (pkg) => pkg.tag_count ?? '—',
|
||||
},
|
||||
{
|
||||
key: 'artifacts',
|
||||
key: 'artifact_count',
|
||||
header: 'Artifacts',
|
||||
sortable: true,
|
||||
render: (pkg) => pkg.artifact_count ?? '—',
|
||||
},
|
||||
{
|
||||
key: 'size',
|
||||
key: 'total_size',
|
||||
header: 'Size',
|
||||
sortable: true,
|
||||
render: (pkg) =>
|
||||
pkg.total_size !== undefined && pkg.total_size > 0 ? formatBytes(pkg.total_size) : '—',
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user