@cobaltcore-dev/aurora 0.20.1 → 0.20.3
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/client/{ContentHeader-BIScbvb4.mjs → ContentHeader-CIAzorGI.mjs} +2 -3
- package/dist/client/{ContentHeader-BIScbvb4.mjs.map → ContentHeader-CIAzorGI.mjs.map} +1 -1
- package/dist/client/{_flavorId-sS1sg_DZ.mjs → _flavorId-BMX239RH.mjs} +3 -3
- package/dist/client/{_flavorId-sS1sg_DZ.mjs.map → _flavorId-BMX239RH.mjs.map} +1 -1
- package/dist/client/{_flavorId-BQY7YhNx.mjs → _flavorId-BaNJ1CDY.mjs} +2 -2
- package/dist/client/{_flavorId-BQY7YhNx.mjs.map → _flavorId-BaNJ1CDY.mjs.map} +1 -1
- package/dist/client/{_floatingIpId-DFCaWI9K.mjs → _floatingIpId-DQFtZNeg.mjs} +2 -2
- package/dist/client/{_floatingIpId-DFCaWI9K.mjs.map → _floatingIpId-DQFtZNeg.mjs.map} +1 -1
- package/dist/client/{_floatingIpId-De0hCSSN2.mjs → _floatingIpId-E6x99cmW.mjs} +2 -2
- package/dist/client/_floatingIpId-E6x99cmW.mjs.map +1 -0
- package/dist/client/{_imageId-D8HiDS3P.mjs → _imageId-C2662dZr.mjs} +2 -2
- package/dist/client/{_imageId-D8HiDS3P.mjs.map → _imageId-C2662dZr.mjs.map} +1 -1
- package/dist/client/{_projectId-CoMD6nq6.mjs → _projectId-B4ScifQf.mjs} +3 -3
- package/dist/client/{_projectId-CoMD6nq6.mjs.map → _projectId-B4ScifQf.mjs.map} +1 -1
- package/dist/client/{_projectId-D8FHe0gr.mjs → _projectId-CYq4KZXB.mjs} +3 -3
- package/dist/client/{_projectId-D8FHe0gr.mjs.map → _projectId-CYq4KZXB.mjs.map} +1 -1
- package/dist/client/{_projectId-hMtrqW6m.mjs → _projectId-DJLjspKf.mjs} +23 -24
- package/dist/client/{_projectId-hMtrqW6m.mjs.map → _projectId-DJLjspKf.mjs.map} +1 -1
- package/dist/client/{_projectId-MjFv839t.mjs → _projectId-DxgPaiA7.mjs} +2 -2
- package/dist/client/{_projectId-MjFv839t.mjs.map → _projectId-DxgPaiA7.mjs.map} +1 -1
- package/dist/client/{_storageType-CH2khFcZ.mjs → _storageType-BkhbKG_G.mjs} +2 -2
- package/dist/client/{_storageType-CH2khFcZ.mjs.map → _storageType-BkhbKG_G.mjs.map} +1 -1
- package/dist/client/{_storageType-D-1H6SX1.mjs → _storageType-ByLL106s.mjs} +851 -853
- package/dist/client/_storageType-ByLL106s.mjs.map +1 -0
- package/dist/client/{flavors-D5aTQJT1.mjs → flavors-Bwjig3k2.mjs} +3 -3
- package/dist/client/{flavors-D5aTQJT1.mjs.map → flavors-Bwjig3k2.mjs.map} +1 -1
- package/dist/client/{flavors-TqwbWt4R.mjs → flavors-C7PVJUqZ.mjs} +2 -2
- package/dist/client/{flavors-TqwbWt4R.mjs.map → flavors-C7PVJUqZ.mjs.map} +1 -1
- package/dist/client/{images-sNuJa6ce.mjs → images-CD7DNwru.mjs} +2 -2
- package/dist/client/{images-sNuJa6ce.mjs.map → images-CD7DNwru.mjs.map} +1 -1
- package/dist/client/{images-CkW8zNjs.mjs → images-CfBrglGJ.mjs} +9 -9
- package/dist/client/{images-CkW8zNjs.mjs.map → images-CfBrglGJ.mjs.map} +1 -1
- package/dist/client/index.js +454 -317
- package/dist/client/index.js.map +1 -1
- package/dist/client/{objects-B3Z8h4RU.mjs → objects-CEBrL7k-.mjs} +2 -2
- package/dist/client/{objects-B3Z8h4RU.mjs.map → objects-CEBrL7k-.mjs.map} +1 -1
- package/dist/client/{objects-CGOfO00N.mjs → objects-DvIxpzGI.mjs} +3 -3
- package/dist/client/{objects-CGOfO00N.mjs.map → objects-DvIxpzGI.mjs.map} +1 -1
- package/dist/client/{pca-BClYQElh.mjs → pca-CpMqoF00.mjs} +3 -3
- package/dist/client/{pca-BClYQElh.mjs.map → pca-CpMqoF00.mjs.map} +1 -1
- package/dist/client/{pca-B4_2DqT2.mjs → pca-ZgGU0UPF.mjs} +2 -2
- package/dist/client/{pca-B4_2DqT2.mjs.map → pca-ZgGU0UPF.mjs.map} +1 -1
- package/dist/client/projects-DvSiI5Vg.mjs.map +1 -1
- package/dist/client/projects-yiK0HGSA.mjs.map +1 -1
- package/dist/client/routeInfo-Ct5r4Gen.mjs +56 -0
- package/dist/client/routeInfo-Ct5r4Gen.mjs.map +1 -0
- package/package.json +3 -3
- package/dist/client/Slot-CWb612-_.mjs +0 -28
- package/dist/client/Slot-CWb612-_.mjs.map +0 -1
- package/dist/client/_floatingIpId-De0hCSSN2.mjs.map +0 -1
- package/dist/client/_storageType-D-1H6SX1.mjs.map +0 -1
- package/dist/client/projects-4wFhznPY.mjs +0 -34
- package/dist/client/projects-4wFhznPY.mjs.map +0 -1
- package/dist/client/projects-wd6Yc-GU.mjs +0 -107
- package/dist/client/projects-wd6Yc-GU.mjs.map +0 -1
- package/dist/client/routeInfo-CdTRlSxv.mjs +0 -32
- package/dist/client/routeInfo-CdTRlSxv.mjs.map +0 -1
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { K as e, tt as t } from "./build-DgeVmENN.mjs";
|
|
2
|
-
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
3
|
-
import { createFileRoute as i, lazyRouteComponent as a } from "@tanstack/react-router";
|
|
4
|
-
import { z as o } from "zod";
|
|
5
|
-
//#region src/client/routes/_auth/projects/index.tsx
|
|
6
|
-
var s = () => import("./projects-yiK0HGSA.mjs"), c = () => import("./projects-DvSiI5Vg.mjs"), l = () => import("./projects-wd6Yc-GU.mjs"), u = o.object({ search: o.string().optional() }), d = i("/_auth/projects/")({
|
|
7
|
-
staticData: { analytics: { name: "projects.list" } },
|
|
8
|
-
component: a(l, "component"),
|
|
9
|
-
pendingComponent: () => /*#__PURE__*/ r(t, {
|
|
10
|
-
className: "fixed inset-0",
|
|
11
|
-
distribution: "center",
|
|
12
|
-
alignment: "center",
|
|
13
|
-
children: [/*#__PURE__*/ n("div", { className: "absolute inset-0 backdrop-blur-sm" }), /*#__PURE__*/ n(e, {
|
|
14
|
-
variant: "primary",
|
|
15
|
-
size: "large"
|
|
16
|
-
})]
|
|
17
|
-
}),
|
|
18
|
-
errorComponent: a(c, "errorComponent"),
|
|
19
|
-
notFoundComponent: a(s, "notFoundComponent"),
|
|
20
|
-
validateSearch: u,
|
|
21
|
-
loaderDeps: ({ search: e }) => ({ search: e.search || "" }),
|
|
22
|
-
loader: async ({ context: e, deps: t }) => {
|
|
23
|
-
let n = await e.trpcClient?.project.getAuthProjects.query(), r = n;
|
|
24
|
-
if (t.search && t.search.trim() !== "") {
|
|
25
|
-
let e = t.search.toLowerCase();
|
|
26
|
-
r = n?.filter((t) => t.name?.toLowerCase().includes(e) || t.description?.toLowerCase().includes(e));
|
|
27
|
-
}
|
|
28
|
-
return { projects: r };
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
//#endregion
|
|
32
|
-
export { d as t };
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=projects-4wFhznPY.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"projects-4wFhznPY.mjs","names":["createFileRoute","Spinner","Stack","z","searchSchema","object","search","string","optional","Route","staticData","analytics","name","RouteInfo","component","lazyRouteComponent","$$splitComponentImporter","pendingComponent","errorComponent","$$splitErrorComponentImporter","notFoundComponent","$$splitNotFoundComponentImporter","validateSearch","loaderDeps","loader","context","deps","allProjects","trpcClient","project","getAuthProjects","query","projects","trim","searchTermLower","toLowerCase","filter","includes","description"],"sources":["../../src/client/routes/_auth/projects/index.tsx"],"sourcesContent":["import { createFileRoute } from \"@tanstack/react-router\"\nimport { useRouteContext } from \"@tanstack/react-router\"\nimport { ProjectsOverviewNavBar } from \"@/client/routes/_auth/projects/-components/ProjectOverviewNavBar\"\nimport { ProjectCardView } from \"@/client/routes/_auth/projects/-components/ProjectCardView\"\nimport { RouteError } from \"@/client/components/Error/RouteError\"\nimport { TRPCClientError } from \"@trpc/client\"\nimport { Container, ContentHeading, Spinner, Stack } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { z } from \"zod\"\nimport { Slot } from \"@/client/components/Slot\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\n\nconst searchSchema = z.object({\n search: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\"/_auth/projects/\")({\n staticData: {\n analytics: {\n name: \"projects.list\",\n },\n } satisfies RouteInfo,\n component: ProjectsOverview,\n pendingComponent: () => (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\">\n <div className=\"absolute inset-0 backdrop-blur-sm\" />\n <Spinner variant=\"primary\" size=\"large\" />\n </Stack>\n ),\n errorComponent: ({ error }) => (\n <RouteError error={error} safeErrorMessage={error instanceof TRPCClientError ? error.message : undefined} />\n ),\n notFoundComponent: () => {\n return <p>Projects not found</p>\n },\n validateSearch: searchSchema,\n loaderDeps: ({ search }) => ({\n search: search.search || \"\",\n }),\n loader: async ({ context, deps }) => {\n const allProjects = await context.trpcClient?.project.getAuthProjects.query()\n\n let projects = allProjects\n if (deps.search && deps.search.trim() !== \"\") {\n const searchTermLower = deps.search.toLowerCase()\n projects = allProjects?.filter(\n (project) =>\n project.name?.toLowerCase().includes(searchTermLower) ||\n project.description?.toLowerCase().includes(searchTermLower)\n )\n }\n\n return { projects }\n },\n})\n\nfunction ProjectsOverview() {\n const { projects } = Route.useLoaderData()\n const { search = \"\" } = Route.useSearch()\n const navigate = Route.useNavigate()\n const { slots } = useRouteContext({ strict: false })\n\n const handleSearch = (value: string) => {\n navigate({ search: { search: value }, replace: true })\n }\n\n return (\n <Container py>\n <ContentHeading className=\"pb-4\">\n <Trans>Projects</Trans>\n </ContentHeading>\n {slots?.projectsBanner && <Slot component={slots.projectsBanner} useShadowDOM={false} />}\n <ProjectsOverviewNavBar searchTerm={search} onSearch={handleSearch} />\n <div className=\"pt-5\">\n <ProjectCardView projects={projects} />\n </div>\n </Container>\n )\n}\n"],"mappings":";;;;;2IAYMI,IAAeD,EAAEE,OAAO,EAC5BC,QAAQH,EAAEI,OAAM,EAAGC,SAAQ,EAC7B,CAAA,GAEaC,IAAQT,EAAgB,kBAAA,EAAoB;CACvDU,YAAY,EACVC,WAAW,EACTC,MAAM,gBACR,EACF;CACAE,WAASC,EAAAC,GAAA,WAAA;CACTC,wBACE,gBAAC,GAAA;EAAM,WAAU;EAAgB,cAAa;EAAS,WAAU;aAC/D,gBAAC,OAAA,EAAI,WAAU,oCAAA,CAAA,GACf,gBAAC,GAAA;GAAQ,SAAQ;GAAU,MAAK;;;CAGpCC,gBAAcH,EAAAI,GAAA,gBAAA;CAGdC,mBAAiBL,EAAAM,GAAA,mBAAA;CAGjBC,gBAAgBlB;CAChBmB,aAAa,EAAEjB,iBAAc,EAC3BA,QAAQA,EAAOA,UAAU,GAC3B;CACAkB,QAAQ,OAAO,EAAEC,YAASC,cAAM;EAC9B,IAAMC,IAAc,MAAMF,EAAQG,YAAYC,QAAQC,gBAAgBC,MAAAA,GAElEC,IAAWL;EACf,IAAID,EAAKpB,UAAUoB,EAAKpB,OAAO2B,KAAI,MAAO,IAAI;GAC5C,IAAMC,IAAkBR,EAAKpB,OAAO6B,YAAW;GAC/CH,IAAWL,GAAaS,QACrBP,MACCA,EAAQjB,MAAMuB,YAAAA,EAAcE,SAASH,CAAAA,KACrCL,EAAQS,aAAaH,YAAAA,EAAcE,SAASH,CAAAA,CAAAA;EAElD;EAEA,OAAO,EAAEF,YAAS;CACpB;AACF,CAAA"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { Y as e, Z as t, n, x as r } from "./build-DgeVmENN.mjs";
|
|
2
|
-
import { t as i } from "./Slot-CWb612-_.mjs";
|
|
3
|
-
import { t as a } from "./projects-4wFhznPY.mjs";
|
|
4
|
-
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
5
|
-
import { useEffect as c, useRef as l, useState as u } from "react";
|
|
6
|
-
import { useNavigate as d, useRouteContext as f } from "@tanstack/react-router";
|
|
7
|
-
import { Trans as p, useLingui as m } from "@lingui/react";
|
|
8
|
-
//#region src/client/routes/_auth/projects/-components/ProjectOverviewNavBar.tsx
|
|
9
|
-
function h({ onSearch: e, searchTerm: t = "" }) {
|
|
10
|
-
let { i18n: r, _: i } = m(), a = l(null), s = l(!1), [d, f] = u(t);
|
|
11
|
-
return c(() => {
|
|
12
|
-
!s.current && !a.current && t !== d && f(t);
|
|
13
|
-
}, [t]), c(() => () => {
|
|
14
|
-
a.current && clearTimeout(a.current);
|
|
15
|
-
}, []), /*#__PURE__*/ o(n, {
|
|
16
|
-
className: "w-full",
|
|
17
|
-
type: "text",
|
|
18
|
-
placeholder: r._({ id: "YIix5Y" }),
|
|
19
|
-
onChange: (t) => {
|
|
20
|
-
let n = t.target.value;
|
|
21
|
-
f(n), a.current && clearTimeout(a.current), a.current = setTimeout(() => {
|
|
22
|
-
a.current = null, e(n);
|
|
23
|
-
}, 300);
|
|
24
|
-
},
|
|
25
|
-
onFocus: () => {
|
|
26
|
-
s.current = !0;
|
|
27
|
-
},
|
|
28
|
-
onBlur: () => {
|
|
29
|
-
s.current = !1;
|
|
30
|
-
},
|
|
31
|
-
onClear: () => {
|
|
32
|
-
a.current &&= (clearTimeout(a.current), null), f(""), e("");
|
|
33
|
-
},
|
|
34
|
-
value: d
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
//#endregion
|
|
38
|
-
//#region src/client/routes/_auth/projects/-components/ProjectCardView.tsx
|
|
39
|
-
function g({ project: e }) {
|
|
40
|
-
let t = d();
|
|
41
|
-
return /*#__PURE__*/ s(r, {
|
|
42
|
-
padding: !0,
|
|
43
|
-
onClick: () => t({
|
|
44
|
-
to: "/projects/$projectId",
|
|
45
|
-
params: { projectId: e.id }
|
|
46
|
-
}),
|
|
47
|
-
className: "flex flex-col gap-4",
|
|
48
|
-
children: [/*#__PURE__*/ s("div", {
|
|
49
|
-
className: "flex min-w-0 flex-col",
|
|
50
|
-
children: [/*#__PURE__*/ o("p", {
|
|
51
|
-
className: "text-theme-light text-xs leading-5 font-normal",
|
|
52
|
-
children: e.domain_name ?? e.domain_id ?? /*#__PURE__*/ o(p, { id: "ZkxxiR" })
|
|
53
|
-
}), /*#__PURE__*/ o("p", {
|
|
54
|
-
"data-testid": "project-name",
|
|
55
|
-
className: "text-theme-high text-lg leading-7 font-bold",
|
|
56
|
-
children: e.name
|
|
57
|
-
})]
|
|
58
|
-
}), e.description && /*#__PURE__*/ o("p", {
|
|
59
|
-
className: "text-theme-default line-clamp-2 text-sm font-normal",
|
|
60
|
-
children: e.description
|
|
61
|
-
})]
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
function _({ projects: e }) {
|
|
65
|
-
return /*#__PURE__*/ o("div", {
|
|
66
|
-
className: "w-full",
|
|
67
|
-
children: /*#__PURE__*/ o("div", {
|
|
68
|
-
className: "grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4",
|
|
69
|
-
children: e?.length ? [...e].sort((e, t) => e.name.localeCompare(t.name)).map((e) => /*#__PURE__*/ o(g, { project: e }, e.id)) : /*#__PURE__*/ o("p", { children: /*#__PURE__*/ o(p, { id: "Zgp2Sm" }) })
|
|
70
|
-
})
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
//#endregion
|
|
74
|
-
//#region src/client/routes/_auth/projects/index.tsx?tsr-split=component
|
|
75
|
-
function v() {
|
|
76
|
-
let { projects: n } = a.useLoaderData(), { search: r = "" } = a.useSearch(), c = a.useNavigate(), { slots: l } = f({ strict: !1 });
|
|
77
|
-
return /*#__PURE__*/ s(t, {
|
|
78
|
-
py: !0,
|
|
79
|
-
children: [
|
|
80
|
-
/*#__PURE__*/ o(e, {
|
|
81
|
-
className: "pb-4",
|
|
82
|
-
children: /*#__PURE__*/ o(p, { id: "+0B+ue" })
|
|
83
|
-
}),
|
|
84
|
-
l?.projectsBanner && /*#__PURE__*/ o(i, {
|
|
85
|
-
component: l.projectsBanner,
|
|
86
|
-
useShadowDOM: !1
|
|
87
|
-
}),
|
|
88
|
-
/*#__PURE__*/ o(h, {
|
|
89
|
-
searchTerm: r,
|
|
90
|
-
onSearch: (e) => {
|
|
91
|
-
c({
|
|
92
|
-
search: { search: e },
|
|
93
|
-
replace: !0
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
}),
|
|
97
|
-
/*#__PURE__*/ o("div", {
|
|
98
|
-
className: "pt-5",
|
|
99
|
-
children: /*#__PURE__*/ o(_, { projects: n })
|
|
100
|
-
})
|
|
101
|
-
]
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
//#endregion
|
|
105
|
-
export { v as component };
|
|
106
|
-
|
|
107
|
-
//# sourceMappingURL=projects-wd6Yc-GU.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"projects-wd6Yc-GU.mjs","names":["useEffect","useRef","useState","SearchInput","ProjectsOverviewNavBar","onSearch","searchTerm","useLingui","timerRef","inputFocusedRef","inputValue","setInputValue","current","clearTimeout","handleSearchChange","e","value","target","setTimeout","handleClear","className","type","placeholder","t","onChange","onFocus","onBlur","onClear","useNavigate","Card","ProjectCard","project","navigate","padding","onClick","to","params","projectId","id","className","div","p","domain_name","domain_id","data-testid","name","description","ProjectCardView","projects","length","sort","a","b","localeCompare","map","useRouteContext","ProjectsOverviewNavBar","ProjectCardView","Container","ContentHeading","Trans","Slot","Route","ProjectsOverview","projects","useLoaderData","search","useSearch","navigate","useNavigate","slots","strict","handleSearch","value","replace","projectsBanner","component"],"sources":["../../src/client/routes/_auth/projects/-components/ProjectOverviewNavBar.tsx","../../src/client/routes/_auth/projects/-components/ProjectCardView.tsx","../../src/client/routes/_auth/projects/index.tsx?tsr-split=component"],"sourcesContent":["import { ChangeEvent, useEffect, useRef, useState } from \"react\"\nimport { SearchInput } from \"@cloudoperators/juno-ui-components\"\nimport { useLingui } from \"@lingui/react/macro\"\n\ntype ProjectsOverviewNavBarProps = {\n searchTerm?: string\n onSearch: (value: string) => void\n}\n\nexport function ProjectsOverviewNavBar({ onSearch, searchTerm = \"\" }: ProjectsOverviewNavBarProps) {\n const { t } = useLingui()\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const inputFocusedRef = useRef(false)\n const [inputValue, setInputValue] = useState(searchTerm)\n\n useEffect(() => {\n if (!inputFocusedRef.current && !timerRef.current && searchTerm !== inputValue) {\n setInputValue(searchTerm)\n }\n }, [searchTerm])\n\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [])\n\n const handleSearchChange = (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value\n setInputValue(value)\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => {\n timerRef.current = null\n onSearch(value)\n }, 300)\n }\n\n const handleClear = () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current)\n timerRef.current = null\n }\n setInputValue(\"\")\n onSearch(\"\")\n }\n\n return (\n <SearchInput\n className=\"w-full\"\n type=\"text\"\n placeholder={t`Search...`}\n onChange={handleSearchChange}\n onFocus={() => {\n inputFocusedRef.current = true\n }}\n onBlur={() => {\n inputFocusedRef.current = false\n }}\n onClear={handleClear}\n value={inputValue}\n />\n )\n}\n","import { useNavigate } from \"@tanstack/react-router\"\nimport { Project } from \"@/server/Project/types/models\"\nimport { Card } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\n\ntype ProjectCardProps = {\n project: Project\n}\ntype ProjectCardViewProps = {\n projects: Project[] | undefined\n}\n\nexport function ProjectCard({ project }: ProjectCardProps) {\n const navigate = useNavigate()\n return (\n <Card\n padding\n onClick={() => navigate({ to: \"/projects/$projectId\", params: { projectId: project.id } })}\n className=\"flex flex-col gap-4\"\n >\n <div className=\"flex min-w-0 flex-col\">\n <p className=\"text-theme-light text-xs leading-5 font-normal\">\n {project.domain_name ?? project.domain_id ?? <Trans>Unknown domain</Trans>}\n </p>\n <p data-testid=\"project-name\" className=\"text-theme-high text-lg leading-7 font-bold\">\n {project.name}\n </p>\n </div>\n {project.description && (\n <p className=\"text-theme-default line-clamp-2 text-sm font-normal\">{project.description}</p>\n )}\n </Card>\n )\n}\n\nexport function ProjectCardView({ projects }: ProjectCardViewProps) {\n return (\n <div className=\"w-full\">\n <div className=\"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4\">\n {projects?.length ? (\n [...projects]\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((project) => <ProjectCard key={project.id} project={project} />)\n ) : (\n <p>\n <Trans>No projects available.</Trans>\n </p>\n )}\n </div>\n </div>\n )\n}\n","import { createFileRoute } from \"@tanstack/react-router\"\nimport { useRouteContext } from \"@tanstack/react-router\"\nimport { ProjectsOverviewNavBar } from \"@/client/routes/_auth/projects/-components/ProjectOverviewNavBar\"\nimport { ProjectCardView } from \"@/client/routes/_auth/projects/-components/ProjectCardView\"\nimport { RouteError } from \"@/client/components/Error/RouteError\"\nimport { TRPCClientError } from \"@trpc/client\"\nimport { Container, ContentHeading, Spinner, Stack } from \"@cloudoperators/juno-ui-components\"\nimport { Trans } from \"@lingui/react/macro\"\nimport { z } from \"zod\"\nimport { Slot } from \"@/client/components/Slot\"\nimport type { RouteInfo } from \"@/client/routes/routeInfo\"\n\nconst searchSchema = z.object({\n search: z.string().optional(),\n})\n\nexport const Route = createFileRoute(\"/_auth/projects/\")({\n staticData: {\n analytics: {\n name: \"projects.list\",\n },\n } satisfies RouteInfo,\n component: ProjectsOverview,\n pendingComponent: () => (\n <Stack className=\"fixed inset-0\" distribution=\"center\" alignment=\"center\">\n <div className=\"absolute inset-0 backdrop-blur-sm\" />\n <Spinner variant=\"primary\" size=\"large\" />\n </Stack>\n ),\n errorComponent: ({ error }) => (\n <RouteError error={error} safeErrorMessage={error instanceof TRPCClientError ? error.message : undefined} />\n ),\n notFoundComponent: () => {\n return <p>Projects not found</p>\n },\n validateSearch: searchSchema,\n loaderDeps: ({ search }) => ({\n search: search.search || \"\",\n }),\n loader: async ({ context, deps }) => {\n const allProjects = await context.trpcClient?.project.getAuthProjects.query()\n\n let projects = allProjects\n if (deps.search && deps.search.trim() !== \"\") {\n const searchTermLower = deps.search.toLowerCase()\n projects = allProjects?.filter(\n (project) =>\n project.name?.toLowerCase().includes(searchTermLower) ||\n project.description?.toLowerCase().includes(searchTermLower)\n )\n }\n\n return { projects }\n },\n})\n\nfunction ProjectsOverview() {\n const { projects } = Route.useLoaderData()\n const { search = \"\" } = Route.useSearch()\n const navigate = Route.useNavigate()\n const { slots } = useRouteContext({ strict: false })\n\n const handleSearch = (value: string) => {\n navigate({ search: { search: value }, replace: true })\n }\n\n return (\n <Container py>\n <ContentHeading className=\"pb-4\">\n <Trans>Projects</Trans>\n </ContentHeading>\n {slots?.projectsBanner && <Slot component={slots.projectsBanner} useShadowDOM={false} />}\n <ProjectsOverviewNavBar searchTerm={search} onSearch={handleSearch} />\n <div className=\"pt-5\">\n <ProjectCardView projects={projects} />\n </div>\n </Container>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { z as e } from "zod";
|
|
2
|
-
var t = e.object({
|
|
3
|
-
labelKey: e.enum([
|
|
4
|
-
"Compute",
|
|
5
|
-
"Network",
|
|
6
|
-
"Storage",
|
|
7
|
-
"Services",
|
|
8
|
-
"Images",
|
|
9
|
-
"Flavors",
|
|
10
|
-
"Security Groups",
|
|
11
|
-
"Floating IPs",
|
|
12
|
-
"PCA (Clavis)"
|
|
13
|
-
]).optional(),
|
|
14
|
-
to: e.string().optional(),
|
|
15
|
-
useParamAsLabel: e.string().optional(),
|
|
16
|
-
useParentTitleAsLabel: e.boolean().optional()
|
|
17
|
-
}), n = e.object({ name: e.string() }), r = e.object({
|
|
18
|
-
section: e.string().optional(),
|
|
19
|
-
service: e.string().optional(),
|
|
20
|
-
isDetail: e.boolean().optional(),
|
|
21
|
-
crumb: t.optional(),
|
|
22
|
-
sectionCrumb: t.optional(),
|
|
23
|
-
intermediateCrumb: t.optional(),
|
|
24
|
-
analytics: n.optional()
|
|
25
|
-
});
|
|
26
|
-
function i(e) {
|
|
27
|
-
return r.safeParse(e).success;
|
|
28
|
-
}
|
|
29
|
-
//#endregion
|
|
30
|
-
export { i as t };
|
|
31
|
-
|
|
32
|
-
//# sourceMappingURL=routeInfo-CdTRlSxv.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routeInfo-CdTRlSxv.mjs","names":["z","CRUMB_LABEL_KEYS","CrumbSchema","object","labelKey","enum","optional","to","string","useParamAsLabel","useParentTitleAsLabel","boolean","AnalyticsSchema","name","RouteInfoSchema","section","service","isDetail","crumb","sectionCrumb","intermediateCrumb","analytics","isRouteInfo","data","safeParse","success"],"sources":["../../src/client/routes/routeInfo.ts"],"sourcesContent":["import { z } from \"zod\"\n\nexport const CRUMB_LABEL_KEYS = [\n \"Compute\",\n \"Network\",\n \"Storage\",\n \"Services\",\n \"Images\",\n \"Flavors\",\n \"Security Groups\",\n \"Floating IPs\",\n \"PCA (Clavis)\",\n] as const\n\nexport type CrumbLabelKey = (typeof CRUMB_LABEL_KEYS)[number]\n\nconst CrumbSchema = z.object({\n labelKey: z.enum(CRUMB_LABEL_KEYS).optional(),\n to: z.string().optional(),\n useParamAsLabel: z.string().optional(),\n useParentTitleAsLabel: z.boolean().optional(),\n})\n\nconst AnalyticsSchema = z.object({\n name: z.string(),\n})\n\nconst RouteInfoSchema = z.object({\n section: z.string().optional(),\n service: z.string().optional(),\n isDetail: z.boolean().optional(),\n crumb: CrumbSchema.optional(),\n sectionCrumb: CrumbSchema.optional(),\n intermediateCrumb: CrumbSchema.optional(),\n analytics: AnalyticsSchema.optional(),\n})\n\nexport type Crumb = z.infer<typeof CrumbSchema>\nexport type Analytics = z.infer<typeof AnalyticsSchema>\nexport type RouteInfo = z.infer<typeof RouteInfoSchema>\n\nexport function isRouteInfo(data: unknown): data is RouteInfo {\n return RouteInfoSchema.safeParse(data).success\n}\n"],"mappings":";AAgBA,IAAME,IAAcF,EAAEG,OAAO;CAC3BC,UAAUJ,EAAEK,KAAKJ;EAdjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAMiBA,CAAAA,EAAkBK,SAAQ;CAC3CC,IAAIP,EAAEQ,OAAM,EAAGF,SAAQ;CACvBG,iBAAiBT,EAAEQ,OAAM,EAAGF,SAAQ;CACpCI,uBAAuBV,EAAEW,QAAO,EAAGL,SAAQ;AAC7C,CAAA,GAEMM,IAAkBZ,EAAEG,OAAO,EAC/BU,MAAMb,EAAEQ,OAAM,EAChB,CAAA,GAEMM,IAAkBd,EAAEG,OAAO;CAC/BY,SAASf,EAAEQ,OAAM,EAAGF,SAAQ;CAC5BU,SAAShB,EAAEQ,OAAM,EAAGF,SAAQ;CAC5BW,UAAUjB,EAAEW,QAAO,EAAGL,SAAQ;CAC9BY,OAAOhB,EAAYI,SAAQ;CAC3Ba,cAAcjB,EAAYI,SAAQ;CAClCc,mBAAmBlB,EAAYI,SAAQ;CACvCe,WAAWT,EAAgBN,SAAQ;AACrC,CAAA;AAMA,SAAgBgB,EAAYC,GAAa;CACvC,OAAOT,EAAgBU,UAAUD,CAAAA,EAAME;AACzC"}
|