Skip to content

Commit

Permalink
fix create param router
Browse files Browse the repository at this point in the history
  • Loading branch information
taronaleksanian committed Jan 6, 2025
1 parent b2cc019 commit 5c731f8
Showing 1 changed file with 50 additions and 41 deletions.
91 changes: 50 additions & 41 deletions packages/crosspath/src/adapters/tanstack/createParam.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,45 +3,54 @@ import {
useSearch,
} from '@tanstack/react-router';
import { useRouter } from './useRouter';
import { CreateParam, CreateParamOptions } from '../../model/types';

export const createParam: CreateParam = () => ({
useParam: (key, options) => {
const { initial, parse, stringify } = options || {};
const { push } = useRouter();
const screenParams = useTanstackParams({ strict: false }) as any;
const searchParams = useSearch({ strict: false }) as any;

const rawParam = screenParams[key] || searchParams[key] || initial;
const paramAsString = typeof rawParam === 'string' ? rawParam : '';
const parsedParam = parse ? parse(paramAsString) : rawParam;

const setParam = (value: any) => {
if (screenParams[key]) {
return console.error("You can't update screen params");
}
const stringifiedValue = stringify ? stringify(value) : value;
console.log('aaaa', { ...searchParams, [key]: stringifiedValue });

push({ query: { ...searchParams, [key]: stringifiedValue } });
};

return [parsedParam, setParam];
},
useParams: (key) => {
const { push } = useRouter();
const screenParams = useTanstackParams({ strict: false }) as any;
const searchParams = useSearch({ strict: false }) as any;
const params = { ...screenParams, ...searchParams };

const setParams = (value: any) => {
if (screenParams[key]) {
return console.error("You can't update screen params");
}

push({ query: { ...searchParams, [key]: value } });
};

return { params, setParams };
},
import type { CreateParam, CreateParamOptions } from '../../model';

export const createParam: CreateParam = <T>() => ({
useParam: useParam<T>,
useParams: useParams<T>,
});

const useParam = <T>(
key: keyof T,
options: CreateParamOptions,
): [value: any, setValue: (value: any) => void] => {
const { initial, parse, stringify } = options || {};
const { push } = useRouter();
const screenParams = useTanstackParams({ strict: false }) || {};
const searchParams = useSearch({ strict: false }) || {};

const param = screenParams[key] || searchParams[key] || initial;
const parsedParam = parse ? parse(param) : param;

const setParam = (value: any) => {
if (screenParams[key]) {
return console.error("You can't update screen params");
}
const stringifiedValue = stringify ? stringify(value) : value;
console.log('aaaa', { ...searchParams, [key]: stringifiedValue });

push({ query: { ...searchParams, [key]: stringifiedValue } });
};

return [parsedParam, setParam];
};

const useParams = <T>(): {
params: T;
setParams: (value: Partial<T>) => void;
} => {
const { push } = useRouter();
const screenParams = (useTanstackParams({ strict: false }) || {}) as T;
const searchParams = (useSearch({ strict: false }) || {}) as T;
const params = { ...screenParams, ...searchParams };

const setParams = (value: Partial<T>) => {
if (Object.keys(value).some((key) => !!screenParams[key])) {
return console.error("You can't update screen params");
}

push({ query: { ...searchParams, ...value } });
};

return { params, setParams };
};

0 comments on commit 5c731f8

Please sign in to comment.