Deep link: add prompt (#1669)
Example: open "dyad://add-prompt?data=eyJ0aXRsZSI6IlRlc3QgUHJvbXB0IiwiZGVzY3JpcHRpb24iOiJBIHRlc3QgcHJvbXB0IGZyb20gZGVlcCBsaW5rIiwiY29udGVudCI6IlRoaXMgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHByb21wdC4ifQ%3D%3D" <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds dyad://add-prompt deep link that navigates to Library and opens a prefilled Create Prompt dialog from base64 JSON. > > - **Deep Link Handling** > - Parse `dyad://add-prompt?data=<base64-json>` in `src/main.ts`; validate with `AddPromptDataSchema` and send `deep-link-received` with payload. > - Extend `DeepLinkContext` to navigate to `/library` on `add-prompt`. > - **Library/Dialogs** > - Add controlled open state and `prefillData` support to `CreateOrEditPromptDialog` and `CreatePromptDialog` (`src/components/CreatePromptDialog.tsx`). > - In `src/pages/library.tsx`, listen for `add-prompt` deep link, prefill form, open dialog, and clear deep-link state. > - **Schemas** > - Define `AddPromptDataSchema`, `AddPromptPayload`, and `AddPromptDeepLinkData` in `src/ipc/deep_link_data.ts` and include in `DeepLinkData` union. > - **E2E Tests** > - Add Playwright test `e2e-tests/add_prompt_deep_link.spec.ts` and ARIA snapshot to verify deep link opens prefilled dialog and saves prompt. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 1ddb12306cfca195682c8a1b719f60093b858d54. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This commit is contained in:
28
src/main.ts
28
src/main.ts
@@ -21,6 +21,8 @@ import { handleNeonOAuthReturn } from "./neon_admin/neon_return_handler";
|
||||
import {
|
||||
AddMcpServerConfigSchema,
|
||||
AddMcpServerPayload,
|
||||
AddPromptDataSchema,
|
||||
AddPromptPayload,
|
||||
} from "./ipc/deep_link_data";
|
||||
|
||||
log.errorHandler.startCatching();
|
||||
@@ -357,6 +359,32 @@ function handleDeepLinkReturn(url: string) {
|
||||
}
|
||||
return;
|
||||
}
|
||||
// dyad://add-prompt?data=<base64-encoded-json>
|
||||
if (parsed.hostname === "add-prompt") {
|
||||
const data = parsed.searchParams.get("data");
|
||||
if (!data) {
|
||||
dialog.showErrorBox("Invalid URL", "Expected data parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const decodedJson = atob(data);
|
||||
const decoded = JSON.parse(decodedJson);
|
||||
const parsedData = AddPromptDataSchema.parse(decoded);
|
||||
|
||||
mainWindow?.webContents.send("deep-link-received", {
|
||||
type: parsed.hostname,
|
||||
payload: parsedData as AddPromptPayload,
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error("Failed to parse add-prompt deep link:", error);
|
||||
dialog.showErrorBox(
|
||||
"Invalid Prompt Data",
|
||||
"The deep link contains malformed data. Please check the URL and try again.",
|
||||
);
|
||||
}
|
||||
return;
|
||||
}
|
||||
dialog.showErrorBox("Invalid deep link URL", url);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user