mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
169 lines
5.1 KiB
JavaScript
Executable File
169 lines
5.1 KiB
JavaScript
Executable File
import React from "react"
|
|
import { Motion, spring } from "react-motion"
|
|
import { EviteComponent } from "evite"
|
|
import * as antd from "antd"
|
|
import { createIconRender } from "components/Icons"
|
|
import classnames from "classnames"
|
|
|
|
import "./index.less"
|
|
|
|
export default class BottomBar extends EviteComponent {
|
|
state = {
|
|
allowed: true,
|
|
show: false,
|
|
visible: false,
|
|
creatorActionsVisible: false,
|
|
render: null,
|
|
isManager: false,
|
|
}
|
|
|
|
handleBusEvents = {
|
|
"app.render_initialization": () => {
|
|
this.toggle(false)
|
|
},
|
|
"app.render_initialization_done": () => {
|
|
if (this.isAllowed()) {
|
|
this.toggle(true)
|
|
}
|
|
},
|
|
"app.crash": () => {
|
|
this.toggle(false)
|
|
},
|
|
"locationChange": () => {
|
|
this.toggle(this.isAllowed())
|
|
}
|
|
}
|
|
|
|
componentDidMount = () => {
|
|
this._loadBusEvents()
|
|
|
|
window.app.BottomBarController = {
|
|
toogleVisible: this.toggle,
|
|
isVisible: () => this.state.visible,
|
|
render: (fragment) => {
|
|
this.setState({ render: fragment })
|
|
},
|
|
clear: () => {
|
|
this.setState({ render: null })
|
|
},
|
|
}
|
|
}
|
|
|
|
componentWillUnmount = () => {
|
|
this._unloadBusEvents()
|
|
delete window.app.BottomBarController
|
|
}
|
|
|
|
isAllowed() {
|
|
return app.pageStatement?.bottomBarAllowed !== "undefined" && app.pageStatement?.bottomBarAllowed !== false
|
|
}
|
|
|
|
toggle = (to) => {
|
|
if (!window.isMobile) {
|
|
to = false
|
|
} else {
|
|
to = to ?? !this.state.visible
|
|
}
|
|
|
|
if (!to) {
|
|
this.setState({ show: to }, () => {
|
|
setTimeout(() => {
|
|
this.setState({ visible: to })
|
|
}, 500)
|
|
})
|
|
} else {
|
|
this.setState({ visible: to }, () => {
|
|
this.setState({ show: to })
|
|
})
|
|
}
|
|
}
|
|
|
|
onClickItemId = (id) => {
|
|
window.app.setLocation(`/${id}`)
|
|
}
|
|
|
|
render() {
|
|
if (this.state.render) {
|
|
return <div className="bottomBar">
|
|
{this.state.render}
|
|
</div>
|
|
}
|
|
|
|
if (!this.state.visible) {
|
|
return null
|
|
}
|
|
|
|
return <Motion style={{ y: spring(this.state.show ? 0 : 300) }}>
|
|
{({ y }) => <div
|
|
className="bottomBar"
|
|
style={{
|
|
WebkitTransform: `translate3d(0, ${y}px, 0)`,
|
|
transform: `translate3d(0, ${y}px, 0)`,
|
|
}}
|
|
>
|
|
<div className="items">
|
|
|
|
<div
|
|
key="main"
|
|
id="main"
|
|
className="item"
|
|
onClick={() => window.app.goMain()}
|
|
>
|
|
<div className="icon">
|
|
{createIconRender("Home")}
|
|
</div>
|
|
</div>
|
|
<div
|
|
key="nav"
|
|
id="nav"
|
|
className="item"
|
|
onClick={() => window.app.openNavigationMenu()}
|
|
>
|
|
<div className="icon">
|
|
{createIconRender("Navigation")}
|
|
</div>
|
|
</div>
|
|
<div
|
|
key="createNew"
|
|
id="createNew"
|
|
className={classnames("item", ["primary"])}
|
|
onClick={() => window.app.openCreateNew()}
|
|
>
|
|
<div className="icon">
|
|
{createIconRender("PlusCircle")}
|
|
</div>
|
|
</div>
|
|
<div
|
|
key="settings"
|
|
id="settings"
|
|
className="item"
|
|
onClick={() => window.app.openSettings()}
|
|
>
|
|
<div className="icon">
|
|
{createIconRender("Settings")}
|
|
</div>
|
|
</div>
|
|
{this.props.user ? <div
|
|
key="account"
|
|
id="account"
|
|
className="item"
|
|
onClick={() => window.app.goToAccount()}
|
|
>
|
|
<div className="icon">
|
|
<antd.Avatar shape="square" src={this.props.user?.avatar} />
|
|
</div>
|
|
</div> : <div
|
|
key="login"
|
|
id="login"
|
|
onClick={() => this.onClickItemId("login")}
|
|
className="item"
|
|
>
|
|
<div className="icon">
|
|
{createIconRender("LogIn")}
|
|
</div>
|
|
</div>}
|
|
</div>
|
|
</div>}
|
|
</Motion>
|
|
}
|
|
} |