@@ -259,6 +250,15 @@ export default class EditorPage extends React.Component
+
+
+
{
@@ -21,7 +21,7 @@ describe("Editor SideBar", () => {
const wrapper = createComponent(props);
expect(wrapper.exists()).toBe(true);
expect(wrapper.find(AutoSizer).exists()).toBe(true);
- expect(wrapper.find(List).exists()).toBe(true);
+ expect(wrapper.find(Grid).exists()).toBe(true);
});
it("Initializes state without asset selected", () => {
@@ -117,8 +117,8 @@ describe("Editor SideBar", () => {
};
const wrapper = createComponent(props);
- const list = wrapper.find(List).instance() as List;
- const recomputeRowHeightsSpy = jest.spyOn(list, "recomputeRowHeights");
+ const grid = wrapper.find(Grid).instance() as Grid;
+ const recomputeGridSizeSpy = jest.spyOn(grid, "recomputeGridSize");
wrapper.setProps({
thumbnailSize: {
@@ -127,6 +127,27 @@ describe("Editor SideBar", () => {
},
});
- expect(recomputeRowHeightsSpy).toBeCalled();
+ expect(recomputeGridSizeSpy).toBeCalled();
+ });
+
+ it("Correctly computes Grid column size", () => {
+ const props: IEditorSideBarProps = {
+ assets: testAssets,
+ onAssetSelected: onSelectAssetHandler,
+ thumbnailSize: {
+ width: 175,
+ height: 155,
+ },
+ };
+
+ const wrapper = createComponent(props);
+ const grid = wrapper.find(Grid).instance() as Grid;
+ const autoSizer = wrapper.find(AutoSizer).instance() as AutoSizer;
+ autoSizer.setState({
+ width: 150,
+ height: 91,
+ });
+
+ expect(grid.props.columnWidth()).toBe(100);
});
});
diff --git a/src/react/components/pages/editorPage/editorSideBar.tsx b/src/react/components/pages/editorPage/editorSideBar.tsx
index 443c629f03..db088291bc 100644
--- a/src/react/components/pages/editorPage/editorSideBar.tsx
+++ b/src/react/components/pages/editorPage/editorSideBar.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import { AutoSizer, List } from "react-virtualized";
+import { AutoSizer, Grid } from "react-virtualized";
import { IAsset, AssetState, ISize } from "../../../../models/applicationState";
import { AssetPreview } from "../../common/assetPreview/assetPreview";
import { strings } from "../../../../common/strings";
@@ -38,23 +38,24 @@ export default class EditorSideBar extends React.Component = React.createRef();
+ private listRef: React.RefObject = React.createRef();
public render() {
return (
{({ height, width }) => (
- this.getColumnWidth(height)}
height={height}
width={width}
- rowCount={this.props.assets.length}
- rowHeight={() => this.getRowHeight(width)}
+ rowCount={1}
+ rowHeight={height}
rowRenderer={this.rowRenderer}
- overscanRowCount={2}
- scrollToIndex={this.state.scrollToIndex}
/>
)}
@@ -64,7 +65,7 @@ export default class EditorSideBar extends React.Component
{
- return width / (4 / 3) + 16;
+ private getColumnWidth = (height: number) => {
+ const padding = 16;
+ const aspectRatio = 4 / 3;
+
+ return (height - padding) * aspectRatio;
}
private selectAsset = (selectedAsset: IAsset): void => {
@@ -87,7 +91,7 @@ export default class EditorSideBar extends React.Component {
- this.listRef.current.forceUpdateGrid();
+ this.listRef.current.forceUpdate();
});
}
@@ -102,8 +106,8 @@ export default class EditorSideBar extends React.Component {
- const asset = this.props.assets[index];
+ private rowRenderer = ({ columnIndex, key, style }): JSX.Element => {
+ const asset = this.props.assets[columnIndex];
const selectedAsset = this.props.selectedAsset;
return (