| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 | 'use client'import type { Dispatch, SetStateAction } from 'react'import { useCallback, useState } from 'react'import { createContext, useContext } from 'use-context-selector'import { useRouter, useSearchParams } from 'next/navigation'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 AnnotationFullModal from '@/app/components/billing/annotation-full/modal'import ModelModal from '@/app/components/header/account-setting/model-provider-page/model-modal'import type {  ConfigurateMethodEnum,  CustomConfigrationModelFixedFields,  ModelProvider,} from '@/app/components/header/account-setting/model-provider-page/declarations'import Pricing from '@/app/components/billing/pricing'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}export type ModelModalType = {  currentProvider: ModelProvider  currentConfigurateMethod: ConfigurateMethodEnum  currentCustomConfigrationModelFixedFields?: CustomConfigrationModelFixedFields}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>>  setShowPricingModal: Dispatch<SetStateAction<any>>  setShowAnnotationFullModal: () => void  setShowModelModal: Dispatch<SetStateAction<ModalState<ModelModalType> | null>>}>({      setShowAccountSettingModal: () => { },      setShowApiBasedExtensionModal: () => { },      setShowModerationSettingModal: () => { },      setShowExternalDataToolModal: () => { },      setShowPricingModal: () => { },      setShowAnnotationFullModal: () => { },      setShowModelModal: () => {},    })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 [showModelModal, setShowModelModal] = useState<ModalState<ModelModalType> | null>(null)  const searchParams = useSearchParams()  const router = useRouter()  const [showPricingModal, setShowPricingModal] = useState(searchParams.get('show-pricing') === '1')  const [showAnnotationFullModal, setShowAnnotationFullModal] = useState(false)  const handleCancelAccountSettingModal = () => {    setShowAccountSettingModal(null)    if (showAccountSettingModal?.onCancelCallback)      showAccountSettingModal?.onCancelCallback()  }  const handleCancelModerationSettingModal = () => {    setShowModerationSettingModal(null)    if (showModerationSettingModal?.onCancelCallback)      showModerationSettingModal.onCancelCallback()  }  const handleCancelExternalDataToolModal = () => {    setShowExternalDataToolModal(null)    if (showExternalDataToolModal?.onCancelCallback)      showExternalDataToolModal.onCancelCallback()  }  const handleCancelModelModal = useCallback(() => {    setShowModelModal(null)    if (showModelModal?.onCancelCallback)      showModelModal.onCancelCallback()  }, [showModelModal])  const handleSaveModelModal = useCallback(() => {    if (showModelModal?.onSaveCallback)      showModelModal.onSaveCallback(showModelModal.payload)    setShowModelModal(null)  }, [showModelModal])  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,      setShowPricingModal: () => setShowPricingModal(true),      setShowAnnotationFullModal: () => setShowAnnotationFullModal(true),      setShowModelModal,    }}>      <>        {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={handleCancelExternalDataToolModal}              onSave={handleSaveExternalDataTool}              onValidateBeforeSave={handleValidateBeforeSaveExternalDataTool}            />          )        }        {          !!showPricingModal && (            <Pricing onCancel={() => {              if (searchParams.get('show-pricing') === '1')                router.push(location.pathname, { forceOptimisticNavigation: true } as any)              setShowPricingModal(false)            }} />          )        }        {          showAnnotationFullModal && (            <AnnotationFullModal              show={showAnnotationFullModal}              onHide={() => setShowAnnotationFullModal(false)} />          )        }        {          !!showModelModal && (            <ModelModal              provider={showModelModal.payload.currentProvider}              configurateMethod={showModelModal.payload.currentConfigurateMethod}              currentCustomConfigrationModelFixedFields={showModelModal.payload.currentCustomConfigrationModelFixedFields}              onCancel={handleCancelModelModal}              onSave={handleSaveModelModal}            />          )        }      </>    </ModalContext.Provider>  )}export default ModalContext
 |