RouteContainer.jsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import {ROUTE_TYPE_FULL, ROUTE_TYPE_IN, ROUTE_TYPE_POP, ROUTE_TYPE_POP_OR_FULL,ROUTE_TYPE_CUSTOM} from "@constants/routes";
  2. import React, {cloneElement} from "react";
  3. import Popup from "@components/Popup";
  4. import SubScreen from "@components/SubScreen";
  5. import {useNavigate} from "react-router-dom";
  6. import {useThemeProvider} from "@contexts/themeContext";
  7. import CSSTransition from "react-transition-group/CSSTransition";
  8. const RouteContainer=(props)=>{
  9. const { children, route,open} = props;
  10. const navigate = useNavigate()
  11. const {isMobile} = useThemeProvider();
  12. const renderIn=()=>{
  13. return (
  14. <>
  15. {children}
  16. </>
  17. );
  18. }
  19. const renderPop=()=>{
  20. // 桌面端默认走居中 popup-big;用户信息(#/settings)改成右侧抽屉式 popup-drawer-right。
  21. // 注意 route 字段是 component,不是 comp;这里同时兜底用 path 判定更稳。
  22. const isSettings = route && (route.path === '#/settings' || route.component === 'settings');
  23. const desktopClass = isSettings ? 'popup-drawer-right' : 'popup-big';
  24. const popupClass = isMobile() ? '' : desktopClass;
  25. return(
  26. <CSSTransition {...props} timeout={500}>
  27. <Popup {...props} popupClass={popupClass}>
  28. {children}
  29. </Popup>
  30. </CSSTransition>
  31. )
  32. }
  33. const renderSub=()=>{
  34. return (
  35. <SubScreen {...props}>
  36. {children}
  37. </SubScreen>
  38. )
  39. }
  40. const renderPopOrFull=()=>{
  41. return (
  42. <>
  43. {
  44. isMobile()?renderSub():renderPop()
  45. }
  46. </>
  47. )
  48. }
  49. const renderCustom=()=>{
  50. return (
  51. <>
  52. <CSSTransition {...props} timeout={500}>
  53. {children}
  54. </CSSTransition>
  55. </>
  56. );
  57. }
  58. const renderComp=()=>{
  59. let comp=(<></>);
  60. if (route.type===ROUTE_TYPE_FULL||route.type===ROUTE_TYPE_IN){
  61. comp=renderIn();
  62. }
  63. else if (route.type===ROUTE_TYPE_POP_OR_FULL){
  64. comp=renderPopOrFull();
  65. }
  66. else if (route.type===ROUTE_TYPE_POP){
  67. comp=renderPop();
  68. }
  69. else if (route.type===ROUTE_TYPE_CUSTOM){
  70. comp=renderCustom();
  71. }
  72. return comp;
  73. }
  74. return (
  75. renderComp()
  76. );
  77. }
  78. export default RouteContainer;