feat: bug fixes in overview page and dashboard page

This commit is contained in:
=
2025-01-06 14:55:13 +05:30
parent 524a97e9a6
commit a337e6badd
8 changed files with 21 additions and 23 deletions
@@ -71,7 +71,7 @@ export default function NavHeader({
{currentOrg?.name?.charAt(0)} {currentOrg?.name?.charAt(0)}
</div> </div>
<Link <Link
to={`/org/${currentOrg?.id}/overview`} to="/organization/secret-manager/overview"
className="truncate pl-0.5 text-sm font-semibold text-primary/80 hover:text-primary" className="truncate pl-0.5 text-sm font-semibold text-primary/80 hover:text-primary"
> >
{currentOrg?.name} {currentOrg?.name}
@@ -28,6 +28,7 @@ export const useProjectPermission = () => {
} = useSuspenseQuery({ } = useSuspenseQuery({
queryKey: roleQueryKeys.getUserProjectPermissions({ workspaceId: projectId }), queryKey: roleQueryKeys.getUserProjectPermissions({ workspaceId: projectId }),
queryFn: () => fetchUserProjectPermissions({ workspaceId: projectId }), queryFn: () => fetchUserProjectPermissions({ workspaceId: projectId }),
staleTime: Infinity,
select: (data) => { select: (data) => {
const rule = unpackRules<RawRuleOf<MongoAbility<ProjectPermissionSet>>>(data.permissions); const rule = unpackRules<RawRuleOf<MongoAbility<ProjectPermissionSet>>>(data.permissions);
const negatedRules = groupBy( const negatedRules = groupBy(
@@ -473,7 +473,7 @@ export const OverviewPage = () => {
navigate({ navigate({
search: (prev) => ({ search: (prev) => ({
...prev, ...prev,
secretPath: `${routerSearch?.secretPath || ""}/${path}` secretPath: `${routerSearch.secretPath === "/" ? "" : routerSearch.secretPath}/${path}`
}) })
}).then(() => { }).then(() => {
setFilter(DEFAULT_FILTER_STATE); setFilter(DEFAULT_FILTER_STATE);
@@ -504,7 +504,7 @@ export const OverviewPage = () => {
} }
} }
const query: Record<string, string> = { ...routerSearch, env: slug, searchFilter }; const query: Record<string, string> = { ...routerSearch, search: searchFilter };
const envIndex = visibleEnvs.findIndex((el) => slug === el.slug); const envIndex = visibleEnvs.findIndex((el) => slug === el.slug);
if (envIndex !== -1) { if (envIndex !== -1) {
navigate({ navigate({
@@ -1,4 +1,4 @@
import { createFileRoute } from "@tanstack/react-router"; import { createFileRoute, stripSearchParams } from "@tanstack/react-router";
import { zodValidator } from "@tanstack/zod-adapter"; import { zodValidator } from "@tanstack/zod-adapter";
import { z } from "zod"; import { z } from "zod";
@@ -13,5 +13,8 @@ export const Route = createFileRoute(
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/overview" "/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/overview"
)({ )({
component: OverviewPage, component: OverviewPage,
validateSearch: zodValidator(SecretOverviewPageQuerySchema) validateSearch: zodValidator(SecretOverviewPageQuerySchema),
search: {
middlewares: [stripSearchParams({ secretPath: "/", search: "" })]
}
}); });
@@ -129,7 +129,7 @@ const Page = () => {
const defaultFilterState = { const defaultFilterState = {
tags: {}, tags: {},
searchFilter: (routerQueryParams.searchFilter as string) || "", searchFilter: (routerQueryParams.search as string) || "",
// these should always be on by default for the UI, they will be disabled for the query below based off permissions // these should always be on by default for the UI, they will be disabled for the query below based off permissions
include: { include: {
[RowType.Folder]: true, [RowType.Folder]: true,
@@ -143,7 +143,6 @@ const Page = () => {
const [debouncedSearchFilter, setDebouncedSearchFilter] = useDebounce(filter.searchFilter); const [debouncedSearchFilter, setDebouncedSearchFilter] = useDebounce(filter.searchFilter);
const [filterHistory, setFilterHistory] = useState<Map<string, Filter>>(new Map()); const [filterHistory, setFilterHistory] = useState<Map<string, Filter>>(new Map());
// TODO(rbr): check why this fails
const createSecretPopUp = usePopUpState(PopUpNames.CreateSecretForm); const createSecretPopUp = usePopUpState(PopUpNames.CreateSecretForm);
const { togglePopUp } = usePopUpAction(); const { togglePopUp } = usePopUpAction();
@@ -261,8 +260,11 @@ const Page = () => {
const handleEnvChange = (slug: string) => { const handleEnvChange = (slug: string) => {
navigate({ navigate({
params: {
envSlug: slug
},
search: (state) => { search: (state) => {
const newState = { ...state, secretPath: undefined, env: slug }; const newState = { ...state, secretPath: undefined };
return newState; return newState;
} }
}); });
@@ -316,17 +318,6 @@ const Page = () => {
const restore = filterHistory.get(secretPath); const restore = filterHistory.get(secretPath);
setFilter(restore ?? defaultFilterState); setFilter(restore ?? defaultFilterState);
setDebouncedSearchFilter(restore?.searchFilter ?? ""); setDebouncedSearchFilter(restore?.searchFilter ?? "");
// this is a temp work around until we fully transition state to query params,
// setting the initial search filter by query and then moving it to internal state
if (routerQueryParams.searchFilter) {
navigate({
search: (state) => {
const { searchFilter, ...query } = state;
return query;
}
});
}
}, [secretPath]); }, [secretPath]);
useEffect(() => { useEffect(() => {
@@ -90,7 +90,7 @@ export const FolderListView = ({
}; };
const handleFolderClick = (name: string) => { const handleFolderClick = (name: string) => {
const path = `${secretPathQueryparam || ""}/${name}`; const path = `${secretPathQueryparam === "/" ? "" : secretPathQueryparam}/${name}`;
navigate({ navigate({
search: (el) => ({ ...el, secretPath: path }) search: (el) => ({ ...el, secretPath: path })
}).then(() => onNavigateToFolder(path)); }).then(() => onNavigateToFolder(path));
@@ -1,4 +1,4 @@
import { createFileRoute } from "@tanstack/react-router"; import { createFileRoute, stripSearchParams } from "@tanstack/react-router";
import { zodValidator } from "@tanstack/zod-adapter"; import { zodValidator } from "@tanstack/zod-adapter";
import { z } from "zod"; import { z } from "zod";
@@ -14,5 +14,8 @@ export const Route = createFileRoute(
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/secrets/$envSlug" "/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/secrets/$envSlug"
)({ )({
component: SecretDashboardPage, component: SecretDashboardPage,
validateSearch: zodValidator(SecretDashboardPageQueryParamsSchema) validateSearch: zodValidator(SecretDashboardPageQueryParamsSchema),
search: {
middlewares: [stripSearchParams({ secretPath: "/", search: "", tags: "" })]
}
}); });
@@ -48,7 +48,7 @@ export const SettingsPage = () => {
<div className="my-6"> <div className="my-6">
<p className="text-3xl font-semibold text-gray-200">{t("settings.project.title")}</p> <p className="text-3xl font-semibold text-gray-200">{t("settings.project.title")}</p>
</div> </div>
<Tabs> <Tabs defaultValue={tabs[0].key}>
<TabList> <TabList>
{tabs {tabs
.filter((el) => !el.isHidden) .filter((el) => !el.isHidden)