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;
};