|
7 | 7 | import AutoComplete from 'simple-svelte-autocomplete';
|
8 | 8 | import Options from './Options.svelte';
|
9 | 9 | import Legend from './Legend.svelte';
|
| 10 | + import Banner from './Banner.svelte'; |
10 | 11 | import Time from './Time.svelte';
|
11 | 12 | import Graph from './Graph/Graph.svelte';
|
12 | 13 | import GraphContainer from './Graph/GraphContainer.svelte';
|
|
33 | 34 |
|
34 | 35 | export let isIE, graphShowStatus, toggleGraphShowStatus;
|
35 | 36 |
|
| 37 | + let searchErrorComponent; |
36 | 38 | let parseTime = d3.timeParse('%Y%m%d');
|
37 | 39 | let formatTimeWithoutYear = d3.timeFormat('%B %d');
|
38 | 40 |
|
|
59 | 61 | let megaHoveredId;
|
60 | 62 | let clickedId;
|
61 | 63 | let megaClickedId;
|
62 |
| - let state_lst = []; |
63 |
| - let county_lst = []; |
64 |
| - let msa_lst = []; |
65 |
| -
|
66 | 64 | let selectedRegion;
|
| 65 | +
|
67 | 66 | $: region_lst = [];
|
68 | 67 | $: loaded = false;
|
| 68 | + $: invalid_search = false; |
69 | 69 | $: currentSensorTooltip = $sensorMap.get($currentSensor).mapTitleText;
|
70 | 70 |
|
71 | 71 | var dict = {
|
|
911 | 911 | '&autocomplete=false&country=us&types=place%2Cregion',
|
912 | 912 | ).then(d => d.json());
|
913 | 913 | }
|
| 914 | + function get_zoom_query(selectedRegion) { |
| 915 | + let zoom_level; |
| 916 | + if (selectedRegion['level'] === 'county') { |
| 917 | + zoom_level = 6.5; |
| 918 | + } else if (selectedRegion['level'] === 'msa') { |
| 919 | + zoom_level = 6; |
| 920 | + } else { |
| 921 | + zoom_level = 5; |
| 922 | + } |
| 923 | + var long_offset = 0; |
| 924 | + var lat_offset = 0; |
| 925 | + var query = selectedRegion['display_name']; |
| 926 | + if (selectedRegion['id'] === '72' || selectedRegion['id'].substring(0, 2) === '72') { |
| 927 | + query = 'Florida'; |
| 928 | + long_offset = 6; |
| 929 | + lat_offset = -3; |
| 930 | + } else if (selectedRegion['id'].substring(0, 2) == '02') { |
| 931 | + query = 'Alaska'; |
| 932 | + zoom_level = 6; |
| 933 | + } |
| 934 | + return [query, zoom_level, long_offset, lat_offset]; |
| 935 | + } |
| 936 | +
|
| 937 | + function search_element(selectedRegion) { |
| 938 | + let has_value_flag = false; |
| 939 | + const levels_avail = $sensorMap.get($currentSensor).levels; |
| 940 | + for (var i = 0; i < levels_avail.length; i++) { |
| 941 | + if (selectedRegion['level'] === levels_avail[i]) { |
| 942 | + has_value_flag = true; |
| 943 | + break; |
| 944 | + } |
| 945 | + } |
| 946 | + if (!has_value_flag) { |
| 947 | + invalid_search = true; |
| 948 | + searchErrorComponent.count(); |
| 949 | + } else { |
| 950 | + if (selectedRegion['level'] !== $currentLevel) { |
| 951 | + currentDataReadyOnMap.set(false); |
| 952 | + currentLevel.set(selectedRegion['level']); |
| 953 | + } |
| 954 | + if (clickedId) { |
| 955 | + map.setFeatureState({ source: $currentLevel, id: clickedId }, { select: false }); |
| 956 | + } |
| 957 | + if (megaClickedId) { |
| 958 | + map.setFeatureState({ source: 'mega-county', id: megaClickedId }, { select: false }); |
| 959 | + } |
| 960 | + megaClickedId = null; |
| 961 | + currentRegionName.set(selectedRegion['name']); |
| 962 | + currentRegion.set(selectedRegion['property_id']); |
| 963 | + clickedId = parseInt(selectedRegion['id']); |
| 964 | + map.setFeatureState({ source: $currentLevel, id: clickedId }, { select: true }); |
| 965 | + const search_info = get_zoom_query(selectedRegion); |
| 966 | + const query = search_info[0]; |
| 967 | + const zoom_level = search_info[1]; |
| 968 | + const long_offset = search_info[2]; |
| 969 | + const lat_offset = search_info[3]; |
| 970 | + geocode(query).then(d => { |
| 971 | + var coords = projectionMercartor.invert(projection(d.features[0].center)); |
| 972 | + if (selectedRegion['property_id'] === 'PR' || selectedRegion['id'].substring(0, 2) === '72') { |
| 973 | + coords[0] += long_offset; |
| 974 | + coords[1] += lat_offset; |
| 975 | + } |
| 976 | + map.flyTo({ center: coords, zoom: zoom_level, essential: true }); |
| 977 | + }); |
| 978 | + } |
| 979 | + } |
914 | 980 | </script>
|
915 | 981 |
|
916 | 982 | <style>
|
|
1015 | 1081 | height: 40%;
|
1016 | 1082 | }
|
1017 | 1083 |
|
| 1084 | + .invalid_search-container { |
| 1085 | + position: absolute; |
| 1086 | + transition: opacity 0.3s ease-in-out; |
| 1087 | + z-index: 1003; |
| 1088 | + top: 12px; |
| 1089 | + width: 250px; |
| 1090 | + background-color: rgba(255, 255, 255, 0.9); |
| 1091 | + left: 0; |
| 1092 | + right: 0; |
| 1093 | + margin-left: auto; |
| 1094 | + margin-right: auto; |
| 1095 | + } |
| 1096 | +
|
1018 | 1097 | .time-container {
|
1019 | 1098 | position: absolute;
|
1020 | 1099 | bottom: 12px;
|
|
1043 | 1122 | minCharactersToSearch="2"
|
1044 | 1123 | onChange={_ => {
|
1045 | 1124 | if (typeof selectedRegion !== 'undefined') {
|
1046 |
| - if (selectedRegion['level'] !== $currentLevel) { |
1047 |
| - currentDataReadyOnMap.set(false); |
1048 |
| - currentLevel.set(selectedRegion['level']); |
1049 |
| - } |
1050 |
| - if (clickedId) { |
1051 |
| - map.setFeatureState({ source: $currentLevel, id: clickedId }, { select: false }); |
1052 |
| - } |
1053 |
| - if (megaClickedId) { |
1054 |
| - map.setFeatureState({ source: 'mega-county', id: megaClickedId }, { select: false }); |
1055 |
| - } |
1056 |
| - megaClickedId = null; |
1057 |
| - currentRegionName.set(selectedRegion['name']); |
1058 |
| - currentRegion.set(selectedRegion['property_id']); |
1059 |
| - clickedId = parseInt(selectedRegion['id']); |
1060 |
| - map.setFeatureState({ source: $currentLevel, id: clickedId }, { select: true }); |
1061 |
| - let zoom_level; |
1062 |
| - if (selectedRegion['level'] === 'county') { |
1063 |
| - zoom_level = 6.5; |
1064 |
| - } else if (selectedRegion['level'] === 'msa') { |
1065 |
| - zoom_level = 6; |
1066 |
| - } else { |
1067 |
| - zoom_level = 5; |
1068 |
| - } |
1069 |
| - var long_offset = 0; |
1070 |
| - var lat_offset = 0; |
1071 |
| - var query = selectedRegion['display_name']; |
1072 |
| - if (selectedRegion['id'] === '72' || selectedRegion['id'].substring(0, 2) === '72') { |
1073 |
| - query = 'Florida'; |
1074 |
| - long_offset = 6; |
1075 |
| - lat_offset = -3; |
1076 |
| - } else if (selectedRegion['id'].substring(0, 2) == '02') { |
1077 |
| - query = 'Alaska'; |
1078 |
| - zoom_level = 6; |
1079 |
| - } |
1080 |
| - geocode(query).then(d => { |
1081 |
| - var coords = projectionMercartor.invert(projection(d.features[0].center)); |
1082 |
| - if (selectedRegion['property_id'] === 'PR' || selectedRegion['id'].substring(0, 2) === '72') { |
1083 |
| - coords[0] += long_offset; |
1084 |
| - coords[1] += lat_offset; |
1085 |
| - } |
1086 |
| - map.flyTo({ center: coords, zoom: zoom_level, essential: true }); |
1087 |
| - }); |
| 1125 | + search_element(selectedRegion); |
1088 | 1126 | }
|
1089 | 1127 | }} />
|
1090 | 1128 | </div>
|
|
1098 | 1136 | <Legend />
|
1099 | 1137 | </div>
|
1100 | 1138 |
|
| 1139 | + <div class="invalid_search-container"> |
| 1140 | + <Banner bind:this={searchErrorComponent} /> |
| 1141 | + </div> |
| 1142 | + |
1101 | 1143 | <div class="state-buttons-holder">
|
1102 | 1144 | <button
|
1103 | 1145 | aria-label="show entire map"
|
|
0 commit comments