Add MachineRelayType and refactor relay handling for self-serve dashboard:

- Added `MachineRelayType` for defining relay types and statuses.
- Refactored relay logic into `SelfServeConnectivityRelay` for cleaner separation of concerns.
- Updated `MachineType` to include relay configurations for machine, program picker, and cleaner.
- Replaced inline relay handling in `SelfServeMachineConnectivity` with the reusable `SelfServeConnectivityRelay` module.
This commit is contained in:
Jeppe Bundgaard
2026-03-25 12:38:34 +01:00
parent 81bd4c8583
commit de28f2cd49
5 changed files with 105 additions and 78 deletions
@@ -0,0 +1,77 @@
<script lang="ts">
import {SessionUser} from "@/components/session/token/SessionUser.vue";
/**
* Get relay status
* GET /modules/self-serve/lane/relay/machine/status
* POST /modules/self-serve/lane/relay/machine/set (with lane_id + on)
*/
export const relays = {
get: {
status: {
/**
* Get machine relay status
* Example response:
* {
* "lane_id": 3,
* "relay": "MACHINE",
* "relay_id": "e4b3231cce40",
* "online": true,
* "on": true
* }
* @param laneId
* @constructor
*/
MACHINE: (laneId: number) => SessionUser.request(
"/modules/self-serve/lane/relay/machine/status",
"GET",
{
lane_id: laneId
}
),
PROGRAM_PICKER: (laneId: number) => SessionUser.request(
"/modules/self-serve/lane/relay/machine_program_picker/status",
"GET",
{
lane_id: laneId
}
),
CLEANER: (laneId: number) => SessionUser.request(
"/modules/self-serve/lane/relay/machine_cleaner/status",
"GET",
{
lane_id: laneId
}
)
}
},
set: {
MACHINE: (laneId: number, on: boolean) => SessionUser.request(
"/modules/self-serve/lane/relay/machine/set",
"POST",
{
lane_id: laneId,
on: on
}
),
PROGRAM_PICKER: (laneId: number, on: boolean) => SessionUser.request(
"/modules/self-serve/lane/relay/machine_program_picker/set",
"POST",
{
lane_id: laneId,
on: on
}
),
CLEANER: (laneId: number, on: boolean) => SessionUser.request(
"/modules/self-serve/lane/relay/machine_cleaner/set",
"POST",
{
lane_id: laneId,
on: on
}
)
}
}
export default { relays }
</script>
@@ -1,77 +1,7 @@
<script lang="ts">
import {SessionUser} from "@/components/session/token/SessionUser.vue";
import { relays } from "@/views/dashboards/superUserDashboard/selfserve/components/SelfServeConnectivityRelay.vue";
/**
* Get relay status
* GET /modules/self-serve/lane/relay/machine/status
* POST /modules/self-serve/lane/relay/machine/set (with lane_id + on)
*/
export const relays = {
get: {
status: {
/**
* Get machine relay status
* Example response:
* {
* "lane_id": 3,
* "relay": "MACHINE",
* "relay_id": "e4b3231cce40",
* "online": true,
* "on": true
* }
* @param laneId
* @constructor
*/
MACHINE: (laneId: number) => SessionUser.request(
"/modules/self-serve/lane/relay/machine/status",
"GET",
{
lane_id: laneId
}
),
PROGRAM_PICKER: (laneId: number) => SessionUser.request(
"/modules/self-serve/lane/relay/machine_program_picker/status",
"GET",
{
lane_id: laneId
}
),
CLEANER: (laneId: number) => SessionUser.request(
"/modules/self-serve/lane/relay/machine_cleaner/status",
"GET",
{
lane_id: laneId
}
)
}
},
set: {
MACHINE: (laneId: number, on: boolean) => SessionUser.request(
"/modules/self-serve/lane/relay/machine/set",
"POST",
{
lane_id: laneId,
on: on
}
),
PROGRAM_PICKER: (laneId: number, on: boolean) => SessionUser.request(
"/modules/self-serve/lane/relay/machine_program_picker/set",
"POST",
{
lane_id: laneId,
on: on
}
),
CLEANER: (laneId: number, on: boolean) => SessionUser.request(
"/modules/self-serve/lane/relay/machine_cleaner/set",
"POST",
{
lane_id: laneId,
on: on
}
)
}
}
export { relays };
export default { relays }
</script>
@@ -1,5 +1,5 @@
<script setup lang="ts">
import {defineProps, onMounted, ref} from 'vue';
import {defineProps} from 'vue';
import {BButton} from "buefy";
import { relays } from "@/views/dashboards/superUserDashboard/selfserve/components/SelfServeMachineConnectivity.vue";
import MachineType from "@/views/dashboards/superUserDashboard/selfserve/types/MachineType.vue";
@@ -9,10 +9,7 @@ defineProps<{machine: MachineType}>();
</script>
<template>
<div>
<p>Controls</p>
<!-- Get status -->
<button @click="relays.get.status.MACHINE(machine.id)">Get Status</button>
<div class="flex gap-2">
</div>
</template>
@@ -0,0 +1,18 @@
<script lang="ts">
export const relays = {
MACHINE: "MACHINE",
PROGRAM_PICKER: "PROGRAM_PICKER",
CLEANER: "CLEANER",
}
type MachineRelay = {
lane_id: number;
relay: keyof typeof relays;
relay_id: string;
online: boolean;
on: boolean;
}
export type { MachineRelay };
export default MachineRelay;
</script>
@@ -1,12 +1,17 @@
<script lang="ts">
// Machine interface
import MachineStatusType from "@/views/dashboards/superUserDashboard/selfserve/types/MachineStatusType.vue";
import MachineRelay from "@/views/dashboards/superUserDashboard/selfserve/types/MachineRelayType.vue";
type Machine = {
id: number;
name: string;
status: typeof MachineStatusType[keyof typeof MachineStatusType];
relays: {
machine: MachineRelay,
program_picker: MachineRelay,
cleaner: MachineRelay,
}
}
export type { Machine };
export default Machine;