index.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import Filter from './filter';
  2. import {FC, useEffect} from 'react';
  3. import {context, pIdContext, pageContext, useContextReducer, usePIdContextState} from './context';
  4. import TableList from './table';
  5. import {ChildrenFC} from '@utils';
  6. import {PageProvider} from '@components';
  7. type Props = {
  8. id: string,
  9. onClose: () => void,
  10. };
  11. const MenuProvider: ChildrenFC<Pick<Props, 'onClose'>> = function({children, onClose}) {
  12. const state = useContextReducer(onClose);
  13. const {Provider} = context;
  14. return <Provider value={state}>{children}</Provider>;
  15. };
  16. const PIdProvider: ChildrenFC<Pick<Props, 'id'>> = function({children, id}) {
  17. const state = usePIdContextState(id);
  18. const {Provider} = pIdContext;
  19. const dispatch = state[1];
  20. useEffect(function() {
  21. dispatch(id);
  22. }, [dispatch, id]);
  23. return <Provider value={state}>{children}</Provider>;
  24. };
  25. const ChildMenu: FC<Props> = function({id, onClose}) {
  26. return (
  27. <PIdProvider id={id}>
  28. <MenuProvider onClose={onClose}>
  29. <PageProvider context={pageContext}>
  30. <main className='content-main'>
  31. <Filter />
  32. <TableList />
  33. </main>
  34. </PageProvider>
  35. </MenuProvider>
  36. </PIdProvider>
  37. );
  38. };
  39. export default ChildMenu;