Skip to content

Commit

Permalink
Merge branch 'master' into 142-vis-options-on-dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
FredrikAugust committed Apr 28, 2021
2 parents 47c8a8c + 947d2c8 commit 57aa1a5
Show file tree
Hide file tree
Showing 7 changed files with 168 additions and 6 deletions.
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
"@types/classnames": "^2.2.11",
"@types/faker": "^5.1.7",
"@types/jest": "^26.0.15",
"@types/lodash.debounce": "^4.0.6",
"@types/node": "^12.0.0",
"@types/react": "^16.9.53",
"@types/react-dom": "^16.9.8",
Expand All @@ -57,6 +58,7 @@
"evergreen-ui": "^5.1.2",
"faker": "^5.4.0",
"graphql": "^15.4.0",
"lodash.debounce": "^4.0.8",
"plotly.js": "^1.58.4",
"postcss": "^7",
"react": "^17.0.1",
Expand Down
82 changes: 82 additions & 0 deletions src/components/atoms/LatLonFromLocationSearch.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import React, { ChangeEvent, Dispatch, SetStateAction, useEffect, useState } from 'react';
import { MetAPIVariables } from '../../queries/metApi';
import { Button, Combobox, FormField, TextInputField, toaster } from 'evergreen-ui';
import { Address } from '../../types/Address';
import debounce from 'lodash.debounce';

type LatLonInputSetProps = {
state: MetAPIVariables;
setState: Dispatch<SetStateAction<MetAPIVariables>>;
};

type LabeledPosition = {
label: string;
lat: number;
lon: number;
};

