Skip to content

Commit 7243718

Browse files
authored
refactor(web): improve API hooks (#1818)
1 parent d4774b1 commit 7243718

File tree

180 files changed

+2803
-2532
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

180 files changed

+2803
-2532
lines changed

web/src/app/features/AccountSetting/hooks.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { useMeFetcher } from "@reearth/services/api";
1+
import {
2+
useMe,
3+
useMeMutations,
4+
useUserMutations
5+
} from "@reearth/services/api/user";
26
import { useCallback } from "react";
37

48
type UpdatePasswordType = {
@@ -7,41 +11,41 @@ type UpdatePasswordType = {
711
};
812

913
export default () => {
10-
const { useMeQuery, useUpdatePassword, useDeleteUser, useUpdateLanguage } =
11-
useMeFetcher();
12-
const { me: data } = useMeQuery();
14+
const { updatePassword, updateLanguage } = useMeMutations();
15+
const { deleteUser } = useUserMutations();
16+
const { me: data } = useMe();
1317

1418
const passwordPolicy = window.REEARTH_CONFIG?.passwordPolicy;
1519

1620
const handleUpdateUserPassword = useCallback(
1721
async ({ password, passwordConfirmation }: UpdatePasswordType) => {
1822
try {
19-
await useUpdatePassword({ password, passwordConfirmation });
23+
await updatePassword({ password, passwordConfirmation });
2024
} catch (error) {
2125
console.error("Failed to update password:", error);
2226
}
2327
},
24-
[useUpdatePassword]
28+
[updatePassword]
2529
);
2630

2731
const handleDeleteUser = useCallback(async () => {
2832
try {
2933
const userId = data.id;
30-
if (userId) await useDeleteUser({ userId });
34+
if (userId) await deleteUser({ userId });
3135
} catch (error) {
3236
console.error("Failed to delete user:", error);
3337
}
34-
}, [data.id, useDeleteUser]);
38+
}, [data.id, deleteUser]);
3539

3640
const handleUpdateUserLanguage = useCallback(
3741
async ({ lang }: { lang: string }) => {
3842
try {
39-
await useUpdateLanguage(lang);
43+
await updateLanguage(lang);
4044
} catch (error) {
4145
console.error("Failed to update language:", error);
4246
}
4347
},
44-
[useUpdateLanguage]
48+
[updateLanguage]
4549
);
4650

4751
return {

web/src/app/features/AssetsManager/hooks.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import useLoadMore from "@reearth/app/hooks/useLoadMore";
22
import { ManagerLayout } from "@reearth/app/ui/components/ManagerBase";
3-
import { useAssetsFetcher } from "@reearth/services/api";
3+
import { useAssetMutations, useAssets } from "@reearth/services/api/asset";
44
import { AssetSortField, SortDirection } from "@reearth/services/gql";
55
import { useT } from "@reearth/services/i18n";
66
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -107,10 +107,9 @@ export default ({
107107
}, []);
108108

109109
// assets
110-
const { useAssetsQuery, useRemoveAssets, useCreateAssets } =
111-
useAssetsFetcher();
110+
const { removeAssets, createAssets } = useAssetMutations();
112111
const { assets, hasMoreAssets, isRefetching, endCursor, loading, fetchMore } =
113-
useAssetsQuery({
112+
useAssets({
114113
workspaceId: workspaceId ?? "",
115114
projectId,
116115
pagination: {
@@ -207,14 +206,14 @@ export default ({
207206
const handleAssetsCreate = useCallback(
208207
async (files?: FileList) => {
209208
if (!files) return;
210-
await useCreateAssets({
209+
await createAssets({
211210
workspaceId: workspaceId ?? "",
212211
projectId,
213212
file: files,
214213
coreSupport: true
215214
});
216215
},
217-
[useCreateAssets, workspaceId, projectId]
216+
[createAssets, workspaceId, projectId]
218217
);
219218

220219
// upload
@@ -300,12 +299,12 @@ export default ({
300299

301300
const handleAssetDelete = useCallback(async () => {
302301
if (selectedAssetIds.length) {
303-
const { status } = await useRemoveAssets(selectedAssetIds);
302+
const { status } = await removeAssets(selectedAssetIds);
304303
if (status === "success") {
305304
selectAsset([]);
306305
}
307306
}
308-
}, [selectedAssetIds, useRemoveAssets]);
307+
}, [selectedAssetIds, removeAssets]);
309308

310309
return {
311310
filteredAssets,

web/src/app/features/CreateWorkspaceModal/index.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import {
66
TextInput,
77
Typography
88
} from "@reearth/app/lib/reearth-ui";
9-
import { useWorkspaceFetcher } from "@reearth/services/api";
9+
import {
10+
useWorkspaceMutations,
11+
useWorkspaces
12+
} from "@reearth/services/api/workspace";
1013
import { useT } from "@reearth/services/i18n";
1114
import { useAddWorkspaceModal } from "@reearth/services/state";
1215
import { styled, useTheme } from "@reearth/services/theme";
@@ -19,8 +22,7 @@ const AddWorkspaceModal: FC = () => {
1922

2023
const navigate = useNavigate();
2124
const [addWorkspaceModal, setAddWorkspaceModal] = useAddWorkspaceModal();
22-
const { useCreateWorkspace: addWorkspace, useWorkspacesQuery } =
23-
useWorkspaceFetcher();
25+
const { createWorkspace } = useWorkspaceMutations();
2426

2527
const [workspaceNameConfirm, setWorkspaceNameConfirm] = useState<string>("");
2628

@@ -29,14 +31,14 @@ const AddWorkspaceModal: FC = () => {
2931
}, [setAddWorkspaceModal]);
3032

3133
const handleAddWorkspace = useCallback(async () => {
32-
const { data } = await addWorkspace({
34+
const { data } = await createWorkspace({
3335
name: workspaceNameConfirm
3436
});
3537
setAddWorkspaceModal(false);
3638
navigate(`/dashboard/${data?.id}`);
37-
}, [addWorkspace, workspaceNameConfirm, setAddWorkspaceModal, navigate]);
39+
}, [createWorkspace, workspaceNameConfirm, setAddWorkspaceModal, navigate]);
3840

39-
const { workspaces } = useWorkspacesQuery();
41+
const { workspaces } = useWorkspaces();
4042
const isDuplicatedName: boolean | undefined = useMemo(() => {
4143
const name = workspaceNameConfirm.trim();
4244
if (!name) return false;

web/src/app/features/Dashboard/ContentsContainer/Members/AddMemberModal.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import {
77
TextInput,
88
Typography
99
} from "@reearth/app/lib/reearth-ui";
10-
import { useMeFetcher, useWorkspaceFetcher } from "@reearth/services/api";
10+
import { useSearchUser } from "@reearth/services/api/user";
11+
import { useWorkspaceMutations } from "@reearth/services/api/workspace";
1112
import { Role } from "@reearth/services/gql";
1213
import { useT } from "@reearth/services/i18n";
1314
import { Workspace } from "@reearth/services/state";
@@ -28,7 +29,6 @@ const AddMemberModal: FC<AddMemberModalProps> = ({
2829
}) => {
2930
const t = useT();
3031
const theme = useTheme();
31-
const { useSearchUser } = useMeFetcher();
3232

3333
const [userNotFoundWarningVisible, setUserNotFoundWarningVisible] =
3434
useState(false);
@@ -81,19 +81,19 @@ const AddMemberModal: FC<AddMemberModalProps> = ({
8181
}
8282
}, [user]);
8383

84-
const { useAddMemberToWorkspace: addMember } = useWorkspaceFetcher();
84+
const { addMemberToWorkspace } = useWorkspaceMutations();
8585

8686
const handleAddMembersToWorkspace = useCallback(async () => {
8787
if (searchResult.length === 0 || !workspace?.id) return;
8888
for (const user of searchResult) {
89-
await addMember({
89+
await addMemberToWorkspace({
9090
workspaceId: workspace.id,
9191
userId: user.id,
9292
role: Role.Reader
9393
});
9494
}
9595
onClose();
96-
}, [searchResult, workspace, addMember, onClose]);
96+
}, [searchResult, workspace, addMemberToWorkspace, onClose]);
9797

9898
const handleRemoveUserFromSearchResult = useCallback((userId: string) => {
9999
setSearchResult((prev) => prev.filter((u) => u.id !== userId));

web/src/app/features/Dashboard/ContentsContainer/Members/DeleteMemberWarningModal.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
ModalPanel,
66
Typography
77
} from "@reearth/app/lib/reearth-ui";
8-
import { useWorkspaceFetcher } from "@reearth/services/api";
8+
import { useWorkspaceMutations } from "@reearth/services/api/workspace";
99
import { WorkspaceMember } from "@reearth/services/gql";
1010
import { useT } from "@reearth/services/i18n";
1111
import { Workspace } from "@reearth/services/state";
@@ -27,13 +27,13 @@ const DeleteMemberWarningModal: FC<DeleteMemberWarningModalProps> = ({
2727
}) => {
2828
const t = useT();
2929

30-
const { useRemoveMemberFromWorkspace: removeMember } = useWorkspaceFetcher();
30+
const { removeMemberFromWorkspace } = useWorkspaceMutations();
3131
const onRemoveMember = useCallback(
3232
(userId: string) => {
3333
if (!userId || !workspace?.id) return;
34-
removeMember({ workspaceId: workspace?.id, userId });
34+
removeMemberFromWorkspace({ workspaceId: workspace?.id, userId });
3535
},
36-
[workspace?.id, removeMember]
36+
[workspace?.id, removeMemberFromWorkspace]
3737
);
3838
const handleRemoveMember = useCallback(() => {
3939
if (!member?.user?.id) return;

web/src/app/features/Dashboard/ContentsContainer/Members/UpdateRoleModal.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Button, Modal, ModalPanel } from "@reearth/app/lib/reearth-ui";
22
import { InputField, SelectField } from "@reearth/app/ui/fields";
3-
import { useWorkspaceFetcher } from "@reearth/services/api";
3+
import { useWorkspaceMutations } from "@reearth/services/api/workspace";
44
import { Role, WorkspaceMember } from "@reearth/services/gql";
55
import { useT } from "@reearth/services/i18n";
66
import { Workspace } from "@reearth/services/state";
@@ -32,17 +32,23 @@ const UpdateRoleModal: FC<UpdateRoleModalProps> = ({
3232

3333
const [localRole, setLocalRole] = useState(member.role);
3434

35-
const { useUpdateMemberOfWorkspace: updateMember } = useWorkspaceFetcher();
35+
const { updateMemberOfWorkspace } = useWorkspaceMutations();
3636

3737
const handleUpdateRole = useCallback(async () => {
3838
if (!workspace?.id || !member.user?.id || !localRole) return;
39-
await updateMember({
39+
await updateMemberOfWorkspace({
4040
workspaceId: workspace.id,
4141
userId: member.user.id,
4242
role: localRole
4343
});
4444
onClose();
45-
}, [workspace?.id, member.user?.id, localRole, updateMember, onClose]);
45+
}, [
46+
workspace?.id,
47+
member.user?.id,
48+
localRole,
49+
updateMemberOfWorkspace,
50+
onClose
51+
]);
4652

4753
return (
4854
<Modal visible={visible} size="small">

web/src/app/features/Dashboard/ContentsContainer/Members/index.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Button, TextInput, Typography } from "@reearth/app/lib/reearth-ui";
2-
import { useMeFetcher, useWorkspaceFetcher } from "@reearth/services/api";
2+
import { useMe } from "@reearth/services/api/user";
3+
import { useWorkspace } from "@reearth/services/api/workspace";
34
import { appFeature } from "@reearth/services/config/appFeatureConfig";
45
import { WorkspaceMember } from "@reearth/services/gql";
56
import { useT } from "@reearth/services/i18n";
@@ -19,10 +20,8 @@ const ROLE_PRIORITY = { OWNER: 1, MAINTAINER: 2, WRITER: 3, READER: 4 };
1920
type Props = { currentWorkspace?: Workspace };
2021

2122
const Members: FC<Props> = ({ currentWorkspace }) => {
22-
const { workspace } = useWorkspaceFetcher().useWorkspaceQuery(
23-
currentWorkspace?.id
24-
);
25-
const { me } = useMeFetcher().useMeQuery();
23+
const { workspace } = useWorkspace(currentWorkspace?.id);
24+
const { me } = useMe();
2625
const meId = me?.id;
2726
const meRole = useMemo(
2827
() => workspace?.members.find((m) => m.userId === meId)?.role,

web/src/app/features/Dashboard/ContentsContainer/Projects/Project/ProjectListViewItem.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
Typography
66
} from "@reearth/app/lib/reearth-ui";
77
import { formatRelativeTime } from "@reearth/app/utils/time";
8-
import { useMeFetcher } from "@reearth/services/api";
8+
import { useMe } from "@reearth/services/api/user";
99
import { styled, useTheme } from "@reearth/services/theme";
1010
import { FC, MouseEvent, useMemo } from "react";
1111

@@ -24,8 +24,7 @@ const ProjectListViewItem: FC<ProjectProps> = ({
2424
onProjectRemove
2525
}) => {
2626
const theme = useTheme();
27-
const { useMeQuery } = useMeFetcher();
28-
const { me } = useMeQuery();
27+
const { me } = useMe();
2928

3029
const createAt = useMemo(() => {
3130
return project.createdAt

web/src/app/features/Dashboard/ContentsContainer/Projects/Project/hooks.tsx

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ import useDoubleClick from "@reearth/app/hooks/useDoubleClick";
22
import { PopupMenuItem } from "@reearth/app/lib/reearth-ui";
33
import Tooltip from "@reearth/app/lib/reearth-ui/components/Tooltip";
44
import {
5-
useStorytellingFetcher,
6-
useProjectFetcher
7-
} from "@reearth/services/api";
8-
import { toPublishmentStatus } from "@reearth/services/api/publishTypes";
5+
useProjectImportExportMutations,
6+
useProjectMutations
7+
} from "@reearth/services/api/project";
8+
import { toPublishmentStatus } from "@reearth/services/api/utils";
9+
import {
10+
useStories,
11+
useStoryMutations
12+
} from "@reearth/services/api/storytelling";
913
import { useT } from "@reearth/services/i18n";
1014
import { MouseEvent, useCallback, useEffect, useMemo, useState } from "react";
1115

@@ -27,9 +31,10 @@ export default ({
2731
onProjectRemove
2832
}: Props) => {
2933
const t = useT();
30-
const { useStoriesQuery, usePublishStory } = useStorytellingFetcher();
31-
const { useExportProject, usePublishProject } = useProjectFetcher();
32-
const { stories } = useStoriesQuery(
34+
const { publishStory } = useStoryMutations();
35+
const { publishProject } = useProjectMutations();
36+
const { exportProject } = useProjectImportExportMutations();
37+
const { stories } = useStories(
3338
{
3439
sceneId: project?.sceneId
3540
},
@@ -67,8 +72,8 @@ export default ({
6772
const handleExportProject = useCallback(async () => {
6873
if (!project.id) return;
6974

70-
await useExportProject(project.id);
71-
}, [useExportProject, project.id]);
75+
await exportProject(project.id);
76+
}, [exportProject, project.id]);
7277

7378
useEffect(() => {
7479
setIsStarred(project.starred);
@@ -161,23 +166,17 @@ export default ({
161166
const handleProjectPublish = useCallback(
162167
async (projectId: string) => {
163168
if (projectPublished) {
164-
await usePublishProject("unpublished", projectId);
169+
await publishProject("unpublished", projectId);
165170
}
166171

167172
if (storiesPublished && stories?.length) {
168173
const storyPromises = stories.map((story) =>
169-
usePublishStory("unpublished", story.id)
174+
publishStory("unpublished", story.id)
170175
);
171176
await Promise.all(storyPromises);
172177
}
173178
},
174-
[
175-
projectPublished,
176-
stories,
177-
storiesPublished,
178-
usePublishProject,
179-
usePublishStory
180-
]
179+
[projectPublished, stories, storiesPublished, publishProject, publishStory]
181180
);
182181

183182
const handleProjectRemove = useCallback(

0 commit comments

Comments
 (0)