Description
🐛 Bug Report
We are using Picker in CEP panel in Adobe Illustrator. We have ~300 Items in the Picker so that they can not fit into single Picker page. After scrolling and selecting an item the Picker sometimes throws an error. It is not possible to write exact steps to reproduce. The problem appear 'randomly'. With small number of Items the problem does not appear as all items fit into single page of Picker - assumably because the Picker does not need to use Virtualizer.
🤔 Expected Behavior
It is possible to select item from the Picker without getting an Error.
😯 Current Behavior
When the problem appears we see this call stack
Uncaught TypeError: Cannot read property 'key' of null at useVirtualizerItem (module.js:299) at VirtualizerItem (module.js:324) at renderWithHooks (react-dom.development.js:14803) at updateFunctionComponent (react-dom.development.js:17034) at beginWork (react-dom.development.js:18610) at HTMLUnknownElement.callCallback (react-dom.development.js:188) at Object.invokeGuardedCallbackDev (react-dom.development.js:237) at invokeGuardedCallback (react-dom.development.js:292) at beginWork$1 (react-dom.development.js:23203) at performUnitOfWork (react-dom.development.js:22157) useVirtualizerItem @ module.js:299 VirtualizerItem @ module.js:324 renderWithHooks @ react-dom.development.js:14803 updateFunctionComponent @ react-dom.development.js:17034 beginWork @ react-dom.development.js:18610 callCallback @ react-dom.development.js:188 invokeGuardedCallbackDev @ react-dom.development.js:237 invokeGuardedCallback @ react-dom.development.js:292 beginWork$1 @ react-dom.development.js:23203 performUnitOfWork @ react-dom.development.js:22157 workLoopSync @ react-dom.development.js:22130 performSyncWorkOnRoot @ react-dom.development.js:21756 (anonymous) @ react-dom.development.js:11089 unstable_runWithPriority @ scheduler.development.js:653 runWithPriority$1 @ react-dom.development.js:11039 flushSyncCallbackQueueImpl @ react-dom.development.js:11084 flushSyncCallbackQueue @ react-dom.development.js:11072 scheduleUpdateOnFiber @ react-dom.development.js:21199 dispatchAction @ react-dom.development.js:15660 (anonymous) @ predefinedTextPanel.tsx:68 step @ predefinedTextPanel.tsx:52 (anonymous) @ predefinedTextPanel.tsx:33 fulfilled @ predefinedTextPanel.tsx:24 Promise resolved (async) step @ predefinedTextPanel.tsx:26 (anonymous) @ predefinedTextPanel.tsx:27 __awaiter @ predefinedTextPanel.tsx:23 updateElement @ predefinedTextPanel.tsx:62 (anonymous) @ predefinedTextPanel.tsx:109 step @ predefinedTextPanel.tsx:52 (anonymous) @ predefinedTextPanel.tsx:33 (anonymous) @ predefinedTextPanel.tsx:27 __awaiter @ predefinedTextPanel.tsx:23 onSelectionChange @ predefinedTextPanel.tsx:106 onChangeCaller @ module.js:31 (anonymous) @ module.js:67 onSelectionChange @ module.js:33 onChangeCaller @ module.js:31 (anonymous) @ module.js:67 replaceSelection @ module.js:338 onSelect @ module.js:399 itemProps.onPressUp.e @ module.js:445 triggerPressUp @ module.js:153 pressProps.onTouchEnd.e @ module.js:486 callCallback @ react-dom.development.js:188 invokeGuardedCallbackDev @ react-dom.development.js:237 invokeGuardedCallback @ react-dom.development.js:292 invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:306 executeDispatch @ react-dom.development.js:389 executeDispatchesInOrder @ react-dom.development.js:414 executeDispatchesAndRelease @ react-dom.development.js:3278 executeDispatchesAndReleaseTopLevel @ react-dom.development.js:3287 forEachAccumulated @ react-dom.development.js:3259 runEventsInBatch @ react-dom.development.js:3304 runExtractedPluginEventsInBatch @ react-dom.development.js:3514 handleTopLevel @ react-dom.development.js:3558 batchedEventUpdates$1 @ react-dom.development.js:21871 batchedEventUpdates @ react-dom.development.js:795 dispatchEventForLegacyPluginEventSystem @ react-dom.development.js:3568 attemptToDispatchEvent @ react-dom.development.js:4267 dispatchEvent @ react-dom.development.js:4189 unstable_runWithPriority @ scheduler.development.js:653 runWithPriority$1 @ react-dom.development.js:11039 discreteUpdates$1 @ react-dom.development.js:21887 discreteUpdates @ react-dom.development.js:806 dispatchDiscreteEvent @ react-dom.development.js:4168 Show 35 more frames
💁 Possible Solution
🔦 Context
The whole application crashes.
💻 Code Sample
this is our Picker definition:
<Picker aria-label="Select Product" gridRow="2" gridColumn="2" items={predefinedTextItems} selectedKey={selectedPredefinedTextId} onSelectionChange={async (id: string) => { console.log('selection changed ' + id); setSelectedPredefinedTextId(id); await updateElement(id, culture, contentInt); }} > {(item) => ( <Item key={item.reusableFieldId}> {
${item.purposeName}${item.textSelector == 'default' ? '' : '/' + item.textSelector}} </Item> )} </Picker>
` const updateElement = async (predefinedTextId: string, culture: string, cnt: string) => {
const selectedTextItem = findPredefinedTextById(predefinedTextId);
if (culture && selectedTextItem) {
const localizedText = await getLocalizedText(culture, selectedTextItem.textKey);
if (localizedText != null) {
setContentInt(localizedText);
onChange(culture, selectedTextItem, localizedText);
}
} else {
onChange(culture, selectedTextItem, cnt);
}
};
`
🌍 Your Environment
react-spectrum 3.0.0
CEP panel in Ilustrator
Windows 10
System |
🧢 Your Company/Team
Cimpress