From 01200f3d701e8243a7ad21c2b3413c53e75b4e5c Mon Sep 17 00:00:00 2001
From: viown <48097677+viown@users.noreply.github.com>
Date: Tue, 11 Nov 2025 08:23:41 +0300
Subject: [PATCH] Disable scan button when scanning
---
.../dashboard/components/widgets/ServerInfoWidget.tsx | 9 ++++++++-
src/apps/dashboard/routes/index.tsx | 8 +++++++-
src/apps/dashboard/routes/libraries/index.tsx | 2 +-
3 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/src/apps/dashboard/components/widgets/ServerInfoWidget.tsx b/src/apps/dashboard/components/widgets/ServerInfoWidget.tsx
index e7914f0f7c..bc06bc6201 100644
--- a/src/apps/dashboard/components/widgets/ServerInfoWidget.tsx
+++ b/src/apps/dashboard/components/widgets/ServerInfoWidget.tsx
@@ -15,9 +15,15 @@ type ServerInfoWidgetProps = {
onScanLibrariesClick?: () => void;
onRestartClick?: () => void;
onShutdownClick?: () => void;
+ isScanning?: boolean;
};
-const ServerInfoWidget = ({ onScanLibrariesClick, onRestartClick, onShutdownClick }: ServerInfoWidgetProps) => {
+const ServerInfoWidget = ({
+ onScanLibrariesClick,
+ onRestartClick,
+ onShutdownClick,
+ isScanning
+}: ServerInfoWidgetProps) => {
const { data: systemInfo, isPending } = useSystemInfo();
return (
@@ -63,6 +69,7 @@ const ServerInfoWidget = ({ onScanLibrariesClick, onRestartClick, onShutdownClic
sx={{
fontWeight: 'bold'
}}
+ disabled={isScanning}
>
{globalize.translate('ButtonScanAllLibraries')}
diff --git a/src/apps/dashboard/routes/index.tsx b/src/apps/dashboard/routes/index.tsx
index 78071200d8..5a6c475d39 100644
--- a/src/apps/dashboard/routes/index.tsx
+++ b/src/apps/dashboard/routes/index.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback, useState } from 'react';
+import React, { useCallback, useMemo, useState } from 'react';
import Page from 'components/Page';
import globalize from 'lib/globalize';
import Box from '@mui/material/Box';
@@ -16,6 +16,7 @@ import RunningTasksWidget from '../components/widgets/RunningTasksWidget';
import DevicesWidget from '../components/widgets/DevicesWidget';
import { useStartTask } from '../features/tasks/api/useStartTask';
import ItemCountsWidget from '../components/widgets/ItemCountsWidget';
+import { TaskState } from '@jellyfin/sdk/lib/generated-client/models/task-state';
export const Component = () => {
const [ isRestartConfirmDialogOpen, setIsRestartConfirmDialogOpen ] = useState(false);
@@ -26,6 +27,10 @@ export const Component = () => {
const { data: tasks } = useLiveTasks({ isHidden: false });
+ const librariesTask = useMemo(() => (
+ tasks?.find((value) => value.Key === 'RefreshLibrary')
+ ), [ tasks ]);
+
const promptRestart = useCallback(() => {
setIsRestartConfirmDialogOpen(true);
}, []);
@@ -94,6 +99,7 @@ export const Component = () => {
onScanLibrariesClick={onScanLibraries}
onRestartClick={promptRestart}
onShutdownClick={promptShutdown}
+ isScanning={librariesTask?.State !== TaskState.Idle}
/>
diff --git a/src/apps/dashboard/routes/libraries/index.tsx b/src/apps/dashboard/routes/libraries/index.tsx
index 5ba9cfac70..462c8c0209 100644
--- a/src/apps/dashboard/routes/libraries/index.tsx
+++ b/src/apps/dashboard/routes/libraries/index.tsx
@@ -70,7 +70,7 @@ export const Component = () => {
}
- loading={librariesTask && librariesTask.State === TaskState.Running}
+ loading={librariesTask && librariesTask.State !== TaskState.Idle}
loadingPosition='start'
variant='outlined'
>