diff --git a/web/src/pages/Archived.tsx b/web/src/pages/Archived.tsx
index 9872a0b09..4c2a6d619 100644
--- a/web/src/pages/Archived.tsx
+++ b/web/src/pages/Archived.tsx
@@ -13,7 +13,7 @@ import { DEFAULT_LIST_MEMOS_PAGE_SIZE } from "@/helpers/consts";
import { getTimeStampByDate } from "@/helpers/datetime";
import useCurrentUser from "@/hooks/useCurrentUser";
import useFilterWithUrlParams from "@/hooks/useFilterWithUrlParams";
-import { useMemoList, useMemoStore } from "@/store/v1";
+import { extractMemoIdFromName, useMemoList, useMemoStore } from "@/store/v1";
import { RowStatus } from "@/types/proto/api/v2/common";
import { Memo } from "@/types/proto/api/v2/memo_service";
import { useTranslate } from "@/utils/i18n";
@@ -65,7 +65,7 @@ const Archived = () => {
style: "danger",
dialogName: "delete-memo-dialog",
onConfirm: async () => {
- await memoStore.deleteMemo(memo.id);
+ await memoStore.deleteMemo(extractMemoIdFromName(memo.name));
},
});
};
@@ -74,7 +74,7 @@ const Archived = () => {
try {
await memoStore.updateMemo(
{
- id: memo.id,
+ name: memo.name,
rowStatus: RowStatus.ACTIVE,
},
["row_status"],
@@ -99,7 +99,7 @@ const Archived = () => {
{sortedMemos.map((memo) => (
@@ -121,7 +121,12 @@ const Archived = () => {
-
+
))}
{isRequesting ? (
diff --git a/web/src/pages/Explore.tsx b/web/src/pages/Explore.tsx
index 57558bf74..fa6d313c8 100644
--- a/web/src/pages/Explore.tsx
+++ b/web/src/pages/Explore.tsx
@@ -56,7 +56,7 @@ const Explore = () => {
{sortedMemos.map((memo) => (
-
+
))}
{isRequesting ? (
diff --git a/web/src/pages/Home.tsx b/web/src/pages/Home.tsx
index 3da432714..c7ad5983a 100644
--- a/web/src/pages/Home.tsx
+++ b/web/src/pages/Home.tsx
@@ -73,7 +73,7 @@ const Home = () => {
{sortedMemos.map((memo) => (
-
+
))}
{isRequesting ? (
diff --git a/web/src/pages/MemoDetail.tsx b/web/src/pages/MemoDetail.tsx
index b0a09f0ea..90bd6ea69 100644
--- a/web/src/pages/MemoDetail.tsx
+++ b/web/src/pages/MemoDetail.tsx
@@ -8,7 +8,7 @@ import MemoView from "@/components/MemoView";
import MobileHeader from "@/components/MobileHeader";
import useCurrentUser from "@/hooks/useCurrentUser";
import useNavigateTo from "@/hooks/useNavigateTo";
-import { useMemoStore } from "@/store/v1";
+import { extractMemoIdFromName, useMemoStore } from "@/store/v1";
import { MemoRelation_Type } from "@/types/proto/api/v2/memo_relation_service";
import { Memo } from "@/types/proto/api/v2/memo_service";
import { useTranslate } from "@/utils/i18n";
@@ -23,13 +23,15 @@ const MemoDetail = () => {
const memo = memoStore.getMemoByName(memoName || "");
const [parentMemo, setParentMemo] = useState(undefined);
const commentRelations =
- memo?.relations.filter((relation) => relation.relatedMemoId === memo?.id && relation.type === MemoRelation_Type.COMMENT) || [];
+ memo?.relations.filter(
+ (relation) => relation.relatedMemoId === extractMemoIdFromName(memo.name) && relation.type === MemoRelation_Type.COMMENT,
+ ) || [];
const comments = commentRelations.map((relation) => memoStore.getMemoById(relation.memoId)).filter((memo) => memo) as any as Memo[];
// Prepare memo.
useEffect(() => {
if (memoName) {
- memoStore.getOrFetchMemoByName(memoName).catch((error: ClientError) => {
+ memoStore.searchMemos(`resource_name == "${memoName}"`).catch((error: ClientError) => {
toast.error(error.details);
navigateTo("/403");
});
@@ -62,7 +64,7 @@ const MemoDetail = () => {
const handleCommentCreated = async (commentId: number) => {
await memoStore.getOrFetchMemoById(commentId);
- await memoStore.getOrFetchMemoById(memo.id, { skipCache: true });
+ await memoStore.getOrFetchMemoById(extractMemoIdFromName(memo.name), { skipCache: true });
};
return (
@@ -82,7 +84,7 @@ const MemoDetail = () => {
)}
{
({comments.length})
{comments.map((comment) => (
-
+
))}
>
)}
{/* Only show comment editor when user login */}
{currentUser && (
-
+
)}
diff --git a/web/src/pages/Resources.tsx b/web/src/pages/Resources.tsx
index 36e53e7aa..2b051a901 100644
--- a/web/src/pages/Resources.tsx
+++ b/web/src/pages/Resources.tsx
@@ -10,7 +10,7 @@ import ResourceIcon from "@/components/ResourceIcon";
import { resourceServiceClient } from "@/grpcweb";
import useLoading from "@/hooks/useLoading";
import i18n from "@/i18n";
-import { useMemoStore } from "@/store/v1";
+import { extractMemoIdFromName, useMemoStore } from "@/store/v1";
import { Resource } from "@/types/proto/api/v2/resource_service";
import { useTranslate } from "@/utils/i18n";
@@ -133,7 +133,7 @@ const Resources = () => {
to={`/m/${relatedMemo.name}`}
target="_blank"
>
- #{relatedMemo.id}
+ #{extractMemoIdFromName(relatedMemo.name)}
)}
diff --git a/web/src/pages/Timeline.tsx b/web/src/pages/Timeline.tsx
index 03c9d4d1d..4d905759a 100644
--- a/web/src/pages/Timeline.tsx
+++ b/web/src/pages/Timeline.tsx
@@ -164,7 +164,7 @@ const Timeline = () => {
{group.memos.map((memo, index) => (
diff --git a/web/src/pages/UserProfile.tsx b/web/src/pages/UserProfile.tsx
index 028d8cecc..8faa91839 100644
--- a/web/src/pages/UserProfile.tsx
+++ b/web/src/pages/UserProfile.tsx
@@ -132,7 +132,7 @@ const UserProfile = () => {
{sortedMemos.map((memo) => (
-
+
))}
{isRequesting ? (
diff --git a/web/src/store/v1/memo.ts b/web/src/store/v1/memo.ts
index bbbdfad56..274a21244 100644
--- a/web/src/store/v1/memo.ts
+++ b/web/src/store/v1/memo.ts
@@ -2,6 +2,7 @@ import { create } from "zustand";
import { combine } from "zustand/middleware";
import { memoServiceClient } from "@/grpcweb";
import { CreateMemoRequest, ListMemosRequest, Memo } from "@/types/proto/api/v2/memo_service";
+import { MemoNamePrefix, extractMemoIdFromName } from ".";
interface State {
memoMapById: Record;
@@ -19,7 +20,8 @@ export const useMemoStore = create(
const { memos, nextPageToken } = await memoServiceClient.listMemos(request);
const memoMap = get().memoMapById;
for (const memo of memos) {
- memoMap[memo.id] = memo;
+ const id = extractMemoIdFromName(memo.name);
+ memoMap[id] = memo;
}
set({ memoMapById: memoMap });
return { memos, nextPageToken };
@@ -32,7 +34,7 @@ export const useMemoStore = create(
}
const res = await memoServiceClient.getMemo({
- id,
+ name: `${MemoNamePrefix}${id}`,
});
if (!res.memo) {
throw new Error("Memo not found");
@@ -47,27 +49,21 @@ export const useMemoStore = create(
getMemoById: (id: number) => {
return get().memoMapById[id];
},
- getOrFetchMemoByName: async (name: string) => {
- const memoMap = get().memoMapById;
- const memo = Object.values(memoMap).find((memo) => memo.name === name);
- if (memo) {
- return memo;
- }
-
- const res = await memoServiceClient.getMemoByName({
- name,
+ searchMemos: async (filter: string) => {
+ const { memos } = await memoServiceClient.searchMemos({
+ filter,
});
- if (!res.memo) {
- throw new Error("Memo not found");
+ const memoMap = get().memoMapById;
+ for (const memo of memos) {
+ const id = extractMemoIdFromName(memo.name);
+ memoMap[id] = memo;
}
-
- memoMap[res.memo.id] = res.memo;
set({ memoMapById: memoMap });
- return res.memo;
+ return memos;
},
getMemoByName: (name: string) => {
const memoMap = get().memoMapById;
- return Object.values(memoMap).find((memo) => memo.name === name);
+ return Object.values(memoMap).find((memo) => memo.resourceId === name);
},
createMemo: async (request: CreateMemoRequest) => {
const { memo } = await memoServiceClient.createMemo(request);
@@ -76,7 +72,8 @@ export const useMemoStore = create(
}
const memoMap = get().memoMapById;
- memoMap[memo.id] = memo;
+ const id = extractMemoIdFromName(memo.name);
+ memoMap[id] = memo;
set({ memoMapById: memoMap });
return memo;
},
@@ -90,13 +87,14 @@ export const useMemoStore = create(
}
const memoMap = get().memoMapById;
- memoMap[memo.id] = memo;
+ const id = extractMemoIdFromName(memo.name);
+ memoMap[id] = memo;
set({ memoMapById: memoMap });
return memo;
},
deleteMemo: async (id: number) => {
await memoServiceClient.deleteMemo({
- id: id,
+ name: `${MemoNamePrefix}${id}`,
});
const memoMap = get().memoMapById;
diff --git a/web/src/store/v1/resourceName.ts b/web/src/store/v1/resourceName.ts
index 4f8813613..9bc468409 100644
--- a/web/src/store/v1/resourceName.ts
+++ b/web/src/store/v1/resourceName.ts
@@ -1,3 +1,7 @@
export const WorkspaceSettingPrefix = "settings/";
export const UserNamePrefix = "users/";
export const MemoNamePrefix = "memos/";
+
+export const extractMemoIdFromName = (name: string) => {
+ return parseInt(name.split(MemoNamePrefix).pop() || "", 10);
+};