Files
spacedrive/interface/hooks/useRedirectToNewLocation.ts
Oscar Beaumont c32e60927b [ENG-1400] Normalised caching (#1734)
* prototype

* `.normalise` helper + only `String` keys

* implement it for 'search.paths'

* redux devtools

* fix

* refactor backend

* wip: upgrade to rspc fork

* mega cursed

* Upgrade Specta-related stuff

* Upgrade Typescript

* Cache debug page

* bruh

* Fix optimistic library setting

* Cache clearing

* better timeout

* Fix tags page

* bit of cleanup

---------

Co-authored-by: Brendan Allan <brendonovich@outlook.com>
2023-12-05 13:16:03 +00:00

37 lines
1.1 KiB
TypeScript

import { useNavigate } from 'react-router';
import { useLibraryQuery } from '@sd/client';
import { getExplorerStore, useExplorerStore } from '~/app/$libraryId/Explorer/store';
import { LibraryIdParamsSchema } from '../app/route-schemas';
import { useZodRouteParams } from './useZodRouteParams';
/**
* When a user adds a location and checks the should redirect box,
* this hook will redirect them to the location
* once the indexer has been invoked
*/
export const useRedirectToNewLocation = () => {
const navigate = useNavigate();
const { libraryId } = useZodRouteParams(LibraryIdParamsSchema);
const { newLocationToRedirect: newLocation } = useExplorerStore();
const { data: jobGroups } = useLibraryQuery(['jobs.reports'], {
enabled: newLocation != null,
refetchOnWindowFocus: false
});
const hasIndexerJob = jobGroups
?.flatMap((j) => j.jobs)
.some(
(j) =>
j.name === 'indexer' &&
(j.metadata as any)?.location.id === newLocation &&
(j.completed_task_count > 0 || j.completed_at != null)
);
if (hasIndexerJob) {
navigate(`/${libraryId}/location/${newLocation}`);
getExplorerStore().newLocationToRedirect = null;
}
};