chore: fix missing observer

This commit is contained in:
Johnny
2025-06-01 09:22:33 +08:00
parent fd99e10962
commit e6fe088ac0
19 changed files with 138 additions and 123 deletions

View File

@@ -1,5 +1,6 @@
import { Tooltip } from "@mui/joy"; import { Tooltip } from "@mui/joy";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { observer } from "mobx-react-lite";
import { memo, useMemo } from "react"; import { memo, useMemo } from "react";
import { workspaceStore } from "@/store/v2"; import { workspaceStore } from "@/store/v2";
import type { ActivityCalendarProps, CalendarDay } from "@/types/statistics"; import type { ActivityCalendarProps, CalendarDay } from "@/types/statistics";
@@ -67,7 +68,8 @@ const CalendarCell = memo(
CalendarCell.displayName = "CalendarCell"; CalendarCell.displayName = "CalendarCell";
export const ActivityCalendar = memo((props: ActivityCalendarProps) => { export const ActivityCalendar = memo(
observer((props: ActivityCalendarProps) => {
const t = useTranslate(); const t = useTranslate();
const { month: monthStr, data, onClick } = props; const { month: monthStr, data, onClick } = props;
const weekStartDayOffset = workspaceStore.state.generalSetting.weekStartDayOffset; const weekStartDayOffset = workspaceStore.state.generalSetting.weekStartDayOffset;
@@ -165,6 +167,7 @@ export const ActivityCalendar = memo((props: ActivityCalendarProps) => {
})} })}
</div> </div>
); );
}); }),
);
ActivityCalendar.displayName = "ActivityCalendar"; ActivityCalendar.displayName = "ActivityCalendar";

View File

@@ -1,3 +1,4 @@
import { observer } from "mobx-react-lite";
import { workspaceStore } from "@/store/v2"; import { workspaceStore } from "@/store/v2";
import { cn } from "@/utils"; import { cn } from "@/utils";
import UserAvatar from "./UserAvatar"; import UserAvatar from "./UserAvatar";
@@ -7,7 +8,7 @@ interface Props {
collapsed?: boolean; collapsed?: boolean;
} }
const BrandBanner = (props: Props) => { const BrandBanner = observer((props: Props) => {
const { collapsed } = props; const { collapsed } = props;
const workspaceGeneralSetting = workspaceStore.state.generalSetting; const workspaceGeneralSetting = workspaceStore.state.generalSetting;
const title = workspaceGeneralSetting.customProfile?.title || "Memos"; const title = workspaceGeneralSetting.customProfile?.title || "Memos";
@@ -21,6 +22,6 @@ const BrandBanner = (props: Props) => {
</div> </div>
</div> </div>
); );
}; });
export default BrandBanner; export default BrandBanner;

View File

@@ -16,8 +16,7 @@ import toast from "react-hot-toast";
import { useLocation } from "react-router-dom"; import { useLocation } from "react-router-dom";
import { markdownServiceClient } from "@/grpcweb"; import { markdownServiceClient } from "@/grpcweb";
import useNavigateTo from "@/hooks/useNavigateTo"; import useNavigateTo from "@/hooks/useNavigateTo";
import { memoStore } from "@/store/v2"; import { memoStore, userStore } from "@/store/v2";
import { userStore } from "@/store/v2";
import { State } from "@/types/proto/api/v1/common"; import { State } from "@/types/proto/api/v1/common";
import { NodeType } from "@/types/proto/api/v1/markdown_service"; import { NodeType } from "@/types/proto/api/v1/markdown_service";
import { Memo } from "@/types/proto/api/v1/memo_service"; import { Memo } from "@/types/proto/api/v1/memo_service";

View File

