forked from KaotoIO/kaoto
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRouteVisualization.tsx
68 lines (59 loc) · 2.07 KB
/
RouteVisualization.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import React, { useContext, useEffect, useLayoutEffect } from 'react';
import {
CatalogLoaderProvider,
EntitiesContext,
EntitiesProvider,
RuntimeProvider,
SchemasLoaderProvider,
VisibleFlowsContext,
VisibleFlowsProvider,
} from '../../providers';
import { Visualization } from '../../components/Visualization';
import { EventNotifier } from '../../utils';
import { useReload } from '../../hooks/reload.hook';
const VisibleFlowsVisualization: React.FC<{ className?: string }> = ({ className = '' }) => {
const { visibleFlows, visualFlowsApi } = useContext(VisibleFlowsContext)!;
const entitiesContext = useContext(EntitiesContext);
const visualEntities = entitiesContext?.visualEntities ?? [];
useEffect(() => {
visualFlowsApi.showAllFlows();
}, [visibleFlows, visualFlowsApi]);
return <Visualization className={`canvas-page ${className}`} entities={visualEntities} />;
};
const Viz: React.FC<{ catalogUrl: string; className?: string }> = ({ catalogUrl, className = '' }) => {
const ReloadProvider = useReload();
return (
<ReloadProvider>
<RuntimeProvider catalogUrl={catalogUrl}>
<SchemasLoaderProvider>
<CatalogLoaderProvider>
<VisibleFlowsProvider>
<VisibleFlowsVisualization className={`canvas-page ${className}`} />
</VisibleFlowsProvider>
</CatalogLoaderProvider>
</SchemasLoaderProvider>
</RuntimeProvider>
</ReloadProvider>
);
};
export const RouteVisualization: React.FC<{
catalogUrl: string;
code: string;
codeChange: (code: string) => void;
className?: string;
}> = ({ catalogUrl, code, codeChange, className }) => {
const eventNotifier = EventNotifier.getInstance();
useLayoutEffect(() => {
return eventNotifier.subscribe('entities:updated', (code: string) => {
codeChange(code);
});
}, [eventNotifier, codeChange]);
useEffect(() => {
eventNotifier.next('code:updated', code);
}, [code, eventNotifier]);
return (
<EntitiesProvider>
<Viz catalogUrl={catalogUrl} className={className} />
</EntitiesProvider>
);
};