From 8e93e3fbbbf65d6ad7d112a5e80977e2331ca3fc Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Wed, 22 Jan 2025 14:08:46 +0100 Subject: [PATCH 01/12] Send encodedname to api --- src/views/records/RecordDetailsView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/records/RecordDetailsView.tsx b/src/views/records/RecordDetailsView.tsx index 87c902f0..9e371f1d 100644 --- a/src/views/records/RecordDetailsView.tsx +++ b/src/views/records/RecordDetailsView.tsx @@ -34,7 +34,7 @@ export function RecordDetailsView() { error: fetchError, isLoading: recordLoading } = useGetRecordQuery({ - name: decodedName + name: encodeURIComponent(decodedName) }); const navigate = useNavigate(); -- GitLab From c2f7838dc8800b7ced706bc0d9c325551cdbbbec Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Wed, 22 Jan 2025 14:09:21 +0100 Subject: [PATCH 02/12] Create correct link to alias --- src/views/records/Alias.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/records/Alias.tsx b/src/views/records/Alias.tsx index 37fb5709..f8cf4ad7 100644 --- a/src/views/records/Alias.tsx +++ b/src/views/records/Alias.tsx @@ -17,7 +17,7 @@ export const Alias = ({ aliases }: { aliases?: string[] }) => { {aliases.map((alias, index) => ( <InternalLink key={itemsKeys[index]} - to={`/records/${alias}`} + to={`/records/${encodeURIComponent(alias)}`} label={alias} > {`${alias}${index < aliases.length - 1 && aliases.length > 1 ? "," : ""}`} -- GitLab From b05ca0c14e54fd6874f2a6ebd01f1ac0a1ed64ef Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Fri, 24 Jan 2025 13:41:47 +0100 Subject: [PATCH 03/12] Add generate api dependency --- package-lock.json | 138 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 139 insertions(+) diff --git a/package-lock.json b/package-lock.json index f321686d..c5f49e6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,6 +60,7 @@ "prop-types": "^15.8.1", "storybook": "^8.4.2", "stream-http": "^3.2.0", + "ts-node": "^10.9.2", "typescript": "^5.7.2", "vite": "^5.4.10", "vite-plugin-node-polyfills": "^0.22.0", @@ -676,6 +677,28 @@ "node": ">=0.1.90" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@cypress/request": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.6.tgz", @@ -3972,6 +3995,30 @@ "@testing-library/dom": ">=7.21.4" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", @@ -4637,6 +4684,18 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -4840,6 +4899,12 @@ } ] }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -6309,6 +6374,15 @@ "node": ">=8" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-match-patch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", @@ -9252,6 +9326,12 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/map-or-similar": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", @@ -12289,6 +12369,49 @@ "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/ts-pattern": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-5.2.0.tgz", @@ -12648,6 +12771,12 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -13446,6 +13575,15 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 230088c6..58df30b8 100644 --- a/package.json +++ b/package.json @@ -84,6 +84,7 @@ "prop-types": "^15.8.1", "storybook": "^8.4.2", "stream-http": "^3.2.0", + "ts-node": "^10.9.2", "typescript": "^5.7.2", "vite": "^5.4.10", "vite-plugin-node-polyfills": "^0.22.0", -- GitLab From 768614ee74a2bf4fe0d143543d0611a92e0f02eb Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Fri, 24 Jan 2025 13:44:14 +0100 Subject: [PATCH 04/12] Update api for aliases --- src/store/deployApi.ts | 29 +++++++++++++++---------- src/views/records/RecordDetailsView.tsx | 2 +- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/store/deployApi.ts b/src/store/deployApi.ts index abcb3b50..4c87cb1a 100644 --- a/src/store/deployApi.ts +++ b/src/store/deployApi.ts @@ -113,12 +113,6 @@ const injectedRtkApi = api.injectEndpoints({ body: queryArg.updateHostRequest }) }), - getHealthCheck: build.query< - GetHealthCheckApiResponse, - GetHealthCheckApiArg - >({ - query: () => ({ url: `/healthcheck` }) - }), findAllRecords: build.query< FindAllRecordsApiResponse, FindAllRecordsApiArg @@ -304,6 +298,12 @@ const injectedRtkApi = api.injectEndpoints({ url: `/api/v1/hosts/${queryArg.hostId}/info_by_host_id` }) }), + checkHostExists: build.query< + CheckHostExistsApiResponse, + CheckHostExistsApiArg + >({ + query: (queryArg) => ({ url: `/api/v1/hosts/${queryArg.hostId}/exists` }) + }), findHostAlerts: build.query< FindHostAlertsApiResponse, FindHostAlertsApiArg @@ -465,7 +465,8 @@ export type UpdateIocApiArg = { iocUpdateRequest: IocUpdateRequest; }; export type UnDeployInDbApiResponse = - /** status 200 Undeployment created */ Deployment[]; + /** status 200 Undeployment created */ + Deployment[] | /** status 204 No Content */ void; export type UnDeployInDbApiArg = { /** The id of the IOC to undeploy */ iocId: number; @@ -477,8 +478,6 @@ export type UpdateActiveDeploymentHostApiArg = { iocId: number; updateHostRequest: UpdateHostRequest; }; -export type GetHealthCheckApiResponse = /** status 200 OK */ string; -export type GetHealthCheckApiArg = void; export type FindAllRecordsApiResponse = /** status 200 A paged array of Channel Finder records */ PagedRecordResponse; export type FindAllRecordsApiArg = { @@ -657,6 +656,12 @@ export type FindNetBoxHostByHostIdApiArg = { /** The host's Host ID */ hostId: string; }; +export type CheckHostExistsApiResponse = + /** status 200 Hosts exists in NetBox */ void; +export type CheckHostExistsApiArg = { + /** Host identifier */ + hostId: string; +}; export type FindHostAlertsApiResponse = /** status 200 Host alerts */ HostAlertResponse; export type FindHostAlertsApiArg = { @@ -939,7 +944,7 @@ export type RecordDetails = { [key: string]: string; }; hostId?: string; - aliasTo?: string[]; + aliases?: string[]; }; export type NameResponse = { uuid?: string; @@ -1143,8 +1148,6 @@ export const { useUpdateIocMutation, useUnDeployInDbMutation, useUpdateActiveDeploymentHostMutation, - useGetHealthCheckQuery, - useLazyGetHealthCheckQuery, useFindAllRecordsQuery, useLazyFindAllRecordsQuery, useGetRecordQuery, @@ -1188,6 +1191,8 @@ export const { useLazyFindAssociatedIocsByHostIdQuery, useFindNetBoxHostByHostIdQuery, useLazyFindNetBoxHostByHostIdQuery, + useCheckHostExistsQuery, + useLazyCheckHostExistsQuery, useFindHostAlertsQuery, useLazyFindHostAlertsQuery, useFindNetBoxHostByFqdnQuery, diff --git a/src/views/records/RecordDetailsView.tsx b/src/views/records/RecordDetailsView.tsx index 9e371f1d..f6bcf93d 100644 --- a/src/views/records/RecordDetailsView.tsx +++ b/src/views/records/RecordDetailsView.tsx @@ -71,7 +71,7 @@ export function RecordDetailsView() { ) : ( record?.hostName ), - "Alias to": <Alias aliases={record?.aliasTo} />, + Aliases: <Alias aliases={record?.aliases} />, [LAST_UPDATED]: "", [IOC_REVISION]: "" }; -- GitLab From 4bfa8060439c129ce5fe3466f3cf0bdc8f41f4fd Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Fri, 24 Jan 2025 15:34:26 +0100 Subject: [PATCH 05/12] Generate api with records alerts --- src/store/deployApi.ts | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/store/deployApi.ts b/src/store/deployApi.ts index 4c87cb1a..1ec62c4f 100644 --- a/src/store/deployApi.ts +++ b/src/store/deployApi.ts @@ -128,6 +128,14 @@ const injectedRtkApi = api.injectEndpoints({ } }) }), + fetchRecordAlerts: build.query< + FetchRecordAlertsApiResponse, + FetchRecordAlertsApiArg + >({ + query: (queryArg) => ({ + url: `/api/v1/records/${queryArg.recordName}/alerts` + }) + }), getRecord: build.query<GetRecordApiResponse, GetRecordApiArg>({ query: (queryArg) => ({ url: `/api/v1/records/${queryArg.name}` }) }), @@ -492,6 +500,12 @@ export type FindAllRecordsApiArg = { /** Page size */ limit?: string; }; +export type FetchRecordAlertsApiResponse = + /** status 200 Alerts of the Record */ RecordAlertResponse; +export type FetchRecordAlertsApiArg = { + /** Name of the Record */ + recordName: string; +}; export type GetRecordApiResponse = /** status 200 Found record */ RecordDetails; export type GetRecordApiArg = { /** Unique (part of the) name of the record */ @@ -930,6 +944,16 @@ export type PagedRecordResponse = { limit?: number; recordList?: Record[]; }; +export type Alert = { + type?: "ERROR" | "WARNING" | "INFO"; + message?: string; + link?: string; +}; +export type RecordAlertResponse = { + alertSeverity?: "ERROR" | "WARNING" | "INFO"; + alerts?: Alert[]; + recordName?: string; +}; export type RecordDetails = { name?: string; iocName?: string; @@ -975,11 +999,6 @@ export type HostWithFqdn = { externalIdValid?: boolean; fqdn?: string; }; -export type Alert = { - type?: "ERROR" | "WARNING" | "INFO"; - message?: string; - link?: string; -}; export type JobDetailsEntry = { iocName?: string; iocId?: number; @@ -1150,6 +1169,8 @@ export const { useUpdateActiveDeploymentHostMutation, useFindAllRecordsQuery, useLazyFindAllRecordsQuery, + useFetchRecordAlertsQuery, + useLazyFetchRecordAlertsQuery, useGetRecordQuery, useLazyGetRecordQuery, useFetchIocByNameQuery, -- GitLab From 2eee4a5eefceac46d66c4df9d7ae588a825cb7a0 Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Fri, 24 Jan 2025 15:42:27 +0100 Subject: [PATCH 06/12] Add alerts to record page --- src/views/records/RecordDetailsView.tsx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/views/records/RecordDetailsView.tsx b/src/views/records/RecordDetailsView.tsx index f6bcf93d..f568c608 100644 --- a/src/views/records/RecordDetailsView.tsx +++ b/src/views/records/RecordDetailsView.tsx @@ -7,7 +7,8 @@ import { GlobalAppBarContext, InternalLink, formatDateAndTime, - EmptyValue + EmptyValue, + AlertBannerList } from "@ess-ics/ce-ui-common"; import { useParams, useNavigate } from "react-router-dom"; import { Alias } from "./Alias"; @@ -15,7 +16,11 @@ import { RecordBadge } from "../../components/records/RecordBadge"; import { applicationTitle } from "../../components/navigation/applicationTitle"; import { NotFoundView } from "../../components/navigation/NotFoundView/NotFoundView"; -import { RecordDetails, useGetRecordQuery } from "../../store/deployApi"; +import { + RecordDetails, + useFetchRecordAlertsQuery, + useGetRecordQuery +} from "../../store/deployApi"; import { GlobalAppBarContext as GlobalAppBarContextType } from "../../types/common"; import { getErrorState } from "../../components/common/Alerts/AlertsData"; import { isNotFound } from "../../components/navigation/NotFoundView/isNotFound"; @@ -37,6 +42,12 @@ export function RecordDetailsView() { name: encodeURIComponent(decodedName) }); + const { data: alert, error: alertError } = useFetchRecordAlertsQuery( + { + recordName: decodedName ?? "" + }, + { skip: !decodedName } + ); const navigate = useNavigate(); const { setTitle } = useContext<GlobalAppBarContextType>(GlobalAppBarContext); @@ -92,7 +103,7 @@ export function RecordDetailsView() { } }, []); - const { status } = getErrorState(fetchError); + const { status } = getErrorState(fetchError || alertError); if (decodedName.includes(";") || isNotFound(status)) { return <NotFoundView />; @@ -118,6 +129,7 @@ export function RecordDetailsView() { </IconButton> {record && ( <> + <AlertBannerList alerts={alert?.alerts ?? []} /> <RecordBadge record={record} /> <KeyValueTable obj={getSubset(record)} -- GitLab From 16148fcc2253c0111350c504ab5a9263d2475159 Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Tue, 28 Jan 2025 14:44:10 +0100 Subject: [PATCH 07/12] Remove unneeded wrapper --- src/views/records/RecordDetailsView.tsx | 40 ++++++++++++------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/views/records/RecordDetailsView.tsx b/src/views/records/RecordDetailsView.tsx index f568c608..aad720cb 100644 --- a/src/views/records/RecordDetailsView.tsx +++ b/src/views/records/RecordDetailsView.tsx @@ -119,27 +119,25 @@ export function RecordDetailsView() { return ( <RootPaper> - <> - <IconButton - color="inherit" - onClick={handleClick} - size="large" - > - <ArrowBackIcon /> - </IconButton> - {record && ( - <> - <AlertBannerList alerts={alert?.alerts ?? []} /> - <RecordBadge record={record} /> - <KeyValueTable - obj={getSubset(record)} - variant="overline" - sx={{ border: 0 }} - valueOptions={{ headerName: "" }} - /> - </> - )} - </> + <IconButton + color="inherit" + onClick={handleClick} + size="large" + > + <ArrowBackIcon /> + </IconButton> + {record && ( + <> + <AlertBannerList alerts={alert?.alerts ?? []} /> + <RecordBadge record={record} /> + <KeyValueTable + obj={getSubset(record)} + variant="overline" + sx={{ border: 0 }} + valueOptions={{ headerName: "" }} + /> + </> + )} </RootPaper> ); } -- GitLab From 4a0789943832b1af5ede2d8518b675d83895499c Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Tue, 28 Jan 2025 15:08:16 +0100 Subject: [PATCH 08/12] Remove using alertsError --- src/views/records/RecordDetailsView.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/records/RecordDetailsView.tsx b/src/views/records/RecordDetailsView.tsx index aad720cb..bf1a3b4d 100644 --- a/src/views/records/RecordDetailsView.tsx +++ b/src/views/records/RecordDetailsView.tsx @@ -42,7 +42,7 @@ export function RecordDetailsView() { name: encodeURIComponent(decodedName) }); - const { data: alert, error: alertError } = useFetchRecordAlertsQuery( + const { data: alert } = useFetchRecordAlertsQuery( { recordName: decodedName ?? "" }, @@ -103,7 +103,7 @@ export function RecordDetailsView() { } }, []); - const { status } = getErrorState(fetchError || alertError); + const { status } = getErrorState(fetchError); if (decodedName.includes(";") || isNotFound(status)) { return <NotFoundView />; -- GitLab From 27e93e10217a06ac974359c7586dda367e3bc052 Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Tue, 28 Jan 2025 15:08:55 +0100 Subject: [PATCH 09/12] Move Aliases and Alias for together --- src/views/records/RecordDetailsView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/records/RecordDetailsView.tsx b/src/views/records/RecordDetailsView.tsx index bf1a3b4d..6c135bc1 100644 --- a/src/views/records/RecordDetailsView.tsx +++ b/src/views/records/RecordDetailsView.tsx @@ -67,6 +67,7 @@ export function RecordDetailsView() { "Alias for": ( <Alias aliases={record?.aliasFor ? [record?.aliasFor] : []} /> ), + Aliases: <Alias aliases={record?.aliases} />, [DESCRIPTION]: record?.description || <EmptyValue />, Version: record?.iocVersion || <EmptyValue />, [RECORD_TYPE]: record.recordType || <EmptyValue />, @@ -82,7 +83,6 @@ export function RecordDetailsView() { ) : ( record?.hostName ), - Aliases: <Alias aliases={record?.aliases} />, [LAST_UPDATED]: "", [IOC_REVISION]: "" }; -- GitLab From a0c8aa2c56915b66ed13e39a8a3cd1d313399f36 Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Tue, 28 Jan 2025 15:54:43 +0100 Subject: [PATCH 10/12] Fix uri encoding of path variables --- src/views/records/RecordDetailsView.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/views/records/RecordDetailsView.tsx b/src/views/records/RecordDetailsView.tsx index 6c135bc1..10cc0318 100644 --- a/src/views/records/RecordDetailsView.tsx +++ b/src/views/records/RecordDetailsView.tsx @@ -33,20 +33,21 @@ const IOC_REVISION = "IOC Revision"; export function RecordDetailsView() { const { name } = useParams(); const decodedName = decodeURIComponent(name ?? ""); + const encodedName = encodeURIComponent(decodedName); const { data: record, error: fetchError, isLoading: recordLoading } = useGetRecordQuery({ - name: encodeURIComponent(decodedName) + name: encodedName }); const { data: alert } = useFetchRecordAlertsQuery( { - recordName: decodedName ?? "" + recordName: encodedName }, - { skip: !decodedName } + { skip: !encodedName } ); const navigate = useNavigate(); -- GitLab From 474ad3ada23979d9cf8e22e130c460c94a3ca64d Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Tue, 28 Jan 2025 15:58:52 +0100 Subject: [PATCH 11/12] Add some nice spacing --- src/views/records/RecordDetailsView.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/views/records/RecordDetailsView.tsx b/src/views/records/RecordDetailsView.tsx index 10cc0318..50db05c0 100644 --- a/src/views/records/RecordDetailsView.tsx +++ b/src/views/records/RecordDetailsView.tsx @@ -1,5 +1,5 @@ import { useEffect, useCallback, useContext } from "react"; -import { IconButton, Typography, LinearProgress } from "@mui/material"; +import { IconButton, Typography, LinearProgress, Stack } from "@mui/material"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import { RootPaper, @@ -128,7 +128,7 @@ export function RecordDetailsView() { <ArrowBackIcon /> </IconButton> {record && ( - <> + <Stack spacing={2}> <AlertBannerList alerts={alert?.alerts ?? []} /> <RecordBadge record={record} /> <KeyValueTable @@ -137,7 +137,7 @@ export function RecordDetailsView() { sx={{ border: 0 }} valueOptions={{ headerName: "" }} /> - </> + </Stack> )} </RootPaper> ); -- GitLab From 2fc1c63d1a9880a4047d702891d22c828443abac Mon Sep 17 00:00:00 2001 From: Sky Brewer <sky.brewer@ess.eu> Date: Wed, 29 Jan 2025 10:14:51 +0100 Subject: [PATCH 12/12] Fix alias stack --- src/views/records/Alias.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/views/records/Alias.tsx b/src/views/records/Alias.tsx index f8cf4ad7..6829b9d9 100644 --- a/src/views/records/Alias.tsx +++ b/src/views/records/Alias.tsx @@ -9,18 +9,14 @@ export const Alias = ({ aliases }: { aliases?: string[] }) => { } return ( - <Stack - direction="row" - gap={1.5} - flexWrap="wrap" - > + <Stack gap={0.5}> {aliases.map((alias, index) => ( <InternalLink key={itemsKeys[index]} to={`/records/${encodeURIComponent(alias)}`} label={alias} > - {`${alias}${index < aliases.length - 1 && aliases.length > 1 ? "," : ""}`} + {alias} </InternalLink> ))} </Stack> -- GitLab