@@ -1,9 +1,10 @@
import { observer } from "mobx-react-lite";
import { useContext } from "react"; import { useContext } from "react";
import { useLocation } from "react-router-dom"; import { useLocation } from "react-router-dom";
import useNavigateTo from "@/hooks/useNavigateTo"; import useNavigateTo from "@/hooks/useNavigateTo";
import { Routes } from "@/router"; import { Routes } from "@/router";
import memoFilterStore, { MemoFilter } from "@/store/v2/memoFilter"; import { memoFilterStore } from "@/store/v2";
import { stringifyFilters } from "@/store/v2/memoFilter"; import { stringifyFilters, MemoFilter } from "@/store/v2/memoFilter";
import { cn } from "@/utils"; import { cn } from "@/utils";
import { RendererContext } from "./types"; import { RendererContext } from "./types";
@@ -11,7 +12,7 @@ interface Props {
content: string; content: string;
} }
const Tag: React.FC<Props> = ({ content }: Props) => { const Tag = observer(({ content }: Props) => {
const context = useContext(RendererContext); const context = useContext(RendererContext);
const location = useLocation(); const location = useLocation();
const navigateTo = useNavigateTo(); const navigateTo = useNavigateTo();
@@ -50,6 +51,6 @@ const Tag: React.FC<Props> = ({ content }: Props) => {
#{content} #{content}
</span> </span>
); );
}; });
export default Tag; export default Tag;

View File

@@ -1,12 +1,13 @@
import { isEqual } from "lodash-es"; import { isEqual } from "lodash-es";
import { CalendarIcon, CheckCircleIcon, CodeIcon, EyeIcon, HashIcon, LinkIcon, BookmarkIcon, SearchIcon, XIcon } from "lucide-react"; import { CalendarIcon, CheckCircleIcon, CodeIcon, EyeIcon, HashIcon, LinkIcon, BookmarkIcon, SearchIcon, XIcon } from "lucide-react";
import { observer } from "mobx-react-lite";
import { useEffect } from "react"; import { useEffect } from "react";
import { useSearchParams } from "react-router-dom"; import { useSearchParams } from "react-router-dom";
import memoFilterStore from "@/store/v2/memoFilter"; import { memoFilterStore } from "@/store/v2";
import { FilterFactor, getMemoFilterKey, MemoFilter, stringifyFilters } from "@/store/v2/memoFilter"; import { FilterFactor, getMemoFilterKey, MemoFilter, stringifyFilters } from "@/store/v2/memoFilter";
import { useTranslate } from "@/utils/i18n"; import { useTranslate } from "@/utils/i18n";
const MemoFilters = () => { const MemoFilters = observer(() => {
const t = useTranslate(); const t = useTranslate();
const [, setSearchParams] = useSearchParams(); const [, setSearchParams] = useSearchParams();
const filters = memoFilterStore.filters; const filters = memoFilterStore.filters;
@@ -60,7 +61,7 @@ const MemoFilters = () => {
))} ))}
</div> </div>
); );
}; });
const FactorIcon = ({ factor, className }: { factor: FilterFactor; className?: string }) => { const FactorIcon = ({ factor, className }: { factor: FilterFactor; className?: string }) => {
const iconMap = { const iconMap = {

View File

@@ -1,4 +1,5 @@
import { uniq } from "lodash-es"; import { uniq } from "lodash-es";
import { observer } from "mobx-react-lite";
import { memo, useEffect, useState } from "react"; import { memo, useEffect, useState } from "react";
import useCurrentUser from "@/hooks/useCurrentUser"; import useCurrentUser from "@/hooks/useCurrentUser";
import { userStore } from "@/store/v2"; import { userStore } from "@/store/v2";
@@ -14,7 +15,7 @@ interface Props {
reactions: Reaction[]; reactions: Reaction[];
} }
const MemoReactionListView = (props: Props) => { const MemoReactionListView = observer((props: Props) => {
const { memo, reactions } = props; const { memo, reactions } = props;
const currentUser = useCurrentUser(); const currentUser = useCurrentUser();
const [reactionGroup, setReactionGroup] = useState<Map<string, User[]>>(new Map()); const [reactionGroup, setReactionGroup] = useState<Map<string, User[]>>(new Map());
@@ -43,6 +44,6 @@ const MemoReactionListView = (props: Props) => {
</div> </div>
) )
); );
}; });
export default memo(MemoReactionListView); export default memo(MemoReactionListView);

