yylib-quick-mobile
Version:
yylib-quick-mobile
132 lines (120 loc) • 5.94 kB
JavaScript
'use strict';
var React = require('react');
var _ = require('lodash');
var ResourceParser = require('../templates/resource/index');
var DataUtil = require('../../utils/DataUtil');
var _require = require('yylib-ui'),
YYSpin = _require.YYSpin;
var _require2 = require('../../common/RestUrl'),
MODULE_URL = _require2.MODULE_URL;
var CACHE_KEY = "YYCreateModel_";
var YYCreateModel = React.createClass({
displayName: 'YYCreateModel',
getDefaultProps: function getDefaultProps() {
return {
appCode: null,
resourceCode: null,
generator: null,
enableCache: false,
serverUrl: MODULE_URL.GET_RESOURCE_DATA,
isView: false,
uiResource: null
};
},
getInitialState: function getInitialState() {
return {
appCode: this.props.appCode,
resourceCode: this.props.resourceCode,
generator: this.props.generator
};
},
componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
if ('appCode' in nextProps && 'resourceCode' in nextProps && 'generator' in nextProps) {
if (this.props.appCode !== nextProps.appCode || this.props.resourceCode !== nextProps.resourceCode || this.props.generator !== nextProps.generator) {
this.refreshPage(nextProps.appCode, nextProps.resourceCode, nextProps.generator, null, null);
}
}
if ('location' in nextProps) {
var query = this.props.location ? this.props.location.query : {};
var nextQuery = nextProps.location ? nextProps.location.query : {};
if (query.appCode !== nextQuery.appCode || query.resourceCode !== nextQuery.resourceCode || query.generator !== nextQuery.generator) {
this.refreshPage(nextProps.appCode, nextProps.resourceCode, nextProps.generator, nextProps.location, null);
}
}
if ('routeParams' in nextProps) {
var query = this.props.routeParams ? this.props.routeParams : {};
var nextQuery = nextProps.routeParams ? nextProps.routeParams : {};
if (query.appCode !== nextQuery.appCode || query.resourceCode !== nextQuery.resourceCode || query.generator !== nextQuery.generator) {
this.refreshPage(nextProps.appCode, nextProps.resourceCode, nextProps.generator, null, nextProps.routeParams);
}
}
if ('uiResource' in nextProps) {
this.refreshPage(nextProps.appCode, nextProps.resourceCode, nextProps.generator, nextProps.location, nextProps.routeParams);
}
},
refreshPage: function refreshPage(appCode, resourceCode, generator, location, routeParams) {
var query = location ? location.query : {};
if (routeParams) query = routeParams;
var _appCode = appCode ? appCode : query.appCode;
var _resourceCode = resourceCode ? resourceCode : query.resourceCode;
var _generator = generator ? generator : query.generator;
this.setState({ appCode: _appCode, resourceCode: _resourceCode, generator: _generator });
this._loadMetaData(_appCode, _resourceCode);
},
_loadMetaData: function _loadMetaData(appCode, resourceCode) {
var ajax = window.YYUtils.Ajax;
var self = this;
if (!appCode || !resourceCode) return;
var _props2 = this.props,
serverUrl = _props2.serverUrl,
enableCache = _props2.enableCache,
uiResource = _props2.uiResource;
var metaData = enableCache === false ? null : DataUtil.getCache(CACHE_KEY + appCode + "_" + resourceCode);
if (uiResource) {
self.setState({ uiResource: uiResource });
} else if (metaData) {
self.setState({ uiResource: _.cloneDeep(metaData) });
} else {
var url = ajax.fillUrlParams(serverUrl, { appCode: appCode, resourceCode: resourceCode });
ajax.getJSON(url, function (result) {
var data = null;
if (result.success && result.backData && result.backData.data) {
data = JSON.parse(result.backData.data);
}
self.setState({ uiResource: _.isEmpty(data) ? null : data });
DataUtil.setCache(CACHE_KEY + appCode + "_" + resourceCode, _.isEmpty(data) ? null : _.cloneDeep(data));
});
}
},
componentDidMount: function componentDidMount() {
var _props3 = this.props,
appCode = _props3.appCode,
resourceCode = _props3.resourceCode,
generator = _props3.generator,
location = _props3.location,
routeParams = _props3.routeParams;
this.refreshPage(appCode, resourceCode, generator, location, routeParams);
},
render: function render() {
var _props4 = this.props,
router = _props4.router,
location = _props4.location,
params = _props4.params,
route = _props4.route,
routeParams = _props4.routeParams,
routes = _props4.routes;
var _props = { router: router, location: location, params: params, route: route, routeParams: routeParams, routes: routes };
_props.appCode = this.state.appCode;
_props.resourceCode = this.state.resourceCode;
_props.generator = this.state.generator;
_props.uiResource = this.state.uiResource;
_props.isView = this.props.isView;
if (this.state.uiResource !== undefined) {
var component = _props.generator ? ResourceParser[_props.generator] : null;
return component ? React.createElement(component, _props) : null;
} else {
return React.createElement(YYSpin, { style: { height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' } });
}
}
});
module.exports = YYCreateModel;