From 5093c7448eab1960d36ba6265b31f84bd1a77912 Mon Sep 17 00:00:00 2001 From: Tom Ridd Date: Fri, 19 Nov 2021 02:52:23 +0000 Subject: [PATCH 01/13] Fix quick routes Signed-off-by: Tom Ridd --- ARCHITECTURE.md | 19 +++ babel.config.js => babel.config.cjs | 0 jest.config.js => jest.config.cjs | 0 package-lock.json | 172 ++++++++++++------------- src/model/config.js | 32 +++++ src/ui/{ => map}/Map.svelte | 4 +- src/ui/map/MapBoundariesLayer.svelte | 185 +++++++++++++++++++++++++++ src/ui/map/MapDataLayer.svelte | 185 +++++++++++++++++++++++++++ src/ui/map/MapLegacyComponent.svelte | 95 ++++++++++++++ src/ui/map/MapLegacyLadLayer.svelte | 50 ++++++++ src/ui/map/MapLegacyLayer.svelte | 185 +++++++++++++++++++++++++++ src/ui/map/MapLegacyLsoaLayer.svelte | 49 +++++++ 12 files changed, 888 insertions(+), 88 deletions(-) create mode 100644 ARCHITECTURE.md rename babel.config.js => babel.config.cjs (100%) rename jest.config.js => jest.config.cjs (100%) create mode 100644 src/model/config.js rename src/ui/{ => map}/Map.svelte (92%) create mode 100644 src/ui/map/MapBoundariesLayer.svelte create mode 100644 src/ui/map/MapDataLayer.svelte create mode 100644 src/ui/map/MapLegacyComponent.svelte create mode 100644 src/ui/map/MapLegacyLadLayer.svelte create mode 100644 src/ui/map/MapLegacyLayer.svelte create mode 100644 src/ui/map/MapLegacyLsoaLayer.svelte diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md new file mode 100644 index 00000000..a0bbe967 --- /dev/null +++ b/ARCHITECTURE.md @@ -0,0 +1,19 @@ +# Census-Atlas architecture + +A prototype for exploring neighbourhood level Census data tables on a map. + +## Svelte architecture + +### Presentation layer ________________ +Files: *.svelte +Responsibilities: Displaying the current state of the app according to the designs from UI/UX + +### Model layer ______________________ +Files: *Store.js +Responsibilities: Storing the current state of the app. Provide action methods to update state. + +### Data layer ________________________ +Files: *Service.js +Responsibilities: Fetch data to update the model + +`npm run storybook` – fires up [Storybook](https://storybook.js.org/docs/react/writing-stories/introduction) diff --git a/babel.config.js b/babel.config.cjs similarity index 100% rename from babel.config.js rename to babel.config.cjs diff --git a/jest.config.js b/jest.config.cjs similarity index 100% rename from jest.config.js rename to jest.config.cjs diff --git a/package-lock.json b/package-lock.json index f2659438..06f3dee7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1199,9 +1199,9 @@ } }, "@babel/runtime-corejs3": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.0.tgz", - "integrity": "sha512-Oi2qwQ21X7/d9gn3WiwkDTJmq3TQtYNz89lRnoFy8VeZpWlsyXvzSwiRrRZ8cXluvSwqKxqHJ6dBd9Rv+p0ZGQ==", + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz", + "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==", "dev": true, "requires": { "core-js-pure": "^3.19.0", @@ -5868,9 +5868,9 @@ "dev": true }, "@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", + "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", "dev": true }, "@types/pretty-hrtime": { @@ -12347,17 +12347,6 @@ "@jest/core": "^27.3.1", "import-local": "^3.0.2", "jest-cli": "^27.3.1" - } - }, - "jest-changed-files": { - "version": "27.3.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz", - "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "execa": "^5.0.0", - "throat": "^6.0.1" }, "dependencies": { "@jest/types": { @@ -12407,6 +12396,40 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-cli": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz", + "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==", + "dev": true, + "requires": { + "@jest/core": "^27.3.1", + "@jest/test-result": "^27.3.1", + "@jest/types": "^27.2.5", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.3.1", + "jest-util": "^27.3.1", + "jest-validate": "^27.3.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } + }, + "jest-util": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz", + "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==", + "dev": true, + "requires": { + "@jest/types": "^27.2.5", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12418,30 +12441,14 @@ } } }, - "jest-circus": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz", - "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==", + "jest-changed-files": { + "version": "27.3.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz", + "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==", "dev": true, "requires": { - "@jest/environment": "^27.3.1", - "@jest/test-result": "^27.3.1", "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.3.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.3.1", - "jest-matcher-utils": "^27.3.1", - "jest-message-util": "^27.3.1", - "jest-runtime": "^27.3.1", - "jest-snapshot": "^27.3.1", - "jest-util": "^27.3.1", - "pretty-format": "^27.3.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", + "execa": "^5.0.0", "throat": "^6.0.1" }, "dependencies": { @@ -12492,40 +12499,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-util": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz", - "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", - "picomatch": "^2.2.3" - } - }, - "pretty-format": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", - "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12537,24 +12510,31 @@ } } }, - "jest-cli": { + "jest-circus": { "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz", - "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz", + "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==", "dev": true, "requires": { - "@jest/core": "^27.3.1", + "@jest/environment": "^27.3.1", "@jest/test-result": "^27.3.1", "@jest/types": "^27.2.5", + "@types/node": "*", "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.3.1", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.3.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-runtime": "^27.3.1", + "jest-snapshot": "^27.3.1", "jest-util": "^27.3.1", - "jest-validate": "^27.3.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" + "pretty-format": "^27.3.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" }, "dependencies": { "@jest/types": { @@ -12618,6 +12598,26 @@ "picomatch": "^2.2.3" } }, + "pretty-format": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", + "dev": true, + "requires": { + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14507,9 +14507,9 @@ } }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", "dev": true }, "chalk": { diff --git a/src/model/config.js b/src/model/config.js new file mode 100644 index 00000000..f9134bb4 --- /dev/null +++ b/src/model/config.js @@ -0,0 +1,32 @@ +export default { + legacy: { + geography: "TYPE298", + mapstyle: "https://bothness.github.io/ons-basemaps/data/style-omt.json", + tabledata: "https://bothness.github.io/census-atlas/data/indicators.json", + ladtopo: { + url: "https://bothness.github.io/census-atlas/data/lad_boundaries_2020.json", + layer: "LA2020EW", + code: "AREACD", + name: "AREANM", + }, + lsoabldg: { + url: "https://cdn.ons.gov.uk/maptiles/buildings/v1/{z}/{x}/{y}.pbf", + layer: "buildings", + code: "lsoa11cd", + }, + lsoabounds: { + url: "https://cdn.ons.gov.uk/maptiles/administrative/lsoa/v2/boundaries/{z}/{x}/{y}.pbf", + layer: "lsoa", + code: "areacd", + }, + ladvector: { + url: "https://cdn.ons.gov.uk/maptiles/administrative/authorities/v1/boundaries/{z}/{x}/{y}.pbf", + layer: "authority", + code: "areacd", + }, + lsoadata: "https://bothness.github.io/census-atlas/data/lsoa2011_lad2020.csv", + }, + ux: { + default_zoom: 14 + } +} diff --git a/src/ui/Map.svelte b/src/ui/map/Map.svelte similarity index 92% rename from src/ui/Map.svelte rename to src/ui/map/Map.svelte index 2d30865e..817660f5 100644 --- a/src/ui/Map.svelte +++ b/src/ui/map/Map.svelte @@ -1,7 +1,7 @@ diff --git a/src/ui/map/MapDataLayer.svelte b/src/ui/map/MapDataLayer.svelte new file mode 100644 index 00000000..70796c65 --- /dev/null +++ b/src/ui/map/MapDataLayer.svelte @@ -0,0 +1,185 @@ + diff --git a/src/ui/map/MapLegacyComponent.svelte b/src/ui/map/MapLegacyComponent.svelte new file mode 100644 index 00000000..565babb4 --- /dev/null +++ b/src/ui/map/MapLegacyComponent.svelte @@ -0,0 +1,95 @@ + + +
+ {#if map} + + {/if} +
+ + diff --git a/src/ui/map/MapLegacyLadLayer.svelte b/src/ui/map/MapLegacyLadLayer.svelte new file mode 100644 index 00000000..cdc940c7 --- /dev/null +++ b/src/ui/map/MapLegacyLadLayer.svelte @@ -0,0 +1,50 @@ + + + + + + diff --git a/src/ui/map/MapLegacyLayer.svelte b/src/ui/map/MapLegacyLayer.svelte new file mode 100644 index 00000000..70796c65 --- /dev/null +++ b/src/ui/map/MapLegacyLayer.svelte @@ -0,0 +1,185 @@ + diff --git a/src/ui/map/MapLegacyLsoaLayer.svelte b/src/ui/map/MapLegacyLsoaLayer.svelte new file mode 100644 index 00000000..fcc19492 --- /dev/null +++ b/src/ui/map/MapLegacyLsoaLayer.svelte @@ -0,0 +1,49 @@ + + + + + + From 485e82662cf9ce460561a228dc24fdaa3a4d0f41 Mon Sep 17 00:00:00 2001 From: Tom Ridd Date: Fri, 19 Nov 2021 02:54:00 +0000 Subject: [PATCH 02/13] Remove old code Signed-off-by: Tom Ridd --- src/MapComponent.svelte | 1 - src/services/flatfileGeographyService.js | 18 ------------------ src/stores/geography.test.js | 17 ----------------- src/stores/indicators.js | 0 src/utils.js | 19 +------------------ 5 files changed, 1 insertion(+), 54 deletions(-) delete mode 100644 src/services/flatfileGeographyService.js delete mode 100644 src/stores/geography.test.js delete mode 100644 src/stores/indicators.js diff --git a/src/MapComponent.svelte b/src/MapComponent.svelte index 5188cfeb..565babb4 100644 --- a/src/MapComponent.svelte +++ b/src/MapComponent.svelte @@ -45,7 +45,6 @@ map.addControl(new NavigationControl()); - // bounds.subscribe((b) => { if (map) map.fitBounds(b, { padding: 20 }); })// move map on bbox change map.fitBounds($bounds, { padding: 20 }); // Get initial zoom level diff --git a/src/services/flatfileGeographyService.js b/src/services/flatfileGeographyService.js deleted file mode 100644 index c4bf1c42..00000000 --- a/src/services/flatfileGeographyService.js +++ /dev/null @@ -1,18 +0,0 @@ -import { autoType, csvParse } from "d3-dsv"; -import { feature } from "topojson-client"; - -export default function FlatfileGeographyService() {} - -FlatfileGeographyService.prototype.getLadBoundaries = async function () { - let response = await fetch(url); - let topojson = await response.json(); - let geojson = await feature(topojson, layer); - return geojson; -}; - -FlatfileGeographyService.prototype.getLsoaData = async function () { - let response = await fetch(url); - let string = await response.text(); - let data = await csvParse(string, autoType); - return data; -}; diff --git a/src/stores/geography.test.js b/src/stores/geography.test.js deleted file mode 100644 index 964012d6..00000000 --- a/src/stores/geography.test.js +++ /dev/null @@ -1,17 +0,0 @@ -import MockGeographyService from "../services/mockGeographyService"; -import { initialiseGeography } from "./geography"; - -it("it calls functions from the geography service", async () => { - // given - // a mock for the geography service - const mockGeographyService = new MockGeographyService({ features: [] }, []); - - // when - // we call initialise geography - await initialiseGeography(mockGeographyService); - - // then - // it calls functions on the geography service - expect(mockGeographyService.getLadBoundariesCalled).toBe(1); - expect(mockGeographyService.getLsoaDataCalled).toBe(1); -}); diff --git a/src/stores/indicators.js b/src/stores/indicators.js deleted file mode 100644 index e69de29b..00000000 diff --git a/src/utils.js b/src/utils.js index 439b6e63..470e97fb 100644 --- a/src/utils.js +++ b/src/utils.js @@ -11,13 +11,6 @@ export async function getLsoaData(url) { return data; } -export async function getTopo(url, layer) { - let response = await fetch(url); - let topojson = await response.json(); - let geojson = await feature(topojson, layer); - return geojson; -} - export async function getNomis(url, dataService, geographicCodesStore, selectedCategoryTotals, indicatorCode) { let geoCodesStore = get(geographicCodesStore); if (geoCodesStore.length == 0) { @@ -55,6 +48,7 @@ export function processAggregateData(dataset, lookup) { function calculateAggregateData(lsoaData, lsoa, lookup, lad, ladTemp, englandAndWales) { lsoa.index[lsoaData.code] = lsoaData; let parent = lookup[lsoaData.code].parent; + if (!lad.index[parent]) { lad.index[parent] = { code: parent, @@ -203,14 +197,3 @@ export function updateURL(location, selectCode, active, mapLocation, history) { history.pushState(undefined, undefined, newhash); } } - -// export function replaceURL(selectCode, active, mapLocation, history) { -// let hash = `#/${selectCode}/${active.lad.selected ? active.lad.selected : "" -// }/${active.lsoa.selected ? active.lsoa.selected : ""}/${mapLocation.zoom||14},${mapLocation.lon -// },${mapLocation.lat}`; -// history.replaceState(undefined, undefined, hash); -// } - -export function testFunction() { - return true; -} From 0e4dae7ed74823a0b11da5066a679e65f735b1d6 Mon Sep 17 00:00:00 2001 From: Tom Ridd Date: Fri, 19 Nov 2021 02:55:22 +0000 Subject: [PATCH 03/13] Refactor data service as a class Signed-off-by: Tom Ridd --- src/dataService.js | 77 ++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/src/dataService.js b/src/dataService.js index 11b3bf1d..a5fb9f2f 100644 --- a/src/dataService.js +++ b/src/dataService.js @@ -1,41 +1,44 @@ import { csvParse } from "d3-dsv"; import { get } from "svelte/store"; -export default function LocalDataService() {} +export default class LocalDataService { + + getGeographicCodes = async function (url) { + let response = await fetch(url); + let string = await response.text(); + return await csvParse(string, (d) => { + return d["GEOGRAPHY_CODE"]; + }); + }; + + getCategoryTotals = async function (url) { + let response = await fetch(url); + let string = await response.text(); + let data = await csvParse(string, (d) => { + return d["0"]; + }); + return data; + }; + + getNomisData = async function ( + url, + geographicCodesStore, + selectedCategoryTotals, + indicatorCode, + ) { + let response = await fetch(url); + let string = await response.text(); + let geoCodes = get(geographicCodesStore); + let categoryTotals = get(selectedCategoryTotals); + debugger; + return await csvParse(string, (d, index) => { + return { + code: geoCodes[index], + value: +d[indicatorCode], + count: +categoryTotals[index], + perc: (+d[indicatorCode] / +categoryTotals[index]) * 100, + }; + }); + }; -LocalDataService.prototype.getGeographicCodes = async function (url) { - let response = await fetch(url); - let string = await response.text(); - return await csvParse(string, (d) => { - return d["GEOGRAPHY_CODE"]; - }); -}; - -LocalDataService.prototype.getCategoryTotals = async function (url) { - let response = await fetch(url); - let string = await response.text(); - let data = await csvParse(string, (d) => { - return d["0"]; - }); - return data; -}; - -LocalDataService.prototype.getNomisData = async function ( - url, - geographicCodesStore, - selectedCategoryTotals, - indicatorCode, -) { - let response = await fetch(url); - let string = await response.text(); - let geoCodes = get(geographicCodesStore); - let categoryTotals = get(selectedCategoryTotals); - return await csvParse(string, (d, index) => { - return { - code: geoCodes[index], - value: +d[indicatorCode], - count: +categoryTotals[index], - perc: (+d[indicatorCode] / +categoryTotals[index]) * 100, - }; - }); -}; +} From e87eaf10f48db84cd2bbccff7d578bf581d69b7f Mon Sep 17 00:00:00 2001 From: Tom Ridd Date: Fri, 19 Nov 2021 02:56:44 +0000 Subject: [PATCH 04/13] Move files into logical order Signed-off-by: Tom Ridd --- src/routes/ByCategory.svelte | 2 +- src/routes/ByLocation.svelte | 2 +- src/routes/ByLocationAndCategory.svelte | 12 +++- src/routes/CensusAtlas.svelte | 95 ++++++++----------------- src/routes/Components.svelte | 2 +- 5 files changed, 43 insertions(+), 70 deletions(-) diff --git a/src/routes/ByCategory.svelte b/src/routes/ByCategory.svelte index 82344dab..1d4c6717 100644 --- a/src/routes/ByCategory.svelte +++ b/src/routes/ByCategory.svelte @@ -1,7 +1,7 @@
- - - - - - - - + + + + + + + +