-
Notifications
You must be signed in to change notification settings - Fork 16
Bug/816 long names #870
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bug/816 long names #870
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
Addresses bug/816 focused on improving handling of long names and UX/navigation, while introducing global Snapshots and Deployments views and unifying timestamp parsing.
- Adds global Snapshots and Deployments routes/pages and top-level project tab navigation
- Centralizes timestamp parsing via prepareBackendTimestamp and refactors components to use it
- Refactors list tables (Deployments/Snapshots) to accept column definitions and introduces shared column factories; updates destructive action dropdowns to use a unified Delete dialog; adds a header Back button
Reviewed Changes
Copilot reviewed 54 out of 59 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| src/router/routes.tsx | Adds overview routes for snapshots and deployments under projects. |
| src/router/Router.tsx | Registers new lazy-loaded routes for global snapshots/deployments pages. |
| src/lib/timeline/mapping.ts | Uses prepareBackendTimestamp for robust date parsing in timeline. |
| src/lib/dates.ts | Introduces prepareBackendTimestamp to normalize backend timestamps. |
| src/lib/bulk-delete.tsx | Improves bulk delete error toasts to show specific failures per item. |
| src/layouts/project-tabs/tabs.tsx | Adds Snapshots and Deployments tabs and navigation handlers. |
| src/layouts/AuthenticatedLayout/back-button.tsx | Adds a back button to the authenticated header. |
| src/layouts/AuthenticatedLayout/AuthenticatedHeader.tsx | Integrates BackButton and reorders breadcrumb imports. |
| src/components/service-connectors/expiry.tsx | Uses prepareBackendTimestamp for expiry calculations. |
| src/components/pipeline-snapshots/table-actions.tsx | Renames action component to PipelineSnapshotActions. |
| src/components/pipeline-snapshots/list/use-queryparams.ts | Renames hook to useSnapshotListQueryParams. |
| src/components/pipeline-snapshots/list/table.tsx | Table now accepts external columns; pagination and selection unchanged. |
| src/components/pipeline-snapshots/list/column-definitions.tsx | New shared snapshot column factories used across pages. |
| src/components/logs/log-line.tsx | Normalizes timestamp parsing and switches display formatting. |
| src/components/deployments/list/use-deployment-queryparams.ts | Renames hook to useDeploymentQueryParams. |
| src/components/deployments/list/table.tsx | Table now accepts external columns. |
| src/components/deployments/list/column-definitions.tsx | New shared deployment column factories. |
| src/components/breadcrumbs/library.ts | Enables breadcrumb links for Deployments/Snapshots. |
| src/components/DisplayDate.tsx | Uses prepareBackendTimestamp for consistent date handling. |
| src/components/DeleteAlertDialog.tsx | Allows disabling Delete during pending state. |
| src/components/dialog/DialogItem.tsx | Removes obsolete dialog helper. |
| src/components/AlertDialogDropdownItem.tsx | Removes obsolete alert dialog menu item helper. |
| src/app/snapshots/** | Adds global snapshots page and columns. |
| src/app/pipelines/[pipelineId]/snapshots/** | Adopts shared list components and columns. |
| src/app/pipelines/[pipelineId]/runs/columns.tsx | Adjusts run name cell layout for long names. |
| src/app/pipelines/_components/columns.tsx | Improves layout and widths to handle long pipeline names. |
| src/app/pipelines/[pipelineId]/deployments/** | Adopts shared deployment list components/columns. |
| src/app/deployments/** | Adds global deployments page and columns. |
| src/app/settings/** | Unifies delete/edit dropdowns to use shared DeleteAlertContent with proper dialogs; uses prepareBackendTimestamp for age checks. |
| package.json | Updates vite version. |
| CLAUDE.md, AGENTS.md, .coderabbit.yaml | Adds tooling guidance and repository agent configs (docs only). |
Files not reviewed (1)
- pnpm-lock.yaml: Language not supported
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
| export function prepareBackendTimestamp(dateString: string | number) { | ||
| if (typeof dateString === "number") { | ||
| return new Date(dateString); | ||
| } | ||
| if (!dateString.endsWith("Z")) { | ||
| return new Date(dateString + "Z"); | ||
| } | ||
| return new Date(dateString); | ||
| } |
Copilot
AI
Oct 16, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Appending 'Z' whenever the string doesn't end with 'Z' breaks timestamps that already include an explicit timezone offset (e.g. '+01:00'), producing invalid strings like '...+01:00Z'. Only append 'Z' when the input has no timezone information.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is intended. The backend is controlled by us, and retrieves the dates in UTC, but sometimes the Z is missing. We know for sure though that its utc
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice 👍 The truncate works better now
There still seems to be something off. For smaller sizes the columns (here the actions) overflow with other columns.
I wonder if we should use width, with a min-width or so, and apply this to all tables.
Another option I would see is using a fixed table layout
Wdyt? It may also be needed for other tables I assume
Cahllagerfeld
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There are still tables missing:
- Deployments
- users
- secrets
- ...
just to name some
Q: Right now the max-w is not applied to all columns, but most of the time only to the name column. Should we add these max-widths to all columns or is it fine if we just add it to some?
| id: "select", | ||
| meta: { | ||
| width: "1%" | ||
| width: "2rem" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is not consistent with the, rest there are still occurencies with 1%
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
actually it depends on how many other columns are there. we dont want max-w too small when there is few other columsn
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also notice that these columns are likely to be resizable in a -hopefully- near future, so it would be nice to have this in mind.
src/app/runs/columns.tsx
Outdated
| id: "name", | ||
| header: "Run", | ||
| meta: { | ||
| className: "max-w-[100ch]" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sometimes its 20rem, here its 100ch, it should be consistent imo.
Cahllagerfeld
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think there are still tables missing, see my comment earlier
we add it to the name because name is truncatable and for that to work it need max width |
Im not sure if I got it right, but I was referring to other tables, for example the users-table, or the secrets table etc... Where the truncate behavior also needs to be added to the name column. |
applied the truncating component to the rest of places |
|
Did you check all the places? I think there are still some missing, e.g members, service-accounts, api-keys 🤔 |
Cahllagerfeld
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
src/app/members/columns.tsxsrc/app/settings/secrets/[id]/columns.tsx- this needs to be testedsrc/app/settings/service-accounts/columns.tsxsrc/app/settings/service-accounts/[service-account-id]/columns.tsx
these are the ones I just found
src/components/stack-components/component-sheet/stacks-tab/columns.tsx
Outdated
Show resolved
Hide resolved
Cahllagerfeld
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There are still some small inconsistencies, but I think the crucial part with adjusting the Component, to make things optional is fine 👍
src/app/components/columns.tsx
Outdated
| } | ||
| topCopy={name} | ||
| bottomLink={routes.components.detail(id)} | ||
| bottomName={getFirstUuidSegment(id)} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The component sheet also needs to be added to the bottom line like it was originally
src/app/components/columns.tsx
Outdated
| className="shrink-0" | ||
| /> | ||
| } | ||
| topLink={routes.components.detail(id)} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In order to make it work with the new component, you will need to remove the link here, otherwise it will still render as a link
Cahllagerfeld
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I hope the last ones
src/app/components/columns.tsx
Outdated
| bottomLink={routes.components.detail(id)} | ||
| bottomName={getFirstUuidSegment(id)} | ||
| bottomName={ | ||
| <ComponentSheet componentId={id}> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
src/app/stacks/columns.tsx
Outdated
| topName={ | ||
| <StackSheet stackName={name} stackId={id}> | ||
| <h2 className="text-text-md font-semibold">{name}</h2> | ||
| <h2 className="truncate text-text-md font-semibold">{name}</h2> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There seems to be an error now logged in this list
validateDOMNesting(...): <h2> cannot appear as a descendant of <p>. Component Stack:
h2 unknown:0
Could oyu please check for these errors. I havent checked all the places for this error though
c021e67 to
3976eb2
Compare
Cahllagerfeld
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.


No description provided.