diff --git a/src/common/rivetsExtra.es6 b/src/common/rivetsExtra.es6 index 479b8b6134..03606fe57d 100644 --- a/src/common/rivetsExtra.es6 +++ b/src/common/rivetsExtra.es6 @@ -432,6 +432,10 @@ rv.binders.slider = { } } +rv.binders.datepicker_mindate = { + routine: (el, value) => $(el).datepicker('option', 'minDate', value) +} + /* trun input element in jquery-ui-datepicker */ rv.binders.datepicker = { priority: 94, diff --git a/src/trade/tradeDialog.es6 b/src/trade/tradeDialog.es6 index 8104bec3df..58a0a32c03 100644 --- a/src/trade/tradeDialog.es6 +++ b/src/trade/tradeDialog.es6 @@ -243,6 +243,10 @@ function validateMinute({ hour, minute, today_times, selected_date_unix }) { return (hour > open_hour && hour < close_hour) || hour < close_hour || hour > open_hour; } +function hasIntradayUnit(duration_unit_array) { + return duration_unit_array.some(unit => ['minutes', 'hours'].indexOf(unit) !== -1); +} + function init_state(available,root, dialog, symbol, contracts_for_spot) { var state = { duration: { @@ -286,6 +290,7 @@ function init_state(available,root, dialog, symbol, contracts_for_spot) { value_hour: moment.utc().format('HH:mm'), /* now utc in hh:mm format */ value: 0, /* epoch value of date+hour */ today_times: { open: '--', close: '--', disabled: false }, /* trading times for today */ + min_date: 0, onHourShow: function(hour) { /* for timepicker */ return validateHour({ hour, @@ -580,19 +585,31 @@ function init_state(available,root, dialog, symbol, contracts_for_spot) { /* contracts that are more not today must end at the market close time */ const { value_date } = state.date_expiry; const is_today = !moment.utc(value_date).isAfter(moment.utc(), 'day'); + const is_daily_contracts = state.duration_unit.array[0] && !hasIntradayUnit(state.duration_unit.array); + if (!is_today) { state.date_expiry.today_times.disabled = true; trading_times_for(value_date, state.proposal.symbol) .then(function(times){ + if (state.duration.value === 'Duration') { + state.date_expiry.value_date = moment.utc().format('YYYY-MM-DD'); + } + const value_hour = times.close !== '--' ? times.close : '23:59:59'; + state.date_expiry.min_date = is_daily_contracts ? 1 : 0; state.date_expiry.value_hour = moment.utc(value_hour, 'HH:mm:ss').format('HH:mm'); state.date_expiry.value = moment.utc(state.date_expiry.value_date + ' ' + value_hour).unix(); state.barriers.update(); + debounce(state.date_expiry.value, state.proposal.onchange); }); } else { if (date_or_hour !== state.date_expiry.value_hour) { state.date_expiry.update_times(); } + if (is_daily_contracts) { + state.date_expiry.min_date = 1; + state.date_expiry.value_date = moment.utc().add(1, 'days').format('YYYY-MM-DD'); + } state.date_expiry.value = moment.utc(state.date_expiry.value_date + ' ' + state.date_expiry.value_hour).unix(); state.barriers.update(); debounce(state.date_expiry.value, state.proposal.onchange); diff --git a/src/trade/tradeDialog.html b/src/trade/tradeDialog.html index ddf03eebd9..bde19edfea 100644 --- a/src/trade/tradeDialog.html +++ b/src/trade/tradeDialog.html @@ -100,6 +100,7 @@