Skip to content

Commit bdc1ab0

Browse files
Remove dropdown from CT map (#324)
1 parent 69bd41f commit bdc1ab0

File tree

12 files changed

+151
-231
lines changed

12 files changed

+151
-231
lines changed

packages/ct/src/js/dropdownGroups.ts

Lines changed: 0 additions & 84 deletions
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { DropdownRequest } from "@prn-parking-lots/shared/src/js/city-ui/dropdownUtils";
2+
import type { CityStatsCollection } from "@prn-parking-lots/shared/src/js/model/types";
3+
4+
import type { CityStats } from "./types";
5+
6+
export default function createDropdownRequest(
7+
data: CityStatsCollection<CityStats>,
8+
): DropdownRequest {
9+
return {
10+
useGroups: false,
11+
value: Object.entries(data).map(([id, { name }]) => ({ name, id })),
12+
};
13+
}

packages/ct/src/js/main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
CITY_BOUNDARIES_GEOJSON,
66
PARKING_LOT_GEOJSON_MODULES,
77
} from "./data";
8-
import createDropdownGroups from "./dropdownGroups";
8+
import createDropdownRequest from "./dropdownRequest";
99
import formatScorecard from "./scorecard";
1010

1111
export default async function initApp(): Promise<void> {
@@ -15,7 +15,7 @@ export default async function initApp(): Promise<void> {
1515
boundaries: CITY_BOUNDARIES_GEOJSON,
1616
parkingLots: PARKING_LOT_GEOJSON_MODULES,
1717
},
18-
dropdownGroups: createDropdownGroups(CITY_STATS_DATA),
18+
dropdownRequest: createDropdownRequest(CITY_STATS_DATA),
1919
scorecardFormatter: formatScorecard,
2020
initialCity: "stratford-center",
2121
});

packages/ct/tests/dropdownGroups.test.ts

Lines changed: 0 additions & 70 deletions
This file was deleted.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { expect, test } from "@playwright/test";
2+
3+
import createDropdownRequest from "../src/js/dropdownRequest";
4+
5+
test("createDropdownRequest", () => {
6+
const common = {
7+
percentage: "",
8+
population: "",
9+
transitStation: null,
10+
county: "",
11+
};
12+
const input = {
13+
city1: {
14+
...common,
15+
name: "City 1",
16+
},
17+
city2: {
18+
...common,
19+
name: "City 2",
20+
},
21+
};
22+
expect(createDropdownRequest(input)).toEqual({
23+
useGroups: false,
24+
value: [
25+
{ id: "city1", name: "City 1" },
26+
{ id: "city2", name: "City 2" },
27+
],
28+
});
29+
});
Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,34 @@
11
import {
2-
DropdownGroup,
3-
DropdownChoiceId,
2+
DropdownRequest,
3+
DropdownChoiceRequest,
44
} from "@prn-parking-lots/shared/src/js/city-ui/dropdownUtils";
55
import type { CityStatsCollection } from "@prn-parking-lots/shared/src/js/model/types";
66

77
import type { CityStats } from "./types";
88

9-
export default function createDropdownGroups(
9+
export default function createDropdownRequest(
1010
data: CityStatsCollection<CityStats>,
11-
): DropdownGroup[] {
12-
const official: DropdownChoiceId[] = [];
13-
const community: DropdownChoiceId[] = [];
11+
): DropdownRequest {
12+
const official: DropdownChoiceRequest[] = [];
13+
const community: DropdownChoiceRequest[] = [];
1414
Object.entries(data).forEach(([id, { name, contribution }]) => {
1515
if (contribution) {
1616
community.push({ id, name });
1717
} else {
1818
official.push({ id, name });
1919
}
2020
});
21-
return [
22-
{
23-
label: "Official maps",
24-
cities: official,
25-
},
26-
{
27-
label: "Community maps",
28-
cities: community,
29-
},
30-
];
21+
return {
22+
useGroups: true,
23+
value: [
24+
{
25+
label: "Official maps",
26+
cities: official,
27+
},
28+
{
29+
label: "Community maps",
30+
cities: community,
31+
},
32+
],
33+
};
3134
}

packages/primary/src/js/main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
CITY_BOUNDARIES_GEOJSON,
66
PARKING_LOT_GEOJSON_MODULES,
77
} from "./data";
8-
import createDropdownGroups from "./dropdownGroups";
8+
import createDropdownRequest from "./dropdownRequest";
99
import formatScorecard from "./scorecard";
1010

