Skip to content

Commit 778a6f5

Browse files
mrautela365claude
andauthored
fix(dashboards): standardize no-data messaging across ed drawers (#699)
* fix(dashboards): standardize no-data messaging across ED drawers Unify the no-data state across all 8 ED marketing drawers to show a consistent informational card guiding users to contact marketing ops. Add hasNoData guards to engaged-community and flywheel-conversion drawers to prevent false "Performing Well" sections when data is stale. LFXV2-1644 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Misha Rautela <mrautela@linuxfoundation.org> * fix(dashboards): address review feedback on no-data guards Align hasNoData conditions with shared rule-engine guards: - website-visits: rename "brand reach" to "website traffic" in no-data title - flywheel: drop reengagementRate check to match buildFlywheelRecommendedActions - engaged-community: require both totalMembers=0 AND monthlyData empty before hiding insights, matching initRecommendedActions guard LFXV2-1644 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Misha Rautela <mrautela@linuxfoundation.org> * refactor(dashboards): extract hasNoData to private initHasNoData() Move multi-line inline computed() for hasNoData in engaged-community and flywheel-conversion drawers to private initHasNoData() methods, matching the component organization convention used by sibling signals. LFXV2-1644 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Misha Rautela <mrautela@linuxfoundation.org> * fix(dashboards): tighten engaged-community hasNoData guard Remove stale-data clause (changePercentage === 0) from hasNoData so it only fires when totalMembers === 0 && monthlyData is empty — matching initRecommendedActions exactly. Prevents contradictory "no activity" card when Total Engaged is non-zero. LFXV2-1644 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Misha Rautela <mrautela@linuxfoundation.org> --------- Signed-off-by: Misha Rautela <mrautela@linuxfoundation.org> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 8f616cb commit 778a6f5

10 files changed

Lines changed: 156 additions & 110 deletions

File tree

apps/lfx-one/src/app/modules/dashboards/executive-director/components/brand-health-drawer/brand-health-drawer.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,8 @@ <h3 class="text-sm font-semibold text-green-700">Performing Well</h3>
152152
<div class="flex items-start gap-4 px-4 py-4">
153153
<i class="fa-light fa-circle-info text-blue-500 mt-0.5" aria-hidden="true"></i>
154154
<div class="flex flex-col gap-1 flex-1 min-w-0">
155-
<span class="text-sm font-semibold text-gray-900">No brand mention data available</span>
156-
<p class="text-sm text-gray-500">No brand mentions are currently available for this foundation</p>
155+
<span class="text-sm font-semibold text-gray-900">No brand mention activity detected</span>
156+
<p class="text-sm text-gray-500">Engage with marketing ops to activate campaigns and start tracking results.</p>
157157
</div>
158158
</div>
159159
</div>

apps/lfx-one/src/app/modules/dashboards/executive-director/components/email-ctr-drawer/email-ctr-drawer.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ <h3 class="text-sm font-semibold text-green-700">Performing Well</h3>
107107
<div class="flex items-start gap-4 px-4 py-4">
108108
<i class="fa-light fa-circle-info text-blue-500 mt-0.5" aria-hidden="true"></i>
109109
<div class="flex flex-col gap-1 flex-1 min-w-0">
110-
<h3 class="text-sm font-semibold text-gray-900">No active campaigns detected</h3>
111-
<p class="text-sm text-gray-500">No email, paid, or attribution activity is currently available for this foundation</p>
110+
<h3 class="text-sm font-semibold text-gray-900">No email or paid activity detected</h3>
111+
<p class="text-sm text-gray-500">Engage with marketing ops to activate campaigns and start tracking results.</p>
112112
</div>
113113
</div>
114114
</div>

apps/lfx-one/src/app/modules/dashboards/executive-director/components/engaged-community-drawer/engaged-community-drawer.component.html

Lines changed: 65 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -53,65 +53,80 @@ <h2 class="text-lg font-semibold text-gray-900" data-testid="engaged-community-d
5353
</lfx-card>
5454
</div>
5555

56-
<!-- FIRST FOLD: Needs Your Attention -->
57-
@if (attentionActions().length > 0 || attentionInsights().length > 0) {
56+
@if (hasNoData()) {
5857
<div
59-
class="flex flex-col rounded-lg border border-gray-200 border-l-4 border-l-red-600 bg-white overflow-hidden"
60-
data-testid="engaged-community-drawer-attention">
61-
<div class="flex items-center gap-2 px-4 pt-4 pb-2">
62-
<i class="fa-light fa-triangle-exclamation text-red-600"></i>
63-
<h3 class="text-sm font-semibold text-red-700">Needs Your Attention</h3>
58+
class="flex flex-col rounded-lg border border-gray-200 border-l-4 border-l-blue-600 bg-white overflow-hidden"
59+
role="status"
60+
data-testid="engaged-community-drawer-no-data">
61+
<div class="flex items-start gap-4 px-4 py-4">
62+
<i class="fa-light fa-circle-info text-blue-500 mt-0.5" aria-hidden="true"></i>
63+
<div class="flex flex-col gap-1 flex-1 min-w-0">
64+
<h3 class="text-sm font-semibold text-gray-900">No community engagement activity detected</h3>
65+
<p class="text-sm text-gray-500">Engage with marketing ops to activate campaigns and start tracking results.</p>
66+
</div>
6467
</div>
65-
66-
@for (action of attentionActions(); track action.title) {
67-
<div class="flex items-start justify-between gap-4 px-4 py-3 border-t border-gray-100">
68-
<div class="flex flex-col gap-1 flex-1 min-w-0">
69-
<span class="text-sm font-semibold text-gray-900">{{ action.title }}</span>
70-
<p class="text-sm text-gray-500">{{ action.description }}</p>
71-
</div>
72-
@if (action.priority === 'high') {
73-
<lfx-tag value="High Priority" severity="danger" [rounded]="true" />
74-
} @else {
75-
<lfx-tag value="Medium Priority" severity="warn" [rounded]="true" />
76-
}
68+
</div>
69+
} @else {
70+
<!-- FIRST FOLD: Needs Your Attention -->
71+
@if (attentionActions().length > 0 || attentionInsights().length > 0) {
72+
<div
73+
class="flex flex-col rounded-lg border border-gray-200 border-l-4 border-l-red-600 bg-white overflow-hidden"
74+
data-testid="engaged-community-drawer-attention">
75+
<div class="flex items-center gap-2 px-4 pt-4 pb-2">
76+
<i class="fa-light fa-triangle-exclamation text-red-600"></i>
77+
<h3 class="text-sm font-semibold text-red-700">Needs Your Attention</h3>
7778
</div>
78-
}
7979

80-
@for (insight of attentionInsights(); track insight.text) {
81-
<div class="flex items-center gap-2 px-4 py-3 border-t border-gray-100 text-sm text-gray-700">
82-
<i class="fa-light fa-triangle-exclamation text-red-500 flex-shrink-0"></i>
83-
<span>{{ insight.text }}</span>
84-
</div>
85-
}
86-
</div>
87-
}
80+
@for (action of attentionActions(); track action.title) {
81+
<div class="flex items-start justify-between gap-4 px-4 py-3 border-t border-gray-100">
82+
<div class="flex flex-col gap-1 flex-1 min-w-0">
83+
<span class="text-sm font-semibold text-gray-900">{{ action.title }}</span>
84+
<p class="text-sm text-gray-500">{{ action.description }}</p>
85+
</div>
86+
@if (action.priority === 'high') {
87+
<lfx-tag value="High Priority" severity="danger" [rounded]="true" />
88+
} @else {
89+
<lfx-tag value="Medium Priority" severity="warn" [rounded]="true" />
90+
}
91+
</div>
92+
}
8893

89-
<!-- SECOND FOLD: Performing Well -->
90-
@if (performingActions().length > 0 || performingInsights().length > 0) {
91-
<div
92-
class="flex flex-col rounded-lg border border-gray-200 border-l-4 border-l-green-600 bg-white overflow-hidden"
93-
data-testid="engaged-community-drawer-performing">
94-
<div class="flex items-center gap-2 px-4 pt-4 pb-2">
95-
<i class="fa-light fa-check text-green-600"></i>
96-
<h3 class="text-sm font-semibold text-green-700">Performing Well</h3>
94+
@for (insight of attentionInsights(); track insight.text) {
95+
<div class="flex items-center gap-2 px-4 py-3 border-t border-gray-100 text-sm text-gray-700">
96+
<i class="fa-light fa-triangle-exclamation text-red-500 flex-shrink-0"></i>
97+
<span>{{ insight.text }}</span>
98+
</div>
99+
}
97100
</div>
101+
}
98102

99-
@for (action of performingActions(); track action.title) {
100-
<div class="flex items-start gap-4 px-4 py-3 border-t border-gray-100">
101-
<div class="flex flex-col gap-1 flex-1 min-w-0">
102-
<span class="text-sm font-semibold text-gray-900">{{ action.title }}</span>
103-
<p class="text-sm text-gray-500">{{ action.description }}</p>
104-
</div>
103+
<!-- SECOND FOLD: Performing Well -->
104+
@if (performingActions().length > 0 || performingInsights().length > 0) {
105+
<div
106+
class="flex flex-col rounded-lg border border-gray-200 border-l-4 border-l-green-600 bg-white overflow-hidden"
107+
data-testid="engaged-community-drawer-performing">
108+
<div class="flex items-center gap-2 px-4 pt-4 pb-2">
109+
<i class="fa-light fa-check text-green-600"></i>
110+
<h3 class="text-sm font-semibold text-green-700">Performing Well</h3>
105111
</div>
106-
}
107112

108-
@for (insight of performingInsights(); track insight.text) {
109-
<div class="flex items-center gap-2 px-4 py-3 border-t border-gray-100 text-sm text-gray-700">
110-
<i class="fa-light fa-check text-green-600 flex-shrink-0"></i>
111-
<span>{{ insight.text }}</span>
112-
</div>
113-
}
114-
</div>
113+
@for (action of performingActions(); track action.title) {
114+
<div class="flex items-start gap-4 px-4 py-3 border-t border-gray-100">
115+
<div class="flex flex-col gap-1 flex-1 min-w-0">
116+
<span class="text-sm font-semibold text-gray-900">{{ action.title }}</span>
117+
<p class="text-sm text-gray-500">{{ action.description }}</p>
118+
</div>
119+
</div>
120+
}
121+
122+
@for (insight of performingInsights(); track insight.text) {
123+
<div class="flex items-center gap-2 px-4 py-3 border-t border-gray-100 text-sm text-gray-700">
124+
<i class="fa-light fa-check text-green-600 flex-shrink-0"></i>
125+
<span>{{ insight.text }}</span>
126+
</div>
127+
}
128+
</div>
129+
}
115130
}
116131

117132
<!-- Growth Trend Chart -->

apps/lfx-one/src/app/modules/dashboards/executive-director/components/engaged-community-drawer/engaged-community-drawer.component.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export class EngagedCommunityDrawerComponent {
5353
weeklyTrend: [],
5454
});
5555
// === Computed Signals ===
56+
protected readonly hasNoData: Signal<boolean> = this.initHasNoData();
5657
protected readonly formattedTotalMembers: Signal<string> = computed(() => formatNumber(this.data().totalMembers));
5758
protected readonly recommendedActions: Signal<MarketingRecommendedAction[]> = this.initRecommendedActions();
5859
protected readonly keyInsights: Signal<MarketingKeyInsight[]> = this.initKeyInsights();
@@ -189,6 +190,13 @@ export class EngagedCommunityDrawerComponent {
189190
}
190191

191192
// === Private Initializers ===
193+
private initHasNoData(): Signal<boolean> {
194+
return computed(() => {
195+
const { totalMembers, monthlyData } = this.data();
196+
return totalMembers === 0 && monthlyData.length === 0;
197+
});
198+
}
199+
192200
private initRecommendedActions(): Signal<MarketingRecommendedAction[]> {
193201
return computed(() => {
194202
const { totalMembers, changePercentage, breakdown, monthlyData } = this.data();

apps/lfx-one/src/app/modules/dashboards/executive-director/components/flywheel-conversion-drawer/flywheel-conversion-drawer.component.html

Lines changed: 65 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -61,65 +61,80 @@ <h2 class="text-lg font-semibold text-gray-900" data-testid="flywheel-conversion
6161
</lfx-card>
6262
</div>
6363

64-
<!-- FIRST FOLD: Needs Your Attention -->
65-
@if (attentionActions().length > 0 || attentionInsights().length > 0) {
64+
@if (hasNoData()) {
6665
<div
67-
class="flex flex-col rounded-lg border border-gray-200 border-l-4 border-l-red-600 bg-white overflow-hidden"
68-
data-testid="flywheel-conversion-drawer-attention">
69-
<div class="flex items-center gap-2 px-4 pt-4 pb-2">
70-
<i class="fa-light fa-triangle-exclamation text-red-600"></i>
71-
<h3 class="text-sm font-semibold text-red-700">Needs Your Attention</h3>
66+
class="flex flex-col rounded-lg border border-gray-200 border-l-4 border-l-blue-600 bg-white overflow-hidden"
67+
role="status"
68+
data-testid="flywheel-conversion-drawer-no-data">
69+
<div class="flex items-start gap-4 px-4 py-4">
70+
<i class="fa-light fa-circle-info text-blue-500 mt-0.5" aria-hidden="true"></i>
71+
<div class="flex flex-col gap-1 flex-1 min-w-0">
72+
<h3 class="text-sm font-semibold text-gray-900">No flywheel conversion activity detected</h3>
73+
<p class="text-sm text-gray-500">Engage with marketing ops to activate campaigns and start tracking results.</p>
74+
</div>
7275
</div>
73-
74-
@for (action of attentionActions(); track action.title) {
75-
<div class="flex items-start justify-between gap-4 px-4 py-3 border-t border-gray-100">
76-
<div class="flex flex-col gap-1 flex-1 min-w-0">
77-
<span class="text-sm font-semibold text-gray-900">{{ action.title }}</span>
78-
<p class="text-sm text-gray-500">{{ action.description }}</p>
79-
</div>
80-
@if (action.priority === 'high') {
81-
<lfx-tag value="High Priority" severity="danger" [rounded]="true" />
82-
} @else {
83-
<lfx-tag value="Medium Priority" severity="warn" [rounded]="true" />
84-
}
76+
</div>
77+
} @else {
78+
<!-- FIRST FOLD: Needs Your Attention -->
79+
@if (attentionActions().length > 0 || attentionInsights().length > 0) {
80+
<div
81+
class="flex flex-col rounded-lg border border-gray-200 border-l-4 border-l-red-600 bg-white overflow-hidden"
82+
data-testid="flywheel-conversion-drawer-attention">
83+
<div class="flex items-center gap-2 px-4 pt-4 pb-2">
84+
<i class="fa-light fa-triangle-exclamation text-red-600"></i>
85+
<h3 class="text-sm font-semibold text-red-700">Needs Your Attention</h3>
8586
</div>
86-
}
8787

88-
@for (insight of attentionInsights(); track insight.text) {
89-
<div class="flex items-center gap-2 px-4 py-3 border-t border-gray-100 text-sm text-gray-700">
90-
<i class="fa-light fa-triangle-exclamation text-red-500 flex-shrink-0"></i>
91-
<span>{{ insight.text }}</span>
92-
</div>
93-
}
94-
</div>
95-
}
88+
@for (action of attentionActions(); track action.title) {
89+
<div class="flex items-start justify-between gap-4 px-4 py-3 border-t border-gray-100">
90+
<div class="flex flex-col gap-1 flex-1 min-w-0">
91+
<span class="text-sm font-semibold text-gray-900">{{ action.title }}</span>
92+
<p class="text-sm text-gray-500">{{ action.description }}</p>
93+
</div>
94+
@if (action.priority === 'high') {
95+
<lfx-tag value="High Priority" severity="danger" [rounded]="true" />
96+
} @else {
97+
<lfx-tag value="Medium Priority" severity="warn" [rounded]="true" />
98+
}
99+
</div>
100+
}
96101

97-
<!-- SECOND FOLD: Performing Well -->
98-
@if (performingActions().length > 0 || performingInsights().length > 0) {
99-
<div
100-
class="flex flex-col rounded-lg border border-gray-200 border-l-4 border-l-green-600 bg-white overflow-hidden"
101-
data-testid="flywheel-conversion-drawer-performing">
102-
<div class="flex items-center gap-2 px-4 pt-4 pb-2">
103-
<i class="fa-light fa-check text-green-600"></i>
104-
<h3 class="text-sm font-semibold text-green-700">Performing Well</h3>
102+
@for (insight of attentionInsights(); track insight.text) {
103+
<div class="flex items-center gap-2 px-4 py-3 border-t border-gray-100 text-sm text-gray-700">
104+
<i class="fa-light fa-triangle-exclamation text-red-500 flex-shrink-0"></i>
105+
<span>{{ insight.text }}</span>
106+
</div>
107+
}
105108
</div>
109+
}
106110

107-
@for (action of performingActions(); track action.title) {
108-
<div class="flex items-start gap-4 px-4 py-3 border-t border-gray-100">
109-
<div class="flex flex-col gap-1 flex-1 min-w-0">
110-
<span class="text-sm font-semibold text-gray-900">{{ action.title }}</span>
111-
<p class="text-sm text-gray-500">{{ action.description }}</p>
112-
</div>
111+
<!-- SECOND FOLD: Performing Well -->
112+
@if (performingActions().length > 0 || performingInsights().length > 0) {
113+
<div
114+
class="flex flex-col rounded-lg border border-gray-200 border-l-4 border-l-green-600 bg-white overflow-hidden"
115+
data-testid="flywheel-conversion-drawer-performing">
116+
<div class="flex items-center gap-2 px-4 pt-4 pb-2">
117+
<i class="fa-light fa-check text-green-600"></i>
118+
<h3 class="text-sm font-semibold text-green-700">Performing Well</h3>
113119
</div>
114-
}
115120

116-
@for (insight of performingInsights(); track insight.text) {
117-
<div class="flex items-center gap-2 px-4 py-3 border-t border-gray-100 text-sm text-gray-700">
118-
<i class="fa-light fa-check text-green-600 flex-shrink-0"></i>
119-
<span>{{ insight.text }}</span>
120-
</div>
121-
}
122-
</div>
121+
@for (action of performingActions(); track action.title) {
122+
<div class="flex items-start gap-4 px-4 py-3 border-t border-gray-100">
123+
<div class="flex flex-col gap-1 flex-1 min-w-0">
124+
<span class="text-sm font-semibold text-gray-900">{{ action.title }}</span>
125+
<p class="text-sm text-gray-500">{{ action.description }}</p>
126+
</div>
127+
</div>
128+
}
129+
130+
@for (insight of performingInsights(); track insight.text) {
131+
<div class="flex items-center gap-2 px-4 py-3 border-t border-gray-100 text-sm text-gray-700">
132+
<i class="fa-light fa-check text-green-600 flex-shrink-0"></i>
133+
<span>{{ insight.text }}</span>
134+
</div>
135+
}
136+
</div>
137+
}
123138
}
124139

125140
<!-- Re-engagement Funnel Chart -->

apps/lfx-one/src/app/modules/dashboards/executive-director/components/flywheel-conversion-drawer/flywheel-conversion-drawer.component.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export class FlywheelConversionDrawerComponent {
6464
// === Computed Signals ===
6565
protected readonly formattedEventAttendees: Signal<string> = computed(() => formatNumber(this.data().funnel.eventAttendees));
6666
protected readonly reengagement: Signal<NonNullable<FlywheelConversionResponse['reengagement']>> = computed(() => getFlywheelReengagement(this.data()));
67+
protected readonly hasNoData: Signal<boolean> = this.initHasNoData();
6768
protected readonly reengagementRate: Signal<string> = computed(() => `${this.reengagement().reengagementRate.toFixed(1)}%`);
6869
protected readonly recommendedActions: Signal<MarketingRecommendedAction[]> = computed(() => buildFlywheelRecommendedActions(this.data()));
6970
protected readonly keyInsights: Signal<MarketingKeyInsight[]> = computed(() => buildFlywheelKeyInsights(this.data()));
@@ -151,6 +152,13 @@ export class FlywheelConversionDrawerComponent {
151152
}
152153

153154
// === Private Initializers ===
155+
private initHasNoData(): Signal<boolean> {
156+
return computed(() => {
157+
const { conversionRate, funnel, monthlyData } = this.data();
158+
return conversionRate === 0 && funnel.eventAttendees === 0 && monthlyData.length === 0;
159+
});
160+
}
161+
154162
private initTrendChartData(): Signal<ChartData<'line'>> {
155163
return computed(() => {
156164
const { monthlyData } = this.data();

apps/lfx-one/src/app/modules/dashboards/executive-director/components/member-acquisition-drawer/member-acquisition-drawer.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ <h3 class="text-sm font-semibold text-green-700">Performing Well</h3>
153153
<i class="fa-light fa-circle-info text-blue-500 mt-0.5" aria-hidden="true"></i>
154154
<div class="flex flex-col gap-1 flex-1 min-w-0">
155155
<h3 class="text-sm font-semibold text-gray-900">No membership activity detected</h3>
156-
<p class="text-sm text-gray-500">No member acquisition data is currently available for this foundation</p>
156+
<p class="text-sm text-gray-500">Engage with marketing ops to activate campaigns and start tracking results.</p>
157157
</div>
158158
</div>
159159
</div>

apps/lfx-one/src/app/modules/dashboards/executive-director/components/member-retention-drawer/member-retention-drawer.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ <h3 class="text-sm font-semibold text-green-700">Performing Well</h3>
128128
<div class="flex items-start gap-4 px-4 py-4">
129129
<i class="fa-light fa-circle-info text-blue-500 mt-0.5" aria-hidden="true"></i>
130130
<div class="flex flex-col gap-1 flex-1 min-w-0">
131-
<h3 class="text-sm font-semibold text-gray-900">No retention data available</h3>
132-
<p class="text-sm text-gray-500">No member retention data is currently available for this foundation</p>
131+
<h3 class="text-sm font-semibold text-gray-900">No retention activity detected</h3>
132+
<p class="text-sm text-gray-500">Engage with marketing ops to activate campaigns and start tracking results.</p>
133133
</div>
134134
</div>
135135
</div>

apps/lfx-one/src/app/modules/dashboards/executive-director/components/social-media-drawer/social-media-drawer.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ <h3 class="text-sm font-semibold text-green-700">Performing Well</h3>
140140
<i class="fa-light fa-circle-info text-blue-500 mt-0.5" aria-hidden="true"></i>
141141
<div class="flex flex-col gap-1 flex-1 min-w-0">
142142
<h3 class="text-sm font-semibold text-gray-900">No social media activity detected</h3>
143-
<p class="text-sm text-gray-500">No follower or engagement data is currently available for this foundation</p>
143+
<p class="text-sm text-gray-500">Engage with marketing ops to activate campaigns and start tracking results.</p>
144144
</div>
145145
</div>
146146
</div>

apps/lfx-one/src/app/modules/dashboards/executive-director/components/website-visits-drawer/website-visits-drawer.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,8 @@ <h3 class="text-sm font-semibold text-green-700">Performing Well</h3>
124124
<div class="flex items-start gap-4 px-4 py-4">
125125
<i class="fa-light fa-circle-info text-blue-500 mt-0.5" aria-hidden="true"></i>
126126
<div class="flex flex-col gap-1 flex-1 min-w-0">
127-
<h3 class="text-sm font-semibold text-gray-900">No website traffic data available</h3>
128-
<p class="text-sm text-gray-500">No web session data is currently available for this foundation</p>
127+
<h3 class="text-sm font-semibold text-gray-900">No website traffic detected</h3>
128+
<p class="text-sm text-gray-500">Engage with marketing ops to activate campaigns and start tracking results.</p>
129129
</div>
130130
</div>
131131
</div>

0 commit comments

Comments
 (0)