View File

@@ -6,8 +6,7 @@ import { Link, useLocation } from "react-router-dom";
import useAsyncEffect from "@/hooks/useAsyncEffect"; import useAsyncEffect from "@/hooks/useAsyncEffect";
import useCurrentUser from "@/hooks/useCurrentUser"; import useCurrentUser from "@/hooks/useCurrentUser";
import useNavigateTo from "@/hooks/useNavigateTo"; import useNavigateTo from "@/hooks/useNavigateTo";
import { memoStore } from "@/store/v2"; import { memoStore, userStore, workspaceStore } from "@/store/v2";
import { userStore, workspaceStore } from "@/store/v2";
import { State } from "@/types/proto/api/v1/common"; import { State } from "@/types/proto/api/v1/common";
import { Memo, MemoRelation_Type, Visibility } from "@/types/proto/api/v1/memo_service"; import { Memo, MemoRelation_Type, Visibility } from "@/types/proto/api/v1/memo_service";
import { cn } from "@/utils"; import { cn } from "@/utils";

View File

@@ -5,8 +5,7 @@ import { useRef, useState } from "react";
import useClickAway from "react-use/lib/useClickAway"; import useClickAway from "react-use/lib/useClickAway";
import { memoServiceClient } from "@/grpcweb"; import { memoServiceClient } from "@/grpcweb";
import useCurrentUser from "@/hooks/useCurrentUser"; import useCurrentUser from "@/hooks/useCurrentUser";
import { memoStore } from "@/store/v2"; import { memoStore, workspaceStore } from "@/store/v2";
import { workspaceStore } from "@/store/v2";
import { Memo } from "@/types/proto/api/v1/memo_service"; import { Memo } from "@/types/proto/api/v1/memo_service";
import { cn } from "@/utils"; import { cn } from "@/utils";

View File

@@ -1,10 +1,11 @@
import { SearchIcon } from "lucide-react"; import { SearchIcon } from "lucide-react";
import { observer } from "mobx-react-lite";
import { useState } from "react"; import { useState } from "react";
import memoFilterStore from "@/store/v2/memoFilter"; import { memoFilterStore } from "@/store/v2";
import { useTranslate } from "@/utils/i18n"; import { useTranslate } from "@/utils/i18n";
import MemoDisplaySettingMenu from "./MemoDisplaySettingMenu"; import MemoDisplaySettingMenu from "./MemoDisplaySettingMenu";
const SearchBar = () => { const SearchBar = observer(() => {
const t = useTranslate(); const t = useTranslate();
const [queryText, setQueryText] = useState(""); const [queryText, setQueryText] = useState("");
@@ -41,6 +42,6 @@ const SearchBar = () => {
<MemoDisplaySettingMenu className="absolute right-2 top-2" /> <MemoDisplaySettingMenu className="absolute right-2 top-2" />
</div> </div>
); );
}; });
export default SearchBar; export default SearchBar;

View File

