mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-02-13 04:25:24 -05:00
fix(ui): circular import issue
This commit is contained in:
@@ -26,7 +26,7 @@ import { CanvasToolbar } from 'features/controlLayers/components/Toolbar/CanvasT
|
||||
import { Transform } from 'features/controlLayers/components/Transform/Transform';
|
||||
import { CanvasManagerProviderGate } from 'features/controlLayers/contexts/CanvasManagerProviderGate';
|
||||
import { selectDynamicGrid, selectShowHUD } from 'features/controlLayers/store/canvasSettingsSlice';
|
||||
import { selectIsSessionStarted } from 'features/controlLayers/store/selectors';
|
||||
import { selectIsCanvasEmpty, selectIsSessionStarted } from 'features/controlLayers/store/selectors';
|
||||
import { memo, useCallback } from 'react';
|
||||
import { PiDotsThreeOutlineVerticalFill } from 'react-icons/pi';
|
||||
|
||||
@@ -51,8 +51,9 @@ MenuContent.displayName = 'MenuContent';
|
||||
|
||||
export const CanvasMainPanelContent = memo(() => {
|
||||
const isSessionStarted = useAppSelector(selectIsSessionStarted);
|
||||
const isCanvasEmpty = useAppSelector(selectIsCanvasEmpty);
|
||||
|
||||
if (!isSessionStarted) {
|
||||
if (!isSessionStarted && isCanvasEmpty) {
|
||||
return <CanvasNoSession />;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ import { upperFirst } from 'lodash-es';
|
||||
import { memo, useMemo } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { PiWarningBold } from 'react-icons/pi';
|
||||
import { selectMainModelConfig } from 'services/api/endpoints/models';
|
||||
import { selectMainModelConfig } from 'features/controlLayers/store/paramsSlice';
|
||||
import type { Equals } from 'tsafe';
|
||||
import { assert } from 'tsafe';
|
||||
|
||||
|
||||
@@ -37,9 +37,9 @@ import { zModelIdentifierField } from 'features/nodes/types/common';
|
||||
import { useCallback } from 'react';
|
||||
import {
|
||||
modelConfigsAdapterSelectors,
|
||||
selectMainModelConfig,
|
||||
selectModelConfigsQuery,
|
||||
} from 'services/api/endpoints/models';
|
||||
import { selectMainModelConfig } from '../store/paramsSlice';
|
||||
import type {
|
||||
ControlLoRAModelConfig,
|
||||
ControlNetModelConfig,
|
||||
|
||||
@@ -33,7 +33,7 @@ import { toast } from 'features/toast/toast';
|
||||
import { useCallback, useMemo } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { serializeError } from 'serialize-error';
|
||||
import { selectMainModelConfig } from 'services/api/endpoints/models';
|
||||
import { selectMainModelConfig } from '../store/paramsSlice';
|
||||
import type { ImageDTO } from 'services/api/types';
|
||||
import type { JsonObject } from 'type-fest';
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@ import type {
|
||||
ParameterVAEModel,
|
||||
} from 'features/parameters/types/parameterSchemas';
|
||||
import { clamp } from 'lodash-es';
|
||||
import { modelConfigsAdapterSelectors, selectModelConfigsQuery } from 'services/api/endpoints/models';
|
||||
import { isNonRefinerMainModelConfig } from 'services/api/types';
|
||||
|
||||
import { newSessionRequested } from './actions';
|
||||
|
||||
@@ -336,3 +338,24 @@ export const selectRefinerNegativeAestheticScore = createParamsSelector(
|
||||
export const selectRefinerScheduler = createParamsSelector((params) => params.refinerScheduler);
|
||||
export const selectRefinerStart = createParamsSelector((params) => params.refinerStart);
|
||||
export const selectRefinerSteps = createParamsSelector((params) => params.refinerSteps);
|
||||
|
||||
export const selectMainModelConfig = createSelector(
|
||||
selectModelConfigsQuery,
|
||||
selectParamsSlice,
|
||||
(modelConfigs, { model }) => {
|
||||
if (!modelConfigs.data) {
|
||||
return null;
|
||||
}
|
||||
if (!model) {
|
||||
return null;
|
||||
}
|
||||
const modelConfig = modelConfigsAdapterSelectors.selectById(modelConfigs.data, model.key);
|
||||
if (!modelConfig) {
|
||||
return null;
|
||||
}
|
||||
if (!isNonRefinerMainModelConfig(modelConfig)) {
|
||||
return null;
|
||||
}
|
||||
return modelConfig;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
} from 'features/nodes/util/graph/graphBuilderUtils';
|
||||
import { type GraphBuilderReturn, UnsupportedGenerationModeError } from 'features/nodes/util/graph/types';
|
||||
import { t } from 'i18next';
|
||||
import { selectMainModelConfig } from 'services/api/endpoints/models';
|
||||
import { selectMainModelConfig } from 'features/controlLayers/store/paramsSlice';
|
||||
import type { Equals } from 'tsafe';
|
||||
import { assert } from 'tsafe';
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ import {
|
||||
UnsupportedGenerationModeError,
|
||||
} from 'features/nodes/util/graph/types';
|
||||
import { t } from 'i18next';
|
||||
import { selectMainModelConfig } from 'services/api/endpoints/models';
|
||||
import { selectMainModelConfig } from 'features/controlLayers/store/paramsSlice';
|
||||
import type { Invocation } from 'services/api/types';
|
||||
import type { Equals } from 'tsafe';
|
||||
import { assert } from 'tsafe';
|
||||
|
||||
@@ -14,7 +14,7 @@ import {
|
||||
} from 'features/nodes/util/graph/graphBuilderUtils';
|
||||
import { type GraphBuilderReturn, UnsupportedGenerationModeError } from 'features/nodes/util/graph/types';
|
||||
import { t } from 'i18next';
|
||||
import { selectMainModelConfig } from 'services/api/endpoints/models';
|
||||
import { selectMainModelConfig } from 'features/controlLayers/store/paramsSlice';
|
||||
import type { Equals } from 'tsafe';
|
||||
import { assert } from 'tsafe';
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ import {
|
||||
selectPresetModifiedPrompts,
|
||||
} from 'features/nodes/util/graph/graphBuilderUtils';
|
||||
import type { GraphBuilderReturn, ImageOutputNodes } from 'features/nodes/util/graph/types';
|
||||
import { selectMainModelConfig } from 'services/api/endpoints/models';
|
||||
import { selectMainModelConfig } from 'features/controlLayers/store/paramsSlice';
|
||||
import type { Invocation } from 'services/api/types';
|
||||
import type { Equals } from 'tsafe';
|
||||
import { assert } from 'tsafe';
|
||||
|
||||
@@ -19,7 +19,7 @@ import {
|
||||
selectPresetModifiedPrompts,
|
||||
} from 'features/nodes/util/graph/graphBuilderUtils';
|
||||
import type { GraphBuilderReturn, ImageOutputNodes } from 'features/nodes/util/graph/types';
|
||||
import { selectMainModelConfig } from 'services/api/endpoints/models';
|
||||
import { selectMainModelConfig } from 'features/controlLayers/store/paramsSlice';
|
||||
import type { Invocation } from 'services/api/types';
|
||||
import type { Equals } from 'tsafe';
|
||||
import { assert } from 'tsafe';
|
||||
|
||||
@@ -24,7 +24,7 @@ import {
|
||||
selectPresetModifiedPrompts,
|
||||
} from 'features/nodes/util/graph/graphBuilderUtils';
|
||||
import type { GraphBuilderReturn, ImageOutputNodes } from 'features/nodes/util/graph/types';
|
||||
import { selectMainModelConfig } from 'services/api/endpoints/models';
|
||||
import { selectMainModelConfig } from 'features/controlLayers/store/paramsSlice';
|
||||
import type { Invocation } from 'services/api/types';
|
||||
import type { Equals } from 'tsafe';
|
||||
import { assert } from 'tsafe';
|
||||
|
||||
@@ -8,7 +8,7 @@ import { useAppSelector } from 'app/store/storeHooks';
|
||||
import type { AppConfig } from 'app/types/invokeai';
|
||||
import { useAssertSingleton } from 'common/hooks/useAssertSingleton';
|
||||
import { useCanvasManagerSafe } from 'features/controlLayers/contexts/CanvasManagerProviderGate';
|
||||
import { selectParamsSlice } from 'features/controlLayers/store/paramsSlice';
|
||||
import { selectMainModelConfig,selectParamsSlice } from 'features/controlLayers/store/paramsSlice';
|
||||
import { selectCanvasSlice } from 'features/controlLayers/store/selectors';
|
||||
import type { CanvasState, ParamsState } from 'features/controlLayers/store/types';
|
||||
import {
|
||||
@@ -42,7 +42,6 @@ import i18n from 'i18next';
|
||||
import { debounce, groupBy, upperFirst } from 'lodash-es';
|
||||
import { atom, computed } from 'nanostores';
|
||||
import { useEffect } from 'react';
|
||||
import { selectMainModelConfig } from 'services/api/endpoints/models';
|
||||
import type { MainModelConfig } from 'services/api/types';
|
||||
import { $isConnected } from 'services/events/stores';
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import type { EntityState } from '@reduxjs/toolkit';
|
||||
import { createEntityAdapter, createSelector } from '@reduxjs/toolkit';
|
||||
import { createEntityAdapter } from '@reduxjs/toolkit';
|
||||
import { getSelectorsOptions } from 'app/store/createMemoizedSelector';
|
||||
import { selectParamsSlice } from 'features/controlLayers/store/paramsSlice';
|
||||
import queryString from 'query-string';
|
||||
import type { operations, paths } from 'services/api/schema';
|
||||
import type {
|
||||
@@ -11,7 +10,6 @@ import type {
|
||||
SetHFTokenArg,
|
||||
SetHFTokenResponse,
|
||||
} from 'services/api/types';
|
||||
import { isNonRefinerMainModelConfig } from 'services/api/types';
|
||||
import type { Param0 } from 'tsafe';
|
||||
|
||||
import type { ApiTagDescription } from '..';
|
||||
@@ -326,23 +324,4 @@ export const {
|
||||
} = modelsApi;
|
||||
|
||||
export const selectModelConfigsQuery = modelsApi.endpoints.getModelConfigs.select();
|
||||
export const selectMainModelConfig = createSelector(
|
||||
selectModelConfigsQuery,
|
||||
selectParamsSlice,
|
||||
(modelConfigs, { model }) => {
|
||||
if (!modelConfigs.data) {
|
||||
return null;
|
||||
}
|
||||
if (!model) {
|
||||
return null;
|
||||
}
|
||||
const modelConfig = modelConfigsAdapterSelectors.selectById(modelConfigs.data, model.key);
|
||||
if (!modelConfig) {
|
||||
return null;
|
||||
}
|
||||
if (!isNonRefinerMainModelConfig(modelConfig)) {
|
||||
return null;
|
||||
}
|
||||
return modelConfig;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user