@progress/kendo-react-scheduler
Version:
React Scheduler brings the functionality of Outlook's Calendar to a single UI component. KendoReact Scheduler package
9 lines (8 loc) • 9.25 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 V=require("react"),z=require("@progress/kendo-react-intl"),s=require("../messages/index.js"),J=require("@progress/kendo-recurrence"),M=require("@progress/kendo-date-math"),Q=require("./RecurrenceFrequencyEditor.js"),X=require("./RecurrenceRepeatOnWeekEditor.js"),u=require("./common.js"),k=require("@progress/kendo-react-labels"),b=require("@progress/kendo-react-inputs"),f=require("@progress/kendo-react-dropdowns"),$=require("@progress/kendo-react-dateinputs"),g=require("@progress/kendo-react-form"),ee=require("../context/SchedulerContext.js");function te(l){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(l){for(const y in l)if(y!=="default"){const E=Object.getOwnPropertyDescriptor(l,y);Object.defineProperty(i,y,E.get?E:{enumerable:!0,get:()=>l[y]})}}return i.default=l,Object.freeze(i)}const e=te(V),P=l=>{const i=z.useInternationalization(),y=z.useLocalization(),{timezone:E}=ee.useSchedulerPropsContext(),[x,K]=e.useState(1),[F,T]=e.useState(M.ZonedDate.fromUTCDate(l.start)),c=e.useCallback((n,t)=>{const o=t?n:"scheduler.recurrenceEditor"+n;return y.toLanguageString(o,s.messages[o])},[y]),a=e.useMemo(()=>{var n;return u.getRule((n=l.value)!=null?n:ae.value)},[l.value]),U=e.useMemo(()=>u.getFrequencies(c),[c]),m=e.useMemo(()=>u.getFrequency(a),[a]),w=e.useMemo(()=>u.getExtendedWeekDays(i,c),[i,c]),v=e.useMemo(()=>u.getWeekDay(w,a,l.start),[w,a,l.start]),C=e.useMemo(()=>u.getMonths(i),[i]),N=e.useMemo(()=>u.getMonth(C,a),[C,a]),R=e.useMemo(()=>u.getOffsets(c),[c]),h=e.useMemo(()=>u.getOffset(R,a),[R,a]),D=e.useMemo(()=>u.getEndRule(a),[a]),p=e.useMemo(()=>u.getMonthDay(a,l.start),[a,l.start]),B=e.useMemo(()=>u.getUntil(a),[a.until]),O=e.useMemo(()=>u.getWeekDays(i),[i]),d=e.useMemo(()=>u.getRepeatOnRule(a),[a.byWeekDay,a.byMonthDay]),r=e.useCallback(n=>{n.freq==="never"?l.onChange({value:null}):(n.weekStart===void 0&&(n.weekStart=i.firstDay()),l.onChange({value:J.serializeRule(n,l.timezone)}))},[l.onChange,l.timezone]),G=e.useCallback(n=>{const t={};t.freq=n,t.interval=1,n==="weekly"&&(t.byWeekDay=[{day:M.ZonedDate.fromLocalDate(l.start,E).getDay(),offset:0}]),(n==="monthly"||n==="yearly")&&(t.byMonthDay=[l.start.getDate()]),n==="yearly"&&(t.byMonth=[l.start.getMonth()+1]),r(t)},[r,l.start,E]),Z=e.useCallback(n=>{const t=n.value;r(Object.assign({},a,{interval:t}))},[r,a]),_=e.useCallback(n=>{const t=n.value;r(Object.assign({},a,{count:t})),t!==null&&K(t)},[r,a]),Y=e.useCallback(n=>{const t=n.value;if(!t)return;const o=M.ZonedDate.fromLocalDate(t,l.timezone);r(Object.assign({},a,{until:o})),T(o)},[r,a,l.timezone]),A=e.useCallback(n=>{r(Object.assign({},a,{byWeekDay:O.filter(t=>n.some(o=>o===t.value)).map(t=>({offset:0,day:t.value}))}))},[r,a,O]),L=e.useCallback(n=>{const t=Object.assign({},a),o=n.target.value;typeof o.value=="string"?(t.byWeekDay=u.weekDayRuleFromString(o.value),t.bySetPosition=[h.value]):(t.bySetPosition=void 0,t.byWeekDay=[{day:o.value,offset:h.value}]),r(t)},[h.value,r,a]),S=e.useCallback(n=>{r(Object.assign({},a,{byMonthDay:[n.value]}))},[r,a]),q=e.useCallback(n=>{const t=n.value;r(Object.assign({},a,{byMonth:[t.value]}))},[r,a]),H=e.useCallback(n=>{const t=n.value,o=Object.assign({},a);switch(t){case"never":o.until=void 0,o.count=void 0;break;case"count":o.until=void 0,o.count=x;break;case"until":o.until=F,o.count=void 0;break}r(o)},[r,a,l.timezone]),I=e.useCallback(n=>{const t=Object.assign({},a);n.value==="monthday"?(t.byWeekDay=void 0,t.bySetPosition=void 0,t.byMonthDay=[p]):n.value==="weekday"&&(t.byMonthDay=void 0,typeof v.value=="string"?(t.bySetPosition=[h.value],t.byWeekDay=u.weekDayRuleFromString(v.value)):t.byWeekDay=[{day:v.value,offset:h.value}]),r(t)},[r,a,p,v]),j=e.useCallback(n=>{const t=Object.assign({},a),o=n.value;if(t.byWeekDay)switch(t.byWeekDay.length){case 7:case 5:case 2:t.bySetPosition=[o.value];break;case 1:t.byWeekDay[0].offset=o.value;break}r(t)},[r,a]);return e.createElement(e.Fragment,null,e.createElement(g.FieldWrapper,null,e.createElement(k.Label,{className:"k-form-label"},y.toLanguageString(s.recurrenceEditorRepeat,s.messages[s.recurrenceEditorRepeat])),e.createElement("div",{className:"k-form-field-wrap"},e.createElement(Q.RecurrenceFrequencyEditor,{value:m,data:U,onChange:G}))),m!=="never"&&e.createElement(g.FieldWrapper,null,e.createElement(k.Label,{editorId:"interval-editor",className:"k-form-label"},c(u.capitalize(m)+"RepeatEvery")),e.createElement("div",{className:"k-form-field-wrap"},e.createElement(b.NumericTextBox,{min:1,step:1,defaultValue:1,value:a.interval,onChange:Z,id:"interval-editor",className:"k-recur-interval"})," ",e.createElement(k.Label,{editorId:"interval-editor",className:"k-form-label"},c(u.capitalize(m)+"Interval")))),m==="weekly"&&e.createElement(g.FieldWrapper,null,e.createElement(k.Label,{className:"k-form-label"},c(s.recurrenceEditorWeeklyRepeatOn,!0)),e.createElement("div",{className:"k-form-field-wrap"},e.createElement(X.RecurrenceRepeatOnWeekEditor,{data:O,value:(a.byWeekDay||[]).map(({day:n})=>n),onChange:A}))),m==="monthly"&&e.createElement(g.FieldWrapper,null,e.createElement(k.Label,{key:"recurrence-repeat-on-monthly-label",className:"k-form-label"},c(s.recurrenceEditorMonthlyRepeatOn,!0)),e.createElement("div",{className:"k-form-field-wrap"},e.createElement(b.RadioGroup,{value:d,onChange:I,item:W,className:"k-reset",data:[{value:"monthday",label:c(s.recurrenceEditorMonthlyDay,!0),children:[e.createElement(e.Fragment,{key:"separator"}," "),e.createElement(b.NumericTextBox,{key:"weekday-day",min:1,max:31,disabled:d!=="monthday",value:a&&a.byMonthDay&&a.byMonthDay[0],onChange:S,width:"auto"})]},{value:"weekday",label:" ",children:[e.createElement(f.DropDownList,{key:"weekday-offset",textField:"text",dataItemKey:"value",disabled:d!=="weekday",data:R,value:h,onChange:j,style:{width:"auto"}}),e.createElement(e.Fragment,{key:"separator"}," "),e.createElement(f.DropDownList,{key:"weekday-value",disabled:d!=="weekday",value:v,data:w,onChange:L,textField:"text",dataItemKey:"value",style:{width:"auto"}})]}]}))),m==="yearly"&&e.createElement(g.FieldWrapper,null,e.createElement(k.Label,null,c(s.recurrenceEditorYearlyRepeatOn,!0)),e.createElement("div",{className:"k-form-field-wrap"},e.createElement(b.RadioGroup,{value:d,item:W,onChange:I,className:"k-reset",data:[{value:"monthday",label:" ",children:[e.createElement(f.DropDownList,{key:"monthday-month",disabled:d!=="monthday",value:N,data:C,textField:"text",dataItemKey:"value",onChange:q,style:{width:"auto"}}),e.createElement(e.Fragment,{key:"separator"}," "),e.createElement(b.NumericTextBox,{key:"monthday-day",min:1,max:31,disabled:d!=="monthday",value:p,onChange:S,width:"auto"})]},{value:"weekday",label:" ",children:[e.createElement(f.DropDownList,{key:"yearly-weekday-offset",textField:"text",dataItemKey:"value",disabled:d!=="weekday",data:R,value:h,onChange:j,style:{width:"auto"}}),e.createElement(e.Fragment,{key:"yearly-separator-1"}," "),e.createElement(f.DropDownList,{key:"yearly-weekday-day",textField:"text",dataItemKey:"value",disabled:d!=="weekday",value:v,data:w,onChange:L,style:{width:"auto"}}),e.createElement(e.Fragment,{key:"yearly-separator-2"}," "),e.createElement("span",{key:"yearly-weekday-of-label"},c(s.recurrenceEditorYearlyOf,!0)),e.createElement(e.Fragment,{key:"yearly-separator-3"}," "),e.createElement(f.DropDownList,{key:"yearly-weekday-month",textField:"text",dataItemKey:"value",disabled:d!=="weekday",value:N,data:C,onChange:q,style:{width:"auto"}})]}]}))),m!=="never"&&e.createElement("div",{className:"k-scheduler-recurrence-end-rule-editor"},e.createElement(g.FieldWrapper,null,e.createElement(k.Label,{className:"k-form-label"},c(s.recurrenceEditorEndLabel,!0)),e.createElement("div",{className:"k-form-field-wrap"},e.createElement(b.RadioGroup,{item:W,value:D,onChange:H,data:[{value:"never",label:c(s.recurrenceEditorEndNever,!0)},{value:"count",label:c(s.recurrenceEditorEndAfter,!0),children:[e.createElement(e.Fragment,{key:"separator-1"}," "),e.createElement(b.NumericTextBox,{key:"endrule-after-editor",id:"k-endrule-after",className:"k-recur-count",min:1,width:"auto",value:D==="count"?a.count:x,onChange:_,disabled:D!=="count"}),e.createElement(e.Fragment,{key:"separator-2"}," "),e.createElement(k.Label,{key:"endrule-after-label",className:"k-radio-label",editorId:"k-endrule-after"},c(s.recurrenceEditorEndOccurrence,!0))]},{value:"until",label:c(s.recurrenceEditorEndOn,!0),children:[e.createElement(e.Fragment,{key:"separator"}," "),e.createElement($.DatePicker,{key:"k-endrule-until-editor",id:"k-endrule-until",disabled:D!=="until",min:l.start,value:D==="until"?B:M.toLocalDate(F),onChange:Y,width:"auto"})]}]})))))},W=l=>e.createElement("li",{...l},l.children),ae={value:""};P.displayName="KendoReactSchedulerRepeatEditor";exports.RecurrenceEditor=P;