From 736323f78620514f3e0094a5ae6a577026bcfd5a Mon Sep 17 00:00:00 2001 From: Matthew Rodgers <48635776+AxisMaen@users.noreply.github.com> Date: Sat, 6 Jul 2024 18:51:38 -0400 Subject: [PATCH] add sorting for replay folders and their subdirectories --- .../replay_browser/folder_tree_node.tsx | 38 +++++++++++++----- .../replays/replay_browser/replay_browser.tsx | 40 +++++++++++++------ 2 files changed, 55 insertions(+), 23 deletions(-) diff --git a/src/renderer/pages/replays/replay_browser/folder_tree_node.tsx b/src/renderer/pages/replays/replay_browser/folder_tree_node.tsx index 38f22eb1c..1fc9b196d 100644 --- a/src/renderer/pages/replays/replay_browser/folder_tree_node.tsx +++ b/src/renderer/pages/replays/replay_browser/folder_tree_node.tsx @@ -15,16 +15,41 @@ type FolderTreeNodeProps = { nestLevel?: number; folder: FolderResult; collapsedFolders: readonly string[]; + isReversed: boolean; onClick: (fullPath: string) => void; onToggle: (fullPath: string) => void; }; -export const FolderTreeNode = ({ nestLevel = 0, folder, collapsedFolders, onClick, onToggle }: FolderTreeNodeProps) => { +export const FolderTreeNode = ({ + nestLevel = 0, + folder, + collapsedFolders, + isReversed, + onClick, + onToggle, +}: FolderTreeNodeProps) => { const currentFolder = useReplays((store) => store.currentFolder); const hasChildren = folder.subdirectories.length > 0; const isCollapsed = collapsedFolders.includes(folder.fullPath); const isSelected = currentFolder === folder.fullPath; const labelColor = isSelected ? colors.grayDark : "rgba(255, 255, 255, 0.5)"; + + const getSubdirectoryNodes = () => { + const subdirectories = folder.subdirectories.map((f) => ( + + )); + + return isReversed ? subdirectories.reverse() : subdirectories; + }; + return (
{folder.subdirectories.length === 0 || isCollapsed ? null : ( - {folder.subdirectories.map((f) => ( - - ))} + {getSubdirectoryNodes()} )}
diff --git a/src/renderer/pages/replays/replay_browser/replay_browser.tsx b/src/renderer/pages/replays/replay_browser/replay_browser.tsx index 171d1b723..f18847730 100644 --- a/src/renderer/pages/replays/replay_browser/replay_browser.tsx +++ b/src/renderer/pages/replays/replay_browser/replay_browser.tsx @@ -1,6 +1,7 @@ import { exists } from "@common/exists"; import { css } from "@emotion/react"; import styled from "@emotion/styled"; +import { ArrowDownward, ArrowUpward } from "@mui/icons-material"; import FolderIcon from "@mui/icons-material/Folder"; import SearchIcon from "@mui/icons-material/Search"; import Button from "@mui/material/Button"; @@ -8,7 +9,7 @@ import IconButton from "@mui/material/IconButton"; import List from "@mui/material/List"; import Tooltip from "@mui/material/Tooltip"; import Typography from "@mui/material/Typography"; -import React from "react"; +import React, { useState } from "react"; import { DualPane } from "@/components/dual_pane"; import { BasicFooter } from "@/components/footer/footer"; @@ -50,6 +51,8 @@ export const ReplayBrowser = React.memo(() => { const { files: filteredFiles, hiddenFileCount } = useReplayBrowserList(); const { goToReplayStatsPage } = useReplayBrowserNavigation(); + const [isFolderTreeReversed, setIsFolderTreeReversed] = useState(true); + const setSelectedItem = (index: number | null) => { if (index === null) { void presenter.current.clearSelectedFile(); @@ -84,6 +87,23 @@ export const ReplayBrowser = React.memo(() => { [showError, showSuccess], ); + const onFolderTreeSortClick = () => { + setIsFolderTreeReversed(!isFolderTreeReversed); + }; + + const folderTreeNodes = folderTree.map((folder) => { + return ( + presenter.current.toggleFolder(folder)} + /> + ); + }); + return (
{ leftSide={
- {folderTree.map((folder) => { - return ( - presenter.current.toggleFolder(folder)} - /> - ); - })} + + {isFolderTreeReversed ? folderTreeNodes.reverse() : folderTreeNodes} {loading && (