mirror of
https://github.com/theoludwig/p61-project.git
synced 2024-07-17 07:00:12 +02:00
22 lines
530 B
TypeScript
22 lines
530 B
TypeScript
|
import { useEffect, useState } from "react"
|
||
|
|
||
|
import type { Presenter } from "@/data/infrastructure/presenters/_Presenter"
|
||
|
|
||
|
export const usePresenterState = <S>(presenter: Presenter<S>): S => {
|
||
|
const [state, setState] = useState<S>(presenter.initialState)
|
||
|
|
||
|
useEffect(() => {
|
||
|
const presenterSubscription = (state: S): void => {
|
||
|
setState(state)
|
||
|
}
|
||
|
|
||
|
presenter.subscribe(presenterSubscription)
|
||
|
|
||
|
return () => {
|
||
|
return presenter.unsubscribe(presenterSubscription)
|
||
|
}
|
||
|
}, [presenter])
|
||
|
|
||
|
return state
|
||
|
}
|