Solstice web interface.
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.
 
 
 
 

41 lines
1.0 KiB

import { AppDispatch } from "app/store";
import { userGetAll, userSetAll } from "modules/user/slice";
import { SocketMessage, SocketMessageMiddleware } from "modules/socket/message";
function userListRequest(): SocketMessage {
return {
variant: "UserListRequest",
fields: [],
};
}
function handleUserListResponse(dispatch: AppDispatch, outerFields: any[]) {
if (outerFields.length !== 1) {
console.log("UserListResponse has wrong number of fields:", outerFields);
return;
}
const { users } = outerFields[0];
if (users === undefined) {
console.log("UserListResponse field has wrong shape:", outerFields[0]);
return;
}
dispatch(userSetAll(users));
}
export const userSocketMessageMiddleware: SocketMessageMiddleware = {
handleMessage: (dispatch, { variant, fields }) => {
switch (variant) {
case "UserListResponse":
handleUserListResponse(dispatch, fields);
break;
}
},
handleAction: (send, action) => {
if (userGetAll.match(action)) {
send(userListRequest());
}
},
};