Skip to content

Commit

Permalink
feat(ui): Add button to trigger dock auto empty manually (#1087)
Browse files Browse the repository at this point in the history
  • Loading branch information
ccoors authored Sep 16, 2021
1 parent 8736f7f commit fa2def7
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class MockAutoEmptyDockManualTriggerCapability extends AutoEmptyDockManualTrigge
* @returns {Promise<void>}
*/
async triggerAutoEmpty() {
Logger.info("Auto Empty Dock Auto Empty triggered");
Logger.info("Auto Empty Dock Auto Empty triggered manually");
}
}

Expand Down
6 changes: 6 additions & 0 deletions frontend/src/api/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,12 @@ export const sendLocateCommand = async (): Promise<void> => {
});
};

export const sendAutoEmptyDockManualTriggerCommand = async (): Promise<void> => {
await valetudoAPI.put<void>(`/robot/capabilities/${Capability.AutoEmptyDockManualTrigger}`, {
action: "trigger",
});
};

export const fetchRobotInformation = async (): Promise<RobotInformation> => {
return valetudoAPI.get<RobotInformation>("/robot").then(({data}) => {
return data;
Expand Down
7 changes: 7 additions & 0 deletions frontend/src/api/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import {
fetchValetudoInformation,
fetchZonePresets,
fetchZoneProperties,
sendAutoEmptyDockManualTriggerCommand,
sendBasicControlCommand,
sendCleanSegmentsCommand,
sendCleanTemporaryZonesCommand,
Expand Down Expand Up @@ -369,6 +370,12 @@ export const useLocateMutation = () => {
return useMutation(sendLocateCommand, { onError });
};

export const useAutoEmptyDockManualTriggerMutation = () => {
const onError = useOnCommandError(Capability.AutoEmptyDockManualTrigger);

return useMutation(sendAutoEmptyDockManualTriggerCommand, { onError });
};

export const useRobotInformationQuery = () => {
return useQuery(CacheKey.RobotInformation, fetchRobotInformation, {
staleTime: Infinity,
Expand Down
1 change: 1 addition & 0 deletions frontend/src/api/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export enum Capability {
AutoEmptyDockManualTrigger = "AutoEmptyDockManualTriggerCapability",
BasicControl = "BasicControlCapability",
CarpetModeControl = "CarpetModeControlCapability",
CombinedVirtualRestrictions = "CombinedVirtualRestrictionsCapability",
Expand Down
36 changes: 29 additions & 7 deletions frontend/src/controls/BasicControls.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
BasicControlCommand,
Capability,
StatusState,
useAutoEmptyDockManualTriggerMutation,
useBasicControlMutation,
useLocateMutation,
useRobotStatusQuery,
Expand All @@ -21,6 +22,7 @@ import {
Pause as PauseIcon,
PlayArrow as StartIcon,
Stop as StopIcon,
RestoreFromTrash as EmptyIcon,
SvgIconComponent,
} from "@material-ui/icons";
import { useCapabilitiesSupported } from "../CapabilitiesProvider";
Expand All @@ -36,7 +38,7 @@ const StartStates: StatusState["value"][] = ["idle", "docked", "paused"];
const PauseStates: StatusState["value"][] = ["cleaning", "returning", "moving"];

interface CommandButton {
command: BasicControlCommand | "locate";
command: BasicControlCommand | "locate" | "trigger_empty";
enabled: boolean;
label: string;
Icon: SvgIconComponent;
Expand All @@ -53,15 +55,26 @@ const BasicControls = (): JSX.Element => {
mutate: locate,
isLoading: locateIsExecuting
} = useLocateMutation();
const isLoading = basicControlIsExecuting || locateIsExecuting;
const [triggerEmptySupported] = useCapabilitiesSupported(Capability.AutoEmptyDockManualTrigger);
const {
mutate: triggerDockEmpty,
isLoading: emptyIsExecuting,
} = useAutoEmptyDockManualTriggerMutation();

const isLoading = basicControlIsExecuting || locateIsExecuting || emptyIsExecuting;

const sendCommand = (command: BasicControlCommand | "locate") => {
const sendCommand = (command: BasicControlCommand | "locate" | "trigger_empty") => {
return () => {
if (command === "locate") {
locate();
return;
switch (command) {
case "locate":
locate();
break;
case "trigger_empty":
triggerDockEmpty();
break;
default:
executeBasicControlCommand(command);
}
executeBasicControlCommand(command);
};
};

Expand Down Expand Up @@ -113,6 +126,15 @@ const BasicControls = (): JSX.Element => {
});
}

if (triggerEmptySupported) {
buttons.push({
command: "trigger_empty",
enabled: state === "docked",
label: "Empty",
Icon: EmptyIcon,
});
}

return (
<Paper>
<Box p={1}>
Expand Down

0 comments on commit fa2def7

Please sign in to comment.