Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
ccd61b6
chore: initial commit
emlimlf Dec 3, 2025
0add8b7
chore: added project filter
emlimlf Dec 4, 2025
3891f9f
chore: added integration status section
emlimlf Dec 4, 2025
a4db2b8
chore: added integration details with mock data
emlimlf Dec 4, 2025
428fde1
chore: changed integration row display to match integration page
emlimlf Dec 5, 2025
3beb014
chore: wire integration tab to api
emlimlf Dec 5, 2025
82939a9
chore: wired integration details list to api
emlimlf Dec 9, 2025
287c88a
chore: added sub project filter dropdown
emlimlf Dec 9, 2025
26e94c9
fix: hide project card when project is selected
emlimlf Dec 11, 2025
c155198
feat: add metrics api
ulemons Dec 11, 2025
404a959
fix: lint
ulemons Dec 11, 2025
5cdf2e7
fix: adjust return type from query
ulemons Dec 11, 2025
bcd4407
fix: return just first value
ulemons Dec 11, 2025
d81be1a
feat: add project metric
ulemons Dec 11, 2025
fdf2ea0
fix: lint
ulemons Dec 11, 2025
3bc2bda
refactor: using semgnets entity
ulemons Dec 11, 2025
220ea4b
fix: remove deleted at
ulemons Dec 11, 2025
dbb706f
chore: initial commit
emlimlf Dec 3, 2025
dcd5758
chore: added project filter
emlimlf Dec 4, 2025
2e54ebb
chore: added integration status section
emlimlf Dec 4, 2025
4dc78d7
chore: added integration details with mock data
emlimlf Dec 4, 2025
df239fb
chore: changed integration row display to match integration page
emlimlf Dec 5, 2025
20a17f6
chore: wire integration tab to api
emlimlf Dec 5, 2025
4c231e5
chore: wired integration details list to api
emlimlf Dec 9, 2025
c0bce74
chore: added sub project filter dropdown
emlimlf Dec 9, 2025
9f24898
fix: hide project card when project is selected
emlimlf Dec 11, 2025
59c65e3
fix: merge conflict
emlimlf Dec 12, 2025
2d68eb0
chore: wired summary cards to backend
emlimlf Dec 12, 2025
cc3dc14
fix: previous value computation
emlimlf Dec 12, 2025
faf148c
Merge branch 'main' into feat/overview-page
emlimlf Dec 12, 2025
e93f5e9
fix: trend label and added segment param
emlimlf Dec 12, 2025
3742769
fix: summary data not showing
emlimlf Dec 12, 2025
6f0e504
Merge branch 'feat/overview-page' of github.com:CrowdDotDev/crowd.dev…
emlimlf Dec 12, 2025
4100e78
feat: redirect the integrations chip to correct integration tab
emlimlf Dec 12, 2025
a88f071
fix: lint issues
emlimlf Dec 12, 2025
46d4b91
Merge branch 'main' into feat/overview-page
emlimlf Dec 15, 2025
fe0a152
fix: projects filter bugs
emlimlf Dec 15, 2025
7520a11
fix: integrations count
emlimlf Dec 15, 2025
621c66d
fix: integrations dropdown filter search
emlimlf Dec 15, 2025
4ae9639
fix: integration status not refreshing on project filter
emlimlf Dec 15, 2025
1149d8e
chore: lint fix
emlimlf Dec 15, 2025
0ecd94c
fix: ellipsis menu placement
emlimlf Dec 15, 2025
d400116
fix: number format and page width
emlimlf Dec 15, 2025
9509dc0
fix: font sizing and text copy
emlimlf Dec 15, 2025
a8f7268
fix: dropdown item types
emlimlf Dec 15, 2025
d4a0c84
Merge branch 'main' into feat/overview-page
emlimlf Dec 16, 2025
d2ff8b5
fix: multiple popups opened
emlimlf Dec 16, 2025
92c27cf
fix: integration filter width and overview page width
emlimlf Dec 16, 2025
91a122e
chore: testing progress list api
emlimlf Dec 16, 2025
e106559
fix: page width
emlimlf Dec 16, 2025
60b932b
chore: lint issues
emlimlf Dec 16, 2025
2501fc5
chore: added display for in progress
emlimlf Dec 16, 2025
7a2086b
fix: github nango display
emlimlf Dec 16, 2025
22f98f6
fix: inccorect tab key used
emlimlf Dec 16, 2025
743ce91
fix: status alignment
emlimlf Dec 16, 2025
0ce34c9
feat: added action required messages
emlimlf Dec 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions backend/src/api/dashboard/dashboardMetricsGet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import DashboardService from '@/services/dashboardService'

