fix(#3884): useGrid: gracefully handle focus when a focused row is removed from the collection (#3885)
* useTable: restore focus after current row is removed
When one or more rows are removed, restore focus to the appropriate cell within the next or previous remaining row.
TODO: Address race condition within CRUD example, using mouse, where pressing Delete button within the overlay dialog removes the row and closes the dialog losing focus to the document.body before useTable can restore focus to the appropriate key within the next or previous row. This causes the focus to be restored to the Select All checkbox.
* fix CRUDExample by waiting 3 frames before removing the row
* fix(#3884): refactor behavior from useTable to useGrid
* fix(#3884): add renderEmptyState examples that allow item removal
* fix(#3884): fix unit test to account for renderEmptyState
* fix(#3884): fix getKeyAbove on row removal
* fix(#3884): useGrid: refactor to use the last focused row index
* fix(#3884): add support for useGridList
* fix(#3884): refactor into useGridState and useListState
* fix(#3885): remove redundancy
* fix(#3885): remove redundancy
* fix(#3884): refine while loop to find non-disabled items
* fix(#3884): add unit test for disabled item in ListView
* fix(#3884): useListState fix itemNode filter
* fix(#3884): add ListBox story
* fix(#3884): updates per code review
* fix(#3884): add ListBox unit test
* fix(#3884): ListView stories add disabledBehavior attribute
* fix(#3884): Remove unnecessary ListView story
* fix(#3884): add unit test for row and column removal at same time
* fix(#3884): better handle when multiple rows are removed at once
Per code review comment: https://github.com/adobe/react-spectrum/pull/3885#discussion_r1072940153
* fix(#3884): Table.stories fix merge conflict
---------
Co-authored-by: Daniel Lu <dl1644@gmail.com>