@@ -2,6 +2,7 @@ import { Dropdown, Menu, MenuButton, MenuItem, Radio, RadioGroup } from "@mui/jo
import { Button, Input } from "@usememos/mui"; import { Button, Input } from "@usememos/mui";
import { sortBy } from "lodash-es"; import { sortBy } from "lodash-es";
import { MoreVerticalIcon } from "lucide-react"; import { MoreVerticalIcon } from "lucide-react";
import { observer } from "mobx-react-lite";
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { toast } from "react-hot-toast"; import { toast } from "react-hot-toast";
import { userServiceClient } from "@/grpcweb"; import { userServiceClient } from "@/grpcweb";
@@ -16,7 +17,7 @@ interface LocalState {
creatingUser: User; creatingUser: User;
} }
const MemberSection = () => { const MemberSection = observer(() => {
const t = useTranslate(); const t = useTranslate();
const currentUser = useCurrentUser(); const currentUser = useCurrentUser();
const [state, setState] = useState<LocalState>({ const [state, setState] = useState<LocalState>({
@@ -239,6 +240,6 @@ const MemberSection = () => {
</div> </div>
</div> </div>
); );
}; });
export default MemberSection; export default MemberSection;

View File

@@ -2,6 +2,7 @@ import { Switch, Chip, ChipDelete } from "@mui/joy";
import { Button, Input } from "@usememos/mui"; import { Button, Input } from "@usememos/mui";
import { isEqual, uniq } from "lodash-es"; import { isEqual, uniq } from "lodash-es";
import { CheckIcon } from "lucide-react"; import { CheckIcon } from "lucide-react";
import { observer } from "mobx-react-lite";
import { useState } from "react"; import { useState } from "react";
import { toast } from "react-hot-toast"; import { toast } from "react-hot-toast";
import { workspaceSettingNamePrefix } from "@/store/common"; import { workspaceSettingNamePrefix } from "@/store/common";
@@ -10,7 +11,7 @@ import { WorkspaceSettingKey } from "@/store/v2/workspace";
import { WorkspaceMemoRelatedSetting } from "@/types/proto/api/v1/workspace_setting_service"; import { WorkspaceMemoRelatedSetting } from "@/types/proto/api/v1/workspace_setting_service";
import { useTranslate } from "@/utils/i18n"; import { useTranslate } from "@/utils/i18n";
const MemoRelatedSettings = () => { const MemoRelatedSettings = observer(() => {
const t = useTranslate(); const t = useTranslate();
const [originalSetting, setOriginalSetting] = useState<WorkspaceMemoRelatedSetting>(workspaceStore.state.memoRelatedSetting); const [originalSetting, setOriginalSetting] = useState<WorkspaceMemoRelatedSetting>(workspaceStore.state.memoRelatedSetting);
const [memoRelatedSetting, setMemoRelatedSetting] = useState<WorkspaceMemoRelatedSetting>(originalSetting); const [memoRelatedSetting, setMemoRelatedSetting] = useState<WorkspaceMemoRelatedSetting>(originalSetting);
@@ -197,6 +198,6 @@ const MemoRelatedSettings = () => {
</div> </div>
</div> </div>
); );
}; });
export default MemoRelatedSettings; export default MemoRelatedSettings;

View File

@@ -2,6 +2,7 @@ import { Divider, List, ListItem, Radio, RadioGroup, Tooltip, Switch } from "@mu
import { Button, Input } from "@usememos/mui"; import { Button, Input } from "@usememos/mui";
import { isEqual } from "lodash-es"; import { isEqual } from "lodash-es";
import { HelpCircleIcon } from "lucide-react"; import { HelpCircleIcon } from "lucide-react";
import { observer } from "mobx-react-lite";
import React, { useEffect, useMemo, useState } from "react"; import React, { useEffect, useMemo, useState } from "react";
import { toast } from "react-hot-toast"; import { toast } from "react-hot-toast";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
@@ -15,7 +16,7 @@ import {
} from "@/types/proto/api/v1/workspace_setting_service"; } from "@/types/proto/api/v1/workspace_setting_service";
import { useTranslate } from "@/utils/i18n"; import { useTranslate } from "@/utils/i18n";
const StorageSection = () => { const StorageSection = observer(() => {
const t = useTranslate(); const t = useTranslate();
const [workspaceStorageSetting, setWorkspaceStorageSetting] = useState<WorkspaceStorageSetting>( const [workspaceStorageSetting, setWorkspaceStorageSetting] = useState<WorkspaceStorageSetting>(
WorkspaceStorageSetting.fromPartial(workspaceStore.getWorkspaceSettingByKey(WorkspaceSettingKey.STORAGE)?.storageSetting || {}), WorkspaceStorageSetting.fromPartial(workspaceStore.getWorkspaceSettingByKey(WorkspaceSettingKey.STORAGE)?.storageSetting || {}),
@@ -223,6 +224,6 @@ const StorageSection = () => {
</div> </div>
</div> </div>
); );
}; });
export default StorageSection; export default StorageSection;

View File

@@ -1,4 +1,5 @@
import { ChevronRightIcon, HashIcon } from "lucide-react"; import { ChevronRightIcon, HashIcon } from "lucide-react";
import { observer } from "mobx-react-lite";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import useToggle from "react-use/lib/useToggle"; import useToggle from "react-use/lib/useToggle";
import memoFilterStore, { MemoFilter } from "@/store/v2/memoFilter"; import memoFilterStore, { MemoFilter } from "@/store/v2/memoFilter";
@@ -83,7 +84,7 @@ interface TagItemContainerProps {
tag: Tag; tag: Tag;
} }
const TagItemContainer: React.FC<TagItemContainerProps> = (props: TagItemContainerProps) => { const TagItemContainer = observer((props: TagItemContainerProps) => {
const { tag } = props; const { tag } = props;
const tagFilters = memoFilterStore.getFiltersByFactor("tagSearch"); const tagFilters = memoFilterStore.getFiltersByFactor("tagSearch");
const isActive = tagFilters.some((f: MemoFilter) => f.value === tag.text); const isActive = tagFilters.some((f: MemoFilter) => f.value === tag.text);
@@ -145,6 +146,6 @@ const TagItemContainer: React.FC<TagItemContainerProps> = (props: TagItemContain
) : null} ) : null}
</> </>
); );
}; });
export default TagTree; export default TagTree;

