Skip to content

Commit

Permalink
Merge pull request #20 from PepperDash/error-box-update
Browse files Browse the repository at this point in the history
Error box update & theme saving/recall
  • Loading branch information
andrew-welker authored May 30, 2024
2 parents 565db16 + 2c65423 commit 5e59cd1
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/lib/shared/hooks/interfaces/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@ export * from "./useITransport";
export * from "./useMobileControlTouchpanelController";
export * from "./useTwoWayDisplayBase";
export * from "./useIRunDefaultPresentRoute";
export * from "./useITheme";
22 changes: 22 additions & 0 deletions src/lib/shared/hooks/interfaces/useITheme.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { useGetDevice } from "src/lib";
import { MobileControlTouchpanelState } from "src/lib/types/state/state/MobileControlTouchpanelState";
import { useWebsocketContext } from "src/lib/utils";

export function useITheme(touchpanelKey: string):IThemeReturn {
const { sendMessage } = useWebsocketContext();
const tpState = useGetDevice<MobileControlTouchpanelState>(touchpanelKey);

const saveTheme = (theme: string) => {
sendMessage(`/device/${touchpanelKey}/saveTheme`, { value: theme });
}

return {
currentTheme: tpState?.theme,
saveTheme,
}
}

interface IThemeReturn {
currentTheme?: string;
saveTheme: (theme: string) => void;
}
22 changes: 21 additions & 1 deletion src/lib/shared/layout/ErrorBox.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,23 @@
import { useNavigate } from "react-router-dom";
import { useState } from "react";
import { useNavigate, useRouteError, isRouteErrorResponse } from "react-router-dom";

export const ErrorBox = () => {
const [showError, setShowError] = useState(false);
const navigate = useNavigate();
const error = useRouteError();

let errorMessage: string;

if (isRouteErrorResponse(error)) {
errorMessage = error.statusText;
} else if (error instanceof Error) {
errorMessage = error.message;
} else if (typeof error === 'string') {
errorMessage = error;
} else {
console.error(error);
errorMessage = 'Unknown error';
}

return (
<div className="d-flex flex-column align-items-center gap-5">
Expand All @@ -13,6 +29,10 @@ export const ErrorBox = () => {
<button className="btn btn-primary p-2" onClick={() => navigate(-1)}>
Go Back
</button>
<button className="btn btn-primary p-2" onClick={() => setShowError(!showError)}>
{showError ? 'Hide error message' : 'Show error message'}
</button>
{showError && <p>{errorMessage}</p>}
</div>
);
};
5 changes: 5 additions & 0 deletions src/lib/store/runtimeConfig/runtimeConfig.slice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ const initialState: RuntimeConfigState = {
disconnectionMessage: '',
token: '',
currentRoomKey: '',
touchpanelKey: '',
roomData: {
clientId: '',
roomKey: '',
Expand Down Expand Up @@ -57,6 +58,9 @@ const runtimeConfigSlice = createSlice({
state.roomData.userCode = action.payload.userCode;
state.roomData.qrUrl = action.payload.qrUrl;
},
setTouchpanelKey(state, action: PayloadAction<string>) {
state.touchpanelKey = action.payload;
}
}
})

Expand All @@ -71,6 +75,7 @@ export interface RuntimeConfigState {
token: string;
roomData: RoomData;
currentRoomKey: string;
touchpanelKey: string;
}

export interface UserCode {
Expand Down
6 changes: 5 additions & 1 deletion src/lib/store/runtimeConfig/runtimeSelectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,8 @@ export const useSystemUuid = () => useAppSelector((state) => state.runtimeConfig

export const useUserCode = () => useAppSelector((state) => state.runtimeConfig.roomData.userCode);

export const useServerIsRunningOnProcessorHardware = () => useAppSelector((state) => state.runtimeConfig.serverIsRunningOnProcessorHardware);
export const useServerIsRunningOnProcessorHardware = () => useAppSelector((state) => state.runtimeConfig.serverIsRunningOnProcessorHardware);

export const useTouchpanelKey = () => useAppSelector((state) => state.runtimeConfig.touchpanelKey);

export const useIsTouchpanel = () => useAppSelector((state) => state.runtimeConfig.touchpanelKey !== '');
6 changes: 5 additions & 1 deletion src/lib/types/state/state/MobileControlTouchpanelState.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { DeviceState } from './DeviceState';

export interface MobileControlTouchpanelState extends DeviceState, ITswAppControlMessengerState, ITswZoomControlMessengerState {
export interface MobileControlTouchpanelState extends DeviceState, ITswAppControlMessengerState, ITswZoomControlMessengerState, IThemeMessengerState {

}

Expand All @@ -11,4 +11,8 @@ interface ITswAppControlMessengerState {
interface ITswZoomControlMessengerState {
inCall?: boolean;
incomingCall?: boolean;
}

interface IThemeMessengerState {
theme?: string;
}
9 changes: 8 additions & 1 deletion src/lib/utils/WebsocketProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,14 @@ const WebsocketProvider = ({ children }: { children: ReactNode }) => {
return;
}
if (message.type.startsWith("/system/")) {
switch (message.type) {
switch (message.type) {
case "/system/touchpanelKey":
store.dispatch(
runtimeConfigActions.setTouchpanelKey(
message.content as string
)
);
break;
case "/system/roomKey":
store.dispatch(
runtimeConfigActions.setCurrentRoomKey(
Expand Down

0 comments on commit 5e59cd1

Please sign in to comment.