diff --git a/TODO b/TODO
index 034eec3..6b588ce 100644
--- a/TODO
+++ b/TODO
@@ -1,8 +1,6 @@
+- Refactor UI Data analyst
+
- Reactivity on project delete (update dropdown) + test guest
-
-- Event funnel / metadata analyzer / user flow
-- Refactor UI Data analyst
-- Remove Top Events from web analytics and move to custom events (with raw data access)
-- Fix email on plan upgrade and resub
\ No newline at end of file
+- Event funnel / metadata analyzer / user flow
\ No newline at end of file
diff --git a/dashboard/assets/scss/main.scss b/dashboard/assets/scss/main.scss
index 9f74870..a3abc31 100644
--- a/dashboard/assets/scss/main.scss
+++ b/dashboard/assets/scss/main.scss
@@ -19,6 +19,18 @@
src: url("../fonts/GeistVF.ttf");
}
+
+.actionable-visits-color-checkbox {
+ color: #5655d7;
+}
+
+.actionable-sessions-color-checkbox {
+ color: #4abde8;
+}
+.actionable-events-color-checkbox {
+ color: #fbbf24;
+}
+
.geist {
font-family: "Geist";
}
@@ -72,10 +84,14 @@
.hide-scrollbars {
- -ms-overflow-style: none; /* IE and Edge */
- scrollbar-width: none; /* Firefox */
+ -ms-overflow-style: none;
+ /* IE and Edge */
+ scrollbar-width: none;
+
+ /* Firefox */
&::-webkit-scrollbar {
- display: none; /* Chrome, Safari and Opera */
+ display: none;
+ /* Chrome, Safari and Opera */
}
}
diff --git a/dashboard/components/BarCard/Base.vue b/dashboard/components/BarCard/Base.vue
index c09f158..3e0d657 100644
--- a/dashboard/components/BarCard/Base.vue
+++ b/dashboard/components/BarCard/Base.vue
@@ -68,11 +68,14 @@ function openExternalLink(link: string) {
diff --git a/dashboard/components/BarCard/Websites.vue b/dashboard/components/BarCard/Websites.vue
index 9f7f603..fcb240d 100644
--- a/dashboard/components/BarCard/Websites.vue
+++ b/dashboard/components/BarCard/Websites.vue
@@ -48,9 +48,9 @@ function goToView() {
diff --git a/dashboard/components/dashboard/ActionableChart.vue b/dashboard/components/dashboard/ActionableChart.vue
index 2b9337e..b0ded34 100644
--- a/dashboard/components/dashboard/ActionableChart.vue
+++ b/dashboard/components/dashboard/ActionableChart.vue
@@ -136,7 +136,7 @@ const selectLabels: { label: string, value: Slice }[] = [
{ label: 'Month', value: 'month' },
];
-const selectedSlice = computed(()=>selectLabels[selectedLabelIndex.value].value);
+const selectedSlice = computed(() => selectLabels[selectedLabelIndex.value].value);
const selectedLabelIndex = ref(1);
const allDatesFull = ref([]);
@@ -233,7 +233,13 @@ function onLegendChange(dataset: any, index: number, checked: any) {
dataset.hidden = !checked;
}
-const legendColors = ['#5655d7', '#4abde8', '#fbbf24']
+const legendColors = ref(['#5655d7', '#4abde8', '#fbbf24'])
+const legendClasses = ref([
+ 'actionable-visits-color-checkbox',
+ 'actionable-sessions-color-checkbox',
+ 'actionable-events-color-checkbox'
+])
+
const inLiveDemo = isLiveDemo();
@@ -256,9 +262,11 @@ const inLiveDemo = isLiveDemo();
diff --git a/dashboard/components/dashboard/CountCard.vue b/dashboard/components/dashboard/CountCard.vue
index 82eafa2..d395edd 100644
--- a/dashboard/components/dashboard/CountCard.vue
+++ b/dashboard/components/dashboard/CountCard.vue
@@ -30,18 +30,20 @@ const uTooltipText = computed(() => {
-
+
-
-
{{ value }}
-
{{ avg }}
+
+
+ {{ value }}
+
+
{{ avg }}
-
{{ text }}
+
{{ text }}
-
diff --git a/dashboard/pages/events.vue b/dashboard/pages/events.vue
index 2341ac6..6ca43a8 100644
--- a/dashboard/pages/events.vue
+++ b/dashboard/pages/events.vue
@@ -35,6 +35,11 @@ const eventsData = await useFetch(`/api/data/count`, { headers: useComputedHeade
+
+
+
+
+
-
+
diff --git a/dashboard/pages/index.vue b/dashboard/pages/index.vue
index 01d06a2..217458f 100644
--- a/dashboard/pages/index.vue
+++ b/dashboard/pages/index.vue
@@ -41,40 +41,30 @@ const showDashboard = computed(() => project.value && firstInteraction.data.valu
-
-
-
-
-
-
-
diff --git a/dashboard/server/api/pay/webhook.post.ts b/dashboard/server/api/pay/webhook.post.ts
index d9e1c28..3727a3a 100644
--- a/dashboard/server/api/pay/webhook.post.ts
+++ b/dashboard/server/api/pay/webhook.post.ts
@@ -114,6 +114,8 @@ async function onPaymentSuccess(event: Event.InvoicePaidEvent) {
const subscription_id = event.data.object.subscription as string;
+ const isNewSubscription = project.subscription_id != subscription_id;
+
const allSubscriptions = await StripeService.getAllSubscriptions(customer_id);
if (!allSubscriptions) return;
@@ -140,7 +142,7 @@ async function onPaymentSuccess(event: Event.InvoicePaidEvent) {
setTimeout(() => {
if (PLAN.ID == 0) return;
- EmailService.sendPurchaseEmail(user.email, project.name);
+ if (isNewSubscription) EmailService.sendPurchaseEmail(user.email, project.name);
}, 1);