Show "My tracks" directly in main menu (fixes #136)
This commit is contained in:
parent
5395712c3a
commit
25ec75e781
|
@ -84,14 +84,19 @@ const App = connect((state) => ({login: state.login}))(function App({login}) {
|
||||||
|
|
||||||
<Menu.Menu position="right">
|
<Menu.Menu position="right">
|
||||||
{login ? (
|
{login ? (
|
||||||
<Dropdown item trigger={<Avatar user={login} className={styles.avatar} />}>
|
<>
|
||||||
<Dropdown.Menu>
|
<Link component={MenuItemForLink} to="/my/tracks" as="a">
|
||||||
<Link to="/upload" component={DropdownItemForLink} icon="cloud upload" text="Upload tracks" />
|
My Tracks
|
||||||
<Link to="/settings" component={DropdownItemForLink} icon="cog" text="Settings" />
|
</Link>
|
||||||
<Dropdown.Divider />
|
<Dropdown item trigger={<Avatar user={login} className={styles.avatar} />}>
|
||||||
<Link to="/logout" component={DropdownItemForLink} icon="sign-out" text="Logout" />
|
<Dropdown.Menu>
|
||||||
</Dropdown.Menu>
|
<Link to="/upload" component={DropdownItemForLink} icon="cloud upload" text="Upload tracks" />
|
||||||
</Dropdown>
|
<Link to="/settings" component={DropdownItemForLink} icon="cog" text="Settings" />
|
||||||
|
<Dropdown.Divider />
|
||||||
|
<Link to="/logout" component={DropdownItemForLink} icon="sign-out" text="Logout" />
|
||||||
|
</Dropdown.Menu>
|
||||||
|
</Dropdown>
|
||||||
|
</>
|
||||||
) : (
|
) : (
|
||||||
<Menu.Item>
|
<Menu.Item>
|
||||||
<LoginButton compact />
|
<LoginButton compact />
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import React from 'react'
|
import React, {useCallback} from 'react'
|
||||||
import {connect} from 'react-redux'
|
import {connect} from 'react-redux'
|
||||||
import {Button, Message, Item, Menu, Loader, Pagination, Icon} from 'semantic-ui-react'
|
import {Button, Message, Item, Header, Loader, Pagination, Icon} from 'semantic-ui-react'
|
||||||
import {useObservable} from 'rxjs-hooks'
|
import {useObservable} from 'rxjs-hooks'
|
||||||
import {Link, useHistory, useRouteMatch} from 'react-router-dom'
|
import {Link} from 'react-router-dom'
|
||||||
import {of, from, concat} from 'rxjs'
|
import {of, from, concat} from 'rxjs'
|
||||||
import {map, switchMap, distinctUntilChanged} from 'rxjs/operators'
|
import {map, switchMap, distinctUntilChanged} from 'rxjs/operators'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
|
@ -12,33 +12,6 @@ import {Avatar, Page, StripMarkdown} from 'components'
|
||||||
import api from 'api'
|
import api from 'api'
|
||||||
import {useQueryParam} from 'query'
|
import {useQueryParam} from 'query'
|
||||||
|
|
||||||
function TracksPageTabs() {
|
|
||||||
const history = useHistory()
|
|
||||||
|
|
||||||
const onClick = React.useCallback(
|
|
||||||
(e, data) => {
|
|
||||||
history.push(data.name)
|
|
||||||
},
|
|
||||||
[history]
|
|
||||||
)
|
|
||||||
|
|
||||||
const isOwnTracksPage = Boolean(useRouteMatch('/my/tracks'))
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Menu pointing secondary>
|
|
||||||
<Menu.Item name="/tracks" active={!isOwnTracksPage} {...{onClick}}>
|
|
||||||
Tracks
|
|
||||||
</Menu.Item>
|
|
||||||
<Menu.Item name="/my/tracks" active={isOwnTracksPage} {...{onClick}} />
|
|
||||||
<Menu.Item name="/upload" position="right" {...{onClick}}>
|
|
||||||
<Button color="green" compact size="small">
|
|
||||||
Upload
|
|
||||||
</Button>
|
|
||||||
</Menu.Item>
|
|
||||||
</Menu>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
function TrackList({privateTracks}: {privateTracks: boolean}) {
|
function TrackList({privateTracks}: {privateTracks: boolean}) {
|
||||||
const [page, setPage] = useQueryParam<number>('page', 1, Number)
|
const [page, setPage] = useQueryParam<number>('page', 1, Number)
|
||||||
|
|
||||||
|
@ -147,10 +120,26 @@ export function TrackListItem({track, privateTracks = false}) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function UploadButton({navigate, ...props}) {
|
||||||
|
const onClick = useCallback(
|
||||||
|
(e) => {
|
||||||
|
e.preventDefault()
|
||||||
|
navigate()
|
||||||
|
},
|
||||||
|
[navigate]
|
||||||
|
)
|
||||||
|
return (
|
||||||
|
<Button onClick={onClick} {...props} color="green" style={{float: 'right'}}>
|
||||||
|
Upload
|
||||||
|
</Button>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
const TracksPage = connect((state) => ({login: (state as any).login}))(function TracksPage({login, privateTracks}) {
|
const TracksPage = connect((state) => ({login: (state as any).login}))(function TracksPage({login, privateTracks}) {
|
||||||
return (
|
return (
|
||||||
<Page>
|
<Page>
|
||||||
{login ? <TracksPageTabs /> : null}
|
<Header as='h2'>{privateTracks ? 'My tracks' : 'Public tracks'}</Header>
|
||||||
|
{privateTracks && <Link component={UploadButton} to="/upload" />}
|
||||||
<TrackList {...{privateTracks}} />
|
<TrackList {...{privateTracks}} />
|
||||||
</Page>
|
</Page>
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue