fix(ui): dynamic prompts not recalculating when deleting or updating a style preset

The root cause was the active style preset not being reset when it was deleted, or no longer present in the list of style presets.

- Add extra reducer to `stylePresetSlice` to reset the active preset if it is deleted or otherwise unavailable
- Update the dynamic prompts listener to trigger on delete/update/list of style presets
This commit is contained in:
psychedelicious 2024-08-22 20:46:15 +10:00
parent bcc78bde9b
commit 8a2c78f2e1
2 changed files with 26 additions and 1 deletions

View File

@ -13,6 +13,7 @@ import {
import { getShouldProcessPrompt } from 'features/dynamicPrompts/util/getShouldProcessPrompt';
import { getPresetModifiedPrompts } from 'features/nodes/util/graph/graphBuilderUtils';
import { activeStylePresetIdChanged } from 'features/stylePresets/store/stylePresetSlice';
import { stylePresetsApi } from 'services/api/endpoints/stylePresets';
import { utilitiesApi } from 'services/api/endpoints/utilities';
import { socketConnected } from 'services/events/actions';
@ -22,7 +23,10 @@ const matcher = isAnyOf(
maxPromptsChanged,
maxPromptsReset,
socketConnected,
activeStylePresetIdChanged
activeStylePresetIdChanged,
stylePresetsApi.endpoints.deleteStylePreset.matchFulfilled,
stylePresetsApi.endpoints.updateStylePreset.matchFulfilled,
stylePresetsApi.endpoints.listStylePresets.matchFulfilled,
);
export const addDynamicPromptsListener = (startAppListening: AppStartListening) => {

View File

@ -1,6 +1,7 @@
import type { PayloadAction } from '@reduxjs/toolkit';
import { createSlice } from '@reduxjs/toolkit';
import type { PersistConfig } from 'app/store/store';
import { stylePresetsApi } from 'services/api/endpoints/stylePresets';
import type { StylePresetState } from './types';
@ -24,6 +25,26 @@ export const stylePresetSlice = createSlice({
state.viewMode = action.payload;
},
},
extraReducers(builder) {
builder.addMatcher(stylePresetsApi.endpoints.deleteStylePreset.matchFulfilled, (state, action) => {
if (state.activeStylePresetId === null) {
return;
}
const deletedId = action.meta.arg.originalArgs;
if (state.activeStylePresetId === deletedId) {
state.activeStylePresetId = null;
}
});
builder.addMatcher(stylePresetsApi.endpoints.listStylePresets.matchFulfilled, (state, action) => {
if (state.activeStylePresetId === null) {
return;
}
const ids = action.payload.map((preset) => preset.id);
if (!ids.includes(state.activeStylePresetId)) {
state.activeStylePresetId = null;
}
});
},
});
export const { activeStylePresetIdChanged, searchTermChanged, viewModeChanged } = stylePresetSlice.actions;