import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import dayjs from 'dayjs'; import { FormGroup, Label, Input, InputGroup, InputGroupText, FormText } from 'reactstrap'; import { gettext } from '../utils/constants'; import { Utils } from '../utils/utils'; import DateTimePicker from './date-and-time-picker'; const propTypes = { minDays: PropTypes.number.isRequired, maxDays: PropTypes.number.isRequired, defaultDays: PropTypes.number.isRequired, expType: PropTypes.string.isRequired, setExpType: PropTypes.func.isRequired, expireDays: PropTypes.oneOfType([ PropTypes.string, PropTypes.number ]), onExpireDaysChanged: PropTypes.func.isRequired, expDate: PropTypes.object, onExpDateChanged: PropTypes.func.isRequired }; const inputWidth = Utils.isDesktop() ? 250 : 210; class SetLinkExpiration extends React.Component { constructor(props) { super(props); const { minDays, maxDays, defaultDays } = this.props; this.isExpireDaysNoLimit = (minDays === 0 && maxDays === 0 && defaultDays == 0); let expirationLimitTip = ''; if (minDays !== 0 && maxDays !== 0) { expirationLimitTip = gettext('{minDays_placeholder} - {maxDays_placeholder} days') .replace('{minDays_placeholder}', minDays) .replace('{maxDays_placeholder}', maxDays); } else if (minDays !== 0 && maxDays === 0) { expirationLimitTip = gettext('Greater than or equal to {minDays_placeholder} days') .replace('{minDays_placeholder}', minDays); } else if (minDays === 0 && maxDays !== 0) { expirationLimitTip = gettext('Less than or equal to {maxDays_placeholder} days') .replace('{maxDays_placeholder}', maxDays); } this.expirationLimitTip = expirationLimitTip; } disabledDate = (current) => { if (!current) { // allow empty select return false; } if (this.isExpireDaysNoLimit) { return current.isBefore(dayjs(), 'day'); } const { minDays, maxDays } = this.props; const startDay = dayjs().add(minDays, 'days'); const endDay = dayjs().add(maxDays, 'days'); if (minDays !== 0 && maxDays !== 0) { return current.isBefore(startDay, 'day') || current.isAfter(endDay, 'day'); } else if (minDays !== 0 && maxDays === 0) { return current.isBefore(startDay, 'day'); } else if (minDays === 0 && maxDays !== 0) { return current.isBefore(dayjs(), 'day') || current.isAfter(endDay, 'day'); } }; render() { const { expType, setExpType, expireDays, onExpireDaysChanged, expDate, onExpDateChanged } = this.props; return ( {expType == 'by-days' && ( {gettext('days')} {!this.isExpireDaysNoLimit && ( {this.expirationLimitTip} )} )} {expType == 'by-date' && ( )} ); } } SetLinkExpiration.propTypes = propTypes; export default SetLinkExpiration;