@restaround/react 1.4.78 → 1.4.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import{priceFormatter as t,isEmpty as r,sortNumbers as n,checkIsValidEmail as e,getQueryParam as o}from"@sorocraft/js-utils";import{HourglassHalf as i,FileCheck as a,Chef as l,Delivery as s,BagCheck as u,Check as d}from"@sorocraft/ui/icons";const c=(t,r)=>{var n,e;return(null===(e=null===(n=null==t?void 0:t.translations)||void 0===n?void 0:n.find)||void 0===e?void 0:e.call(n,t=>t.language===r))||{}},E=(t,r)=>{var n,e;return(null===(e=null===(n=null==t?void 0:t.translations)||void 0===n?void 0:n.find)||void 0===e?void 0:e.call(n,t=>t.language===r))||{}},A=({option:r,currency:n,language:e})=>{const{price:o}=r||{};return{totalPrice:o,formattedTotalPrice:t(o,n||"USD",e||"en")}},v=(t,r)=>{var n;return(null===(n=((null==t?void 0:t.options)||[]).find(({id:t})=>t===r))||void 0===n?void 0:n.price)||0},I=(t,r,n)=>{var e;if(Array.isArray(r))return(t||[]).filter(({id:t})=>r.includes(t)).map(({translations:t})=>{var r;return(null===(r=t.find(t=>t.language===n))||void 0===r?void 0:r.title)||""}).filter(Boolean).join(", ");{const o=(t||[]).find(({id:t})=>t===r);return(null===(e=null==o?void 0:o.translations.find(t=>t.language===n))||void 0===e?void 0:e.title)||""}},D=(t,r)=>{var n,e,o;return(null===(o=null===(e=null===(n=null==t?void 0:t.translations)||void 0===n?void 0:n.find)||void 0===e?void 0:e.call(n,t=>t.language===r))||void 0===o?void 0:o.title)||""};var L,R,T;!function(t){t.LIST="list",t.GRID="grid"}(L||(L={})),function(t){t.PIECE="PIECE",t.WEIGHT="WEIGHT",t.VOLUME="VOLUME"}(R||(R={})),function(t){t.SINGLE="SINGLE",t.MULTIPLE="MULTIPLE"}(T||(T={}));const p=(t=0,r=1,n=0)=>t*r*(1+n/100),f=(t,r)=>{var n,e;return(null===(e=null===(n=null==t?void 0:t.translations)||void 0===n?void 0:n.find)||void 0===e?void 0:e.call(n,t=>t.language===r))||{}},P=(t,r=1)=>{const{price:n=0,vat:e=0}=t||{};return p(n,r,e)},m=(r,n,e,o=1)=>{const i=P(r,o);return{totalPrice:i,formattedTotalPrice:t(i,n,e)}},g=(t,r)=>{var n,e;return(null===(e=null===(n=null==t?void 0:t.variants)||void 0===n?void 0:n.find)||void 0===e?void 0:e.call(n,t=>t.id===r))||{}},O=(t,r={},n)=>((null==t?void 0:t.addons)||[]).filter(t=>Object.prototype.hasOwnProperty.call(r,t.id)).reduce((t,n)=>{const{id:e,selectType:o}=n;if(o===T.SINGLE){const o=r[e];return t+v(n,o)}return t+(r[e]||[]).reduce((t,r)=>t+v(n,r),0)},0)*n,N=(t,r,n)=>{const e=g(r,t),{vat:o}=r||{},{price:i}=e||{};return p(i,n,o)},h=({variantId:r,currency:n="USD",language:e="en",product:o,quantity:i=1})=>{const a=N(r,o,i);return{totalPrice:a,formattedTotalPrice:t(a,n,e)}},_=(t,r)=>{var n,e;return(null===(e=null===(n=null==t?void 0:t.translations)||void 0===n?void 0:n.find)||void 0===e?void 0:e.call(n,t=>t.language===r))||{}},b=({product:t,variantId:n,quantity:e=1,selectedAddons:o,noVat:i=!1})=>{if(r(t))return{price:0,optionsPrice:0,total:0};const a=Object.assign(Object.assign({},t),{vat:i?0:t.vat}),l=O(a,o,e),s=n?N(n,a,e):P(a,e);return{price:s,optionsPrice:l,total:s+l}},C=({product:r,variantId:n,quantity:e=1,currency:o,language:i,selectedAddons:a,noVat:l=!1})=>{const{total:s}=b({product:r,variantId:n,quantity:e,selectedAddons:a,noVat:l});return{totalPrice:s,formattedTotalPrice:t(s,o,i)}},V=(t,r)=>((null==t?void 0:t.addons)||[]).find(({id:t})=>t===r)||{},M=t=>{switch(t){case R.WEIGHT:return" / kg";case R.VOLUME:return" / l";default:return""}},y=t=>{switch(t){case R.WEIGHT:return{"50gr":.05,"100gr":.1,"150gr":.15,"200gr":.2,"250gr":.25,"300gr":.3,"350gr":.35,"400gr":.4,"450gr":.45,"500gr":.5,"600gr":.6,"700gr":.7,"750gr":.75,"800gr":.8,"850gr":.85,"900gr":.9,"950gr":.95,"1kg":1,"2kg":2,"5kg":5,"10kg":10,"20kg":20};case R.VOLUME:return{"50ml":.05,"100ml":.1,"150ml":.15,"200ml":.2,"250ml":.25,"300ml":.3,"350ml":.35,"400ml":.4,"450ml":.45,"500ml":.5,"600ml":.6,"700ml":.7,"750ml":.75,"800ml":.8,"850ml":.85,"900ml":.9,"950ml":.95,"1l":1,"2l":2,"5l":5,"10l":10,"20l":20};default:return{}}};var S,U,$,G,B,H;!function(t){t.DINE_IN="DINE_IN",t.PICK_UP="PICK_UP",t.DELIVERY="DELIVERY"}(S||(S={})),function(t){t.DRAFT="DRAFT",t.PENDING="PENDING",t.CONFIRMED="CONFIRMED",t.PREPARING="PREPARING",t.READY="READY",t.OUT_FOR_DELIVERY="OUT_FOR_DELIVERY",t.DELIVERED="DELIVERED",t.COMPLETED="COMPLETED",t.CANCELLED="CANCELLED",t.FAILED="FAILED"}(U||(U={})),function(t){t.PENDING="PENDING",t.PREPARING="PREPARING",t.READY="READY",t.SERVED="SERVED"}($||($={})),function(t){t.CASH="CASH",t.CARD="CARD",t.WALLET="WALLET",t.TERMINAL="TERMINAL"}(G||(G={})),function(t){t.CART="CART",t.DETAILS="DETAILS",t.COMPLETED="COMPLETED"}(B||(B={})),G.CASH,B.CART,B.DETAILS,B.COMPLETED,function(t){t.FIELD_REQUIRED_ERROR="This field is required",t.TABLE_NOT_SELECTED="Please select a table",t.ADDRESS_IS_EMPTY="Please enter an address",t.EMPTY_ITEMS="Please choose product",t.BRANCH_NOT_SELECTED="Please select a branch"}(H||(H={}));const W=t=>t.options.reduce((t,r)=>t+r.price,0);function j(t=[],r=1){return r*t.reduce((t,r)=>t+W(r),0)}const F=(r,n,e)=>{const o=(t,r,n)=>r*t+j(n,r);let i=0,a=0;for(const t of r.items){const n=o(t.price,t.quantity,t.addons);i+=n,void 0===r.vat&&t.vat&&(a+=n*t.vat/100)}void 0!==r.vat&&(a=i*r.vat/100);const l=i+a;return{totalWithoutTax:i,totalWithoutTaxFormatted:t(i,n,e),totalTax:a,totalTaxFormatted:t(a,n,e),totalWithTax:l,totalWithTaxFormatted:t(l,n,e)}},Y=(t,r,e)=>{if(!t)throw new Error("Product ID is required");let o=`${t}`;r&&(o+=`-${r}`);const i=Object.entries(e||{}).map(([t,r])=>{if(!t||!r)return null;const e=Array.isArray(r)?n(r).filter(Boolean).join("-"):`${r}`;return e?`${t}-${e}`:null}).filter(Boolean).join("-");return i&&(o+=`-${i}`),o},w=t=>{var r;const{price:n,variant:e,addons:o,quantity:i,vat:a}=t||{},l=null!==(r=null==e?void 0:e.price)&&void 0!==r?r:n,s=l+j(o,1),u=l*(a/100),d=s+u;return{totalGross:d*i,totalNet:s*i,totalTax:u*i,itemGrossPrice:d,itemNetPrice:s,itemTax:u}},x=t=>{const r={};for(const{addonId:n,options:e=[]}of t.addons||[]){const t=e.map(({optionId:t})=>t);r[n]=1===t.length?t[0]:t}return r},k=t=>{switch(t){case U.COMPLETED:return d;case U.DELIVERED:return u;case U.OUT_FOR_DELIVERY:return s;case U.PREPARING:return l;case U.CONFIRMED:return a;case U.PENDING:default:return i}},q=(t=[],n={})=>Object.entries(n).map(([n,e])=>{const o=Number(n),i=Array.isArray(e)?e:[e],a=t.find(t=>t.id===o);if(r(a))return{addonId:o,options:[]};const l=(a.options||[]).filter(t=>i.includes(t.id)).map(t=>({optionId:t.id,price:t.price}));return{addonId:o,options:l}}),Q=(t,r,n)=>{if(!t)return null;const{deliveryOrderEnabled:e,dineInOrderEnabled:o,pickupOrderEnabled:i}=t;return e&&n?S.DELIVERY:o&&r?S.DINE_IN:i&&r?S.PICK_UP:null},K=t=>{switch(t){case"customer":return H.ADDRESS_IS_EMPTY;case"tableId":return H.TABLE_NOT_SELECTED;case"items":return H.EMPTY_ITEMS;case"branchId":return H.BRANCH_NOT_SELECTED;default:return H.FIELD_REQUIRED_ERROR}},z="restaround.co",J=[z,"restaround.az","restaround.ee","restaround.nl"],X="https://images.restaround.co",Z={994:t=>{const r=["50","51","10","55","99","70","77","60"];return new RegExp(`^(${r.join("|")})\\d{7}$`).test(t)?{isValid:!0}:{isValid:!1,error:`Azerbaijani numbers must be 9 digits and start with ${r.join(", ")}`}},31:t=>/^\d{9}$/.test(t)?{isValid:!0}:{isValid:!1,error:"Dutch numbers must be exactly 9 digits"}};function tt(t){if(!t)return{isValid:!1,error:"FIELD_REQUIRED"};const r=t.replace(/\D/g,""),n=r.startsWith("994")?"994":r.startsWith("31")?"31":null;if(!n)return{isValid:!1,error:"Unsupported country code"};const e=r.slice(n.length);return(0,Z[n])(e)}const rt=(t,r)=>{const n=r||"en";if("localhost:3000"===t)return{url:`http://localhost:3000/${n}`,domain:z};const e=J.includes(t)?t:z;return{url:`https://${e}/${n}`,domain:e}},nt=t=>"az"===t?"az":"co",et=(t,r)=>`https://app.restaround.${nt(t)}/auth/register?lang=${t}&utm_source=${r}`,ot=t=>t?t.includes("base64")||t.startsWith("https://")?t:`${X}/${t}`:"",it=t=>t?t.includes("base64")||t.startsWith("https://")?t:`${X}/${t}`:"https://images.restaround.co/no-photo-128.webp",at=t=>t?t.includes("base64")||t.startsWith("https://")?t:`${X}/${t}`:"https://images.restaround.co/restaround-doodle.webp",lt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",st=(t,r,n)=>lt.charAt(t>>2)+lt.charAt((3&t)<<4|r>>4)+lt.charAt((15&r)<<2|n>>6)+lt.charAt(63&n),ut=(t,r,n)=>`data:image/gif;base64,R0lGODlhAQABAPAA${st(0,t,r)+st(n,255,255)}/yH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==`,dt=t=>t?t.includes("base64")||t.startsWith("https://")?t:`${X}/${t}`:"";var ct,Et;!function(t){t.PHONE="PHONE",t.OTP="OTP",t.EMAIL="EMAIL"}(ct||(ct={})),function(t){t.HOME="HOME",t.WORK="WORK",t.TRAVEL="TRAVEL"}(Et||(Et={}));const At=t=>`${t.countryCode}${t.phoneNumber}`.replaceAll("+",""),vt=(t,r)=>{const n={},{phoneNumber:o,email:i,otp:a}=t||{};switch(r){case ct.PHONE:{const{isValid:t,error:r}=tt(o);t||(n.phoneNumber=r);break}case ct.OTP:{const{isValid:t,error:r}=tt(o);t||(n.phoneNumber=r),a&&6===a.length||(n.otp="Invalid OTP");break}case ct.EMAIL:i&&e(i)||(n.email="Invalid Email Address")}return n},It=t=>{const r={},{countryCode:n,cityName:e,street:o,houseNumber:i}=t||{};return n||(r.countryCode="COUNTRY_REQUIRED"),e||(r.cityName="CITY_REQUIRED"),o||(r.street="STREET_REQUIRED"),i||(r.houseNumber="STREET_NUMBER_REQUIRED"),r},Dt=t=>(t||[]).filter(Boolean).join(", "),Lt=(t,r,n)=>[t,[r,n].filter(Boolean).join("/")].filter(Boolean).join(" ");var Rt,Tt;!function(t){t.UPLOAD_VIDEO="UPLOAD_VIDEO"}(Rt||(Rt={})),function(t){t.ALPHA="ALPHA",t.BETA="BETA",t.ALL="ALL"}(Tt||(Tt={}));const pt={[Tt.ALPHA]:[Rt.UPLOAD_VIDEO],[Tt.BETA]:[],[Tt.ALL]:[]},ft=(t,r)=>{if("1"===o(t))return!0;return(r===Tt.ALPHA?[Tt.ALPHA,Tt.BETA,Tt.ALL]:r===Tt.BETA?[Tt.BETA,Tt.ALL]:[Tt.ALL]).some(r=>{var n;return null===(n=pt[r])||void 0===n?void 0:n.includes(t)})},Pt=(t,r)=>{var n,e;return(null===(e=null===(n=null==t?void 0:t.translations)||void 0===n?void 0:n.find)||void 0===e?void 0:e.call(n,t=>t.language===r))||{}},mt=(t,n,e)=>{var o;const i=null===(o=null==n?void 0:n.find)||void 0===o?void 0:o.call(n,({id:r})=>r===t);if(r(i))return"";const{name:a}=Pt(i,e);return a||""},gt=(t,r)=>{const n=r.reduce((t,r)=>{if(!r.visible)return t;const n=Number(r.categoryId);return t[n]||(t[n]=[]),t[n].push(r),t},{});return t.map(t=>Object.assign(Object.assign({},t),{products:n[Number(t.id)]||[]})).filter(t=>{var r;return(null===(r=null==t?void 0:t.products)||void 0===r?void 0:r.length)>0})};export{q as buildSelectedAddonsPayload,W as calculatSingleAddonTotalPrice,j as calculateTotalAddonPrice,p as calculateTotalPrice,Lt as formatAddressLine,Dt as formatCityLine,Y as generateOrderItemsId,v as getAddonOptionRawPrice,E as getAddonOptionTranslation,D as getAddonTitle,c as getAddonTranslation,rt as getBaseUrl,mt as getCategoryNameById,Pt as getCategoryTranslation,at as getCoverPhotoSource,Q as getDefaultOrderType,ot as getImageSource,ft as getIsFeatureActive,it as getLogoImageSource,A as getOptionPrice,I as getOptionTitles,K as getOrderErrorMessages,w as getOrderItemPrice,F as getOrderPrice,M as getPriceSuffix,V as getProductAddon,C as getProductOrderPrice,b as getProductOrderRawPrice,m as getProductPrice,P as getProductRawPrice,y as getProductSellUnitShortCuts,f as getProductTranslation,g as getProductVariant,h as getProductVariantPrice,N as getProductVariantRawPrice,_ as getProductVariantTranslation,et as getRegisterUrl,x as getSelectedAddonsFromOrderItems,O as getSelectedOptionsTotalPrice,k as getStatusIcon,nt as getTLD,dt as getVideoSource,gt as prepareCategoryAndProductMap,At as preparePhoneNumber,ut as rgbDataURL,It as validateAddressForm,vt as validateForm,tt as validatePhoneNumber};
1
+ import{priceFormatter as E,isEmpty as A,sortNumbers as _,checkIsValidEmail as t,getQueryParam as T}from"@sorocraft/js-utils";import{HourglassHalf as r,FileCheck as R,Chef as e,Delivery as n,BagCheck as I,Check as D}from"@sorocraft/ui/icons";const o=(E,A)=>{var _,t;return(null===(t=null===(_=null==E?void 0:E.translations)||void 0===_?void 0:_.find)||void 0===t?void 0:t.call(_,E=>E.language===A))||{}},a=(E,A)=>{var _,t;return(null===(t=null===(_=null==E?void 0:E.translations)||void 0===_?void 0:_.find)||void 0===t?void 0:t.call(_,E=>E.language===A))||{}},i=({option:A,currency:_,language:t})=>{const{price:T}=A||{};return{totalPrice:T,formattedTotalPrice:E(T,_||"USD",t||"en")}},N=(E,A)=>{var _;return(null===(_=((null==E?void 0:E.options)||[]).find(({id:E})=>E===A))||void 0===_?void 0:_.price)||0},O=(E,A,_)=>{var t;if(Array.isArray(A))return(E||[]).filter(({id:E})=>A.includes(E)).map(({translations:E})=>{var A;return(null===(A=E.find(E=>E.language===_))||void 0===A?void 0:A.title)||""}).filter(Boolean).join(", ");{const T=(E||[]).find(({id:E})=>E===A);return(null===(t=null==T?void 0:T.translations.find(E=>E.language===_))||void 0===t?void 0:t.title)||""}},l=(E,A)=>{var _,t,T;return(null===(T=null===(t=null===(_=null==E?void 0:E.translations)||void 0===_?void 0:_.find)||void 0===t?void 0:t.call(_,E=>E.language===A))||void 0===T?void 0:T.title)||""};var s,S,u;!function(E){E.LIST="list",E.GRID="grid"}(s||(s={})),function(E){E.PIECE="PIECE",E.WEIGHT="WEIGHT",E.VOLUME="VOLUME"}(S||(S={})),function(E){E.SINGLE="SINGLE",E.MULTIPLE="MULTIPLE"}(u||(u={}));const C=(E=0,A=1,_=0)=>E*A*(1+_/100),c=(E,A)=>{var _,t;return(null===(t=null===(_=null==E?void 0:E.translations)||void 0===_?void 0:_.find)||void 0===t?void 0:t.call(_,E=>E.language===A))||{}},d=(E,A=1)=>{const{price:_=0,vat:t=0}=E||{};return C(_,A,t)},U=(A,_,t,T=1)=>{const r=d(A,T);return{totalPrice:r,formattedTotalPrice:E(r,_,t)}},P=(E,A)=>{var _,t;return(null===(t=null===(_=null==E?void 0:E.variants)||void 0===_?void 0:_.find)||void 0===t?void 0:t.call(_,E=>E.id===A))||{}},L=(E,A={},_)=>((null==E?void 0:E.addons)||[]).filter(E=>Object.prototype.hasOwnProperty.call(A,E.id)).reduce((E,_)=>{const{id:t,selectType:T}=_;if(T===u.SINGLE){const T=A[t];return E+N(_,T)}return E+(A[t]||[]).reduce((E,A)=>E+N(_,A),0)},0)*_,V=(E,A,_)=>{const t=P(A,E),{vat:T}=A||{},{price:r}=t||{};return C(r,_,T)},W=({variantId:A,currency:_="USD",language:t="en",product:T,quantity:r=1})=>{const R=V(A,T,r);return{totalPrice:R,formattedTotalPrice:E(R,_,t)}},M=(E,A)=>{var _,t;return(null===(t=null===(_=null==E?void 0:E.translations)||void 0===_?void 0:_.find)||void 0===t?void 0:t.call(_,E=>E.language===A))||{}},v=({product:E,variantId:_,quantity:t=1,selectedAddons:T,noVat:r=!1})=>{if(A(E))return{price:0,optionsPrice:0,total:0};const R=Object.assign(Object.assign({},E),{vat:r?0:E.vat}),e=L(R,T,t),n=_?V(_,R,t):d(R,t);return{price:n,optionsPrice:e,total:n+e}},B=({product:A,variantId:_,quantity:t=1,currency:T,language:r,selectedAddons:R,noVat:e=!1})=>{const{total:n}=v({product:A,variantId:_,quantity:t,selectedAddons:R,noVat:e});return{totalPrice:n,formattedTotalPrice:E(n,T,r)}},H=(E,A)=>((null==E?void 0:E.addons)||[]).find(({id:E})=>E===A)||{},Y=E=>{switch(E){case S.WEIGHT:return" / kg";case S.VOLUME:return" / l";default:return""}},G=E=>{switch(E){case S.WEIGHT:return{"50gr":.05,"100gr":.1,"150gr":.15,"200gr":.2,"250gr":.25,"300gr":.3,"350gr":.35,"400gr":.4,"450gr":.45,"500gr":.5,"600gr":.6,"700gr":.7,"750gr":.75,"800gr":.8,"850gr":.85,"900gr":.9,"950gr":.95,"1kg":1,"2kg":2,"5kg":5,"10kg":10,"20kg":20};case S.VOLUME:return{"50ml":.05,"100ml":.1,"150ml":.15,"200ml":.2,"250ml":.25,"300ml":.3,"350ml":.35,"400ml":.4,"450ml":.45,"500ml":.5,"600ml":.6,"700ml":.7,"750ml":.75,"800ml":.8,"850ml":.85,"900ml":.9,"950ml":.95,"1l":1,"2l":2,"5l":5,"10l":10,"20l":20};default:return{}}};var f,p,m,g,h,b;!function(E){E.DINE_IN="DINE_IN",E.PICK_UP="PICK_UP",E.DELIVERY="DELIVERY"}(f||(f={})),function(E){E.DRAFT="DRAFT",E.PENDING="PENDING",E.CONFIRMED="CONFIRMED",E.PREPARING="PREPARING",E.READY="READY",E.OUT_FOR_DELIVERY="OUT_FOR_DELIVERY",E.DELIVERED="DELIVERED",E.COMPLETED="COMPLETED",E.CANCELLED="CANCELLED",E.FAILED="FAILED"}(p||(p={})),function(E){E.PENDING="PENDING",E.PREPARING="PREPARING",E.READY="READY",E.SERVED="SERVED"}(m||(m={})),function(E){E.CASH="CASH",E.CARD="CARD",E.WALLET="WALLET",E.TERMINAL="TERMINAL"}(g||(g={})),function(E){E.CART="CART",E.DETAILS="DETAILS",E.COMPLETED="COMPLETED"}(h||(h={})),g.CASH,h.CART,h.DETAILS,h.COMPLETED,function(E){E.FIELD_REQUIRED_ERROR="This field is required",E.TABLE_NOT_SELECTED="Please select a table",E.ADDRESS_IS_EMPTY="Please enter an address",E.EMPTY_ITEMS="Please choose product",E.BRANCH_NOT_SELECTED="Please select a branch"}(b||(b={}));const F=E=>E.options.reduce((E,A)=>E+A.price,0);function y(E=[],A=1){return A*E.reduce((E,A)=>E+F(A),0)}const Q=(A,_,t)=>{const T=(E,A,_)=>A*E+y(_,A);let r=0,R=0;for(const E of A.items){const _=T(E.price,E.quantity,E.addons);r+=_,void 0===A.vat&&E.vat&&(R+=_*E.vat/100)}void 0!==A.vat&&(R=r*A.vat/100);const e=r+R;return{totalWithoutTax:r,totalWithoutTaxFormatted:E(r,_,t),totalTax:R,totalTaxFormatted:E(R,_,t),totalWithTax:e,totalWithTaxFormatted:E(e,_,t)}},$=(E,A,t)=>{if(!E)throw new Error("Product ID is required");let T=`${E}`;A&&(T+=`-${A}`);const r=Object.entries(t||{}).map(([E,A])=>{if(!E||!A)return null;const t=Array.isArray(A)?_(A).filter(Boolean).join("-"):`${A}`;return t?`${E}-${t}`:null}).filter(Boolean).join("-");return r&&(T+=`-${r}`),T},j=E=>{var A;const{price:_,variant:t,addons:T,quantity:r,vat:R}=E||{},e=null!==(A=null==t?void 0:t.price)&&void 0!==A?A:_,n=e+y(T,1),I=e*(R/100),D=n+I;return{totalGross:D*r,totalNet:n*r,totalTax:I*r,itemGrossPrice:D,itemNetPrice:n,itemTax:I}},w=E=>{const A={};for(const{addonId:_,options:t=[]}of E.addons||[]){const E=t.map(({optionId:E})=>E);A[_]=1===E.length?E[0]:E}return A},K=E=>{switch(E){case p.COMPLETED:return D;case p.DELIVERED:return I;case p.OUT_FOR_DELIVERY:return n;case p.PREPARING:return e;case p.CONFIRMED:return R;case p.PENDING:default:return r}},x=(E=[],_={})=>Object.entries(_).map(([_,t])=>{const T=Number(_),r=Array.isArray(t)?t:[t],R=E.find(E=>E.id===T);if(A(R))return{addonId:T,options:[]};const e=(R.options||[]).filter(E=>r.includes(E.id)).map(E=>({optionId:E.id,price:E.price}));return{addonId:T,options:e}}),k=(E,A,_)=>{if(!E)return null;const{deliveryOrderEnabled:t,dineInOrderEnabled:T,pickupOrderEnabled:r}=E;return t&&_?f.DELIVERY:T&&A?f.DINE_IN:r&&A?f.PICK_UP:null},q=E=>{switch(E){case"customer":return b.ADDRESS_IS_EMPTY;case"tableId":return b.TABLE_NOT_SELECTED;case"items":return b.EMPTY_ITEMS;case"branchId":return b.BRANCH_NOT_SELECTED;default:return b.FIELD_REQUIRED_ERROR}},z="restaround.co",J=[z,"restaround.az","restaround.ee","restaround.nl"],X="https://images.restaround.co",Z={994:E=>{const A=["50","51","10","55","99","70","77","60"];return new RegExp(`^(${A.join("|")})\\d{7}$`).test(E)?{isValid:!0}:{isValid:!1,error:`Azerbaijani numbers must be 9 digits and start with ${A.join(", ")}`}},31:E=>/^\d{9}$/.test(E)?{isValid:!0}:{isValid:!1,error:"Dutch numbers must be exactly 9 digits"}};function EE(E){if(!E)return{isValid:!1,error:"FIELD_REQUIRED"};const A=E.replace(/\D/g,""),_=A.startsWith("994")?"994":A.startsWith("31")?"31":null;if(!_)return{isValid:!1,error:"Unsupported country code"};const t=A.slice(_.length);return(0,Z[_])(t)}const AE=(E,A)=>{const _=A||"en";if("localhost:3000"===E)return{url:`http://localhost:3000/${_}`,domain:z};const t=J.includes(E)?E:z;return{url:`https://${t}/${_}`,domain:t}},_E=E=>"az"===E?"az":"co",tE=(E,A)=>`https://app.restaround.${_E(E)}/auth/register?lang=${E}&utm_source=${A}`,TE=E=>E?E.includes("base64")||E.startsWith("https://")?E:`${X}/${E}`:"",rE=E=>E?E.includes("base64")||E.startsWith("https://")?E:`${X}/${E}`:"https://images.restaround.co/no-photo-128.webp",RE=E=>E?E.includes("base64")||E.startsWith("https://")?E:`${X}/${E}`:"https://images.restaround.co/restaround-doodle.webp",eE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",nE=(E,A,_)=>eE.charAt(E>>2)+eE.charAt((3&E)<<4|A>>4)+eE.charAt((15&A)<<2|_>>6)+eE.charAt(63&_),IE=(E,A,_)=>`data:image/gif;base64,R0lGODlhAQABAPAA${nE(0,E,A)+nE(_,255,255)}/yH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==`,DE=E=>E?E.includes("base64")||E.startsWith("https://")?E:`${X}/${E}`:"";var oE,aE;!function(E){E.PHONE="PHONE",E.OTP="OTP",E.EMAIL="EMAIL"}(oE||(oE={})),function(E){E.HOME="HOME",E.WORK="WORK",E.TRAVEL="TRAVEL"}(aE||(aE={}));const iE=E=>`${E.countryCode}${E.phoneNumber}`.replaceAll("+",""),NE=(E,A)=>{const _={},{phoneNumber:T,email:r,otp:R}=E||{};switch(A){case oE.PHONE:{const{isValid:E,error:A}=EE(T);E||(_.phoneNumber=A);break}case oE.OTP:{const{isValid:E,error:A}=EE(T);E||(_.phoneNumber=A),R&&6===R.length||(_.otp="Invalid OTP");break}case oE.EMAIL:r&&t(r)||(_.email="Invalid Email Address")}return _},OE=E=>{const A={},{countryCode:_,cityName:t,street:T,houseNumber:r}=E||{};return _||(A.countryCode="COUNTRY_REQUIRED"),t||(A.cityName="CITY_REQUIRED"),T||(A.street="STREET_REQUIRED"),r||(A.houseNumber="STREET_NUMBER_REQUIRED"),A},lE=E=>(E||[]).filter(Boolean).join(", "),sE=(E,A,_)=>[E,[A,_].filter(Boolean).join("/")].filter(Boolean).join(" ");var SE,uE;!function(E){E.UPLOAD_VIDEO="UPLOAD_VIDEO"}(SE||(SE={})),function(E){E.ALPHA="ALPHA",E.BETA="BETA",E.ALL="ALL"}(uE||(uE={}));const CE={[uE.ALPHA]:[SE.UPLOAD_VIDEO],[uE.BETA]:[],[uE.ALL]:[]},cE=(E,A)=>{if("1"===T(E))return!0;return(A===uE.ALPHA?[uE.ALPHA,uE.BETA,uE.ALL]:A===uE.BETA?[uE.BETA,uE.ALL]:[uE.ALL]).some(A=>{var _;return null===(_=CE[A])||void 0===_?void 0:_.includes(E)})},dE=(E,A)=>{var _,t;return(null===(t=null===(_=null==E?void 0:E.translations)||void 0===_?void 0:_.find)||void 0===t?void 0:t.call(_,E=>E.language===A))||{}},UE=(E,_,t)=>{var T;const r=null===(T=null==_?void 0:_.find)||void 0===T?void 0:T.call(_,({id:A})=>A===E);if(A(r))return"";const{name:R}=dE(r,t);return R||""},PE=(E,A)=>{const _=A.reduce((E,A)=>{if(!A.visible)return E;const _=Number(A.categoryId);return E[_]||(E[_]=[]),E[_].push(A),E},{});return E.map(E=>Object.assign(Object.assign({},E),{products:_[Number(E.id)]||[]})).filter(E=>{var A;return(null===(A=null==E?void 0:E.products)||void 0===A?void 0:A.length)>0})};var LE,VE;!function(E){E.VIEW_BUSINESS="VIEW_BUSINESS",E.UPDATE_BUSINESS="UPDATE_BUSINESS",E.VIEW_ORDERS="VIEW_ORDERS",E.UPDATE_ORDER="UPDATE_ORDER",E.CREATE_ORDER="CREATE_ORDER",E.VIEW_QR_MENU="VIEW_QR_MENU",E.VIEW_MENU="VIEW_MENU",E.VIEW_MENU_ITEMS="VIEW_MENU_ITEMS",E.CREATE_MENU_ITEM="CREATE_MENU_ITEM",E.UPDATE_MENU_ITEM="UPDATE_MENU_ITEM",E.DELETE_MENU_ITEM="DELETE_MENU_ITEM",E.VIEW_CATEGORIES="VIEW_CATEGORIES",E.UPDATE_CATEGORY="UPDATE_CATEGORY",E.CREATE_CATEGORY="CREATE_CATEGORY",E.DELETE_CATEGORY="DELETE_CATEGORY",E.VIEW_ADDONS="VIEW_ADDONS",E.UPDATE_ADDON="UPDATE_ADDON",E.CREATE_ADDON="CREATE_ADDON",E.DELETE_ADDON="DELETE_ADDON",E.VIEW_TABLES="VIEW_TABLES",E.UPDATE_TABLE="UPDATE_TABLE",E.UPDATE_TABLE_STATUS="UPDATE_TABLE_STATUS",E.CREATE_TABLE="CREATE_TABLE",E.DELETE_TABLE="DELETE_TABLE",E.VIEW_BRANCHES="VIEW_BRANCHES",E.UPDATE_BRANCH="UPDATE_BRANCH",E.CREATE_BRANCH="CREATE_BRANCH",E.DELETE_BRANCH="DELETE_BRANCH",E.VIEW_EMPLOYEES="VIEW_EMPLOYEES",E.UPDATE_EMPLOYEE="UPDATE_EMPLOYEE",E.CREATE_EMPLOYEE="CREATE_EMPLOYEE",E.DELETE_EMPLOYEE="DELETE_EMPLOYEE",E.VIEW_ANALYTICS="VIEW_ANALYTICS",E.VIEW_SALES_REPORTS="VIEW_SALES_REPORTS",E.VIEW_SUBSCRIPTION="VIEW_SUBSCRIPTION",E.UPDATE_SUBSCRIPTION="UPDATE_SUBSCRIPTION",E.VIEW_QR_CODES="VIEW_QR_CODES",E.CREATE_QR_CODE="CREATE_QR_CODE",E.DELETE_QR_CODE="DELETE_QR_CODE",E.ALL="ALL",E.VIEW_INVENTORY="VIEW_INVENTORY",E.VIEW_PURCHASES="VIEW_PURCHASES",E.VIEW_PURCHASE_DETAIL="VIEW_PURCHASE_DETAIL",E.CREATE_PURCHASE="CREATE_PURCHASE",E.UPDATE_PURCHASE="UPDATE_PURCHASE",E.DELETE_PURCHASE="DELETE_PURCHASE",E.VIEW_INVENTORY_PRODUCTS="VIEW_INVENTORY_PRODUCTS",E.CREATE_INVENTORY_PRODUCT="CREATE_INVENTORY_PRODUCT",E.UPDATE_INVENTORY_PRODUCT="UPDATE_INVENTORY_PRODUCT",E.DELETE_INVENTORY_PRODUCT="DELETE_INVENTORY_PRODUCT",E.VIEW_BUSINESS_BALANCE="VIEW_BUSINESS_BALANCE",E.VIEW_BRANCH_BALANCE="VIEW_BRANCH_BALANCE",E.UPDATE_PRODUCT_INGREDIENTS="UPDATE_PRODUCT_INGREDIENTS",E.DELETE_PRODUCT_INGREDIENTS="DELETE_PRODUCT_INGREDIENTS",E.AI_ASSISTANT="AI_ASSISTANT"}(LE||(LE={})),function(E){E.OWNER="OWNER",E.BRANCH_MANAGER="BRANCH_MANAGER",E.GENERAL_MANAGER="GENERAL_MANAGER",E.CHEF="CHEF",E.SOUS_CHEF="SOUS_CHEF",E.PASTRY_CHEF="PASTRY_CHEF",E.LINE_COOK="LINE_COOK",E.PREP_COOK="PREP_COOK",E.KITCHEN_ASSISTANT="KITCHEN_ASSISTANT",E.DISHWASHER="DISHWASHER",E.HEAD_WAITER="HEAD_WAITER",E.WAITER="WAITER",E.RUNNER="RUNNER",E.BARISTA="BARISTA",E.BARTENDER="BARTENDER",E.SOMMELIER="SOMMELIER",E.ACCOUNTANT="ACCOUNTANT",E.ROOM_SERVICE_STAFF="ROOM_SERVICE_STAFF",E.DELIVERY_DRIVER="DELIVERY_DRIVER",E.INVENTORY_MANAGER="INVENTORY_MANAGER",E.PURCHASING_MANAGER="PURCHASING_MANAGER",E.WAREHOUSE_STAFF="WAREHOUSE_STAFF"}(VE||(VE={}));const WE=E=>{switch(E){case VE.OWNER:return[LE.ALL];case VE.GENERAL_MANAGER:return[LE.VIEW_BUSINESS,LE.UPDATE_BUSINESS,LE.VIEW_ORDERS,LE.UPDATE_ORDER,LE.CREATE_ORDER,LE.VIEW_QR_MENU,LE.VIEW_QR_CODES,LE.VIEW_MENU,LE.VIEW_MENU_ITEMS,LE.UPDATE_MENU_ITEM,LE.CREATE_MENU_ITEM,LE.DELETE_MENU_ITEM,LE.VIEW_CATEGORIES,LE.UPDATE_CATEGORY,LE.CREATE_CATEGORY,LE.DELETE_CATEGORY,LE.VIEW_ADDONS,LE.UPDATE_ADDON,LE.CREATE_ADDON,LE.DELETE_ADDON,LE.VIEW_TABLES,LE.UPDATE_TABLE,LE.CREATE_TABLE,LE.DELETE_TABLE,LE.VIEW_BRANCHES,LE.UPDATE_BRANCH,LE.CREATE_BRANCH,LE.DELETE_BRANCH,LE.VIEW_EMPLOYEES,LE.UPDATE_EMPLOYEE,LE.CREATE_EMPLOYEE,LE.DELETE_EMPLOYEE,LE.VIEW_ANALYTICS,LE.VIEW_SALES_REPORTS,LE.VIEW_SUBSCRIPTION,LE.CREATE_QR_CODE,LE.DELETE_QR_CODE,LE.AI_ASSISTANT];case VE.BRANCH_MANAGER:return[LE.VIEW_BUSINESS,LE.VIEW_ORDERS,LE.UPDATE_ORDER,LE.CREATE_ORDER,LE.VIEW_QR_MENU,LE.VIEW_QR_CODES,LE.VIEW_MENU,LE.VIEW_MENU_ITEMS,LE.UPDATE_MENU_ITEM,LE.CREATE_MENU_ITEM,LE.DELETE_MENU_ITEM,LE.VIEW_CATEGORIES,LE.UPDATE_CATEGORY,LE.CREATE_CATEGORY,LE.DELETE_CATEGORY,LE.VIEW_ADDONS,LE.UPDATE_ADDON,LE.CREATE_ADDON,LE.DELETE_ADDON,LE.VIEW_TABLES,LE.UPDATE_TABLE,LE.CREATE_TABLE,LE.DELETE_TABLE,LE.VIEW_EMPLOYEES,LE.UPDATE_EMPLOYEE,LE.VIEW_ANALYTICS,LE.VIEW_SALES_REPORTS,LE.CREATE_QR_CODE,LE.DELETE_QR_CODE,LE.AI_ASSISTANT];case VE.CHEF:return[LE.VIEW_MENU,LE.VIEW_MENU_ITEMS,LE.UPDATE_MENU_ITEM,LE.VIEW_CATEGORIES,LE.UPDATE_CATEGORY,LE.VIEW_ADDONS,LE.UPDATE_ADDON,LE.VIEW_ORDERS,LE.UPDATE_ORDER];case VE.SOUS_CHEF:return[LE.VIEW_MENU,LE.VIEW_MENU_ITEMS,LE.VIEW_CATEGORIES,LE.VIEW_ADDONS,LE.VIEW_ORDERS,LE.UPDATE_ORDER];case VE.PASTRY_CHEF:return[LE.VIEW_MENU,LE.VIEW_MENU_ITEMS,LE.UPDATE_MENU_ITEM,LE.VIEW_ORDERS,LE.UPDATE_ORDER];case VE.LINE_COOK:case VE.PREP_COOK:case VE.KITCHEN_ASSISTANT:return[LE.VIEW_MENU,LE.VIEW_MENU_ITEMS,LE.VIEW_ORDERS,LE.UPDATE_ORDER];case VE.HEAD_WAITER:return[LE.VIEW_ORDERS,LE.CREATE_ORDER,LE.UPDATE_ORDER,LE.VIEW_TABLES,LE.UPDATE_TABLE_STATUS,LE.VIEW_MENU,LE.VIEW_MENU_ITEMS,LE.VIEW_CATEGORIES,LE.VIEW_ADDONS,LE.VIEW_QR_MENU,LE.VIEW_QR_CODES];case VE.WAITER:return[LE.VIEW_ORDERS,LE.CREATE_ORDER,LE.UPDATE_ORDER,LE.VIEW_TABLES,LE.UPDATE_TABLE_STATUS,LE.VIEW_MENU,LE.VIEW_MENU_ITEMS,LE.VIEW_CATEGORIES,LE.VIEW_ADDONS];case VE.RUNNER:return[LE.VIEW_ORDERS,LE.UPDATE_ORDER];case VE.BARISTA:case VE.BARTENDER:case VE.SOMMELIER:case VE.ROOM_SERVICE_STAFF:return[LE.VIEW_MENU,LE.VIEW_MENU_ITEMS,LE.VIEW_ORDERS,LE.CREATE_ORDER,LE.UPDATE_ORDER];case VE.ACCOUNTANT:return[LE.VIEW_ANALYTICS,LE.VIEW_SALES_REPORTS,LE.VIEW_SUBSCRIPTION];case VE.DELIVERY_DRIVER:return[LE.VIEW_ORDERS,LE.UPDATE_ORDER];case VE.INVENTORY_MANAGER:return[LE.VIEW_CATEGORIES,LE.UPDATE_CATEGORY,LE.CREATE_CATEGORY,LE.DELETE_CATEGORY,LE.VIEW_ADDONS,LE.UPDATE_ADDON,LE.CREATE_ADDON,LE.DELETE_ADDON,LE.VIEW_MENU,LE.VIEW_MENU_ITEMS,LE.UPDATE_MENU_ITEM,LE.CREATE_MENU_ITEM,LE.DELETE_MENU_ITEM,LE.VIEW_PURCHASES,LE.CREATE_PURCHASE,LE.UPDATE_PURCHASE,LE.DELETE_PURCHASE,LE.VIEW_INVENTORY,LE.VIEW_INVENTORY_PRODUCTS,LE.CREATE_INVENTORY_PRODUCT,LE.UPDATE_INVENTORY_PRODUCT,LE.DELETE_INVENTORY_PRODUCT,LE.VIEW_PURCHASE_DETAIL,LE.VIEW_BRANCH_BALANCE,LE.UPDATE_PRODUCT_INGREDIENTS,LE.DELETE_PRODUCT_INGREDIENTS];case VE.PURCHASING_MANAGER:return[LE.VIEW_MENU,LE.VIEW_MENU_ITEMS,LE.VIEW_CATEGORIES,LE.CREATE_CATEGORY,LE.UPDATE_CATEGORY,LE.VIEW_ADDONS,LE.CREATE_ADDON,LE.UPDATE_ADDON];case VE.WAREHOUSE_STAFF:return[LE.VIEW_CATEGORIES,LE.VIEW_ADDONS,LE.VIEW_MENU,LE.VIEW_MENU_ITEMS];default:return[]}},ME=(E,_)=>!!A(E)||!A(_)&&(!!_.includes(LE.ALL)||E.some(E=>_.includes(E)));export{x as buildSelectedAddonsPayload,F as calculatSingleAddonTotalPrice,y as calculateTotalAddonPrice,C as calculateTotalPrice,sE as formatAddressLine,lE as formatCityLine,$ as generateOrderItemsId,N as getAddonOptionRawPrice,a as getAddonOptionTranslation,l as getAddonTitle,o as getAddonTranslation,AE as getBaseUrl,UE as getCategoryNameById,dE as getCategoryTranslation,RE as getCoverPhotoSource,k as getDefaultOrderType,ME as getHasUserPermission,TE as getImageSource,cE as getIsFeatureActive,rE as getLogoImageSource,i as getOptionPrice,O as getOptionTitles,q as getOrderErrorMessages,j as getOrderItemPrice,Q as getOrderPrice,WE as getPermissionsByRole,Y as getPriceSuffix,H as getProductAddon,B as getProductOrderPrice,v as getProductOrderRawPrice,U as getProductPrice,d as getProductRawPrice,G as getProductSellUnitShortCuts,c as getProductTranslation,P as getProductVariant,W as getProductVariantPrice,V as getProductVariantRawPrice,M as getProductVariantTranslation,tE as getRegisterUrl,w as getSelectedAddonsFromOrderItems,L as getSelectedOptionsTotalPrice,K as getStatusIcon,_E as getTLD,DE as getVideoSource,PE as prepareCategoryAndProductMap,iE as preparePhoneNumber,IE as rgbDataURL,OE as validateAddressForm,NE as validateForm,EE as validatePhoneNumber};
2
2
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../../src/modules/addon/utils.ts","../../../src/modules/product/models.ts","../../../src/modules/addon/models.ts","../../../src/modules/product/utils.ts","../../../src/modules/order/models.ts","../../../src/modules/order/constants.ts","../../../src/modules/order/utils.ts","../../../src/modules/view/constants.ts","../../../src/modules/view/utils.ts","../../../src/modules/customer/models.ts","../../../src/modules/customer/utils.ts","../../../src/modules/feature/models.ts","../../../src/modules/feature/constants.ts","../../../src/modules/feature/utils.ts","../../../src/modules/category/utils.ts","../../../src/modules/menu/utils.ts"],"sourcesContent":["import { priceFormatter } from \"@sorocraft/js-utils\";\n\nimport {\n\tMenuAddon,\n\tMenuAddonOption,\n\tMenuAddonOptionTranslation,\n\tMenuAddonTranslation,\n} from \"./models\";\n\nexport const getAddonTranslation = (addon: MenuAddon, language: string): MenuAddonTranslation => {\n\treturn (addon?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as MenuAddonTranslation;\n};\n\nexport const getAddonOptionTranslation = (\n\toption: MenuAddonOption,\n\tlanguage: string\n): MenuAddonOptionTranslation => {\n\treturn (option?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as MenuAddonOptionTranslation;\n};\n\nexport const getOptionPrice = ({\n\toption,\n\tcurrency,\n\tlanguage,\n}: {\n\toption: MenuAddonOption;\n\tcurrency?: string;\n\tlanguage?: string;\n}) => {\n\tconst { price } = option || {};\n\n\treturn {\n\t\ttotalPrice: price,\n\t\tformattedTotalPrice: priceFormatter(price, currency || \"USD\", language || \"en\"),\n\t};\n};\n\nexport const getAddonOptionRawPrice = (addon: MenuAddon, optionId: number): number => {\n\treturn (addon?.options || []).find(({ id }) => id === optionId)?.price || 0;\n};\n\nexport const getOptionTitles = (\n\toptions: MenuAddonOption[],\n\toptionIds: number | number[],\n\tlanguage: string\n): string => {\n\tif (Array.isArray(optionIds)) {\n\t\treturn (options || [])\n\t\t\t.filter(({ id }) => optionIds.includes(id))\n\t\t\t.map(({ translations }) => translations.find((t) => t.language === language)?.title || \"\")\n\t\t\t.filter(Boolean)\n\t\t\t.join(\", \");\n\t} else {\n\t\tconst option = (options || []).find(({ id }) => id === optionIds);\n\t\treturn option?.translations.find((t) => t.language === language)?.title || \"\";\n\t}\n};\n\nexport const getAddonTitle = (addon: MenuAddon, language: string): string => {\n\treturn addon?.translations?.find?.((t) => t.language === language)?.title || \"\";\n};\n","import { MenuAddon } from \"../addon/models\";\n\nexport interface ProductTranslation {\n\tid: number;\n\tname: string;\n\tdescription?: string;\n\tlanguage: string;\n\tproductId?: number;\n}\n\nexport interface ProductVariantTranslation {\n\tid?: number;\n\ttitle: string;\n\tlanguage: string;\n}\n\nexport interface ProductVariant {\n\tid?: number;\n\tprice: number;\n\ttranslations: ProductVariantTranslation[];\n\tproductId?: number;\n\tremove?: boolean;\n}\n\nexport interface Product {\n\tid: number;\n\tcategoryId: number;\n\tvat?: number;\n\tprice: number;\n\tvolume?: string; // 100qr/250ml/1kq\n\timage160?: string;\n\timage580?: string;\n\timage1024?: string;\n\ttranslations: ProductTranslation[];\n\tvariants: ProductVariant[];\n\taddons: MenuAddon[];\n\tavailable?: boolean;\n\tvisible?: boolean;\n\tposition?: number;\n\tvideoUrl?: string;\n\tsellUnitType?: SellUnitType;\n}\n\nexport enum ProductView {\n\tLIST = \"list\",\n\tGRID = \"grid\",\n}\n\nexport interface DashboardProduct extends Omit<Product, \"addons\"> {\n\taddons: number[];\n}\n\nexport enum SellUnitType {\n\tPIECE = \"PIECE\",\n\tWEIGHT = \"WEIGHT\",\n\tVOLUME = \"VOLUME\",\n}\n","export enum MenuAddonSelectType {\n\tSINGLE = \"SINGLE\",\n\tMULTIPLE = \"MULTIPLE\",\n}\n\nexport interface MenuAddonTranslation {\n\tid?: number;\n\ttitle: string;\n\tlanguage: string;\n}\n\nexport interface MenuAddonOptionTranslation {\n\tid?: number;\n\ttitle: string;\n\tlanguage: string;\n}\n\nexport interface MenuAddonOption {\n\tid?: number;\n\tprice: number;\n\ttranslations: MenuAddonOptionTranslation[];\n\tremove?: boolean;\n}\n\nexport interface MenuAddon {\n\tid?: number;\n\tselectType: MenuAddonSelectType;\n\ttranslations: MenuAddonTranslation[];\n\toptions: MenuAddonOption[];\n\tbusinessId?: number;\n}\n","import { isEmpty, priceFormatter } from \"@sorocraft/js-utils\";\n\nimport {\n\tProduct,\n\tProductTranslation,\n\tProductVariant,\n\tProductVariantTranslation,\n\tSellUnitType,\n} from \"./models\";\n\nimport { MenuAddon, MenuAddonSelectType } from \"src/modules/addon/models\";\nimport { getAddonOptionRawPrice } from \"src/modules/addon/utils\";\nimport * as orderModels from \"src/modules/order/models\";\n\nexport const calculateTotalPrice = (price: number = 0, quantity: number = 1, vat: number = 0) => {\n\treturn price * quantity * (1 + vat / 100);\n};\n\nexport const getProductTranslation = (\n\tproduct: Pick<Product, \"translations\">,\n\tlanguage: string,\n): ProductTranslation => {\n\treturn (product?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as ProductTranslation;\n};\n\nexport const getProductRawPrice = (\n\tproduct: Pick<Product, \"price\" | \"vat\">,\n\tquantity: number = 1,\n) => {\n\tconst { price = 0, vat = 0 } = product || {};\n\treturn calculateTotalPrice(price, quantity, vat);\n};\n\nexport const getProductPrice = (\n\tproduct: Pick<Product, \"price\" | \"vat\">,\n\tcurrency: string,\n\tlanguage: string,\n\tquantity: number = 1,\n) => {\n\tconst totalPrice = getProductRawPrice(product, quantity);\n\n\treturn {\n\t\ttotalPrice: totalPrice,\n\t\tformattedTotalPrice: priceFormatter(totalPrice, currency, language),\n\t};\n};\n\nexport const getProductVariant = (\n\tproduct: Pick<Product, \"variants\">,\n\tvariantId: number,\n): ProductVariant => {\n\treturn product?.variants?.find?.((item) => item.id === variantId) || ({} as ProductVariant);\n};\n\nexport const getSelectedOptionsTotalPrice = (\n\tproduct: Product,\n\tselectedAddons: orderModels.SelectedAddons = {},\n\tquantity: number,\n): number => {\n\t// Filter addons that are selected by the user\n\tconst selectedAddonsList = (product?.addons || []).filter((addon) =>\n\t\tObject.prototype.hasOwnProperty.call(selectedAddons, addon.id),\n\t);\n\n\t// Calculate the total price\n\tconst optionsTotalPrice = selectedAddonsList.reduce((total: number, addon: MenuAddon) => {\n\t\tconst { id: addonId, selectType } = addon;\n\n\t\t// Handle SINGLE selection\n\t\tif (selectType === MenuAddonSelectType.SINGLE) {\n\t\t\tconst selectedOptionId = selectedAddons[addonId] as number;\n\t\t\treturn total + getAddonOptionRawPrice(addon, selectedOptionId);\n\t\t}\n\n\t\t// Handle MULTIPLE selection\n\t\tconst selectedOptionIds = (selectedAddons[addonId] || []) as number[];\n\t\tconst multipleOptionsPrice = selectedOptionIds.reduce(\n\t\t\t(multipleTotal, optionId) => multipleTotal + getAddonOptionRawPrice(addon, optionId),\n\t\t\t0,\n\t\t);\n\n\t\treturn total + multipleOptionsPrice;\n\t}, 0);\n\n\treturn optionsTotalPrice * quantity;\n};\n\nexport const getProductVariantRawPrice = (\n\tvariantId: number,\n\tproduct: Pick<Product, \"variants\" | \"vat\">,\n\tquantity?: number,\n) => {\n\tconst variant = getProductVariant(product, variantId);\n\tconst { vat } = product || {};\n\tconst { price } = variant || {};\n\treturn calculateTotalPrice(price, quantity, vat);\n};\n\nexport const getProductVariantPrice = ({\n\tvariantId,\n\tcurrency = \"USD\",\n\tlanguage = \"en\",\n\tproduct,\n\tquantity = 1,\n}: {\n\tvariantId: number;\n\tcurrency?: string;\n\tlanguage?: string;\n\tproduct: Pick<Product, \"variants\" | \"vat\">;\n\tquantity?: number;\n}) => {\n\tconst totalPrice = getProductVariantRawPrice(variantId, product, quantity);\n\n\treturn {\n\t\ttotalPrice: totalPrice,\n\t\tformattedTotalPrice: priceFormatter(totalPrice, currency, language),\n\t};\n};\n\nexport const getProductVariantTranslation = (\n\tvariant: ProductVariant,\n\tlanguage: string,\n): ProductVariantTranslation => {\n\treturn (variant?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as ProductVariantTranslation;\n};\n\nexport const getProductOrderRawPrice = ({\n\tproduct,\n\tvariantId,\n\tquantity = 1,\n\tselectedAddons,\n\tnoVat = false,\n}: {\n\tproduct: Product;\n\tvariantId: number | null;\n\tquantity: number;\n\tselectedAddons: orderModels.SelectedAddons;\n\tnoVat?: boolean;\n}): { price: number; optionsPrice: number; total: number } => {\n\tif (isEmpty(product)) return { price: 0, optionsPrice: 0, total: 0 };\n\n\tconst productData: Product = { ...product, vat: noVat ? 0 : product.vat };\n\tconst selectedOptionsTotalPrice = getSelectedOptionsTotalPrice(\n\t\tproductData,\n\t\tselectedAddons,\n\t\tquantity,\n\t);\n\tconst price = variantId\n\t\t? getProductVariantRawPrice(variantId, productData, quantity)\n\t\t: getProductRawPrice(productData, quantity);\n\n\treturn {\n\t\tprice,\n\t\toptionsPrice: selectedOptionsTotalPrice,\n\t\ttotal: price + selectedOptionsTotalPrice,\n\t};\n};\n\nexport const getProductOrderPrice = ({\n\tproduct,\n\tvariantId,\n\tquantity = 1,\n\tcurrency,\n\tlanguage,\n\tselectedAddons,\n\tnoVat = false,\n}: {\n\tproduct: Product;\n\tvariantId: number | null;\n\tquantity: number;\n\tcurrency: string;\n\tlanguage: string;\n\tselectedAddons: orderModels.SelectedAddons;\n\tnoVat?: boolean;\n}) => {\n\tconst { total } = getProductOrderRawPrice({\n\t\tproduct,\n\t\tvariantId,\n\t\tquantity,\n\t\tselectedAddons,\n\t\tnoVat,\n\t});\n\n\treturn {\n\t\ttotalPrice: total,\n\t\tformattedTotalPrice: priceFormatter(total, currency, language),\n\t};\n};\n\nexport const getProductAddon = (product: Product, addonId: number): MenuAddon => {\n\treturn (product?.addons || []).find(({ id }) => id === addonId) || ({} as MenuAddon);\n};\n\nexport const getPriceSuffix = (sellUnitType: SellUnitType) => {\n\tswitch (sellUnitType) {\n\t\tcase SellUnitType.WEIGHT:\n\t\t\treturn \" / kg\";\n\t\tcase SellUnitType.VOLUME:\n\t\t\treturn \" / l\";\n\n\t\tdefault:\n\t\t\treturn \"\";\n\t}\n};\n\nexport const getProductSellUnitShortCuts = (sellUnitType: SellUnitType) => {\n\tswitch (sellUnitType) {\n\t\tcase SellUnitType.WEIGHT:\n\t\t\treturn {\n\t\t\t\t\"50gr\": 0.05,\n\t\t\t\t\"100gr\": 0.1,\n\t\t\t\t\"150gr\": 0.15,\n\t\t\t\t\"200gr\": 0.2,\n\t\t\t\t\"250gr\": 0.25,\n\t\t\t\t\"300gr\": 0.3,\n\t\t\t\t\"350gr\": 0.35,\n\t\t\t\t\"400gr\": 0.4,\n\t\t\t\t\"450gr\": 0.45,\n\t\t\t\t\"500gr\": 0.5,\n\t\t\t\t\"600gr\": 0.6,\n\t\t\t\t\"700gr\": 0.7,\n\t\t\t\t\"750gr\": 0.75,\n\t\t\t\t\"800gr\": 0.8,\n\t\t\t\t\"850gr\": 0.85,\n\t\t\t\t\"900gr\": 0.9,\n\t\t\t\t\"950gr\": 0.95,\n\t\t\t\t\"1kg\": 1,\n\t\t\t\t\"2kg\": 2,\n\t\t\t\t\"5kg\": 5,\n\t\t\t\t\"10kg\": 10,\n\t\t\t\t\"20kg\": 20,\n\t\t\t};\n\t\tcase SellUnitType.VOLUME:\n\t\t\treturn {\n\t\t\t\t\"50ml\": 0.05,\n\t\t\t\t\"100ml\": 0.1,\n\t\t\t\t\"150ml\": 0.15,\n\t\t\t\t\"200ml\": 0.2,\n\t\t\t\t\"250ml\": 0.25,\n\t\t\t\t\"300ml\": 0.3,\n\t\t\t\t\"350ml\": 0.35,\n\t\t\t\t\"400ml\": 0.4,\n\t\t\t\t\"450ml\": 0.45,\n\t\t\t\t\"500ml\": 0.5,\n\t\t\t\t\"600ml\": 0.6,\n\t\t\t\t\"700ml\": 0.7,\n\t\t\t\t\"750ml\": 0.75,\n\t\t\t\t\"800ml\": 0.8,\n\t\t\t\t\"850ml\": 0.85,\n\t\t\t\t\"900ml\": 0.9,\n\t\t\t\t\"950ml\": 0.95,\n\t\t\t\t\"1l\": 1,\n\t\t\t\t\"2l\": 2,\n\t\t\t\t\"5l\": 5,\n\t\t\t\t\"10l\": 10,\n\t\t\t\t\"20l\": 20,\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {};\n\t}\n};\n","import * as customerModels from \"../customer/models\";\nimport * as productModels from \"../product/models\";\n\nexport enum OrderType {\n\tDINE_IN = \"DINE_IN\",\n\tPICK_UP = \"PICK_UP\",\n\tDELIVERY = \"DELIVERY\",\n}\n\nexport enum OrderStatus {\n\tDRAFT = \"DRAFT\",\n\tPENDING = \"PENDING\",\n\tCONFIRMED = \"CONFIRMED\",\n\tPREPARING = \"PREPARING\",\n\tREADY = \"READY\",\n\tOUT_FOR_DELIVERY = \"OUT_FOR_DELIVERY\",\n\tDELIVERED = \"DELIVERED\",\n\tCOMPLETED = \"COMPLETED\",\n\tCANCELLED = \"CANCELLED\",\n\tFAILED = \"FAILED\",\n}\n\nexport enum OrderItemStatus {\n\tPENDING = \"PENDING\",\n\tPREPARING = \"PREPARING\",\n\tREADY = \"READY\",\n\tSERVED = \"SERVED\",\n}\n\nexport enum PaymentMethod {\n\tCASH = \"CASH\",\n\tCARD = \"CARD\",\n\tWALLET = \"WALLET\",\n\tTERMINAL = \"TERMINAL\",\n}\n\nexport interface OrderAddonOption {\n\toptionId: number;\n\tprice: number;\n}\n\nexport interface OrderAddon {\n\tid?: number;\n\taddonId: number;\n\toptions: OrderAddonOption[];\n}\n\nexport interface SelectedAddons {\n\t[key: number]: number | number[];\n}\n\nexport interface OrderItemVariant {\n\tid?: number;\n\tvariantId: number;\n\tprice: number;\n}\n\nexport interface OrderItem {\n\tid?: number;\n\tproductId: number;\n\torderId?: number;\n\tquantity: number;\n\tprice: number;\n\tvariant?: OrderItemVariant;\n\taddons: OrderAddon[];\n\tnote?: string;\n\tstatus?: OrderItemStatus;\n\tvat?: number;\n\tisPaid?: boolean;\n\tsellUnitType: productModels.SellUnitType;\n}\n\nexport interface Order {\n\tid?: number;\n\tbusinessId?: number;\n\tbranchId?: number;\n\tworkingDayId?: number;\n\ttableId?: number;\n\temployeeId?: number;\n\torderType: OrderType;\n\ttotalPriceWithTax: number;\n\ttotalPriceWithTaxAndFees?: number;\n\ttotalPriceWithoutTax: number;\n\ttotalTax: number;\n\titems: OrderItem[];\n\tstatus?: OrderStatus;\n\tvat?: number;\n\tpaymentMethod?: PaymentMethod;\n\tnote?: string;\n\tcreatedAt?: number;\n\tupdatedAt?: number;\n\tcustomer?: customerModels.Customer;\n\tdeliveryFee?: number;\n}\n\nexport interface OrderItems {\n\t[key: string]: OrderItem;\n}\n\nexport enum OrderStep {\n\tCART = \"CART\",\n\tDETAILS = \"DETAILS\",\n\tCOMPLETED = \"COMPLETED\",\n}\n\nexport interface OrderPayload extends Order {\n\tcustomerAddressId: number;\n\tcustomerId: number;\n}\n\nexport type OrderPriceDetails = {\n\ttotalPriceWithTax: number;\n\ttotalPriceWithTaxAndFees: number;\n\ttotalPriceWithoutTax: number;\n\ttotalTax: number;\n};\n\nexport type OrderFormattedPriceDetails = {\n\ttotalPriceWithTax: string;\n\ttotalPriceWithTaxAndFees: string;\n\ttotalPriceWithoutTax: string;\n\ttotalTax: string;\n};\n","import { OrderStep, PaymentMethod } from \"./models\";\n\nexport const initialOrder = {\n\torderType: null,\n\ttotalPriceWithTax: 0,\n\ttotalPriceWithoutTax: 0,\n\ttotalTax: 0,\n\tvat: 0,\n\tpaymentMethod: PaymentMethod.CASH,\n};\n\nexport const ORDER_STEPS = [OrderStep.CART, OrderStep.DETAILS, OrderStep.COMPLETED];\n\nexport enum OrderErrors {\n\tFIELD_REQUIRED_ERROR = \"This field is required\",\n\tTABLE_NOT_SELECTED = \"Please select a table\",\n\tADDRESS_IS_EMPTY = \"Please enter an address\",\n\tEMPTY_ITEMS = \"Please choose product\",\n\tBRANCH_NOT_SELECTED = \"Please select a branch\",\n}\n","import { isEmpty, priceFormatter, sortNumbers } from \"@sorocraft/js-utils\";\nimport { IconType } from \"@sorocraft/ui\";\nimport { Check, BagCheck, Delivery, Chef, FileCheck, HourglassHalf } from \"@sorocraft/ui/icons\";\n\nimport {\n\tOrder,\n\tOrderAddon,\n\tOrderAddonOption,\n\tOrderItem,\n\tOrderStatus,\n\tOrderType,\n\tSelectedAddons,\n} from \"./models\";\n\nimport * as addonModels from \"../addon/models\";\nimport * as branchModels from \"../branch/models\";\nimport { OrderErrors } from \"./constants\";\n\nexport const calculatSingleAddonTotalPrice = (addon: OrderAddon) => {\n\treturn addon.options.reduce((sum, option) => sum + option.price, 0);\n};\n\nexport function calculateTotalAddonPrice(addons: OrderAddon[] = [], quantity: number = 1): number {\n\tconst totalAddonsPriceForSingleItem = addons.reduce((total, addon) => {\n\t\tconst addonTotal = calculatSingleAddonTotalPrice(addon);\n\t\treturn total + addonTotal;\n\t}, 0);\n\n\treturn quantity * totalAddonsPriceForSingleItem;\n}\n\nexport const getOrderPrice = (order: Order, currency: string, language: string) => {\n\tconst calculateItemTotal = (price: number, quantity: number, addons: OrderAddon[]) => {\n\t\treturn quantity * price + calculateTotalAddonPrice(addons, quantity);\n\t};\n\n\tlet totalWithoutTax = 0;\n\tlet totalTax = 0;\n\n\tfor (const item of order.items) {\n\t\tconst itemTotal = calculateItemTotal(item.price, item.quantity, item.addons);\n\t\ttotalWithoutTax += itemTotal;\n\n\t\tif (order.vat === undefined && item.vat) {\n\t\t\ttotalTax += (itemTotal * item.vat) / 100;\n\t\t}\n\t}\n\n\tif (order.vat !== undefined) {\n\t\ttotalTax = (totalWithoutTax * order.vat) / 100;\n\t}\n\n\tconst totalWithTax = totalWithoutTax + totalTax;\n\n\treturn {\n\t\ttotalWithoutTax,\n\t\ttotalWithoutTaxFormatted: priceFormatter(totalWithoutTax, currency, language),\n\t\ttotalTax,\n\t\ttotalTaxFormatted: priceFormatter(totalTax, currency, language),\n\t\ttotalWithTax,\n\t\ttotalWithTaxFormatted: priceFormatter(totalWithTax, currency, language),\n\t};\n};\n\nexport const generateOrderItemsId = (\n\tproductId: number,\n\tvariantId: number | null,\n\tselectedAddons?: SelectedAddons\n): string => {\n\tif (!productId) throw new Error(\"Product ID is required\");\n\n\t// Build the order items ID base with productId and variantId\n\tlet orderItemsId = `${productId}`;\n\tif (variantId) {\n\t\torderItemsId += `-${variantId}`;\n\t}\n\n\t// Build the addon part of the ID\n\tconst addonIdsPart = Object.entries(selectedAddons || {})\n\t\t.map(([addonId, option]) => {\n\t\t\tif (!addonId || !option) return null; // Skip invalid entries\n\t\t\tconst optionIds = Array.isArray(option)\n\t\t\t\t? sortNumbers(option).filter(Boolean).join(\"-\")\n\t\t\t\t: `${option}`;\n\t\t\tif (!optionIds) return null;\n\t\t\treturn `${addonId}-${optionIds}`;\n\t\t})\n\t\t.filter(Boolean) // Remove null/undefined values\n\t\t.join(\"-\");\n\n\t// Append addonIdsPart if it's not empty\n\tif (addonIdsPart) {\n\t\torderItemsId += `-${addonIdsPart}`;\n\t}\n\n\treturn orderItemsId;\n};\n\nexport const getOrderItemPrice = (orderItem: OrderItem) => {\n\tconst { price, variant, addons, quantity, vat } = orderItem || {};\n\tconst basePrice = variant?.price ?? price;\n\tconst addonsPrice = calculateTotalAddonPrice(addons, 1); // single item's addon price\n\n\tconst itemNetPrice = basePrice + addonsPrice;\n\t// Currently VAT is applied only on basePrice, not on addons\n\t// TODO: Re-evaluate for European market where tax may apply to addons too\n\tconst itemTax = basePrice * (vat / 100);\n\tconst itemGrossPrice = itemNetPrice + itemTax;\n\n\tconst totalNet = itemNetPrice * quantity;\n\tconst totalTax = itemTax * quantity;\n\tconst totalGross = itemGrossPrice * quantity;\n\n\treturn {\n\t\ttotalGross,\n\t\ttotalNet,\n\t\ttotalTax,\n\t\titemGrossPrice,\n\t\titemNetPrice,\n\t\titemTax,\n\t};\n};\n\nexport const getSelectedAddonsFromOrderItems = (item: OrderItem): SelectedAddons => {\n\tconst selectedAddons: SelectedAddons = {};\n\n\tfor (const { addonId, options = [] } of item.addons || []) {\n\t\tconst optionIds = options.map(({ optionId }) => optionId);\n\t\tselectedAddons[addonId] = optionIds.length === 1 ? optionIds[0] : optionIds;\n\t}\n\n\treturn selectedAddons;\n};\n\nexport const getStatusIcon = (status: OrderStatus): IconType => {\n\tswitch (status) {\n\t\tcase OrderStatus.COMPLETED:\n\t\t\treturn Check;\n\t\tcase OrderStatus.DELIVERED:\n\t\t\treturn BagCheck;\n\t\tcase OrderStatus.OUT_FOR_DELIVERY:\n\t\t\treturn Delivery;\n\t\tcase OrderStatus.PREPARING:\n\t\t\treturn Chef;\n\t\tcase OrderStatus.CONFIRMED:\n\t\t\treturn FileCheck;\n\t\tcase OrderStatus.PENDING:\n\t\t\treturn HourglassHalf;\n\n\t\tdefault:\n\t\t\treturn HourglassHalf;\n\t}\n};\n\nexport const buildSelectedAddonsPayload = (\n\tproductAddons: addonModels.MenuAddon[] = [],\n\tselectedAddons: SelectedAddons = {}\n): OrderAddon[] => {\n\treturn Object.entries(selectedAddons).map(([addonIdStr, selected]) => {\n\t\tconst addonId = Number(addonIdStr);\n\t\tconst selectedOptionIds = Array.isArray(selected) ? selected : [selected];\n\n\t\tconst addon = productAddons.find((addon) => addon.id === addonId);\n\t\tif (isEmpty(addon)) {\n\t\t\treturn {\n\t\t\t\taddonId,\n\t\t\t\toptions: [],\n\t\t\t};\n\t\t}\n\n\t\tconst options: OrderAddonOption[] = (addon.options || [])\n\t\t\t.filter((option) => selectedOptionIds.includes(option.id))\n\t\t\t.map((option) => ({\n\t\t\t\toptionId: option.id,\n\t\t\t\tprice: option.price,\n\t\t\t}));\n\n\t\treturn {\n\t\t\taddonId,\n\t\t\toptions,\n\t\t};\n\t});\n};\n\nexport const getDefaultOrderType = (\n\tsettings: branchModels.BranchSettings,\n\tisOpen: boolean,\n\tisDelivering: boolean\n): OrderType | null => {\n\tif (!settings) return null;\n\n\tconst { deliveryOrderEnabled, dineInOrderEnabled, pickupOrderEnabled } = settings;\n\n\tif (deliveryOrderEnabled && isDelivering) {\n\t\treturn OrderType.DELIVERY;\n\t}\n\n\tif (dineInOrderEnabled && isOpen) {\n\t\treturn OrderType.DINE_IN;\n\t}\n\n\tif (pickupOrderEnabled && isOpen) {\n\t\treturn OrderType.PICK_UP;\n\t}\n\n\treturn null;\n};\n\nexport const getOrderErrorMessages = (field: keyof Order) => {\n\tswitch (field) {\n\t\tcase \"customer\":\n\t\t\treturn OrderErrors.ADDRESS_IS_EMPTY;\n\n\t\tcase \"tableId\":\n\t\t\treturn OrderErrors.TABLE_NOT_SELECTED;\n\n\t\tcase \"items\":\n\t\t\treturn OrderErrors.EMPTY_ITEMS;\n\n\t\tcase \"branchId\":\n\t\t\treturn OrderErrors.BRANCH_NOT_SELECTED;\n\n\t\tdefault:\n\t\t\treturn OrderErrors.FIELD_REQUIRED_ERROR;\n\t}\n};\n","export const MODALS = {\n\tADD_UPDATE_NOTES: \"ADD_UPDATE_NOTES\",\n\tAUTH: \"AUTH\",\n\tADD_UPDATE_ADDRESS: \"ADD_UPDATE_ADDRESS\",\n\tBRANCH_BUSINESS_HOURS: \"BRANCH_BUSINESS_HOURS\",\n\tPRODUCT_DETAILS: \"PRODUCT_DETAILS\",\n};\n\nexport const SUPPORTED_LOCALES = [\"en\", \"az\", \"nl\", \"et\", \"tr\", \"ru\"];\nexport const SUPPORTED_COUNTRIES = [\n\t{\n\t\tname: \"Azerbaijan\",\n\t\tcode: \"AZ\",\n\t\tphoneCode: \"+994\",\n\t},\n];\n\nexport const CO_DOMAIN = \"restaround.co\";\nexport const AZ_DOMAIN = \"restaround.az\";\nexport const EE_DOMAIN = \"restaround.ee\";\nexport const NL_DOMAIN = \"restaround.nl\";\n\nexport const DEFAULT_HOSTNAME = CO_DOMAIN;\n\nexport const DOMAINS = [CO_DOMAIN, AZ_DOMAIN, EE_DOMAIN, NL_DOMAIN]; // Supported domains list\n\nexport const IMAGE_BASE_URL = \"https://images.restaround.co\";\n","import { CO_DOMAIN, DOMAINS, IMAGE_BASE_URL } from \"./constants\";\n\ninterface ValidationResult {\n\tisValid: boolean;\n\terror?: string;\n}\n\ntype Validator = (cleanedNumber: string) => ValidationResult;\n\nconst validators: Record<string, Validator> = {\n\t\"994\": (number) => {\n\t\tconst AZERBAIJANI_PREFIXES = [\"50\", \"51\", \"10\", \"55\", \"99\", \"70\", \"77\", \"60\"];\n\t\tconst pattern = new RegExp(`^(${AZERBAIJANI_PREFIXES.join(\"|\")})\\\\d{7}$`);\n\n\t\tif (!pattern.test(number)) {\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t\terror: `Azerbaijani numbers must be 9 digits and start with ${AZERBAIJANI_PREFIXES.join(\n\t\t\t\t\t\", \"\n\t\t\t\t)}`,\n\t\t\t};\n\t\t}\n\n\t\treturn { isValid: true };\n\t},\n\n\t\"31\": (number) => {\n\t\tconst pattern = /^\\d{9}$/;\n\n\t\tif (!pattern.test(number)) {\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t\terror: \"Dutch numbers must be exactly 9 digits\",\n\t\t\t};\n\t\t}\n\n\t\treturn { isValid: true };\n\t},\n};\n\nexport function validatePhoneNumber(phoneNumber: string): ValidationResult {\n\tif (!phoneNumber) {\n\t\treturn { isValid: false, error: \"FIELD_REQUIRED\" };\n\t}\n\n\tconst cleaned = phoneNumber.replace(/\\D/g, \"\");\n\n\tconst countryCode = cleaned.startsWith(\"994\") ? \"994\" : cleaned.startsWith(\"31\") ? \"31\" : null;\n\n\tif (!countryCode) {\n\t\treturn { isValid: false, error: \"Unsupported country code\" };\n\t}\n\n\tconst nationalNumber = cleaned.slice(countryCode.length);\n\tconst validator = validators[countryCode];\n\n\treturn validator(nationalNumber);\n}\n\nexport const getBaseUrl = (hostname: string, language: string) => {\n\tconst locale = language || \"en\";\n\t// Local env\n\tif (hostname === \"localhost:3000\") {\n\t\treturn { url: `http://localhost:3000/${locale}`, domain: CO_DOMAIN };\n\t}\n\t// Prod env\n\tconst domain = DOMAINS.includes(hostname) ? hostname : CO_DOMAIN;\n\treturn { url: `https://${domain}/${locale}`, domain };\n};\n\nexport const getTLD = (language: string) => {\n\treturn language === \"az\" ? \"az\" : \"co\";\n};\n\nexport const getRegisterUrl = (language: string, source: string) => {\n\tconst tld = getTLD(language);\n\n\treturn `https://app.restaround.${tld}/auth/register?lang=${language}&utm_source=${source}`;\n};\n\nexport const getImageSource = (image?: string) => {\n\tif (!image) return \"\";\n\n\tif (image.includes(\"base64\") || image.startsWith(\"https://\")) return image;\n\n\treturn `${IMAGE_BASE_URL}/${image}`;\n};\n\nexport const getLogoImageSource = (logoImage?: string) => {\n\tif (!logoImage) return \"https://images.restaround.co/no-photo-128.webp\";\n\n\tif (logoImage.includes(\"base64\") || logoImage.startsWith(\"https://\")) return logoImage;\n\n\treturn `${IMAGE_BASE_URL}/${logoImage}`;\n};\n\nexport const getCoverPhotoSource = (coverPhoto?: string) => {\n\tif (!coverPhoto) return \"https://images.restaround.co/restaround-doodle.webp\";\n\n\tif (coverPhoto.includes(\"base64\") || coverPhoto.startsWith(\"https://\")) return coverPhoto;\n\n\treturn `${IMAGE_BASE_URL}/${coverPhoto}`;\n};\n\nconst keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\nconst triplet = (e1: number, e2: number, e3: number) =>\n\tkeyStr.charAt(e1 >> 2) +\n\tkeyStr.charAt(((e1 & 3) << 4) | (e2 >> 4)) +\n\tkeyStr.charAt(((e2 & 15) << 2) | (e3 >> 6)) +\n\tkeyStr.charAt(e3 & 63);\n\nexport const rgbDataURL = (r: number, g: number, b: number) =>\n\t`data:image/gif;base64,R0lGODlhAQABAPAA${\n\t\ttriplet(0, r, g) + triplet(b, 255, 255)\n\t}/yH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==`;\n\nexport const getVideoSource = (video?: string) => {\n\tif (!video) return \"\";\n\n\tif (video.includes(\"base64\") || video.startsWith(\"https://\")) return video;\n\n\treturn `${IMAGE_BASE_URL}/${video}`;\n};\n","export enum CustomerAuthStep {\n\tPHONE = \"PHONE\",\n\tOTP = \"OTP\",\n\tEMAIL = \"EMAIL\",\n}\n\nexport enum CustomerAddressType {\n\tHOME = \"HOME\",\n\tWORK = \"WORK\",\n\tTRAVEL = \"TRAVEL\",\n}\n\nexport interface CustomerAddress {\n\tid?: number;\n\taddressId?: number; // Update address temporary\n\tcountryCode: string;\n\tcityName: string;\n\tstreet: string;\n\thouseNumber: string;\n\tadditionalNumber?: string;\n\tpostCode?: string;\n\tinstructions?: string;\n\tfloor?: number;\n\tlongitude?: number;\n\tlatitude?: number;\n\ttitle?: string;\n\ttype?: CustomerAddressType;\n}\n\nexport interface CustomerAuthForm {\n\tphoneNumber: string;\n\totp: string;\n\temail: string;\n}\n\nexport interface CustomerAuthPhoneForm {\n\tcountryCode: string;\n\tphoneNumber: string;\n}\n\nexport interface AuthResponse {\n\taccessToken: string;\n\trefreshToken: string;\n}\n\nexport interface Customer {\n\tid?: number;\n\temail: string;\n\tphoneNumber: string;\n\tfullName: string;\n\tsmsVerified?: boolean;\n\temailVerified?: boolean;\n\taddress?: CustomerAddress;\n\taddresses?: CustomerAddress[];\n}\n\nexport type CustomerUpdatePayload = Partial<Customer>;\n","import { FormErrors } from \"@sorocraft/ui\";\nimport { checkIsValidEmail } from \"@sorocraft/js-utils\";\n\nimport * as viewUtils from \"src/modules/view/utils\";\n\nimport {\n\tCustomerAddress,\n\tCustomerAuthForm,\n\tCustomerAuthPhoneForm,\n\tCustomerAuthStep,\n} from \"./models\";\n\nexport const preparePhoneNumber = (form: CustomerAuthPhoneForm) => {\n\tconst phoneNumber = `${form.countryCode}${form.phoneNumber}`.replaceAll(\"+\", \"\");\n\n\treturn phoneNumber;\n};\n\nexport const validateForm = (form: CustomerAuthForm, step: CustomerAuthStep): FormErrors => {\n\tconst errors: FormErrors = {};\n\tconst { phoneNumber, email, otp } = form || {};\n\n\tswitch (step) {\n\t\tcase CustomerAuthStep.PHONE: {\n\t\t\tconst { isValid, error } = viewUtils.validatePhoneNumber(phoneNumber);\n\t\t\tif (!isValid) errors.phoneNumber = error;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase CustomerAuthStep.OTP: {\n\t\t\tconst { isValid, error } = viewUtils.validatePhoneNumber(phoneNumber);\n\t\t\tif (!isValid) errors.phoneNumber = error;\n\n\t\t\tif (!otp || otp.length !== 6) {\n\t\t\t\terrors.otp = \"Invalid OTP\";\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase CustomerAuthStep.EMAIL: {\n\t\t\tif (!email || !checkIsValidEmail(email)) {\n\t\t\t\terrors.email = \"Invalid Email Address\";\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\treturn errors;\n};\n\nexport const validateAddressForm = (form: CustomerAddress): FormErrors => {\n\tconst errors: FormErrors = {};\n\tconst { countryCode, cityName, street, houseNumber } = form || {};\n\n\tif (!countryCode) errors.countryCode = \"COUNTRY_REQUIRED\";\n\tif (!cityName) errors.cityName = \"CITY_REQUIRED\";\n\tif (!street) errors.street = \"STREET_REQUIRED\";\n\tif (!houseNumber) errors.houseNumber = \"STREET_NUMBER_REQUIRED\";\n\n\treturn errors;\n};\n\nexport const formatCityLine = (fields: (string | undefined)[]) => {\n\treturn (fields || []).filter(Boolean).join(\", \");\n};\n\nexport const formatAddressLine = (\n\tstreet: string,\n\thouseNumber: string,\n\tadditionalNumber: string\n) => {\n\tconst house = [houseNumber, additionalNumber].filter(Boolean).join(\"/\");\n\tconst fullAddress = [street, house].filter(Boolean).join(\" \");\n\n\treturn fullAddress;\n};\n","export enum Feature {\n\tUPLOAD_VIDEO = \"UPLOAD_VIDEO\",\n}\nexport enum FeatureSegment {\n\tALPHA = \"ALPHA\",\n\tBETA = \"BETA\",\n\tALL = \"ALL\",\n}\n","import { Feature, FeatureSegment } from \"./models\";\n\nexport const FEATURES_LIST: { [key in FeatureSegment]: Feature[] } = {\n\t[FeatureSegment.ALPHA]: [Feature.UPLOAD_VIDEO],\n\t[FeatureSegment.BETA]: [],\n\t[FeatureSegment.ALL]: [],\n};\n","import { getQueryParam } from \"@sorocraft/js-utils\";\n\nimport { FeatureSegment, type Feature } from \"./models\";\n\nimport { FEATURES_LIST } from \"./constants\";\n\nexport const getIsFeatureActive = (feature: Feature, businessSegment: FeatureSegment): boolean => {\n\t// Feature is force-enabled via query param\n\tif (getQueryParam(feature) === \"1\") return true;\n\n\t// Build the list of enabled segments for the current businessSegment\n\tconst enabledSegments: FeatureSegment[] =\n\t\tbusinessSegment === FeatureSegment.ALPHA\n\t\t\t? [FeatureSegment.ALPHA, FeatureSegment.BETA, FeatureSegment.ALL]\n\t\t\t: businessSegment === FeatureSegment.BETA\n\t\t\t? [FeatureSegment.BETA, FeatureSegment.ALL]\n\t\t\t: [FeatureSegment.ALL];\n\n\t// Check if feature exists in any of the enabled segments\n\treturn enabledSegments.some((segment) => FEATURES_LIST[segment]?.includes(feature));\n};\n","import { isEmpty } from \"@sorocraft/js-utils\";\nimport { Category, CategoryTranslation } from \"./models\";\n\nexport const getCategoryTranslation = (\n\tcategory: Category,\n\tlanguage: string\n): CategoryTranslation => {\n\treturn (category?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as CategoryTranslation;\n};\n\nexport const getCategoryNameById = (\n\tcategoryId: number,\n\tcategories: Category[],\n\tlanguage: string\n): string => {\n\tconst category = categories?.find?.(({ id }) => id === categoryId);\n\n\tif (isEmpty(category)) return \"\";\n\n\tconst { name } = getCategoryTranslation(category, language);\n\n\treturn name || \"\";\n};\n","import * as categoryModels from \"src/modules/category/models\";\nimport * as productModels from \"src/modules/product/models\";\n\nimport { CategoryProductMap } from \"./models\";\n\nexport const prepareCategoryAndProductMap = (\n\tcategories: categoryModels.Category[],\n\tproducts: productModels.Product[]\n): CategoryProductMap[] => {\n\tconst productMap = products.reduce<Record<number, productModels.Product[]>>((map, product) => {\n\t\tif (!product.visible) return map;\n\n\t\tconst categoryId = Number(product.categoryId);\n\t\tif (!map[categoryId]) {\n\t\t\tmap[categoryId] = [];\n\t\t}\n\t\tmap[categoryId].push(product);\n\t\treturn map;\n\t}, {});\n\n\treturn categories\n\t\t.map((category) => ({\n\t\t\t...category,\n\t\t\tproducts: (productMap[Number(category.id)] || []) as productModels.Product[],\n\t\t}))\n\t\t.filter((category) => category?.products?.length > 0);\n};\n"],"names":["getAddonTranslation","addon","language","_b","_a","translations","find","call","item","getAddonOptionTranslation","option","getOptionPrice","currency","price","totalPrice","formattedTotalPrice","priceFormatter","getAddonOptionRawPrice","optionId","options","id","getOptionTitles","optionIds","Array","isArray","filter","includes","map","t","title","Boolean","join","getAddonTitle","_c","ProductView","SellUnitType","MenuAddonSelectType","calculateTotalPrice","quantity","vat","getProductTranslation","product","getProductRawPrice","getProductPrice","getProductVariant","variantId","variants","getSelectedOptionsTotalPrice","selectedAddons","addons","Object","prototype","hasOwnProperty","reduce","total","addonId","selectType","SINGLE","selectedOptionId","multipleTotal","getProductVariantRawPrice","variant","getProductVariantPrice","getProductVariantTranslation","getProductOrderRawPrice","noVat","isEmpty","optionsPrice","productData","assign","selectedOptionsTotalPrice","getProductOrderPrice","getProductAddon","getPriceSuffix","sellUnitType","WEIGHT","VOLUME","getProductSellUnitShortCuts","OrderType","OrderStatus","OrderItemStatus","PaymentMethod","OrderStep","OrderErrors","CASH","CART","DETAILS","COMPLETED","calculatSingleAddonTotalPrice","sum","calculateTotalAddonPrice","getOrderPrice","order","calculateItemTotal","totalWithoutTax","totalTax","items","itemTotal","undefined","totalWithTax","totalWithoutTaxFormatted","totalTaxFormatted","totalWithTaxFormatted","generateOrderItemsId","productId","Error","orderItemsId","addonIdsPart","entries","sortNumbers","getOrderItemPrice","orderItem","basePrice","itemNetPrice","itemTax","itemGrossPrice","totalGross","totalNet","getSelectedAddonsFromOrderItems","length","getStatusIcon","status","Check","DELIVERED","BagCheck","OUT_FOR_DELIVERY","Delivery","PREPARING","Chef","CONFIRMED","FileCheck","PENDING","HourglassHalf","buildSelectedAddonsPayload","productAddons","addonIdStr","selected","Number","selectedOptionIds","getDefaultOrderType","settings","isOpen","isDelivering","deliveryOrderEnabled","dineInOrderEnabled","pickupOrderEnabled","DELIVERY","DINE_IN","PICK_UP","getOrderErrorMessages","field","ADDRESS_IS_EMPTY","TABLE_NOT_SELECTED","EMPTY_ITEMS","BRANCH_NOT_SELECTED","FIELD_REQUIRED_ERROR","CO_DOMAIN","DOMAINS","IMAGE_BASE_URL","validators","number","AZERBAIJANI_PREFIXES","RegExp","test","isValid","error","validatePhoneNumber","phoneNumber","cleaned","replace","countryCode","startsWith","nationalNumber","slice","validator","getBaseUrl","hostname","locale","url","domain","getTLD","getRegisterUrl","source","getImageSource","image","getLogoImageSource","logoImage","getCoverPhotoSource","coverPhoto","keyStr","triplet","e1","e2","e3","charAt","rgbDataURL","r","g","b","getVideoSource","video","CustomerAuthStep","CustomerAddressType","preparePhoneNumber","form","replaceAll","validateForm","step","errors","email","otp","PHONE","viewUtils.validatePhoneNumber","OTP","EMAIL","checkIsValidEmail","validateAddressForm","cityName","street","houseNumber","formatCityLine","fields","formatAddressLine","additionalNumber","Feature","FeatureSegment","FEATURES_LIST","ALPHA","UPLOAD_VIDEO","BETA","ALL","getIsFeatureActive","feature","businessSegment","getQueryParam","some","segment","getCategoryTranslation","category","getCategoryNameById","categoryId","categories","name","prepareCategoryAndProductMap","products","productMap","visible","push"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../../src/modules/addon/utils.ts","../../../src/modules/product/models.ts","../../../src/modules/addon/models.ts","../../../src/modules/product/utils.ts","../../../src/modules/order/models.ts","../../../src/modules/order/constants.ts","../../../src/modules/order/utils.ts","../../../src/modules/view/constants.ts","../../../src/modules/view/utils.ts","../../../src/modules/customer/models.ts","../../../src/modules/customer/utils.ts","../../../src/modules/feature/models.ts","../../../src/modules/feature/constants.ts","../../../src/modules/feature/utils.ts","../../../src/modules/category/utils.ts","../../../src/modules/menu/utils.ts","../../../src/modules/user/models.ts","../../../src/modules/user/utils.ts"],"sourcesContent":["import { priceFormatter } from \"@sorocraft/js-utils\";\n\nimport {\n\tMenuAddon,\n\tMenuAddonOption,\n\tMenuAddonOptionTranslation,\n\tMenuAddonTranslation,\n} from \"./models\";\n\nexport const getAddonTranslation = (addon: MenuAddon, language: string): MenuAddonTranslation => {\n\treturn (addon?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as MenuAddonTranslation;\n};\n\nexport const getAddonOptionTranslation = (\n\toption: MenuAddonOption,\n\tlanguage: string\n): MenuAddonOptionTranslation => {\n\treturn (option?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as MenuAddonOptionTranslation;\n};\n\nexport const getOptionPrice = ({\n\toption,\n\tcurrency,\n\tlanguage,\n}: {\n\toption: MenuAddonOption;\n\tcurrency?: string;\n\tlanguage?: string;\n}) => {\n\tconst { price } = option || {};\n\n\treturn {\n\t\ttotalPrice: price,\n\t\tformattedTotalPrice: priceFormatter(price, currency || \"USD\", language || \"en\"),\n\t};\n};\n\nexport const getAddonOptionRawPrice = (addon: MenuAddon, optionId: number): number => {\n\treturn (addon?.options || []).find(({ id }) => id === optionId)?.price || 0;\n};\n\nexport const getOptionTitles = (\n\toptions: MenuAddonOption[],\n\toptionIds: number | number[],\n\tlanguage: string\n): string => {\n\tif (Array.isArray(optionIds)) {\n\t\treturn (options || [])\n\t\t\t.filter(({ id }) => optionIds.includes(id))\n\t\t\t.map(({ translations }) => translations.find((t) => t.language === language)?.title || \"\")\n\t\t\t.filter(Boolean)\n\t\t\t.join(\", \");\n\t} else {\n\t\tconst option = (options || []).find(({ id }) => id === optionIds);\n\t\treturn option?.translations.find((t) => t.language === language)?.title || \"\";\n\t}\n};\n\nexport const getAddonTitle = (addon: MenuAddon, language: string): string => {\n\treturn addon?.translations?.find?.((t) => t.language === language)?.title || \"\";\n};\n","import { MenuAddon } from \"../addon/models\";\n\nexport interface ProductTranslation {\n\tid: number;\n\tname: string;\n\tdescription?: string;\n\tlanguage: string;\n\tproductId?: number;\n}\n\nexport interface ProductVariantTranslation {\n\tid?: number;\n\ttitle: string;\n\tlanguage: string;\n}\n\nexport interface ProductVariant {\n\tid?: number;\n\tprice: number;\n\ttranslations: ProductVariantTranslation[];\n\tproductId?: number;\n\tremove?: boolean;\n}\n\nexport interface Product {\n\tid: number;\n\tcategoryId: number;\n\tvat?: number;\n\tprice: number;\n\tvolume?: string; // 100qr/250ml/1kq\n\timage160?: string;\n\timage580?: string;\n\timage1024?: string;\n\ttranslations: ProductTranslation[];\n\tvariants: ProductVariant[];\n\taddons: MenuAddon[];\n\tavailable?: boolean;\n\tvisible?: boolean;\n\tposition?: number;\n\tvideoUrl?: string;\n\tsellUnitType?: SellUnitType;\n}\n\nexport enum ProductView {\n\tLIST = \"list\",\n\tGRID = \"grid\",\n}\n\nexport interface DashboardProduct extends Omit<Product, \"addons\"> {\n\taddons: number[];\n}\n\nexport enum SellUnitType {\n\tPIECE = \"PIECE\",\n\tWEIGHT = \"WEIGHT\",\n\tVOLUME = \"VOLUME\",\n}\n","export enum MenuAddonSelectType {\n\tSINGLE = \"SINGLE\",\n\tMULTIPLE = \"MULTIPLE\",\n}\n\nexport interface MenuAddonTranslation {\n\tid?: number;\n\ttitle: string;\n\tlanguage: string;\n}\n\nexport interface MenuAddonOptionTranslation {\n\tid?: number;\n\ttitle: string;\n\tlanguage: string;\n}\n\nexport interface MenuAddonOption {\n\tid?: number;\n\tprice: number;\n\ttranslations: MenuAddonOptionTranslation[];\n\tremove?: boolean;\n}\n\nexport interface MenuAddon {\n\tid?: number;\n\tselectType: MenuAddonSelectType;\n\ttranslations: MenuAddonTranslation[];\n\toptions: MenuAddonOption[];\n\tbusinessId?: number;\n}\n","import { isEmpty, priceFormatter } from \"@sorocraft/js-utils\";\n\nimport {\n\tProduct,\n\tProductTranslation,\n\tProductVariant,\n\tProductVariantTranslation,\n\tSellUnitType,\n} from \"./models\";\n\nimport { MenuAddon, MenuAddonSelectType } from \"src/modules/addon/models\";\nimport { getAddonOptionRawPrice } from \"src/modules/addon/utils\";\nimport * as orderModels from \"src/modules/order/models\";\n\nexport const calculateTotalPrice = (price: number = 0, quantity: number = 1, vat: number = 0) => {\n\treturn price * quantity * (1 + vat / 100);\n};\n\nexport const getProductTranslation = (\n\tproduct: Pick<Product, \"translations\">,\n\tlanguage: string,\n): ProductTranslation => {\n\treturn (product?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as ProductTranslation;\n};\n\nexport const getProductRawPrice = (\n\tproduct: Pick<Product, \"price\" | \"vat\">,\n\tquantity: number = 1,\n) => {\n\tconst { price = 0, vat = 0 } = product || {};\n\treturn calculateTotalPrice(price, quantity, vat);\n};\n\nexport const getProductPrice = (\n\tproduct: Pick<Product, \"price\" | \"vat\">,\n\tcurrency: string,\n\tlanguage: string,\n\tquantity: number = 1,\n) => {\n\tconst totalPrice = getProductRawPrice(product, quantity);\n\n\treturn {\n\t\ttotalPrice: totalPrice,\n\t\tformattedTotalPrice: priceFormatter(totalPrice, currency, language),\n\t};\n};\n\nexport const getProductVariant = (\n\tproduct: Pick<Product, \"variants\">,\n\tvariantId: number,\n): ProductVariant => {\n\treturn product?.variants?.find?.((item) => item.id === variantId) || ({} as ProductVariant);\n};\n\nexport const getSelectedOptionsTotalPrice = (\n\tproduct: Product,\n\tselectedAddons: orderModels.SelectedAddons = {},\n\tquantity: number,\n): number => {\n\t// Filter addons that are selected by the user\n\tconst selectedAddonsList = (product?.addons || []).filter((addon) =>\n\t\tObject.prototype.hasOwnProperty.call(selectedAddons, addon.id),\n\t);\n\n\t// Calculate the total price\n\tconst optionsTotalPrice = selectedAddonsList.reduce((total: number, addon: MenuAddon) => {\n\t\tconst { id: addonId, selectType } = addon;\n\n\t\t// Handle SINGLE selection\n\t\tif (selectType === MenuAddonSelectType.SINGLE) {\n\t\t\tconst selectedOptionId = selectedAddons[addonId] as number;\n\t\t\treturn total + getAddonOptionRawPrice(addon, selectedOptionId);\n\t\t}\n\n\t\t// Handle MULTIPLE selection\n\t\tconst selectedOptionIds = (selectedAddons[addonId] || []) as number[];\n\t\tconst multipleOptionsPrice = selectedOptionIds.reduce(\n\t\t\t(multipleTotal, optionId) => multipleTotal + getAddonOptionRawPrice(addon, optionId),\n\t\t\t0,\n\t\t);\n\n\t\treturn total + multipleOptionsPrice;\n\t}, 0);\n\n\treturn optionsTotalPrice * quantity;\n};\n\nexport const getProductVariantRawPrice = (\n\tvariantId: number,\n\tproduct: Pick<Product, \"variants\" | \"vat\">,\n\tquantity?: number,\n) => {\n\tconst variant = getProductVariant(product, variantId);\n\tconst { vat } = product || {};\n\tconst { price } = variant || {};\n\treturn calculateTotalPrice(price, quantity, vat);\n};\n\nexport const getProductVariantPrice = ({\n\tvariantId,\n\tcurrency = \"USD\",\n\tlanguage = \"en\",\n\tproduct,\n\tquantity = 1,\n}: {\n\tvariantId: number;\n\tcurrency?: string;\n\tlanguage?: string;\n\tproduct: Pick<Product, \"variants\" | \"vat\">;\n\tquantity?: number;\n}) => {\n\tconst totalPrice = getProductVariantRawPrice(variantId, product, quantity);\n\n\treturn {\n\t\ttotalPrice: totalPrice,\n\t\tformattedTotalPrice: priceFormatter(totalPrice, currency, language),\n\t};\n};\n\nexport const getProductVariantTranslation = (\n\tvariant: ProductVariant,\n\tlanguage: string,\n): ProductVariantTranslation => {\n\treturn (variant?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as ProductVariantTranslation;\n};\n\nexport const getProductOrderRawPrice = ({\n\tproduct,\n\tvariantId,\n\tquantity = 1,\n\tselectedAddons,\n\tnoVat = false,\n}: {\n\tproduct: Product;\n\tvariantId: number | null;\n\tquantity: number;\n\tselectedAddons: orderModels.SelectedAddons;\n\tnoVat?: boolean;\n}): { price: number; optionsPrice: number; total: number } => {\n\tif (isEmpty(product)) return { price: 0, optionsPrice: 0, total: 0 };\n\n\tconst productData: Product = { ...product, vat: noVat ? 0 : product.vat };\n\tconst selectedOptionsTotalPrice = getSelectedOptionsTotalPrice(\n\t\tproductData,\n\t\tselectedAddons,\n\t\tquantity,\n\t);\n\tconst price = variantId\n\t\t? getProductVariantRawPrice(variantId, productData, quantity)\n\t\t: getProductRawPrice(productData, quantity);\n\n\treturn {\n\t\tprice,\n\t\toptionsPrice: selectedOptionsTotalPrice,\n\t\ttotal: price + selectedOptionsTotalPrice,\n\t};\n};\n\nexport const getProductOrderPrice = ({\n\tproduct,\n\tvariantId,\n\tquantity = 1,\n\tcurrency,\n\tlanguage,\n\tselectedAddons,\n\tnoVat = false,\n}: {\n\tproduct: Product;\n\tvariantId: number | null;\n\tquantity: number;\n\tcurrency: string;\n\tlanguage: string;\n\tselectedAddons: orderModels.SelectedAddons;\n\tnoVat?: boolean;\n}) => {\n\tconst { total } = getProductOrderRawPrice({\n\t\tproduct,\n\t\tvariantId,\n\t\tquantity,\n\t\tselectedAddons,\n\t\tnoVat,\n\t});\n\n\treturn {\n\t\ttotalPrice: total,\n\t\tformattedTotalPrice: priceFormatter(total, currency, language),\n\t};\n};\n\nexport const getProductAddon = (product: Product, addonId: number): MenuAddon => {\n\treturn (product?.addons || []).find(({ id }) => id === addonId) || ({} as MenuAddon);\n};\n\nexport const getPriceSuffix = (sellUnitType: SellUnitType) => {\n\tswitch (sellUnitType) {\n\t\tcase SellUnitType.WEIGHT:\n\t\t\treturn \" / kg\";\n\t\tcase SellUnitType.VOLUME:\n\t\t\treturn \" / l\";\n\n\t\tdefault:\n\t\t\treturn \"\";\n\t}\n};\n\nexport const getProductSellUnitShortCuts = (sellUnitType: SellUnitType) => {\n\tswitch (sellUnitType) {\n\t\tcase SellUnitType.WEIGHT:\n\t\t\treturn {\n\t\t\t\t\"50gr\": 0.05,\n\t\t\t\t\"100gr\": 0.1,\n\t\t\t\t\"150gr\": 0.15,\n\t\t\t\t\"200gr\": 0.2,\n\t\t\t\t\"250gr\": 0.25,\n\t\t\t\t\"300gr\": 0.3,\n\t\t\t\t\"350gr\": 0.35,\n\t\t\t\t\"400gr\": 0.4,\n\t\t\t\t\"450gr\": 0.45,\n\t\t\t\t\"500gr\": 0.5,\n\t\t\t\t\"600gr\": 0.6,\n\t\t\t\t\"700gr\": 0.7,\n\t\t\t\t\"750gr\": 0.75,\n\t\t\t\t\"800gr\": 0.8,\n\t\t\t\t\"850gr\": 0.85,\n\t\t\t\t\"900gr\": 0.9,\n\t\t\t\t\"950gr\": 0.95,\n\t\t\t\t\"1kg\": 1,\n\t\t\t\t\"2kg\": 2,\n\t\t\t\t\"5kg\": 5,\n\t\t\t\t\"10kg\": 10,\n\t\t\t\t\"20kg\": 20,\n\t\t\t};\n\t\tcase SellUnitType.VOLUME:\n\t\t\treturn {\n\t\t\t\t\"50ml\": 0.05,\n\t\t\t\t\"100ml\": 0.1,\n\t\t\t\t\"150ml\": 0.15,\n\t\t\t\t\"200ml\": 0.2,\n\t\t\t\t\"250ml\": 0.25,\n\t\t\t\t\"300ml\": 0.3,\n\t\t\t\t\"350ml\": 0.35,\n\t\t\t\t\"400ml\": 0.4,\n\t\t\t\t\"450ml\": 0.45,\n\t\t\t\t\"500ml\": 0.5,\n\t\t\t\t\"600ml\": 0.6,\n\t\t\t\t\"700ml\": 0.7,\n\t\t\t\t\"750ml\": 0.75,\n\t\t\t\t\"800ml\": 0.8,\n\t\t\t\t\"850ml\": 0.85,\n\t\t\t\t\"900ml\": 0.9,\n\t\t\t\t\"950ml\": 0.95,\n\t\t\t\t\"1l\": 1,\n\t\t\t\t\"2l\": 2,\n\t\t\t\t\"5l\": 5,\n\t\t\t\t\"10l\": 10,\n\t\t\t\t\"20l\": 20,\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {};\n\t}\n};\n","import * as customerModels from \"../customer/models\";\nimport * as productModels from \"../product/models\";\n\nexport enum OrderType {\n\tDINE_IN = \"DINE_IN\",\n\tPICK_UP = \"PICK_UP\",\n\tDELIVERY = \"DELIVERY\",\n}\n\nexport enum OrderStatus {\n\tDRAFT = \"DRAFT\",\n\tPENDING = \"PENDING\",\n\tCONFIRMED = \"CONFIRMED\",\n\tPREPARING = \"PREPARING\",\n\tREADY = \"READY\",\n\tOUT_FOR_DELIVERY = \"OUT_FOR_DELIVERY\",\n\tDELIVERED = \"DELIVERED\",\n\tCOMPLETED = \"COMPLETED\",\n\tCANCELLED = \"CANCELLED\",\n\tFAILED = \"FAILED\",\n}\n\nexport enum OrderItemStatus {\n\tPENDING = \"PENDING\",\n\tPREPARING = \"PREPARING\",\n\tREADY = \"READY\",\n\tSERVED = \"SERVED\",\n}\n\nexport enum PaymentMethod {\n\tCASH = \"CASH\",\n\tCARD = \"CARD\",\n\tWALLET = \"WALLET\",\n\tTERMINAL = \"TERMINAL\",\n}\n\nexport interface OrderAddonOption {\n\toptionId: number;\n\tprice: number;\n}\n\nexport interface OrderAddon {\n\tid?: number;\n\taddonId: number;\n\toptions: OrderAddonOption[];\n}\n\nexport interface SelectedAddons {\n\t[key: number]: number | number[];\n}\n\nexport interface OrderItemVariant {\n\tid?: number;\n\tvariantId: number;\n\tprice: number;\n}\n\nexport interface OrderItem {\n\tid?: number;\n\tproductId: number;\n\torderId?: number;\n\tquantity: number;\n\tprice: number;\n\tvariant?: OrderItemVariant;\n\taddons: OrderAddon[];\n\tnote?: string;\n\tstatus?: OrderItemStatus;\n\tvat?: number;\n\tisPaid?: boolean;\n\tsellUnitType: productModels.SellUnitType;\n}\n\nexport interface Order {\n\tid?: number;\n\tbusinessId?: number;\n\tbranchId?: number;\n\tworkingDayId?: number;\n\ttableId?: number;\n\temployeeId?: number;\n\torderType: OrderType;\n\ttotalPriceWithTax: number;\n\ttotalPriceWithTaxAndFees?: number;\n\ttotalPriceWithoutTax: number;\n\ttotalTax: number;\n\titems: OrderItem[];\n\tstatus?: OrderStatus;\n\tvat?: number;\n\tpaymentMethod?: PaymentMethod;\n\tnote?: string;\n\tcreatedAt?: number;\n\tupdatedAt?: number;\n\tcustomer?: customerModels.Customer;\n\tdeliveryFee?: number;\n}\n\nexport interface OrderItems {\n\t[key: string]: OrderItem;\n}\n\nexport enum OrderStep {\n\tCART = \"CART\",\n\tDETAILS = \"DETAILS\",\n\tCOMPLETED = \"COMPLETED\",\n}\n\nexport interface OrderPayload extends Order {\n\tcustomerAddressId: number;\n\tcustomerId: number;\n}\n\nexport type OrderPriceDetails = {\n\ttotalPriceWithTax: number;\n\ttotalPriceWithTaxAndFees: number;\n\ttotalPriceWithoutTax: number;\n\ttotalTax: number;\n};\n\nexport type OrderFormattedPriceDetails = {\n\ttotalPriceWithTax: string;\n\ttotalPriceWithTaxAndFees: string;\n\ttotalPriceWithoutTax: string;\n\ttotalTax: string;\n};\n","import { OrderStep, PaymentMethod } from \"./models\";\n\nexport const initialOrder = {\n\torderType: null,\n\ttotalPriceWithTax: 0,\n\ttotalPriceWithoutTax: 0,\n\ttotalTax: 0,\n\tvat: 0,\n\tpaymentMethod: PaymentMethod.CASH,\n};\n\nexport const ORDER_STEPS = [OrderStep.CART, OrderStep.DETAILS, OrderStep.COMPLETED];\n\nexport enum OrderErrors {\n\tFIELD_REQUIRED_ERROR = \"This field is required\",\n\tTABLE_NOT_SELECTED = \"Please select a table\",\n\tADDRESS_IS_EMPTY = \"Please enter an address\",\n\tEMPTY_ITEMS = \"Please choose product\",\n\tBRANCH_NOT_SELECTED = \"Please select a branch\",\n}\n","import { isEmpty, priceFormatter, sortNumbers } from \"@sorocraft/js-utils\";\nimport { IconType } from \"@sorocraft/ui\";\nimport { Check, BagCheck, Delivery, Chef, FileCheck, HourglassHalf } from \"@sorocraft/ui/icons\";\n\nimport {\n\tOrder,\n\tOrderAddon,\n\tOrderAddonOption,\n\tOrderItem,\n\tOrderStatus,\n\tOrderType,\n\tSelectedAddons,\n} from \"./models\";\n\nimport * as addonModels from \"../addon/models\";\nimport * as branchModels from \"../branch/models\";\nimport { OrderErrors } from \"./constants\";\n\nexport const calculatSingleAddonTotalPrice = (addon: OrderAddon) => {\n\treturn addon.options.reduce((sum, option) => sum + option.price, 0);\n};\n\nexport function calculateTotalAddonPrice(addons: OrderAddon[] = [], quantity: number = 1): number {\n\tconst totalAddonsPriceForSingleItem = addons.reduce((total, addon) => {\n\t\tconst addonTotal = calculatSingleAddonTotalPrice(addon);\n\t\treturn total + addonTotal;\n\t}, 0);\n\n\treturn quantity * totalAddonsPriceForSingleItem;\n}\n\nexport const getOrderPrice = (order: Order, currency: string, language: string) => {\n\tconst calculateItemTotal = (price: number, quantity: number, addons: OrderAddon[]) => {\n\t\treturn quantity * price + calculateTotalAddonPrice(addons, quantity);\n\t};\n\n\tlet totalWithoutTax = 0;\n\tlet totalTax = 0;\n\n\tfor (const item of order.items) {\n\t\tconst itemTotal = calculateItemTotal(item.price, item.quantity, item.addons);\n\t\ttotalWithoutTax += itemTotal;\n\n\t\tif (order.vat === undefined && item.vat) {\n\t\t\ttotalTax += (itemTotal * item.vat) / 100;\n\t\t}\n\t}\n\n\tif (order.vat !== undefined) {\n\t\ttotalTax = (totalWithoutTax * order.vat) / 100;\n\t}\n\n\tconst totalWithTax = totalWithoutTax + totalTax;\n\n\treturn {\n\t\ttotalWithoutTax,\n\t\ttotalWithoutTaxFormatted: priceFormatter(totalWithoutTax, currency, language),\n\t\ttotalTax,\n\t\ttotalTaxFormatted: priceFormatter(totalTax, currency, language),\n\t\ttotalWithTax,\n\t\ttotalWithTaxFormatted: priceFormatter(totalWithTax, currency, language),\n\t};\n};\n\nexport const generateOrderItemsId = (\n\tproductId: number,\n\tvariantId: number | null,\n\tselectedAddons?: SelectedAddons\n): string => {\n\tif (!productId) throw new Error(\"Product ID is required\");\n\n\t// Build the order items ID base with productId and variantId\n\tlet orderItemsId = `${productId}`;\n\tif (variantId) {\n\t\torderItemsId += `-${variantId}`;\n\t}\n\n\t// Build the addon part of the ID\n\tconst addonIdsPart = Object.entries(selectedAddons || {})\n\t\t.map(([addonId, option]) => {\n\t\t\tif (!addonId || !option) return null; // Skip invalid entries\n\t\t\tconst optionIds = Array.isArray(option)\n\t\t\t\t? sortNumbers(option).filter(Boolean).join(\"-\")\n\t\t\t\t: `${option}`;\n\t\t\tif (!optionIds) return null;\n\t\t\treturn `${addonId}-${optionIds}`;\n\t\t})\n\t\t.filter(Boolean) // Remove null/undefined values\n\t\t.join(\"-\");\n\n\t// Append addonIdsPart if it's not empty\n\tif (addonIdsPart) {\n\t\torderItemsId += `-${addonIdsPart}`;\n\t}\n\n\treturn orderItemsId;\n};\n\nexport const getOrderItemPrice = (orderItem: OrderItem) => {\n\tconst { price, variant, addons, quantity, vat } = orderItem || {};\n\tconst basePrice = variant?.price ?? price;\n\tconst addonsPrice = calculateTotalAddonPrice(addons, 1); // single item's addon price\n\n\tconst itemNetPrice = basePrice + addonsPrice;\n\t// Currently VAT is applied only on basePrice, not on addons\n\t// TODO: Re-evaluate for European market where tax may apply to addons too\n\tconst itemTax = basePrice * (vat / 100);\n\tconst itemGrossPrice = itemNetPrice + itemTax;\n\n\tconst totalNet = itemNetPrice * quantity;\n\tconst totalTax = itemTax * quantity;\n\tconst totalGross = itemGrossPrice * quantity;\n\n\treturn {\n\t\ttotalGross,\n\t\ttotalNet,\n\t\ttotalTax,\n\t\titemGrossPrice,\n\t\titemNetPrice,\n\t\titemTax,\n\t};\n};\n\nexport const getSelectedAddonsFromOrderItems = (item: OrderItem): SelectedAddons => {\n\tconst selectedAddons: SelectedAddons = {};\n\n\tfor (const { addonId, options = [] } of item.addons || []) {\n\t\tconst optionIds = options.map(({ optionId }) => optionId);\n\t\tselectedAddons[addonId] = optionIds.length === 1 ? optionIds[0] : optionIds;\n\t}\n\n\treturn selectedAddons;\n};\n\nexport const getStatusIcon = (status: OrderStatus): IconType => {\n\tswitch (status) {\n\t\tcase OrderStatus.COMPLETED:\n\t\t\treturn Check;\n\t\tcase OrderStatus.DELIVERED:\n\t\t\treturn BagCheck;\n\t\tcase OrderStatus.OUT_FOR_DELIVERY:\n\t\t\treturn Delivery;\n\t\tcase OrderStatus.PREPARING:\n\t\t\treturn Chef;\n\t\tcase OrderStatus.CONFIRMED:\n\t\t\treturn FileCheck;\n\t\tcase OrderStatus.PENDING:\n\t\t\treturn HourglassHalf;\n\n\t\tdefault:\n\t\t\treturn HourglassHalf;\n\t}\n};\n\nexport const buildSelectedAddonsPayload = (\n\tproductAddons: addonModels.MenuAddon[] = [],\n\tselectedAddons: SelectedAddons = {}\n): OrderAddon[] => {\n\treturn Object.entries(selectedAddons).map(([addonIdStr, selected]) => {\n\t\tconst addonId = Number(addonIdStr);\n\t\tconst selectedOptionIds = Array.isArray(selected) ? selected : [selected];\n\n\t\tconst addon = productAddons.find((addon) => addon.id === addonId);\n\t\tif (isEmpty(addon)) {\n\t\t\treturn {\n\t\t\t\taddonId,\n\t\t\t\toptions: [],\n\t\t\t};\n\t\t}\n\n\t\tconst options: OrderAddonOption[] = (addon.options || [])\n\t\t\t.filter((option) => selectedOptionIds.includes(option.id))\n\t\t\t.map((option) => ({\n\t\t\t\toptionId: option.id,\n\t\t\t\tprice: option.price,\n\t\t\t}));\n\n\t\treturn {\n\t\t\taddonId,\n\t\t\toptions,\n\t\t};\n\t});\n};\n\nexport const getDefaultOrderType = (\n\tsettings: branchModels.BranchSettings,\n\tisOpen: boolean,\n\tisDelivering: boolean\n): OrderType | null => {\n\tif (!settings) return null;\n\n\tconst { deliveryOrderEnabled, dineInOrderEnabled, pickupOrderEnabled } = settings;\n\n\tif (deliveryOrderEnabled && isDelivering) {\n\t\treturn OrderType.DELIVERY;\n\t}\n\n\tif (dineInOrderEnabled && isOpen) {\n\t\treturn OrderType.DINE_IN;\n\t}\n\n\tif (pickupOrderEnabled && isOpen) {\n\t\treturn OrderType.PICK_UP;\n\t}\n\n\treturn null;\n};\n\nexport const getOrderErrorMessages = (field: keyof Order) => {\n\tswitch (field) {\n\t\tcase \"customer\":\n\t\t\treturn OrderErrors.ADDRESS_IS_EMPTY;\n\n\t\tcase \"tableId\":\n\t\t\treturn OrderErrors.TABLE_NOT_SELECTED;\n\n\t\tcase \"items\":\n\t\t\treturn OrderErrors.EMPTY_ITEMS;\n\n\t\tcase \"branchId\":\n\t\t\treturn OrderErrors.BRANCH_NOT_SELECTED;\n\n\t\tdefault:\n\t\t\treturn OrderErrors.FIELD_REQUIRED_ERROR;\n\t}\n};\n","export const MODALS = {\n\tADD_UPDATE_NOTES: \"ADD_UPDATE_NOTES\",\n\tAUTH: \"AUTH\",\n\tADD_UPDATE_ADDRESS: \"ADD_UPDATE_ADDRESS\",\n\tBRANCH_BUSINESS_HOURS: \"BRANCH_BUSINESS_HOURS\",\n\tPRODUCT_DETAILS: \"PRODUCT_DETAILS\",\n};\n\nexport const SUPPORTED_LOCALES = [\"en\", \"az\", \"nl\", \"et\", \"tr\", \"ru\"];\nexport const SUPPORTED_COUNTRIES = [\n\t{\n\t\tname: \"Azerbaijan\",\n\t\tcode: \"AZ\",\n\t\tphoneCode: \"+994\",\n\t},\n];\n\nexport const CO_DOMAIN = \"restaround.co\";\nexport const AZ_DOMAIN = \"restaround.az\";\nexport const EE_DOMAIN = \"restaround.ee\";\nexport const NL_DOMAIN = \"restaround.nl\";\n\nexport const DEFAULT_HOSTNAME = CO_DOMAIN;\n\nexport const DOMAINS = [CO_DOMAIN, AZ_DOMAIN, EE_DOMAIN, NL_DOMAIN]; // Supported domains list\n\nexport const IMAGE_BASE_URL = \"https://images.restaround.co\";\n","import { CO_DOMAIN, DOMAINS, IMAGE_BASE_URL } from \"./constants\";\n\ninterface ValidationResult {\n\tisValid: boolean;\n\terror?: string;\n}\n\ntype Validator = (cleanedNumber: string) => ValidationResult;\n\nconst validators: Record<string, Validator> = {\n\t\"994\": (number) => {\n\t\tconst AZERBAIJANI_PREFIXES = [\"50\", \"51\", \"10\", \"55\", \"99\", \"70\", \"77\", \"60\"];\n\t\tconst pattern = new RegExp(`^(${AZERBAIJANI_PREFIXES.join(\"|\")})\\\\d{7}$`);\n\n\t\tif (!pattern.test(number)) {\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t\terror: `Azerbaijani numbers must be 9 digits and start with ${AZERBAIJANI_PREFIXES.join(\n\t\t\t\t\t\", \"\n\t\t\t\t)}`,\n\t\t\t};\n\t\t}\n\n\t\treturn { isValid: true };\n\t},\n\n\t\"31\": (number) => {\n\t\tconst pattern = /^\\d{9}$/;\n\n\t\tif (!pattern.test(number)) {\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t\terror: \"Dutch numbers must be exactly 9 digits\",\n\t\t\t};\n\t\t}\n\n\t\treturn { isValid: true };\n\t},\n};\n\nexport function validatePhoneNumber(phoneNumber: string): ValidationResult {\n\tif (!phoneNumber) {\n\t\treturn { isValid: false, error: \"FIELD_REQUIRED\" };\n\t}\n\n\tconst cleaned = phoneNumber.replace(/\\D/g, \"\");\n\n\tconst countryCode = cleaned.startsWith(\"994\") ? \"994\" : cleaned.startsWith(\"31\") ? \"31\" : null;\n\n\tif (!countryCode) {\n\t\treturn { isValid: false, error: \"Unsupported country code\" };\n\t}\n\n\tconst nationalNumber = cleaned.slice(countryCode.length);\n\tconst validator = validators[countryCode];\n\n\treturn validator(nationalNumber);\n}\n\nexport const getBaseUrl = (hostname: string, language: string) => {\n\tconst locale = language || \"en\";\n\t// Local env\n\tif (hostname === \"localhost:3000\") {\n\t\treturn { url: `http://localhost:3000/${locale}`, domain: CO_DOMAIN };\n\t}\n\t// Prod env\n\tconst domain = DOMAINS.includes(hostname) ? hostname : CO_DOMAIN;\n\treturn { url: `https://${domain}/${locale}`, domain };\n};\n\nexport const getTLD = (language: string) => {\n\treturn language === \"az\" ? \"az\" : \"co\";\n};\n\nexport const getRegisterUrl = (language: string, source: string) => {\n\tconst tld = getTLD(language);\n\n\treturn `https://app.restaround.${tld}/auth/register?lang=${language}&utm_source=${source}`;\n};\n\nexport const getImageSource = (image?: string) => {\n\tif (!image) return \"\";\n\n\tif (image.includes(\"base64\") || image.startsWith(\"https://\")) return image;\n\n\treturn `${IMAGE_BASE_URL}/${image}`;\n};\n\nexport const getLogoImageSource = (logoImage?: string) => {\n\tif (!logoImage) return \"https://images.restaround.co/no-photo-128.webp\";\n\n\tif (logoImage.includes(\"base64\") || logoImage.startsWith(\"https://\")) return logoImage;\n\n\treturn `${IMAGE_BASE_URL}/${logoImage}`;\n};\n\nexport const getCoverPhotoSource = (coverPhoto?: string) => {\n\tif (!coverPhoto) return \"https://images.restaround.co/restaround-doodle.webp\";\n\n\tif (coverPhoto.includes(\"base64\") || coverPhoto.startsWith(\"https://\")) return coverPhoto;\n\n\treturn `${IMAGE_BASE_URL}/${coverPhoto}`;\n};\n\nconst keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\nconst triplet = (e1: number, e2: number, e3: number) =>\n\tkeyStr.charAt(e1 >> 2) +\n\tkeyStr.charAt(((e1 & 3) << 4) | (e2 >> 4)) +\n\tkeyStr.charAt(((e2 & 15) << 2) | (e3 >> 6)) +\n\tkeyStr.charAt(e3 & 63);\n\nexport const rgbDataURL = (r: number, g: number, b: number) =>\n\t`data:image/gif;base64,R0lGODlhAQABAPAA${\n\t\ttriplet(0, r, g) + triplet(b, 255, 255)\n\t}/yH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==`;\n\nexport const getVideoSource = (video?: string) => {\n\tif (!video) return \"\";\n\n\tif (video.includes(\"base64\") || video.startsWith(\"https://\")) return video;\n\n\treturn `${IMAGE_BASE_URL}/${video}`;\n};\n","export enum CustomerAuthStep {\n\tPHONE = \"PHONE\",\n\tOTP = \"OTP\",\n\tEMAIL = \"EMAIL\",\n}\n\nexport enum CustomerAddressType {\n\tHOME = \"HOME\",\n\tWORK = \"WORK\",\n\tTRAVEL = \"TRAVEL\",\n}\n\nexport interface CustomerAddress {\n\tid?: number;\n\taddressId?: number; // Update address temporary\n\tcountryCode: string;\n\tcityName: string;\n\tstreet: string;\n\thouseNumber: string;\n\tadditionalNumber?: string;\n\tpostCode?: string;\n\tinstructions?: string;\n\tfloor?: number;\n\tlongitude?: number;\n\tlatitude?: number;\n\ttitle?: string;\n\ttype?: CustomerAddressType;\n}\n\nexport interface CustomerAuthForm {\n\tphoneNumber: string;\n\totp: string;\n\temail: string;\n}\n\nexport interface CustomerAuthPhoneForm {\n\tcountryCode: string;\n\tphoneNumber: string;\n}\n\nexport interface AuthResponse {\n\taccessToken: string;\n\trefreshToken: string;\n}\n\nexport interface Customer {\n\tid?: number;\n\temail: string;\n\tphoneNumber: string;\n\tfullName: string;\n\tsmsVerified?: boolean;\n\temailVerified?: boolean;\n\taddress?: CustomerAddress;\n\taddresses?: CustomerAddress[];\n}\n\nexport type CustomerUpdatePayload = Partial<Customer>;\n","import { FormErrors } from \"@sorocraft/ui\";\nimport { checkIsValidEmail } from \"@sorocraft/js-utils\";\n\nimport * as viewUtils from \"src/modules/view/utils\";\n\nimport {\n\tCustomerAddress,\n\tCustomerAuthForm,\n\tCustomerAuthPhoneForm,\n\tCustomerAuthStep,\n} from \"./models\";\n\nexport const preparePhoneNumber = (form: CustomerAuthPhoneForm) => {\n\tconst phoneNumber = `${form.countryCode}${form.phoneNumber}`.replaceAll(\"+\", \"\");\n\n\treturn phoneNumber;\n};\n\nexport const validateForm = (form: CustomerAuthForm, step: CustomerAuthStep): FormErrors => {\n\tconst errors: FormErrors = {};\n\tconst { phoneNumber, email, otp } = form || {};\n\n\tswitch (step) {\n\t\tcase CustomerAuthStep.PHONE: {\n\t\t\tconst { isValid, error } = viewUtils.validatePhoneNumber(phoneNumber);\n\t\t\tif (!isValid) errors.phoneNumber = error;\n\t\t\tbreak;\n\t\t}\n\n\t\tcase CustomerAuthStep.OTP: {\n\t\t\tconst { isValid, error } = viewUtils.validatePhoneNumber(phoneNumber);\n\t\t\tif (!isValid) errors.phoneNumber = error;\n\n\t\t\tif (!otp || otp.length !== 6) {\n\t\t\t\terrors.otp = \"Invalid OTP\";\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase CustomerAuthStep.EMAIL: {\n\t\t\tif (!email || !checkIsValidEmail(email)) {\n\t\t\t\terrors.email = \"Invalid Email Address\";\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\treturn errors;\n};\n\nexport const validateAddressForm = (form: CustomerAddress): FormErrors => {\n\tconst errors: FormErrors = {};\n\tconst { countryCode, cityName, street, houseNumber } = form || {};\n\n\tif (!countryCode) errors.countryCode = \"COUNTRY_REQUIRED\";\n\tif (!cityName) errors.cityName = \"CITY_REQUIRED\";\n\tif (!street) errors.street = \"STREET_REQUIRED\";\n\tif (!houseNumber) errors.houseNumber = \"STREET_NUMBER_REQUIRED\";\n\n\treturn errors;\n};\n\nexport const formatCityLine = (fields: (string | undefined)[]) => {\n\treturn (fields || []).filter(Boolean).join(\", \");\n};\n\nexport const formatAddressLine = (\n\tstreet: string,\n\thouseNumber: string,\n\tadditionalNumber: string\n) => {\n\tconst house = [houseNumber, additionalNumber].filter(Boolean).join(\"/\");\n\tconst fullAddress = [street, house].filter(Boolean).join(\" \");\n\n\treturn fullAddress;\n};\n","export enum Feature {\n\tUPLOAD_VIDEO = \"UPLOAD_VIDEO\",\n}\nexport enum FeatureSegment {\n\tALPHA = \"ALPHA\",\n\tBETA = \"BETA\",\n\tALL = \"ALL\",\n}\n","import { Feature, FeatureSegment } from \"./models\";\n\nexport const FEATURES_LIST: { [key in FeatureSegment]: Feature[] } = {\n\t[FeatureSegment.ALPHA]: [Feature.UPLOAD_VIDEO],\n\t[FeatureSegment.BETA]: [],\n\t[FeatureSegment.ALL]: [],\n};\n","import { getQueryParam } from \"@sorocraft/js-utils\";\n\nimport { FeatureSegment, type Feature } from \"./models\";\n\nimport { FEATURES_LIST } from \"./constants\";\n\nexport const getIsFeatureActive = (feature: Feature, businessSegment: FeatureSegment): boolean => {\n\t// Feature is force-enabled via query param\n\tif (getQueryParam(feature) === \"1\") return true;\n\n\t// Build the list of enabled segments for the current businessSegment\n\tconst enabledSegments: FeatureSegment[] =\n\t\tbusinessSegment === FeatureSegment.ALPHA\n\t\t\t? [FeatureSegment.ALPHA, FeatureSegment.BETA, FeatureSegment.ALL]\n\t\t\t: businessSegment === FeatureSegment.BETA\n\t\t\t? [FeatureSegment.BETA, FeatureSegment.ALL]\n\t\t\t: [FeatureSegment.ALL];\n\n\t// Check if feature exists in any of the enabled segments\n\treturn enabledSegments.some((segment) => FEATURES_LIST[segment]?.includes(feature));\n};\n","import { isEmpty } from \"@sorocraft/js-utils\";\nimport { Category, CategoryTranslation } from \"./models\";\n\nexport const getCategoryTranslation = (\n\tcategory: Category,\n\tlanguage: string\n): CategoryTranslation => {\n\treturn (category?.translations?.find?.((item) => item.language === language) ||\n\t\t{}) as CategoryTranslation;\n};\n\nexport const getCategoryNameById = (\n\tcategoryId: number,\n\tcategories: Category[],\n\tlanguage: string\n): string => {\n\tconst category = categories?.find?.(({ id }) => id === categoryId);\n\n\tif (isEmpty(category)) return \"\";\n\n\tconst { name } = getCategoryTranslation(category, language);\n\n\treturn name || \"\";\n};\n","import * as categoryModels from \"src/modules/category/models\";\nimport * as productModels from \"src/modules/product/models\";\n\nimport { CategoryProductMap } from \"./models\";\n\nexport const prepareCategoryAndProductMap = (\n\tcategories: categoryModels.Category[],\n\tproducts: productModels.Product[]\n): CategoryProductMap[] => {\n\tconst productMap = products.reduce<Record<number, productModels.Product[]>>((map, product) => {\n\t\tif (!product.visible) return map;\n\n\t\tconst categoryId = Number(product.categoryId);\n\t\tif (!map[categoryId]) {\n\t\t\tmap[categoryId] = [];\n\t\t}\n\t\tmap[categoryId].push(product);\n\t\treturn map;\n\t}, {});\n\n\treturn categories\n\t\t.map((category) => ({\n\t\t\t...category,\n\t\t\tproducts: (productMap[Number(category.id)] || []) as productModels.Product[],\n\t\t}))\n\t\t.filter((category) => category?.products?.length > 0);\n};\n","export enum EmployeePermission {\n\tVIEW_BUSINESS = \"VIEW_BUSINESS\",\n\tUPDATE_BUSINESS = \"UPDATE_BUSINESS\",\n\tVIEW_ORDERS = \"VIEW_ORDERS\",\n\tUPDATE_ORDER = \"UPDATE_ORDER\",\n\tCREATE_ORDER = \"CREATE_ORDER\",\n\tVIEW_QR_MENU = \"VIEW_QR_MENU\",\n\tVIEW_MENU = \"VIEW_MENU\",\n\tVIEW_MENU_ITEMS = \"VIEW_MENU_ITEMS\",\n\tCREATE_MENU_ITEM = \"CREATE_MENU_ITEM\",\n\tUPDATE_MENU_ITEM = \"UPDATE_MENU_ITEM\",\n\tDELETE_MENU_ITEM = \"DELETE_MENU_ITEM\",\n\tVIEW_CATEGORIES = \"VIEW_CATEGORIES\",\n\tUPDATE_CATEGORY = \"UPDATE_CATEGORY\",\n\tCREATE_CATEGORY = \"CREATE_CATEGORY\",\n\tDELETE_CATEGORY = \"DELETE_CATEGORY\",\n\tVIEW_ADDONS = \"VIEW_ADDONS\",\n\tUPDATE_ADDON = \"UPDATE_ADDON\",\n\tCREATE_ADDON = \"CREATE_ADDON\",\n\tDELETE_ADDON = \"DELETE_ADDON\",\n\tVIEW_TABLES = \"VIEW_TABLES\",\n\tUPDATE_TABLE = \"UPDATE_TABLE\",\n\tUPDATE_TABLE_STATUS = \"UPDATE_TABLE_STATUS\",\n\tCREATE_TABLE = \"CREATE_TABLE\",\n\tDELETE_TABLE = \"DELETE_TABLE\",\n\tVIEW_BRANCHES = \"VIEW_BRANCHES\",\n\tUPDATE_BRANCH = \"UPDATE_BRANCH\",\n\tCREATE_BRANCH = \"CREATE_BRANCH\",\n\tDELETE_BRANCH = \"DELETE_BRANCH\",\n\tVIEW_EMPLOYEES = \"VIEW_EMPLOYEES\",\n\tUPDATE_EMPLOYEE = \"UPDATE_EMPLOYEE\",\n\tCREATE_EMPLOYEE = \"CREATE_EMPLOYEE\",\n\tDELETE_EMPLOYEE = \"DELETE_EMPLOYEE\",\n\tVIEW_ANALYTICS = \"VIEW_ANALYTICS\",\n\tVIEW_SALES_REPORTS = \"VIEW_SALES_REPORTS\",\n\tVIEW_SUBSCRIPTION = \"VIEW_SUBSCRIPTION\",\n\tUPDATE_SUBSCRIPTION = \"UPDATE_SUBSCRIPTION\",\n\tVIEW_QR_CODES = \"VIEW_QR_CODES\",\n\tCREATE_QR_CODE = \"CREATE_QR_CODE\",\n\tDELETE_QR_CODE = \"DELETE_QR_CODE\",\n\tALL = \"ALL\",\n\t// Inventory\n\tVIEW_INVENTORY = \"VIEW_INVENTORY\",\n\tVIEW_PURCHASES = \"VIEW_PURCHASES\",\n\tVIEW_PURCHASE_DETAIL = \"VIEW_PURCHASE_DETAIL\",\n\tCREATE_PURCHASE = \"CREATE_PURCHASE\",\n\tUPDATE_PURCHASE = \"UPDATE_PURCHASE\",\n\tDELETE_PURCHASE = \"DELETE_PURCHASE\",\n\tVIEW_INVENTORY_PRODUCTS = \"VIEW_INVENTORY_PRODUCTS\",\n\tCREATE_INVENTORY_PRODUCT = \"CREATE_INVENTORY_PRODUCT\",\n\tUPDATE_INVENTORY_PRODUCT = \"UPDATE_INVENTORY_PRODUCT\",\n\tDELETE_INVENTORY_PRODUCT = \"DELETE_INVENTORY_PRODUCT\",\n\tVIEW_BUSINESS_BALANCE = \"VIEW_BUSINESS_BALANCE\",\n\tVIEW_BRANCH_BALANCE = \"VIEW_BRANCH_BALANCE\",\n\tUPDATE_PRODUCT_INGREDIENTS = \"UPDATE_PRODUCT_INGREDIENTS\",\n\tDELETE_PRODUCT_INGREDIENTS = \"DELETE_PRODUCT_INGREDIENTS\",\n\tAI_ASSISTANT = \"AI_ASSISTANT\",\n}\n\nexport enum UserRole {\n\tOWNER = \"OWNER\",\n\tBRANCH_MANAGER = \"BRANCH_MANAGER\",\n\tGENERAL_MANAGER = \"GENERAL_MANAGER\",\n\tCHEF = \"CHEF\",\n\tSOUS_CHEF = \"SOUS_CHEF\",\n\tPASTRY_CHEF = \"PASTRY_CHEF\",\n\tLINE_COOK = \"LINE_COOK\",\n\tPREP_COOK = \"PREP_COOK\",\n\tKITCHEN_ASSISTANT = \"KITCHEN_ASSISTANT\",\n\tDISHWASHER = \"DISHWASHER\",\n\tHEAD_WAITER = \"HEAD_WAITER\",\n\tWAITER = \"WAITER\",\n\tRUNNER = \"RUNNER\",\n\tBARISTA = \"BARISTA\",\n\tBARTENDER = \"BARTENDER\",\n\tSOMMELIER = \"SOMMELIER\",\n\tACCOUNTANT = \"ACCOUNTANT\",\n\tROOM_SERVICE_STAFF = \"ROOM_SERVICE_STAFF\",\n\tDELIVERY_DRIVER = \"DELIVERY_DRIVER\",\n\tINVENTORY_MANAGER = \"INVENTORY_MANAGER\",\n\tPURCHASING_MANAGER = \"PURCHASING_MANAGER\",\n\tWAREHOUSE_STAFF = \"WAREHOUSE_STAFF\",\n}\n\nexport interface User {\n\tid?: number;\n\temail: string;\n\tfullName: string;\n\trole?: UserRole;\n\tavatar64?: string | null;\n\tavatar128?: string | null;\n\tavatar256?: string | null;\n\tbusinessId?: number;\n\tbranchId?: number | null;\n\tcreatedAt: string;\n\temailVerified?: boolean;\n\tpermissions?: EmployeePermission[];\n}\n","import { isEmpty } from \"@sorocraft/js-utils\";\n\nimport { EmployeePermission, UserRole } from \"./models\";\n\nexport const getPermissionsByRole = (role?: UserRole) => {\n\tswitch (role) {\n\t\t/** Owner - Has every permission */\n\t\tcase UserRole.OWNER:\n\t\t\treturn [EmployeePermission.ALL];\n\n\t\t/** General Manager - All except subscription updates */\n\t\tcase UserRole.GENERAL_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_BUSINESS,\n\t\t\t\tEmployeePermission.UPDATE_BUSINESS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_QR_MENU,\n\t\t\t\tEmployeePermission.VIEW_QR_CODES,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.CREATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.DELETE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.DELETE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.DELETE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE,\n\t\t\t\tEmployeePermission.CREATE_TABLE,\n\t\t\t\tEmployeePermission.DELETE_TABLE,\n\t\t\t\tEmployeePermission.VIEW_BRANCHES,\n\t\t\t\tEmployeePermission.UPDATE_BRANCH,\n\t\t\t\tEmployeePermission.CREATE_BRANCH,\n\t\t\t\tEmployeePermission.DELETE_BRANCH,\n\t\t\t\tEmployeePermission.VIEW_EMPLOYEES,\n\t\t\t\tEmployeePermission.UPDATE_EMPLOYEE,\n\t\t\t\tEmployeePermission.CREATE_EMPLOYEE,\n\t\t\t\tEmployeePermission.DELETE_EMPLOYEE,\n\t\t\t\tEmployeePermission.VIEW_ANALYTICS,\n\t\t\t\tEmployeePermission.VIEW_SALES_REPORTS,\n\t\t\t\tEmployeePermission.VIEW_SUBSCRIPTION,\n\t\t\t\tEmployeePermission.CREATE_QR_CODE,\n\t\t\t\tEmployeePermission.DELETE_QR_CODE,\n\t\t\t\tEmployeePermission.AI_ASSISTANT,\n\t\t\t];\n\n\t\t/** Branch Manager - Controls operations within one branch */\n\t\tcase UserRole.BRANCH_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_BUSINESS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_QR_MENU,\n\t\t\t\tEmployeePermission.VIEW_QR_CODES,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.CREATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.DELETE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.DELETE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.DELETE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE,\n\t\t\t\tEmployeePermission.CREATE_TABLE,\n\t\t\t\tEmployeePermission.DELETE_TABLE,\n\t\t\t\tEmployeePermission.VIEW_EMPLOYEES,\n\t\t\t\tEmployeePermission.UPDATE_EMPLOYEE,\n\t\t\t\tEmployeePermission.VIEW_ANALYTICS,\n\t\t\t\tEmployeePermission.VIEW_SALES_REPORTS,\n\t\t\t\tEmployeePermission.CREATE_QR_CODE,\n\t\t\t\tEmployeePermission.DELETE_QR_CODE,\n\t\t\t\tEmployeePermission.AI_ASSISTANT,\n\t\t\t];\n\n\t\t/** Chef - Manages menu and kitchen orders */\n\t\tcase UserRole.CHEF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Sous Chef - Assists chef with orders and menu */\n\t\tcase UserRole.SOUS_CHEF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Pastry Chef - Limited to dessert menu items */\n\t\tcase UserRole.PASTRY_CHEF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Line Cook / Prep Cook / Kitchen Assistant - Read-only menu & order updates */\n\t\tcase UserRole.LINE_COOK:\n\t\tcase UserRole.PREP_COOK:\n\t\tcase UserRole.KITCHEN_ASSISTANT:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Head Waiter - Full service control */\n\t\tcase UserRole.HEAD_WAITER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE_STATUS,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.VIEW_QR_MENU,\n\t\t\t\tEmployeePermission.VIEW_QR_CODES,\n\t\t\t];\n\n\t\t/** Waiter - Handles orders and table service */\n\t\tcase UserRole.WAITER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t\tEmployeePermission.VIEW_TABLES,\n\t\t\t\tEmployeePermission.UPDATE_TABLE_STATUS,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t];\n\n\t\t/** Runner - Sees and updates order delivery progress */\n\t\tcase UserRole.RUNNER:\n\t\t\treturn [EmployeePermission.VIEW_ORDERS, EmployeePermission.UPDATE_ORDER];\n\n\t\t/** ☕ Barista / Bartender / Sommelier / Room Service */\n\t\tcase UserRole.BARISTA:\n\t\tcase UserRole.BARTENDER:\n\t\tcase UserRole.SOMMELIER:\n\t\tcase UserRole.ROOM_SERVICE_STAFF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_ORDERS,\n\t\t\t\tEmployeePermission.CREATE_ORDER,\n\t\t\t\tEmployeePermission.UPDATE_ORDER,\n\t\t\t];\n\n\t\t/** Accountant - Analytics, reports, subscriptions */\n\t\tcase UserRole.ACCOUNTANT:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_ANALYTICS,\n\t\t\t\tEmployeePermission.VIEW_SALES_REPORTS,\n\t\t\t\tEmployeePermission.VIEW_SUBSCRIPTION,\n\t\t\t];\n\n\t\t/** Delivery Driver - Delivery orders only */\n\t\tcase UserRole.DELIVERY_DRIVER:\n\t\t\treturn [EmployeePermission.VIEW_ORDERS, EmployeePermission.UPDATE_ORDER];\n\n\t\t/** Inventory Manager - Controls menu stock-related items */\n\t\tcase UserRole.INVENTORY_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.DELETE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.DELETE_ADDON,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.UPDATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.CREATE_MENU_ITEM,\n\t\t\t\tEmployeePermission.DELETE_MENU_ITEM,\n\t\t\t\tEmployeePermission.VIEW_PURCHASES,\n\t\t\t\tEmployeePermission.CREATE_PURCHASE,\n\t\t\t\tEmployeePermission.UPDATE_PURCHASE,\n\t\t\t\tEmployeePermission.DELETE_PURCHASE,\n\t\t\t\tEmployeePermission.VIEW_INVENTORY,\n\t\t\t\tEmployeePermission.VIEW_INVENTORY_PRODUCTS,\n\t\t\t\tEmployeePermission.CREATE_INVENTORY_PRODUCT,\n\t\t\t\tEmployeePermission.UPDATE_INVENTORY_PRODUCT,\n\t\t\t\tEmployeePermission.DELETE_INVENTORY_PRODUCT,\n\t\t\t\tEmployeePermission.VIEW_PURCHASE_DETAIL,\n\t\t\t\tEmployeePermission.VIEW_BRANCH_BALANCE,\n\t\t\t\tEmployeePermission.UPDATE_PRODUCT_INGREDIENTS,\n\t\t\t\tEmployeePermission.DELETE_PRODUCT_INGREDIENTS,\n\t\t\t];\n\n\t\t/** Purchasing Manager - Similar to inventory but more on creation/deletion */\n\t\tcase UserRole.PURCHASING_MANAGER:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.CREATE_CATEGORY,\n\t\t\t\tEmployeePermission.UPDATE_CATEGORY,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.CREATE_ADDON,\n\t\t\t\tEmployeePermission.UPDATE_ADDON,\n\t\t\t];\n\n\t\t/** Warehouse Staff - View only */\n\t\tcase UserRole.WAREHOUSE_STAFF:\n\t\t\treturn [\n\t\t\t\tEmployeePermission.VIEW_CATEGORIES,\n\t\t\t\tEmployeePermission.VIEW_ADDONS,\n\t\t\t\tEmployeePermission.VIEW_MENU,\n\t\t\t\tEmployeePermission.VIEW_MENU_ITEMS,\n\t\t\t];\n\n\t\tdefault:\n\t\t\treturn [];\n\t}\n};\n\nexport const getHasUserPermission = (\n\trequiredPermissions: EmployeePermission[],\n\tuserPermissions: EmployeePermission[],\n) => {\n\tif (isEmpty(requiredPermissions)) return true;\n\tif (isEmpty(userPermissions)) return false;\n\tif (userPermissions.includes(EmployeePermission.ALL)) return true;\n\n\treturn requiredPermissions.some((permission) => userPermissions.includes(permission));\n};\n"],"names":["getAddonTranslation","addon","language","_b","_a","translations","find","call","item","getAddonOptionTranslation","option","getOptionPrice","currency","price","totalPrice","formattedTotalPrice","priceFormatter","getAddonOptionRawPrice","optionId","options","id","getOptionTitles","optionIds","Array","isArray","filter","includes","map","t","title","Boolean","join","getAddonTitle","_c","ProductView","SellUnitType","MenuAddonSelectType","calculateTotalPrice","quantity","vat","getProductTranslation","product","getProductRawPrice","getProductPrice","getProductVariant","variantId","variants","getSelectedOptionsTotalPrice","selectedAddons","addons","Object","prototype","hasOwnProperty","reduce","total","addonId","selectType","SINGLE","selectedOptionId","multipleTotal","getProductVariantRawPrice","variant","getProductVariantPrice","getProductVariantTranslation","getProductOrderRawPrice","noVat","isEmpty","optionsPrice","productData","assign","selectedOptionsTotalPrice","getProductOrderPrice","getProductAddon","getPriceSuffix","sellUnitType","WEIGHT","VOLUME","getProductSellUnitShortCuts","OrderType","OrderStatus","OrderItemStatus","PaymentMethod","OrderStep","OrderErrors","CASH","CART","DETAILS","COMPLETED","calculatSingleAddonTotalPrice","sum","calculateTotalAddonPrice","getOrderPrice","order","calculateItemTotal","totalWithoutTax","totalTax","items","itemTotal","undefined","totalWithTax","totalWithoutTaxFormatted","totalTaxFormatted","totalWithTaxFormatted","generateOrderItemsId","productId","Error","orderItemsId","addonIdsPart","entries","sortNumbers","getOrderItemPrice","orderItem","basePrice","itemNetPrice","itemTax","itemGrossPrice","totalGross","totalNet","getSelectedAddonsFromOrderItems","length","getStatusIcon","status","Check","DELIVERED","BagCheck","OUT_FOR_DELIVERY","Delivery","PREPARING","Chef","CONFIRMED","FileCheck","PENDING","HourglassHalf","buildSelectedAddonsPayload","productAddons","addonIdStr","selected","Number","selectedOptionIds","getDefaultOrderType","settings","isOpen","isDelivering","deliveryOrderEnabled","dineInOrderEnabled","pickupOrderEnabled","DELIVERY","DINE_IN","PICK_UP","getOrderErrorMessages","field","ADDRESS_IS_EMPTY","TABLE_NOT_SELECTED","EMPTY_ITEMS","BRANCH_NOT_SELECTED","FIELD_REQUIRED_ERROR","CO_DOMAIN","DOMAINS","IMAGE_BASE_URL","validators","number","AZERBAIJANI_PREFIXES","RegExp","test","isValid","error","validatePhoneNumber","phoneNumber","cleaned","replace","countryCode","startsWith","nationalNumber","slice","validator","getBaseUrl","hostname","locale","url","domain","getTLD","getRegisterUrl","source","getImageSource","image","getLogoImageSource","logoImage","getCoverPhotoSource","coverPhoto","keyStr","triplet","e1","e2","e3","charAt","rgbDataURL","r","g","b","getVideoSource","video","CustomerAuthStep","CustomerAddressType","preparePhoneNumber","form","replaceAll","validateForm","step","errors","email","otp","PHONE","viewUtils.validatePhoneNumber","OTP","EMAIL","checkIsValidEmail","validateAddressForm","cityName","street","houseNumber","formatCityLine","fields","formatAddressLine","additionalNumber","Feature","FeatureSegment","FEATURES_LIST","ALPHA","UPLOAD_VIDEO","BETA","ALL","getIsFeatureActive","feature","businessSegment","getQueryParam","some","segment","getCategoryTranslation","category","getCategoryNameById","categoryId","categories","name","prepareCategoryAndProductMap","products","productMap","visible","push","EmployeePermission","UserRole","getPermissionsByRole","role","OWNER","GENERAL_MANAGER","VIEW_BUSINESS","UPDATE_BUSINESS","VIEW_ORDERS","UPDATE_ORDER","CREATE_ORDER","VIEW_QR_MENU","VIEW_QR_CODES","VIEW_MENU","VIEW_MENU_ITEMS","UPDATE_MENU_ITEM","CREATE_MENU_ITEM","DELETE_MENU_ITEM","VIEW_CATEGORIES","UPDATE_CATEGORY","CREATE_CATEGORY","DELETE_CATEGORY","VIEW_ADDONS","UPDATE_ADDON","CREATE_ADDON","DELETE_ADDON","VIEW_TABLES","UPDATE_TABLE","CREATE_TABLE","DELETE_TABLE","VIEW_BRANCHES","UPDATE_BRANCH","CREATE_BRANCH","DELETE_BRANCH","VIEW_EMPLOYEES","UPDATE_EMPLOYEE","CREATE_EMPLOYEE","DELETE_EMPLOYEE","VIEW_ANALYTICS","VIEW_SALES_REPORTS","VIEW_SUBSCRIPTION","CREATE_QR_CODE","DELETE_QR_CODE","AI_ASSISTANT","BRANCH_MANAGER","CHEF","SOUS_CHEF","PASTRY_CHEF","LINE_COOK","PREP_COOK","KITCHEN_ASSISTANT","HEAD_WAITER","UPDATE_TABLE_STATUS","WAITER","RUNNER","BARISTA","BARTENDER","SOMMELIER","ROOM_SERVICE_STAFF","ACCOUNTANT","DELIVERY_DRIVER","INVENTORY_MANAGER","VIEW_PURCHASES","CREATE_PURCHASE","UPDATE_PURCHASE","DELETE_PURCHASE","VIEW_INVENTORY","VIEW_INVENTORY_PRODUCTS","CREATE_INVENTORY_PRODUCT","UPDATE_INVENTORY_PRODUCT","DELETE_INVENTORY_PRODUCT","VIEW_PURCHASE_DETAIL","VIEW_BRANCH_BALANCE","UPDATE_PRODUCT_INGREDIENTS","DELETE_PRODUCT_INGREDIENTS","PURCHASING_MANAGER","WAREHOUSE_STAFF","getHasUserPermission","requiredPermissions","userPermissions","permission"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";var t=require("@sorocraft/js-utils"),r=require("@sorocraft/ui/icons");const e=(t,r)=>{var e;return(null===(e=((null==t?void 0:t.options)||[]).find(({id:t})=>t===r))||void 0===e?void 0:e.price)||0};var o,n,i;!function(t){t.LIST="list",t.GRID="grid"}(o||(o={})),function(t){t.PIECE="PIECE",t.WEIGHT="WEIGHT",t.VOLUME="VOLUME"}(n||(n={})),function(t){t.SINGLE="SINGLE",t.MULTIPLE="MULTIPLE"}(i||(i={}));const a=(t=0,r=1,e=0)=>t*r*(1+e/100),s=(t,r=1)=>{const{price:e=0,vat:o=0}=t||{};return a(e,r,o)},l=(t,r)=>{var e,o;return(null===(o=null===(e=null==t?void 0:t.variants)||void 0===e?void 0:e.find)||void 0===o?void 0:o.call(e,t=>t.id===r))||{}},d=(t,r={},o)=>((null==t?void 0:t.addons)||[]).filter(t=>Object.prototype.hasOwnProperty.call(r,t.id)).reduce((t,o)=>{const{id:n,selectType:a}=o;if(a===i.SINGLE){const i=r[n];return t+e(o,i)}return t+(r[n]||[]).reduce((t,r)=>t+e(o,r),0)},0)*o,u=(t,r,e)=>{const o=l(r,t),{vat:n}=r||{},{price:i}=o||{};return a(i,e,n)},c=({product:r,variantId:e,quantity:o=1,selectedAddons:n,noVat:i=!1})=>{if(t.isEmpty(r))return{price:0,optionsPrice:0,total:0};const a=Object.assign(Object.assign({},r),{vat:i?0:r.vat}),l=d(a,n,o),c=e?u(e,a,o):s(a,o);return{price:c,optionsPrice:l,total:c+l}};var E,p,A,g,v,P;!function(t){t.DINE_IN="DINE_IN",t.PICK_UP="PICK_UP",t.DELIVERY="DELIVERY"}(E||(E={})),function(t){t.DRAFT="DRAFT",t.PENDING="PENDING",t.CONFIRMED="CONFIRMED",t.PREPARING="PREPARING",t.READY="READY",t.OUT_FOR_DELIVERY="OUT_FOR_DELIVERY",t.DELIVERED="DELIVERED",t.COMPLETED="COMPLETED",t.CANCELLED="CANCELLED",t.FAILED="FAILED"}(p||(p={})),function(t){t.PENDING="PENDING",t.PREPARING="PREPARING",t.READY="READY",t.SERVED="SERVED"}(A||(A={})),function(t){t.CASH="CASH",t.CARD="CARD",t.WALLET="WALLET",t.TERMINAL="TERMINAL"}(g||(g={})),function(t){t.CART="CART",t.DETAILS="DETAILS",t.COMPLETED="COMPLETED"}(v||(v={})),g.CASH,v.CART,v.DETAILS,v.COMPLETED,function(t){t.FIELD_REQUIRED_ERROR="This field is required",t.TABLE_NOT_SELECTED="Please select a table",t.ADDRESS_IS_EMPTY="Please enter an address",t.EMPTY_ITEMS="Please choose product",t.BRANCH_NOT_SELECTED="Please select a branch"}(P||(P={}));const I=t=>t.options.reduce((t,r)=>t+r.price,0);function m(t=[],r=1){return r*t.reduce((t,r)=>t+I(r),0)}const T="restaround.co",L=[T,"restaround.az","restaround.ee","restaround.nl"],R="https://images.restaround.co",D={994:t=>{const r=["50","51","10","55","99","70","77","60"];return new RegExp(`^(${r.join("|")})\\d{7}$`).test(t)?{isValid:!0}:{isValid:!1,error:`Azerbaijani numbers must be 9 digits and start with ${r.join(", ")}`}},31:t=>/^\d{9}$/.test(t)?{isValid:!0}:{isValid:!1,error:"Dutch numbers must be exactly 9 digits"}};function f(t){if(!t)return{isValid:!1,error:"FIELD_REQUIRED"};const r=t.replace(/\D/g,""),e=r.startsWith("994")?"994":r.startsWith("31")?"31":null;if(!e)return{isValid:!1,error:"Unsupported country code"};const o=r.slice(e.length);return(0,D[e])(o)}const O=t=>"az"===t?"az":"co",h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",x=(t,r,e)=>h.charAt(t>>2)+h.charAt((3&t)<<4|r>>4)+h.charAt((15&r)<<2|e>>6)+h.charAt(63&e);var N,C;!function(t){t.PHONE="PHONE",t.OTP="OTP",t.EMAIL="EMAIL"}(N||(N={})),function(t){t.HOME="HOME",t.WORK="WORK",t.TRAVEL="TRAVEL"}(C||(C={}));var b,y;!function(t){t.UPLOAD_VIDEO="UPLOAD_VIDEO"}(b||(b={})),function(t){t.ALPHA="ALPHA",t.BETA="BETA",t.ALL="ALL"}(y||(y={}));const S={[y.ALPHA]:[b.UPLOAD_VIDEO],[y.BETA]:[],[y.ALL]:[]},_=(t,r)=>{var e,o;return(null===(o=null===(e=null==t?void 0:t.translations)||void 0===e?void 0:e.find)||void 0===o?void 0:o.call(e,t=>t.language===r))||{}};exports.buildSelectedAddonsPayload=(r=[],e={})=>Object.entries(e).map(([e,o])=>{const n=Number(e),i=Array.isArray(o)?o:[o],a=r.find(t=>t.id===n);if(t.isEmpty(a))return{addonId:n,options:[]};const s=(a.options||[]).filter(t=>i.includes(t.id)).map(t=>({optionId:t.id,price:t.price}));return{addonId:n,options:s}}),exports.calculatSingleAddonTotalPrice=I,exports.calculateTotalAddonPrice=m,exports.calculateTotalPrice=a,exports.formatAddressLine=(t,r,e)=>[t,[r,e].filter(Boolean).join("/")].filter(Boolean).join(" "),exports.formatCityLine=t=>(t||[]).filter(Boolean).join(", "),exports.generateOrderItemsId=(r,e,o)=>{if(!r)throw new Error("Product ID is required");let n=`${r}`;e&&(n+=`-${e}`);const i=Object.entries(o||{}).map(([r,e])=>{if(!r||!e)return null;const o=Array.isArray(e)?t.sortNumbers(e).filter(Boolean).join("-"):`${e}`;return o?`${r}-${o}`:null}).filter(Boolean).join("-");return i&&(n+=`-${i}`),n},exports.getAddonOptionRawPrice=e,exports.getAddonOptionTranslation=(t,r)=>{var e,o;return(null===(o=null===(e=null==t?void 0:t.translations)||void 0===e?void 0:e.find)||void 0===o?void 0:o.call(e,t=>t.language===r))||{}},exports.getAddonTitle=(t,r)=>{var e,o,n;return(null===(n=null===(o=null===(e=null==t?void 0:t.translations)||void 0===e?void 0:e.find)||void 0===o?void 0:o.call(e,t=>t.language===r))||void 0===n?void 0:n.title)||""},exports.getAddonTranslation=(t,r)=>{var e,o;return(null===(o=null===(e=null==t?void 0:t.translations)||void 0===e?void 0:e.find)||void 0===o?void 0:o.call(e,t=>t.language===r))||{}},exports.getBaseUrl=(t,r)=>{const e=r||"en";if("localhost:3000"===t)return{url:`http://localhost:3000/${e}`,domain:T};const o=L.includes(t)?t:T;return{url:`https://${o}/${e}`,domain:o}},exports.getCategoryNameById=(r,e,o)=>{var n;const i=null===(n=null==e?void 0:e.find)||void 0===n?void 0:n.call(e,({id:t})=>t===r);if(t.isEmpty(i))return"";const{name:a}=_(i,o);return a||""},exports.getCategoryTranslation=_,exports.getCoverPhotoSource=t=>t?t.includes("base64")||t.startsWith("https://")?t:`${R}/${t}`:"https://images.restaround.co/restaround-doodle.webp",exports.getDefaultOrderType=(t,r,e)=>{if(!t)return null;const{deliveryOrderEnabled:o,dineInOrderEnabled:n,pickupOrderEnabled:i}=t;return o&&e?E.DELIVERY:n&&r?E.DINE_IN:i&&r?E.PICK_UP:null},exports.getImageSource=t=>t?t.includes("base64")||t.startsWith("https://")?t:`${R}/${t}`:"",exports.getIsFeatureActive=(r,e)=>{if("1"===t.getQueryParam(r))return!0;return(e===y.ALPHA?[y.ALPHA,y.BETA,y.ALL]:e===y.BETA?[y.BETA,y.ALL]:[y.ALL]).some(t=>{var e;return null===(e=S[t])||void 0===e?void 0:e.includes(r)})},exports.getLogoImageSource=t=>t?t.includes("base64")||t.startsWith("https://")?t:`${R}/${t}`:"https://images.restaround.co/no-photo-128.webp",exports.getOptionPrice=({option:r,currency:e,language:o})=>{const{price:n}=r||{};return{totalPrice:n,formattedTotalPrice:t.priceFormatter(n,e||"USD",o||"en")}},exports.getOptionTitles=(t,r,e)=>{var o;if(Array.isArray(r))return(t||[]).filter(({id:t})=>r.includes(t)).map(({translations:t})=>{var r;return(null===(r=t.find(t=>t.language===e))||void 0===r?void 0:r.title)||""}).filter(Boolean).join(", ");{const n=(t||[]).find(({id:t})=>t===r);return(null===(o=null==n?void 0:n.translations.find(t=>t.language===e))||void 0===o?void 0:o.title)||""}},exports.getOrderErrorMessages=t=>{switch(t){case"customer":return P.ADDRESS_IS_EMPTY;case"tableId":return P.TABLE_NOT_SELECTED;case"items":return P.EMPTY_ITEMS;case"branchId":return P.BRANCH_NOT_SELECTED;default:return P.FIELD_REQUIRED_ERROR}},exports.getOrderItemPrice=t=>{var r;const{price:e,variant:o,addons:n,quantity:i,vat:a}=t||{},s=null!==(r=null==o?void 0:o.price)&&void 0!==r?r:e,l=s+m(n,1),d=s*(a/100),u=l+d;return{totalGross:u*i,totalNet:l*i,totalTax:d*i,itemGrossPrice:u,itemNetPrice:l,itemTax:d}},exports.getOrderPrice=(r,e,o)=>{const n=(t,r,e)=>r*t+m(e,r);let i=0,a=0;for(const t of r.items){const e=n(t.price,t.quantity,t.addons);i+=e,void 0===r.vat&&t.vat&&(a+=e*t.vat/100)}void 0!==r.vat&&(a=i*r.vat/100);const s=i+a;return{totalWithoutTax:i,totalWithoutTaxFormatted:t.priceFormatter(i,e,o),totalTax:a,totalTaxFormatted:t.priceFormatter(a,e,o),totalWithTax:s,totalWithTaxFormatted:t.priceFormatter(s,e,o)}},exports.getPriceSuffix=t=>{switch(t){case n.WEIGHT:return" / kg";case n.VOLUME:return" / l";default:return""}},exports.getProductAddon=(t,r)=>((null==t?void 0:t.addons)||[]).find(({id:t})=>t===r)||{},exports.getProductOrderPrice=({product:r,variantId:e,quantity:o=1,currency:n,language:i,selectedAddons:a,noVat:s=!1})=>{const{total:l}=c({product:r,variantId:e,quantity:o,selectedAddons:a,noVat:s});return{totalPrice:l,formattedTotalPrice:t.priceFormatter(l,n,i)}},exports.getProductOrderRawPrice=c,exports.getProductPrice=(r,e,o,n=1)=>{const i=s(r,n);return{totalPrice:i,formattedTotalPrice:t.priceFormatter(i,e,o)}},exports.getProductRawPrice=s,exports.getProductSellUnitShortCuts=t=>{switch(t){case n.WEIGHT:return{"50gr":.05,"100gr":.1,"150gr":.15,"200gr":.2,"250gr":.25,"300gr":.3,"350gr":.35,"400gr":.4,"450gr":.45,"500gr":.5,"600gr":.6,"700gr":.7,"750gr":.75,"800gr":.8,"850gr":.85,"900gr":.9,"950gr":.95,"1kg":1,"2kg":2,"5kg":5,"10kg":10,"20kg":20};case n.VOLUME:return{"50ml":.05,"100ml":.1,"150ml":.15,"200ml":.2,"250ml":.25,"300ml":.3,"350ml":.35,"400ml":.4,"450ml":.45,"500ml":.5,"600ml":.6,"700ml":.7,"750ml":.75,"800ml":.8,"850ml":.85,"900ml":.9,"950ml":.95,"1l":1,"2l":2,"5l":5,"10l":10,"20l":20};default:return{}}},exports.getProductTranslation=(t,r)=>{var e,o;return(null===(o=null===(e=null==t?void 0:t.translations)||void 0===e?void 0:e.find)||void 0===o?void 0:o.call(e,t=>t.language===r))||{}},exports.getProductVariant=l,exports.getProductVariantPrice=({variantId:r,currency:e="USD",language:o="en",product:n,quantity:i=1})=>{const a=u(r,n,i);return{totalPrice:a,formattedTotalPrice:t.priceFormatter(a,e,o)}},exports.getProductVariantRawPrice=u,exports.getProductVariantTranslation=(t,r)=>{var e,o;return(null===(o=null===(e=null==t?void 0:t.translations)||void 0===e?void 0:e.find)||void 0===o?void 0:o.call(e,t=>t.language===r))||{}},exports.getRegisterUrl=(t,r)=>`https://app.restaround.${O(t)}/auth/register?lang=${t}&utm_source=${r}`,exports.getSelectedAddonsFromOrderItems=t=>{const r={};for(const{addonId:e,options:o=[]}of t.addons||[]){const t=o.map(({optionId:t})=>t);r[e]=1===t.length?t[0]:t}return r},exports.getSelectedOptionsTotalPrice=d,exports.getStatusIcon=t=>{switch(t){case p.COMPLETED:return r.Check;case p.DELIVERED:return r.BagCheck;case p.OUT_FOR_DELIVERY:return r.Delivery;case p.PREPARING:return r.Chef;case p.CONFIRMED:return r.FileCheck;case p.PENDING:default:return r.HourglassHalf}},exports.getTLD=O,exports.getVideoSource=t=>t?t.includes("base64")||t.startsWith("https://")?t:`${R}/${t}`:"",exports.prepareCategoryAndProductMap=(t,r)=>{const e=r.reduce((t,r)=>{if(!r.visible)return t;const e=Number(r.categoryId);return t[e]||(t[e]=[]),t[e].push(r),t},{});return t.map(t=>Object.assign(Object.assign({},t),{products:e[Number(t.id)]||[]})).filter(t=>{var r;return(null===(r=null==t?void 0:t.products)||void 0===r?void 0:r.length)>0})},exports.preparePhoneNumber=t=>`${t.countryCode}${t.phoneNumber}`.replaceAll("+",""),exports.rgbDataURL=(t,r,e)=>`data:image/gif;base64,R0lGODlhAQABAPAA${x(0,t,r)+x(e,255,255)}/yH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==`,exports.validateAddressForm=t=>{const r={},{countryCode:e,cityName:o,street:n,houseNumber:i}=t||{};return e||(r.countryCode="COUNTRY_REQUIRED"),o||(r.cityName="CITY_REQUIRED"),n||(r.street="STREET_REQUIRED"),i||(r.houseNumber="STREET_NUMBER_REQUIRED"),r},exports.validateForm=(r,e)=>{const o={},{phoneNumber:n,email:i,otp:a}=r||{};switch(e){case N.PHONE:{const{isValid:t,error:r}=f(n);t||(o.phoneNumber=r);break}case N.OTP:{const{isValid:t,error:r}=f(n);t||(o.phoneNumber=r),a&&6===a.length||(o.otp="Invalid OTP");break}case N.EMAIL:i&&t.checkIsValidEmail(i)||(o.email="Invalid Email Address")}return o},exports.validatePhoneNumber=f;
1
+ "use strict";var E=require("@sorocraft/js-utils"),t=require("@sorocraft/ui/icons");const e=(E,t)=>{var e;return(null===(e=((null==E?void 0:E.options)||[]).find(({id:E})=>E===t))||void 0===e?void 0:e.price)||0};var r,A,_;!function(E){E.LIST="list",E.GRID="grid"}(r||(r={})),function(E){E.PIECE="PIECE",E.WEIGHT="WEIGHT",E.VOLUME="VOLUME"}(A||(A={})),function(E){E.SINGLE="SINGLE",E.MULTIPLE="MULTIPLE"}(_||(_={}));const T=(E=0,t=1,e=0)=>E*t*(1+e/100),o=(E,t=1)=>{const{price:e=0,vat:r=0}=E||{};return T(e,t,r)},R=(E,t)=>{var e,r;return(null===(r=null===(e=null==E?void 0:E.variants)||void 0===e?void 0:e.find)||void 0===r?void 0:r.call(e,E=>E.id===t))||{}},n=(E,t={},r)=>((null==E?void 0:E.addons)||[]).filter(E=>Object.prototype.hasOwnProperty.call(t,E.id)).reduce((E,r)=>{const{id:A,selectType:T}=r;if(T===_.SINGLE){const _=t[A];return E+e(r,_)}return E+(t[A]||[]).reduce((E,t)=>E+e(r,t),0)},0)*r,a=(E,t,e)=>{const r=R(t,E),{vat:A}=t||{},{price:_}=r||{};return T(_,e,A)},I=({product:t,variantId:e,quantity:r=1,selectedAddons:A,noVat:_=!1})=>{if(E.isEmpty(t))return{price:0,optionsPrice:0,total:0};const T=Object.assign(Object.assign({},t),{vat:_?0:t.vat}),R=n(T,A,r),I=e?a(e,T,r):o(T,r);return{price:I,optionsPrice:R,total:I+R}};var i,s,D,l,N,O;!function(E){E.DINE_IN="DINE_IN",E.PICK_UP="PICK_UP",E.DELIVERY="DELIVERY"}(i||(i={})),function(E){E.DRAFT="DRAFT",E.PENDING="PENDING",E.CONFIRMED="CONFIRMED",E.PREPARING="PREPARING",E.READY="READY",E.OUT_FOR_DELIVERY="OUT_FOR_DELIVERY",E.DELIVERED="DELIVERED",E.COMPLETED="COMPLETED",E.CANCELLED="CANCELLED",E.FAILED="FAILED"}(s||(s={})),function(E){E.PENDING="PENDING",E.PREPARING="PREPARING",E.READY="READY",E.SERVED="SERVED"}(D||(D={})),function(E){E.CASH="CASH",E.CARD="CARD",E.WALLET="WALLET",E.TERMINAL="TERMINAL"}(l||(l={})),function(E){E.CART="CART",E.DETAILS="DETAILS",E.COMPLETED="COMPLETED"}(N||(N={})),l.CASH,N.CART,N.DETAILS,N.COMPLETED,function(E){E.FIELD_REQUIRED_ERROR="This field is required",E.TABLE_NOT_SELECTED="Please select a table",E.ADDRESS_IS_EMPTY="Please enter an address",E.EMPTY_ITEMS="Please choose product",E.BRANCH_NOT_SELECTED="Please select a branch"}(O||(O={}));const c=E=>E.options.reduce((E,t)=>E+t.price,0);function u(E=[],t=1){return t*E.reduce((E,t)=>E+c(t),0)}const d="restaround.co",S=[d,"restaround.az","restaround.ee","restaround.nl"],P="https://images.restaround.co",C={994:E=>{const t=["50","51","10","55","99","70","77","60"];return new RegExp(`^(${t.join("|")})\\d{7}$`).test(E)?{isValid:!0}:{isValid:!1,error:`Azerbaijani numbers must be 9 digits and start with ${t.join(", ")}`}},31:E=>/^\d{9}$/.test(E)?{isValid:!0}:{isValid:!1,error:"Dutch numbers must be exactly 9 digits"}};function U(E){if(!E)return{isValid:!1,error:"FIELD_REQUIRED"};const t=E.replace(/\D/g,""),e=t.startsWith("994")?"994":t.startsWith("31")?"31":null;if(!e)return{isValid:!1,error:"Unsupported country code"};const r=t.slice(e.length);return(0,C[e])(r)}const L=E=>"az"===E?"az":"co",V="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",W=(E,t,e)=>V.charAt(E>>2)+V.charAt((3&E)<<4|t>>4)+V.charAt((15&t)<<2|e>>6)+V.charAt(63&e);var M,p;!function(E){E.PHONE="PHONE",E.OTP="OTP",E.EMAIL="EMAIL"}(M||(M={})),function(E){E.HOME="HOME",E.WORK="WORK",E.TRAVEL="TRAVEL"}(p||(p={}));var g,v;!function(E){E.UPLOAD_VIDEO="UPLOAD_VIDEO"}(g||(g={})),function(E){E.ALPHA="ALPHA",E.BETA="BETA",E.ALL="ALL"}(v||(v={}));const m={[v.ALPHA]:[g.UPLOAD_VIDEO],[v.BETA]:[],[v.ALL]:[]},B=(E,t)=>{var e,r;return(null===(r=null===(e=null==E?void 0:E.translations)||void 0===e?void 0:e.find)||void 0===r?void 0:r.call(e,E=>E.language===t))||{}};var H,f;!function(E){E.VIEW_BUSINESS="VIEW_BUSINESS",E.UPDATE_BUSINESS="UPDATE_BUSINESS",E.VIEW_ORDERS="VIEW_ORDERS",E.UPDATE_ORDER="UPDATE_ORDER",E.CREATE_ORDER="CREATE_ORDER",E.VIEW_QR_MENU="VIEW_QR_MENU",E.VIEW_MENU="VIEW_MENU",E.VIEW_MENU_ITEMS="VIEW_MENU_ITEMS",E.CREATE_MENU_ITEM="CREATE_MENU_ITEM",E.UPDATE_MENU_ITEM="UPDATE_MENU_ITEM",E.DELETE_MENU_ITEM="DELETE_MENU_ITEM",E.VIEW_CATEGORIES="VIEW_CATEGORIES",E.UPDATE_CATEGORY="UPDATE_CATEGORY",E.CREATE_CATEGORY="CREATE_CATEGORY",E.DELETE_CATEGORY="DELETE_CATEGORY",E.VIEW_ADDONS="VIEW_ADDONS",E.UPDATE_ADDON="UPDATE_ADDON",E.CREATE_ADDON="CREATE_ADDON",E.DELETE_ADDON="DELETE_ADDON",E.VIEW_TABLES="VIEW_TABLES",E.UPDATE_TABLE="UPDATE_TABLE",E.UPDATE_TABLE_STATUS="UPDATE_TABLE_STATUS",E.CREATE_TABLE="CREATE_TABLE",E.DELETE_TABLE="DELETE_TABLE",E.VIEW_BRANCHES="VIEW_BRANCHES",E.UPDATE_BRANCH="UPDATE_BRANCH",E.CREATE_BRANCH="CREATE_BRANCH",E.DELETE_BRANCH="DELETE_BRANCH",E.VIEW_EMPLOYEES="VIEW_EMPLOYEES",E.UPDATE_EMPLOYEE="UPDATE_EMPLOYEE",E.CREATE_EMPLOYEE="CREATE_EMPLOYEE",E.DELETE_EMPLOYEE="DELETE_EMPLOYEE",E.VIEW_ANALYTICS="VIEW_ANALYTICS",E.VIEW_SALES_REPORTS="VIEW_SALES_REPORTS",E.VIEW_SUBSCRIPTION="VIEW_SUBSCRIPTION",E.UPDATE_SUBSCRIPTION="UPDATE_SUBSCRIPTION",E.VIEW_QR_CODES="VIEW_QR_CODES",E.CREATE_QR_CODE="CREATE_QR_CODE",E.DELETE_QR_CODE="DELETE_QR_CODE",E.ALL="ALL",E.VIEW_INVENTORY="VIEW_INVENTORY",E.VIEW_PURCHASES="VIEW_PURCHASES",E.VIEW_PURCHASE_DETAIL="VIEW_PURCHASE_DETAIL",E.CREATE_PURCHASE="CREATE_PURCHASE",E.UPDATE_PURCHASE="UPDATE_PURCHASE",E.DELETE_PURCHASE="DELETE_PURCHASE",E.VIEW_INVENTORY_PRODUCTS="VIEW_INVENTORY_PRODUCTS",E.CREATE_INVENTORY_PRODUCT="CREATE_INVENTORY_PRODUCT",E.UPDATE_INVENTORY_PRODUCT="UPDATE_INVENTORY_PRODUCT",E.DELETE_INVENTORY_PRODUCT="DELETE_INVENTORY_PRODUCT",E.VIEW_BUSINESS_BALANCE="VIEW_BUSINESS_BALANCE",E.VIEW_BRANCH_BALANCE="VIEW_BRANCH_BALANCE",E.UPDATE_PRODUCT_INGREDIENTS="UPDATE_PRODUCT_INGREDIENTS",E.DELETE_PRODUCT_INGREDIENTS="DELETE_PRODUCT_INGREDIENTS",E.AI_ASSISTANT="AI_ASSISTANT"}(H||(H={})),function(E){E.OWNER="OWNER",E.BRANCH_MANAGER="BRANCH_MANAGER",E.GENERAL_MANAGER="GENERAL_MANAGER",E.CHEF="CHEF",E.SOUS_CHEF="SOUS_CHEF",E.PASTRY_CHEF="PASTRY_CHEF",E.LINE_COOK="LINE_COOK",E.PREP_COOK="PREP_COOK",E.KITCHEN_ASSISTANT="KITCHEN_ASSISTANT",E.DISHWASHER="DISHWASHER",E.HEAD_WAITER="HEAD_WAITER",E.WAITER="WAITER",E.RUNNER="RUNNER",E.BARISTA="BARISTA",E.BARTENDER="BARTENDER",E.SOMMELIER="SOMMELIER",E.ACCOUNTANT="ACCOUNTANT",E.ROOM_SERVICE_STAFF="ROOM_SERVICE_STAFF",E.DELIVERY_DRIVER="DELIVERY_DRIVER",E.INVENTORY_MANAGER="INVENTORY_MANAGER",E.PURCHASING_MANAGER="PURCHASING_MANAGER",E.WAREHOUSE_STAFF="WAREHOUSE_STAFF"}(f||(f={}));exports.buildSelectedAddonsPayload=(t=[],e={})=>Object.entries(e).map(([e,r])=>{const A=Number(e),_=Array.isArray(r)?r:[r],T=t.find(E=>E.id===A);if(E.isEmpty(T))return{addonId:A,options:[]};const o=(T.options||[]).filter(E=>_.includes(E.id)).map(E=>({optionId:E.id,price:E.price}));return{addonId:A,options:o}}),exports.calculatSingleAddonTotalPrice=c,exports.calculateTotalAddonPrice=u,exports.calculateTotalPrice=T,exports.formatAddressLine=(E,t,e)=>[E,[t,e].filter(Boolean).join("/")].filter(Boolean).join(" "),exports.formatCityLine=E=>(E||[]).filter(Boolean).join(", "),exports.generateOrderItemsId=(t,e,r)=>{if(!t)throw new Error("Product ID is required");let A=`${t}`;e&&(A+=`-${e}`);const _=Object.entries(r||{}).map(([t,e])=>{if(!t||!e)return null;const r=Array.isArray(e)?E.sortNumbers(e).filter(Boolean).join("-"):`${e}`;return r?`${t}-${r}`:null}).filter(Boolean).join("-");return _&&(A+=`-${_}`),A},exports.getAddonOptionRawPrice=e,exports.getAddonOptionTranslation=(E,t)=>{var e,r;return(null===(r=null===(e=null==E?void 0:E.translations)||void 0===e?void 0:e.find)||void 0===r?void 0:r.call(e,E=>E.language===t))||{}},exports.getAddonTitle=(E,t)=>{var e,r,A;return(null===(A=null===(r=null===(e=null==E?void 0:E.translations)||void 0===e?void 0:e.find)||void 0===r?void 0:r.call(e,E=>E.language===t))||void 0===A?void 0:A.title)||""},exports.getAddonTranslation=(E,t)=>{var e,r;return(null===(r=null===(e=null==E?void 0:E.translations)||void 0===e?void 0:e.find)||void 0===r?void 0:r.call(e,E=>E.language===t))||{}},exports.getBaseUrl=(E,t)=>{const e=t||"en";if("localhost:3000"===E)return{url:`http://localhost:3000/${e}`,domain:d};const r=S.includes(E)?E:d;return{url:`https://${r}/${e}`,domain:r}},exports.getCategoryNameById=(t,e,r)=>{var A;const _=null===(A=null==e?void 0:e.find)||void 0===A?void 0:A.call(e,({id:E})=>E===t);if(E.isEmpty(_))return"";const{name:T}=B(_,r);return T||""},exports.getCategoryTranslation=B,exports.getCoverPhotoSource=E=>E?E.includes("base64")||E.startsWith("https://")?E:`${P}/${E}`:"https://images.restaround.co/restaround-doodle.webp",exports.getDefaultOrderType=(E,t,e)=>{if(!E)return null;const{deliveryOrderEnabled:r,dineInOrderEnabled:A,pickupOrderEnabled:_}=E;return r&&e?i.DELIVERY:A&&t?i.DINE_IN:_&&t?i.PICK_UP:null},exports.getHasUserPermission=(t,e)=>!!E.isEmpty(t)||!E.isEmpty(e)&&(!!e.includes(H.ALL)||t.some(E=>e.includes(E))),exports.getImageSource=E=>E?E.includes("base64")||E.startsWith("https://")?E:`${P}/${E}`:"",exports.getIsFeatureActive=(t,e)=>{if("1"===E.getQueryParam(t))return!0;return(e===v.ALPHA?[v.ALPHA,v.BETA,v.ALL]:e===v.BETA?[v.BETA,v.ALL]:[v.ALL]).some(E=>{var e;return null===(e=m[E])||void 0===e?void 0:e.includes(t)})},exports.getLogoImageSource=E=>E?E.includes("base64")||E.startsWith("https://")?E:`${P}/${E}`:"https://images.restaround.co/no-photo-128.webp",exports.getOptionPrice=({option:t,currency:e,language:r})=>{const{price:A}=t||{};return{totalPrice:A,formattedTotalPrice:E.priceFormatter(A,e||"USD",r||"en")}},exports.getOptionTitles=(E,t,e)=>{var r;if(Array.isArray(t))return(E||[]).filter(({id:E})=>t.includes(E)).map(({translations:E})=>{var t;return(null===(t=E.find(E=>E.language===e))||void 0===t?void 0:t.title)||""}).filter(Boolean).join(", ");{const A=(E||[]).find(({id:E})=>E===t);return(null===(r=null==A?void 0:A.translations.find(E=>E.language===e))||void 0===r?void 0:r.title)||""}},exports.getOrderErrorMessages=E=>{switch(E){case"customer":return O.ADDRESS_IS_EMPTY;case"tableId":return O.TABLE_NOT_SELECTED;case"items":return O.EMPTY_ITEMS;case"branchId":return O.BRANCH_NOT_SELECTED;default:return O.FIELD_REQUIRED_ERROR}},exports.getOrderItemPrice=E=>{var t;const{price:e,variant:r,addons:A,quantity:_,vat:T}=E||{},o=null!==(t=null==r?void 0:r.price)&&void 0!==t?t:e,R=o+u(A,1),n=o*(T/100),a=R+n;return{totalGross:a*_,totalNet:R*_,totalTax:n*_,itemGrossPrice:a,itemNetPrice:R,itemTax:n}},exports.getOrderPrice=(t,e,r)=>{const A=(E,t,e)=>t*E+u(e,t);let _=0,T=0;for(const E of t.items){const e=A(E.price,E.quantity,E.addons);_+=e,void 0===t.vat&&E.vat&&(T+=e*E.vat/100)}void 0!==t.vat&&(T=_*t.vat/100);const o=_+T;return{totalWithoutTax:_,totalWithoutTaxFormatted:E.priceFormatter(_,e,r),totalTax:T,totalTaxFormatted:E.priceFormatter(T,e,r),totalWithTax:o,totalWithTaxFormatted:E.priceFormatter(o,e,r)}},exports.getPermissionsByRole=E=>{switch(E){case f.OWNER:return[H.ALL];case f.GENERAL_MANAGER:return[H.VIEW_BUSINESS,H.UPDATE_BUSINESS,H.VIEW_ORDERS,H.UPDATE_ORDER,H.CREATE_ORDER,H.VIEW_QR_MENU,H.VIEW_QR_CODES,H.VIEW_MENU,H.VIEW_MENU_ITEMS,H.UPDATE_MENU_ITEM,H.CREATE_MENU_ITEM,H.DELETE_MENU_ITEM,H.VIEW_CATEGORIES,H.UPDATE_CATEGORY,H.CREATE_CATEGORY,H.DELETE_CATEGORY,H.VIEW_ADDONS,H.UPDATE_ADDON,H.CREATE_ADDON,H.DELETE_ADDON,H.VIEW_TABLES,H.UPDATE_TABLE,H.CREATE_TABLE,H.DELETE_TABLE,H.VIEW_BRANCHES,H.UPDATE_BRANCH,H.CREATE_BRANCH,H.DELETE_BRANCH,H.VIEW_EMPLOYEES,H.UPDATE_EMPLOYEE,H.CREATE_EMPLOYEE,H.DELETE_EMPLOYEE,H.VIEW_ANALYTICS,H.VIEW_SALES_REPORTS,H.VIEW_SUBSCRIPTION,H.CREATE_QR_CODE,H.DELETE_QR_CODE,H.AI_ASSISTANT];case f.BRANCH_MANAGER:return[H.VIEW_BUSINESS,H.VIEW_ORDERS,H.UPDATE_ORDER,H.CREATE_ORDER,H.VIEW_QR_MENU,H.VIEW_QR_CODES,H.VIEW_MENU,H.VIEW_MENU_ITEMS,H.UPDATE_MENU_ITEM,H.CREATE_MENU_ITEM,H.DELETE_MENU_ITEM,H.VIEW_CATEGORIES,H.UPDATE_CATEGORY,H.CREATE_CATEGORY,H.DELETE_CATEGORY,H.VIEW_ADDONS,H.UPDATE_ADDON,H.CREATE_ADDON,H.DELETE_ADDON,H.VIEW_TABLES,H.UPDATE_TABLE,H.CREATE_TABLE,H.DELETE_TABLE,H.VIEW_EMPLOYEES,H.UPDATE_EMPLOYEE,H.VIEW_ANALYTICS,H.VIEW_SALES_REPORTS,H.CREATE_QR_CODE,H.DELETE_QR_CODE,H.AI_ASSISTANT];case f.CHEF:return[H.VIEW_MENU,H.VIEW_MENU_ITEMS,H.UPDATE_MENU_ITEM,H.VIEW_CATEGORIES,H.UPDATE_CATEGORY,H.VIEW_ADDONS,H.UPDATE_ADDON,H.VIEW_ORDERS,H.UPDATE_ORDER];case f.SOUS_CHEF:return[H.VIEW_MENU,H.VIEW_MENU_ITEMS,H.VIEW_CATEGORIES,H.VIEW_ADDONS,H.VIEW_ORDERS,H.UPDATE_ORDER];case f.PASTRY_CHEF:return[H.VIEW_MENU,H.VIEW_MENU_ITEMS,H.UPDATE_MENU_ITEM,H.VIEW_ORDERS,H.UPDATE_ORDER];case f.LINE_COOK:case f.PREP_COOK:case f.KITCHEN_ASSISTANT:return[H.VIEW_MENU,H.VIEW_MENU_ITEMS,H.VIEW_ORDERS,H.UPDATE_ORDER];case f.HEAD_WAITER:return[H.VIEW_ORDERS,H.CREATE_ORDER,H.UPDATE_ORDER,H.VIEW_TABLES,H.UPDATE_TABLE_STATUS,H.VIEW_MENU,H.VIEW_MENU_ITEMS,H.VIEW_CATEGORIES,H.VIEW_ADDONS,H.VIEW_QR_MENU,H.VIEW_QR_CODES];case f.WAITER:return[H.VIEW_ORDERS,H.CREATE_ORDER,H.UPDATE_ORDER,H.VIEW_TABLES,H.UPDATE_TABLE_STATUS,H.VIEW_MENU,H.VIEW_MENU_ITEMS,H.VIEW_CATEGORIES,H.VIEW_ADDONS];case f.RUNNER:return[H.VIEW_ORDERS,H.UPDATE_ORDER];case f.BARISTA:case f.BARTENDER:case f.SOMMELIER:case f.ROOM_SERVICE_STAFF:return[H.VIEW_MENU,H.VIEW_MENU_ITEMS,H.VIEW_ORDERS,H.CREATE_ORDER,H.UPDATE_ORDER];case f.ACCOUNTANT:return[H.VIEW_ANALYTICS,H.VIEW_SALES_REPORTS,H.VIEW_SUBSCRIPTION];case f.DELIVERY_DRIVER:return[H.VIEW_ORDERS,H.UPDATE_ORDER];case f.INVENTORY_MANAGER:return[H.VIEW_CATEGORIES,H.UPDATE_CATEGORY,H.CREATE_CATEGORY,H.DELETE_CATEGORY,H.VIEW_ADDONS,H.UPDATE_ADDON,H.CREATE_ADDON,H.DELETE_ADDON,H.VIEW_MENU,H.VIEW_MENU_ITEMS,H.UPDATE_MENU_ITEM,H.CREATE_MENU_ITEM,H.DELETE_MENU_ITEM,H.VIEW_PURCHASES,H.CREATE_PURCHASE,H.UPDATE_PURCHASE,H.DELETE_PURCHASE,H.VIEW_INVENTORY,H.VIEW_INVENTORY_PRODUCTS,H.CREATE_INVENTORY_PRODUCT,H.UPDATE_INVENTORY_PRODUCT,H.DELETE_INVENTORY_PRODUCT,H.VIEW_PURCHASE_DETAIL,H.VIEW_BRANCH_BALANCE,H.UPDATE_PRODUCT_INGREDIENTS,H.DELETE_PRODUCT_INGREDIENTS];case f.PURCHASING_MANAGER:return[H.VIEW_MENU,H.VIEW_MENU_ITEMS,H.VIEW_CATEGORIES,H.CREATE_CATEGORY,H.UPDATE_CATEGORY,H.VIEW_ADDONS,H.CREATE_ADDON,H.UPDATE_ADDON];case f.WAREHOUSE_STAFF:return[H.VIEW_CATEGORIES,H.VIEW_ADDONS,H.VIEW_MENU,H.VIEW_MENU_ITEMS];default:return[]}},exports.getPriceSuffix=E=>{switch(E){case A.WEIGHT:return" / kg";case A.VOLUME:return" / l";default:return""}},exports.getProductAddon=(E,t)=>((null==E?void 0:E.addons)||[]).find(({id:E})=>E===t)||{},exports.getProductOrderPrice=({product:t,variantId:e,quantity:r=1,currency:A,language:_,selectedAddons:T,noVat:o=!1})=>{const{total:R}=I({product:t,variantId:e,quantity:r,selectedAddons:T,noVat:o});return{totalPrice:R,formattedTotalPrice:E.priceFormatter(R,A,_)}},exports.getProductOrderRawPrice=I,exports.getProductPrice=(t,e,r,A=1)=>{const _=o(t,A);return{totalPrice:_,formattedTotalPrice:E.priceFormatter(_,e,r)}},exports.getProductRawPrice=o,exports.getProductSellUnitShortCuts=E=>{switch(E){case A.WEIGHT:return{"50gr":.05,"100gr":.1,"150gr":.15,"200gr":.2,"250gr":.25,"300gr":.3,"350gr":.35,"400gr":.4,"450gr":.45,"500gr":.5,"600gr":.6,"700gr":.7,"750gr":.75,"800gr":.8,"850gr":.85,"900gr":.9,"950gr":.95,"1kg":1,"2kg":2,"5kg":5,"10kg":10,"20kg":20};case A.VOLUME:return{"50ml":.05,"100ml":.1,"150ml":.15,"200ml":.2,"250ml":.25,"300ml":.3,"350ml":.35,"400ml":.4,"450ml":.45,"500ml":.5,"600ml":.6,"700ml":.7,"750ml":.75,"800ml":.8,"850ml":.85,"900ml":.9,"950ml":.95,"1l":1,"2l":2,"5l":5,"10l":10,"20l":20};default:return{}}},exports.getProductTranslation=(E,t)=>{var e,r;return(null===(r=null===(e=null==E?void 0:E.translations)||void 0===e?void 0:e.find)||void 0===r?void 0:r.call(e,E=>E.language===t))||{}},exports.getProductVariant=R,exports.getProductVariantPrice=({variantId:t,currency:e="USD",language:r="en",product:A,quantity:_=1})=>{const T=a(t,A,_);return{totalPrice:T,formattedTotalPrice:E.priceFormatter(T,e,r)}},exports.getProductVariantRawPrice=a,exports.getProductVariantTranslation=(E,t)=>{var e,r;return(null===(r=null===(e=null==E?void 0:E.translations)||void 0===e?void 0:e.find)||void 0===r?void 0:r.call(e,E=>E.language===t))||{}},exports.getRegisterUrl=(E,t)=>`https://app.restaround.${L(E)}/auth/register?lang=${E}&utm_source=${t}`,exports.getSelectedAddonsFromOrderItems=E=>{const t={};for(const{addonId:e,options:r=[]}of E.addons||[]){const E=r.map(({optionId:E})=>E);t[e]=1===E.length?E[0]:E}return t},exports.getSelectedOptionsTotalPrice=n,exports.getStatusIcon=E=>{switch(E){case s.COMPLETED:return t.Check;case s.DELIVERED:return t.BagCheck;case s.OUT_FOR_DELIVERY:return t.Delivery;case s.PREPARING:return t.Chef;case s.CONFIRMED:return t.FileCheck;case s.PENDING:default:return t.HourglassHalf}},exports.getTLD=L,exports.getVideoSource=E=>E?E.includes("base64")||E.startsWith("https://")?E:`${P}/${E}`:"",exports.prepareCategoryAndProductMap=(E,t)=>{const e=t.reduce((E,t)=>{if(!t.visible)return E;const e=Number(t.categoryId);return E[e]||(E[e]=[]),E[e].push(t),E},{});return E.map(E=>Object.assign(Object.assign({},E),{products:e[Number(E.id)]||[]})).filter(E=>{var t;return(null===(t=null==E?void 0:E.products)||void 0===t?void 0:t.length)>0})},exports.preparePhoneNumber=E=>`${E.countryCode}${E.phoneNumber}`.replaceAll("+",""),exports.rgbDataURL=(E,t,e)=>`data:image/gif;base64,R0lGODlhAQABAPAA${W(0,E,t)+W(e,255,255)}/yH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==`,exports.validateAddressForm=E=>{const t={},{countryCode:e,cityName:r,street:A,houseNumber:_}=E||{};return e||(t.countryCode="COUNTRY_REQUIRED"),r||(t.cityName="CITY_REQUIRED"),A||(t.street="STREET_REQUIRED"),_||(t.houseNumber="STREET_NUMBER_REQUIRED"),t},exports.validateForm=(t,e)=>{const r={},{phoneNumber:A,email:_,otp:T}=t||{};switch(e){case M.PHONE:{const{isValid:E,error:t}=U(A);E||(r.phoneNumber=t);break}case M.OTP:{const{isValid:E,error:t}=U(A);E||(r.phoneNumber=t),T&&6===T.length||(r.otp="Invalid OTP");break}case M.EMAIL:_&&E.checkIsValidEmail(_)||(r.email="Invalid Email Address")}return r},exports.validatePhoneNumber=U;
2
2
  //# sourceMappingURL=index.js.map