Skip to content

Commit aee0283

Browse files
committed
charts should now render once and stay completely stable without any flickering or layout shifts
Signed-off-by: RAWx18 <rawx18.dev@gmail.com>
1 parent c152fad commit aee0283

File tree

23 files changed

+327
-191
lines changed

23 files changed

+327
-191
lines changed

frontend/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<!DOCTYPE html>
22
<html lang="en">
33
<head>
4-
<title>gitmesh.dev</title>
4+
<title>GitMesh</title>
55
<meta charset="utf-8" />
66
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
77
<meta

frontend/src/app.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,15 @@ export default {
6464
6565
beforeCreate() {
6666
this.$router.beforeEach((to, from, next) => {
67-
document.title = `gitmesh.dev${to.meta.title ? ` | ${to.meta.title}` : ''}`;
67+
document.title = `GitMesh${to.meta.title ? ` | ${to.meta.title}` : ''}`;
6868
next();
6969
});
7070
},
7171
7272
async created() {
7373
await this.doInit();
7474
75-
FeatureFlag.init(this.currentTenant);
75+
await FeatureFlag.init(this.currentTenant);
7676
7777
window.addEventListener('resize', this.handleResize);
7878
this.handleResize();

frontend/src/modules/dashboard/components/dashboard-widget-chart.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,16 @@ export default {
4747
.chart {
4848
div {
4949
line-height: 112px !important;
50-
height: auto !important;
50+
height: 112px !important; /* FIXED: Match canvas height to prevent layout shifts */
5151
}
5252
.cube-widget-chart {
5353
padding: 0;
5454
min-height: 0;
55+
height: 112px; /* FIXED: Ensure consistent height */
5556
}
5657
canvas {
57-
height: 112px;
58+
height: 112px !important; /* FIXED: Make canvas height more specific */
59+
width: 100% !important; /* FIXED: Ensure canvas takes full width */
5860
}
5961
}
6062
</style>

frontend/src/modules/dashboard/dashboard.cube.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
import moment from 'moment';
2+
import { safeMoment } from '@/utils/reports';
23

34
export const dashboardChartOptions = {
45
legend: false,
56
yTicks: false,
67
yLines: false,
7-
xTicksCallback: (label) => moment(label).format('MMM DD'),
8+
xTicksCallback: (label) => {
9+
try {
10+
const d = safeMoment(label);
11+
if (d && d.isValid && d.isValid()) return d.format('MMM DD');
12+
return String(label ?? '');
13+
} catch (e) {
14+
return String(label ?? '');
15+
}
16+
},
17+
// fixed display height used by dashboard widgets (prevents responsive resize loops)
18+
height: '112px',
819
gradient: {
920
x0: 0,
1021
y0: 0,

frontend/src/modules/dashboard/pages/dashboard-page.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
class="leading-8 font-semibold transition-all duration-100 text-white font-mono mt-8"
1919
:class="scrolled ? 'text-base' : 'text-xl'"
2020
>
21-
{{ currentTenant?.name }} team overview
21+
{{ currentTenant?.name }} Workspace Dashboard
2222
</h4>
2323
<div class="relative mt-8 group flex items-center">
2424
<div

frontend/src/modules/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,13 @@ import organization from '@/modules/organization/organization-module';
1616
import task from '@/modules/task/task-module';
1717
import quickstart from '@/modules/quickstart/quickstart-module';
1818
import chat from '@/modules/chat/chat-module';
19-
2019
import user from '@/modules/user/user-module';
2120
import landing from '@/modules/landing/landing-module';
2221

2322
// Dynamically import premium modules to allow removing the premium directory
2423
const premiumModulesGlob = import.meta.glob('../premium/*/*-module.js', { eager: true });
2524
const premiumModules = Object.keys(premiumModulesGlob).reduce((acc, key) => {
2625
// Extract module name from path (e.g., ../premium/signals/signals-module.js -> signals)
27-
// key is like "../premium/signals/signals-module.js"
2826
const parts = key.split('/');
2927
// parts = ["..", "premium", "signals", "signals-module.js"]
3028
// We want "signals" which is at index 2 (or length - 2)

frontend/src/modules/layout/components/layout.vue

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ export default {
7171
components: {
7272
AppMenu,
7373
TabBar,
74+
// local banner component
75+
Banner: () => import('@/shared/banner/banner.vue'),
7476
},
7577
7678
setup() {
@@ -140,8 +142,25 @@ export default {
140142
currentUser: 'auth/currentUser',
141143
currentTenant: 'auth/currentTenant',
142144
integrationsInProgress: 'integration/inProgress',
145+
integrationsNeedReconnect: 'integration/needsReconnect',
146+
showIntegrationsNeedReconnectAlert: 'tenant/showIntegrationsNeedReconnectAlert',
147+
showOrganizationsAlertBanner: 'tenant/showOrganizationsAlertBanner',
143148
}),
144149
150+
integrationsInProgressToString() {
151+
const arr = (this.integrationsInProgress || []).map((i) => i.name);
152+
if (arr.length === 1) return arr[0];
153+
if (arr.length === 2) return `${arr[0]} and ${arr[1]}`;
154+
return `${arr.slice(0, arr.length - 1).join(', ')}, and ${arr.slice(-1)}`;
155+
},
156+
157+
integrationsNeedReconnectToString() {
158+
const arr = (this.integrationsNeedReconnect || []).map((i) => i.name);
159+
if (arr.length === 1) return arr[0];
160+
if (arr.length === 2) return `${arr[0]} and ${arr[1]}`;
161+
return `${arr.slice(0, arr.length - 1).join(', ')}, and ${arr.slice(-1)}`;
162+
},
163+
145164
// No cached views: keep-alive removed to prevent background tab pages
146165
},
147166

frontend/src/modules/onboard/components/onboard-sync-data-step.vue

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,17 @@
5555
<app-dialog
5656
v-model="showGithubDialog"
5757
size="small"
58-
title=":: SYSTEM_SYNCHRONIZATION"
58+
title="GitHub Integration"
5959
custom-class="terminal-dialog"
6060
>
61-
<template #content>
62-
<div class="p-8 max-w-xs mx-auto space-y-6">
61+
<template #title>
6362
<div class="flex items-center gap-3">
64-
<i class="ri-github-fill text-2xl"></i>
65-
<span class="font-medium">GitHub Integration</span>
63+
<i class="ri-github-fill text-xl"></i>
64+
<span>GitHub Integration</span>
6665
</div>
66+
</template>
67+
<template #content>
68+
<div class="p-8 max-w-xs mx-auto space-y-6">
6769

6870
<div class="space-y-3 text-xs">
6971
<div class="flex items-center gap-3 text-emerald-500">

frontend/src/modules/quickstart/components/quickstart-guides.vue

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -8,66 +8,7 @@
88
<app-loading height="7.5rem" class="mb-1" />
99
<app-loading height="7.5rem" />
1010
</div>
11-
<div v-else class="mb-4">
12-
<div class="quickstart-summary panel p-5 mb-4">
13-
<div class="flex items-start gap-4">
14-
<div class="summary-left">
15-
<h3 class="mb-1 text-lg font-semibold">QUICKSTART GUIDE</h3>
16-
<p class="text-sm text-zinc-400">Get set up in minutes — follow the key steps below.</p>
17-
</div>
18-
<div class="ml-auto hidden sm:block">
19-
<div class="completion-pill text-xs font-medium">{{ Math.round(completionPercentage) }}% complete</div>
20-
</div>
21-
</div>
22-
23-
<ul class="mt-4 grid gap-2 sm:grid-cols-2">
24-
<li class="flex items-start gap-3">
25-
<svg class="icon-check" width="18" height="18" viewBox="0 0 24 24" fill="none"><path d="M20 6L9 17l-5-5" stroke="#9CA3AF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
26-
<div>
27-
<div class="text-sm font-medium">Connect your first integration</div>
28-
<div class="text-xs text-zinc-400">Authorize a provider to start syncing data.</div>
29-
</div>
30-
</li>
31-
<li class="flex items-start gap-3">
32-
<svg class="icon-check" width="18" height="18" viewBox="0 0 24 24" fill="none"><path d="M20 6L9 17l-5-5" stroke="#9CA3AF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
33-
<div>
34-
<div class="text-sm font-medium">Invite your team</div>
35-
<div class="text-xs text-zinc-400">Add teammates with full or read-only access.</div>
36-
</div>
37-
</li>
38-
<li class="flex items-start gap-3">
39-
<svg class="icon-check" width="18" height="18" viewBox="0 0 24 24" fill="none"><path d="M20 6L9 17l-5-5" stroke="#9CA3AF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
40-
<div>
41-
<div class="text-sm font-medium">Explore contacts</div>
42-
<div class="text-xs text-zinc-400">Browse and search your people database.</div>
43-
</div>
44-
</li>
45-
<li class="flex items-start gap-3">
46-
<svg class="icon-check" width="18" height="18" viewBox="0 0 24 24" fill="none"><path d="M20 6L9 17l-5-5" stroke="#9CA3AF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
47-
<div>
48-
<div class="text-sm font-medium">Explore organizations</div>
49-
<div class="text-xs text-zinc-400">See company profiles and activity.</div>
50-
</div>
51-
</li>
52-
<li class="flex items-start gap-3">
53-
<svg class="icon-check" width="18" height="18" viewBox="0 0 24 24" fill="none"><path d="M20 6L9 17l-5-5" stroke="#9CA3AF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
54-
<div>
55-
<div class="text-sm font-medium">Look into reports</div>
56-
<div class="text-xs text-zinc-400">Run analytics to understand your activity.</div>
57-
</div>
58-
</li>
59-
<li class="flex items-start gap-3">
60-
<svg class="icon-check" width="18" height="18" viewBox="0 0 24 24" fill="none"><path d="M20 6L9 17l-5-5" stroke="#9CA3AF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
61-
<div>
62-
<div class="text-sm font-medium">Create automations</div>
63-
<div class="text-xs text-zinc-400">Automate routine workflows and notifications.</div>
64-
</div>
65-
</li>
66-
</ul>
67-
</div>
68-
</div>
6911
<el-collapse
70-
v-else
7112
v-model="activeView"
7213
accordion
7314
class="guides"

frontend/src/modules/quickstart/pages/quickstart-page.vue

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@
22
<app-page-wrapper>
33
<div class="pb-6">
44
<h4 class="mb-1 mt-8">
5-
Welcome to GitMesh 🐾
5+
Welcome to GitMesh !!<br></br>ദ്ദി (˵ •̀ ᴗ - ˵ ) ✧
66
</h4>
7-
<p class="text-xs leading-5 text-gray-300">
8-
The place where open-source teams coordinate, review, and ship together.
9-
</p>
107
</div>
118
<div class="flex flex-wrap -mx-2.5">
129
<div class="w-full lg:w-2/3 px-2.5">

0 commit comments

Comments
 (0)