This commit is contained in:
SrGooglo 2025-02-19 16:32:52 +00:00
parent 6eef3480b1
commit f0c9bbef3e

View File

@ -1,80 +1,84 @@
import React from "react"
function deepUnproxy(obj) {
if (Array.isArray(obj)) {
obj = [...obj]
} else {
obj = Object.assign({}, obj)
}
if (Array.isArray(obj)) {
obj = [...obj]
} else {
obj = Object.assign({}, obj)
}
for (let key in obj) {
if (obj[key] && typeof obj[key] === "object") {
obj[key] = deepUnproxy(obj[key])
}
}
for (let key in obj) {
if (obj[key] && typeof obj[key] === "object") {
obj[key] = deepUnproxy(obj[key])
}
}
return obj
return obj
}
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) {
newState = deepUnproxy(newState)
function handleStateChange(newState) {
newState = deepUnproxy(newState)
// check if any changes happened
if (newState === state) {
return
}
// check if any changes happened
if (newState === state) {
return
}
setState(newState)
setState(newState)
if (typeof updater === "function") {
updater(newState)
}
}
if (typeof updater === "function") {
updater(newState)
}
}
React.useEffect(() => {
handleStateChange(app.cores.player.state)
React.useEffect(() => {
handleStateChange(app.cores.player.state)
app.cores.player.eventBus().on("player.state.update", handleStateChange)
app.cores.player.eventBus().on("player.state.update", handleStateChange)
return () => {
app.cores.player.eventBus().off("player.state.update", handleStateChange)
}
}, [])
return () => {
app.cores.player
.eventBus()
.off("player.state.update", handleStateChange)
}
}, [])
return [state, setState]
return [state, setState]
}
export const Context = React.createContext({})
export class WithPlayerContext extends React.Component {
state = app.cores.player.state
state = app.cores.player.state
events = {
"player.state.update": (state) => {
this.setState(state)
},
}
events = {
"player.state.update": (state) => {
this.setState(state)
},
}
componentDidMount() {
for (const [event, handler] of Object.entries(this.events)) {
app.cores.player.eventBus().on(event, handler)
}
}
componentDidMount() {
for (const [event, handler] of Object.entries(this.events)) {
app.cores.player.eventBus().on(event, handler)
}
}
componentWillUnmount() {
for (const [event, handler] of Object.entries(this.events)) {
app.cores.player.eventBus().off(event, handler)
}
}
componentWillUnmount() {
for (const [event, handler] of Object.entries(this.events)) {
app.cores.player.eventBus().off(event, handler)
}
}
render() {
return <Context.Provider value={this.state}>
{this.props.children}
</Context.Provider>
}
render() {
return (
<Context.Provider value={this.state}>
{this.props.children}
</Context.Provider>
)
}
}
export default WithPlayerContext
export default WithPlayerContext