@kizenapps/engine 0.2.2 → 0.3.0-edc2730
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -6
- package/dist/{chunk-FU3KL5LA.js → chunk-2MGW5YZ6.js} +5 -5
- package/dist/{chunk-FU3KL5LA.js.map → chunk-2MGW5YZ6.js.map} +1 -1
- package/dist/{chunk-KYLFVA5T.js → chunk-5ITM37KQ.js} +3 -3
- package/dist/{chunk-KYLFVA5T.js.map → chunk-5ITM37KQ.js.map} +1 -1
- package/dist/{chunk-PFEFU3ID.js → chunk-7F6OJQQJ.js} +3 -3
- package/dist/{chunk-PFEFU3ID.js.map → chunk-7F6OJQQJ.js.map} +1 -1
- package/dist/{chunk-H5I2KPRA.js → chunk-A6ZFHDF3.js} +3 -3
- package/dist/{chunk-H5I2KPRA.js.map → chunk-A6ZFHDF3.js.map} +1 -1
- package/dist/{chunk-NACHIQYN.js → chunk-D3MYWM32.js} +5 -5
- package/dist/{chunk-NACHIQYN.js.map → chunk-D3MYWM32.js.map} +1 -1
- package/dist/{chunk-LWIAZAKH.js → chunk-HTP5DKJZ.js} +4 -4
- package/dist/{chunk-LWIAZAKH.js.map → chunk-HTP5DKJZ.js.map} +1 -1
- package/dist/{chunk-TFNOKBLD.js → chunk-OV2LTZHB.js} +3 -3
- package/dist/{chunk-TFNOKBLD.js.map → chunk-OV2LTZHB.js.map} +1 -1
- package/dist/{chunk-NXPBXPPT.js → chunk-TVSR7UNB.js} +3 -3
- package/dist/{chunk-NXPBXPPT.js.map → chunk-TVSR7UNB.js.map} +1 -1
- package/dist/{chunk-Z7522QNC.js → chunk-XHL4J5DZ.js} +3 -3
- package/dist/{chunk-Z7522QNC.js.map → chunk-XHL4J5DZ.js.map} +1 -1
- package/dist/communication.js +2 -2
- package/dist/contexts/base.js +4 -4
- package/dist/contexts/floatingFrame.js +5 -5
- package/dist/contexts/recordDetail.js +5 -5
- package/dist/index.js +3 -3
- package/dist/react.d.ts +8 -8
- package/dist/react.js +16 -16
- package/dist/react.js.map +1 -1
- package/dist/util.js +6 -6
- package/dist/vite.d.ts +3 -3
- package/dist/vite.js +2 -2
- package/dist/vite.js.map +1 -1
- package/dist/workers/calendarSource.worker.js +6 -6
- package/dist/workers/floatingFrame.worker.js +7 -7
- package/dist/workers/generic.worker.js +6 -6
- package/dist/workers/recordDetail.worker.js +7 -7
- package/package.json +2 -2
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/react/context/terminators.tsx","../src/react/context/session.tsx","../src/react/context/appState.tsx","../src/react/context/runnerState.tsx","../src/react/context/modals.tsx","../src/react/context/monitoring.tsx","../src/react/context/history.tsx","../src/react/context/network.tsx","../src/react/context/translation.tsx","../src/react/hooks/useCalendarSourceCustomScript.ts","../src/react/context/toast.tsx","../src/react/hooks/useCalendarSourceData.ts","../src/react/hooks/useFloatingFrameCustomScript.ts","../src/react/hooks/useGenericPluginCustomScript.ts","../src/react/hooks/useRecordDetailCustomScript.ts","../src/react/hooks/usePluginCustomHTML.ts","../src/react/hooks/useCalendarSourceReset.ts","../src/react/hooks/useManualInteraction.ts","../src/react/hooks/usePluginCallback.ts","../src/react/hooks/usePluginPage.ts","../src/react/context/floatingFrame.tsx","../src/react/hooks/useFloatingFrame.tsx","../src/react/hooks/useLocationChange.ts","../src/react/context/index.tsx","../src/react/components/PluginBoostrapSuccess.tsx","../src/react/components/RouteScriptRunner.tsx","../src/react/context/setupAssistant.tsx"],"names":["createContext","useCallback","jsx","useContext","useState","useMemo","useRef","useEffect","args","viewportHeight","minimized","currentSide","script","value"],"mappings":"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","file":"react.js","sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n type FC,\n type ReactNode,\n} from 'react';\nimport type { TerminatorContent, Terminators } from '../../types/run.js';\n\ninterface TerminatorsContextValue {\n terminators: Terminators;\n cleanupWorkers: () => void;\n}\n\nconst TerminatorsContext = createContext<TerminatorsContextValue | null>(null);\n\nexport const TerminatorsWrapper: FC<{\n children: ReactNode;\n}> = ({ children }) => {\n const terminators = useRef({} as TerminatorContent);\n\n const cleanupWorkers = useCallback(() => {\n Object.keys(terminators.current).forEach((key) => {\n terminators.current[key]?.forEach((fn) => {\n fn();\n });\n terminators.current[key] = [];\n });\n }, []);\n\n useEffect(() => {\n return () => {\n cleanupWorkers();\n };\n }, [cleanupWorkers]);\n\n return (\n <TerminatorsContext.Provider value={{ terminators, cleanupWorkers }}>\n {children}\n </TerminatorsContext.Provider>\n );\n};\n\nexport const useTerminators = (): TerminatorsContextValue => {\n const context = useContext(TerminatorsContext);\n\n if (!context) {\n throw new Error('useTerminators must be used within a TerminatorsWrapper');\n }\n\n return context;\n};\n","import { createContext, useCallback, useContext, useState, type FC, type ReactNode } from 'react';\nimport type { InternalSessionData, SetInternalSessionDataFn } from '../../types/contexts.js';\n\ninterface SessionDataContextValue {\n sessionData: InternalSessionData;\n setSessionData: SetInternalSessionDataFn;\n}\n\nconst SessionDataContext = createContext<SessionDataContextValue | null>(null);\n\nexport const SessionDataWrapper: FC<{\n children: ReactNode;\n}> = ({ children }) => {\n const [sessionData, _setSessionData] = useState<InternalSessionData>({});\n\n const setSessionData = useCallback((pluginId: string, update: InternalSessionData) => {\n _setSessionData((prev) => ({\n ...prev,\n [pluginId]: {\n ...(prev[pluginId] as InternalSessionData),\n ...update,\n },\n }));\n }, []);\n\n return (\n <SessionDataContext.Provider value={{ sessionData, setSessionData }}>\n {children}\n </SessionDataContext.Provider>\n );\n};\n\nexport const useSessionData = (): SessionDataContextValue => {\n const context = useContext(SessionDataContext);\n\n if (!context) {\n throw new Error('useSessionData must be used within a SessionDataWrapper');\n }\n\n return context;\n};\n","import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type FC,\n type ReactNode,\n} from 'react';\nimport type {\n PartialBusiness,\n PartialClientObject,\n PartialTeamMember,\n PartialUser,\n UnknownJSON,\n} from '../../types/common.js';\n\nconst AppStateContext = createContext<AppStateContextValue | null>(null);\n\nexport interface AppStateWrapperProps {\n bootstrapPlugins?: {\n id: string;\n api_name: string;\n }[];\n userConfigs?: { config: UnknownJSON; api_name: string }[];\n children: (context: {\n waitingOnRouteScript: boolean;\n hasFinishedBootstrapping: boolean;\n }) => ReactNode;\n user: PartialUser;\n teamMember: PartialTeamMember;\n business: PartialBusiness;\n clientObject?: PartialClientObject | undefined;\n appPath: string;\n}\n\nexport type RouteScriptRunState = Record<\n string,\n {\n waitingOnRouteScript: boolean;\n }\n>;\ninterface AppStateContextValue {\n installedPluginAPINamesToIds: Record<string, string>;\n userConfigsByApiName: Record<string, UnknownJSON>;\n user: PartialUser;\n teamMember: PartialTeamMember;\n business: PartialBusiness;\n clientObject?: PartialClientObject | undefined;\n appPath: string;\n onInitialBootstrap: () => void;\n setRouteScriptRunState: React.Dispatch<React.SetStateAction<RouteScriptRunState>>;\n}\n\nexport const AppStateWrapper: FC<AppStateWrapperProps> = ({\n children,\n bootstrapPlugins = [],\n userConfigs = [],\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n}) => {\n // Track whether the app has become fully visible already, since we don't want to show a blocking loader\n // if a plugin is later enabled after the initial load\n const [hasFinishedBootstrapping, setHasFinishedBootstrapping] = useState(false);\n\n const [routeScriptRunState, setRouteScriptRunState] = useState<RouteScriptRunState>({});\n\n const waitingOnRouteScript = useMemo(() => {\n return Object.values(routeScriptRunState).some((state) => state.waitingOnRouteScript);\n }, [routeScriptRunState]);\n\n const installedPluginAPINamesToIds = useMemo(() => {\n return bootstrapPlugins.reduce((acc, plugin) => {\n return {\n ...acc,\n [plugin.api_name]: plugin.id,\n };\n }, {});\n }, [bootstrapPlugins]);\n\n const userConfigsByApiName = useMemo(() => {\n return userConfigs.reduce((acc, item) => {\n return {\n ...acc,\n [item.api_name]: item.config,\n };\n }, {});\n }, [userConfigs]);\n\n const onInitialBootstrap = useCallback(() => {\n setHasFinishedBootstrapping(true);\n }, []);\n\n return (\n <AppStateContext.Provider\n value={{\n installedPluginAPINamesToIds,\n userConfigsByApiName,\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n onInitialBootstrap,\n setRouteScriptRunState,\n }}\n >\n {children({\n waitingOnRouteScript,\n hasFinishedBootstrapping,\n })}\n </AppStateContext.Provider>\n );\n};\n\nexport const useAppState = (): AppStateContextValue => {\n const context = useContext(AppStateContext);\n\n if (!context) {\n throw new Error('useAppState must be used within an AppStateWrapper');\n }\n\n return context;\n};\n","import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type FC,\n type ReactNode,\n} from 'react';\nimport { INDICATOR_TYPE } from '../../communication/constants.js';\n\nconst RunnerStateContext = createContext<RunnerStateContextValue | null>(null);\n\ntype GetNewStateFn = (currentState: RunnerStateEntry) => RunnerStateEntry;\n\ninterface RunnerStateContextValue {\n getRunnerStateUpdater: (key: string) => (getNewState: GetNewStateFn) => void;\n getRunnerState: (key?: string) => RunnerStateEntry;\n}\n\ninterface RunnerStateEntry {\n indicator: INDICATOR_TYPE;\n hidden: boolean;\n pending: boolean;\n}\n\ntype RunnerState = Record<string, RunnerStateEntry>;\n\ninterface RunnerStateWrapperProps {\n children: (showLoadingIndicator: boolean) => ReactNode;\n}\n\nexport const RunnerStateWrapper: FC<RunnerStateWrapperProps> = ({ children }) => {\n const [runnerState, setRunnerState] = useState<RunnerState>({});\n\n const getRunnerStateUpdater = useCallback(\n (key: string) => (getNewState: GetNewStateFn) => {\n setRunnerState((prev: RunnerState) => {\n const result = {\n ...prev,\n [key]: getNewState(\n prev[key] ?? { indicator: INDICATOR_TYPE.NONE, hidden: false, pending: false },\n ),\n };\n return result;\n });\n },\n [],\n );\n\n const getRunnerState = useCallback(\n (key?: string) => {\n if (!key || !runnerState[key]) {\n return {\n indicator: INDICATOR_TYPE.NONE,\n hidden: false,\n pending: false,\n };\n }\n return {\n ...runnerState[key],\n };\n },\n [runnerState],\n );\n\n const showLoadingIndicator = useMemo(() => {\n const keys = Object.keys(runnerState);\n return (\n keys.length > 0 && keys.some((name) => runnerState[name]?.indicator === INDICATOR_TYPE.BLOCK)\n );\n }, [runnerState]);\n\n return (\n <RunnerStateContext.Provider\n value={{\n getRunnerStateUpdater,\n getRunnerState,\n }}\n >\n {children(showLoadingIndicator)}\n </RunnerStateContext.Provider>\n );\n};\n\nexport const useRunnerState = (): RunnerStateContextValue => {\n const context = useContext(RunnerStateContext);\n\n if (!context) {\n throw new Error('useRunnerState must be used within a RunnerStateWrapper');\n }\n\n return context;\n};\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type FC,\n type ReactNode,\n} from 'react';\nimport type {\n CreateRecordModalQueue,\n CreateRelatedRecordModalQueue,\n ModalCancelEventSource,\n ModalConfig,\n ModalQueue,\n} from '../../types/modals.js';\nimport type { UnknownJSON } from '../../types/common.js';\n\ninterface ModalsContextValue {\n modalState: {\n props: {\n show: boolean;\n onConfirm: (values: UnknownJSON) => void;\n onHide: (eventSource: ModalCancelEventSource, ...args: unknown[]) => void;\n };\n };\n showModal: (config: ModalConfig, cb: () => void) => void;\n showCreateRecordModal: (objectId: string, cb: (result: UnknownJSON) => void) => void;\n showCreateRelatedRecordModal: (\n objectId: string,\n relatedEntityId: string,\n cb: (result: UnknownJSON) => void,\n ) => void;\n onCreateRecordComplete: (result: UnknownJSON) => void;\n onCreateRelatedRecordComplete: (result: UnknownJSON) => void;\n}\n\nexport interface ExposedModals {\n handleShowModal: ModalsContextValue['showModal'];\n handleShowCreateRecordModal: ModalsContextValue['showCreateRecordModal'];\n handleShowCreateRelatedRecordModal: ModalsContextValue['showCreateRelatedRecordModal'];\n derivedModalState: ModalsContextValue['modalState'] & {\n config: ModalConfig;\n };\n handleCreateRecordComplete: (result: UnknownJSON) => void;\n handleCreateRelatedRecordComplete: (result: UnknownJSON) => void;\n showCreateRecordModal: boolean;\n createRecordModalObjectId: string;\n showCreateRelatedRecordModal: boolean;\n showPluginModal: boolean;\n pluginApiName: string;\n createRelatedRecordModalObjectId: string;\n createRelatedRecordModalRelatedEntityId: string;\n}\n\nexport interface ModalWrapperContextArgs {\n showing: boolean;\n show: boolean;\n showPrompt: () => void;\n onConfirm: () => void;\n onHide: (...args: unknown[]) => void;\n children: (modals: ExposedModals) => ReactNode;\n}\n\nconst ModalsContext = createContext<ModalsContextValue | null>(null);\n\nexport const ModalsWrapper: FC<ModalWrapperContextArgs> = ({\n children,\n showing,\n showPrompt,\n show,\n onConfirm,\n onHide,\n}) => {\n const [modalQueue, setModalQueue] = useState<ModalQueue>([]);\n const [createRecordModalQueue, setCreateRecordModalQueue] = useState<CreateRecordModalQueue>([]);\n const [createRelatedRecordModalQueue, setCreateRelatedRecordModalQueue] =\n useState<CreateRelatedRecordModalQueue>([]);\n\n const configRef = useRef<ModalConfig | undefined>(undefined);\n const cbRef = useRef<((...args: unknown[]) => void) | undefined>(undefined);\n\n const handleShowModal = useCallback((config: ModalConfig, cb: () => void) => {\n setModalQueue((prev) => [...prev, { config, cb }]);\n }, []);\n\n const handleShowCreateRecordModal = useCallback(\n (objectId: string, cb: (result: UnknownJSON) => void) => {\n setCreateRecordModalQueue((prev) => [...prev, { objectId, cb }]);\n },\n [],\n );\n\n const handleShowCreateRelatedRecordModal = useCallback(\n (objectId: string, relatedEntityId: string, cb: (result: UnknownJSON) => void) => {\n setCreateRelatedRecordModalQueue((prev) => [...prev, { objectId, relatedEntityId, cb }]);\n },\n [],\n );\n\n const handleCreateRecordComplete = useCallback(\n (result: UnknownJSON) => {\n const current = createRecordModalQueue[0];\n current?.cb(result);\n setCreateRecordModalQueue((prev) => prev.slice(1));\n },\n [createRecordModalQueue],\n );\n\n const handleCreateRelatedRecordComplete = useCallback(\n (result: UnknownJSON) => {\n const current = createRelatedRecordModalQueue[0];\n current?.cb(result);\n setCreateRelatedRecordModalQueue((prev) => prev.slice(1));\n },\n [createRelatedRecordModalQueue],\n );\n\n useEffect(() => {\n if (modalQueue.length > 0 && !showing) {\n configRef.current = modalQueue[0]?.config;\n cbRef.current = modalQueue[0]?.cb;\n showPrompt();\n }\n }, [modalQueue, showing, showPrompt]);\n\n const completeModal = useCallback(() => {\n configRef.current = undefined;\n cbRef.current = undefined;\n setModalQueue((prev) => prev.slice(1));\n }, []);\n\n const derivedModalState = useMemo(() => {\n return {\n props: {\n show,\n onConfirm: (values: UnknownJSON) => {\n onConfirm();\n if (cbRef.current) {\n cbRef.current({ canceled: false, values });\n }\n completeModal();\n },\n onHide: (eventSource: ModalCancelEventSource, ...args: unknown[]) => {\n onHide(...args);\n if (cbRef.current) {\n cbRef.current({ canceled: true, values: {}, eventSource });\n }\n completeModal();\n },\n },\n config: configRef.current ?? {},\n };\n }, [onConfirm, onHide, show, completeModal]);\n\n return (\n <ModalsContext.Provider\n value={{\n modalState: derivedModalState,\n showModal: handleShowModal,\n showCreateRecordModal: handleShowCreateRecordModal,\n showCreateRelatedRecordModal: handleShowCreateRelatedRecordModal,\n onCreateRecordComplete: handleCreateRecordComplete,\n onCreateRelatedRecordComplete: handleCreateRelatedRecordComplete,\n }}\n >\n {children({\n showPluginModal: derivedModalState.props.show,\n pluginApiName: derivedModalState.config.pluginApiName ?? '',\n handleShowModal,\n handleShowCreateRecordModal: handleShowCreateRecordModal,\n handleShowCreateRelatedRecordModal: handleShowCreateRelatedRecordModal,\n derivedModalState,\n handleCreateRecordComplete,\n handleCreateRelatedRecordComplete,\n showCreateRecordModal: createRecordModalQueue.length > 0,\n createRecordModalObjectId: createRecordModalQueue[0]?.objectId ?? '',\n showCreateRelatedRecordModal: createRelatedRecordModalQueue.length > 0,\n createRelatedRecordModalObjectId: createRelatedRecordModalQueue[0]?.objectId ?? '',\n createRelatedRecordModalRelatedEntityId:\n createRelatedRecordModalQueue[0]?.relatedEntityId ?? '',\n })}\n </ModalsContext.Provider>\n );\n};\n\nexport const useModals = (): ModalsContextValue => {\n const context = useContext(ModalsContext);\n\n if (!context) {\n throw new Error('useModals must be used within a ModalsWrapper');\n }\n\n return context;\n};\n","import { createContext, useCallback, useContext, type FC } from 'react';\n\nexport interface Extra {\n error?: unknown;\n workerName: string;\n pluginApiName?: string;\n objectId?: string;\n entityId?: string;\n}\n\nexport interface MonitoringWrapperProps {\n monitoringExceptionHelper: (error: Error, extra: { extra: Extra }) => void;\n children: React.ReactNode;\n}\n\ninterface MonitoringContextValue {\n sendException: (error: Error, extra: Extra) => void;\n}\n\nconst MonitoringContext = createContext<MonitoringContextValue | null>(null);\n\nexport const MonitoringWrapper: FC<MonitoringWrapperProps> = ({\n children,\n monitoringExceptionHelper,\n}) => {\n const sendException = useCallback(\n (error: Error, extra: Extra) => {\n monitoringExceptionHelper(error, {\n extra,\n });\n },\n [monitoringExceptionHelper],\n );\n\n return (\n <MonitoringContext.Provider\n value={{\n sendException,\n }}\n >\n {children}\n </MonitoringContext.Provider>\n );\n};\n\nexport const useMonitoring = (): MonitoringContextValue => {\n const context = useContext(MonitoringContext);\n\n if (!context) {\n throw new Error('useMonitoring must be used within an MonitoringWrapper');\n }\n\n return context;\n};\n","import { createContext, useCallback, useContext, type FC } from 'react';\n\nconst HistoryContext = createContext<HistoryContextValue | null>(null);\n\nexport interface HistoryWrapperProps {\n children: React.ReactNode;\n onNavigate: (path: string, options?: { replace?: boolean }) => void;\n}\n\ninterface HistoryContextValue {\n push: (path: string) => void;\n replace: (path: string) => void;\n}\n\nexport const HistoryWrapper: FC<HistoryWrapperProps> = ({ children, onNavigate }) => {\n const push = useCallback(\n (path: string) => {\n onNavigate(path, { replace: false });\n },\n [onNavigate],\n );\n\n const replace = useCallback(\n (path: string) => {\n onNavigate(path, { replace: true });\n },\n [onNavigate],\n );\n\n return (\n <HistoryContext.Provider\n value={{\n push,\n replace,\n }}\n >\n {children}\n </HistoryContext.Provider>\n );\n};\n\nexport const useHistory = (): HistoryContextValue => {\n const context = useContext(HistoryContext);\n\n if (!context) {\n throw new Error('useHistory must be used within an HistoryWrapper');\n }\n\n return context;\n};\n","import { createContext, useContext, type FC } from 'react';\nimport type {\n CreateFileIdFn,\n GetPendingCacheCountFn,\n InvalidateCacheFn,\n OnNetworkRequestFn,\n PerformKizenFileUploadFn,\n} from '../../types/run.js';\n\nconst NetworkContext = createContext<NetworkContextValue | null>(null);\n\nexport interface NetworkWrapperProps {\n children: React.ReactNode;\n performRequest: OnNetworkRequestFn;\n createFileId?: CreateFileIdFn | undefined;\n performFileUpload?: PerformKizenFileUploadFn | undefined;\n getPendingCacheCount?: GetPendingCacheCountFn | undefined;\n invalidateCache?: InvalidateCacheFn | undefined;\n}\n\ninterface NetworkContextValue {\n performRequest: OnNetworkRequestFn;\n createFileId?: CreateFileIdFn | undefined;\n performFileUpload?: PerformKizenFileUploadFn | undefined;\n getPendingCacheCount?: GetPendingCacheCountFn | undefined;\n invalidateCache?: InvalidateCacheFn | undefined;\n}\n\nexport const NetworkWrapper: FC<NetworkWrapperProps> = ({\n children,\n performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n}) => {\n return (\n <NetworkContext.Provider\n value={{\n performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n }}\n >\n {children}\n </NetworkContext.Provider>\n );\n};\n\nexport const useNetwork = (): NetworkContextValue => {\n const context = useContext(NetworkContext);\n\n if (!context) {\n throw new Error('useNetwork must be used within a NetworkWrapper');\n }\n\n return context;\n};\n","import { createContext, useContext, type FC, type ReactNode } from 'react';\n\nconst defaultT = (s: string): string => s;\n\nconst TranslationContext = createContext({ t: defaultT });\n\nexport type TranslationFunction = (s: string) => string;\n\nexport interface TranslationWrapperProps {\n children: ReactNode;\n t?: TranslationFunction | undefined;\n}\n\ninterface TranslationContextValue {\n t: TranslationFunction;\n}\n\nexport const TranslationWrapper: FC<TranslationWrapperProps> = (props) => {\n const { children, t = defaultT } = props;\n\n return <TranslationContext.Provider value={{ t }}>{children}</TranslationContext.Provider>;\n};\n\nexport const useTranslation = (): TranslationContextValue => {\n const context = useContext(TranslationContext);\n\n return context;\n};\n","import { useCallback, useState } from 'react';\nimport type {\n CalendarSourceConfig,\n ExecuteCalendarSourceScript,\n SchemaValidation,\n} from '../../types/artifacts/calendar.js';\nimport type { MaybeMessageError, UnknownJSON } from '../../types/common.js';\nimport type { WorkerContextArgs } from '../../types/contexts.js';\nimport { runScript } from '../../run.js';\nimport { generateExecutionKey } from '../../util/run.js';\nimport { useTerminators } from '../context/terminators.js';\nimport { useSessionData } from '../context/session.js';\nimport { useAppState } from '../context/appState.js';\nimport { useRunnerState } from '../context/runnerState.js';\nimport type { OnShowToastFn } from '../../types/run.js';\nimport { useModals } from '../context/modals.js';\nimport { useMonitoring } from '../context/monitoring.js';\nimport { useHistory } from '../context/history.js';\nimport { useNetwork } from '../context/network.js';\nimport { useTranslation } from '../context/translation.js';\n\ninterface UseCalendarSourceCustomScriptProps {\n onError: WorkerContextArgs['onError'];\n showToast: OnShowToastFn;\n clearToasts: () => void;\n}\n\nconst validateSchema = (result: UnknownJSON, schema: SchemaValidation): void => {\n if (!Array.isArray(result)) {\n throw new Error('Return value must be an array');\n }\n\n schema.required.forEach((requiredField) => {\n result.forEach((resultRow: Record<string, UnknownJSON>, index) => {\n if (!(requiredField.key in resultRow)) {\n throw new Error(\n `Missing required field: ${requiredField.key} in result row ${String(index)}`,\n );\n }\n\n const actualType = typeof resultRow[requiredField.key];\n if (actualType !== requiredField.type) {\n throw new Error(\n `Invalid type for field: ${requiredField.key} in result row ${String(index)}. Expected ${requiredField.type}, got ${actualType}`,\n );\n }\n });\n });\n\n schema.optional.forEach((optionalField) => {\n result.forEach((resultRow: Record<string, UnknownJSON>, index: number) => {\n if (optionalField.key in resultRow) {\n const actualType = typeof resultRow[optionalField.key];\n if (actualType !== optionalField.type) {\n throw new Error(\n `Invalid type for field: ${optionalField.key} in result row ${String(index)}. Expected ${optionalField.type}, got ${actualType}`,\n );\n }\n }\n });\n });\n};\n\nexport const useCalendarSourceCustomScript = ({\n onError,\n showToast,\n clearToasts,\n}: UseCalendarSourceCustomScriptProps): [ExecuteCalendarSourceScript, { pending: boolean }] => {\n const { t } = useTranslation();\n\n const [pending, setPending] = useState(false);\n const [executionKey, setExeutionKey] = useState<string | undefined>(undefined);\n\n const { terminators } = useTerminators();\n const { sessionData, setSessionData } = useSessionData();\n const {\n installedPluginAPINamesToIds,\n userConfigsByApiName,\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n } = useAppState();\n\n const { getRunnerState, getRunnerStateUpdater } = useRunnerState();\n const { showModal, showCreateRecordModal } = useModals();\n\n const { sendException } = useMonitoring();\n\n const history = useHistory();\n\n const { performRequest, createFileId, performFileUpload, getPendingCacheCount, invalidateCache } =\n useNetwork();\n\n const handleError = useCallback(\n (plugin?: CalendarSourceConfig) => (error?: unknown) => {\n onError?.(error);\n\n const errorMessage = (error as MaybeMessageError)?.message ?? 'Unknown plugin error';\n\n sendException(new Error(errorMessage), {\n error,\n workerName: 'calendarSource',\n pluginApiName: plugin?.plugin_api_name ?? '',\n });\n },\n [onError, sendException],\n );\n\n const executeScript = useCallback(\n async (\n scriptBody: string,\n plugin: CalendarSourceConfig,\n args?: Record<string, unknown>,\n schema?: SchemaValidation,\n ) => {\n let stringArgs = '';\n const runnerStateKey = generateExecutionKey(plugin);\n setExeutionKey(runnerStateKey);\n try {\n const pluginAppId = installedPluginAPINamesToIds[plugin.plugin_api_name];\n stringArgs = JSON.stringify({\n ...args,\n pluginId: pluginAppId,\n __kizen_user_config: userConfigsByApiName[plugin.plugin_api_name],\n });\n } catch {\n handleError(plugin)({\n message: t('Arguments passed to the script are invalid'),\n });\n }\n\n let authError = false;\n\n const result = await runScript({\n user,\n teamMember,\n business,\n onError: handleError(plugin),\n setLoadingState: setPending,\n scriptBody,\n clientObject,\n onStateChange: (state) => {\n getRunnerStateUpdater(runnerStateKey)((prev) => {\n return {\n ...prev,\n ...state,\n };\n });\n },\n workerName: 'calendarSource',\n args: stringArgs,\n pushHistory: history.push,\n onShowToast: showToast,\n onClearToasts: clearToasts,\n terminators,\n plugin,\n sessionData,\n setSessionData,\n onShowModal: showModal,\n onShowCreateRecordModal: showCreateRecordModal,\n onShowCreateRelatedRecordModal: () => {\n /* empty */\n },\n onNetworkError: (error) => {\n const networkError = error as { message?: string; status?: number } | undefined;\n\n // A proxied service will respond with 503 if it's not configured correctly, so treat 503 errors as auth errors since that's\n // the most likely scenario.\n if (networkError?.status === 503) {\n authError = true;\n }\n },\n appPath,\n onNetworkRequest: performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n });\n\n try {\n if (schema) {\n validateSchema(result as UnknownJSON, schema);\n }\n } catch (ex) {\n onError?.(ex);\n }\n\n return { result, authError };\n },\n [\n user,\n teamMember,\n installedPluginAPINamesToIds,\n business,\n clientObject,\n history,\n showToast,\n clearToasts,\n terminators,\n sessionData,\n setSessionData,\n showModal,\n showCreateRecordModal,\n handleError,\n getRunnerStateUpdater,\n userConfigsByApiName,\n onError,\n performRequest,\n createFileId,\n appPath,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n t,\n ],\n );\n\n return [\n executeScript,\n {\n ...getRunnerState(executionKey),\n pending,\n },\n ];\n};\n","import { createContext, useContext, type FC } from 'react';\nimport type { OnShowToastFn } from '../../types/run.js';\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\ninterface ToastContextValue {\n showToast: OnShowToastFn;\n clearToasts: () => void;\n}\n\nexport interface ToastWrapperProps {\n children: React.ReactNode;\n showToast: OnShowToastFn;\n clearToasts: () => void;\n}\n\nexport const ToastWrapper: FC<ToastWrapperProps> = ({ children, showToast, clearToasts }) => {\n return (\n <ToastContext.Provider value={{ showToast, clearToasts }}>{children}</ToastContext.Provider>\n );\n};\n\nexport const useToast = (): ToastContextValue => {\n const context = useContext(ToastContext);\n\n if (!context) {\n throw new Error('useToast must be used within a ToastWrapper');\n }\n\n return context;\n};\n","import { useQueries } from '@tanstack/react-query';\nimport type {\n CalendarDefinition,\n CalendarScriptReturnData,\n CalendarSourceConfig,\n CalendarSourceMap,\n CalendarSources,\n ExecuteCalendarSourceScript,\n SchemaValidation,\n} from '../../types/artifacts/calendar.js';\nimport type { AppPlugins, MaybeMessageError, UnknownJSON } from '../../types/common.js';\nimport { useCalendarSourceCustomScript } from './useCalendarSourceCustomScript.js';\nimport { useMemo } from 'react';\nimport { useTranslation } from '../context/translation.js';\nimport { QUERY_KEYS } from '../../communication/constants.js';\nimport { formatInTimeZone } from 'date-fns-tz';\nimport { startOfDay, endOfDay } from 'date-fns';\nimport { useToast } from '../context/toast.js';\n\nconst executeCalendarSourceScript = async (\n script: string,\n plugin: CalendarSourceConfig,\n executeScript: ExecuteCalendarSourceScript,\n args?: UnknownJSON,\n): Promise<CalendarScriptReturnData> => {\n const schema: SchemaValidation = {\n required: [\n {\n key: 'id',\n type: 'string',\n },\n {\n key: 'name',\n type: 'string',\n },\n ],\n optional: [\n {\n key: 'description',\n type: 'string',\n },\n ],\n };\n\n const { result, authError } = await executeScript(script, plugin, args, schema);\n\n if (Array.isArray(result)) {\n return { result, authError };\n } else {\n console.warn(`Expected calendar source script to return an array, but got:`, result);\n return { result: [], authError };\n }\n};\n\nconst executeCalendarEventScript = async (\n script: string,\n plugin: CalendarSourceConfig,\n executeScript: ExecuteCalendarSourceScript,\n args?: Record<string, unknown>,\n): Promise<CalendarScriptReturnData> => {\n const schema: SchemaValidation = {\n required: [\n {\n key: 'id',\n type: 'string',\n },\n {\n key: 'calendar_id',\n type: 'string',\n },\n {\n key: 'title',\n type: 'string',\n },\n {\n key: 'start_time',\n type: 'number',\n },\n {\n key: 'end_time',\n type: 'number',\n },\n ],\n optional: [\n {\n key: 'description',\n type: 'string',\n },\n {\n key: 'url',\n type: 'string',\n },\n {\n key: 'activity_id',\n type: 'string',\n },\n {\n key: 'all_day',\n type: 'boolean',\n },\n {\n key: 'busy',\n type: 'boolean',\n },\n ],\n };\n\n const { result, authError } = await executeScript(script, plugin, args, schema);\n\n if (Array.isArray(result)) {\n return { result, authError };\n } else {\n console.warn(`Expected calendar event script to return an array, but got:`, result);\n return { result: [], authError };\n }\n};\n\nexport const useCalendarOptions = (\n enabled: boolean,\n calendarSources: CalendarSources,\n plugins: AppPlugins = {},\n): {\n calendars: Record<string, { calendar: CalendarDefinition; source: CalendarSourceConfig }[]>;\n errorServices: (string | undefined)[];\n isLoading: boolean;\n} => {\n const { showToast, clearToasts } = useToast();\n const { t } = useTranslation();\n\n const [executeScript] = useCalendarSourceCustomScript({\n onError: (error) => {\n showToast({\n message: `${t('Error fetching calendar options.')} ${(error as MaybeMessageError)?.message ?? ''}`,\n variant: 'failure',\n });\n },\n showToast,\n clearToasts,\n });\n\n const calendarsQueries = useQueries({\n queries: calendarSources.map((source) => {\n return {\n queryKey: QUERY_KEYS.CALENDAR_SOURCE_CALENDAR_LIST(source.plugin_api_name, source.api_name),\n queryFn: async () => {\n const config = (plugins[source.plugin_api_name]?.business_config ?? {}) as UnknownJSON;\n\n const { result, authError } = await executeCalendarSourceScript(\n source.calendars_script,\n source,\n executeScript,\n config,\n );\n\n return {\n source,\n calendars: result as CalendarDefinition[],\n authError,\n };\n },\n enabled: enabled && Boolean(source.calendars_script),\n };\n }),\n });\n\n const isLoading = calendarsQueries.some((q) => q.isLoading);\n\n const calendarOptionsByPluginApiName = useMemo(() => {\n if (isLoading || !enabled) {\n return {};\n }\n\n return calendarsQueries.reduce(\n (\n acc: Record<string, { calendar: CalendarDefinition; source: CalendarSourceConfig }[]>,\n curr,\n ) => {\n if (\n !curr.data?.source.plugin_api_name ||\n typeof curr.data.source.plugin_api_name !== 'string'\n ) {\n return acc;\n }\n\n const pluginApiName = curr.data.source.plugin_api_name;\n acc[pluginApiName] ??= [];\n\n acc[pluginApiName].push(\n ...curr.data.calendars.map((c) => ({\n calendar: c,\n source: curr.data.source,\n })),\n );\n\n return acc;\n },\n {},\n );\n }, [calendarsQueries, isLoading, enabled]);\n\n const servicesWithErrors = useMemo(() => {\n return calendarsQueries\n .filter((q) => q.data?.authError)\n .map((q) => q.data?.source.plugin_api_name);\n }, [calendarsQueries]);\n\n return {\n calendars: calendarOptionsByPluginApiName,\n errorServices: servicesWithErrors,\n isLoading,\n };\n};\n\nconst formatString = \"yyyy-MM-dd'T'HH:mm:ssXXX\";\n\nconst createDate = (dateString: string): Date => {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(dateString)) {\n throw new Error(`Invalid date string: ${dateString}. Expected format: YYYY-MM-DD`);\n }\n\n const [year, month, day] = dateString.split('-').map(Number);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return new Date(year!, month! - 1, day);\n};\n\nconst getTzDateString = (date: Date, timeZone: string): string => {\n return formatInTimeZone(date, timeZone, formatString);\n};\n\nexport const useCalendarEvents = (\n flatCalendars: {\n calendar: CalendarDefinition;\n source: CalendarSourceConfig;\n }[],\n params: {\n rangeStart: string;\n rangeEnd: string;\n },\n plugins: AppPlugins = {},\n): {\n events: unknown;\n sources: CalendarSourceMap;\n isLoading: boolean;\n} => {\n const userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n const rangeStartFilter = getTzDateString(startOfDay(createDate(params.rangeStart)), userTimezone);\n const rangeEndFilter = getTzDateString(endOfDay(createDate(params.rangeEnd)), userTimezone);\n\n const { showToast, clearToasts } = useToast();\n const { t } = useTranslation();\n\n const [executeScript] = useCalendarSourceCustomScript({\n onError: (error) => {\n showToast({\n message: `${t('Error fetching calendar events.')} ${(error as MaybeMessageError)?.message ?? ''}`,\n variant: 'failure',\n });\n },\n showToast,\n clearToasts,\n });\n\n const eventsQueries = useQueries({\n queries: flatCalendars.map(({ calendar, source }) => {\n return {\n queryKey: QUERY_KEYS.CALENDAR_SOURCE_EVENTS(\n source.plugin_api_name,\n source.api_name,\n calendar.id,\n params,\n ),\n queryFn: async () => {\n const config = plugins[source.plugin_api_name]?.business_config ?? {};\n\n const { result, authError } = await executeCalendarEventScript(\n source.events_script,\n source,\n executeScript,\n {\n ...config,\n calendar: {\n calendar_id: calendar.id,\n range_start: rangeStartFilter,\n range_end: rangeEndFilter,\n },\n },\n );\n\n return {\n calendarId: calendar.id,\n events: result,\n authError,\n };\n },\n };\n }),\n });\n\n const isEventsLoading = eventsQueries.some((q) => q.isLoading);\n\n const sourcesByCalendarId = useMemo(() => {\n return flatCalendars.reduce((acc: CalendarSourceMap, { calendar, source }) => {\n acc[calendar.id] = { source, calendar };\n return acc;\n }, {});\n }, [flatCalendars]);\n\n const eventsByCalendarId = useMemo(() => {\n if (isEventsLoading) {\n return {};\n }\n\n return eventsQueries.reduce((acc: Record<string, unknown[]>, curr) => {\n if (!curr.data?.calendarId) {\n return acc;\n }\n\n acc[curr.data.calendarId] = curr.data.events as unknown[];\n\n return acc;\n }, {});\n }, [eventsQueries, isEventsLoading]);\n\n return {\n events: eventsByCalendarId,\n sources: sourcesByCalendarId,\n isLoading: isEventsLoading,\n };\n};\n","import { useCallback, useRef, useState } from 'react';\nimport type {\n ExecuteFloatingFrameScript,\n FloatingFrameConfig,\n} from '../../types/artifacts/floatingFrame.js';\nimport type { WorkerContextArgs } from '../../types/contexts.js';\nimport { useTerminators } from '../context/terminators.js';\nimport { useSessionData } from '../context/session.js';\nimport { useAppState } from '../context/appState.js';\nimport { useModals } from '../context/modals.js';\nimport { useMonitoring } from '../context/monitoring.js';\nimport { useHistory } from '../context/history.js';\nimport type { MaybeMessageError } from '../../types/common.js';\nimport { runScript } from '../../run.js';\nimport { useToast } from '../context/toast.js';\nimport { flushSync } from 'react-dom';\nimport { useNetwork } from '../context/network.js';\nimport { useTranslation } from '../context/translation.js';\n\ninterface UseFloatingFrameCustomScriptProps {\n onError: WorkerContextArgs['onError'];\n scriptUIRef?: WorkerContextArgs['scriptUIRef'];\n plugin: FloatingFrameConfig;\n onChangeMinimized?: (minimized: boolean) => void;\n}\n\nexport const useFloatingFrameCustomScript = ({\n onError,\n scriptUIRef,\n plugin,\n onChangeMinimized,\n}: UseFloatingFrameCustomScriptProps): [\n ExecuteFloatingFrameScript,\n {\n pending: boolean;\n hidden: boolean;\n indicator: string;\n triggerHidden?: boolean;\n hideHeader?: boolean;\n },\n] => {\n const { terminators } = useTerminators();\n const { sessionData, setSessionData } = useSessionData();\n const {\n installedPluginAPINamesToIds,\n userConfigsByApiName,\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n } = useAppState();\n\n const { showModal, showCreateRecordModal, showCreateRelatedRecordModal } = useModals();\n\n const { sendException } = useMonitoring();\n\n const { showToast, clearToasts } = useToast();\n\n const history = useHistory();\n\n const { performRequest, createFileId, performFileUpload, getPendingCacheCount, invalidateCache } =\n useNetwork();\n\n const { t } = useTranslation();\n\n const [pending, setPending] = useState(false);\n\n // use a local runner state instead of global runnerState since all state changes will happen within the context of the iframe\n const [floatingFrameRunnerState, setFloatingFrameRunnerState] = useState({\n indicator: 'none',\n hidden: true,\n triggerHidden: false,\n hideHeader: false,\n });\n\n const pendingOnceLock = useRef(false);\n const [pendingLocked, setPendingLocked] = useState(false);\n if (pending && !pendingOnceLock.current) {\n pendingOnceLock.current = true;\n }\n\n if (!pending && pendingOnceLock.current && !pendingLocked) {\n setPendingLocked(true);\n }\n\n const handleError = useCallback(\n (error: unknown) => {\n onError?.(error);\n\n const errorMessage = (error as MaybeMessageError)?.message ?? 'Unknown plugin error';\n sendException(new Error(errorMessage), {\n error,\n workerName: 'floatingFrame',\n pluginApiName: plugin.plugin_api_name,\n });\n },\n [onError, plugin, sendException],\n );\n\n const executeScript = useCallback(\n (scriptBody: string, args?: Record<string, unknown>) => {\n let stringArgs = '';\n try {\n const pluginAppId = installedPluginAPINamesToIds[plugin.plugin_api_name];\n stringArgs = JSON.stringify({\n ...args,\n pluginId: pluginAppId,\n __kizen_user_config: userConfigsByApiName[plugin.plugin_api_name],\n });\n } catch {\n handleError({ message: t('Arguments passed to the script are invalid') });\n }\n\n return runScript({\n user,\n teamMember,\n business,\n onError: handleError,\n setLoadingState: (...args) => {\n flushSync(() => {\n setPending(...args);\n });\n },\n scriptBody,\n clientObject,\n scriptUIRef,\n\n onStateChange: (state) => {\n const { minimized, ...rest } = state;\n if (typeof minimized === 'boolean') {\n onChangeMinimized?.(minimized);\n }\n setFloatingFrameRunnerState((s) => {\n return { ...s, ...rest };\n });\n },\n workerName: 'floatingFramePlugin',\n args: stringArgs,\n pushHistory: history.push,\n plugin,\n onShowToast: showToast,\n onClearToasts: clearToasts,\n terminators,\n sessionData,\n setSessionData,\n onShowModal: showModal,\n onShowCreateRecordModal: showCreateRecordModal,\n onShowCreateRelatedRecordModal: showCreateRelatedRecordModal,\n appPath,\n onNetworkRequest: performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n });\n },\n [\n user,\n teamMember,\n business,\n installedPluginAPINamesToIds,\n clientObject,\n scriptUIRef,\n history,\n plugin,\n onChangeMinimized,\n showToast,\n clearToasts,\n terminators,\n sessionData,\n setSessionData,\n handleError,\n setFloatingFrameRunnerState,\n userConfigsByApiName,\n showModal,\n showCreateRecordModal,\n showCreateRelatedRecordModal,\n performRequest,\n appPath,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n t,\n ],\n );\n\n return [\n executeScript,\n {\n ...floatingFrameRunnerState,\n pending: pendingLocked ? false : pending,\n },\n ];\n};\n","import { useCallback, useState } from 'react';\nimport type { ExecuteGenericScript, GenericPluginConfig } from '../../types/artifacts/generic.js';\nimport type { WorkerContextArgs } from '../../types/contexts.js';\nimport { runScript } from '../../run.js';\nimport { useTerminators } from '../context/terminators.js';\nimport { useSessionData } from '../context/session.js';\nimport { useAppState } from '../context/appState.js';\nimport { useModals } from '../context/modals.js';\nimport { useMonitoring } from '../context/monitoring.js';\nimport { useToast } from '../context/toast.js';\nimport { useHistory } from '../context/history.js';\nimport type { MaybeMessageError } from '../../types/common.js';\nimport { generateExecutionKey } from '../../util/run.js';\nimport { useRunnerState } from '../context/runnerState.js';\nimport type { CommonExecutionPlugin } from '../../types/run.js';\nimport { useNetwork } from '../context/network.js';\nimport { useTranslation } from '../context/translation.js';\n\ninterface UseGenericPluginCustomScriptProps {\n onError: WorkerContextArgs['onError'];\n scriptUIRef?: WorkerContextArgs['scriptUIRef'];\n plugin?: GenericPluginConfig | undefined;\n}\n\nexport const useGenericPluginCustomScript = ({\n onError,\n scriptUIRef,\n plugin,\n}: UseGenericPluginCustomScriptProps): [ExecuteGenericScript, { pending: boolean }] => {\n const { terminators } = useTerminators();\n const { sessionData, setSessionData } = useSessionData();\n const {\n installedPluginAPINamesToIds,\n userConfigsByApiName,\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n } = useAppState();\n\n const { getRunnerState, getRunnerStateUpdater } = useRunnerState();\n\n const { showModal, showCreateRecordModal } = useModals();\n\n const { sendException } = useMonitoring();\n\n const { showToast, clearToasts } = useToast();\n\n const history = useHistory();\n\n const { performRequest, createFileId, performFileUpload, getPendingCacheCount, invalidateCache } =\n useNetwork();\n\n const { t } = useTranslation();\n\n const [pending, setPending] = useState(false);\n const [executionKey, setExeutionKey] = useState<string | undefined>(undefined);\n\n const handleError = useCallback(\n (error: unknown, executionPlugin?: CommonExecutionPlugin) => {\n onError?.(error);\n\n const errorMessage = (error as MaybeMessageError)?.message ?? 'Unknown plugin error';\n sendException(new Error(errorMessage), {\n error,\n workerName: 'genericPlugin',\n pluginApiName: plugin?.plugin_api_name ?? executionPlugin?.plugin_api_name ?? '',\n });\n },\n [onError, plugin, sendException],\n );\n\n const executeScript = useCallback(\n (\n scriptBody: string,\n args?: Record<string, unknown>,\n executionPlugin?: CommonExecutionPlugin,\n ) => {\n let stringArgs = '';\n const runnerStateKey = generateExecutionKey(executionPlugin);\n setExeutionKey(runnerStateKey);\n try {\n const pluginAppId =\n installedPluginAPINamesToIds[\n plugin?.plugin_api_name ?? executionPlugin?.plugin_api_name ?? ''\n ];\n stringArgs = JSON.stringify({\n ...args,\n pluginId: pluginAppId,\n __kizen_user_config:\n userConfigsByApiName[plugin?.plugin_api_name ?? executionPlugin?.plugin_api_name ?? ''],\n });\n } catch {\n handleError({ message: t('Arguments passed to the script are invalid') });\n }\n\n return runScript({\n user,\n teamMember,\n business,\n onError: handleError,\n setLoadingState: setPending,\n scriptBody,\n clientObject,\n scriptUIRef,\n onStateChange: (state) => {\n getRunnerStateUpdater(runnerStateKey)((prev) => {\n return {\n ...prev,\n ...state,\n };\n });\n },\n workerName: 'genericPlugin',\n args: stringArgs,\n pushHistory: history.push,\n onShowToast: showToast,\n onClearToasts: clearToasts,\n terminators,\n plugin,\n executionPlugin,\n sessionData,\n setSessionData,\n onShowModal: showModal,\n onShowCreateRecordModal: showCreateRecordModal,\n onShowCreateRelatedRecordModal: () => {\n /* empty */\n },\n appPath,\n onNetworkRequest: performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n });\n },\n [\n user,\n teamMember,\n installedPluginAPINamesToIds,\n business,\n clientObject,\n scriptUIRef,\n history,\n showToast,\n clearToasts,\n terminators,\n plugin,\n sessionData,\n setSessionData,\n handleError,\n getRunnerStateUpdater,\n userConfigsByApiName,\n showModal,\n showCreateRecordModal,\n performRequest,\n appPath,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n t,\n ],\n );\n\n return [\n executeScript,\n {\n ...getRunnerState(executionKey),\n pending,\n },\n ];\n};\n","import { useCallback, useState } from 'react';\nimport type { WorkerContextArgs } from '../../types/contexts.js';\nimport type { CommonExecutionPlugin } from '../../types/run.js';\nimport type { MaybeMessageError } from '../../types/common.js';\nimport { useHistory } from '../context/history.js';\nimport { useToast } from '../context/toast.js';\nimport { useMonitoring } from '../context/monitoring.js';\nimport { useModals } from '../context/modals.js';\nimport { useRunnerState } from '../context/runnerState.js';\nimport { useAppState } from '../context/appState.js';\nimport { useSessionData } from '../context/session.js';\nimport { useTerminators } from '../context/terminators.js';\nimport { generateExecutionKey } from '../../util/run.js';\nimport { runScript } from '../../index.js';\nimport type { ExecuteGenericScript } from '../../types/artifacts/generic.js';\nimport { useNetwork } from '../context/network.js';\nimport { useTranslation } from '../context/translation.js';\n\ninterface UseRecordDetailCustomScriptProps {\n entityId: string;\n objectId: string;\n onError: WorkerContextArgs['onError'];\n scriptUIRef?: WorkerContextArgs['scriptUIRef'];\n onReleaseBlockingScript?: WorkerContextArgs['onReleaseBlockingScript'];\n}\n\nexport const useRecordDetailCustomScript = ({\n entityId,\n objectId,\n onError,\n scriptUIRef,\n onReleaseBlockingScript,\n}: UseRecordDetailCustomScriptProps): [ExecuteGenericScript, { pending: boolean }] => {\n const { terminators } = useTerminators();\n const { sessionData, setSessionData } = useSessionData();\n const {\n installedPluginAPINamesToIds,\n userConfigsByApiName,\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n } = useAppState();\n\n const { getRunnerState, getRunnerStateUpdater } = useRunnerState();\n\n const { showModal, showCreateRecordModal, showCreateRelatedRecordModal } = useModals();\n\n const { sendException } = useMonitoring();\n\n const { showToast, clearToasts } = useToast();\n\n const history = useHistory();\n\n const { performRequest, createFileId, performFileUpload, getPendingCacheCount, invalidateCache } =\n useNetwork();\n\n const { t } = useTranslation();\n\n const [pending, setPending] = useState(false);\n const [executionKey, setExeutionKey] = useState<string | undefined>(undefined);\n\n const handleError = useCallback(\n (error: unknown, executionPlugin?: CommonExecutionPlugin) => {\n onError?.(error);\n const errorMessage = (error as MaybeMessageError)?.message ?? 'Unknown plugin error';\n sendException(new Error(errorMessage), {\n error,\n workerName: 'recordDetail',\n pluginApiName: executionPlugin?.plugin_api_name ?? '',\n objectId,\n entityId,\n });\n },\n [onError, objectId, entityId, sendException],\n );\n\n const executeScript = useCallback(\n (\n scriptBody: string,\n args?: Record<string, unknown>,\n executionPlugin?: CommonExecutionPlugin,\n overrideContext?: Record<string, unknown>,\n ) => {\n let stringArgs = '';\n try {\n const pluginAppId = installedPluginAPINamesToIds[executionPlugin?.plugin_api_name ?? ''];\n stringArgs = JSON.stringify({\n ...args,\n pluginId: pluginAppId,\n __kizen_user_config: userConfigsByApiName[executionPlugin?.plugin_api_name ?? ''],\n });\n } catch {\n handleError({ message: t('Arguments passed to the script are invalid') }, executionPlugin);\n }\n const runnerStateKey = generateExecutionKey(executionPlugin);\n\n setExeutionKey(runnerStateKey);\n return runScript({\n user,\n teamMember,\n business,\n onReleaseBlockingScript,\n onError: (e) => {\n handleError(e, executionPlugin);\n },\n setLoadingState: setPending,\n scriptBody,\n clientObject,\n scriptUIRef,\n onStateChange: (state) => {\n getRunnerStateUpdater(runnerStateKey)((prev) => {\n return {\n ...prev,\n ...state,\n };\n });\n },\n workerName: 'recordDetail',\n args: stringArgs,\n context: overrideContext ?? {\n entityId,\n objectId,\n },\n pushHistory: history.push,\n onShowToast: showToast,\n onClearToasts: clearToasts,\n terminators,\n executionPlugin,\n sessionData,\n setSessionData,\n onShowModal: showModal,\n onShowCreateRecordModal: showCreateRecordModal,\n onShowCreateRelatedRecordModal: showCreateRelatedRecordModal,\n appPath,\n onNetworkRequest: performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n });\n },\n [\n user,\n teamMember,\n installedPluginAPINamesToIds,\n business,\n entityId,\n objectId,\n clientObject,\n scriptUIRef,\n history,\n showToast,\n clearToasts,\n terminators,\n sessionData,\n setSessionData,\n showModal,\n showCreateRecordModal,\n showCreateRelatedRecordModal,\n onReleaseBlockingScript,\n handleError,\n getRunnerStateUpdater,\n userConfigsByApiName,\n performRequest,\n appPath,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n t,\n ],\n );\n\n return [\n executeScript,\n {\n ...getRunnerState(executionKey),\n pending,\n },\n ];\n};\n","import { useCallback, useEffect, useMemo, useRef, type RefObject } from 'react';\nimport type {\n FloatingFrameConfig,\n MaybeMessageError,\n RoutablePageConfig,\n UnknownJSON,\n} from '../../types/index.js';\nimport { useToast } from '../context/toast.js';\nimport { useTranslation } from '../context/translation.js';\nimport DOMPurify from 'dompurify';\nimport { useGenericPluginCustomScript } from './useGenericPluginCustomScript.js';\n\ninterface PluginCustomHTML {\n scopedCss: string;\n sanitizedHtml: string | null;\n outputUIRef: RefObject<HTMLDivElement>;\n interactableScriptRef: RefObject<HTMLDivElement>;\n}\n\nexport const usePluginCustomHTML = (\n currentPage?: FloatingFrameConfig | RoutablePageConfig,\n args?: UnknownJSON,\n): PluginCustomHTML => {\n const { showToast } = useToast();\n const { t } = useTranslation();\n\n const outputUIRef = useRef<HTMLDivElement>(null);\n const interactableScriptRef = useRef<HTMLDivElement>(null);\n\n const css = currentPage?.css;\n\n const html = useMemo(() => {\n const rawHTML = currentPage?.html;\n\n return rawHTML ? DOMPurify.sanitize(rawHTML) : null;\n }, [currentPage]);\n\n const interactableScripts = useMemo(() => {\n return currentPage?.event_scripts ?? {};\n }, [currentPage]);\n\n const [executeInline, { pending: inlinePending }] = useGenericPluginCustomScript({\n onError: (e) => {\n showToast({\n message: `${t('Script could not be executed:')} ${(e as MaybeMessageError)?.message ?? 'Unknown Error'}`,\n variant: 'failure',\n });\n },\n scriptUIRef: outputUIRef,\n plugin: currentPage,\n });\n\n const handleClick = useCallback(\n (e: PointerEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!inlinePending) {\n const target = e.target as HTMLElement;\n const scriptName = target.getAttribute('data-script');\n\n if (scriptName && interactableScripts[scriptName]) {\n void executeInline(interactableScripts[scriptName], args);\n }\n }\n },\n [inlinePending, executeInline, interactableScripts, args],\n );\n\n useEffect(() => {\n const e = interactableScriptRef.current;\n\n if (e) {\n e.addEventListener('click', handleClick);\n }\n\n return () => {\n if (e) {\n e.removeEventListener('click', handleClick);\n }\n };\n }, [handleClick, currentPage]);\n\n return {\n scopedCss: `\n @scope {\n ${css ?? ''}\n }\n `,\n sanitizedHtml: html,\n outputUIRef,\n interactableScriptRef,\n };\n};\n","import { useQueryClient } from '@tanstack/react-query';\nimport { useCallback } from 'react';\nimport { QUERY_KEYS } from '../../communication/constants.js';\n\ntype ResetFn = (pluginApiName: string, sourceApiName: string) => void;\n\nexport const useCalendarSourceReset = (): ResetFn => {\n const queryClient = useQueryClient();\n\n const resetFn = useCallback<ResetFn>(\n (pluginApiName, sourceApiName) => {\n queryClient.removeQueries({\n queryKey: QUERY_KEYS.CALENDAR_SOURCE_CALENDAR_LIST(pluginApiName, sourceApiName),\n exact: true,\n });\n },\n [queryClient],\n );\n\n return resetFn;\n};\n","import { useCallback, useEffect, useMemo } from 'react';\nimport type { ExecuteFloatingFrameScript, ExecuteGenericScript } from '../../index.js';\n\nexport const useManualInteraction = (\n execute: ExecuteFloatingFrameScript | ExecuteGenericScript,\n currentPage?: { event_scripts?: Record<string, string> },\n elementRef?: { current: HTMLElement | null },\n pending?: boolean,\n args: Record<string, unknown> = {},\n): void => {\n const interactableScripts = useMemo(() => {\n return currentPage?.event_scripts ?? {};\n }, [currentPage]);\n\n const handleClick = useCallback(\n (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!pending) {\n const target = e.target as HTMLElement;\n const scriptName = target.getAttribute('data-script');\n if (scriptName && interactableScripts[scriptName]) {\n void execute(interactableScripts[scriptName], { ...args });\n }\n }\n },\n [pending, execute, interactableScripts, args],\n );\n\n useEffect(() => {\n const e = elementRef?.current;\n\n if (e) {\n e.addEventListener('click', handleClick);\n }\n\n return () => {\n if (e) {\n e.removeEventListener('click', handleClick);\n }\n };\n }, [handleClick, currentPage, elementRef]);\n};\n","import { useEffect } from 'react';\n\nexport const usePluginCallback = (search: string): void => {\n useEffect(() => {\n const queryString = new URLSearchParams(search);\n\n const query = Object.fromEntries(queryString);\n\n window.parent.postMessage({ type: 'kizen:plugin_callback', query }, '*');\n }, [search]);\n};\n","import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport type { MaybeMessageError, RoutablePageConfig, UnknownJSON } from '../../types/index.js';\nimport { useToast } from '../context/toast.js';\nimport { useTranslation } from '../context/translation.js';\nimport { useGenericPluginCustomScript } from './useGenericPluginCustomScript.js';\nimport { useManualInteraction, usePluginCustomHTML } from '../index.js';\n\ninterface UsePluginEngineReturn {\n scriptUIRef: React.RefObject<HTMLDivElement>;\n outputUIRef: React.RefObject<HTMLDivElement>;\n scopedCss: string;\n sanitizedHtml: string | null;\n interactableScriptRef: React.RefObject<HTMLDivElement>;\n iframeURL?: string | undefined;\n pending: boolean;\n}\n\nexport const usePluginPage = (\n currentPage?: RoutablePageConfig,\n search?: string,\n isLoading?: boolean,\n): UsePluginEngineReturn => {\n const iframeURL = currentPage?.iframe_url;\n const script = currentPage?.script;\n const callback = currentPage?.callback;\n const pluginArgs = currentPage?.args;\n\n const { showToast } = useToast();\n const { t } = useTranslation();\n\n const scriptUIRef = useRef<HTMLDivElement>(null);\n\n const [execute, { pending }] = useGenericPluginCustomScript({\n onError: (e) => {\n showToast({\n message: `${t('Plugin error:')} ${(e as MaybeMessageError)?.message ?? ''}`,\n variant: 'failure',\n });\n },\n scriptUIRef,\n plugin: currentPage,\n });\n\n const args = useMemo(() => {\n const queryString = new URLSearchParams(search);\n const query = Object.fromEntries(queryString);\n\n return {\n ...query,\n ...pluginArgs,\n };\n }, [search, pluginArgs]);\n\n const { outputUIRef, scopedCss, sanitizedHtml, interactableScriptRef } = usePluginCustomHTML(\n currentPage,\n args,\n );\n\n useManualInteraction(execute, currentPage, scriptUIRef, pending);\n\n const hasRunScript = useRef(false);\n\n useEffect(() => {\n if (!iframeURL && !hasRunScript.current && script && !isLoading) {\n hasRunScript.current = true;\n void execute(script, args);\n }\n }, [iframeURL, execute, script, args, isLoading]);\n\n const handleMessage = useCallback(\n (e: MessageEvent<{ type: string; query: UnknownJSON } | undefined>) => {\n const message = e.data;\n\n if (message?.type === 'kizen:plugin_callback') {\n const args = message.query;\n\n if (callback) {\n void execute(callback, args);\n }\n }\n },\n [execute, callback],\n );\n\n useEffect(() => {\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, [handleMessage]);\n\n return {\n scriptUIRef,\n outputUIRef,\n scopedCss,\n sanitizedHtml,\n interactableScriptRef,\n iframeURL,\n pending,\n };\n};\n","import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport type { TouchFloatingFrame } from './index.js';\n\nexport interface FloatingFrameContextValue {\n touchFloatingFrame: TouchFloatingFrame;\n floatingFrameOffset: Record<string, number>;\n}\n\nexport interface FloatingFrameWrapperProps {\n children: (hiddenByModal: boolean) => React.ReactNode;\n}\n\nconst FloatingFrameContext = createContext<FloatingFrameContextValue | null>(null);\n\nexport const FloatingFrameWrapper: React.FC<FloatingFrameWrapperProps> = ({ children }) => {\n const [floatingFrameOrder, setFloatingFrameOrder] = useState<string[]>([]);\n const [hiddenByModal, setHiddenByModal] = useState(false);\n\n const touchFloatingFrame = useCallback<TouchFloatingFrame>((id, cb) => {\n setFloatingFrameOrder((prev) => {\n const res = prev.filter((i) => i !== id);\n const done = [id, ...res];\n\n cb?.(done);\n\n return done;\n });\n }, []);\n\n const floatingFrameOffset = useMemo(() => {\n return [...floatingFrameOrder].reverse().reduce((acc, id, index) => {\n return {\n ...acc,\n [id]: index,\n };\n }, {});\n }, [floatingFrameOrder]);\n\n useEffect(() => {\n const observer = new MutationObserver(() => {\n const modal = document.querySelector('div[role=\"dialog\"]');\n if (modal) {\n setHiddenByModal(true);\n } else {\n setHiddenByModal(false);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n });\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <FloatingFrameContext.Provider\n value={{\n touchFloatingFrame,\n floatingFrameOffset,\n }}\n >\n {children(hiddenByModal)}\n </FloatingFrameContext.Provider>\n );\n};\n\nexport const useFloatingFrameContext = (): FloatingFrameContextValue => {\n const context = useContext(FloatingFrameContext);\n\n if (!context) {\n throw new Error('useFloatingFrame must be used within a FloatingFrameWrapper');\n }\n\n return context;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { JSX, RefObject } from 'react';\nimport type {\n FloatingFrameConfig,\n FloatingFrameEmployeeConfig,\n FrameQuadrant,\n MaybeMessageError,\n WindowPosition,\n} from '../../types/index.js';\nimport { useAppState } from '../context/appState.js';\nimport {\n useFloatingFrameCustomScript,\n useManualInteraction,\n usePluginCustomHTML,\n} from '../index.js';\nimport { useToast } from '../context/toast.js';\nimport { useTranslation } from '../context/translation.js';\nimport { runFrameScriptEventName } from '../../communication/index.js';\nimport { useFloatingFrameContext } from '../context/floatingFrame.js';\n\ninterface UseFloatingFrameArgs {\n currentWindow: FloatingFrameConfig;\n pathname: string;\n id: string;\n frameHeaderSize: number;\n defaultPositionGap?: number;\n viewportHeight?: number;\n hiddenByModal?: boolean;\n updateEmployeeConfig?: (\n id: string,\n minimized: boolean,\n windowPosition: WindowPosition | null,\n ) => (config: Partial<FloatingFrameEmployeeConfig>) => void;\n}\n\nexport const defaultIgnorePatterns = [\n '^/$',\n '^/login*',\n '/settings/mine$',\n '/settings/others$',\n '/create-new-business$',\n '^/choose-business*',\n '^/inactive-business$',\n '^/reset$',\n '/welcome$',\n '/embed/*',\n '/create-new-business$',\n '/businessbuilder',\n];\n\nexport const defaultFrameIgnoreUrls = [\n 'https://js.stripe.com', // Exlude irrelevant Stripe events\n];\n\nconst getQuadrant = (\n topDelta: number,\n leftDelta: number,\n bottomDelta: number,\n rightDelta: number,\n): FrameQuadrant => {\n if (topDelta < bottomDelta) {\n // top\n if (leftDelta < rightDelta) {\n return 'top-left';\n } else {\n return 'top-right';\n }\n } else {\n // bottom\n if (leftDelta < rightDelta) {\n return 'bottom-left';\n } else {\n return 'bottom-right';\n }\n }\n};\n\ninterface CircleProps {\n id: string;\n side: 'left' | 'right';\n circleIcon: string;\n CustomIcon: (({ className }: { className?: string }) => JSX.Element) | null;\n circleColor: string;\n onClick: () => void;\n hidden: boolean;\n}\n\ninterface UseFloatingFrameResult {\n circleProps: CircleProps;\n parentProps: {\n className: string;\n dragging: boolean;\n hidden: boolean;\n };\n draggableProps: {\n onStop: (_event: unknown, context: { node: HTMLElement | null }) => void;\n onStart: () => void;\n bounds: string;\n handle: string;\n defaultPosition: { x: number; y: number };\n position: { x: number; y: number };\n disabled: boolean;\n };\n floatProps: {\n pending: boolean;\n width: number;\n dragging: boolean;\n height: number;\n isCircle: boolean;\n };\n contentProps: {\n className: string;\n dragging: boolean;\n solid: boolean;\n };\n minimized: boolean;\n pending: boolean;\n indicator: string;\n hideHeader?: boolean | undefined;\n isFixed: boolean;\n isCircle: boolean;\n outputUIRef: RefObject<HTMLDivElement>;\n scopedCss: string;\n sanitizedHtml: string | null;\n interactableScriptRef: RefObject<HTMLDivElement>;\n tooltipPosition: 'top' | 'left' | 'bottom';\n currentPluginId?: string | undefined;\n setMinimized: (minimized: boolean) => void;\n dragHandleClassName: string;\n height: number;\n script: string | undefined;\n dragging: boolean;\n frameOffset: number;\n scriptUIRef: RefObject<HTMLDivElement> | undefined;\n}\n\nexport const useFloatingFrame = (params: UseFloatingFrameArgs): UseFloatingFrameResult => {\n const {\n currentWindow,\n pathname,\n id,\n frameHeaderSize,\n defaultPositionGap = 0,\n viewportHeight = window.innerHeight,\n hiddenByModal,\n updateEmployeeConfig: maybeUpdateEmployeeConfig,\n } = params;\n\n const scriptUIRef = useRef<HTMLDivElement>(null);\n const hasRunScript = useRef(false);\n\n const { showToast } = useToast();\n\n const { t } = useTranslation();\n\n const { installedPluginAPINamesToIds, clientObject } = useAppState();\n\n const { touchFloatingFrame, floatingFrameOffset } = useFloatingFrameContext();\n\n const frameOffset = floatingFrameOffset[id] ?? -1;\n\n const hideOnMinimized = currentWindow.minimized_style === 'none';\n\n // If we hide on minimized, treat it as the circle type (as opposed to bar)\n const isCircle = currentWindow.minimized_style === 'circle' || hideOnMinimized;\n\n const isBottomRightFixed = currentWindow.default_position === 'bottom-right-fixed';\n\n const isBottomLeftFixed = currentWindow.default_position === 'bottom-left-fixed';\n\n const isFixed = isBottomRightFixed || isBottomLeftFixed;\n\n const circleIcon = currentWindow.minimized_config?.icon ?? 'action-drag-handle';\n const circleColor = currentWindow.minimized_config?.color ?? 'blue';\n\n const additionalArgs = useMemo(() => {\n const splits = pathname.split('/');\n\n const first = splits[1];\n const second = splits[2];\n\n if (first === 'client') {\n return {\n objectId: clientObject?.id,\n entityId: second,\n };\n }\n\n if (first === 'custom-objects') {\n return {\n objectId: second,\n entityId: splits[3],\n };\n }\n }, [clientObject, pathname]);\n\n const isHiddenByPattern = useMemo(() => {\n const matchers = currentWindow.match;\n const ignore = currentWindow.ignore;\n\n if (matchers?.length && !matchers.some((m: string) => new RegExp(m).test(pathname))) {\n return true;\n }\n\n if (\n defaultIgnorePatterns\n .concat(ignore ?? [])\n .filter(Boolean)\n .some((m) => {\n try {\n return new RegExp(m).test(pathname);\n } catch {\n return false;\n }\n })\n ) {\n return true;\n }\n\n return false;\n }, [currentWindow, pathname]);\n\n const currentPluginId = currentWindow.plugin_api_name\n ? installedPluginAPINamesToIds[currentWindow.plugin_api_name]\n : '';\n\n const [minimized, _setMinimized] = useState(\n () => currentWindow.employee_config?.[id]?.minimized ?? false,\n );\n\n const script = currentWindow.script;\n const type = currentWindow.type;\n const args = currentWindow.args;\n const messageHandlerScript = currentWindow.message_handler;\n\n const width = currentWindow.width ?? 0;\n\n const [height, setHeight] = useState(() => {\n const viewportHeight = window.innerHeight;\n return Math.min(currentWindow.height ?? 0, viewportHeight - frameHeaderSize);\n });\n\n const [windowPosition, setWindowPosition] = useState<WindowPosition | null>(null);\n\n const defaultPosition = currentWindow.default_position;\n\n const getDesiredPosition = useCallback(\n (assumeExpanded: boolean) => {\n const position = currentWindow.employee_config?.[id]?.position;\n\n if (!position?.quadrant) {\n const maxAllowedLeft = window.innerWidth - width;\n let maxAllowedTop = window.innerHeight - height - frameHeaderSize;\n if (minimized && !assumeExpanded) {\n maxAllowedTop = window.innerHeight - frameHeaderSize;\n }\n\n if (position) {\n try {\n const coords = position;\n if (coords.left > maxAllowedLeft) {\n coords.left = maxAllowedLeft;\n }\n if (coords.top > maxAllowedTop) {\n coords.top = maxAllowedTop;\n }\n\n if (coords.left < 0) {\n coords.left = defaultPositionGap;\n }\n\n if (coords.top < 0) {\n coords.top = defaultPositionGap;\n }\n\n return coords;\n } catch {\n // Ignore and move on\n }\n }\n\n let defaultLeft = maxAllowedLeft;\n if (defaultPosition === 'bottom-left') {\n defaultLeft = defaultPositionGap;\n }\n\n return { left: defaultLeft, top: maxAllowedTop - defaultPositionGap };\n } else if (position.quadrant === 'top-left') {\n const left = position.deltas?.left ?? 0;\n const top = position.deltas?.top ?? 0;\n\n return { ...position, left, top };\n } else if (position.quadrant === 'top-right') {\n const left = window.innerWidth - width - (position.deltas?.right ?? 0);\n const top = position.deltas?.top ?? 0;\n\n return { ...position, left, top };\n } else if (position.quadrant === 'bottom-left') {\n const left = position.deltas?.left ?? 0;\n const top =\n window.innerHeight -\n (minimized ? 0 : height) -\n (position.deltas?.bottom ?? 0) -\n frameHeaderSize;\n\n return { ...position, left, top };\n } else {\n const left = window.innerWidth - width - (position.deltas?.right ?? 0);\n const top =\n window.innerHeight -\n (minimized ? 0 : height) -\n (position.deltas?.bottom ?? 0) -\n frameHeaderSize;\n\n return { ...position, left, top };\n }\n\n return { ...position, left: 0, top: 0 };\n },\n [\n currentWindow,\n id,\n defaultPosition,\n minimized,\n width,\n height,\n frameHeaderSize,\n defaultPositionGap,\n ],\n );\n\n const getPosition = useCallback(\n (assumeExpanded: boolean) => {\n const position = getDesiredPosition(assumeExpanded);\n\n const isBottom = ['bottom-right', 'bottom-left'].includes(position.quadrant ?? '');\n\n const calculatedHeight = isBottom && minimized ? 0 : height;\n\n if (position.left < 0) {\n position.left = 0;\n } else if (position.left > window.innerWidth - width) {\n position.left = window.innerWidth - width;\n }\n\n if (position.top < 0) {\n position.top = 0;\n } else if (position.top > window.innerHeight - calculatedHeight) {\n position.top = window.innerHeight - calculatedHeight;\n }\n\n return position;\n },\n [getDesiredPosition, width, height, minimized],\n );\n\n useEffect(() => {\n const currentHeight = currentWindow.height ?? 0;\n if (currentHeight > viewportHeight) {\n setHeight(viewportHeight - frameHeaderSize);\n const position = getDesiredPosition(true);\n position.top = 0;\n setWindowPosition(position);\n } else {\n setHeight(currentHeight);\n }\n }, [currentWindow.height, getDesiredPosition, viewportHeight, frameHeaderSize]);\n\n const [delayedModalHide, setDelayedModalHide] = useState(minimized);\n const [circleMinimized, setCircleMinimized] = useState(minimized && isCircle);\n\n const animationDelay = height * 0.0005 * 1000; // match animation duration for floating frames\n\n const setMinimized = (min: boolean): void => {\n _setMinimized(min);\n\n // delay animation for minizimation to circle\n if (min && isCircle) {\n setTimeout(() => {\n setCircleMinimized(min);\n }, animationDelay);\n } else if (isCircle) {\n setCircleMinimized(min);\n }\n // delay hiding frame if a modal is open to show animation\n if (hiddenByModal) {\n setTimeout(() => {\n setDelayedModalHide(min);\n }, animationDelay);\n } else {\n setDelayedModalHide(min);\n }\n if (windowPosition?.quadrant === 'bottom-left' || windowPosition?.quadrant === 'bottom-right') {\n if (min) {\n setWindowPosition((p) => {\n if (!p) {\n return null;\n }\n\n return {\n ...p,\n top: p.top + height,\n };\n });\n } else {\n setWindowPosition((p) => {\n if (!p) {\n return null;\n }\n const windowHeight = window.innerHeight;\n const movePositionUp = p.top >= 0 && p.top + height <= windowHeight;\n return {\n ...p,\n top: movePositionUp ? p.top : p.top - height,\n };\n });\n }\n }\n\n maybeUpdateEmployeeConfig?.(id, minimized, windowPosition)({ minimized: min });\n };\n\n const [\n execute,\n { pending, hidden: hiddenByScript, indicator, triggerHidden, hideHeader: hideHeaderByScript },\n ] = useFloatingFrameCustomScript({\n onError: (e) => {\n showToast({\n message: `${t('Plugin error:')} ${(e as MaybeMessageError)?.message ?? ''}`,\n variant: 'failure',\n });\n },\n scriptUIRef,\n plugin: currentWindow,\n onChangeMinimized: (minimized: boolean) => {\n setMinimized(minimized);\n },\n });\n\n const hideHeader = useMemo(() => hideHeaderByScript && isFixed, [hideHeaderByScript, isFixed]);\n\n const tooltipPosition = useMemo(() => {\n if (!windowPosition) return 'top';\n\n const { left, top } = windowPosition;\n const windowWidth = window.innerWidth;\n\n // we are only concerned with right and top since these edges will cause overflow\n const atRightEdge = windowWidth - (left + width) < 40;\n const atTopEdge = top < 40;\n\n if (atRightEdge) {\n return 'left';\n }\n if (atTopEdge) {\n return 'bottom';\n }\n\n return 'top';\n }, [windowPosition, width]);\n\n const resolveCircleEl = useCallback(() => {\n const currentSide = isBottomLeftFixed ? 'left' : 'right';\n const elementId = `${currentWindow.plugin_api_name}-${currentWindow.api_name}-trigger-${currentSide}`;\n const el = document.getElementById(elementId);\n return el;\n }, [isBottomLeftFixed, currentWindow]);\n\n const computeFixedPosition = useCallback(() => {\n if (!isFixed) return;\n const circleEl = resolveCircleEl();\n if (!circleEl) return;\n\n const rect = circleEl.getBoundingClientRect();\n const contentHeight = minimized ? 0 : height;\n const headerH = hideHeader ? 0 : frameHeaderSize;\n\n let top = rect.top - (contentHeight + headerH) - defaultPositionGap;\n let left = isBottomLeftFixed ? rect.left : rect.right - width;\n\n // clamp to viewport using the FULL frame height (content + header)\n const fullFrameHeight = contentHeight + headerH;\n const maxLeft = Math.max(0, window.innerWidth - width);\n const maxTop = Math.max(0, window.innerHeight - fullFrameHeight);\n\n left = Math.min(Math.max(0, left), maxLeft);\n top = Math.min(Math.max(0, top), maxTop);\n\n setWindowPosition({\n left,\n top,\n quadrant: isBottomLeftFixed ? 'bottom-left' : 'bottom-right',\n deltas: {\n top,\n left,\n right: window.innerWidth - (left + width),\n bottom: window.innerHeight - (top + fullFrameHeight),\n },\n });\n }, [\n isFixed,\n isBottomLeftFixed,\n height,\n minimized,\n width,\n hideHeader,\n resolveCircleEl,\n frameHeaderSize,\n defaultPositionGap,\n ]);\n\n useEffect(() => {\n if (isFixed) {\n computeFixedPosition();\n }\n }, [isFixed, height, minimized, computeFixedPosition]);\n\n useEffect(() => {\n if (!isFixed) return;\n\n computeFixedPosition();\n\n const bodyRO = new ResizeObserver(() => {\n computeFixedPosition();\n });\n\n bodyRO.observe(document.body);\n\n return () => {\n bodyRO.disconnect();\n };\n }, [isFixed, computeFixedPosition]);\n\n useEffect(() => {\n if (!hasRunScript.current && script && type === 'script' && !isHiddenByPattern) {\n hasRunScript.current = true;\n execute(script, { ...args });\n }\n }, [execute, script, type, args, isHiddenByPattern]);\n\n // This is the handler for events triggered by another piece of the integration,\n // like a full-page routable screen. It should not be confused with the click handler,\n // or the frame message handler.\n useEffect(() => {\n const handleRunFrameScriptFromInteraction = (e?: Event): void => {\n const event = e as\n | {\n detail?: {\n recipient?: { frame?: string; plugin?: string; script?: string };\n args?: Record<string, unknown>;\n };\n }\n | undefined;\n\n if (event?.detail?.recipient?.frame === currentWindow.api_name) {\n const payload = event.detail;\n\n if (payload.recipient?.plugin !== currentWindow.plugin_api_name) {\n return;\n }\n\n if (payload.recipient.script && currentWindow.event_scripts?.[payload.recipient.script]) {\n const script = currentWindow.event_scripts[payload.recipient.script] ?? '';\n\n execute(script, {\n ...payload.args,\n ...args,\n ...additionalArgs,\n });\n }\n }\n };\n\n window.addEventListener(runFrameScriptEventName, handleRunFrameScriptFromInteraction);\n\n return () => {\n window.removeEventListener(runFrameScriptEventName, handleRunFrameScriptFromInteraction);\n };\n }, [currentWindow, execute, args, additionalArgs]);\n\n // Used when actively moving the floating window, to prevent accidentally\n // losing focus to an iframe or other element\n const [dragging, setDragging] = useState(false);\n\n const dragEnd = (\n _event: unknown,\n context: {\n node: HTMLElement | null;\n },\n ): void => {\n setDragging(false);\n touchFloatingFrame(id);\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n\n if (context.node) {\n const rect = context.node.getBoundingClientRect();\n const left = rect.left;\n const top = rect.top;\n const bottom = top + rect.height;\n const right = left + rect.width;\n\n const topDelta = top;\n const bottomDelta = windowHeight - bottom;\n const leftDelta = left;\n const rightDelta = windowWidth - right;\n\n const quadrant = getQuadrant(topDelta, leftDelta, bottomDelta, rightDelta);\n\n const result = {\n left,\n right,\n top,\n quadrant,\n deltas: {\n top: topDelta,\n bottom: bottomDelta,\n left: leftDelta,\n right: rightDelta,\n },\n };\n\n setWindowPosition(result);\n\n maybeUpdateEmployeeConfig?.(id, minimized, windowPosition)({ position: result });\n }\n };\n\n useEffect(() => {\n const handleUpdate = (): void => {\n if (isFixed) {\n computeFixedPosition();\n } else {\n setWindowPosition(getPosition(false));\n }\n };\n\n window.addEventListener('resize', handleUpdate);\n\n return () => {\n window.removeEventListener('resize', handleUpdate);\n };\n }, [isFixed, computeFixedPosition, getPosition]);\n\n // This is the handler for click events coming from the floating frame.\n useManualInteraction(execute, currentWindow, scriptUIRef, pending, args);\n\n // This is the handler for frame messages coming from the iframe inside the floaing frame.\n useEffect(() => {\n const handleMessageEvent = (ev: MessageEvent): void => {\n if (\n ev.source !== window &&\n messageHandlerScript &&\n !defaultFrameIgnoreUrls.includes(ev.origin)\n ) {\n execute(messageHandlerScript, {\n ...args,\n eventData: ev.data,\n });\n }\n };\n\n window.addEventListener('message', handleMessageEvent);\n\n return () => {\n window.removeEventListener('message', handleMessageEvent);\n };\n }, [execute, args, messageHandlerScript]);\n\n const { outputUIRef, scopedCss, sanitizedHtml, interactableScriptRef } = usePluginCustomHTML(\n currentWindow,\n {},\n );\n\n const hidden = !delayedModalHide\n ? hiddenByScript || isHiddenByPattern\n : hiddenByScript || isHiddenByPattern || hiddenByModal;\n\n const parentClassName = `floating-window-parent--${id}`;\n const dragHandleClassName = `floating-drag-handle--${id}`;\n const contentClassName = `floating-window-content--${id}`;\n let currentSide: 'left' | 'right' =\n currentWindow.employee_config?.[id]?.position?.quadrant?.split('-')[1] === 'right'\n ? 'right'\n : 'left';\n\n if (isBottomLeftFixed) {\n currentSide = 'left';\n } else if (isBottomRightFixed) {\n currentSide = 'right';\n }\n\n const customIconDataUrl = currentWindow.minimized_config?.customIcon;\n\n let CustomIcon = null;\n if (customIconDataUrl?.startsWith('data:image/')) {\n CustomIcon = ({ className = '' }: { className?: string }) => (\n <img\n src={customIconDataUrl}\n alt={currentWindow.title || 'Open Frame'}\n className={`object-cover select-none pointer-events-none ${className}`}\n />\n );\n }\n\n if (!windowPosition) {\n setWindowPosition(getPosition(false));\n }\n\n return {\n circleProps: {\n id,\n side: currentSide,\n circleIcon,\n CustomIcon,\n circleColor,\n onClick: () => {\n setMinimized(!minimized);\n },\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n hidden: Boolean(hidden || isHiddenByPattern || hideOnMinimized || triggerHidden),\n },\n parentProps: {\n className: parentClassName,\n dragging,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n hidden: hidden || circleMinimized || isHiddenByPattern || hideOnMinimized,\n },\n draggableProps: {\n onStop: dragEnd,\n onStart: () => {\n setDragging(true);\n },\n bounds: `.${parentClassName}`,\n handle: `.${dragHandleClassName}`,\n defaultPosition: {\n x: windowPosition?.left ?? 0,\n y: windowPosition?.top ?? 0,\n },\n position: {\n x: windowPosition?.left ?? 0,\n y: windowPosition?.top ?? 0,\n },\n disabled: isFixed,\n },\n floatProps: {\n pending,\n width,\n dragging,\n height,\n isCircle: isCircle && minimized,\n },\n contentProps: {\n className: contentClassName,\n dragging,\n solid: true,\n },\n minimized,\n pending,\n indicator,\n hideHeader,\n isFixed,\n isCircle,\n outputUIRef,\n scopedCss,\n sanitizedHtml,\n interactableScriptRef,\n tooltipPosition,\n currentPluginId,\n setMinimized,\n dragHandleClassName,\n height,\n script,\n dragging,\n frameOffset,\n scriptUIRef,\n };\n};\n","import { useEffect } from 'react';\nimport type { PartialLocation } from '../../types/common.js';\nimport { getStableHash } from '../../util/encode.js';\nimport {\n IFRAME_PREFIX,\n ROUTE_CHANGE_IFRAME_EVENT,\n ROUTE_CHANGE_INTERNAL_EVENT,\n} from '../../communication/constants.js';\nimport { isFlagEnabled } from '../../util/flags.js';\n\nexport const useLocationChange = (): void => {\n useEffect(() => {\n let previousEventHash: number | null = null;\n\n const listener = (e: CustomEventInit<{ location: PartialLocation }>): void => {\n if (!e.detail?.location) {\n return;\n }\n\n const locationHash = getStableHash(e.detail.location);\n\n if (locationHash === previousEventHash) {\n return;\n }\n\n previousEventHash = locationHash;\n\n const frames: NodeListOf<HTMLIFrameElement> = document.querySelectorAll(\n `iframe[id^=${IFRAME_PREFIX}-]`,\n );\n\n frames.forEach((frame) => {\n let targetOrigin = null;\n\n try {\n const url = new URL(frame.src, window.location.href);\n\n targetOrigin = url.origin;\n } catch (error) {\n const isDebug = isFlagEnabled('script-runner-logging');\n\n if (isDebug) {\n console.warn(\n 'Failed to parse iframe src for location change message target origin:',\n error,\n );\n }\n targetOrigin = null;\n }\n\n if (!targetOrigin) {\n return;\n }\n\n frame.contentWindow?.postMessage(\n {\n action: ROUTE_CHANGE_IFRAME_EVENT,\n location: e.detail?.location,\n },\n targetOrigin,\n );\n });\n };\n\n window.addEventListener(ROUTE_CHANGE_INTERNAL_EVENT, listener);\n\n return () => {\n window.removeEventListener(ROUTE_CHANGE_INTERNAL_EVENT, listener);\n };\n }, []);\n};\n","import { type FC, type ReactNode } from 'react';\nimport { AppStateWrapper, type AppStateWrapperProps } from './appState.js';\nimport { RunnerStateWrapper } from './runnerState.js';\nimport { HistoryWrapper, type HistoryWrapperProps } from './history.js';\nimport { ModalsWrapper, type ExposedModals, type ModalWrapperContextArgs } from './modals.js';\nimport { MonitoringWrapper, type MonitoringWrapperProps } from './monitoring.js';\nimport { SessionDataWrapper } from './session.js';\nimport { TerminatorsWrapper } from './terminators.js';\nimport { ToastWrapper, type ToastWrapperProps } from './toast.js';\nimport { NetworkWrapper, type NetworkWrapperProps } from './network.js';\nimport { useLocationChange } from '../hooks/useLocationChange.js';\nimport { FloatingFrameWrapper } from './floatingFrame.js';\nimport { TranslationWrapper } from './translation.js';\n\nexport type TouchFloatingFrame = (id: string, cb?: (value: string[]) => void) => void;\n\ninterface AdditionalContextProps {\n showLoadingIndicator: boolean;\n hiddenByModal: boolean;\n hasFinishedBootstrapping: boolean;\n waitingOnRouteScript: boolean;\n}\nexport interface PluginEngineProviderProps\n extends\n Omit<AppStateWrapperProps, 'children'>,\n Omit<HistoryWrapperProps, 'children'>,\n Omit<MonitoringWrapperProps, 'children'>,\n Omit<ToastWrapperProps, 'children'>,\n Omit<NetworkWrapperProps, 'children'> {\n modal: Omit<ModalWrapperContextArgs, 'children'>;\n children: (props: ExposedModals & AdditionalContextProps) => ReactNode;\n hideFramesOnModal?: boolean;\n t?: (s: string) => string;\n}\n\nexport const PluginEngineProvider: FC<PluginEngineProviderProps> = (props) => {\n const {\n children,\n bootstrapPlugins = [],\n userConfigs = [],\n user,\n teamMember,\n business,\n clientObject,\n onNavigate,\n modal,\n monitoringExceptionHelper,\n showToast,\n clearToasts,\n performRequest,\n appPath,\n hideFramesOnModal = true,\n createFileId,\n performFileUpload,\n t,\n } = props;\n\n useLocationChange();\n\n return (\n <AppStateWrapper\n bootstrapPlugins={bootstrapPlugins}\n userConfigs={userConfigs}\n user={user}\n teamMember={teamMember}\n business={business}\n clientObject={clientObject}\n appPath={appPath}\n >\n {({ hasFinishedBootstrapping, waitingOnRouteScript }) => {\n return (\n <TranslationWrapper t={t}>\n <RunnerStateWrapper>\n {(showLoadingIndicator) => {\n return (\n <HistoryWrapper onNavigate={onNavigate}>\n <ModalsWrapper {...modal}>\n {(modals) => {\n return (\n <MonitoringWrapper monitoringExceptionHelper={monitoringExceptionHelper}>\n <SessionDataWrapper>\n <TerminatorsWrapper>\n <ToastWrapper showToast={showToast} clearToasts={clearToasts}>\n <FloatingFrameWrapper>\n {(hiddenByModal) => {\n return (\n <NetworkWrapper\n performRequest={performRequest}\n createFileId={createFileId}\n performFileUpload={performFileUpload}\n >\n {children({\n ...modals,\n showLoadingIndicator,\n hasFinishedBootstrapping,\n waitingOnRouteScript,\n hiddenByModal: hideFramesOnModal\n ? hiddenByModal\n : false,\n })}\n </NetworkWrapper>\n );\n }}\n </FloatingFrameWrapper>\n </ToastWrapper>\n </TerminatorsWrapper>\n </SessionDataWrapper>\n </MonitoringWrapper>\n );\n }}\n </ModalsWrapper>\n </HistoryWrapper>\n );\n }}\n </RunnerStateWrapper>\n </TranslationWrapper>\n );\n }}\n </AppStateWrapper>\n );\n};\n","import { useEffect } from 'react';\nimport { useAppState } from '../context/appState.js';\n\nexport const PluginBootstrapSuccess = (): null => {\n const { onInitialBootstrap } = useAppState();\n\n // Run some logic after the app has been fully bootstrapped for the first time (including\n // any plugins that need to block loading)\n useEffect(() => {\n onInitialBootstrap();\n }, [onInitialBootstrap]);\n\n return null;\n};\n","import { useRef } from 'react';\nimport { useToast } from '../context/toast.js';\nimport { useTranslation } from '../context/translation.js';\nimport { useAppState } from '../context/appState.js';\nimport { useRecordDetailCustomScript } from '../hooks/useRecordDetailCustomScript.js';\nimport type { MaybeMessageError } from '../../types/common.js';\nimport type { CommonPluginDefinition, RouteScriptConfig } from '../../types/index.js';\n\ninterface RouteScriptRunnerProps {\n pathname: string;\n routeScripts: RouteScriptConfig[];\n}\n\nconst getRouteMatcher = (\n objectId: string,\n clientObjectId: string,\n): { isClient: boolean; exp: RegExp } => {\n if (objectId === clientObjectId || objectId === 'client') {\n return { isClient: true, exp: new RegExp(`^/client/([a-zA-Z0-9-]+)/.*$`) };\n }\n\n return {\n isClient: false,\n exp: new RegExp(`^/custom-objects/${objectId}/([a-zA-Z0-9-]+).*$`),\n };\n};\n\nconst getPluginStateKey = (item: CommonPluginDefinition): string => {\n return `${item.plugin_api_name}-${item.api_name}`;\n};\n\nexport const RouteScriptRunner = (props: RouteScriptRunnerProps): null => {\n const { showToast } = useToast();\n const { t } = useTranslation();\n const { pathname, routeScripts } = props;\n\n const previousPathname = useRef('');\n\n const { clientObject, setRouteScriptRunState } = useAppState();\n const clientObjectId = clientObject?.id;\n\n const [executeScript] = useRecordDetailCustomScript({\n onError: (e) => {\n showToast({\n message: `${t('Action could not run:')} ${(e as MaybeMessageError)?.message ?? ''}`,\n variant: 'failure',\n });\n },\n // Only route script handlers need to be able to release a blocking script, since they're the only type that\n // can block the app rendering.\n onReleaseBlockingScript: (executionPlugin) => {\n if (executionPlugin) {\n const key = getPluginStateKey(executionPlugin as CommonPluginDefinition);\n setRouteScriptRunState((state) => {\n return {\n ...state,\n [key]: {\n ...state[key],\n waitingOnRouteScript: false,\n },\n };\n });\n }\n },\n entityId: '',\n objectId: '',\n });\n\n const getRunnerStateForScript = (\n checkPath: string,\n checkObjectId: string,\n ): { canRunScript: true; entityId: string; customObjectId: string } | { canRunScript: false } => {\n const { exp, isClient } = getRouteMatcher(checkObjectId, clientObjectId ?? '');\n\n const match = exp.exec(checkPath);\n\n if (match?.[1]) {\n return {\n canRunScript: true,\n entityId: match[1],\n customObjectId: isClient ? (clientObjectId ?? '') : checkObjectId,\n };\n }\n\n return {\n canRunScript: false,\n };\n };\n\n const handlePathChange = (previousPath = '', currentPath = ''): void => {\n const runQueue = routeScripts\n .map((script) => {\n return {\n ...getRunnerStateForScript(currentPath, script.custom_object.id),\n ...script,\n };\n })\n .filter(\n (\n q,\n ): q is RouteScriptConfig & {\n canRunScript: true;\n entityId: string;\n customObjectId: string;\n } => {\n if (!q.canRunScript) {\n return false;\n }\n\n if (q.routes?.length) {\n return q.routes.some((pattern) => {\n return new RegExp(pattern).test(currentPath);\n });\n }\n\n return true;\n },\n );\n\n runQueue.forEach((item) => {\n const itemKey = getPluginStateKey(item);\n\n setRouteScriptRunState((state) => {\n return {\n ...state,\n [itemKey]: {\n ...state[itemKey],\n waitingOnRouteScript: item.blocking,\n },\n };\n });\n void executeScript(\n item.script,\n {\n previousRoute: previousPath,\n currentRoute: currentPath,\n },\n item,\n {\n entityId: item.entityId,\n objectId: item.customObjectId,\n },\n ).then(() => {\n setRouteScriptRunState((state) => {\n return {\n ...state,\n [itemKey]: {\n ...state[itemKey],\n waitingOnRouteScript: false,\n },\n };\n });\n });\n });\n };\n\n if (previousPathname.current !== pathname && clientObjectId) {\n const previousValue = previousPathname.current;\n previousPathname.current = pathname;\n\n handlePathChange(previousValue, pathname);\n }\n\n return null;\n};\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n type SetStateAction,\n} from 'react';\nimport type { UnknownJSON } from '../../types/common.js';\nimport type {\n AssistantConfigAction,\n AssistantField,\n MatchSetupAssistantField,\n SetupAssistantConfig,\n} from '../../types/modals.js';\n\ninterface TemplateAssociation {\n custom_object: {\n id?: string;\n object_name?: string;\n };\n browser_js_action_template: AssistantConfigAction;\n}\nimport { getAllNestedInputsFromConfig, getFieldFromAction } from '../../workers/util.js';\nimport { useAppState } from './appState.js';\nimport { runExpression } from '../../run.js';\n\ninterface SetupAssistantContextValue {\n state: Record<string, unknown>;\n setState: (\n stateUpdate: SetStateAction<Record<string, UnknownJSON>> | Record<string, UnknownJSON>,\n ) => void;\n interpolateValue: (accessor: string) => unknown;\n getNestedFields: () => AssistantField[];\n reInferFieldsForObject: (objectKey: string) => Promise<void>;\n inferencePending: boolean;\n evaluateExpression: (expression: string, key: string) => Promise<unknown>;\n shouldHideField: (key: string) => boolean;\n shouldDisableField: (key: string) => boolean;\n expressionsIdle: boolean;\n getFieldErrorState: (\n key: string,\n ) => { message: string | undefined; showMessage: boolean; error: boolean } | undefined;\n validateForm: () => Promise<{ isValid: boolean; includedKeys: string[] }>;\n waitingExpressionCount: number;\n initialExpressionsPending: boolean;\n flattenedFields: AssistantField[];\n flattenedFieldsByKey: Record<string, AssistantField>;\n afterFieldChange: (key: string) => void;\n registerFieldResetter: (key: string, resetFn: () => void) => void;\n disabledKeys: string[];\n}\n\nexport const SetupAssistantContext = createContext<SetupAssistantContextValue | null>(null);\n\nconst SetupAssistantProvider = SetupAssistantContext.Provider;\n\nconst getUsableValue = (type: string, value?: UnknownJSON): unknown => {\n if (type === 'custom_object') {\n return value?.id;\n }\n};\n\nconst doesValueExist = (field: AssistantField, value?: { value?: UnknownJSON }): boolean => {\n if (field.type === 'custom_object') {\n if (field.allow_multiple) {\n const consideredValue = (value?.value ?? []) as unknown[];\n return consideredValue.length > 0;\n }\n\n return Boolean(value?.value?.id);\n } else if (field.type === 'field') {\n if (field.allow_multiple) {\n const consideredValue = (value?.value ?? []) as unknown[];\n\n return consideredValue.length > 0;\n }\n\n return Boolean(value?.value?.value);\n } else if (field.type === 'text') {\n const consideredValue = (value?.value ?? '') as string;\n\n return Boolean(consideredValue.trim());\n } else if (field.type === 'number') {\n const parsed = Number(value?.value);\n\n return Boolean(value?.value) && !isNaN(parsed);\n } else if (field.type === 'select') {\n if (field.allow_multiple) {\n const consideredValue = (value?.value ?? []) as unknown[];\n\n return consideredValue.length > 0;\n }\n\n return Boolean(value?.value?.value);\n } else if (field.type === 'boolean') {\n return Boolean(value?.value);\n }\n\n return false;\n};\n\nconst getNestedObjectsFromConfig = (config: SetupAssistantConfig): MatchSetupAssistantField[] => {\n const objects = (config.fields ?? []).filter(\n (entry): entry is AssistantField => entry.type === 'custom_object',\n );\n const containers = (config.fields ?? []).filter((entry) => entry.type === 'container');\n\n const recursiveObjects = containers.flatMap((container) => {\n return getNestedObjectsFromConfig(container as SetupAssistantConfig);\n });\n\n const actionObjects = config.actions?.filter((action) => action.hint_object_name) ?? [];\n\n return [\n ...objects,\n ...recursiveObjects,\n ...actionObjects.map((action) => {\n return {\n ...getFieldFromAction(action),\n match_hint: action.hint_object_name ?? '',\n };\n }),\n ];\n};\n\nconst getNestedFieldsFromConfig = (config: SetupAssistantConfig): AssistantField[] => {\n const objects = (config.fields ?? []).filter((entry) => entry.type === 'field');\n const containers = (config.fields ?? []).filter((entry) => entry.type === 'container');\n\n const recursiveFields = containers.flatMap((container) =>\n getNestedFieldsFromConfig(container as SetupAssistantConfig),\n );\n\n return [...objects, ...recursiveFields] as AssistantField[];\n};\n\ninterface CustomObjectDetails {\n id: string;\n objectName: string;\n fields: { id: string; name: string; displayName: string }[];\n}\n\nexport const SetupAssistantController = ({\n children,\n config,\n value,\n onStateChange,\n disabledKeys,\n templateAssociationsByActionApiName,\n getObjectByAPIName,\n getCustomObjectDetails,\n}: {\n children: React.ReactNode;\n config: SetupAssistantConfig;\n value?: Record<string, UnknownJSON>;\n onStateChange?: (state: Record<string, unknown>) => void;\n templateAssociationsByActionApiName?: Record<string, TemplateAssociation[]>;\n disabledKeys?: string[];\n getObjectByAPIName: (\n apiName: string,\n ) => Promise<{ id: string; object_name: string }[] | undefined>;\n getCustomObjectDetails: (objectId: string) => Promise<CustomObjectDetails>;\n}): ReactNode => {\n const [_rawState, _setState] = useState(value ?? {});\n\n const flattenedFields = useMemo(() => {\n return getAllNestedInputsFromConfig(config);\n }, [config]);\n\n const defaultState = useMemo(() => {\n const defaultValues = flattenedFields.reduce((acc: Record<string, UnknownJSON>, field) => {\n return {\n ...acc,\n [field.key]: {\n type: field.type,\n value: field.default,\n },\n };\n }, {});\n\n return defaultValues;\n }, [flattenedFields]);\n\n const state = useMemo(() => {\n const actionTemplatePartialState = Object.entries(\n templateAssociationsByActionApiName ?? {},\n ).reduce((acc: Record<string, unknown>, [actionApiName, associations]) => {\n const actionFieldKey = `action__${actionApiName}`;\n\n const associatedObjects = associations.map((assoc) => {\n return {\n id: assoc.custom_object.id ?? '',\n objectName: assoc.custom_object.object_name ?? 'Unknown Object',\n };\n });\n\n if (associatedObjects.length > 0 && associations.length > 0 && associations[0]) {\n acc[actionFieldKey] = {\n type: 'custom_object',\n value: associatedObjects,\n config: getFieldFromAction(associations[0].browser_js_action_template),\n };\n }\n\n return acc;\n }, {});\n\n const stateValues = {\n ...actionTemplatePartialState,\n ..._rawState,\n };\n\n disabledKeys?.forEach((key) => {\n if (stateValues[key]) {\n stateValues[key] = undefined;\n }\n });\n\n return stateValues as Record<string, UnknownJSON>;\n }, [_rawState, templateAssociationsByActionApiName, disabledKeys]);\n\n const hasRunInference = useRef(Boolean(value));\n\n const inferenceState = useRef({});\n const [inferencePending, setInferencePending] = useState(!value);\n const [waitingExpressions, setWaitingExpressions] = useState<Record<string, boolean>>({});\n const [expressionResults, setExpressionResults] = useState<Record<string, boolean>>({});\n const [expressionsIdle, setExpressionsIdle] = useState(false);\n const idleTimer = useRef<number | null>(null);\n const [errors, setErrors] = useState<Record<string, string | undefined>>({});\n const [expressionsStarted, setExpressionsStarted] = useState(false);\n\n const [initialExpressionsPending, setInitialExpressionsPending] = useState(true);\n\n const fieldResetterRef = useRef<Record<string, () => void>>({});\n\n /*\n * Each field can register a reset function, that when called will clear the field value.\n * This allows each field type to control what actions need to happen in order to fully\n * reset itself.\n */\n const registerFieldResetter = useCallback((key: string, resetFn: () => void) => {\n fieldResetterRef.current[key] = resetFn;\n }, []);\n\n /*\n * We need to maintain a copy of the state outside the render cycle for inferring fields choices based on\n * the hint name.\n */\n const setState = useCallback(\n (stateUpdate: SetStateAction<Record<string, UnknownJSON>> | Record<string, UnknownJSON>) => {\n if (typeof stateUpdate === 'function') {\n _setState((prev) => {\n const result = stateUpdate(prev);\n inferenceState.current = result;\n\n onStateChange?.(result);\n\n return result;\n });\n } else {\n inferenceState.current = stateUpdate;\n _setState(stateUpdate);\n onStateChange?.(stateUpdate);\n }\n\n setErrors({});\n },\n [onStateChange],\n );\n\n /*\n * Take values like \"{{some_key}}\" and replace in the actual value from state\n */\n const interpolateValueFromState = useCallback(\n (accessor: string, consideredState: Record<string, UnknownJSON>) => {\n if (accessor.startsWith('{{') && accessor.endsWith('}}')) {\n const stateKey = accessor.slice(2, -2).trim();\n\n return getUsableValue(\n consideredState[stateKey]?.type as string,\n consideredState[stateKey]?.value as UnknownJSON,\n );\n }\n\n return accessor;\n },\n [],\n );\n\n const interpolateValue = useCallback(\n (accessor: string) => {\n return interpolateValueFromState(accessor, state);\n },\n [state, interpolateValueFromState],\n );\n\n const { clientObject } = useAppState();\n\n const getPotentialMatch = useCallback(\n async (api_name: string) => {\n if (api_name === 'client_client' && clientObject) {\n return [\n {\n id: clientObject.id,\n object_name: clientObject.objectName,\n },\n ];\n }\n\n const potentialMatch = await getObjectByAPIName(api_name);\n\n return potentialMatch;\n },\n [clientObject, getObjectByAPIName],\n );\n\n /*\n * If there is a match_hint for an object, we can try to infer the object by its API name\n * and set it automatically.\n */\n const handleInferObjects = useCallback(async () => {\n const objectsToInfer = getNestedObjectsFromConfig(config);\n\n for (const inferrableObject of objectsToInfer) {\n if (!inferrableObject.match_hint) {\n continue;\n }\n\n const potentialMatch = await getPotentialMatch(inferrableObject.match_hint);\n\n if (potentialMatch?.[0]) {\n const value = {\n id: potentialMatch[0].id,\n objectName: potentialMatch[0].object_name,\n };\n\n setState((prev) => {\n const result = {\n ...prev,\n [inferrableObject.key]: {\n type: 'custom_object',\n value: inferrableObject.allow_multiple ? [value] : value,\n },\n };\n\n return result;\n });\n }\n }\n }, [config, setState, getPotentialMatch]);\n\n const getInferrableFields = useCallback(() => {\n return getNestedFieldsFromConfig(config);\n }, [config]);\n\n /*\n * Similar to handleInferObjects, but for fields. Can either take an objectId as forceObjectId, or\n * look it up in the state based on additional references. objectIdFilter can be used to only\n * run the inference on fields for a particular object key.\n */\n const handleInferFields = useCallback(\n async (objectIdFilter?: string, forceObjectId?: string) => {\n const fieldsToInfer = getInferrableFields();\n\n const objectResults: Record<string, CustomObjectDetails> = {};\n for (const inferrableField of fieldsToInfer) {\n if (!inferrableField.object_id) {\n continue;\n }\n\n const objectId =\n forceObjectId ??\n (interpolateValueFromState(inferrableField.object_id, inferenceState.current) as string);\n\n if (objectIdFilter && !inferrableField.object_id.includes(objectIdFilter)) {\n continue;\n }\n\n if (!objectResults[objectId] && objectId) {\n try {\n objectResults[objectId] = await getCustomObjectDetails(objectId);\n } catch {\n // Swallow error fetching object, since the user can recover by picking a different one\n }\n }\n\n const objectDetail = objectResults[objectId];\n\n if (objectDetail) {\n const fieldMatch = objectDetail.fields.find((f) => f.name === inferrableField.match_hint);\n\n if (fieldMatch) {\n setState((prev) => {\n const result = {\n ...prev,\n [inferrableField.key]: {\n type: 'field',\n value: {\n value: fieldMatch.id,\n label: fieldMatch.displayName,\n },\n associatedObject: {\n id: objectId,\n name: objectDetail.objectName,\n },\n },\n };\n\n return result;\n });\n }\n }\n }\n },\n [interpolateValueFromState, getInferrableFields, setState, getCustomObjectDetails],\n );\n\n const handleReinferObjectByKey = useCallback(\n async (key: string) => {\n const objectsToInfer = getNestedObjectsFromConfig(config);\n\n const matchingObject = objectsToInfer.find((obj) => obj.key === key);\n\n if (matchingObject?.match_hint) {\n let matchedObjectId = '';\n const potentialMatch = await getPotentialMatch(matchingObject.match_hint);\n\n const match = potentialMatch?.[0];\n\n if (match) {\n matchedObjectId = match.id;\n\n setState((prev) => {\n const result = {\n ...prev,\n [key]: {\n type: 'custom_object',\n value: {\n id: match.id,\n objectName: match.object_name,\n },\n },\n };\n\n return result;\n });\n\n if (matchedObjectId) {\n void handleInferFields(undefined, matchedObjectId);\n }\n }\n }\n },\n [config, setState, handleInferFields, getPotentialMatch],\n );\n\n const handleConfigInference = useCallback(async () => {\n // Objects have to complete first, then fields, since the fields need the object metadata\n await handleInferObjects();\n await handleInferFields();\n setInferencePending(false);\n }, [handleInferObjects, handleInferFields]);\n\n const getNestedFields = useCallback(() => {\n return getNestedFieldsFromConfig(config);\n }, [config]);\n\n const reInferFieldsForObject = useCallback(\n (objectKey: string) => {\n return handleInferFields(objectKey);\n },\n [handleInferFields],\n );\n\n const resetIdleTimeout = useCallback(() => {\n if (idleTimer.current) {\n clearTimeout(idleTimer.current);\n idleTimer.current = null;\n }\n\n idleTimer.current = setTimeout(() => {\n setExpressionsIdle(true);\n }, 500);\n }, []);\n\n const evaluateExpression = useCallback(\n async (expression: string, key: string) => {\n resetIdleTimeout();\n setWaitingExpressions((prev) => ({ ...prev, [key]: true }));\n setExpressionsStarted(true);\n\n const result = await runExpression(expression, {\n ...defaultState,\n ...state,\n });\n\n setExpressionResults((prev) => {\n if (prev[key] === false && typeof result === 'boolean' && result) {\n // Key became true from false state, so we re-infer the object if it's not set\n if (!state[key]) {\n void handleReinferObjectByKey(key);\n }\n }\n return { ...prev, [key]: result };\n });\n setWaitingExpressions((prev) => ({ ...prev, [key]: false }));\n\n return result;\n },\n [state, resetIdleTimeout, handleReinferObjectByKey, defaultState],\n );\n\n if (!hasRunInference.current) {\n hasRunInference.current = true;\n void handleConfigInference();\n }\n\n const shouldHideField = useCallback(\n (key: string) => {\n if (expressionResults[key] === false) {\n return true;\n }\n\n return false;\n },\n [expressionResults],\n );\n\n const shouldDisableField = useCallback(\n (key: string) => {\n if (waitingExpressions[key] === true) {\n return true;\n }\n\n return false;\n },\n [waitingExpressions],\n );\n\n const getFieldErrorState = useCallback(\n (key: string) => {\n if (errors[key]) {\n return {\n message: errors[key],\n showMessage: true,\n error: true,\n };\n }\n },\n [errors],\n );\n\n const whenClauses = useMemo(() => {\n const sectionClauses = (config.fields ?? [])\n .filter((entry) => entry.type === 'container')\n .map((c) => c.when);\n\n const fieldClauses = flattenedFields.map((f) => f.when);\n\n return [...sectionClauses, ...fieldClauses].filter(Boolean);\n }, [config, flattenedFields]);\n\n const flattenedFieldsByKey = useMemo(() => {\n return flattenedFields.reduce((acc: Record<string, AssistantField>, field) => {\n acc[field.key] = field;\n return acc;\n }, {});\n }, [flattenedFields]);\n\n const getAdditionalDeps = useCallback(\n (dep: string, results: Set<string>, visited: Set<string>) => {\n results.add(dep);\n const depField = flattenedFieldsByKey[dep];\n\n if (depField?.dependencies?.length) {\n depField.dependencies.forEach((d: string) => {\n if (!visited.has(d)) {\n visited.add(d);\n getAdditionalDeps(d, results, visited);\n }\n });\n }\n },\n [flattenedFieldsByKey],\n );\n\n /*\n * Follow dependency chains to find all fields that depend on a given field, either directly\n * or indirectly (i.e. a field that depends on a field that depends on the changed field).\n * This allows us to reset all dependent fields when a field changes.\n */\n const flattenedFieldsWithDependencies = useMemo(() => {\n const fields = flattenedFields.map((field) => {\n const depsResultSet = new Set<string>();\n const deps = field.dependencies ?? [];\n const visited = new Set<string>();\n\n deps.forEach((dep: string) => {\n getAdditionalDeps(dep, depsResultSet, visited);\n });\n\n return {\n ...field,\n dependencies: Array.from(depsResultSet),\n };\n });\n\n return fields;\n }, [flattenedFields, getAdditionalDeps]);\n\n /*\n * Called during the state update when a field value changes to check the dependent fields\n * and call their reset functions\n */\n const afterFieldChange = useCallback(\n (key: string) => {\n const dependentFields = flattenedFieldsWithDependencies.filter((f) => {\n if (f.dependencies.length === 0) {\n return false;\n }\n\n return f.dependencies.includes(key) && f.key !== key;\n });\n\n dependentFields.forEach((field) => {\n fieldResetterRef.current[field.key]?.();\n });\n },\n [flattenedFieldsWithDependencies],\n );\n\n const validateForm = useCallback(async () => {\n const processedFields = await Promise.all(\n flattenedFields.map(async (field) => {\n if (!field.when) {\n return field;\n }\n\n const isVisible = await runExpression(field.when, {\n ...defaultState,\n ...state,\n });\n\n return isVisible ? field : null;\n }),\n );\n\n const fieldsToCheck = processedFields.filter(Boolean);\n\n let errorCount = 0;\n\n for (const field of fieldsToCheck) {\n if (field && field.required && !doesValueExist(field, state[field.key])) {\n setErrors((prev) => ({\n ...prev,\n [field.key]: 'This field is required',\n }));\n\n errorCount++;\n } else if (field?.validation_pattern) {\n const isValid = new RegExp(field.validation_pattern).test(\n (state[field.key]?.value ?? field.default ?? '') as string,\n );\n\n if (!isValid) {\n setErrors((prev) => ({\n ...prev,\n [field.key]: `Value must match the pattern ${field.validation_pattern ?? ''}`,\n }));\n errorCount++;\n }\n } else {\n if (field) {\n setErrors((prev) => ({\n ...prev,\n [field.key]: undefined,\n }));\n }\n }\n }\n\n return {\n isValid: errorCount === 0,\n includedKeys: fieldsToCheck.map((f) => f?.key).filter((k): k is string => Boolean(k)),\n };\n }, [state, flattenedFields, defaultState]);\n\n useEffect(() => {\n resetIdleTimeout();\n }, [resetIdleTimeout]);\n\n const waitingExpressionCount = Object.values(waitingExpressions).filter(Boolean).length;\n\n if (!expressionsStarted && whenClauses.length === 0) {\n setExpressionsStarted(true);\n }\n\n if (expressionsStarted && initialExpressionsPending && waitingExpressionCount === 0) {\n setInitialExpressionsPending(false);\n }\n\n return (\n <SetupAssistantProvider\n value={{\n state,\n setState,\n interpolateValue,\n getNestedFields,\n reInferFieldsForObject,\n inferencePending,\n evaluateExpression,\n shouldHideField,\n shouldDisableField,\n expressionsIdle,\n getFieldErrorState,\n validateForm,\n waitingExpressionCount,\n initialExpressionsPending,\n flattenedFields,\n flattenedFieldsByKey,\n afterFieldChange,\n registerFieldResetter,\n disabledKeys: disabledKeys ?? [],\n }}\n >\n {children}\n </SetupAssistantProvider>\n );\n};\n\nexport const useSetupAssistant = (): SetupAssistantContextValue => {\n const context = useContext(SetupAssistantContext);\n\n if (!context) {\n throw new Error('useSetupAssistant must be used within a SetupAssistantController');\n }\n\n return context;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/react/context/terminators.tsx","../src/react/context/session.tsx","../src/react/context/appState.tsx","../src/react/context/runnerState.tsx","../src/react/context/modals.tsx","../src/react/context/monitoring.tsx","../src/react/context/history.tsx","../src/react/context/network.tsx","../src/react/context/translation.tsx","../src/react/hooks/useCalendarSourceCustomScript.ts","../src/react/context/toast.tsx","../src/react/hooks/useCalendarSourceData.ts","../src/react/hooks/useFloatingFrameCustomScript.ts","../src/react/hooks/useGenericAppCustomScript.ts","../src/react/hooks/useRecordDetailCustomScript.ts","../src/react/hooks/useAppCustomHTML.ts","../src/react/hooks/useCalendarSourceReset.ts","../src/react/hooks/useManualInteraction.ts","../src/react/hooks/useAppCallback.ts","../src/react/hooks/useAppPage.ts","../src/react/context/floatingFrame.tsx","../src/react/hooks/useFloatingFrame.tsx","../src/react/hooks/useLocationChange.ts","../src/react/context/index.tsx","../src/react/components/AppBoostrapSuccess.tsx","../src/react/components/RouteScriptRunner.tsx","../src/react/context/setupAssistant.tsx"],"names":["createContext","useCallback","jsx","useContext","useState","useMemo","useRef","useEffect","args","viewportHeight","minimized","currentSide","script","value"],"mappings":"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","file":"react.js","sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n type FC,\n type ReactNode,\n} from 'react';\nimport type { TerminatorContent, Terminators } from '../../types/run.js';\n\ninterface TerminatorsContextValue {\n terminators: Terminators;\n cleanupWorkers: () => void;\n}\n\nconst TerminatorsContext = createContext<TerminatorsContextValue | null>(null);\n\nexport const TerminatorsWrapper: FC<{\n children: ReactNode;\n}> = ({ children }) => {\n const terminators = useRef({} as TerminatorContent);\n\n const cleanupWorkers = useCallback(() => {\n Object.keys(terminators.current).forEach((key) => {\n terminators.current[key]?.forEach((fn) => {\n fn();\n });\n terminators.current[key] = [];\n });\n }, []);\n\n useEffect(() => {\n return () => {\n cleanupWorkers();\n };\n }, [cleanupWorkers]);\n\n return (\n <TerminatorsContext.Provider value={{ terminators, cleanupWorkers }}>\n {children}\n </TerminatorsContext.Provider>\n );\n};\n\nexport const useTerminators = (): TerminatorsContextValue => {\n const context = useContext(TerminatorsContext);\n\n if (!context) {\n throw new Error('useTerminators must be used within a TerminatorsWrapper');\n }\n\n return context;\n};\n","import { createContext, useCallback, useContext, useState, type FC, type ReactNode } from 'react';\nimport type { InternalSessionData, SetInternalSessionDataFn } from '../../types/contexts.js';\n\ninterface SessionDataContextValue {\n sessionData: InternalSessionData;\n setSessionData: SetInternalSessionDataFn;\n}\n\nconst SessionDataContext = createContext<SessionDataContextValue | null>(null);\n\nexport const SessionDataWrapper: FC<{\n children: ReactNode;\n}> = ({ children }) => {\n const [sessionData, _setSessionData] = useState<InternalSessionData>({});\n\n const setSessionData = useCallback((pluginId: string, update: InternalSessionData) => {\n _setSessionData((prev) => ({\n ...prev,\n [pluginId]: {\n ...(prev[pluginId] as InternalSessionData),\n ...update,\n },\n }));\n }, []);\n\n return (\n <SessionDataContext.Provider value={{ sessionData, setSessionData }}>\n {children}\n </SessionDataContext.Provider>\n );\n};\n\nexport const useSessionData = (): SessionDataContextValue => {\n const context = useContext(SessionDataContext);\n\n if (!context) {\n throw new Error('useSessionData must be used within a SessionDataWrapper');\n }\n\n return context;\n};\n","import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type FC,\n type ReactNode,\n} from 'react';\nimport type {\n PartialBusiness,\n PartialClientObject,\n PartialTeamMember,\n PartialUser,\n UnknownJSON,\n} from '../../types/common.js';\n\nconst AppStateContext = createContext<AppStateContextValue | null>(null);\n\nexport interface AppStateWrapperProps {\n bootstrapPlugins?: {\n id: string;\n api_name: string;\n }[];\n userConfigs?: { config: UnknownJSON; api_name: string }[];\n children: (context: {\n waitingOnRouteScript: boolean;\n hasFinishedBootstrapping: boolean;\n }) => ReactNode;\n user: PartialUser;\n teamMember: PartialTeamMember;\n business: PartialBusiness;\n clientObject?: PartialClientObject | undefined;\n appPath: string;\n}\n\nexport type RouteScriptRunState = Record<\n string,\n {\n waitingOnRouteScript: boolean;\n }\n>;\ninterface AppStateContextValue {\n installedPluginAPINamesToIds: Record<string, string>;\n userConfigsByApiName: Record<string, UnknownJSON>;\n user: PartialUser;\n teamMember: PartialTeamMember;\n business: PartialBusiness;\n clientObject?: PartialClientObject | undefined;\n appPath: string;\n onInitialBootstrap: () => void;\n setRouteScriptRunState: React.Dispatch<React.SetStateAction<RouteScriptRunState>>;\n}\n\nexport const AppStateWrapper: FC<AppStateWrapperProps> = ({\n children,\n bootstrapPlugins = [],\n userConfigs = [],\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n}) => {\n // Track whether the app has become fully visible already, since we don't want to show a blocking loader\n // if a plugin is later enabled after the initial load\n const [hasFinishedBootstrapping, setHasFinishedBootstrapping] = useState(false);\n\n const [routeScriptRunState, setRouteScriptRunState] = useState<RouteScriptRunState>({});\n\n const waitingOnRouteScript = useMemo(() => {\n return Object.values(routeScriptRunState).some((state) => state.waitingOnRouteScript);\n }, [routeScriptRunState]);\n\n const installedPluginAPINamesToIds = useMemo(() => {\n return bootstrapPlugins.reduce((acc, plugin) => {\n return {\n ...acc,\n [plugin.api_name]: plugin.id,\n };\n }, {});\n }, [bootstrapPlugins]);\n\n const userConfigsByApiName = useMemo(() => {\n return userConfigs.reduce((acc, item) => {\n return {\n ...acc,\n [item.api_name]: item.config,\n };\n }, {});\n }, [userConfigs]);\n\n const onInitialBootstrap = useCallback(() => {\n setHasFinishedBootstrapping(true);\n }, []);\n\n return (\n <AppStateContext.Provider\n value={{\n installedPluginAPINamesToIds,\n userConfigsByApiName,\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n onInitialBootstrap,\n setRouteScriptRunState,\n }}\n >\n {children({\n waitingOnRouteScript,\n hasFinishedBootstrapping,\n })}\n </AppStateContext.Provider>\n );\n};\n\nexport const useAppState = (): AppStateContextValue => {\n const context = useContext(AppStateContext);\n\n if (!context) {\n throw new Error('useAppState must be used within an AppStateWrapper');\n }\n\n return context;\n};\n","import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type FC,\n type ReactNode,\n} from 'react';\nimport { INDICATOR_TYPE } from '../../communication/constants.js';\n\nconst RunnerStateContext = createContext<RunnerStateContextValue | null>(null);\n\ntype GetNewStateFn = (currentState: RunnerStateEntry) => RunnerStateEntry;\n\ninterface RunnerStateContextValue {\n getRunnerStateUpdater: (key: string) => (getNewState: GetNewStateFn) => void;\n getRunnerState: (key?: string) => RunnerStateEntry;\n}\n\ninterface RunnerStateEntry {\n indicator: INDICATOR_TYPE;\n hidden: boolean;\n pending: boolean;\n}\n\ntype RunnerState = Record<string, RunnerStateEntry>;\n\ninterface RunnerStateWrapperProps {\n children: (showLoadingIndicator: boolean) => ReactNode;\n}\n\nexport const RunnerStateWrapper: FC<RunnerStateWrapperProps> = ({ children }) => {\n const [runnerState, setRunnerState] = useState<RunnerState>({});\n\n const getRunnerStateUpdater = useCallback(\n (key: string) => (getNewState: GetNewStateFn) => {\n setRunnerState((prev: RunnerState) => {\n const result = {\n ...prev,\n [key]: getNewState(\n prev[key] ?? { indicator: INDICATOR_TYPE.NONE, hidden: false, pending: false },\n ),\n };\n return result;\n });\n },\n [],\n );\n\n const getRunnerState = useCallback(\n (key?: string) => {\n if (!key || !runnerState[key]) {\n return {\n indicator: INDICATOR_TYPE.NONE,\n hidden: false,\n pending: false,\n };\n }\n return {\n ...runnerState[key],\n };\n },\n [runnerState],\n );\n\n const showLoadingIndicator = useMemo(() => {\n const keys = Object.keys(runnerState);\n return (\n keys.length > 0 && keys.some((name) => runnerState[name]?.indicator === INDICATOR_TYPE.BLOCK)\n );\n }, [runnerState]);\n\n return (\n <RunnerStateContext.Provider\n value={{\n getRunnerStateUpdater,\n getRunnerState,\n }}\n >\n {children(showLoadingIndicator)}\n </RunnerStateContext.Provider>\n );\n};\n\nexport const useRunnerState = (): RunnerStateContextValue => {\n const context = useContext(RunnerStateContext);\n\n if (!context) {\n throw new Error('useRunnerState must be used within a RunnerStateWrapper');\n }\n\n return context;\n};\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type FC,\n type ReactNode,\n} from 'react';\nimport type {\n CreateRecordModalQueue,\n CreateRelatedRecordModalQueue,\n ModalCancelEventSource,\n ModalConfig,\n ModalQueue,\n} from '../../types/modals.js';\nimport type { UnknownJSON } from '../../types/common.js';\n\ninterface ModalsContextValue {\n modalState: {\n props: {\n show: boolean;\n onConfirm: (values: UnknownJSON) => void;\n onHide: (eventSource: ModalCancelEventSource, ...args: unknown[]) => void;\n };\n };\n showModal: (config: ModalConfig, cb: () => void) => void;\n showCreateRecordModal: (objectId: string, cb: (result: UnknownJSON) => void) => void;\n showCreateRelatedRecordModal: (\n objectId: string,\n relatedEntityId: string,\n cb: (result: UnknownJSON) => void,\n ) => void;\n onCreateRecordComplete: (result: UnknownJSON) => void;\n onCreateRelatedRecordComplete: (result: UnknownJSON) => void;\n}\n\nexport interface ExposedModals {\n handleShowModal: ModalsContextValue['showModal'];\n handleShowCreateRecordModal: ModalsContextValue['showCreateRecordModal'];\n handleShowCreateRelatedRecordModal: ModalsContextValue['showCreateRelatedRecordModal'];\n derivedModalState: ModalsContextValue['modalState'] & {\n config: ModalConfig;\n };\n handleCreateRecordComplete: (result: UnknownJSON) => void;\n handleCreateRelatedRecordComplete: (result: UnknownJSON) => void;\n showCreateRecordModal: boolean;\n createRecordModalObjectId: string;\n showCreateRelatedRecordModal: boolean;\n showPluginModal: boolean;\n pluginApiName: string;\n createRelatedRecordModalObjectId: string;\n createRelatedRecordModalRelatedEntityId: string;\n}\n\nexport interface ModalWrapperContextArgs {\n showing: boolean;\n show: boolean;\n showPrompt: () => void;\n onConfirm: () => void;\n onHide: (...args: unknown[]) => void;\n children: (modals: ExposedModals) => ReactNode;\n}\n\nconst ModalsContext = createContext<ModalsContextValue | null>(null);\n\nexport const ModalsWrapper: FC<ModalWrapperContextArgs> = ({\n children,\n showing,\n showPrompt,\n show,\n onConfirm,\n onHide,\n}) => {\n const [modalQueue, setModalQueue] = useState<ModalQueue>([]);\n const [createRecordModalQueue, setCreateRecordModalQueue] = useState<CreateRecordModalQueue>([]);\n const [createRelatedRecordModalQueue, setCreateRelatedRecordModalQueue] =\n useState<CreateRelatedRecordModalQueue>([]);\n\n const configRef = useRef<ModalConfig | undefined>(undefined);\n const cbRef = useRef<((...args: unknown[]) => void) | undefined>(undefined);\n\n const handleShowModal = useCallback((config: ModalConfig, cb: () => void) => {\n setModalQueue((prev) => [...prev, { config, cb }]);\n }, []);\n\n const handleShowCreateRecordModal = useCallback(\n (objectId: string, cb: (result: UnknownJSON) => void) => {\n setCreateRecordModalQueue((prev) => [...prev, { objectId, cb }]);\n },\n [],\n );\n\n const handleShowCreateRelatedRecordModal = useCallback(\n (objectId: string, relatedEntityId: string, cb: (result: UnknownJSON) => void) => {\n setCreateRelatedRecordModalQueue((prev) => [...prev, { objectId, relatedEntityId, cb }]);\n },\n [],\n );\n\n const handleCreateRecordComplete = useCallback(\n (result: UnknownJSON) => {\n const current = createRecordModalQueue[0];\n current?.cb(result);\n setCreateRecordModalQueue((prev) => prev.slice(1));\n },\n [createRecordModalQueue],\n );\n\n const handleCreateRelatedRecordComplete = useCallback(\n (result: UnknownJSON) => {\n const current = createRelatedRecordModalQueue[0];\n current?.cb(result);\n setCreateRelatedRecordModalQueue((prev) => prev.slice(1));\n },\n [createRelatedRecordModalQueue],\n );\n\n useEffect(() => {\n if (modalQueue.length > 0 && !showing) {\n configRef.current = modalQueue[0]?.config;\n cbRef.current = modalQueue[0]?.cb;\n showPrompt();\n }\n }, [modalQueue, showing, showPrompt]);\n\n const completeModal = useCallback(() => {\n configRef.current = undefined;\n cbRef.current = undefined;\n setModalQueue((prev) => prev.slice(1));\n }, []);\n\n const derivedModalState = useMemo(() => {\n return {\n props: {\n show,\n onConfirm: (values: UnknownJSON) => {\n onConfirm();\n if (cbRef.current) {\n cbRef.current({ canceled: false, values });\n }\n completeModal();\n },\n onHide: (eventSource: ModalCancelEventSource, ...args: unknown[]) => {\n onHide(...args);\n if (cbRef.current) {\n cbRef.current({ canceled: true, values: {}, eventSource });\n }\n completeModal();\n },\n },\n config: configRef.current ?? {},\n };\n }, [onConfirm, onHide, show, completeModal]);\n\n return (\n <ModalsContext.Provider\n value={{\n modalState: derivedModalState,\n showModal: handleShowModal,\n showCreateRecordModal: handleShowCreateRecordModal,\n showCreateRelatedRecordModal: handleShowCreateRelatedRecordModal,\n onCreateRecordComplete: handleCreateRecordComplete,\n onCreateRelatedRecordComplete: handleCreateRelatedRecordComplete,\n }}\n >\n {children({\n showPluginModal: derivedModalState.props.show,\n pluginApiName: derivedModalState.config.pluginApiName ?? '',\n handleShowModal,\n handleShowCreateRecordModal: handleShowCreateRecordModal,\n handleShowCreateRelatedRecordModal: handleShowCreateRelatedRecordModal,\n derivedModalState,\n handleCreateRecordComplete,\n handleCreateRelatedRecordComplete,\n showCreateRecordModal: createRecordModalQueue.length > 0,\n createRecordModalObjectId: createRecordModalQueue[0]?.objectId ?? '',\n showCreateRelatedRecordModal: createRelatedRecordModalQueue.length > 0,\n createRelatedRecordModalObjectId: createRelatedRecordModalQueue[0]?.objectId ?? '',\n createRelatedRecordModalRelatedEntityId:\n createRelatedRecordModalQueue[0]?.relatedEntityId ?? '',\n })}\n </ModalsContext.Provider>\n );\n};\n\nexport const useModals = (): ModalsContextValue => {\n const context = useContext(ModalsContext);\n\n if (!context) {\n throw new Error('useModals must be used within a ModalsWrapper');\n }\n\n return context;\n};\n","import { createContext, useCallback, useContext, type FC } from 'react';\n\nexport interface Extra {\n error?: unknown;\n workerName: string;\n pluginApiName?: string;\n objectId?: string;\n entityId?: string;\n}\n\nexport interface MonitoringWrapperProps {\n monitoringExceptionHelper: (error: Error, extra: { extra: Extra }) => void;\n children: React.ReactNode;\n}\n\ninterface MonitoringContextValue {\n sendException: (error: Error, extra: Extra) => void;\n}\n\nconst MonitoringContext = createContext<MonitoringContextValue | null>(null);\n\nexport const MonitoringWrapper: FC<MonitoringWrapperProps> = ({\n children,\n monitoringExceptionHelper,\n}) => {\n const sendException = useCallback(\n (error: Error, extra: Extra) => {\n monitoringExceptionHelper(error, {\n extra,\n });\n },\n [monitoringExceptionHelper],\n );\n\n return (\n <MonitoringContext.Provider\n value={{\n sendException,\n }}\n >\n {children}\n </MonitoringContext.Provider>\n );\n};\n\nexport const useMonitoring = (): MonitoringContextValue => {\n const context = useContext(MonitoringContext);\n\n if (!context) {\n throw new Error('useMonitoring must be used within an MonitoringWrapper');\n }\n\n return context;\n};\n","import { createContext, useCallback, useContext, type FC } from 'react';\n\nconst HistoryContext = createContext<HistoryContextValue | null>(null);\n\nexport interface HistoryWrapperProps {\n children: React.ReactNode;\n onNavigate: (path: string, options?: { replace?: boolean }) => void;\n}\n\ninterface HistoryContextValue {\n push: (path: string) => void;\n replace: (path: string) => void;\n}\n\nexport const HistoryWrapper: FC<HistoryWrapperProps> = ({ children, onNavigate }) => {\n const push = useCallback(\n (path: string) => {\n onNavigate(path, { replace: false });\n },\n [onNavigate],\n );\n\n const replace = useCallback(\n (path: string) => {\n onNavigate(path, { replace: true });\n },\n [onNavigate],\n );\n\n return (\n <HistoryContext.Provider\n value={{\n push,\n replace,\n }}\n >\n {children}\n </HistoryContext.Provider>\n );\n};\n\nexport const useHistory = (): HistoryContextValue => {\n const context = useContext(HistoryContext);\n\n if (!context) {\n throw new Error('useHistory must be used within an HistoryWrapper');\n }\n\n return context;\n};\n","import { createContext, useContext, type FC } from 'react';\nimport type {\n CreateFileIdFn,\n GetPendingCacheCountFn,\n InvalidateCacheFn,\n OnNetworkRequestFn,\n PerformKizenFileUploadFn,\n} from '../../types/run.js';\n\nconst NetworkContext = createContext<NetworkContextValue | null>(null);\n\nexport interface NetworkWrapperProps {\n children: React.ReactNode;\n performRequest: OnNetworkRequestFn;\n createFileId?: CreateFileIdFn | undefined;\n performFileUpload?: PerformKizenFileUploadFn | undefined;\n getPendingCacheCount?: GetPendingCacheCountFn | undefined;\n invalidateCache?: InvalidateCacheFn | undefined;\n}\n\ninterface NetworkContextValue {\n performRequest: OnNetworkRequestFn;\n createFileId?: CreateFileIdFn | undefined;\n performFileUpload?: PerformKizenFileUploadFn | undefined;\n getPendingCacheCount?: GetPendingCacheCountFn | undefined;\n invalidateCache?: InvalidateCacheFn | undefined;\n}\n\nexport const NetworkWrapper: FC<NetworkWrapperProps> = ({\n children,\n performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n}) => {\n return (\n <NetworkContext.Provider\n value={{\n performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n }}\n >\n {children}\n </NetworkContext.Provider>\n );\n};\n\nexport const useNetwork = (): NetworkContextValue => {\n const context = useContext(NetworkContext);\n\n if (!context) {\n throw new Error('useNetwork must be used within a NetworkWrapper');\n }\n\n return context;\n};\n","import { createContext, useContext, type FC, type ReactNode } from 'react';\n\nconst defaultT = (s: string): string => s;\n\nconst TranslationContext = createContext({ t: defaultT });\n\nexport type TranslationFunction = (s: string) => string;\n\nexport interface TranslationWrapperProps {\n children: ReactNode;\n t?: TranslationFunction | undefined;\n}\n\ninterface TranslationContextValue {\n t: TranslationFunction;\n}\n\nexport const TranslationWrapper: FC<TranslationWrapperProps> = (props) => {\n const { children, t = defaultT } = props;\n\n return <TranslationContext.Provider value={{ t }}>{children}</TranslationContext.Provider>;\n};\n\nexport const useTranslation = (): TranslationContextValue => {\n const context = useContext(TranslationContext);\n\n return context;\n};\n","import { useCallback, useState } from 'react';\nimport type {\n CalendarSourceConfig,\n ExecuteCalendarSourceScript,\n SchemaValidation,\n} from '../../types/artifacts/calendar.js';\nimport type { MaybeMessageError, UnknownJSON } from '../../types/common.js';\nimport type { WorkerContextArgs } from '../../types/contexts.js';\nimport { runScript } from '../../run.js';\nimport { generateExecutionKey } from '../../util/run.js';\nimport { useTerminators } from '../context/terminators.js';\nimport { useSessionData } from '../context/session.js';\nimport { useAppState } from '../context/appState.js';\nimport { useRunnerState } from '../context/runnerState.js';\nimport type { OnShowToastFn } from '../../types/run.js';\nimport { useModals } from '../context/modals.js';\nimport { useMonitoring } from '../context/monitoring.js';\nimport { useHistory } from '../context/history.js';\nimport { useNetwork } from '../context/network.js';\nimport { useTranslation } from '../context/translation.js';\n\ninterface UseCalendarSourceCustomScriptProps {\n onError: WorkerContextArgs['onError'];\n showToast: OnShowToastFn;\n clearToasts: () => void;\n}\n\nconst validateSchema = (result: UnknownJSON, schema: SchemaValidation): void => {\n if (!Array.isArray(result)) {\n throw new Error('Return value must be an array');\n }\n\n schema.required.forEach((requiredField) => {\n result.forEach((resultRow: Record<string, UnknownJSON>, index) => {\n if (!(requiredField.key in resultRow)) {\n throw new Error(\n `Missing required field: ${requiredField.key} in result row ${String(index)}`,\n );\n }\n\n const actualType = typeof resultRow[requiredField.key];\n if (actualType !== requiredField.type) {\n throw new Error(\n `Invalid type for field: ${requiredField.key} in result row ${String(index)}. Expected ${requiredField.type}, got ${actualType}`,\n );\n }\n });\n });\n\n schema.optional.forEach((optionalField) => {\n result.forEach((resultRow: Record<string, UnknownJSON>, index: number) => {\n if (optionalField.key in resultRow) {\n const actualType = typeof resultRow[optionalField.key];\n if (actualType !== optionalField.type) {\n throw new Error(\n `Invalid type for field: ${optionalField.key} in result row ${String(index)}. Expected ${optionalField.type}, got ${actualType}`,\n );\n }\n }\n });\n });\n};\n\nexport const useCalendarSourceCustomScript = ({\n onError,\n showToast,\n clearToasts,\n}: UseCalendarSourceCustomScriptProps): [ExecuteCalendarSourceScript, { pending: boolean }] => {\n const { t } = useTranslation();\n\n const [pending, setPending] = useState(false);\n const [executionKey, setExeutionKey] = useState<string | undefined>(undefined);\n\n const { terminators } = useTerminators();\n const { sessionData, setSessionData } = useSessionData();\n const {\n installedPluginAPINamesToIds,\n userConfigsByApiName,\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n } = useAppState();\n\n const { getRunnerState, getRunnerStateUpdater } = useRunnerState();\n const { showModal, showCreateRecordModal } = useModals();\n\n const { sendException } = useMonitoring();\n\n const history = useHistory();\n\n const { performRequest, createFileId, performFileUpload, getPendingCacheCount, invalidateCache } =\n useNetwork();\n\n const handleError = useCallback(\n (plugin?: CalendarSourceConfig) => (error?: unknown) => {\n onError?.(error);\n\n const errorMessage = (error as MaybeMessageError)?.message ?? 'Unknown plugin error';\n\n sendException(new Error(errorMessage), {\n error,\n workerName: 'calendarSource',\n pluginApiName: plugin?.plugin_api_name ?? '',\n });\n },\n [onError, sendException],\n );\n\n const executeScript = useCallback(\n async (\n scriptBody: string,\n plugin: CalendarSourceConfig,\n args?: Record<string, unknown>,\n schema?: SchemaValidation,\n ) => {\n let stringArgs = '';\n const runnerStateKey = generateExecutionKey(plugin);\n setExeutionKey(runnerStateKey);\n try {\n const pluginAppId = installedPluginAPINamesToIds[plugin.plugin_api_name];\n stringArgs = JSON.stringify({\n ...args,\n pluginId: pluginAppId,\n __kizen_user_config: userConfigsByApiName[plugin.plugin_api_name],\n });\n } catch {\n handleError(plugin)({\n message: t('Arguments passed to the script are invalid'),\n });\n }\n\n let authError = false;\n\n const result = await runScript({\n user,\n teamMember,\n business,\n onError: handleError(plugin),\n setLoadingState: setPending,\n scriptBody,\n clientObject,\n onStateChange: (state) => {\n getRunnerStateUpdater(runnerStateKey)((prev) => {\n return {\n ...prev,\n ...state,\n };\n });\n },\n workerName: 'calendarSource',\n args: stringArgs,\n pushHistory: history.push,\n onShowToast: showToast,\n onClearToasts: clearToasts,\n terminators,\n plugin,\n sessionData,\n setSessionData,\n onShowModal: showModal,\n onShowCreateRecordModal: showCreateRecordModal,\n onShowCreateRelatedRecordModal: () => {\n /* empty */\n },\n onNetworkError: (error) => {\n const networkError = error as { message?: string; status?: number } | undefined;\n\n // A proxied service will respond with 503 if it's not configured correctly, so treat 503 errors as auth errors since that's\n // the most likely scenario.\n if (networkError?.status === 503) {\n authError = true;\n }\n },\n appPath,\n onNetworkRequest: performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n });\n\n try {\n if (schema) {\n validateSchema(result as UnknownJSON, schema);\n }\n } catch (ex) {\n onError?.(ex);\n }\n\n return { result, authError };\n },\n [\n user,\n teamMember,\n installedPluginAPINamesToIds,\n business,\n clientObject,\n history,\n showToast,\n clearToasts,\n terminators,\n sessionData,\n setSessionData,\n showModal,\n showCreateRecordModal,\n handleError,\n getRunnerStateUpdater,\n userConfigsByApiName,\n onError,\n performRequest,\n createFileId,\n appPath,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n t,\n ],\n );\n\n return [\n executeScript,\n {\n ...getRunnerState(executionKey),\n pending,\n },\n ];\n};\n","import { createContext, useContext, type FC } from 'react';\nimport type { OnShowToastFn } from '../../types/run.js';\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\ninterface ToastContextValue {\n showToast: OnShowToastFn;\n clearToasts: () => void;\n}\n\nexport interface ToastWrapperProps {\n children: React.ReactNode;\n showToast: OnShowToastFn;\n clearToasts: () => void;\n}\n\nexport const ToastWrapper: FC<ToastWrapperProps> = ({ children, showToast, clearToasts }) => {\n return (\n <ToastContext.Provider value={{ showToast, clearToasts }}>{children}</ToastContext.Provider>\n );\n};\n\nexport const useToast = (): ToastContextValue => {\n const context = useContext(ToastContext);\n\n if (!context) {\n throw new Error('useToast must be used within a ToastWrapper');\n }\n\n return context;\n};\n","import { useQueries } from '@tanstack/react-query';\nimport type {\n CalendarDefinition,\n CalendarScriptReturnData,\n CalendarSourceConfig,\n CalendarSourceMap,\n CalendarSources,\n ExecuteCalendarSourceScript,\n SchemaValidation,\n} from '../../types/artifacts/calendar.js';\nimport type { AppPlugins, MaybeMessageError, UnknownJSON } from '../../types/common.js';\nimport { useCalendarSourceCustomScript } from './useCalendarSourceCustomScript.js';\nimport { useMemo } from 'react';\nimport { useTranslation } from '../context/translation.js';\nimport { QUERY_KEYS } from '../../communication/constants.js';\nimport { formatInTimeZone } from 'date-fns-tz';\nimport { startOfDay, endOfDay } from 'date-fns';\nimport { useToast } from '../context/toast.js';\n\nconst executeCalendarSourceScript = async (\n script: string,\n plugin: CalendarSourceConfig,\n executeScript: ExecuteCalendarSourceScript,\n args?: UnknownJSON,\n): Promise<CalendarScriptReturnData> => {\n const schema: SchemaValidation = {\n required: [\n {\n key: 'id',\n type: 'string',\n },\n {\n key: 'name',\n type: 'string',\n },\n ],\n optional: [\n {\n key: 'description',\n type: 'string',\n },\n ],\n };\n\n const { result, authError } = await executeScript(script, plugin, args, schema);\n\n if (Array.isArray(result)) {\n return { result, authError };\n } else {\n console.warn(`Expected calendar source script to return an array, but got:`, result);\n return { result: [], authError };\n }\n};\n\nconst executeCalendarEventScript = async (\n script: string,\n plugin: CalendarSourceConfig,\n executeScript: ExecuteCalendarSourceScript,\n args?: Record<string, unknown>,\n): Promise<CalendarScriptReturnData> => {\n const schema: SchemaValidation = {\n required: [\n {\n key: 'id',\n type: 'string',\n },\n {\n key: 'calendar_id',\n type: 'string',\n },\n {\n key: 'title',\n type: 'string',\n },\n {\n key: 'start_time',\n type: 'number',\n },\n {\n key: 'end_time',\n type: 'number',\n },\n ],\n optional: [\n {\n key: 'description',\n type: 'string',\n },\n {\n key: 'url',\n type: 'string',\n },\n {\n key: 'activity_id',\n type: 'string',\n },\n {\n key: 'all_day',\n type: 'boolean',\n },\n {\n key: 'busy',\n type: 'boolean',\n },\n ],\n };\n\n const { result, authError } = await executeScript(script, plugin, args, schema);\n\n if (Array.isArray(result)) {\n return { result, authError };\n } else {\n console.warn(`Expected calendar event script to return an array, but got:`, result);\n return { result: [], authError };\n }\n};\n\nexport const useCalendarOptions = (\n enabled: boolean,\n calendarSources: CalendarSources,\n plugins: AppPlugins = {},\n): {\n calendars: Record<string, { calendar: CalendarDefinition; source: CalendarSourceConfig }[]>;\n errorServices: (string | undefined)[];\n isLoading: boolean;\n} => {\n const { showToast, clearToasts } = useToast();\n const { t } = useTranslation();\n\n const [executeScript] = useCalendarSourceCustomScript({\n onError: (error) => {\n showToast({\n message: `${t('Error fetching calendar options.')} ${(error as MaybeMessageError)?.message ?? ''}`,\n variant: 'failure',\n });\n },\n showToast,\n clearToasts,\n });\n\n const calendarsQueries = useQueries({\n queries: calendarSources.map((source) => {\n return {\n queryKey: QUERY_KEYS.CALENDAR_SOURCE_CALENDAR_LIST(source.plugin_api_name, source.api_name),\n queryFn: async () => {\n const config = (plugins[source.plugin_api_name]?.business_config ?? {}) as UnknownJSON;\n\n const { result, authError } = await executeCalendarSourceScript(\n source.calendars_script,\n source,\n executeScript,\n config,\n );\n\n return {\n source,\n calendars: result as CalendarDefinition[],\n authError,\n };\n },\n enabled: enabled && Boolean(source.calendars_script),\n };\n }),\n });\n\n const isLoading = calendarsQueries.some((q) => q.isLoading);\n\n const calendarOptionsByPluginApiName = useMemo(() => {\n if (isLoading || !enabled) {\n return {};\n }\n\n return calendarsQueries.reduce(\n (\n acc: Record<string, { calendar: CalendarDefinition; source: CalendarSourceConfig }[]>,\n curr,\n ) => {\n if (\n !curr.data?.source.plugin_api_name ||\n typeof curr.data.source.plugin_api_name !== 'string'\n ) {\n return acc;\n }\n\n const pluginApiName = curr.data.source.plugin_api_name;\n acc[pluginApiName] ??= [];\n\n acc[pluginApiName].push(\n ...curr.data.calendars.map((c) => ({\n calendar: c,\n source: curr.data.source,\n })),\n );\n\n return acc;\n },\n {},\n );\n }, [calendarsQueries, isLoading, enabled]);\n\n const servicesWithErrors = useMemo(() => {\n return calendarsQueries\n .filter((q) => q.data?.authError)\n .map((q) => q.data?.source.plugin_api_name);\n }, [calendarsQueries]);\n\n return {\n calendars: calendarOptionsByPluginApiName,\n errorServices: servicesWithErrors,\n isLoading,\n };\n};\n\nconst formatString = \"yyyy-MM-dd'T'HH:mm:ssXXX\";\n\nconst createDate = (dateString: string): Date => {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(dateString)) {\n throw new Error(`Invalid date string: ${dateString}. Expected format: YYYY-MM-DD`);\n }\n\n const [year, month, day] = dateString.split('-').map(Number);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return new Date(year!, month! - 1, day);\n};\n\nconst getTzDateString = (date: Date, timeZone: string): string => {\n return formatInTimeZone(date, timeZone, formatString);\n};\n\nexport const useCalendarEvents = (\n flatCalendars: {\n calendar: CalendarDefinition;\n source: CalendarSourceConfig;\n }[],\n params: {\n rangeStart: string;\n rangeEnd: string;\n },\n plugins: AppPlugins = {},\n): {\n events: unknown;\n sources: CalendarSourceMap;\n isLoading: boolean;\n} => {\n const userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n const rangeStartFilter = getTzDateString(startOfDay(createDate(params.rangeStart)), userTimezone);\n const rangeEndFilter = getTzDateString(endOfDay(createDate(params.rangeEnd)), userTimezone);\n\n const { showToast, clearToasts } = useToast();\n const { t } = useTranslation();\n\n const [executeScript] = useCalendarSourceCustomScript({\n onError: (error) => {\n showToast({\n message: `${t('Error fetching calendar events.')} ${(error as MaybeMessageError)?.message ?? ''}`,\n variant: 'failure',\n });\n },\n showToast,\n clearToasts,\n });\n\n const eventsQueries = useQueries({\n queries: flatCalendars.map(({ calendar, source }) => {\n return {\n queryKey: QUERY_KEYS.CALENDAR_SOURCE_EVENTS(\n source.plugin_api_name,\n source.api_name,\n calendar.id,\n params,\n ),\n queryFn: async () => {\n const config = plugins[source.plugin_api_name]?.business_config ?? {};\n\n const { result, authError } = await executeCalendarEventScript(\n source.events_script,\n source,\n executeScript,\n {\n ...config,\n calendar: {\n calendar_id: calendar.id,\n range_start: rangeStartFilter,\n range_end: rangeEndFilter,\n },\n },\n );\n\n return {\n calendarId: calendar.id,\n events: result,\n authError,\n };\n },\n };\n }),\n });\n\n const isEventsLoading = eventsQueries.some((q) => q.isLoading);\n\n const sourcesByCalendarId = useMemo(() => {\n return flatCalendars.reduce((acc: CalendarSourceMap, { calendar, source }) => {\n acc[calendar.id] = { source, calendar };\n return acc;\n }, {});\n }, [flatCalendars]);\n\n const eventsByCalendarId = useMemo(() => {\n if (isEventsLoading) {\n return {};\n }\n\n return eventsQueries.reduce((acc: Record<string, unknown[]>, curr) => {\n if (!curr.data?.calendarId) {\n return acc;\n }\n\n acc[curr.data.calendarId] = curr.data.events as unknown[];\n\n return acc;\n }, {});\n }, [eventsQueries, isEventsLoading]);\n\n return {\n events: eventsByCalendarId,\n sources: sourcesByCalendarId,\n isLoading: isEventsLoading,\n };\n};\n","import { useCallback, useRef, useState } from 'react';\nimport type {\n ExecuteFloatingFrameScript,\n FloatingFrameConfig,\n} from '../../types/artifacts/floatingFrame.js';\nimport type { WorkerContextArgs } from '../../types/contexts.js';\nimport { useTerminators } from '../context/terminators.js';\nimport { useSessionData } from '../context/session.js';\nimport { useAppState } from '../context/appState.js';\nimport { useModals } from '../context/modals.js';\nimport { useMonitoring } from '../context/monitoring.js';\nimport { useHistory } from '../context/history.js';\nimport type { MaybeMessageError } from '../../types/common.js';\nimport { runScript } from '../../run.js';\nimport { useToast } from '../context/toast.js';\nimport { flushSync } from 'react-dom';\nimport { useNetwork } from '../context/network.js';\nimport { useTranslation } from '../context/translation.js';\n\ninterface UseFloatingFrameCustomScriptProps {\n onError: WorkerContextArgs['onError'];\n scriptUIRef?: WorkerContextArgs['scriptUIRef'];\n plugin: FloatingFrameConfig;\n onChangeMinimized?: (minimized: boolean) => void;\n}\n\nexport const useFloatingFrameCustomScript = ({\n onError,\n scriptUIRef,\n plugin,\n onChangeMinimized,\n}: UseFloatingFrameCustomScriptProps): [\n ExecuteFloatingFrameScript,\n {\n pending: boolean;\n hidden: boolean;\n indicator: string;\n triggerHidden?: boolean;\n hideHeader?: boolean;\n },\n] => {\n const { terminators } = useTerminators();\n const { sessionData, setSessionData } = useSessionData();\n const {\n installedPluginAPINamesToIds,\n userConfigsByApiName,\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n } = useAppState();\n\n const { showModal, showCreateRecordModal, showCreateRelatedRecordModal } = useModals();\n\n const { sendException } = useMonitoring();\n\n const { showToast, clearToasts } = useToast();\n\n const history = useHistory();\n\n const { performRequest, createFileId, performFileUpload, getPendingCacheCount, invalidateCache } =\n useNetwork();\n\n const { t } = useTranslation();\n\n const [pending, setPending] = useState(false);\n\n // use a local runner state instead of global runnerState since all state changes will happen within the context of the iframe\n const [floatingFrameRunnerState, setFloatingFrameRunnerState] = useState({\n indicator: 'none',\n hidden: true,\n triggerHidden: false,\n hideHeader: false,\n });\n\n const pendingOnceLock = useRef(false);\n const [pendingLocked, setPendingLocked] = useState(false);\n if (pending && !pendingOnceLock.current) {\n pendingOnceLock.current = true;\n }\n\n if (!pending && pendingOnceLock.current && !pendingLocked) {\n setPendingLocked(true);\n }\n\n const handleError = useCallback(\n (error: unknown) => {\n onError?.(error);\n\n const errorMessage = (error as MaybeMessageError)?.message ?? 'Unknown plugin error';\n sendException(new Error(errorMessage), {\n error,\n workerName: 'floatingFrame',\n pluginApiName: plugin.plugin_api_name,\n });\n },\n [onError, plugin, sendException],\n );\n\n const executeScript = useCallback(\n (scriptBody: string, args?: Record<string, unknown>) => {\n let stringArgs = '';\n try {\n const pluginAppId = installedPluginAPINamesToIds[plugin.plugin_api_name];\n stringArgs = JSON.stringify({\n ...args,\n pluginId: pluginAppId,\n __kizen_user_config: userConfigsByApiName[plugin.plugin_api_name],\n });\n } catch {\n handleError({ message: t('Arguments passed to the script are invalid') });\n }\n\n return runScript({\n user,\n teamMember,\n business,\n onError: handleError,\n setLoadingState: (...args) => {\n flushSync(() => {\n setPending(...args);\n });\n },\n scriptBody,\n clientObject,\n scriptUIRef,\n\n onStateChange: (state) => {\n const { minimized, ...rest } = state;\n if (typeof minimized === 'boolean') {\n onChangeMinimized?.(minimized);\n }\n setFloatingFrameRunnerState((s) => {\n return { ...s, ...rest };\n });\n },\n workerName: 'floatingFramePlugin',\n args: stringArgs,\n pushHistory: history.push,\n plugin,\n onShowToast: showToast,\n onClearToasts: clearToasts,\n terminators,\n sessionData,\n setSessionData,\n onShowModal: showModal,\n onShowCreateRecordModal: showCreateRecordModal,\n onShowCreateRelatedRecordModal: showCreateRelatedRecordModal,\n appPath,\n onNetworkRequest: performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n });\n },\n [\n user,\n teamMember,\n business,\n installedPluginAPINamesToIds,\n clientObject,\n scriptUIRef,\n history,\n plugin,\n onChangeMinimized,\n showToast,\n clearToasts,\n terminators,\n sessionData,\n setSessionData,\n handleError,\n setFloatingFrameRunnerState,\n userConfigsByApiName,\n showModal,\n showCreateRecordModal,\n showCreateRelatedRecordModal,\n performRequest,\n appPath,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n t,\n ],\n );\n\n return [\n executeScript,\n {\n ...floatingFrameRunnerState,\n pending: pendingLocked ? false : pending,\n },\n ];\n};\n","import { useCallback, useState } from 'react';\nimport type { ExecuteGenericScript, GenericPluginConfig } from '../../types/artifacts/generic.js';\nimport type { WorkerContextArgs } from '../../types/contexts.js';\nimport { runScript } from '../../run.js';\nimport { useTerminators } from '../context/terminators.js';\nimport { useSessionData } from '../context/session.js';\nimport { useAppState } from '../context/appState.js';\nimport { useModals } from '../context/modals.js';\nimport { useMonitoring } from '../context/monitoring.js';\nimport { useToast } from '../context/toast.js';\nimport { useHistory } from '../context/history.js';\nimport type { MaybeMessageError } from '../../types/common.js';\nimport { generateExecutionKey } from '../../util/run.js';\nimport { useRunnerState } from '../context/runnerState.js';\nimport type { CommonExecutionPlugin } from '../../types/run.js';\nimport { useNetwork } from '../context/network.js';\nimport { useTranslation } from '../context/translation.js';\n\ninterface UseGenericPluginCustomScriptProps {\n onError: WorkerContextArgs['onError'];\n scriptUIRef?: WorkerContextArgs['scriptUIRef'];\n plugin?: GenericPluginConfig | undefined;\n}\n\nexport const useGenericAppCustomScript = ({\n onError,\n scriptUIRef,\n plugin,\n}: UseGenericPluginCustomScriptProps): [ExecuteGenericScript, { pending: boolean }] => {\n const { terminators } = useTerminators();\n const { sessionData, setSessionData } = useSessionData();\n const {\n installedPluginAPINamesToIds,\n userConfigsByApiName,\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n } = useAppState();\n\n const { getRunnerState, getRunnerStateUpdater } = useRunnerState();\n\n const { showModal, showCreateRecordModal } = useModals();\n\n const { sendException } = useMonitoring();\n\n const { showToast, clearToasts } = useToast();\n\n const history = useHistory();\n\n const { performRequest, createFileId, performFileUpload, getPendingCacheCount, invalidateCache } =\n useNetwork();\n\n const { t } = useTranslation();\n\n const [pending, setPending] = useState(false);\n const [executionKey, setExeutionKey] = useState<string | undefined>(undefined);\n\n const handleError = useCallback(\n (error: unknown, executionPlugin?: CommonExecutionPlugin) => {\n onError?.(error);\n\n const errorMessage = (error as MaybeMessageError)?.message ?? 'Unknown plugin error';\n sendException(new Error(errorMessage), {\n error,\n workerName: 'genericPlugin',\n pluginApiName: plugin?.plugin_api_name ?? executionPlugin?.plugin_api_name ?? '',\n });\n },\n [onError, plugin, sendException],\n );\n\n const executeScript = useCallback(\n (\n scriptBody: string,\n args?: Record<string, unknown>,\n executionPlugin?: CommonExecutionPlugin,\n ) => {\n let stringArgs = '';\n const runnerStateKey = generateExecutionKey(executionPlugin);\n setExeutionKey(runnerStateKey);\n try {\n const pluginAppId =\n installedPluginAPINamesToIds[\n plugin?.plugin_api_name ?? executionPlugin?.plugin_api_name ?? ''\n ];\n stringArgs = JSON.stringify({\n ...args,\n pluginId: pluginAppId,\n __kizen_user_config:\n userConfigsByApiName[plugin?.plugin_api_name ?? executionPlugin?.plugin_api_name ?? ''],\n });\n } catch {\n handleError({ message: t('Arguments passed to the script are invalid') });\n }\n\n return runScript({\n user,\n teamMember,\n business,\n onError: handleError,\n setLoadingState: setPending,\n scriptBody,\n clientObject,\n scriptUIRef,\n onStateChange: (state) => {\n getRunnerStateUpdater(runnerStateKey)((prev) => {\n return {\n ...prev,\n ...state,\n };\n });\n },\n workerName: 'genericPlugin',\n args: stringArgs,\n pushHistory: history.push,\n onShowToast: showToast,\n onClearToasts: clearToasts,\n terminators,\n plugin,\n executionPlugin,\n sessionData,\n setSessionData,\n onShowModal: showModal,\n onShowCreateRecordModal: showCreateRecordModal,\n onShowCreateRelatedRecordModal: () => {\n /* empty */\n },\n appPath,\n onNetworkRequest: performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n });\n },\n [\n user,\n teamMember,\n installedPluginAPINamesToIds,\n business,\n clientObject,\n scriptUIRef,\n history,\n showToast,\n clearToasts,\n terminators,\n plugin,\n sessionData,\n setSessionData,\n handleError,\n getRunnerStateUpdater,\n userConfigsByApiName,\n showModal,\n showCreateRecordModal,\n performRequest,\n appPath,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n t,\n ],\n );\n\n return [\n executeScript,\n {\n ...getRunnerState(executionKey),\n pending,\n },\n ];\n};\n","import { useCallback, useState } from 'react';\nimport type { WorkerContextArgs } from '../../types/contexts.js';\nimport type { CommonExecutionPlugin } from '../../types/run.js';\nimport type { MaybeMessageError } from '../../types/common.js';\nimport { useHistory } from '../context/history.js';\nimport { useToast } from '../context/toast.js';\nimport { useMonitoring } from '../context/monitoring.js';\nimport { useModals } from '../context/modals.js';\nimport { useRunnerState } from '../context/runnerState.js';\nimport { useAppState } from '../context/appState.js';\nimport { useSessionData } from '../context/session.js';\nimport { useTerminators } from '../context/terminators.js';\nimport { generateExecutionKey } from '../../util/run.js';\nimport { runScript } from '../../index.js';\nimport type { ExecuteGenericScript } from '../../types/artifacts/generic.js';\nimport { useNetwork } from '../context/network.js';\nimport { useTranslation } from '../context/translation.js';\n\ninterface UseRecordDetailCustomScriptProps {\n entityId: string;\n objectId: string;\n onError: WorkerContextArgs['onError'];\n scriptUIRef?: WorkerContextArgs['scriptUIRef'];\n onReleaseBlockingScript?: WorkerContextArgs['onReleaseBlockingScript'];\n}\n\nexport const useRecordDetailCustomScript = ({\n entityId,\n objectId,\n onError,\n scriptUIRef,\n onReleaseBlockingScript,\n}: UseRecordDetailCustomScriptProps): [ExecuteGenericScript, { pending: boolean }] => {\n const { terminators } = useTerminators();\n const { sessionData, setSessionData } = useSessionData();\n const {\n installedPluginAPINamesToIds,\n userConfigsByApiName,\n user,\n teamMember,\n business,\n clientObject,\n appPath,\n } = useAppState();\n\n const { getRunnerState, getRunnerStateUpdater } = useRunnerState();\n\n const { showModal, showCreateRecordModal, showCreateRelatedRecordModal } = useModals();\n\n const { sendException } = useMonitoring();\n\n const { showToast, clearToasts } = useToast();\n\n const history = useHistory();\n\n const { performRequest, createFileId, performFileUpload, getPendingCacheCount, invalidateCache } =\n useNetwork();\n\n const { t } = useTranslation();\n\n const [pending, setPending] = useState(false);\n const [executionKey, setExeutionKey] = useState<string | undefined>(undefined);\n\n const handleError = useCallback(\n (error: unknown, executionPlugin?: CommonExecutionPlugin) => {\n onError?.(error);\n const errorMessage = (error as MaybeMessageError)?.message ?? 'Unknown plugin error';\n sendException(new Error(errorMessage), {\n error,\n workerName: 'recordDetail',\n pluginApiName: executionPlugin?.plugin_api_name ?? '',\n objectId,\n entityId,\n });\n },\n [onError, objectId, entityId, sendException],\n );\n\n const executeScript = useCallback(\n (\n scriptBody: string,\n args?: Record<string, unknown>,\n executionPlugin?: CommonExecutionPlugin,\n overrideContext?: Record<string, unknown>,\n ) => {\n let stringArgs = '';\n try {\n const pluginAppId = installedPluginAPINamesToIds[executionPlugin?.plugin_api_name ?? ''];\n stringArgs = JSON.stringify({\n ...args,\n pluginId: pluginAppId,\n __kizen_user_config: userConfigsByApiName[executionPlugin?.plugin_api_name ?? ''],\n });\n } catch {\n handleError({ message: t('Arguments passed to the script are invalid') }, executionPlugin);\n }\n const runnerStateKey = generateExecutionKey(executionPlugin);\n\n setExeutionKey(runnerStateKey);\n return runScript({\n user,\n teamMember,\n business,\n onReleaseBlockingScript,\n onError: (e) => {\n handleError(e, executionPlugin);\n },\n setLoadingState: setPending,\n scriptBody,\n clientObject,\n scriptUIRef,\n onStateChange: (state) => {\n getRunnerStateUpdater(runnerStateKey)((prev) => {\n return {\n ...prev,\n ...state,\n };\n });\n },\n workerName: 'recordDetail',\n args: stringArgs,\n context: overrideContext ?? {\n entityId,\n objectId,\n },\n pushHistory: history.push,\n onShowToast: showToast,\n onClearToasts: clearToasts,\n terminators,\n executionPlugin,\n sessionData,\n setSessionData,\n onShowModal: showModal,\n onShowCreateRecordModal: showCreateRecordModal,\n onShowCreateRelatedRecordModal: showCreateRelatedRecordModal,\n appPath,\n onNetworkRequest: performRequest,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n });\n },\n [\n user,\n teamMember,\n installedPluginAPINamesToIds,\n business,\n entityId,\n objectId,\n clientObject,\n scriptUIRef,\n history,\n showToast,\n clearToasts,\n terminators,\n sessionData,\n setSessionData,\n showModal,\n showCreateRecordModal,\n showCreateRelatedRecordModal,\n onReleaseBlockingScript,\n handleError,\n getRunnerStateUpdater,\n userConfigsByApiName,\n performRequest,\n appPath,\n createFileId,\n performFileUpload,\n getPendingCacheCount,\n invalidateCache,\n t,\n ],\n );\n\n return [\n executeScript,\n {\n ...getRunnerState(executionKey),\n pending,\n },\n ];\n};\n","import { useCallback, useEffect, useMemo, useRef, type RefObject } from 'react';\nimport type {\n FloatingFrameConfig,\n MaybeMessageError,\n RoutablePageConfig,\n UnknownJSON,\n} from '../../types/index.js';\nimport { useToast } from '../context/toast.js';\nimport { useTranslation } from '../context/translation.js';\nimport DOMPurify from 'dompurify';\nimport { useGenericAppCustomScript } from './useGenericAppCustomScript.js';\n\ninterface PluginCustomHTML {\n scopedCss: string;\n sanitizedHtml: string | null;\n outputUIRef: RefObject<HTMLDivElement>;\n interactableScriptRef: RefObject<HTMLDivElement>;\n}\n\nexport const useAppCustomHTML = (\n currentPage?: FloatingFrameConfig | RoutablePageConfig,\n args?: UnknownJSON,\n): PluginCustomHTML => {\n const { showToast } = useToast();\n const { t } = useTranslation();\n\n const outputUIRef = useRef<HTMLDivElement>(null);\n const interactableScriptRef = useRef<HTMLDivElement>(null);\n\n const css = currentPage?.css;\n\n const html = useMemo(() => {\n const rawHTML = currentPage?.html;\n\n return rawHTML ? DOMPurify.sanitize(rawHTML) : null;\n }, [currentPage]);\n\n const interactableScripts = useMemo(() => {\n return currentPage?.event_scripts ?? {};\n }, [currentPage]);\n\n const [executeInline, { pending: inlinePending }] = useGenericAppCustomScript({\n onError: (e) => {\n showToast({\n message: `${t('Script could not be executed:')} ${(e as MaybeMessageError)?.message ?? 'Unknown Error'}`,\n variant: 'failure',\n });\n },\n scriptUIRef: outputUIRef,\n plugin: currentPage,\n });\n\n const handleClick = useCallback(\n (e: PointerEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!inlinePending) {\n const target = e.target as HTMLElement;\n const scriptName = target.getAttribute('data-script');\n\n if (scriptName && interactableScripts[scriptName]) {\n void executeInline(interactableScripts[scriptName], args);\n }\n }\n },\n [inlinePending, executeInline, interactableScripts, args],\n );\n\n useEffect(() => {\n const e = interactableScriptRef.current;\n\n if (e) {\n e.addEventListener('click', handleClick);\n }\n\n return () => {\n if (e) {\n e.removeEventListener('click', handleClick);\n }\n };\n }, [handleClick, currentPage]);\n\n return {\n scopedCss: `\n @scope {\n ${css ?? ''}\n }\n `,\n sanitizedHtml: html,\n outputUIRef,\n interactableScriptRef,\n };\n};\n","import { useQueryClient } from '@tanstack/react-query';\nimport { useCallback } from 'react';\nimport { QUERY_KEYS } from '../../communication/constants.js';\n\ntype ResetFn = (pluginApiName: string, sourceApiName: string) => void;\n\nexport const useCalendarSourceReset = (): ResetFn => {\n const queryClient = useQueryClient();\n\n const resetFn = useCallback<ResetFn>(\n (pluginApiName, sourceApiName) => {\n queryClient.removeQueries({\n queryKey: QUERY_KEYS.CALENDAR_SOURCE_CALENDAR_LIST(pluginApiName, sourceApiName),\n exact: true,\n });\n },\n [queryClient],\n );\n\n return resetFn;\n};\n","import { useCallback, useEffect, useMemo } from 'react';\nimport type { ExecuteFloatingFrameScript, ExecuteGenericScript } from '../../index.js';\n\nexport const useManualInteraction = (\n execute: ExecuteFloatingFrameScript | ExecuteGenericScript,\n currentPage?: { event_scripts?: Record<string, string> },\n elementRef?: { current: HTMLElement | null },\n pending?: boolean,\n args: Record<string, unknown> = {},\n): void => {\n const interactableScripts = useMemo(() => {\n return currentPage?.event_scripts ?? {};\n }, [currentPage]);\n\n const handleClick = useCallback(\n (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!pending) {\n const target = e.target as HTMLElement;\n const scriptName = target.getAttribute('data-script');\n if (scriptName && interactableScripts[scriptName]) {\n void execute(interactableScripts[scriptName], { ...args });\n }\n }\n },\n [pending, execute, interactableScripts, args],\n );\n\n useEffect(() => {\n const e = elementRef?.current;\n\n if (e) {\n e.addEventListener('click', handleClick);\n }\n\n return () => {\n if (e) {\n e.removeEventListener('click', handleClick);\n }\n };\n }, [handleClick, currentPage, elementRef]);\n};\n","import { useEffect } from 'react';\n\nexport const useAppCallback = (search: string): void => {\n useEffect(() => {\n const queryString = new URLSearchParams(search);\n\n const query = Object.fromEntries(queryString);\n\n window.parent.postMessage({ type: 'kizen:plugin_callback', query }, '*');\n }, [search]);\n};\n","import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport type { MaybeMessageError, RoutablePageConfig, UnknownJSON } from '../../types/index.js';\nimport { useToast } from '../context/toast.js';\nimport { useTranslation } from '../context/translation.js';\nimport { useGenericAppCustomScript } from './useGenericAppCustomScript.js';\nimport { useManualInteraction, useAppCustomHTML } from '../index.js';\n\ninterface UsePluginEngineReturn {\n scriptUIRef: React.RefObject<HTMLDivElement>;\n outputUIRef: React.RefObject<HTMLDivElement>;\n scopedCss: string;\n sanitizedHtml: string | null;\n interactableScriptRef: React.RefObject<HTMLDivElement>;\n iframeURL?: string | undefined;\n pending: boolean;\n}\n\nexport const useAppPage = (\n currentPage?: RoutablePageConfig,\n search?: string,\n isLoading?: boolean,\n): UsePluginEngineReturn => {\n const iframeURL = currentPage?.iframe_url;\n const script = currentPage?.script;\n const callback = currentPage?.callback;\n const pluginArgs = currentPage?.args;\n\n const { showToast } = useToast();\n const { t } = useTranslation();\n\n const scriptUIRef = useRef<HTMLDivElement>(null);\n\n const [execute, { pending }] = useGenericAppCustomScript({\n onError: (e) => {\n showToast({\n message: `${t('Plugin error:')} ${(e as MaybeMessageError)?.message ?? ''}`,\n variant: 'failure',\n });\n },\n scriptUIRef,\n plugin: currentPage,\n });\n\n const args = useMemo(() => {\n const queryString = new URLSearchParams(search);\n const query = Object.fromEntries(queryString);\n\n return {\n ...query,\n ...pluginArgs,\n };\n }, [search, pluginArgs]);\n\n const { outputUIRef, scopedCss, sanitizedHtml, interactableScriptRef } = useAppCustomHTML(\n currentPage,\n args,\n );\n\n useManualInteraction(execute, currentPage, scriptUIRef, pending);\n\n const hasRunScript = useRef(false);\n\n useEffect(() => {\n if (!iframeURL && !hasRunScript.current && script && !isLoading) {\n hasRunScript.current = true;\n void execute(script, args);\n }\n }, [iframeURL, execute, script, args, isLoading]);\n\n const handleMessage = useCallback(\n (e: MessageEvent<{ type: string; query: UnknownJSON } | undefined>) => {\n const message = e.data;\n\n if (message?.type === 'kizen:plugin_callback') {\n const args = message.query;\n\n if (callback) {\n void execute(callback, args);\n }\n }\n },\n [execute, callback],\n );\n\n useEffect(() => {\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, [handleMessage]);\n\n return {\n scriptUIRef,\n outputUIRef,\n scopedCss,\n sanitizedHtml,\n interactableScriptRef,\n iframeURL,\n pending,\n };\n};\n","import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport type { TouchFloatingFrame } from './index.js';\n\nexport interface FloatingFrameContextValue {\n touchFloatingFrame: TouchFloatingFrame;\n floatingFrameOffset: Record<string, number>;\n}\n\nexport interface FloatingFrameWrapperProps {\n children: (hiddenByModal: boolean) => React.ReactNode;\n}\n\nconst FloatingFrameContext = createContext<FloatingFrameContextValue | null>(null);\n\nexport const FloatingFrameWrapper: React.FC<FloatingFrameWrapperProps> = ({ children }) => {\n const [floatingFrameOrder, setFloatingFrameOrder] = useState<string[]>([]);\n const [hiddenByModal, setHiddenByModal] = useState(false);\n\n const touchFloatingFrame = useCallback<TouchFloatingFrame>((id, cb) => {\n setFloatingFrameOrder((prev) => {\n const res = prev.filter((i) => i !== id);\n const done = [id, ...res];\n\n cb?.(done);\n\n return done;\n });\n }, []);\n\n const floatingFrameOffset = useMemo(() => {\n return [...floatingFrameOrder].reverse().reduce((acc, id, index) => {\n return {\n ...acc,\n [id]: index,\n };\n }, {});\n }, [floatingFrameOrder]);\n\n useEffect(() => {\n const observer = new MutationObserver(() => {\n const modal = document.querySelector('div[role=\"dialog\"]');\n if (modal) {\n setHiddenByModal(true);\n } else {\n setHiddenByModal(false);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n });\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n return (\n <FloatingFrameContext.Provider\n value={{\n touchFloatingFrame,\n floatingFrameOffset,\n }}\n >\n {children(hiddenByModal)}\n </FloatingFrameContext.Provider>\n );\n};\n\nexport const useFloatingFrameContext = (): FloatingFrameContextValue => {\n const context = useContext(FloatingFrameContext);\n\n if (!context) {\n throw new Error('useFloatingFrame must be used within a FloatingFrameWrapper');\n }\n\n return context;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { JSX, RefObject } from 'react';\nimport type {\n FloatingFrameConfig,\n FloatingFrameEmployeeConfig,\n FrameQuadrant,\n MaybeMessageError,\n WindowPosition,\n} from '../../types/index.js';\nimport { useAppState } from '../context/appState.js';\nimport { useFloatingFrameCustomScript, useManualInteraction, useAppCustomHTML } from '../index.js';\nimport { useToast } from '../context/toast.js';\nimport { useTranslation } from '../context/translation.js';\nimport { runFrameScriptEventName } from '../../communication/index.js';\nimport { useFloatingFrameContext } from '../context/floatingFrame.js';\n\ninterface UseFloatingFrameArgs {\n currentWindow: FloatingFrameConfig;\n pathname: string;\n id: string;\n frameHeaderSize: number;\n defaultPositionGap?: number;\n viewportHeight?: number;\n hiddenByModal?: boolean;\n updateEmployeeConfig?: (\n id: string,\n minimized: boolean,\n windowPosition: WindowPosition | null,\n ) => (config: Partial<FloatingFrameEmployeeConfig>) => void;\n}\n\nexport const defaultIgnorePatterns = [\n '^/$',\n '^/login*',\n '/settings/mine$',\n '/settings/others$',\n '/create-new-business$',\n '^/choose-business*',\n '^/inactive-business$',\n '^/reset$',\n '/welcome$',\n '/embed/*',\n '/create-new-business$',\n '/businessbuilder',\n];\n\nexport const defaultFrameIgnoreUrls = [\n 'https://js.stripe.com', // Exlude irrelevant Stripe events\n];\n\nconst getQuadrant = (\n topDelta: number,\n leftDelta: number,\n bottomDelta: number,\n rightDelta: number,\n): FrameQuadrant => {\n if (topDelta < bottomDelta) {\n // top\n if (leftDelta < rightDelta) {\n return 'top-left';\n } else {\n return 'top-right';\n }\n } else {\n // bottom\n if (leftDelta < rightDelta) {\n return 'bottom-left';\n } else {\n return 'bottom-right';\n }\n }\n};\n\ninterface CircleProps {\n id: string;\n side: 'left' | 'right';\n circleIcon: string;\n CustomIcon: (({ className }: { className?: string }) => JSX.Element) | null;\n circleColor: string;\n onClick: () => void;\n hidden: boolean;\n}\n\ninterface UseFloatingFrameResult {\n circleProps: CircleProps;\n parentProps: {\n className: string;\n dragging: boolean;\n hidden: boolean;\n };\n draggableProps: {\n onStop: (_event: unknown, context: { node: HTMLElement | null }) => void;\n onStart: () => void;\n bounds: string;\n handle: string;\n defaultPosition: { x: number; y: number };\n position: { x: number; y: number };\n disabled: boolean;\n };\n floatProps: {\n pending: boolean;\n width: number;\n dragging: boolean;\n height: number;\n isCircle: boolean;\n };\n contentProps: {\n className: string;\n dragging: boolean;\n solid: boolean;\n };\n minimized: boolean;\n pending: boolean;\n indicator: string;\n hideHeader?: boolean | undefined;\n isFixed: boolean;\n isCircle: boolean;\n outputUIRef: RefObject<HTMLDivElement>;\n scopedCss: string;\n sanitizedHtml: string | null;\n interactableScriptRef: RefObject<HTMLDivElement>;\n tooltipPosition: 'top' | 'left' | 'bottom';\n currentPluginId?: string | undefined;\n setMinimized: (minimized: boolean) => void;\n dragHandleClassName: string;\n height: number;\n script: string | undefined;\n dragging: boolean;\n frameOffset: number;\n scriptUIRef: RefObject<HTMLDivElement> | undefined;\n}\n\nexport const useFloatingFrame = (params: UseFloatingFrameArgs): UseFloatingFrameResult => {\n const {\n currentWindow,\n pathname,\n id,\n frameHeaderSize,\n defaultPositionGap = 0,\n viewportHeight = window.innerHeight,\n hiddenByModal,\n updateEmployeeConfig: maybeUpdateEmployeeConfig,\n } = params;\n\n const scriptUIRef = useRef<HTMLDivElement>(null);\n const hasRunScript = useRef(false);\n\n const { showToast } = useToast();\n\n const { t } = useTranslation();\n\n const { installedPluginAPINamesToIds, clientObject } = useAppState();\n\n const { touchFloatingFrame, floatingFrameOffset } = useFloatingFrameContext();\n\n const frameOffset = floatingFrameOffset[id] ?? -1;\n\n const hideOnMinimized = currentWindow.minimized_style === 'none';\n\n // If we hide on minimized, treat it as the circle type (as opposed to bar)\n const isCircle = currentWindow.minimized_style === 'circle' || hideOnMinimized;\n\n const isBottomRightFixed = currentWindow.default_position === 'bottom-right-fixed';\n\n const isBottomLeftFixed = currentWindow.default_position === 'bottom-left-fixed';\n\n const isFixed = isBottomRightFixed || isBottomLeftFixed;\n\n const circleIcon = currentWindow.minimized_config?.icon ?? 'action-drag-handle';\n const circleColor = currentWindow.minimized_config?.color ?? 'blue';\n\n const additionalArgs = useMemo(() => {\n const splits = pathname.split('/');\n\n const first = splits[1];\n const second = splits[2];\n\n if (first === 'client') {\n return {\n objectId: clientObject?.id,\n entityId: second,\n };\n }\n\n if (first === 'custom-objects') {\n return {\n objectId: second,\n entityId: splits[3],\n };\n }\n }, [clientObject, pathname]);\n\n const isHiddenByPattern = useMemo(() => {\n const matchers = currentWindow.match;\n const ignore = currentWindow.ignore;\n\n if (matchers?.length && !matchers.some((m: string) => new RegExp(m).test(pathname))) {\n return true;\n }\n\n if (\n defaultIgnorePatterns\n .concat(ignore ?? [])\n .filter(Boolean)\n .some((m) => {\n try {\n return new RegExp(m).test(pathname);\n } catch {\n return false;\n }\n })\n ) {\n return true;\n }\n\n return false;\n }, [currentWindow, pathname]);\n\n const currentPluginId = currentWindow.plugin_api_name\n ? installedPluginAPINamesToIds[currentWindow.plugin_api_name]\n : '';\n\n const [minimized, _setMinimized] = useState(\n () => currentWindow.employee_config?.[id]?.minimized ?? false,\n );\n\n const script = currentWindow.script;\n const type = currentWindow.type;\n const args = currentWindow.args;\n const messageHandlerScript = currentWindow.message_handler;\n\n const width = currentWindow.width ?? 0;\n\n const [height, setHeight] = useState(() => {\n const viewportHeight = window.innerHeight;\n return Math.min(currentWindow.height ?? 0, viewportHeight - frameHeaderSize);\n });\n\n const [windowPosition, setWindowPosition] = useState<WindowPosition | null>(null);\n\n const defaultPosition = currentWindow.default_position;\n\n const getDesiredPosition = useCallback(\n (assumeExpanded: boolean) => {\n const position = currentWindow.employee_config?.[id]?.position;\n\n if (!position?.quadrant) {\n const maxAllowedLeft = window.innerWidth - width;\n let maxAllowedTop = window.innerHeight - height - frameHeaderSize;\n if (minimized && !assumeExpanded) {\n maxAllowedTop = window.innerHeight - frameHeaderSize;\n }\n\n if (position) {\n try {\n const coords = position;\n if (coords.left > maxAllowedLeft) {\n coords.left = maxAllowedLeft;\n }\n if (coords.top > maxAllowedTop) {\n coords.top = maxAllowedTop;\n }\n\n if (coords.left < 0) {\n coords.left = defaultPositionGap;\n }\n\n if (coords.top < 0) {\n coords.top = defaultPositionGap;\n }\n\n return coords;\n } catch {\n // Ignore and move on\n }\n }\n\n let defaultLeft = maxAllowedLeft;\n if (defaultPosition === 'bottom-left') {\n defaultLeft = defaultPositionGap;\n }\n\n return { left: defaultLeft, top: maxAllowedTop - defaultPositionGap };\n } else if (position.quadrant === 'top-left') {\n const left = position.deltas?.left ?? 0;\n const top = position.deltas?.top ?? 0;\n\n return { ...position, left, top };\n } else if (position.quadrant === 'top-right') {\n const left = window.innerWidth - width - (position.deltas?.right ?? 0);\n const top = position.deltas?.top ?? 0;\n\n return { ...position, left, top };\n } else if (position.quadrant === 'bottom-left') {\n const left = position.deltas?.left ?? 0;\n const top =\n window.innerHeight -\n (minimized ? 0 : height) -\n (position.deltas?.bottom ?? 0) -\n frameHeaderSize;\n\n return { ...position, left, top };\n } else {\n const left = window.innerWidth - width - (position.deltas?.right ?? 0);\n const top =\n window.innerHeight -\n (minimized ? 0 : height) -\n (position.deltas?.bottom ?? 0) -\n frameHeaderSize;\n\n return { ...position, left, top };\n }\n\n return { ...position, left: 0, top: 0 };\n },\n [\n currentWindow,\n id,\n defaultPosition,\n minimized,\n width,\n height,\n frameHeaderSize,\n defaultPositionGap,\n ],\n );\n\n const getPosition = useCallback(\n (assumeExpanded: boolean) => {\n const position = getDesiredPosition(assumeExpanded);\n\n const isBottom = ['bottom-right', 'bottom-left'].includes(position.quadrant ?? '');\n\n const calculatedHeight = isBottom && minimized ? 0 : height;\n\n if (position.left < 0) {\n position.left = 0;\n } else if (position.left > window.innerWidth - width) {\n position.left = window.innerWidth - width;\n }\n\n if (position.top < 0) {\n position.top = 0;\n } else if (position.top > window.innerHeight - calculatedHeight) {\n position.top = window.innerHeight - calculatedHeight;\n }\n\n return position;\n },\n [getDesiredPosition, width, height, minimized],\n );\n\n useEffect(() => {\n const currentHeight = currentWindow.height ?? 0;\n if (currentHeight > viewportHeight) {\n setHeight(viewportHeight - frameHeaderSize);\n const position = getDesiredPosition(true);\n position.top = 0;\n setWindowPosition(position);\n } else {\n setHeight(currentHeight);\n }\n }, [currentWindow.height, getDesiredPosition, viewportHeight, frameHeaderSize]);\n\n const [delayedModalHide, setDelayedModalHide] = useState(minimized);\n const [circleMinimized, setCircleMinimized] = useState(minimized && isCircle);\n\n const animationDelay = height * 0.0005 * 1000; // match animation duration for floating frames\n\n const setMinimized = (min: boolean): void => {\n _setMinimized(min);\n\n // delay animation for minizimation to circle\n if (min && isCircle) {\n setTimeout(() => {\n setCircleMinimized(min);\n }, animationDelay);\n } else if (isCircle) {\n setCircleMinimized(min);\n }\n // delay hiding frame if a modal is open to show animation\n if (hiddenByModal) {\n setTimeout(() => {\n setDelayedModalHide(min);\n }, animationDelay);\n } else {\n setDelayedModalHide(min);\n }\n if (windowPosition?.quadrant === 'bottom-left' || windowPosition?.quadrant === 'bottom-right') {\n if (min) {\n setWindowPosition((p) => {\n if (!p) {\n return null;\n }\n\n return {\n ...p,\n top: p.top + height,\n };\n });\n } else {\n setWindowPosition((p) => {\n if (!p) {\n return null;\n }\n const windowHeight = window.innerHeight;\n const movePositionUp = p.top >= 0 && p.top + height <= windowHeight;\n return {\n ...p,\n top: movePositionUp ? p.top : p.top - height,\n };\n });\n }\n }\n\n maybeUpdateEmployeeConfig?.(id, minimized, windowPosition)({ minimized: min });\n };\n\n const [\n execute,\n { pending, hidden: hiddenByScript, indicator, triggerHidden, hideHeader: hideHeaderByScript },\n ] = useFloatingFrameCustomScript({\n onError: (e) => {\n showToast({\n message: `${t('Plugin error:')} ${(e as MaybeMessageError)?.message ?? ''}`,\n variant: 'failure',\n });\n },\n scriptUIRef,\n plugin: currentWindow,\n onChangeMinimized: (minimized: boolean) => {\n setMinimized(minimized);\n },\n });\n\n const hideHeader = useMemo(() => hideHeaderByScript && isFixed, [hideHeaderByScript, isFixed]);\n\n const tooltipPosition = useMemo(() => {\n if (!windowPosition) return 'top';\n\n const { left, top } = windowPosition;\n const windowWidth = window.innerWidth;\n\n // we are only concerned with right and top since these edges will cause overflow\n const atRightEdge = windowWidth - (left + width) < 40;\n const atTopEdge = top < 40;\n\n if (atRightEdge) {\n return 'left';\n }\n if (atTopEdge) {\n return 'bottom';\n }\n\n return 'top';\n }, [windowPosition, width]);\n\n const resolveCircleEl = useCallback(() => {\n const currentSide = isBottomLeftFixed ? 'left' : 'right';\n const elementId = `${currentWindow.plugin_api_name}-${currentWindow.api_name}-trigger-${currentSide}`;\n const el = document.getElementById(elementId);\n return el;\n }, [isBottomLeftFixed, currentWindow]);\n\n const computeFixedPosition = useCallback(() => {\n if (!isFixed) return;\n const circleEl = resolveCircleEl();\n if (!circleEl) return;\n\n const rect = circleEl.getBoundingClientRect();\n const contentHeight = minimized ? 0 : height;\n const headerH = hideHeader ? 0 : frameHeaderSize;\n\n let top = rect.top - (contentHeight + headerH) - defaultPositionGap;\n let left = isBottomLeftFixed ? rect.left : rect.right - width;\n\n // clamp to viewport using the FULL frame height (content + header)\n const fullFrameHeight = contentHeight + headerH;\n const maxLeft = Math.max(0, window.innerWidth - width);\n const maxTop = Math.max(0, window.innerHeight - fullFrameHeight);\n\n left = Math.min(Math.max(0, left), maxLeft);\n top = Math.min(Math.max(0, top), maxTop);\n\n setWindowPosition({\n left,\n top,\n quadrant: isBottomLeftFixed ? 'bottom-left' : 'bottom-right',\n deltas: {\n top,\n left,\n right: window.innerWidth - (left + width),\n bottom: window.innerHeight - (top + fullFrameHeight),\n },\n });\n }, [\n isFixed,\n isBottomLeftFixed,\n height,\n minimized,\n width,\n hideHeader,\n resolveCircleEl,\n frameHeaderSize,\n defaultPositionGap,\n ]);\n\n useEffect(() => {\n if (isFixed) {\n computeFixedPosition();\n }\n }, [isFixed, height, minimized, computeFixedPosition]);\n\n useEffect(() => {\n if (!isFixed) return;\n\n computeFixedPosition();\n\n const bodyRO = new ResizeObserver(() => {\n computeFixedPosition();\n });\n\n bodyRO.observe(document.body);\n\n return () => {\n bodyRO.disconnect();\n };\n }, [isFixed, computeFixedPosition]);\n\n useEffect(() => {\n if (!hasRunScript.current && script && type === 'script' && !isHiddenByPattern) {\n hasRunScript.current = true;\n execute(script, { ...args });\n }\n }, [execute, script, type, args, isHiddenByPattern]);\n\n // This is the handler for events triggered by another piece of the integration,\n // like a full-page routable screen. It should not be confused with the click handler,\n // or the frame message handler.\n useEffect(() => {\n const handleRunFrameScriptFromInteraction = (e?: Event): void => {\n const event = e as\n | {\n detail?: {\n recipient?: { frame?: string; plugin?: string; script?: string };\n args?: Record<string, unknown>;\n };\n }\n | undefined;\n\n if (event?.detail?.recipient?.frame === currentWindow.api_name) {\n const payload = event.detail;\n\n if (payload.recipient?.plugin !== currentWindow.plugin_api_name) {\n return;\n }\n\n if (payload.recipient.script && currentWindow.event_scripts?.[payload.recipient.script]) {\n const script = currentWindow.event_scripts[payload.recipient.script] ?? '';\n\n execute(script, {\n ...payload.args,\n ...args,\n ...additionalArgs,\n });\n }\n }\n };\n\n window.addEventListener(runFrameScriptEventName, handleRunFrameScriptFromInteraction);\n\n return () => {\n window.removeEventListener(runFrameScriptEventName, handleRunFrameScriptFromInteraction);\n };\n }, [currentWindow, execute, args, additionalArgs]);\n\n // Used when actively moving the floating window, to prevent accidentally\n // losing focus to an iframe or other element\n const [dragging, setDragging] = useState(false);\n\n const dragEnd = (\n _event: unknown,\n context: {\n node: HTMLElement | null;\n },\n ): void => {\n setDragging(false);\n touchFloatingFrame(id);\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n\n if (context.node) {\n const rect = context.node.getBoundingClientRect();\n const left = rect.left;\n const top = rect.top;\n const bottom = top + rect.height;\n const right = left + rect.width;\n\n const topDelta = top;\n const bottomDelta = windowHeight - bottom;\n const leftDelta = left;\n const rightDelta = windowWidth - right;\n\n const quadrant = getQuadrant(topDelta, leftDelta, bottomDelta, rightDelta);\n\n const result = {\n left,\n right,\n top,\n quadrant,\n deltas: {\n top: topDelta,\n bottom: bottomDelta,\n left: leftDelta,\n right: rightDelta,\n },\n };\n\n setWindowPosition(result);\n\n maybeUpdateEmployeeConfig?.(id, minimized, windowPosition)({ position: result });\n }\n };\n\n useEffect(() => {\n const handleUpdate = (): void => {\n if (isFixed) {\n computeFixedPosition();\n } else {\n setWindowPosition(getPosition(false));\n }\n };\n\n window.addEventListener('resize', handleUpdate);\n\n return () => {\n window.removeEventListener('resize', handleUpdate);\n };\n }, [isFixed, computeFixedPosition, getPosition]);\n\n // This is the handler for click events coming from the floating frame.\n useManualInteraction(execute, currentWindow, scriptUIRef, pending, args);\n\n // This is the handler for frame messages coming from the iframe inside the floaing frame.\n useEffect(() => {\n const handleMessageEvent = (ev: MessageEvent): void => {\n if (\n ev.source !== window &&\n messageHandlerScript &&\n !defaultFrameIgnoreUrls.includes(ev.origin)\n ) {\n execute(messageHandlerScript, {\n ...args,\n eventData: ev.data,\n });\n }\n };\n\n window.addEventListener('message', handleMessageEvent);\n\n return () => {\n window.removeEventListener('message', handleMessageEvent);\n };\n }, [execute, args, messageHandlerScript]);\n\n const { outputUIRef, scopedCss, sanitizedHtml, interactableScriptRef } = useAppCustomHTML(\n currentWindow,\n {},\n );\n\n const hidden = !delayedModalHide\n ? hiddenByScript || isHiddenByPattern\n : hiddenByScript || isHiddenByPattern || hiddenByModal;\n\n const parentClassName = `floating-window-parent--${id}`;\n const dragHandleClassName = `floating-drag-handle--${id}`;\n const contentClassName = `floating-window-content--${id}`;\n let currentSide: 'left' | 'right' =\n currentWindow.employee_config?.[id]?.position?.quadrant?.split('-')[1] === 'right'\n ? 'right'\n : 'left';\n\n if (isBottomLeftFixed) {\n currentSide = 'left';\n } else if (isBottomRightFixed) {\n currentSide = 'right';\n }\n\n const customIconDataUrl = currentWindow.minimized_config?.customIcon;\n\n let CustomIcon = null;\n if (customIconDataUrl?.startsWith('data:image/')) {\n CustomIcon = ({ className = '' }: { className?: string }) => (\n <img\n src={customIconDataUrl}\n alt={currentWindow.title || 'Open Frame'}\n className={`object-cover select-none pointer-events-none ${className}`}\n />\n );\n }\n\n if (!windowPosition) {\n setWindowPosition(getPosition(false));\n }\n\n return {\n circleProps: {\n id,\n side: currentSide,\n circleIcon,\n CustomIcon,\n circleColor,\n onClick: () => {\n setMinimized(!minimized);\n },\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n hidden: Boolean(hidden || isHiddenByPattern || hideOnMinimized || triggerHidden),\n },\n parentProps: {\n className: parentClassName,\n dragging,\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n hidden: hidden || circleMinimized || isHiddenByPattern || hideOnMinimized,\n },\n draggableProps: {\n onStop: dragEnd,\n onStart: () => {\n setDragging(true);\n },\n bounds: `.${parentClassName}`,\n handle: `.${dragHandleClassName}`,\n defaultPosition: {\n x: windowPosition?.left ?? 0,\n y: windowPosition?.top ?? 0,\n },\n position: {\n x: windowPosition?.left ?? 0,\n y: windowPosition?.top ?? 0,\n },\n disabled: isFixed,\n },\n floatProps: {\n pending,\n width,\n dragging,\n height,\n isCircle: isCircle && minimized,\n },\n contentProps: {\n className: contentClassName,\n dragging,\n solid: true,\n },\n minimized,\n pending,\n indicator,\n hideHeader,\n isFixed,\n isCircle,\n outputUIRef,\n scopedCss,\n sanitizedHtml,\n interactableScriptRef,\n tooltipPosition,\n currentPluginId,\n setMinimized,\n dragHandleClassName,\n height,\n script,\n dragging,\n frameOffset,\n scriptUIRef,\n };\n};\n","import { useEffect } from 'react';\nimport type { PartialLocation } from '../../types/common.js';\nimport { getStableHash } from '../../util/encode.js';\nimport {\n IFRAME_PREFIX,\n ROUTE_CHANGE_IFRAME_EVENT,\n ROUTE_CHANGE_INTERNAL_EVENT,\n} from '../../communication/constants.js';\nimport { isFlagEnabled } from '../../util/flags.js';\n\nexport const useLocationChange = (): void => {\n useEffect(() => {\n let previousEventHash: number | null = null;\n\n const listener = (e: CustomEventInit<{ location: PartialLocation }>): void => {\n if (!e.detail?.location) {\n return;\n }\n\n const locationHash = getStableHash(e.detail.location);\n\n if (locationHash === previousEventHash) {\n return;\n }\n\n previousEventHash = locationHash;\n\n const frames: NodeListOf<HTMLIFrameElement> = document.querySelectorAll(\n `iframe[id^=${IFRAME_PREFIX}-]`,\n );\n\n frames.forEach((frame) => {\n let targetOrigin = null;\n\n try {\n const url = new URL(frame.src, window.location.href);\n\n targetOrigin = url.origin;\n } catch (error) {\n const isDebug = isFlagEnabled('script-runner-logging');\n\n if (isDebug) {\n console.warn(\n 'Failed to parse iframe src for location change message target origin:',\n error,\n );\n }\n targetOrigin = null;\n }\n\n if (!targetOrigin) {\n return;\n }\n\n frame.contentWindow?.postMessage(\n {\n action: ROUTE_CHANGE_IFRAME_EVENT,\n location: e.detail?.location,\n },\n targetOrigin,\n );\n });\n };\n\n window.addEventListener(ROUTE_CHANGE_INTERNAL_EVENT, listener);\n\n return () => {\n window.removeEventListener(ROUTE_CHANGE_INTERNAL_EVENT, listener);\n };\n }, []);\n};\n","import { type FC, type ReactNode } from 'react';\nimport { AppStateWrapper, type AppStateWrapperProps } from './appState.js';\nimport { RunnerStateWrapper } from './runnerState.js';\nimport { HistoryWrapper, type HistoryWrapperProps } from './history.js';\nimport { ModalsWrapper, type ExposedModals, type ModalWrapperContextArgs } from './modals.js';\nimport { MonitoringWrapper, type MonitoringWrapperProps } from './monitoring.js';\nimport { SessionDataWrapper } from './session.js';\nimport { TerminatorsWrapper } from './terminators.js';\nimport { ToastWrapper, type ToastWrapperProps } from './toast.js';\nimport { NetworkWrapper, type NetworkWrapperProps } from './network.js';\nimport { useLocationChange } from '../hooks/useLocationChange.js';\nimport { FloatingFrameWrapper } from './floatingFrame.js';\nimport { TranslationWrapper } from './translation.js';\n\nexport type TouchFloatingFrame = (id: string, cb?: (value: string[]) => void) => void;\n\ninterface AdditionalContextProps {\n showLoadingIndicator: boolean;\n hiddenByModal: boolean;\n hasFinishedBootstrapping: boolean;\n waitingOnRouteScript: boolean;\n}\nexport interface AppEngineProviderProps\n extends\n Omit<AppStateWrapperProps, 'children'>,\n Omit<HistoryWrapperProps, 'children'>,\n Omit<MonitoringWrapperProps, 'children'>,\n Omit<ToastWrapperProps, 'children'>,\n Omit<NetworkWrapperProps, 'children'> {\n modal: Omit<ModalWrapperContextArgs, 'children'>;\n children: (props: ExposedModals & AdditionalContextProps) => ReactNode;\n hideFramesOnModal?: boolean;\n t?: (s: string) => string;\n}\n\nexport const AppEngineProvider: FC<AppEngineProviderProps> = (props) => {\n const {\n children,\n bootstrapPlugins = [],\n userConfigs = [],\n user,\n teamMember,\n business,\n clientObject,\n onNavigate,\n modal,\n monitoringExceptionHelper,\n showToast,\n clearToasts,\n performRequest,\n appPath,\n hideFramesOnModal = true,\n createFileId,\n performFileUpload,\n t,\n } = props;\n\n useLocationChange();\n\n return (\n <AppStateWrapper\n bootstrapPlugins={bootstrapPlugins}\n userConfigs={userConfigs}\n user={user}\n teamMember={teamMember}\n business={business}\n clientObject={clientObject}\n appPath={appPath}\n >\n {({ hasFinishedBootstrapping, waitingOnRouteScript }) => {\n return (\n <TranslationWrapper t={t}>\n <RunnerStateWrapper>\n {(showLoadingIndicator) => {\n return (\n <HistoryWrapper onNavigate={onNavigate}>\n <ModalsWrapper {...modal}>\n {(modals) => {\n return (\n <MonitoringWrapper monitoringExceptionHelper={monitoringExceptionHelper}>\n <SessionDataWrapper>\n <TerminatorsWrapper>\n <ToastWrapper showToast={showToast} clearToasts={clearToasts}>\n <FloatingFrameWrapper>\n {(hiddenByModal) => {\n return (\n <NetworkWrapper\n performRequest={performRequest}\n createFileId={createFileId}\n performFileUpload={performFileUpload}\n >\n {children({\n ...modals,\n showLoadingIndicator,\n hasFinishedBootstrapping,\n waitingOnRouteScript,\n hiddenByModal: hideFramesOnModal\n ? hiddenByModal\n : false,\n })}\n </NetworkWrapper>\n );\n }}\n </FloatingFrameWrapper>\n </ToastWrapper>\n </TerminatorsWrapper>\n </SessionDataWrapper>\n </MonitoringWrapper>\n );\n }}\n </ModalsWrapper>\n </HistoryWrapper>\n );\n }}\n </RunnerStateWrapper>\n </TranslationWrapper>\n );\n }}\n </AppStateWrapper>\n );\n};\n","import { useEffect } from 'react';\nimport { useAppState } from '../context/appState.js';\n\nexport const AppBootstrapSuccess = (): null => {\n const { onInitialBootstrap } = useAppState();\n\n // Run some logic after the app has been fully bootstrapped for the first time (including\n // any plugins that need to block loading)\n useEffect(() => {\n onInitialBootstrap();\n }, [onInitialBootstrap]);\n\n return null;\n};\n","import { useRef } from 'react';\nimport { useToast } from '../context/toast.js';\nimport { useTranslation } from '../context/translation.js';\nimport { useAppState } from '../context/appState.js';\nimport { useRecordDetailCustomScript } from '../hooks/useRecordDetailCustomScript.js';\nimport type { MaybeMessageError } from '../../types/common.js';\nimport type { CommonPluginDefinition, RouteScriptConfig } from '../../types/index.js';\n\ninterface RouteScriptRunnerProps {\n pathname: string;\n routeScripts: RouteScriptConfig[];\n}\n\nconst getRouteMatcher = (\n objectId: string,\n clientObjectId: string,\n): { isClient: boolean; exp: RegExp } => {\n if (objectId === clientObjectId || objectId === 'client') {\n return { isClient: true, exp: new RegExp(`^/client/([a-zA-Z0-9-]+)/.*$`) };\n }\n\n return {\n isClient: false,\n exp: new RegExp(`^/custom-objects/${objectId}/([a-zA-Z0-9-]+).*$`),\n };\n};\n\nconst getPluginStateKey = (item: CommonPluginDefinition): string => {\n return `${item.plugin_api_name}-${item.api_name}`;\n};\n\nexport const RouteScriptRunner = (props: RouteScriptRunnerProps): null => {\n const { showToast } = useToast();\n const { t } = useTranslation();\n const { pathname, routeScripts } = props;\n\n const previousPathname = useRef('');\n\n const { clientObject, setRouteScriptRunState } = useAppState();\n const clientObjectId = clientObject?.id;\n\n const [executeScript] = useRecordDetailCustomScript({\n onError: (e) => {\n showToast({\n message: `${t('Action could not run:')} ${(e as MaybeMessageError)?.message ?? ''}`,\n variant: 'failure',\n });\n },\n // Only route script handlers need to be able to release a blocking script, since they're the only type that\n // can block the app rendering.\n onReleaseBlockingScript: (executionPlugin) => {\n if (executionPlugin) {\n const key = getPluginStateKey(executionPlugin as CommonPluginDefinition);\n setRouteScriptRunState((state) => {\n return {\n ...state,\n [key]: {\n ...state[key],\n waitingOnRouteScript: false,\n },\n };\n });\n }\n },\n entityId: '',\n objectId: '',\n });\n\n const getRunnerStateForScript = (\n checkPath: string,\n checkObjectId: string,\n ): { canRunScript: true; entityId: string; customObjectId: string } | { canRunScript: false } => {\n const { exp, isClient } = getRouteMatcher(checkObjectId, clientObjectId ?? '');\n\n const match = exp.exec(checkPath);\n\n if (match?.[1]) {\n return {\n canRunScript: true,\n entityId: match[1],\n customObjectId: isClient ? (clientObjectId ?? '') : checkObjectId,\n };\n }\n\n return {\n canRunScript: false,\n };\n };\n\n const handlePathChange = (previousPath = '', currentPath = ''): void => {\n const runQueue = routeScripts\n .map((script) => {\n return {\n ...getRunnerStateForScript(currentPath, script.custom_object.id),\n ...script,\n };\n })\n .filter(\n (\n q,\n ): q is RouteScriptConfig & {\n canRunScript: true;\n entityId: string;\n customObjectId: string;\n } => {\n if (!q.canRunScript) {\n return false;\n }\n\n if (q.routes?.length) {\n return q.routes.some((pattern) => {\n return new RegExp(pattern).test(currentPath);\n });\n }\n\n return true;\n },\n );\n\n runQueue.forEach((item) => {\n const itemKey = getPluginStateKey(item);\n\n setRouteScriptRunState((state) => {\n return {\n ...state,\n [itemKey]: {\n ...state[itemKey],\n waitingOnRouteScript: item.blocking,\n },\n };\n });\n void executeScript(\n item.script,\n {\n previousRoute: previousPath,\n currentRoute: currentPath,\n },\n item,\n {\n entityId: item.entityId,\n objectId: item.customObjectId,\n },\n ).then(() => {\n setRouteScriptRunState((state) => {\n return {\n ...state,\n [itemKey]: {\n ...state[itemKey],\n waitingOnRouteScript: false,\n },\n };\n });\n });\n });\n };\n\n if (previousPathname.current !== pathname && clientObjectId) {\n const previousValue = previousPathname.current;\n previousPathname.current = pathname;\n\n handlePathChange(previousValue, pathname);\n }\n\n return null;\n};\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n type SetStateAction,\n} from 'react';\nimport type { UnknownJSON } from '../../types/common.js';\nimport type {\n AssistantConfigAction,\n AssistantField,\n MatchSetupAssistantField,\n SetupAssistantConfig,\n} from '../../types/modals.js';\n\ninterface TemplateAssociation {\n custom_object: {\n id?: string;\n object_name?: string;\n };\n browser_js_action_template: AssistantConfigAction;\n}\nimport { getAllNestedInputsFromConfig, getFieldFromAction } from '../../workers/util.js';\nimport { useAppState } from './appState.js';\nimport { runExpression } from '../../run.js';\n\ninterface SetupAssistantContextValue {\n state: Record<string, unknown>;\n setState: (\n stateUpdate: SetStateAction<Record<string, UnknownJSON>> | Record<string, UnknownJSON>,\n ) => void;\n interpolateValue: (accessor: string) => unknown;\n getNestedFields: () => AssistantField[];\n reInferFieldsForObject: (objectKey: string) => Promise<void>;\n inferencePending: boolean;\n evaluateExpression: (expression: string, key: string) => Promise<unknown>;\n shouldHideField: (key: string) => boolean;\n shouldDisableField: (key: string) => boolean;\n expressionsIdle: boolean;\n getFieldErrorState: (\n key: string,\n ) => { message: string | undefined; showMessage: boolean; error: boolean } | undefined;\n validateForm: () => Promise<{ isValid: boolean; includedKeys: string[] }>;\n waitingExpressionCount: number;\n initialExpressionsPending: boolean;\n flattenedFields: AssistantField[];\n flattenedFieldsByKey: Record<string, AssistantField>;\n afterFieldChange: (key: string) => void;\n registerFieldResetter: (key: string, resetFn: () => void) => void;\n disabledKeys: string[];\n}\n\nexport const SetupAssistantContext = createContext<SetupAssistantContextValue | null>(null);\n\nconst SetupAssistantProvider = SetupAssistantContext.Provider;\n\nconst getUsableValue = (type: string, value?: UnknownJSON): unknown => {\n if (type === 'custom_object') {\n return value?.id;\n }\n};\n\nconst doesValueExist = (field: AssistantField, value?: { value?: UnknownJSON }): boolean => {\n if (field.type === 'custom_object') {\n if (field.allow_multiple) {\n const consideredValue = (value?.value ?? []) as unknown[];\n return consideredValue.length > 0;\n }\n\n return Boolean(value?.value?.id);\n } else if (field.type === 'field') {\n if (field.allow_multiple) {\n const consideredValue = (value?.value ?? []) as unknown[];\n\n return consideredValue.length > 0;\n }\n\n return Boolean(value?.value?.value);\n } else if (field.type === 'text') {\n const consideredValue = (value?.value ?? '') as string;\n\n return Boolean(consideredValue.trim());\n } else if (field.type === 'number') {\n const parsed = Number(value?.value);\n\n return Boolean(value?.value) && !isNaN(parsed);\n } else if (field.type === 'select') {\n if (field.allow_multiple) {\n const consideredValue = (value?.value ?? []) as unknown[];\n\n return consideredValue.length > 0;\n }\n\n return Boolean(value?.value?.value);\n } else if (field.type === 'boolean') {\n return Boolean(value?.value);\n }\n\n return false;\n};\n\nconst getNestedObjectsFromConfig = (config: SetupAssistantConfig): MatchSetupAssistantField[] => {\n const objects = (config.fields ?? []).filter(\n (entry): entry is AssistantField => entry.type === 'custom_object',\n );\n const containers = (config.fields ?? []).filter((entry) => entry.type === 'container');\n\n const recursiveObjects = containers.flatMap((container) => {\n return getNestedObjectsFromConfig(container as SetupAssistantConfig);\n });\n\n const actionObjects = config.actions?.filter((action) => action.hint_object_name) ?? [];\n\n return [\n ...objects,\n ...recursiveObjects,\n ...actionObjects.map((action) => {\n return {\n ...getFieldFromAction(action),\n match_hint: action.hint_object_name ?? '',\n };\n }),\n ];\n};\n\nconst getNestedFieldsFromConfig = (config: SetupAssistantConfig): AssistantField[] => {\n const objects = (config.fields ?? []).filter((entry) => entry.type === 'field');\n const containers = (config.fields ?? []).filter((entry) => entry.type === 'container');\n\n const recursiveFields = containers.flatMap((container) =>\n getNestedFieldsFromConfig(container as SetupAssistantConfig),\n );\n\n return [...objects, ...recursiveFields] as AssistantField[];\n};\n\ninterface CustomObjectDetails {\n id: string;\n objectName: string;\n fields: { id: string; name: string; displayName: string }[];\n}\n\nexport const SetupAssistantController = ({\n children,\n config,\n value,\n onStateChange,\n disabledKeys,\n templateAssociationsByActionApiName,\n getObjectByAPIName,\n getCustomObjectDetails,\n}: {\n children: React.ReactNode;\n config: SetupAssistantConfig;\n value?: Record<string, UnknownJSON>;\n onStateChange?: (state: Record<string, unknown>) => void;\n templateAssociationsByActionApiName?: Record<string, TemplateAssociation[]>;\n disabledKeys?: string[];\n getObjectByAPIName: (\n apiName: string,\n ) => Promise<{ id: string; object_name: string }[] | undefined>;\n getCustomObjectDetails: (objectId: string) => Promise<CustomObjectDetails>;\n}): ReactNode => {\n const [_rawState, _setState] = useState(value ?? {});\n\n const flattenedFields = useMemo(() => {\n return getAllNestedInputsFromConfig(config);\n }, [config]);\n\n const defaultState = useMemo(() => {\n const defaultValues = flattenedFields.reduce((acc: Record<string, UnknownJSON>, field) => {\n return {\n ...acc,\n [field.key]: {\n type: field.type,\n value: field.default,\n },\n };\n }, {});\n\n return defaultValues;\n }, [flattenedFields]);\n\n const state = useMemo(() => {\n const actionTemplatePartialState = Object.entries(\n templateAssociationsByActionApiName ?? {},\n ).reduce((acc: Record<string, unknown>, [actionApiName, associations]) => {\n const actionFieldKey = `action__${actionApiName}`;\n\n const associatedObjects = associations.map((assoc) => {\n return {\n id: assoc.custom_object.id ?? '',\n objectName: assoc.custom_object.object_name ?? 'Unknown Object',\n };\n });\n\n if (associatedObjects.length > 0 && associations.length > 0 && associations[0]) {\n acc[actionFieldKey] = {\n type: 'custom_object',\n value: associatedObjects,\n config: getFieldFromAction(associations[0].browser_js_action_template),\n };\n }\n\n return acc;\n }, {});\n\n const stateValues = {\n ...actionTemplatePartialState,\n ..._rawState,\n };\n\n disabledKeys?.forEach((key) => {\n if (stateValues[key]) {\n stateValues[key] = undefined;\n }\n });\n\n return stateValues as Record<string, UnknownJSON>;\n }, [_rawState, templateAssociationsByActionApiName, disabledKeys]);\n\n const hasRunInference = useRef(Boolean(value));\n\n const inferenceState = useRef({});\n const [inferencePending, setInferencePending] = useState(!value);\n const [waitingExpressions, setWaitingExpressions] = useState<Record<string, boolean>>({});\n const [expressionResults, setExpressionResults] = useState<Record<string, boolean>>({});\n const [expressionsIdle, setExpressionsIdle] = useState(false);\n const idleTimer = useRef<number | null>(null);\n const [errors, setErrors] = useState<Record<string, string | undefined>>({});\n const [expressionsStarted, setExpressionsStarted] = useState(false);\n\n const [initialExpressionsPending, setInitialExpressionsPending] = useState(true);\n\n const fieldResetterRef = useRef<Record<string, () => void>>({});\n\n /*\n * Each field can register a reset function, that when called will clear the field value.\n * This allows each field type to control what actions need to happen in order to fully\n * reset itself.\n */\n const registerFieldResetter = useCallback((key: string, resetFn: () => void) => {\n fieldResetterRef.current[key] = resetFn;\n }, []);\n\n /*\n * We need to maintain a copy of the state outside the render cycle for inferring fields choices based on\n * the hint name.\n */\n const setState = useCallback(\n (stateUpdate: SetStateAction<Record<string, UnknownJSON>> | Record<string, UnknownJSON>) => {\n if (typeof stateUpdate === 'function') {\n _setState((prev) => {\n const result = stateUpdate(prev);\n inferenceState.current = result;\n\n onStateChange?.(result);\n\n return result;\n });\n } else {\n inferenceState.current = stateUpdate;\n _setState(stateUpdate);\n onStateChange?.(stateUpdate);\n }\n\n setErrors({});\n },\n [onStateChange],\n );\n\n /*\n * Take values like \"{{some_key}}\" and replace in the actual value from state\n */\n const interpolateValueFromState = useCallback(\n (accessor: string, consideredState: Record<string, UnknownJSON>) => {\n if (accessor.startsWith('{{') && accessor.endsWith('}}')) {\n const stateKey = accessor.slice(2, -2).trim();\n\n return getUsableValue(\n consideredState[stateKey]?.type as string,\n consideredState[stateKey]?.value as UnknownJSON,\n );\n }\n\n return accessor;\n },\n [],\n );\n\n const interpolateValue = useCallback(\n (accessor: string) => {\n return interpolateValueFromState(accessor, state);\n },\n [state, interpolateValueFromState],\n );\n\n const { clientObject } = useAppState();\n\n const getPotentialMatch = useCallback(\n async (api_name: string) => {\n if (api_name === 'client_client' && clientObject) {\n return [\n {\n id: clientObject.id,\n object_name: clientObject.objectName,\n },\n ];\n }\n\n const potentialMatch = await getObjectByAPIName(api_name);\n\n return potentialMatch;\n },\n [clientObject, getObjectByAPIName],\n );\n\n /*\n * If there is a match_hint for an object, we can try to infer the object by its API name\n * and set it automatically.\n */\n const handleInferObjects = useCallback(async () => {\n const objectsToInfer = getNestedObjectsFromConfig(config);\n\n for (const inferrableObject of objectsToInfer) {\n if (!inferrableObject.match_hint) {\n continue;\n }\n\n const potentialMatch = await getPotentialMatch(inferrableObject.match_hint);\n\n if (potentialMatch?.[0]) {\n const value = {\n id: potentialMatch[0].id,\n objectName: potentialMatch[0].object_name,\n };\n\n setState((prev) => {\n const result = {\n ...prev,\n [inferrableObject.key]: {\n type: 'custom_object',\n value: inferrableObject.allow_multiple ? [value] : value,\n },\n };\n\n return result;\n });\n }\n }\n }, [config, setState, getPotentialMatch]);\n\n const getInferrableFields = useCallback(() => {\n return getNestedFieldsFromConfig(config);\n }, [config]);\n\n /*\n * Similar to handleInferObjects, but for fields. Can either take an objectId as forceObjectId, or\n * look it up in the state based on additional references. objectIdFilter can be used to only\n * run the inference on fields for a particular object key.\n */\n const handleInferFields = useCallback(\n async (objectIdFilter?: string, forceObjectId?: string) => {\n const fieldsToInfer = getInferrableFields();\n\n const objectResults: Record<string, CustomObjectDetails> = {};\n for (const inferrableField of fieldsToInfer) {\n if (!inferrableField.object_id) {\n continue;\n }\n\n const objectId =\n forceObjectId ??\n (interpolateValueFromState(inferrableField.object_id, inferenceState.current) as string);\n\n if (objectIdFilter && !inferrableField.object_id.includes(objectIdFilter)) {\n continue;\n }\n\n if (!objectResults[objectId] && objectId) {\n try {\n objectResults[objectId] = await getCustomObjectDetails(objectId);\n } catch {\n // Swallow error fetching object, since the user can recover by picking a different one\n }\n }\n\n const objectDetail = objectResults[objectId];\n\n if (objectDetail) {\n const fieldMatch = objectDetail.fields.find((f) => f.name === inferrableField.match_hint);\n\n if (fieldMatch) {\n setState((prev) => {\n const result = {\n ...prev,\n [inferrableField.key]: {\n type: 'field',\n value: {\n value: fieldMatch.id,\n label: fieldMatch.displayName,\n },\n associatedObject: {\n id: objectId,\n name: objectDetail.objectName,\n },\n },\n };\n\n return result;\n });\n }\n }\n }\n },\n [interpolateValueFromState, getInferrableFields, setState, getCustomObjectDetails],\n );\n\n const handleReinferObjectByKey = useCallback(\n async (key: string) => {\n const objectsToInfer = getNestedObjectsFromConfig(config);\n\n const matchingObject = objectsToInfer.find((obj) => obj.key === key);\n\n if (matchingObject?.match_hint) {\n let matchedObjectId = '';\n const potentialMatch = await getPotentialMatch(matchingObject.match_hint);\n\n const match = potentialMatch?.[0];\n\n if (match) {\n matchedObjectId = match.id;\n\n setState((prev) => {\n const result = {\n ...prev,\n [key]: {\n type: 'custom_object',\n value: {\n id: match.id,\n objectName: match.object_name,\n },\n },\n };\n\n return result;\n });\n\n if (matchedObjectId) {\n void handleInferFields(undefined, matchedObjectId);\n }\n }\n }\n },\n [config, setState, handleInferFields, getPotentialMatch],\n );\n\n const handleConfigInference = useCallback(async () => {\n // Objects have to complete first, then fields, since the fields need the object metadata\n await handleInferObjects();\n await handleInferFields();\n setInferencePending(false);\n }, [handleInferObjects, handleInferFields]);\n\n const getNestedFields = useCallback(() => {\n return getNestedFieldsFromConfig(config);\n }, [config]);\n\n const reInferFieldsForObject = useCallback(\n (objectKey: string) => {\n return handleInferFields(objectKey);\n },\n [handleInferFields],\n );\n\n const resetIdleTimeout = useCallback(() => {\n if (idleTimer.current) {\n clearTimeout(idleTimer.current);\n idleTimer.current = null;\n }\n\n idleTimer.current = setTimeout(() => {\n setExpressionsIdle(true);\n }, 500);\n }, []);\n\n const evaluateExpression = useCallback(\n async (expression: string, key: string) => {\n resetIdleTimeout();\n setWaitingExpressions((prev) => ({ ...prev, [key]: true }));\n setExpressionsStarted(true);\n\n const result = await runExpression(expression, {\n ...defaultState,\n ...state,\n });\n\n setExpressionResults((prev) => {\n if (prev[key] === false && typeof result === 'boolean' && result) {\n // Key became true from false state, so we re-infer the object if it's not set\n if (!state[key]) {\n void handleReinferObjectByKey(key);\n }\n }\n return { ...prev, [key]: result };\n });\n setWaitingExpressions((prev) => ({ ...prev, [key]: false }));\n\n return result;\n },\n [state, resetIdleTimeout, handleReinferObjectByKey, defaultState],\n );\n\n if (!hasRunInference.current) {\n hasRunInference.current = true;\n void handleConfigInference();\n }\n\n const shouldHideField = useCallback(\n (key: string) => {\n if (expressionResults[key] === false) {\n return true;\n }\n\n return false;\n },\n [expressionResults],\n );\n\n const shouldDisableField = useCallback(\n (key: string) => {\n if (waitingExpressions[key] === true) {\n return true;\n }\n\n return false;\n },\n [waitingExpressions],\n );\n\n const getFieldErrorState = useCallback(\n (key: string) => {\n if (errors[key]) {\n return {\n message: errors[key],\n showMessage: true,\n error: true,\n };\n }\n },\n [errors],\n );\n\n const whenClauses = useMemo(() => {\n const sectionClauses = (config.fields ?? [])\n .filter((entry) => entry.type === 'container')\n .map((c) => c.when);\n\n const fieldClauses = flattenedFields.map((f) => f.when);\n\n return [...sectionClauses, ...fieldClauses].filter(Boolean);\n }, [config, flattenedFields]);\n\n const flattenedFieldsByKey = useMemo(() => {\n return flattenedFields.reduce((acc: Record<string, AssistantField>, field) => {\n acc[field.key] = field;\n return acc;\n }, {});\n }, [flattenedFields]);\n\n const getAdditionalDeps = useCallback(\n (dep: string, results: Set<string>, visited: Set<string>) => {\n results.add(dep);\n const depField = flattenedFieldsByKey[dep];\n\n if (depField?.dependencies?.length) {\n depField.dependencies.forEach((d: string) => {\n if (!visited.has(d)) {\n visited.add(d);\n getAdditionalDeps(d, results, visited);\n }\n });\n }\n },\n [flattenedFieldsByKey],\n );\n\n /*\n * Follow dependency chains to find all fields that depend on a given field, either directly\n * or indirectly (i.e. a field that depends on a field that depends on the changed field).\n * This allows us to reset all dependent fields when a field changes.\n */\n const flattenedFieldsWithDependencies = useMemo(() => {\n const fields = flattenedFields.map((field) => {\n const depsResultSet = new Set<string>();\n const deps = field.dependencies ?? [];\n const visited = new Set<string>();\n\n deps.forEach((dep: string) => {\n getAdditionalDeps(dep, depsResultSet, visited);\n });\n\n return {\n ...field,\n dependencies: Array.from(depsResultSet),\n };\n });\n\n return fields;\n }, [flattenedFields, getAdditionalDeps]);\n\n /*\n * Called during the state update when a field value changes to check the dependent fields\n * and call their reset functions\n */\n const afterFieldChange = useCallback(\n (key: string) => {\n const dependentFields = flattenedFieldsWithDependencies.filter((f) => {\n if (f.dependencies.length === 0) {\n return false;\n }\n\n return f.dependencies.includes(key) && f.key !== key;\n });\n\n dependentFields.forEach((field) => {\n fieldResetterRef.current[field.key]?.();\n });\n },\n [flattenedFieldsWithDependencies],\n );\n\n const validateForm = useCallback(async () => {\n const processedFields = await Promise.all(\n flattenedFields.map(async (field) => {\n if (!field.when) {\n return field;\n }\n\n const isVisible = await runExpression(field.when, {\n ...defaultState,\n ...state,\n });\n\n return isVisible ? field : null;\n }),\n );\n\n const fieldsToCheck = processedFields.filter(Boolean);\n\n let errorCount = 0;\n\n for (const field of fieldsToCheck) {\n if (field && field.required && !doesValueExist(field, state[field.key])) {\n setErrors((prev) => ({\n ...prev,\n [field.key]: 'This field is required',\n }));\n\n errorCount++;\n } else if (field?.validation_pattern) {\n const isValid = new RegExp(field.validation_pattern).test(\n (state[field.key]?.value ?? field.default ?? '') as string,\n );\n\n if (!isValid) {\n setErrors((prev) => ({\n ...prev,\n [field.key]: `Value must match the pattern ${field.validation_pattern ?? ''}`,\n }));\n errorCount++;\n }\n } else {\n if (field) {\n setErrors((prev) => ({\n ...prev,\n [field.key]: undefined,\n }));\n }\n }\n }\n\n return {\n isValid: errorCount === 0,\n includedKeys: fieldsToCheck.map((f) => f?.key).filter((k): k is string => Boolean(k)),\n };\n }, [state, flattenedFields, defaultState]);\n\n useEffect(() => {\n resetIdleTimeout();\n }, [resetIdleTimeout]);\n\n const waitingExpressionCount = Object.values(waitingExpressions).filter(Boolean).length;\n\n if (!expressionsStarted && whenClauses.length === 0) {\n setExpressionsStarted(true);\n }\n\n if (expressionsStarted && initialExpressionsPending && waitingExpressionCount === 0) {\n setInitialExpressionsPending(false);\n }\n\n return (\n <SetupAssistantProvider\n value={{\n state,\n setState,\n interpolateValue,\n getNestedFields,\n reInferFieldsForObject,\n inferencePending,\n evaluateExpression,\n shouldHideField,\n shouldDisableField,\n expressionsIdle,\n getFieldErrorState,\n validateForm,\n waitingExpressionCount,\n initialExpressionsPending,\n flattenedFields,\n flattenedFieldsByKey,\n afterFieldChange,\n registerFieldResetter,\n disabledKeys: disabledKeys ?? [],\n }}\n >\n {children}\n </SetupAssistantProvider>\n );\n};\n\nexport const useSetupAssistant = (): SetupAssistantContextValue => {\n const context = useContext(SetupAssistantContext);\n\n if (!context) {\n throw new Error('useSetupAssistant must be used within a SetupAssistantController');\n }\n\n return context;\n};\n"]}
|