()
| 155 | }[keyof GeneralSettings] |
| 156 | |
| 157 | export function useUpdateGeneralSetting() { |
| 158 | const queryClient = useQueryClient() |
| 159 | |
| 160 | return useMutation({ |
| 161 | mutationFn: async ({ key, value }: UpdateSettingParams) => { |
| 162 | return requestJson(updateUserSettingsContract, { body: { [key]: value } }) |
| 163 | }, |
| 164 | onMutate: async ({ key, value }) => { |
| 165 | await queryClient.cancelQueries({ queryKey: generalSettingsKeys.settings() }) |
| 166 | |
| 167 | const previousSettings = queryClient.getQueryData<GeneralSettings>( |
| 168 | generalSettingsKeys.settings() |
| 169 | ) |
| 170 | |
| 171 | if (previousSettings) { |
| 172 | const newSettings = { |
| 173 | ...previousSettings, |
| 174 | [key]: value, |
| 175 | } |
| 176 | |
| 177 | queryClient.setQueryData<GeneralSettings>(generalSettingsKeys.settings(), newSettings) |
| 178 | |
| 179 | if (key === 'theme') { |
| 180 | syncThemeToNextThemes(value as GeneralSettings['theme']) |
| 181 | } |
| 182 | } |
| 183 | |
| 184 | return { previousSettings } |
| 185 | }, |
| 186 | onError: (err, _variables, context) => { |
| 187 | if (context?.previousSettings) { |
| 188 | queryClient.setQueryData(generalSettingsKeys.settings(), context.previousSettings) |
| 189 | syncThemeToNextThemes(context.previousSettings.theme) |
| 190 | } |
| 191 | logger.error('Failed to update setting:', err) |
| 192 | }, |
| 193 | onSettled: () => { |
| 194 | return queryClient.invalidateQueries({ queryKey: generalSettingsKeys.settings() }) |
| 195 | }, |
| 196 | }) |
| 197 | } |
no test coverage detected