actionUserUpdate.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { call, delay, put, select } from "redux-saga/effects";
  2. import { actionPromiseClear } from "../reducers";
  3. import { promiseWorker } from "../reducers/promiseReducer";
  4. import { actionAboutMe } from "./actionAboutMe";
  5. import { actionLogout } from "./actionLogout";
  6. import { actionUserUpsert } from "./actionUserUpsert";
  7. export const actionUserUpdate = (user) => ({ type: "USER_UPDATE", payload: user });
  8. export function* userUpdateWorker(action) {
  9. const user = action.payload || {};
  10. if (!user) {
  11. return;
  12. }
  13. yield call(promiseWorker, actionUserUpsert(user));
  14. const {
  15. promise: {
  16. userUpsert: { status },
  17. },
  18. auth: {
  19. payload: {
  20. sub: { acl },
  21. username,
  22. },
  23. },
  24. } = yield select();
  25. if (status === "FULFILLED") {
  26. if (!acl?.includes("admin") && user?.username !== username) {
  27. yield put(actionLogout());
  28. } else {
  29. yield put(actionAboutMe());
  30. }
  31. }
  32. yield delay(500);
  33. yield put(actionPromiseClear("userUpsert"));
  34. }