Skip to content

Commit

Permalink
[#noissue] Save last application, searchParameters to atom
Browse files Browse the repository at this point in the history
  • Loading branch information
jihea-park committed Feb 20, 2025
1 parent dc58c9b commit a2e7b81
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 3 deletions.
1 change: 1 addition & 0 deletions web-frontend/src/main/v3/packages/ui/src/atoms/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export * from './globalSearch';
export * from './installationInfo';
export * from './openTelemetry';
export * from './scatter';
export * from './searchParameters';
export * from './serverMap';
export * from './toast';
export * from './transaction';
Expand Down
12 changes: 12 additions & 0 deletions web-frontend/src/main/v3/packages/ui/src/atoms/searchParameters.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { atom } from 'jotai';
import { ApplicationType } from '@pinpoint-fe/ui/src/constants';

export const searchParametersAtom = atom<{
application: ApplicationType;
searchParameters: {
[k: string]: string;
};
}>({
application: {} as ApplicationType,
searchParameters: {},
});
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ import { RxMagnifyingGlass } from 'react-icons/rx';
import { LuCommand } from 'react-icons/lu';
import { useLocalStorage } from '@pinpoint-fe/ui/src/hooks';
import { useAtom } from 'jotai';
import { globalSearchDisplayAtom } from '@pinpoint-fe/ui/src/atoms';
import { globalSearchDisplayAtom, searchParametersAtom } from '@pinpoint-fe/ui/src/atoms';
import { getApplicationTypeAndName } from '@pinpoint-fe/ui/src/utils';

export type SideNavigationMenuItem = MenuItem & {
aHref?: string;
Expand Down Expand Up @@ -60,9 +61,23 @@ export const LayoutWithSideNavigation = ({
topMenuItems,
bottomMenuItems,
}: LayoutWithSideNavigationProps) => {
const [, setSearchParameters] = useAtom(searchParametersAtom);
const [, setGlobalSearchOpen] = useAtom(globalSearchDisplayAtom);
const [collapsed] = useLocalStorage(APP_SETTING_KEYS.SIDE_NAV_BAR_SCALE, false);
const { pathname } = useLocation();
const { pathname, search } = useLocation();
const application = getApplicationTypeAndName(pathname);
const searchParameters = Object.fromEntries(new URLSearchParams(search));

React.useEffect(() => {
if (application && searchParameters) {
setSearchParameters({ application, searchParameters });
}
}, [
application?.applicationName,
application?.serviceType,
searchParameters?.to,
searchParameters?.from,
]);

const SubMenuItem = ({ item }: MenuItemProps) => {
const hoverRef = React.useRef<HTMLLIElement>(null);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
import { useLocation } from 'react-router-dom';
import { getApplicationTypeAndName } from '@pinpoint-fe/ui/src/utils';
import { useAtomValue } from 'jotai';
import { searchParametersAtom } from '@pinpoint-fe/ui/src/atoms';

export const useSearchParameters = () => {
const props = useLocation();
const atomSearchParameters = useAtomValue(searchParametersAtom);

const searchParameters = Object.fromEntries(new URLSearchParams(props.search));
const application = getApplicationTypeAndName(props.pathname);

return { ...props, searchParameters, application };
return {
...props,
searchParameters: application ? searchParameters : atomSearchParameters?.searchParameters,
application: application || atomSearchParameters?.application,
};
};

0 comments on commit a2e7b81

Please sign in to comment.