diff --git a/crates/js_api/src/gui/mod.rs b/crates/js_api/src/gui/mod.rs index 76f7d7170..0f7e607ce 100644 --- a/crates/js_api/src/gui/mod.rs +++ b/crates/js_api/src/gui/mod.rs @@ -162,6 +162,19 @@ impl DotrainOrderGui { Ok(DeploymentDetails(deployment_details.into_iter().collect())) } + #[wasm_bindgen(js_name = "getDeploymentDetail")] + pub async fn get_deployment_detail( + dotrain: String, + key: String, + ) -> Result { + let deployment_details = DotrainOrderGui::get_deployment_details(dotrain).await?; + let deployment_detail = deployment_details + .0 + .get(&key) + .ok_or(GuiError::DeploymentNotFound(key))?; + Ok(deployment_detail.clone()) + } + #[wasm_bindgen(js_name = "generateDotrainText")] pub fn generate_dotrain_text(&self) -> Result { let rain_document = RainDocument::create(self.dotrain_order.dotrain(), None, None, None); diff --git a/packages/orderbook/test/js_api/gui.test.ts b/packages/orderbook/test/js_api/gui.test.ts index ce140b675..46ea81b42 100644 --- a/packages/orderbook/test/js_api/gui.test.ts +++ b/packages/orderbook/test/js_api/gui.test.ts @@ -391,6 +391,15 @@ describe('Rain Orderbook JS API Package Bindgen Tests - Gui', async function () assert.equal(entries[1][1].description, 'Buy WETH with USDC for fixed price on Base network.'); }); + it('should get deployment detail', async () => { + const deploymentDetail: NameAndDescription = await DotrainOrderGui.getDeploymentDetail( + dotrainWithGui, + 'other-deployment' + ); + assert.equal(deploymentDetail.name, 'Test test'); + assert.equal(deploymentDetail.description, 'Test test test'); + }); + it('should get token infos', async () => { mockServer .forPost('/rpc-url') diff --git a/packages/webapp/src/routes/deploy/[strategyName]/[deploymentKey]/+layout.ts b/packages/webapp/src/routes/deploy/[strategyName]/[deploymentKey]/+layout.ts index 0c02e66f8..f2003ee82 100644 --- a/packages/webapp/src/routes/deploy/[strategyName]/[deploymentKey]/+layout.ts +++ b/packages/webapp/src/routes/deploy/[strategyName]/[deploymentKey]/+layout.ts @@ -9,20 +9,10 @@ export const load: LayoutLoad = async ({ params, parent }) => { const { deploymentKey } = params; const { dotrain } = (await parent()) as unknown as LayoutParentData; - // Process deployments for both raw and registry strategies - const deploymentWithDetails = await DotrainOrderGui.getDeploymentDetails(dotrain); - const deployments = Array.from(deploymentWithDetails, ([key, details]) => ({ - key, - ...details - })); - - const deployment = deployments.find( - (deployment: { key: string }) => deployment.key === deploymentKey + const { name, description } = await DotrainOrderGui.getDeploymentDetail( + dotrain, + deploymentKey || '' ); - if (!deployment) { - throw new Error(`Deployment ${deploymentKey} not found`); - } - - return { deployment, dotrain }; + return { deployment: { key: deploymentKey, name, description }, dotrain }; };