Skip to content

Commit 28f5887

Browse files
kagiurazwliew
authored andcommitted
refactor: ✨ show which services are directly accessible from any selected stop
1 parent 47f1449 commit 28f5887

File tree

8 files changed

+234
-92
lines changed

8 files changed

+234
-92
lines changed

website/src/data/isb-stops.json

Lines changed: 70 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
"name": "L",
2424
"routeid": 90288
2525
}
26-
]
26+
],
27+
"opposite": null
2728
},
2829
{
2930
"caption": "Botanic Gardens MRT",
@@ -41,7 +42,8 @@
4142
"name": "L",
4243
"routeid": 90288
4344
}
44-
]
45+
],
46+
"opposite": "CG"
4547
},
4648
{
4749
"caption": "Kent Ridge MRT",
@@ -74,7 +76,8 @@
7476
"leftLabel": true,
7577
"collapse": 16,
7678
"collapseBehavior": "interchange",
77-
"collapsePair": "KR-MRT-OPP"
79+
"collapsePair": "KR-MRT-OPP",
80+
"opposite": "KR-MRT-OPP"
7881
},
7982
{
8083
"caption": "LT 27",
@@ -107,7 +110,8 @@
107110

108111
"collapse": 15.75,
109112
"collapseBehavior": "interchange",
110-
"collapsePair": "S17"
113+
"collapsePair": "S17",
114+
"opposite": "S17"
111115
},
112116
{
113117
"caption": "University Hall",
@@ -140,7 +144,8 @@
140144

141145
"collapse": 16,
142146
"collapseBehavior": "interchange",
143-
"collapsePair": "UHALL-OPP"
147+
"collapsePair": "UHALL-OPP",
148+
"opposite": "UHALL-OPP"
144149
},
145150
{
146151
"caption": "Opp University Health Centre",
@@ -173,7 +178,8 @@
173178
"leftLabel": true,
174179
"collapse": 16.75,
175180
"collapseBehavior": "hide",
176-
"collapsePair": "UHC"
181+
"collapsePair": "UHC",
182+
"opposite": "UHC"
177183
},
178184
{
179185
"caption": "University Town",
@@ -203,7 +209,8 @@
203209
"name": "E",
204210
"routeid": 90296
205211
}
206-
]
212+
],
213+
"opposite": null
207214
},
208215
{
209216
"caption": "Raffles Hall",
@@ -229,7 +236,8 @@
229236
}
230237
],
231238
"collapseLabel": 15.75,
232-
"leftLabel": true
239+
"leftLabel": true,
240+
"opposite": "MUSEUM"
233241
},
234242
{
235243
"caption": "Kent Vale",
@@ -252,7 +260,8 @@
252260
"routeid": 90296
253261
}
254262
],
255-
"leftLabel": true
263+
"leftLabel": true,
264+
"opposite": null
256265
},
257266
{
258267
"caption": "Museum",
@@ -285,7 +294,8 @@
285294
{
286295
"name": "PUB:151"
287296
}
288-
]
297+
],
298+
"opposite": "RAFFLES"
289299
},
290300
{
291301
"caption": "Yusof Ishak House",
@@ -320,7 +330,8 @@
320330
],
321331
"collapse": 16,
322332
"collapseBehavior": "interchange",
323-
"collapsePair": "YIH-OPP"
333+
"collapsePair": "YIH-OPP",
334+
"opposite": "YIH-OPP"
324335
},
325336
{
326337
"caption": "Central Library",
@@ -352,7 +363,8 @@
352363
{
353364
"name": "PUB:95"
354365
}
355-
]
366+
],
367+
"opposite": "IT"
356368
},
357369
{
358370
"caption": "LT 13",
@@ -377,7 +389,8 @@
377389
],
378390
"collapse": 15,
379391
"collapseBehavior": "interchange",
380-
"collapsePair": "LT13-OPP"
392+
"collapsePair": "LT13-OPP",
393+
"opposite": "LT13-OPP"
381394
},
382395
{
383396
"caption": "AS 5",
@@ -403,7 +416,8 @@
403416
"leftLabel": true,
404417
"collapse": 15.75,
405418
"collapseBehavior": "interchange",
406-
"collapsePair": "NUSS-OPP"
419+
"collapsePair": "NUSS-OPP",
420+
"opposite": "NUSS-OPP"
407421
},
408422
{
409423
"caption": "BIZ 2",
@@ -426,7 +440,8 @@
426440
"routeid": 90292
427441
}
428442
],
429-
"leftLabel": true
443+
"leftLabel": true,
444+
"opposite": "HSSML-OPP"
430445
},
431446
{
432447
"caption": "Prince George's Park",
@@ -453,7 +468,8 @@
453468
"routeid": 90297
454469
}
455470
],
456-
"leftLabel": true
471+
"leftLabel": true,
472+
"opposite": "PGPR"
457473
},
458474
{
459475
"caption": "College Green",
@@ -495,7 +511,8 @@
495511
{
496512
"name": "PUB:67"
497513
}
498-
]
514+
],
515+
"opposite": "BG-MRT"
499516
},
500517
{
501518
"caption": "EA",
@@ -524,7 +541,8 @@
524541
],
525542
"collapse": 16,
526543
"collapseBehavior": "interchange",
527-
"collapsePair": "JP-SCH-16151"
544+
"collapsePair": "JP-SCH-16151",
545+
"opposite": "JP-SCH-16151"
528546
},
529547
{
530548
"caption": "SDE 3",
@@ -554,7 +572,8 @@
554572
"collapse": 16,
555573
"collapseBehavior": "interchange",
556574
"leftLabel": false,
557-
"collapsePair": "SDE3-OPP"
575+
"collapsePair": "SDE3-OPP",
576+
"opposite": "SDE3-OPP"
558577
},
559578
{
560579
"caption": "Information Technology",
@@ -586,7 +605,8 @@
586605
"name": "PUB:96"
587606
}
588607
],
589-
"leftLabel": true
608+
"leftLabel": true,
609+
"opposite": "CLB"
590610
},
591611
{
592612
"caption": "Opp Yusof Ishak House",
@@ -621,7 +641,8 @@
621641
"leftLabel": true,
622642
"collapse": 16,
623643
"collapseBehavior": "hide",
624-
"collapsePair": "YIH"
644+
"collapsePair": "YIH",
645+
"opposite": "YIH"
625646
},
626647
{
627648
"caption": "Opp SDE 3",
@@ -648,7 +669,8 @@
648669
"collapse": 16,
649670
"collapseBehavior": "hide",
650671
"leftLabel": true,
651-
"collapsePair": "SDE3"
672+
"collapsePair": "SDE3",
673+
"opposite": "SDE3"
652674
},
653675
{
654676
"caption": "The Japanese Primary School",
@@ -675,7 +697,8 @@
675697
"collapse": 16,
676698
"collapseBehavior": "hide",
677699
"leftLabel": true,
678-
"collapsePair": "EA"
700+
"collapsePair": "EA",
701+
"opposite": "EA"
679702
},
680703
{
681704
"caption": "University Health Centre",
@@ -703,7 +726,8 @@
703726
],
704727
"collapse": 16.75,
705728
"collapseBehavior": "interchange",
706-
"collapsePair": "UHC-OPP"
729+
"collapsePair": "UHC-OPP",
730+
"opposite": "UHC-OPP"
707731
},
708732
{
709733
"caption": "Opp University Hall",
@@ -732,7 +756,8 @@
732756
"leftLabel": true,
733757
"collapse": 16,
734758
"collapseBehavior": "hide",
735-
"collapsePair": "UHALL"
759+
"collapsePair": "UHALL",
760+
"opposite": "UHALL"
736761
},
737762
{
738763
"caption": "S 17",
@@ -761,7 +786,8 @@
761786
"leftLabel": true,
762787
"collapse": 15.75,
763788
"collapseBehavior": "hide",
764-
"collapsePair": "LT27"
789+
"collapsePair": "LT27",
790+
"opposite": "LT27"
765791
},
766792
{
767793
"caption": "Opp Kent Ridge MRT",
@@ -789,7 +815,8 @@
789815
],
790816
"collapse": 16,
791817
"collapseBehavior": "hide",
792-
"collapsePair": "KR-MRT"
818+
"collapsePair": "KR-MRT",
819+
"opposite": "KR-MRT"
793820
},
794821
{
795822
"caption": "Prince George's Park Foyer",
@@ -811,7 +838,8 @@
811838
"name": "K",
812839
"routeid": 90297
813840
}
814-
]
841+
],
842+
"opposite": "PGP"
815843
},
816844
{
817845
"caption": "COM 3",
@@ -831,7 +859,8 @@
831859
},
832860
{ "name": "D2", "routeid": 90295 },
833861
{ "name": "D2", "routeid": 90295 }
834-
]
862+
],
863+
"opposite": null
835864
},
836865
{
837866
"caption": "Opp HSSML",
@@ -852,7 +881,8 @@
852881
],
853882
"collapse": 14,
854883
"collapseBehavior": "hide",
855-
"collapseLabel": 15
884+
"collapseLabel": 15,
885+
"opposite": "BIZ2"
856886
},
857887
{
858888
"caption": "Opp NUSS",
@@ -873,7 +903,8 @@
873903
],
874904
"collapse": 15.75,
875905
"collapseBehavior": "hide",
876-
"collapsePair": "AS5"
906+
"collapsePair": "AS5",
907+
"opposite": "AS5"
877908
},
878909
{
879910
"caption": "Ventus",
@@ -895,7 +926,8 @@
895926
"leftLabel": true,
896927
"collapse": 15,
897928
"collapseBehavior": "hide",
898-
"collapsePair": "LT13"
929+
"collapsePair": "LT13",
930+
"opposite": "LT13"
899931
},
900932
{
901933
"caption": "Kent Ridge Bus Terminal",
@@ -940,7 +972,8 @@
940972
"name": "PUB:95"
941973
}
942974
],
943-
"leftLabel": true
975+
"leftLabel": true,
976+
"opposite": null
944977
},
945978
{
946979
"caption": "TCOMS",
@@ -955,7 +988,8 @@
955988
"routeid": 90289
956989
},
957990
{ "name": "D2", "routeid": 90295 }
958-
]
991+
],
992+
"opposite": "TCOMS-OPP"
959993
},
960994
{
961995
"caption": "Opp TCOMS",
@@ -974,6 +1008,7 @@
9741008
"collapse": 16,
9751009
"collapseBehavior": "hide",
9761010
"leftLabel": true,
977-
"collapsePair": "TCOMS"
1011+
"collapsePair": "TCOMS",
1012+
"opposite": "TCOMS"
9781013
}
9791014
]

