| @@ -378,7 +378,7 @@ function LaneFilterFacetMultiButtons(props: { | |||||
| const next = new Set(selected); | const next = new Set(selected); | ||||
| if (on) next.delete(opt); | if (on) next.delete(opt); | ||||
| else next.add(opt); | else next.add(opt); | ||||
| onChange([...next]); | |||||
| onChange(Array.from(next)); | |||||
| }} | }} | ||||
| sx={laneFilterBtnSx} | sx={laneFilterBtnSx} | ||||
| > | > | ||||
| @@ -659,9 +659,9 @@ function parseLanePickFacets( | |||||
| scan(remark); | scan(remark); | ||||
| return { | return { | ||||
| special, | special, | ||||
| zones: [...zones], | |||||
| weekdays: [...weekdays], | |||||
| areas: [...areas], | |||||
| zones: Array.from(zones), | |||||
| weekdays: Array.from(weekdays), | |||||
| areas: Array.from(areas), | |||||
| }; | }; | ||||
| } | } | ||||
| @@ -2280,14 +2280,14 @@ const RouteBoard: React.FC = () => { | |||||
| for (const area of facets.areas) areas.add(area); | for (const area of facets.areas) areas.add(area); | ||||
| } | } | ||||
| return { | return { | ||||
| specials: [...specials].sort(compareSpecialLaneToken), | |||||
| zones: [...zones].sort((a, b) => { | |||||
| specials: Array.from(specials).sort(compareSpecialLaneToken), | |||||
| zones: Array.from(zones).sort((a, b) => { | |||||
| const na = Number(/^區(\d+)/.exec(a)?.[1] ?? 0); | const na = Number(/^區(\d+)/.exec(a)?.[1] ?? 0); | ||||
| const nb = Number(/^區(\d+)/.exec(b)?.[1] ?? 0); | const nb = Number(/^區(\d+)/.exec(b)?.[1] ?? 0); | ||||
| return na - nb || a.localeCompare(b, "zh-Hant"); | return na - nb || a.localeCompare(b, "zh-Hant"); | ||||
| }), | }), | ||||
| weekdays: LANE_WEEKDAYS.filter((day) => weekdays.has(day)), | weekdays: LANE_WEEKDAYS.filter((day) => weekdays.has(day)), | ||||
| areas: [...areas].sort(compareLaneAreaName), | |||||
| areas: Array.from(areas).sort(compareLaneAreaName), | |||||
| }; | }; | ||||
| }, [lanes, laneFilter.floor]); | }, [lanes, laneFilter.floor]); | ||||