This repository has been archived on 2024-11-20. You can view files and clone it, but cannot push or open issues or pull requests.
p61-project/presentation/react/hooks/usePresenterState.ts

24 lines
548 B
TypeScript
Raw Normal View History

2024-03-15 22:48:28 +01:00
import { useEffect, useState } from "react"
2024-03-16 00:36:44 +01:00
import type { Presenter } from "@/presentation/presenters/_Presenter"
2024-03-15 22:48:28 +01:00
export const usePresenterState = <State>(
presenter: Presenter<State>,
): State => {
const [state, setState] = useState<State>(presenter.initialState)
2024-03-15 22:48:28 +01:00
useEffect(() => {
const presenterSubscription = (state: State): void => {
2024-03-15 22:48:28 +01:00
setState(state)
}
presenter.subscribe(presenterSubscription)
return () => {
return presenter.unsubscribe(presenterSubscription)
}
}, [presenter])
return state
}