You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.1 KiB

import { watch } from "vue-demi";
import { toBounds, toLngLat } from "../../utils";
import { Props } from "./";
export function useWatch({ props, instance }: { props: Props; instance: T.Map }) {
watch(
() => ({ center: props.center, zoom: props.zoom }),
val => {
if (!val.center || !val.zoom) return;
instance.panTo(toLngLat(val.center), val.zoom);
}
);
watch(
() => props.drag,
val => (val ? instance.enableDrag() : instance.disableDrag()),
{ immediate: true }
);
watch(
() => props.scrollWheelZoom,
val => (val ? instance.enableScrollWheelZoom() : instance.disableScrollWheelZoom()),
{ immediate: true }
);
watch(
() => props.doubleClickZoom,
val => (val ? instance.enableDoubleClickZoom() : instance.disableDoubleClickZoom()),
{ immediate: true }
);
watch(
() => props.keyboard,
val => (val ? instance.enableKeyboard() : instance.disableKeyboard()),
{ immediate: true }
);
watch(
() => props.inertia,
val => (val ? instance.enableInertia() : instance.disableInertia()),
{ immediate: true }
);
watch(
() => props.continuousZoom,
val => (val ? instance.enableContinuousZoom() : instance.disableContinuousZoom()),
{ immediate: true }
);
watch(
() => props.pinchToZoom,
val => (val ? instance.enablePinchToZoom() : instance.disablePinchToZoom()),
{ immediate: true }
);
watch(
() => props.autoResize,
val => (val ? instance.enableAutoResize() : instance.disableAutoResize()),
{ immediate: true }
);
watch(
() => props.minZoom,
val => val && instance.setMinZoom(val)
);
watch(
() => props.maxZoom,
val => val && instance.setMaxZoom(val),
{ immediate: true }
);
watch(
() => props.maxBounds,
val => val && instance.setMaxBounds(toBounds(val)),
{ immediate: true }
);
watch(
() => props.viewport,
val => val && instance.setViewport(val?.map(lnglat => toLngLat(lnglat))),
{ immediate: true }
);
watch(
() => props.mapStyle,
val => (val ? instance.setStyle(val) : instance.removeStyle()),
{ immediate: true }
);
}