Explore Feature
House discovery, search, filters, map view, and property detail.
Location
- Feature module:
src/features/explore/ - Routes:
src/app/(tabs)/explore/,src/app/house/,src/app/explore-search/ - Contexts:
explore-filters-context.tsx,device-city-context.tsx,explore-navigation-context.tsx
API Functions
| File | Function | API | Endpoint |
|---|---|---|---|
api/list-houses.ts | listHouses(params) | v2 | GET properties/v1/houses |
api/get-house.ts | getHouse(houseId) | v1 | POST getHouse.php |
api/get-house.ts | recordHouseView(houseId) | v1 | POST houseViewed.php |
api/get-house.ts | likeHouse(houseId) | v1 | POST like.php |
api/get-house.ts | unlikeHouse(houseId) | v1 | POST removeLikedHouse.php |
api/get-house.ts | requestInfo(params) | v1 | POST requestViewing.php |
api/get-house.ts | submitPropertyOperatorCallLead(houseId) | v1 | POST propertyOperatorCallLead.php |
api/like-house.ts | — | v2 | Like via v2 API |
api/search.ts | — | — | Search functionality |
api/fetch-entrata-tour-times.ts | — | — | Entrata integration for US tour scheduling |
Hooks
| Hook | File | Description |
|---|---|---|
useListHouses | hooks/use-list-houses.ts | Paginated house listing with infinite scroll, deduplication, optimistic removal |
useHousesQuery | hooks/use-houses-query.ts | React Query useInfiniteQuery wrapping listHouses |
useHouse | hooks/use-house.ts | Single house fetch with useState + auto view recording |
useHouseQuery | hooks/use-house-query.ts | React Query version of single house fetch |
useLikeMutation | hooks/use-like-mutation.ts | Like/unlike mutation |
usePropertySelection | hooks/use-property-selection.ts | Property selection state |
Filters
ExploreFiltersProvider (context/explore-filters-context.tsx) manages:
- Price range:
priceMin,priceMax - Bedrooms/Bathrooms:
bedrooms,bathrooms - UoB Approved:
uobApprovedOnly(Birmingham only) - Academic year:
academicYear(always set in US mode) - Amenities:
pets,balcony,studyArea,gym,pool,hotTub,sauna
Filters and sort preference are persisted to AsyncStorage (keys: explore_filters, explore_sort).
Sort options: Recommended, Popular, Most liked, Newest added, Highest price, Lowest price
The context converts UI filter values to API filter params via apiFilters (memoized) and apiSort.
Query Keys
Defined in constants/query-keys.ts:
queryKeys.houses.all // ['houses']
queryKeys.houses.list() // ['houses', 'list', params]
queryKeys.houses.detail() // ['houses', 'detail', id]List Houses API Parameters
The listHouses function builds query params for the v2 API:
- Pagination:
limit,page - Filters:
filter[boundary],filter[price_min],filter[price_max],filter[bedrooms],filter[bathrooms],filter[city],filter[is_liked],filter[is_group_liked],filter[property_operator],filter[agent_id],filter[uob_approved],filter[academic_year],filter[crm_block_id] - Sort:
sortparam - Includes:
include=videoTour(orviewingRequest,videoTourfor liked houses) - Search:
query,slug,type
Components
| Component | File | Description |
|---|---|---|
HouseCard | components/house-card.tsx | Main property card with image, price, details |
SmallHouseCard | components/small-house-card.tsx | Compact card variant |
HouseCardBadge | components/house-card-badge.tsx | Badge overlay (new, featured, etc.) |
HouseCardBanner | components/house-card-banner.tsx | Banner overlay |
HouseCardSkeleton | components/house-card-skeleton.tsx | Loading placeholder |
PriceRangeFilter | components/price-range-filter.tsx | Price range slider |
RoomsStepper | components/rooms-stepper.tsx | Bedroom/bathroom counter |
SortByModal | components/sort-by-modal.tsx | Sort option picker |
WelcomeCityModal | components/welcome-city-modal.tsx | First-launch city picker |
SearchItem | components/search-item.tsx | Search result item |
TourTimePicker | components/tour-time-picker/ | Tour scheduling (US, Entrata integration) |
House overview components (components/house-overview/): amenities, availability, book viewing modal, image gallery, map, nearby properties, viewing slot card, request info modal.
Widgets
widgets/featured-house-cluster.tsx — Featured house cluster for server-driven UI screens.
Routes
| Route | Description |
|---|---|
(tabs)/explore/index.tsx | Main explore screen |
house/[id].tsx | House detail page |
house/filters.tsx | Filter screen |
house/overview/video-tour.tsx | Video tour |
house/overview/building-listings.tsx | Building listings |
house/overview/epc.tsx | Energy performance certificate |
house/overview/floorplan.tsx | Floor plan viewer |
house/overview/map.tsx | Property map |