From 6eaba4c0be74df55d37a5b0949327a7fa8151b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20G=C5=82ownia?= Date: Tue, 25 Apr 2023 18:32:54 +0200 Subject: [PATCH] feat(trading): split orders into tabs, disable status filter when preselected --- libs/datagrid/src/lib/filters/set-filter.tsx | 153 +++++++++--------- .../order-list-manager/order-list-manager.tsx | 1 + .../lib/components/order-list/order-list.tsx | 11 +- 3 files changed, 89 insertions(+), 76 deletions(-) diff --git a/libs/datagrid/src/lib/filters/set-filter.tsx b/libs/datagrid/src/lib/filters/set-filter.tsx index c2363d625..a328a5698 100644 --- a/libs/datagrid/src/lib/filters/set-filter.tsx +++ b/libs/datagrid/src/lib/filters/set-filter.tsx @@ -9,85 +9,88 @@ import { import type { IDoesFilterPassParams, IFilterParams } from 'ag-grid-community'; import { t } from '@vegaprotocol/i18n'; -export const SetFilter = forwardRef((props: IFilterParams, ref) => { - const [value, setValue] = useState([]); - const valueRef = useRef(value); +export const SetFilter = forwardRef( + (props: IFilterParams & { readonly?: boolean }, ref) => { + const [value, setValue] = useState([]); + const valueRef = useRef(value); + const { readonly } = props; + // expose AG Grid Filter Lifecycle callbacks + useImperativeHandle(ref, () => { + return { + doesFilterPass(params: IDoesFilterPassParams) { + const { api, colDef, column, columnApi, context } = props; + const { node } = params; + const getValue = props.valueGetter({ + api, + colDef, + column, + columnApi, + context, + data: node.data, + getValue: (field) => node.data[field], + node, + }); + return Array.isArray(value) + ? value.includes(getValue) + : getValue === value; + }, - // expose AG Grid Filter Lifecycle callbacks - useImperativeHandle(ref, () => { - return { - doesFilterPass(params: IDoesFilterPassParams) { - const { api, colDef, column, columnApi, context } = props; - const { node } = params; - const getValue = props.valueGetter({ - api, - colDef, - column, - columnApi, - context, - data: node.data, - getValue: (field) => node.data[field], - node, - }); - return Array.isArray(value) - ? value.includes(getValue) - : getValue === value; - }, + isFilterActive() { + return valueRef.current.length !== 0; + }, - isFilterActive() { - return valueRef.current.length !== 0; - }, + getModel() { + if (!this.isFilterActive()) { + return null; + } + return { value: valueRef.current }; + }, - getModel() { - if (!this.isFilterActive()) { - return null; - } - return { value: valueRef.current }; - }, + setModel(model?: { value: string[] } | null) { + valueRef.current = !model ? [] : model.value; + setValue(valueRef.current); + }, + }; + }); - setModel(model?: { value: string[] } | null) { - valueRef.current = !model ? [] : model.value; - setValue(valueRef.current); - }, + const onChange = (event: ChangeEvent) => { + valueRef.current = event.target.checked + ? [...value, event.target.value] + : value.filter((v) => v !== event.target.value); + setValue(valueRef.current); }; - }); - const onChange = (event: ChangeEvent) => { - valueRef.current = event.target.checked - ? [...value, event.target.value] - : value.filter((v) => v !== event.target.value); - setValue(valueRef.current); - }; - - useEffect(() => { - props.filterChangedCallback(); - }, [value]); //eslint-disable-line react-hooks/exhaustive-deps - - return ( -
-
- {Object.keys(props.colDef.filterParams.set).map((key) => ( - - ))} -
-
- + useEffect(() => { + props.filterChangedCallback(); + }, [value]); //eslint-disable-line react-hooks/exhaustive-deps + return ( +
+
+ {Object.keys(props.colDef.filterParams.set).map((key) => ( + + ))} +
+
+ +
-
- ); -}); + ); + } +); diff --git a/libs/orders/src/lib/components/order-list-manager/order-list-manager.tsx b/libs/orders/src/lib/components/order-list-manager/order-list-manager.tsx index eb5a17e05..d072e6a11 100644 --- a/libs/orders/src/lib/components/order-list-manager/order-list-manager.tsx +++ b/libs/orders/src/lib/components/order-list-manager/order-list-manager.tsx @@ -131,6 +131,7 @@ export const OrderListManager = ({ void; onMarketClick?: (marketId: string, metaKey?: boolean) => void; onOrderTypeClick?: (marketId: string, metaKey?: boolean) => void; + readonlyStatusFilter?: boolean; isReadOnly: boolean; }; export const OrderListTable = memo( forwardRef( ( - { cancel, setEditOrder, onMarketClick, onOrderTypeClick, ...props }, + { + cancel, + setEditOrder, + onMarketClick, + onOrderTypeClick, + readonlyStatusFilter, + ...props + }, ref ) => { return ( @@ -119,6 +127,7 @@ export const OrderListTable = memo( filter={SetFilter} filterParams={{ set: Schema.OrderStatusMapping, + readonly: readonlyStatusFilter, }} valueFormatter={({ value,