Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
yleclercq-pass committed Feb 6, 2025
1 parent d1f0ba9 commit d45f535
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 6 deletions.
4 changes: 3 additions & 1 deletion src/features/venue/api/useVenueOffers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,19 @@ export const useVenueOffers = (venue?: VenueResponse): UseQueryResult<VenueOffer
],
isUserUnderage,
indexName: env.ALGOLIA_TOP_OFFERS_INDEX_NAME,
venueId: venue?.id,
}),
{
enabled: !!venue,
select: ({ hits, nbHits }) => {
select: ({ hits, nbHits, headlineOffer }) => {
const filteredHits = hits.filter(filterOfferHit).map(transformHits)

const offers = filteredHits.filter((hit): hit is Offer => hit !== null)

return {
hits: uniqBy(offers, 'objectID'),
nbHits,
headlineOffer,
}
},
}
Expand Down
4 changes: 1 addition & 3 deletions src/features/venue/components/VenueBody/VenueBody.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import { useLocation } from 'libs/location'
import { useCategoryHomeLabelMapping, useCategoryIdMapping } from 'libs/subcategories'
import { useGetCurrencyToDisplay } from 'shared/currency/useGetCurrencyToDisplay'
import { useGetPacificFrancToEuroRate } from 'shared/exchangeRates/useGetPacificFrancToEuroRate'
import { offersFixture } from 'shared/offer/offer.fixture'
import { SectionWithDivider } from 'ui/components/SectionWithDivider'
import { ViewGap } from 'ui/components/ViewGap/ViewGap'
import { TypoDS, getSpacing } from 'ui/theme'
Expand Down Expand Up @@ -47,8 +46,7 @@ export const VenueBody: FunctionComponent<Props> = ({
const SectionContainer = isLargeScreen ? View : SectionWithDivider

const headlineData = offerToHeadlineOfferData({
// Fake data to remove
offer: offersFixture[0],
offer: venueOffers?.headlineOffer ?? null,
transformParameters: {
currency,
euroToPacificFrancRate,
Expand Down
1 change: 1 addition & 0 deletions src/features/venue/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export type TabType<TabKeyType extends string> = {
export type VenueOffers = {
hits: Offer[]
nbHits: number
headlineOffer: Offer
}

export type Artist = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,14 @@ type FetchMultipleOffersArgs = {
paramsList: PlaylistOffersParams[]
isUserUnderage: boolean
indexName?: string
venueId?: number
}

export const fetchMultipleOffers = async ({
paramsList,
isUserUnderage,
indexName = env.ALGOLIA_OFFERS_INDEX_NAME,
venueId,
}: FetchMultipleOffersArgs): Promise<VenueOffers> => {
const queries = paramsList.map((params) => ({
indexName,
Expand All @@ -29,20 +31,46 @@ export const fetchMultipleOffers = async ({
...buildHitsPerPage(params.offerParams.hitsPerPage),
...buildOfferSearchParameters(params.offerParams, params.locationParams, isUserUnderage),
attributesToHighlight: [], // We disable highlighting because we don't need it
attributesToRetrieve: offerAttributesToRetrieve,
attributesToRetrieve: [...offerAttributesToRetrieve, 'offer.isHeadline'],
},
}))

const headlineQuery = venueId
? {
indexName,
query: '',
params: {
filters: `venue.id:${venueId} AND offer.isHeadline:true`,
hitsPerPage: 1,
attributesToRetrieve: [...offerAttributesToRetrieve, 'offer.isHeadline'],
attributesToHighlight: [],
},
}
: null

if (headlineQuery) queries.push(headlineQuery)

try {
const results = await multipleQueries<Offer>(queries)
const searchResponseResults = results.filter(searchResponsePredicate)

/*
results renvoie un tableau avec 3 objet ce qui nous intéresse c'est
de prendre le dernier qui est notre ajout à la requête
Et ensuite il faut récupérer le premier objet dans hits qui est notre offer
qui est l'offre à la une
*/

const headlineResponse = results[results.length - 1]
const headlineOffer = headlineResponse?.hits?.[0] ?? null

return {
hits: flatten(searchResponseResults.map(({ hits }) => hits)),
nbHits: searchResponseResults.reduce((prev, curr) => prev + curr.nbHits, 0),
headlineOffer,
}
} catch (error) {
captureAlgoliaError(error)
return { hits: [] as Offer[], nbHits: 0 }
return { hits: [] as Offer[], nbHits: 0, headlineOffer: {} as Offer }
}
}
20 changes: 20 additions & 0 deletions src/libs/algolia/fetchAlgolia/fetchMultipleOffers/todo.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# TODO

## Links

- [PC-TicketNumber](https://passculture.atlassian.net/browse/PC-TicketNumber)
- [MobTime](https://mobtime.hadrienmp.fr/mob/pass-culture)

---

## Tasks

- [ ] Compléter et ajuster les tests nécesaire
- [ ] Gérer le champ isHeadlineUntil par rapport à la timestamps
- [ ]

---

## Tasks for another US

- [ ]

0 comments on commit d45f535

Please sign in to comment.