You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
memos/web/src/services/memoService.ts

141 lines
3.2 KiB
TypeScript

4 years ago
import api from "../helpers/api";
import { TAG_REG } from "../helpers/consts";
import utils from "../helpers/utils";
import { patchMemo, setMemos, setTags } from "../store/modules/memo";
import store from "../store";
4 years ago
import userService from "./userService";
const convertResponseModelMemo = (memo: Memo): Memo => {
return {
...memo,
createdTs: memo.createdTs * 1000,
updatedTs: memo.updatedTs * 1000,
};
};
4 years ago
const memoService = {
getState: () => {
return store.getState().memo;
},
4 years ago
fetchAllMemos: async () => {
4 years ago
if (!userService.getState().user) {
return false;
}
const data = await api.getMyMemos();
const memos: Memo[] = data.filter((m) => m.rowStatus !== "ARCHIVED").map((m) => convertResponseModelMemo(m));
store.dispatch(setMemos(memos));
4 years ago
return memos;
},
4 years ago
fetchDeletedMemos: async () => {
4 years ago
if (!userService.getState().user) {
return false;
}
const data = await api.getMyArchivedMemos();
const deletedMemos: Memo[] = data.map((m) => {
return convertResponseModelMemo(m);
});
return deletedMemos;
},
4 years ago
pushMemo: (memo: Memo) => {
store.dispatch(setMemos(memoService.getState().memos.concat(memo)));
},
getMemoById: (id: MemoId) => {
for (const m of memoService.getState().memos) {
4 years ago
if (m.id === id) {
return m;
}
}
return null;
},
4 years ago
archiveMemoById: async (id: MemoId) => {
const memo = memoService.getMemoById(id);
if (!memo) {
return;
}
4 years ago
await api.archiveMemo(id);
store.dispatch(
patchMemo({
...memo,
rowStatus: "ARCHIVED",
})
);
},
restoreMemoById: async (id: MemoId) => {
4 years ago
await api.restoreMemo(id);
memoService.clearMemos();
memoService.fetchAllMemos();
},
4 years ago
deleteMemoById: async (id: MemoId) => {
4 years ago
await api.deleteMemo(id);
},
4 years ago
editMemo: (memo: Memo) => {
store.dispatch(patchMemo(memo));
},
4 years ago
updateTagsState: () => {
const { memos } = memoService.getState();
4 years ago
const tagsSet = new Set<string>();
for (const m of memos) {
for (const t of Array.from(m.content.match(TAG_REG) ?? [])) {
tagsSet.add(t.replace(TAG_REG, "$1").trim());
}
}
store.dispatch(setTags(Array.from(tagsSet).filter((t) => Boolean(t))));
},
clearMemos: () => {
store.dispatch(setMemos([]));
},
4 years ago
getLinkedMemos: async (memoId: MemoId): Promise<Memo[]> => {
const { memos } = memoService.getState();
return memos.filter((m) => m.content.includes(`${memoId}`));
},
createMemo: async (content: string): Promise<Memo> => {
const memo = await api.createMemo({
content,
});
return convertResponseModelMemo(memo);
},
4 years ago
updateMemo: async (memoId: MemoId, content: string): Promise<Memo> => {
const memo = await api.patchMemo({
id: memoId,
content,
});
return convertResponseModelMemo(memo);
},
pinMemo: async (memoId: MemoId) => {
await api.pinMemo(memoId);
},
unpinMemo: async (memoId: MemoId) => {
await api.unpinMemo(memoId);
},
3 years ago
importMemo: async (content: string, createdTs: TimeStamp) => {
await api.createMemo({
content,
3 years ago
createdTs: Math.floor(utils.getTimeStampByDate(createdTs) / 1000),
});
},
};
4 years ago
export default memoService;