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.

47 lines
1.2 KiB

2 years ago
  1. import {Device} from "../models/Devices";
  2. import {deleteRequest, getRequest, postRequest, putRequest} from "./shared";
  3. interface DeviceRepository {
  4. fetchAll(): Promise<Device[]>
  5. save(device: Partial<Device>): Promise<boolean>
  6. delete(id: string): Promise<boolean>
  7. }
  8. export default function deviceRepo(): DeviceRepository {
  9. switch (import.meta.env.VITE_MODE) {
  10. case "webapp":
  11. return defaultImpl;
  12. case "chrome-plugin":
  13. default:
  14. throw new Error("Not implemented");
  15. }
  16. }
  17. const defaultImpl: DeviceRepository = {
  18. fetchAll() {
  19. return getRequest("/devices") || null;
  20. },
  21. async save({id, name, connectionString}: Partial<Device>): Promise<boolean> {
  22. try {
  23. if (id) {
  24. await putRequest(`/devices/${id}`, {name, connectionString});
  25. return true;
  26. } else if (name && connectionString) {
  27. await postRequest("/devices", {name, connectionString});
  28. return true;
  29. }
  30. return false;
  31. } catch (e) {
  32. return false;
  33. }
  34. },
  35. async delete(id: string): Promise<boolean> {
  36. try {
  37. await deleteRequest(`/devices/${id}`);
  38. return true;
  39. } catch (e) {
  40. return false;
  41. }
  42. },
  43. };