mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 20:34:37 +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);
|
||||
try {
|
||||
await mutateReloadScrapers();
|
||||
|
||||
// reload the performer scrapers
|
||||
await Scrapers.refetch();
|
||||
} catch (e) {
|
||||
Toast.error(e);
|
||||
} finally {
|
||||
|
||||
@@ -410,9 +410,6 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
|
||||
setIsLoading(true);
|
||||
try {
|
||||
await mutateReloadScrapers();
|
||||
|
||||
// reload the performer scrapers
|
||||
await Scrapers.refetch();
|
||||
} catch (e) {
|
||||
Toast.error(e);
|
||||
} finally {
|
||||
|
||||
@@ -350,9 +350,6 @@ export const SceneEditPanel: React.FC<IProps> = ({
|
||||
setIsLoading(true);
|
||||
try {
|
||||
await mutateReloadScrapers();
|
||||
|
||||
// reload the performer scrapers
|
||||
await Scrapers.refetch();
|
||||
} catch (e) {
|
||||
Toast.error(e);
|
||||
} finally {
|
||||
|
||||
@@ -75,14 +75,18 @@ export const SettingsPluginsPanel: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
|
||||
const { loading: configLoading, plugins, savePluginSettings } = useSettings();
|
||||
const { data, loading, refetch } = usePlugins();
|
||||
const { data, loading } = usePlugins();
|
||||
|
||||
const [changedPluginID, setChangedPluginID] = React.useState<
|
||||
string | undefined
|
||||
>();
|
||||
|
||||
async function onReloadPlugins() {
|
||||
await mutateReloadPlugins().catch((e) => Toast.error(e));
|
||||
try {
|
||||
await mutateReloadPlugins();
|
||||
} catch (e) {
|
||||
Toast.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
const pluginElements = useMemo(() => {
|
||||
@@ -105,12 +109,13 @@ export const SettingsPluginsPanel: React.FC = () => {
|
||||
|
||||
function renderEnableButton(pluginID: string, enabled: boolean) {
|
||||
async function onClick() {
|
||||
await mutateSetPluginsEnabled({ [pluginID]: !enabled }).catch((e) =>
|
||||
Toast.error(e)
|
||||
);
|
||||
try {
|
||||
await mutateSetPluginsEnabled({ [pluginID]: !enabled });
|
||||
} catch (e) {
|
||||
Toast.error(e);
|
||||
}
|
||||
|
||||
setChangedPluginID(pluginID);
|
||||
refetch();
|
||||
}
|
||||
|
||||
return (
|
||||
@@ -229,7 +234,6 @@ export const SettingsPluginsPanel: React.FC = () => {
|
||||
intl,
|
||||
Toast,
|
||||
changedPluginID,
|
||||
refetch,
|
||||
plugins,
|
||||
savePluginSettings,
|
||||
]);
|
||||
|
||||
@@ -90,7 +90,11 @@ export const SettingsScrapingPanel: React.FC = () => {
|
||||
useSettings();
|
||||
|
||||
async function onReloadScrapers() {
|
||||
await mutateReloadScrapers().catch((e) => Toast.error(e));
|
||||
try {
|
||||
await mutateReloadScrapers();
|
||||
} catch (e) {
|
||||
Toast.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
function renderPerformerScrapeTypes(types: ScrapeType[]) {
|
||||
|
||||
@@ -16,46 +16,10 @@ export const PluginTasks: React.FC = () => {
|
||||
|
||||
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[]) {
|
||||
if (!pluginTasks) {
|
||||
return;
|
||||
}
|
||||
|
||||
return pluginTasks.map((o) => {
|
||||
return (
|
||||
<Setting
|
||||
heading={o.name}
|
||||
subHeading={o.description ?? undefined}
|
||||
key={o.name}
|
||||
>
|
||||
<Setting heading={o.name} subHeading={o.description} key={o.name}>
|
||||
<Button
|
||||
onClick={() => onPluginTaskClicked(plugin, o)}
|
||||
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 = () =>
|
||||
client.mutate<GQL.ReloadScrapersMutation>({
|
||||
mutation: GQL.ReloadScrapersDocument,
|
||||
refetchQueries: [
|
||||
GQL.refetchListMovieScrapersQuery(),
|
||||
GQL.refetchListPerformerScrapersQuery(),
|
||||
GQL.refetchListSceneScrapersQuery(),
|
||||
],
|
||||
update(cache, result) {
|
||||
if (!result.data?.reloadScrapers) return;
|
||||
|
||||
evictQueries(cache, [
|
||||
GQL.ListMovieScrapersDocument,
|
||||
GQL.ListPerformerScrapersDocument,
|
||||
GQL.ListSceneScrapersDocument,
|
||||
]);
|
||||
},
|
||||
});
|
||||
|
||||
const pluginMutationImpactedQueries = [
|
||||
GQL.PluginsDocument,
|
||||
GQL.PluginTasksDocument,
|
||||
];
|
||||
|
||||
export const mutateReloadPlugins = () =>
|
||||
client.mutate<GQL.ReloadPluginsMutation>({
|
||||
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) =>
|
||||
@@ -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
|
||||
|
||||
export const mutateMetadataScan = (input: GQL.ScanMetadataInput) =>
|
||||
|
||||
Reference in New Issue
Block a user