11import { Dispatch , SetStateAction } from 'react' ;
22import { Product , ProductType } from '@/types/product' ;
3+ import Button from '@/components/UI/Button.component' ;
4+ import Checkbox from '@/components/UI/Checkbox.component' ;
5+ import RangeSlider from '@/components/UI/RangeSlider.component' ;
36
47interface ProductFiltersProps {
58 selectedSizes : string [ ] ;
@@ -65,59 +68,48 @@ const ProductFilters = ({
6568
6669 return (
6770 < div className = "w-full md:w-64 flex-shrink-0" >
68- < div className = "bg-white p -8 sm:p -6 rounded-lg shadow-sm" >
71+ < div className = "bg-white px -8 pb-8 sm:px-6 sm:pb -6 rounded-lg shadow-sm" >
6972 < div className = "mb-8" >
7073 < h3 className = "font-semibold mb-4" > PRODUKT TYPE</ h3 >
7174 < div className = "space-y-2" >
7275 { productTypes . map ( ( type ) => (
73- < label key = { type . id } className = "flex items-center" >
74- < input
75- type = "checkbox"
76- className = "form-checkbox"
77- checked = { type . checked }
78- onChange = { ( ) => toggleProductType ( type . id ) }
79- />
80- < span className = "ml-2" > { type . name } </ span >
81- </ label >
76+ < Checkbox
77+ key = { type . id }
78+ id = { type . id }
79+ label = { type . name }
80+ checked = { type . checked }
81+ onChange = { ( ) => toggleProductType ( type . id ) }
82+ />
8283 ) ) }
8384 </ div >
8485 </ div >
8586
8687 < div className = "mb-8" >
8788 < h3 className = "font-semibold mb-4" > PRIS</ h3 >
88- < label htmlFor = "price-range" className = "sr-only" > Pris</ label >
89- < input
90- id = "price-range"
91- type = "range"
92- min = "0"
93- max = "1000"
94- value = { priceRange [ 1 ] }
95- onChange = { ( e ) =>
96- setPriceRange ( [ priceRange [ 0 ] , parseInt ( e . target . value ) ] )
97- }
98- className = "w-full"
99- />
100- < div className = "flex justify-between mt-2" >
101- < span > kr { priceRange [ 0 ] } </ span >
102- < span > kr { priceRange [ 1 ] } </ span >
103- </ div >
89+ < RangeSlider
90+ id = "price-range"
91+ label = "Pris"
92+ min = { 0 }
93+ max = { 1000 }
94+ value = { priceRange [ 1 ] }
95+ startValue = { priceRange [ 0 ] }
96+ onChange = { ( value ) => setPriceRange ( [ priceRange [ 0 ] , value ] ) }
97+ formatValue = { ( value ) => `kr ${ value } ` }
98+ />
10499 </ div >
105100
106101 < div className = "mb-8" >
107102 < h3 className = "font-semibold mb-4" > STØRRELSE</ h3 >
108103 < div className = "grid grid-cols-3 gap-2" >
109104 { sizes . map ( ( size ) => (
110- < button
105+ < Button
111106 key = { size }
112- onClick = { ( ) => toggleSize ( size ) }
113- className = { `px-3 py-1 border rounded ${
114- selectedSizes . includes ( size )
115- ? 'bg-gray-900 text-white'
116- : 'hover:bg-gray-100'
117- } `}
107+ handleButtonClick = { ( ) => toggleSize ( size ) }
108+ variant = "filter"
109+ selected = { selectedSizes . includes ( size ) }
118110 >
119111 { size }
120- </ button >
112+ </ Button >
121113 ) ) }
122114 </ div >
123115 </ div >
@@ -142,12 +134,12 @@ const ProductFilters = ({
142134 </ div >
143135 </ div >
144136
145- < button
146- onClick = { resetFilters }
147- className = "w-full mt-8 py-2 px-4 bg-gray-100 text-gray-700 rounded hover:bg-gray-200 transition-colors "
137+ < Button
138+ handleButtonClick = { resetFilters }
139+ variant = "reset "
148140 >
149141 Resett filter
150- </ button >
142+ </ Button >
151143 </ div >
152144 </ div >
153145 ) ;
0 commit comments