import Permissions from '../../security/permissions'
import PermissionChecker from '../../services/user/permissionChecker'

export default async (req, res) => {
new PermissionChecker(req).validateHas(Permissions.values.memberRead)

const payload = await new DashboardService(req).getMetrics(req.query)

await req.responseHandler.success(req, res, payload)
}
1 change: 1 addition & 0 deletions backend/src/api/dashboard/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ import { safeWrap } from '../../middlewares/errorMiddleware'

export default (app) => {
app.get(`/dashboard`, safeWrap(require('./dashboardGet').default))
app.get(`/dashboard/metrics`, safeWrap(require('./dashboardMetricsGet').default))
}
22 changes: 22 additions & 0 deletions backend/src/services/dashboardService.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import { getMetrics } from '@crowd/data-access-layer/src/dashboards'
import { RedisCache } from '@crowd/redis'
import { DashboardTimeframe } from '@crowd/types'

import SequelizeRepository from '../database/repositories/sequelizeRepository'

import { IServiceOptions } from './IServiceOptions'

interface IDashboardQueryParams {
Expand All @@ -9,6 +12,10 @@ interface IDashboardQueryParams {
timeframe: DashboardTimeframe
}

interface IDashboardMetricsQueryParams {
segment?: string
}

export default class DashboardService {
options: IServiceOptions

Expand Down Expand Up @@ -75,4 +82,19 @@ export default class DashboardService {

return JSON.parse(data)
}

async getMetrics(params: IDashboardMetricsQueryParams) {
try {
if (!params.segment) {
this.options.log.warn('No segment ID provided for metrics query')
}

const qx = SequelizeRepository.getQueryExecutor(this.options)
const metrics = await getMetrics(qx, params.segment)
return metrics
} catch (error) {
this.options.log.error('Failed to fetch dashboard metrics', { error, params })
throw new Error('Unable to fetch dashboard metrics')
}
}
}
47 changes: 21 additions & 26 deletions frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
"@linuxfoundation/lfx-ui-core": "^0.0.20",
"@nangohq/frontend": "^0.9.0",
"@nangohq/frontend-v2": "npm:@nangohq/frontend@^0.52.4",
"@sxzz/popperjs-es": "^2.11.7",
"@tailwindcss/line-clamp": "^0.4.2",
"@tanstack/vue-query": "^5.75.1",
"@tanstack/vue-query-devtools": "^5.75.1",
Expand All @@ -49,6 +50,7 @@
"eslint-import-resolver-alias": "^1.1.2",
"eslint-plugin-import": "^2.27.5",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
"logrocket": "^3.0.1",
"logrocket-vuex": "^0.0.3",
"marked": "^4.3.0",
Expand Down
14 changes: 8 additions & 6 deletions frontend/src/config/integrations/confluence/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,24 @@ import ConfluenceParams from './components/confluence-params.vue';
import ConfluenceDropdown from './components/confluence-dropdown.vue';
import LfConfluenceSettingsDrawer from './components/confluence-settings-drawer.vue';

const image = new URL(
'@/assets/images/integrations/confluence.svg',
import.meta.url,
).href;
const image = new URL('@/assets/images/integrations/confluence.svg', import.meta.url).href;

const confluence: IntegrationConfig = {
key: 'confluence',
name: 'Confluence',
image,
description:
'Connect Confluence to sync documentation activities from your repos.',
description: 'Connect Confluence to sync documentation activities from your repos.',
connectComponent: ConfluenceConnect,
connectedParamsComponent: ConfluenceParams,
dropdownComponent: ConfluenceDropdown,
settingComponent: LfConfluenceSettingsDrawer,
showProgress: false,
actionRequiredMessage: [
{
key: 'needs-reconnect',
text: 'Reconnect your account to restore access.',
},
],
};

export default confluence;
12 changes: 8 additions & 4 deletions frontend/src/config/integrations/devto/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,22 @@ import { IntegrationConfig } from '@/config/integrations';
import DevtoConnect from './components/devto-connect.vue';
import DevtoParams from './components/devto-params.vue';

const image = new URL('@/assets/images/integrations/devto.png', import.meta.url)
.href;
const image = new URL('@/assets/images/integrations/devto.png', import.meta.url).href;

const devto: IntegrationConfig = {
key: 'devto',
name: 'DEV',
image,
description:
'Connect DEV to sync profile information and comments on articles.',
description: 'Connect DEV to sync profile information and comments on articles.',
connectComponent: DevtoConnect,
connectedParamsComponent: DevtoParams,
showProgress: false,
actionRequiredMessage: [
{
key: 'needs-reconnect',
text: 'Reconnect your account to restore access.',
},
],
};

export default devto;
Loading