@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
137 lines • 7.34 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
// (C) 2007-2019 GoodData Corporation
var React = require("react");
var PropTypes = require("prop-types");
var isEqual = require("lodash/isEqual");
var noop = require("lodash/noop");
var typings_1 = require("@gooddata/typings");
var PeriodExlusion_1 = require("./utils/PeriodExlusion");
var DateFilterCore_1 = require("./DateFilterCore");
var OptionValidation_1 = require("./validation/OptionValidation");
var normalizeSelectedFilterOption = function (selectedFilterOption) {
if (typings_1.ExtendedDateFilters.isRelativeDateFilterForm(selectedFilterOption) &&
selectedFilterOption.from > selectedFilterOption.to) {
return __assign({}, selectedFilterOption, { from: selectedFilterOption.to, to: selectedFilterOption.from });
}
return selectedFilterOption;
};
var DateFilter = /** @class */ (function (_super) {
__extends(DateFilter, _super);
function DateFilter(props) {
var _this = _super.call(this, props) || this;
_this.handleApplyClick = function () {
var normalizedSelectedFilterOption = normalizeSelectedFilterOption(_this.state.selectedFilterOption);
_this.props.onApply(normalizedSelectedFilterOption, _this.state.excludeCurrentPeriod);
};
_this.onChangesDiscarded = function () {
_this.setState(function () { return DateFilter.getStateFromProps(_this.props); });
};
_this.onCancelClicked = function () {
_this.props.onCancel();
_this.onChangesDiscarded();
};
_this.onDropdownOpenChanged = function (isOpen) {
if (isOpen) {
_this.props.onOpen();
}
else {
_this.props.onClose();
_this.onChangesDiscarded();
}
};
_this.handleExcludeCurrentPeriodChange = function (excludeCurrentPeriod) {
_this.setState({ excludeCurrentPeriod: excludeCurrentPeriod });
};
_this.handleSelectedFilterOptionChange = function (selectedFilterOption) {
_this.setState(function (state) {
return DateFilter.getStateFromSelectedOption(selectedFilterOption, state.excludeCurrentPeriod);
});
};
_this.state = DateFilter.getStateFromProps(props);
// tslint:disable-next-line:no-console
console.warn("DateFilter component is still in beta. Component and its API may change in the future.");
return _this;
}
DateFilter.getDerivedStateFromProps = function (nextProps, prevState) {
if (!isEqual(nextProps.selectedFilterOption, prevState.initSelectedFilterOption) ||
nextProps.excludeCurrentPeriod !== prevState.initExcludeCurrentPeriod) {
return DateFilter.getStateFromProps(nextProps);
}
return null;
};
DateFilter.getStateFromProps = function (props) {
var canExcludeCurrent = PeriodExlusion_1.canExcludeCurrentPeriod(props.selectedFilterOption);
return {
initSelectedFilterOption: props.selectedFilterOption,
selectedFilterOption: props.selectedFilterOption,
initExcludeCurrentPeriod: props.excludeCurrentPeriod,
excludeCurrentPeriod: canExcludeCurrent ? props.excludeCurrentPeriod : false,
isExcludeCurrentPeriodEnabled: canExcludeCurrent,
};
};
DateFilter.prototype.render = function () {
var _a = this.props, customFilterName = _a.customFilterName, dateFilterMode = _a.dateFilterMode, filterOptions = _a.filterOptions, originalSelectedFilterOption = _a.selectedFilterOption, originalExcludeCurrentPeriod = _a.excludeCurrentPeriod, availableGranularities = _a.availableGranularities, isEditMode = _a.isEditMode, locale = _a.locale;
var _b = this.state, excludeCurrentPeriod = _b.excludeCurrentPeriod, selectedFilterOption = _b.selectedFilterOption, isExcludeCurrentPeriodEnabled = _b.isExcludeCurrentPeriodEnabled;
return dateFilterMode === "hidden" ? null : (React.createElement(DateFilterCore_1.DateFilterCore, { availableGranularities: availableGranularities, customFilterName: customFilterName, disabled: dateFilterMode === "readonly", excludeCurrentPeriod: excludeCurrentPeriod, originalExcludeCurrentPeriod: originalExcludeCurrentPeriod, isExcludeCurrentPeriodEnabled: isExcludeCurrentPeriodEnabled, isEditMode: isEditMode, filterOptions: filterOptions, selectedFilterOption: selectedFilterOption, originalSelectedFilterOption: originalSelectedFilterOption, locale: locale, onApplyClick: this.handleApplyClick, onCancelClick: this.onCancelClicked, onDropdownOpenChanged: this.onDropdownOpenChanged, onExcludeCurrentPeriodChange: this.handleExcludeCurrentPeriodChange, onSelectedFilterOptionChange: this.handleSelectedFilterOptionChange, errors: OptionValidation_1.validateFilterOption(selectedFilterOption) }));
};
DateFilter.propTypes = {
excludeCurrentPeriod: PropTypes.bool.isRequired,
selectedFilterOption: PropTypes.object.isRequired,
filterOptions: PropTypes.object.isRequired,
availableGranularities: PropTypes.arrayOf(PropTypes.string).isRequired,
isEditMode: PropTypes.bool,
customFilterName: PropTypes.string,
dateFilterMode: PropTypes.oneOf(["readonly", "hidden", "active"]).isRequired,
locale: PropTypes.string,
onApply: PropTypes.func.isRequired,
onCancel: PropTypes.func,
onOpen: PropTypes.func,
onClose: PropTypes.func,
};
DateFilter.defaultProps = {
isEditMode: false,
locale: "en-US",
onCancel: noop,
onOpen: noop,
onClose: noop,
};
DateFilter.getStateFromSelectedOption = function (selectedFilterOption, excludeCurrentPeriod) {
var canExcludeCurrent = PeriodExlusion_1.canExcludeCurrentPeriod(selectedFilterOption);
return {
selectedFilterOption: selectedFilterOption,
excludeCurrentPeriod: canExcludeCurrent ? excludeCurrentPeriod : false,
isExcludeCurrentPeriodEnabled: canExcludeCurrent,
};
};
return DateFilter;
}(React.PureComponent));
exports.DateFilter = DateFilter;
exports.testAPI = {
normalizeSelectedFilterOption: normalizeSelectedFilterOption,
};
//# sourceMappingURL=DateFilter.js.map