diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Duration/__tests__/duration_container.spec.tsx b/packages/trader/src/AppV2/Components/TradeParameters/Duration/__tests__/duration_container.spec.tsx
index b034d9fc6d52..5326da52b145 100644
--- a/packages/trader/src/AppV2/Components/TradeParameters/Duration/__tests__/duration_container.spec.tsx
+++ b/packages/trader/src/AppV2/Components/TradeParameters/Duration/__tests__/duration_container.spec.tsx
@@ -20,6 +20,7 @@ global.HTMLElement.prototype.scrollIntoView = jest.fn();
jest.mock('Stores/Modules/Trading/Helpers/contract-type', () => ({
ContractType: {
getTradingEvents: jest.fn(),
+ getTradingDays: jest.fn(),
},
}));
diff --git a/packages/trader/src/AppV2/Components/TradeParameters/Duration/datepicker.tsx b/packages/trader/src/AppV2/Components/TradeParameters/Duration/datepicker.tsx
index 8c37678d1506..32a8534219b5 100644
--- a/packages/trader/src/AppV2/Components/TradeParameters/Duration/datepicker.tsx
+++ b/packages/trader/src/AppV2/Components/TradeParameters/Duration/datepicker.tsx
@@ -4,6 +4,11 @@ import React, { useEffect } from 'react';
import { ContractType } from 'Stores/Modules/Trading/Helpers/contract-type';
import { useTraderStore } from 'Stores/useTraderStores';
+type TMarketEvent = {
+ dates: string[];
+ descrip: string;
+};
+
const DaysDatepicker = ({
start_date,
end_date,
@@ -19,14 +24,27 @@ const DaysDatepicker = ({
const onChangeCalendarMonth = React.useCallback(
async (e = toMoment().format('YYYY-MM-DD')) => {
+ const new_market_events: TMarketEvent[] = [];
let new_disabled_days: number[] = [];
- const events = await ContractType.getTradingEvents(e, symbol);
+
+ const [events, trading_days] = await Promise.all([
+ ContractType.getTradingEvents(e, symbol),
+ ContractType.getTradingDays(e, symbol),
+ ]);
+
+ if (trading_days) {
+ const all_days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] as const;
+ new_disabled_days = all_days
+ .map((day: (typeof all_days)[number], index) => (!trading_days.includes(day) ? index : -1))
+ .filter(index => index !== -1);
+ }
+
events?.forEach(evt => {
- const dates = evt.dates.split(', ');
- const idx = dates.indexOf('Fridays');
- if (idx !== -1) {
- new_disabled_days = [6, 0];
- }
+ const dates = evt.dates.split(', '); // convert dates str into array
+ new_market_events.push({
+ dates,
+ descrip: evt.descrip,
+ });
});
if (isMounted()) {
diff --git a/packages/trader/src/Modules/Trading/Components/Form/DatePicker/__tests__/trading-date-picker.spec.tsx b/packages/trader/src/Modules/Trading/Components/Form/DatePicker/__tests__/trading-date-picker.spec.tsx
index c87f247d1029..c1689b106b91 100644
--- a/packages/trader/src/Modules/Trading/Components/Form/DatePicker/__tests__/trading-date-picker.spec.tsx
+++ b/packages/trader/src/Modules/Trading/Components/Form/DatePicker/__tests__/trading-date-picker.spec.tsx
@@ -25,6 +25,7 @@ jest.mock('Stores/Modules/Trading/Helpers/contract-type', () => ({
descrip: "New Year's Day",
},
]),
+ getTradingDays: jest.fn(() => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']),
},
}));
describe('', () => {
diff --git a/packages/trader/src/Modules/Trading/Components/Form/DatePicker/trading-date-picker.tsx b/packages/trader/src/Modules/Trading/Components/Form/DatePicker/trading-date-picker.tsx
index 3d381517144c..49bd03040658 100644
--- a/packages/trader/src/Modules/Trading/Components/Form/DatePicker/trading-date-picker.tsx
+++ b/packages/trader/src/Modules/Trading/Components/Form/DatePicker/trading-date-picker.tsx
@@ -63,7 +63,7 @@ const TradingDatePicker = observer(({ id, is_24_hours_contract, mode, name }: TT
const getMomentContractStartDateTime = () => {
return setTime(
toMoment(getMinDuration()),
- isTimeValid(start_time ?? '') ? start_time : server_time?.format('HH:mm:ss') ?? ''
+ isTimeValid(start_time ?? '') ? start_time : (server_time?.format('HH:mm:ss') ?? '')
);
};
@@ -126,13 +126,21 @@ const TradingDatePicker = observer(({ id, is_24_hours_contract, mode, name }: TT
async (e = toMoment().format('YYYY-MM-DD')) => {
const new_market_events: TMarketEvent[] = [];
let new_disabled_days: number[] = [];
- const events = await ContractType.getTradingEvents(e, symbol);
+
+ const [events, trading_days] = await Promise.all([
+ ContractType.getTradingEvents(e, symbol),
+ ContractType.getTradingDays(e, symbol),
+ ]);
+
+ if (trading_days) {
+ const all_days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] as const;
+ new_disabled_days = all_days.reduce((disabled, day, index) => {
+ return trading_days.includes(day) ? disabled : [...disabled, index];
+ }, []);
+ }
+
events?.forEach(evt => {
const dates = evt.dates.split(', '); // convert dates str into array
- const idx = dates.indexOf('Fridays');
- if (idx !== -1) {
- new_disabled_days = [6, 0]; // Sat, Sun
- }
new_market_events.push({
dates,
descrip: evt.descrip,
diff --git a/packages/trader/src/Stores/Modules/Trading/Helpers/contract-type.ts b/packages/trader/src/Stores/Modules/Trading/Helpers/contract-type.ts
index c9cb8f7f3dce..5abb90d4e3bc 100644
--- a/packages/trader/src/Stores/Modules/Trading/Helpers/contract-type.ts
+++ b/packages/trader/src/Stores/Modules/Trading/Helpers/contract-type.ts
@@ -452,6 +452,24 @@ export const ContractType = (() => {
return trading_events[date][underlying as string];
};
+ const getTradingDays = async (date: string, underlying: string | null = null) => {
+ if (!date || !underlying) return null;
+
+ const response: TradingTimesResponse = await WS.tradingTimes(date);
+ const trading_times = response.trading_times as TradingTimes;
+
+ if (!getPropertyValue(response, ['trading_times', 'markets'])) return null;
+
+ const symbol_data = trading_times.markets.flatMap(
+ market =>
+ market.submarkets?.flatMap(
+ submarket => submarket.symbols?.find(symbol => symbol.symbol === underlying) || []
+ ) || []
+ )[0];
+
+ return symbol_data?.trading_days || null;
+ };
+
const getTradingTimes = async (
date: string | null,
underlying: string | null = null
@@ -719,6 +737,7 @@ export const ContractType = (() => {
getStartTime,
getStartType,
getTradingEvents,
+ getTradingDays,
getTradingTimes,
getContractCategories: () => ({
contract_types_list: available_categories,