Commit 16c02520 authored by Michael Underwood's avatar Michael Underwood
Browse files

Convert utils to TS, add ts-debounce

parent d1a42f21
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@
    "lint-staged": "^10.4.0",
    "npm-run-all": "^4.1.5",
    "prettier": "^2.7.1",
    "ts-debounce": "^4.0.0",
    "typescript": "^4.9.5",
    "vite": "^4.1.1",
    "vitepress": "^0.6.0",
+9 −13
Original line number Diff line number Diff line
<script lang="ts">
import type L from "leaflet";
import { debounce } from "ts-debounce";
import {
  computed,
  defineComponent,
@@ -16,7 +17,7 @@ import {
import {
  remapEvents,
  propsBinder,
  debounce,
  bindEventHandlers,
  resetWebpackIcon,
  provideLeafletWrapper,
  updateLeafletWrapper,
@@ -210,8 +211,8 @@ export default defineComponent({
      return result;
    });

    const eventHandlers = {
      moveEndHandler: debounce(() => {
    const eventHandlers: L.LeafletEventHandlerFnMap = {
      moveend: debounce((_ev: L.LeafletEvent) => {
        if (!blueprint.leafletRef) return;

        /**
@@ -231,14 +232,14 @@ export default defineComponent({
         */
        context.emit("update:bounds", blueprint.leafletRef.getBounds());
      }),
      overlayAddHandler(e) {
        const layer = blueprint.layersInControl.find((l) => l.name === e.name);
      overlayadd(ev) {
        const layer = blueprint.layersInControl.find((l) => l.name === ev.name);
        if (layer) {
          layer.updateVisibleProp(true);
        }
      },
      overlayRemoveHandler(e) {
        const layer = blueprint.layersInControl.find((l) => l.name === e.name);
      overlayremove(ev) {
        const layer = blueprint.layersInControl.find((l) => l.name === ev.name);
        if (layer) {
          layer.updateVisibleProp(false);
        }
@@ -385,12 +386,7 @@ export default defineComponent({
      propsBinder(methods, blueprint.leafletRef, props);
      const listeners: any = remapEvents(context.attrs); // TODO: proper typing

      blueprint.leafletRef.on("moveend", eventHandlers.moveEndHandler);
      blueprint.leafletRef.on("overlayadd", eventHandlers.overlayAddHandler);
      blueprint.leafletRef.on(
        "overlayremove",
        eventHandlers.overlayRemoveHandler
      );
      bindEventHandlers(blueprint.leafletRef, eventHandlers);
      DomEvent.on(blueprint.leafletRef.getContainer(), listeners);
      blueprint.ready = true;
      nextTick(() => context.emit("ready", blueprint.leafletRef));
+11 −23
Original line number Diff line number Diff line
import { watch, ref, provide } from "vue";
import type L from "leaflet";

export const debounce = (fn, time = 100) => {
  let timeout;

  const debounced = function (...args) {
    const context = this;
    if (timeout) {
      clearTimeout(timeout);
    }
    timeout = setTimeout(() => {
      fn.apply(context, args);
      timeout = null;
    }, time);
  };

  debounced.cancel = function () {
    if (timeout) {
      clearTimeout(timeout);
export const bindEventHandlers = (
  leafletObject: L.Evented,
  eventHandlers: L.LeafletEventHandlerFnMap
) => {
  for (const eventName of Object.keys(eventHandlers)) {
    leafletObject.on(eventName, eventHandlers[eventName]);
  }
};

  return debounced;
};

export const cancelDebounces = function (handlerMethods) {
  for (const handler of Object.values(handlerMethods)) {
export const cancelDebounces = (handlerMethods: { [key: string]: any }) => {
  for (const name of Object.keys(handlerMethods)) {
    const handler = handlerMethods[name];
    handler && isFunction(handler.cancel) && handler.cancel();
  }
};
+5 −0
Original line number Diff line number Diff line
@@ -3810,6 +3810,11 @@ toidentifier@1.0.1:
  resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
  integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==

ts-debounce@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/ts-debounce/-/ts-debounce-4.0.0.tgz#33440ef64fab53793c3d546a8ca6ae539ec15841"
  integrity sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==

tslib@^1.8.1:
  version "1.14.1"
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"