Newer
Older
smart-home-server / webclient-vue / src / api / modules / devices.js
@Eugene Sukhodolskiy Eugene Sukhodolskiy on 25 Apr 859 bytes Add Vue devices list page
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);
  },
};