cyb/src/redux/features/signer.ts

import { StdFee } from '@cosmjs/launchpad';
import { EncodeObject } from '@cosmjs/proto-signing';

import { PayloadAction, createSlice } from '@reduxjs/toolkit';
import { localStorageKeys } from 'src/constants/localStorageKeys';

type ResolveType = (value: any) => void;
type RejectType = (reason?: any) => void;

type InitialState = {
  memo: string;
  fee?: number | 'auto' | StdFee;
  reject?: RejectType;
  resolve?: ResolveType;
  confirmation: boolean;
  messages?: EncodeObject[];
};
// FIXME: remove this logic after switching to redux-persist
let confirmation = false;
try {
  confirmation = JSON.parse(
    localStorage.getItem(localStorageKeys.signer.confirmation) || 'false'
  );
} catch (error) {
  console.error(
    `[Signer] failed to parse ${localStorageKeys.signer.confirmation}`,
    error
  );
}

const initialState: InitialState = {
  memo: '',
  confirmation,
};

const signerSlice = createSlice({
  name: 'signer',
  initialState,
  reducers: {
    shareSignerPromise(
      state,
      { payload }: PayloadAction<{ resolve: ResolveType; reject: RejectType }>
    ) {
      state.resolve = payload.resolve;
      state.reject = payload.reject;
    },
    resetSignerState() {
      return { ...initialState };
    },
    updateMemo(state, { payload }: PayloadAction<string>) {
      state.memo = payload;
    },
    setFee(state, { payload }: PayloadAction<number | 'auto' | StdFee>) {
      state.fee = payload as any;
    },
    setConfirmation(state, { payload }: PayloadAction<boolean>) {
      state.confirmation = payload;
    },
    setMessages(state, { payload }: PayloadAction<EncodeObject[]>) {
      state.messages = payload;
    },
  },
});

export const {
  setFee,
  updateMemo,
  setMessages,
  setConfirmation,
  resetSignerState,
  shareSignerPromise,
} = signerSlice.actions;

export default signerSlice.reducer;

Neighbours