1111
export default async function initApp(): Promise<void> {
@@ -15,7 +15,7 @@ export default async function initApp(): Promise<void> {
1515
boundaries: CITY_BOUNDARIES_GEOJSON,
1616
parkingLots: PARKING_LOT_GEOJSON_MODULES,
1717
},
18-
dropdownGroups: createDropdownGroups(CITY_STATS_DATA),
18+
dropdownRequest: createDropdownRequest(CITY_STATS_DATA),
1919
scorecardFormatter: formatScorecard,
2020
initialCity: "atlanta-ga",
2121
});

packages/primary/tests/dropdownGroups.test.ts renamed to packages/primary/tests/dropdownRequest.test.ts

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { expect, test } from "@playwright/test";
2-
import createDropdownGroups from "../src/js/dropdownGroups";
2+
import createDropdownRequest from "../src/js/dropdownRequest";
33

4-
test("createDropdownGroups", () => {
4+
test("createDropdownRequest", () => {
55
const common = {
66
percentage: "",
77
cityType: "",
@@ -23,14 +23,17 @@ test("createDropdownGroups", () => {
2323
contribution: "some-email@web.com",
2424
},
2525
};
26-
expect(createDropdownGroups(input)).toEqual([
27-
{
28-
label: "Official maps",
29-
cities: [{ id: "city1-ny", name: "City 1, NY" }],
30-
},
31-
{
32-
label: "Community maps",
33-
cities: [{ id: "city2-ny", name: "City 2, NY" }],
34-
},
35-
]);
26+
expect(createDropdownRequest(input)).toEqual({
27+
useGroups: true,
28+
value: [
29+
{
30+
label: "Official maps",
31+
cities: [{ id: "city1-ny", name: "City 1, NY" }],
32+
},
33+
{
34+
label: "Community maps",
35+
cities: [{ id: "city2-ny", name: "City 2, NY" }],
36+
},
37+
],
38+
});
3639
});

packages/shared/src/js/bootstrap.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import subscribeScorecard, { ScorecardFormatter } from "./city-ui/scorecard";
22
import initDropdown from "./city-ui/dropdown";
3-
import type { DropdownGroup } from "./city-ui/dropdownUtils";
3+
import type { DropdownRequest } from "./city-ui/dropdownUtils";
44

55
import initAbout from "./layout/about";
66
import initIcons from "./layout/fontAwesome";
@@ -24,7 +24,7 @@ import { initViewState } from "./state/ViewState";
2424
interface Args<T extends BaseCityStats> {
2525
data: DataSet<T>;
2626
initialCity: CityId;
27-
dropdownGroups: DropdownGroup[];
27+
dropdownRequest: DropdownRequest;
2828
scorecardFormatter: ScorecardFormatter<T>;
2929
}
3030

@@ -50,7 +50,7 @@ export default async function bootstrapApp<T extends BaseCityStats>(
5050
args.initialCity,
5151
);
5252

53-
initDropdown(args.dropdownGroups, viewState);
53+
initDropdown(args.dropdownRequest, viewState);
5454
subscribeScorecard(viewState, cityEntries, args.scorecardFormatter);
5555
subscribeShareLink(viewState);
5656
subscribeSnapToCity(viewState, map, cityEntries);

packages/shared/src/js/city-ui/dropdown.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import ChoicesJS from "choices.js";
22

3-
import { DropdownGroup, convertToChoicesGroups } from "./dropdownUtils";
3+
import { DropdownRequest, convertToChoicesJs } from "./dropdownUtils";
44
import { ViewStateObservable } from "../state/ViewState";
55

6-
function createDropdown(groups: DropdownGroup[]): ChoicesJS {
6+
function createDropdown(dropdownRequest: DropdownRequest): ChoicesJS {
77
const dropdown = new ChoicesJS("#city-dropdown", {
88
position: "bottom",
99
allowHTML: false,
@@ -15,15 +15,15 @@ function createDropdown(groups: DropdownGroup[]): ChoicesJS {
1515
// We already sort entries in the JSON file.
1616
shouldSort: false,
1717
});
18-
dropdown.setChoices(convertToChoicesGroups(groups));
18+
dropdown.setChoices(convertToChoicesJs(dropdownRequest));
1919
return dropdown;
2020
}
2121

2222
export default function initDropdown(
23-
groups: DropdownGroup[],
23+
dropdownRequest: DropdownRequest,
2424
viewState: ViewStateObservable,
2525
): void {
26-
const dropdown = createDropdown(groups);
26+
const dropdown = createDropdown(dropdownRequest);
2727

2828
viewState.subscribe(
2929
({ cityId }) => dropdown.setChoiceByValue(cityId),

0 commit comments

Comments
 (0)