website/src/utils/mobility.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,39 @@ export const getDepartAndArriveTiming = (timings: NUSShuttle[] | string = [], is
9595
}
9696
return { departTiming: timings[0], arriveTiming: undefined };
9797
};
98+
99+
export const getRouteSegments = (stops: string[], color: string) => {
100+
const routes = [];
101+
102+
for (let i = 0; i < stops.length - 1; i++) {
103+
const thisStop = stops[i];
104+
const nextStop = stops[i + 1];
105+
routes.push({
106+
start: thisStop,
107+
end: nextStop,
108+
color,
109+
});
110+
}
111+
112+
return routes;
113+
};
114+
115+
const btcStops = ['CG', 'OTH', 'BG-MRT'];
116+
117+
export const segmentsToClasses = (segments: { start: string; end: string; color: string }[]) =>
118+
segments.map(({ start, end, color }) => {
119+
const classes = [];
120+
121+
const relationClassname = `${start}__${end}`;
122+
const svgPrefixes = ['KRC_svg__KRC'];
123+
if (btcStops.includes(start) || btcStops.includes(end)) {
124+
svgPrefixes.push('BTC_svg__BTC');
125+
}
126+
127+
classes.push(`.${svgPrefixes[0]} .${svgPrefixes[0].slice(0, -3)}${relationClassname}`);
128+
if (svgPrefixes.length > 1) {
129+
classes.push(`.${svgPrefixes[1]} .${svgPrefixes[1].slice(0, -3)}${relationClassname}`);
130+
}
131+
132+
return { classes, color };
133+
});

0 commit comments

Comments
 (0)