UNPKG

calculate-items

Version:

Items calculation template

3 lines (2 loc) 8.04 kB
import e from"currency.js";import{evaluate as t}from"mathjs";import{trim as r,gt as n,size as a,nth as o,compact as u,map as s,split as m,isEmpty as i,replace as l,gte as c,lte as p,range as f,includes as d}from"lodash";var v=function(){return v=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var a in t=arguments[r])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e},v.apply(this,arguments)};function h(e,t,r){if(r||2===arguments.length)for(var n,a=0,o=t.length;a<o;a++)!n&&a in t||(n||(n=Array.prototype.slice.call(t,0,a)),n[a]=t[a]);return e.concat(n||Array.prototype.slice.call(t))}"function"==typeof SuppressedError&&SuppressedError;var b=function(){function r(){}return r.round=function(t,r){return void 0===r&&(r=2),e(t,{precision:r}).value},r.format=function(t,r,n,a,o){return void 0===r&&(r=2),void 0===n&&(n=" "),void 0===a&&(a="."),void 0===o&&(o=""),e(t,{separator:n,decimal:a,precision:r,symbol:o,pattern:"#!"}).format()},r.evaluateAndRound=function(e){return r.round(t(e))},r}(),g=/\n/g,M=/-|--|---/g,x=/\[([\d,\s]+)\]/,E=/\[(\s*[@a-zA-Z_][@a-zA-Z'\d_\u0430-\u044f,\s]+)\]/,y=/[^\d.+\-*\/()]+/g,A=function(){function e(){}return e.getUsernames=function(t){var n=e.matchSecondUser(E,t);return(null==n?void 0:n.split(",").map(r).filter(Boolean))||[]},e.getUserIndexes=function(t){var n=e.matchSecondUser(x,t);return(null==n?void 0:n.split(",").map(r).filter(Boolean).map(Number))||[]},e.matchSecondUser=function(e,t){var r=null==t?void 0:t.match(e);if(n(a(r),1))return o(r,1)},e}(),C=function(e){if(!e||e.length<2)return[];var t,n,a=(t=e,n="-",Array.from(t).reduce((function(e,t,r){return t===n&&e.push(r),e}),[]));if(a.length>0){for(var o=a.pop(),i=o;a.length>0&&(i-=1,console.log("sepIndex = ",i,a,e,e[i],I(e[i])),I(e[i]));)i===a[a.length-1]&&(o=a.pop());return u([r(e.slice(0,o)),r(e.slice(o+1))])}return u(s(m(e,M),r))};function I(e){return/^[0-9]$/.test(e)||/^[+\-*/()\s]$/.test(e)}var T=function(){function e(){}return e.getItemsResult=function(t){return e.calculateResultFromExpression(t)},e.getExpItems=function(t){return i(r(t))?[]:e.getSplitItems(t).map(r).filter((function(e){return e.match(/\d/g)})).map((function(t,n){var a=A.getUserIndexes(t),o=r(l(t,x,""));return v({name:"Item ".concat(n+1),order:n+1,members:a},e.getValueAndType(o,a))}))},e.getTemplateItems=function(t){return t&&!i(r(t))?(t=t.replace(E,"")).match(/[a-zA-Z]/)?m(t,g).map(r).map(C).filter((function(e){return c(a(e),2)})).map((function(t,r){var n=t[0],a=t[1],o=e.getMembersFromName(n);return v(v({order:r+1},o),e.getValueAndType(a,o.members))})):e.getExpItems(t):[]},e.calculateResultFromExpression=function(t){var r=e.getTemplateItems(t),o=A.getUsernames(t),u={membersMap:{},membersCount:a(o)||0};return u.membersCount||(u.membersCount=r.reduce((function(e,t){return Math.max.apply(Math,h(h([e],t.members,!1),[1],!1))}),0),u.membersCount>20&&(u.membersCount=20)),r.map((function(e){return{product:e,pMembersCount:a(e.members)}})).filter((function(e){return"currency"===e.product.valueType&&n(e.pMembersCount,0)})).forEach((function(e){e.product.members.forEach((function(t){var r,n,a,o=Object.keys(e.product.values||{}).length&&(null===(r=e.product.values)||void 0===r?void 0:r[t])||void 0,s=(null==o?void 0:o.total)||b.round(e.product.value/e.pMembersCount);u.membersMap[t]?null===(n=u.membersMap[t].items)||void 0===n||n.push(e.product):u.membersMap[t]={index:t,total:0,items:[v(v({},e.product),{value:s})],productNames:[],totalExpression:""},u.membersMap[t].total+=s,u.membersMap[t].totalExpression.length&&(u.membersMap[t].totalExpression+=" + "),u.membersMap[t].totalExpression+=s,null===(a=u.membersMap[t].productNames)||void 0===a||a.push(e.product.name),u.membersMap[t].totalExpression+=(null==o?void 0:o.total)?"(".concat(o.origin,")"):"(".concat(e.product.originValue,"/").concat(e.pMembersCount,")")}))})),r.filter((function(e){return"currency"===e.valueType&&p(a(e.members),0)})).forEach((function(e){f(1,u.membersCount+1).forEach((function(t){var r,n;u.membersMap[t]||(u.membersMap[t]={index:t,total:0,items:[],productNames:[],totalExpression:""});var a=b.round(e.value/u.membersCount);null===(r=u.membersMap[t].items)||void 0===r||r.push(v(v({},e),{value:a})),u.membersMap[t].total+=a,u.membersMap[t].totalExpression.length&&(u.membersMap[t].totalExpression+=" + "),u.membersMap[t].totalExpression+=a,null===(n=u.membersMap[t].productNames)||void 0===n||n.push(e.name),u.membersMap[t].totalExpression+="(".concat(e.value,"/").concat(u.membersCount,")")}))})),r.filter((function(e){return"percentage"===e.valueType&&p(a(e.members),0)})).forEach((function(e,t){var r=0;Object.keys(u.membersMap).forEach((function(t){var n,a,o=u.membersMap[t].total,s=b.round(o*e.value/100);null===(n=u.membersMap[t].items)||void 0===n||n.push(v(v({},e),{value:s})),u.membersMap[t].total+=s,r+=s,u.membersMap[t].totalExpression.length&&(u.membersMap[t].totalExpression+=" + "),u.membersMap[t].totalExpression+=s,null===(a=u.membersMap[t].productNames)||void 0===a||a.push(e.name),u.membersMap[t].totalExpression+="(".concat(o,"*").concat(e.value/100,")")})),e.value=r})),{items:r,summary:Object.keys(u.membersMap).map((function(e){return delete u.membersMap[e].items,u.membersMap[e]})).reduce((function(e,t){return e.total+=t.total,e.total=b.round(e.total),o.length>=t.index&&(t.username=o[t.index-1]),e.members.push(t),e}),{membersCount:u.membersCount,members:[],total:0,inputText:t})}},e.getValueAndType=function(e,t){var r;void 0===t&&(t=[]);var n=e.includes("%")?"percentage":"currency",o=b.evaluateAndRound(e.replace(y,"")),u=b.evaluateAndRound((null===(r=e.match(/([^*]+)\*.+/))||void 0===r?void 0:r[1])||"")||1,s=a(t),m={};if(s>0&&e.includes("(")){var i=e.split(/\)?\*/);if(i.length>1){var l=i[0].slice(1);if(l){var c=l.split("+");t.forEach((function(e,t){m[e]={total:b.evaluateAndRound(c[t])*b.evaluateAndRound(i[1]),origin:"".concat(b.evaluateAndRound(c[t]),"*").concat(b.evaluateAndRound(i[1]))}}))}}}return{value:o,quantity:u||1,unitValue:o/u,originValue:e,values:m,valueType:n}},e.getSplitItems=function(e){for(var t={bracketOpened:!1,arr:[]},r=0,n=e;r<n.length;r++){var a=n[r];"("===a?t.bracketOpened=!0:")"===a&&(t.bracketOpened=!1),t.bracketOpened||"+"!==a?0===t.arr.length?t.arr.push(a):t.arr[t.arr.length-1]+=a:t.arr.push("")}return u(t.arr)},e.getMembersFromName=function(e){return{members:A.getUserIndexes(e),name:r(l(e,x,""))}},e}(),R=function(){function e(){}return e.isValidBrackets=function(e){for(var t=[],r={")":"(","]":"[","}":"{"},n=["(",")","[","]","{","}"],a=0,o=e;a<o.length;a++){var u=o[a];n.includes(u)&&(t.length>0&&r[u]===t[t.length-1]?t.pop():t.push(u))}return 0===t.length},e.isValidExpToParse=function(t){var n;if(i(r(t))||(null===(n=r(t))||void 0===n?void 0:n.length)<5)return!1;if(t.match(/[+\-*,\/]\s*$/g)||t.match(/^\s*[*\/]/g))return!1;if(t.match(/[*+\-/][+*\-/]/))return!1;if(t.match(/[a-zA-Z\u0430-\u044f]/)){if(!t.match(/[\w'`\\\/\u0430-\u044f\s.,\]\[]+\s*-\s*[\d()\]\[+\/*\-]+\s*\n*/g))return!1}else{if(t.match(/\s*[-,+]\s*$/))return!1;if(!t.match(/([\w)][*+-/][(\w])/g))return!1;if(t.replace(/\s*([+-/])\s*/g,"$1").match(/([^\d)][-*+/][^(\d])/g))return!1}if(!e.isValidBrackets(t))return!1;if(t.match(/\(/g)){if(!t.match(/(\([\d+\-*/]{3,}\))|(\[[\d,+\-*/]+])/g))return!1;if(t.match(/([^+\-/*\s]\s*\()|(\)\s*[^+\-/*\n\s])/g))return!1}else if(t.match(/\[/g)&&!t.match(/\[[\d,\s]+]/g))return!1;return!0},e.getInvalidMessage=function(e){if(i(r(e))||e.match(/\s*\+\s*$/))return"Formatga mos matn kiritirsh zarur";if(!d(e,"-"))return"Chiziqcha(-) belgisi bo'lishi shart";var t=m(e,"-"),n=o(t,1);return!n||n&&!/\d+/g.test(n)?"Chiziqcha(-)ni o'ng tomonida raqam bo'lishi shart":void 0},e}(),V=function(){function e(){}return e.getItems=function(e){return T.getTemplateItems(e)},e.getResult=function(e){return T.getItemsResult(e)},e.isValidExpression=function(e){return R.isValidExpToParse(e)},e.formatNumber=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return b.format.apply(b,e)},e}();export{V as default}; //# sourceMappingURL=index.esm.js.map