+ {
+ layerOptionsVisible && (
+
+ {
+ layers.map(layer => (
+
onLayerSelect(l)}
+ layer={layer}
+ backgroundLayerFilter={backgroundLayerFilter}
+ zoom={zoom}
+ center={center}
+ />
+ ))
+ }
+ {
+ allowEmptyBackground &&
+ {
+ selectedLayer?.setVisible(false);
+ }}
+ onMouseLeave={() => {
+ selectedLayer?.setVisible(true);
+ }}
+ onClick={() => {
+ selectedLayer?.setVisible(false);
+ setSelectedLayer(undefined);
+ setLayerOptionsVisible(false);
+ setIsBackgroundImage(true);
+ }}
+ >
+
+
+
+
+ {noBackgroundTitle}
+
+
+ }
+
+ )
+ }
+
:
+
+ }
+ onClick={() => setLayerOptionsVisible(!layerOptionsVisible)}
+ />
+
+ {
+ !isBackgroundImage ?
+
:
+
+
+
+ }
+ {
+ selectedLayer ?
+
+ {selectedLayer.get('name')}
+ :
+
+ {noBackgroundTitle}
+
+ }
+
+
);
};
diff --git a/src/BackgroundLayerPreview/BackgroundLayerPreview.less b/src/BackgroundLayerPreview/BackgroundLayerPreview.less
new file mode 100644
index 0000000000..40de5eb350
--- /dev/null
+++ b/src/BackgroundLayerPreview/BackgroundLayerPreview.less
@@ -0,0 +1,28 @@
+.layer-preview {
+ cursor: pointer;
+ margin: auto 0;
+
+ &:hover {
+ outline: 2px solid #2f4f4f;
+ }
+
+ &.selected {
+ .layer-title {
+ outline: 2px solid #2f4f4f;
+ font-weight: bold;
+ }
+ }
+
+ .layer-title {
+ position: absolute;
+ bottom: 0;
+ background: #fff;
+ color: #000;
+ text-align: center;
+ width: 100%;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ padding: 0 4px;
+ }
+}
diff --git a/src/BackgroundLayerPreview/BackgroundLayerPreview.tsx b/src/BackgroundLayerPreview/BackgroundLayerPreview.tsx
new file mode 100644
index 0000000000..856e66bdbf
--- /dev/null
+++ b/src/BackgroundLayerPreview/BackgroundLayerPreview.tsx
@@ -0,0 +1,169 @@
+import './BackgroundLayerPreview.less';
+
+import useMap from '@terrestris/react-util/dist/Hooks/useMap/useMap';
+import { Spin } from 'antd';
+import { Coordinate } from 'ol/coordinate';
+import OlLayerBase from 'ol/layer/Base';
+import OlLayerImage from 'ol/layer/Image';
+import OlLayer from 'ol/layer/Layer';
+import OlLayerTile from 'ol/layer/Tile';
+import OlMap from 'ol/Map';
+import { getUid } from 'ol/util';
+import OlView from 'ol/View';
+import React, {
+ useEffect,
+ useMemo,
+ useState
+} from 'react';
+
+import MapComponent from '../Map/MapComponent/MapComponent';
+
+export type BackgroundLayerPreviewProps = {
+ width?: number;
+ height?: number;
+ layer: OlLayer;
+ activeLayer?: OlLayer;
+ onClick: (l: OlLayer) => void;
+ zoom?: number;
+ center?: Coordinate;
+ backgroundLayerFilter: (l: OlLayerBase) => boolean;
+};
+
+export const BackgroundLayerPreview: React.FC