demarches-normaliennes/app/javascript/components/MapEditor/index.tsx

64 lines
1.9 KiB
TypeScript
Raw Normal View History

2024-05-06 18:10:30 +02:00
import { useState } from 'react';
import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';
import type { FeatureCollection } from 'geojson';
import { MapLibre } from '../shared/maplibre/MapLibre';
import { useFeatureCollection } from './hooks';
import { DrawLayer } from './components/DrawLayer';
import { CadastreLayer } from './components/CadastreLayer';
import { AddressInput } from './components/AddressInput';
import { PointInput } from './components/PointInput';
import { ImportFileInput } from './components/ImportFileInput';
import { FlashMessage } from '../shared/FlashMessage';
export default function MapEditor({
featureCollection: initialFeatureCollection,
url,
2024-05-06 18:10:30 +02:00
adresseSource,
options,
champId
}: {
featureCollection: FeatureCollection;
url: string;
2024-05-06 18:10:30 +02:00
adresseSource: string;
options: { layers: string[] };
champId: string;
}) {
const [cadastreEnabled, setCadastreEnabled] = useState(false);
const { featureCollection, error, ...actions } = useFeatureCollection(
initialFeatureCollection,
{ url }
);
return (
<>
{error && <FlashMessage message={error} level="alert" fixed={true} />}
<ImportFileInput featureCollection={featureCollection} {...actions} />
<AddressInput
2024-05-06 18:10:30 +02:00
source={adresseSource}
champId={champId}
2024-02-02 15:08:30 +01:00
featureCollection={featureCollection}
/>
<MapLibre layers={options.layers}>
<DrawLayer
featureCollection={featureCollection}
{...actions}
enabled={!cadastreEnabled}
/>
{options.layers.includes('cadastres') ? (
2024-09-20 18:22:49 +02:00
<CadastreLayer
featureCollection={featureCollection}
{...actions}
toggle={() => setCadastreEnabled((enabled) => !enabled)}
enabled={cadastreEnabled}
/>
) : null}
</MapLibre>
2024-02-02 15:08:30 +01:00
<PointInput featureCollection={featureCollection} />
</>
);
}