import { apiRequest } from '../utils/request';

const api = '/DataObjApi';
export default {
  namespace: 'formList',

  state: {
    list: [],
    data: {
      list: [],
      pagination: {},
    },
  },

  effects: {
    *clear({ payload, callback }, { call, put }) {
      yield put({
        type: 'clearAll',
        payload: {},
      });
    },
    *getHead({ payload, callback }, { call, put }) {
      const response = yield call(apiRequest, '/DataColumnApi/getHeaderList', payload);
      if (!response) {
        yield put({ type: 'nom' });
        return;
      }
      if (callback) callback(response);
    },
    *tree({ payload, callback }, { call, put }) {
      const response = yield call(apiRequest,api +'/getFormDataList', payload);
      if (!response) {
        yield put({ type: 'nom' });
        return;
      }
      if (callback) callback(response);
    },
    *getAppId({ payload, callback }, { call, put }) {
      const response = yield call(apiRequest, '/UnifiedAppFormApi/getDetailByCode', payload);
      if (!response) {
        yield put({ type: 'nom' });
        return;
      }
      if (callback) callback(response);
    },
    *getBatchOptions({ payload, callback }, { call, put }) {
      const response = yield call(apiRequest, '/DataColumnApi/getBatchOptions', payload);
      if (!response) {
        yield put({ type: 'nom' });
        return;
      }
      if (callback) callback(response);
    },
    *getGroupList({ payload, callback }, { call, put }) {
      const response = yield call(apiRequest, '/DataColumnApi/getGroupList', payload);
      if (!response) {
        yield put({ type: 'nom' });
        return;
      }
      if (callback) callback(response);
    },
    *getObjDetail({ payload, callback }, { call, put }) {
      const response = yield call(apiRequest, '/DataObjApi/getDetail', payload);
      if (!response) {
        yield put({ type: 'nom' });
        return;
      }
      if (callback) callback(response);
    },
    *fetch({ payload, callback }, { call, put }) {
      const response = yield call(apiRequest, api + '/getFormDataPage', payload);
      if (!response) {
        yield put({ type: 'nom' });
        return;
      }
      yield put({
        type: 'page',
        payload: response,
      });

      if(callback){callback({
        list: response.rows,
        pagination: {
          current: response.pageNo,
          pageSize: response.pageSize,
          total: response.total,
        },
      })}
    },
    *add({ payload, callback }, { call, put }) {
      const response = yield call(apiRequest, api + '/addFormData', {
        data: JSON.stringify(payload.params),
        isAdd: payload.isAdd,
        objId: payload.objId,
      });
      if (!response) {
        yield put({ type: 'nom' });
        return;
      }
      if (callback) callback(response);
    },
    *delete({ payload, callback }, { call, put }) {
      const response = yield call(apiRequest, api + '/deleteFormData', payload);
      if (!response) {
        yield put({ type: 'nom' });
        return;
      }
      if (callback) callback(response);
    },
    *getDetail({ payload, callback }, { call, put }) {
      const response = yield call(apiRequest, api + '/getFormData', payload);
      if (!response) {
        yield put({ type: 'nom' });
        return;
      }
      if (callback) callback(response);
    },
  },
  reducers: {
    clearAll(state, action) {
      return {
        ...state,
        data: {
          list: [],
          pagination: {},
        },
      };
    },
    list(state, action) {
      return {
        ...state,
        list: action.payload,
      };
    },
    page(state, { payload }) {
      return {
        ...state,
        data: {
          list: payload.rows,
          pagination: {
            current: payload.pageNo,
            pageSize: payload.pageSize,
            total: payload.total,
          },
        },
      };
    },
    nom(state, action) {
      return { ...state };
    },
  },
};
