chore(orders): fix order table rows flickering on filter change (#3088)
This commit is contained in:
parent
d66956d080
commit
fab055bb34
@ -61,10 +61,9 @@ export const SetFilter = forwardRef((props: IFilterParams, ref) => {
|
|||||||
<div className="ag-filter-body-wrapper">
|
<div className="ag-filter-body-wrapper">
|
||||||
<fieldset className="ag-simple-filter-body-wrapper">
|
<fieldset className="ag-simple-filter-body-wrapper">
|
||||||
{Object.keys(props.colDef.filterParams.set).map((key) => (
|
{Object.keys(props.colDef.filterParams.set).map((key) => (
|
||||||
<label className="flex">
|
<label className="flex" key={key}>
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
key={key}
|
|
||||||
value={key}
|
value={key}
|
||||||
className="mr-1"
|
className="mr-1"
|
||||||
checked={value.includes(key)}
|
checked={value.includes(key)}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { AsyncRenderer } from '@vegaprotocol/ui-toolkit';
|
import { AsyncRenderer } from '@vegaprotocol/ui-toolkit';
|
||||||
import { truncateByChars } from '@vegaprotocol/utils';
|
import { truncateByChars } from '@vegaprotocol/utils';
|
||||||
import { t } from '@vegaprotocol/i18n';
|
import { t } from '@vegaprotocol/i18n';
|
||||||
import { useRef, useState } from 'react';
|
import { useCallback, useRef, useState } from 'react';
|
||||||
import type {
|
import type {
|
||||||
BodyScrollEvent,
|
BodyScrollEvent,
|
||||||
BodyScrollEndEvent,
|
BodyScrollEndEvent,
|
||||||
@ -98,38 +98,60 @@ export const OrderListManager = ({
|
|||||||
scrolledToTop,
|
scrolledToTop,
|
||||||
});
|
});
|
||||||
|
|
||||||
const onBodyScrollEnd = (event: BodyScrollEndEvent) => {
|
const onBodyScrollEnd = useCallback(
|
||||||
if (event.top === 0) {
|
(event: BodyScrollEndEvent) => {
|
||||||
addNewRows();
|
if (event.top === 0) {
|
||||||
}
|
addNewRows();
|
||||||
};
|
}
|
||||||
|
},
|
||||||
|
[addNewRows]
|
||||||
|
);
|
||||||
|
|
||||||
const onBodyScroll = (event: BodyScrollEvent) => {
|
const onBodyScroll = useCallback((event: BodyScrollEvent) => {
|
||||||
scrolledToTop.current = event.top <= 0;
|
scrolledToTop.current = event.top <= 0;
|
||||||
};
|
}, []);
|
||||||
|
|
||||||
const onFilterChanged = (event: FilterChangedEvent) => {
|
const onFilterChanged = useCallback(
|
||||||
const updatedFilter = event.api.getFilterModel();
|
(event: FilterChangedEvent) => {
|
||||||
if (Object.keys(updatedFilter).length) {
|
const updatedFilter = event.api.getFilterModel();
|
||||||
setFilter(updatedFilter);
|
if (Object.keys(updatedFilter).length) {
|
||||||
} else if (filter) {
|
setFilter(updatedFilter);
|
||||||
setFilter(undefined);
|
} else {
|
||||||
}
|
setFilter(undefined);
|
||||||
};
|
}
|
||||||
|
},
|
||||||
|
[setFilter]
|
||||||
|
);
|
||||||
|
|
||||||
const onSortChange = (event: SortChangedEvent) => {
|
const onSortChange = useCallback(
|
||||||
const sort = event.columnApi
|
(event: SortChangedEvent) => {
|
||||||
.getColumnState()
|
const sort = event.columnApi
|
||||||
.sort((a, b) => (a.sortIndex || 0) - (b.sortIndex || 0))
|
.getColumnState()
|
||||||
.reduce((acc, col) => {
|
.sort((a, b) => (a.sortIndex || 0) - (b.sortIndex || 0))
|
||||||
if (col.sort) {
|
.reduce((acc, col) => {
|
||||||
const { colId, sort } = col;
|
if (col.sort) {
|
||||||
acc.push({ colId, sort });
|
const { colId, sort } = col;
|
||||||
}
|
acc.push({ colId, sort });
|
||||||
return acc;
|
}
|
||||||
}, [] as { colId: string; sort: string }[]);
|
return acc;
|
||||||
setSort(sort.length > 0 ? sort : undefined);
|
}, [] as { colId: string; sort: string }[]);
|
||||||
};
|
setSort(sort.length > 0 ? sort : undefined);
|
||||||
|
},
|
||||||
|
[setSort]
|
||||||
|
);
|
||||||
|
|
||||||
|
const onCancel = useCallback(
|
||||||
|
(order: Order) => {
|
||||||
|
if (!order.market) return;
|
||||||
|
create({
|
||||||
|
orderCancellation: {
|
||||||
|
orderId: order.id,
|
||||||
|
marketId: order.market.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
[create]
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@ -143,15 +165,7 @@ export const OrderListManager = ({
|
|||||||
onBodyScroll={onBodyScroll}
|
onBodyScroll={onBodyScroll}
|
||||||
onFilterChanged={onFilterChanged}
|
onFilterChanged={onFilterChanged}
|
||||||
onSortChanged={onSortChange}
|
onSortChanged={onSortChange}
|
||||||
cancel={(order: Order) => {
|
cancel={onCancel}
|
||||||
if (!order.market) return;
|
|
||||||
create({
|
|
||||||
orderCancellation: {
|
|
||||||
orderId: order.id,
|
|
||||||
marketId: order.market.id,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
setEditOrder={setEditOrder}
|
setEditOrder={setEditOrder}
|
||||||
onMarketClick={onMarketClick}
|
onMarketClick={onMarketClick}
|
||||||
isReadOnly={isReadOnly}
|
isReadOnly={isReadOnly}
|
||||||
|
@ -91,6 +91,9 @@ export const OrderListTable = forwardRef<AgGridReact, OrderListTableProps>(
|
|||||||
data,
|
data,
|
||||||
node,
|
node,
|
||||||
}: VegaValueFormatterParams<Order, 'size'>) => {
|
}: VegaValueFormatterParams<Order, 'size'>) => {
|
||||||
|
if (!data) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
if (!data?.market || !isNumeric(value)) {
|
if (!data?.market || !isNumeric(value)) {
|
||||||
return '-';
|
return '-';
|
||||||
}
|
}
|
||||||
@ -116,6 +119,9 @@ export const OrderListTable = forwardRef<AgGridReact, OrderListTableProps>(
|
|||||||
value,
|
value,
|
||||||
node,
|
node,
|
||||||
}: VegaValueFormatterParams<Order, 'type'>) => {
|
}: VegaValueFormatterParams<Order, 'type'>) => {
|
||||||
|
if (!order) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
if (!value) return '-';
|
if (!value) return '-';
|
||||||
if (order?.peggedOrder) return t('Pegged');
|
if (order?.peggedOrder) return t('Pegged');
|
||||||
if (order?.liquidityProvision) return t('Liquidity provision');
|
if (order?.liquidityProvision) return t('Liquidity provision');
|
||||||
@ -162,6 +168,9 @@ export const OrderListTable = forwardRef<AgGridReact, OrderListTableProps>(
|
|||||||
value,
|
value,
|
||||||
node,
|
node,
|
||||||
}: VegaValueFormatterParams<Order, 'remaining'>) => {
|
}: VegaValueFormatterParams<Order, 'remaining'>) => {
|
||||||
|
if (!data) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
if (!data?.market || !isNumeric(value) || !isNumeric(data.size)) {
|
if (!data?.market || !isNumeric(value) || !isNumeric(data.size)) {
|
||||||
return '-';
|
return '-';
|
||||||
}
|
}
|
||||||
@ -184,6 +193,9 @@ export const OrderListTable = forwardRef<AgGridReact, OrderListTableProps>(
|
|||||||
data,
|
data,
|
||||||
node,
|
node,
|
||||||
}: VegaValueFormatterParams<Order, 'price'>) => {
|
}: VegaValueFormatterParams<Order, 'price'>) => {
|
||||||
|
if (!data) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
!data?.market ||
|
!data?.market ||
|
||||||
data.type === Schema.OrderType.TYPE_MARKET ||
|
data.type === Schema.OrderType.TYPE_MARKET ||
|
||||||
@ -237,6 +249,9 @@ export const OrderListTable = forwardRef<AgGridReact, OrderListTableProps>(
|
|||||||
data,
|
data,
|
||||||
value,
|
value,
|
||||||
}: VegaICellRendererParams<Order, 'updatedAt'>) => {
|
}: VegaICellRendererParams<Order, 'updatedAt'>) => {
|
||||||
|
if (!data) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<span data-value={value}>
|
<span data-value={value}>
|
||||||
{value ? getDateTimeFormat().format(new Date(value)) : '-'}
|
{value ? getDateTimeFormat().format(new Date(value)) : '-'}
|
||||||
|
Loading…
Reference in New Issue
Block a user