mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 18:44:16 +00:00
format
This commit is contained in:
parent
6eef3480b1
commit
f0c9bbef3e
@ -1,80 +1,84 @@
|
|||||||
import React from "react"
|
import React from "react"
|
||||||
|
|
||||||
function deepUnproxy(obj) {
|
function deepUnproxy(obj) {
|
||||||
if (Array.isArray(obj)) {
|
if (Array.isArray(obj)) {
|
||||||
obj = [...obj]
|
obj = [...obj]
|
||||||
} else {
|
} else {
|
||||||
obj = Object.assign({}, obj)
|
obj = Object.assign({}, obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let key in obj) {
|
for (let key in obj) {
|
||||||
if (obj[key] && typeof obj[key] === "object") {
|
if (obj[key] && typeof obj[key] === "object") {
|
||||||
obj[key] = deepUnproxy(obj[key])
|
obj[key] = deepUnproxy(obj[key])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return obj
|
return obj
|
||||||
}
|
}
|
||||||
|
|
||||||
export const usePlayerStateContext = (updater) => {
|
export const usePlayerStateContext = (updater) => {
|
||||||
const [state, setState] = React.useState({ ...app.cores.player.state })
|
const [state, setState] = React.useState({ ...app.cores.player.state })
|
||||||
|
|
||||||
function handleStateChange(newState) {
|
function handleStateChange(newState) {
|
||||||
newState = deepUnproxy(newState)
|
newState = deepUnproxy(newState)
|
||||||
|
|
||||||
// check if any changes happened
|
// check if any changes happened
|
||||||
if (newState === state) {
|
if (newState === state) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
setState(newState)
|
setState(newState)
|
||||||
|
|
||||||
if (typeof updater === "function") {
|
if (typeof updater === "function") {
|
||||||
updater(newState)
|
updater(newState)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
handleStateChange(app.cores.player.state)
|
handleStateChange(app.cores.player.state)
|
||||||
|
|
||||||
app.cores.player.eventBus().on("player.state.update", handleStateChange)
|
app.cores.player.eventBus().on("player.state.update", handleStateChange)
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
app.cores.player.eventBus().off("player.state.update", handleStateChange)
|
app.cores.player
|
||||||
}
|
.eventBus()
|
||||||
}, [])
|
.off("player.state.update", handleStateChange)
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
return [state, setState]
|
return [state, setState]
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Context = React.createContext({})
|
export const Context = React.createContext({})
|
||||||
|
|
||||||
export class WithPlayerContext extends React.Component {
|
export class WithPlayerContext extends React.Component {
|
||||||
state = app.cores.player.state
|
state = app.cores.player.state
|
||||||
|
|
||||||
events = {
|
events = {
|
||||||
"player.state.update": (state) => {
|
"player.state.update": (state) => {
|
||||||
this.setState(state)
|
this.setState(state)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
for (const [event, handler] of Object.entries(this.events)) {
|
for (const [event, handler] of Object.entries(this.events)) {
|
||||||
app.cores.player.eventBus().on(event, handler)
|
app.cores.player.eventBus().on(event, handler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
for (const [event, handler] of Object.entries(this.events)) {
|
for (const [event, handler] of Object.entries(this.events)) {
|
||||||
app.cores.player.eventBus().off(event, handler)
|
app.cores.player.eventBus().off(event, handler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return <Context.Provider value={this.state}>
|
return (
|
||||||
{this.props.children}
|
<Context.Provider value={this.state}>
|
||||||
</Context.Provider>
|
{this.props.children}
|
||||||
}
|
</Context.Provider>
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default WithPlayerContext
|
export default WithPlayerContext
|
Loading…
x
Reference in New Issue
Block a user