import type { UiProps, UiKeyOption } from '@jiotranslate/core-beta'; import { KeyData, KeyDialog } from './KeyDialog/KeyDialog'; import { getRootElement } from './getRootElement'; import { Root, createRoot } from 'react-dom/client'; import { KeyContextMenu } from './KeyContextMenu/KeyContextMenu'; export const InContextUi = (props: UiProps) => { let rootElement: Element | undefined; let tolgeeModalRoot: Root; let contextMenuRoot: Root; function checkInitialization() { const newRoot = getRootElement(); if (rootElement !== newRoot) { rootElement = newRoot; const tolgeeModalContainer = document.createElement('div'); rootElement.appendChild(tolgeeModalContainer); tolgeeModalRoot = createRoot(tolgeeModalContainer); const contextMenuContainer = document.createElement('div'); rootElement.appendChild(contextMenuContainer); contextMenuRoot = createRoot(contextMenuContainer); } } const self = { openKeyDialog(keyData: KeyData) { checkInitialization(); tolgeeModalRoot.render(); }, async getKey(props: { keys: Map; target: HTMLElement; }): Promise { return await new Promise((resolve) => { checkInitialization(); contextMenuRoot.render( ); }); }, async handleElementClick( keysAndDefaults: UiKeyOption[], target: HTMLElement ) { checkInitialization(); let key = keysAndDefaults[0].key as string | undefined; const keysMap = new Map( keysAndDefaults.map(({ key, translation, defaultValue }) => [ key, translation || defaultValue, ]) ); if (keysMap.size > 1) { key = await self.getKey({ keys: keysMap, target, }); } if (key) { const value = keysAndDefaults.find((val) => val.key === key)!; self.openKeyDialog({ key, namespace: value.namespace, defaultValue: value.defaultValue, fallbackNamespaces: value.fallbackNamespaces, }); } }, }; return self; };