@nexusui/components
Version:
These are custom components specially-developed for NexusUI applications. They will make your life easier by giving you out-of-the-box implementations for various high-level UI elements that you can drop directly into your application.
2 lines (1 loc) • 2.63 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),n=require("./UnitLibs/index.js"),r=require("./helper.js"),u=require("./UnitFormatter.container.js");const a=/^-?\d+(\.\d+)?$/;var i=t.forwardRef(((i,s)=>{const{initialValue:l,unitPlacement:c="start",unitType:o="CustomUnit",units:m=[],onChange:d,disabled:p,startAdornment:b,endAdornment:f,...v}=i,$=t.useRef(a.test(`${l?.value}`)?Number(l?.value):0),N=t.useRef(l?.unit||""),[S,g]=t.useState(a.test(`${l?.value}`)?Number(l?.value):""),[C,U]=t.useState(l?.unit||""),h=t.useMemo((()=>({value:S,unit:C})),[S,C]),y=t.useMemo((()=>{if("CustomUnit"===o){const e={};return m.forEach((t=>{e[t.type]=t})),e}return n.default[o]}),[m,o]),E=t.useMemo((()=>r.unitDisplayStringMapGenerator(y)),[y]),F=t.useMemo((()=>y[C]||{type:C,minValue:0,placeholder:""}),[y,C]),V=t.useCallback(((e,t)=>{const{current:n}=N,{current:u}=$,a=r.isFraction(e)?r.fractionToDecimal(e):parseFloat(e);t===n&&a===u||($.current=a,N.current=t,d?.({value:a,unit:t}))}),[d]),j=t.useCallback(((e,t=!1)=>{const n=N.current,u=$.current,a=r.handleUnitValue(String(e));a?M(a,n,u,t):j(`${u} ${n}`,t)}),[V,F.minValue,y,E]),M=(e,t,n,u=!1)=>{const i=r.getValidUnit(e.unit,E)||t;let s=a.test(String(e.value))?e.value:n;if(s=Number(s)<=(F.minValue??Number.MIN_SAFE_INTEGER)?F.minValue??Number.MIN_SAFE_INTEGER:s,!i)return;const{valueFormatter:l}=y[i]||{};s=l?l(String(s)):s,g(u?`${s} ${i}`:s),U(i),V(String(s),i)},k=e=>{const{current:t}=$,{current:n}=N,r=F.minValue??0;let u=Number(t||0)+("up"===e?1:-1);u=u<=r?r:u,j(`${u} ${n}`,"input"===c)},x=t.useCallback((e=>{const{value:t}=e;j(String(t),"input"===c)}),[c,j]),A=t.useCallback((e=>{const{current:t}=N,{current:n}=$;e!==t&&(U(e),j(`${n} ${e}`))}),[j]),I=t.useCallback((e=>{const{value:t,unit:n}=e;g(t),A(n)}),[A]),_=t.useCallback((e=>{const{value:t,unit:n}=e||{};g(t||""),U(n||y[0].displayName)}),[y]);return t.useImperativeHandle(s,(()=>({reset:_})),[_]),t.useEffect((()=>{const{current:e}=N,{current:t}=$;j(`${t} ${e}`,"input"===c)}),[j,c]),t.useEffect((()=>{const{current:e}=N,{current:t}=$;if(!r.getValidUnit(e,E)&&Object.keys(y).length>0){const[e]=Object.entries(y).filter((([,e])=>e.isDefault)),[n]=e||["",{type:""}];N.current=n,j(`${t} ${n}`,"input"===c)}}),[y,E,c,j]),e.jsx(u.UnitFormatter,{"data-testid":"NexusSimpleUnitFormatter-root",className:"NexusSimpleUnitFormatter-root",placeholder:F.placeholder,unitPlacement:c,unitType:o,units:m,value:h,startAdornment:b,endAdornment:f,disabled:p,...v,onChange:I,onBlur:x,onStepDecrement:()=>k("down"),onStepIncrement:()=>k("up")})}));exports.default=i;