@nlabs/gothamjs
Version:
Platform
44 lines (43 loc) • 4.69 kB
JavaScript
/**
* Copyright (c) 2018-Present, Nitrogen Labs, Inc.
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
*/ import { qs } from '@nlabs/utils';
import { useMemo } from 'react';
import { useLocation, useMatches, useNavigation, useParams } from 'react-router';
export const useRoute = ()=>{
const navigation = useNavigation();
const location = useLocation() || {};
const urlParams = useParams();
const matches = useMatches();
return useMemo(()=>({
location,
matches,
navigation,
params: {
...location.state || {},
...urlParams,
...qs.parse(location.search, {
ignoreQueryPrefix: true
})
}
}), [
navigation,
location,
matches,
urlParams
]);
};
export const parseNavUrl = (path, params)=>path.split('/').reduce((list, part)=>{
if (part?.substring(0, 1) === ':') {
const value = params[part.substring(1)];
return [
...list,
value !== undefined ? value : part
];
}
return [
...list,
part
];
}, []).join('/');
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy91dGlscy92aWV3VXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cXN9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge3VzZU1lbW99IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7TG9jYXRpb24sIE5hdmlnYXRpb24sIHVzZUxvY2F0aW9uLCB1c2VNYXRjaGVzLCB1c2VOYXZpZ2F0aW9uLCB1c2VQYXJhbXN9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwUm91dGVyIHtcbiAgcmVhZG9ubHkgbG9jYXRpb246IExvY2F0aW9uO1xuICByZWFkb25seSBtYXRjaGVzOiB1bmtub3duW107XG4gIHJlYWRvbmx5IG5hdmlnYXRpb246IE5hdmlnYXRpb247XG4gIHJlYWRvbmx5IHBhcmFtczogdW5rbm93bjtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVJvdXRlID0gKCk6IEFwcFJvdXRlciA9PiB7XG4gIGNvbnN0IG5hdmlnYXRpb24gPSB1c2VOYXZpZ2F0aW9uKCk7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKSB8fCB7fSBhcyB1bmtub3duIGFzIExvY2F0aW9uO1xuICBjb25zdCB1cmxQYXJhbXMgPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgbWF0Y2hlcyA9IHVzZU1hdGNoZXMoKTtcblxuICByZXR1cm4gdXNlTWVtbygoKSA9PiAoe1xuICAgIGxvY2F0aW9uLFxuICAgIG1hdGNoZXMsXG4gICAgbmF2aWdhdGlvbixcbiAgICBwYXJhbXM6IHtcbiAgICAgIC4uLihsb2NhdGlvbi5zdGF0ZSB8fCB7fSksXG4gICAgICAuLi51cmxQYXJhbXMsXG4gICAgICAuLi5xcy5wYXJzZShsb2NhdGlvbi5zZWFyY2gsIHtpZ25vcmVRdWVyeVByZWZpeDogdHJ1ZX0pXG4gICAgfVxuICB9KSwgW25hdmlnYXRpb24sIGxvY2F0aW9uLCBtYXRjaGVzLCB1cmxQYXJhbXNdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZU5hdlVybCA9IChwYXRoOiBzdHJpbmcsIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgPT4gcGF0aFxuICAuc3BsaXQoJy8nKVxuICAucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgcGFydDogc3RyaW5nKSA9PiB7XG4gICAgaWYocGFydD8uc3Vic3RyaW5nKDAsIDEpID09PSAnOicpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW3BhcnQuc3Vic3RyaW5nKDEpXTtcbiAgICAgIHJldHVybiBbLi4ubGlzdCwgdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogcGFydF0gYXMgc3RyaW5nW107XG4gICAgfVxuXG4gICAgcmV0dXJuIFsuLi5saXN0LCBwYXJ0XTtcbiAgfSwgW10pLmpvaW4oJy8nKTtcbiJdLCJuYW1lcyI6WyJxcyIsInVzZU1lbW8iLCJ1c2VMb2NhdGlvbiIsInVzZU1hdGNoZXMiLCJ1c2VOYXZpZ2F0aW9uIiwidXNlUGFyYW1zIiwidXNlUm91dGUiLCJuYXZpZ2F0aW9uIiwibG9jYXRpb24iLCJ1cmxQYXJhbXMiLCJtYXRjaGVzIiwicGFyYW1zIiwic3RhdGUiLCJwYXJzZSIsInNlYXJjaCIsImlnbm9yZVF1ZXJ5UHJlZml4IiwicGFyc2VOYXZVcmwiLCJwYXRoIiwic3BsaXQiLCJyZWR1Y2UiLCJsaXN0IiwicGFydCIsInN1YnN0cmluZyIsInZhbHVlIiwidW5kZWZpbmVkIiwiam9pbiJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsRUFBRSxRQUFPLGVBQWU7QUFDaEMsU0FBUUMsT0FBTyxRQUFPLFFBQVE7QUFDOUIsU0FBOEJDLFdBQVcsRUFBRUMsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsUUFBTyxlQUFlO0FBU3JHLE9BQU8sTUFBTUMsV0FBVztJQUN0QixNQUFNQyxhQUFhSDtJQUNuQixNQUFNSSxXQUFXTixpQkFBaUIsQ0FBQztJQUNuQyxNQUFNTyxZQUFZSjtJQUNsQixNQUFNSyxVQUFVUDtJQUVoQixPQUFPRixRQUFRLElBQU8sQ0FBQTtZQUNwQk87WUFDQUU7WUFDQUg7WUFDQUksUUFBUTtnQkFDTixHQUFJSCxTQUFTSSxLQUFLLElBQUksQ0FBQyxDQUFDO2dCQUN4QixHQUFHSCxTQUFTO2dCQUNaLEdBQUdULEdBQUdhLEtBQUssQ0FBQ0wsU0FBU00sTUFBTSxFQUFFO29CQUFDQyxtQkFBbUI7Z0JBQUksRUFBRTtZQUN6RDtRQUNGLENBQUEsR0FBSTtRQUFDUjtRQUFZQztRQUFVRTtRQUFTRDtLQUFVO0FBQ2hELEVBQUU7QUFFRixPQUFPLE1BQU1PLGNBQWMsQ0FBQ0MsTUFBY04sU0FBNENNLEtBQ25GQyxLQUFLLENBQUMsS0FDTkMsTUFBTSxDQUFDLENBQUNDLE1BQWdCQztRQUN2QixJQUFHQSxNQUFNQyxVQUFVLEdBQUcsT0FBTyxLQUFLO1lBQ2hDLE1BQU1DLFFBQVFaLE1BQU0sQ0FBQ1UsS0FBS0MsU0FBUyxDQUFDLEdBQUc7WUFDdkMsT0FBTzttQkFBSUY7Z0JBQU1HLFVBQVVDLFlBQVlELFFBQVFGO2FBQUs7UUFDdEQ7UUFFQSxPQUFPO2VBQUlEO1lBQU1DO1NBQUs7SUFDeEIsR0FBRyxFQUFFLEVBQUVJLElBQUksQ0FBQyxLQUFLIn0=