@eric-emg/symphiq-components 1.2.546 → 1.2.549
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.
- package/fesm2022/symphiq-components.mjs +162 -166
- package/fesm2022/symphiq-components.mjs.map +1 -1
- package/index.d.ts +52 -51
- package/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -175,16 +175,11 @@ class ModalService {
|
|
|
175
175
|
this.modalState.next(newState);
|
|
176
176
|
}
|
|
177
177
|
openMetricModal(metric, charts = [], previousState, expandedSection) {
|
|
178
|
-
console.log('[ModalService.openMetricModal] Called with metric:', metric?.metric);
|
|
179
|
-
console.log('[ModalService.openMetricModal] Charts count:', charts.length);
|
|
180
|
-
console.log('[ModalService.openMetricModal] Chart IDs:', charts.map(c => c.performanceItemId));
|
|
181
178
|
const prevStack = previousState?.navigationStack || [];
|
|
182
179
|
const navigationStack = previousState ? [...prevStack, previousState] : [];
|
|
183
180
|
const openedFromMainBody = !previousState;
|
|
184
181
|
const newState = { type: 'metric', data: metric, charts, previousState: previousState || null, expandedSection, navigationStack, openedFromMainBody };
|
|
185
|
-
console.log('[ModalService.openMetricModal] Setting modal state with charts:', newState.charts.length);
|
|
186
182
|
this.modalState.next(newState);
|
|
187
|
-
console.log('[ModalService.openMetricModal] Modal state value after next, charts count:', this.modalState.value?.charts?.length);
|
|
188
183
|
}
|
|
189
184
|
openChartModal(chart, previousState) {
|
|
190
185
|
const navigationStack = previousState ? [...(previousState.navigationStack || []), previousState] : [];
|
|
@@ -1938,10 +1933,6 @@ class HeaderScrollService {
|
|
|
1938
1933
|
};
|
|
1939
1934
|
}
|
|
1940
1935
|
log(message, data) {
|
|
1941
|
-
if (this.DEBUG) {
|
|
1942
|
-
const timestamp = new Date().toISOString().split('T')[1];
|
|
1943
|
-
console.log(`[HeaderScroll ${timestamp}] ${message}`, data ?? '');
|
|
1944
|
-
}
|
|
1945
1936
|
}
|
|
1946
1937
|
configure(config) {
|
|
1947
1938
|
this.config = {
|
|
@@ -3518,7 +3509,6 @@ class DataLoaderService {
|
|
|
3518
3509
|
const url = `${this.baseUrl()}/${key}.json`;
|
|
3519
3510
|
if (!this.cache.has(key)) {
|
|
3520
3511
|
this.cache.set(key, this.http.get(url).pipe(shareReplay$1(1), catchError$1(err => {
|
|
3521
|
-
console.error(`Failed to load ${key}:`, err);
|
|
3522
3512
|
this.cache.delete(key);
|
|
3523
3513
|
throw err;
|
|
3524
3514
|
})));
|
|
@@ -8520,14 +8510,6 @@ class MetricCardComponent {
|
|
|
8520
8510
|
}
|
|
8521
8511
|
});
|
|
8522
8512
|
});
|
|
8523
|
-
effect(() => {
|
|
8524
|
-
const metric = this.metric();
|
|
8525
|
-
const chartsInput = this.charts();
|
|
8526
|
-
const allChartsInput = this.allCharts();
|
|
8527
|
-
console.log('[MetricCard] Metric:', metric.metric);
|
|
8528
|
-
console.log('[MetricCard] charts() count:', chartsInput.length, 'IDs:', chartsInput.map(c => c.performanceItemId));
|
|
8529
|
-
console.log('[MetricCard] allCharts() count:', allChartsInput.length);
|
|
8530
|
-
});
|
|
8531
8513
|
}
|
|
8532
8514
|
animateValue(target) {
|
|
8533
8515
|
if (this.animationFrame !== null) {
|
|
@@ -16616,14 +16598,11 @@ class ModalComponent {
|
|
|
16616
16598
|
this.modalService.modalState$
|
|
16617
16599
|
.pipe(takeUntilDestroyed())
|
|
16618
16600
|
.subscribe(state => {
|
|
16619
|
-
console.log('[FunnelAnalysisModal] Received modal state:', state.type, state);
|
|
16620
16601
|
if (state.type === 'visualization') {
|
|
16621
|
-
console.log('[FunnelAnalysisModal] Skipping visualization type');
|
|
16622
16602
|
return;
|
|
16623
16603
|
}
|
|
16624
16604
|
// Delegate business insight types to Profile Analysis Modal and item-detail to Business Analysis Modal
|
|
16625
16605
|
if (state.type === 'business-insight-detail' || state.type === 'goal-business-insights-list' || state.type === 'item-detail') {
|
|
16626
|
-
console.log('[FunnelAnalysisModal] Delegating to other modal, clearing state');
|
|
16627
16606
|
this.modalStateSignal.set({
|
|
16628
16607
|
type: null,
|
|
16629
16608
|
data: null,
|
|
@@ -16656,9 +16635,6 @@ class ModalComponent {
|
|
|
16656
16635
|
chainDepth++;
|
|
16657
16636
|
current = current.previousState;
|
|
16658
16637
|
}
|
|
16659
|
-
console.log('[FunnelAnalysisModal] Setting modalStateSignal with type:', state.type);
|
|
16660
|
-
console.log('[FunnelAnalysisModal] Charts received from state:', state.charts?.length ?? 0, 'charts');
|
|
16661
|
-
console.log('[FunnelAnalysisModal] Chart IDs:', state.charts?.map((c) => c.performanceItemId));
|
|
16662
16638
|
this.modalStateSignal.set({
|
|
16663
16639
|
type: state.type,
|
|
16664
16640
|
data: data,
|
|
@@ -16668,7 +16644,6 @@ class ModalComponent {
|
|
|
16668
16644
|
expandedSection: state.expandedSection,
|
|
16669
16645
|
navigationStack: state.navigationStack || []
|
|
16670
16646
|
});
|
|
16671
|
-
console.log('[FunnelAnalysisModal] isOpen() should now be:', state.type !== null);
|
|
16672
16647
|
});
|
|
16673
16648
|
// Effect to trigger animations when metrics list modal opens
|
|
16674
16649
|
effect(() => {
|
|
@@ -43286,7 +43261,6 @@ class ProfileAnalysisModalComponent {
|
|
|
43286
43261
|
this.modalService.modalState$
|
|
43287
43262
|
.pipe(takeUntilDestroyed())
|
|
43288
43263
|
.subscribe(state => {
|
|
43289
|
-
console.log('[ProfileAnalysisModal] Received modal state:', state.type, state);
|
|
43290
43264
|
// Types that this modal handles (only update previousState for these)
|
|
43291
43265
|
const handledTypes = [
|
|
43292
43266
|
'goal-detail', 'goal-objectives', 'objective-strategies', 'strategy-recommendations',
|
|
@@ -43577,14 +43551,12 @@ class ProfileAnalysisModalComponent {
|
|
|
43577
43551
|
this.currentCharts.set(state.charts || []);
|
|
43578
43552
|
}
|
|
43579
43553
|
else if (state.type === 'metric' && state.data) {
|
|
43580
|
-
console.log('[ProfileAnalysisModal] Handling metric type, opening modal');
|
|
43581
43554
|
const metric = state.data;
|
|
43582
43555
|
this.modalData.set(metric);
|
|
43583
43556
|
const formattedName = metric.metric ? this.metricFormatter.formatMetricName(metric.metric) : 'Metric Details';
|
|
43584
43557
|
this.modalTitle.set(formattedName);
|
|
43585
43558
|
this.modalType.set('metric');
|
|
43586
43559
|
this.isOpen.set(true);
|
|
43587
|
-
console.log('[ProfileAnalysisModal] isOpen set to true, modalType:', this.modalType());
|
|
43588
43560
|
const stack = state.navigationStack || [];
|
|
43589
43561
|
this.navigationStack.set(stack);
|
|
43590
43562
|
this.currentCharts.set(state.charts || []);
|
|
@@ -58784,7 +58756,7 @@ class ProgressToTargetChartComponent {
|
|
|
58784
58756
|
buildChart(chartData) {
|
|
58785
58757
|
if (!this.root || !this.chart || !this.xAxis || !this.yAxis)
|
|
58786
58758
|
return;
|
|
58787
|
-
const { currentValue, paceValue, targetValue, status } = chartData;
|
|
58759
|
+
const { currentValue, paceValue, targetValue, status, pacingPercentage } = chartData;
|
|
58788
58760
|
const xAxisMax = this.calculateXAxisMax(paceValue, targetValue, currentValue);
|
|
58789
58761
|
this.xAxis.set('max', xAxisMax);
|
|
58790
58762
|
const categoryDataItems = [
|
|
@@ -58795,8 +58767,8 @@ class ProgressToTargetChartComponent {
|
|
|
58795
58767
|
}
|
|
58796
58768
|
];
|
|
58797
58769
|
this.yAxis.data.setAll(categoryDataItems);
|
|
58798
|
-
const paceColors = this.getPaceColors(status);
|
|
58799
|
-
const currentColors = this.getCurrentColors(status);
|
|
58770
|
+
const paceColors = this.getPaceColors(status, pacingPercentage);
|
|
58771
|
+
const currentColors = this.getCurrentColors(status, pacingPercentage);
|
|
58800
58772
|
const paceSeries = this.chart.series.push(ColumnSeries.new(this.root, {
|
|
58801
58773
|
name: 'Pace',
|
|
58802
58774
|
xAxis: this.xAxis,
|
|
@@ -58908,7 +58880,10 @@ class ProgressToTargetChartComponent {
|
|
|
58908
58880
|
}
|
|
58909
58881
|
return max * 1.1;
|
|
58910
58882
|
}
|
|
58911
|
-
getPaceColors(status) {
|
|
58883
|
+
getPaceColors(status, pacingPercentage) {
|
|
58884
|
+
if (pacingPercentage !== undefined && pacingPercentage < 0) {
|
|
58885
|
+
return this.getNegativePacingColors(pacingPercentage);
|
|
58886
|
+
}
|
|
58912
58887
|
switch (status) {
|
|
58913
58888
|
case 'ahead':
|
|
58914
58889
|
return {
|
|
@@ -58928,7 +58903,10 @@ class ProgressToTargetChartComponent {
|
|
|
58928
58903
|
};
|
|
58929
58904
|
}
|
|
58930
58905
|
}
|
|
58931
|
-
getCurrentColors(status) {
|
|
58906
|
+
getCurrentColors(status, pacingPercentage) {
|
|
58907
|
+
if (pacingPercentage !== undefined && pacingPercentage < 0) {
|
|
58908
|
+
return this.getNegativePacingCurrentColors(pacingPercentage);
|
|
58909
|
+
}
|
|
58932
58910
|
switch (status) {
|
|
58933
58911
|
case 'ahead':
|
|
58934
58912
|
return {
|
|
@@ -58948,6 +58926,60 @@ class ProgressToTargetChartComponent {
|
|
|
58948
58926
|
};
|
|
58949
58927
|
}
|
|
58950
58928
|
}
|
|
58929
|
+
getNegativePacingColors(pacingPercentage) {
|
|
58930
|
+
const absPercent = Math.abs(pacingPercentage);
|
|
58931
|
+
if (absPercent < 2) {
|
|
58932
|
+
return {
|
|
58933
|
+
color1: color(0xFACC15),
|
|
58934
|
+
color2: color(0xEAB308)
|
|
58935
|
+
};
|
|
58936
|
+
}
|
|
58937
|
+
else if (absPercent < 5) {
|
|
58938
|
+
return {
|
|
58939
|
+
color1: color(0xFB923C),
|
|
58940
|
+
color2: color(0xF97316)
|
|
58941
|
+
};
|
|
58942
|
+
}
|
|
58943
|
+
else if (absPercent < 10) {
|
|
58944
|
+
return {
|
|
58945
|
+
color1: color(0xF87171),
|
|
58946
|
+
color2: color(0xEF4444)
|
|
58947
|
+
};
|
|
58948
|
+
}
|
|
58949
|
+
else {
|
|
58950
|
+
return {
|
|
58951
|
+
color1: color(0xF04438),
|
|
58952
|
+
color2: color(0xdc2626)
|
|
58953
|
+
};
|
|
58954
|
+
}
|
|
58955
|
+
}
|
|
58956
|
+
getNegativePacingCurrentColors(pacingPercentage) {
|
|
58957
|
+
const absPercent = Math.abs(pacingPercentage);
|
|
58958
|
+
if (absPercent < 2) {
|
|
58959
|
+
return {
|
|
58960
|
+
color1: color(0xFDE047),
|
|
58961
|
+
color2: color(0xFACC15)
|
|
58962
|
+
};
|
|
58963
|
+
}
|
|
58964
|
+
else if (absPercent < 5) {
|
|
58965
|
+
return {
|
|
58966
|
+
color1: color(0xFDBA74),
|
|
58967
|
+
color2: color(0xFB923C)
|
|
58968
|
+
};
|
|
58969
|
+
}
|
|
58970
|
+
else if (absPercent < 10) {
|
|
58971
|
+
return {
|
|
58972
|
+
color1: color(0xFCA5A5),
|
|
58973
|
+
color2: color(0xF87171)
|
|
58974
|
+
};
|
|
58975
|
+
}
|
|
58976
|
+
else {
|
|
58977
|
+
return {
|
|
58978
|
+
color1: color(0xF86C59),
|
|
58979
|
+
color2: color(0xE65143)
|
|
58980
|
+
};
|
|
58981
|
+
}
|
|
58982
|
+
}
|
|
58951
58983
|
static { this.ɵfac = function ProgressToTargetChartComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ProgressToTargetChartComponent)(); }; }
|
|
58952
58984
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ProgressToTargetChartComponent, selectors: [["symphiq-progress-to-target-chart"]], viewQuery: function ProgressToTargetChartComponent_Query(rf, ctx) { if (rf & 1) {
|
|
58953
58985
|
i0.ɵɵviewQuery(_c0$D, 7);
|
|
@@ -58962,16 +58994,16 @@ class ProgressToTargetChartComponent {
|
|
|
58962
58994
|
}
|
|
58963
58995
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ProgressToTargetChartComponent, [{
|
|
58964
58996
|
type: Component,
|
|
58965
|
-
args: [{ selector: 'symphiq-progress-to-target-chart', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
58966
|
-
<div class="progress-chart-container">
|
|
58967
|
-
<div #chartdiv class="chart" style="width: 100%; height: 160px;"></div>
|
|
58968
|
-
</div>
|
|
58997
|
+
args: [{ selector: 'symphiq-progress-to-target-chart', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
58998
|
+
<div class="progress-chart-container">
|
|
58999
|
+
<div #chartdiv class="chart" style="width: 100%; height: 160px;"></div>
|
|
59000
|
+
</div>
|
|
58969
59001
|
`, styles: [".progress-chart-container{width:100%;margin-top:50px;overflow:visible}.chart{overflow:visible}\n"] }]
|
|
58970
59002
|
}], () => [], { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], chartDiv: [{
|
|
58971
59003
|
type: ViewChild,
|
|
58972
59004
|
args: ['chartdiv', { static: true }]
|
|
58973
59005
|
}] }); })();
|
|
58974
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ProgressToTargetChartComponent, { className: "ProgressToTargetChartComponent", filePath: "lib/components/revenue-calculator-dashboard/progress-to-target-chart.component.ts", lineNumber:
|
|
59006
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ProgressToTargetChartComponent, { className: "ProgressToTargetChartComponent", filePath: "lib/components/revenue-calculator-dashboard/progress-to-target-chart.component.ts", lineNumber: 67 }); })();
|
|
58975
59007
|
|
|
58976
59008
|
const _forTrack0$z = ($index, $item) => $item.metric;
|
|
58977
59009
|
function MetricReportModalComponent_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -59627,7 +59659,8 @@ class MetricReportModalComponent {
|
|
|
59627
59659
|
currentValue: this.ytdValue(),
|
|
59628
59660
|
paceValue: pacing.projectedValue,
|
|
59629
59661
|
targetValue: metric.targetValue,
|
|
59630
|
-
status: pacing.status
|
|
59662
|
+
status: pacing.status,
|
|
59663
|
+
pacingPercentage: pacing.pacingPercentage
|
|
59631
59664
|
};
|
|
59632
59665
|
}, ...(ngDevMode ? [{ debugName: "progressToTargetData" }] : []));
|
|
59633
59666
|
this.chartLegendDescription = computed(() => {
|
|
@@ -69723,7 +69756,7 @@ function MetricExecutiveSummaryComponent_Conditional_14_Template(rf, ctx) { if (
|
|
|
69723
69756
|
i0.ɵɵadvance(2);
|
|
69724
69757
|
i0.ɵɵproperty("ngClass", ctx_r0.metricValueClasses());
|
|
69725
69758
|
i0.ɵɵadvance();
|
|
69726
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r0.summary().currentValue, " ");
|
|
69759
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.formatNumber(ctx_r0.summary().currentValue), " ");
|
|
69727
69760
|
i0.ɵɵadvance();
|
|
69728
69761
|
i0.ɵɵconditional(ctx_r0.summary().yoyChange ? 7 : -1);
|
|
69729
69762
|
} }
|
|
@@ -69746,7 +69779,7 @@ function MetricExecutiveSummaryComponent_Conditional_15_Template(rf, ctx) { if (
|
|
|
69746
69779
|
i0.ɵɵadvance(2);
|
|
69747
69780
|
i0.ɵɵproperty("ngClass", ctx_r0.metricValueClasses());
|
|
69748
69781
|
i0.ɵɵadvance();
|
|
69749
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r0.summary().targetValue, " ");
|
|
69782
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.formatNumber(ctx_r0.summary().targetValue), " ");
|
|
69750
69783
|
} }
|
|
69751
69784
|
function MetricExecutiveSummaryComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
69752
69785
|
i0.ɵɵelementStart(0, "div", 12)(1, "div", 22);
|
|
@@ -69767,13 +69800,13 @@ function MetricExecutiveSummaryComponent_Conditional_16_Template(rf, ctx) { if (
|
|
|
69767
69800
|
i0.ɵɵadvance(2);
|
|
69768
69801
|
i0.ɵɵproperty("ngClass", ctx_r0.metricValueClasses());
|
|
69769
69802
|
i0.ɵɵadvance();
|
|
69770
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r0.projectedValue(), " ");
|
|
69803
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.formatNumber(ctx_r0.projectedValue()), " ");
|
|
69771
69804
|
} }
|
|
69772
69805
|
function MetricExecutiveSummaryComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
69773
69806
|
i0.ɵɵelementStart(0, "div", 12)(1, "div", 22);
|
|
69774
69807
|
i0.ɵɵelement(2, "symphiq-icon", 23);
|
|
69775
69808
|
i0.ɵɵelementStart(3, "span", 24);
|
|
69776
|
-
i0.ɵɵtext(4, " Pacing ");
|
|
69809
|
+
i0.ɵɵtext(4, " Pacing vs Target ");
|
|
69777
69810
|
i0.ɵɵelementEnd()();
|
|
69778
69811
|
i0.ɵɵelementStart(5, "div", 28);
|
|
69779
69812
|
i0.ɵɵtext(6);
|
|
@@ -69826,7 +69859,7 @@ function MetricExecutiveSummaryComponent_Conditional_18_Template(rf, ctx) { if (
|
|
|
69826
69859
|
i0.ɵɵadvance();
|
|
69827
69860
|
i0.ɵɵconditional(ctx_r0.summary().metricHealthDescription ? 7 : -1);
|
|
69828
69861
|
} }
|
|
69829
|
-
function
|
|
69862
|
+
function MetricExecutiveSummaryComponent_Conditional_29_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
69830
69863
|
i0.ɵɵelementStart(0, "div", 32);
|
|
69831
69864
|
i0.ɵɵelement(1, "symphiq-napkin-visual-placeholder", 35);
|
|
69832
69865
|
i0.ɵɵelementEnd();
|
|
@@ -69835,12 +69868,12 @@ function MetricExecutiveSummaryComponent_Conditional_30_Conditional_4_Template(r
|
|
|
69835
69868
|
i0.ɵɵadvance();
|
|
69836
69869
|
i0.ɵɵproperty("visual", ctx_r0.summary().napkinVisual)("viewMode", ctx_r0.viewMode());
|
|
69837
69870
|
} }
|
|
69838
|
-
function
|
|
69871
|
+
function MetricExecutiveSummaryComponent_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
69839
69872
|
i0.ɵɵelementStart(0, "div", 19)(1, "h3", 30);
|
|
69840
69873
|
i0.ɵɵtext(2, " Analysis Narrative ");
|
|
69841
69874
|
i0.ɵɵelementEnd();
|
|
69842
69875
|
i0.ɵɵelementStart(3, "div", 31);
|
|
69843
|
-
i0.ɵɵconditionalCreate(4,
|
|
69876
|
+
i0.ɵɵconditionalCreate(4, MetricExecutiveSummaryComponent_Conditional_29_Conditional_4_Template, 2, 2, "div", 32);
|
|
69844
69877
|
i0.ɵɵelementStart(5, "p", 33);
|
|
69845
69878
|
i0.ɵɵtext(6);
|
|
69846
69879
|
i0.ɵɵelementEnd();
|
|
@@ -69859,7 +69892,7 @@ function MetricExecutiveSummaryComponent_Conditional_30_Template(rf, ctx) { if (
|
|
|
69859
69892
|
i0.ɵɵadvance();
|
|
69860
69893
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.summary().narrative, " ");
|
|
69861
69894
|
} }
|
|
69862
|
-
function
|
|
69895
|
+
function MetricExecutiveSummaryComponent_Conditional_30_For_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
69863
69896
|
i0.ɵɵelementStart(0, "div", 44)(1, "div", 45);
|
|
69864
69897
|
i0.ɵɵelement(2, "symphiq-icon", 46);
|
|
69865
69898
|
i0.ɵɵelementStart(3, "div")(4, "span", 47);
|
|
@@ -69881,10 +69914,10 @@ function MetricExecutiveSummaryComponent_Conditional_31_For_5_Conditional_8_Temp
|
|
|
69881
69914
|
i0.ɵɵadvance();
|
|
69882
69915
|
i0.ɵɵtextInterpolate1(" ", priority_r4.expectedImpact, " ");
|
|
69883
69916
|
} }
|
|
69884
|
-
function
|
|
69917
|
+
function MetricExecutiveSummaryComponent_Conditional_30_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
69885
69918
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
69886
69919
|
i0.ɵɵelementStart(0, "button", 39);
|
|
69887
|
-
i0.ɵɵlistener("click", function
|
|
69920
|
+
i0.ɵɵlistener("click", function MetricExecutiveSummaryComponent_Conditional_30_For_5_Template_button_click_0_listener() { const ctx_r2 = i0.ɵɵrestoreView(_r2); const priority_r4 = ctx_r2.$implicit; const $index_r5 = ctx_r2.$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.priorityDetailClick.emit({ priority: priority_r4, index: $index_r5 })); });
|
|
69888
69921
|
i0.ɵɵelementStart(1, "div", 40)(2, "span", 41);
|
|
69889
69922
|
i0.ɵɵtext(3);
|
|
69890
69923
|
i0.ɵɵelementEnd();
|
|
@@ -69894,7 +69927,7 @@ function MetricExecutiveSummaryComponent_Conditional_31_For_5_Template(rf, ctx)
|
|
|
69894
69927
|
i0.ɵɵelementStart(6, "p", 43);
|
|
69895
69928
|
i0.ɵɵtext(7);
|
|
69896
69929
|
i0.ɵɵelementEnd();
|
|
69897
|
-
i0.ɵɵconditionalCreate(8,
|
|
69930
|
+
i0.ɵɵconditionalCreate(8, MetricExecutiveSummaryComponent_Conditional_30_For_5_Conditional_8_Template, 8, 8, "div", 44);
|
|
69898
69931
|
i0.ɵɵelementEnd();
|
|
69899
69932
|
} if (rf & 2) {
|
|
69900
69933
|
const priority_r4 = ctx.$implicit;
|
|
@@ -69916,12 +69949,12 @@ function MetricExecutiveSummaryComponent_Conditional_31_For_5_Template(rf, ctx)
|
|
|
69916
69949
|
i0.ɵɵadvance();
|
|
69917
69950
|
i0.ɵɵconditional(priority_r4.expectedImpact ? 8 : -1);
|
|
69918
69951
|
} }
|
|
69919
|
-
function
|
|
69952
|
+
function MetricExecutiveSummaryComponent_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
69920
69953
|
i0.ɵɵelementStart(0, "div", 20)(1, "h3", 36);
|
|
69921
69954
|
i0.ɵɵtext(2, "Top Priorities");
|
|
69922
69955
|
i0.ɵɵelementEnd();
|
|
69923
69956
|
i0.ɵɵelementStart(3, "div", 37);
|
|
69924
|
-
i0.ɵɵrepeaterCreate(4,
|
|
69957
|
+
i0.ɵɵrepeaterCreate(4, MetricExecutiveSummaryComponent_Conditional_30_For_5_Template, 9, 8, "button", 38, i0.ɵɵrepeaterTrackByIndex);
|
|
69925
69958
|
i0.ɵɵelementEnd()();
|
|
69926
69959
|
} if (rf & 2) {
|
|
69927
69960
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -69930,7 +69963,7 @@ function MetricExecutiveSummaryComponent_Conditional_31_Template(rf, ctx) { if (
|
|
|
69930
69963
|
i0.ɵɵadvance(3);
|
|
69931
69964
|
i0.ɵɵrepeater(ctx_r0.summary().topPriorities);
|
|
69932
69965
|
} }
|
|
69933
|
-
function
|
|
69966
|
+
function MetricExecutiveSummaryComponent_Conditional_31_For_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
69934
69967
|
i0.ɵɵelementStart(0, "div", 57);
|
|
69935
69968
|
i0.ɵɵelement(1, "symphiq-icon", 15);
|
|
69936
69969
|
i0.ɵɵelementStart(2, "span");
|
|
@@ -69945,7 +69978,7 @@ function MetricExecutiveSummaryComponent_Conditional_32_For_5_Conditional_12_Tem
|
|
|
69945
69978
|
i0.ɵɵadvance(2);
|
|
69946
69979
|
i0.ɵɵtextInterpolate(win_r6.estimatedTimeframe);
|
|
69947
69980
|
} }
|
|
69948
|
-
function
|
|
69981
|
+
function MetricExecutiveSummaryComponent_Conditional_31_For_5_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
69949
69982
|
i0.ɵɵelementStart(0, "div", 58)(1, "h4", 24);
|
|
69950
69983
|
i0.ɵɵtext(2, " Related Goal ");
|
|
69951
69984
|
i0.ɵɵelementEnd();
|
|
@@ -69959,7 +69992,7 @@ function MetricExecutiveSummaryComponent_Conditional_32_For_5_Conditional_13_Tem
|
|
|
69959
69992
|
i0.ɵɵadvance(2);
|
|
69960
69993
|
i0.ɵɵproperty("relatedGoalIds", i0.ɵɵpureFunction1(4, _c9, win_r6.relatedGoalId))("allGoals", ctx_r0.allGoals() || i0.ɵɵpureFunction0(6, _c10))("viewMode", ctx_r0.viewMode());
|
|
69961
69994
|
} }
|
|
69962
|
-
function
|
|
69995
|
+
function MetricExecutiveSummaryComponent_Conditional_31_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
69963
69996
|
i0.ɵɵelementStart(0, "div", 51)(1, "div", 52)(2, "div", 53)(3, "span", 41);
|
|
69964
69997
|
i0.ɵɵtext(4);
|
|
69965
69998
|
i0.ɵɵelementEnd();
|
|
@@ -69972,8 +70005,8 @@ function MetricExecutiveSummaryComponent_Conditional_32_For_5_Template(rf, ctx)
|
|
|
69972
70005
|
i0.ɵɵelementStart(10, "span", 56);
|
|
69973
70006
|
i0.ɵɵtext(11);
|
|
69974
70007
|
i0.ɵɵelementEnd()();
|
|
69975
|
-
i0.ɵɵconditionalCreate(12,
|
|
69976
|
-
i0.ɵɵconditionalCreate(13,
|
|
70008
|
+
i0.ɵɵconditionalCreate(12, MetricExecutiveSummaryComponent_Conditional_31_For_5_Conditional_12_Template, 4, 5, "div", 57);
|
|
70009
|
+
i0.ɵɵconditionalCreate(13, MetricExecutiveSummaryComponent_Conditional_31_For_5_Conditional_13_Template, 4, 7, "div", 58);
|
|
69977
70010
|
i0.ɵɵelementEnd()();
|
|
69978
70011
|
} if (rf & 2) {
|
|
69979
70012
|
const win_r6 = ctx.$implicit;
|
|
@@ -70001,12 +70034,12 @@ function MetricExecutiveSummaryComponent_Conditional_32_For_5_Template(rf, ctx)
|
|
|
70001
70034
|
i0.ɵɵadvance();
|
|
70002
70035
|
i0.ɵɵconditional(win_r6.relatedGoalId && ctx_r0.allGoals() ? 13 : -1);
|
|
70003
70036
|
} }
|
|
70004
|
-
function
|
|
70037
|
+
function MetricExecutiveSummaryComponent_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
70005
70038
|
i0.ɵɵelementStart(0, "div", 21)(1, "h3", 49);
|
|
70006
70039
|
i0.ɵɵtext(2, "Quick Wins");
|
|
70007
70040
|
i0.ɵɵelementEnd();
|
|
70008
70041
|
i0.ɵɵelementStart(3, "div", 50);
|
|
70009
|
-
i0.ɵɵrepeaterCreate(4,
|
|
70042
|
+
i0.ɵɵrepeaterCreate(4, MetricExecutiveSummaryComponent_Conditional_31_For_5_Template, 14, 11, "div", 51, i0.ɵɵrepeaterTrackByIndex);
|
|
70010
70043
|
i0.ɵɵelementEnd()();
|
|
70011
70044
|
} if (rf & 2) {
|
|
70012
70045
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -70118,16 +70151,11 @@ class MetricExecutiveSummaryComponent {
|
|
|
70118
70151
|
: 'bg-blue-100 text-blue-800', ...(ngDevMode ? [{ debugName: "numberBadgeClasses" }] : []));
|
|
70119
70152
|
this.quickWinTextClasses = computed(() => this.isDark() ? 'text-slate-100' : 'text-slate-900', ...(ngDevMode ? [{ debugName: "quickWinTextClasses" }] : []));
|
|
70120
70153
|
this.metaTextClasses = computed(() => this.isDark() ? 'text-slate-400' : 'text-slate-600', ...(ngDevMode ? [{ debugName: "metaTextClasses" }] : []));
|
|
70121
|
-
console.log('[MetricExecutiveSummary] Component constructed - button should be clickable!');
|
|
70122
70154
|
}
|
|
70123
70155
|
handleViewMetricDetailsClick() {
|
|
70124
|
-
console.log('[MetricExecutiveSummary] View Metric Details button clicked!');
|
|
70125
|
-
console.log('[MetricExecutiveSummary] viewMetricDetailsClick output exists:', !!this.viewMetricDetailsClick);
|
|
70126
70156
|
this.viewMetricDetailsClick.emit();
|
|
70127
|
-
console.log('[MetricExecutiveSummary] Event emitted');
|
|
70128
70157
|
}
|
|
70129
70158
|
handleViewReportClick() {
|
|
70130
|
-
console.log('[MetricExecutiveSummary] View Report button clicked!');
|
|
70131
70159
|
this.viewReportClick.emit();
|
|
70132
70160
|
}
|
|
70133
70161
|
getYoyIcon() {
|
|
@@ -70220,8 +70248,16 @@ class MetricExecutiveSummaryComponent {
|
|
|
70220
70248
|
return '';
|
|
70221
70249
|
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
70222
70250
|
}
|
|
70251
|
+
formatNumber(value) {
|
|
70252
|
+
if (value === undefined || value === null || value === '')
|
|
70253
|
+
return '';
|
|
70254
|
+
const num = typeof value === 'string' ? parseFloat(value) : value;
|
|
70255
|
+
if (isNaN(num))
|
|
70256
|
+
return String(value);
|
|
70257
|
+
return num.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 2 });
|
|
70258
|
+
}
|
|
70223
70259
|
static { this.ɵfac = function MetricExecutiveSummaryComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MetricExecutiveSummaryComponent)(); }; }
|
|
70224
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MetricExecutiveSummaryComponent, selectors: [["symphiq-metric-executive-summary"]], inputs: { viewMode: [1, "viewMode"], summary: [1, "summary"], metricName: [1, "metricName"], allGoals: [1, "allGoals"] }, outputs: { topPrioritiesClick: "topPrioritiesClick", priorityDetailClick: "priorityDetailClick", viewMetricDetailsClick: "viewMetricDetailsClick", viewReportClick: "viewReportClick" }, decls:
|
|
70260
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MetricExecutiveSummaryComponent, selectors: [["symphiq-metric-executive-summary"]], inputs: { viewMode: [1, "viewMode"], summary: [1, "summary"], metricName: [1, "metricName"], allGoals: [1, "allGoals"] }, outputs: { topPrioritiesClick: "topPrioritiesClick", priorityDetailClick: "priorityDetailClick", viewMetricDetailsClick: "viewMetricDetailsClick", viewReportClick: "viewReportClick" }, decls: 32, vars: 24, consts: [["id", "section-metric-executive-summary", 1, "space-y-6", "scroll-mt-24"], [1, "rounded-2xl", "p-8", "shadow-xl", 3, "ngClass"], [1, "space-y-6"], [1, "flex", "items-start", "justify-between", "gap-4"], [1, "flex-1"], [1, "flex", "items-center", "gap-3", "mb-3"], [3, "icon", "size", "ngClass"], [1, "text-3xl", "font-bold", 3, "ngClass"], [1, "text-lg", "leading-relaxed", 3, "ngClass"], [3, "grade", "gradeRationale", "viewMode"], ["type", "button", 1, "w-full", "text-left", "cursor-pointer", "group", 3, "click"], [1, "grid", "grid-cols-1", "md:grid-cols-2", "lg:grid-cols-4", "gap-4"], [1, "rounded-xl", "p-4", "transition-all", "duration-200", "group-hover:scale-[1.02]", "group-hover:shadow-lg", 3, "ngClass"], [1, "flex", "flex-wrap", "items-center", "justify-center", "gap-3", "mt-4"], ["type", "button", 1, "inline-flex", "items-center", "gap-2", "px-4", "py-2.5", "rounded-lg", "text-sm", "font-semibold", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"], ["size", "w-4 h-4", 3, "icon"], ["type", "button", 1, "inline-flex", "items-center", "gap-2", "px-4", "py-2.5", "rounded-lg", "font-medium", "text-sm", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"], [1, "rounded-xl", "p-6", "mt-6", 3, "ngClass"], [1, "mt-6"], ["id", "quick-wins-section", 1, "mt-8", "scroll-mt-24"], [1, "flex", "items-center", "gap-2", "mb-2"], ["size", "w-4 h-4", 3, "icon", "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], [1, "flex", "items-center", "gap-1", "mt-2"], [1, "text-sm", "font-medium", 3, "ngClass"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "text-xs", "mt-1", "truncate", "max-w-full", "cursor-help", 3, "libSymphiqTooltip", "tooltipPosition", "ngClass"], [1, "text-lg", "font-semibold", "mb-3", 3, "ngClass"], [1, "relative"], [1, "mb-6", "lg:float-left", "lg:mr-6", "lg:mb-4", "lg:max-w-[66%]"], [1, "text-sm", "leading-relaxed", "whitespace-pre-line", 3, "ngClass"], [1, "clear-both"], [3, "visual", "viewMode"], [1, "text-xl", "font-bold", "mb-4", 3, "ngClass"], [1, "grid", "grid-cols-1", "md:grid-cols-2", "gap-4"], ["type", "button", 1, "rounded-xl", "p-6", "text-left", "transition-all", "duration-200", "hover:scale-[1.02]", "active:scale-[0.98]", "cursor-pointer", 3, "ngClass"], ["type", "button", 1, "rounded-xl", "p-6", "text-left", "transition-all", "duration-200", "hover:scale-[1.02]", "active:scale-[0.98]", "cursor-pointer", 3, "click", "ngClass"], [1, "flex", "items-start", "gap-3", "mb-3"], [1, "flex-shrink-0", "w-8", "h-8", "rounded-full", "flex", "items-center", "justify-center", "text-sm", "font-bold", 3, "ngClass"], [1, "text-lg", "font-semibold", "flex-1", 3, "ngClass"], [1, "text-sm", "leading-relaxed", "mb-3", 3, "ngClass"], [1, "rounded-lg", "p-3", 3, "ngClass"], [1, "flex", "items-start", "gap-2"], ["size", "w-4 h-4", 1, "mt-0.5", 3, "icon", "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "block", "mb-1", 3, "ngClass"], [1, "text-xs", "leading-relaxed", 3, "ngClass"], [1, "text-xl", "font-bold", "mb-6", 3, "ngClass"], [1, "grid", "grid-cols-1", "md:grid-cols-2", "gap-6"], [1, "rounded-xl", "p-6", "transition-all", "duration-300", 3, "ngClass"], [1, "space-y-4"], [1, "flex", "items-start", "gap-3"], [1, "font-semibold", "leading-tight", "flex-1", 3, "ngClass"], [1, "flex", "flex-wrap", "gap-2"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-semibold", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "text-sm", 3, "ngClass"], [1, "space-y-2"], [3, "relatedGoalIds", "allGoals", "viewMode"]], template: function MetricExecutiveSummaryComponent_Template(rf, ctx) { if (rf & 1) {
|
|
70225
70261
|
i0.ɵɵelementStart(0, "section", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4)(5, "div", 5);
|
|
70226
70262
|
i0.ɵɵelement(6, "symphiq-icon", 6);
|
|
70227
70263
|
i0.ɵɵelementStart(7, "h2", 7);
|
|
@@ -70240,25 +70276,27 @@ class MetricExecutiveSummaryComponent {
|
|
|
70240
70276
|
i0.ɵɵconditionalCreate(16, MetricExecutiveSummaryComponent_Conditional_16_Template, 7, 8, "div", 12);
|
|
70241
70277
|
i0.ɵɵconditionalCreate(17, MetricExecutiveSummaryComponent_Conditional_17_Template, 7, 8, "div", 12);
|
|
70242
70278
|
i0.ɵɵconditionalCreate(18, MetricExecutiveSummaryComponent_Conditional_18_Template, 8, 9, "div", 12);
|
|
70243
|
-
i0.ɵɵelementEnd();
|
|
70244
|
-
i0.ɵɵelementStart(19, "div", 13)(20, "
|
|
70279
|
+
i0.ɵɵelementEnd()();
|
|
70280
|
+
i0.ɵɵelementStart(19, "div", 13)(20, "button", 14);
|
|
70281
|
+
i0.ɵɵlistener("click", function MetricExecutiveSummaryComponent_Template_button_click_20_listener() { return ctx.handleViewMetricDetailsClick(); });
|
|
70282
|
+
i0.ɵɵelementStart(21, "span");
|
|
70245
70283
|
i0.ɵɵtext(22, "View Metric Details");
|
|
70246
70284
|
i0.ɵɵelementEnd();
|
|
70247
70285
|
i0.ɵɵelement(23, "symphiq-icon", 15);
|
|
70248
|
-
i0.ɵɵelementEnd()
|
|
70249
|
-
i0.ɵɵelementStart(24, "
|
|
70250
|
-
i0.ɵɵlistener("click", function
|
|
70286
|
+
i0.ɵɵelementEnd();
|
|
70287
|
+
i0.ɵɵelementStart(24, "button", 16);
|
|
70288
|
+
i0.ɵɵlistener("click", function MetricExecutiveSummaryComponent_Template_button_click_24_listener() { return ctx.handleViewReportClick(); });
|
|
70251
70289
|
i0.ɵɵnamespaceSVG();
|
|
70252
|
-
i0.ɵɵelementStart(
|
|
70253
|
-
i0.ɵɵelement(
|
|
70290
|
+
i0.ɵɵelementStart(25, "svg", 17);
|
|
70291
|
+
i0.ɵɵelement(26, "path", 18);
|
|
70254
70292
|
i0.ɵɵelementEnd();
|
|
70255
70293
|
i0.ɵɵnamespaceHTML();
|
|
70256
|
-
i0.ɵɵelementStart(
|
|
70257
|
-
i0.ɵɵtext(
|
|
70294
|
+
i0.ɵɵelementStart(27, "span");
|
|
70295
|
+
i0.ɵɵtext(28, "View Report");
|
|
70258
70296
|
i0.ɵɵelementEnd()()();
|
|
70259
|
-
i0.ɵɵconditionalCreate(
|
|
70260
|
-
i0.ɵɵconditionalCreate(
|
|
70261
|
-
i0.ɵɵconditionalCreate(
|
|
70297
|
+
i0.ɵɵconditionalCreate(29, MetricExecutiveSummaryComponent_Conditional_29_Template, 8, 5, "div", 19);
|
|
70298
|
+
i0.ɵɵconditionalCreate(30, MetricExecutiveSummaryComponent_Conditional_30_Template, 6, 1, "div", 20);
|
|
70299
|
+
i0.ɵɵconditionalCreate(31, MetricExecutiveSummaryComponent_Conditional_31_Template, 6, 1, "div", 21);
|
|
70262
70300
|
i0.ɵɵelementEnd()()();
|
|
70263
70301
|
} if (rf & 2) {
|
|
70264
70302
|
let tmp_18_0;
|
|
@@ -70291,14 +70329,14 @@ class MetricExecutiveSummaryComponent {
|
|
|
70291
70329
|
i0.ɵɵproperty("ngClass", ctx.viewDetailsButtonClasses());
|
|
70292
70330
|
i0.ɵɵadvance(3);
|
|
70293
70331
|
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(22, _c1$d, ctx.iconSource));
|
|
70294
|
-
i0.ɵɵadvance(
|
|
70332
|
+
i0.ɵɵadvance();
|
|
70295
70333
|
i0.ɵɵproperty("ngClass", ctx.viewReportButtonClasses());
|
|
70296
70334
|
i0.ɵɵadvance(5);
|
|
70297
|
-
i0.ɵɵconditional(ctx.summary().narrative ?
|
|
70335
|
+
i0.ɵɵconditional(ctx.summary().narrative ? 29 : -1);
|
|
70298
70336
|
i0.ɵɵadvance();
|
|
70299
|
-
i0.ɵɵconditional(ctx.summary().topPriorities && (((tmp_18_0 = ctx.summary().topPriorities) == null ? null : tmp_18_0.length) ?? 0) > 0 ?
|
|
70337
|
+
i0.ɵɵconditional(ctx.summary().topPriorities && (((tmp_18_0 = ctx.summary().topPriorities) == null ? null : tmp_18_0.length) ?? 0) > 0 ? 30 : -1);
|
|
70300
70338
|
i0.ɵɵadvance();
|
|
70301
|
-
i0.ɵɵconditional(ctx.summary().quickWins && (((tmp_19_0 = ctx.summary().quickWins) == null ? null : tmp_19_0.length) ?? 0) > 0 ?
|
|
70339
|
+
i0.ɵɵconditional(ctx.summary().quickWins && (((tmp_19_0 = ctx.summary().quickWins) == null ? null : tmp_19_0.length) ?? 0) > 0 ? 31 : -1);
|
|
70302
70340
|
} }, dependencies: [CommonModule, i1$1.NgClass, GradeBadgeComponent,
|
|
70303
70341
|
SymphiqIconComponent,
|
|
70304
70342
|
NapkinVisualPlaceholderComponent,
|
|
@@ -70372,7 +70410,7 @@ class MetricExecutiveSummaryComponent {
|
|
|
70372
70410
|
</span>
|
|
70373
70411
|
</div>
|
|
70374
70412
|
<div [ngClass]="metricValueClasses()" class="text-2xl font-bold">
|
|
70375
|
-
{{ summary().currentValue }}
|
|
70413
|
+
{{ formatNumber(summary().currentValue) }}
|
|
70376
70414
|
</div>
|
|
70377
70415
|
@if (summary().yoyChange) {
|
|
70378
70416
|
<div class="flex items-center gap-1 mt-2">
|
|
@@ -70403,7 +70441,7 @@ class MetricExecutiveSummaryComponent {
|
|
|
70403
70441
|
</span>
|
|
70404
70442
|
</div>
|
|
70405
70443
|
<div [ngClass]="metricValueClasses()" class="text-2xl font-bold">
|
|
70406
|
-
{{ summary().targetValue }}
|
|
70444
|
+
{{ formatNumber(summary().targetValue) }}
|
|
70407
70445
|
</div>
|
|
70408
70446
|
</div>
|
|
70409
70447
|
}
|
|
@@ -70422,7 +70460,7 @@ class MetricExecutiveSummaryComponent {
|
|
|
70422
70460
|
</span>
|
|
70423
70461
|
</div>
|
|
70424
70462
|
<div [ngClass]="metricValueClasses()" class="text-2xl font-bold">
|
|
70425
|
-
{{ projectedValue() }}
|
|
70463
|
+
{{ formatNumber(projectedValue()) }}
|
|
70426
70464
|
</div>
|
|
70427
70465
|
</div>
|
|
70428
70466
|
}
|
|
@@ -70437,7 +70475,7 @@ class MetricExecutiveSummaryComponent {
|
|
|
70437
70475
|
[ngClass]="metricLabelClasses()"
|
|
70438
70476
|
/>
|
|
70439
70477
|
<span [ngClass]="metricLabelClasses()" class="text-xs font-semibold uppercase tracking-wider">
|
|
70440
|
-
Pacing
|
|
70478
|
+
Pacing vs Target
|
|
70441
70479
|
</span>
|
|
70442
70480
|
</div>
|
|
70443
70481
|
<div [ngClass]="getPacingValueClasses()" class="text-xl font-bold">
|
|
@@ -70476,20 +70514,24 @@ class MetricExecutiveSummaryComponent {
|
|
|
70476
70514
|
}
|
|
70477
70515
|
</div>
|
|
70478
70516
|
|
|
70479
|
-
<!-- View Details Button -->
|
|
70480
|
-
<div class="flex items-center justify-center mt-4">
|
|
70481
|
-
<div [ngClass]="viewDetailsButtonClasses()" class="inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-semibold transition-all duration-200 group-hover:scale-105">
|
|
70482
|
-
<span>View Metric Details</span>
|
|
70483
|
-
<symphiq-icon
|
|
70484
|
-
[icon]="{ name: 'arrow-right', source: iconSource }"
|
|
70485
|
-
size="w-4 h-4"
|
|
70486
|
-
/>
|
|
70487
|
-
</div>
|
|
70488
|
-
</div>
|
|
70489
70517
|
</button>
|
|
70490
70518
|
|
|
70491
|
-
<!--
|
|
70492
|
-
<div class="flex items-center justify-center mt-4">
|
|
70519
|
+
<!-- Action Buttons -->
|
|
70520
|
+
<div class="flex flex-wrap items-center justify-center gap-3 mt-4">
|
|
70521
|
+
<!-- View Details Button -->
|
|
70522
|
+
<button
|
|
70523
|
+
type="button"
|
|
70524
|
+
(click)="handleViewMetricDetailsClick()"
|
|
70525
|
+
[ngClass]="viewDetailsButtonClasses()"
|
|
70526
|
+
class="inline-flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm font-semibold transition-all duration-200 hover:scale-105">
|
|
70527
|
+
<span>View Metric Details</span>
|
|
70528
|
+
<symphiq-icon
|
|
70529
|
+
[icon]="{ name: 'arrow-right', source: iconSource }"
|
|
70530
|
+
size="w-4 h-4"
|
|
70531
|
+
/>
|
|
70532
|
+
</button>
|
|
70533
|
+
|
|
70534
|
+
<!-- View Report Button -->
|
|
70493
70535
|
<button
|
|
70494
70536
|
type="button"
|
|
70495
70537
|
(click)="handleViewReportClick()"
|
|
@@ -70637,8 +70679,8 @@ class MetricExecutiveSummaryComponent {
|
|
|
70637
70679
|
</section>
|
|
70638
70680
|
`
|
|
70639
70681
|
}]
|
|
70640
|
-
}],
|
|
70641
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MetricExecutiveSummaryComponent, { className: "MetricExecutiveSummaryComponent", filePath: "lib/components/profile-analysis-shop-dashboard/metric-executive-summary.component.ts", lineNumber:
|
|
70682
|
+
}], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], summary: [{ type: i0.Input, args: [{ isSignal: true, alias: "summary", required: true }] }], metricName: [{ type: i0.Input, args: [{ isSignal: true, alias: "metricName", required: false }] }], allGoals: [{ type: i0.Input, args: [{ isSignal: true, alias: "allGoals", required: false }] }], topPrioritiesClick: [{ type: i0.Output, args: ["topPrioritiesClick"] }], priorityDetailClick: [{ type: i0.Output, args: ["priorityDetailClick"] }], viewMetricDetailsClick: [{ type: i0.Output, args: ["viewMetricDetailsClick"] }], viewReportClick: [{ type: i0.Output, args: ["viewReportClick"] }] }); })();
|
|
70683
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MetricExecutiveSummaryComponent, { className: "MetricExecutiveSummaryComponent", filePath: "lib/components/profile-analysis-shop-dashboard/metric-executive-summary.component.ts", lineNumber: 344 }); })();
|
|
70642
70684
|
|
|
70643
70685
|
const _c0$t = a0 => ({ name: "chevron-right", source: a0 });
|
|
70644
70686
|
function GoalCardComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -73729,7 +73771,7 @@ class KeyDriverCardComponent {
|
|
|
73729
73771
|
}, ...(ngDevMode ? [{ debugName: "answerTextClasses" }] : []));
|
|
73730
73772
|
}
|
|
73731
73773
|
static { this.ɵfac = function KeyDriverCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || KeyDriverCardComponent)(); }; }
|
|
73732
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: KeyDriverCardComponent, selectors: [["symphiq-key-driver-card"]], inputs: { driver: [1, "driver"], viewMode: [1, "viewMode"] }, decls: 13, vars: 12, consts: [[1, "rounded-xl", "p-5", "border", "transition-all", "duration-200", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "gap-3", "mb-3"], [1, "flex", "items-
|
|
73774
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: KeyDriverCardComponent, selectors: [["symphiq-key-driver-card"]], inputs: { driver: [1, "driver"], viewMode: [1, "viewMode"] }, decls: 13, vars: 12, consts: [[1, "rounded-xl", "p-5", "border", "transition-all", "duration-200", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "gap-3", "mb-3"], [1, "flex", "items-center", "gap-3", "flex-1", "min-w-0"], [1, "p-2", "rounded-lg", "flex-shrink-0", "mt-0.5", 3, "ngClass"], ["size", "w-4 h-4", 3, "icon"], [1, "flex-1", "min-w-0"], [1, "font-semibold", "text-sm", "mb-1", "leading-tight", 3, "ngClass"], [1, "px-2.5", "py-1", "rounded-full", "text-xs", "font-bold", "uppercase", "tracking-wider", "flex-shrink-0", 3, "ngClass"], [1, "text-sm", "leading-relaxed", "mb-4", 3, "ngClass"], [1, "rounded-lg", "p-3", "space-y-2", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5", "mb-2"], ["size", "w-3.5 h-3.5", 3, "icon", "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wide", 3, "ngClass"], [1, "rounded", "p-2", 3, "ngClass"], [1, "text-xs", "leading-relaxed", "italic", 3, "ngClass"]], template: function KeyDriverCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
73733
73775
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3);
|
|
73734
73776
|
i0.ɵɵelement(4, "symphiq-icon", 4);
|
|
73735
73777
|
i0.ɵɵelementEnd();
|
|
@@ -73776,7 +73818,7 @@ class KeyDriverCardComponent {
|
|
|
73776
73818
|
template: `
|
|
73777
73819
|
<div [ngClass]="cardClasses()" class="rounded-xl p-5 border transition-all duration-200">
|
|
73778
73820
|
<div class="flex items-start justify-between gap-3 mb-3">
|
|
73779
|
-
<div class="flex items-
|
|
73821
|
+
<div class="flex items-center gap-3 flex-1 min-w-0">
|
|
73780
73822
|
<div [ngClass]="iconClasses()" class="p-2 rounded-lg flex-shrink-0 mt-0.5">
|
|
73781
73823
|
<symphiq-icon
|
|
73782
73824
|
[icon]="{ name: 'arrow-trending-up', source: iconSource }"
|
|
@@ -75058,7 +75100,7 @@ function PerformanceMetricsCardComponent_Conditional_32_Template(rf, ctx) { if (
|
|
|
75058
75100
|
i0.ɵɵadvance(2);
|
|
75059
75101
|
i0.ɵɵproperty("ngClass", ctx_r0.valueClasses());
|
|
75060
75102
|
i0.ɵɵadvance();
|
|
75061
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r0.metrics().projectedValue, " ");
|
|
75103
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.formatNumber(ctx_r0.metrics().projectedValue), " ");
|
|
75062
75104
|
} }
|
|
75063
75105
|
class PerformanceMetricsCardComponent {
|
|
75064
75106
|
constructor() {
|
|
@@ -75220,6 +75262,14 @@ class PerformanceMetricsCardComponent {
|
|
|
75220
75262
|
this.viewMode.set(this.mode());
|
|
75221
75263
|
});
|
|
75222
75264
|
}
|
|
75265
|
+
formatNumber(value) {
|
|
75266
|
+
if (value === undefined || value === null || value === '')
|
|
75267
|
+
return '';
|
|
75268
|
+
const num = typeof value === 'string' ? parseFloat(value) : value;
|
|
75269
|
+
if (isNaN(num))
|
|
75270
|
+
return String(value);
|
|
75271
|
+
return num.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 2 });
|
|
75272
|
+
}
|
|
75223
75273
|
static { this.ɵfac = function PerformanceMetricsCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PerformanceMetricsCardComponent)(); }; }
|
|
75224
75274
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PerformanceMetricsCardComponent, selectors: [["symphiq-performance-metrics-card"]], inputs: { performanceMetrics: [1, "performanceMetrics"], mode: [1, "mode"] }, decls: 41, vars: 42, consts: [[1, "rounded-xl", "p-6", "shadow-lg", 3, "ngClass"], [1, "flex", "items-center", "justify-between", "mb-6"], [1, "text-lg", "font-bold", 3, "ngClass"], [1, "flex", "items-center", "gap-2"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-bold", "uppercase", "tracking-wider", 3, "ngClass"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-bold", "uppercase", "tracking-wider", "flex", "items-center", "gap-1", 3, "ngClass"], ["size", "w-3 h-3", 3, "icon"], [1, "grid", "grid-cols-1", "md:grid-cols-2", "lg:grid-cols-4", "gap-4"], [1, "rounded-lg", "p-4", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "mb-2"], ["size", "w-4 h-4", 3, "icon", "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], [1, "mt-6"], [1, "flex", "items-center", "justify-between", "mb-2"], [1, "text-sm", "font-semibold", 3, "ngClass"], [1, "w-full", "h-3", "rounded-full", "overflow-hidden", 3, "ngClass"], [1, "h-full", "rounded-full", "transition-all", "duration-500", 3, "ngClass"]], template: function PerformanceMetricsCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
75225
75275
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h3", 2);
|
|
@@ -75290,7 +75340,7 @@ class PerformanceMetricsCardComponent {
|
|
|
75290
75340
|
i0.ɵɵadvance(2);
|
|
75291
75341
|
i0.ɵɵproperty("ngClass", ctx.valueClasses());
|
|
75292
75342
|
i0.ɵɵadvance();
|
|
75293
|
-
i0.ɵɵtextInterpolate1(" ", ctx.metrics().currentValue, " ");
|
|
75343
|
+
i0.ɵɵtextInterpolate1(" ", ctx.formatNumber(ctx.metrics().currentValue), " ");
|
|
75294
75344
|
i0.ɵɵadvance();
|
|
75295
75345
|
i0.ɵɵproperty("ngClass", ctx.metricBoxClasses());
|
|
75296
75346
|
i0.ɵɵadvance(2);
|
|
@@ -75300,7 +75350,7 @@ class PerformanceMetricsCardComponent {
|
|
|
75300
75350
|
i0.ɵɵadvance(2);
|
|
75301
75351
|
i0.ɵɵproperty("ngClass", ctx.valueClasses());
|
|
75302
75352
|
i0.ɵɵadvance();
|
|
75303
|
-
i0.ɵɵtextInterpolate1(" ", ctx.metrics().previousYearValue, " ");
|
|
75353
|
+
i0.ɵɵtextInterpolate1(" ", ctx.formatNumber(ctx.metrics().previousYearValue), " ");
|
|
75304
75354
|
i0.ɵɵadvance();
|
|
75305
75355
|
i0.ɵɵproperty("ngClass", ctx.metricBoxClasses());
|
|
75306
75356
|
i0.ɵɵadvance(2);
|
|
@@ -75310,7 +75360,7 @@ class PerformanceMetricsCardComponent {
|
|
|
75310
75360
|
i0.ɵɵadvance(2);
|
|
75311
75361
|
i0.ɵɵproperty("ngClass", ctx.valueClasses());
|
|
75312
75362
|
i0.ɵɵadvance();
|
|
75313
|
-
i0.ɵɵtextInterpolate1(" ", ctx.metrics().targetValue, " ");
|
|
75363
|
+
i0.ɵɵtextInterpolate1(" ", ctx.formatNumber(ctx.metrics().targetValue), " ");
|
|
75314
75364
|
i0.ɵɵadvance();
|
|
75315
75365
|
i0.ɵɵconditional(ctx.metrics().projectedValue ? 32 : -1);
|
|
75316
75366
|
i0.ɵɵadvance(3);
|
|
@@ -75366,7 +75416,7 @@ class PerformanceMetricsCardComponent {
|
|
|
75366
75416
|
</span>
|
|
75367
75417
|
</div>
|
|
75368
75418
|
<div [ngClass]="valueClasses()" class="text-2xl font-bold">
|
|
75369
|
-
{{ metrics().currentValue }}
|
|
75419
|
+
{{ formatNumber(metrics().currentValue) }}
|
|
75370
75420
|
</div>
|
|
75371
75421
|
</div>
|
|
75372
75422
|
|
|
@@ -75383,7 +75433,7 @@ class PerformanceMetricsCardComponent {
|
|
|
75383
75433
|
</span>
|
|
75384
75434
|
</div>
|
|
75385
75435
|
<div [ngClass]="valueClasses()" class="text-2xl font-bold">
|
|
75386
|
-
{{ metrics().previousYearValue }}
|
|
75436
|
+
{{ formatNumber(metrics().previousYearValue) }}
|
|
75387
75437
|
</div>
|
|
75388
75438
|
</div>
|
|
75389
75439
|
|
|
@@ -75400,7 +75450,7 @@ class PerformanceMetricsCardComponent {
|
|
|
75400
75450
|
</span>
|
|
75401
75451
|
</div>
|
|
75402
75452
|
<div [ngClass]="valueClasses()" class="text-2xl font-bold">
|
|
75403
|
-
{{ metrics().targetValue }}
|
|
75453
|
+
{{ formatNumber(metrics().targetValue) }}
|
|
75404
75454
|
</div>
|
|
75405
75455
|
</div>
|
|
75406
75456
|
|
|
@@ -75418,7 +75468,7 @@ class PerformanceMetricsCardComponent {
|
|
|
75418
75468
|
</span>
|
|
75419
75469
|
</div>
|
|
75420
75470
|
<div [ngClass]="valueClasses()" class="text-2xl font-bold">
|
|
75421
|
-
{{ metrics().projectedValue }}
|
|
75471
|
+
{{ formatNumber(metrics().projectedValue) }}
|
|
75422
75472
|
</div>
|
|
75423
75473
|
</div>
|
|
75424
75474
|
}
|
|
@@ -86132,16 +86182,12 @@ class CollapsibleAnalysisSectionGroupComponent {
|
|
|
86132
86182
|
}
|
|
86133
86183
|
}
|
|
86134
86184
|
handleViewMetricDetailsClick() {
|
|
86135
|
-
console.log('[CollapsibleAnalysisSectionGroup] handleViewMetricDetailsClick called');
|
|
86136
86185
|
const metricKey = this.metricExecutiveSummary()?.metric;
|
|
86137
|
-
console.log('[CollapsibleAnalysisSectionGroup] metricKey:', metricKey);
|
|
86138
86186
|
if (!metricKey) {
|
|
86139
|
-
console.log('[CollapsibleAnalysisSectionGroup] No metricKey found');
|
|
86140
86187
|
return;
|
|
86141
86188
|
}
|
|
86142
86189
|
const allMetrics = this.allMetrics();
|
|
86143
86190
|
const metric = allMetrics.find(m => m.metric === metricKey);
|
|
86144
|
-
console.log('[CollapsibleAnalysisSectionGroup] Found metric:', !!metric);
|
|
86145
86191
|
if (metric) {
|
|
86146
86192
|
const allCharts = this.allCharts();
|
|
86147
86193
|
const metricCharts = allCharts.filter(chart => {
|
|
@@ -86149,7 +86195,6 @@ class CollapsibleAnalysisSectionGroupComponent {
|
|
|
86149
86195
|
const metricId = metricKey.toLowerCase();
|
|
86150
86196
|
return chartId.includes(metricId) || chartId.startsWith(metricId);
|
|
86151
86197
|
});
|
|
86152
|
-
console.log('[CollapsibleAnalysisSectionGroup] Opening modal with metric and', metricCharts.length, 'charts');
|
|
86153
86198
|
this.modalService.openMetricModal(metric, metricCharts);
|
|
86154
86199
|
}
|
|
86155
86200
|
else {
|
|
@@ -86161,15 +86206,12 @@ class CollapsibleAnalysisSectionGroupComponent {
|
|
|
86161
86206
|
targetValue: typeof summary.targetValue === 'string' ? parseFloat(summary.targetValue) || 0 : (summary.targetValue ?? 0),
|
|
86162
86207
|
description: summary.gradeRationale
|
|
86163
86208
|
};
|
|
86164
|
-
console.log('[CollapsibleAnalysisSectionGroup] Opening modal with constructed metric');
|
|
86165
86209
|
this.modalService.openMetricModal(constructedMetric, []);
|
|
86166
86210
|
}
|
|
86167
86211
|
}
|
|
86168
86212
|
}
|
|
86169
86213
|
handleViewReportClick() {
|
|
86170
|
-
console.log('[CollapsibleAnalysisSectionGroup] handleViewReportClick called');
|
|
86171
86214
|
const metricKey = this.metricExecutiveSummary()?.metric;
|
|
86172
|
-
console.log('[CollapsibleAnalysisSectionGroup] Emitting viewReportClick with metricKey:', metricKey);
|
|
86173
86215
|
if (metricKey) {
|
|
86174
86216
|
this.viewReportClick.emit(metricKey);
|
|
86175
86217
|
}
|
|
@@ -93890,21 +93932,15 @@ class SymphiqProfileShopAnalysisDashboardComponent {
|
|
|
93890
93932
|
}
|
|
93891
93933
|
}
|
|
93892
93934
|
handleMetricViewDetailsClick() {
|
|
93893
|
-
console.log('[ShopDashboard.ViewMetricDetails] Handler called');
|
|
93894
93935
|
const summary = this.metricExecutiveSummary();
|
|
93895
93936
|
const metricKey = summary?.metric || this.metricName();
|
|
93896
|
-
console.log('[ShopDashboard.ViewMetricDetails] metricKey:', metricKey);
|
|
93897
93937
|
if (!metricKey) {
|
|
93898
|
-
console.log('[ShopDashboard.ViewMetricDetails] No metricKey found, returning early');
|
|
93899
93938
|
return;
|
|
93900
93939
|
}
|
|
93901
93940
|
const allMetricsArr = this.allMetrics();
|
|
93902
|
-
console.log('[ShopDashboard.ViewMetricDetails] allMetrics count:', allMetricsArr.length);
|
|
93903
93941
|
const metric = allMetricsArr.find(m => m.metric === metricKey);
|
|
93904
|
-
console.log('[ShopDashboard.ViewMetricDetails] Found metric:', metric?.metric);
|
|
93905
93942
|
if (metric) {
|
|
93906
93943
|
const charts = this.chartsForMetric(metric);
|
|
93907
|
-
console.log('[ShopDashboard.ViewMetricDetails] Filtered charts count:', charts.length);
|
|
93908
93944
|
this.modalService.openMetricModal(metric, charts);
|
|
93909
93945
|
}
|
|
93910
93946
|
else if (summary) {
|
|
@@ -93914,21 +93950,17 @@ class SymphiqProfileShopAnalysisDashboardComponent {
|
|
|
93914
93950
|
targetValue: typeof summary.targetValue === 'string' ? parseFloat(summary.targetValue) || 0 : (summary.targetValue ?? 0),
|
|
93915
93951
|
description: summary.gradeRationale
|
|
93916
93952
|
};
|
|
93917
|
-
console.log('[ShopDashboard.ViewMetricDetails] Using constructed metric');
|
|
93918
93953
|
const charts = this.chartsForMetric(constructedMetric);
|
|
93919
|
-
console.log('[ShopDashboard.ViewMetricDetails] Filtered charts count:', charts.length);
|
|
93920
93954
|
this.modalService.openMetricModal(constructedMetric, charts);
|
|
93921
93955
|
}
|
|
93922
93956
|
}
|
|
93923
93957
|
chartsForMetric(metric) {
|
|
93924
93958
|
const metricId = metric.performanceItemId;
|
|
93925
93959
|
const metricName = metric.metric;
|
|
93926
|
-
console.log('[ShopDashboard.chartsForMetric] Called with metric:', metricName, 'performanceItemId:', metricId);
|
|
93927
93960
|
if (!metricId && !metricName) {
|
|
93928
93961
|
return [];
|
|
93929
93962
|
}
|
|
93930
93963
|
const allChartsArr = this.allCharts();
|
|
93931
|
-
console.log('[ShopDashboard.chartsForMetric] Total allCharts:', allChartsArr.length);
|
|
93932
93964
|
const matchingCharts = [];
|
|
93933
93965
|
const metricNameLower = metricName?.toLowerCase() || '';
|
|
93934
93966
|
const metricNameNormalized = metricNameLower.replace(/\s+/g, '_');
|
|
@@ -93946,7 +93978,6 @@ class SymphiqProfileShopAnalysisDashboardComponent {
|
|
|
93946
93978
|
matchingCharts.push(chart);
|
|
93947
93979
|
}
|
|
93948
93980
|
}
|
|
93949
|
-
console.log('[ShopDashboard.chartsForMetric] Matching charts count:', matchingCharts.length);
|
|
93950
93981
|
return matchingCharts;
|
|
93951
93982
|
}
|
|
93952
93983
|
getCurrentModalState() {
|
|
@@ -100653,10 +100684,6 @@ class SymphiqProfileAnalysisMetricDashboardComponent {
|
|
|
100653
100684
|
}
|
|
100654
100685
|
}
|
|
100655
100686
|
ngOnInit() {
|
|
100656
|
-
console.log('[MetricDashboard] ngOnInit');
|
|
100657
|
-
console.log('[MetricDashboard] isSimplifiedView:', this.isSimplifiedView());
|
|
100658
|
-
console.log('[MetricDashboard] currentDisplayMode:', this.currentDisplayMode());
|
|
100659
|
-
console.log('[MetricDashboard] metricExecutiveSummary:', !!this.metricExecutiveSummary());
|
|
100660
100687
|
this.funnelAnalysisSignal.set(this.funnelAnalysis());
|
|
100661
100688
|
const profileToUse = this.profile();
|
|
100662
100689
|
if (profileToUse) {
|
|
@@ -100727,68 +100754,46 @@ class SymphiqProfileAnalysisMetricDashboardComponent {
|
|
|
100727
100754
|
chartsForMetric(metric) {
|
|
100728
100755
|
const metricId = metric.performanceItemId;
|
|
100729
100756
|
const metricName = metric.metric;
|
|
100730
|
-
console.log('[chartsForMetric] Called with metric:', metricName, 'performanceItemId:', metricId);
|
|
100731
100757
|
if (!metricId && !metricName) {
|
|
100732
|
-
console.log('[chartsForMetric] No metricId or metricName, returning empty');
|
|
100733
100758
|
return [];
|
|
100734
100759
|
}
|
|
100735
100760
|
const allCharts = this.allCharts();
|
|
100736
|
-
console.log('[chartsForMetric] Total allCharts:', allCharts.length);
|
|
100737
|
-
console.log('[chartsForMetric] Chart performanceItemIds:', allCharts.map(c => c.performanceItemId));
|
|
100738
100761
|
const matchingCharts = [];
|
|
100739
100762
|
const metricNameLower = metricName?.toLowerCase() || '';
|
|
100740
100763
|
const metricNameNormalized = metricNameLower.replace(/\s+/g, '_');
|
|
100741
|
-
console.log('[chartsForMetric] metricNameNormalized:', metricNameNormalized);
|
|
100742
100764
|
for (const chart of allCharts) {
|
|
100743
100765
|
const chartId = chart.performanceItemId || '';
|
|
100744
100766
|
const chartIdLower = chartId.toLowerCase();
|
|
100745
100767
|
if (metricId) {
|
|
100746
100768
|
const prefix = metricId + '_';
|
|
100747
100769
|
if (chartId === metricId || chartId.startsWith(prefix)) {
|
|
100748
|
-
console.log('[chartsForMetric] Matched by metricId:', chartId);
|
|
100749
100770
|
matchingCharts.push(chart);
|
|
100750
100771
|
continue;
|
|
100751
100772
|
}
|
|
100752
100773
|
}
|
|
100753
100774
|
if (metricName && chartIdLower.includes(metricNameNormalized)) {
|
|
100754
|
-
console.log('[chartsForMetric] Matched by name:', chartId, 'contains', metricNameNormalized);
|
|
100755
100775
|
matchingCharts.push(chart);
|
|
100756
100776
|
}
|
|
100757
100777
|
}
|
|
100758
|
-
console.log('[chartsForMetric] Matching charts count:', matchingCharts.length);
|
|
100759
|
-
console.log('[chartsForMetric] Matching chart IDs:', matchingCharts.map(c => c.performanceItemId));
|
|
100760
100778
|
return matchingCharts;
|
|
100761
100779
|
}
|
|
100762
100780
|
handleViewMetricDetailsClick() {
|
|
100763
|
-
console.log('[ViewMetricDetails] Handler called');
|
|
100764
100781
|
const funnelMetric = this.funnelMetric();
|
|
100765
100782
|
let metricKey = funnelMetric?.relatedMetric;
|
|
100766
|
-
console.log('[ViewMetricDetails] funnelMetric:', funnelMetric);
|
|
100767
|
-
console.log('[ViewMetricDetails] metricKey from funnelMetric:', metricKey);
|
|
100768
100783
|
if (!metricKey) {
|
|
100769
100784
|
metricKey = this.profileAnalysis()?.profileAnalysisStructured?.metricExecutiveSummary?.metric;
|
|
100770
|
-
console.log('[ViewMetricDetails] metricKey from profileAnalysis:', metricKey);
|
|
100771
100785
|
}
|
|
100772
100786
|
if (!metricKey) {
|
|
100773
|
-
console.log('[ViewMetricDetails] No metricKey found, returning early');
|
|
100774
100787
|
return;
|
|
100775
100788
|
}
|
|
100776
100789
|
const allMetrics = this.allMetrics();
|
|
100777
|
-
console.log('[ViewMetricDetails] allMetrics count:', allMetrics.length);
|
|
100778
|
-
console.log('[ViewMetricDetails] allMetrics keys:', allMetrics.map(m => m.metric));
|
|
100779
100790
|
const metric = allMetrics.find(m => m.metric === metricKey);
|
|
100780
|
-
console.log('[ViewMetricDetails] Found metric in allMetrics:', metric);
|
|
100781
100791
|
if (metric) {
|
|
100782
|
-
console.log('[ViewMetricDetails] Opening modal with metric from allMetrics');
|
|
100783
|
-
console.log('[ViewMetricDetails] Metric performanceItemId:', metric.performanceItemId);
|
|
100784
100792
|
const charts = this.chartsForMetric(metric);
|
|
100785
|
-
console.log('[ViewMetricDetails] Filtered charts count:', charts.length);
|
|
100786
|
-
console.log('[ViewMetricDetails] Filtered chart IDs:', charts.map((c) => c.performanceItemId));
|
|
100787
100793
|
this.modalService.openMetricModal(metric, charts);
|
|
100788
100794
|
}
|
|
100789
100795
|
else {
|
|
100790
100796
|
const summary = this.metricExecutiveSummary();
|
|
100791
|
-
console.log('[ViewMetricDetails] metricExecutiveSummary:', summary);
|
|
100792
100797
|
if (summary) {
|
|
100793
100798
|
const constructedMetric = {
|
|
100794
100799
|
metric: metricKey,
|
|
@@ -100796,22 +100801,15 @@ class SymphiqProfileAnalysisMetricDashboardComponent {
|
|
|
100796
100801
|
targetValue: typeof summary.targetValue === 'string' ? parseFloat(summary.targetValue) || 0 : (summary.targetValue ?? 0),
|
|
100797
100802
|
description: summary.gradeRationale
|
|
100798
100803
|
};
|
|
100799
|
-
console.log('[ViewMetricDetails] Opening modal with constructed metric:', constructedMetric);
|
|
100800
|
-
console.log('[ViewMetricDetails] Constructed metric performanceItemId:', constructedMetric.performanceItemId);
|
|
100801
100804
|
const charts = this.chartsForMetric(constructedMetric);
|
|
100802
|
-
console.log('[ViewMetricDetails] Filtered charts count:', charts.length);
|
|
100803
|
-
console.log('[ViewMetricDetails] Filtered chart IDs:', charts.map((c) => c.performanceItemId));
|
|
100804
100805
|
this.modalService.openMetricModal(constructedMetric, charts);
|
|
100805
100806
|
}
|
|
100806
100807
|
else {
|
|
100807
|
-
console.log('[ViewMetricDetails] Emitting viewMetricDetailsClick event with key:', metricKey);
|
|
100808
100808
|
this.viewMetricDetailsClick.emit(metricKey);
|
|
100809
100809
|
}
|
|
100810
100810
|
}
|
|
100811
|
-
console.log('[ViewMetricDetails] openMetricModal called - check FunnelAnalysisModal logs');
|
|
100812
100811
|
}
|
|
100813
100812
|
handleViewReportClick(metricKey) {
|
|
100814
|
-
console.log('[ViewReport] Handler called with metricKey:', metricKey);
|
|
100815
100813
|
this.openMetricReport(metricKey);
|
|
100816
100814
|
}
|
|
100817
100815
|
openMetricReport(metricEnum) {
|
|
@@ -100881,8 +100879,6 @@ class SymphiqProfileAnalysisMetricDashboardComponent {
|
|
|
100881
100879
|
return null;
|
|
100882
100880
|
}
|
|
100883
100881
|
handleDisplayModeChange(mode) {
|
|
100884
|
-
console.log('[MetricDashboard] handleDisplayModeChange:', mode);
|
|
100885
|
-
console.log('[MetricDashboard] Will show MetricExecutiveSummary:', mode !== DisplayModeEnum.SIMPLIFIED);
|
|
100886
100882
|
this.currentDisplayMode.set(mode);
|
|
100887
100883
|
if (mode === DisplayModeEnum.EXPANDED) {
|
|
100888
100884
|
this.viewModeService.setViewMode('expanded');
|
|
@@ -100954,8 +100950,8 @@ class SymphiqProfileAnalysisMetricDashboardComponent {
|
|
|
100954
100950
|
percentageIncrease = ((targetValue - currentValue) / currentValue) * 100;
|
|
100955
100951
|
}
|
|
100956
100952
|
}
|
|
100957
|
-
const funnelMetricMatch = funnelMetricsList
|
|
100958
|
-
const relatedMetricMatch = funnelMetricsList
|
|
100953
|
+
const funnelMetricMatch = funnelMetricsList?.find(fm => fm.funnelMetric === metric && fm.funnelMetric === fm.relatedMetric);
|
|
100954
|
+
const relatedMetricMatch = funnelMetricsList?.find(fm => fm.relatedMetric === metric && fm.funnelMetric !== fm.relatedMetric);
|
|
100959
100955
|
if (funnelMetricMatch) {
|
|
100960
100956
|
results.push({
|
|
100961
100957
|
metric,
|
|
@@ -101531,7 +101527,7 @@ class SymphiqProfileAnalysisMetricDashboardComponent {
|
|
|
101531
101527
|
type: HostListener,
|
|
101532
101528
|
args: ['window:scroll', ['$event']]
|
|
101533
101529
|
}] }); })();
|
|
101534
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqProfileAnalysisMetricDashboardComponent, { className: "SymphiqProfileAnalysisMetricDashboardComponent", filePath: "lib/components/profile-analysis-metric-dashboard/symphiq-profile-analysis-metric-dashboard.component.ts", lineNumber:
|
|
101530
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqProfileAnalysisMetricDashboardComponent, { className: "SymphiqProfileAnalysisMetricDashboardComponent", filePath: "lib/components/profile-analysis-metric-dashboard/symphiq-profile-analysis-metric-dashboard.component.ts", lineNumber: 513 }); })();
|
|
101535
101531
|
|
|
101536
101532
|
const _forTrack0$4 = ($index, $item) => $item.id;
|
|
101537
101533
|
function ShopProfileCategoryListComponent_For_2_Template(rf, ctx) { if (rf & 1) {
|