mirror of
https://github.com/khairul169/vaulterm.git
synced 2025-04-28 16:49:39 +07:00
39 lines
994 B
TypeScript
39 lines
994 B
TypeScript
import { router, useLocalSearchParams } from "expo-router";
|
|
import { useCallback, useMemo, useState } from "react";
|
|
|
|
export const useQueryParams = <T extends object>() => {
|
|
const params = useLocalSearchParams() as T;
|
|
const [history, setHistory] = useState<T[]>([params]);
|
|
|
|
const push = useCallback((params: T) => {
|
|
setHistory((prev) => [...prev, params]);
|
|
router.setParams(params);
|
|
}, []);
|
|
|
|
const replace = useCallback((params: T) => {
|
|
setHistory([params]);
|
|
router.setParams(params);
|
|
}, []);
|
|
|
|
const canGoBack = useMemo(() => history.length > 1, [history]);
|
|
|
|
const goBack = useCallback(() => {
|
|
if (!canGoBack) {
|
|
return false;
|
|
}
|
|
|
|
const historyList = [...history];
|
|
historyList.pop();
|
|
const prev = historyList[historyList.length - 1];
|
|
if (!prev) {
|
|
return false;
|
|
}
|
|
|
|
setHistory(historyList);
|
|
router.setParams(prev);
|
|
return true;
|
|
}, [history, canGoBack]);
|
|
|
|
return { params, replace, push, goBack, canGoBack };
|
|
};
|