mirror of
https://github.com/stashapp/stash.git
synced 2025-12-18 12:54:38 +03:00
Minor UI tweaks (#4297)
* Don't render PluginTasks if no tasks available * Improve query refetching
This commit is contained in:
@@ -211,9 +211,6 @@ export const GalleryEditPanel: React.FC<IProps> = ({
|
|||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
try {
|
try {
|
||||||
await mutateReloadScrapers();
|
await mutateReloadScrapers();
|
||||||
|
|
||||||
// reload the performer scrapers
|
|
||||||
await Scrapers.refetch();
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Toast.error(e);
|
Toast.error(e);
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -410,9 +410,6 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
|
|||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
try {
|
try {
|
||||||
await mutateReloadScrapers();
|
await mutateReloadScrapers();
|
||||||
|
|
||||||
// reload the performer scrapers
|
|
||||||
await Scrapers.refetch();
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Toast.error(e);
|
Toast.error(e);
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -350,9 +350,6 @@ export const SceneEditPanel: React.FC<IProps> = ({
|
|||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
try {
|
try {
|
||||||
await mutateReloadScrapers();
|
await mutateReloadScrapers();
|
||||||
|
|
||||||
// reload the performer scrapers
|
|
||||||
await Scrapers.refetch();
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Toast.error(e);
|
Toast.error(e);
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -75,14 +75,18 @@ export const SettingsPluginsPanel: React.FC = () => {
|
|||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
|
||||||
const { loading: configLoading, plugins, savePluginSettings } = useSettings();
|
const { loading: configLoading, plugins, savePluginSettings } = useSettings();
|
||||||
const { data, loading, refetch } = usePlugins();
|
const { data, loading } = usePlugins();
|
||||||
|
|
||||||
const [changedPluginID, setChangedPluginID] = React.useState<
|
const [changedPluginID, setChangedPluginID] = React.useState<
|
||||||
string | undefined
|
string | undefined
|
||||||
>();
|
>();
|
||||||
|
|
||||||
async function onReloadPlugins() {
|
async function onReloadPlugins() {
|
||||||
await mutateReloadPlugins().catch((e) => Toast.error(e));
|
try {
|
||||||
|
await mutateReloadPlugins();
|
||||||
|
} catch (e) {
|
||||||
|
Toast.error(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const pluginElements = useMemo(() => {
|
const pluginElements = useMemo(() => {
|
||||||
@@ -105,12 +109,13 @@ export const SettingsPluginsPanel: React.FC = () => {
|
|||||||
|
|
||||||
function renderEnableButton(pluginID: string, enabled: boolean) {
|
function renderEnableButton(pluginID: string, enabled: boolean) {
|
||||||
async function onClick() {
|
async function onClick() {
|
||||||
await mutateSetPluginsEnabled({ [pluginID]: !enabled }).catch((e) =>
|
try {
|
||||||
Toast.error(e)
|
await mutateSetPluginsEnabled({ [pluginID]: !enabled });
|
||||||
);
|
} catch (e) {
|
||||||
|
Toast.error(e);
|
||||||
|
}
|
||||||
|
|
||||||
setChangedPluginID(pluginID);
|
setChangedPluginID(pluginID);
|
||||||
refetch();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -229,7 +234,6 @@ export const SettingsPluginsPanel: React.FC = () => {
|
|||||||
intl,
|
intl,
|
||||||
Toast,
|
Toast,
|
||||||
changedPluginID,
|
changedPluginID,
|
||||||
refetch,
|
|
||||||
plugins,
|
plugins,
|
||||||
savePluginSettings,
|
savePluginSettings,
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -90,7 +90,11 @@ export const SettingsScrapingPanel: React.FC = () => {
|
|||||||
useSettings();
|
useSettings();
|
||||||
|
|
||||||
async function onReloadScrapers() {
|
async function onReloadScrapers() {
|
||||||
await mutateReloadScrapers().catch((e) => Toast.error(e));
|
try {
|
||||||
|
await mutateReloadScrapers();
|
||||||
|
} catch (e) {
|
||||||
|
Toast.error(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderPerformerScrapeTypes(types: ScrapeType[]) {
|
function renderPerformerScrapeTypes(types: ScrapeType[]) {
|
||||||
|
|||||||
@@ -16,46 +16,10 @@ export const PluginTasks: React.FC = () => {
|
|||||||
|
|
||||||
const plugins = usePlugins();
|
const plugins = usePlugins();
|
||||||
|
|
||||||
function renderPlugins() {
|
|
||||||
if (!plugins.data || !plugins.data.plugins) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const taskPlugins = plugins.data.plugins.filter(
|
|
||||||
(p) => p.enabled && p.tasks && p.tasks.length > 0
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<SettingSection headingID="config.tasks.plugin_tasks">
|
|
||||||
{taskPlugins.map((o) => {
|
|
||||||
return (
|
|
||||||
<SettingGroup
|
|
||||||
key={`${o.id}`}
|
|
||||||
settingProps={{
|
|
||||||
heading: o.name,
|
|
||||||
}}
|
|
||||||
collapsible
|
|
||||||
>
|
|
||||||
{renderPluginTasks(o, o.tasks ?? [])}
|
|
||||||
</SettingGroup>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</SettingSection>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderPluginTasks(plugin: Plugin, pluginTasks: PluginTask[]) {
|
function renderPluginTasks(plugin: Plugin, pluginTasks: PluginTask[]) {
|
||||||
if (!pluginTasks) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
return pluginTasks.map((o) => {
|
return pluginTasks.map((o) => {
|
||||||
return (
|
return (
|
||||||
<Setting
|
<Setting heading={o.name} subHeading={o.description} key={o.name}>
|
||||||
heading={o.name}
|
|
||||||
subHeading={o.description ?? undefined}
|
|
||||||
key={o.name}
|
|
||||||
>
|
|
||||||
<Button
|
<Button
|
||||||
onClick={() => onPluginTaskClicked(plugin, o)}
|
onClick={() => onPluginTaskClicked(plugin, o)}
|
||||||
variant="secondary"
|
variant="secondary"
|
||||||
@@ -78,5 +42,35 @@ export const PluginTasks: React.FC = () => {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return <Form.Group>{renderPlugins()}</Form.Group>;
|
if (!plugins.data?.plugins) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const taskPlugins = plugins.data.plugins.filter(
|
||||||
|
(p) => p.enabled && p.tasks && p.tasks.length > 0
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!taskPlugins.length) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Form.Group>
|
||||||
|
<SettingSection headingID="config.tasks.plugin_tasks">
|
||||||
|
{taskPlugins.map((o) => {
|
||||||
|
return (
|
||||||
|
<SettingGroup
|
||||||
|
key={o.id}
|
||||||
|
settingProps={{
|
||||||
|
heading: o.name,
|
||||||
|
}}
|
||||||
|
collapsible
|
||||||
|
>
|
||||||
|
{renderPluginTasks(o, o.tasks!)}
|
||||||
|
</SettingGroup>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</SettingSection>
|
||||||
|
</Form.Group>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2047,17 +2047,43 @@ export const useRemoveTempDLNAIP = () => GQL.useRemoveTempDlnaipMutation();
|
|||||||
export const mutateReloadScrapers = () =>
|
export const mutateReloadScrapers = () =>
|
||||||
client.mutate<GQL.ReloadScrapersMutation>({
|
client.mutate<GQL.ReloadScrapersMutation>({
|
||||||
mutation: GQL.ReloadScrapersDocument,
|
mutation: GQL.ReloadScrapersDocument,
|
||||||
refetchQueries: [
|
update(cache, result) {
|
||||||
GQL.refetchListMovieScrapersQuery(),
|
if (!result.data?.reloadScrapers) return;
|
||||||
GQL.refetchListPerformerScrapersQuery(),
|
|
||||||
GQL.refetchListSceneScrapersQuery(),
|
evictQueries(cache, [
|
||||||
],
|
GQL.ListMovieScrapersDocument,
|
||||||
|
GQL.ListPerformerScrapersDocument,
|
||||||
|
GQL.ListSceneScrapersDocument,
|
||||||
|
]);
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const pluginMutationImpactedQueries = [
|
||||||
|
GQL.PluginsDocument,
|
||||||
|
GQL.PluginTasksDocument,
|
||||||
|
];
|
||||||
|
|
||||||
export const mutateReloadPlugins = () =>
|
export const mutateReloadPlugins = () =>
|
||||||
client.mutate<GQL.ReloadPluginsMutation>({
|
client.mutate<GQL.ReloadPluginsMutation>({
|
||||||
mutation: GQL.ReloadPluginsDocument,
|
mutation: GQL.ReloadPluginsDocument,
|
||||||
refetchQueries: [GQL.refetchPluginsQuery(), GQL.refetchPluginTasksQuery()],
|
update(cache, result) {
|
||||||
|
if (!result.data?.reloadPlugins) return;
|
||||||
|
|
||||||
|
evictQueries(cache, pluginMutationImpactedQueries);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
type BoolMap = { [key: string]: boolean };
|
||||||
|
|
||||||
|
export const mutateSetPluginsEnabled = (enabledMap: BoolMap) =>
|
||||||
|
client.mutate<GQL.SetPluginsEnabledMutation>({
|
||||||
|
mutation: GQL.SetPluginsEnabledDocument,
|
||||||
|
variables: { enabledMap },
|
||||||
|
update(cache, result) {
|
||||||
|
if (!result.data?.setPluginsEnabled) return;
|
||||||
|
|
||||||
|
evictQueries(cache, pluginMutationImpactedQueries);
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export const mutateStopJob = (jobID: string) =>
|
export const mutateStopJob = (jobID: string) =>
|
||||||
@@ -2093,14 +2119,6 @@ export const mutateMigrate = (input: GQL.MigrateInput) =>
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
type BoolMap = { [key: string]: boolean };
|
|
||||||
|
|
||||||
export const mutateSetPluginsEnabled = (enabledMap: BoolMap) =>
|
|
||||||
client.mutate<GQL.SetPluginsEnabledMutation>({
|
|
||||||
mutation: GQL.SetPluginsEnabledDocument,
|
|
||||||
variables: { enabledMap },
|
|
||||||
});
|
|
||||||
|
|
||||||
/// Tasks
|
/// Tasks
|
||||||
|
|
||||||
export const mutateMetadataScan = (input: GQL.ScanMetadataInput) =>
|
export const mutateMetadataScan = (input: GQL.ScanMetadataInput) =>
|
||||||
|
|||||||
Reference in New Issue
Block a user