feat(ui): use revised filters

- Add backcompat for cnet model default settings
- Default filter selection based on model type
- Updated UI components to use new filter nodes
- Added handling for failed filter executions, preventing filter from getting stuck in case it failed for some reason
- New translations for all filters & fields
This commit is contained in:
psychedelicious
2024-09-11 20:51:45 +10:00
committed by Kent Keirsey
parent 561db0751b
commit 9f06a9b03c
26 changed files with 829 additions and 870 deletions

View File

@@ -1,6 +1,12 @@
import { createSelector, type Selector } from '@reduxjs/toolkit';
import { EMPTY_ARRAY } from 'app/store/constants';
import type { RootState } from 'app/store/store';
import { useMemo } from 'react';
import { modelConfigsAdapterSelectors, useGetModelConfigsQuery } from 'services/api/endpoints/models';
import {
modelConfigsAdapterSelectors,
selectModelConfigsQuery,
useGetModelConfigsQuery,
} from 'services/api/endpoints/models';
import type { AnyModelConfig } from 'services/api/types';
import {
isClipEmbedModelConfig,
@@ -54,3 +60,46 @@ export const useIPAdapterModels = buildModelsHook(isIPAdapterModelConfig);
export const useEmbeddingModels = buildModelsHook(isTIModelConfig);
export const useVAEModels = buildModelsHook(isVAEModelConfig);
export const useFluxVAEModels = buildModelsHook(isFluxVAEModelConfig);
// const buildModelsSelector =
// <T extends AnyModelConfig>(typeGuard: (config: AnyModelConfig) => config is T): Selector<RootState, T[]> =>
// (state) => {
// const result = selectModelConfigsQuery(state);
// if (!result.data) {
// return EMPTY_ARRAY;
// }
// return modelConfigsAdapterSelectors.selectAll(result.data).filter(typeGuard);
// };
// export const selectSDMainModels = buildModelsSelector(isNonRefinerNonFluxMainModelConfig);
// export const selectMainModels = buildModelsSelector(isNonRefinerMainModelConfig);
// export const selectNonSDXLMainModels = buildModelsSelector(isNonSDXLMainModelConfig);
// export const selectRefinerModels = buildModelsSelector(isRefinerMainModelModelConfig);
// export const selectFluxModels = buildModelsSelector(isFluxMainModelModelConfig);
// export const selectSDXLModels = buildModelsSelector(isSDXLMainModelModelConfig);
// export const selectLoRAModels = buildModelsSelector(isLoRAModelConfig);
// export const selectControlNetAndT2IAdapterModels = buildModelsSelector(isControlNetOrT2IAdapterModelConfig);
// export const selectControlNetModels = buildModelsSelector(isControlNetModelConfig);
// export const selectT2IAdapterModels = buildModelsSelector(isT2IAdapterModelConfig);
// export const selectT5EncoderModels = buildModelsSelector(isT5EncoderModelConfig);
// export const selectClipEmbedModels = buildModelsSelector(isClipEmbedModelConfig);
// export const selectSpandrelImageToImageModels = buildModelsSelector(isSpandrelImageToImageModelConfig);
// export const selectIPAdapterModels = buildModelsSelector(isIPAdapterModelConfig);
// export const selectEmbeddingModels = buildModelsSelector(isTIModelConfig);
// export const selectVAEModels = buildModelsSelector(isVAEModelConfig);
// export const selectFluxVAEModels = buildModelsSelector(isFluxVAEModelConfig);
export const buildSelectModelConfig = <T extends AnyModelConfig>(
key: string,
typeGuard: (config: AnyModelConfig) => config is T
): Selector<RootState, T | null> =>
createSelector(selectModelConfigsQuery, (result) => {
if (!result.data) {
return null;
}
return (
modelConfigsAdapterSelectors
.selectAll(result.data)
.filter(typeGuard)
.find((m) => m.key === key) ?? null
);
});