const LatLonFromLocationSearch: React.FC<LatLonInputSetProps> = (props) => {
const [state, setState] = useState<{ lat: string; lon: string }>({
lat: String(props.state.lat),
lon: String(props.state.lon),
});

const [locations, setLocations] = useState<LabeledPosition[]>([]);

// To avoid problems with difficult digit entry for user
useEffect(() => {
props.setState({ lat: Number(state.lat), lon: Number(state.lon) });
}, [state]);

const update = (key: keyof typeof state) => (e: ChangeEvent<HTMLInputElement>) =>
setState((prevState) => ({ ...prevState, [key]: e.target.value }));

const setToMyLocation = () => {
navigator.geolocation.getCurrentPosition(
(position) => {
setState({ lat: String(position.coords.latitude), lon: String(position.coords.longitude) });
},
() => {
toaster.warning('Du må tillate lokasjonstjenester for at denne tjenesten skal fungere.');
},
);
};

const onInputChange = async (e: React.ChangeEvent<HTMLInputElement>): Promise<void> => {
const rawLocationData = await fetch(
`https://ws.geonorge.no/adresser/v1/sok?sok=${e.target.value}&treffPerSide=10`,
);
const locationData: { adresser: Array<Address> } = await rawLocationData.json();
const locationList = locationData.adresser.map((address) => {
return {
label: `${address.adressetekst} (${address.kommunenavn})`,
lat: address.representasjonspunkt.lat,
lon: address.representasjonspunkt.lon,
};
});
setLocations(locationList);
};

const selectionChanged = (address: LabeledPosition | null): void => {
if (address === null) return;
setState({ lat: address.lat.toString(), lon: address.lon.toString() });
};

return (
<>
<FormField label="Adresse" marginBottom="24px">
<Combobox
items={locations}
placeholder="Adresse"
onInput={debounce(onInputChange, 500)}
itemToString={(item) => item?.label ?? ''}
onChange={selectionChanged}
/>
</FormField>
<TextInputField disabled={true} value={state.lat} label="Breddegrad" onChange={update('lat')} />
<TextInputField disabled={true} value={state.lon} label="Lengdegrad" onChange={update('lon')} />
<Button onClick={setToMyLocation}>Sett til min posisjon</Button>
</>
);
};
export default LatLonFromLocationSearch;
4 changes: 2 additions & 2 deletions src/components/atoms/SelectTag.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ const SelectTag: React.FC<SelectTagProps> = ({ addTag }) => {
const { data, error, loading } = useQuery<AllTags>(TAGS);
const tags = data?.allMetadata.map((e) => e.tags).flat(1);

if (error || !tags) return <ErrorMessage message="Noe gikk galt, finner ikke filter" />;
if (error) return <ErrorMessage message="Noe gikk galt, finner ikke filter" />;

if (loading) return <Loading size={30} />;
if (loading || !tags) return <Loading size={30} />;

return (
<>
Expand Down
4 changes: 2 additions & 2 deletions src/components/molecules/DataSourceOptions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import { Heading, Pane } from 'evergreen-ui';
import { DataSourceID, DataSourceVariables } from '../../types/DataSource';
import MunicipalityEditor from './MunicipalityEditor';
import { SSBPopulationVariables } from '../../queries/populationInNorway';
import LatLonInputSet from '../atoms/LatLonInputSet';
import { MetAPIVariables } from '../../queries/metApi';
import LatLonFromLocationSearch from '../atoms/LatLonFromLocationSearch';

type DataSourceOptionsProps = {
state: DataSourceVariables;
Expand All @@ -25,7 +25,7 @@ const DataSourceOptions: React.FC<DataSourceOptionsProps> = (props) => {
);
case DataSourceID.MET_API_FORECAST:
return (
<LatLonInputSet
<LatLonFromLocationSearch
state={props.state as MetAPIVariables}
setState={props.setState as Dispatch<SetStateAction<MetAPIVariables>>}
/>
Expand Down
42 changes: 41 additions & 1 deletion src/queries/populationInNorway.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,47 @@ import { gql } from '@apollo/client';
export const POPULATION_IN_NORWAY = gql`
query($municipalities: [String]) {
populationsInNorway {
dataset(years: ["2014", "2015", "2016", "2017", "2018", "2019", "2020"], municipalities: $municipalities) {
dataset(
years: [
"1986"
"1987"
"1988"
"1989"
"1990"
"1991"
"1992"
"1993"
"1994"
"1995"
"1996"
"1997"
"1998"
"1999"
"2000"
"2001"
"2002"
"2003"
"2004"
"2005"
"2006"
"2007"
"2008"
"2009"
"2010"
"2011"
"2012"
"2013"
"2014"
"2015"
"2016"
"2017"
"2018"
"2019"
"2020"
"2021"
]
municipalities: $municipalities
) {
value {
populationForYear {
population
Expand Down
26 changes: 26 additions & 0 deletions src/types/Address.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
export type Address = {
adressekode: number;
adressenavn: string;
adressetekst: string;
adressetekstutenadressetilleggsnavn: string;
adressetilleggsnavn: string;
bokstav: string;
bruksenhetsnummer: number[];
bruksnummer: number;
festenummer: number;
gardsnummer: number;
kommunenavn: string;
kommunenummer: string;
nummer: number;
objtype: string;
oppdateringsdato: Date;
postnummer: number;
poststed: string;
representasjonspunkt: {
epsg: string;
lat: number;
lon: number;
};
stedfestingverifisert: boolean;
undernummer: number;
};
14 changes: 13 additions & 1 deletion yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3213,6 +3213,18 @@
resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=

"@types/lodash.debounce@^4.0.6":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@types/lodash.debounce/-/lodash.debounce-4.0.6.tgz#c5a2326cd3efc46566c47e4c0aa248dc0ee57d60"
integrity sha512-4WTmnnhCfDvvuLMaF3KV4Qfki93KebocUF45msxhYyjMttZDQYzHkO639ohhk8+oco2cluAFL3t5+Jn4mleylQ==
dependencies:
"@types/lodash" "*"

"@types/lodash@*":
version "4.14.168"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008"
integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==

"@types/markdown-to-jsx@^6.11.0":
version "6.11.3"
resolved "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.3.tgz"
Expand Down Expand Up @@ -12316,7 +12328,7 @@ lodash.clonedeep@4.5.0:

lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=

lodash.flattendeep@^4.4.0:
Expand Down

0 comments on commit 57aa1a5

Please sign in to comment.