@ebay/ui-core-react
Version:
Skin components build off React
2 lines (1 loc) • 5.35 kB
JavaScript
;const ue=require("classnames"),a=require("react"),de=require("./icon-button-BeoRawG2.js"),ve=require("./icons/ebay-icon-chevron-left-24/index.js"),Ue=require("./icons/ebay-icon-chevron-right-24/index.js");function Ae(n){const c=new Intl.Locale(n);return c.weekInfo?c.weekInfo.firstDay:0}function Fe(n){const c=Ae(n),i=new Intl.DateTimeFormat(n,{weekday:"short"}),u=new Date(2022,9,2+c),A=[...Array(7)].map(()=>{const h=i.format(u);return u.setDate(u.getDate()+1),h});return{firstDayOfWeek:c,weekdayLabels:A}}function Re(n){if(n)return/^\d\d\d\d-\d\d-\d\d$/g.test(n)?n:f(new Date(n))}function f(n){if(!isNaN(n.getTime()))return n.toISOString().slice(0,10)}function U(n){return new Date(n)}function H(n,c){const i=U(n);return i.setUTCDate(i.getUTCDate()+c),f(i)}function fe(n){return n||navigator.language}const Le={ArrowRight:1,ArrowLeft:-1,ArrowDown:7,ArrowUp:-7},Ne=({selected:n,numMonths:c=1,navigable:i,interactive:u,range:A,locale:h,disableBefore:g,disableAfter:I,disableWeekdays:B,disableList:G,a11ySelectedText:me="selected",a11yRangeStartText:ye="start of range",a11yInRangeText:ge="in range",a11yRangeEndText:Ie="end of range",a11ySeparator:J="-",a11yTodayText:De="today",a11yDisabledText:Ee="inactive",getA11yShowMonthText:Q=b=>`Show ${b}`,linkBuilder:X,onMonthChange:Z=()=>{},onFocus:Se=()=>{},onSelect:we=()=>{}})=>{const b=f(new Date),{firstDayOfWeek:Te,weekdayLabels:be}=Fe(fe(h)),ee=a.useRef(null),[m,F]=a.useState(0),[te,ne]=a.useState(null),[D,_]=a.useState(b),R=a.useRef(b),E=e=>{const t=U(R.current);return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth()+e))},S=()=>f(E(m)),w=()=>{const e=U(R.current);return f(new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+m+(c||1),0)))};a.useEffect(()=>{if(n){const e=Array.isArray(n)?n:[n],t=S(),r=w();e.find(d=>d>=t&&d<=r)===void 0&&(R.current=e[0],F(0))}},[n]);const Oe=()=>{if(n&&A){let e,t;if(Array.isArray(n)?[e,t]=n:te&&(e=n,t=te),e&&t){const[r,s]=[e,t].sort();return{rangeStart:r,rangeEnd:s}}}return{rangeStart:null,rangeEnd:null}},k=e=>new Intl.DateTimeFormat(fe(h),{month:"long",year:"numeric"}).format(new Date(e.getUTCFullYear(),e.getUTCMonth())),C=e=>g&&e<g||I&&e>I||B&&B.includes(U(e).getUTCDay())||G&&G.includes(e),ae=()=>{let e=S();const t=w();for(;e<=t&&C(e);)e=H(e,1);return e>t?null:e},re=()=>{let e=w();const t=S();for(;e>=t&&C(e);)e=H(e,-1);return e<t?null:e},O=e=>{_(e),setTimeout(()=>{var t;const r=(t=ee.current)===null||t===void 0?void 0:t.querySelector(`[data-iso="${e}"]`);r?.focus()})},L=e=>{if(g&&S()<=g)return!1;F(s=>s-1);let t=D;const r=re();return r&&r<D&&(t=r,_(r)),e&&O(t),Z({iso:f(E(m))}),!0},N=e=>{if(I&&w()>=I)return!1;F(s=>s+1);let t=D;const r=ae();r&&r>D&&(t=r,_(r)),e&&O(t),Z({iso:f(E(m+(c||1)))})},he=e=>{const t=Le[e.key];if(t){let r=7,s=D;do s=H(s,t);while(r-- >0&&C(s));if(r>0){const d=S(),T=w();s<d?i?L():s=d:s>T&&(i?N():s=T),O(s)}}else switch(e.key){case"PageUp":L(!0);break;case"PageDown":N(!0);break;case"Home":O(ae());break;case"End":O(re());break}},_e=(e,t)=>{we(e,{iso:t})},se=(e,t)=>{ne(t),_(t),Se(e,{iso:t})},oe=()=>{ne(null)},{rangeStart:V,rangeEnd:x}=Oe(),ke=e=>!(!V||!x||e<V||e>x),ce=[...Array(c)].map((e,t)=>E(m+t));return a.createElement("div",{className:"calendar",ref:ee},i&&a.createElement("div",{className:"calendar__header"},a.createElement("div",{className:"calendar__header--inner"},a.createElement(de.EbayIconButton,{transparent:!0,size:"small",icon:a.createElement(ve.EbayIconChevronLeft24,null),disabled:g&&S()<=g,"aria-label":Q(k(E(m-1))),onClick:()=>L()}),ce.map((e,t)=>a.createElement("h3",{key:t},k(e))),a.createElement(de.EbayIconButton,{transparent:!0,size:"small",icon:a.createElement(Ue.EbayIconChevronRight24,null),disabled:I&&w()>=I,"aria-label":Q(k(E(m+c))),onClick:()=>N()}))),a.createElement("div",{className:"calendar__body"},ce.map((e,t)=>{const r=(e.getUTCDay()-Te+7)%7,s=e.getUTCFullYear(),d=e.getUTCMonth(),T=new Date(s,d+1,0).getDate(),Ce=[...Array(Math.ceil((r+T)/7))];return a.createElement("div",{key:t,className:"calendar__month"},a.createElement("table",{onKeyDown:he},a.createElement("caption",null,k(e)),a.createElement("thead",null,a.createElement("tr",null,be.map(M=>a.createElement("th",{key:M,scope:"col"},M)))),a.createElement("tbody",null,Ce.map((M,q)=>{let Y=q*7-r+1,$=Y+6;const P=[];q===0&&r!==0?(Y=1,P.push(a.createElement("td",{key:"pre-column",colSpan:r}))):$>T&&($=T);for(let y=Y;y<=$;y++){const o=f(new Date(Date.UTC(s,d,y))),W=o===b,j=Array.isArray(n)?n.some(l=>l===o):n===o,z=o===V,le=ke(o),K=o===x,p=C(o),v=["",!u&&j&&me,z&&ye,!z&&!K&&le&&ge,K&&Ie,!u&&W&&De,!u&&p&&Ee].filter(l=>typeof l!="boolean"||l!==!1),ie=!u&&!p&&X&&X(o),pe=ie?"a":"span";P.push(a.createElement("td",{key:y,className:ue({"calendar__cell--selected":j,"calendar__range--start":z,calendar__range:le,"calendar__range--end":K})},u?a.createElement("button",{disabled:p,"aria-label":v.length>1?`${y}${v.join(J)}`:void 0,tabIndex:D!==o?-1:void 0,"aria-current":W?"date":void 0,"aria-pressed":j?"true":void 0,onClick:l=>_e(l,o),onFocus:l=>se(l,o),onMouseOver:l=>se(l,o),onMouseOut:()=>oe(),onBlur:()=>oe(),"data-iso":o},y):a.createElement(pe,{className:ue({"calendar__cell--disabled":p,"calendar__cell--current":W}),href:ie},y,v.length>1&&a.createElement("span",{className:"clipped"},v.join(J)))))}return a.createElement("tr",{key:q},P)}))))})))};exports.EbayCalendar=Ne;exports.dateArgToISO=Re;