Skip to content

Commit 3512821

Browse files
authored
feat: manage big value in comparateur (#803)
1 parent e32089f commit 3512821

10 files changed

Lines changed: 60 additions & 28 deletions

File tree

src/components/base/LocalNumber.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client'
22

3-
import React, { useEffect, useState } from 'react'
3+
import { useEffect, useState } from 'react'
44

55
const LocalNumber = ({ number }: { number: number }) => {
66
const [value, setValue] = useState(number.toLocaleString('fr-FR'))

src/components/comparateur/Tiles.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use client'
22

33
import { useTranslations } from 'next-intl'
4-
import React, { useEffect, useRef, useState } from 'react'
4+
import { useEffect, useRef, useState } from 'react'
55
import useParamContext from 'src/providers/ParamProvider'
66
import { track } from 'utils/matomo'
77
import Button from 'components/base/buttons/Button'
@@ -15,7 +15,7 @@ const Tiles = () => {
1515
const t = useTranslations('comparateur')
1616
const {
1717
setOverscreen,
18-
comparateur: { comparedEquivalent, equivalents, setEquivalents },
18+
comparateur: { comparedEquivalent, equivalents, setEquivalents, baseValue, weight },
1919
} = useParamContext()
2020

2121
const [generation, setGeneration] = useState<number | boolean>(false)
@@ -60,7 +60,7 @@ const Tiles = () => {
6060
track('Comparateur', 'Générer d’autres équivalents', 'generate_equivalent')
6161
setGeneration(0)
6262
setTimeout(() => {
63-
setEquivalents(getRandomEquivalents(comparedEquivalent?.slug, equivalents.length))
63+
setEquivalents(getRandomEquivalents(baseValue * weight, comparedEquivalent?.slug, equivalents.length))
6464
setTimeout(() => {
6565
setGeneration(1)
6666
if (firstRef.current) {

src/components/comparateur/overscreens/Category.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const Category = ({
2626
equivalents: string[]
2727
}) => {
2828
const {
29-
comparateur: { comparedEquivalent, setEquivalents: setFinalEquivalents },
29+
comparateur: { comparedEquivalent, setEquivalents: setFinalEquivalents, baseValue, weight },
3030
} = useParamContext()
3131

3232
const [open, setOpen] = useState(false)
@@ -80,7 +80,7 @@ const Category = ({
8080
priority='outline'
8181
onClick={() => {
8282
setFinalEquivalents(
83-
getRandomEquivalentsInCategory(comparedEquivalent?.slug, category.id).map(
83+
getRandomEquivalentsInCategory(baseValue * weight, comparedEquivalent?.slug, category.id).map(
8484
(equivalent) => equivalent.slug
8585
)
8686
)
Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
import { computedEquivalents } from 'src/providers/equivalents'
22

3-
const getRandomEquivalent = (toIgnore: string[], category?: number) => {
4-
const meaningfullEquivalents = computedEquivalents
3+
const getRandomEquivalent = (value: number, toIgnore: string[], category?: number) => {
4+
const allEquivalents = computedEquivalents
55
.filter((equivalent) => equivalent.value)
66
.filter((equivalent) => !toIgnore.includes(equivalent.slug))
77

8+
let meaningfullEquivalents = allEquivalents.filter(
9+
(equivalent) => value / equivalent.value >= 0.1 && value / equivalent.value <= 99_999
10+
)
11+
if (meaningfullEquivalents.length === 0) {
12+
meaningfullEquivalents = allEquivalents
13+
}
14+
815
let categoryEquivalents: typeof computedEquivalents = []
916
if (category) {
1017
categoryEquivalents = meaningfullEquivalents.filter((equivalent) => equivalent.category === category)
1118
}
19+
1220
if (categoryEquivalents.length === 0) {
1321
const categories = [...new Set(meaningfullEquivalents.map((equivalent) => equivalent.category))]
1422
const randomCategory = categories[Math.floor(Math.random() * categories.length)]
@@ -18,40 +26,46 @@ const getRandomEquivalent = (toIgnore: string[], category?: number) => {
1826
return categoryEquivalents[Math.floor(Math.random() * categoryEquivalents.length)].slug
1927
}
2028

21-
export const getRandomEquivalents = (current: string | undefined, length: number) => {
22-
const casPratique = getRandomEquivalent(current ? [current] : [], 13)
29+
export const getRandomEquivalents = (value: number, current: string | undefined, length: number) => {
30+
const casPratique = getRandomEquivalent(value, current ? [current] : [], 13)
2331
if (length === 1) {
2432
return [casPratique]
2533
}
26-
const numerique = getRandomEquivalent(current ? [current] : [], 1)
34+
const numerique = getRandomEquivalent(value, current ? [casPratique, current] : [casPratique], 1)
2735
if (length === 2) {
2836
return [casPratique, numerique]
2937
}
3038

31-
const repas = getRandomEquivalent(current ? [current] : [], 2)
39+
const repas = getRandomEquivalent(value, current ? [casPratique, numerique, current] : [casPratique, numerique], 2)
3240
if (length === 3) {
3341
return [casPratique, numerique, repas]
3442
}
3543

3644
const objects = [casPratique, numerique, repas]
3745
for (let i = 3; i < length; i++) {
38-
objects.push(getRandomEquivalent(current ? [...objects, current] : objects))
46+
objects.push(getRandomEquivalent(value, current ? [...objects, current] : objects))
3947
}
4048
return objects
4149
}
4250

43-
export const getFullRandomEquivalents = () => {
51+
export const getFullRandomEquivalents = (value: number) => {
4452
const objects: string[] = []
4553
for (let i = 0; i < 3; i++) {
46-
objects.push(getRandomEquivalent(objects))
54+
objects.push(getRandomEquivalent(value, objects))
4755
}
4856
return objects
4957
}
5058

51-
export const getRandomEquivalentsInCategory = (current: string | undefined, category: number) => {
52-
const meaningfullEquivalents = computedEquivalents.filter(
59+
export const getRandomEquivalentsInCategory = (value: number, current: string | undefined, category: number) => {
60+
const allEquivalents = computedEquivalents.filter(
5361
(equivalent) => equivalent.category === category && current !== equivalent.slug
5462
)
63+
let meaningfullEquivalents = allEquivalents.filter(
64+
(equivalent) => value / equivalent.value >= 0.1 && value / equivalent.value <= 99_999
65+
)
66+
if (meaningfullEquivalents.length === 0) {
67+
meaningfullEquivalents = allEquivalents
68+
}
5569
const shuffled = [...meaningfullEquivalents].sort(() => 0.5 - Math.random())
5670
return shuffled.slice(0, Math.min(meaningfullEquivalents.length, 8))
5771
}

src/components/comparateur/randomEtiquette.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const defaultEquivalents = {
22
all: [
33
{ max: 1_000, equivalents: [['tgv'], ['eaudurobinet'], ['pomme'], ['email']] },
44
{
5+
min: 1_000,
56
max: 50_000,
67
equivalents: [
78
['friends', 'game-of-thrones'],

src/components/home/Equivalents.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import Input from 'components/form/Input'
1616
import EquivalentCard from './EquivalentCard'
1717
import styles from './Equivalents.module.css'
1818

19-
const generate = () => getRandomEquivalents('', 3).map((slug) => computedEquivalents.find((x) => x.slug === slug))
19+
const generate = () => getRandomEquivalents(100, '', 3).map((slug) => computedEquivalents.find((x) => x.slug === slug))
2020

2121
const Equivalents = () => {
2222
const firstRef = useRef<HTMLAnchorElement>(null)

src/components/outils/TeletravailSimulator.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,12 @@ const TeletravailSimulator = () => {
6969
}, [itineraries, deplacement, presentiel])
7070

7171
useEffect(() => {
72-
setEquivalents(getRandomEquivalentForValue(0.75 * homeOffice * total * 1000))
72+
const newEquivalents = getRandomEquivalentForValue(0.75 * homeOffice * total * 1000)
73+
if (newEquivalents.length > 0) {
74+
setEquivalents(newEquivalents)
75+
} else {
76+
setEquivalents(getFullRandomEquivalents(0.75 * homeOffice * total))
77+
}
7378
}, [total, homeOffice])
7479

7580
return (
@@ -175,7 +180,7 @@ const TeletravailSimulator = () => {
175180
ref={ref}
176181
randomize={() => {
177182
track('Télétravail', 'Randomize', 'randomize')
178-
setEquivalents(getFullRandomEquivalents())
183+
setEquivalents(getFullRandomEquivalents(0.75 * homeOffice * total))
179184
}}
180185
language={language}
181186
/>

src/components/outils/osezChanger/OsezChangerSimulator.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import classNames from 'classnames'
44
import { useTranslations } from 'next-intl'
5-
import React, { useEffect, useRef, useState } from 'react'
5+
import { useEffect, useRef, useState } from 'react'
66
import useParamContext from 'src/providers/ParamProvider'
77
import formatName from 'utils/formatName'
88
import formatNumber from 'utils/formatNumber'
@@ -31,8 +31,11 @@ const OsezChangerSimulator = () => {
3131
const total = (newValue || 0) * shoesImpact
3232

3333
useEffect(() => {
34-
if (newValue) {
35-
setEquivalents(getRandomEquivalentForValue((newValue || 0) * shoesImpact * 1000))
34+
const newEquivalents = getRandomEquivalentForValue((newValue || 0) * shoesImpact * 1000)
35+
if (newEquivalents.length > 0) {
36+
setEquivalents(newEquivalents)
37+
} else {
38+
setEquivalents(getFullRandomEquivalents((newValue || 0) * shoesImpact))
3639
}
3740
}, [newValue])
3841

@@ -86,7 +89,7 @@ const OsezChangerSimulator = () => {
8689
ref={ref}
8790
randomize={() => {
8891
track('OsezChanger', 'Randomize', 'randomize')
89-
setEquivalents(getFullRandomEquivalents())
92+
setEquivalents(getFullRandomEquivalents(total))
9093
}}
9194
language={language}
9295
/>

src/components/outils/usageNumerique/UsageNumeriqueSimulator.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import { useTranslations } from 'next-intl'
44
import { useSearchParams } from 'next/navigation'
5-
import React, { useEffect, useMemo, useRef } from 'react'
5+
import { useEffect, useMemo, useRef } from 'react'
66
import useParamContext from 'src/providers/ParamProvider'
77
import useUsageNumeriqueContext from 'src/providers/UsageNumeriqueProvider'
88
import { Category } from 'types/category'
@@ -118,7 +118,12 @@ const UsageNumeriqueSimulator = () => {
118118
)
119119

120120
useEffect(() => {
121-
setEquivalents(getRandomEquivalentForValue(total * 52))
121+
const newEquivalents = getRandomEquivalentForValue(total * 52)
122+
if (newEquivalents.length > 0) {
123+
setEquivalents(newEquivalents)
124+
} else {
125+
setEquivalents(getFullRandomEquivalents((total * 52) / 1000))
126+
}
122127
}, [total])
123128

124129
return (
@@ -160,7 +165,7 @@ const UsageNumeriqueSimulator = () => {
160165
ref={ref}
161166
randomize={() => {
162167
track('Usage numérique', 'Randomize', 'randomize')
163-
setEquivalents(getFullRandomEquivalents())
168+
setEquivalents(getFullRandomEquivalents((total * 52) / 1000))
164169
}}
165170
language={language}
166171
/>

src/providers/ParamProvider.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,11 @@ export function ParamProvider({ children }: { children: ReactNode }) {
387387
.filter((slug) => slug.includes('+') || computedEquivalents.find((equivalent) => equivalent.slug === slug))
388388
)
389389
} else {
390-
setEquivalents(getRandomEquivalents(searchParams.get('equivalent') as string, 3))
390+
const value = Number.parseFloat(searchParams.get('value') as string)
391+
392+
setEquivalents(
393+
getRandomEquivalents(Number.isNaN(value) ? 100 : value, searchParams.get('equivalent') as string, 3)
394+
)
391395
}
392396

393397
if (searchParams.get('m2')) {

0 commit comments

Comments
 (0)