1- import { useStore , useStoreMap } from "effector-react" ;
2- import * as tasks from "./tasks" ;
3- import * as queryConfig from "./query-config" ;
4-
5- const useQueryConfig = ( ) => {
6- return useStore ( queryConfig . $queryConfig ) ;
7- } ;
8-
9- const useTasks = ( ) => {
10- return useStore ( tasks . $tasks ) ;
11- } ;
12-
13- const useTasksList = ( ) => {
14- return useStoreMap ( {
15- store : tasks . $tasks ,
16- keys : [ "tasksList" ] ,
17- fn : ( state ) => Object . values ( state )
18- } )
19- } ;
20-
21- /**
22- * Можно разруливать на уровне эффектов - но тогда нужно подключать дополнительную логику в стор
23- * @remark Например скрывать/показывать таск при `toggleTask` событии
24- */
25- const useTasksListFiltered = ( ) => {
26- const tasksList = useTasksList ( ) ;
27- const queryConfig = useQueryConfig ( ) ;
28-
29- return tasksList . filter ( task => (
30- queryConfig . completed === undefined ||
31- task . completed === queryConfig . completed
32- ) ) ;
33- } ;
34-
35- /**
36- * @remark Можно добавить потенциально debounce логику
37- */
38- const useLoading = ( ) => {
39- const tasksList = useStore ( tasks . getTasksListFx . pending ) ;
40- const taskDetails = useStore ( tasks . getTaskByIdFx . pending ) ;
41- return { tasksList, taskDetails}
42- } ;
43-
44-
45- const useTask = ( taskId : number ) : import ( "shared/api" ) . Task | undefined => {
46- return useTasks ( ) [ taskId ] ;
47- } ;
48-
49- export const selectors = {
50- useQueryConfig,
51- useTasks,
52- useTask,
53- useLoading,
54- useTasksListFiltered,
55- } ;
56-
57- export { tasks , queryConfig } ;
1+ export * as effects from "./effects" ;
2+ export * as selectors from "./selectors" ;
3+ export * as store from "./store" ;
4+ export * as events from "./events" ;
5+ export * from "./types" ;
0 commit comments