model.ts 918 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
import { queryCurrent } from './service';
import { Dispatch } from 'redux';
import { CurrentUser } from './data';

export interface ModalState {
  currentUser: CurrentUser;
}

type callType<T, A extends any[], R> = (thisArg?: T, ...args: A) => R;
Function.call;
export default {
  namespace: 'BLOCK_NAME_CAMEL_CASE',

  state: {
    currentUser: {},
  },

  effects: {
    *fetchCurrent(
      _: ModalState,
      {
        call,
        put,
      }: {
        call: callType<Function, [], Promise<any>>;
        put: Dispatch;
      }
    ) {
      const response = yield call(queryCurrent);
      yield put({
        type: 'saveCurrentUser',
        payload: response,
      });
    },
  },

  reducers: {
    saveCurrentUser(
      state: ModalState,
      action: {
        payload: CurrentUser;
      }
    ) {
      return {
        ...state,
        currentUser: action.payload || {},
      };
    },
  },
};