Загрузка данных


import { ReactElement } from 'react';

import { Modal, ModalProps } from '@components/Modal';
import { ReactRenderer } from '@core/ReactRenderer';

export class ModalRenderer extends ReactRenderer {
  constructor(container: HTMLElement) {
    super(container);

    this.container.hidden = true;
  }

  public override renderComponent(component: ReactElement, props?: ModalProps): void {
    if (!props) {
      throw new Error('[Modal]: modal props are not defined');
    }

    this.container.hidden = false;

    const handleHide = () => {
      props.onHide?.();
      this.clearComponents();
    };

    const handleSave = () => {
      props.onSave?.();
      this.clearComponents();
    };

    super.renderComponent(
      <Modal
        {...props}
        onHide={handleHide}
        onSave={handleSave}
        appendTo={this.container}
      >
        {component}
      </Modal>,
    );
  }

  public override clearComponents(): void {
    this.container.hidden = true;

    super.clearComponents();
  }

  public override destroy(): void {
    this.container.hidden = true;

    super.destroy();
  }
}