( user?: LoggedUser, feedId?: string, shouldFilterLocallyProp = false, )
| 213 | }; |
| 214 | |
| 215 | export default function useMutateFilters( |
| 216 | user?: LoggedUser, |
| 217 | feedId?: string, |
| 218 | shouldFilterLocallyProp = false, |
| 219 | ): ReturnType { |
| 220 | const queryClient = useQueryClient(); |
| 221 | const shouldFilterLocally = shouldFilterLocallyProp || !user; |
| 222 | |
| 223 | const updateFeedFilters = useCallback( |
| 224 | ({ advancedSettings, ...filters }: FeedSettings) => { |
| 225 | const { |
| 226 | blockedTags = [], |
| 227 | excludeSources = [], |
| 228 | includeSources = [], |
| 229 | includeTags = [], |
| 230 | } = filters ?? {}; |
| 231 | const fixed: typeof filters = { |
| 232 | includeTags: Array.from(new Set(includeTags)), |
| 233 | blockedTags: Array.from(new Set(blockedTags)), |
| 234 | excludeSources: Array.from(new Set(excludeSources)), |
| 235 | includeSources: Array.from(new Set(includeSources)), |
| 236 | }; |
| 237 | return gqlClient.request(FEED_FILTERS_FROM_REGISTRATION, { |
| 238 | filters: fixed, |
| 239 | settings: advancedSettings, |
| 240 | }); |
| 241 | }, |
| 242 | [], |
| 243 | ); |
| 244 | |
| 245 | const onAdvancedSettingsUpdate = useCallback( |
| 246 | ({ advancedSettings }: AdvancedSettingsMutationProps) => |
| 247 | onMutateAdvancedSettings( |
| 248 | advancedSettings, |
| 249 | queryClient, |
| 250 | (feedSettings, feedAdvancedSettings) => { |
| 251 | const newData = normalizeFeedSettings(structuredClone(feedSettings)); |
| 252 | feedAdvancedSettings.forEach((feedAdvancedSetting) => { |
| 253 | const index = newData.advancedSettings.findIndex( |
| 254 | (settings) => settings.id === feedAdvancedSetting.id, |
| 255 | ); |
| 256 | if (index === -1) { |
| 257 | newData.advancedSettings.push(feedAdvancedSetting); |
| 258 | } else { |
| 259 | newData.advancedSettings[index] = feedAdvancedSetting; |
| 260 | } |
| 261 | }); |
| 262 | |
| 263 | return newData; |
| 264 | }, |
| 265 | user, |
| 266 | feedId, |
| 267 | ), |
| 268 | [user, queryClient, feedId], |
| 269 | ); |
| 270 | |
| 271 | const { mutateAsync: updateAdvancedSettingsRemote } = useMutation< |
| 272 | unknown, |
no test coverage detected