mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
perf(ui): optimize useFeatureStatus
This commit is contained in:
@ -40,7 +40,7 @@ export const SettingsLanguageSelect = memo(() => {
|
||||
const { t } = useTranslation();
|
||||
const dispatch = useAppDispatch();
|
||||
const language = useAppSelector((s) => s.system.language);
|
||||
const isLocalizationEnabled = useFeatureStatus('localization').isFeatureEnabled;
|
||||
const isLocalizationEnabled = useFeatureStatus('localization');
|
||||
|
||||
const value = useMemo(() => options.find((o) => o.value === language), [language]);
|
||||
|
||||
|
@ -23,9 +23,9 @@ const SettingsMenu = () => {
|
||||
const { isOpen, onOpen, onClose } = useDisclosure();
|
||||
useGlobalMenuClose(onClose);
|
||||
|
||||
const isBugLinkEnabled = useFeatureStatus('bugLink').isFeatureEnabled;
|
||||
const isDiscordLinkEnabled = useFeatureStatus('discordLink').isFeatureEnabled;
|
||||
const isGithubLinkEnabled = useFeatureStatus('githubLink').isFeatureEnabled;
|
||||
const isBugLinkEnabled = useFeatureStatus('bugLink');
|
||||
const isDiscordLinkEnabled = useFeatureStatus('discordLink');
|
||||
const isGithubLinkEnabled = useFeatureStatus('githubLink');
|
||||
|
||||
return (
|
||||
<Menu isOpen={isOpen} onOpen={onOpen} onClose={onClose}>
|
||||
|
@ -1,32 +1,24 @@
|
||||
import { createSelector } from '@reduxjs/toolkit';
|
||||
import { useAppSelector } from 'app/store/storeHooks';
|
||||
import type { AppFeature, SDFeature } from 'app/types/invokeai';
|
||||
import { selectConfigSlice } from 'features/system/store/configSlice';
|
||||
import type { InvokeTabName } from 'features/ui/store/tabMap';
|
||||
import { useMemo } from 'react';
|
||||
|
||||
export const useFeatureStatus = (feature: AppFeature | SDFeature | InvokeTabName) => {
|
||||
const disabledTabs = useAppSelector((s) => s.config.disabledTabs);
|
||||
|
||||
const disabledFeatures = useAppSelector((s) => s.config.disabledFeatures);
|
||||
|
||||
const disabledSDFeatures = useAppSelector((s) => s.config.disabledSDFeatures);
|
||||
|
||||
const isFeatureDisabled = useMemo(
|
||||
const selectIsFeatureEnabled = useMemo(
|
||||
() =>
|
||||
disabledFeatures.includes(feature as AppFeature) ||
|
||||
disabledSDFeatures.includes(feature as SDFeature) ||
|
||||
disabledTabs.includes(feature as InvokeTabName),
|
||||
[disabledFeatures, disabledSDFeatures, disabledTabs, feature]
|
||||
createSelector(selectConfigSlice, (config) => {
|
||||
return !(
|
||||
config.disabledFeatures.includes(feature as AppFeature) ||
|
||||
config.disabledSDFeatures.includes(feature as SDFeature) ||
|
||||
config.disabledTabs.includes(feature as InvokeTabName)
|
||||
);
|
||||
}),
|
||||
[feature]
|
||||
);
|
||||
|
||||
const isFeatureEnabled = useMemo(
|
||||
() =>
|
||||
!(
|
||||
disabledFeatures.includes(feature as AppFeature) ||
|
||||
disabledSDFeatures.includes(feature as SDFeature) ||
|
||||
disabledTabs.includes(feature as InvokeTabName)
|
||||
),
|
||||
[disabledFeatures, disabledSDFeatures, disabledTabs, feature]
|
||||
);
|
||||
const isFeatureEnabled = useAppSelector(selectIsFeatureEnabled);
|
||||
|
||||
return { isFeatureDisabled, isFeatureEnabled };
|
||||
return isFeatureEnabled;
|
||||
};
|
||||
|
Reference in New Issue
Block a user