UNPKG

@gooddata/react-components

Version:

GoodData.UI - A powerful JavaScript library for building analytical applications

137 lines • 7.34 kB
"use strict"; 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