From 04595a5fb13dae690ec1dfa3603cf734fb217e9b Mon Sep 17 00:00:00 2001 From: Steven Date: Wed, 13 Sep 2023 09:12:51 +0800 Subject: [PATCH] chore: update resource icons --- .../MemoEditor/ResourceListView.tsx | 11 ++- web/src/components/ResourceCard.tsx | 26 ++---- web/src/components/ResourceCover.tsx | 49 ---------- web/src/components/ResourceIcon.tsx | 59 ++++++++---- web/src/components/ResourceItem.tsx | 31 ------- web/src/hooks/useEvent.ts | 23 ----- web/src/less/resource-cover.less | 3 - web/src/pages/ResourcesDashboard.tsx | 92 +------------------ 8 files changed, 57 insertions(+), 237 deletions(-) delete mode 100644 web/src/components/ResourceCover.tsx delete mode 100644 web/src/components/ResourceItem.tsx delete mode 100644 web/src/hooks/useEvent.ts delete mode 100644 web/src/less/resource-cover.less diff --git a/web/src/components/MemoEditor/ResourceListView.tsx b/web/src/components/MemoEditor/ResourceListView.tsx index e4009f5e..1122e637 100644 --- a/web/src/components/MemoEditor/ResourceListView.tsx +++ b/web/src/components/MemoEditor/ResourceListView.tsx @@ -21,11 +21,14 @@ const ResourceListView = (props: Props) => { return (
- - {resource.filename} - handleDeleteResource(resource.id)} /> + + {resource.filename} + handleDeleteResource(resource.id)} + />
); })} diff --git a/web/src/components/ResourceCard.tsx b/web/src/components/ResourceCard.tsx index 99eb21ab..c9aa51f2 100644 --- a/web/src/components/ResourceCard.tsx +++ b/web/src/components/ResourceCard.tsx @@ -1,34 +1,22 @@ -import { useState } from "react"; import { getDateTimeString } from "@/helpers/datetime"; -import Icon from "./Icon"; -import ResourceCover from "./ResourceCover"; +import ResourceIcon from "./ResourceIcon"; import ResourceItemDropdown from "./ResourceItemDropdown"; import "@/less/resource-card.less"; -const ResourceCard = ({ resource, handleCheckClick, handleUncheckClick }: ResourceItemType) => { - const [isSelected, setIsSelected] = useState(false); - - const handleSelectBtnClick = () => { - if (isSelected) { - handleUncheckClick(); - } else { - handleCheckClick(); - } - setIsSelected(!isSelected); - }; +interface Props { + resource: Resource; +} +const ResourceCard = ({ resource }: Props) => { return (
-
-
handleSelectBtnClick()}> - {isSelected ? : } -
+
- +
{resource.filename}
diff --git a/web/src/components/ResourceCover.tsx b/web/src/components/ResourceCover.tsx deleted file mode 100644 index 02e560ad..00000000 --- a/web/src/components/ResourceCover.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from "react"; -import { getResourceType, getResourceUrl } from "@/utils/resource"; -import Icon from "./Icon"; -import showPreviewImageDialog from "./PreviewImageDialog"; -import SquareDiv from "./kit/SquareDiv"; -import "@/less/resource-cover.less"; - -interface ResourceCoverProps { - resource: Resource; -} - -const ResourceCover = ({ resource }: ResourceCoverProps) => { - const resourceType = getResourceType(resource); - const resourceUrl = getResourceUrl(resource); - switch (resourceType) { - case "image/*": - return ( - - showPreviewImageDialog(resourceUrl)} - /> - - ); - case "video/*": - return ; - case "audio/*": - return ; - case "text/*": - return ; - case "application/epub+zip": - return ; - case "application/pdf": - return ; - case "application/msword": - return ; - case "application/msexcel": - return ; - case "application/zip": - return ; - case "application/x-java-archive": - return ; - default: - return ; - } -}; - -export default React.memo(ResourceCover); diff --git a/web/src/components/ResourceIcon.tsx b/web/src/components/ResourceIcon.tsx index 32eb9804..05f48300 100644 --- a/web/src/components/ResourceIcon.tsx +++ b/web/src/components/ResourceIcon.tsx @@ -1,34 +1,55 @@ import classNames from "classnames"; +import React from "react"; import { getResourceType, getResourceUrl } from "@/utils/resource"; import Icon from "./Icon"; import showPreviewImageDialog from "./PreviewImageDialog"; import SquareDiv from "./kit/SquareDiv"; interface Props { - className: string; resource: Resource; + className?: string; + strokeWidth?: number; } const ResourceIcon = (props: Props) => { - const { className, resource } = props; + const { resource } = props; + const resourceType = getResourceType(resource); + const resourceUrl = getResourceUrl(resource); + const className = classNames("w-full h-auto", props.className); + const strokeWidth = props.strokeWidth; - if (getResourceType(resource).startsWith("image")) { - const url = getResourceUrl(resource); - return ( - - showPreviewImageDialog([url], 0)} - decoding="async" - loading="lazy" - /> - - ); + switch (resourceType) { + case "image/*": + return ( + + showPreviewImageDialog(resourceUrl)} + /> + + ); + case "video/*": + return ; + case "audio/*": + return ; + case "text/*": + return ; + case "application/epub+zip": + return ; + case "application/pdf": + return ; + case "application/msword": + return ; + case "application/msexcel": + return ; + case "application/zip": + return ; + case "application/x-java-archive": + return ; + default: + return ; } - - const ResourceIcon = Icon.FileText; - return ; }; -export default ResourceIcon; +export default React.memo(ResourceIcon); diff --git a/web/src/components/ResourceItem.tsx b/web/src/components/ResourceItem.tsx deleted file mode 100644 index 6b00df6a..00000000 --- a/web/src/components/ResourceItem.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { Checkbox } from "@mui/joy"; -import { useState } from "react"; -import ResourceItemDropdown from "./ResourceItemDropdown"; - -const ResourceItem = ({ resource, handleCheckClick, handleUncheckClick }: ResourceItemType) => { - const [isSelected, setIsSelected] = useState(false); - - const handleSelectBtnClick = () => { - if (isSelected) { - handleUncheckClick(); - } else { - handleCheckClick(); - } - setIsSelected(!isSelected); - }; - - return ( -
- - - - {resource.id} - {resource.filename} -
- -
-
- ); -}; - -export default ResourceItem; diff --git a/web/src/hooks/useEvent.ts b/web/src/hooks/useEvent.ts deleted file mode 100644 index bf087157..00000000 --- a/web/src/hooks/useEvent.ts +++ /dev/null @@ -1,23 +0,0 @@ -import React, { DependencyList, EffectCallback, useEffect, useRef } from "react"; - -const useIsoMorphicEffect = (effect: EffectCallback, deps?: DependencyList | undefined) => { - useEffect(effect, deps); -}; - -function useLatestValue(value: T) { - const cache = useRef(value); - - useIsoMorphicEffect(() => { - cache.current = value; - }, [value]); - - return cache; -} - -// TODO: Add React.useEvent ?? once the useEvent hook is available -function useEvent any, P extends any[] = Parameters, R = ReturnType>(cb: (...args: P) => R) { - const cache = useLatestValue(cb); - return React.useCallback((...args: P) => cache.current(...args), [cache]); -} - -export default useEvent; diff --git a/web/src/less/resource-cover.less b/web/src/less/resource-cover.less deleted file mode 100644 index 6ba81ed8..00000000 --- a/web/src/less/resource-cover.less +++ /dev/null @@ -1,3 +0,0 @@ -.resource-cover { - @apply w-20 h-auto ml-auto mr-auto opacity-40; -} diff --git a/web/src/pages/ResourcesDashboard.tsx b/web/src/pages/ResourcesDashboard.tsx index 284d194b..7ccf9cdb 100644 --- a/web/src/pages/ResourcesDashboard.tsx +++ b/web/src/pages/ResourcesDashboard.tsx @@ -7,12 +7,10 @@ import Empty from "@/components/Empty"; import Icon from "@/components/Icon"; import MobileHeader from "@/components/MobileHeader"; import ResourceCard from "@/components/ResourceCard"; -import ResourceItem from "@/components/ResourceItem"; import ResourceSearchBar from "@/components/ResourceSearchBar"; import Dropdown from "@/components/kit/Dropdown"; import { DEFAULT_MEMO_LIMIT } from "@/helpers/consts"; import useCurrentUser from "@/hooks/useCurrentUser"; -import useEvent from "@/hooks/useEvent"; import useLoading from "@/hooks/useLoading"; import { useResourceStore } from "@/store/module"; import { useTranslate } from "@/utils/i18n"; @@ -23,8 +21,6 @@ const ResourcesDashboard = () => { const user = useCurrentUser(); const resourceStore = useResourceStore(); const resources = resourceStore.state.resources; - const [selectedList, setSelectedList] = useState>([]); - const [listStyle, setListStyle] = useState<"GRID" | "TABLE">("TABLE"); const [queryText, setQueryText] = useState(""); const [dragActive, setDragActive] = useState(false); const [isComplete, setIsComplete] = useState(false); @@ -50,19 +46,6 @@ const ResourcesDashboard = () => { }); }, []); - const handleCheckBtnClick = useEvent((resourceId: ResourceId) => { - setSelectedList([...selectedList, resourceId]); - }); - - const handleUncheckBtnClick = useEvent((resourceId: ResourceId) => { - setSelectedList(selectedList.filter((id) => id !== resourceId)); - }); - - const handleStyleChangeBtnClick = (listStyle: "GRID" | "TABLE") => { - setListStyle(listStyle); - setSelectedList([]); - }; - const handleDeleteUnusedResourcesBtnClick = async () => { let warningText = t("resource.warning-text-unused"); const allResources = await fetchAllResources(); @@ -91,27 +74,6 @@ const ResourcesDashboard = () => { }); }; - const handleDeleteSelectedBtnClick = () => { - if (selectedList.length == 0) { - toast.error(t("resource.no-files-selected")); - } else { - const warningText = t("resource.warning-text"); - showCommonDialog({ - title: t("resource.delete-resource"), - content: warningText, - style: "warning", - dialogName: "delete-resource-dialog", - onConfirm: async () => { - for (const resourceId of selectedList) { - await resourceStore.deleteResourceById(resourceId); - } - - setSelectedList([]); - }, - }); - } - }; - const handleFetchMoreResourceBtnClick = async () => { try { const fetchedResource = await resourceStore.fetchResourceListWithLimit(DEFAULT_MEMO_LIMIT, resources.length); @@ -149,7 +111,6 @@ const ResourcesDashboard = () => { if (query === queryText) return; await fetchAllResources(); setQueryText(query); - setSelectedList([]); }; const handleDrag = (e: React.DragEvent) => { @@ -166,24 +127,8 @@ const ResourcesDashboard = () => { () => resources .filter((res: Resource) => (queryText === "" ? true : res.filename.toLowerCase().includes(queryText.toLowerCase()))) - .map((resource) => - listStyle === "TABLE" ? ( - handleCheckBtnClick(resource.id)} - handleUncheckClick={() => handleUncheckBtnClick(resource.id)} - > - ) : ( - handleCheckBtnClick(resource.id)} - handleUncheckClick={() => handleUncheckBtnClick(resource.id)} - > - ) - ), - [resources, queryText, listStyle] + .map((resource) => ), + [resources, queryText] ); const handleDrop = async (e: React.DragEvent) => { @@ -230,11 +175,6 @@ const ResourcesDashboard = () => {
- {selectedList.length > 0 && ( - - )}
{loadingState.isLoading ? ( @@ -294,19 +216,11 @@ const ResourcesDashboard = () => { ) : (
- {listStyle === "TABLE" && ( -
- - ID - {t("common.name")} - -
- )} {resourceList.length === 0 ? (