Feat: Geolocation
This commit is contained in:
@@ -110,6 +110,48 @@ const StoreWatchPage = ({ authorizedFetch, knownStores = [], userLocation }) =>
|
|||||||
return map;
|
return map;
|
||||||
}, [knownStores]);
|
}, [knownStores]);
|
||||||
|
|
||||||
|
const handleToggleStore = useCallback(
|
||||||
|
(store, checked) => {
|
||||||
|
setWatchList((prev) => {
|
||||||
|
const storeId = String(store.id || store.storeId);
|
||||||
|
const existing = prev.find((entry) => entry.storeId === storeId);
|
||||||
|
if (checked) {
|
||||||
|
if (existing) {
|
||||||
|
return prev;
|
||||||
|
}
|
||||||
|
setDirty(true);
|
||||||
|
const regionName = store.region?.name || selectedRegion?.name || existing?.regionName || '';
|
||||||
|
return [
|
||||||
|
...prev,
|
||||||
|
{
|
||||||
|
storeId,
|
||||||
|
storeName: store.name || store.storeName || `Store ${storeId}`,
|
||||||
|
regionId: String(store.region?.id || selectedRegionId || existing?.regionId || ''),
|
||||||
|
regionName,
|
||||||
|
lastTeamSearchStatus: existing?.lastTeamSearchStatus ?? null
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
if (!existing) {
|
||||||
|
return prev;
|
||||||
|
}
|
||||||
|
setDirty(true);
|
||||||
|
return prev.filter((entry) => entry.storeId !== storeId);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
[selectedRegion, selectedRegionId]
|
||||||
|
);
|
||||||
|
|
||||||
|
const handleRemoveWatch = useCallback((storeId) => {
|
||||||
|
setWatchList((prev) => {
|
||||||
|
const next = prev.filter((entry) => entry.storeId !== storeId);
|
||||||
|
if (next.length !== prev.length) {
|
||||||
|
setDirty(true);
|
||||||
|
}
|
||||||
|
return next;
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
|
||||||
const tableData = useMemo(
|
const tableData = useMemo(
|
||||||
() =>
|
() =>
|
||||||
eligibleStores.map((store) => {
|
eligibleStores.map((store) => {
|
||||||
@@ -469,49 +511,6 @@ const StoreWatchPage = ({ authorizedFetch, knownStores = [], userLocation }) =>
|
|||||||
}
|
}
|
||||||
}, [selectedRegionId, fetchStoresForRegion, fetchAllRegions]);
|
}, [selectedRegionId, fetchStoresForRegion, fetchAllRegions]);
|
||||||
|
|
||||||
const handleToggleStore = useCallback(
|
|
||||||
(store, checked) => {
|
|
||||||
setWatchList((prev) => {
|
|
||||||
const storeId = String(store.id || store.storeId);
|
|
||||||
const existing = prev.find((entry) => entry.storeId === storeId);
|
|
||||||
if (checked) {
|
|
||||||
if (existing) {
|
|
||||||
return prev;
|
|
||||||
}
|
|
||||||
setDirty(true);
|
|
||||||
const regionName =
|
|
||||||
store.region?.name || selectedRegion?.name || existing?.regionName || '';
|
|
||||||
return [
|
|
||||||
...prev,
|
|
||||||
{
|
|
||||||
storeId,
|
|
||||||
storeName: store.name || store.storeName || `Store ${storeId}`,
|
|
||||||
regionId: String(store.region?.id || selectedRegionId || existing?.regionId || ''),
|
|
||||||
regionName,
|
|
||||||
lastTeamSearchStatus: existing?.lastTeamSearchStatus ?? null
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
if (!existing) {
|
|
||||||
return prev;
|
|
||||||
}
|
|
||||||
setDirty(true);
|
|
||||||
return prev.filter((entry) => entry.storeId !== storeId);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
[selectedRegion, selectedRegionId]
|
|
||||||
);
|
|
||||||
|
|
||||||
const handleRemoveWatch = useCallback((storeId) => {
|
|
||||||
setWatchList((prev) => {
|
|
||||||
const next = prev.filter((entry) => entry.storeId !== storeId);
|
|
||||||
if (next.length !== prev.length) {
|
|
||||||
setDirty(true);
|
|
||||||
}
|
|
||||||
return next;
|
|
||||||
});
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const handleSave = useCallback(async () => {
|
const handleSave = useCallback(async () => {
|
||||||
if (!authorizedFetch || saving || !dirty) {
|
if (!authorizedFetch || saving || !dirty) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user