Skip to content

Commit c1b475c

Browse files
feat(ui): add getRuntimeConfig query and show it all in the about modal
1 parent ec44e68 commit c1b475c

File tree

3 files changed

+35
-41
lines changed

3 files changed

+35
-41
lines changed

invokeai/frontend/web/public/locales/en.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@
196196
"row": "Row",
197197
"column": "Column",
198198
"value": "Value",
199-
"label": "Label"
199+
"label": "Label",
200+
"systemInformation": "System Information"
200201
},
201202
"hrf": {
202203
"hrf": "High Resolution Fix",

invokeai/frontend/web/src/features/system/components/AboutModal/AboutModal.tsx

+23-40
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {
44
Grid,
55
GridItem,
66
Heading,
7-
IconButton,
87
Image,
98
Modal,
109
ModalBody,
@@ -13,21 +12,17 @@ import {
1312
ModalFooter,
1413
ModalHeader,
1514
ModalOverlay,
16-
Spacer,
1715
Text,
18-
Tooltip,
1916
useDisclosure,
2017
} from '@invoke-ai/ui-library';
21-
import ScrollableContent from 'common/components/OverlayScrollbars/ScrollableContent';
22-
import { useClipboard } from 'common/hooks/useClipboard';
18+
import { deepClone } from 'common/util/deepClone';
19+
import DataViewer from 'features/gallery/components/ImageMetadataViewer/DataViewer';
2320
import { discordLink, githubLink, websiteLink } from 'features/system/store/constants';
24-
import { map } from 'lodash-es';
2521
import InvokeLogoYellow from 'public/assets/images/invoke-tag-lrg.svg';
2622
import type { ReactElement } from 'react';
27-
import { cloneElement, memo, useCallback } from 'react';
23+
import { cloneElement, memo, useMemo } from 'react';
2824
import { useTranslation } from 'react-i18next';
29-
import { PiCopyBold } from 'react-icons/pi';
30-
import { useGetAppDepsQuery, useGetAppVersionQuery } from 'services/api/endpoints/appInfo';
25+
import { useGetAppDepsQuery, useGetAppVersionQuery, useGetRuntimeConfigQuery } from 'services/api/endpoints/appInfo';
3126

3227
type AboutModalProps = {
3328
/* The button to open the Settings Modal */
@@ -37,18 +32,26 @@ type AboutModalProps = {
3732
const AboutModal = ({ children }: AboutModalProps) => {
3833
const { isOpen, onOpen, onClose } = useDisclosure();
3934
const { t } = useTranslation();
40-
const clipboard = useClipboard();
41-
const { depsArray, depsObject } = useGetAppDepsQuery(undefined, {
42-
selectFromResult: ({ data }) => ({
43-
depsObject: data,
44-
depsArray: data ? map(data, (version, name) => ({ name, version })) : [],
45-
}),
46-
});
35+
const { data: runtimeConfig } = useGetRuntimeConfigQuery();
36+
const { data: dependencies } = useGetAppDepsQuery();
4737
const { data: appVersion } = useGetAppVersionQuery();
4838

49-
const handleCopy = useCallback(() => {
50-
clipboard.writeText(JSON.stringify(depsObject, null, 2));
51-
}, [clipboard, depsObject]);
39+
const localData = useMemo(() => {
40+
const clonedRuntimeConfig = deepClone(runtimeConfig);
41+
42+
if (clonedRuntimeConfig && clonedRuntimeConfig.config.remote_api_tokens) {
43+
clonedRuntimeConfig.config.remote_api_tokens.forEach((remote_api_token) => {
44+
remote_api_token.token = 'REDACTED';
45+
});
46+
}
47+
48+
return {
49+
version: appVersion?.version,
50+
dependencies,
51+
config: clonedRuntimeConfig?.config,
52+
set_config_fields: clonedRuntimeConfig?.set_fields,
53+
};
54+
}, [appVersion, dependencies, runtimeConfig]);
5255

5356
return (
5457
<>
@@ -63,27 +66,7 @@ const AboutModal = ({ children }: AboutModalProps) => {
6366
<ModalBody display="flex" flexDir="column" gap={4}>
6467
<Grid templateColumns="repeat(2, 1fr)" h="full">
6568
<GridItem backgroundColor="base.750" borderRadius="base" p="4" h="full">
66-
<ScrollableContent>
67-
<Flex position="sticky" top="0" backgroundColor="base.750" p={1} alignItems="center">
68-
<Heading size="md">{t('common.localSystem')}</Heading>
69-
<Spacer />
70-
<Tooltip label={t('common.copy')}>
71-
<IconButton
72-
onClick={handleCopy}
73-
isDisabled={!depsObject}
74-
aria-label={t('common.copy')}
75-
icon={<PiCopyBold />}
76-
variant="ghost"
77-
/>
78-
</Tooltip>
79-
</Flex>
80-
{depsArray.map(({ name, version }, i) => (
81-
<Grid key={i} py="2" px="1" w="full" templateColumns="repeat(2, 1fr)">
82-
<Text>{name}</Text>
83-
<Text>{version ? version : t('common.notInstalled')}</Text>
84-
</Grid>
85-
))}
86-
</ScrollableContent>
69+
<DataViewer label={t('common.systemInformation')} data={localData} />
8770
</GridItem>
8871
<GridItem>
8972
<Flex flexDir="column" gap={3} justifyContent="center" alignItems="center" h="full">

invokeai/frontend/web/src/services/api/endpoints/appInfo.ts

+10
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ export const appInfoApi = api.injectEndpoints({
3636
}),
3737
providesTags: ['FetchOnReconnect'],
3838
}),
39+
getRuntimeConfig: build.query<
40+
paths['/api/v1/app/runtime_config']['get']['responses']['200']['content']['application/json'],
41+
void
42+
>({
43+
query: () => ({
44+
url: buildAppInfoUrl('runtime_config'),
45+
method: 'GET',
46+
}),
47+
}),
3948
getInvocationCacheStatus: build.query<
4049
paths['/api/v1/app/invocation_cache/status']['get']['responses']['200']['content']['application/json'],
4150
void
@@ -82,6 +91,7 @@ export const {
8291
useGetAppVersionQuery,
8392
useGetAppDepsQuery,
8493
useGetAppConfigQuery,
94+
useGetRuntimeConfigQuery,
8595
useClearInvocationCacheMutation,
8696
useDisableInvocationCacheMutation,
8797
useEnableInvocationCacheMutation,

0 commit comments

Comments
 (0)