├── .gitignore ├── .idea ├── encodings.xml ├── jsLibraryMappings.xml └── libraries │ └── react_cityPicker_node_modules.xml ├── example ├── app.js └── index.html ├── README.md ├── src ├── letterPrompt.js ├── cityList.js ├── provinceList.js ├── navBar.js ├── cityPicker.js └── cities.js ├── webpack.config.js ├── package.json ├── css └── style.css └── lib ├── letterPrompt.js ├── cities.js ├── cityList.js ├── provinceList.js ├── navBar.js └── cityPicker.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug* 3 | .idea/ 4 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /example/app.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/21. 3 | */ 4 | import React from "react"; 5 | import ReactDOM from "react-dom"; 6 | 7 | import CityPicker from "../lib/cityPicker"; 8 | 9 | ReactDOM.render( 10 | , 11 | document.getElementById("picker-box") 12 | ); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-cityPicker 2 | 3 | ## Install 4 | 5 | `$ npm install react-citypicker --save` 6 | 7 | ## Usage 8 | 9 | ``` 10 | import CityPicker from "react-citypicker"; 11 | 12 | ReactDOM.render( 13 | , 14 | container 15 | ) 16 | ``` 17 | 18 | ## License 19 | 20 | MIT 21 | -------------------------------------------------------------------------------- /.idea/jsLibraryMappings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/letterPrompt.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/21. 3 | */ 4 | import React from "react"; 5 | 6 | class LetterPrompt extends React.Component { 7 | render () { 8 | return ( 9 |
10 | {this.props.letter} 11 |
12 | ) 13 | } 14 | } 15 | 16 | export default LetterPrompt; -------------------------------------------------------------------------------- /.idea/libraries/react_cityPicker_node_modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var webpack = require('webpack'); 2 | 3 | module.exports = { 4 | entry: [ 5 | './example/app.js' // Your appʼs entry point 6 | ], 7 | output: { 8 | path: __dirname + "/example/", 9 | filename: 'bundle.js', 10 | publicPath: '/js/' 11 | }, 12 | module: { 13 | loaders: [ 14 | { 15 | test: /\.css$/, 16 | loader: "style!css" 17 | }, 18 | { 19 | test: /(\.jsx|\.js)$/, 20 | loaders: ['babel?presets[]=es2015&presets[]=react'], 21 | exclude: /node_modules/ 22 | } 23 | ] 24 | } 25 | //plugins: plugins 26 | }; -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | city picker 11 | 12 | 13 |
14 | 15 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /src/cityList.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/16. 3 | */ 4 | import React from "react"; 5 | class CityList extends React.Component { 6 | handleClick (city) { 7 | this.props.handleCityClick(city); 8 | } 9 | 10 | shouldComponentUpdate (nextProps, nextState) { 11 | return this.props.cityShow !== nextProps.cityShow; 12 | } 13 | 14 | render () { 15 | let {city, pro, cityShow} = this.props; 16 | let cityRows = []; 17 | city && city.forEach((city, i) => { 18 | cityRows.push(
  • {city}
  • ); 19 | }); 20 | 21 | let style = { 22 | display: cityShow ? "block" : "none" 23 | }; 24 | 25 | return ( 26 | 29 | ) 30 | } 31 | } 32 | 33 | export default CityList; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-citypicker", 3 | "version": "1.0.1", 4 | "description": "City Picker Component for React", 5 | "main": "lib/cityPicker.js", 6 | "dependencies": { 7 | "babel": "^6.3.13", 8 | "babel-core": "^6.3.15", 9 | "babel-loader": "^6.2.0", 10 | "babel-preset-es2015": "^6.3.13", 11 | "babel-preset-react": "^6.3.13", 12 | "css-loader": "^0.23.0", 13 | "react": "^0.14.3", 14 | "react-addons-create-fragment": "^0.14.3", 15 | "react-dom": "^0.14.3", 16 | "style-loader": "^0.13.0", 17 | "webpack": "^1.12.9" 18 | }, 19 | "devDependencies": {}, 20 | "scripts": { 21 | "test": "echo \"Error: no test specified\" && exit 1", 22 | "build": "webpack --progress --colors --watch", 23 | "watch": "webpack-dev-server --hot --progress --colors", 24 | "dist": "NODE_ENV=production webpack --progress --colors" 25 | }, 26 | "repository": { 27 | "type": "git", 28 | "url": "git+https://github.com/lwzhang/react-cityPicker.git" 29 | }, 30 | "keywords": [ 31 | "cityPicker", 32 | "react-component" 33 | ], 34 | "author": "zhanglw", 35 | "license": "MIT", 36 | "bugs": { 37 | "url": "https://github.com/lwzhang/react-cityPicker/issues" 38 | }, 39 | "homepage": "https://github.com/lwzhang/react-cityPicker#readme" 40 | } 41 | -------------------------------------------------------------------------------- /src/provinceList.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/16. 3 | */ 4 | import React from "react"; 5 | 6 | class ProvinceList extends React.Component { 7 | handleClick (city, pro) { 8 | this.props.handleProClick(city, pro); 9 | } 10 | 11 | shouldComponentUpdate (nextProps, nextState) { 12 | return this.props.proShow !== nextProps.proShow; 13 | } 14 | 15 | render () { 16 | let cities = this.props.cities; 17 | let rows = []; 18 | for (let letterKey in cities) { 19 | if (cities.hasOwnProperty(letterKey)) { 20 | let pros = cities[letterKey]; 21 | rows.push( 22 |
    23 |
    {letterKey}
    24 | {(() => { 25 | let proRows = []; 26 | for (let pro in pros) { 27 | if (pros.hasOwnProperty(pro)) { 28 | proRows.push(
    {pro}
    ); 29 | } 30 | } 31 | return proRows; 32 | })()} 33 |
    34 | ); 35 | } 36 | } 37 | 38 | let style = { 39 | display: this.props.proShow ? "block" : "none" 40 | }; 41 | 42 | return ( 43 |
    44 | {rows} 45 |
    46 | ) 47 | } 48 | } 49 | 50 | export default ProvinceList; -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | dl, dt, dd, ul { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | 6 | ul { 7 | list-style: none; 8 | } 9 | 10 | a { 11 | text-decoration: none; 12 | } 13 | 14 | .picker-box { 15 | /*position: fixed;*/ 16 | /*top: 0;*/ 17 | /*left: 0;*/ 18 | /*bottom: 0;*/ 19 | /*background-color: #fff;*/ 20 | /*width: 100%;*/ 21 | /*overflow: auto;*/ 22 | -webkit-user-select: none; 23 | } 24 | 25 | /*::-webkit-scrollbar {*/ 26 | /*width: 0;*/ 27 | /*}*/ 28 | 29 | .picker-box dt { 30 | background-color: #dbdbdb; 31 | padding: 5px 20px; 32 | } 33 | 34 | .picker-box dd { 35 | padding: 8px 20px; 36 | border-bottom: 1px solid #dbdbdb; 37 | } 38 | 39 | .pro-picker, .city-picker { 40 | position: fixed; 41 | top: 0; 42 | left: 0; 43 | bottom: 0; 44 | background-color: #fff; 45 | overflow: auto; 46 | width: 100%; 47 | } 48 | 49 | .city-picker li { 50 | padding: 10px 20px; 51 | border-bottom: 1px solid #dbdbdb; 52 | } 53 | 54 | .navbar { 55 | position: fixed; 56 | top: 50%; 57 | right: 0; 58 | width: 20px; 59 | -webkit-transform: translate(0, -50%); 60 | transform: translate(0, -50%); 61 | border-radius: 5px; 62 | } 63 | 64 | .navbar a { 65 | display: block; 66 | text-align: center; 67 | color: gray; 68 | } 69 | 70 | .navbar.active { 71 | background-color: grey; 72 | } 73 | 74 | .navbar.active a { 75 | color: #fff; 76 | } 77 | 78 | .picker-box .prompt { 79 | display: block; 80 | width: 40px; 81 | height: 40px; 82 | line-height: 40px; 83 | font-size: 18px; 84 | border-radius: 50%; 85 | background-color: gray; 86 | color: #fff; 87 | text-align: center; 88 | position: fixed; 89 | top: 50%; 90 | left: 50%; 91 | -webkit-transform: translate(-50%, -50%); 92 | transform: translate(-50%, -50%); 93 | } -------------------------------------------------------------------------------- /src/navBar.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/21. 3 | */ 4 | import React from "react"; 5 | 6 | class NavBar extends React.Component { 7 | constructor () { 8 | super(); 9 | this.state = {active: false}; 10 | } 11 | 12 | shouldComponentUpdate (nextProps, nextState) { 13 | return this.props.proShow !== nextProps.proShow || this.state.active !== nextState.active; 14 | } 15 | 16 | handleTouchStart (e) { 17 | this.setState({active: true}); 18 | 19 | this.props.letterChange(e.target.innerHTML); 20 | } 21 | 22 | handleTouchMove (e) { 23 | e.preventDefault(); 24 | 25 | let navBar = this.refs.navBar, 26 | touch = e.changedTouches[0], 27 | pos = {"x": touch.pageX, "y": touch.pageY}, 28 | x = pos.x, y = pos.y, 29 | style = getComputedStyle(navBar.querySelector("a")), 30 | width = parseFloat(style.width), 31 | height = parseFloat(style.height); 32 | 33 | Array.from(navBar.querySelectorAll("a")).forEach((item, i) => { 34 | let rect = item.getBoundingClientRect(), 35 | left = rect.left, top = rect.top; 36 | 37 | if (x > left && x < (left + width) && y > top && y < (top + height)) { 38 | location.href = item.href; 39 | this.props.letterChange(item.innerHTML); 40 | } 41 | }); 42 | } 43 | 44 | handleTouchEnd () { 45 | this.props.letterChange(null); 46 | this.setState({active: false}); 47 | } 48 | 49 | render () { 50 | let str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 51 | let arr = str.split(""); 52 | let rows = []; 53 | 54 | arr.forEach((item, i) => { 55 | rows.push({item}); 56 | }); 57 | 58 | let style = { 59 | display: this.props.proShow ? "block" : "none" 60 | }; 61 | 62 | return ( 63 |
    70 | {rows} 71 |
    72 | ); 73 | } 74 | } 75 | 76 | export default NavBar; -------------------------------------------------------------------------------- /src/cityPicker.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/16. 3 | */ 4 | import React from "react"; 5 | 6 | import cities from "./cities"; 7 | import ProvinceList from "./provinceList"; 8 | import NavBar from "./navBar"; 9 | import LetterPrompt from "./letterPrompt"; 10 | import CityList from "./cityList"; 11 | 12 | class CityPicker extends React.Component { 13 | constructor () { 14 | super(); 15 | this.state = { 16 | createPro: false, 17 | createCity: false, 18 | proShow: false, 19 | cityShow: false 20 | }; 21 | } 22 | 23 | handleChange () { 24 | this.setState({createPro: true, proShow: true}); 25 | } 26 | 27 | handleProClick (city, pro) { 28 | this.setState({createCity: true, cityShow: true, city: city, pro: pro}); 29 | } 30 | 31 | handleCityClick (city) { 32 | this.setState({proShow: false, cityShow: false}); 33 | this.refs.cityInput.value = this.state.pro + "" + city; 34 | } 35 | 36 | letterChange (letter) { 37 | this.setState({letter: letter}); 38 | } 39 | 40 | render () { 41 | let provinceList = null, cityList = null, navBar = null, letterPrompt = null; 42 | let {createPro, createCity, proShow, cityShow, city, pro, letter} = this.state; 43 | 44 | if (createPro) { 45 | provinceList = ; 49 | 50 | navBar = ; 53 | } 54 | 55 | if (letter) { 56 | letterPrompt = 57 | } 58 | 59 | if (createCity) { 60 | cityList = ; 65 | } 66 | 67 | return ( 68 |
    69 | 70 | 71 | {provinceList} 72 | {navBar} 73 | {letterPrompt} 74 | {cityList} 75 |
    76 | ) 77 | } 78 | } 79 | 80 | export default CityPicker; -------------------------------------------------------------------------------- /lib/letterPrompt.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/21. 3 | */ 4 | "use strict"; 5 | 6 | Object.defineProperty(exports, "__esModule", { 7 | value: true 8 | }); 9 | 10 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 11 | 12 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 13 | 14 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } 15 | 16 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 17 | 18 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 19 | 20 | var _react = require("react"); 21 | 22 | var _react2 = _interopRequireDefault(_react); 23 | 24 | var LetterPrompt = (function (_React$Component) { 25 | _inherits(LetterPrompt, _React$Component); 26 | 27 | function LetterPrompt() { 28 | _classCallCheck(this, LetterPrompt); 29 | 30 | _get(Object.getPrototypeOf(LetterPrompt.prototype), "constructor", this).apply(this, arguments); 31 | } 32 | 33 | _createClass(LetterPrompt, [{ 34 | key: "render", 35 | value: function render() { 36 | return _react2["default"].createElement( 37 | "div", 38 | { className: "prompt" }, 39 | this.props.letter 40 | ); 41 | } 42 | }]); 43 | 44 | return LetterPrompt; 45 | })(_react2["default"].Component); 46 | 47 | exports["default"] = LetterPrompt; 48 | module.exports = exports["default"]; -------------------------------------------------------------------------------- /src/cities.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/16. 3 | */ 4 | const cities = { 5 | "A": { 6 | "安徽":["合肥市","芜湖市","蚌埠市","淮南市","马鞍山市","淮北市","铜陵市","安庆市","黄山市","滁州市","阜阳市","宿州市","巢湖市","六安市","亳州市","池州市","宣城市"] 7 | }, 8 | "B": { 9 | "北京": ["北京市"] 10 | }, 11 | "C": { 12 | "重庆":["重庆市"] 13 | }, 14 | "F": { 15 | "福建":["福州市","厦门市","莆田市","三明市","泉州市","漳州市","南平市","龙岩市","宁德市"] 16 | }, 17 | "G": { 18 | "甘肃":["兰州市","嘉峪关市","金昌市","白银市","天水市","武威市","张掖市","平凉市","酒泉市","庆阳市","定西市","陇南市","临夏回族自治州","甘南藏族自治州"], 19 | "广东":["广州市","深圳市","珠海市","汕头市","韶关市","佛山市","江门市","湛江市","茂名市","肇庆市","惠州市","梅州市","汕尾市","河源市","阳江市","清远市","东莞市","中山市","潮州市","揭阳市","云浮市"], 20 | "广西":["南宁市","柳州市","桂林市","梧州市","北海市","防城港市","钦州市","贵港市","玉林市","百色市","贺州市","河池市","来宾市","崇左市"], 21 | "贵州":["贵阳市","六盘水市","遵义市","安顺市","铜仁地区","黔西南布依族苗族自治州","毕节地区","黔东南苗族侗族自治州","黔南布依族苗族自治州"] 22 | }, 23 | "H": { 24 | "海南":["海口市","三亚市"], 25 | "河北":["石家庄市","唐山市","秦皇岛市","邯郸市","邢台市","保定市","张家口市","承德市","沧州市","廊坊市","衡水市"], 26 | "河南":["郑州市","开封市","洛阳市","平顶山市","安阳市","鹤壁市","新乡市","焦作市","濮阳市","许昌市","漯河市","三门峡市","南阳市","商丘市","信阳市","周口市","驻马店市"], 27 | "黑龙江":["哈尔滨市","齐齐哈尔市","鸡西市","鹤岗市","双鸭山市","大庆市","伊春市","佳木斯市","七台河市","牡丹江市","黑河市","绥化市","大兴安岭地区"], 28 | "湖北":["武汉市","黄石市","十堰市","宜昌市","襄樊市","鄂州市","荆门市","孝感市","荆州市","黄冈市","咸宁市","随州市","恩施土家族苗族自治州","神农架"], 29 | "湖南":["长沙市","株洲市","湘潭市","衡阳市","邵阳市","岳阳市","常德市","张家界市","益阳市","郴州市","永州市","怀化市","娄底市","湘西土家族苗族自治州"] 30 | }, 31 | "J": { 32 | "吉林":["长春市","吉林市","四平市","辽源市","通化市","白山市","松原市","白城市","延边朝鲜族自治州"], 33 | "江苏":["南京市","无锡市","徐州市","常州市","苏州市","南通市","连云港市","淮安市","盐城市","扬州市","镇江市","泰州市","宿迁市"], 34 | "江西":["南昌市","景德镇市","萍乡市","九江市","新余市","鹰潭市","赣州市","吉安市","宜春市","抚州市","上饶市"] 35 | }, 36 | "L": { 37 | "辽宁":["沈阳市","大连市","鞍山市","抚顺市","本溪市","丹东市","锦州市","营口市","阜新市","辽阳市","盘锦市","铁岭市","朝阳市","葫芦岛市"] 38 | }, 39 | "N": { 40 | "内蒙古":["呼和浩特市","包头市","乌海市","赤峰市","通辽市","鄂尔多斯市","呼伦贝尔市","巴彦淖尔市","乌兰察布市","兴安盟","锡林郭勒盟","阿拉善盟"], 41 | "宁夏":["银川市","石嘴山市","吴忠市","固原市","中卫市"] 42 | }, 43 | "Q": { 44 | "青海":["西宁市","海东地区","海北藏族自治州","黄南藏族自治州","海南藏族自治州","果洛藏族自治州","玉树藏族自治州","海西蒙古族藏族自治州"] 45 | }, 46 | "S": { 47 | "山东":["济南市","青岛市","淄博市","枣庄市","东营市","烟台市","潍坊市","济宁市","泰安市","威海市","日照市","莱芜市","临沂市","德州市","聊城市","滨州市","菏泽市"], 48 | "山西":["太原市","大同市","阳泉市","长治市","晋城市","朔州市","晋中市","运城市","忻州市","临汾市","吕梁市"], 49 | "陕西":["西安市","铜川市","宝鸡市","咸阳市","渭南市","延安市","汉中市","榆林市","安康市","商洛市"], 50 | "上海":["上海市"], 51 | "四川":["成都市","自贡市","攀枝花市","泸州市","德阳市","绵阳市","广元市","遂宁市","内江市","乐山市","南充市","眉山市","宜宾市","广安市","达州市","雅安市","巴中市","资阳市","阿坝藏族羌族自治州","甘孜藏族自治州","凉山彝族自治州"] 52 | }, 53 | "T": { 54 | "天津": ["天津市"] 55 | }, 56 | "X": { 57 | "西藏":["拉萨市","昌都地区","山南地区","日喀则地区","那曲地区","阿里地区","林芝地区"], 58 | "新疆":["乌鲁木齐市","克拉玛依市","吐鲁番地区","哈密地区","昌吉回族自治州","博尔塔拉蒙古自治州","巴音郭楞蒙古自治州","阿克苏地区","克孜勒苏柯尔克孜自治州","喀什地区","和田地区","伊犁哈萨克自治州","塔城地区","阿勒泰地区","石河子市","阿拉尔市","图木舒克市","五家渠市"] 59 | }, 60 | "Y": { 61 | "云南":["昆明市","曲靖市","玉溪市","保山市","昭通市","丽江市","思茅市","临沧市","楚雄彝族自治州","红河哈尼族彝族自治州","文山壮族苗族自治州","西双版纳傣族自治州","大理白族自治州","德宏傣族景颇族自治州","怒江傈僳族自治州","迪庆藏族自治州"] 62 | }, 63 | "Z": { 64 | "浙江":["杭州市","宁波市","温州市","嘉兴市","湖州市","绍兴市","金华市","衢州市","舟山市","台州市","丽水市"] 65 | } 66 | }; 67 | 68 | export default cities; -------------------------------------------------------------------------------- /lib/cities.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/16. 3 | */ 4 | "use strict"; 5 | 6 | Object.defineProperty(exports, "__esModule", { 7 | value: true 8 | }); 9 | var cities = { 10 | "A": { 11 | "安徽": ["合肥市", "芜湖市", "蚌埠市", "淮南市", "马鞍山市", "淮北市", "铜陵市", "安庆市", "黄山市", "滁州市", "阜阳市", "宿州市", "巢湖市", "六安市", "亳州市", "池州市", "宣城市"] 12 | }, 13 | "B": { 14 | "北京": ["北京市"] 15 | }, 16 | "C": { 17 | "重庆": ["重庆市"] 18 | }, 19 | "F": { 20 | "福建": ["福州市", "厦门市", "莆田市", "三明市", "泉州市", "漳州市", "南平市", "龙岩市", "宁德市"] 21 | }, 22 | "G": { 23 | "甘肃": ["兰州市", "嘉峪关市", "金昌市", "白银市", "天水市", "武威市", "张掖市", "平凉市", "酒泉市", "庆阳市", "定西市", "陇南市", "临夏回族自治州", "甘南藏族自治州"], 24 | "广东": ["广州市", "深圳市", "珠海市", "汕头市", "韶关市", "佛山市", "江门市", "湛江市", "茂名市", "肇庆市", "惠州市", "梅州市", "汕尾市", "河源市", "阳江市", "清远市", "东莞市", "中山市", "潮州市", "揭阳市", "云浮市"], 25 | "广西": ["南宁市", "柳州市", "桂林市", "梧州市", "北海市", "防城港市", "钦州市", "贵港市", "玉林市", "百色市", "贺州市", "河池市", "来宾市", "崇左市"], 26 | "贵州": ["贵阳市", "六盘水市", "遵义市", "安顺市", "铜仁地区", "黔西南布依族苗族自治州", "毕节地区", "黔东南苗族侗族自治州", "黔南布依族苗族自治州"] 27 | }, 28 | "H": { 29 | "海南": ["海口市", "三亚市"], 30 | "河北": ["石家庄市", "唐山市", "秦皇岛市", "邯郸市", "邢台市", "保定市", "张家口市", "承德市", "沧州市", "廊坊市", "衡水市"], 31 | "河南": ["郑州市", "开封市", "洛阳市", "平顶山市", "安阳市", "鹤壁市", "新乡市", "焦作市", "濮阳市", "许昌市", "漯河市", "三门峡市", "南阳市", "商丘市", "信阳市", "周口市", "驻马店市"], 32 | "黑龙江": ["哈尔滨市", "齐齐哈尔市", "鸡西市", "鹤岗市", "双鸭山市", "大庆市", "伊春市", "佳木斯市", "七台河市", "牡丹江市", "黑河市", "绥化市", "大兴安岭地区"], 33 | "湖北": ["武汉市", "黄石市", "十堰市", "宜昌市", "襄樊市", "鄂州市", "荆门市", "孝感市", "荆州市", "黄冈市", "咸宁市", "随州市", "恩施土家族苗族自治州", "神农架"], 34 | "湖南": ["长沙市", "株洲市", "湘潭市", "衡阳市", "邵阳市", "岳阳市", "常德市", "张家界市", "益阳市", "郴州市", "永州市", "怀化市", "娄底市", "湘西土家族苗族自治州"] 35 | }, 36 | "J": { 37 | "吉林": ["长春市", "吉林市", "四平市", "辽源市", "通化市", "白山市", "松原市", "白城市", "延边朝鲜族自治州"], 38 | "江苏": ["南京市", "无锡市", "徐州市", "常州市", "苏州市", "南通市", "连云港市", "淮安市", "盐城市", "扬州市", "镇江市", "泰州市", "宿迁市"], 39 | "江西": ["南昌市", "景德镇市", "萍乡市", "九江市", "新余市", "鹰潭市", "赣州市", "吉安市", "宜春市", "抚州市", "上饶市"] 40 | }, 41 | "L": { 42 | "辽宁": ["沈阳市", "大连市", "鞍山市", "抚顺市", "本溪市", "丹东市", "锦州市", "营口市", "阜新市", "辽阳市", "盘锦市", "铁岭市", "朝阳市", "葫芦岛市"] 43 | }, 44 | "N": { 45 | "内蒙古": ["呼和浩特市", "包头市", "乌海市", "赤峰市", "通辽市", "鄂尔多斯市", "呼伦贝尔市", "巴彦淖尔市", "乌兰察布市", "兴安盟", "锡林郭勒盟", "阿拉善盟"], 46 | "宁夏": ["银川市", "石嘴山市", "吴忠市", "固原市", "中卫市"] 47 | }, 48 | "Q": { 49 | "青海": ["西宁市", "海东地区", "海北藏族自治州", "黄南藏族自治州", "海南藏族自治州", "果洛藏族自治州", "玉树藏族自治州", "海西蒙古族藏族自治州"] 50 | }, 51 | "S": { 52 | "山东": ["济南市", "青岛市", "淄博市", "枣庄市", "东营市", "烟台市", "潍坊市", "济宁市", "泰安市", "威海市", "日照市", "莱芜市", "临沂市", "德州市", "聊城市", "滨州市", "菏泽市"], 53 | "山西": ["太原市", "大同市", "阳泉市", "长治市", "晋城市", "朔州市", "晋中市", "运城市", "忻州市", "临汾市", "吕梁市"], 54 | "陕西": ["西安市", "铜川市", "宝鸡市", "咸阳市", "渭南市", "延安市", "汉中市", "榆林市", "安康市", "商洛市"], 55 | "上海": ["上海市"], 56 | "四川": ["成都市", "自贡市", "攀枝花市", "泸州市", "德阳市", "绵阳市", "广元市", "遂宁市", "内江市", "乐山市", "南充市", "眉山市", "宜宾市", "广安市", "达州市", "雅安市", "巴中市", "资阳市", "阿坝藏族羌族自治州", "甘孜藏族自治州", "凉山彝族自治州"] 57 | }, 58 | "T": { 59 | "天津": ["天津市"] 60 | }, 61 | "X": { 62 | "西藏": ["拉萨市", "昌都地区", "山南地区", "日喀则地区", "那曲地区", "阿里地区", "林芝地区"], 63 | "新疆": ["乌鲁木齐市", "克拉玛依市", "吐鲁番地区", "哈密地区", "昌吉回族自治州", "博尔塔拉蒙古自治州", "巴音郭楞蒙古自治州", "阿克苏地区", "克孜勒苏柯尔克孜自治州", "喀什地区", "和田地区", "伊犁哈萨克自治州", "塔城地区", "阿勒泰地区", "石河子市", "阿拉尔市", "图木舒克市", "五家渠市"] 64 | }, 65 | "Y": { 66 | "云南": ["昆明市", "曲靖市", "玉溪市", "保山市", "昭通市", "丽江市", "思茅市", "临沧市", "楚雄彝族自治州", "红河哈尼族彝族自治州", "文山壮族苗族自治州", "西双版纳傣族自治州", "大理白族自治州", "德宏傣族景颇族自治州", "怒江傈僳族自治州", "迪庆藏族自治州"] 67 | }, 68 | "Z": { 69 | "浙江": ["杭州市", "宁波市", "温州市", "嘉兴市", "湖州市", "绍兴市", "金华市", "衢州市", "舟山市", "台州市", "丽水市"] 70 | } 71 | }; 72 | 73 | exports["default"] = cities; 74 | module.exports = exports["default"]; -------------------------------------------------------------------------------- /lib/cityList.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/16. 3 | */ 4 | "use strict"; 5 | 6 | Object.defineProperty(exports, "__esModule", { 7 | value: true 8 | }); 9 | 10 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 11 | 12 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 13 | 14 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } 15 | 16 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 17 | 18 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 19 | 20 | var _react = require("react"); 21 | 22 | var _react2 = _interopRequireDefault(_react); 23 | 24 | var CityList = (function (_React$Component) { 25 | _inherits(CityList, _React$Component); 26 | 27 | function CityList() { 28 | _classCallCheck(this, CityList); 29 | 30 | _get(Object.getPrototypeOf(CityList.prototype), "constructor", this).apply(this, arguments); 31 | } 32 | 33 | _createClass(CityList, [{ 34 | key: "handleClick", 35 | value: function handleClick(city) { 36 | this.props.handleCityClick(city); 37 | } 38 | }, { 39 | key: "shouldComponentUpdate", 40 | value: function shouldComponentUpdate(nextProps, nextState) { 41 | return this.props.cityShow !== nextProps.cityShow; 42 | } 43 | }, { 44 | key: "render", 45 | value: function render() { 46 | var _this = this; 47 | 48 | var _props = this.props; 49 | var city = _props.city; 50 | var pro = _props.pro; 51 | var cityShow = _props.cityShow; 52 | 53 | var cityRows = []; 54 | city && city.forEach(function (city, i) { 55 | cityRows.push(_react2["default"].createElement( 56 | "li", 57 | { onClick: _this.handleClick.bind(_this, city), key: i }, 58 | city 59 | )); 60 | }); 61 | 62 | var style = { 63 | display: cityShow ? "block" : "none" 64 | }; 65 | 66 | return _react2["default"].createElement( 67 | "ul", 68 | { className: "city-picker", style: style }, 69 | cityRows 70 | ); 71 | } 72 | }]); 73 | 74 | return CityList; 75 | })(_react2["default"].Component); 76 | 77 | exports["default"] = CityList; 78 | module.exports = exports["default"]; -------------------------------------------------------------------------------- /lib/provinceList.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/16. 3 | */ 4 | "use strict"; 5 | 6 | Object.defineProperty(exports, "__esModule", { 7 | value: true 8 | }); 9 | 10 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 11 | 12 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 13 | 14 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } 15 | 16 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 17 | 18 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 19 | 20 | var _react = require("react"); 21 | 22 | var _react2 = _interopRequireDefault(_react); 23 | 24 | var ProvinceList = (function (_React$Component) { 25 | _inherits(ProvinceList, _React$Component); 26 | 27 | function ProvinceList() { 28 | _classCallCheck(this, ProvinceList); 29 | 30 | _get(Object.getPrototypeOf(ProvinceList.prototype), "constructor", this).apply(this, arguments); 31 | } 32 | 33 | _createClass(ProvinceList, [{ 34 | key: "handleClick", 35 | value: function handleClick(city, pro) { 36 | this.props.handleProClick(city, pro); 37 | } 38 | }, { 39 | key: "shouldComponentUpdate", 40 | value: function shouldComponentUpdate(nextProps, nextState) { 41 | return this.props.proShow !== nextProps.proShow; 42 | } 43 | }, { 44 | key: "render", 45 | value: function render() { 46 | var _this = this; 47 | 48 | var cities = this.props.cities; 49 | var rows = []; 50 | 51 | var _loop = function (letterKey) { 52 | if (cities.hasOwnProperty(letterKey)) { 53 | (function () { 54 | var pros = cities[letterKey]; 55 | rows.push(_react2["default"].createElement( 56 | "dl", 57 | { key: letterKey }, 58 | _react2["default"].createElement( 59 | "dt", 60 | { "data-letter": letterKey }, 61 | letterKey 62 | ), 63 | (function () { 64 | var proRows = []; 65 | for (var pro in pros) { 66 | if (pros.hasOwnProperty(pro)) { 67 | proRows.push(_react2["default"].createElement( 68 | "dd", 69 | { "data-letter": letterKey, key: pro, onClick: _this.handleClick.bind(_this, pros[pro], pro) }, 70 | pro 71 | )); 72 | } 73 | } 74 | return proRows; 75 | })() 76 | )); 77 | })(); 78 | } 79 | }; 80 | 81 | for (var letterKey in cities) { 82 | _loop(letterKey); 83 | } 84 | 85 | var style = { 86 | display: this.props.proShow ? "block" : "none" 87 | }; 88 | 89 | return _react2["default"].createElement( 90 | "div", 91 | { className: "pro-picker", style: style }, 92 | rows 93 | ); 94 | } 95 | }]); 96 | 97 | return ProvinceList; 98 | })(_react2["default"].Component); 99 | 100 | exports["default"] = ProvinceList; 101 | module.exports = exports["default"]; -------------------------------------------------------------------------------- /lib/navBar.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/21. 3 | */ 4 | "use strict"; 5 | 6 | Object.defineProperty(exports, "__esModule", { 7 | value: true 8 | }); 9 | 10 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 11 | 12 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 13 | 14 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } 15 | 16 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 17 | 18 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 19 | 20 | var _react = require("react"); 21 | 22 | var _react2 = _interopRequireDefault(_react); 23 | 24 | var NavBar = (function (_React$Component) { 25 | _inherits(NavBar, _React$Component); 26 | 27 | function NavBar() { 28 | _classCallCheck(this, NavBar); 29 | 30 | _get(Object.getPrototypeOf(NavBar.prototype), "constructor", this).call(this); 31 | this.state = { active: false }; 32 | } 33 | 34 | _createClass(NavBar, [{ 35 | key: "shouldComponentUpdate", 36 | value: function shouldComponentUpdate(nextProps, nextState) { 37 | return this.props.proShow !== nextProps.proShow || this.state.active !== nextState.active; 38 | } 39 | }, { 40 | key: "handleTouchStart", 41 | value: function handleTouchStart(e) { 42 | this.setState({ active: true }); 43 | 44 | this.props.letterChange(e.target.innerHTML); 45 | } 46 | }, { 47 | key: "handleTouchMove", 48 | value: function handleTouchMove(e) { 49 | var _this = this; 50 | 51 | e.preventDefault(); 52 | 53 | var navBar = this.refs.navBar, 54 | touch = e.changedTouches[0], 55 | pos = { "x": touch.pageX, "y": touch.pageY }, 56 | x = pos.x, 57 | y = pos.y, 58 | style = getComputedStyle(navBar.querySelector("a")), 59 | width = parseFloat(style.width), 60 | height = parseFloat(style.height); 61 | 62 | Array.from(navBar.querySelectorAll("a")).forEach(function (item, i) { 63 | var rect = item.getBoundingClientRect(), 64 | left = rect.left, 65 | top = rect.top; 66 | 67 | if (x > left && x < left + width && y > top && y < top + height) { 68 | location.href = item.href; 69 | _this.props.letterChange(item.innerHTML); 70 | } 71 | }); 72 | } 73 | }, { 74 | key: "handleTouchEnd", 75 | value: function handleTouchEnd() { 76 | this.props.letterChange(null); 77 | this.setState({ active: false }); 78 | } 79 | }, { 80 | key: "render", 81 | value: function render() { 82 | var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 83 | var arr = str.split(""); 84 | var rows = []; 85 | 86 | arr.forEach(function (item, i) { 87 | rows.push(_react2["default"].createElement( 88 | "a", 89 | { href: "#" + item, key: i }, 90 | item 91 | )); 92 | }); 93 | 94 | var style = { 95 | display: this.props.proShow ? "block" : "none" 96 | }; 97 | 98 | return _react2["default"].createElement( 99 | "div", 100 | { ref: "navBar", 101 | className: "navbar " + (this.state.active ? "active" : ""), 102 | style: style, 103 | onTouchStart: this.handleTouchStart.bind(this), 104 | onTouchMove: this.handleTouchMove.bind(this), 105 | onTouchEnd: this.handleTouchEnd.bind(this) 106 | }, 107 | rows 108 | ); 109 | } 110 | }]); 111 | 112 | return NavBar; 113 | })(_react2["default"].Component); 114 | 115 | exports["default"] = NavBar; 116 | module.exports = exports["default"]; -------------------------------------------------------------------------------- /lib/cityPicker.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zlw on 2015/12/16. 3 | */ 4 | "use strict"; 5 | 6 | Object.defineProperty(exports, "__esModule", { 7 | value: true 8 | }); 9 | 10 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 11 | 12 | var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 13 | 14 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } 15 | 16 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 17 | 18 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } 19 | 20 | var _react = require("react"); 21 | 22 | var _react2 = _interopRequireDefault(_react); 23 | 24 | var _cities = require("./cities"); 25 | 26 | var _cities2 = _interopRequireDefault(_cities); 27 | 28 | var _provinceList = require("./provinceList"); 29 | 30 | var _provinceList2 = _interopRequireDefault(_provinceList); 31 | 32 | var _navBar = require("./navBar"); 33 | 34 | var _navBar2 = _interopRequireDefault(_navBar); 35 | 36 | var _letterPrompt = require("./letterPrompt"); 37 | 38 | var _letterPrompt2 = _interopRequireDefault(_letterPrompt); 39 | 40 | var _cityList = require("./cityList"); 41 | 42 | var _cityList2 = _interopRequireDefault(_cityList); 43 | 44 | var CityPicker = (function (_React$Component) { 45 | _inherits(CityPicker, _React$Component); 46 | 47 | function CityPicker() { 48 | _classCallCheck(this, CityPicker); 49 | 50 | _get(Object.getPrototypeOf(CityPicker.prototype), "constructor", this).call(this); 51 | this.state = { 52 | createPro: false, 53 | createCity: false, 54 | proShow: false, 55 | cityShow: false 56 | }; 57 | } 58 | 59 | _createClass(CityPicker, [{ 60 | key: "handleChange", 61 | value: function handleChange() { 62 | this.setState({ createPro: true, proShow: true }); 63 | } 64 | }, { 65 | key: "handleProClick", 66 | value: function handleProClick(city, pro) { 67 | this.setState({ createCity: true, cityShow: true, city: city, pro: pro }); 68 | } 69 | }, { 70 | key: "handleCityClick", 71 | value: function handleCityClick(city) { 72 | this.setState({ proShow: false, cityShow: false }); 73 | this.refs.cityInput.value = this.state.pro + "" + city; 74 | } 75 | }, { 76 | key: "letterChange", 77 | value: function letterChange(letter) { 78 | this.setState({ letter: letter }); 79 | } 80 | }, { 81 | key: "render", 82 | value: function render() { 83 | var provinceList = null, 84 | cityList = null, 85 | navBar = null, 86 | letterPrompt = null; 87 | var _state = this.state; 88 | var createPro = _state.createPro; 89 | var createCity = _state.createCity; 90 | var proShow = _state.proShow; 91 | var cityShow = _state.cityShow; 92 | var city = _state.city; 93 | var pro = _state.pro; 94 | var letter = _state.letter; 95 | 96 | if (createPro) { 97 | provinceList = _react2["default"].createElement(_provinceList2["default"], { 98 | cities: _cities2["default"], 99 | proShow: proShow, 100 | handleProClick: this.handleProClick.bind(this) }); 101 | 102 | navBar = _react2["default"].createElement(_navBar2["default"], { 103 | proShow: proShow, 104 | letterChange: this.letterChange.bind(this) }); 105 | } 106 | 107 | if (letter) { 108 | letterPrompt = _react2["default"].createElement(_letterPrompt2["default"], { letter: letter }); 109 | } 110 | 111 | if (createCity) { 112 | cityList = _react2["default"].createElement(_cityList2["default"], { 113 | city: city, 114 | pro: pro, 115 | cityShow: cityShow, 116 | handleCityClick: this.handleCityClick.bind(this) }); 117 | } 118 | 119 | return _react2["default"].createElement( 120 | "div", 121 | { className: "picker-box" }, 122 | _react2["default"].createElement("input", { type: "text", ref: "cityInput", onFocus: this.handleChange.bind(this) }), 123 | provinceList, 124 | navBar, 125 | letterPrompt, 126 | cityList 127 | ); 128 | } 129 | }]); 130 | 131 | return CityPicker; 132 | })(_react2["default"].Component); 133 | 134 | exports["default"] = CityPicker; 135 | module.exports = exports["default"]; --------------------------------------------------------------------------------