jb-date-input
Version:
jalali date input web component
2 lines • 6.37 kB
JavaScript
var e,t;import r,{forwardRef as n,useCallback as a,useEffect as u,useImperativeHandle as i,useRef as l,useState as o}from"react";import"jb-date-input";import{enToFaDigits as c,faToEnDigits as s}from"jb-core";function d(e,t,r,n=!1){let i=a(t=>{e.current&&"function"==typeof r&&r(t)},[e,r]);u(()=>{let r=e.current;return r&&r.addEventListener(t,i,{passive:n,capture:!1}),function(){r&&r.removeEventListener(t,i,{passive:n,capture:!1})}},[e,t,r,n])}function f(e){return e.substring(5,7)}function p(e){return e.substring(0,4)}function m(e){let[t,r]=o(" / / "),n=l(null);u(()=>{n.current&&setTimeout(()=>{e.ref.current.setSelectionRange(n.current.selectionStart,n.current.selectionEnd),n.current=null},0)},[t,n.current]);let a=()=>{if(null===n.current){let r=function(e){let t=e.selectionStart;if(t){let r=p(e.inputValue).trim().length,n=f(e.inputValue).trim().length,a=e.inputValue.substring(8,10).trim().length;if(r<t&&(t<=4||0==n&&0==a))return r;if(t>4&&(t<=7&&n+5<t||0==a&&n<2))return n+5;if(a+8<t&&t>7&&t<=10)return a+8}return null}({inputValue:t,selectionStart:e.ref.current.selectionStart});null!=r&&r!==e.ref.current.selectionStart&&e.ref.current.setSelectionRange(r,r)}};return d(e.ref,"beforeinput",function(a){n.current=function(e){let{showPersianNumber:t,dateInputType:r,selection:n,event:{data:a,inputType:u}}=e,i=n.start,l=i,o=e.value;return a&&s(e.event.data||"").replace(/[^\u06F0-\u06F90-9/]/g,"").split("").forEach((e,t)=>{var n,a;let u,l=i+t;if(!/[\u06F0-\u06F90-9/]/g.test(e))return;(4==l||7==l)&&("/"==e&&m(l+1),l++);let c=!1;if("/"==e)return;let s=Number(e);5==l&&s>1&&(d("0",l),l++);let v=(n=o,u=!1,5==(a=l)&&1==s&&n[6]>"2"&&(u=!0),6==a&&s>2&&"1"==n[5]&&(u=!0),6==a&&0==s&&"0"==n[5]&&(u=!0),5==a&&0==s&&"0"==n[4]&&(u=!0),{isIgnoreChar:u,caretPos:a}),b=function(e,t,r,n,a){let u=!1;if(8==r&&t>3&&(a("0",r),r++),9==r&&t>1&&"3"==n[8]&&(u=!0),9==r&&0==t&&"0"==n[8]&&(u=!0),8==r&&0==t&&"0"==n[9]&&(u=!0),"JALALI"==e&&!u){let e=f(n),i=Number(e);if(9==r&&"3"==n[8]&&t>0&&i>6&&(u=!0),8==r&&3==t){if(12==i){let e=Number(p(n));!Number.isNaN(e)&&[1,5,9,13,17,22,26,30].includes(e%33)||(u=!0)}n[9]>"0"&&(2==e.length&&parseInt(n)>6&&a("0",9),2==e.length&&i<7&&n[9]>"1"&&a("1",9))}}return{isIgnoreChar:u,caretPos:r}}(r,s,l=v.caretPos,o,d);l=b.caretPos,(c=c||b.isIgnoreChar||v.isIgnoreChar)||(d(e,l),m(l+1))}),("deleteContentBackward"==u||"deleteContentForward"==u||"delete"==u||"deleteByCut"==u||"deleteByDrag"==u)&&function(e,t,r,n,a){let u=0;"deleteContentBackward"==e&&(u=t!==r?0:-1);for(let e=t;e<=r;e++)n(" ",e+u);a(t+u)}(u,n.start,n.end,d,m),{value:o,selectionStart:l,selectionEnd:l};function d(e,r){o=function(e,t,r,n){if((4==t||7==t)&&(e="/"),t>9||t<0)return r;let a=r.split("");return n&&(e=c(e)),a[t]=e,a.join("")}(e,r,o,t)}function m(e){l=e}}({dateInputType:e.dateInputType,selection:{start:e.ref.current.selectionStart,end:e.ref.current.selectionEnd},value:t,showPersianNumber:e.showPersianNumber,event:{inputType:a.inputType,data:a.data}}),a.preventDefault(),r(n.current.value),e.ref.current.setSelectionRange(n.current.selectionStart,n.current.selectionEnd)}),{value:t,setValue:r,onFocus:()=>{a()},onClick:()=>{a()},onChange:()=>{}}}(t=e||(e={})).jalali="JALALI",t.gregorian="GREGORIAN";let v=n((e,t)=>{let n=l(null);i(t,()=>n?n.current:{},[n]);let a=l([]);return u(()=>{e.format&&(e.format!==n.current?.valueFormat&&n.current?.setAttribute("format",e.format),a.current.length>0&&(a.current.forEach(e=>{e()}),a.current=[]))},[e.format]),u(()=>{e.max&&(e.format&&e.format!==n.current?.valueFormat?a.current.push(()=>{e.max&&n.current?.setMaxDate(e.max)}):n.current?.setMaxDate(e.max))},[e.max]),u(()=>{e.name?n?.current?.setAttribute("name",e.name||""):n?.current?.removeAttribute("name")},[e.name]),u(()=>{e.min&&(e.format&&e.format!==n.current?.valueFormat?a.current.push(()=>{e.min&&n.current?.setMinDate(e.min)}):n.current?.setMinDate(e.min))},[e.min]),u(()=>{n.current&&e.value&&(n.current.value=e.value)},[e.value]),u(()=>{n.current&&n.current.setAttribute("message",e.message||"")},[e.message]),u(()=>{n.current&&Array.isArray(e.jalaliMonthList)&&n.current.setMonthList("JALALI",e.jalaliMonthList)},[e.jalaliMonthList]),u(()=>{n.current&&Array.isArray(e.gregorianMonthList)&&n.current.setMonthList("GREGORIAN",e.gregorianMonthList)},[e.gregorianMonthList]),u(()=>{n.current&&void 0!==e.placeholder&&(n.current.placeholder=e.placeholder)},[e.placeholder]),u(()=>{n.current&&void 0!==e.overflowHandler&&(n.current.elements.popover.overflowHandler=e.overflowHandler)},[e.overflowHandler]),u(()=>{n.current&&void 0!==e.overflowRef&&(n.current.elements.popover.overflowDom=e.overflowRef.current)},[e.overflowRef]),u(()=>{n.current&&Array.isArray(e.validationList)&&(n.current.validation.list=e.validationList)},[e.validationList]),u(()=>{n.current&&e.direction&&n.current.setAttribute("direction",e.direction)},[e.direction]),u(()=>{n.current&&(e.required?n.current.required=!0:n.current.required=!1)},[e.required,n.current]),u(()=>{"object"==typeof e.calendarDefaultDateView&&e.calendarDefaultDateView.year&&e.calendarDefaultDateView.month&&n.current?.setCalendarDefaultDateView(e.calendarDefaultDateView.year,e.calendarDefaultDateView.month,e.calendarDefaultDateView.dateType)},[e.calendarDefaultDateView]),u(()=>{e.showPersianNumber?n.current?.setAttribute("show-persian-number","true"):n.current?.removeAttribute("show-persian-number")},[e.showPersianNumber]),u(()=>{"boolean"==typeof e.disabled&&n?.current?.setAttribute("disabled",`${e.disabled}`)},[e.disabled]),u(()=>{e.error?n?.current?.setAttribute("error",e.error):n?.current?.removeAttribute("error")},[e.error]),u(()=>{n?.current&&(n.current.isAutoValidationDisabled=!!e.isAutoValidationDisabled)},[e.isAutoValidationDisabled]),d(n,"load",e.onLoad,!0),d(n,"init",e.onInit,!0),d(n,"invalid",e.onInvalid,!0),d(n,"change",e.onChange,!0),d(n,"beforeinput",e.onBeforeInput,!1),d(n,"input",e.onInput,!0),d(n,"keyup",e.onKeyUp,!0),d(n,"keydown",e.onKeyDown,!1),d(n,"keypress",e.onKeyPress,!0),d(n,"select",e.onSelect,!0),d(n,"focus",e.onFocus,!0),d(n,"blur",e.onBlur,!0),r.createElement("jb-date-input",{style:e.style,class:e.className?e.className:"",label:e.label,"value-type":e.valueType?e.valueType:"GREGORIAN",ref:n,"input-type":e.inputType?e.inputType:"JALALI"},e.children)});v.displayName="JBDateInput";export{v as JBDateInput,m as useJBDateInput};
//# sourceMappingURL=JBDateInput.js.map