add loading state

This commit is contained in:
controlol
2021-11-01 20:30:41 +01:00
parent 1b032ec4c7
commit 116ecdfb72

View File

@@ -1,4 +1,4 @@
import { Component } from 'react' import React, { Component } from 'react'
import { Button, Cross, PopupContainer, PopupTitle } from '../styled' import { Button, Cross, PopupContainer, PopupTitle } from '../styled'
import API from '../utils/API' import API from '../utils/API'
import FileBrowser from './fileBrowser' import FileBrowser from './fileBrowser'
@@ -19,6 +19,7 @@ class FileBrowserMenu extends Component {
], ],
currentPath: ["", ""], currentPath: ["", ""],
browserFs: ["", ""], browserFs: ["", ""],
loading: [false, false],
errMessage: "", errMessage: "",
dualBrowser: false dualBrowser: false
} }
@@ -48,6 +49,10 @@ class FileBrowserMenu extends Component {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
assert(brIndex === 0 || brIndex === 1, {brIndex}) assert(brIndex === 0 || brIndex === 1, {brIndex})
let { loading } = this.state
loading[brIndex] = true
this.setState({ loading })
if (newPath === "") newPath = "/" if (newPath === "") newPath = "/"
let { browserFs } = this.state let { browserFs } = this.state
@@ -64,13 +69,21 @@ class FileBrowserMenu extends Component {
.then(response => { .then(response => {
if (typeof response.data.list !== "object") return reject(new Error("Invalid response")) if (typeof response.data.list !== "object") return reject(new Error("Invalid response"))
if (response.data.list.length > 100) response.data.list.length = 100
let { files } = this.state let { files } = this.state
files[brIndex] = response.data.list files[brIndex] = response.data.list
this.setState({ files, currentPath, errMessage: "" }) loading[brIndex] = false
this.setState({ files, currentPath, errMessage: "", loading })
return resolve() return resolve()
}) })
.catch(reject) .catch(() => {
let { loading } = this.state
loading[brIndex] = false
this.setState({ loading })
return reject()
})
}) })
} }
@@ -110,12 +123,12 @@ class FileBrowserMenu extends Component {
renderRemoteButtons = brIndex => { renderRemoteButtons = brIndex => {
assert( brIndex === 0 || brIndex === 1, {brIndex}) assert( brIndex === 0 || brIndex === 1, {brIndex})
return this.props.remotes.map(v => ( return this.props.remotes.map(v => (
<Button onClick={() => this.setRemote(brIndex, v.name)}> { v.name } </Button> <Button key={v.name} onClick={() => this.setRemote(brIndex, v.name)}> { v.name } </Button>
)) ))
} }
render = () => { render = () => {
const { files, currentPath } = this.state const { files, currentPath, loading } = this.state
return ( return (
<PopupContainer> <PopupContainer>
@@ -133,6 +146,7 @@ class FileBrowserMenu extends Component {
files={files[0]} files={files[0]}
updateFiles={path => this.getFiles(0, path)} updateFiles={path => this.getFiles(0, path)}
currentPath={currentPath[0]} currentPath={currentPath[0]}
loading={loading[0]}
/> />
</FileBrowserWrapper> </FileBrowserWrapper>
</FileBrowsersContainer> </FileBrowsersContainer>
@@ -141,4 +155,8 @@ class FileBrowserMenu extends Component {
} }
} }
export default FileBrowserMenu const compareProps = (prevProps, nextProps) => {
return true
}
export default React.memo(FileBrowserMenu, compareProps)