OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / error / error.reducer.js

77 lines · javascript ref:
import { createSlice as r, createAction as e, createSelector as o } from "@reduxjs/toolkit"
import { userErrorNotification as t } from "../notification/notification.reducer"
import { ERROR_TYPES as s, ERROR_STATE_KEY as a, ERROR_FILTER as l } from "./error.constants"
import { setLogEntry as i } from "./error.model"
export const ERROR_FILTER_INITIAL_STATE = { key: l.EMPTY, value: "" }
const n = { errors: [], filter: ERROR_FILTER_INITIAL_STATE }
export const errorSlice = r({
  name: a,
  initialState: n,
  reducers: {
    setInfo: (r, { payload: e }) => {
      i(r, e, s.INFO)
    },
    setWarning: (r, { payload: e }) => {
      i(r, e, s.WARNING)
    },
    setError: (r, { payload: e }) => {
      i(r, e, s.ERROR)
    },
    clearErrors: () => n,
    resetErrorFilter: (r) => {
      r.filter = ERROR_FILTER_INITIAL_STATE
    },
    setErrorFilter: (r, { payload: e }) => {
      r.filter = { key: e.key, value: e.value }
    },
  },
})
export const getErrorState = (r) => r[a]
export const getLastError = (r) => getErrorState(r).errors[0] || null
export const getErrors = o(
  [(r) => getErrorState(r).errors, (r) => getErrorState(r).filter],
  (r, e) => (e.key && e.value ? r.filter((r) => r[e.key] === e.value) : r),
)
export const getErrorFilter = (r) => getErrorState(r).filter
export const getLastErrorByRoomId = (r) => (e) =>
  getErrorState(e).errors.find((e) => e.roomId === r) || null
export const {
  setInfo: setInfo,
  setWarning: setWarning,
  setError: setError,
  clearErrors: clearErrors,
  setErrorFilter: setErrorFilter,
  resetErrorFilter: resetErrorFilter,
} = errorSlice.actions
export const logInfo = e("error/log-info")
export const logError = e("error/log-error", (r, e) => ({
  payload: {
    errorCode: r.code,
    message: r.message,
    stack: r.stack,
    notifyAll: e?.notifyAll,
    roomId: e?.roomId,
  },
}))
export const logWarning = e("error/log-warning", (r, e) => ({
  payload: {
    errorCode: r.code,
    message: r.message,
    stack: r.stack,
    notifyAll: e?.notifyAll,
    roomId: e?.roomId,
  },
}))
export const taskError = (r, e) => {
  const { message: o, stack: t, code: s } = e || {}
  return logError({
    message: o ? `Failed to execute "${r}" task: ${o}` : `Failed to execute "${r}"`,
    stack: t,
    code: s,
  })
}
export const taskErrorNotification = (r, e, o) =>
  t({ title: `Failed to execute "${r}" task`, message: e, stack: o })
export const getErrorInitialState = errorSlice.getInitialState
export const errorReducer = errorSlice.reducer