99 lines
2.1 KiB
TypeScript
99 lines
2.1 KiB
TypeScript
import { gql } from '@apollo/client';
|
|
import {
|
|
positions,
|
|
positions_party_positions,
|
|
} from '../__generated__/positions';
|
|
import { makeDataProvider } from './generic-data-provider';
|
|
|
|
import {
|
|
positionSubscribe,
|
|
positionSubscribe_positions,
|
|
} from '../__generated__/positionSubscribe';
|
|
|
|
const POSITIONS_FRAGMENT = gql`
|
|
fragment PositionDetails on Position {
|
|
realisedPNL
|
|
openVolume
|
|
unrealisedPNL
|
|
averageEntryPrice
|
|
market {
|
|
id
|
|
name
|
|
data {
|
|
markPrice
|
|
marketTradingMode
|
|
market {
|
|
id
|
|
}
|
|
}
|
|
decimalPlaces
|
|
tradableInstrument {
|
|
instrument {
|
|
id
|
|
name
|
|
metadata {
|
|
tags
|
|
}
|
|
code
|
|
product {
|
|
... on Future {
|
|
settlementAsset {
|
|
id
|
|
symbol
|
|
name
|
|
decimals
|
|
}
|
|
quoteName
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`;
|
|
|
|
const POSITION_QUERY = gql`
|
|
${POSITIONS_FRAGMENT}
|
|
query positions($partyId: ID!) {
|
|
party(id: $partyId) {
|
|
id
|
|
positions {
|
|
...PositionDetails
|
|
}
|
|
}
|
|
}
|
|
`;
|
|
|
|
export const POSITIONS_SUB = gql`
|
|
${POSITIONS_FRAGMENT}
|
|
subscription positionSubscribe($partyId: ID!) {
|
|
positions(partyId: $partyId) {
|
|
...PositionDetails
|
|
}
|
|
}
|
|
`;
|
|
|
|
const update = (
|
|
draft: positions_party_positions[],
|
|
delta: positionSubscribe_positions
|
|
) => {
|
|
const index = draft.findIndex((m) => m.market.id === delta.market.id);
|
|
if (index !== -1) {
|
|
draft[index] = delta;
|
|
} else {
|
|
draft.push(delta);
|
|
}
|
|
};
|
|
const getData = (responseData: positions): positions_party_positions[] | null =>
|
|
responseData.party ? responseData.party.positions : null;
|
|
const getDelta = (
|
|
subscriptionData: positionSubscribe
|
|
): positionSubscribe_positions => subscriptionData.positions;
|
|
|
|
export const positionsDataProvider = makeDataProvider<
|
|
positions,
|
|
positions_party_positions,
|
|
positionSubscribe,
|
|
positionSubscribe_positions
|
|
>(POSITION_QUERY, POSITIONS_SUB, update, getData, getDelta);
|