36 lines
1004 B
TypeScript
Executable File
36 lines
1004 B
TypeScript
Executable File
import React, { useCallback, useState } from "react";
|
|
import { useDispatch, useSelector } from "react-redux";
|
|
import { ArticleStore } from "../domain/articleStore";
|
|
import type { Article } from "../domain/articleEntity";
|
|
import type { ArticleStoreState } from "../data/articleReducer";
|
|
import { getArticleAction, setArticleAction } from "./articleActions";
|
|
import { RootState, useAppSelector } from "store";
|
|
|
|
const articleSelector = (state: RootState): ArticleStoreState => state.article;
|
|
|
|
const useArticleStore = (): ArticleStore => {
|
|
const { isLoading, article, hasError } = useAppSelector(articleSelector);
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
const setArticle = useCallback(
|
|
(article: Article) => setArticleAction(article)(dispatch),
|
|
[dispatch]
|
|
);
|
|
|
|
const getArticle = useCallback(
|
|
(id: string) => getArticleAction(id)(dispatch),
|
|
[dispatch]
|
|
);
|
|
|
|
return {
|
|
article: article,
|
|
isLoading,
|
|
hasError,
|
|
setArticle,
|
|
getArticle,
|
|
};
|
|
};
|
|
|
|
export { useArticleStore };
|