Skip to content

Commit

Permalink
Add error for handling bad links/strats
Browse files Browse the repository at this point in the history
  • Loading branch information
hardingjam committed Feb 26, 2025
1 parent 9a8778e commit 80d71a6
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 29 deletions.
42 changes: 32 additions & 10 deletions packages/webapp/src/routes/deploy/+layout.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,38 @@ import type { LayoutLoad } from './$types';
import { DotrainOrderGui } from '@rainlanguage/orderbook/js_api';

export const load: LayoutLoad = async ({ url }) => {
// get the registry url from the url params
const registry = url.searchParams.get('registry');
try {
const registryDotrains = await fetchRegistryDotrains(registry || REGISTRY_URL);
if (!registryDotrains || registryDotrains.length === 0) {
throw new Error('No strategy registry found at URL');
}
const strategyDetails = await Promise.all(
registryDotrains.map(async (registryDotrain) => {
try {
const details = await DotrainOrderGui.getStrategyDetails(registryDotrain.dotrain);
if (!details) {
throw new Error('This registry contains invalid Dotrain documents.');
}
return { ...registryDotrain, details };
} catch (error) {
throw new Error(error instanceof Error ? error.message : String(error));
}
})
);

const registryDotrains = await fetchRegistryDotrains(registry || REGISTRY_URL);
const strategyDetails = await Promise.all(
registryDotrains.map(async (registryDotrain) => {
const details = await DotrainOrderGui.getStrategyDetails(registryDotrain.dotrain);
return { ...registryDotrain, details };
})
);

return { registry: registry || REGISTRY_URL, registryDotrains, strategyDetails };
return {
registry: registry || REGISTRY_URL,
registryDotrains,
strategyDetails,
error: null
};
} catch (error: unknown) {
return {
registry: registry || REGISTRY_URL,
registryDotrains: [],
strategyDetails: [],
error: error instanceof Error ? error.message : 'Unknown error occurred'
};
}
};
46 changes: 27 additions & 19 deletions packages/webapp/src/routes/deploy/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import { Button, Input, Toggle } from 'flowbite-svelte';
import { page } from '$app/stores';
const { strategyDetails } = $page.data;
const { strategyDetails, error } = $page.data;
let newRegistryUrl = '';
let advancedMode = false;
Expand Down Expand Up @@ -42,24 +42,32 @@
<div class="flex w-full max-w-6xl flex-col gap-y-6">
<div class="text-4xl font-semibold text-gray-900 dark:text-white">Strategies</div>

<div class="flex flex-col rounded-3xl bg-primary-100 p-12 dark:bg-primary-900">
<h1 class="text-xl font-semibold text-gray-900 dark:text-white">
Raindex empowers you to take full control of your trading strategies. All the strategies here
are non-custodial, perpetual, and automated strategies built with our open-source, DeFi-native
language <a class="underline" target="_blank" href="https://rainlang.xyz">Rainlang</a>.
</h1>
</div>
{#if error}
<div class="flex gap-2 text-xl">
Error loading registry:<span class="text-red-500">{error}</span>
</div>
{:else}
<div class="bg-primary-100 dark:bg-primary-900 flex flex-col rounded-3xl p-12">
<h1 class="text-xl font-semibold text-gray-900 dark:text-white">
Raindex empowers you to take full control of your trading strategies. All the strategies
here are non-custodial, perpetual, and automated strategies built with our open-source,
DeFi-native language <a class="underline" target="_blank" href="https://rainlang.xyz"
>Rainlang</a
>.
</h1>
</div>

{#if strategyDetails.length > 0}
{#key strategyDetails}
<div class="mb-36 grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
{#each strategyDetails as strategyDetail}
<StrategyShortTile
strategyDetails={strategyDetail.details}
registryName={strategyDetail.name}
/>
{/each}
</div>
{/key}
{#if strategyDetails.length > 0}
{#key strategyDetails}
<div class="mb-36 grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
{#each strategyDetails as strategyDetail}
<StrategyShortTile
strategyDetails={strategyDetail.details}
registryName={strategyDetail.name}
/>
{/each}
</div>
{/key}
{/if}
{/if}
</div>

0 comments on commit 80d71a6

Please sign in to comment.