| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | 'use client'import type { Dispatch, SetStateAction } from 'react'import { useState } from 'react'import { createContext, useContext } from 'use-context-selector'import AccountSetting from '@/app/components/header/account-setting'import ApiBasedExtensionModal from '@/app/components/header/account-setting/api-based-extension-page/modal'import ModerationSettingModal from '@/app/components/app/configuration/toolbox/moderation/moderation-setting-modal'import ExternalDataToolModal from '@/app/components/app/configuration/tools/external-data-tool-modal'import type { ModerationConfig } from '@/models/debug'import type {  ApiBasedExtension,  ExternalDataTool,} from '@/models/common'export type ModalState<T> = {  payload: T  onCancelCallback?: () => void  onSaveCallback?: (newPayload: T) => void  onValidateBeforeSaveCallback?: (newPayload: T) => boolean}const ModalContext = createContext<{  setShowAccountSettingModal: Dispatch<SetStateAction<ModalState<string> | null>>  setShowApiBasedExtensionModal: Dispatch<SetStateAction<ModalState<ApiBasedExtension> | null>>  setShowModerationSettingModal: Dispatch<SetStateAction<ModalState<ModerationConfig> | null>>  setShowExternalDataToolModal: Dispatch<SetStateAction<ModalState<ExternalDataTool> | null>>}>({  setShowAccountSettingModal: () => {},  setShowApiBasedExtensionModal: () => {},  setShowModerationSettingModal: () => {},  setShowExternalDataToolModal: () => {},})export const useModalContext = () => useContext(ModalContext)type ModalContextProviderProps = {  children: React.ReactNode}export const ModalContextProvider = ({  children,}: ModalContextProviderProps) => {  const [showAccountSettingModal, setShowAccountSettingModal] = useState<ModalState<string> | null>(null)  const [showApiBasedExtensionModal, setShowApiBasedExtensionModal] = useState<ModalState<ApiBasedExtension> | null>(null)  const [showModerationSettingModal, setShowModerationSettingModal] = useState<ModalState<ModerationConfig> | null>(null)  const [showExternalDataToolModal, setShowExternalDataToolModal] = useState<ModalState<ExternalDataTool> | null>(null)  const handleCancelAccountSettingModal = () => {    setShowAccountSettingModal(null)    if (showAccountSettingModal?.onCancelCallback)      showAccountSettingModal?.onCancelCallback()  }  const handleCancelModerationSettingModal = () => {    setShowModerationSettingModal(null)    if (showModerationSettingModal?.onCancelCallback)      showModerationSettingModal.onCancelCallback()  }  const handleSaveApiBasedExtension = (newApiBasedExtension: ApiBasedExtension) => {    if (showApiBasedExtensionModal?.onSaveCallback)      showApiBasedExtensionModal.onSaveCallback(newApiBasedExtension)    setShowApiBasedExtensionModal(null)  }  const handleSaveModeration = (newModerationConfig: ModerationConfig) => {    if (showModerationSettingModal?.onSaveCallback)      showModerationSettingModal.onSaveCallback(newModerationConfig)    setShowModerationSettingModal(null)  }  const handleSaveExternalDataTool = (newExternalDataTool: ExternalDataTool) => {    if (showExternalDataToolModal?.onSaveCallback)      showExternalDataToolModal.onSaveCallback(newExternalDataTool)    setShowExternalDataToolModal(null)  }  const handleValidateBeforeSaveExternalDataTool = (newExternalDataTool: ExternalDataTool) => {    if (showExternalDataToolModal?.onValidateBeforeSaveCallback)      return showExternalDataToolModal?.onValidateBeforeSaveCallback(newExternalDataTool)    return true  }  return (    <ModalContext.Provider value={{      setShowAccountSettingModal,      setShowApiBasedExtensionModal,      setShowModerationSettingModal,      setShowExternalDataToolModal,    }}>      <>        {children}        {          !!showAccountSettingModal && (            <AccountSetting              activeTab={showAccountSettingModal.payload}              onCancel={handleCancelAccountSettingModal}            />          )        }        {          !!showApiBasedExtensionModal && (            <ApiBasedExtensionModal              data={showApiBasedExtensionModal.payload}              onCancel={() => setShowApiBasedExtensionModal(null)}              onSave={handleSaveApiBasedExtension}            />          )        }        {          !!showModerationSettingModal && (            <ModerationSettingModal              data={showModerationSettingModal.payload}              onCancel={handleCancelModerationSettingModal}              onSave={handleSaveModeration}            />          )        }        {          !!showExternalDataToolModal && (            <ExternalDataToolModal              data={showExternalDataToolModal.payload}              onCancel={() => setShowExternalDataToolModal(null)}              onSave={handleSaveExternalDataTool}              onValidateBeforeSave={handleValidateBeforeSaveExternalDataTool}            />          )        }      </>    </ModalContext.Provider>  )}export default ModalContext
 |