View File

@@ -1,8 +1,9 @@
import { observer } from "mobx-react-lite";
import AuthFooter from "@/components/AuthFooter"; import AuthFooter from "@/components/AuthFooter";
import PasswordSignInForm from "@/components/PasswordSignInForm"; import PasswordSignInForm from "@/components/PasswordSignInForm";
import { workspaceStore } from "@/store/v2"; import { workspaceStore } from "@/store/v2";
const AdminSignIn = () => { const AdminSignIn = observer(() => {
const workspaceGeneralSetting = workspaceStore.state.generalSetting; const workspaceGeneralSetting = workspaceStore.state.generalSetting;
return ( return (
@@ -20,6 +21,6 @@ const AdminSignIn = () => {
<AuthFooter /> <AuthFooter />
</div> </div>
); );
}; });
export default AdminSignIn; export default AdminSignIn;

View File

@@ -1,4 +1,5 @@
import dayjs from "dayjs"; import dayjs from "dayjs";
import { observer } from "mobx-react-lite";
import { useMemo } from "react"; import { useMemo } from "react";
import MemoView from "@/components/MemoView"; import MemoView from "@/components/MemoView";
import PagedMemoList from "@/components/PagedMemoList"; import PagedMemoList from "@/components/PagedMemoList";
@@ -8,7 +9,7 @@ import memoFilterStore from "@/store/v2/memoFilter";
import { Direction, State } from "@/types/proto/api/v1/common"; import { Direction, State } from "@/types/proto/api/v1/common";
import { Memo } from "@/types/proto/api/v1/memo_service"; import { Memo } from "@/types/proto/api/v1/memo_service";
const Archived = () => { const Archived = observer(() => {
const user = useCurrentUser(); const user = useCurrentUser();
const memoListFilter = useMemo(() => { const memoListFilter = useMemo(() => {
@@ -49,6 +50,6 @@ const Archived = () => {
oldFilter={memoListFilter} oldFilter={memoListFilter}
/> />
); );
}; });
export default Archived; export default Archived;

View File

@@ -1,5 +1,6 @@
import { last } from "lodash-es"; import { last } from "lodash-es";
import { LoaderIcon } from "lucide-react"; import { LoaderIcon } from "lucide-react";
import { observer } from "mobx-react-lite";
import { ClientError } from "nice-grpc-web"; import { ClientError } from "nice-grpc-web";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useSearchParams } from "react-router-dom"; import { useSearchParams } from "react-router-dom";
@@ -13,7 +14,7 @@ interface State {
errorMessage: string; errorMessage: string;
} }
const AuthCallback = () => { const AuthCallback = observer(() => {
const navigateTo = useNavigateTo(); const navigateTo = useNavigateTo();
const [searchParams] = useSearchParams(); const [searchParams] = useSearchParams();
const [state, setState] = useState<State>({ const [state, setState] = useState<State>({
@@ -77,6 +78,6 @@ const AuthCallback = () => {
)} )}
</div> </div>
); );
}; });
export default AuthCallback; export default AuthCallback;

View File

@@ -1,4 +1,5 @@
import dayjs from "dayjs"; import dayjs from "dayjs";
import { observer } from "mobx-react-lite";
import { useMemo } from "react"; import { useMemo } from "react";
import MemoView from "@/components/MemoView"; import MemoView from "@/components/MemoView";
import PagedMemoList from "@/components/PagedMemoList"; import PagedMemoList from "@/components/PagedMemoList";
@@ -8,7 +9,7 @@ import memoFilterStore from "@/store/v2/memoFilter";
import { Direction, State } from "@/types/proto/api/v1/common"; import { Direction, State } from "@/types/proto/api/v1/common";
import { Memo } from "@/types/proto/api/v1/memo_service"; import { Memo } from "@/types/proto/api/v1/memo_service";
const Explore = () => { const Explore = observer(() => {
const user = useCurrentUser(); const user = useCurrentUser();
const memoListFilter = useMemo(() => { const memoListFilter = useMemo(() => {
@@ -59,6 +60,6 @@ const Explore = () => {
oldFilter={memoListFilter} oldFilter={memoListFilter}
/> />
); );
}; });
export default Explore; export default Explore;

View File

@@ -1,5 +1,6 @@
import { Divider } from "@mui/joy"; import { Divider } from "@mui/joy";
import { Button } from "@usememos/mui"; import { Button } from "@usememos/mui";
import { observer } from "mobx-react-lite";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { toast } from "react-hot-toast"; import { toast } from "react-hot-toast";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
@@ -14,7 +15,7 @@ import { workspaceStore } from "@/store/v2";
import { IdentityProvider, IdentityProvider_Type } from "@/types/proto/api/v1/idp_service"; import { IdentityProvider, IdentityProvider_Type } from "@/types/proto/api/v1/idp_service";
import { useTranslate } from "@/utils/i18n"; import { useTranslate } from "@/utils/i18n";
const SignIn = () => { const SignIn = observer(() => {
const t = useTranslate(); const t = useTranslate();
const currentUser = useCurrentUser(); const currentUser = useCurrentUser();
const [identityProviderList, setIdentityProviderList] = useState<IdentityProvider[]>([]); const [identityProviderList, setIdentityProviderList] = useState<IdentityProvider[]>([]);
@@ -98,6 +99,6 @@ const SignIn = () => {
<AuthFooter /> <AuthFooter />
</div> </div>
); );
}; });
export default SignIn; export default SignIn;

View File

@@ -1,5 +1,6 @@
import { Button, Input } from "@usememos/mui"; import { Button, Input } from "@usememos/mui";
import { LoaderIcon } from "lucide-react"; import { LoaderIcon } from "lucide-react";
import { observer } from "mobx-react-lite";
import { ClientError } from "nice-grpc-web"; import { ClientError } from "nice-grpc-web";
import { useState } from "react"; import { useState } from "react";
import { toast } from "react-hot-toast"; import { toast } from "react-hot-toast";
@@ -12,7 +13,7 @@ import { workspaceStore } from "@/store/v2";
import { initialUserStore } from "@/store/v2/user"; import { initialUserStore } from "@/store/v2/user";
import { useTranslate } from "@/utils/i18n"; import { useTranslate } from "@/utils/i18n";
const SignUp = () => { const SignUp = observer(() => {
const t = useTranslate(); const t = useTranslate();
const navigateTo = useNavigateTo(); const navigateTo = useNavigateTo();
const actionBtnLoadingState = useLoading(false); const actionBtnLoadingState = useLoading(false);
@@ -135,6 +136,6 @@ const SignUp = () => {
<AuthFooter /> <AuthFooter />
</div> </div>
); );
}; });
export default SignUp; export default SignUp;