From c7bb29dc8f05f1b944e3243ad8f2410af2467b27 Mon Sep 17 00:00:00 2001 From: Charles Coqueret Date: Mon, 18 Oct 2021 20:33:25 +0200 Subject: [PATCH 1/3] Getting ready for next release --- package-lock.json | 7 +++---- package.json | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index f86af04..53fa247 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "react-amount", - "version": "1.0.2", + "version": "1.0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "react-amount", - "version": "1.0.2", + "version": "1.0.3", "license": "MIT", "devDependencies": { "@babel/core": "^7.15.8", @@ -40,8 +40,7 @@ "node": ">=12" }, "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" + "react": "^16.8.0" } }, "node_modules/@babel/code-frame": { diff --git a/package.json b/package.json index e576487..c762b82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-amount", - "version": "1.0.2", + "version": "1.0.3", "description": "React amount component", "keyword": [ "react", From be8078c40f75b061abef97d2aeaedaf41f0ad507 Mon Sep 17 00:00:00 2001 From: Charles Coqueret Date: Mon, 18 Oct 2021 20:34:54 +0200 Subject: [PATCH 2/3] Fix typo in enum ThousandGroupingStyle Update documentation with types Add example to documentation --- README.md | 79 +++++++++++++++++++++++++--------- documentation/example.gif | Bin 0 -> 70781 bytes package.json | 3 +- src/index.ts | 2 +- src/utils/amount-formatter.ts | 18 ++++---- 5 files changed, 70 insertions(+), 32 deletions(-) create mode 100644 documentation/example.gif diff --git a/README.md b/README.md index 17ccdbc..684537c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# React component supporting the following +# React component formatting numbers in an input field [![GitHub open issues](https://img.shields.io/github/issues/CharlesCoqueret/react-amount?style=flat-square)](https://github.com/CharlesCoqueret/react-amount/issues) [![MIT](https://img.shields.io/npm/l/react-amount?style=flat-square)](https://github.com/CharlesCoqueret/react-amount/blob/master/LICENSE.txt) @@ -6,7 +6,9 @@ ## Live demo -[Live demo](https://codesandbox.io/s/demo-react-amount-640ii?file=/src/App.tsx) +[Live demo on CodeSandbox](https://codesandbox.io/s/demo-react-amount-640ii?file=/src/App.tsx) + +![](documentation/example.gif) ## Installation @@ -24,7 +26,7 @@ npm install react-amount ```typescript import React, { useState } from 'react'; -import Amount from 'react-amount'; +import { Amount } from 'react-amount'; import '~/react-amount/dist/style/index.min.css'; @@ -55,24 +57,24 @@ export default MyComponent; ## Options -| Option | Type | Default value | Description | -| :---------------: | :--------------------------------------------------: | :-----------: | ----------------------------------------------------- | -| value | string \| number | undefined | Initial value of the control | -| readOnly | boolean | false | Input value is not editable | -| disabled | boolean | false | Input value is disabled | -| textOnly | boolean | false | Input value is displayed as formatted text only value | -| name | string | mandatory | Name of the input field | -| className | string | undefined | Class to be added to the wrapper of the component | -| onChange | (update: FormattedValues) => void | undefined | Callback function to handle value changes | -| decimals | number | 2 | Number of decimals | -| decimalSeparator | string | . | Decimal separator | -| thousandSeparator | string | , | Thousand separator | -| thousandGrouping | ThousangGroupingStyle: "thousand" \| "wan" \| "lakh" | thousand | Thousand grouping style | -| displayOnInvalid | string | - | Value displayed on invalid input in textOnly | -| dataTestId | string | undefined | Id value for testing | -| required | boolean | false | Required of the input field | -| prefix | string | undefined | Prefix | -| suffix | string | undefined | Suffix | +| Option | Type | Default value | Description | +| :---------------: | :----------------------------------------------------------------------------: | :-----------: | ----------------------------------------------------- | +| value | string \| number | undefined | Initial value of the control | +| readOnly | boolean | false | Input value is not editable | +| disabled | boolean | false | Input value is disabled | +| textOnly | boolean | false | Input value is displayed as formatted text only value | +| name | string | | Name of the input field | +| className | string | undefined | Class to be added to the wrapper of the component | +| onChange | (update: [FormattedValues](#FormattedValues)) => void | undefined | Callback function to handle value changes | +| decimals | number | 2 | Number of decimals | +| decimalSeparator | string | "." | Decimal separator | +| thousandSeparator | string | "," | Thousand separator | +| thousandGrouping | [ThousandGroupingStyle](#ThousandGroupingStyle): "thousand" \| "wan" \| "lakh" | "thousand" | Thousand grouping style | +| displayOnInvalid | string | "-" | Value displayed on invalid input in textOnly | +| dataTestId | string | undefined | Id value for testing | +| required | boolean | false | Required of the input field | +| prefix | string | undefined | Prefix | +| suffix | string | undefined | Suffix | ## Contributing @@ -80,3 +82,38 @@ We very much welcome contributions. - Submit [GitHub issues](http://github.com/CharlesCoqueret/react-amount/issues) to report bugs or ask questions. - Propose [Pull Request](http://github.com/CharlesCoqueret/react-amount/pulls) to improve our code. + +## Types + +### FormattedValues + +```typescript +export interface FormattedValues { + formatted: string; + float: number; + raw: string; +} +``` + +This structure is used in the onChange handler to provide flexibility on the format. + +- `formatted` is for display purpose. +- `float` is for numerical representation, but suffer from precision limitations. +- `raw` is for numerical representation as a string with full precision. + +### ThousandGroupingStyle + +```typescript +export enum ThousandGroupingStyle { + THOUSAND = 'thousand', + WAN = 'wan', + LAKH = 'lakh', +} +``` + +- `THOUSAND`: groups of 3 digits + example: 123,456,789 +- `WAN`: 1 group of 4 digits, then groups of 3 digits + example: 12,345,6789 +- `LAKH`: 1 group of 3 digits, then groups of 2 digits + example: 12,34,56,789 diff --git a/documentation/example.gif b/documentation/example.gif new file mode 100644 index 0000000000000000000000000000000000000000..babf7479c9a3b41c702af59ce6a6b459b509f820 GIT binary patch literal 70781 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%0Dp z``n0!uQ$Ix-4=gv+3kxD-<^E_eaGs9IZsFY{Kwt*KaA{i`9|;`+u%pKR zl&yYWg{wAqZX7OIMLcH+AUiv{bv~j(+>He2#Ub(&>=b}XZTteDvPCFO_c#$w<%Bx{x8JJ;l4ld{Ao33cU~g z;X-ce-wb){&96&uTWGLp4JaT1ROE{VO-%i^nw_dETg^E&SX{wUl<6BR|+|)Y-22wUU)&B_yx{0RjYA;S8b%LUlK^9#6@;w6bapKPeY{dw zOgz#+1KHb z2Ik!15lP!_S5xqsxn13w3!6|sDaKUD7;;SnPOa`UpMBE5=hOy)odYP7WRf<jCs;(5j>gxbLnuY`g(@fLc?{D z?$4Slrd@LXEAVFiB4X1(m}1#%t98y>YFZC|L1Q)$M*N5~A7_12gRVGa?U*pgh@j0` zF~_wE-u<(U7n#JA_E&wmi@N^-gXov&@8g<~pcu|jYk?{0C|;T3a7AxFX_mh1OLZq~ z>K0#8Hm$ZWx!Az6M)~dlbPFZqA zkqOhTCCQ5VlONL7*tHU($Q`#7C{W&)OdSB6d0;Ti8!r0+Laxv${KU6?uf+ znYKxtD1sR%Nbg6s5ps)dY!WSGEmwf9n;@mHp_#awkFe5gAnX`f4gh{W5vZc&(?l3#l+4ZD>UnZ;Dz;ghAn~% zCh>eZ`z<&~(1KP=>Id}!|I(%{av0GHYFJjY2@QMNDrf_|BEkQJovEi#ZUAW~79%hz zgprM7Aa22VAI1WhcA?X6nlWU-Qag}CSis&;JKHAM;Z=8GLDXI8sQB=tmJiF zWrlAzLz*M&TmdJ@@`Ox-k=76*GyC0v?Q8>tcxf0Yw-7<@7~V!K)54M#WSDxt8Bk=V zFDz*9?l88EDi#N|hQDCj2<4+>m>!|%Gb_P!B^%Ba$u#>txhpRI=`E8}4tTLvw}q@Aoan9djS?v_5qhGt=Hh2&g5 z&DdU!SV1ydN{Sp|-hs#o#5cZN2xjK4FomQvQgtO;C?Lr3B)pR@L!xu_-}p&d44=ii z*q(3w0ASoCRLro37PG?TM#x2f$RnQL6bAeLbP6PaGoWzQO` z#0u-gj)AxGmyA_$uh;p_ymG53ZR{}4Ix6uGyj`+?tlBB~XyD>2x63Y!)d&iY2CWXf zv;X1P5zp&KL$+MGbLjW6T7q>w_{Ngc>h7H6Yx{ zbptd~!D0Ulqq%7nM5a6|i{*Vemw&qEYSxlDEs05eHNksPdWv1d>i*V)Gc#ivecWnw zhph@39t7chyVk#7mclsm%ztM1w~v_BXO1^pkTM0mKb`sPAFka5`S1MvLs5ZH__xtF z3H%b1U>Z#(qGuw`mG%p>>3s7Pu6#h8YvL&7;h{0@3X%yG&HHSd(V&S;H^~;Lq%inP z{k_WRGZFl+cP<6_r-|U;olC{!UAF@v^1{D$8w2$%xjlUdQcCBJ{ZaYy z$C_e2^oC$_%L@aabK|dMnfkH*q zTcyGnO07Z}=tI#64cLU!ek=MDwGL)28tPsD%O>Eb@owqlfn~l>r-)lohQU>AX|@S? z9Y~ECn??ciyG`eZm}FzZe3oyxSpnl#xzvhoKjMcNrrxSp>w037Rc=`L8hf#RA3r*e z?WV>=bLJc^Nf+s}o5`->tL2GsF8svjW>LkGj$9Xoy2I@tLlwk{lBpBMbq z!`p?-=4_F>lO2SyyV*ixQiRUZCo5z##HLe5my4!)##(JnElY4obK^H=i_CkPRfZu` z#_hT&$qlKzBKq}an`%AhQ#w7@Bk%1CcK5}vMYh{~hasK$<_h~Q2VGt?Dg&g??eMVL zeerpoZ8nfG7dK=0H#J9!ps!=o#rF+5oH6;`Puum_vL(k39_?@0%Pz-+CM)#igM}4*SIr^40MCuz|GJE^ zK8DiiI&I0M=xg>qyMt9aE;}_a_XIjgjBZ4WZ#^K!-C}<+?dif}AzRm%mei$#=1XqV z&Dd6&1tqgy-IpzW&GRvqy_M6RoppGPEuS)|#gB|$&=6bf#+vzio>q{2<_3-XfxxSu zoDdbZ?3~mYeevzfp6HpsrY>@FY!hB(du*#f9zQ&=&JrnSH#6vFnwZsAle!hFe=#|( zGIg{3gFws+8XRD8N;Y;+8?az_3q1e*yWcdnXC{ldE_R2-d$wNI!5*qOly%NeM&7#! z%Z)PAyR@M%kgga((X(H0_FcV21&epHEl;3dUD*28;%)x2q@-2;e|+~t?1{U-e38== z*}3ihu$~%P<9=CL4|$&qWr`l2Gy9D>7?aa-eUq!s0(CE%HfC#mjjC*Ag>lGpn%iGbKLXutsww zK~;u(wQUZwM)RZvRh(K$yUUW%{D^B+Cg-&6Q_@Cv%9w|_ostgs{i6l(L5I!nYddCK z7%faJILsT8bk2G>T9kV2u+>{_=bYb1cgdO6I4wXcGJmPc4XU;=?b7^Iz$L?c4@!9JhIje&Hs!DW#we=CQe<6MyD*C;TSvjCr?d!;$Qu1Y}@2=ys%|`$_ zKf6M*lA0i!xc)QAp;$>~EUB=7*Ki?TAl+r_<<%JHrP(|6kcVC<7*a|C%bV1fuB&=N z&OW#R#c+w5xpK0;LpUEl5^PF#LcEKO4zntFWD%y(;Urk!+1OB$@<1rR9{zBUPuMqG z&^!T0j&&qsHI)ynd9F@y6vJ_}+UbN;q z;g-1Jq?;h#QT`k9i#m0f8lqR^5NX#LZFDA@Fd_TCsi02rW>a9al7MWBoLZFPSi}vn z5ZhsLCKBZYVMzC=2pncA3OxU!U9@>oRB^kAhOuD_VNaqVB-D;(2>n^*x6F~CQyJ9F zAc(gs(W##T>j^<6gQ-@iF8F^!ZWfZEDvW5NYE!;ny2iru_NS-ptLJyO+ z``cgwWrSU6lCw`3FH{T#M2)*Rz*z`Ug&~{z5u9R)fE&5MuvlgBeu9&!UIT!JIKL|) zH^_seGys?Jz=S3|+K9YQeTZ$J()dH2Crhxt!W66aGawuDJB_^Ai-yGx1v0J3i173? z6{ZMtqX9M(6)Mw{FepjYTx>V}gHQu5-vqdPbHSN_XtCuGX@#=c1i(OYAcmW(G|exl z@%FsC)MzQi1s#K}3{r6|`$vi#+6*&i0^<9}E4Qb+7V;^ei!sC%lXJI7LtAJ$sIC{W ztj6=~%mva`0}|7*nI+r;Yi_L3YCM*~&-pp?Uh2=rXi_TPPAj?F&>}Vrs-i+HjwDXb z`1P((ZU)s0G7ln{LPeh^c_XC3OuVgv8uU^E6@osTdd0jWEo3-e&{9!ofJ=GPB`Muv zoF`S0ap;Vc9jDV2Q)oIuMbCcsFDjPo=Pt3aITl8(AkCIhm;5+!h#vb*i-j_stJ*s} zYmiXk%BWL&-qOCk7D`I8Q~deMH#ZweUH+TKr7t;=E4~+-gw5Y^!)5fdtuyu09qBLU zU=nBsMsWyIWWY=a>dVlGGWAw_B1EPJf=Lb}X_M5}KUZ&VTDqqj{!yM_OWE@1Nb8+x^JLQ zb_4DIMZ2NNZMlLBbm%MhK6a@uo&90a$5P)r6}&|gVey4NZMz-#Lv66H_$a6?sb97o%fBEjooXg|cpiy&; z0`?ei-hHYF%lR=U*7JQ#O>9|$^MS`VtzT^_cwjj~i062Mx;_NMeL^M`-hZ5l4Xm=Z z9#|iyk&Hi3K3>7zJY2c-X`xEG#XLHZ>OaesqYfr-y89qU&=J993sVMj>2zO*EO`3* zx~~fe>iMuVmn4LUHH+zP_i-+wa$-b&&i0G8+C{Q==|y|t;uMh02SG5IhIZF&Oek6u zRhmm-cnzp_)dV{aRjj1T4;lLDph)o~D^*;Pb#a|)&*X=`LzTIYVpo4{#P*8c53YtlVb^YhJb={H?Wn?-0Q^1!=aZt90Im*YxKQTP58{^;0W1$v! z0TWA&@5_swEU=kjgC7YnB}GBr=ciHGe;YwY+YKdSU$dzeyn(4{)-0|f;GS#X|@}f4niww=DQCpZyF@BXx-ayS)?3QZG z$(d0~RT^?vArfuS+#-py58C;!WS@zKjLE>sVt&+-Lf26t2DQ3hYaG-QiO=}0)B zN|1n<Gq}MY!dx>PRlUwCgcc|0(X*S zTq*@FiNbT>IRZNx3|cggFvpzD1EVEKny6Uixu#k%0%%F4{h^fk-Xu70@CMdI!H*^c>iwHqr_KacEnxW&h|xA z%A+ZUQVBGTA(ZZx3mW%9xlwK{=t8eC-0u^$xzy2$x?19HVZ$yYz12$iYMT$sA&;h5VX0qi3!3fe(cH8$MJUFUg19zxCkDhG zDxX6$(+e1od}oB00tUG3<1}hm0CA?~eVj(LZ6)2f6sLN-H>|Ru>#T)$7-3*>db_-n zY=tI^H=x{(UW{2SBuwFvzTB-o-SoCKdI;WO8CE)?&?m`e3Te*7F_=940}g#@*o$v6 zg**;sGlj7;bwqa1G6DFfVldj2} z;FJgi=4J0_@B^J%LtAW1-VEPaMWqy#1n0+}dO3gk zdZmuL81?-=aIZb)Z}@uN^7-yRSAHEGOIb{py@@K}ABv*PHh7=6it8y*N2up!(?2=V zA9KyU;8wZx}{LuB)~P0!Vz`C%~A$h4+pbJmMw9(sxBh) z2H*2rc~(7pZieOBQ}deb%({;4sT1SfXA+$a1%~GUo=*69;DnyK^6@30QtQ9}d`o6Q zj0r{E6uJfnd>m)SfBmcz8cIWDYYz75XKmlfod$l^Q?~8!-!j-6co3L^WjN&m541kW z%So^{CBi5=7)I6%gh64=*UBU-Z6-&&s=4xUg*@;~LPwS9if68#VR(4P(k=QQ(p2^H zkAK4XtbdRhtw+_;x5#>$s6$1YyzZT(WXxRgXw0i|_}2FuCbo~8lG^A+Op=o!Qew@} zkGQ}jS_t}nSyb+?pyB2Y9KYu>O*CH5LA`eWKbX#6!cU^(JYE11#WTdn}69AXD=a<+ez9|Ly!2FYW;f z4?)~9@I-W(+{w2H!kUT6{pLkrP)i(XyP!iV73mgOEFo4KStNNAm=WTEOA$(U-O!=* z+YzOfvwIrNpbgwaCE zi^s524d<%kYgiY@#fVvOLEoBrZ=crjW&2ib*0jv2_D8rI>(Ba-$(673=eXzH%LHhawIG zwqN>I<4=M;Pv9b7+zz{jL5s0H2qB~l?nxAz2Wj1?c?tNqkO~)%@uNX0S$`>M zx|VHZOVP;yT)H`_jg{8p0p<&lR3Cc&GRLQ3!q1)u{A^@ijH}QgbpOXkg81SafQk(% zB|JCvo(U4R&C=K+T#>JpFvX1oi&O$7Km^K!<;;{nmE}|E{G5!KCIp5R(03k?K87n^ zZOIpA&hzIAv}0yXZP~mT3K>CpKmBzlGy7r~oPPH0Z(p?wwuXnKCMtxG4B0Xa8T~9* zqLKRO<3RZ3EHzl<ioQ40P~0#z1I9$w;C(}C zP-N^VUrL*&t7JFE0>VfsG!EE@_Lc*%9@fT21?A&jqj~Aan)x0Jb55`zbe7zJXXsHk zGFyail_@|7BijX1vtNBjFU_~lW&(cGNO5Zxgu(AHLZ6kGhd-B}!5fHWkB{4?KO8P` zl(vw9=^EpcrjT{II%0Z+VzFA%6}Wk|lTBi?9;sFSTYp+^uj(+AVO_C zRCCLPLIWF>?aSLLK)W#Vpn#IQt*!>EO>v`s{${#55hz>PcAMY!j7YYTJ zw*d8BLCt<@ACX}bq-f)B@C(RqF}!X3?fMRZ7AWdJw3HZsh@EP^ZD$mshOIX3_78Ro z4oa{Y&-gKGH=gDt(Gk?(c=x1(|AmVBlGn!~t^-B=%H5M`uaC=E$0Ire@15TNx;{Sm z_>%iq?wtkhd1B%5s3G8M^*V6RuiU@<`|EE!&-6Zke!0(SlF_F3aHIeHolMdR z4TMg;G4C02y>!T-q)8L|{#dqosy)rRr+zs_aLJ;s0Qv%3znlg*_*`87`7C9^D|0X@ z#gLx2td$eD?LL%>Gbe|(=s(l^@ZIkk$XiY%^hWevAZ4&dqMK{?&%1x3f}rMB{u=f9 zVFbR9zaB=Pa#;V7bm)JXKAq@)6n(zKG6AGRJJV>m>Z0@+(S}m>Wv<1^BDmCy%=&Qz zkGYk%a5WWw@U7@Z-uUTu=6SI15wlE>fd1&;kk@GaChpxIo1SL1f;4{9Qn!d+pij@g z@Zh!I6V?f%b0JG=TCThOFl(Ii+laeDdAe)3o8sB>9SjF zUltZiS&S^X#uOdwxArk^>Ju4Ev8&RdJ8(HjTHzyoqVM>?2Ibjxx6m10Gb^@Dc(Y=t zTGc5AAuDYH%DgR2H?ApG!Lw$Sw)n(gxnxqjYd0Z+0#&LKw64K$BdT%BGx0ez8kzRt zMBS4z=MHh6*vDD*fPuCx&Je8}simYrxcdW`&Kk+cLb)0#l_@MKU(N3E+IQeFjJNr? zd2fBRM>x6TNmW6WXQ}PgWo^o@QC_~Lm}RLGi=reyBZbLMjUp(^vl=EX4$IcS-q!@a z30C*UyC^>ErJ%87b4%OpCC{cm`{kQmuU*)%scWoX1s%uzPobsFk1JD8b{)`r2{4rK z0%(tU4dSi9YM3m}<5kQxz`iYu%a+@3fk8Sn-OPqgDrxN3L5JQ;pI+vBDPaCbt5?x?yD?4QK>sRWSK$WXgStta)f>k)7yg4?yegtTbCTA=VD{+Q@=fj z*u{6OZWTv*#0rCk4%SXiCR@(xjvKZN@Xb4Bcw4%Z{6USiJv)7TxJ&B4KD?~PEJI_9 ze)ywGv)lOQ&os*(V^Sg>uKwO_D93 zP4QfGrFdzK5#qpcA$iH5Vh)3~Pf9~^LkMH6;de68Tzb|3rrL)Y`#Dx8??lmPT(8@m z^R1|Sn|2V|-Pin56Eb(^yI(KPT(mBT?$|9kh?&Wh=^0q!p|2KI)IRzF&DGFI6i{=; zJSx2MfX909{>*@Mzm?kxA@molBJ<@}tfnf9}6`@=fGO#*DnK4GpG~8ead5pH#3`I%Sr( zR8F-Sth&Cju7g)RnxDWesASHqIuUVc>KBd~c<+wzipqHDH1w8y^Y}5!ImuC_n~jG) zvO7dNR7KPuto}3U1{T>K1 zJ{pzNwJQ}P-MLT#l&6T0>Cq$0e;w$GyP1ziS0t%!TIBcK%n%JOWsEMbU|x~tB18;4lH7EGB%=MYj@yCpqRDb4?XNNZ7K=tc1m~@RM6!-R2GNNnCa&_v0mgwApn9Wc=Y1 zxAV}2;KZTp3puI!W1jLhQphfY49)pzt90QGoDZ1IC|hdgxgt)jeQMIK&`r6)M5W?0 z70z@7^}^Fq45)CnUIbfw+mt~d{}PJP^oxba0W>)8gb7thwKPCB~2hAa41MfXU~lgLRc+~QS8RoC|Z{;epgB0 zUbvf_wox+DVNs$Hk~dECRQTdC=xIM_n&h;cmdL}@TR*Pat)6^4Gp&R&T+A)0sBSii z=^I0+NNWErR21(}wseN~yHawr6I;oXS2QZQaL{c^R3wIH#gU@d7%o}_$d>-Z7(Zhv z6fcysB3U4RI{&VhLcJ!@&hYQwJ5|m3?5db))!n?5MW0Z}v7ilfmPvo8wAsdvf+0^&87GGc=H8o$Q218Kj&-7>6c#%?WRH?%gaG!N*HPQ zV70Wr1N2j_G_&ctzMg5fhHcGKkKoAwg#8Ie>hvTB;7H4rSqB&ZFaXa-0ge=5zJw`^ zp=MGP&|qOIwOaE7R509si;Yz4fVqG`xme^^rHYH`Yku}=ea0Rq+88_1N3%_mbn8Ih zgXta(2-ZYr-$0z2YvV9ETa25cl~Z`DaiPY}bnJO(tv_aWlxziT41*jVevc#3sXKR) zbp%99?|%|bLuCC~us+(>{%oT&0U@>T!zSS5$(`Kw10x(`SNjcshdn9mPT&_tZ;DL{ zG>h6SjewwJy7gjV8xon@+~&W&sChL`#YJWSZ_4i^J2a2B=^?t7rD8l+=UhNn%37Az z$>eU&S!`0X0uB^Zc=o`K>)%T-b6JUhb;8Ci=1}T~l1qmBb!kzd<<+IQYI-*~^yB3R z@2NAUmdipm7L&OoDO$-Qv1sbHljBMq?fiB=Exxb$Y`6v?U&G<;xcp%~lw;^An?tH6 znng0mvsX@|seGv6iQ?HFu)c~YqoY#VIaIDUU2+5cwSnq$tyw&~05RYt!sNy$N;xxj zz)lJsVyW4w3q>bU4e5{IU-f@CgXr1WlS>;kZ0qP2Q*&xgAHR>~YO7&;llEmdzi{SA zxRAMKGWlKQ97x^bKp%m*-dQ{B1&hcdrjXgN8k+M#YcS#?CrRW}GQiQ>Oqp@PZXkqI zDWnJ4?(XHQr89II0xL$(~n%wN&3IjqeZ3($J7K@K&L3i~kXUy`SHB?&4jD zJ_XP9<-$!GUj(*M(~QGx$l50_C?ko6xVO`V3oM9(HpmU@M9GUKC7R0v{#e1@jDXfTHj=Y9--OKYnPgHaf2oANfz&x{s05qwIafYg94<*{d?4- z9&*?u8m8TOGubf}L6iy6_dbU=L5SzmzQ?EawUCc1E?@#>pfKW;h(!x?5HnY$rxfy4 zQ1K{E{Ag89o~iXZR~>;XSaW$cfObgsrCCybA6B@LpfZr#PA`5{)qa4kNBzss{aC5= z$(;H02Kf){oPXQ}X~?@17`$)6zskrA{jV}IC(uUxZyRbLBg6dXGBTq-KqQ`D2zRTx z6=EuuhkL4tq3o|McUYl#ilU1mnZ%KMMGxt|rZA<;pjQ)N8L$iT$GV|=%wWgHAolCT zK7;AsO}V5>U4Qk|VjmNIZz!f=qNw@Nm+H~16W@P1ewI6DU@Z5>iq&VC>CoD&7qjPX zypgw@oj(}z-WRe~e%cIXd20Q2R#i{IK;l5aXXO+&3{$szY zgp%8@L+Jety{IdvFH;V?_O-`R3UGgGhVjctfYl)elBE4V132}`^S(KT+mp=W>$>hq zjgQ+8t`L>C3ne0!?77GsSF3Pp1OJC@t{gYV({zR! zlp#Sfzq1sTOtH%I(Ua#I_u}lL6DJxInAnu57!Mp&F($X@Y&_~3MSJQmErxEB*?7&hl|Yssk#h)X+w_o=fe)DEX zZT*B72cv&VX`F_U&L)E&RfFQ*IK9oHkXd4(=!1jZ8&P7So(O)XpL4oU?}=RLQ%vG< zey9Y+5TRhOnjfMYC&AwjOke~l;(~g7vj;+FHl&S5?tFCa+G@Dhl#t_{3|0Gq5jyS* z#|d)M;d#B_p_}Uo-roYGJ0&Fe<~%hii6sAO^eA(#MzXdpXP13AS09G7Q-Gw#My~!LpCizS+idqd|OAeJ-il8IaX(7x}1?8A7uNj ze%-X`AR{x|-4KVg z{XN%?%=owSp+6TdnD)o6FNWxb2HkSX!c;L7^kq)v%_!9&=(+@{l%KY=Q*Lw~*`G+d zqRR_9GMzf2I1yp$HiZLGZzt6GImTocriIxSClvm|T~M=Ye<|NDM%${oQ?>g-_q4L} zQrLA#``#U;Q2IQriD$zFFX#G1sz4OH{@D%fb5KLL&na}~?}E3ZzfinJ4vA)6=*}+b zV2##0Gmhu~9Q%rj%$~PM}L3 zc2A&7xC@An{{T}bT&e$0zm>o8AphLA@?X4u+BCWx+EICWQ_y+vt%MtV)ebN>LpPnt zb+Jdo-9LUSMV^ur_&j1SMYDT}WPw_1=o oknd{a8?#f;(X%k${a*ax;Hi%Q=EjDCeEeL1?f;+uxqR{80RHLGqW}N^ literal 0 HcmV?d00001 diff --git a/package.json b/package.json index c762b82..0c9c092 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,9 @@ "name": "react-amount", "version": "1.0.3", "description": "React amount component", - "keyword": [ + "keywords": [ "react", + "react-component", "amount", "format", "number", diff --git a/src/index.ts b/src/index.ts index b14d505..c9b74e5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,4 +4,4 @@ export { FormattedValues, } from './Components/Amount'; -export { ThousangGroupingStyle } from './utils/amount-formatter'; +export { ThousandGroupingStyle } from './utils/amount-formatter'; diff --git a/src/utils/amount-formatter.ts b/src/utils/amount-formatter.ts index d5117b5..358aa87 100644 --- a/src/utils/amount-formatter.ts +++ b/src/utils/amount-formatter.ts @@ -1,4 +1,4 @@ -export enum ThousangGroupingStyle { +export enum ThousandGroupingStyle { THOUSAND = 'thousand', WAN = 'wan', LAKH = 'lakh', @@ -7,7 +7,7 @@ export enum ThousangGroupingStyle { const defaultDecimals = 0; const defaultDecimalSeparator = '.'; const defaultThousandSeparator = ','; -const defaultThousandGrouping = ThousangGroupingStyle.THOUSAND; +const defaultThousandGrouping = ThousandGroupingStyle.THOUSAND; const defaultDisplayOnInvalid = '-'; /** @@ -104,13 +104,13 @@ export const toStandardSeparator = ( * * @returns corresponding regex */ -const getThousandsGroupRegex = (thousandsGroupStyle: ThousangGroupingStyle) => { +const getThousandsGroupRegex = (thousandsGroupStyle: ThousandGroupingStyle) => { switch (thousandsGroupStyle) { - case ThousangGroupingStyle.LAKH: + case ThousandGroupingStyle.LAKH: return /(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/g; - case ThousangGroupingStyle.WAN: + case ThousandGroupingStyle.WAN: return /(\d)(?=(\d{4})+(?!\d))/g; - case ThousangGroupingStyle.THOUSAND: + case ThousandGroupingStyle.THOUSAND: default: return /(\d)(?=(\d{3})+(?!\d))/g; } @@ -156,7 +156,7 @@ const rtrim = (value: string | undefined): string => { const applyThousandSeparator = ( value: string, thousandSeparator: string, - thousandsGroupStyle: ThousangGroupingStyle, + thousandsGroupStyle: ThousandGroupingStyle, ) => { const thousandsGroupRegex = getThousandsGroupRegex(thousandsGroupStyle); let index = value.search(/[1-9]/); @@ -308,7 +308,7 @@ export const formatInputForDisplay = ( decimals: number = defaultDecimals, decimalSeparator: string = defaultDecimalSeparator, thousandSeparator: string = defaultThousandSeparator, - thousandGrouping: ThousangGroupingStyle = defaultThousandGrouping, + thousandGrouping: ThousandGroupingStyle = defaultThousandGrouping, displayOnInvalid: string = defaultDisplayOnInvalid, ): string => { const { sign, integer, decimal, approximation } = commonValidation( @@ -370,7 +370,7 @@ export const formatInputForInput = ( decimals: number = defaultDecimals, decimalSeparator: string = defaultDecimalSeparator, thousandSeparator: string = defaultThousandSeparator, - thousandGrouping: ThousangGroupingStyle = defaultThousandGrouping, + thousandGrouping: ThousandGroupingStyle = defaultThousandGrouping, ): string => { const { sign, integer, decimal } = commonValidation( value, From c81ec0fd8fb7bd7ed58202b4b0e5c9a63f92aaea Mon Sep 17 00:00:00 2001 From: Charles Coqueret Date: Mon, 18 Oct 2021 20:40:18 +0200 Subject: [PATCH 3/3] Fix typo in enum ThousandGroupingStyle --- src/Components/Amount.tsx | 6 +++--- test/Components/Amount.spec.tsx | 10 +++++----- test/index.spec.ts | 4 ++-- test/utils/amount-formatter.spec.ts | 20 ++++++++++---------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/Components/Amount.tsx b/src/Components/Amount.tsx index d68c4df..6cdea08 100644 --- a/src/Components/Amount.tsx +++ b/src/Components/Amount.tsx @@ -6,7 +6,7 @@ import { formatInputForDisplay, formatInputForInput, interpretValue, - ThousangGroupingStyle, + ThousandGroupingStyle, } from '../utils/amount-formatter'; export interface FormattedValues { @@ -37,7 +37,7 @@ export interface AmountProps { /** Thousand separator (default: ',') */ thousandSeparator?: string; /** Thousand style grouping (default: 'thousand') */ - thousandGrouping?: ThousangGroupingStyle; + thousandGrouping?: ThousandGroupingStyle; /** Value displayed on invalid input in textOnly (default: '-') */ displayOnInvalid?: string; /** Test id */ @@ -244,7 +244,7 @@ Amount.defaultProps = { required: false, decimalSeparator: '.', thousandSeparator: ',', - thousandGrouping: ThousangGroupingStyle.THOUSAND, + thousandGrouping: ThousandGroupingStyle.THOUSAND, displayOnInvalid: '-', dataTestId: undefined, prefix: undefined, diff --git a/test/Components/Amount.spec.tsx b/test/Components/Amount.spec.tsx index 5b5eebc..e676283 100644 --- a/test/Components/Amount.spec.tsx +++ b/test/Components/Amount.spec.tsx @@ -3,7 +3,7 @@ import userEvent from '@testing-library/user-event'; import { render, screen } from '@testing-library/react'; import Amount, { AmountProps } from '../../src/Components/Amount'; -import { ThousangGroupingStyle } from '../../src/utils/amount-formatter'; +import { ThousandGroupingStyle } from '../../src/utils/amount-formatter'; const renderAmount = (props: Partial = {}) => { const defaultProps: AmountProps = { @@ -86,7 +86,7 @@ describe('', () => { onChange, decimalSeparator: ',', thousandSeparator: ' ', - thousandGrouping: ThousangGroupingStyle.LAKH, + thousandGrouping: ThousandGroupingStyle.LAKH, }); const inputField = screen.getByTestId('reactAmount'); @@ -135,7 +135,7 @@ describe('', () => { onChange, decimalSeparator: ',', thousandSeparator: ' ', - thousandGrouping: ThousangGroupingStyle.WAN, + thousandGrouping: ThousandGroupingStyle.WAN, }); const inputField = screen.getByTestId('reactAmount'); @@ -157,7 +157,7 @@ describe('', () => { onChange, decimalSeparator: ',', thousandSeparator: ' ', - thousandGrouping: ThousangGroupingStyle.WAN, + thousandGrouping: ThousandGroupingStyle.WAN, }); const inputField = screen.getByTestId('reactAmount'); @@ -187,7 +187,7 @@ describe('', () => { onChange, decimalSeparator: ',', thousandSeparator: ' ', - thousandGrouping: ThousangGroupingStyle.WAN, + thousandGrouping: ThousandGroupingStyle.WAN, }); const inputField = screen.getByTestId('reactAmount'); diff --git a/test/index.spec.ts b/test/index.spec.ts index d565ef6..7599894 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -1,8 +1,8 @@ -import { Amount, ThousangGroupingStyle } from '../src/index'; +import { Amount, ThousandGroupingStyle } from '../src/index'; describe('index main export', () => { test('should export all references', async () => { expect(Amount).toBeTruthy(); - expect(ThousangGroupingStyle).toBeTruthy(); + expect(ThousandGroupingStyle).toBeTruthy(); }); }); diff --git a/test/utils/amount-formatter.spec.ts b/test/utils/amount-formatter.spec.ts index f4e99f1..b1b2541 100644 --- a/test/utils/amount-formatter.spec.ts +++ b/test/utils/amount-formatter.spec.ts @@ -7,7 +7,7 @@ import { commonValidation, interpretValue, formatInputForDisplay, - ThousangGroupingStyle, + ThousandGroupingStyle, formatInputForInput, } from '../../src/utils/amount-formatter'; @@ -212,10 +212,10 @@ it('Basic formatting for display of positive values', () => { expect(formatInputForDisplay(67_000, 5, ',', '.')).toEqual('67.000,00000'); expect(formatInputForDisplay(0.9, 0)).toEqual('0'); expect( - formatInputForDisplay(123_456_789, 5, ',', '.', ThousangGroupingStyle.WAN), + formatInputForDisplay(123_456_789, 5, ',', '.', ThousandGroupingStyle.WAN), ).toEqual('1.2345.6789,00000'); expect( - formatInputForDisplay(123_456_789, 5, ',', '.', ThousangGroupingStyle.LAKH), + formatInputForDisplay(123_456_789, 5, ',', '.', ThousandGroupingStyle.LAKH), ).toEqual('12.34.56.789,00000'); expect(formatInputForDisplay(11_223_344_556_677.123, 4, '.', '')).toEqual( '11223344556677.1230', @@ -237,7 +237,7 @@ it('Basic formatting for display of negative values', () => { expect(formatInputForDisplay(-67_000, 5, ',', '.')).toEqual('-67.000,00000'); expect(formatInputForDisplay(-0.9, 0)).toEqual('0'); expect( - formatInputForDisplay(-123_456_789, 5, ',', '.', ThousangGroupingStyle.WAN), + formatInputForDisplay(-123_456_789, 5, ',', '.', ThousandGroupingStyle.WAN), ).toEqual('-1.2345.6789,00000'); expect( formatInputForDisplay( @@ -245,7 +245,7 @@ it('Basic formatting for display of negative values', () => { 5, ',', '.', - ThousangGroupingStyle.LAKH, + ThousandGroupingStyle.LAKH, ), ).toEqual('-12.34.56.789,00000'); @@ -288,7 +288,7 @@ it('Errornous formatting for display', () => { 5, ',', '.', - ThousangGroupingStyle.THOUSAND, + ThousandGroupingStyle.THOUSAND, '*', ), ).toEqual('*'); @@ -309,10 +309,10 @@ it('Basic formatting for input of positive values', () => { expect(formatInputForInput(67_000, 5, ',', '.')).toEqual('67.000'); expect(formatInputForInput(0.9, 0)).toEqual('0'); expect( - formatInputForInput(123_456_789, 5, ',', '.', ThousangGroupingStyle.WAN), + formatInputForInput(123_456_789, 5, ',', '.', ThousandGroupingStyle.WAN), ).toEqual('1.2345.6789'); expect( - formatInputForInput(123_456_789, 5, ',', '.', ThousangGroupingStyle.LAKH), + formatInputForInput(123_456_789, 5, ',', '.', ThousandGroupingStyle.LAKH), ).toEqual('12.34.56.789'); // eslint-disable-next-line @typescript-eslint/no-loss-of-precision @@ -332,10 +332,10 @@ it('Basic formatting for input of negative values', () => { expect(formatInputForInput(-67_000, 5, ',', '.')).toEqual('-67.000'); expect(formatInputForInput(-0.9, 0)).toEqual('-0'); expect( - formatInputForInput(-123_456_789, 5, ',', '.', ThousangGroupingStyle.WAN), + formatInputForInput(-123_456_789, 5, ',', '.', ThousandGroupingStyle.WAN), ).toEqual('-1.2345.6789'); expect( - formatInputForInput(-123_456_789, 5, ',', '.', ThousangGroupingStyle.LAKH), + formatInputForInput(-123_456_789, 5, ',', '.', ThousandGroupingStyle.LAKH), ).toEqual('-12.34.56.789'); // eslint-disable-next-line @typescript-eslint/no-loss-of-precision