|
1 | | -import React, { PropsWithChildren, useContext, useState } from 'react'; |
| 1 | +import React, { PropsWithChildren, useCallback, useContext, useMemo, useState } from 'react'; |
2 | 2 |
|
3 | 3 | import type { CommandResponse, UserResponse } from 'stream-chat'; |
4 | 4 |
|
@@ -95,35 +95,54 @@ export const SuggestionsProvider = < |
95 | 95 | children, |
96 | 96 | value, |
97 | 97 | }: PropsWithChildren<{ value?: Partial<SuggestionsContextValue<StreamChatGenerics>> }>) => { |
| 98 | + const { AutoCompleteSuggestionHeader, AutoCompleteSuggestionItem, AutoCompleteSuggestionList } = |
| 99 | + value ?? {}; |
98 | 100 | const [triggerType, setTriggerType] = useState<SuggestionComponentType | null>(null); |
99 | 101 | const [suggestions, setSuggestions] = useState<Suggestions<StreamChatGenerics>>(); |
100 | 102 | const [suggestionsViewActive, setSuggestionsViewActive] = useState(false); |
101 | 103 |
|
102 | | - const openSuggestions = (component: SuggestionComponentType) => { |
| 104 | + const openSuggestions = useCallback((component: SuggestionComponentType) => { |
103 | 105 | setTriggerType(component); |
104 | 106 | setSuggestionsViewActive(true); |
105 | | - }; |
106 | | - |
107 | | - const updateSuggestions = (newSuggestions: Suggestions<StreamChatGenerics>) => { |
108 | | - setSuggestions(newSuggestions); |
109 | | - setSuggestionsViewActive(!!triggerType); |
110 | | - }; |
| 107 | + }, []); |
| 108 | + |
| 109 | + const updateSuggestions = useCallback( |
| 110 | + (newSuggestions: Suggestions<StreamChatGenerics>) => { |
| 111 | + setSuggestions(newSuggestions); |
| 112 | + setSuggestionsViewActive(!!triggerType); |
| 113 | + }, |
| 114 | + [triggerType], |
| 115 | + ); |
111 | 116 |
|
112 | | - const closeSuggestions = () => { |
| 117 | + const closeSuggestions = useCallback(() => { |
113 | 118 | setTriggerType(null); |
114 | 119 | setSuggestions(undefined); |
115 | 120 | setSuggestionsViewActive(false); |
116 | | - }; |
117 | | - |
118 | | - const suggestionsContext = { |
119 | | - ...value, |
| 121 | + }, []); |
| 122 | + |
| 123 | + const suggestionsContext = useMemo(() => { |
| 124 | + return { |
| 125 | + AutoCompleteSuggestionHeader, |
| 126 | + AutoCompleteSuggestionItem, |
| 127 | + AutoCompleteSuggestionList, |
| 128 | + closeSuggestions, |
| 129 | + openSuggestions, |
| 130 | + suggestions, |
| 131 | + suggestionsViewActive, |
| 132 | + triggerType, |
| 133 | + updateSuggestions, |
| 134 | + }; |
| 135 | + }, [ |
| 136 | + AutoCompleteSuggestionHeader, |
| 137 | + AutoCompleteSuggestionItem, |
| 138 | + AutoCompleteSuggestionList, |
120 | 139 | closeSuggestions, |
121 | 140 | openSuggestions, |
122 | 141 | suggestions, |
123 | 142 | suggestionsViewActive, |
124 | 143 | triggerType, |
125 | 144 | updateSuggestions, |
126 | | - }; |
| 145 | + ]); |
127 | 146 |
|
128 | 147 | return ( |
129 | 148 | <SuggestionsContext.Provider value={suggestionsContext as unknown as SuggestionsContextValue}> |
|
0 commit comments