@progress/kendo-react-dateinputs
Version:
React DateInput is a perfect input component for handling quick and efficient date values. KendoReact Date Inputs package
9 lines (8 loc) • 2.61 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@progress/kendo-date-math"),p=require("../../utils.js"),r=require("../utils.js"),u=24,x=n=>t=>t%n,c=x(u),H=(n,t)=>s=>c(n+s*t),d=(n,t)=>c(u+n-t),g=n=>(t,s)=>!s||o.getDate(t).getTime()===o.getDate(s).getTime()?t:r.setHours(t,n),I=g(0),f=g(u-1);class L{constructor(t){this.intl=t,this.boundRange=!1,this.insertUndividedMax=!1,this.min=null,this.max=null,this.step=0,this.toListItem=null}apply(t,s){return r.setHours(t,s.getHours())}configure(t){const{boundRange:s=this.boundRange,insertUndividedMax:i=this.insertUndividedMax,min:h=this.min,max:e=this.max,part:a,step:l=this.step}=t;this.boundRange=s,this.insertUndividedMax=i,this.toListItem=M=>{const m=r.setHours(p.MIDNIGHT_DATE,M);return{text:this.intl.formatDate(m,a.pattern),value:m}},this.min=h,this.max=e,this.step=l}data(t){const[s]=this.range(t),i=H(s,this.step),h=a=>this.toListItem&&this.toListItem(i(a)),e=r.range(0,this.countFromMin(t)).map(h);return this.addLast(e),t&&this.addMissing(e,t),e}isRangeChanged(t,s){return!this.min||!this.max?!1:!o.isEqual(this.min,t)||!o.isEqual(this.max,s)}limitRange(t,s,i){return this.boundRange?[I(t,i),f(s,i)]:[t,s]}total(t){const s=this.insertUndividedMax&&this.isLastMissing(t)?1:0,i=this.isMissing(t)?1:0;return this.countFromMin(t)+i+s}selectedIndex(t){return Math.ceil(this.divideByStep(t))}valueInList(t){return t?this.insertUndividedMax&&this.lastHour(t)===t.getHours()||!this.isMissing(t):!0}addLast(t,s){return this.insertUndividedMax&&this.isLastMissing(s)&&this.toListItem&&t.push(this.toListItem(this.lastHour(s))),t}addMissing(t,s){if(this.valueInList(s))return t;if(this.toListItem){const i=this.toListItem(s.getHours());t.splice(this.selectedIndex(s),0,i)}return t}countFromMin(t){const[s,i]=this.range(t);return Math.floor(d(i,s)/this.step)+1}isMissing(t){return t?this.selectedIndex(t)!==this.divideByStep(t):!1}isLastMissing(t){return this.max!==null&&this.isMissing(r.setHours(this.max,this.lastHour(t)))}divideByStep(t){return d(t.getHours(),this.min.getHours())/this.step}lastHour(t){return this.range(t)[1]}range(t){const[s,i]=this.limitRange(this.min,this.max,t);return[s.getHours(),i.getHours()]}}exports.HoursService=L;