shradmin
Version:
A frontend Framework for building admin application, using antd and mirrorjs.
351 lines (285 loc) • 11.8 kB
JavaScript
;
exports.__esModule = true;
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _mirrorx = require('mirrorx');
var _mirrorx2 = _interopRequireDefault(_mirrorx);
var _isString = require('lodash/isString');
var _isString2 = _interopRequireDefault(_isString);
var _without = require('lodash/without');
var _without2 = _interopRequireDefault(_without);
var _isFunction = require('lodash/isFunction');
var _isFunction2 = _interopRequireDefault(_isFunction);
var _rest = require('../rest');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
var addRecords = function addRecords() {
var newRecords = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var oldRecords = arguments[1];
var newRecordsById = newRecords.reduce(function (prev, record) {
prev[record.id] = {
record: record,
fetchedAt: new Date()
};
return prev;
}, {});
return _extends({}, oldRecords, newRecordsById);
};
var handleFetchError = function handleFetchError(error) {
console.error(error);
var errorMessage = (0, _isString2.default)(error) ? error : error.message || "notification.fetch_error";
_mirrorx.actions.notification.error(errorMessage);
};
exports.default = function (model, restClient) {
_mirrorx2.default.model({
name: model,
initialState: {
list: {},
ids: [],
total: 0,
params: {
_filter: {},
_sort: null,
_order: "asc",
_page: 1,
_limit: 10
}
},
reducers: {
add: function add(state, _ref) {
var data = _ref.data,
total = _ref.total;
return _extends({}, state, {
list: addRecords(data, state.list),
total: total,
ids: data.map(function (record) {
return record.id;
})
});
},
addOne: function addOne(state, data) {
return _extends({}, state, {
list: addRecords([data], state.list)
});
},
setListParams: function setListParams(state, data) {
return _extends({}, state, {
params: _extends({}, state.params, data)
});
},
pull: function pull(state, id) {
state.ids = (0, _without2.default)(state.ids, id);
return state;
}
},
effects: {
getList: function getList(params) {
var _this = this;
return _asyncToGenerator( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var result;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_mirrorx.actions.loading.set(true);
_context.prev = 1;
_context.next = 4;
return restClient(_rest.GET_LIST, model, params);
case 4:
result = _context.sent;
_mirrorx.actions[model].add(result);
_context.next = 11;
break;
case 8:
_context.prev = 8;
_context.t0 = _context['catch'](1);
handleFetchError(_context.t0);
case 11:
_context.prev = 11;
_mirrorx.actions.loading.set(false);
return _context.finish(11);
case 14:
case 'end':
return _context.stop();
}
}
}, _callee, _this, [[1, 8, 11, 14]]);
}))();
},
getOne: function getOne(id) {
var _this2 = this;
return _asyncToGenerator( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {
var _ref2, data;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_mirrorx.actions.loading.set(true);
_context2.prev = 1;
_context2.next = 4;
return restClient(_rest.GET_ONE, model, { id: id });
case 4:
_ref2 = _context2.sent;
data = _ref2.data;
_mirrorx.actions[model].addOne(data);
return _context2.abrupt('return', data);
case 10:
_context2.prev = 10;
_context2.t0 = _context2['catch'](1);
handleFetchError(_context2.t0);
case 13:
_context2.prev = 13;
_mirrorx.actions.loading.set(false);
return _context2.finish(13);
case 16:
case 'end':
return _context2.stop();
}
}
}, _callee2, _this2, [[1, 10, 13, 16]]);
}))();
},
create: function create(_ref3) {
var _this3 = this;
var data = _ref3.data,
_ref3$redirect = _ref3.redirect,
redirect = _ref3$redirect === undefined ? "list" : _ref3$redirect;
return _asyncToGenerator( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {
var result, record, location;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_mirrorx.actions.loading.set(true);
_context3.prev = 1;
_context3.next = 4;
return restClient(_rest.CREATE, model, { data: data });
case 4:
result = _context3.sent;
_mirrorx.actions.notification.success("notification.created");
record = result.data;
location = '/' + model;
if (record) {
_mirrorx.actions[model].addOne(record);
if ((0, _isFunction2.default)(redirect)) {
location = redirect(model, record);
} else if (redirect === "show" && record.id) {
location = '/' + model + '/' + record.id + '/show';
} else if (redirect === "edit" && record.id) {
location = '/' + model + '/' + record.id;
}
}
if (redirect) {
_mirrorx.actions.routing.push(location);
}
return _context3.abrupt('return', record);
case 13:
_context3.prev = 13;
_context3.t0 = _context3['catch'](1);
handleFetchError(_context3.t0);
case 16:
_context3.prev = 16;
_mirrorx.actions.loading.set(false);
return _context3.finish(16);
case 19:
case 'end':
return _context3.stop();
}
}
}, _callee3, _this3, [[1, 13, 16, 19]]);
}))();
},
update: function update(_ref4) {
var _this4 = this;
var id = _ref4.id,
data = _ref4.data,
_ref4$redirect = _ref4.redirect,
redirect = _ref4$redirect === undefined ? "list" : _ref4$redirect;
return _asyncToGenerator( /*#__PURE__*/_regenerator2.default.mark(function _callee4() {
var result, record, location;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_mirrorx.actions.loading.set(true);
_context4.prev = 1;
_context4.next = 4;
return restClient(_rest.UPDATE, model, { id: id, data: data });
case 4:
result = _context4.sent;
_mirrorx.actions.notification.success("notification.updated");
record = result.data;
location = '/' + model;
if (record) {
_mirrorx.actions[model].addOne(record);
if ((0, _isFunction2.default)(redirect)) {
location = redirect(model, record);
} else if (redirect === "show" && record.id) {
location = '/' + model + '/' + record.id + '/show';
} else if (redirect === "edit" && record.id) {
location = '/' + model + '/' + record.id;
}
}
if (redirect) {
_mirrorx.actions.routing.push(location);
}
return _context4.abrupt('return', record);
case 13:
_context4.prev = 13;
_context4.t0 = _context4['catch'](1);
handleFetchError(_context4.t0);
case 16:
_context4.prev = 16;
_mirrorx.actions.loading.set(false);
return _context4.finish(16);
case 19:
case 'end':
return _context4.stop();
}
}
}, _callee4, _this4, [[1, 13, 16, 19]]);
}))();
},
remove: function remove(_ref5) {
var _this5 = this;
var id = _ref5.id,
_ref5$redirect = _ref5.redirect,
redirect = _ref5$redirect === undefined ? "list" : _ref5$redirect;
return _asyncToGenerator( /*#__PURE__*/_regenerator2.default.mark(function _callee5() {
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_mirrorx.actions.loading.set(true);
_context5.prev = 1;
_context5.next = 4;
return restClient(_rest.REMOVE, model, { id: id });
case 4:
_mirrorx.actions[model].pull(id);
_mirrorx.actions.notification.success('notification.deleted');
if (redirect) {
_mirrorx.actions.routing.push('/' + model);
}
_context5.next = 12;
break;
case 9:
_context5.prev = 9;
_context5.t0 = _context5['catch'](1);
handleFetchError(_context5.t0);
case 12:
_context5.prev = 12;
_mirrorx.actions.loading.set(false);
return _context5.finish(12);
case 15:
case 'end':
return _context5.stop();
}
}
}, _callee5, _this5, [[1, 9, 12, 15]]);
}))();
}
}
});
};
module.exports = exports['default'];