daycy
Version:
Simple date (range) picker for React based on Semantic-UI.
3 lines • 9.36 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports["default"]=exports.MONTHS=void 0;var _react=_interopRequireWildcard(require("react")),_propTypes=_interopRequireDefault(require("prop-types")),_semanticUiReact=require("semantic-ui-react"),_luxon=require("luxon"),_translate2=require("./translate");function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}function _getRequireWildcardCache(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(_getRequireWildcardCache=function(a){return a?c:b})(a)}function _interopRequireWildcard(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!==_typeof(a)&&"function"!=typeof a)return{default:a};var c=_getRequireWildcardCache(b);if(c&&c.has(a))return c.get(a);var d={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in a)if("default"!=f&&Object.prototype.hasOwnProperty.call(a,f)){var g=e?Object.getOwnPropertyDescriptor(a,f):null;g&&(g.get||g.set)?Object.defineProperty(d,f,g):d[f]=a[f]}return d["default"]=a,c&&c.set(a,d),d}function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _inherits(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function");a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,writable:!0,configurable:!0}}),Object.defineProperty(a,"prototype",{writable:!1}),b&&_setPrototypeOf(a,b)}function _setPrototypeOf(a,b){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(a,b){return a.__proto__=b,a},_setPrototypeOf(a,b)}function _createSuper(a){var b=_isNativeReflectConstruct();return function(){var c,d=_getPrototypeOf(a);if(b){var e=_getPrototypeOf(this).constructor;c=Reflect.construct(d,arguments,e)}else c=d.apply(this,arguments);return _possibleConstructorReturn(this,c)}}function _possibleConstructorReturn(a,b){if(b&&("object"===_typeof(b)||"function"==typeof b))return b;if(void 0!==b)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(a)}function _assertThisInitialized(a){if(void 0===a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return a}function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(a){return!1}}function _getPrototypeOf(a){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},_getPrototypeOf(a)}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var DAYS=["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],MONTHS=["january","february","march","april","may","june","july","august","september","october","november","december"];exports.MONTHS=MONTHS;var Calendar=/*#__PURE__*/function(a){function b(){var a;_classCallCheck(this,b);for(var d=arguments.length,e=Array(d),f=0;f<d;f++)e[f]=arguments[f];return a=c.call.apply(c,[this].concat(e)),_defineProperty(_assertThisInitialized(a),"state",{month:null,weeks:null,hoverWeek:null,hoverDate:null}),a.setPrevMonth=a.setPrevMonth.bind(_assertThisInitialized(a)),a.setNextMonth=a.setNextMonth.bind(_assertThisInitialized(a)),a.renderDay=a.renderDay.bind(_assertThisInitialized(a)),a.renderWeek=a.renderWeek.bind(_assertThisInitialized(a)),a.renderDate=a.renderDate.bind(_assertThisInitialized(a)),a}_inherits(b,a);var c=_createSuper(b);return _createClass(b,[{key:"translate",value:function translate(){return(this.props.translate||_translate2.translate).apply(void 0,arguments)}},{key:"setPrevMonth",value:function setPrevMonth(){var a=this.state.month;this.setState({month:a.minus({months:1}),weeks:null// Makes getDerivedStateFromProps recompute
})}},{key:"setNextMonth",value:function setNextMonth(){var a=this.state.month;this.setState({month:a.plus({months:1}),weeks:null// Makes getDerivedStateFromProps recompute
})}},{key:"onChange",value:function(a){var b=this.props,c=b.value,d=b.onChange;c&&(a=a.set({hour:c.hour,minute:c.minute,second:c.second,millisecond:c.millisecond})),d(a)}},{key:"renderDay",value:function renderDay(a,b){return/*#__PURE__*/_react["default"].createElement("div",{className:"cell label".concat(0===b?" first":""),key:a},this.translate("weekDay.".concat(a)))}},{key:"renderWeek",value:function renderWeek(a){var b=this,c=this.props,d=c.includeWeeks,e=c.onWeekSelect,f={className:"cell week"};if(d&&e){var g=_luxon.Interval.fromDateTimes(a[0],a[6].endOf("day"));f.className+=" selectable",f.onMouseEnter=function(){return b.setState({hoverWeek:g})},f.onMouseLeave=function(){return b.setState({hoverWeek:null})},f.onClick=function(){return e(g)}}return/*#__PURE__*/_react["default"].createElement("div",{className:"row",key:a[0]},d&&/*#__PURE__*/_react["default"].createElement("div",f,this.translate("week.number",{week:a[0].weekNumber})),a.map(this.renderDate))}},{key:"renderDate",value:function renderDate(a,b){var c=this,d=this.props,e=d.hover,f=d.highlightStart,g=d.highlightEnd,h=this.state,i=h.value,j=h.month,k=h.hoverWeek,l=h.hoverDate,m=["cell","day"];return 0===b&&m.push("first"),i&&+a==+i&&m.push("selected"),f&&g&&a>=f&&a<=g&&m.push("range"),(k?k.contains(a):!!l&&(a===l||"start"===e&&g&&a>=l&&a<=g||"end"===e&&f&&a>=f&&a<=l))&&m.push("hover"),(a.year!==j.year||a.month!==j.month)&&m.push("outside"),/*#__PURE__*/_react["default"].createElement("div",{key:a,className:m.join(" "),onClick:function onClick(){return c.onChange(a)},onMouseEnter:function onMouseEnter(){return c.setState({hoverDate:a})},onMouseLeave:function onMouseLeave(){return c.setState({hoverDate:null})}},a.day)}},{key:"render",value:function render(){var a=this.props,b=a.includeWeeks,c=a.open,d=a.trigger,e=a.onClose,f=this.state,g=f.month,h=f.weeks;return/*#__PURE__*/_react["default"].createElement(_semanticUiReact.Popup,{className:"daycy calendar",flowing:!0,trigger:d,open:c,on:"click",onClose:e,onMouseDown:function onMouseDown(a){return a.preventDefault()}},/*#__PURE__*/_react["default"].createElement("div",{className:"title"},/*#__PURE__*/_react["default"].createElement(_semanticUiReact.Icon,{name:"chevron left",onClick:this.setPrevMonth}),g&&/*#__PURE__*/_react["default"].createElement("span",null,this.translate("month.".concat(MONTHS[g.month-1]))," ",g.year),/*#__PURE__*/_react["default"].createElement(_semanticUiReact.Icon,{name:"chevron right",onClick:this.setNextMonth})),/*#__PURE__*/_react["default"].createElement("div",{className:"grid"},/*#__PURE__*/_react["default"].createElement("div",{className:"row"},b&&/*#__PURE__*/_react["default"].createElement("div",{className:"cell week label"},this.translate("week.label")),DAYS.map(this.renderDay)),h&&h.map(this.renderWeek)))}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(a,b){var c=a.open,d=a.value,e=a.hover,f=a.highlightStart,g=a.highlightEnd,h=b.month,j=b.weeks,k=b.hoverDate,l={};if(l.value=d?d.startOf("day"):null,"week"===e&&k&&(l.hoverDate=null,l.hoverWeek=_luxon.Interval.fromDateTimes(k.startOf("week"),k.endOf("week"))),c){if(null===h){var m=d||f||g||_luxon.DateTime.local();h=m.startOf("month"),l.month=h}if(null===j){j=[];for(var n=h.startOf("week"),o=h.endOf("month");n<=o;){for(var p=[],q=0;7>q;q++)p.push(n),n=n.plus({days:1});j.push(p)}l.weeks=j}}else l.month=null,l.weeks=null,l.hoverWeek=null,l.hoverDate=null;return l}}]),b}(_react.Component);exports["default"]=Calendar,_defineProperty(Calendar,"propTypes",{trigger:_propTypes["default"].node.isRequired,open:_propTypes["default"].bool.isRequired,value:_propTypes["default"].instanceOf(_luxon.DateTime),onChange:_propTypes["default"].func.isRequired,onClose:_propTypes["default"].func,highlightStart:_propTypes["default"].instanceOf(_luxon.DateTime),highlightEnd:_propTypes["default"].instanceOf(_luxon.DateTime),hover:_propTypes["default"].oneOf(["start","end","week"]),includeWeeks:_propTypes["default"].bool,onWeekSelect:_propTypes["default"].func,translate:_propTypes["default"].func}),_defineProperty(Calendar,"defaultProps",{includeWeeks:!1,onClose:function onClose(){}});