Closes #11 Secondary browser is not function for mobile clients

This commit is contained in:
controlol 2021-11-03 21:59:04 +01:00
parent 54b9dbea79
commit ebbd030e84
2 changed files with 86 additions and 34 deletions

View File

@ -45,6 +45,7 @@ export const FileBrowserRemotes = styled.div`
display: flex;
gap: .5rem;
justify-content: flex-start;
flex-wrap: wrap;
`
export const FileBrowserSettings = styled.div`
@ -52,6 +53,7 @@ export const FileBrowserSettings = styled.div`
gap: .5rem;
flex-grow: 1;
justify-content: flex-end;
max-width: 100%;
`
export const BrowserSettingButton = styled(Button)`
@ -82,4 +84,13 @@ export const FileColumnSettingsContainer = styled.form`
display: flex;
flex-direction: column;
gap: .5rem 0;
`
export const RemoteButton = styled(Button)`
max-width: calc(100% - 2rem);
overflow: hidden;
direction: rtl;
text-align: left;
text-overflow: ellipsis;
white-space: nowrap;
`

View File

@ -1,8 +1,8 @@
import React, { Component } from 'react'
import { Button, Checkbox, Cross, PopupContainer, PopupTitle } from '../styled'
import React, { Component, Fragment } from 'react'
import { Checkbox, Cross, PopupContainer, PopupTitle } from '../styled'
import API from '../utils/API'
import FileBrowser from './fileBrowser'
import { BrowserSettingButton, FileBrowserRemotes, FileBrowsersContainer, FileBrowserSettings, FileBrowserWrapper, FileSettingsPopup, FileSettingsHeader, FileColumnSettingsContainer } from './fileBrowser.styled'
import { BrowserSettingButton, FileBrowserRemotes, FileBrowsersContainer, FileBrowserSettings, FileBrowserWrapper, FileSettingsPopup, FileSettingsHeader, FileColumnSettingsContainer, RemoteButton } from './fileBrowser.styled'
import assert from 'assert'
import BrowserSingle from '../assets/icons/browserSingle.svg'
@ -32,7 +32,8 @@ class FileBrowserMenu extends Component {
size: true,
date: false,
datetime: false
}
},
windowWidth: 1920
}
}
@ -46,10 +47,11 @@ class FileBrowserMenu extends Component {
const tempPath = currentPath[0]
currentPath[0] = ""
this.setState({ browserFs, currentPath })
this.setState({ browserFs, currentPath, windowWidth: window.innerWidth })
// add click event listener for closing settings
window.addEventListener('click', this.handleWindowClick)
window.addEventListener("orientationchange", this.handleOrientationChange)
setTimeout(() => {
this.getFiles(0, tempPath)
@ -63,11 +65,14 @@ class FileBrowserMenu extends Component {
localStorage.setItem("shownbrowsercolumns", JSON.stringify(this.state.shownColumns))
window.removeEventListener('click', this.handleWindowClick)
window.removeEventListener("orientationchange", this.handleOrientationChange)
}
// stopPropagation does not work because it is a different event cause
handleWindowClick = () => this.setState({ showFileSettings: false })
handleOrientationChange = () => this.setState({ windowWidth: window.innerWidth })
/**
*
* @param {Number} brIndex identify which browser wants new files
@ -215,6 +220,7 @@ class FileBrowserMenu extends Component {
}
setActiveBrowser = activeBrowser => {
if (this.state.windowWidth < 1200 && this.state.dualBrowser === false) this.switchBrowserMode()
if (this.state.dualBrowser) this.setState({ activeBrowser })
}
@ -231,13 +237,72 @@ class FileBrowserMenu extends Component {
renderRemoteButtons = () => {
return this.props.remotes.map(v => (
<Button key={v.name} onClick={() => this.setRemote(v.name)}> { v.name } </Button>
<RemoteButton key={v.name} onClick={() => this.setRemote(v.name)}> { v.name } </RemoteButton>
))
}
render = () => {
const { files, currentPath, loading, dualBrowser, activeBrowser, shownColumns } = this.state
renderBrowser = () => {
const { files, currentPath, loading, dualBrowser, activeBrowser, shownColumns, windowWidth } = this.state
if (windowWidth >= 1200) return (
<Fragment>
<FileBrowser
setActive={() => this.setActiveBrowser(0)}
action={(a, p) => this.doAction(0, a, p)}
files={files[0]}
updateFiles={path => this.getFiles(0, path)}
currentPath={currentPath[0]}
loading={loading[0]}
shownColumns={shownColumns}
active={activeBrowser === 0}
/>
{
dualBrowser &&
<FileBrowser
setActive={() => this.setActiveBrowser(1)}
action={(a, p) => this.doAction(1, a, p)}
files={files[1]}
updateFiles={path => this.getFiles(1, path)}
currentPath={currentPath[1]}
loading={loading[1]}
shownColumns={shownColumns}
active={activeBrowser === 1 && dualBrowser}
/>
}
</Fragment>
)
return (
<FileBrowser
setActive={() => this.setActiveBrowser(activeBrowser)}
action={(a, p) => this.doAction(activeBrowser, a, p)}
files={files[activeBrowser]}
updateFiles={path => this.getFiles(activeBrowser, path)}
currentPath={currentPath[activeBrowser]}
loading={loading[activeBrowser]}
shownColumns={shownColumns}
active={false}
/>
)
}
renderSwitchBrowser = () => {
const { currentPath, dualBrowser, activeBrowser, windowWidth } = this.state
if (windowWidth < 1200) return (
<RemoteButton onClick={() => this.setActiveBrowser(activeBrowser ? 0 : 1)}>
{ currentPath[activeBrowser ? 0 : 1] }
</RemoteButton>
)
return (
<BrowserSettingButton onClick={this.switchBrowserMode}>
<img src={dualBrowser ? BrowserSingle : BrowserDual} alt={dualBrowser ? "single browser" : "dual browser"} width="20" height="20" />
</BrowserSettingButton>
)
}
render = () => {
return (
<PopupContainer>
{
@ -252,9 +317,7 @@ class FileBrowserMenu extends Component {
{ this.renderRemoteButtons() }
<FileBrowserSettings>
<BrowserSettingButton onClick={this.switchBrowserMode}>
<img src={dualBrowser ? BrowserSingle : BrowserDual} alt={dualBrowser ? "single browser" : "dual browser"} width="20" height="20" />
</BrowserSettingButton>
{ this.renderSwitchBrowser() }
<BrowserSettingButton onClick={this.openFileSettings}>
<img src={SettingsCog} alt="file settings" width="20" height="20" />
</BrowserSettingButton>
@ -262,29 +325,7 @@ class FileBrowserMenu extends Component {
</FileBrowserRemotes>
<FileBrowserWrapper>
<FileBrowser
setActive={() => this.setActiveBrowser(0)}
action={(a, p) => this.doAction(0, a, p)}
files={files[0]}
updateFiles={path => this.getFiles(0, path)}
currentPath={currentPath[0]}
loading={loading[0]}
shownColumns={shownColumns}
active={activeBrowser === 0}
/>
{
dualBrowser &&
<FileBrowser
setActive={() => this.setActiveBrowser(1)}
action={(a, p) => this.doAction(1, a, p)}
files={files[1]}
updateFiles={path => this.getFiles(1, path)}
currentPath={currentPath[1]}
loading={loading[1]}
shownColumns={shownColumns}
active={activeBrowser === 1 && dualBrowser}
/>
}
{ this.renderBrowser() }
</FileBrowserWrapper>
</FileBrowsersContainer>
</PopupContainer>