mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
fix: show download badge on home page inline tool list
The home page's file-uploaded view rendered its own tool list without checking AI feature install status, so download icons disappeared after uploading a file. Now both Quick Actions and All Tools sections show the download badge consistently with the sidebar ToolPanel.
This commit is contained in:
@@ -1,11 +1,12 @@
|
|||||||
import { CATEGORIES, TOOLS } from "@ashim/shared";
|
import { CATEGORIES, PYTHON_SIDECAR_TOOLS, TOOLS } from "@ashim/shared";
|
||||||
import { Loader2 } from "lucide-react";
|
import { Download, Loader2 } from "lucide-react";
|
||||||
import { useCallback, useEffect } from "react";
|
import { useCallback, useEffect } from "react";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
import { ImageViewer } from "@/components/common/image-viewer";
|
import { ImageViewer } from "@/components/common/image-viewer";
|
||||||
import { MultiImageViewer } from "@/components/common/multi-image-viewer";
|
import { MultiImageViewer } from "@/components/common/multi-image-viewer";
|
||||||
import { AppLayout } from "@/components/layout/app-layout";
|
import { AppLayout } from "@/components/layout/app-layout";
|
||||||
import { ICON_MAP } from "@/lib/icon-map";
|
import { ICON_MAP } from "@/lib/icon-map";
|
||||||
|
import { useFeaturesStore } from "@/stores/features-store";
|
||||||
import { useFileStore } from "@/stores/file-store";
|
import { useFileStore } from "@/stores/file-store";
|
||||||
import { useSettingsStore } from "@/stores/settings-store";
|
import { useSettingsStore } from "@/stores/settings-store";
|
||||||
|
|
||||||
@@ -24,10 +25,12 @@ export function HomePage() {
|
|||||||
} = useFileStore();
|
} = useFileStore();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { fetch: fetchSettings } = useSettingsStore();
|
const { fetch: fetchSettings } = useSettingsStore();
|
||||||
|
const { fetch: fetchFeatures, isToolInstalled } = useFeaturesStore();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchSettings();
|
fetchSettings();
|
||||||
}, [fetchSettings]);
|
fetchFeatures();
|
||||||
|
}, [fetchSettings, fetchFeatures]);
|
||||||
|
|
||||||
const handleFiles = useCallback(
|
const handleFiles = useCallback(
|
||||||
(newFiles: File[]) => {
|
(newFiles: File[]) => {
|
||||||
@@ -83,6 +86,8 @@ export function HomePage() {
|
|||||||
const Icon =
|
const Icon =
|
||||||
(ICON_MAP[tool.icon] as React.ComponentType<{ className?: string }>) ??
|
(ICON_MAP[tool.icon] as React.ComponentType<{ className?: string }>) ??
|
||||||
ICON_MAP.FileImage;
|
ICON_MAP.FileImage;
|
||||||
|
const isAi = (PYTHON_SIDECAR_TOOLS as readonly string[]).includes(id);
|
||||||
|
const needsDownload = isAi && !isToolInstalled(id);
|
||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
key={id}
|
key={id}
|
||||||
@@ -94,6 +99,9 @@ export function HomePage() {
|
|||||||
<Icon className="h-4 w-4" />
|
<Icon className="h-4 w-4" />
|
||||||
</div>
|
</div>
|
||||||
<span className="text-xs font-medium text-foreground">{tool.name}</span>
|
<span className="text-xs font-medium text-foreground">{tool.name}</span>
|
||||||
|
{needsDownload && (
|
||||||
|
<Download className="h-3.5 w-3.5 text-muted-foreground ml-auto" />
|
||||||
|
)}
|
||||||
</button>
|
</button>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
@@ -121,6 +129,8 @@ export function HomePage() {
|
|||||||
const Icon =
|
const Icon =
|
||||||
(ICON_MAP[tool.icon] as React.ComponentType<{ className?: string }>) ??
|
(ICON_MAP[tool.icon] as React.ComponentType<{ className?: string }>) ??
|
||||||
ICON_MAP.FileImage;
|
ICON_MAP.FileImage;
|
||||||
|
const isAi = (PYTHON_SIDECAR_TOOLS as readonly string[]).includes(tool.id);
|
||||||
|
const needsDownload = isAi && !isToolInstalled(tool.id);
|
||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
key={tool.id}
|
key={tool.id}
|
||||||
@@ -130,6 +140,9 @@ export function HomePage() {
|
|||||||
>
|
>
|
||||||
<Icon className="h-4 w-4 text-muted-foreground shrink-0" />
|
<Icon className="h-4 w-4 text-muted-foreground shrink-0" />
|
||||||
<span className="text-sm">{tool.name}</span>
|
<span className="text-sm">{tool.name}</span>
|
||||||
|
{needsDownload && (
|
||||||
|
<Download className="h-3.5 w-3.5 text-muted-foreground ml-auto" />
|
||||||
|
)}
|
||||||
</button>
|
</button>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
|||||||
Reference in New Issue
Block a user