@@ -14,6 +14,37 @@ interface FilterProps {
1414 onChange : ( updatedFilter : FilterOption ) => void
1515}
1616
17+ const arePropsEqual = ( prevProps : FilterProps , nextProps : FilterProps ) => {
18+ if ( prevProps . filterIndex !== nextProps . filterIndex ) return false
19+ if ( prevProps . filter . title !== nextProps . filter . title ) return false
20+ if ( prevProps . filter . showFilterOption !== nextProps . filter . showFilterOption )
21+ return false
22+
23+ const prevItems = prevProps . filter . items
24+ const nextItems = nextProps . filter . items
25+
26+ if ( prevItems . length !== nextItems . length ) return false
27+
28+ for ( let i = 0 ; i < prevItems . length ; i ++ ) {
29+ const prevItem = prevItems [ i ]
30+ const nextItem = nextItems [ i ]
31+
32+ if ( prevItem . filterKey !== nextItem . filterKey ) return false
33+ if ( prevItem . inputState !== nextItem . inputState ) return false
34+
35+ if ( prevItem . options . length !== nextItem . options . length ) return false
36+
37+ for ( let j = 0 ; j < prevItem . options . length ; j ++ ) {
38+ if ( prevItem . options [ j ] . filterKey !== nextItem . options [ j ] . filterKey )
39+ return false
40+ if ( prevItem . options [ j ] . inputState !== nextItem . options [ j ] . inputState )
41+ return false
42+ }
43+ }
44+
45+ return true
46+ }
47+
1748const Filter = ( { filter, filterIndex, onChange } : FilterProps ) => {
1849 const handleChange = (
1950 _ : number ,
@@ -110,4 +141,4 @@ const Filter = ({ filter, filterIndex, onChange }: FilterProps) => {
110141 )
111142}
112143
113- export default memo ( Filter )
144+ export default memo ( Filter , arePropsEqual )
0 commit comments