import { RNSharedElementNode } from "./RNSharedElementNode.web";
import { IHTMLElement } from "./types";
export class RNSharedElementNodeManager {
private nodes = new Map<HTMLElement, RNSharedElementNode>();
private static instance: RNSharedElementNodeManager;
static getInstance(): RNSharedElementNodeManager {
if (!RNSharedElementNodeManager.instance) {
RNSharedElementNodeManager.instance = new RNSharedElementNodeManager();
}
return RNSharedElementNodeManager.instance;
}
acquire(
domNode: IHTMLElement,
isParent: boolean,
ancestorDomNode: IHTMLElement
): RNSharedElementNode {
let node = this.nodes.get(domNode);
if (node) {
node.addRef();
return node;
}
node = new RNSharedElementNode(domNode, isParent, ancestorDomNode);
this.nodes.set(domNode, node);
return node;
}
release(node: RNSharedElementNode) {
const refCount = node.releaseRef();
if (!refCount) {
this.nodes.delete(node.domNode);
}
return refCount;
}
}