diff --git a/packages/webamp/demo/images/icons/internet-folder-32x32.png b/packages/webamp/demo/images/icons/internet-folder-32x32.png new file mode 100644 index 00000000..c9aac1f6 Binary files /dev/null and b/packages/webamp/demo/images/icons/internet-folder-32x32.png differ diff --git a/packages/webamp/demo/js/DemoDesktop.tsx b/packages/webamp/demo/js/DemoDesktop.tsx index ee5b4b23..4ce435cd 100644 --- a/packages/webamp/demo/js/DemoDesktop.tsx +++ b/packages/webamp/demo/js/DemoDesktop.tsx @@ -6,6 +6,8 @@ import SkinIcon from "./SkinIcon"; import { /* defaultInitialTracks, */ SHOW_DESKTOP_ICONS } from "./config"; import { useWindowSize } from "../../js/hooks"; import avaliableSkins from "./avaliableSkins"; +import DesktopLinkIcon from "./DesktopLinkIcon"; +import museumIcon from "../images/icons/internet-folder-32x32.png"; // import MilkIcon from "./MilkIcon"; interface Props { @@ -34,7 +36,7 @@ const DemoDesktop = ({ webamp }: Props) => { */ ...avaliableSkins.map((skin) => { return ; - }) + }), /* { name: "105", }} /> - */ + */ ); } return ( diff --git a/packages/webamp/demo/js/DesktopLinkIcon.tsx b/packages/webamp/demo/js/DesktopLinkIcon.tsx new file mode 100644 index 00000000..7f88d95a --- /dev/null +++ b/packages/webamp/demo/js/DesktopLinkIcon.tsx @@ -0,0 +1,52 @@ +import React, { useEffect, useState, useRef } from "react"; +import classnames from "classnames"; + +interface Props { + iconUrl: string; + name: string; + href: string; +} + +const DesktopLinkIcon = ({ iconUrl, href, name }: Props) => { + const ref = useRef(null); + const [selected, setSelected] = useState(false); + + useEffect(() => { + if (!selected) { + return; + } + const handleClick = (e: MouseEvent) => { + if (ref.current != null && ref.current.contains(e.target as Element)) { + return; + } + setSelected(false); + }; + document.addEventListener("click", handleClick); + return () => document.removeEventListener("click", handleClick); + }, [selected]); + + return ( + { + setSelected(false); + }} + onClick={(e) => { + if (!selected) { + e.preventDefault(); + } + setSelected(true); + }} + className={classnames("desktop-icon", { selected })} + > + +
{name}
+
+ ); +}; + +export default DesktopLinkIcon;