Skip to content

Commit c3d2451

Browse files
committed
fix: send assets updates to the chatbot
1 parent e09cc1e commit c3d2451

File tree

11 files changed

+201
-9
lines changed

11 files changed

+201
-9
lines changed

src/components/organisms/chatbotIframe/chatbotIframe.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ export const ChatbotIframe = ({
180180
}
181181
);
182182

183-
const varUpdatedListener = iframeCommService.addListener(MessageTypes.VAR_UPDATED, (message) => {
183+
const varUpdatedListener = iframeCommService.addListener(MessageTypes.ASSET_UPDATED, (message) => {
184184
try {
185185
if (isVarUpdatedMessage(message) && projectId) {
186186
handleVariableRefresh(projectId, t);

src/components/organisms/connections/table.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,15 @@ export const ConnectionsTable = () => {
120120
t("connectionRemoveSuccessExtended", { connectionId, connectionName: connection?.name })
121121
);
122122

123-
fetchConnections(projectId!, true);
123+
await fetchConnections(projectId!, true);
124+
125+
try {
126+
const { iframeCommService } = await import("@services/iframeComm.service");
127+
iframeCommService.sendAssetsUpdated(projectId!, "connections");
128+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
129+
} catch (error) {
130+
// Silently handle iframe communication errors
131+
}
124132
};
125133

126134
return isLoading ? (

src/components/organisms/triggers/add.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,15 @@ export const AddTrigger = () => {
116116
});
117117

118118
await fetchTriggers(projectId!, true);
119+
120+
try {
121+
const { iframeCommService } = await import("@services/iframeComm.service");
122+
iframeCommService.sendAssetsUpdated(projectId!, "triggers");
123+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
124+
} catch (error) {
125+
// Silently handle iframe communication errors
126+
}
127+
119128
navigate(`/projects/${projectId}/triggers/${triggerId}/edit`, {
120129
state: { highlightWebhookUrl: true },
121130
});

src/components/organisms/triggers/edit.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,15 @@ export const EditTrigger = () => {
176176
return;
177177
}
178178
await fetchTriggers(projectId!, true);
179+
180+
try {
181+
const { iframeCommService } = await import("@services/iframeComm.service");
182+
iframeCommService.sendAssetsUpdated(projectId!, "triggers");
183+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
184+
} catch (error) {
185+
// Silently handle iframe communication errors
186+
}
187+
179188
addToast({
180189
message: t("updatedSuccessfully"),
181190
type: "success",

src/components/organisms/triggers/table.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,15 @@ export const TriggersTable = () => {
9595
type: "success",
9696
});
9797
LoggerService.info(namespaces.ui.triggers, t("table.triggerRemovedSuccessfullyExtended", { triggerId }));
98-
fetchTriggers(projectId!, true);
98+
await fetchTriggers(projectId!, true);
99+
100+
try {
101+
const { iframeCommService } = await import("@services/iframeComm.service");
102+
iframeCommService.sendAssetsUpdated(projectId!, "triggers");
103+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
104+
} catch (error) {
105+
// Silently handle iframe communication errors
106+
}
99107
// eslint-disable-next-line @typescript-eslint/no-unused-vars
100108
} catch (error) {
101109
addToast({

src/components/organisms/variables/add.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,15 @@ export const AddVariable = () => {
6161
return;
6262
}
6363
await fetchVariables(projectId!, true);
64+
65+
try {
66+
const { iframeCommService } = await import("@services/iframeComm.service");
67+
iframeCommService.sendAssetsUpdated(projectId!, "variables");
68+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
69+
} catch (error) {
70+
// Silently handle iframe communication errors
71+
}
72+
6473
navigate(-1);
6574
};
6675

src/components/organisms/variables/edit.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,21 @@ export const EditVariable = () => {
9191
message: t("variableNotEdited"),
9292
type: "error",
9393
});
94+
setIsLoading(false);
95+
return;
9496
}
97+
9598
await fetchVariables(projectId!, true);
96-
setIsLoading(false);
9799

100+
try {
101+
const { iframeCommService } = await import("@services/iframeComm.service");
102+
iframeCommService.sendAssetsUpdated(projectId!, "variables");
103+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
104+
} catch (error) {
105+
// Silently handle iframe communication errors
106+
}
107+
108+
setIsLoading(false);
98109
navigate(`/projects/${projectId}/variables`);
99110
};
100111

src/components/organisms/variables/table.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,15 @@ export const VariablesTable = () => {
6666

6767
setDeleteVariable(undefined);
6868

69-
fetchVariables(projectId!, true);
69+
await fetchVariables(projectId!, true);
70+
71+
try {
72+
const { iframeCommService } = await import("@services/iframeComm.service");
73+
iframeCommService.sendAssetsUpdated(projectId!, "variables");
74+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
75+
} catch (error) {
76+
// Silently handle iframe communication errors
77+
}
7078
};
7179

7280
const showDeleteModal = (variableName: string, variableValue: string, scopeId: string) => {

src/interfaces/services/iframeCommunication.interface.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export enum MessageTypes {
2525
DISPLAY_DIAGRAM = "DISPLAY_DIAGRAM",
2626
SET_EDITOR_CODE_SELECTION = "SET_EDITOR_CODE_SELECTION",
2727
WELCOME_MESSAGE = "WELCOME_MESSAGE",
28-
VAR_UPDATED = "VAR_UPDATED",
28+
ASSET_UPDATED = "ASSET_UPDATED",
2929
REFRESH_CONNECTION = "REFRESH_CONNECTION",
3030
REFRESH_DEPLOYMENTS = "REFRESH_DEPLOYMENTS",
3131
CODE_FIX_SUGGESTION = "CODE_FIX_SUGGESTION",
@@ -94,7 +94,7 @@ export interface NavigateToBillingMessage extends IframeMessage<Record<string, n
9494
}
9595

9696
export interface VarUpdatedMessage extends IframeMessage<{ projectId: string }> {
97-
type: MessageTypes.VAR_UPDATED;
97+
type: MessageTypes.ASSET_UPDATED;
9898
}
9999

100100
export interface RefreshDeploymentsMessage extends IframeMessage<Record<string, never>> {

src/services/iframeComm.service.ts

Lines changed: 131 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import {
1313
CodeFixSuggestionAllMessage,
1414
CodeSuggestionAcceptedMessage,
1515
CodeSuggestionRejectedMessage,
16+
DataRequestMessage,
17+
DataResponseMessage,
1618
DiagramDisplayMessage,
1719
DownloadChatMessage,
1820
DownloadDumpMessage,
@@ -424,6 +426,24 @@ class IframeCommService {
424426
this.sendMessage(message);
425427
}
426428

429+
public sendAssetsUpdated(projectId: string, assetType: "variables" | "connections" | "triggers"): void {
430+
const message = {
431+
type: MessageTypes.ASSET_UPDATED,
432+
source: CONFIG.APP_SOURCE,
433+
data: {
434+
projectId,
435+
assetType,
436+
},
437+
};
438+
439+
LoggerService.debug(
440+
namespaces.iframeCommService,
441+
`Sending assets updated notification: ${assetType} for project ${projectId}`
442+
);
443+
444+
this.sendMessage(message);
445+
}
446+
427447
public async requestData<T>(resource: string, originalRequestId?: string): Promise<T> {
428448
if (!this.isConnected) {
429449
await this.waitForConnection();
@@ -669,7 +689,7 @@ class IframeCommService {
669689
case MessageTypes.DISPLAY_DIAGRAM:
670690
this.handleDiagramDisplayMessage(message as DiagramDisplayMessage);
671691
break;
672-
case MessageTypes.VAR_UPDATED:
692+
case MessageTypes.ASSET_UPDATED:
673693
this.handleVarUpdatedMessage(message as VarUpdatedMessage);
674694
break;
675695
case MessageTypes.REFRESH_DEPLOYMENTS:
@@ -690,6 +710,12 @@ class IframeCommService {
690710
case MessageTypes.DOWNLOAD_CHAT:
691711
this.handleDownloadChatMessage(message as DownloadChatMessage);
692712
break;
713+
case MessageTypes.DATA_REQUEST:
714+
this.handleDataRequestMessage(message as DataRequestMessage);
715+
break;
716+
case MessageTypes.DATA_RESPONSE:
717+
this.handleDataResponseMessage(message as DataResponseMessage);
718+
break;
693719
}
694720

695721
this.listeners
@@ -1101,5 +1127,109 @@ class IframeCommService {
11011127
);
11021128
}
11031129
}
1130+
1131+
private async handleDataRequestMessage(message: DataRequestMessage): Promise<void> {
1132+
const { requestId, resource } = message.data;
1133+
1134+
try {
1135+
let data: unknown;
1136+
1137+
switch (resource) {
1138+
case "variables":
1139+
case "vars": {
1140+
const { useCacheStore } = await import("@src/store/cache/useCacheStore");
1141+
const { variables, currentProjectId } = useCacheStore.getState();
1142+
if (currentProjectId) {
1143+
// Ensure we have the latest variables
1144+
await useCacheStore.getState().fetchVariables(currentProjectId, true);
1145+
data = useCacheStore.getState().variables;
1146+
} else {
1147+
data = variables;
1148+
}
1149+
break;
1150+
}
1151+
case "connections": {
1152+
const { useCacheStore } = await import("@src/store/cache/useCacheStore");
1153+
const { connections, currentProjectId } = useCacheStore.getState();
1154+
if (currentProjectId) {
1155+
// Ensure we have the latest connections
1156+
await useCacheStore.getState().fetchConnections(currentProjectId, true);
1157+
data = useCacheStore.getState().connections;
1158+
} else {
1159+
data = connections;
1160+
}
1161+
break;
1162+
}
1163+
case "triggers": {
1164+
const { useCacheStore } = await import("@src/store/cache/useCacheStore");
1165+
const { triggers, currentProjectId } = useCacheStore.getState();
1166+
if (currentProjectId) {
1167+
// Ensure we have the latest triggers
1168+
await useCacheStore.getState().fetchTriggers(currentProjectId, true);
1169+
data = useCacheStore.getState().triggers;
1170+
} else {
1171+
data = triggers;
1172+
}
1173+
break;
1174+
}
1175+
case "project": {
1176+
const { useCacheStore } = await import("@src/store/cache/useCacheStore");
1177+
const { currentProjectId } = useCacheStore.getState();
1178+
if (currentProjectId) {
1179+
const { useProjectStore } = await import("@src/store");
1180+
const project = await useProjectStore.getState().getProject(currentProjectId);
1181+
data = project.data;
1182+
} else {
1183+
data = null;
1184+
}
1185+
break;
1186+
}
1187+
case "resources": {
1188+
const { useCacheStore } = await import("@src/store/cache/useCacheStore");
1189+
const { resources, currentProjectId } = useCacheStore.getState();
1190+
if (currentProjectId) {
1191+
// Ensure we have the latest resources
1192+
await useCacheStore.getState().fetchResources(currentProjectId, true);
1193+
data = useCacheStore.getState().resources;
1194+
} else {
1195+
data = resources;
1196+
}
1197+
break;
1198+
}
1199+
default:
1200+
throw new Error(`Unknown resource type: ${resource}`);
1201+
}
1202+
1203+
// Send the response back
1204+
this.sendMessage({
1205+
type: MessageTypes.DATA_RESPONSE,
1206+
source: CONFIG.APP_SOURCE,
1207+
data: {
1208+
requestId,
1209+
data,
1210+
},
1211+
});
1212+
} catch (error) {
1213+
// Send error response
1214+
this.sendMessage({
1215+
type: MessageTypes.ERROR,
1216+
source: CONFIG.APP_SOURCE,
1217+
data: {
1218+
code: `REQUEST_${requestId}`,
1219+
message: error instanceof Error ? error.message : "Unknown error occurred",
1220+
},
1221+
});
1222+
}
1223+
}
1224+
1225+
private handleDataResponseMessage(message: DataResponseMessage): void {
1226+
const { requestId, data } = message.data;
1227+
1228+
const pendingRequest = this.pendingRequests.get(requestId);
1229+
if (pendingRequest) {
1230+
pendingRequest.resolve(data);
1231+
this.pendingRequests.delete(requestId);
1232+
}
1233+
}
11041234
}
11051235
export const iframeCommService = new IframeCommService();

0 commit comments

Comments
 (0)