Skip to content

Commit

Permalink
[DTRA] Maryia/DTRA-1336/feat: update chart 'Interval duration' setting (
Browse files Browse the repository at this point in the history
#15877)

* feat: add description and disable chart Interval duration setting when not visible for 1T interval

* test: ChartSettings
  • Loading branch information
maryia-deriv committed Jul 19, 2024
1 parent 4666051 commit c5fa987
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 5 deletions.
4 changes: 4 additions & 0 deletions packages/core/src/sass/app/_common/components/media-item.scss
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
color: var(--text-prominent);
margin: 0 0 16px;
text-transform: none;

.inline-message {
margin-top: 1.6rem;
}
}
&__icon {
height: 120px;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ jest.mock('Assets/SvgComponents/settings/dark/interval-enabled.svg', () =>
describe('<ChartSettings/>', () => {
let default_mock_store: ReturnType<typeof mockStore>;
beforeEach(() => {
default_mock_store = mockStore({});
default_mock_store = mockStore({
contract_trade: {
granularity: 60,
},
});
});

const mockChartSettings = () => {
Expand All @@ -45,4 +49,11 @@ describe('<ChartSettings/>', () => {

expect(default_mock_store.ui.setChartCountdown).toBeCalled();
});
it('should display Unavailable message and disable checkbox if chart granularity === 0 (1 Tick interval)', () => {
default_mock_store.contract_trade.granularity = 0;
render(mockChartSettings());

expect(screen.getByText(/This feature is unavailable for tick intervals/)).toBeInTheDocument();
expect(screen.getByRole('checkbox')).toBeDisabled();
});
});
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';
import { Checkbox } from '@deriv/components';
import { localize, Localize } from '@deriv/translations';
import { Checkbox, InlineMessage } from '@deriv/components';
import { Localize } from '@deriv/translations';
import MediaItem, { MediaHeading, MediaIcon, MediaDescription } from 'App/Components/Elements/Media';
import { observer, useStore } from '@deriv/stores';

Expand All @@ -16,18 +16,27 @@ import IntervalDurationDisabledLightIcon from 'Assets/SvgComponents/settings/int
import IntervalDurationEnabledLightIcon from 'Assets/SvgComponents/settings/interval-enabled.svg';

const ChartSettings = observer(() => {
const { ui } = useStore();
const { contract_trade, ui } = useStore();
const {
is_chart_countdown_visible: is_countdown_visible,
is_dark_mode_on: is_dark_mode,
setChartCountdown: setCountdown,
} = ui;
const { granularity } = contract_trade;

return (
<div className='settings-chart'>
<MediaItem>
<MediaHeading>
<Localize i18n_default_text='Interval duration' />
{granularity === 0 && (
<InlineMessage
type='information'
message={
<Localize i18n_default_text='This feature is unavailable for tick intervals. Switch to minutes, hours, or days.' />
}
/>
)}
</MediaHeading>
<MediaDescription>
<MediaIcon
Expand All @@ -40,7 +49,8 @@ const ChartSettings = observer(() => {
<Checkbox
id='dt_settings_interval_checkbox'
defaultChecked={is_countdown_visible}
label={localize('Display remaining time for each interval')}
disabled={granularity === 0}
label={<Localize i18n_default_text='Display remaining time for each interval' />}
onChange={e => {
if ('checked' in e.target) {
setCountdown(e.target.checked);
Expand Down

0 comments on commit c5fa987

Please sign in to comment.