├── .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 |
5 |
6 |
7 |
8 |
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"];
--------------------------------------------------------------------------------