chore: remove v1 prefix in store name

pull/2658/head^2
Steven 1 year ago
parent df3303dcd3
commit df5aeb6d88

@ -6,14 +6,14 @@ import storage from "./helpers/storage";
import { getSystemColorScheme } from "./helpers/utils";
import useNavigateTo from "./hooks/useNavigateTo";
import { useGlobalStore } from "./store/module";
import { useUserV1Store } from "./store/v1";
import { useUserStore } from "./store/v1";
const App = () => {
const { i18n } = useTranslation();
const navigateTo = useNavigateTo();
const { mode, setMode } = useColorScheme();
const globalStore = useGlobalStore();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const [loading, setLoading] = useState(true);
const { appearance, locale, systemStatus } = globalStore.state;
@ -27,7 +27,7 @@ const App = () => {
useEffect(() => {
const initialState = async () => {
try {
await userV1Store.fetchCurrentUser();
await userStore.fetchCurrentUser();
} catch (error) {
// Do nothing.
}

@ -1,6 +1,6 @@
import { useEffect, useState } from "react";
import { toast } from "react-hot-toast";
import { useUserV1Store } from "@/store/v1";
import { useUserStore } from "@/store/v1";
import { User } from "@/types/proto/api/v2/user_service";
import { useTranslate } from "@/utils/i18n";
import { generateDialog } from "./Dialog";
@ -13,7 +13,7 @@ interface Props extends DialogProps {
const ChangeMemberPasswordDialog: React.FC<Props> = (props: Props) => {
const { user, destroy } = props;
const t = useTranslate();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const [newPassword, setNewPassword] = useState("");
const [newPasswordAgain, setNewPasswordAgain] = useState("");
@ -48,7 +48,7 @@ const ChangeMemberPasswordDialog: React.FC<Props> = (props: Props) => {
}
try {
await userV1Store.updateUser(
await userStore.updateUser(
{
name: user.name,
password: newPassword,

@ -2,7 +2,7 @@ import { Button } from "@mui/joy";
import { useEffect, useState } from "react";
import { toast } from "react-hot-toast";
import { getNormalizedTimeString, getUnixTime } from "@/helpers/datetime";
import { useMemoV1Store } from "@/store/v1";
import { useMemoStore } from "@/store/v1";
import { useTranslate } from "@/utils/i18n";
import { generateDialog } from "./Dialog";
import Icon from "./Icon";
@ -14,7 +14,7 @@ interface Props extends DialogProps {
const ChangeMemoCreatedTsDialog: React.FC<Props> = (props: Props) => {
const t = useTranslate();
const { destroy, memoId } = props;
const memoStore = useMemoV1Store();
const memoStore = useMemoStore();
const [createdAt, setCreatedAt] = useState("");
const maxDatetimeValue = getNormalizedTimeString();

@ -2,7 +2,7 @@ import { useEffect, useState } from "react";
import { toast } from "react-hot-toast";
import useCurrentUser from "@/hooks/useCurrentUser";
import { useGlobalStore } from "@/store/module";
import { useUserV1Store } from "@/store/v1";
import { useUserStore } from "@/store/v1";
import { useTranslate } from "@/utils/i18n";
import { generateDialog } from "./Dialog";
import Icon from "./Icon";
@ -12,7 +12,7 @@ type Props = DialogProps;
const ChangePasswordDialog: React.FC<Props> = ({ destroy }: Props) => {
const t = useTranslate();
const currentUser = useCurrentUser();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const globalStore = useGlobalStore();
const profile = globalStore.state.systemStatus.profile;
const [newPassword, setNewPassword] = useState("");
@ -52,7 +52,7 @@ const ChangePasswordDialog: React.FC<Props> = ({ destroy }: Props) => {
}
try {
await userV1Store.updateUser(
await userStore.updateUser(
{
name: currentUser.name,
password: newPassword,

@ -1,5 +1,5 @@
import { useEffect, useState } from "react";
import { useMemoV1Store } from "@/store/v1";
import { useMemoStore } from "@/store/v1";
import { MemoRelation, MemoRelation_Type } from "@/types/proto/api/v2/memo_relation_service";
import { Memo } from "@/types/proto/api/v2/memo_service";
import Icon from "../Icon";
@ -11,7 +11,7 @@ interface Props {
const RelationListView = (props: Props) => {
const { relationList, setRelationList } = props;
const memoStore = useMemoV1Store();
const memoStore = useMemoStore();
const [referencingMemoList, setReferencingMemoList] = useState<Memo[]>([]);
useEffect(() => {

@ -7,7 +7,7 @@ import useLocalStorage from "react-use/lib/useLocalStorage";
import { memoServiceClient } from "@/grpcweb";
import { TAB_SPACE_WIDTH, UNKNOWN_ID } from "@/helpers/consts";
import { useGlobalStore, useResourceStore } from "@/store/module";
import { useMemoV1Store, useUserV1Store } from "@/store/v1";
import { useMemoStore, useUserStore } from "@/store/v1";
import { MemoRelation, MemoRelation_Type } from "@/types/proto/api/v2/memo_relation_service";
import { Visibility } from "@/types/proto/api/v2/memo_service";
import { Resource } from "@/types/proto/api/v2/resource_service";
@ -49,8 +49,8 @@ const MemoEditor = (props: Props) => {
const {
state: { systemStatus },
} = useGlobalStore();
const userV1Store = useUserV1Store();
const memoStore = useMemoV1Store();
const userStore = useUserStore();
const memoStore = useMemoStore();
const resourceStore = useResourceStore();
const [state, setState] = useState<State>({
memoVisibility: Visibility.PRIVATE,
@ -61,7 +61,7 @@ const MemoEditor = (props: Props) => {
});
const [hasContent, setHasContent] = useState<boolean>(false);
const editorRef = useRef<EditorRefActions>(null);
const userSetting = userV1Store.userSetting as UserSetting;
const userSetting = userStore.userSetting as UserSetting;
const referenceRelations = memoId
? state.relationList.filter(
(relation) => relation.memoId === memoId && relation.relatedMemoId !== memoId && relation.type === MemoRelation_Type.REFERENCE

@ -1,7 +1,7 @@
import { Tooltip } from "@mui/joy";
import { useEffect, useState } from "react";
import { Link } from "react-router-dom";
import { useMemoV1Store } from "@/store/v1";
import { useMemoStore } from "@/store/v1";
import { MemoRelation } from "@/types/proto/api/v2/memo_relation_service";
import { Memo } from "@/types/proto/api/v2/memo_service";
import Icon from "./Icon";
@ -13,7 +13,7 @@ interface Props {
const MemoRelationListView = (props: Props) => {
const { memo, relationList } = props;
const memoStore = useMemoV1Store();
const memoStore = useMemoStore();
const [referencingMemoList, setReferencingMemoList] = useState<Memo[]>([]);
const [referencedMemoList, setReferencedMemoList] = useState<Memo[]>([]);

@ -8,7 +8,7 @@ import { getRelativeTimeString, getTimeStampByDate } from "@/helpers/datetime";
import useCurrentUser from "@/hooks/useCurrentUser";
import useNavigateTo from "@/hooks/useNavigateTo";
import { useFilterStore } from "@/store/module";
import { useUserV1Store, extractUsernameFromName, useMemoV1Store } from "@/store/v1";
import { useUserStore, extractUsernameFromName, useMemoStore } from "@/store/v1";
import { RowStatus } from "@/types/proto/api/v2/common";
import { MemoRelation_Type } from "@/types/proto/api/v2/memo_relation_service";
import { Memo, Visibility } from "@/types/proto/api/v2/memo_service";
@ -42,12 +42,12 @@ const MemoView: React.FC<Props> = (props: Props) => {
const navigateTo = useNavigateTo();
const { i18n } = useTranslation();
const filterStore = useFilterStore();
const memoStore = useMemoV1Store();
const userV1Store = useUserV1Store();
const memoStore = useMemoStore();
const userStore = useUserStore();
const user = useCurrentUser();
const [shouldRender, setShouldRender] = useState<boolean>(lazyRendering ? false : true);
const [displayTime, setDisplayTime] = useState<string>(getRelativeTimeString(getTimeStampByDate(memo.displayTime)));
const [creator, setCreator] = useState(userV1Store.getUserByUsername(extractUsernameFromName(memo.creator)));
const [creator, setCreator] = useState(userStore.getUserByUsername(extractUsernameFromName(memo.creator)));
const [parentMemo, setParentMemo] = useState<Memo | undefined>(undefined);
const memoContainerRef = useRef<HTMLDivElement>(null);
const referenceRelations = memo.relations.filter((relation) => relation.type === MemoRelation_Type.REFERENCE);
@ -58,7 +58,7 @@ const MemoView: React.FC<Props> = (props: Props) => {
if (creator) return;
(async () => {
const user = await userV1Store.getOrFetchUserByUsername(extractUsernameFromName(memo.creator));
const user = await userStore.getOrFetchUserByUsername(extractUsernameFromName(memo.creator));
setCreator(user);
})();
}, [memo.creator]);

@ -3,7 +3,7 @@ import React, { useEffect, useState } from "react";
import { toast } from "react-hot-toast";
import { userServiceClient } from "@/grpcweb";
import useCurrentUser from "@/hooks/useCurrentUser";
import { UserNamePrefix, extractUsernameFromName, useUserV1Store } from "@/store/v1";
import { UserNamePrefix, extractUsernameFromName, useUserStore } from "@/store/v1";
import { RowStatus } from "@/types/proto/api/v2/common";
import { User, User_Role } from "@/types/proto/api/v2/user_service";
import { useTranslate } from "@/utils/i18n";
@ -19,7 +19,7 @@ interface State {
const MemberSection = () => {
const t = useTranslate();
const currentUser = useCurrentUser();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const [state, setState] = useState<State>({
createUserUsername: "",
createUserPassword: "",
@ -31,7 +31,7 @@ const MemberSection = () => {
}, []);
const fetchUserList = async () => {
const users = await userV1Store.fetchUsers();
const users = await userStore.fetchUsers();
setUserList(users);
};
@ -114,7 +114,7 @@ const MemberSection = () => {
style: "danger",
dialogName: "delete-user-dialog",
onConfirm: async () => {
await userV1Store.deleteUser(user.name);
await userStore.deleteUser(user.name);
fetchUserList();
},
});

@ -3,7 +3,7 @@ import { useState } from "react";
import { toast } from "react-hot-toast";
import { Link } from "react-router-dom";
import { useGlobalStore } from "@/store/module";
import { useUserV1Store } from "@/store/v1";
import { useUserStore } from "@/store/v1";
import { Visibility } from "@/types/proto/api/v2/memo_service";
import { UserSetting } from "@/types/proto/api/v2/user_service";
import { useTranslate } from "@/utils/i18n";
@ -18,13 +18,13 @@ import "@/less/settings/preferences-section.less";
const PreferencesSection = () => {
const t = useTranslate();
const globalStore = useGlobalStore();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const { appearance, locale } = globalStore.state;
const setting = userV1Store.userSetting as UserSetting;
const setting = userStore.userSetting as UserSetting;
const [telegramUserId, setTelegramUserId] = useState<string>(setting.telegramUserId);
const handleLocaleSelectChange = async (locale: Locale) => {
await userV1Store.updateUserSetting(
await userStore.updateUserSetting(
{
locale,
},
@ -34,7 +34,7 @@ const PreferencesSection = () => {
};
const handleAppearanceSelectChange = async (appearance: Appearance) => {
await userV1Store.updateUserSetting(
await userStore.updateUserSetting(
{
appearance,
},
@ -44,7 +44,7 @@ const PreferencesSection = () => {
};
const handleDefaultMemoVisibilityChanged = async (value: string) => {
await userV1Store.updateUserSetting(
await userStore.updateUserSetting(
{
memoVisibility: value,
},
@ -54,7 +54,7 @@ const PreferencesSection = () => {
const handleSaveTelegramUserId = async () => {
try {
await userV1Store.updateUserSetting(
await userStore.updateUserSetting(
{
telegramUserId: telegramUserId,
},

@ -5,7 +5,7 @@ import { toast } from "react-hot-toast";
import { getDateTimeString, getTimeString } from "@/helpers/datetime";
import useLoading from "@/hooks/useLoading";
import toImage from "@/labs/html2image";
import { useUserV1Store, extractUsernameFromName } from "@/store/v1";
import { useUserStore, extractUsernameFromName } from "@/store/v1";
import { Memo } from "@/types/proto/api/v2/memo_service";
import { useTranslate } from "@/utils/i18n";
import { generateDialog } from "./Dialog";
@ -22,15 +22,15 @@ interface Props extends DialogProps {
const ShareMemoDialog: React.FC<Props> = (props: Props) => {
const { memo, destroy } = props;
const t = useTranslate();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const downloadingImageState = useLoading(false);
const loadingState = useLoading();
const memoElRef = useRef<HTMLDivElement>(null);
const user = userV1Store.getUserByUsername(extractUsernameFromName(memo.creator));
const user = userStore.getUserByUsername(extractUsernameFromName(memo.creator));
useEffect(() => {
(async () => {
await userV1Store.getOrFetchUserByUsername(extractUsernameFromName(memo.creator));
await userStore.getOrFetchUserByUsername(extractUsernameFromName(memo.creator));
loadingState.setFinish();
})();
}, []);

@ -3,7 +3,7 @@ import { useEffect, useState } from "react";
import { toast } from "react-hot-toast";
import { convertFileToBase64 } from "@/helpers/utils";
import useCurrentUser from "@/hooks/useCurrentUser";
import { UserNamePrefix, useUserV1Store } from "@/store/v1";
import { UserNamePrefix, useUserStore } from "@/store/v1";
import { User as UserPb } from "@/types/proto/api/v2/user_service";
import { useTranslate } from "@/utils/i18n";
import { generateDialog } from "./Dialog";
@ -22,7 +22,7 @@ interface State {
const UpdateAccountDialog: React.FC<Props> = ({ destroy }: Props) => {
const t = useTranslate();
const currentUser = useCurrentUser();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const [state, setState] = useState<State>({
avatarUrl: currentUser.avatarUrl,
username: currentUser.name.replace(UserNamePrefix, ""),
@ -108,7 +108,7 @@ const UpdateAccountDialog: React.FC<Props> = ({ destroy }: Props) => {
if (!isEqual(currentUser.email, state.email)) {
updateMask.push("email");
}
await userV1Store.updateUser(
await userStore.updateUser(
UserPb.fromPartial({
name: `${UserNamePrefix}${state.username}`,
id: currentUser.id,

@ -6,7 +6,7 @@ import * as utils from "@/helpers/utils";
import useCurrentUser from "@/hooks/useCurrentUser";
import useNavigateTo from "@/hooks/useNavigateTo";
import { useGlobalStore } from "@/store/module";
import { useUserV1Store, extractUsernameFromName, useMemoV1Store } from "@/store/v1";
import { useUserStore, extractUsernameFromName, useMemoStore } from "@/store/v1";
import { useTranslate, Translations } from "@/utils/i18n";
import "@/less/usage-heat-map.less";
@ -34,9 +34,9 @@ interface DailyUsageStat {
const UsageHeatMap = () => {
const t = useTranslate();
const navigateTo = useNavigateTo();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const user = useCurrentUser();
const memoStore = useMemoV1Store();
const memoStore = useMemoStore();
const todayTimeStamp = getDateStampByDate(Date.now());
const weekDay = new Date(todayTimeStamp).getDay();
const weekFromMonday = ["zh-Hans", "ko"].includes(useGlobalStore().state.locale);
@ -49,10 +49,10 @@ const UsageHeatMap = () => {
const [createdDays, setCreatedDays] = useState(0);
const [allStat, setAllStat] = useState<DailyUsageStat[]>(getInitialUsageStat(usedDaysAmount, beginDayTimestamp));
const containerElRef = useRef<HTMLDivElement>(null);
const memos = Array.from(memoStore.getState().memoById.values());
const memos = Object.values(memoStore.getState().memoMapById);
useEffect(() => {
userV1Store.getOrFetchUserByUsername(extractUsernameFromName(user.name)).then((user) => {
userStore.getOrFetchUserByUsername(extractUsernameFromName(user.name)).then((user) => {
if (!user) {
return;
}

@ -1,9 +1,9 @@
import { useUserV1Store } from "@/store/v1";
import { useUserStore } from "@/store/v1";
import { User } from "@/types/proto/api/v2/user_service";
const useCurrentUser = () => {
const userV1Store = useUserV1Store();
return userV1Store.currentUser as User;
const userStore = useUserStore();
return userStore.currentUser as User;
};
export default useCurrentUser;

@ -10,7 +10,7 @@ import { memoServiceClient } from "@/grpcweb";
import { getDateTimeString } from "@/helpers/datetime";
import useCurrentUser from "@/hooks/useCurrentUser";
import useLoading from "@/hooks/useLoading";
import { useMemoV1Store } from "@/store/v1";
import { 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";
@ -19,7 +19,7 @@ const Archived = () => {
const t = useTranslate();
const loadingState = useLoading();
const user = useCurrentUser();
const memoStore = useMemoV1Store();
const memoStore = useMemoStore();
const [archivedMemos, setArchivedMemos] = useState<Memo[]>([]);
useEffect(() => {

@ -6,7 +6,7 @@ import Icon from "@/components/Icon";
import * as api from "@/helpers/api";
import { absolutifyLink } from "@/helpers/utils";
import useNavigateTo from "@/hooks/useNavigateTo";
import { useUserV1Store } from "@/store/v1";
import { useUserStore } from "@/store/v1";
import { useTranslate } from "@/utils/i18n";
interface State {
@ -18,7 +18,7 @@ const AuthCallback = () => {
const t = useTranslate();
const navigateTo = useNavigateTo();
const [searchParams] = useSearchParams();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const [state, setState] = useState<State>({
loading: true,
errorMessage: "",
@ -40,7 +40,7 @@ const AuthCallback = () => {
errorMessage: "",
});
if (user) {
await userV1Store.fetchCurrentUser();
await userStore.fetchCurrentUser();
navigateTo("/");
} else {
toast.error(t("message.login-failed"));

@ -7,14 +7,14 @@ import { DEFAULT_MEMO_LIMIT } from "@/helpers/consts";
import { getTimeStampByDate } from "@/helpers/datetime";
import useCurrentUser from "@/hooks/useCurrentUser";
import { useFilterStore } from "@/store/module";
import { useMemoList, useMemoV1Store } from "@/store/v1";
import { useMemoList, useMemoStore } from "@/store/v1";
import { useTranslate } from "@/utils/i18n";
const Explore = () => {
const t = useTranslate();
const user = useCurrentUser();
const filterStore = useFilterStore();
const memoStore = useMemoV1Store();
const memoStore = useMemoStore();
const memoList = useMemoList();
const [isRequesting, setIsRequesting] = useState(true);
const [isComplete, setIsComplete] = useState(false);

@ -11,7 +11,7 @@ import { getTimeStampByDate } from "@/helpers/datetime";
import useCurrentUser from "@/hooks/useCurrentUser";
import useResponsiveWidth from "@/hooks/useResponsiveWidth";
import { useFilterStore } from "@/store/module";
import { useMemoList, useMemoV1Store } from "@/store/v1";
import { useMemoList, useMemoStore } from "@/store/v1";
import { useTranslate } from "@/utils/i18n";
const Home = () => {
@ -19,7 +19,7 @@ const Home = () => {
const { md } = useResponsiveWidth();
const user = useCurrentUser();
const filterStore = useFilterStore();
const memoStore = useMemoV1Store();
const memoStore = useMemoStore();
const memoList = useMemoList();
const [isRequesting, setIsRequesting] = useState(true);
const [isComplete, setIsComplete] = useState(false);

@ -18,7 +18,7 @@ import { UNKNOWN_ID } from "@/helpers/consts";
import { getDateTimeString } from "@/helpers/datetime";
import useCurrentUser from "@/hooks/useCurrentUser";
import useNavigateTo from "@/hooks/useNavigateTo";
import { useUserV1Store, useMemoV1Store, extractUsernameFromName } from "@/store/v1";
import { useUserStore, useMemoStore, extractUsernameFromName } from "@/store/v1";
import { MemoRelation_Type } from "@/types/proto/api/v2/memo_relation_service";
import { Memo, Visibility } from "@/types/proto/api/v2/memo_service";
import { User } from "@/types/proto/api/v2/user_service";
@ -30,8 +30,8 @@ const MemoDetail = () => {
const params = useParams();
const navigateTo = useNavigateTo();
const currentUser = useCurrentUser();
const memoStore = useMemoV1Store();
const userV1Store = useUserV1Store();
const memoStore = useMemoStore();
const userStore = useUserStore();
const [creator, setCreator] = useState<User>();
const memoId = Number(params.memoId);
const memo = memoStore.getMemoById(memoId);
@ -48,7 +48,7 @@ const MemoDetail = () => {
memoStore
.getOrFetchMemoById(memoId)
.then(async (memo) => {
const user = await userV1Store.getOrFetchUserByUsername(extractUsernameFromName(memo.creator));
const user = await userStore.getOrFetchUserByUsername(extractUsernameFromName(memo.creator));
setCreator(user);
})
.catch((error) => {

@ -9,14 +9,14 @@ import { absolutifyLink } from "@/helpers/utils";
import useLoading from "@/hooks/useLoading";
import useNavigateTo from "@/hooks/useNavigateTo";
import { useGlobalStore } from "@/store/module";
import { useUserV1Store } from "@/store/v1";
import { useUserStore } from "@/store/v1";
import { useTranslate } from "@/utils/i18n";
const SignIn = () => {
const t = useTranslate();
const navigateTo = useNavigateTo();
const globalStore = useGlobalStore();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const actionBtnLoadingState = useLoading(false);
const { appearance, locale, systemStatus } = globalStore.state;
const mode = systemStatus.profile.mode;
@ -77,7 +77,7 @@ const SignIn = () => {
actionBtnLoadingState.setLoading();
const { data: user } = await api.signin(username, password, remember);
if (user) {
await userV1Store.fetchCurrentUser();
await userStore.fetchCurrentUser();
navigateTo("/");
} else {
toast.error(t("message.login-failed"));

@ -8,14 +8,14 @@ import * as api from "@/helpers/api";
import useLoading from "@/hooks/useLoading";
import useNavigateTo from "@/hooks/useNavigateTo";
import { useGlobalStore } from "@/store/module";
import { useUserV1Store } from "@/store/v1";
import { useUserStore } from "@/store/v1";
import { useTranslate } from "@/utils/i18n";
const SignUp = () => {
const t = useTranslate();
const navigateTo = useNavigateTo();
const globalStore = useGlobalStore();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const actionBtnLoadingState = useLoading(false);
const { appearance, locale, systemStatus } = globalStore.state;
const [username, setUsername] = useState("");
@ -57,7 +57,7 @@ const SignUp = () => {
actionBtnLoadingState.setLoading();
const { data: user } = await api.signup(username, password);
if (user) {
await userV1Store.fetchCurrentUser();
await userStore.fetchCurrentUser();
navigateTo("/");
} else {
toast.error(t("message.signup-failed"));

@ -11,14 +11,14 @@ import DatePicker from "@/components/kit/DatePicker";
import { DAILY_TIMESTAMP } from "@/helpers/consts";
import { getDateStampByDate, getNormalizedDateString, getTimeStampByDate } from "@/helpers/datetime";
import useCurrentUser from "@/hooks/useCurrentUser";
import { useMemoList, useMemoV1Store } from "@/store/v1";
import { useMemoList, useMemoStore } from "@/store/v1";
import { useTranslate } from "@/utils/i18n";
const Timeline = () => {
const t = useTranslate();
const [searchParams, setSearchParams] = useSearchParams();
const user = useCurrentUser();
const memoStore = useMemoV1Store();
const memoStore = useMemoStore();
const memoList = useMemoList();
const currentDateStamp = getDateStampByDate(getNormalizedDateString()) as number;
const [selectedDateStamp, setSelectedDateStamp] = useState<number>(

@ -9,18 +9,18 @@ import { DEFAULT_MEMO_LIMIT } from "@/helpers/consts";
import { getTimeStampByDate } from "@/helpers/datetime";
import useLoading from "@/hooks/useLoading";
import { useFilterStore } from "@/store/module";
import { useMemoList, useMemoV1Store, useUserV1Store } from "@/store/v1";
import { useMemoList, useMemoStore, useUserStore } from "@/store/v1";
import { User } from "@/types/proto/api/v2/user_service";
import { useTranslate } from "@/utils/i18n";
const UserProfile = () => {
const t = useTranslate();
const params = useParams();
const userV1Store = useUserV1Store();
const userStore = useUserStore();
const loadingState = useLoading();
const [user, setUser] = useState<User>();
const filterStore = useFilterStore();
const memoStore = useMemoV1Store();
const memoStore = useMemoStore();
const memoList = useMemoList();
const [isRequesting, setIsRequesting] = useState(true);
const [isComplete, setIsComplete] = useState(false);
@ -35,7 +35,7 @@ const UserProfile = () => {
throw new Error("username is required");
}
userV1Store
userStore
.getOrFetchUserByUsername(username)
.then((user) => {
setUser(user);

@ -1,30 +1,34 @@
import { create } from "zustand";
import { combine } from "zustand/middleware";
import { inboxServiceClient } from "@/grpcweb";
import { Inbox } from "@/types/proto/api/v2/inbox_service";
interface InboxStore {
interface State {
inboxes: Inbox[];
fetchInboxes: () => Promise<Inbox[]>;
updateInbox: (inbox: Partial<Inbox>, updateMask: string[]) => Promise<Inbox>;
}
export const useInboxStore = create<InboxStore>()((set, get) => ({
const getDefaultState = (): State => ({
inboxes: [],
fetchInboxes: async () => {
const { inboxes } = await inboxServiceClient.listInboxes({});
set({ inboxes });
return inboxes;
},
updateInbox: async (inbox: Partial<Inbox>, updateMask: string[]) => {
const { inbox: updatedInbox } = await inboxServiceClient.updateInbox({
inbox,
updateMask,
});
if (!updatedInbox) {
throw new Error("Inbox not found");
}
const inboxes = get().inboxes;
set({ inboxes: inboxes.map((i) => (i.name === updatedInbox.name ? updatedInbox : i)) });
return updatedInbox;
},
}));
});
export const useInboxStore = create(
combine(getDefaultState(), (set, get) => ({
fetchInboxes: async () => {
const { inboxes } = await inboxServiceClient.listInboxes({});
set({ inboxes });
return inboxes;
},
updateInbox: async (inbox: Partial<Inbox>, updateMask: string[]) => {
const { inbox: updatedInbox } = await inboxServiceClient.updateInbox({
inbox,
updateMask,
});
if (!updatedInbox) {
throw new Error("Inbox not found");
}
const inboxes = get().inboxes;
set({ inboxes: inboxes.map((i) => (i.name === updatedInbox.name ? updatedInbox : i)) });
return updatedInbox;
},
}))
);

@ -1,29 +1,32 @@
import { cloneDeep } from "lodash-es";
import { create } from "zustand";
import { combine } from "zustand/middleware";
import { memoServiceClient } from "@/grpcweb";
import { CreateMemoRequest, ListMemosRequest, Memo } from "@/types/proto/api/v2/memo_service";
interface State {
memoById: Map<number, Memo>;
memoMapById: Record<number, Memo>;
}
export const useMemoV1Store = create(
combine({ memoById: new Map<number, Memo>() }, (set, get) => ({
const getDefaultState = (): State => ({
memoMapById: {},
});
export const useMemoStore = create(
combine(getDefaultState(), (set, get) => ({
setState: (state: State) => set(state),
getState: () => get(),
fetchMemos: async (request: Partial<ListMemosRequest>) => {
const { memos } = await memoServiceClient.listMemos(request);
set((state) => {
for (const memo of memos) {
state.memoById.set(memo.id, memo);
}
return cloneDeep(state);
});
const memoMap = get().memoMapById;
for (const memo of memos) {
memoMap[memo.id] = memo;
}
set({ memoMapById: memoMap });
return memos;
},
getOrFetchMemoById: async (id: number, options?: { skipCache?: boolean; skipStore?: boolean }) => {
const memo = get().memoById.get(id);
const memoMap = get().memoMapById;
const memo = memoMap[id];
if (memo && !options?.skipCache) {
return memo;
}
@ -36,15 +39,13 @@ export const useMemoV1Store = create(
}
if (!options?.skipStore) {
set((state) => {
state.memoById.set(id, res.memo as Memo);
return cloneDeep(state);
});
memoMap[id] = res.memo;
set({ memoMapById: memoMap });
}
return res.memo;
},
getMemoById: (id: number) => {
return get().memoById.get(id);
return get().memoMapById[id];
},
createMemo: async (request: CreateMemoRequest) => {
const { memo } = await memoServiceClient.createMemo(request);
@ -52,10 +53,9 @@ export const useMemoV1Store = create(
throw new Error("Memo not found");
}
set((state) => {
state.memoById.set(memo.id, memo);
return cloneDeep(state);
});
const memoMap = get().memoMapById;
memoMap[memo.id] = memo;
set({ memoMapById: memoMap });
return memo;
},
updateMemo: async (update: Partial<Memo>, updateMask: string[]) => {
@ -68,10 +68,9 @@ export const useMemoV1Store = create(
throw new Error("Memo not found");
}
set((state) => {
state.memoById.set(memo.id, memo);
return cloneDeep(state);
});
const memoMap = get().memoMapById;
memoMap[memo.id] = memo;
set({ memoMapById: memoMap });
return memo;
},
deleteMemo: async (id: number) => {
@ -79,24 +78,23 @@ export const useMemoV1Store = create(
id: id,
});
set((state) => {
state.memoById.delete(id);
return cloneDeep(state);
});
const memoMap = get().memoMapById;
delete memoMap[id];
set({ memoMapById: memoMap });
},
}))
);
export const useMemoList = () => {
const memoStore = useMemoV1Store();
const memos = Array.from(memoStore.getState().memoById.values());
const memoStore = useMemoStore();
const memos = Object.values(memoStore.getState().memoMapById);
const reset = () => {
memoStore.setState({ memoById: new Map<number, Memo>() });
memoStore.setState({ memoMapById: {} });
};
const size = () => {
return memoStore.getState().memoById.size;
return Object.keys(memoStore.getState().memoMapById).length;
};
return {

@ -27,7 +27,7 @@ const getDefaultUserSetting = () => {
// Request cache is used to prevent multiple requests.
const requestCache = new Map<string, Promise<any>>();
export const useUserV1Store = create(
export const useUserStore = create(
combine(getDefaultState(), (set, get) => ({
fetchUsers: async () => {
const { users } = await userServiceClient.listUsers({});

Loading…
Cancel
Save