UNPKG

carbon-react

Version:

A library of reusable React components for easily building user interfaces.

2 lines (1 loc) 3.82 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("invariant"),n=require("../textbox/textbox.component.js"),a=require("../../__internal__/i18n-context/index.js"),l=require("../../hooks/__internal__/usePrevious/index.js"),i=require("../../__internal__/utils/logger/index.js"),u=require("../../__internal__/utils/helpers/tags/tags.js");function o(e){return e&&e.__esModule?e:{default:e}}var c=o(t),s=o(r);function p(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function d(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){p(e,t,r[t])}))}return e}const m=c.default.forwardRef(((r,o)=>{var{align:c="right",precision:p=2,inputWidth:m,readOnly:f,onChange:g,onBlur:b,id:h,name:v,allowEmptyValue:y=!1,locale:x,value:O}=r,_=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},l=Object.keys(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(r,["align","precision","inputWidth","readOnly","onChange","onBlur","id","name","allowEmptyValue","locale","value"]);const j=t.useContext(a.default),w=t.useCallback((e=>{var t;return null===(t=Intl.NumberFormat(x||j.locale()).formatToParts(10000.1).find((t=>t.type===e)))||void 0===t?void 0:t.value}),[j,x]),C=t.useCallback((e=>Number.isNaN(Number(e))),[]),E=t.useCallback((e=>{if(C(e))return e;if(""===e||e.match(/\s+/g))return e;const t=w("decimal"),[r,n]=e.split(".");let a=Intl.NumberFormat(x||j.locale(),{maximumFractionDigits:0}).format(+r);return(null==n?void 0:n.length)>p?a+=`${t+n}`:(null==n?void 0:n.length)<=p?a+=`${t+n+"0".repeat(p-n.length)}`:a+=`${p?t+"0".repeat(p):""}`,a}),[w,C,j,x,p]),P=y?"":E((0).toFixed(p)),k=t.useCallback((e=>(s.default("string"==typeof e,"Decimal `value` prop must be a string"),e&&!y&&s.default(""!==e,"Decimal `value` must not be an empty string. Please use `allowEmptyValue` or specify a non-empty initialValue"),e)),[y]),q=l.default(p);t.useEffect((()=>{q&&q!==p&&i.default.error("Decimal `precision` prop has changed value. Changing the Decimal `precision` prop has no effect.")}),[p,q]);const D=t.useCallback((e=>{const t=new RegExp(`[\\${w("group")} ]*`,"g");return e.replace(t,"")}),[w]),N=t.useCallback((e=>{var t;const r=(null===(t=w("group"))||void 0===t?void 0:t.match(/\s+/))&&!e.match(/\s{2,}/)?e.replace(/\s+/g,""):e,n=new RegExp("([^A-Za-z0-9]{2,})|(^[^A-Za-z0-9-]+)|([^0-9a-z-,.])|([^0-9-,.]+)|([W,.])$","g"),a=w("decimal"),l=new RegExp("."===a?`\\${a}`:a,"g");return r.match(n)||(r.match(l)||[]).length>1?r:D(r).replace(new RegExp(`\\${a}`,"g"),".")}),[w,D]),$=k(O||P),[V,F]=t.useState(C(N($))?$:E($)),R=(e,t)=>({target:{name:v,id:h,value:{formattedValue:E(N(e)),rawValue:t||N(e)}}}),S=l.default(O);return t.useEffect((()=>{const e=N(V),t=k(O);e!==t&&F(E(""===t&&""===S?P:t))}),[P,E,k,S,V,N,O]),e.jsxs(e.Fragment,{children:[e.jsx(n.Textbox,d({align:c,readOnly:f,inputWidth:m,onChange:e=>{const{value:t}=e.target;F(t),g(R(t))},onBlur:e=>{const{value:t}=e.target;let r;if(t){const e=N(t),n=C(e)?t:E(e);r=R(n,e),F(n)}else r=R(P),F(P);b&&b(r)},value:V,"data-component":"decimal",id:h,ref:o},_,u.default("decimal",_))),e.jsx("input",{name:v,value:N(V),type:"hidden","data-component":"hidden-input","data-role":"hidden-input"})]})}));m.displayName="Decimal",exports.Decimal=m,exports.default=m;