From 3650864a2a6179c8dcf10314268b5c4574cda28a Mon Sep 17 00:00:00 2001 From: subnub Date: Thu, 20 Feb 2025 19:07:29 -0500 Subject: [PATCH] added animations --- .../middleware/folders/folder-middleware.ts | 1 - src/components/ContextMenu/ContextMenu.tsx | 17 ++++++++++++++--- src/components/FileInfoPopup/FileInfoPopup.tsx | 18 ++++++++++++++---- src/components/MoverPopup/MoverPopup.tsx | 13 +++++++++++-- src/components/SharePopup/SharePopup.tsx | 13 +++++++++++-- src/styles/styles.scss | 4 ++++ 6 files changed, 54 insertions(+), 12 deletions(-) diff --git a/backend/middleware/folders/folder-middleware.ts b/backend/middleware/folders/folder-middleware.ts index 5d4707a..9e1f69f 100644 --- a/backend/middleware/folders/folder-middleware.ts +++ b/backend/middleware/folders/folder-middleware.ts @@ -10,7 +10,6 @@ export const moveFolderListValidationRules = [ query("folderIDs") .optional() .isArray() - .isLength({ min: 1 }) .withMessage("FolderIDs must be an array of strings"), middlewareValidationFunction, ]; diff --git a/src/components/ContextMenu/ContextMenu.tsx b/src/components/ContextMenu/ContextMenu.tsx index dcd8296..08ffb71 100644 --- a/src/components/ContextMenu/ContextMenu.tsx +++ b/src/components/ContextMenu/ContextMenu.tsx @@ -11,6 +11,7 @@ import { FileInterface } from "../../types/file"; import { useNavigate } from "react-router-dom"; import { useActions } from "../../hooks/actions"; import { FolderInterface } from "../../types/folders"; +import classNames from "classnames"; export interface ContextMenuProps { closeContext: () => void; @@ -33,6 +34,7 @@ const ContextMenu: React.FC = memo((props) => { Y: 0, set: false, }); + const [animate, setAnimate] = useState(false); const { closeContext, contextSelected, @@ -134,6 +136,10 @@ const ContextMenu: React.FC = memo((props) => { } }; + useEffect(() => { + setAnimate(true); + }, []); + const outterWrapperClick = (e: React.MouseEvent) => { e.stopPropagation(); if ((e.target as HTMLDivElement).id !== "context-wrapper") { @@ -151,15 +157,20 @@ const ContextMenu: React.FC = memo((props) => {
diff --git a/src/components/FileInfoPopup/FileInfoPopup.tsx b/src/components/FileInfoPopup/FileInfoPopup.tsx index f1fe028..6523326 100644 --- a/src/components/FileInfoPopup/FileInfoPopup.tsx +++ b/src/components/FileInfoPopup/FileInfoPopup.tsx @@ -1,4 +1,4 @@ -import { useEffect, useMemo } from "react"; +import { useEffect, useMemo, useState } from "react"; import { useAppDispatch, useAppSelector } from "../../hooks/store"; import { downloadFileAPI } from "../../api/filesAPI"; import CloseIcon from "../../icons/CloseIcon"; @@ -29,6 +29,7 @@ const FileInfoPopup = () => { clickStopPropagation, ...contextMenuState } = useContextMenu(); + const [animate, setAnimate] = useState(false); const fileExtension = getFileExtension(file.filename, 3); @@ -42,7 +43,8 @@ const FileInfoPopup = () => { const fileSize = bytes(file.metadata.size); const closePhotoViewer = () => { - dispatch(resetPopupSelect()); + setAnimate(false); + setTimeout(() => dispatch(resetPopupSelect()), 200); }; const downloadItem = () => { @@ -56,7 +58,8 @@ const FileInfoPopup = () => { ) { return; } - dispatch(resetPopupSelect()); + setAnimate(false); + setTimeout(() => dispatch(resetPopupSelect()), 200); }; const permissionText = (() => { @@ -74,6 +77,10 @@ const FileInfoPopup = () => { toast.success("Filename Copied"); }; + useEffect(() => { + setAnimate(true); + }, []); + useEffect(() => { const handleBack = () => { dispatch(resetPopupSelect()); @@ -136,7 +143,10 @@ const FileInfoPopup = () => {
-
+
{ const [selectedFolder, setSelectedFolder] = useState( null ); + const [animate, setAnimate] = useState(false); const multiSelectMode = useAppSelector( (state) => state.selected.multiSelectMode ); @@ -119,6 +120,10 @@ const MoverPopup = () => { } })(); + useEffect(() => { + setAnimate(true); + }, []); + const onHomeClick = () => { setSearch(""); setDebouncedSearch(""); @@ -175,7 +180,8 @@ const MoverPopup = () => { const closeMoverModal = (e: React.MouseEvent) => { const target = e.target as HTMLElement; if (target.id !== "outer-wrapper") return; - dispatch(resetMoveModal()); + setAnimate(false); + setTimeout(() => dispatch(resetMoveModal()), 200); }; return ( @@ -192,7 +198,10 @@ const MoverPopup = () => { />
-
+
{ const dispatch = useAppDispatch(); const { refetch: refetchFiles } = useFiles(false); const { refetch: refetchQuickFiles } = useQuickFiles(false); + const [animate, setAnimate] = useState(false); const imageColor = getFileColor(file.filename); @@ -126,7 +127,8 @@ const SharePopup = memo(() => { }; const closeShareModal = () => { - dispatch(resetShareModal()); + setAnimate(false); + setTimeout(() => dispatch(resetShareModal()), 200); }; const outterWrapperClick = (e: any) => { @@ -160,6 +162,10 @@ const SharePopup = memo(() => { setShareType(file.metadata.linkType ? file.metadata.linkType : "private"); }, [file._id, file.metadata.link, file.metadata.linkType]); + useEffect(() => { + setAnimate(true); + }, []); + const handleSelectChange = async (value: string) => { if (value === "private") { await removeLink(); @@ -207,7 +213,10 @@ const SharePopup = memo(() => {
-
+

Share file