UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

291 lines (290 loc) 14.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CheckboxControlRenderer = exports.LocationControl = exports.CityPicker = void 0; var tslib_1 = require("tslib"); var react_1 = (0, tslib_1.__importDefault)(require("react")); var Item_1 = require("./Item"); var theme_1 = require("../../theme"); var Spinner_1 = (0, tslib_1.__importDefault)(require("../../components/Spinner")); var Select_1 = (0, tslib_1.__importDefault)(require("../../components/Select")); var CityArea_1 = (0, tslib_1.__importDefault)(require("../../components/CityArea")); var helper_1 = require("../../utils/helper"); var Options_1 = require("./Options"); var locale_1 = require("../../locale"); var CityPicker = /** @class */ (function (_super) { (0, tslib_1.__extends)(CityPicker, _super); function CityPicker() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.state = { code: 0, province: '', provinceCode: 0, city: '', cityCode: 0, district: '', districtCode: 0, street: '' }; return _this; } CityPicker.prototype.componentDidMount = function () { var _this = this; this.loadDb(function () { return _this.syncIn(); }); }; CityPicker.prototype.componentDidUpdate = function (prevProps) { var _this = this; var props = this.props; if (props.value !== prevProps.value) { this.loadDb(function () { return _this.syncIn(props); }); } }; CityPicker.prototype.loadDb = function (callback) { var _this = this; if (this.state.db) { callback === null || callback === void 0 ? void 0 : callback(); return; } Promise.resolve().then(function () { return new Promise(function(resolve){require(['./CityDB'], function(ret) {resolve(tslib_1.__importStar(ret));})}); }).then(function (db) { _this.setState({ db: (0, tslib_1.__assign)((0, tslib_1.__assign)({}, db.default), { province: db.province, city: db.city, district: db.district }) }, callback); }); // require.ensure(['./CityDB'], (db: any) => // this.setState( // { // db: { // ...db.default, // province: db.province, // city: db.city, // district: db.district // } // }, // callback // ) // ); }; CityPicker.prototype.handleProvinceChange = function (option) { this.setState({ province: option.label, provinceCode: option.value, city: '', cityCode: 0, district: '', districtCode: 0, street: '', code: option.value }, this.syncOut); }; CityPicker.prototype.handleCityChange = function (option) { if (option.value % 100) { return this.handleDistrictChange(option, { cityCode: option.value }); } this.setState({ city: option.label, cityCode: option.value, district: '', districtCode: 0, street: '', code: option.value }, this.syncOut); }; CityPicker.prototype.handleDistrictChange = function (option, otherStates) { if (otherStates === void 0) { otherStates = {}; } this.setState((0, tslib_1.__assign)((0, tslib_1.__assign)({}, otherStates), { district: option.label, districtCode: option.value, street: '', code: option.value }), this.syncOut); }; CityPicker.prototype.handleStreetChange = function (e) { this.setState({ street: e.currentTarget.value }); }; CityPicker.prototype.handleStreetEnd = function () { this.syncOut(); }; CityPicker.prototype.syncIn = function (props) { var _a; if (props === void 0) { props = this.props; } var db = this.state.db; var value = props.value, delimiter = props.delimiter; if (!db) { return; } var state = { code: 0, province: '', provinceCode: 0, city: '', cityCode: 0, district: '', districtCode: 0, street: '' }; var code = (value && value.code) || (typeof value === 'number' && value) || (typeof value === 'string' && /(\d{6})/.test(value) && RegExp.$1); if (code && db[code]) { code = parseInt(code, 10); state.code = code; var provinceCode = code - (code % 10000); if (db[provinceCode]) { state.provinceCode = provinceCode; state.province = db[provinceCode]; } var cityCode = code - (code % 100); if (db[cityCode]) { state.cityCode = cityCode; state.city = db[cityCode]; } else if (~((_a = db.city[provinceCode]) === null || _a === void 0 ? void 0 : _a.indexOf(code))) { state.cityCode = code; state.city = db[code]; } if (code % 100) { state.district = db[code]; state.districtCode = code; } } else if (value) { // todo 模糊查找 } if (value && value.street) { state.street = value.street; } else if (typeof value === 'string' && ~value.indexOf(delimiter)) { state.street = value.slice(value.indexOf(delimiter) + delimiter.length); } this.setState(state); }; CityPicker.prototype.syncOut = function () { var _a = this.props, onChange = _a.onChange, allowStreet = _a.allowStreet, joinValues = _a.joinValues, extractValue = _a.extractValue, delimiter = _a.delimiter; var _b = this.state, code = _b.code, province = _b.province, city = _b.city, district = _b.district, street = _b.street; if (typeof extractValue === 'undefined' ? joinValues : extractValue) { code ? onChange(allowStreet && street ? [code, street].join(delimiter) : String(code)) : onChange(''); } else { onChange({ code: code, province: province, city: city, district: district, street: street }); } }; CityPicker.prototype.render = function () { var _a, _b; var _c = this.props, cx = _c.classnames, className = _c.className, disabled = _c.disabled, allowCity = _c.allowCity, allowDistrict = _c.allowDistrict, allowStreet = _c.allowStreet, searchable = _c.searchable, __ = _c.translate; var _d = this.state, provinceCode = _d.provinceCode, cityCode = _d.cityCode, districtCode = _d.districtCode, street = _d.street, db = _d.db; return db ? (react_1.default.createElement("div", { className: cx('CityPicker', className) }, react_1.default.createElement(Select_1.default, { searchable: searchable, disabled: disabled, options: db.province.map(function (item) { return ({ label: db[item], value: item }); }), value: provinceCode, onChange: this.handleProvinceChange }), provinceCode && allowDistrict && Array.isArray(db.district[provinceCode]) ? (react_1.default.createElement(Select_1.default, { searchable: searchable, disabled: disabled, options: db.district[provinceCode].map(function (item) { return ({ label: db[item], value: item }); }), value: districtCode, onChange: this.handleDistrictChange })) : allowCity && db.city[provinceCode] && db.city[provinceCode].length ? (react_1.default.createElement(Select_1.default, { searchable: searchable, disabled: disabled, options: db.city[provinceCode].map(function (item) { return ({ label: db[item], value: item }); }), value: cityCode, onChange: this.handleCityChange })) : null, cityCode && allowDistrict && ((_b = (_a = db.district[provinceCode]) === null || _a === void 0 ? void 0 : _a[cityCode]) === null || _b === void 0 ? void 0 : _b.length) ? (react_1.default.createElement(Select_1.default, { searchable: searchable, disabled: disabled, options: db.district[provinceCode][cityCode].map(function (item) { return ({ label: db[item], value: item }); }), value: districtCode, onChange: this.handleDistrictChange })) : null, allowStreet && provinceCode ? (react_1.default.createElement("input", { className: cx('CityPicker-input'), value: street, onChange: this.handleStreetChange, onBlur: this.handleStreetEnd, placeholder: __('City.street'), disabled: disabled })) : null)) : (react_1.default.createElement(Spinner_1.default, { show: true, size: "sm" })); }; var _a, _b, _c, _d, _e; CityPicker.defaultProps = { joinValues: true, extractValue: true, delimiter: ',', allowCity: true, allowDistrict: true, allowStreet: false }; (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_a = typeof Options_1.Option !== "undefined" && Options_1.Option) === "function" ? _a : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], CityPicker.prototype, "handleProvinceChange", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_b = typeof Options_1.Option !== "undefined" && Options_1.Option) === "function" ? _b : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], CityPicker.prototype, "handleCityChange", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_c = typeof Options_1.Option !== "undefined" && Options_1.Option) === "function" ? _c : Object, typeof (_d = typeof Partial !== "undefined" && Partial) === "function" ? _d : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], CityPicker.prototype, "handleDistrictChange", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [typeof (_e = typeof react_1.default !== "undefined" && react_1.default.ChangeEvent) === "function" ? _e : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], CityPicker.prototype, "handleStreetChange", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", []), (0, tslib_1.__metadata)("design:returntype", void 0) ], CityPicker.prototype, "handleStreetEnd", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], CityPicker.prototype, "syncIn", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", []), (0, tslib_1.__metadata)("design:returntype", void 0) ], CityPicker.prototype, "syncOut", null); return CityPicker; }(react_1.default.Component)); exports.CityPicker = CityPicker; var ThemedCity = (0, theme_1.themeable)((0, locale_1.localeable)(CityPicker)); exports.default = ThemedCity; var LocationControl = /** @class */ (function (_super) { (0, tslib_1.__extends)(LocationControl, _super); function LocationControl() { return _super !== null && _super.apply(this, arguments) || this; } LocationControl.prototype.render = function () { var _a = this.props, value = _a.value, onChange = _a.onChange, allowCity = _a.allowCity, allowDistrict = _a.allowDistrict, extractValue = _a.extractValue, joinValues = _a.joinValues, allowStreet = _a.allowStreet, disabled = _a.disabled, searchable = _a.searchable, env = _a.env, useMobileUI = _a.useMobileUI; var mobileUI = useMobileUI && (0, helper_1.isMobile)(); return mobileUI ? (react_1.default.createElement(CityArea_1.default, { value: value, popOverContainer: env && env.getModalContainer ? env.getModalContainer : undefined, onChange: onChange, allowCity: allowCity, allowDistrict: allowDistrict, extractValue: extractValue, joinValues: joinValues, allowStreet: allowStreet, disabled: disabled, useMobileUI: useMobileUI })) : (react_1.default.createElement(ThemedCity, { searchable: searchable, value: value, onChange: onChange, allowCity: allowCity, allowDistrict: allowDistrict, extractValue: extractValue, joinValues: joinValues, allowStreet: allowStreet, disabled: disabled })); }; return LocationControl; }(react_1.default.Component)); exports.LocationControl = LocationControl; var CheckboxControlRenderer = /** @class */ (function (_super) { (0, tslib_1.__extends)(CheckboxControlRenderer, _super); function CheckboxControlRenderer() { return _super !== null && _super.apply(this, arguments) || this; } CheckboxControlRenderer = (0, tslib_1.__decorate)([ (0, Item_1.FormItem)({ type: 'input-city', sizeMutable: false }) ], CheckboxControlRenderer); return CheckboxControlRenderer; }(LocationControl)); exports.CheckboxControlRenderer = CheckboxControlRenderer; //# sourceMappingURL=./renderers/Form/InputCity.js.map