99 Tooltip ,
1010 useColorModeValue ,
1111 Box ,
12+ SlideFade ,
1213} from "@chakra-ui/react" ;
13- import React , { useContext , useRef } from "react" ;
14+ import React , { useContext , useRef , useState } from "react" ;
1415import { IContext } from "../context" ;
1516import { FaListUl } from "react-icons/fa" ;
1617// import { AiTwotoneCopy } from "react-icons/ai";
@@ -25,6 +26,7 @@ import { Link, useLocation } from "react-router-dom";
2526import { copyToClip } from "../../../utils/copy-clip" ;
2627import useFileUrl from "../../../hooks/useFileUrl" ;
2728import Uploader , { UploaderHandle } from "./uploader" ;
29+ import Search from "./search" ;
2830
2931const Header = ( ) => {
3032 const { t } = useTranslation ( ) ;
@@ -46,16 +48,14 @@ const Header = () => {
4648 logos . split ( "," ) . shift ( ) ,
4749 logos . split ( "," ) . pop ( )
4850 ) as string ;
49- const { pathname } = useLocation ( ) ;
5051 const uploadRef = useRef < UploaderHandle > ( null ) ;
52+ const [ isSearch , setIsSearch ] = useState ( false ) ;
5153 return (
5254 < Flex className = "header" px = "2" py = "2" justify = "space-between" w = "full" >
5355 < Link to = "/" className = "logo" >
5456 { logo . includes ( "http" ) ? (
5557 < Image
56- fallback = {
57- < Spinner color = { getSetting ( "icon color" ) || "#1890ff" } />
58- }
58+ fallback = { < Spinner color = { getSetting ( "icon color" ) || "#1890ff" } /> }
5959 rounded = "lg"
6060 h = "44px"
6161 w = "auto"
@@ -66,113 +66,117 @@ const Header = () => {
6666 ) }
6767 </ Link >
6868 < HStack className = "buttons" spacing = "2" >
69- { type === "file" && (
70- < Tooltip
71- shouldWrapChildren
72- hasArrow
73- placement = "bottom"
74- label = { t ( "Download" ) }
75- >
76- < Icon
77- cursor = "pointer"
78- boxSize = { 6 }
79- as = { BsFillArrowDownCircleFill }
80- onClick = { ( ) => {
81- if ( type === "file" ) {
82- let url = fileUrl ( ) ;
83- window . open ( url , "_blank" ) ;
84- return ;
85- }
86- // if (multiSelect) {
87- // downPack(selectFiles);
88- // return;
89- // }
90- // if (type === "folder") {
91- // downPack(files);
92- // return;
93- // }
94- } }
95- />
96- </ Tooltip >
69+ { [ "folder" , "search" ] . includes ( type ) && (
70+ < Search isSearch = { isSearch } setIsSearch = { setIsSearch } />
9771 ) }
98- { type === "folder" &&
99- ! getSetting ( "no upload" ) . split ( "," ) . includes ( meta . driver ) &&
100- ( meta . upload || loggedIn ) && (
101- < Box >
72+ { ! isSearch && (
73+ < SlideFade in = { ! isSearch } offsetX = "20px" offsetY = { 0 } >
74+ < HStack spacing = "2" >
75+ { type === "file" && (
76+ < Tooltip
77+ shouldWrapChildren
78+ hasArrow
79+ placement = "bottom"
80+ label = { t ( "Download" ) }
81+ >
82+ < Icon
83+ cursor = "pointer"
84+ boxSize = { 6 }
85+ as = { BsFillArrowDownCircleFill }
86+ onClick = { ( ) => {
87+ if ( type === "file" ) {
88+ let url = fileUrl ( ) ;
89+ window . open ( url , "_blank" ) ;
90+ return ;
91+ }
92+ } }
93+ />
94+ </ Tooltip >
95+ ) }
96+ { type === "folder" &&
97+ ! getSetting ( "no upload" ) . split ( "," ) . includes ( meta . driver ) &&
98+ ( meta . upload || loggedIn ) && (
99+ < Box >
100+ < Tooltip
101+ shouldWrapChildren
102+ hasArrow
103+ placement = "bottom"
104+ label = { t ( "Upload file" ) }
105+ >
106+ < Icon
107+ cursor = "pointer"
108+ boxSize = { 6 }
109+ as = { BsFillArrowUpCircleFill }
110+ onClick = { ( ) => {
111+ uploadRef . current ! . upload ( ) ;
112+ } }
113+ />
114+ </ Tooltip >
115+ < Uploader ref = { uploadRef } />
116+ </ Box >
117+ ) }
118+ { type !== "error" && (
119+ < Tooltip
120+ shouldWrapChildren
121+ hasArrow
122+ placement = "bottom"
123+ label = { t ( "Copy direct link" ) }
124+ >
125+ < Icon
126+ cursor = "pointer"
127+ boxSize = { 6 }
128+ as = { IoIosCopy }
129+ onClick = { ( ) => {
130+ let content = "" ;
131+ if ( type === "file" ) {
132+ content = fileUrl ( ) ;
133+ } else {
134+ let files_ = files ;
135+ if ( multiSelect ) {
136+ files_ = selectFiles ;
137+ }
138+ content = files_
139+ . filter ( ( file ) => file . type !== 1 )
140+ . map ( ( file ) => {
141+ return fileUrl ( file ) ;
142+ } )
143+ . join ( "\n" ) ;
144+ }
145+ copyToClip ( content ) ;
146+ toast ( {
147+ title : t ( "Copied" ) ,
148+ status : "success" ,
149+ duration : 3000 ,
150+ isClosable : true ,
151+ } ) ;
152+ } }
153+ />
154+ </ Tooltip >
155+ ) }
102156 < Tooltip
103157 shouldWrapChildren
104158 hasArrow
105159 placement = "bottom"
106- label = { t ( "Upload file" ) }
160+ label = { t ( "switch to layout view" , {
161+ layout : t ( show === "list" ? "grid" : "list" ) ,
162+ } ) }
107163 >
108164 < Icon
109- cursor = "pointer"
110165 boxSize = { 6 }
111- as = { BsFillArrowUpCircleFill }
166+ cursor = "pointer"
112167 onClick = { ( ) => {
113- uploadRef . current ! . upload ( ) ;
168+ setShow ! ( show === "list" ? "grid" : "list" ) ;
169+ localStorage . setItem (
170+ "show" ,
171+ show === "list" ? "grid" : "list"
172+ ) ;
114173 } }
174+ as = { show === "list" ? BsFillGridFill : FaListUl }
115175 />
116176 </ Tooltip >
117- < Uploader ref = { uploadRef } />
118- </ Box >
119- ) }
120- { type !== "error" && (
121- < Tooltip
122- shouldWrapChildren
123- hasArrow
124- placement = "bottom"
125- label = { t ( "Copy direct link" ) }
126- >
127- < Icon
128- cursor = "pointer"
129- boxSize = { 6 }
130- as = { IoIosCopy }
131- onClick = { ( ) => {
132- let content = "" ;
133- if ( type === "file" ) {
134- content = fileUrl ( ) ;
135- } else {
136- let files_ = files ;
137- if ( multiSelect ) {
138- files_ = selectFiles ;
139- }
140- content = files_
141- . filter ( ( file ) => file . type !== 1 )
142- . map ( ( file ) => {
143- return fileUrl ( file ) ;
144- } )
145- . join ( "\n" ) ;
146- }
147- copyToClip ( content ) ;
148- toast ( {
149- title : t ( "Copied" ) ,
150- status : "success" ,
151- duration : 3000 ,
152- isClosable : true ,
153- } ) ;
154- } }
155- />
156- </ Tooltip >
177+ </ HStack >
178+ </ SlideFade >
157179 ) }
158- < Tooltip
159- shouldWrapChildren
160- hasArrow
161- placement = "bottom"
162- label = { t ( "switch to layout view" , {
163- layout : t ( show === "list" ? "grid" : "list" ) ,
164- } ) }
165- >
166- < Icon
167- boxSize = { 6 }
168- cursor = "pointer"
169- onClick = { ( ) => {
170- setShow ! ( show === "list" ? "grid" : "list" ) ;
171- localStorage . setItem ( "show" , show === "list" ? "grid" : "list" ) ;
172- } }
173- as = { show === "list" ? BsFillGridFill : FaListUl }
174- />
175- </ Tooltip >
176180 </ HStack >
177181 </ Flex >
178182 ) ;
0 commit comments