From 8c1fede83c5136f2f5dd1f442532c3fefa15bf4b Mon Sep 17 00:00:00 2001 From: Murilo Geraldini Date: Wed, 5 Mar 2025 10:57:27 -0300 Subject: [PATCH] wip --- dashboard/src/api/issue.ts | 2 +- .../src/components/IssueTable/IssueTable.tsx | 16 ++--- .../OpenGraphTags/ListingOGTags.tsx | 4 +- .../src/components/SideMenu/SideMenu.tsx | 2 +- dashboard/src/components/TopBar/TopBar.tsx | 8 ++- .../src/pages/IssueListing/IssueListing.tsx | 4 +- dashboard/src/routeTree.gen.ts | 64 +++++++++++++++++++ .../routes/_main/(alternatives)/i/index.tsx | 2 +- .../routes/_main/(alternatives)/i/route.tsx | 4 +- dashboard/src/routes/_main/issue/index.tsx | 13 ++-- dashboard/src/routes/_main/issue/route.tsx | 39 +++++------ dashboard/src/routes/_main/issues/index.tsx | 7 ++ dashboard/src/routes/_main/issues/route.tsx | 30 +++++++++ dashboard/src/types/general.ts | 2 +- 14 files changed, 146 insertions(+), 51 deletions(-) create mode 100644 dashboard/src/routes/_main/issues/index.tsx create mode 100644 dashboard/src/routes/_main/issues/route.tsx diff --git a/dashboard/src/api/issue.ts b/dashboard/src/api/issue.ts index 5c3cae53..168fbf30 100644 --- a/dashboard/src/api/issue.ts +++ b/dashboard/src/api/issue.ts @@ -18,7 +18,7 @@ const fetchIssueListing = async ( }; export const useIssueListing = (): UseQueryResult => { - const { origin, intervalInDays } = useSearch({ from: '/_main/issue' }); + const { origin, intervalInDays } = useSearch({ from: '/_main/issues' }); const queryKey = ['issueTable', origin, intervalInDays]; diff --git a/dashboard/src/components/IssueTable/IssueTable.tsx b/dashboard/src/components/IssueTable/IssueTable.tsx index 678b8cae..a7c4c9a4 100644 --- a/dashboard/src/components/IssueTable/IssueTable.tsx +++ b/dashboard/src/components/IssueTable/IssueTable.tsx @@ -51,7 +51,7 @@ const getLinkProps = ( row.original.git_commit_hash !== undefined ) { return { - from: '/issue', + from: '/issues', to: '/tree/$treeId', params: { treeId: row.original.git_commit_hash }, state: s => s, @@ -69,7 +69,7 @@ const getLinkProps = ( } return { - from: '/issue', + from: '/issues', to: '/issue/$issueId', params: { issueId: row.original.id }, state: s => ({ @@ -97,12 +97,6 @@ const columns: ColumnDef[] = [ row.original.id ), }, - { - accessorKey: 'version', - header: ({ column }): JSX.Element => ( - - ), - }, { id: 'culprit', accessorFn: (original, _): boolean[] => { @@ -162,8 +156,8 @@ interface IIssueTable { } export const IssueTable = ({ issueListing }: IIssueTable): JSX.Element => { - const { listingSize } = useSearch({ strict: false }); - const navigate = useNavigate({ from: '/issue' }); + const { listingSize } = useSearch({ from: '/_main/issues' }); + const navigate = useNavigate({ from: '/issues' }); const [sorting, setSorting] = useState([ { @@ -267,7 +261,7 @@ export const IssueTable = ({ issueListing }: IIssueTable): JSX.Element => { />
- + { selected: false, }, { - navigateTo: '/issue', + navigateTo: '/issues', idIntl: 'routes.issueMonitor', icon: , selected: false, diff --git a/dashboard/src/components/TopBar/TopBar.tsx b/dashboard/src/components/TopBar/TopBar.tsx index d3d01c0d..cfbf41e0 100644 --- a/dashboard/src/components/TopBar/TopBar.tsx +++ b/dashboard/src/components/TopBar/TopBar.tsx @@ -19,8 +19,8 @@ const getTargetPath = (basePath: string): PossibleMonitorPath => { return '/tree'; case 'hardware': return '/hardware'; - case 'issue': - return '/issue'; + case 'issues': + return '/issues'; default: return '/tree'; } @@ -79,6 +79,8 @@ const TitleName = ({ basePath }: { basePath: string }): JSX.Element => { return ; case 'hardware': return ; + case 'issues': + return ; case 'build': return ; case 'test': @@ -104,7 +106,7 @@ const TopBar = (): JSX.Element => { {(basePath === 'tree' || basePath === 'hardware' || - basePath === 'issue') && } + basePath === 'issues') && }
); diff --git a/dashboard/src/pages/IssueListing/IssueListing.tsx b/dashboard/src/pages/IssueListing/IssueListing.tsx index 1cf33e88..1afc084d 100644 --- a/dashboard/src/pages/IssueListing/IssueListing.tsx +++ b/dashboard/src/pages/IssueListing/IssueListing.tsx @@ -20,7 +20,7 @@ const IssueListing = (): JSX.Element => { const issueSearch = z.string().catch('').parse(unsafeIssueSearch); - const navigate = useNavigate({ from: '/issue' }); + const navigate = useNavigate({ from: '/issues' }); const onInputSearchTextChange = useCallback( (e: ChangeEvent) => { @@ -38,7 +38,7 @@ const IssueListing = (): JSX.Element => { return ( <> - +
MainRouteRoute, } as any) +const MainIssuesRouteRoute = MainIssuesRouteImport.update({ + id: '/issues', + path: '/issues', + getParentRoute: () => MainRouteRoute, +} as any) + const MainIssueRouteRoute = MainIssueRouteImport.update({ id: '/issue', path: '/issue', @@ -84,6 +92,12 @@ const MainTreeIndexRoute = MainTreeIndexImport.update({ getParentRoute: () => MainTreeRouteRoute, } as any) +const MainIssuesIndexRoute = MainIssuesIndexImport.update({ + id: '/', + path: '/', + getParentRoute: () => MainIssuesRouteRoute, +} as any) + const MainIssueIndexRoute = MainIssueIndexImport.update({ id: '/', path: '/', @@ -300,6 +314,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof MainIssueRouteImport parentRoute: typeof MainRouteImport } + '/_main/issues': { + id: '/_main/issues' + path: '/issues' + fullPath: '/issues' + preLoaderRoute: typeof MainIssuesRouteImport + parentRoute: typeof MainRouteImport + } '/_main/tree': { id: '/_main/tree' path: '/tree' @@ -370,6 +391,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof MainIssueIndexImport parentRoute: typeof MainIssueRouteImport } + '/_main/issues/': { + id: '/_main/issues/' + path: '/' + fullPath: '/issues/' + preLoaderRoute: typeof MainIssuesIndexImport + parentRoute: typeof MainIssuesRouteImport + } '/_main/tree/': { id: '/_main/tree/' path: '/' @@ -600,6 +628,18 @@ const MainIssueRouteRouteWithChildren = MainIssueRouteRoute._addFileChildren( MainIssueRouteRouteChildren, ) +interface MainIssuesRouteRouteChildren { + MainIssuesIndexRoute: typeof MainIssuesIndexRoute +} + +const MainIssuesRouteRouteChildren: MainIssuesRouteRouteChildren = { + MainIssuesIndexRoute: MainIssuesIndexRoute, +} + +const MainIssuesRouteRouteWithChildren = MainIssuesRouteRoute._addFileChildren( + MainIssuesRouteRouteChildren, +) + interface MainTreeTreeIdRouteRouteChildren { MainTreeTreeIdIndexRoute: typeof MainTreeTreeIdIndexRoute MainTreeTreeIdBuildBuildIdIndexRoute: typeof MainTreeTreeIdBuildBuildIdIndexRoute @@ -717,6 +757,7 @@ const MainalternativesTTestIdRouteRouteWithChildren = interface MainRouteRouteChildren { MainHardwareRouteRoute: typeof MainHardwareRouteRouteWithChildren MainIssueRouteRoute: typeof MainIssueRouteRouteWithChildren + MainIssuesRouteRoute: typeof MainIssuesRouteRouteWithChildren MainTreeRouteRoute: typeof MainTreeRouteRouteWithChildren MainIndexRoute: typeof MainIndexRoute MainalternativesIRouteRoute: typeof MainalternativesIRouteRouteWithChildren @@ -729,6 +770,7 @@ interface MainRouteRouteChildren { const MainRouteRouteChildren: MainRouteRouteChildren = { MainHardwareRouteRoute: MainHardwareRouteRouteWithChildren, MainIssueRouteRoute: MainIssueRouteRouteWithChildren, + MainIssuesRouteRoute: MainIssuesRouteRouteWithChildren, MainTreeRouteRoute: MainTreeRouteRouteWithChildren, MainIndexRoute: MainIndexRoute, MainalternativesIRouteRoute: MainalternativesIRouteRouteWithChildren, @@ -748,6 +790,7 @@ export interface FileRoutesByFullPath { '': typeof MainRouteRouteWithChildren '/hardware': typeof MainHardwareRouteRouteWithChildren '/issue': typeof MainIssueRouteRouteWithChildren + '/issues': typeof MainIssuesRouteRouteWithChildren '/tree': typeof MainTreeRouteRouteWithChildren '/': typeof MainIndexRoute '/i': typeof MainalternativesIRouteRouteWithChildren @@ -758,6 +801,7 @@ export interface FileRoutesByFullPath { '/tree/$treeId': typeof MainTreeTreeIdRouteRouteWithChildren '/hardware/': typeof MainHardwareIndexRoute '/issue/': typeof MainIssueIndexRoute + '/issues/': typeof MainIssuesIndexRoute '/tree/': typeof MainTreeIndexRoute '/b/$buildId': typeof MainalternativesBBuildIdRouteRouteWithChildren '/i/$issueId': typeof MainalternativesIIssueIdRouteRouteWithChildren @@ -786,6 +830,7 @@ export interface FileRoutesByTo { '/': typeof MainIndexRoute '/hardware': typeof MainHardwareIndexRoute '/issue': typeof MainIssueIndexRoute + '/issues': typeof MainIssuesIndexRoute '/tree': typeof MainTreeIndexRoute '/i': typeof MainalternativesIIndexRoute '/build/$buildId': typeof MainBuildBuildIdIndexRoute @@ -812,6 +857,7 @@ export interface FileRoutesById { '/_main': typeof MainRouteRouteWithChildren '/_main/hardware': typeof MainHardwareRouteRouteWithChildren '/_main/issue': typeof MainIssueRouteRouteWithChildren + '/_main/issues': typeof MainIssuesRouteRouteWithChildren '/_main/tree': typeof MainTreeRouteRouteWithChildren '/_main/': typeof MainIndexRoute '/_main/(alternatives)/i': typeof MainalternativesIRouteRouteWithChildren @@ -822,6 +868,7 @@ export interface FileRoutesById { '/_main/tree/$treeId': typeof MainTreeTreeIdRouteRouteWithChildren '/_main/hardware/': typeof MainHardwareIndexRoute '/_main/issue/': typeof MainIssueIndexRoute + '/_main/issues/': typeof MainIssuesIndexRoute '/_main/tree/': typeof MainTreeIndexRoute '/_main/(alternatives)/b/$buildId': typeof MainalternativesBBuildIdRouteRouteWithChildren '/_main/(alternatives)/i/$issueId': typeof MainalternativesIIssueIdRouteRouteWithChildren @@ -852,6 +899,7 @@ export interface FileRouteTypes { | '' | '/hardware' | '/issue' + | '/issues' | '/tree' | '/' | '/i' @@ -862,6 +910,7 @@ export interface FileRouteTypes { | '/tree/$treeId' | '/hardware/' | '/issue/' + | '/issues/' | '/tree/' | '/b/$buildId' | '/i/$issueId' @@ -889,6 +938,7 @@ export interface FileRouteTypes { | '/' | '/hardware' | '/issue' + | '/issues' | '/tree' | '/i' | '/build/$buildId' @@ -913,6 +963,7 @@ export interface FileRouteTypes { | '/_main' | '/_main/hardware' | '/_main/issue' + | '/_main/issues' | '/_main/tree' | '/_main/' | '/_main/(alternatives)/i' @@ -923,6 +974,7 @@ export interface FileRouteTypes { | '/_main/tree/$treeId' | '/_main/hardware/' | '/_main/issue/' + | '/_main/issues/' | '/_main/tree/' | '/_main/(alternatives)/b/$buildId' | '/_main/(alternatives)/i/$issueId' @@ -974,6 +1026,7 @@ export const routeTree = rootRoute "children": [ "/_main/hardware", "/_main/issue", + "/_main/issues", "/_main/tree", "/_main/", "/_main/(alternatives)/i", @@ -999,6 +1052,13 @@ export const routeTree = rootRoute "/_main/issue/" ] }, + "/_main/issues": { + "filePath": "_main/issues/route.tsx", + "parent": "/_main", + "children": [ + "/_main/issues/" + ] + }, "/_main/tree": { "filePath": "_main/tree/route.tsx", "parent": "/_main", @@ -1071,6 +1131,10 @@ export const routeTree = rootRoute "filePath": "_main/issue/index.tsx", "parent": "/_main/issue" }, + "/_main/issues/": { + "filePath": "_main/issues/index.tsx", + "parent": "/_main/issues" + }, "/_main/tree/": { "filePath": "_main/tree/index.tsx", "parent": "/_main/tree" diff --git a/dashboard/src/routes/_main/(alternatives)/i/index.tsx b/dashboard/src/routes/_main/(alternatives)/i/index.tsx index 1ca1c90d..bee2656b 100644 --- a/dashboard/src/routes/_main/(alternatives)/i/index.tsx +++ b/dashboard/src/routes/_main/(alternatives)/i/index.tsx @@ -4,7 +4,7 @@ export const Route = createFileRoute('/_main/(alternatives)/i/')({ loaderDeps: ({ search }) => ({ search }), loader: ({ deps, params }) => { throw redirect({ - to: '/issue', + to: '/issues', search: deps.search, params, }); diff --git a/dashboard/src/routes/_main/(alternatives)/i/route.tsx b/dashboard/src/routes/_main/(alternatives)/i/route.tsx index 22b85e2d..11619b75 100644 --- a/dashboard/src/routes/_main/(alternatives)/i/route.tsx +++ b/dashboard/src/routes/_main/(alternatives)/i/route.tsx @@ -7,13 +7,13 @@ import { import { issueListingDefaultValues, issueListingSearchSchema, -} from '@/routes/_main/issue/route'; +} from '@/routes/_main/issues/route'; export const Route = createFileRoute('/_main/(alternatives)/i')({ loaderDeps: ({ search }) => ({ search }), loader: ({ deps, params }) => { throw redirect({ - to: '/issue', + to: '/issues', search: deps.search, params, }); diff --git a/dashboard/src/routes/_main/issue/index.tsx b/dashboard/src/routes/_main/issue/index.tsx index 0a78072c..b6738017 100644 --- a/dashboard/src/routes/_main/issue/index.tsx +++ b/dashboard/src/routes/_main/issue/index.tsx @@ -1,7 +1,12 @@ -import { createFileRoute } from '@tanstack/react-router'; - -import IssueListing from '@/pages/IssueListing/IssueListing'; +import { createFileRoute, redirect } from '@tanstack/react-router'; export const Route = createFileRoute('/_main/issue/')({ - component: IssueListing, + loaderDeps: ({ search }) => ({ search }), + loader: ({ deps, params }) => { + throw redirect({ + to: '/issues', + search: deps.search, + params, + }); + }, }); diff --git a/dashboard/src/routes/_main/issue/route.tsx b/dashboard/src/routes/_main/issue/route.tsx index c64c83c6..d1195e45 100644 --- a/dashboard/src/routes/_main/issue/route.tsx +++ b/dashboard/src/routes/_main/issue/route.tsx @@ -1,30 +1,23 @@ -import { createFileRoute, stripSearchParams } from '@tanstack/react-router'; - -import { z } from 'zod'; - -import { - makeZIntervalInDays, - zListingSize, - type SearchSchema, -} from '@/types/general'; import { - DEFAULT_LISTING_ITEMS, - DEFAULT_TIME_SEARCH, -} from '@/utils/constants/general'; + createFileRoute, + redirect, + stripSearchParams, +} from '@tanstack/react-router'; -export const issueListingDefaultValues = { - intervalInDays: DEFAULT_TIME_SEARCH, - issueSearch: '', - listingSize: DEFAULT_LISTING_ITEMS, -}; - -export const issueListingSearchSchema = z.object({ - intervalInDays: makeZIntervalInDays(DEFAULT_TIME_SEARCH), - issueSearch: z.string().catch(''), - listingSize: zListingSize, -} satisfies SearchSchema); +import { + issueListingDefaultValues, + issueListingSearchSchema, +} from '@/routes/_main/issues/route'; export const Route = createFileRoute('/_main/issue')({ + loaderDeps: ({ search }) => ({ search }), + loader: ({ deps, params }) => { + throw redirect({ + to: '/issues', + search: deps.search, + params, + }); + }, validateSearch: issueListingSearchSchema, search: { middlewares: [stripSearchParams(issueListingDefaultValues)] }, }); diff --git a/dashboard/src/routes/_main/issues/index.tsx b/dashboard/src/routes/_main/issues/index.tsx new file mode 100644 index 00000000..4abda273 --- /dev/null +++ b/dashboard/src/routes/_main/issues/index.tsx @@ -0,0 +1,7 @@ +import { createFileRoute } from '@tanstack/react-router'; + +import IssueListing from '@/pages/IssueListing/IssueListing'; + +export const Route = createFileRoute('/_main/issues/')({ + component: IssueListing, +}); diff --git a/dashboard/src/routes/_main/issues/route.tsx b/dashboard/src/routes/_main/issues/route.tsx new file mode 100644 index 00000000..0242d3e3 --- /dev/null +++ b/dashboard/src/routes/_main/issues/route.tsx @@ -0,0 +1,30 @@ +import { createFileRoute, stripSearchParams } from '@tanstack/react-router'; + +import { z } from 'zod'; + +import { + makeZIntervalInDays, + zListingSize, + type SearchSchema, +} from '@/types/general'; +import { + DEFAULT_LISTING_ITEMS, + DEFAULT_TIME_SEARCH, +} from '@/utils/constants/general'; + +export const issueListingDefaultValues = { + intervalInDays: DEFAULT_TIME_SEARCH, + issueSearch: '', + listingSize: DEFAULT_LISTING_ITEMS, +}; + +export const issueListingSearchSchema = z.object({ + intervalInDays: makeZIntervalInDays(DEFAULT_TIME_SEARCH), + issueSearch: z.string().catch(''), + listingSize: zListingSize, +} satisfies SearchSchema); + +export const Route = createFileRoute('/_main/issues')({ + validateSearch: issueListingSearchSchema, + search: { middlewares: [stripSearchParams(issueListingDefaultValues)] }, +}); diff --git a/dashboard/src/types/general.ts b/dashboard/src/types/general.ts index fdfcf066..3e2560a0 100644 --- a/dashboard/src/types/general.ts +++ b/dashboard/src/types/general.ts @@ -363,4 +363,4 @@ export enum RedirectFrom { Hardware = 'hardware', } -export type PossibleMonitorPath = '/tree' | '/hardware' | '/issue'; +export type PossibleMonitorPath = '/tree' | '/hardware' | '/issues';