Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

front: implement macro editor OP import #7940

Merged
merged 9 commits into from
Aug 6, 2024
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useEffect, useRef } from 'react';
import React, { useEffect, useRef, useState } from 'react';

/* eslint-disable import/extensions, import/no-unresolved */
import ngeMain from '@osrd-project/netzgrafik-frontend/dist/netzgrafik-frontend/en/main.js?url';
Expand All @@ -8,6 +8,12 @@ import ngeStyles from '@osrd-project/netzgrafik-frontend/dist/netzgrafik-fronten
import ngeVendor from '@osrd-project/netzgrafik-frontend/dist/netzgrafik-frontend/en/vendor.js?url';
/* eslint-enable import/extensions, import/no-unresolved */

import type { NetzgrafikDto } from './types';

interface NGEElement extends HTMLElement {
netzgrafikDto: NetzgrafikDto;
}

const frameSrc = `
<!DOCTYPE html>
<html class="sbb-lean sbb-light">
Expand All @@ -22,29 +28,22 @@ const frameSrc = `
</html>
`;

const NGE = () => {
const NGE = ({ dto }: { dto?: NetzgrafikDto }) => {
const frameRef = useRef<HTMLIFrameElement>(null);

const [ngeRootElement, setNgeRootElement] = useState<NGEElement | null>(null);
useEffect(() => {
const frame = frameRef.current!;

const handleFrameLoad = () => {
frame.removeEventListener('load', handleFrameLoad);

const ngeRoot = frame.contentDocument!.createElement('sbb-root');
const ngeRoot = frame.contentDocument!.createElement('sbb-root') as NGEElement;
frame.contentDocument!.body.appendChild(ngeRoot);
setNgeRootElement(ngeRoot);

// listens to create, update and delete operations
// ngeRoot.addEventListener('operation', (event: Event) => {
// console.log('Operation received', (event as CustomEvent).detail);
// });

// get netzgrafik model from NGE
// let netzgrafikDto = ngeRoot.netzgrafikDto;

// // set new netzgrafik model with new nodes
// netzgrafikDto.nodes = testNodesDto;
// ngeRoot.netzgrafikDto = netzgrafikDto;
};

frame.addEventListener('load', handleFrameLoad);
Expand All @@ -54,6 +53,12 @@ const NGE = () => {
};
}, []);

useEffect(() => {
if (ngeRootElement && dto) {
ngeRootElement.netzgrafikDto = dto;
}
}, [dto, ngeRootElement]);

return <iframe ref={frameRef} srcDoc={frameSrc} title="NGE" className="nge-iframe-container" />;
};

Expand Down
Loading
Loading