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
47 lines
1.2 KiB
import {Device} from "../models/Devices";
|
|
import {deleteRequest, getRequest, postRequest, putRequest} from "./shared";
|
|
|
|
interface DeviceRepository {
|
|
fetchAll(): Promise<Device[]>
|
|
save(device: Partial<Device>): Promise<boolean>
|
|
delete(id: string): Promise<boolean>
|
|
}
|
|
|
|
export default function deviceRepo(): DeviceRepository {
|
|
switch (import.meta.env.VITE_MODE) {
|
|
case "webapp":
|
|
return defaultImpl;
|
|
case "chrome-plugin":
|
|
default:
|
|
throw new Error("Not implemented");
|
|
}
|
|
}
|
|
|
|
const defaultImpl: DeviceRepository = {
|
|
fetchAll() {
|
|
return getRequest("/devices") || null;
|
|
},
|
|
async save({id, name, connectionString}: Partial<Device>): Promise<boolean> {
|
|
try {
|
|
if (id) {
|
|
await putRequest(`/devices/${id}`, {name, connectionString});
|
|
return true;
|
|
} else if (name && connectionString) {
|
|
await postRequest("/devices", {name, connectionString});
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
},
|
|
async delete(id: string): Promise<boolean> {
|
|
try {
|
|
await deleteRequest(`/devices/${id}`);
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
},
|
|
};
|