Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 27 additions & 20 deletions src/modules/map/hooks/use-map-filter.tsx
Original file line number Diff line number Diff line change
@@ -1,32 +1,44 @@
import {MapFilter, MapFilterType} from '../types';
import {storage} from '@atb/modules/storage';
import {useRemoteConfigContext} from '@atb/modules/remote-config';
import {useCallback, useEffect, useState} from 'react';

const MAP_FILTER_STORAGE_KEY = '@ATB_user_map_filters_v2';

const fallback: MapFilterType = {
mobility: {},
// default: show all
const defaultMapFilter: MapFilterType = {
mobility: {
CAR: {
showAll: true,
operators: [],
},
BICYCLE: {
showAll: true,
operators: [],
},
SCOOTER: {
showAll: true,
operators: [],
},
},
};

/**
* This hook should only be used in MapContext.
*/
export const useUserMapFilters = () => {
const {default_map_filter} = useRemoteConfigContext();
const [mapFilter, setMapFilter] = useState<MapFilterType>();

const getStoredMapFilter = useCallback(
() =>
storage
.get(MAP_FILTER_STORAGE_KEY)
.then((storedFilters) =>
storedFilters
? (parse(storedFilters) ?? fallback)
: (parse(default_map_filter) ?? fallback),
),
[default_map_filter],
);
const getStoredMapFilter = useCallback(async () => {
const loadedMapFilter = await storage.get(MAP_FILTER_STORAGE_KEY);
let mapFilter: MapFilterType = defaultMapFilter;
if (loadedMapFilter) {
const parseResult = MapFilter.safeParse(JSON.parse(loadedMapFilter));
if (parseResult.success) {
mapFilter = parseResult.data;
}
}
return mapFilter;
}, []);

const setAndStoreMapFilter = useCallback(
(filters: MapFilterType) => {
Expand All @@ -48,8 +60,3 @@ export const useUserMapFilters = () => {
setMapFilter: setAndStoreMapFilter,
};
};

const parse = (data: string) => {
const res = MapFilter.safeParse(JSON.parse(data));
return res.success ? res.data : undefined;
};
6 changes: 6 additions & 0 deletions src/modules/map/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,12 @@ export interface MapLine extends Feature<LineString> {

const FormFactorFilter = z.object({
showAll: z.boolean().default(false),
/**
* The map and map filter component currently do not support filtering items per operator.
* If an operator should be hidden from all users, it should be filtered server side.
* The operators prop is kept for now to avoid migration of locally stored filters,
* and in case we want to support it again.
*/
operators: z.array(z.string()).default([]),
});
export type FormFactorFilterType = z.infer<typeof FormFactorFilter>;
Expand Down
12 changes: 0 additions & 12 deletions src/modules/remote-config/remote-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ export type RemoteConfig = {
aztec_code_size_in_cm: number;
customer_feedback_url: string;
customer_service_url: string;
default_map_filter: string;
delay_share_travel_habits_screen_by_sessions_count: number;
disable_email_field_in_profile_page: boolean;
disable_travelcard: boolean;
Expand Down Expand Up @@ -106,13 +105,6 @@ export const defaultRemoteConfig: RemoteConfig = {
aztec_code_size_in_cm: 3.5,
customer_feedback_url: '',
customer_service_url: CUSTOMER_SERVICE_URL,
default_map_filter: JSON.stringify({
mobility: {
CAR: {showAll: true},
SCOOTER: {showAll: true},
BICYCLE: {showAll: true},
},
}),
delay_share_travel_habits_screen_by_sessions_count: 0,
disable_email_field_in_profile_page: false,
disable_travelcard: false,
Expand Down Expand Up @@ -207,9 +199,6 @@ export function getConfig(): RemoteConfig {
const customer_service_url =
values['customer_service_url']?.asString() ??
defaultRemoteConfig.customer_service_url;
const default_map_filter =
values['default_map_filter']?.asString() ??
defaultRemoteConfig.default_map_filter;
const delay_share_travel_habits_screen_by_sessions_count =
values['delay_share_travel_habits_screen_by_sessions_count']?.asNumber() ??
defaultRemoteConfig.delay_share_travel_habits_screen_by_sessions_count;
Expand Down Expand Up @@ -422,7 +411,6 @@ export function getConfig(): RemoteConfig {
aztec_code_size_in_cm,
customer_feedback_url,
customer_service_url,
default_map_filter,
delay_share_travel_habits_screen_by_sessions_count,
disable_email_field_in_profile_page,
disable_travelcard,
Expand Down