1
- import { open } from '@tauri-apps/api/dialog'
2
1
import classNames from 'classnames'
3
- import dayjs from 'dayjs'
4
2
import type { FC } from 'react'
5
3
import { memo , useCallback , useMemo , useState } from 'react'
6
4
import { useTranslation } from 'react-i18next'
7
5
import type { ListDataItem } from '../List'
8
6
import { Container } from './styles'
9
7
import { useEditorStore } from '@/stores'
10
- import { readDirectory } from '@/helper/filesys'
11
8
import type { IFile } from '@/helper/filesys'
12
- import { useGlobalCacheData } from '@/hooks'
9
+ import { useGlobalCacheData , useOpen } from '@/hooks'
13
10
import { CacheManager } from '@/helper'
14
11
import { Empty , FileTree , List , Popper } from '@/components'
15
12
import styled from 'styled-components'
@@ -21,15 +18,16 @@ const RecentListBottom = styled.div`
21
18
text-align: center;
22
19
23
20
&:hover {
24
- background-color: ${ props => props . theme . tipsBgColor } ;
21
+ background-color: ${ ( props ) => props . theme . tipsBgColor } ;
25
22
}
26
23
`
27
24
28
25
const Explorer : FC < ExplorerProps > = ( props ) => {
29
26
const { t } = useTranslation ( )
30
- const { folderData, activeId, setFolderData , addOpenedFile, setActiveId } = useEditorStore ( )
27
+ const { folderData, activeId, addOpenedFile, setActiveId } = useEditorStore ( )
31
28
const [ popperOpen , setPopperOpen ] = useState ( false )
32
29
const [ cache ] = useGlobalCacheData ( )
30
+ const { openFolderDialog, openFolder } = useOpen ( )
33
31
34
32
const handleSelect = ( item : IFile ) => {
35
33
if ( item . kind === 'dir' ) return
@@ -38,32 +36,18 @@ const Explorer: FC<ExplorerProps> = (props) => {
38
36
setActiveId ( item . id )
39
37
}
40
38
41
- const openRir = useCallback ( async ( dir : string ) => {
42
- try {
43
- const res = await readDirectory ( dir )
44
- CacheManager . writeCache ( 'openFolderHistory' , { path : dir , time : dayjs ( ) } )
45
- setFolderData ( res )
46
- } catch ( error ) {
47
- console . error ( 'error' , error )
48
- }
49
- } , [ setFolderData ] )
50
-
51
39
const handleClearRecent = ( ) => {
52
40
CacheManager . writeCache ( 'openFolderHistory' , [ ] )
53
41
setPopperOpen ( false )
54
42
}
55
43
56
- const handleOpenDirClick = async ( ) => {
57
- const dir = await open ( { directory : true , recursive : true } )
58
-
59
- if ( typeof dir !== 'string' ) return
60
- openRir ( dir )
61
- }
62
-
63
- const handleOpenHistoryListItemClick = useCallback ( ( item : ListDataItem ) => {
64
- openRir ( item . title )
65
- setPopperOpen ( false )
66
- } , [ openRir ] )
44
+ const handleOpenHistoryListItemClick = useCallback (
45
+ ( item : ListDataItem ) => {
46
+ openFolder ( item . title )
47
+ setPopperOpen ( false )
48
+ } ,
49
+ [ openFolder ] ,
50
+ )
67
51
68
52
const listData = useMemo (
69
53
( ) =>
@@ -79,14 +63,14 @@ const Explorer: FC<ExplorerProps> = (props) => {
79
63
80
64
return (
81
65
< Container className = { containerCLs } >
82
- < div className = " explorer-header" >
66
+ < div className = ' explorer-header' >
83
67
< small > EXPLORER</ small >
84
- < div className = " flex" />
68
+ < div className = ' flex' />
85
69
</ div >
86
- < div className = " h-full w-full overflow-auto" >
70
+ < div className = ' h-full w-full overflow-auto' >
87
71
{ folderData && folderData . length > 1 ? (
88
72
< FileTree
89
- className = " flex-1"
73
+ className = ' flex-1'
90
74
data = { folderData }
91
75
activeId = { activeId }
92
76
onSelect = { handleSelect }
@@ -95,12 +79,12 @@ const Explorer: FC<ExplorerProps> = (props) => {
95
79
< Empty />
96
80
) }
97
81
</ div >
98
- < div className = " explorer-bottom" >
99
- < small className = " flex-1 cursor-pointer" onClick = { handleOpenDirClick } >
82
+ < div className = ' explorer-bottom' >
83
+ < small className = ' flex-1 cursor-pointer' onClick = { openFolderDialog } >
100
84
{ t ( 'file.openDir' ) }
101
85
</ small >
102
86
< Popper
103
- placement = " top-end"
87
+ placement = ' top-end'
104
88
onClickAway = { ( ) => setPopperOpen ( false ) }
105
89
open = { popperOpen }
106
90
content = {
@@ -114,10 +98,12 @@ const Explorer: FC<ExplorerProps> = (props) => {
114
98
</ >
115
99
}
116
100
>
117
- { listData . length > 0 ? < i
118
- className = "ri-more-2-fill icon-border cursor-pointer"
119
- onClick = { ( ) => setPopperOpen ( true ) }
120
- /> : null }
101
+ { listData . length > 0 ? (
102
+ < i
103
+ className = 'ri-more-2-fill icon-border cursor-pointer'
104
+ onClick = { ( ) => setPopperOpen ( true ) }
105
+ />
106
+ ) : null }
121
107
</ Popper >
122
108
</ div >
123
109
</ Container >
0 commit comments