import { useCallback, useRef } from "react"; import type { WidgetData, WidgetOptions } from "../domain"; import { AsyncStorageService } from "../services/storage/AsyncStorageService"; import { buildStorageId } from "../services/storage/StorageIdBuilder"; import { getUserId } from "../services/UserIdentificationService"; import { WidgetStateManager } from "../services/WidgetStateManager"; import { useWidgetUI } from "./useWidgetUI"; export const useWidget = (soluCXKey: string, data: WidgetData, options?: WidgetOptions) => { const userId = getUserId(data); const storageId = buildStorageId(soluCXKey, data); const storageService = useRef(null as AsyncStorageService | null); if (!storageService.current) { storageService.current = new AsyncStorageService(storageId); } const ui = useWidgetUI(options); const _stateManager = useRef(null as WidgetStateManager | null); if (!_stateManager.current) { _stateManager.current = new WidgetStateManager(storageService.current, storageId); } const stateManager = _stateManager.current; const open = useCallback(async () => { ui.show(); }, []); const resize = useCallback((value: string) => { if (options?.height) return; const height = Number(value); ui.resize(height); }, []); return { userId, widgetHeight: ui.widgetHeight, isWidgetVisible: ui.isWidgetVisible, open, hide: ui.hide, show: ui.show, resize, stateManager, }; };