index.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // contexts/User/index.jsx
  2. import React, { useState, useEffect } from 'react';
  3. import { isMobile } from '../../helpers/index.js';
  4. export const StyleContext = React.createContext({
  5. dispatch: () => null,
  6. });
  7. export const StyleProvider = ({ children }) => {
  8. const [state, setState] = useState({
  9. isMobile: false,
  10. showSider: false,
  11. shouldInnerPadding: false,
  12. });
  13. const dispatch = (action) => {
  14. if ('type' in action) {
  15. switch (action.type) {
  16. case 'TOGGLE_SIDER':
  17. setState(prev => ({ ...prev, showSider: !prev.showSider }));
  18. break;
  19. case 'SET_SIDER':
  20. setState(prev => ({ ...prev, showSider: action.payload }));
  21. break;
  22. case 'SET_MOBILE':
  23. setState(prev => ({ ...prev, isMobile: action.payload }));
  24. break;
  25. case 'SET_INNER_PADDING':
  26. setState(prev => ({ ...prev, shouldInnerPadding: action.payload }));
  27. break;
  28. default:
  29. setState(prev => ({ ...prev, ...action }));
  30. }
  31. } else {
  32. setState(prev => ({ ...prev, ...action }));
  33. }
  34. };
  35. useEffect(() => {
  36. const updateIsMobile = () => {
  37. dispatch({ type: 'SET_MOBILE', payload: isMobile() });
  38. };
  39. updateIsMobile();
  40. const updateShowSider = () => {
  41. if (isMobile()) {
  42. dispatch({ type: 'SET_SIDER', payload: false });
  43. } else {
  44. // check pathname
  45. const pathname = window.location.pathname;
  46. console.log(pathname)
  47. if (pathname === '' || pathname === '/' || pathname.includes('/home') || pathname.includes('/chat')) {
  48. dispatch({ type: 'SET_SIDER', payload: false });
  49. dispatch({ type: 'SET_INNER_PADDING', payload: false });
  50. } else {
  51. dispatch({ type: 'SET_SIDER', payload: true });
  52. dispatch({ type: 'SET_INNER_PADDING', payload: true });
  53. }
  54. }
  55. };
  56. updateShowSider()
  57. // Optionally, add event listeners to handle window resize
  58. window.addEventListener('resize', updateIsMobile);
  59. // Cleanup event listener on component unmount
  60. return () => {
  61. window.removeEventListener('resize', updateIsMobile);
  62. };
  63. }, []);
  64. return (
  65. <StyleContext.Provider value={[state, dispatch]}>
  66. {children}
  67. </StyleContext.Provider>
  68. );
  69. };