From 0a98046fc31ee6df2893cdb108120580949d3497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joonas=20H=C3=A4kkinen?= Date: Tue, 18 Jun 2024 14:41:03 +0300 Subject: [PATCH] Modify defaults form to save user's preferences to database --- .../defaults-dialog/DefaultsForm.tsx | 73 +++++++++---------- .../components/entry-dialog/useEntryForm.tsx | 6 +- web/src/graphql/generated/graphql.ts | 21 +++++- web/src/graphql/user-settings.graphql | 6 ++ 4 files changed, 63 insertions(+), 43 deletions(-) diff --git a/web/src/components/defaults-dialog/DefaultsForm.tsx b/web/src/components/defaults-dialog/DefaultsForm.tsx index 2362449..28f49e5 100644 --- a/web/src/components/defaults-dialog/DefaultsForm.tsx +++ b/web/src/components/defaults-dialog/DefaultsForm.tsx @@ -1,50 +1,49 @@ -import { useLazyQuery } from "@apollo/client"; -import { Grid } from "@mui/material"; -import { useEffect } from "react"; -import { useForm } from "react-hook-form"; +import { useMutation, useQuery } from "@apollo/client"; +import { Autocomplete, FormControl, Grid, TextField } from "@mui/material"; import { useTranslation } from "react-i18next"; -import { GetMySettingsDocument } from "../../graphql/generated/graphql"; -import DimensionComboBox from "../entry-dialog/DimensionComboBox"; -import useDefaultEntryValues from "../user-preferences/useDefaultEntryValues"; - -type DefaultsFormSchema = { - activity: string; - product: string; -}; +import { + FindDimensionOptionsDocument, + GetMySettingsDocument, + UpdateSettingsDocument, +} from "../../graphql/generated/graphql"; const DefaultsForm = () => { const { t } = useTranslation(); - - const [getMySettings] = useLazyQuery(GetMySettingsDocument); - - const getDefaultValues = async (): Promise => { - const { data: settingsData } = await getMySettings(); - - return { - product: settingsData?.getMySettings.productPreset || "", - activity: settingsData?.getMySettings.activityPreset || "", - }; - }; - - const { setDefaultValues } = useDefaultEntryValues(); - const form = useForm({ - defaultValues: getDefaultValues, + const { data: dimensionData } = useQuery(FindDimensionOptionsDocument); + const { data: settingsData } = useQuery(GetMySettingsDocument); + const [updateSettings] = useMutation(UpdateSettingsDocument, { + refetchQueries: [GetMySettingsDocument], }); - const { watch } = form; - - useEffect(() => { - const sub = watch((value) => setDefaultValues(value)); - return () => sub.unsubscribe(); - }, [setDefaultValues, watch]); + if (!settingsData) { + return null; + } return ( - - - - + + + updateSettings({ variables: { settings: { productPreset: value } } }) + } + options={dimensionData?.findDimensionOptions.product || []} + value={settingsData?.getMySettings.productPreset} + renderInput={(params) => } + /> + + + + + + updateSettings({ variables: { settings: { activityPreset: value } } }) + } + options={dimensionData?.findDimensionOptions.activity || []} + value={settingsData?.getMySettings.activityPreset} + renderInput={(params) => } + /> + ); diff --git a/web/src/components/entry-dialog/useEntryForm.tsx b/web/src/components/entry-dialog/useEntryForm.tsx index 8e719d4..1a88db3 100644 --- a/web/src/components/entry-dialog/useEntryForm.tsx +++ b/web/src/components/entry-dialog/useEntryForm.tsx @@ -78,11 +78,7 @@ const useEntryForm = ({ editEntry, date }: useEntryProps) => { }; const form = useForm({ - defaultValues: async () => { - const asd = await getDefaultValues(); - console.log(asd); - return asd; - }, + defaultValues: getDefaultValues, }); const { loading: hoursLoading } = useFormSetRemainingHours({ diff --git a/web/src/graphql/generated/graphql.ts b/web/src/graphql/generated/graphql.ts index 1ed802c..24aaf2e 100644 --- a/web/src/graphql/generated/graphql.ts +++ b/web/src/graphql/generated/graphql.ts @@ -66,6 +66,7 @@ export type Mutation = { addWorkdayEntry: Scalars['String']['output']; removeWorkdayEntry: Scalars['String']['output']; replaceWorkdayEntry: Scalars['String']['output']; + updateSettings: UserSettings; }; @@ -84,6 +85,11 @@ export type MutationReplaceWorkdayEntryArgs = { replacementEntry: AddWorkdayEntryInput; }; + +export type MutationUpdateSettingsArgs = { + settings: UpdateSettingsDto; +}; + export type Query = { __typename?: 'Query'; findDimensionOptions: DimensionOptions; @@ -107,6 +113,11 @@ export type SessionStatus = { employeeNumber?: Maybe; }; +export type UpdateSettingsDto = { + activityPreset?: InputMaybe; + productPreset?: InputMaybe; +}; + export type UserSettings = { __typename?: 'UserSettings'; activityPreset?: Maybe; @@ -165,6 +176,13 @@ export type GetMySettingsQueryVariables = Exact<{ [key: string]: never; }>; export type GetMySettingsQuery = { __typename?: 'Query', getMySettings: { __typename?: 'UserSettings', employeeNumber: number, productPreset?: string | null, activityPreset?: string | null } }; +export type UpdateSettingsMutationVariables = Exact<{ + settings: UpdateSettingsDto; +}>; + + +export type UpdateSettingsMutation = { __typename?: 'Mutation', updateSettings: { __typename?: 'UserSettings', employeeNumber: number } }; + export const AddWorkdayEntryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"AddWorkdayEntry"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"entry"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"AddWorkdayEntryInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"addWorkdayEntry"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"entry"},"value":{"kind":"Variable","name":{"kind":"Name","value":"entry"}}}]}]}}]} as unknown as DocumentNode; export const FindDimensionOptionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindDimensionOptions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findDimensionOptions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"product"}},{"kind":"Field","name":{"kind":"Name","value":"activity"}},{"kind":"Field","name":{"kind":"Name","value":"issue"}},{"kind":"Field","name":{"kind":"Name","value":"client"}}]}}]}}]} as unknown as DocumentNode; @@ -172,4 +190,5 @@ export const FindWorkdaysDocument = {"kind":"Document","definitions":[{"kind":"O export const GetSessionStatusDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetSessionStatus"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getSessionStatus"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"employeeNumber"}}]}}]}}]} as unknown as DocumentNode; export const RemoveWorkdayEntryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"RemoveWorkdayEntry"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"entry"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"RemoveWorkdayEntryInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"removeWorkdayEntry"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"entry"},"value":{"kind":"Variable","name":{"kind":"Name","value":"entry"}}}]}]}}]} as unknown as DocumentNode; export const ReplaceWorkdayEntryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ReplaceWorkdayEntry"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"originalEntry"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"RemoveWorkdayEntryInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"replacementEntry"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"AddWorkdayEntryInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"replaceWorkdayEntry"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"originalEntry"},"value":{"kind":"Variable","name":{"kind":"Name","value":"originalEntry"}}},{"kind":"Argument","name":{"kind":"Name","value":"replacementEntry"},"value":{"kind":"Variable","name":{"kind":"Name","value":"replacementEntry"}}}]}]}}]} as unknown as DocumentNode; -export const GetMySettingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetMySettings"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getMySettings"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"employeeNumber"}},{"kind":"Field","name":{"kind":"Name","value":"productPreset"}},{"kind":"Field","name":{"kind":"Name","value":"activityPreset"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file +export const GetMySettingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetMySettings"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"getMySettings"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"employeeNumber"}},{"kind":"Field","name":{"kind":"Name","value":"productPreset"}},{"kind":"Field","name":{"kind":"Name","value":"activityPreset"}}]}}]}}]} as unknown as DocumentNode; +export const UpdateSettingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateSettings"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"settings"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UpdateSettingsDto"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateSettings"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"settings"},"value":{"kind":"Variable","name":{"kind":"Name","value":"settings"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"employeeNumber"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/web/src/graphql/user-settings.graphql b/web/src/graphql/user-settings.graphql index 8492f82..f4d38f8 100644 --- a/web/src/graphql/user-settings.graphql +++ b/web/src/graphql/user-settings.graphql @@ -5,3 +5,9 @@ query GetMySettings { activityPreset } } + +mutation UpdateSettings($settings: UpdateSettingsDto!) { + updateSettings(settings: $settings) { + employeeNumber + } +}