fix(trading): make grids more responsive - suppress sizeColumnsToFit on small screens (#3906)

This commit is contained in:
Maciek 2023-05-23 18:08:55 +02:00 committed by GitHub
parent d155909fe4
commit babd99088d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 3 deletions

View File

@ -315,6 +315,7 @@ const ClosedMarketsDataGrid = ({ rowData }: { rowData: Row[] }) => {
getRowId={({ data }) => data.id} getRowId={({ data }) => data.id}
defaultColDef={{ defaultColDef={{
resizable: true, resizable: true,
minWidth: 100,
}} }}
overlayNoRowsTemplate="No data" overlayNoRowsTemplate="No data"
storeKey="closedMarkets" storeKey="closedMarkets"

View File

@ -6,6 +6,7 @@ import type {
} from 'ag-grid-community'; } from 'ag-grid-community';
import { renderHook, act, waitFor } from '@testing-library/react'; import { renderHook, act, waitFor } from '@testing-library/react';
import { useColumnSizes } from './use-column-sizes'; import { useColumnSizes } from './use-column-sizes';
import * as reactHelpers from '@vegaprotocol/react-helpers';
const mockApis = { const mockApis = {
api: { api: {
@ -49,6 +50,9 @@ describe('UseColumnSizes hook', () => {
}); });
it('onGridSizeChanged should call setSize', async () => { it('onGridSizeChanged should call setSize', async () => {
jest
.spyOn(reactHelpers, 'useScreenDimensions')
.mockReturnValue({ screenSize: 'xxl' });
const { result } = renderHook(() => const { result } = renderHook(() =>
useColumnSizes({ storeKey, props: {} }) useColumnSizes({ storeKey, props: {} })
); );
@ -95,6 +99,7 @@ describe('UseColumnSizes hook', () => {
it('onGridReady should call setSizes', async () => { it('onGridReady should call setSizes', async () => {
const props = { onGridReady: jest.fn() }; const props = { onGridReady: jest.fn() };
const { result } = renderHook(() => useColumnSizes({ storeKey, props })); const { result } = renderHook(() => useColumnSizes({ storeKey, props }));
const obTest = { cool: 1, ...mockApis }; const obTest = { cool: 1, ...mockApis };
await act(() => { await act(() => {

View File

@ -8,6 +8,7 @@ import type { AgGridReactProps, AgReactUiProps } from 'ag-grid-react';
import { create } from 'zustand'; import { create } from 'zustand';
import { persist } from 'zustand/middleware'; import { persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer'; import { immer } from 'zustand/middleware/immer';
import { useScreenDimensions } from '@vegaprotocol/react-helpers';
const STORAGE_KEY = 'vega_columns_sizes_store'; const STORAGE_KEY = 'vega_columns_sizes_store';
@ -93,11 +94,12 @@ export const useColumnSizes = ({
}, },
[valueSetter, storeKey, parentOnColumnResized] [valueSetter, storeKey, parentOnColumnResized]
); );
const { screenSize } = useScreenDimensions();
const largeScreen = ['xl', 'xxl', 'xxxl'].includes(screenSize);
const setSizes = useCallback( const setSizes = useCallback(
(apiEvent: GridReadyEvent | GridSizeChangedEvent) => { (apiEvent: GridReadyEvent | GridSizeChangedEvent) => {
if (!storeKey || !Object.keys(sizes).length || !widthRef.current) { if (!storeKey || !Object.keys(sizes).length || !widthRef.current) {
apiEvent?.api.sizeColumnsToFit(); largeScreen && apiEvent?.api.sizeColumnsToFit();
} else { } else {
const recalculatedSizes = recalculateSizes(sizes); const recalculatedSizes = recalculateSizes(sizes);
const newSizes = Object.entries(recalculatedSizes).map( const newSizes = Object.entries(recalculatedSizes).map(
@ -109,7 +111,7 @@ export const useColumnSizes = ({
apiEvent.columnApi.setColumnWidths(newSizes); apiEvent.columnApi.setColumnWidths(newSizes);
} }
}, },
[storeKey, recalculateSizes, sizes] [storeKey, recalculateSizes, sizes, largeScreen]
); );
const onGridReady = useCallback( const onGridReady = useCallback(

View File

@ -68,6 +68,7 @@ export const MarketListTable = forwardRef<
sortable: true, sortable: true,
filter: true, filter: true,
filterParams: { buttons: ['reset'] }, filterParams: { buttons: ['reset'] },
minWidth: 100,
}} }}
suppressCellFocus suppressCellFocus
components={{ PriceFlashCell, MarketName }} components={{ PriceFlashCell, MarketName }}

View File

@ -156,6 +156,7 @@ export const useColumnDefs = () => {
resizable: true, resizable: true,
filter: true, filter: true,
filterParams: { buttons: ['reset'] }, filterParams: { buttons: ['reset'] },
minWidth: 100,
}; };
}, []); }, []);