diff --git a/packages/web_ui/src/components/Dropzone.tsx b/packages/web_ui/src/components/Dropzone.tsx index cef95cd6..cc9feb3e 100644 --- a/packages/web_ui/src/components/Dropzone.tsx +++ b/packages/web_ui/src/components/Dropzone.tsx @@ -3,11 +3,19 @@ import { DraggingContext } from "../model/is_dragging"; import { useContext } from "react"; // This component is used to display a dropzone when a file is being dragged over the parent component -export function Dropzone() { +export function Dropzone({ disabled = false }: { disabled?: boolean }) { const isDroppingFile = useContext(DraggingContext); + const textStyle: { color?: string } = {}; + let text = "Drop to upload"; + if (disabled) { + textStyle.color = "red"; + text = "Target is offline"; + } + const borderColor = disabled ? "gray" : "rgb(22, 119, 255)"; + return
@@ -34,9 +42,9 @@ export function Dropzone() { height: "100%", }} > - -

- Drop to upload + +

+ {text}

; diff --git a/packages/web_ui/src/components/SavesList.tsx b/packages/web_ui/src/components/SavesList.tsx index d5eb6ef8..9a962a87 100644 --- a/packages/web_ui/src/components/SavesList.tsx +++ b/packages/web_ui/src/components/SavesList.tsx @@ -363,7 +363,7 @@ export default function SavesList(props: { instance: lib.InstanceDetails }) { zIndex: "1010", }} > - + {saveTable} diff --git a/packages/web_ui/src/components/SiteLayout.tsx b/packages/web_ui/src/components/SiteLayout.tsx index 856ac492..5baece76 100644 --- a/packages/web_ui/src/components/SiteLayout.tsx +++ b/packages/web_ui/src/components/SiteLayout.tsx @@ -13,7 +13,7 @@ import { DraggingContext } from "../model/is_dragging"; const { Header, Sider } = Layout; -function isDropzone(element: HTMLElement | null): boolean { +function isActiveDropzone(element: HTMLElement | null): boolean { if (!element) { return false; } @@ -21,7 +21,7 @@ function isDropzone(element: HTMLElement | null): boolean { let depth = 0; while (element && depth < checkDepth) { if (element.classList.contains("dropzone")) { - return true; + return element.classList.contains("enabled"); } element = element.parentElement; depth += 1; @@ -105,7 +105,7 @@ export default function SiteLayout() { onDrop={(e) => { setDragging(0); // Prevent dropping outside of dropzone - if (!isDropzone(e.target as HTMLElement)) { + if (!isActiveDropzone(e.target as HTMLElement)) { e.preventDefault(); e.stopPropagation(); } @@ -114,7 +114,7 @@ export default function SiteLayout() { onDragOver={(e) => { e.preventDefault(); // Change cursor - if (isDropzone(e.target as HTMLElement)) { + if (isActiveDropzone(e.target as HTMLElement)) { e.dataTransfer.dropEffect = "copy"; } else { e.dataTransfer.dropEffect = "none"; diff --git a/packages/web_ui/src/components/UploadButton.tsx b/packages/web_ui/src/components/UploadButton.tsx index 652ce9a4..cc3dd6b7 100644 --- a/packages/web_ui/src/components/UploadButton.tsx +++ b/packages/web_ui/src/components/UploadButton.tsx @@ -6,13 +6,14 @@ import { DraggingContext } from "../model/is_dragging"; export default function UploadButton(props: React.ComponentProps) { const isDroppingFile = useContext(DraggingContext); + const borderColor = props.disabled ? "gray" : "rgb(22, 119, 255)"; return