import { Middleware } from '@reduxjs/toolkit'; import { $customStarUI, CustomStarUi } from 'app/store/nanostores/customStarUI'; import { $headerComponent } from 'app/store/nanostores/headerComponent'; import { $isDebugging } from 'app/store/nanostores/isDebugging'; import { store } from 'app/store/store'; import { PartialAppConfig } from 'app/types/invokeai'; import { $queueId, DEFAULT_QUEUE_ID, } from 'features/queue/store/queueNanoStore'; import React, { PropsWithChildren, ReactNode, lazy, memo, useEffect, } from 'react'; import { Provider } from 'react-redux'; import { $authToken, $baseUrl, $projectId } from 'services/api/client'; import { ManagerOptions, SocketOptions } from 'socket.io-client'; import Loading from '../../common/components/Loading/Loading'; import AppDndContext from '../../features/dnd/components/AppDndContext'; import '../../i18n'; import { $socketOptions } from '../hooks/useSocketIO'; const App = lazy(() => import('./App')); const ThemeLocaleProvider = lazy(() => import('./ThemeLocaleProvider')); interface Props extends PropsWithChildren { apiUrl?: string; token?: string; config?: PartialAppConfig; headerComponent?: ReactNode; middleware?: Middleware[]; projectId?: string; queueId?: string; selectedImage?: { imageName: string; action: 'sendToImg2Img' | 'sendToCanvas' | 'useAllParameters'; }; customStarUi?: CustomStarUi; socketOptions?: Partial; isDebugging?: boolean; } const InvokeAIUI = ({ apiUrl, token, config, headerComponent, middleware, projectId, queueId, selectedImage, customStarUi, socketOptions, isDebugging = false, }: Props) => { useEffect(() => { // configure API client token if (token) { $authToken.set(token); } // configure API client base url if (apiUrl) { $baseUrl.set(apiUrl); } // configure API client project header if (projectId) { $projectId.set(projectId); } // configure API client project header if (queueId) { $queueId.set(queueId); } return () => { // Reset the API client token and base url on unmount $baseUrl.set(undefined); $authToken.set(undefined); $projectId.set(undefined); $queueId.set(DEFAULT_QUEUE_ID); }; }, [apiUrl, token, middleware, projectId, queueId]); useEffect(() => { if (customStarUi) { $customStarUI.set(customStarUi); } return () => { $customStarUI.set(undefined); }; }, [customStarUi]); useEffect(() => { if (headerComponent) { $headerComponent.set(headerComponent); } return () => { $headerComponent.set(undefined); }; }, [headerComponent]); useEffect(() => { if (socketOptions) { $socketOptions.set(socketOptions); } return () => { $socketOptions.set({}); }; }, [socketOptions]); useEffect(() => { if (isDebugging) { $isDebugging.set(isDebugging); } return () => { $isDebugging.set(false); }; }, [isDebugging]); return ( }> ); }; export default memo(InvokeAIUI);