From 77a44b4490252ebfcbe6f840cc8792cfbe8e4a9b Mon Sep 17 00:00:00 2001 From: Hasan Mansoor <68682354+HasanMansoor4@users.noreply.github.com> Date: Sun, 5 Feb 2023 06:21:58 +0300 Subject: [PATCH] Refactor into component and use React Query --- frontend/src/hooks/api/workspace/index.tsx | 1 + frontend/src/hooks/api/workspace/queries.tsx | 14 +++++++- frontend/src/hooks/api/workspace/types.ts | 2 ++ .../api/workspace/toggleAutoCapitalization.ts | 26 -------------- .../ProjectSettingsPage.tsx | 29 ++++++++++++++++ .../AutoCapitalizationSection.tsx | 34 +++++++++++++++++++ .../AutoCapitalizationSection/index.tsx | 1 + 7 files changed, 80 insertions(+), 27 deletions(-) delete mode 100644 frontend/src/pages/api/workspace/toggleAutoCapitalization.ts create mode 100644 frontend/src/views/Settings/ProjectSettingsPage/components/AutoCapitalizationSection/AutoCapitalizationSection.tsx create mode 100644 frontend/src/views/Settings/ProjectSettingsPage/components/AutoCapitalizationSection/index.tsx diff --git a/frontend/src/hooks/api/workspace/index.tsx b/frontend/src/hooks/api/workspace/index.tsx index 5de95ab05..23d9e42a3 100644 --- a/frontend/src/hooks/api/workspace/index.tsx +++ b/frontend/src/hooks/api/workspace/index.tsx @@ -4,5 +4,6 @@ export { useDeleteWsEnvironment, useGetUserWorkspaces, useRenameWorkspace, + useToggleAutoCapitalization, useUpdateWsEnvironment } from './queries'; diff --git a/frontend/src/hooks/api/workspace/queries.tsx b/frontend/src/hooks/api/workspace/queries.tsx index b0566a43d..64e4a905c 100644 --- a/frontend/src/hooks/api/workspace/queries.tsx +++ b/frontend/src/hooks/api/workspace/queries.tsx @@ -7,6 +7,7 @@ import { DeleteEnvironmentDTO, DeleteWorkspaceDTO, RenameWorkspaceDTO, + ToggleAutoCapitalizationDTO, UpdateEnvironmentDTO, Workspace } from './types'; @@ -17,7 +18,6 @@ const workspaceKeys = { const fetchUserWorkspaces = async () => { const { data } = await apiRequest.get<{ workspaces: Workspace[] }>('/api/v1/workspace'); - return data.workspaces; }; @@ -37,6 +37,18 @@ export const useRenameWorkspace = () => { }); }; +export const useToggleAutoCapitalization = () => { + const queryClient = useQueryClient(); + + return useMutation<{}, {}, ToggleAutoCapitalizationDTO>({ + mutationFn: ({ workspaceID, state }) => + apiRequest.post(`/api/v2/workspace/${workspaceID}/settings`, { autoCapitalization: state }), + onSuccess: () => { + queryClient.invalidateQueries(workspaceKeys.getAllUserWorkspace); + } + }); +}; + export const useDeleteWorkspace = () => { const queryClient = useQueryClient(); diff --git a/frontend/src/hooks/api/workspace/types.ts b/frontend/src/hooks/api/workspace/types.ts index cc4709477..fd408999b 100644 --- a/frontend/src/hooks/api/workspace/types.ts +++ b/frontend/src/hooks/api/workspace/types.ts @@ -3,6 +3,7 @@ export type Workspace = { _id: string; name: string; organization: string; + autoCapitalization: boolean; environments: WorkspaceEnv[]; }; @@ -10,6 +11,7 @@ export type WorkspaceEnv = { name: string; slug: string }; // mutation dto export type RenameWorkspaceDTO = { workspaceID: string; newWorkspaceName: string }; +export type ToggleAutoCapitalizationDTO = { workspaceID: string; state: boolean }; export type DeleteWorkspaceDTO = { workspaceID: string }; diff --git a/frontend/src/pages/api/workspace/toggleAutoCapitalization.ts b/frontend/src/pages/api/workspace/toggleAutoCapitalization.ts deleted file mode 100644 index fa459d67a..000000000 --- a/frontend/src/pages/api/workspace/toggleAutoCapitalization.ts +++ /dev/null @@ -1,26 +0,0 @@ -import SecurityClient from '@app/components/utilities/SecurityClient'; - -/** - * This route lets us change the auto capitalization settings in a project. - * @param {*} req - * @param {*} res - * @returns - */ -const toggleAutoCapitalization = (workspaceId: string, state: boolean) => - SecurityClient.fetchCall(`/api/v2/workspace/${workspaceId}/settings`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - autoCapitalization: state - }) - }).then(async (res) => { - if (res && res.status === 200) { - return res; - } - console.log('Failed to toggle auto capitalization state'); - return undefined; - }); - -export default toggleAutoCapitalization; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx index 953a3d140..4fdd3d843 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx @@ -24,9 +24,11 @@ import { useGetUserWsKey, useGetUserWsServiceTokens, useRenameWorkspace, + useToggleAutoCapitalization, useUpdateWsEnvironment } from '@app/hooks/api'; +import { AutoCapitalizationSection } from './components/AutoCapitalizationSection/AutoCapitalizationSection'; import { CopyProjectIDSection, CreateServiceToken, @@ -39,6 +41,7 @@ import { export const ProjectSettingsPage = () => { const { t } = useTranslation(); const { currentWorkspace, workspaces } = useWorkspace(); + console.log(currentWorkspace); const router = useRouter(); const { data: serviceTokens } = useGetUserWsServiceTokens({ workspaceID: currentWorkspace?._id || '' @@ -50,6 +53,8 @@ export const ProjectSettingsPage = () => { const [isDeleting, setIsDeleting] = useToggle(); const renameWorkspace = useRenameWorkspace(); + const toggleAutoCapitalization = useToggleAutoCapitalization(); + const deleteWorkspace = useDeleteWorkspace(); // env crud operation const createWsEnv = useCreateWsEnvironment(); @@ -83,6 +88,26 @@ export const ProjectSettingsPage = () => { } }; + const onAutoCapitalizationToggle = async (state: boolean) => { + try { + await toggleAutoCapitalization.mutateAsync({ + workspaceID, + state + }); + const text = `Successfully ${state ? 'enabled' : 'disabled'} auto capitalization`; + createNotification({ + text, + type: 'success' + }); + } catch (error) { + console.error(error); + createNotification({ + text: 'Failed to update auto capitalization', + type: 'error' + }); + } + }; + const onDeleteWorkspace = async () => { setIsDeleting.on(); try { @@ -241,6 +266,10 @@ export const ProjectSettingsPage = () => { workspaceName={currentWorkspace?.name} onProjectNameChange={onRenameWorkspace} /> + Promise; +}; + +export const AutoCapitalizationSection = ({ + workspaceAutoCapitalization, + onAutoCapitalizationChange +}: Props) => { + const { t } = useTranslation(); + return ( +
+
+

+ {t('settings-project:auto-capitalization')} +

+ { + onAutoCapitalizationChange(state as boolean); + }} + > + {t('settings-project:auto-capitalization-description')} + +
+
+ ); +}; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/AutoCapitalizationSection/index.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/AutoCapitalizationSection/index.tsx new file mode 100644 index 000000000..2b851428e --- /dev/null +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/AutoCapitalizationSection/index.tsx @@ -0,0 +1 @@ +export { AutoCapitalizationSection } from './AutoCapitalizationSection'; \ No newline at end of file