react-spatial 2.0.0-beta.1 → 2.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -10
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.js +243 -220
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +7 -1
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.scss +6 -5
- package/components/BaseLayerSwitcher/index.js +1 -3
- package/components/BaseLayerSwitcher/index.js.map +7 -1
- package/components/BasicMap/BasicMap.js +165 -285
- package/components/BasicMap/BasicMap.js.map +7 -1
- package/components/BasicMap/index.js +1 -3
- package/components/BasicMap/index.js.map +7 -1
- package/components/CanvasSaveButton/CanvasSaveButton.js +434 -556
- package/components/CanvasSaveButton/CanvasSaveButton.js.map +7 -1
- package/components/CanvasSaveButton/CanvasSaveButton.md.scss +1 -1
- package/components/CanvasSaveButton/index.js +1 -3
- package/components/CanvasSaveButton/index.js.map +7 -1
- package/components/Copyright/Copyright.js +44 -77
- package/components/Copyright/Copyright.js.map +7 -1
- package/components/Copyright/index.js +1 -3
- package/components/Copyright/index.js.map +7 -1
- package/components/FeatureExportButton/FeatureExportButton.js +44 -92
- package/components/FeatureExportButton/FeatureExportButton.js.map +7 -1
- package/components/FeatureExportButton/index.js +1 -3
- package/components/FeatureExportButton/index.js.map +7 -1
- package/components/FitExtent/FitExtent.js +31 -46
- package/components/FitExtent/FitExtent.js.map +7 -1
- package/components/FitExtent/index.js +1 -3
- package/components/FitExtent/index.js.map +7 -1
- package/components/Geolocation/Geolocation.js +158 -228
- package/components/Geolocation/Geolocation.js.map +7 -1
- package/components/Geolocation/Geolocation.scss +7 -5
- package/components/Geolocation/index.js +1 -3
- package/components/Geolocation/index.js.map +7 -1
- package/components/LayerTree/LayerTree.js +359 -357
- package/components/LayerTree/LayerTree.js.map +7 -1
- package/components/LayerTree/LayerTree.scss +4 -6
- package/components/LayerTree/index.js +1 -3
- package/components/LayerTree/index.js.map +7 -1
- package/components/MousePosition/MousePosition.js +71 -109
- package/components/MousePosition/MousePosition.js.map +7 -1
- package/components/MousePosition/index.js +1 -3
- package/components/MousePosition/index.js.map +7 -1
- package/components/NorthArrow/NorthArrow.js +37 -61
- package/components/NorthArrow/NorthArrow.js.map +7 -1
- package/components/NorthArrow/index.js +1 -3
- package/components/NorthArrow/index.js.map +7 -1
- package/components/Overlay/Overlay.js +93 -123
- package/components/Overlay/Overlay.js.map +7 -1
- package/components/Overlay/index.js +1 -3
- package/components/Overlay/index.js.map +7 -1
- package/components/Permalink/Permalink.js +194 -229
- package/components/Permalink/Permalink.js.map +7 -1
- package/components/Permalink/index.js +1 -3
- package/components/Permalink/index.js.map +7 -1
- package/components/Popup/Popup.js +139 -215
- package/components/Popup/Popup.js.map +7 -1
- package/components/Popup/Popup.md.scss +1 -0
- package/components/Popup/Popup.scss +3 -1
- package/components/Popup/index.js +1 -3
- package/components/Popup/index.js.map +7 -1
- package/components/ResizeHandler/ResizeHandler.js +88 -137
- package/components/ResizeHandler/ResizeHandler.js.map +7 -1
- package/components/ResizeHandler/index.js +1 -3
- package/components/ResizeHandler/index.js.map +7 -1
- package/components/RouteSchedule/RouteSchedule.js +227 -277
- package/components/RouteSchedule/RouteSchedule.js.map +7 -1
- package/components/RouteSchedule/RouteSchedule.md.scss +4 -2
- package/components/RouteSchedule/RouteSchedule.scss +12 -23
- package/components/RouteSchedule/index.js +1 -3
- package/components/RouteSchedule/index.js.map +7 -1
- package/components/ScaleLine/ScaleLine.js +17 -39
- package/components/ScaleLine/ScaleLine.js.map +7 -1
- package/components/ScaleLine/ScaleLine.scss +6 -4
- package/components/ScaleLine/index.js +1 -3
- package/components/ScaleLine/index.js.map +7 -1
- package/components/StopsFinder/StopsFinder.js +134 -162
- package/components/StopsFinder/StopsFinder.js.map +7 -1
- package/components/StopsFinder/StopsFinderOption.js +30 -60
- package/components/StopsFinder/StopsFinderOption.js.map +7 -1
- package/components/StopsFinder/index.js +1 -3
- package/components/StopsFinder/index.js.map +7 -1
- package/components/Zoom/Zoom.js +102 -106
- package/components/Zoom/Zoom.js.map +7 -1
- package/components/Zoom/Zoom.md.scss +3 -1
- package/components/Zoom/Zoom.scss +7 -5
- package/components/Zoom/index.js +1 -3
- package/components/Zoom/index.js.map +7 -1
- package/images/geops_qr.png +0 -0
- package/package.json +88 -182
- package/propTypes.js +36 -24
- package/propTypes.js.map +7 -1
- package/setupTests.js +21 -4
- package/setupTests.js.map +7 -1
- package/themes/README.md +26 -0
- package/themes/default/components.scss +9 -14
- package/themes/default/examples.scss +20 -20
- package/themes/default/index.scss +3 -3
- package/themes/default/mixins.scss +7 -5
- package/themes/default/variables.scss +27 -25
- package/utils/GlobalsForOle.js +72 -73
- package/utils/GlobalsForOle.js.map +7 -1
- package/utils/KML.js +320 -381
- package/utils/KML.js.map +7 -1
- package/utils/Styles.js +25 -33
- package/utils/Styles.js.map +7 -1
- package/utils/getLayersAsFlatArray.js +14 -0
- package/utils/getLayersAsFlatArray.js.map +7 -0
- package/utils/getPolygonPattern.js +11 -44
- package/utils/getPolygonPattern.js.map +7 -1
- package/utils/timeUtils.js +20 -35
- package/utils/timeUtils.js.map +7 -1
- package/LayerService.js +0 -193
- package/LayerService.js.map +0 -1
- package/LayerService.test.js +0 -160
- package/LayerService.test.js.map +0 -1
- package/Projections.js +0 -16
- package/Projections.js.map +0 -1
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js +0 -88
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js.map +0 -1
- package/components/BaseLayerToggler/BaseLayerToggler.js +0 -490
- package/components/BaseLayerToggler/BaseLayerToggler.js.map +0 -1
- package/components/BaseLayerToggler/BaseLayerToggler.md.scss +0 -9
- package/components/BaseLayerToggler/BaseLayerToggler.scss +0 -49
- package/components/BaseLayerToggler/BaseLayerToggler.test.js +0 -127
- package/components/BaseLayerToggler/BaseLayerToggler.test.js.map +0 -1
- package/components/BaseLayerToggler/index.js +0 -3
- package/components/BaseLayerToggler/index.js.map +0 -1
- package/components/BasicMap/BasicMap.test.js +0 -288
- package/components/BasicMap/BasicMap.test.js.map +0 -1
- package/components/CanvasSaveButton/CanvasSaveButton.test.js +0 -173
- package/components/CanvasSaveButton/CanvasSaveButton.test.js.map +0 -1
- package/components/Copyright/Copyright.test.js +0 -133
- package/components/Copyright/Copyright.test.js.map +0 -1
- package/components/FeatureExportButton/FeatureExportButton.test.js +0 -407
- package/components/FeatureExportButton/FeatureExportButton.test.js.map +0 -1
- package/components/FilterButton/FilterButton.js +0 -131
- package/components/FilterButton/FilterButton.js.map +0 -1
- package/components/FilterButton/FilterButton.scss +0 -36
- package/components/FilterButton/FilterButton.test.js +0 -48
- package/components/FilterButton/FilterButton.test.js.map +0 -1
- package/components/FilterButton/index.js +0 -3
- package/components/FilterButton/index.js.map +0 -1
- package/components/FitExtent/FitExtent.test.js +0 -44
- package/components/FitExtent/FitExtent.test.js.map +0 -1
- package/components/FollowButton/FollowButton.js +0 -143
- package/components/FollowButton/FollowButton.js.map +0 -1
- package/components/FollowButton/FollowButton.scss +0 -36
- package/components/FollowButton/FollowButton.test.js +0 -57
- package/components/FollowButton/FollowButton.test.js.map +0 -1
- package/components/FollowButton/index.js +0 -3
- package/components/FollowButton/index.js.map +0 -1
- package/components/Geolocation/Geolocation.test.js +0 -263
- package/components/Geolocation/Geolocation.test.js.map +0 -1
- package/components/LayerTree/LayerTree.test.js +0 -323
- package/components/LayerTree/LayerTree.test.js.map +0 -1
- package/components/MousePosition/MousePosition.test.js +0 -125
- package/components/MousePosition/MousePosition.test.js.map +0 -1
- package/components/NorthArrow/NorthArrow.test.js +0 -106
- package/components/NorthArrow/NorthArrow.test.js.map +0 -1
- package/components/Overlay/Overlay.test.js +0 -145
- package/components/Overlay/Overlay.test.js.map +0 -1
- package/components/Permalink/Permalink.test.js +0 -267
- package/components/Permalink/Permalink.test.js.map +0 -1
- package/components/Popup/Popup.test.js +0 -291
- package/components/Popup/Popup.test.js.map +0 -1
- package/components/ResizeHandler/ResizeHandler.test.js +0 -410
- package/components/ResizeHandler/ResizeHandler.test.js.map +0 -1
- package/components/RouteSchedule/RouteSchedule.test.js +0 -102
- package/components/RouteSchedule/RouteSchedule.test.js.map +0 -1
- package/components/ScaleLine/ScaleLine.test.js +0 -32
- package/components/ScaleLine/ScaleLine.test.js.map +0 -1
- package/components/Search/Search.js +0 -230
- package/components/Search/Search.js.map +0 -1
- package/components/Search/Search.md.scss +0 -4
- package/components/Search/Search.scss +0 -78
- package/components/Search/Search.test.js +0 -15
- package/components/Search/Search.test.js.map +0 -1
- package/components/Search/SearchService.js +0 -72
- package/components/Search/SearchService.js.map +0 -1
- package/components/Search/engines/Engine.js +0 -26
- package/components/Search/engines/Engine.js.map +0 -1
- package/components/Search/engines/StopFinder.js +0 -47
- package/components/Search/engines/StopFinder.js.map +0 -1
- package/components/Search/index.js +0 -6
- package/components/Search/index.js.map +0 -1
- package/components/StopsFinder/StopsFinder.test.js +0 -19
- package/components/StopsFinder/StopsFinder.test.js.map +0 -1
- package/components/TrackerControl/TrackerControl.js +0 -171
- package/components/TrackerControl/TrackerControl.js.map +0 -1
- package/components/TrackerControl/TrackerControl.scss +0 -30
- package/components/TrackerControl/TrackerControl.test.js +0 -17
- package/components/TrackerControl/TrackerControl.test.js.map +0 -1
- package/components/TrackerControl/index.js +0 -3
- package/components/TrackerControl/index.js.map +0 -1
- package/components/Zoom/Zoom.test.js +0 -150
- package/components/Zoom/Zoom.test.js.map +0 -1
- package/images/FilterButton/filter.svg +0 -1
- package/images/FollowButton/follow.svg +0 -1
- package/images/baselayer/osm.baselayer.hot.png +0 -0
- package/images/baselayer/osm.baselayer.png +0 -0
- package/styleguidist/ComponentsList.js +0 -52
- package/styleguidist/ComponentsList.js.map +0 -1
- package/styleguidist/StyleGuide.js +0 -253
- package/styleguidist/StyleGuide.js.map +0 -1
- package/utils/KML.test.js +0 -163
- package/utils/KML.test.js.map +0 -1
- package/utils/KMLFormat.js +0 -105
- package/utils/KMLFormat.js.map +0 -1
- package/utils/KMLFormat.test.js +0 -22
- package/utils/KMLFormat.test.js.map +0 -1
- package/utils/getPolygonPattern.test.js +0 -66
- package/utils/getPolygonPattern.test.js.map +0 -1
- package/utils/timeUtils.test.js +0 -32
- package/utils/timeUtils.test.js.map +0 -1
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
import PropTypes from 'prop-types';
|
|
2
|
-
import React, { useMemo, useState } from 'react';
|
|
3
|
-
import Autosuggest from 'react-autosuggest';
|
|
4
|
-
import { FaSearch, FaTimes } from 'react-icons/fa';
|
|
5
|
-
|
|
6
|
-
import SearchService from './SearchService';
|
|
7
|
-
import StopFinder from './engines/StopFinder';
|
|
8
|
-
|
|
9
|
-
var propTypes = {
|
|
10
|
-
/**
|
|
11
|
-
* Flat object to provide custom search engines: key is the section and value an instance of the Engine class.
|
|
12
|
-
*/
|
|
13
|
-
engines: PropTypes.object,
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* A function which will receive the searchService instance and needs to return a render function for the section title, see [react-autosuggest documentation](https://github.com/moroshko/react-autosuggest#render-section-title-prop) for details.
|
|
17
|
-
*/
|
|
18
|
-
getRenderSectionTitle: PropTypes.func,
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Initial value for the search input field.
|
|
22
|
-
*/
|
|
23
|
-
initialValue: PropTypes.string,
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Props for the search input field, see [react-autosuggest documentation](https://github.com/moroshko/react-autosuggest#input-props-prop) for details.
|
|
27
|
-
*/
|
|
28
|
-
inputProps: PropTypes.object,
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Callback function which will be called with the hovered suggestion.
|
|
32
|
-
*/
|
|
33
|
-
onHighlight: PropTypes.func,
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Function to define whether the suggestions are displayed or not.
|
|
37
|
-
* See 'shouldRenderSuggestions' in [react-autosuggest documentation](https://github.com/moroshko/react-autosuggest#input-props-prop) for details.
|
|
38
|
-
*/
|
|
39
|
-
shouldRenderSuggestions: PropTypes.func,
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Callback function which will be called with the selected suggestion.
|
|
43
|
-
*/
|
|
44
|
-
onSelect: PropTypes.func,
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* CSS class of the component.
|
|
48
|
-
*/
|
|
49
|
-
className: PropTypes.string,
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Key to access the engine api.
|
|
53
|
-
*/
|
|
54
|
-
apiKey: PropTypes.string,
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
var defaultProps = {
|
|
58
|
-
apiKey: null,
|
|
59
|
-
engines: null,
|
|
60
|
-
getRenderSectionTitle: function () {
|
|
61
|
-
return function () {
|
|
62
|
-
return null;
|
|
63
|
-
};
|
|
64
|
-
},
|
|
65
|
-
initialValue: '',
|
|
66
|
-
onHighlight: function () {
|
|
67
|
-
return null;
|
|
68
|
-
},
|
|
69
|
-
shouldRenderSuggestions: function (newValue) {
|
|
70
|
-
return newValue.trim().length > 2;
|
|
71
|
-
},
|
|
72
|
-
onSelect: function () {
|
|
73
|
-
return null;
|
|
74
|
-
},
|
|
75
|
-
className: 'rt-search',
|
|
76
|
-
inputProps: {},
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* The Search component renders a text input field which searches for stops
|
|
81
|
-
* using the input string and centers the map on the selected stop.
|
|
82
|
-
*/
|
|
83
|
-
function Search(ref) {
|
|
84
|
-
var apiKey = ref.apiKey;
|
|
85
|
-
var engines = ref.engines;
|
|
86
|
-
var getRenderSectionTitle = ref.getRenderSectionTitle;
|
|
87
|
-
var initialValue = ref.initialValue;
|
|
88
|
-
var inputProps = ref.inputProps;
|
|
89
|
-
var onHighlight = ref.onHighlight;
|
|
90
|
-
var shouldRenderSuggestions = ref.shouldRenderSuggestions;
|
|
91
|
-
var onSelect = ref.onSelect;
|
|
92
|
-
var className = ref.className;
|
|
93
|
-
|
|
94
|
-
var currentEngines = useMemo(function () {
|
|
95
|
-
if (!engines) {
|
|
96
|
-
return {
|
|
97
|
-
stops: new StopFinder(undefined, { apiKey: apiKey }),
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
if (apiKey) {
|
|
101
|
-
Object.values(engines).forEach(function (engine) {
|
|
102
|
-
if (engine.setApiKey) {
|
|
103
|
-
engine.setApiKey(apiKey);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
return engines;
|
|
108
|
-
}, [apiKey, engines]);
|
|
109
|
-
|
|
110
|
-
var ref$1 = useState([]);
|
|
111
|
-
var suggestions = ref$1[0];
|
|
112
|
-
var setSuggestions = ref$1[1];
|
|
113
|
-
var ref$2 = useState(initialValue);
|
|
114
|
-
var value = ref$2[0];
|
|
115
|
-
var setValue = ref$2[1];
|
|
116
|
-
|
|
117
|
-
var searchService = useMemo(function () {
|
|
118
|
-
return new SearchService({
|
|
119
|
-
apiKey: apiKey,
|
|
120
|
-
engines: currentEngines,
|
|
121
|
-
setSuggestions: setSuggestions,
|
|
122
|
-
});
|
|
123
|
-
}, [apiKey, currentEngines]);
|
|
124
|
-
|
|
125
|
-
var theme = useMemo(function () {
|
|
126
|
-
return {
|
|
127
|
-
container: (className + "__container"),
|
|
128
|
-
containerOpen: (className + "__container--open"),
|
|
129
|
-
input: (className + "__input"),
|
|
130
|
-
inputOpen: (className + "__input--open"),
|
|
131
|
-
inputFocused: (className + "__input--focused"),
|
|
132
|
-
suggestionsContainer: (className + "__suggestions-container"),
|
|
133
|
-
suggestionsContainerOpen: (className + "__suggestions-container--open"),
|
|
134
|
-
suggestionsList: (className + "__suggestions-list"),
|
|
135
|
-
suggestion: (className + "__suggestion"),
|
|
136
|
-
suggestionFirst: (className + "__suggestion--first"),
|
|
137
|
-
suggestionHighlighted: (className + "__suggestion--highlighted"),
|
|
138
|
-
sectionContainer: (className + "__section-container"),
|
|
139
|
-
sectionContainerFirst: (className + "__section-container--first"),
|
|
140
|
-
sectionTitle: (className + "__section-title"),
|
|
141
|
-
};
|
|
142
|
-
}, [className]);
|
|
143
|
-
|
|
144
|
-
return (
|
|
145
|
-
Object.keys(currentEngines).length > 0 && (
|
|
146
|
-
React.createElement( 'div', { className: "rt-search" },
|
|
147
|
-
React.createElement( Autosuggest, {
|
|
148
|
-
theme: theme, inputProps: Object.assign({}, {autoFocus: true,
|
|
149
|
-
tabIndex: 0,
|
|
150
|
-
onChange: function (e, ref) {
|
|
151
|
-
var newValue = ref.newValue;
|
|
152
|
-
|
|
153
|
-
return setValue(newValue);
|
|
154
|
-
},
|
|
155
|
-
onKeyUp: function (ref) {
|
|
156
|
-
var key = ref.key;
|
|
157
|
-
|
|
158
|
-
if (key === 'Enter') {
|
|
159
|
-
var filtered = suggestions.filter(function (s) {
|
|
160
|
-
return s.items.length > 0;
|
|
161
|
-
});
|
|
162
|
-
if (filtered.length > 0) {
|
|
163
|
-
var ref$1 = filtered[0];
|
|
164
|
-
var items = ref$1.items;
|
|
165
|
-
var section = ref$1.section;
|
|
166
|
-
var targetSuggestion = Object.assign({}, items[0], {section: section});
|
|
167
|
-
setValue(searchService.value(targetSuggestion));
|
|
168
|
-
onSelect(targetSuggestion);
|
|
169
|
-
}
|
|
170
|
-
} else if (
|
|
171
|
-
(key === 'ArrowDown' || key === 'ArrowUp') &&
|
|
172
|
-
typeof searchService.highlightSection === 'function'
|
|
173
|
-
) {
|
|
174
|
-
searchService.highlightSection(); // for improved accessibility
|
|
175
|
-
}
|
|
176
|
-
},
|
|
177
|
-
value: value},
|
|
178
|
-
inputProps), multiSection: true, getSectionSuggestions: function (ref) {
|
|
179
|
-
var items = ref.items;
|
|
180
|
-
var section = ref.section;
|
|
181
|
-
|
|
182
|
-
return items
|
|
183
|
-
? items.map(function (i) {
|
|
184
|
-
return Object.assign({}, i, {section: section});
|
|
185
|
-
})
|
|
186
|
-
: [];
|
|
187
|
-
}, getSuggestionValue: function (suggestion) {
|
|
188
|
-
return searchService.value(suggestion);
|
|
189
|
-
}, onSuggestionsFetchRequested: function (ref) {
|
|
190
|
-
var newValue = ref.value;
|
|
191
|
-
|
|
192
|
-
return searchService.search(newValue);
|
|
193
|
-
}, onSuggestionsClearRequested: function () {
|
|
194
|
-
return setSuggestions([]);
|
|
195
|
-
}, onSuggestionHighlighted: function (ref) {
|
|
196
|
-
var suggestion = ref.suggestion;
|
|
197
|
-
|
|
198
|
-
return onHighlight(suggestion);
|
|
199
|
-
}, onSuggestionSelected: function (e, ref) {
|
|
200
|
-
var suggestion = ref.suggestion;
|
|
201
|
-
|
|
202
|
-
return onSelect(suggestion);
|
|
203
|
-
}, renderSuggestion: function (suggestion) {
|
|
204
|
-
return searchService.render(suggestion);
|
|
205
|
-
}, renderSectionTitle: getRenderSectionTitle(searchService), shouldRenderSuggestions: function (newValue) {
|
|
206
|
-
return shouldRenderSuggestions(newValue);
|
|
207
|
-
}, suggestions: suggestions }),
|
|
208
|
-
value && (
|
|
209
|
-
React.createElement( 'button', {
|
|
210
|
-
type: "button", tabIndex: 0, className: "rt-search-button rt-search-button-clear", onClick: function () {
|
|
211
|
-
return setValue('');
|
|
212
|
-
} },
|
|
213
|
-
React.createElement( FaTimes, null )
|
|
214
|
-
)
|
|
215
|
-
),
|
|
216
|
-
React.createElement( 'button', {
|
|
217
|
-
type: "button", tabIndex: 0, className: "rt-search-button rt-search-button-submit" },
|
|
218
|
-
React.createElement( FaSearch, { focusable: false })
|
|
219
|
-
)
|
|
220
|
-
)
|
|
221
|
-
)
|
|
222
|
-
);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
Search.propTypes = propTypes;
|
|
226
|
-
Search.defaultProps = defaultProps;
|
|
227
|
-
|
|
228
|
-
export default Search;
|
|
229
|
-
|
|
230
|
-
//# sourceMappingURL=Search.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Search.js","sources":["../../../src/components/Search/Search.js"],"sourcesContent":["import PropTypes from 'prop-types';\nimport React, { useMemo, useState } from 'react';\nimport Autosuggest from 'react-autosuggest';\nimport { FaSearch, FaTimes } from 'react-icons/fa';\n\nimport SearchService from './SearchService';\nimport StopFinder from './engines/StopFinder';\n\nconst propTypes = {\n /**\n * Flat object to provide custom search engines: key is the section and value an instance of the Engine class.\n */\n engines: PropTypes.object,\n\n /**\n * A function which will receive the searchService instance and needs to return a render function for the section title, see [react-autosuggest documentation](https://github.com/moroshko/react-autosuggest#render-section-title-prop) for details.\n */\n getRenderSectionTitle: PropTypes.func,\n\n /**\n * Initial value for the search input field.\n */\n initialValue: PropTypes.string,\n\n /**\n * Props for the search input field, see [react-autosuggest documentation](https://github.com/moroshko/react-autosuggest#input-props-prop) for details.\n */\n inputProps: PropTypes.object,\n\n /**\n * Callback function which will be called with the hovered suggestion.\n */\n onHighlight: PropTypes.func,\n\n /**\n * Function to define whether the suggestions are displayed or not.\n * See 'shouldRenderSuggestions' in [react-autosuggest documentation](https://github.com/moroshko/react-autosuggest#input-props-prop) for details.\n */\n shouldRenderSuggestions: PropTypes.func,\n\n /**\n * Callback function which will be called with the selected suggestion.\n */\n onSelect: PropTypes.func,\n\n /**\n * CSS class of the component.\n */\n className: PropTypes.string,\n\n /**\n * Key to access the engine api.\n */\n apiKey: PropTypes.string,\n};\n\nconst defaultProps = {\n apiKey: null,\n engines: null,\n getRenderSectionTitle: () => {\n return () => {\n return null;\n };\n },\n initialValue: '',\n onHighlight: () => {\n return null;\n },\n shouldRenderSuggestions: (newValue) => {\n return newValue.trim().length > 2;\n },\n onSelect: () => {\n return null;\n },\n className: 'rt-search',\n inputProps: {},\n};\n\n/**\n * The Search component renders a text input field which searches for stops\n * using the input string and centers the map on the selected stop.\n */\nfunction Search({\n apiKey,\n engines,\n getRenderSectionTitle,\n initialValue,\n inputProps,\n onHighlight,\n shouldRenderSuggestions,\n onSelect,\n className,\n}) {\n const currentEngines = useMemo(() => {\n if (!engines) {\n return {\n stops: new StopFinder(undefined, { apiKey }),\n };\n }\n if (apiKey) {\n Object.values(engines).forEach((engine) => {\n if (engine.setApiKey) {\n engine.setApiKey(apiKey);\n }\n });\n }\n return engines;\n }, [apiKey, engines]);\n\n const [suggestions, setSuggestions] = useState([]);\n const [value, setValue] = useState(initialValue);\n\n const searchService = useMemo(() => {\n return new SearchService({\n apiKey,\n engines: currentEngines,\n setSuggestions,\n });\n }, [apiKey, currentEngines]);\n\n const theme = useMemo(() => {\n return {\n container: `${className}__container`,\n containerOpen: `${className}__container--open`,\n input: `${className}__input`,\n inputOpen: `${className}__input--open`,\n inputFocused: `${className}__input--focused`,\n suggestionsContainer: `${className}__suggestions-container`,\n suggestionsContainerOpen: `${className}__suggestions-container--open`,\n suggestionsList: `${className}__suggestions-list`,\n suggestion: `${className}__suggestion`,\n suggestionFirst: `${className}__suggestion--first`,\n suggestionHighlighted: `${className}__suggestion--highlighted`,\n sectionContainer: `${className}__section-container`,\n sectionContainerFirst: `${className}__section-container--first`,\n sectionTitle: `${className}__section-title`,\n };\n }, [className]);\n\n return (\n Object.keys(currentEngines).length > 0 && (\n <div className=\"rt-search\">\n <Autosuggest\n theme={theme}\n inputProps={{\n autoFocus: true,\n tabIndex: 0,\n onChange: (e, { newValue }) => {\n return setValue(newValue);\n },\n onKeyUp: ({ key }) => {\n if (key === 'Enter') {\n const filtered = suggestions.filter((s) => {\n return s.items.length > 0;\n });\n if (filtered.length > 0) {\n const { items, section } = filtered[0];\n const targetSuggestion = { ...items[0], section };\n setValue(searchService.value(targetSuggestion));\n onSelect(targetSuggestion);\n }\n } else if (\n (key === 'ArrowDown' || key === 'ArrowUp') &&\n typeof searchService.highlightSection === 'function'\n ) {\n searchService.highlightSection(); // for improved accessibility\n }\n },\n value,\n ...inputProps,\n }}\n multiSection\n getSectionSuggestions={({ items, section }) => {\n return items\n ? items.map((i) => {\n return { ...i, section };\n })\n : [];\n }}\n getSuggestionValue={(suggestion) => {\n return searchService.value(suggestion);\n }}\n onSuggestionsFetchRequested={({ value: newValue }) => {\n return searchService.search(newValue);\n }}\n onSuggestionsClearRequested={() => {\n return setSuggestions([]);\n }}\n onSuggestionHighlighted={({ suggestion }) => {\n return onHighlight(suggestion);\n }}\n onSuggestionSelected={(e, { suggestion }) => {\n return onSelect(suggestion);\n }}\n renderSuggestion={(suggestion) => {\n return searchService.render(suggestion);\n }}\n renderSectionTitle={getRenderSectionTitle(searchService)}\n shouldRenderSuggestions={(newValue) => {\n return shouldRenderSuggestions(newValue);\n }}\n suggestions={suggestions}\n />\n {value && (\n <button\n type=\"button\"\n tabIndex={0}\n className=\"rt-search-button rt-search-button-clear\"\n onClick={() => {\n return setValue('');\n }}\n >\n <FaTimes />\n </button>\n )}\n <button\n type=\"button\"\n tabIndex={0}\n className=\"rt-search-button rt-search-button-submit\"\n >\n <FaSearch focusable={false} />\n </button>\n </div>\n )\n );\n}\n\nSearch.propTypes = propTypes;\nSearch.defaultProps = defaultProps;\n\nexport default Search;\n"],"names":["const"],"mappings":"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"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
.rt-search {
|
|
2
|
-
display: flex;
|
|
3
|
-
font-family: Arial, sans-serif;
|
|
4
|
-
height: 50px;
|
|
5
|
-
width: 350px;
|
|
6
|
-
position: relative;
|
|
7
|
-
|
|
8
|
-
.rt-search__container {
|
|
9
|
-
width: 100%;
|
|
10
|
-
position: relative;
|
|
11
|
-
|
|
12
|
-
.rt-search__input {
|
|
13
|
-
border: 1px solid #515151;
|
|
14
|
-
padding: 0 0 0 1em;
|
|
15
|
-
text-overflow: ellipsis;
|
|
16
|
-
font-size: 1em;
|
|
17
|
-
height: 48px;
|
|
18
|
-
width: calc(100% - 1em);
|
|
19
|
-
|
|
20
|
-
&::-ms-clear {
|
|
21
|
-
display: none;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.rt-search__suggestions-container--open {
|
|
26
|
-
background-color: #fff;
|
|
27
|
-
position: absolute;
|
|
28
|
-
top: calc(100% - 1px);
|
|
29
|
-
width: 100%;
|
|
30
|
-
border: 1px solid #515151;
|
|
31
|
-
z-index: 1;
|
|
32
|
-
|
|
33
|
-
.rt-search__suggestions-list {
|
|
34
|
-
padding: 0;
|
|
35
|
-
margin: 0.5em 0;
|
|
36
|
-
list-style: none;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.rt-search__suggestion {
|
|
40
|
-
padding: 0.5em 1em;
|
|
41
|
-
cursor: pointer;
|
|
42
|
-
color: #515151;
|
|
43
|
-
|
|
44
|
-
&:hover {
|
|
45
|
-
color: #eb0000;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.rt-search-button {
|
|
52
|
-
font-size: 1em;
|
|
53
|
-
cursor: pointer;
|
|
54
|
-
background: none;
|
|
55
|
-
border: none;
|
|
56
|
-
display: flex;
|
|
57
|
-
justify-content: center;
|
|
58
|
-
align-items: center;
|
|
59
|
-
height: 50px;
|
|
60
|
-
padding: 0;
|
|
61
|
-
|
|
62
|
-
svg {
|
|
63
|
-
width: 50px;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
&.rt-search-button-clear {
|
|
67
|
-
position: absolute;
|
|
68
|
-
color: #515151;
|
|
69
|
-
right: 50px;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
&.rt-search-button-submit {
|
|
73
|
-
border: 1px solid #515151;
|
|
74
|
-
background-color: #515151;
|
|
75
|
-
color: #fff;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import renderer from 'react-test-renderer';
|
|
3
|
-
import Search from '.';
|
|
4
|
-
|
|
5
|
-
describe('Search', function () {
|
|
6
|
-
test('matches snapshots.', function () {
|
|
7
|
-
var component = renderer.create(React.createElement( Search, null ));
|
|
8
|
-
expect(component.toJSON()).toMatchSnapshot();
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
// to test: custom props
|
|
13
|
-
// to test: searching
|
|
14
|
-
|
|
15
|
-
//# sourceMappingURL=Search.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Search.test.js","sources":["../../../src/components/Search/Search.test.js"],"sourcesContent":["import React from 'react';\nimport renderer from 'react-test-renderer';\nimport Search from '.';\n\ndescribe('Search', () => {\n test('matches snapshots.', () => {\n const component = renderer.create(<Search />);\n expect(component.toJSON()).toMatchSnapshot();\n });\n});\n\n// to test: custom props\n// to test: searching\n"],"names":["const"],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,MAAM,MAAM,GAAG,CAAC;AACvB;AACA,QAAQ,CAAC,QAAQ,WAAE,GAAM;AACzB,EAAE,IAAI,CAAC,oBAAoB,WAAE,GAAM;AACnC,IAAIA,GAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,qBAAC,YAAM,EAAG,CAAC,CAAC;AAClD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;AACjD,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AACH;AACA;AACA;"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
var SearchService = function SearchService(ref) {
|
|
2
|
-
var apiKey = ref.apiKey;
|
|
3
|
-
var engines = ref.engines;
|
|
4
|
-
var setSuggestions = ref.setSuggestions;
|
|
5
|
-
|
|
6
|
-
this.engines = engines;
|
|
7
|
-
this.setSuggestions = setSuggestions;
|
|
8
|
-
Object.entries(this.engines).forEach(function (ref) {
|
|
9
|
-
var e = ref[1];
|
|
10
|
-
|
|
11
|
-
return e.setApiKey(apiKey);
|
|
12
|
-
});
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
SearchService.prototype.countItems = function countItems (section) {
|
|
16
|
-
return this.engines[section].items && this.engines[section].items.length;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
SearchService.prototype.render = function render (item) {
|
|
20
|
-
return this.engines[item.section].render(item);
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
SearchService.prototype.value = function value (item) {
|
|
24
|
-
return this.engines[item.section].constructor.value(item);
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
SearchService.prototype.search = function search (value) {
|
|
28
|
-
var this$1 = this;
|
|
29
|
-
|
|
30
|
-
Object.entries(this.engines).forEach(function (ref, position) {
|
|
31
|
-
var section = ref[0];
|
|
32
|
-
var engine = ref[1];
|
|
33
|
-
|
|
34
|
-
engine.search(value).then(function (items) {
|
|
35
|
-
engine.setItems(items);
|
|
36
|
-
this$1.upsert(section, engine.getItems(items), position);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
SearchService.prototype.sectionCollapsed = function sectionCollapsed (section) {
|
|
42
|
-
return this.engines[section].collapsed;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
SearchService.prototype.toggleSection = function toggleSection (toggledSection) {
|
|
46
|
-
var this$1 = this;
|
|
47
|
-
|
|
48
|
-
Object.entries(this.engines).forEach(function (ref, position) {
|
|
49
|
-
var section = ref[0];
|
|
50
|
-
var engine = ref[1];
|
|
51
|
-
|
|
52
|
-
engine.collapse(!(section === toggledSection && engine.collapsed));
|
|
53
|
-
this$1.upsert(section, engine.getItems(), position);
|
|
54
|
-
});
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
SearchService.prototype.upsert = function upsert (section, items, position) {
|
|
58
|
-
this.setSuggestions(function (oldSuggestions) {
|
|
59
|
-
var sectionIndex = oldSuggestions.findIndex(function (s) {
|
|
60
|
-
return s.section === section;
|
|
61
|
-
});
|
|
62
|
-
var start = sectionIndex === -1 ? position : sectionIndex;
|
|
63
|
-
var deleteCount = sectionIndex === -1 ? 0 : 1;
|
|
64
|
-
var newSuggestions = [].concat( oldSuggestions );
|
|
65
|
-
newSuggestions.splice(start, deleteCount, { section: section, items: items });
|
|
66
|
-
return newSuggestions;
|
|
67
|
-
});
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
export default SearchService;
|
|
71
|
-
|
|
72
|
-
//# sourceMappingURL=SearchService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SearchService.js","sources":["../../../src/components/Search/SearchService.js"],"sourcesContent":["class SearchService {\n constructor({ apiKey, engines, setSuggestions }) {\n this.engines = engines;\n this.setSuggestions = setSuggestions;\n Object.entries(this.engines).forEach(([, e]) => {\n return e.setApiKey(apiKey);\n });\n }\n\n countItems(section) {\n return this.engines[section].items && this.engines[section].items.length;\n }\n\n render(item) {\n return this.engines[item.section].render(item);\n }\n\n value(item) {\n return this.engines[item.section].constructor.value(item);\n }\n\n search(value) {\n Object.entries(this.engines).forEach(([section, engine], position) => {\n engine.search(value).then((items) => {\n engine.setItems(items);\n this.upsert(section, engine.getItems(items), position);\n });\n });\n }\n\n sectionCollapsed(section) {\n return this.engines[section].collapsed;\n }\n\n toggleSection(toggledSection) {\n Object.entries(this.engines).forEach(([section, engine], position) => {\n engine.collapse(!(section === toggledSection && engine.collapsed));\n this.upsert(section, engine.getItems(), position);\n });\n }\n\n upsert(section, items, position) {\n this.setSuggestions((oldSuggestions) => {\n const sectionIndex = oldSuggestions.findIndex((s) => {\n return s.section === section;\n });\n const start = sectionIndex === -1 ? position : sectionIndex;\n const deleteCount = sectionIndex === -1 ? 0 : 1;\n const newSuggestions = [...oldSuggestions];\n newSuggestions.splice(start, deleteCount, { section, items });\n return newSuggestions;\n });\n }\n}\n\nexport default SearchService;\n"],"names":["this","const"],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
var Engine = function Engine() {
|
|
2
|
-
this.collapsed = true;
|
|
3
|
-
this.items = [];
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
Engine.prototype.collapse = function collapse (collapsed) {
|
|
7
|
-
this.collapsed = collapsed;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
Engine.prototype.getItems = function getItems () {
|
|
11
|
-
return this.collapsed ? this.items.slice(0, 2) : this.items;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
Engine.prototype.setApiKey = function setApiKey (apiKey) {
|
|
15
|
-
this.apiKey = apiKey;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
Engine.prototype.setItems = function setItems (items) {
|
|
19
|
-
if ( items === void 0 ) items = [];
|
|
20
|
-
|
|
21
|
-
this.items = items;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export default Engine;
|
|
25
|
-
|
|
26
|
-
//# sourceMappingURL=Engine.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Engine.js","sources":["../../../../src/components/Search/engines/Engine.js"],"sourcesContent":["class Engine {\n constructor() {\n this.collapsed = true;\n this.items = [];\n }\n\n collapse(collapsed) {\n this.collapsed = collapsed;\n }\n\n getItems() {\n return this.collapsed ? this.items.slice(0, 2) : this.items;\n }\n\n setApiKey(apiKey) {\n this.apiKey = apiKey;\n }\n\n setItems(items = []) {\n this.items = items;\n }\n}\n\nexport default Engine;\n"],"names":[],"mappings":"AAAA,IAAM,MAAM,GACV,eAAW,GAAG;AAChB,EAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1B,EAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAClB,EAAC;AACH;iBACE,6BAAQ,CAAC,SAAS,EAAE;AACtB,EAAI,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B,EAAC;AACH;iBACE,6BAAQ,GAAG;AACb,EAAI,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9D,EAAC;AACH;iBACE,+BAAS,CAAC,MAAM,EAAE;AACpB,EAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,EAAC;AACH;iBACE,6BAAQ,CAAC,KAAU,EAAE;iCAAP,GAAG;AAAK;AACxB,EAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,EACD;AACD;AACA,eAAe,MAAM,CAAC;"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import { StopsAPI } from 'mobility-toolbox-js/api';
|
|
4
|
-
import Engine from './Engine';
|
|
5
|
-
|
|
6
|
-
var StopFinder = /*@__PURE__*/(function (Engine) {
|
|
7
|
-
function StopFinder(endpoint, options) {
|
|
8
|
-
if ( endpoint === void 0 ) endpoint = 'https://api.geops.io/stops/v1/';
|
|
9
|
-
if ( options === void 0 ) options = {};
|
|
10
|
-
|
|
11
|
-
Engine.call(this);
|
|
12
|
-
this.options = options;
|
|
13
|
-
// apiKey is passed as key in StopsAPI, delete to avoid duplicates.
|
|
14
|
-
delete this.options.apiKey;
|
|
15
|
-
this.api = new StopsAPI({
|
|
16
|
-
url: endpoint,
|
|
17
|
-
apiKey: options.apiKey,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if ( Engine ) StopFinder.__proto__ = Engine;
|
|
22
|
-
StopFinder.prototype = Object.create( Engine && Engine.prototype );
|
|
23
|
-
StopFinder.prototype.constructor = StopFinder;
|
|
24
|
-
|
|
25
|
-
StopFinder.prototype.search = function search (value) {
|
|
26
|
-
return this.api.search(Object.assign({}, {q: encodeURIComponent(value)},
|
|
27
|
-
this.options));
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
StopFinder.prototype.setApiKey = function setApiKey (apiKey) {
|
|
31
|
-
this.api.apiKey = apiKey;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
StopFinder.prototype.render = function render (item) {
|
|
35
|
-
return React.createElement( 'div', null, item.properties.name );
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
StopFinder.value = function value (item) {
|
|
39
|
-
return item.properties.name;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
return StopFinder;
|
|
43
|
-
}(Engine));
|
|
44
|
-
|
|
45
|
-
export default StopFinder;
|
|
46
|
-
|
|
47
|
-
//# sourceMappingURL=StopFinder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StopFinder.js","sources":["../../../../src/components/Search/engines/StopFinder.js"],"sourcesContent":["import React from 'react';\n\nimport { StopsAPI } from 'mobility-toolbox-js/api';\nimport Engine from './Engine';\n\nclass StopFinder extends Engine {\n constructor(endpoint = 'https://api.geops.io/stops/v1/', options = {}) {\n super();\n this.options = options;\n // apiKey is passed as key in StopsAPI, delete to avoid duplicates.\n delete this.options.apiKey;\n this.api = new StopsAPI({\n url: endpoint,\n apiKey: options.apiKey,\n });\n }\n\n search(value) {\n return this.api.search({\n q: encodeURIComponent(value),\n ...this.options,\n });\n }\n\n setApiKey(apiKey) {\n this.api.apiKey = apiKey;\n }\n\n render(item) {\n return <div>{item.properties.name}</div>;\n }\n\n static value(item) {\n return item.properties.name;\n }\n}\n\nexport default StopFinder;\n"],"names":["super"],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B;AACA,SAAS,QAAQ,QAAQ,yBAAyB,CAAC;AACnD,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B;AACA,IAAM,UAAU,GAAe;EAC7B,mBAAW,CAAC,QAA2C,EAAE,OAAY,EAAE;uCAAnD,GAAG;qCAAyC,GAAG;AAAK;AAC1E,IAAIA,WAAK,KAAC,CAAC,CAAC;AACZ,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B;AACA,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC/B,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC;AAC5B,MAAM,GAAG,EAAE,QAAQ;AACnB,MAAM,MAAM,EAAE,OAAO,CAAC,MAAM;AAC5B,KAAK,CAAC,CAAC;AACP;;;;gDAAG;AACH;AACA,uBAAE,yBAAM,CAAC,KAAK,EAAE;AAChB,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,mBACrB,CAAC,EAAE,kBAAkB,CAAC,KAAK,EAAC;AAClC,MAAS,IAAI,CAAC,OAAO,CAChB,CAAC,CAAC;AACP,IAAG;AACH;AACA,uBAAE,+BAAS,CAAC,MAAM,EAAE;AACpB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,IAAG;AACH;AACA,uBAAE,yBAAM,CAAC,IAAI,EAAE;AACf,IAAI,OAAO,sBAAC,YAAK,IAAI,CAAC,UAAU,CAAC,IAAK,EAAM,CAAC;AAC7C,IAAG;AACH;AACA,EAAE,WAAO,uBAAK,CAAC,IAAI,EAAE;AACrB,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAChC;;;EA7ByB,SA8BxB;AACD;AACA,eAAe,UAAU,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Search/index.js"],"sourcesContent":["export { default as Engine } from './engines/Engine';\nexport { default as StopFinder } from './engines/StopFinder';\n\nexport { default } from './Search';\n"],"names":[],"mappings":"AAAA,SAAS,OAAO,IAAI,MAAM,QAAQ,kBAAkB,CAAC;AACrD,SAAS,OAAO,IAAI,UAAU,QAAQ,sBAAsB,CAAC;AAC7D;AACA,SAAS,OAAO,QAAQ,UAAU,CAAC;"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import renderer from 'react-test-renderer';
|
|
3
|
-
import { Map } from 'ol';
|
|
4
|
-
import StopsFinder from '.';
|
|
5
|
-
|
|
6
|
-
describe('StopsFinder', function () {
|
|
7
|
-
var map;
|
|
8
|
-
|
|
9
|
-
beforeEach(function () {
|
|
10
|
-
map = new Map({});
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
test('matches snapshots.', function () {
|
|
14
|
-
var component = renderer.create(React.createElement( StopsFinder, { map: map }));
|
|
15
|
-
expect(component.toJSON()).toMatchSnapshot();
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
//# sourceMappingURL=StopsFinder.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StopsFinder.test.js","sources":["../../../src/components/StopsFinder/StopsFinder.test.js"],"sourcesContent":["import React from 'react';\nimport renderer from 'react-test-renderer';\nimport { Map } from 'ol';\nimport StopsFinder from '.';\n\ndescribe('StopsFinder', () => {\n let map;\n\n beforeEach(() => {\n map = new Map({});\n });\n\n test('matches snapshots.', () => {\n const component = renderer.create(<StopsFinder map={map} />);\n expect(component.toJSON()).toMatchSnapshot();\n });\n});\n"],"names":["let","const"],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,SAAS,GAAG,QAAQ,IAAI,CAAC;AACzB,OAAO,WAAW,MAAM,GAAG,CAAC;AAC5B;AACA,QAAQ,CAAC,aAAa,WAAE,GAAM;AAC9B,EAAEA,GAAG,CAAC,GAAG,CAAC;AACV;AACA,EAAE,UAAU,UAAC,GAAM;AACnB,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;AACtB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,CAAC,oBAAoB,WAAE,GAAM;AACnC,IAAIC,GAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,qBAAC,cAAW,CAAC,KAAK,KAAI,CAAG,CAAC,CAAC;AACjE,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;AACjD,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;"}
|