mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-01-15 05:33:29 +01:00

39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import { useCallback, useMemo } from 'react';
|
|
import { useSearchParams } from 'react-router-dom';
|
|
import { useEnvironments } from './useEnvironments';
|
|
|
|
export function useActiveEnvironment() {
|
|
const [id, setId] = useActiveEnvironmentId();
|
|
const environments = useEnvironments();
|
|
const environment = useMemo(
|
|
() => environments.find((w) => w.id === id) ?? null,
|
|
[environments, id],
|
|
);
|
|
return [environment, setId] as const;
|
|
}
|
|
|
|
export const QUERY_ENVIRONMENT_ID = 'environment_id';
|
|
|
|
function useActiveEnvironmentId() {
|
|
// NOTE: This query param is accessed from Rust side, so do not change
|
|
const [params, setParams] = useSearchParams();
|
|
const id = params.get(QUERY_ENVIRONMENT_ID);
|
|
|
|
const setId = useCallback(
|
|
(id: string | null) => {
|
|
setParams((p) => {
|
|
const existing = Object.fromEntries(p);
|
|
if (id == null) {
|
|
delete existing[QUERY_ENVIRONMENT_ID];
|
|
} else {
|
|
existing[QUERY_ENVIRONMENT_ID] = id;
|
|
}
|
|
return existing;
|
|
});
|
|
},
|
|
[setParams],
|
|
);
|
|
|
|
return [id, setId] as const;
|
|
}
|