Skip to content

Commit

Permalink
(PC-32988) after review refacto adapter
Browse files Browse the repository at this point in the history
  • Loading branch information
yleclercq-pass committed Feb 3, 2025
1 parent 2b0e626 commit 2818681
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 38 deletions.
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
import { headlineOfferData } from 'features/headlineOffer/adapters/headlineOfferData'
import { offerToHeadlineOfferData } from 'features/headlineOffer/adapters/headlineOfferData'
import { mockLabelMapping, mockMapping } from 'features/headlineOffer/fixtures/mockMapping'
import { Currency } from 'shared/currency/useGetCurrencyToDisplay'
import { offersFixture } from 'shared/offer/offer.fixture'

describe('headlineOfferData', () => {
it('should transform headline offer data correctly', () => {
const result = headlineOfferData({
const result = offerToHeadlineOfferData({
offer: offersFixture[0],
mapping: mockMapping,
labelMapping: mockLabelMapping,
currency: Currency.EURO,
euroToPacificFrancRate: 10,
userLocation: { latitude: 1, longitude: 1 },
transformParameters: {
mapping: mockMapping,
labelMapping: mockLabelMapping,
currency: Currency.EURO,
euroToPacificFrancRate: 10,
userLocation: { latitude: 1, longitude: 1 },
},
})

expect(result).toEqual({
Expand Down
27 changes: 14 additions & 13 deletions src/features/headlineOffer/adapters/headlineOfferData.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,40 @@
import { HeadlineOfferData } from 'features/headlineOffer/type'
import { Position } from 'libs/location'
import { formatDistance } from 'libs/parsers/formatDistance'
import { getDisplayedPrice } from 'libs/parsers/getDisplayedPrice'
import { CategoryHomeLabelMapping, CategoryIdMapping } from 'libs/subcategories/types'
import { Currency } from 'shared/currency/useGetCurrencyToDisplay'
import { Offer } from 'shared/offer/types'

type HeadlineOfferData = {
offer: Offer
type OfferToHeadlineOfferData = {
mapping: CategoryIdMapping
labelMapping: CategoryHomeLabelMapping
currency: Currency
euroToPacificFrancRate: number
userLocation?: Position
}

export function headlineOfferData({
type OfferToHeadlineParams = {
offer: Offer
transformParameters: OfferToHeadlineOfferData
}

export function offerToHeadlineOfferData({
offer,
mapping,
labelMapping,
currency,
euroToPacificFrancRate,
userLocation,
}: HeadlineOfferData) {
if (!offer) return
transformParameters,
}: OfferToHeadlineParams): HeadlineOfferData | null {
if (!offer) return null

const { offer: hitOffer, objectID, _geoloc } = offer

if (!hitOffer.thumbUrl) return
const { mapping, labelMapping, currency, euroToPacificFrancRate, userLocation } =
transformParameters

const displayedPrice = getDisplayedPrice(hitOffer.prices, currency, euroToPacificFrancRate)

return {
id: objectID,
offerTitle: hitOffer.name,
imageUrl: hitOffer.thumbUrl,
imageUrl: hitOffer.thumbUrl ?? '',
categoryId: mapping[hitOffer.subcategoryId],
category: labelMapping[hitOffer.subcategoryId] ?? '',
price: displayedPrice,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import React, { FunctionComponent } from 'react'
import LinearGradient from 'react-native-linear-gradient'
import styled, { useTheme } from 'styled-components/native'

import { CategoryIdEnum } from 'api/gen'
import { HeadlineOfferData } from 'features/headlineOffer/type'
import { Image } from 'libs/resizing-image-on-demand/Image'

import { HeadlineOfferLargeViewport } from './HeadlineOfferLargeViewport'
Expand All @@ -12,16 +12,7 @@ import { HeadlineOfferSmallViewport } from './HeadlineOfferSmallViewport'
const HEADLINE_OFFER_LARGE_VIEWPORT = 327
const HEADLINE_OFFER_SMALL_VIEWPORT = 245

export type HeadlineOfferBaseProps = {
imageUrl: string
categoryId: CategoryIdEnum
category: string
price: string
offerTitle?: string
distance?: string
}

export const HeadlineOffer: FunctionComponent<HeadlineOfferBaseProps> = (props) => {
export const HeadlineOffer: FunctionComponent<HeadlineOfferData> = (props) => {
const { isDesktopViewport } = useTheme()
const HeadlineOfferContent = isDesktopViewport
? HeadlineOfferLargeViewport
Expand Down
11 changes: 11 additions & 0 deletions src/features/headlineOffer/type.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { CategoryIdEnum } from 'api/gen'

export type HeadlineOfferData = {
id: string
imageUrl: string
categoryId: CategoryIdEnum
category: string
price: string
offerTitle?: string
distance?: string
}
16 changes: 9 additions & 7 deletions src/features/venue/components/VenueBody/VenueBody.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import styled, { useTheme } from 'styled-components/native'

import { VenueResponse } from 'api/gen'
import { GtlPlaylistData } from 'features/gtlPlaylist/types'
import { headlineOfferData } from 'features/headlineOffer/adapters/headlineOfferData'
import { offerToHeadlineOfferData } from 'features/headlineOffer/adapters/headlineOfferData'
import { HeadlineOffer } from 'features/headlineOffer/components/HeadlineOffer/HeadlineOffer'
import { PracticalInformation } from 'features/venue/components/PracticalInformation/PracticalInformation'
import { TabLayout } from 'features/venue/components/TabLayout/TabLayout'
Expand Down Expand Up @@ -46,14 +46,16 @@ export const VenueBody: FunctionComponent<Props> = ({

const SectionContainer = isLargeScreen ? View : SectionWithDivider

const headlineData = headlineOfferData({
const headlineData = offerToHeadlineOfferData({
// Fake data to remove
offer: offersFixture[0],
currency,
euroToPacificFrancRate,
mapping,
labelMapping,
userLocation,
transformParameters: {
currency,
euroToPacificFrancRate,
mapping,
labelMapping,
userLocation,
},
})

const tabPanels = {
Expand Down

0 comments on commit 2818681

Please sign in to comment.