1"use strict";(self.webpackChunktonomo=self.webpackChunktonomo||[]).push([[4069],{94069:(Lt,B,s)=>{s.r(B),s.d(B,{FeatureDashboardModule:()=>jt});var f=s(47796),h=s(69808),c=s(93075),b=s(33315),H=s(20773),U=s(74202),Y=s(4603),y=s(51062),x=s(41621),d=s(96410),W=s(15439),i=s.n(W),w=s(658),u=s(24254),_=s(50026),Q=s(36053),T=s(4843),X=s(24850),I=s(87545),D=s(40520),t=s(5e3);let M=(()=>{class e{constructor(a,n){this.httpClient=a,this.appConfigService=n}fetchSalesOverview(a){const n=(0,u.Ybi)(a);return this.httpClient.get(`${this.appConfigService.corePlatformUrl}/reports/sales-overview`,{params:new D.HttpParams({fromObject:Object.assign(Object.assign({},n),{timeZone:this.appConfigService.timeZone,weekStartsOn:i().localeData().firstDayOfWeek()})})})}fetchOrdersHeatmap(a){const n=(0,u.Ybi)(a);return this.httpClient.get(`${this.appConfigService.corePlatformUrl}/reports/orders-heatmap`,{params:new D.HttpParams({fromObject:Object.assign(Object.assign({},n),{weekStartsOn:i().localeData().firstDayOfWeek()})})})}fetchCustomerStats(a){const n=(0,u.Ybi)(a);return this.httpClient.get(`${this.appConfigService.corePlatformUrl}/reports/customer-stats`,{params:new D.HttpParams({fromObject:Object.assign({},n)})})}}return e.\u0275fac=function(a){return new(a||e)(t.\u0275\u0275inject(D.HttpClient),t.\u0275\u0275inject(w._ZM))},e.\u0275prov=t.\u0275\u0275defineInjectable({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();var v=(()=>{return(e=v||(v={})).year="year",e.quarter="quarter",e.month="month",e.week="week",e.day="day",e.hour="hour",e.minute="minute",v;var e})(),g=(()=>{return(e=g||(g={})).previousPeriod="previousPeriod",e.previousYearPeriod="previousYearPeriod",g;var e})(),S=(()=>{return(e=S||(S={})).mostRecent="mostRecent",e.scheduledDate="scheduledDate",S;var e})();const J=["averageValue","totalRevenue"],O=e=>J.includes(e),j=(e,r)=>e.dataset.map(a=>{if(null===a[r])return null;const n=a[r]||0;return O(r)?n/100:n}).map(a=>(null==a?void 0:a.toString())||""),G=(e,r,a)=>{const o=r[a];return+(o>0?(e[a]-o)/o*100||0:100).toFixed(1)},E=(e,r,a)=>{const n=e.dataset.map(p=>p.label),o=j(e,a),l=j(r,a);return{value:O(a)?e[a]/100:e[a],comparedToValue:O(a)?r[a]/100:r[a],avarageDiff:G(e,r,a),chartData:{labels:n,datasets:[{data:o,backgroundColor:"#228BE6",borderColor:"#228BE6",cubicInterpolationMode:"monotone",labels:e.dataset.map(p=>p.label)},{data:l,backgroundColor:"#AFAFAF",borderColor:"#AFAFAF",cubicInterpolationMode:"monotone",labels:r.dataset.map(p=>p.label)}]}}},F={dateRange:{startDate:i()().subtract(1,"months"),endDate:i()()},timeUnit:v.week,comparedTo:g.previousPeriod,sortBy:S.mostRecent};let P=(()=>{class e extends _.m1{constructor(a){super(),this.dashboardService=a,this.salesOverview$=this.select(({salesOverview:n})=>n),this.salesOverviewCompared$=this.select(({salesOverviewCompared:n})=>n),this.chartsData$=(0,Q.aj)([this.salesOverview$,this.salesOverviewCompared$]).pipe((0,X.U)(([n,o])=>({totalRevenue:E(n,o,"totalRevenue"),totalOrders:E(n,o,"totalOrders"),averageValue:E(n,o,"averageValue")}))),this.getSalesOverview=this.effect((0,T.z)((0,I.w)(n=>this.dashboardService.fetchSalesOverview((({timeUnit:e,dateRange:r,comparedTo:a,sortBy:n})=>({start:r.startDate.toISOString(),end:r.endDate.toISOString(),timeUnit:e,compareTo:a,sortBy:n}))(n)).pipe((0,_._b)(o=>{this.setState({salesOverview:o.selectedPeriod,salesOverviewCompared:o.compareToPeriod})},o=>console.error(o))))))}}return e.\u0275fac=function(a){return new(a||e)(t.\u0275\u0275inject(M))},e.\u0275prov=t.\u0275\u0275defineInjectable({token:e,factory:e.\u0275fac}),e})();var K=s(1059);let L=(()=>{class e extends _.m1{constructor(a){super(),this.dashboardStore=a,this.form=new c.cw({dateRange:new c.NI(F.dateRange),comparedTo:new c.NI(g.previousPeriod),sortBy:new c.NI(S.mostRecent),timeUnit:new c.NI(F.timeUnit)}),this.ranges={Today:[i()(),i()()],"Last 7 Days":[i()().subtract(6,"days"),i()()],"Last 4 Weeks":[i()().subtract(4,"weeks").startOf("week"),i()().subtract(1,"weeks").endOf("week")],"Last 3 Month":[i()().subtract(3,"month").startOf("month"),i()().subtract(1,"month").endOf("month")],"Last 12 Month":[i()().subtract(12,"month").startOf("month"),i()().subtract(1,"month").endOf("month")],"Month to date":[i()().startOf("month"),i()()],"Quarter to date":[i()().startOf("quarter"),i()()],"Year to date":[i()().startOf("year"),i()()]},this.filtersChanged$=this.form.valueChanges.pipe((0,K.O)(this.form.value))}init(){this.dashboardStore.getSalesOverview(this.filtersChanged$)}}return e.\u0275fac=function(a){return new(a||e)(t.\u0275\u0275inject(P))},e.\u0275prov=t.\u0275\u0275defineInjectable({token:e,factory:e.\u0275fac}),e})();var R=s(69009),$=s(255);let q=(()=>{class e{constructor(a,n){this.salesOverviewFiltersStore=a,this.translate=n,this.form=this.salesOverviewFiltersStore.form,this.ranges=this.salesOverviewFiltersStore.ranges,this.timeUnitOptions=[{name:this.translate.instant("DASHBOARD_TIME_UNIT_"+v.day),value:v.day},{name:this.translate.instant("DASHBOARD_TIME_UNIT_"+v.week),value:v.week},{name:this.translate.instant("DASHBOARD_TIME_UNIT_"+v.month),value:v.month}],this.comparedToOptions=[{name:this.translate.instant("DASHBOARD_COMPARED_TO_"+g.previousPeriod),value:g.previousPeriod},{name:this.translate.instant("DASHBOARD_COMPARED_TO_"+g.previousYearPeriod),value:g.previousYearPeriod}],this.sortByOptions=[{name:"Most Recent",value:S.mostRecent},{name:"Scheduled Date",value:S.scheduledDate}],this.maxDate=i()()}
1ngOnInit(){this.salesOverviewFiltersStore.init()}}return e.\u0275fac=function(a){return new(a||e)(t.\u0275\u0275directiveInject(L),t.\u0275\u0275directiveInject(y.sK))},e.\u0275cmp=t.\u0275\u0275defineComponent({type:e,selectors:[["tn-overview-sales-overview-filters"]],inputs:{locale:"locale"},features:[t.\u0275\u0275ProvidersFeature([L])],decls:10,vars:14,consts:[[1,"sales-overview-filters",3,"formGroup"],["formControlName","sortBy","panelType","section","appearance","bordered",1,"sales-overview-filters__select",3,"items"],[1,"sales-overview-filters__period"],["uiIcon","calendar_today",1,"text-gray-30"],["formControlName","dateRange","ngxDaterangepickerMd","","readonly","",1,"date-range-input",3,"locale","ranges","showDropdowns","lockStartDate","alwaysShowCalendars","customRangeDirection","maxDate"],["formControlName","comparedTo","panelType","section","appearance","bordered",1,"sales-overview-filters__select",3,"items"],["formControlName","timeUnit","panelType","section","appearance","bordered",1,"sales-overview-filters__select",3,"items"]],template:function(a,n){1&a&&(t.\u0275\u0275elementStart(0,"form",0),t.\u0275\u0275element(1,"ui-select",1),t.\u0275\u0275elementStart(2,"div",2),t.\u0275\u0275element(3,"i",3)(4,"input",4),t.\u0275\u0275elementEnd(),t.\u0275\u0275elementStart(5,"div"),t.\u0275\u0275text(6),t.\u0275\u0275pipe(7,"translate"),t.\u0275\u0275elementEnd(),t.\u0275\u0275element(8,"ui-select",5)(9,"ui-select",6),t.\u0275\u0275elementEnd()),2&a&&(t.\u0275\u0275property("formGroup",n.form),t.\u0275\u0275advance(1),t.\u0275\u0275property("items",n.sortByOptions),t.\u0275\u0275advance(3),t.\u0275\u0275property("locale",n.locale)("ranges",n.ranges)("showDropdowns",!0)("lockStartDate",!1)("alwaysShowCalendars",!0)("customRangeDirection",!1)("maxDate",n.maxDate),t.\u0275\u0275advance(2),t.\u0275\u0275textInterpolate(t.\u0275\u0275pipeBind1(7,12,"DASHBOARD_COMPARED_TO")),t.\u0275\u0275advance(2),t.\u0275\u0275property("items",n.comparedToOptions),t.\u0275\u0275advance(1),t.\u0275\u0275property("items",n.timeUnitOptions))},directives:[c._Y,c.JL,c.sg,R.H,c.JJ,c.u,$.a,c.Fj,x.SP],pipes:[y.X$],styles:[".sales-overview-filters[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem}.sales-overview-filters__period[_ngcontent-%COMP%]{display:flex;height:2.5rem;align-items:center;gap:.25rem;padding-left:.375rem;padding-right:.375rem;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 226 226 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.date-range-input[_ngcontent-%COMP%]{height:38px;width:200px}"],changeDetection:0}),e})();var k=s(45080);k.kL.register(...k.zX);var tt=s(96693);const et=["chartRef"];function at(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"div",6)(1,"canvas",null,7),t.\u0275\u0275text(3),t.\u0275\u0275elementEnd()()),2&e){const a=t.\u0275\u0275nextContext();t.\u0275\u0275advance(3),t.\u0275\u0275textInterpolate(a.chart)}}const nt=function(e,r){return{"sales-overview-chart__status--minus":e,"sales-overview-chart__status--plus":r}};let rt=(()=>{class e{constructor(a){this.uiCurrencyPipe=a,this.defaultChartConfig={type:"line",options:{interaction:{intersect:!1,mode:"index"},aspectRatio:2.5,scales:{x:{grid:{display:!1},ticks:{autoSkip:!1,callback:function(n,o,l){return 0===o||o===l.length-1?this.getLabelForValue(o):""}}},y:{grid:{display:!1},ticks:{callback:(n,o,l)=>{const p=this.uiCurrencyPipe.transform(n);return 0===o||o===l.length-1?O(this.chartName)?p:n:""}}}},plugins:{legend:{display:!1},tooltip:{callbacks:{title:function(){return""},label:function(n){return n.dataset.labels[n.dataIndex]+": "+n.formattedValue}}}}}},this.title="",this.value="",this.comparedToValue=""}set chartData(a){this._chartData=a,this.chart&&(this.chart.data=a.chartData,this.chart.update())}get chartData(){return this._chartData}ngAfterViewInit(){this.chart=new k.kL(this.chartRef.nativeElement,Object.assign(Object.assign({},this.defaultChartConfig),{data:this.chartData.chartData}))}}return e.\u0275fac=function(a){return new(a||e)(t.\u0275\u0275directiveInject(d._ab))},e.\u0275cmp=t.\u0275\u0275defineComponent({type:e,selectors:[["tn-overview-sales-overview-chart"]],viewQuery:function(a,n){if(1&a&&t.\u0275\u0275viewQuery(et,5),2&a){let o;t.\u0275\u0275queryRefresh(o=t.\u0275\u0275loadQuery())&&(n.chartRef=o.first)}},inputs:{title:"title",value:"value",comparedToValue:"comparedToValue",chartName:"chartName",chartData:"chartData"},features:[t.\u0275\u0275ProvidersFeature([d._ab])],decls:12,vars:11,consts:[[1,"sales-overview-chart"],[1,"sales-overview-chart__header"],[1,"sales-overview-chart__title"],[1,"sales-overview-chart__status",3,"ngClass"],[1,"sales-overview-chart__value"],["class","sales-overview-chart__chart",4,"ngIf"],[1,"sales-overview-chart__chart"],["chartRef",""]],template:function(a,n){1&a&&(t.\u0275\u0275elementStart(0,"div",0)(1,"div",1)(2,"div",2),t.\u0275\u0275text(3),t.\u0275\u0275elementEnd(),t.\u0275\u0275elementStart(4,"div",3),t.\u0275\u0275text(5),t.\u0275\u0275pipe(6,"percentDiff"),t.\u0275\u0275elementEnd()(),t.\u0275\u0275elementStart(7,"div",4),t.\u0275\u0275text(8),t.\u0275\u0275elementStart(9,"span"),t.\u0275\u0275text(10),t.\u0275\u0275elementEnd()(),t.\u0275\u0275template(11,at,4,1,"div",5),t.\u0275\u0275elementEnd()),2&a&&(t.\u0275\u0275advance(3),t.\u0275\u0275textInterpolate(n.title),t.\u0275\u0275advance(1),t.\u0275\u0275property("ngClass",t.\u0275\u0275pureFunction2(8,nt,n.chartData.avarageDiff<=0,n.chartData.avarageDiff>0)),t.\u0275\u0275advance(1),t.\u0275\u0275textInterpolate1(" ",t.\u0275\u0275pipeBind1(6,6,n.chartData.avarageDiff)," "),t.\u0275\u0275advance(3),t.\u0275\u0275textInterpolate1(" ",n.value," "),t.\u0275\u0275advance(2),t.\u0275\u0275textInterpolate1("compared to ",n.comparedToValue,""),t.\u0275\u0275advance(1),t.\u0275\u0275property("ngIf",n.chartData))},directives:[h.NgClass,h.NgIf],pipes:[tt.s],styles:[".sales-overview-chart[_ngcontent-%COMP%]{border-radius:1rem;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:1.25rem}.sales-overview-chart__header[_ngcontent-%COMP%]{margin-bottom:.75rem;display:flex;align-items:center;justify-content:space-between}.sales-overview-chart__title[_ngcontent-%COMP%]{font-size:.875rem;font-weight:600}.sales-overview-chart__status[_ngcontent-%COMP%]{border-radius:4px;
1height:1.25rem;padding-left:.25rem;padding-right:.25rem;font-size:.75rem;font-weight:600}.sales-overview-chart__status--minus[_ngcontent-%COMP%]{--tw-bg-opacity: 1;background-color:rgb(255 227 227 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(240 62 62 / var(--tw-text-opacity, 1))}.sales-overview-chart__status--plus[_ngcontent-%COMP%]{--tw-bg-opacity: 1;background-color:rgb(195 250 232 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(9 146 104 / var(--tw-text-opacity, 1))}.sales-overview-chart__value[_ngcontent-%COMP%]{margin-bottom:.75rem;font-size:1.5rem;font-weight:700}.sales-overview-chart__value[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:.875rem;font-weight:400;--tw-text-opacity: 1;color:rgb(175 175 175 / var(--tw-text-opacity, 1))}"],changeDetection:0}),e})();var N=s(70655),V=s(44224),ot=s(75778),st=s(92198),it=s(72986),lt=s(2994);let A=(()=>{class e extends _.m1{constructor(a){super(),this.dashboardService=a,this.isLoadingStats$=this.select(({isLoadingStats:n})=>n),this.isLoadedStats$=this.select(({isLoadedStats:n})=>n),this.customerStats$=this.select(({customerStats:n})=>n),this.getCustomerStats=this.effect((0,T.z)((0,lt.b)(()=>this.patchState({isLoadingStats:!0})),(0,I.w)(n=>this.dashboardService.fetchCustomerStats(n).pipe((0,_._b)(o=>{this.patchState({isLoadingStats:!1,isLoadedStats:!0,customerStats:this.mapCustomerStats(o.dataset||[])})},o=>{console.log("Cant fetch customer stats",o),this.patchState({isLoadingStats:!1,isLoadedStats:!0})}))))),this.setState({isLoadingStats:!1,isLoadedStats:!1,customerStats:[]})}mapCustomerStats(a){return a.map(n=>Object.assign(Object.assign({},n),{totalSales:n.totalSales/100||0}))}}return e.\u0275fac=function(a){return new(a||e)(t.\u0275\u0275inject(M))},e.\u0275prov=t.\u0275\u0275defineInjectable({token:e,factory:e.\u0275fac}),e})();var ct=s(72751),dt=s(66809),mt=s(90384);const pt=["tableWrap"];function ut(e,r){1&e&&(t.\u0275\u0275elementStart(0,"div",13),t.\u0275\u0275element(1,"mat-spinner",14),t.\u0275\u0275elementEnd()),2&e&&(t.\u0275\u0275advance(1),t.\u0275\u0275property("diameter",40))}function ht(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"th",26),t.\u0275\u0275text(1),t.\u0275\u0275elementEnd()),2&e){const a=t.\u0275\u0275nextContext(3);t.\u0275\u0275advance(1),t.\u0275\u0275textInterpolate(a.columnsLabels.customerName)}}function vt(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"td",27)(1,"span",28),t.\u0275\u0275text(2),t.\u0275\u0275elementEnd()()),2&e){const a=r.$implicit;t.\u0275\u0275advance(2),t.\u0275\u0275textInterpolate(a.customerName)}}function ft(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"th",26),t.\u0275\u0275text(1),t.\u0275\u0275elementEnd()),2&e){const a=t.\u0275\u0275nextContext(3);t.\u0275\u0275advance(1),t.\u0275\u0275textInterpolate(a.columnsLabels.totalSales)}}function gt(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"td",27),t.\u0275\u0275text(1),t.\u0275\u0275pipe(2,"uiCurrency"),t.\u0275\u0275elementEnd()),2&e){const a=r.$implicit;t.\u0275\u0275advance(1),t.\u0275\u0275textInterpolate1(" ",t.\u0275\u0275pipeBind1(2,1,a.totalSales)," ")}}function _t(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"th",26),t.\u0275\u0275text(1),t.\u0275\u0275elementEnd()),2&e){const a=t.\u0275\u0275nextContext(3);t.\u0275\u0275advance(1),t.\u0275\u0275textInterpolate(a.columnsLabels.numberOfOrders)}}function St(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"td",27),t.\u0275\u0275text(1),t.\u0275\u0275elementEnd()),2&e){const a=r.$implicit;t.\u0275\u0275advance(1),t.\u0275\u0275textInterpolate1(" ",a.numberOfOrders," ")}}function Ct(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"th",26),t.\u0275\u0275text(1),t.\u0275\u0275elementEnd()),2&e){const a=t.\u0275\u0275nextContext(3);t.\u0275\u0275advance(1),t.\u0275\u0275textInterpolate(a.columnsLabels.lastBookDate)}}function bt(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"td",27),t.\u0275\u0275text(1),t.\u0275\u0275pipe(2,"dayjsDateFormat"),t.\u0275\u0275elementEnd()),2&e){const a=r.$implicit,n=t.\u0275\u0275nextContext(3);t.\u0275\u0275advance(1),t.\u0275\u0275textInterpolate1(" ",t.\u0275\u0275pipeBind2(2,1,a.lastBookDate,n.dateFormat)," ")}}function yt(e,r){1&e&&t.\u0275\u0275element(0,"tr",29)}function wt(e,r){1&e&&t.\u0275\u0275element(0,"tr",30)}function Dt(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"div",15,16)(2,"table",17),t.\u0275\u0275elementContainerStart(3,18),t.\u0275\u0275template(4,ht,2,1,"th",19),t.\u0275\u0275template(5,vt,3,1,"td",20),t.\u0275\u0275elementContainerEnd(),t.\u0275\u0275elementContainerStart(6,21),t.\u0275\u0275template(7,ft,2,1,"th",19),t.\u0275\u0275template(8,gt,3,3,"td",20),t.\u0275\u0275elementContainerEnd(),t.\u0275\u0275elementContainerStart(9,22),t.\u0275\u0275template(10,_t,2,1,"th",19),t.\u0275\u0275template(11,St,2,1,"td",20),t.\u0275\u0275elementContainerEnd(),t.\u0275\u0275elementContainerStart(12,23),t.\u0275\u0275template(13,Ct,2,1,"th",19),t.\u0275\u0275template(14,bt,3,4,"td",20),t.\u0275\u0275elementContainerEnd(),t.\u0275\u0275template(15,yt,1,0,"tr",24),t.\u0275\u0275template(16,wt,1,0,"tr",25),t.\u0275\u0275elementEnd()()),2&e){const a=t.\u0275\u0275nextContext().ngIf,n=t.\u0275\u0275nextContext();t.\u0275\u0275advance(2),t.\u0275\u0275property("dataSource",a),t.\u0275\u0275advance(13),t.\u0275\u0275property("cdkHeaderRowDef",n.displayedColumns)("cdkHeaderRowDefSticky",!0),t.\u0275\u0275advance(1),t.\u0275\u0275property("cdkRowDefColumns",n.displayedColumns)}}function Ot(e,r){1&e&&(t.\u0275\u0275elementStart(0,"div",32),t.\u0275\u0275text(1," No Data "),t.\u0275\u0275elementEnd())}function xt(e,r){if(1&e&&(t.\u0275\u0275template(0,Ot,2,0,"div",31),t.\u0275\u0275pipe(1,"async")),2&e){const a=t.\u0275\u0275nextContext(2);t.\u0275\u0275property("ngIf",t.\u0275\u0275pipeBind1(1,1,a.isLoadedStats$))}}function Tt(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"div",9),t.\u0275\u0275template(1,ut,2,1,"div",10),t.\u0275\u0275pipe(2,"async"),t.\u0275\u0275pipe(3,"async"),t.\u0275\u0275template(4,Dt,17,4,"div",11),t.\u0275\u0275template(5,xt,2,3,"ng-template",null,12,t.\u0275\u0275templateRefExtractor),t.\u0275\u0275elementEnd()),2&e){const a=r.ngIf,n=t.\u0275\u0275reference(6),o=t.\u0275\u0275nextContext();t.\u0275\u0275advance(1),t.\u0275\u0275property("ngIf",t.\u0275\u0275pipeBind1(2,3,o.isLoadedStats$)&&t.\u0275\u0275pipeBind1(3,5,o.isLoadingStats$)),t.\u0275\u0275advance(3),t.\u0275\u0275property("ngIf",a.length)("ngIfElse",n)}}const It=function(){return[]};var m=(()=>{return(e=m||(m={})).today="Today",e.last7Days="Last 7 Days",e.last4Weeks="Last 4 Weeks",e.last3Month="Last 3 Month",e.last12Month="Last 12 Month",e.monthToDate="Month to date",e.quarterToDate="Quarter to date",e.yearToDate="Year to date",e.allTime="All time",m;var e})();let C=class{constructor(r,a,n,o){this.customerStatsStore=r,this.dayjsDateFormatPipe=a,this.uiCurrencyPipe=n,this.excelService=o,this.isLoadingStats$=this.customerStatsStore.isLoadingStats$,this.isLoadedStats$=this.customerStatsStore.isLoadedStats$,this.customerStats$=this.customerStatsStore.customerStats$,this.dateRanges={[m.today]:[this.tomorrow.subtract(1,"day"),this.today],[m.last7Days]:[this.tomorrow.subtract(7,"days"),this.today],[m.last4Weeks]:[this.tomorrow.subtract(4,"weeks"),this.today],[m.last3Month]:[this.tomorrow.subtract(3,"month"),this.today],[m.last12Month]:[this.tomorrow.subtract(12,"month"),this.today],[m.monthToDate]:[this.today.startOf("month"),this.today],[m.quarterToDate]:[this.today.startOf("quarter"),this.today],[m.yearToDate]:[this.today.startOf("year"),this.today],[m.allTime]:[this.tomorrow.subtract(10,"years"),this.today]},this.sortOptions=[{name:"Highest Total Sales",value:"totalSales"},{name:"Highest # of orders",value:"numberOfOrders"},{name:"Last Book Date",value:"lastBookDate"},{name:"Have Not Booked In",value:"haveNotBookedIn"}],this.selectedPeriod={startDate:this.tomorrow.subtract(12,"month"),endDate:this.today},this.selectedSort=this.sortOptions[0].value,this.displayedColumns=["customerName","totalSales","numberOfOrders","lastBookDate"],this.columnsLabels={customerName:"Customer Name",totalSales:"Total Sales",numberOfOrders:"# of Orders",lastBookDate:"Last Book Date"},this.dateFormat=u.lvo.US_NUMERIC_DATE_SHORT_2Y}get today(){return i()().endOf("day")}get tomorrow(){return i()().add(1,"day").startOf("day")}ngOnInit(){this.getCustomerStats(),this.isLoadingStats$.pipe((0,V.t)(this),(0,ot.x)(),(0,st.h)(r=>!r)).subscribe(()=>{this.scrollToTop()})}getCustomerStats(){this.customerStatsStore.getCustomerStats({start:this.selectedPeriod.startDate.toISOString(),end:this.selectedPeriod.endDate.toISOString(),sortBy:this.selectedSort})}exportAsXLSX(){this.customerStats$.pipe((0,it.q)(1)).subscribe(r=>{if(0===r.length)return;const a=this.getExportData(r),n=this.getExportFileName();this.excelService.exportAsExcelFile(a,n)})}getExportFileName(){const r=u.lvo.EU_DATE_DASHED;return`customer-stats_${this.selectedPeriod.startDate.format(r)} - ${this.selectedPeriod.endDate.format(r)}`}getExportData(r){return r.map(a=>this.displayedColumns.reduce((n,o)=>{const l=this.columnsLabels[o];return Object.assign(Object.assign({},n),"totalSales"===o?{[l]:this.uiCurrencyPipe.transform(a.totalSales)}:"lastBookDate"===o?{[l]:this.dayjsDateFormatPipe.transform(a.lastBookDate,this.dateFormat)}:{[l]:a[o]})},{}))}scrollToTop(){this.tableWrap&&(this.tableWrap.nativeElement.scrollTop=0)}};C.\u0275fac=function(r){return new(r||C)(t.\u0275\u0275directiveInject(A),t.\u0275\u0275directiveInject(d.B8E),t.\u0275\u0275directiveInject(d._ab),t.\u0275\u0275directiveInject(w.xBP))},C.\u0275cmp=t.\u0275\u0275defineComponent({type:C,selectors:[["tn-overview-customer-stats"]],viewQuery:function(r,a){
1if(1&r&&t.\u0275\u0275viewQuery(pt,5),2&r){let n;t.\u0275\u0275queryRefresh(n=t.\u0275\u0275loadQuery())&&(a.tableWrap=n.first)}},inputs:{locale:"locale"},features:[t.\u0275\u0275ProvidersFeature([A])],decls:13,vars:19,consts:[[1,"flex","justify-between","mb-12"],[1,"flex","gap-12"],[1,"border","border-gray-30","rounded","h-40","px-6","cursor-default","flex","items-center","gap-4","bg-white"],["uiIcon","calendar_today",1,"text-gray-30"],["readonly","","ngxDaterangepickerMd","",1,"date-range-input",3,"ngModel","locale","ranges","showDropdowns","lockStartDate","alwaysShowCalendars","customRangeDirection","ngModelChange"],["panelType","section",3,"ngModel","items","ngModelChange"],["type","button","uiBtnTheme","","uiBtnSize","small",3,"disabled","click"],["uiIcon","download",3,"size"],["class","relative",4,"ngIf"],[1,"relative"],["class","spinner-wrap",4,"ngIf"],["class","customer-stats-table-wrap",4,"ngIf","ngIfElse"],["emptyTableTpl",""],[1,"spinner-wrap"],[3,"diameter"],[1,"customer-stats-table-wrap"],["tableWrap",""],["cdk-table","",1,"customer-stats-table",3,"dataSource"],["cdkColumnDef","customerName"],["mat-header-cell","","class","customer-stats-table__header",4,"cdkHeaderCellDef"],["mat-cell","","class","customer-stats-table__cell",4,"cdkCellDef"],["cdkColumnDef","totalSales"],["cdkColumnDef","numberOfOrders"],["cdkColumnDef","lastBookDate"],["cdk-header-row","",4,"cdkHeaderRowDef","cdkHeaderRowDefSticky"],["cdk-row","","tabindex","1",4,"cdkRowDef","cdkRowDefColumns"],["mat-header-cell","",1,"customer-stats-table__header"],["mat-cell","",1,"customer-stats-table__cell"],[1,"font-semibold"],["cdk-header-row",""],["cdk-row","","tabindex","1"],["class","h-64 flex items-center justify-center bg-white text-14",4,"ngIf"],[1,"h-64","flex","items-center","justify-center","bg-white","text-14"]],template:function(r,a){if(1&r&&(t.\u0275\u0275elementStart(0,"div",0)(1,"div",1)(2,"div",2),t.\u0275\u0275element(3,"i",3),t.\u0275\u0275elementStart(4,"input",4),t.\u0275\u0275listener("ngModelChange",function(o){return a.selectedPeriod=o})("ngModelChange",function(){return a.getCustomerStats()}),t.\u0275\u0275elementEnd()(),t.\u0275\u0275elementStart(5,"ui-select",5),t.\u0275\u0275listener("ngModelChange",function(o){return a.selectedSort=o})("ngModelChange",function(){return a.getCustomerStats()}),t.\u0275\u0275elementEnd()(),t.\u0275\u0275elementStart(6,"button",6),t.\u0275\u0275listener("click",function(){return a.exportAsXLSX()}),t.\u0275\u0275pipe(7,"async"),t.\u0275\u0275pipe(8,"async"),t.\u0275\u0275element(9,"i",7),t.\u0275\u0275text(10," Download Excel "),t.\u0275\u0275elementEnd()(),t.\u0275\u0275template(11,Tt,7,7,"div",8),t.\u0275\u0275pipe(12,"async")),2&r){let n;t.\u0275\u0275advance(4),t.\u0275\u0275property("ngModel",a.selectedPeriod)("locale",a.locale)("ranges",a.dateRanges)("showDropdowns",!0)("lockStartDate",!1)("alwaysShowCalendars",!0)("customRangeDirection",!1),t.\u0275\u0275advance(1),t.\u0275\u0275property("ngModel",a.selectedSort)("items",a.sortOptions),t.\u0275\u0275advance(1),t.\u0275\u0275property("disabled",t.\u0275\u0275pipeBind1(7,12,a.isLoadingStats$)||0===(null!==(n=t.\u0275\u0275pipeBind1(8,14,a.customerStats$))&&void 0!==n?n:t.\u0275\u0275pureFunction0(18,It)).length),t.\u0275\u0275advance(3),t.\u0275\u0275property("size",18),t.\u0275\u0275advance(2),t.\u0275\u0275property("ngIf",t.\u0275\u0275pipeBind1(12,16,a.customerStats$))}},directives:[$.a,x.SP,c.Fj,c.JJ,c.On,R.H,ct.V,dt.s,h.NgIf,H.Ou,f.zC,f.fo,f.D5,f.O_,f.s$,f.xN,f.Sq,f._J],pipes:[h.AsyncPipe,u._ab,mt.B],styles:[".customer-stats-table-wrap[_ngcontent-%COMP%]{position:relative;width:100%;overflow:auto;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 226 226 / var(--tw-border-opacity, 1));max-height:270px}.spinner-wrap[_ngcontent-%COMP%]{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:999}.customer-stats-table[_ngcontent-%COMP%]{width:100%;--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(117 117 117 / var(--tw-text-opacity, 1))}.customer-stats-table__cell[_ngcontent-%COMP%]{font-size:.875rem}.customer-stats-table__header[_ngcontent-%COMP%]{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1));font-size:.75rem;font-weight:400}.customer-stats-table__cell[_ngcontent-%COMP%], .customer-stats-table__header[_ngcontent-%COMP%]{padding:.75rem}.customer-stats-table[_ngcontent-%COMP%] .cdk-row[_ngcontent-%COMP%]{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgb(226 226 226 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.customer-stats-table[_ngcontent-%COMP%] .cdk-row[_ngcontent-%COMP%]:last-child{border-style:none}
1.date-range-input[_ngcontent-%COMP%]{width:200px}"]}),C=(0,N.gn)([(0,V.c)(),(0,N.w6)("design:paramtypes",[A,d.B8E,d._ab,w.xBP])],C);let z=(()=>{class e extends _.m1{constructor(a){super(),this.dashboardService=a,this.markers$=this.select(({markers:n})=>n),this.getHeatmap=this.effect((0,T.z)((0,I.w)(n=>this.dashboardService.fetchOrdersHeatmap(n).pipe((0,_._b)(o=>{this.patchState({markers:o.dataset||[]})},o=>{console.log("Cant fetch heatmap",o)}))))),this.setState({markers:[]})}}return e.\u0275fac=function(a){return new(a||e)(t.\u0275\u0275inject(M))},e.\u0275prov=t.\u0275\u0275defineInjectable({token:e,factory:e.\u0275fac}),e})();function Mt(e,r){1&e&&t.\u0275\u0275element(0,"map-marker",7),2&e&&t.\u0275\u0275property("position",r.$implicit.location)}function Et(e,r){if(1&e&&(t.\u0275\u0275elementStart(0,"google-map",3,4)(2,"map-marker-clusterer",5),t.\u0275\u0275template(3,Mt,1,1,"map-marker",6),t.\u0275\u0275elementEnd()()),2&e){const a=t.\u0275\u0275nextContext().ngIf;t.\u0275\u0275property("zoom",3)("center",a[0].location),t.\u0275\u0275advance(3),t.\u0275\u0275property("ngForOf",a)}}function Pt(e,r){if(1&e){const a=t.\u0275\u0275getCurrentView();t.\u0275\u0275elementContainerStart(0),t.\u0275\u0275elementStart(1,"ui-select",1),t.\u0275\u0275listener("ngModelChange",function(o){return t.\u0275\u0275restoreView(a),t.\u0275\u0275nextContext().selectedPeriod=o})("ngModelChange",function(){return t.\u0275\u0275restoreView(a),t.\u0275\u0275nextContext().filterHeatmap()}),t.\u0275\u0275elementEnd(),t.\u0275\u0275template(2,Et,4,3,"google-map",2),t.\u0275\u0275elementContainerEnd()}if(2&e){const a=r.ngIf,n=t.\u0275\u0275nextContext();t.\u0275\u0275advance(1),t.\u0275\u0275property("ngModel",n.selectedPeriod)("items",n.filterOptions),t.\u0275\u0275advance(1),t.\u0275\u0275property("ngIf",a[0])}}let Rt=(()=>{class e{constructor(a){this.dashboardHeatmapStore=a,this.markers$=this.dashboardHeatmapStore.markers$,this.filterOptions=[{name:"Current year",value:{start:i()().startOf("year").toISOString(),end:i()().toISOString()}},{name:"Previous year",value:{start:i()().subtract(1,"year").startOf("year").toISOString(),end:i()().subtract(1,"year").endOf("year").toISOString()}}],this.selectedPeriod=this.filterOptions[0].value}ngOnInit(){this.filterHeatmap()}filterHeatmap(){this.dashboardHeatmapStore.getHeatmap(this.selectedPeriod)}}return e.\u0275fac=function(a){return new(a||e)(t.\u0275\u0275directiveInject(z))},e.\u0275cmp=t.\u0275\u0275defineComponent({type:e,selectors:[["tn-overview-heatmap"]],features:[t.\u0275\u0275ProvidersFeature([z])],decls:2,vars:3,consts:[[4,"ngIf"],["panelType","section",1,"mb-12","inline-block",3,"ngModel","items","ngModelChange"],["height","500px","width","100%",3,"zoom","center",4,"ngIf"],["height","500px","width","100%",3,"zoom","center"],["map",""],["imagePath","https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m"],[3,"position",4,"ngFor","ngForOf"],[3,"position"]],template:function(a,n){1&a&&(t.\u0275\u0275template(0,Pt,3,3,"ng-container",0),t.\u0275\u0275pipe(1,"async")),2&a&&t.\u0275\u0275property("ngIf",t.\u0275\u0275pipeBind1(1,1,n.markers$))},directives:[h.NgIf,R.H,c.JJ,c.On,b.b6,b.MS,h.NgForOf,b.O_],pipes:[h.AsyncPipe],styles:[".map[_ngcontent-%COMP%]{height:400px}"]}),e})();function kt(e,r){if(1&e&&(t.\u0275\u0275element(0,"tn-overview-sales-overview-chart",12),t.\u0275\u0275pipe(1,"translate"),t.\u0275\u0275pipe(2,"uiCurrency"),t.\u0275\u0275pipe(3,"uiCurrency")),2&e){const a=r.ngIf;t.\u0275\u0275property("chartData",a)("title",t.\u0275\u0275pipeBind1(1,5,"DASHBOARD_TOTAL_REVENUE"))("value",t.\u0275\u0275pipeBind1(2,7,a.value))("comparedToValue",t.\u0275\u0275pipeBind1(3,9,a.comparedToValue))("chartName","totalRevenue")}}function At(e,r){if(1&e&&(t.\u0275\u0275element(0,"tn-overview-sales-overview-chart",12),t.\u0275\u0275pipe(1,"translate")),2&e){const a=r.ngIf;t.\u0275\u0275property("chartData",a)("title",t.\u0275\u0275pipeBind1(1,5,"DASHBOARD_TOTAL_ORDERS"))("value",a.value)("comparedToValue",a.comparedToValue)("chartName","totalOrders")}}function Bt(e,r){if(1&e&&(t.\u0275\u0275element(0,"tn-overview-sales-overview-chart",12),t.\u0275\u0275pipe(1,"translate"),t.\u0275\u0275pipe(2,"uiCurrency"),t.\u0275\u0275pipe(3,"uiCurrency")),2&e){const a=r.ngIf;t.\u0275\u0275property("chartData",a)("title",t.\u0275\u0275pipeBind1(1,5,"DASHBOARD_AVARAGE_ORDER"))("value",t.\u0275\u0275pipeBind1(2,7,a.value))("comparedToValue",t.\u0275\u0275pipeBind1(3,9,a.comparedToValue))("chartName","averageValue")}}let Ht=(()=>{class e{constructor(a,n){var o,l;this.dashboardStore=a,this.appConfigService=n,this.euFormatted=null!==(l=null===(o=this.appConfigService.localization)||void 0===o?void 0:o.euFormattedDate)&&void 0!==l&&l,this.locale={customRangeLabel:" - ",format:this.euFormatted?u.lvo.EU_DATE_DASHED:u.lvo.US_DATE_DASHED,displayFormat:this.euFormatted?u.lvo.EU_DATE:u.lvo.MONTH_DAY_YEAR,firstDay:i().localeData().firstDayOfWeek()},this.chartsData$=this.dashboardStore.chartsData$}}return e.\u0275fac=function(a){return new(a||e)(t.\u0275\u0275directiveInject(P),t.\u0275\u0275directiveInject(w._ZM))},e.\u0275cmp=t.\u0275\u0275defineComponent({type:e,selectors:[["tn-overview-dashboard"]],features:[t.\u0275\u0275ProvidersFeature([P])],decls:28,vars:20,consts:[[1,"dashboard"],[1,"dashboard__title"],[1,"dashboard__container"],[1,"dashboard__main"],[1,"dashboard-section","sales-overview"],[1,"dashboard-section__title"],[1,"sales-overview__filters"],[3,"locale"],[1,"sales-overview__charts"],[3,"chartData","title","value","comparedToValue","chart
1Name",4,"ngIf"],[1,"dashboard-section","customer-stats"],[1,"dashboard-section","heatmap"],[3,"chartData","title","value","comparedToValue","chartName"]],template:function(a,n){if(1&a&&(t.\u0275\u0275elementStart(0,"div",0)(1,"h1",1),t.\u0275\u0275text(2),t.\u0275\u0275pipe(3,"translate"),t.\u0275\u0275elementEnd(),t.\u0275\u0275elementStart(4,"div",2)(5,"div",3)(6,"div",4)(7,"div",5),t.\u0275\u0275text(8),t.\u0275\u0275pipe(9,"translate"),t.\u0275\u0275elementEnd(),t.\u0275\u0275elementStart(10,"div",6),t.\u0275\u0275element(11,"tn-overview-sales-overview-filters",7),t.\u0275\u0275elementEnd(),t.\u0275\u0275elementStart(12,"div",8),t.\u0275\u0275template(13,kt,4,11,"tn-overview-sales-overview-chart",9),t.\u0275\u0275pipe(14,"async"),t.\u0275\u0275template(15,At,2,7,"tn-overview-sales-overview-chart",9),t.\u0275\u0275pipe(16,"async"),t.\u0275\u0275template(17,Bt,4,11,"tn-overview-sales-overview-chart",9),t.\u0275\u0275pipe(18,"async"),t.\u0275\u0275elementEnd()(),t.\u0275\u0275elementStart(19,"div",10)(20,"div",5),t.\u0275\u0275text(21,"Customer Stats"),t.\u0275\u0275elementEnd(),t.\u0275\u0275element(22,"tn-overview-customer-stats",7),t.\u0275\u0275elementEnd(),t.\u0275\u0275elementStart(23,"div",11)(24,"div",5),t.\u0275\u0275text(25),t.\u0275\u0275pipe(26,"translate"),t.\u0275\u0275elementEnd(),t.\u0275\u0275element(27,"tn-overview-heatmap"),t.\u0275\u0275elementEnd()()()()),2&a){let o,l,p;t.\u0275\u0275advance(2),t.\u0275\u0275textInterpolate(t.\u0275\u0275pipeBind1(3,8,"DASHBOARD_TITLE")),t.\u0275\u0275advance(6),t.\u0275\u0275textInterpolate(t.\u0275\u0275pipeBind1(9,10,"DASHBOARD_SALES")),t.\u0275\u0275advance(3),t.\u0275\u0275property("locale",n.locale),t.\u0275\u0275advance(2),t.\u0275\u0275property("ngIf",null==(o=t.\u0275\u0275pipeBind1(14,12,n.chartsData$))?null:o.totalRevenue),t.\u0275\u0275advance(2),t.\u0275\u0275property("ngIf",null==(l=t.\u0275\u0275pipeBind1(16,14,n.chartsData$))?null:l.totalOrders),t.\u0275\u0275advance(2),t.\u0275\u0275property("ngIf",null==(p=t.\u0275\u0275pipeBind1(18,16,n.chartsData$))?null:p.averageValue),t.\u0275\u0275advance(5),t.\u0275\u0275property("locale",n.locale),t.\u0275\u0275advance(3),t.\u0275\u0275textInterpolate(t.\u0275\u0275pipeBind1(26,18,"DASHBOARD_HEATMAP"))}},directives:[q,h.NgIf,rt,C,Rt],pipes:[y.X$,u._ab,h.AsyncPipe],styles:[".dashboard[_ngcontent-%COMP%]{padding:1.75rem}.dashboard__title[_ngcontent-%COMP%]{margin-bottom:1.25rem;font-size:1.5rem;font-weight:700}.dashboard__container[_ngcontent-%COMP%]{display:flex;gap:1.25rem}.dashboard__right[_ngcontent-%COMP%]{flex:1 1 0%}.dashboard-section[_ngcontent-%COMP%]{margin-bottom:2rem}.dashboard-section__title[_ngcontent-%COMP%]{margin-bottom:.75rem;font-weight:600}.sales-overview__filters[_ngcontent-%COMP%]{margin-bottom:1.5rem}.sales-overview__charts[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:2rem;gap:2rem}"],changeDetection:0}),e})(),jt=(()=>{class e{}return e.\u0275fac=function(a){return new(a||e)},e.\u0275mod=t.\u0275\u0275defineNgModule({type:e}),e.\u0275inj=t.\u0275\u0275defineInjector({imports:[[h.CommonModule,U.Bz.forChild([{path:"",component:Ht}]),d.p3T,c.UX,x.n1,d.Anc,d.QX1,y.aw,Y.su,c.u5,b.Y4,d.iVY,f.HT,d.cKw,H.Cq,d.FqG]]}),e})()}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.