openreplay/frontend/app/components/shared/DateRangeDropdown/DateRangePopup.js
Sudheer Salavadi 126c9acc9b
ui: Date Picker Styles (#2542)
* Date Picker Styles

* style popup changes

---------

Co-authored-by: nick-delirium <nikita@openreplay.com>
2024-09-06 14:37:38 +02:00

136 lines
4.1 KiB
JavaScript

import { Button } from 'antd';
import React from 'react';
import DateRangePicker from '@wojtekmaj/react-daterange-picker';
import '@wojtekmaj/react-daterange-picker/dist/DateRangePicker.css';
import 'react-calendar/dist/Calendar.css';
import { TimePicker } from 'App/components/shared/DatePicker';
import {
CUSTOM_RANGE,
DATE_RANGE_VALUES,
dateRangeValues,
getDateRangeFromValue,
getDateRangeLabel,
} from 'App/dateRange';
import { DateTime, Interval } from 'luxon';
import styles from './dateRangePopup.module.css';
export default class DateRangePopup extends React.PureComponent {
state = {
range: this.props.selectedDateRange || Interval.fromDateTimes(DateTime.now(), DateTime.now()),
value: null,
};
selectCustomRange = (range) => {
console.log(range)
const updatedRange = Interval.fromDateTimes(DateTime.fromJSDate(range[0]), DateTime.fromJSDate(range[1]));
this.setState({
range: updatedRange,
value: CUSTOM_RANGE,
});
};
setRangeTimeStart = (value) => {
if (value > this.state.range.end) {
return;
}
this.setState({
range: Interval.fromDateTimes(value, this.state.range.end),
value: CUSTOM_RANGE,
});
};
setRangeTimeEnd = (value) => {
if (value && value < this.state.range.start) {
return;
}
this.setState({
range: Interval.fromDateTimes(this.state.range.start, value),
value: CUSTOM_RANGE,
});
};
selectValue = (value) => {
const range = getDateRangeFromValue(value);
this.setState({ range, value });
};
onApply = () => this.props.onApply(this.state.range, this.state.value);
render() {
const { onCancel, onApply } = this.props;
const { range } = this.state;
const rangeForDisplay = [range.start.startOf('day').ts, range.end.startOf('day').ts]
return (
<div className={styles.wrapper}>
<div className={`${styles.body} h-fit`}>
<div className={styles.preSelections}>
{dateRangeValues
.filter(
(value) =>
value !== CUSTOM_RANGE &&
value !== DATE_RANGE_VALUES.LAST_30_MINUTES
)
.map((value) => (
<div key={value} onClick={() => this.selectValue(value)}>
{getDateRangeLabel(value)}
</div>
))}
</div>
<div className='flex justify-center h-fit dateRangeContainer'>
<DateRangePicker
name="dateRangePicker"
// onSelect={this.selectCustomRange} -> onChange
// numberOfCalendars={2}
// selectionType="range"
// maximumDate={new Date()}
// singleDateRange={true}
onChange={this.selectCustomRange}
shouldCloseCalendar={() => false}
isOpen
maxDate={new Date()}
value={rangeForDisplay}
/>
</div>
</div>
<div className="flex items-center justify-between py-2 px-3">
<div className="flex items-center gap-2">
<label>From: </label>
<span>{range.start.toFormat('dd/MM')} </span>
<TimePicker
format={'HH:mm'}
defaultValue={range.start}
className="w-24"
onChange={this.setRangeTimeStart}
needConfirm={false}
showNow={false}
/>
<label>To: </label>
<span>{range.end.toFormat('dd/MM')} </span>
<TimePicker
format={'HH:mm'}
defaultValue={range.end}
onChange={this.setRangeTimeEnd}
className="w-24"
needConfirm={false}
showNow={false}
/>
</div>
<div className="flex items-center">
<Button onClick={onCancel}>{'Cancel'}</Button>
<Button
type="primary"
className="ml-2"
onClick={this.onApply}
disabled={!range}
>
{'Apply'}
</Button>
</div>
</div>
</div>
);
}
}