mirror of https://github.com/usememos/memos.git
118 lines
2.4 KiB
TypeScript
118 lines
2.4 KiB
TypeScript
import { stringify } from "qs";
|
|
import store from "../store";
|
|
import { setQuery, setPathname, Query, updateStateWithLocation } from "../store/modules/location";
|
|
|
|
const updateLocationUrl = (method: "replace" | "push" = "replace") => {
|
|
const { query, pathname, hash } = store.getState().location;
|
|
let queryString = stringify(query);
|
|
if (queryString) {
|
|
queryString = "?" + queryString;
|
|
} else {
|
|
queryString = "";
|
|
}
|
|
|
|
if (method === "replace") {
|
|
window.history.replaceState(null, "", pathname + hash + queryString);
|
|
} else {
|
|
window.history.pushState(null, "", pathname + hash + queryString);
|
|
}
|
|
};
|
|
|
|
const locationService = {
|
|
getState: () => {
|
|
return store.getState().location;
|
|
},
|
|
|
|
updateStateWithLocation: () => {
|
|
store.dispatch(updateStateWithLocation());
|
|
},
|
|
|
|
setPathname: (pathname: string) => {
|
|
store.dispatch(setPathname(pathname));
|
|
updateLocationUrl();
|
|
},
|
|
|
|
pushHistory: (pathname: string) => {
|
|
store.dispatch(setPathname(pathname));
|
|
updateLocationUrl("push");
|
|
},
|
|
|
|
replaceHistory: (pathname: string) => {
|
|
store.dispatch(setPathname(pathname));
|
|
updateLocationUrl("replace");
|
|
},
|
|
|
|
setQuery: (query: Query) => {
|
|
store.dispatch(setQuery(query));
|
|
updateLocationUrl();
|
|
},
|
|
|
|
clearQuery: () => {
|
|
store.dispatch(
|
|
setQuery({
|
|
tag: undefined,
|
|
type: undefined,
|
|
duration: undefined,
|
|
text: undefined,
|
|
shortcutId: undefined,
|
|
})
|
|
);
|
|
updateLocationUrl();
|
|
},
|
|
|
|
setMemoTypeQuery: (type?: MemoSpecType) => {
|
|
store.dispatch(
|
|
setQuery({
|
|
type: type,
|
|
})
|
|
);
|
|
updateLocationUrl();
|
|
},
|
|
|
|
setMemoShortcut: (shortcutId?: ShortcutId) => {
|
|
store.dispatch(
|
|
setQuery({
|
|
shortcutId: shortcutId,
|
|
})
|
|
);
|
|
updateLocationUrl();
|
|
},
|
|
|
|
setTextQuery: (text?: string) => {
|
|
store.dispatch(
|
|
setQuery({
|
|
text: text,
|
|
})
|
|
);
|
|
updateLocationUrl();
|
|
},
|
|
|
|
setTagQuery: (tag?: string) => {
|
|
store.dispatch(
|
|
setQuery({
|
|
tag: tag,
|
|
})
|
|
);
|
|
updateLocationUrl();
|
|
},
|
|
|
|
setFromAndToQuery: (from?: number, to?: number) => {
|
|
let duration = undefined;
|
|
if (from && to && from < to) {
|
|
duration = {
|
|
from,
|
|
to,
|
|
};
|
|
}
|
|
|
|
store.dispatch(
|
|
setQuery({
|
|
duration,
|
|
})
|
|
);
|
|
updateLocationUrl();
|
|
},
|
|
};
|
|
|
|
export default locationService;
|