Skip to content

Commit 8171eea

Browse files
committed
refactor(composables): move prop handling and class creation into useLayer composable
1 parent 3a7835c commit 8171eea

13 files changed

+112
-137
lines changed

docs/pluginsguide/index.md

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,31 @@ const props = withDefaults(
4141
},
4242
);
4343
44-
const properties = usePropsAsObjectProperties(props);
45-
46-
const layer = shallowRef(new FooLayer(properties));
47-
useLayer(layer, props);
44+
// Create the layer
45+
// Changes will be applied and the layer will be removed on unmount.
46+
// The last parameter will receive the event names which should be handled by the target component.
47+
// Check out the sources of the composable for more details.
48+
const { layer } = useLayer(FooLayer, props, ['change:opacity']);
4849
49-
provide("layer", layer);
50+
// source components will rely on the layer (depends on the source type)
51+
provide("vectorLayer", layer);
52+
// provide("heatmapLayer", layer);
53+
// provide("imageLayer", layer);
54+
// provide("tileLayer", layer);
55+
// provide("vectorImageLayer", layer);
56+
// provide("vectorTileLayer", layer);
57+
// provide("webglVectorLayer", layer);
5058
5159
defineExpose({
52-
layer,
60+
// see above ("provide")
61+
vectorLayer: layer
62+
// vectorLayer
63+
// heatmapLayer
64+
// imageLayer
65+
// tileLayer
66+
// vectorImageLayer
67+
// vectorTileLayer
68+
// webglVectorLayer
5369
});
5470
</script>
5571
```

src/components/layers/OlAnimatedClusterLayer.vue

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,18 @@
55
</template>
66

77
<script setup lang="ts">
8-
import { inject, provide, watch, shallowRef } from "vue";
8+
import { provide, shallowRef, watch } from "vue";
99
import { Cluster } from "ol/source";
1010
import { easeOut } from "ol/easing";
1111
import AnimatedCluster from "ol-ext/layer/AnimatedCluster";
12-
import type Map from "ol/Map";
1312
import usePropsAsObjectProperties from "@/composables/usePropsAsObjectProperties";
1413
import useLayer from "@/composables/useLayer";
1514
import {
1615
layersCommonDefaultProps,
1716
type LayersCommonProps,
1817
} from "@/components/layers/LayersCommonProps";
1918
import type { Point } from "ol/geom";
20-
import {
21-
FEATURE_EVENTS,
22-
useOpenLayersEvents,
23-
} from "@/composables/useOpenLayersEvents";
19+
import { FEATURE_EVENTS } from "@/composables/useOpenLayersEvents";
2420
2521
// prevent warnings caused by event pass-through via useOpenLayersEvents composable
2622
defineOptions({
@@ -49,8 +45,6 @@ const props = withDefaults(
4945
},
5046
);
5147
52-
const map = inject<Map>("map");
53-
5448
const properties = usePropsAsObjectProperties(props);
5549
5650
const clusterSource = shallowRef(
@@ -60,29 +54,27 @@ const clusterSource = shallowRef(
6054
}),
6155
);
6256
63-
useOpenLayersEvents(clusterSource, FEATURE_EVENTS);
57+
const { layer, map } = useLayer(
58+
AnimatedCluster,
59+
{
60+
...props,
61+
source: clusterSource.value,
62+
},
63+
FEATURE_EVENTS,
64+
);
6465
6566
watch(
66-
() => properties.distance,
67+
() => props.distance,
6768
(newValue) => {
6869
clusterSource.value.setDistance(newValue);
6970
},
7071
);
7172
72-
const vectorLayer = shallowRef(
73-
new AnimatedCluster({
74-
...properties,
75-
source: clusterSource.value,
76-
}),
77-
);
78-
79-
useLayer(vectorLayer, properties);
80-
8173
provide("vectorLayer", clusterSource);
82-
provide("stylable", vectorLayer);
74+
provide("stylable", layer);
8375
8476
defineExpose({
85-
vectorLayer,
77+
vectorLayer: layer,
8678
map,
8779
});
8880
</script>

src/components/layers/OlAnimatedClusterlayer.vue

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,18 @@
55
</template>
66

77
<script setup lang="ts">
8-
import { inject, provide, watch, shallowRef } from "vue";
8+
import { provide, shallowRef, watch } from "vue";
99
import { Cluster } from "ol/source";
1010
import { easeOut } from "ol/easing";
1111
import AnimatedCluster from "ol-ext/layer/AnimatedCluster";
12-
import type Map from "ol/Map";
1312
import usePropsAsObjectProperties from "@/composables/usePropsAsObjectProperties";
1413
import useLayer from "@/composables/useLayer";
1514
import {
1615
layersCommonDefaultProps,
1716
type LayersCommonProps,
1817
} from "@/components/layers/LayersCommonProps";
1918
import type { Point } from "ol/geom";
20-
import {
21-
FEATURE_EVENTS,
22-
useOpenLayersEvents,
23-
} from "@/composables/useOpenLayersEvents";
19+
import { FEATURE_EVENTS } from "@/composables/useOpenLayersEvents";
2420
2521
// prevent warnings caused by event pass-through via useOpenLayersEvents composable
2622
defineOptions({
@@ -49,8 +45,6 @@ const props = withDefaults(
4945
},
5046
);
5147
52-
const map = inject<Map>("map");
53-
5448
const properties = usePropsAsObjectProperties(props);
5549
5650
const clusterSource = shallowRef(
@@ -60,29 +54,27 @@ const clusterSource = shallowRef(
6054
}),
6155
);
6256
63-
useOpenLayersEvents(clusterSource, FEATURE_EVENTS);
57+
const { layer, map } = useLayer(
58+
AnimatedCluster,
59+
{
60+
...props,
61+
source: clusterSource.value,
62+
},
63+
FEATURE_EVENTS,
64+
);
6465
6566
watch(
66-
() => properties.distance,
67+
() => props.distance,
6768
(newValue) => {
6869
clusterSource.value.setDistance(newValue);
6970
},
7071
);
7172
72-
const vectorLayer = shallowRef(
73-
new AnimatedCluster({
74-
...properties,
75-
source: clusterSource.value,
76-
}),
77-
);
78-
79-
useLayer(vectorLayer, properties);
80-
8173
provide("vectorLayer", clusterSource);
82-
provide("stylable", vectorLayer);
74+
provide("stylable", layer);
8375
8476
defineExpose({
85-
vectorLayer,
77+
vectorLayer: layer,
8678
map,
8779
});
8880
</script>

src/components/layers/OlHeatmapLayer.vue

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
</template>
66

77
<script setup lang="ts">
8-
import { provide, shallowRef } from "vue";
8+
import { provide } from "vue";
99
import HeatmapLayer from "ol/layer/Heatmap";
1010
import type { Extent } from "ol/extent";
11-
import usePropsAsObjectProperties from "@/composables/usePropsAsObjectProperties";
1211
import useLayer from "@/composables/useLayer";
1312
import {
1413
layersCommonDefaultProps,
@@ -36,14 +35,12 @@ const props = withDefaults(
3635
},
3736
);
3837
39-
const properties = usePropsAsObjectProperties(props);
40-
const heatmapLayer = shallowRef(new HeatmapLayer(properties));
41-
useLayer(heatmapLayer, properties);
38+
const { layer } = useLayer(HeatmapLayer, props);
4239
43-
provide("heatmapLayer", heatmapLayer);
44-
provide("stylable", heatmapLayer);
40+
provide("heatmapLayer", layer);
41+
provide("stylable", layer);
4542
4643
defineExpose({
47-
heatmapLayer,
44+
heatmapLayer: layer,
4845
});
4946
</script>

src/components/layers/OlImageLayer.vue

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
</template>
66

77
<script setup lang="ts">
8-
import { provide, shallowRef } from "vue";
8+
import { provide } from "vue";
99
import ImageLayer from "ol/layer/Image";
10-
import usePropsAsObjectProperties from "@/composables/usePropsAsObjectProperties";
1110
import useLayer from "@/composables/useLayer";
1211
import {
1312
layersCommonDefaultProps,
@@ -19,14 +18,11 @@ const props = withDefaults(
1918
layersCommonDefaultProps,
2019
);
2120
22-
const properties = usePropsAsObjectProperties(props);
21+
const { layer } = useLayer(ImageLayer, props);
2322
24-
const imageLayer = shallowRef(new ImageLayer(properties));
25-
useLayer(imageLayer, properties);
26-
27-
provide("imageLayer", imageLayer);
23+
provide("imageLayer", layer);
2824
2925
defineExpose({
30-
imageLayer,
26+
imageLayer: layer,
3127
});
3228
</script>

src/components/layers/OlTileLayer.vue

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
</template>
66

77
<script setup lang="ts">
8-
import { provide, shallowRef } from "vue";
8+
import { provide } from "vue";
99
import TileLayer from "ol/layer/Tile";
10-
import usePropsAsObjectProperties from "@/composables/usePropsAsObjectProperties";
1110
import useLayer from "@/composables/useLayer";
1211
import {
1312
layersCommonDefaultProps,
@@ -26,14 +25,11 @@ const props = withDefaults(
2625
},
2726
);
2827
29-
const properties = usePropsAsObjectProperties(props);
28+
const { layer } = useLayer(TileLayer, props);
3029
31-
const tileLayer = shallowRef(new TileLayer(properties));
32-
useLayer(tileLayer, properties);
33-
34-
provide("tileLayer", tileLayer);
30+
provide("tileLayer", layer);
3531
3632
defineExpose({
37-
tileLayer,
33+
tileLayer: layer,
3834
});
3935
</script>

src/components/layers/OlVectorImageLayer.vue

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
</template>
66

77
<script setup lang="ts">
8-
import { provide, shallowRef } from "vue";
8+
import { provide } from "vue";
99
1010
import VectorImageLayer from "ol/layer/VectorImage";
11-
import usePropsAsObjectProperties from "@/composables/usePropsAsObjectProperties";
1211
import useLayer from "@/composables/useLayer";
1312
import {
1413
layersCommonDefaultProps,
@@ -32,15 +31,12 @@ const props = withDefaults(
3231
},
3332
);
3433
35-
const properties = usePropsAsObjectProperties(props);
34+
const { layer } = useLayer(VectorImageLayer, props);
3635
37-
const vectorImageLayer = shallowRef(new VectorImageLayer(properties));
38-
useLayer(vectorImageLayer, properties);
39-
40-
provide("vectorLayer", vectorImageLayer);
41-
provide("stylable", vectorImageLayer);
36+
provide("vectorLayer", layer);
37+
provide("stylable", layer);
4238
4339
defineExpose({
44-
vectorImageLayer,
40+
vectorImageLayer: layer,
4541
});
4642
</script>

src/components/layers/OlVectorLayer.vue

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
</template>
66

77
<script setup lang="ts">
8-
import { provide, shallowRef } from "vue";
8+
import { provide } from "vue";
99
import VectorLayer from "ol/layer/Vector";
10-
import usePropsAsObjectProperties from "@/composables/usePropsAsObjectProperties";
1110
import useLayer from "@/composables/useLayer";
1211
import {
1312
layersCommonDefaultProps,
@@ -35,15 +34,12 @@ const props = withDefaults(
3534
},
3635
);
3736
38-
const properties = usePropsAsObjectProperties(props);
37+
const { layer } = useLayer(VectorLayer, props);
3938
40-
const vectorLayer = shallowRef(new VectorLayer(properties));
41-
useLayer(vectorLayer, props);
42-
43-
provide("vectorLayer", vectorLayer);
44-
provide("stylable", vectorLayer);
39+
provide("vectorLayer", layer);
40+
provide("stylable", layer);
4541
4642
defineExpose({
47-
vectorLayer,
43+
vectorLayer: layer,
4844
});
4945
</script>

src/components/layers/OlVectorTileLayer.vue

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55
</template>
66

77
<script setup lang="ts">
8-
import { provide, shallowRef } from "vue";
8+
import { provide } from "vue";
99
import VectorTileLayer, {
1010
type VectorTileRenderType,
1111
} from "ol/layer/VectorTile";
12-
import usePropsAsObjectProperties from "@/composables/usePropsAsObjectProperties";
1312
import useLayer from "@/composables/useLayer";
1413
import {
1514
layersCommonDefaultProps,
@@ -37,15 +36,12 @@ const props = withDefaults(
3736
},
3837
);
3938
40-
const properties = usePropsAsObjectProperties(props);
39+
const { layer } = useLayer(VectorTileLayer, props);
4140
42-
const vectorTileLayer = shallowRef(new VectorTileLayer(properties));
43-
useLayer(vectorTileLayer, properties);
44-
45-
provide("vectorTileLayer", vectorTileLayer);
46-
provide("stylable", vectorTileLayer);
41+
provide("vectorTileLayer", layer);
42+
provide("stylable", layer);
4743
4844
defineExpose({
49-
vectorTileLayer,
45+
vectorTileLayer: layer,
5046
});
5147
</script>

src/components/layers/OlWebglTileLayer.vue

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,18 @@
55
</template>
66

77
<script setup lang="ts">
8-
import { provide, shallowRef } from "vue";
8+
import { provide } from "vue";
99
import TileLayer, { type Options } from "ol/layer/WebGLTile";
10-
import usePropsAsObjectProperties from "@/composables/usePropsAsObjectProperties";
1110
import useLayer from "@/composables/useLayer";
1211
import { layersCommonDefaultProps } from "./LayersCommonProps";
1312
1413
const props = withDefaults(defineProps<Options>(), layersCommonDefaultProps);
1514
16-
const properties = usePropsAsObjectProperties(props);
15+
const { layer } = useLayer(TileLayer, props);
1716
18-
const tileLayer = shallowRef(new TileLayer(properties));
19-
useLayer(tileLayer, properties);
20-
21-
provide("tileLayer", tileLayer);
17+
provide("tileLayer", layer);
2218
2319
defineExpose({
24-
tileLayer,
20+
tileLayer: layer,
2521
});
2622
</script>

0 commit comments

Comments
 (0)