Advertisement
Oxios

Untitled

Dec 7th, 2022
1,072
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. export type ModalPopupContextValues = {
  2.   activeModal: string;
  3.   showModal: <Options>(activeModal: ModalPopupName, options?: Options) => void;
  4.   hideModal: VoidFunction;
  5. };
  6.  
  7. export const ModalPopupContext = createContext<
  8.   ModalPopupContextValues | undefined
  9. >(undefined);
  10.  
  11. export const useModal = () => {
  12.   const context = useContext(ModalPopupContext);
  13.  
  14.   if (context === undefined) {
  15.     throw new Error('useModal must be used within ModalPopupProvider');
  16.   }
  17.  
  18.   return context;
  19. };
  20.  
  21. // src\features\modal-popup\ModalPopupProvider.tsx
  22. import React, {useMemo, useState} from 'react';
  23. import {ModalRoot, SplitLayout} from '@vkontakte/vkui';
  24.  
  25. import {AddDevToWhiteList} from './modals/AddDevToWhiteList';
  26. import {ChangeAppSecurityStatus} from './modals/ChangeAppSecurityStatus';
  27. import {ChangeAppStatus} from './modals/ChangeAppStatus';
  28. import {ChangeAppVersionStatus} from './modals/ChangeAppVersionStatus';
  29. import {ChangeDeveloperStatus} from './modals/ChangeDeveloperStatus';
  30. import {Dialog} from './modals/Dialog';
  31. import {EditingDeveloperInformation} from './modals/EditingDeveloperInformation';
  32. import {PaymentView} from './modals/PaymentView';
  33. import {ModalPopupContext, ModalPopupContextValues} from './context';
  34. import styles from './ModalPopupProvider.module.css';
  35. import {ModalPopupName} from './modals.entity';
  36.  
  37. export const ModalPopupProvider = ({children}) => {
  38.   const [activeModal, setActiveModal] = useState<string>(null);
  39.   const [options, setOptions] = useState<any>({});
  40.  
  41.   const showModal = (activeModal: ModalPopupName, options?: any) => {
  42.     setActiveModal(activeModal);
  43.     setOptions(options);
  44.   };
  45.  
  46.   const hideModal = () => {
  47.     setActiveModal(null);
  48.   };
  49.  
  50.   const modal = (
  51.     <ModalRoot activeModal={activeModal} onClose={hideModal}>
  52.       <Dialog id={ModalPopupName.DIALOG} options={options} />
  53.       <AddDevToWhiteList id={ModalPopupName.ADD_DEV_TO_WHITE_LIST} />
  54.       <ChangeAppVersionStatus
  55.         id={ModalPopupName.CHANGE_APP_VERSION_STATUS}
  56.         {...options}
  57.       />
  58.       <ChangeAppStatus id={ModalPopupName.CHANGE_APP_STATUS} {...options} />
  59.       <ChangeDeveloperStatus
  60.         id={ModalPopupName.CHANGE_COMPANY_STATUS}
  61.         {...options}
  62.       />
  63.       <ChangeAppSecurityStatus
  64.         id={ModalPopupName.CHANGE_APP_SECURITY_STATUS}
  65.         {...options}
  66.       />
  67.       <EditingDeveloperInformation
  68.         id={ModalPopupName.EDITING_DEVELOPER_INFORMATION}
  69.         {...options}
  70.       />
  71.       <PaymentView id={ModalPopupName.PAYMENT_VIEW} {...options} />
  72.     </ModalRoot>
  73.   );
  74.  
  75.   const modalPopupContextValue = useMemo<ModalPopupContextValues>(
  76.     () => ({
  77.       activeModal,
  78.       showModal,
  79.       hideModal,
  80.     }),
  81.     [activeModal],
  82.   );
  83.  
  84.   return (
  85.     <ModalPopupContext.Provider value={modalPopupContextValue}>
  86.       <SplitLayout modal={modal} className={styles.splitLayout}>
  87.         <div className={styles.wrappedContent}>{children}</div>
  88.       </SplitLayout>
  89.     </ModalPopupContext.Provider>
  90.   );
  91. };
  92.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement