45 lines
1.1 KiB
JavaScript
45 lines
1.1 KiB
JavaScript
import { addLang, getLangFromPath } from '../../common/app/utils/lang.js';
|
|
|
|
function addLangToLocation(location, lang) {
|
|
if (!location) {
|
|
return location;
|
|
}
|
|
if (typeof location === 'string') {
|
|
return addLang(location, lang);
|
|
}
|
|
return {
|
|
...location,
|
|
pathname: addLang(location.pathname, lang)
|
|
};
|
|
}
|
|
|
|
function getLangFromLocation(location) {
|
|
if (!location) {
|
|
return location;
|
|
}
|
|
if (typeof location === 'string') {
|
|
return getLangFromPath(location);
|
|
}
|
|
return getLangFromPath(location.pathname);
|
|
}
|
|
|
|
export default function useLangRoutes(createHistory, primaryLang) {
|
|
return (options = {}) => {
|
|
let lang = primaryLang || 'en';
|
|
const history = createHistory(options);
|
|
const unsubscribeFromHistory = history.listen(nextLocation => {
|
|
lang = getLangFromLocation(nextLocation);
|
|
});
|
|
const push = location => history.push(addLangToLocation(location, lang));
|
|
const replace = location => history.replace(
|
|
addLangToLocation(location, lang)
|
|
);
|
|
return {
|
|
...history,
|
|
push,
|
|
replace,
|
|
unsubscribe() { unsubscribeFromHistory(); }
|
|
};
|
|
};
|
|
}
|