Newer
Older
smart-home-server / webclient-vue / src / stores / scanning.js
import { ref, computed } from "vue";
import { defineStore } from "pinia";
import { devicesApi } from "../api/modules/devices";
import { useAsyncRequest } from "../composables/useAsyncRequest";

export const useScanningStore = defineStore("scanning", () => {
  const mode = ref("setup");
  const devices = ref([]);

  const scanRequest = useAsyncRequest();

  const total = computed(() => devices.value.length);

  async function scan() {
    return scanRequest.execute(async (signal) => {
      const result =
        mode.value === "setup"
          ? await devicesApi.scanningSetup({ signal })
          : await devicesApi.scanningAll({ signal });

      if (result.ok) {
        devices.value = result.data?.data?.devices || [];
      }
      return result;
    });
  }

  function setMode(newMode) {
    mode.value = newMode;
    devices.value = [];
    scanRequest.clear();
  }

  async function setupDevice(payload) {
    return devicesApi.setupNewDevice(payload);
  }

  return {
    mode,
    devices,
    isLoading: scanRequest.isLoading,
    error: scanRequest.error,
    total,
    scan,
    setMode,
    setupDevice,
  };
});