UNPKG

yylib-quick-mobile

Version:

yylib-quick-mobile

132 lines (120 loc) 5.94 kB
'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;