import { Arr } from '@ephox/katamari'; import type { AlloyComponent } from '../../api/component/ComponentApi'; import type { AlloySpec } from '../../api/component/SpecTypes'; import * as AriaFocus from '../../aria/AriaFocus'; import { patchSpecChildren } from '../../dom/Patching'; import * as InternalAttachment from '../../system/InternalAttachment'; const withoutReuse = (parent: AlloyComponent, data: AlloySpec[]): void => { AriaFocus.preserve(() => { InternalAttachment.replaceChildren(parent, data, () => Arr.map(data, parent.getSystem().build)); }, parent.element); }; const withReuse = (parent: AlloyComponent, data: AlloySpec[]): void => { // Note: We shouldn't need AriaPreserve since we're trying to keep the existing elements, // but let's just do it for now just to be safe. AriaFocus.preserve(() => { InternalAttachment.virtualReplaceChildren(parent, data, () => { // Build the new children return patchSpecChildren( parent.element, data, parent.getSystem().buildOrPatch ); }); }, parent.element); }; export { withoutReuse, withReuse };