@prefecthq/vue-compositions
Version:
A collection of reusable vue compositions.
35 lines • 1.42 kB
JavaScript
/* eslint-disable @typescript-eslint/unified-signatures */
import isEqual from 'lodash.isequal';
import { computed } from 'vue';
import { useRouteQuery } from '../useRouteQuery/useRouteQuery';
import { isRouteParamClass } from '../useRouteQueryParam/formats/RouteParam';
import { StringRouteParam } from '../useRouteQueryParam/formats/StringRouteParam';
import { asArray } from '../utilities/arrays';
function isDefaultValue(value) {
const [first] = asArray(value);
return !isRouteParamClass(first);
}
export function useRouteQueryParam(key, formatterOrDefaultValue, maybeDefaultValue) {
const isStringParamWithDefaultValue = isDefaultValue(formatterOrDefaultValue);
if (isStringParamWithDefaultValue) {
return useRouteQueryParam(key, StringRouteParam, formatterOrDefaultValue);
}
const { query } = useRouteQuery();
const multiple = Array.isArray(formatterOrDefaultValue);
const [formatter] = asArray(formatterOrDefaultValue);
const defaultValue = maybeDefaultValue;
const format = new formatter({ key, defaultValue, multiple });
return computed({
get(oldValue) {
const value = format.get(query);
if (isEqual(value, oldValue)) {
return oldValue;
}
return value;
},
set(value) {
format.set(query, value);
},
});
}
//# sourceMappingURL=useRouteQueryParam.js.map