1- import React , { useState } from 'react'
1+ import React , { useState , useEffect } from 'react'
22import { useRarityManagement } from "../hooks/useRarityManagement" ;
33import RaritySelect from "./rarity-select" ;
44import { Spark } from "@img/index" ;
55import { Switch } from "@shared/ui/switch" ;
66import { Input } from '@shared/ui/input' ;
77import { Button } from "@shared/ui/button" ;
8+ import { useUserPreference } from "@context/userPreference.context" ;
89
910const defaultSlot = {
1011 rarity : '' ,
1112 energyStart : '' ,
1213 energyEnd : ''
1314}
1415
15- export default function Calculator ( ) {
16+ export default function Calculator ( { onEnergyUsedChange, onPriceChange } ) {
17+ const { streamerMode } = useUserPreference ( ) ;
1618 const { rarities } = useRarityManagement ( ) ;
17-
1819 const rarityPrices = rarities . reduce ( ( acc , r ) => {
1920 if ( r . price ) acc [ r . rarity . toLowerCase ( ) ] = r . price ;
2021 return acc ;
2122 } , { } ) ;
2223
23- const [ slots , setSlots ] = useState ( Array ( 5 ) . fill ( { ...defaultSlot } ) )
24- const [ autoComplete , setAutoComplete ] = useState ( false )
24+ // Initialiser les slots et l'état d'autocomplétion à partir du localStorage
25+ const [ slots , setSlots ] = useState ( ( ) => {
26+ const saved = localStorage . getItem ( "calculator_slots" ) ;
27+ return saved ? JSON . parse ( saved ) : Array ( 5 ) . fill ( { ...defaultSlot } ) ;
28+ } ) ;
29+ const [ autoComplete , setAutoComplete ] = useState ( ( ) => {
30+ const saved = localStorage . getItem ( "calculator_autocomplete" ) ;
31+ return saved ? JSON . parse ( saved ) : false ;
32+ } ) ;
33+
34+ useEffect ( ( ) => {
35+ localStorage . setItem ( "calculator_slots" , JSON . stringify ( slots ) ) ;
36+ localStorage . setItem ( "calculator_autocomplete" , JSON . stringify ( autoComplete ) ) ;
37+ } , [ slots , autoComplete ] ) ;
2538
2639 const handleChange = ( index , field , value ) => {
2740 const updated = [ ...slots ]
@@ -54,6 +67,14 @@ export default function Calculator() {
5467 } ) )
5568 ) ;
5669 } ;
70+
71+ useEffect ( ( ) => {
72+ if ( onEnergyUsedChange ) onEnergyUsedChange ( totalEnergyUsed )
73+ } , [ totalEnergyUsed ] )
74+
75+ useEffect ( ( ) => {
76+ if ( onPriceChange ) onPriceChange ( totalPriceEnergyUsed )
77+ } , [ totalPriceEnergyUsed ] )
5778
5879 return (
5980 < div className = "border-4 border-yellow-400 rounded-lg mb-10 w-[auto] p-4" >
@@ -79,6 +100,9 @@ export default function Calculator() {
79100 onChange = { val => handleChange ( i , 'rarity' , val ) }
80101 disabled = { false }
81102 showIssueId = { true }
103+ selectedBadges = { slots
104+ . filter ( ( _ , idx ) => idx !== i && _ . rarity !== "none" )
105+ . map ( r => r . rarity ) }
82106 />
83107 </ div >
84108
@@ -98,7 +122,7 @@ export default function Calculator() {
98122 />
99123 </ div >
100124 < div className = "flex flex-col w-full md:w-1/2" >
101- < span className = { `text-s mb-1 max-w-[88 %] font-bold ${ slot . rarity && slot . rarity !== "none" ? "text-white" : "text-gray-400" } ` } >
125+ < span className = { `text-s mb-1 max-w-[87 %] font-bold ${ slot . rarity && slot . rarity !== "none" ? "text-white" : "text-gray-400" } ` } >
102126 ENERGY END
103127 </ span >
104128 < Input
@@ -122,9 +146,11 @@ export default function Calculator() {
122146 < p >
123147 < span className = "text-3xl font-bold text-red-500" > { totalEnergyUsed } </ span >
124148 </ p >
125- < p className = "text-md font-semibold" >
126- < span className = "text-red-500" > { totalPriceEnergyUsed . toFixed ( 2 ) } $</ span >
127- </ p >
149+ { ! streamerMode && (
150+ < p className = "text-md font-semibold" >
151+ < span className = "text-red-500" > { totalPriceEnergyUsed . toFixed ( 2 ) } $</ span >
152+ </ p >
153+ ) }
128154 </ div >
129155 < Button
130156 onClick = { ( ) => {
0 commit comments