fix: validate bluetooth pin is 6 characters.

This commit is contained in:
Dan Ditomaso
2025-02-20 15:57:38 -05:00
parent b959a59e7b
commit 5938f91861
9 changed files with 303 additions and 44 deletions
+60 -2
View File
@@ -9,6 +9,11 @@ export interface RasterSource {
tileSize: number;
}
interface ErrorState {
field: string;
message: string;
}
interface AppState {
selectedDevice: number;
devices: {
@@ -22,11 +27,11 @@ interface AppState {
nodeNumDetails: number;
activeChat: number;
chatType: "broadcast" | "direct";
errors: ErrorState[];
setRasterSources: (sources: RasterSource[]) => void;
addRasterSource: (source: RasterSource) => void;
removeRasterSource: (index: number) => void;
setSelectedDevice: (deviceId: number) => void;
addDevice: (device: { id: number; num: number }) => void;
removeDevice: (deviceId: number) => void;
@@ -36,9 +41,18 @@ interface AppState {
setNodeNumDetails: (nodeNum: number) => void;
setActiveChat: (chat: number) => void;
setChatType: (type: "broadcast" | "direct") => void;
// Error management
hasErrors: () => boolean;
getErrorMessage: (field: string) => string | undefined;
hasFieldError: (field: string) => boolean;
addError: (field: string, message: string) => void;
removeError: (field: string) => void;
clearErrors: () => void;
setNewErrors: (newErrors: ErrorState[]) => void;
}
export const useAppStore = create<AppState>()((set) => ({
export const useAppStore = create<AppState>()((set, get) => ({
selectedDevice: 0,
devices: [],
currentPage: "messages",
@@ -49,6 +63,7 @@ export const useAppStore = create<AppState>()((set) => ({
nodeNumDetails: 0,
activeChat: Types.ChannelNumber.Primary,
chatType: "broadcast",
errors: [],
setRasterSources: (sources: RasterSource[]) => {
set(
@@ -114,4 +129,47 @@ export const useAppStore = create<AppState>()((set) => ({
set(() => ({
chatType: type,
})),
hasErrors: () => {
const state = get();
return state.errors.length > 0;
},
getErrorMessage: (field: string) => {
const state = get();
return state.errors.find((err) => err.field === field)?.message;
},
hasFieldError: (field: string) => {
const state = get();
return state.errors.some((err) => err.field === field);
},
addError: (field: string, message: string) => {
set(
produce<AppState>((draft) => {
draft.errors = [
...draft.errors.filter((e) => e.field !== field),
{ field, message },
];
}),
);
},
removeError: (field: string) => {
set(
produce<AppState>((draft) => {
draft.errors = draft.errors.filter((e) => e.field !== field);
}),
);
},
clearErrors: () => {
set(
produce<AppState>((draft) => {
draft.errors = [];
}),
);
},
setNewErrors: (newErrors: ErrorState[]) => {
set(
produce<AppState>((draft) => {
draft.errors = newErrors;
}),
);
},
}));