Newer
Older
smart-home-server / webclient-vue / src / api / modules / devices.js
@Eugene Sukhodolskiy Eugene Sukhodolskiy 1 day ago 1 KB Add script detail pages with scope grouping
import { apiGet, apiPost } from "../client";
import { unifyDeviceFields } from "../mappers";

function safeId(id) {
  return encodeURIComponent(String(id));
}

function mapDevicesResponse(result) {
  if (!result.ok) {
    return result;
  }

  const devices = result.data?.data?.devices || [];

  return {
    ...result,
    data: {
      ...result.data,
      data: {
        ...result.data?.data,
        devices: devices.map(unifyDeviceFields),
      },
    },
  };
}

export const devicesApi = {
  async list() {
    return mapDevicesResponse(await apiGet("/api/v1/devices/list"));
  },

  status(id, options) {
    return apiGet(`/api/v1/devices/id/${safeId(id)}/status`, options);
  },

  reboot(id) {
    return apiGet(`/api/v1/devices/id/${safeId(id)}/reboot`);
  },

  action(payload) {
    return apiPost("/api/v1/devices/action", payload);
  },

  scanningSetup(options) {
    return apiGet("/api/v1/devices/scanning/setup", options);
  },

  scanningAll(options) {
    return apiGet("/api/v1/devices/scanning/all", options);
  },

  setupNewDevice(payload) {
    return apiPost("/api/v1/devices/setup/new-device", payload);
  },
};