diff --git a/packages/backend/src/graphql/queries/get-connected-apps.ts b/packages/backend/src/graphql/queries/get-connected-apps.ts
index 2373944f..a28503e2 100644
--- a/packages/backend/src/graphql/queries/get-connected-apps.ts
+++ b/packages/backend/src/graphql/queries/get-connected-apps.ts
@@ -1,3 +1,4 @@
+import { raw } from 'objection';
import App from '../../models/app';
import Context from '../../types/express/context';
import { IApp, IConnection } from '@automatisch/types';
@@ -22,16 +23,41 @@ const getConnectedApps = async (
const connectionKeys = connections.map((connection) => connection.key);
+ const flows = await context.currentUser
+ .$relatedQuery('steps')
+ .select('flow_id', raw('ARRAY_AGG(app_key)').as('apps'))
+ .groupBy('flow_id') as unknown as { flow_id: string; apps: string[] }[];
+
+ const appFlowCounts = flows.reduce((counts, flow) => {
+ const apps = flow.apps;
+ const unifiedApps = Array.from(new Set(apps))
+
+ for (const app of unifiedApps) {
+ if (!counts[app]) {
+ counts[app] = 0;
+ }
+
+ counts[app] += 1;
+ }
+
+ return counts;
+ }, {} as { [key: string]: number });
+
apps = apps
- .filter((app: IApp) => connectionKeys.includes(app.key))
+ .filter((app: IApp) => {
+ const hasConnections = connectionKeys.includes(app.key);
+ const hasFlows = flows.find((flow) => flow.apps.includes(app.key));
+
+ return hasFlows || hasConnections;
+ })
.map((app: IApp) => {
const connection = connections.find(
(connection) => (connection as IConnection).key === app.key
);
- if (connection) {
- app.connectionCount = connection.count;
- }
+ app.connectionCount = connection?.count || 0;
+
+ app.flowCount = appFlowCounts[app.key];
return app;
});
diff --git a/packages/backend/src/graphql/schema.graphql b/packages/backend/src/graphql/schema.graphql
index 3d5eeffa..8e135879 100644
--- a/packages/backend/src/graphql/schema.graphql
+++ b/packages/backend/src/graphql/schema.graphql
@@ -85,6 +85,7 @@ type App {
name: String
key: String
connectionCount: Int
+ flowCount: Int
iconUrl: String
docUrl: String
primaryColor: String
diff --git a/packages/types/index.d.ts b/packages/types/index.d.ts
index 67b12115..51807ecd 100644
--- a/packages/types/index.d.ts
+++ b/packages/types/index.d.ts
@@ -147,6 +147,7 @@ export interface IApp {
authenticationSteps: IAuthenticationStep[];
reconnectionSteps: IAuthenticationStep[];
connectionCount: number;
+ flowCount: number;
triggers: any[];
actions: any[];
connections: IConnection[];
diff --git a/packages/web/src/components/AppRow/index.tsx b/packages/web/src/components/AppRow/index.tsx
index f04f9c35..e575f187 100644
--- a/packages/web/src/components/AppRow/index.tsx
+++ b/packages/web/src/components/AppRow/index.tsx
@@ -27,7 +27,7 @@ const countTranslation = (value: React.ReactNode) => (
function AppRow(props: AppRowProps): React.ReactElement {
const formatMessage = useFormatMessage();
- const { name, primaryColor, iconUrl, connectionCount } = props.application;
+ const { name, primaryColor, iconUrl, connectionCount, flowCount } = props.application;
return (
@@ -52,7 +52,7 @@ function AppRow(props: AppRowProps): React.ReactElement {
- {formatMessage('app.flowCount', { count: countTranslation(0) })}
+ {formatMessage('app.flowCount', { count: countTranslation(flowCount) })}
diff --git a/packages/web/src/graphql/queries/get-connected-apps.ts b/packages/web/src/graphql/queries/get-connected-apps.ts
index 1c91f6e9..b4529e8e 100644
--- a/packages/web/src/graphql/queries/get-connected-apps.ts
+++ b/packages/web/src/graphql/queries/get-connected-apps.ts
@@ -9,6 +9,7 @@ export const GET_CONNECTED_APPS = gql`
docUrl
primaryColor
connectionCount
+ flowCount
supportsConnections
}
}