@rainlanguage/ui-components 0.0.1-alpha.8 → 0.0.1-alpha.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__fixtures__/orderDetail.d.ts +1 -1
- package/dist/__mocks__/MockComponent.svelte +4 -0
- package/dist/__mocks__/MockComponent.svelte.d.ts +3 -1
- package/dist/__mocks__/mockTransactionStore.d.ts +3 -21
- package/dist/__mocks__/mockTransactionStore.js +26 -13
- package/dist/__mocks__/settings.d.ts +6 -2
- package/dist/__mocks__/settings.js +6 -1
- package/dist/__mocks__/stores.d.ts +86 -19
- package/dist/__mocks__/stores.js +26 -17
- package/dist/components/ButtonVaultLink.svelte +3 -3
- package/dist/components/ButtonVaultLink.svelte.d.ts +1 -1
- package/dist/components/CheckboxMyItemsOnly.svelte +3 -2
- package/dist/components/CheckboxMyItemsOnly.svelte.d.ts +0 -1
- package/dist/components/CodeMirrorDotrain.svelte +4 -0
- package/dist/components/CodeMirrorDotrain.svelte.d.ts +1 -0
- package/dist/components/CodeMirrorRainlang.svelte +2 -2
- package/dist/components/CodeMirrorRainlang.svelte.d.ts +1 -1
- package/dist/components/Hash.svelte +3 -3
- package/dist/components/License.svelte +5 -4
- package/dist/components/ListViewOrderbookFilters.svelte +14 -13
- package/dist/components/ListViewOrderbookFilters.svelte.d.ts +2 -5
- package/dist/components/OrderOrVaultHash.svelte +10 -7
- package/dist/components/OrderOrVaultHash.svelte.d.ts +1 -1
- package/dist/components/PageHeader.svelte +20 -22
- package/dist/components/PageHeader.svelte.d.ts +1 -0
- package/dist/components/TanstackAppTable.svelte +2 -3
- package/dist/components/TanstackAppTable.svelte.d.ts +1 -1
- package/dist/components/Tooltip.svelte +8 -0
- package/dist/components/Tooltip.svelte.d.ts +21 -0
- package/dist/components/charts/OrderTradesChart.svelte +1 -1
- package/dist/components/charts/TanstackLightweightChartLine.svelte +5 -9
- package/dist/components/charts/VaultBalanceChart.svelte +1 -1
- package/dist/components/charts/VaultBalanceChart.svelte.d.ts +1 -1
- package/dist/components/charts/transformAndSortData.d.ts +24 -0
- package/dist/components/charts/transformAndSortData.js +111 -0
- package/dist/components/checkbox/CheckboxActiveOrders.svelte +11 -0
- package/dist/components/checkbox/CheckboxActiveOrders.svelte.d.ts +19 -0
- package/dist/components/deployment/ComposedRainlangModal.svelte +7 -5
- package/dist/components/deployment/ComposedRainlangModal.svelte.d.ts +1 -4
- package/dist/components/deployment/DeploymentSectionHeader.svelte +7 -4
- package/dist/components/deployment/DeploymentSteps.svelte +180 -155
- package/dist/components/deployment/DeploymentSteps.svelte.d.ts +7 -13
- package/dist/components/deployment/DeploymentsSection.svelte +18 -14
- package/dist/components/deployment/DepositInput.svelte +31 -14
- package/dist/components/deployment/DepositInput.svelte.d.ts +1 -2
- package/dist/components/deployment/FieldDefinitionInput.svelte +20 -14
- package/dist/components/deployment/FieldDefinitionInput.svelte.d.ts +1 -2
- package/dist/components/deployment/SelectToken.svelte +12 -3
- package/dist/components/deployment/SelectToken.svelte.d.ts +1 -2
- package/dist/components/deployment/StrategyPage.svelte +6 -2
- package/dist/components/deployment/TokenIOInput.svelte +15 -5
- package/dist/components/deployment/TokenIOInput.svelte.d.ts +1 -2
- package/dist/components/deployment/handleDeployment.d.ts +11 -0
- package/dist/components/deployment/handleDeployment.js +33 -0
- package/dist/components/detail/OrderDetail.svelte +46 -41
- package/dist/components/detail/OrderDetail.svelte.d.ts +11 -8
- package/dist/components/detail/TanstackOrderQuote.svelte +6 -6
- package/dist/components/detail/TanstackOrderQuote.svelte.d.ts +1 -1
- package/dist/components/detail/VaultDetail.svelte +29 -40
- package/dist/components/detail/VaultDetail.svelte.d.ts +10 -10
- package/dist/components/dropdown/DropdownActiveSubgraphs.svelte.d.ts +1 -1
- package/dist/components/icon/Refresh.svelte +2 -1
- package/dist/components/icon/Refresh.svelte.d.ts +1 -0
- package/dist/components/input/InputOrderHash.svelte +1 -1
- package/dist/components/input/InputRegistryUrl.svelte +2 -2
- package/dist/components/input/InputToken.svelte +2 -2
- package/dist/components/input/InputTokenAmount.svelte +1 -1
- package/dist/components/tables/OrderAPY.svelte +1 -1
- package/dist/components/tables/OrderTradesListTable.svelte +1 -1
- package/dist/components/tables/OrderVaultsVolTable.svelte +1 -1
- package/dist/components/tables/OrdersListTable.svelte +16 -18
- package/dist/components/tables/OrdersListTable.svelte.d.ts +0 -6
- package/dist/components/tables/VaultBalanceChangesTable.svelte +3 -3
- package/dist/components/tables/VaultsListTable.svelte +43 -52
- package/dist/components/tables/VaultsListTable.svelte.d.ts +3 -6
- package/dist/components/wallet/WalletConnect.svelte +5 -4
- package/dist/components/wallet/WalletConnect.svelte.d.ts +0 -1
- package/dist/consts.d.ts +1 -0
- package/dist/consts.js +1 -0
- package/dist/errors/DeploymentStepsError.d.ts +5 -2
- package/dist/errors/DeploymentStepsError.js +4 -1
- package/dist/hooks/useGui.d.ts +3 -0
- package/dist/hooks/useGui.js +11 -0
- package/dist/index.d.ts +12 -6
- package/dist/index.js +14 -5
- package/dist/providers/GuiProvider.svelte +8 -0
- package/dist/providers/GuiProvider.svelte.d.ts +21 -0
- package/dist/providers/wallet/WalletProvider.svelte +7 -0
- package/dist/providers/wallet/WalletProvider.svelte.d.ts +21 -0
- package/dist/providers/wallet/context.d.ts +10 -0
- package/dist/providers/wallet/context.js +47 -0
- package/dist/providers/wallet/useAccount.d.ts +8 -0
- package/dist/providers/wallet/useAccount.js +148 -0
- package/dist/queries/queryClient.d.ts +1 -1
- package/dist/queries/queryClient.js +3 -3
- package/dist/services/awaitTransactionIndexing.d.ts +163 -0
- package/dist/services/awaitTransactionIndexing.js +120 -0
- package/dist/services/handleShareChoices.d.ts +2 -2
- package/dist/services/handleShareChoices.js +7 -2
- package/dist/services/historicalOrderCharts.d.ts +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/registry.d.ts +6 -0
- package/dist/services/registry.js +156 -0
- package/dist/stores/transactionStore.d.ts +7 -10
- package/dist/stores/transactionStore.js +35 -61
- package/dist/storesGeneric/cachedWritableStore.d.ts +57 -0
- package/dist/storesGeneric/cachedWritableStore.js +93 -0
- package/dist/types/account.d.ts +3 -0
- package/dist/types/account.js +1 -0
- package/dist/types/appStores.d.ts +2 -2
- package/dist/types/modal.d.ts +1 -1
- package/dist/types/strategy.d.ts +1 -1
- package/dist/types/transaction.d.ts +3 -3
- package/dist/utils/constructHashLink.d.ts +23 -0
- package/dist/utils/constructHashLink.js +110 -0
- package/dist/utils/vault.d.ts +1 -1
- package/package.json +34 -34
- package/dist/components/deployment/DepositsSection.svelte +0 -8
- package/dist/components/deployment/DepositsSection.svelte.d.ts +0 -20
- package/dist/components/deployment/FieldDefinitionsSection.svelte +0 -9
- package/dist/components/deployment/FieldDefinitionsSection.svelte.d.ts +0 -20
- package/dist/components/deployment/SelectTokensSection.svelte +0 -17
- package/dist/components/deployment/SelectTokensSection.svelte.d.ts +0 -21
- package/dist/components/deployment/TokenIOSection.svelte +0 -17
- package/dist/components/deployment/TokenIOSection.svelte.d.ts +0 -21
- package/dist/components/deployment/getDeploymentTransactionArgs.d.ts +0 -17
- package/dist/components/deployment/getDeploymentTransactionArgs.js +0 -24
- package/dist/components/detail/DepositOrWithdrawButtons.svelte +0 -44
- package/dist/components/detail/DepositOrWithdrawButtons.svelte.d.ts +0 -26
- package/dist/components/dropdown/DropdownOrderStatus.svelte +0 -31
- package/dist/components/dropdown/DropdownOrderStatus.svelte.d.ts +0 -19
|
@@ -2,16 +2,21 @@
|
|
|
2
2
|
import { CheckCircleSolid, CloseCircleSolid } from "flowbite-svelte-icons";
|
|
3
3
|
import { Spinner } from "flowbite-svelte";
|
|
4
4
|
import { onMount } from "svelte";
|
|
5
|
+
import { useGui } from "../../hooks/useGui";
|
|
5
6
|
export let token;
|
|
6
|
-
export let gui;
|
|
7
7
|
export let onSelectTokenSelect;
|
|
8
8
|
let inputValue = null;
|
|
9
9
|
let tokenInfo = null;
|
|
10
10
|
let error = "";
|
|
11
11
|
let checking = false;
|
|
12
|
+
const gui = useGui();
|
|
12
13
|
onMount(async () => {
|
|
13
14
|
try {
|
|
14
|
-
|
|
15
|
+
let result = await gui.getTokenInfo(token.key);
|
|
16
|
+
if (result.error) {
|
|
17
|
+
throw new Error(result.error.msg);
|
|
18
|
+
}
|
|
19
|
+
tokenInfo = result.value;
|
|
15
20
|
if (tokenInfo?.address) {
|
|
16
21
|
inputValue = tokenInfo.address;
|
|
17
22
|
}
|
|
@@ -21,7 +26,11 @@ onMount(async () => {
|
|
|
21
26
|
async function getInfoForSelectedToken() {
|
|
22
27
|
error = "";
|
|
23
28
|
try {
|
|
24
|
-
|
|
29
|
+
let result = await gui.getTokenInfo(token.key);
|
|
30
|
+
if (result.error) {
|
|
31
|
+
throw new Error(result.error.msg);
|
|
32
|
+
}
|
|
33
|
+
tokenInfo = result.value;
|
|
25
34
|
error = "";
|
|
26
35
|
} catch {
|
|
27
36
|
return error = "No token exists at this address.";
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
|
-
import type {
|
|
2
|
+
import type { GuiSelectTokensCfg } from '@rainlanguage/orderbook';
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
5
|
token: GuiSelectTokensCfg;
|
|
6
|
-
gui: DotrainOrderGui;
|
|
7
6
|
onSelectTokenSelect: () => void;
|
|
8
7
|
};
|
|
9
8
|
events: {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script>import { fade } from "svelte/transition";
|
|
2
|
-
import { DotrainOrderGui } from "@rainlanguage/orderbook
|
|
2
|
+
import { DotrainOrderGui } from "@rainlanguage/orderbook";
|
|
3
3
|
import DeploymentsSection from "./DeploymentsSection.svelte";
|
|
4
4
|
import SvelteMarkdown from "svelte-markdown";
|
|
5
5
|
export let strategyName = "";
|
|
@@ -21,7 +21,11 @@ const fetchMarkdownContent = async (url) => {
|
|
|
21
21
|
};
|
|
22
22
|
const getStrategyWithMarkdown = async () => {
|
|
23
23
|
try {
|
|
24
|
-
const
|
|
24
|
+
const result = await DotrainOrderGui.getStrategyDetails(dotrain);
|
|
25
|
+
if (result.error) {
|
|
26
|
+
throw new Error(result.error.msg);
|
|
27
|
+
}
|
|
28
|
+
const strategyDetails = result.value;
|
|
25
29
|
if (strategyDetails.description && isMarkdownUrl(strategyDetails.description)) {
|
|
26
30
|
await fetchMarkdownContent(strategyDetails.description);
|
|
27
31
|
}
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
<script>import { Input } from "flowbite-svelte";
|
|
2
|
-
import {
|
|
3
|
-
} from "@rainlanguage/orderbook/js_api";
|
|
2
|
+
import {} from "@rainlanguage/orderbook";
|
|
4
3
|
import DeploymentSectionHeader from "./DeploymentSectionHeader.svelte";
|
|
5
4
|
import { onMount } from "svelte";
|
|
5
|
+
import { useGui } from "../../hooks/useGui";
|
|
6
|
+
const gui = useGui();
|
|
6
7
|
export let i;
|
|
7
8
|
export let label;
|
|
8
9
|
export let vault;
|
|
9
|
-
export let gui;
|
|
10
10
|
let tokenInfo = null;
|
|
11
11
|
let inputValue = "";
|
|
12
12
|
let error = "";
|
|
13
13
|
onMount(() => {
|
|
14
|
-
const
|
|
14
|
+
const result = gui.getVaultIds();
|
|
15
|
+
if (result.error) {
|
|
16
|
+
error = result.error.msg;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const vaultIds = result.value;
|
|
15
20
|
if (label === "Input") {
|
|
16
21
|
inputValue = vaultIds.get("input")?.[i];
|
|
17
22
|
} else if (label === "Output") {
|
|
@@ -21,7 +26,12 @@ onMount(() => {
|
|
|
21
26
|
const handleGetTokenInfo = async () => {
|
|
22
27
|
if (!vault.token?.key) return;
|
|
23
28
|
try {
|
|
24
|
-
|
|
29
|
+
let result = await gui.getTokenInfo(vault.token?.key);
|
|
30
|
+
if (result.error) {
|
|
31
|
+
error = result.error.msg;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
tokenInfo = result.value;
|
|
25
35
|
} catch (e) {
|
|
26
36
|
const errorMessage = e.message ? e.message : "Error getting token info.";
|
|
27
37
|
error = errorMessage;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
|
-
import { type OrderIOCfg
|
|
2
|
+
import { type OrderIOCfg } from '@rainlanguage/orderbook';
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
5
|
i: number;
|
|
6
6
|
label: "Input" | "Output";
|
|
7
7
|
vault: OrderIOCfg;
|
|
8
|
-
gui: DotrainOrderGui;
|
|
9
8
|
};
|
|
10
9
|
events: {
|
|
11
10
|
[evt: string]: CustomEvent<any>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DotrainOrderGui } from '@rainlanguage/orderbook';
|
|
2
|
+
import type { DeploymentArgs } from '../../types/transaction';
|
|
3
|
+
export declare enum AddOrderErrors {
|
|
4
|
+
ADD_ORDER_FAILED = "Failed to add order",
|
|
5
|
+
MISSING_GUI = "Order GUI is required",
|
|
6
|
+
MISSING_CONFIG = "Wagmi config is required",
|
|
7
|
+
NO_ACCOUNT_CONNECTED = "No wallet address found",
|
|
8
|
+
ERROR_GETTING_ARGS = "Error getting deployment transaction args",
|
|
9
|
+
ERROR_GETTING_NETWORK_KEY = "Error getting network key"
|
|
10
|
+
}
|
|
11
|
+
export declare function handleDeployment(gui: DotrainOrderGui, account: string | null, subgraphUrl?: string): Promise<DeploymentArgs>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export var AddOrderErrors;
|
|
2
|
+
(function (AddOrderErrors) {
|
|
3
|
+
AddOrderErrors["ADD_ORDER_FAILED"] = "Failed to add order";
|
|
4
|
+
AddOrderErrors["MISSING_GUI"] = "Order GUI is required";
|
|
5
|
+
AddOrderErrors["MISSING_CONFIG"] = "Wagmi config is required";
|
|
6
|
+
AddOrderErrors["NO_ACCOUNT_CONNECTED"] = "No wallet address found";
|
|
7
|
+
AddOrderErrors["ERROR_GETTING_ARGS"] = "Error getting deployment transaction args";
|
|
8
|
+
AddOrderErrors["ERROR_GETTING_NETWORK_KEY"] = "Error getting network key";
|
|
9
|
+
})(AddOrderErrors || (AddOrderErrors = {}));
|
|
10
|
+
export async function handleDeployment(gui, account, subgraphUrl) {
|
|
11
|
+
const networkKeyResult = gui.getNetworkKey();
|
|
12
|
+
if (networkKeyResult.error) {
|
|
13
|
+
throw new Error(AddOrderErrors.ERROR_GETTING_NETWORK_KEY);
|
|
14
|
+
}
|
|
15
|
+
const network = networkKeyResult.value;
|
|
16
|
+
if (!account) {
|
|
17
|
+
throw new Error(AddOrderErrors.NO_ACCOUNT_CONNECTED);
|
|
18
|
+
}
|
|
19
|
+
const result = await gui.getDeploymentTransactionArgs(account);
|
|
20
|
+
if (result.error) {
|
|
21
|
+
throw new Error(result.error.msg);
|
|
22
|
+
}
|
|
23
|
+
const { approvals, deploymentCalldata, orderbookAddress, chainId } = result.value;
|
|
24
|
+
return {
|
|
25
|
+
approvals,
|
|
26
|
+
deploymentCalldata,
|
|
27
|
+
// Cast to Hex, since js_api returns a string
|
|
28
|
+
orderbookAddress: orderbookAddress,
|
|
29
|
+
chainId,
|
|
30
|
+
network,
|
|
31
|
+
subgraphUrl
|
|
32
|
+
};
|
|
33
|
+
}
|
|
@@ -10,18 +10,22 @@ import ButtonVaultLink from "../ButtonVaultLink.svelte";
|
|
|
10
10
|
import OrderVaultsVolTable from "../tables/OrderVaultsVolTable.svelte";
|
|
11
11
|
import { QKEY_ORDER } from "../../queries/keys";
|
|
12
12
|
import CodeMirrorRainlang from "../CodeMirrorRainlang.svelte";
|
|
13
|
-
import { getOrderByHash } from "@rainlanguage/orderbook/js_api";
|
|
14
13
|
import { createQuery, useQueryClient } from "@tanstack/svelte-query";
|
|
15
14
|
import { Button, TabItem, Tabs, Tooltip } from "flowbite-svelte";
|
|
16
15
|
import { onDestroy } from "svelte";
|
|
17
16
|
import OrderApy from "../tables/OrderAPY.svelte";
|
|
18
17
|
import { page } from "$app/stores";
|
|
19
|
-
import DepositOrWithdrawButtons from "./DepositOrWithdrawButtons.svelte";
|
|
20
18
|
import Refresh from "../icon/Refresh.svelte";
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
import { invalidateTanstackQueries } from "../../queries/queryClient";
|
|
20
|
+
import {
|
|
21
|
+
ArrowDownToBracketOutline,
|
|
22
|
+
ArrowUpFromBracketOutline,
|
|
23
|
+
InfoCircleOutline
|
|
24
|
+
} from "flowbite-svelte-icons";
|
|
25
|
+
import { useAccount } from "../../providers/wallet/useAccount";
|
|
26
|
+
import {
|
|
27
|
+
getOrderByHash
|
|
28
|
+
} from "@rainlanguage/orderbook";
|
|
25
29
|
export let handleQuoteDebugModal = void 0;
|
|
26
30
|
export const handleDebugTradeModal = void 0;
|
|
27
31
|
export let colorTheme;
|
|
@@ -31,12 +35,13 @@ export let orderbookAddress;
|
|
|
31
35
|
export let orderHash;
|
|
32
36
|
export let rpcUrl;
|
|
33
37
|
export let subgraphUrl;
|
|
34
|
-
export let
|
|
35
|
-
export let
|
|
36
|
-
export let
|
|
38
|
+
export let onRemove;
|
|
39
|
+
export let onDeposit;
|
|
40
|
+
export let onWithdraw;
|
|
37
41
|
let codeMirrorDisabled = true;
|
|
38
42
|
let codeMirrorStyles = {};
|
|
39
43
|
const queryClient = useQueryClient();
|
|
44
|
+
const { matchesAccount } = useAccount();
|
|
40
45
|
$: orderDetailQuery = createQuery({
|
|
41
46
|
queryKey: [orderHash, QKEY_ORDER + orderHash],
|
|
42
47
|
queryFn: () => {
|
|
@@ -45,7 +50,7 @@ $: orderDetailQuery = createQuery({
|
|
|
45
50
|
enabled: !!subgraphUrl
|
|
46
51
|
});
|
|
47
52
|
const interval = setInterval(async () => {
|
|
48
|
-
await
|
|
53
|
+
await invalidateTanstackQueries(queryClient, [orderHash]);
|
|
49
54
|
}, 1e4);
|
|
50
55
|
onDestroy(() => {
|
|
51
56
|
clearInterval(interval);
|
|
@@ -63,33 +68,23 @@ $: subgraphName = $page.url.pathname.split("/")[2]?.split("-")[0];
|
|
|
63
68
|
<span class="font-light">Order</span>
|
|
64
69
|
<Hash shorten value={data.order.orderHash} />
|
|
65
70
|
</div>
|
|
66
|
-
|
|
67
71
|
<BadgeActive active={data.order.active} large />
|
|
68
72
|
</div>
|
|
69
73
|
|
|
70
74
|
<div class="flex items-center gap-2">
|
|
71
|
-
{#if data
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
order: data.order,
|
|
80
|
-
onRemove: $orderDetailQuery.refetch,
|
|
81
|
-
chainId,
|
|
82
|
-
orderbookAddress,
|
|
83
|
-
subgraphUrl
|
|
84
|
-
}
|
|
85
|
-
})}
|
|
86
|
-
disabled={!handleOrderRemoveModal}
|
|
87
|
-
>
|
|
88
|
-
Remove
|
|
89
|
-
</Button>
|
|
75
|
+
{#if matchesAccount(data.order.owner)}
|
|
76
|
+
{#if data.order.active}
|
|
77
|
+
<Button
|
|
78
|
+
on:click={() => onRemove(data.order)}
|
|
79
|
+
data-testid="remove-button"
|
|
80
|
+
aria-label="Remove order">Remove</Button
|
|
81
|
+
>
|
|
82
|
+
{/if}
|
|
90
83
|
{/if}
|
|
84
|
+
|
|
91
85
|
<Refresh
|
|
92
|
-
|
|
86
|
+
testId="top-refresh"
|
|
87
|
+
on:click={() => invalidateTanstackQueries(queryClient, [orderHash])}
|
|
93
88
|
spin={$orderDetailQuery.isLoading || $orderDetailQuery.isFetching}
|
|
94
89
|
/>
|
|
95
90
|
</div>
|
|
@@ -118,7 +113,7 @@ $: subgraphName = $page.url.pathname.split("/")[2]?.split("-")[0];
|
|
|
118
113
|
</svelte:fragment>
|
|
119
114
|
</CardProperty>
|
|
120
115
|
|
|
121
|
-
{#each [{ key: '
|
|
116
|
+
{#each [{ key: 'Output vaults', type: 'outputs' }, { key: 'Input vaults', type: 'inputs' }, { key: 'Input & output vaults', type: 'inputs_outputs' }] as { key, type }}
|
|
122
117
|
{#if data.vaults.get(type)?.length !== 0}
|
|
123
118
|
<CardProperty>
|
|
124
119
|
<svelte:fragment slot="key"
|
|
@@ -135,15 +130,25 @@ $: subgraphName = $page.url.pathname.split("/")[2]?.split("-")[0];
|
|
|
135
130
|
{#each data.vaults.get(type) || [] as vault}
|
|
136
131
|
<ButtonVaultLink tokenVault={vault} {subgraphName}>
|
|
137
132
|
<svelte:fragment slot="buttons">
|
|
138
|
-
{#if
|
|
139
|
-
<
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
133
|
+
{#if matchesAccount(vault.owner)}
|
|
134
|
+
<div class="flex gap-1">
|
|
135
|
+
<Button
|
|
136
|
+
color="light"
|
|
137
|
+
size="xs"
|
|
138
|
+
data-testid="deposit-button"
|
|
139
|
+
on:click={() => onDeposit(vault)}
|
|
140
|
+
>
|
|
141
|
+
<ArrowDownToBracketOutline size="xs" />
|
|
142
|
+
</Button>
|
|
143
|
+
<Button
|
|
144
|
+
color="light"
|
|
145
|
+
size="xs"
|
|
146
|
+
data-testid="withdraw-button"
|
|
147
|
+
on:click={() => onWithdraw(vault)}
|
|
148
|
+
>
|
|
149
|
+
<ArrowUpFromBracketOutline size="xs" />
|
|
150
|
+
</Button>
|
|
151
|
+
</div>
|
|
147
152
|
{/if}
|
|
148
153
|
</svelte:fragment>
|
|
149
154
|
</ButtonVaultLink>
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
|
-
import type { Writable } from 'svelte/store';
|
|
3
|
-
import type { Config } from 'wagmi';
|
|
4
2
|
import type { Hex } from 'viem';
|
|
5
|
-
import type {
|
|
3
|
+
import type { QuoteDebugModalHandler, DebugTradeModalHandler } from '../../types/modal';
|
|
4
|
+
import { type SgOrder, type SgVault } from '@rainlanguage/orderbook';
|
|
6
5
|
declare const __propDef: {
|
|
7
6
|
props: {
|
|
8
|
-
handleDepositOrWithdrawModal?: ((props: DepositOrWithdrawModalProps) => void) | undefined;
|
|
9
|
-
handleOrderRemoveModal?: ((props: OrderRemoveModalProps) => void) | undefined;
|
|
10
7
|
handleQuoteDebugModal?: QuoteDebugModalHandler | undefined;
|
|
11
8
|
handleDebugTradeModal?: DebugTradeModalHandler | undefined;
|
|
12
9
|
colorTheme: any;
|
|
@@ -16,9 +13,15 @@ declare const __propDef: {
|
|
|
16
13
|
orderHash: string;
|
|
17
14
|
rpcUrl: string;
|
|
18
15
|
subgraphUrl: string;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
/** Callback function when remove action is triggered for an order
|
|
17
|
+
* @param order The order to remove
|
|
18
|
+
*/ onRemove: (order: SgOrder) => void;
|
|
19
|
+
/** Callback function when deposit action is triggered for a vault
|
|
20
|
+
* @param vault The vault to deposit into
|
|
21
|
+
*/ onDeposit: (vault: SgVault) => void;
|
|
22
|
+
/** Callback function when withdraw action is triggered for a vault
|
|
23
|
+
* @param vault The vault to withdraw from
|
|
24
|
+
*/ onWithdraw: (vault: SgVault) => void;
|
|
22
25
|
};
|
|
23
26
|
events: {
|
|
24
27
|
[evt: string]: CustomEvent<any>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
<script generics="T">import {
|
|
1
|
+
<script generics="T">import { invalidateTanstackQueries } from "../../queries/queryClient";
|
|
2
2
|
import Refresh from "../icon/Refresh.svelte";
|
|
3
3
|
import EditableSpan from "../EditableSpan.svelte";
|
|
4
|
-
import { getOrderQuote } from "@rainlanguage/orderbook
|
|
4
|
+
import { getOrderQuote } from "@rainlanguage/orderbook";
|
|
5
5
|
import { QKEY_ORDER_QUOTE } from "../../queries/keys";
|
|
6
6
|
import { formatUnits, hexToNumber, isHex } from "viem";
|
|
7
7
|
import { createQuery, useQueryClient } from "@tanstack/svelte-query";
|
|
@@ -11,10 +11,10 @@ import {
|
|
|
11
11
|
TableBodyCell,
|
|
12
12
|
TableBodyRow,
|
|
13
13
|
TableHead,
|
|
14
|
-
TableHeadCell
|
|
15
|
-
Tooltip
|
|
14
|
+
TableHeadCell
|
|
16
15
|
} from "flowbite-svelte";
|
|
17
16
|
import { BugOutline, PauseSolid, PlaySolid } from "flowbite-svelte-icons";
|
|
17
|
+
import Tooltip from "../Tooltip.svelte";
|
|
18
18
|
export let id;
|
|
19
19
|
export let order;
|
|
20
20
|
export let rpcUrl;
|
|
@@ -23,7 +23,7 @@ export let handleQuoteDebugModal = void 0;
|
|
|
23
23
|
let enabled = true;
|
|
24
24
|
const queryClient = useQueryClient();
|
|
25
25
|
const refreshQuotes = async () => {
|
|
26
|
-
|
|
26
|
+
invalidateTanstackQueries(queryClient, [id, QKEY_ORDER_QUOTE + id]);
|
|
27
27
|
};
|
|
28
28
|
$: orderQuoteQuery = createQuery({
|
|
29
29
|
queryKey: [id, QKEY_ORDER_QUOTE + id],
|
|
@@ -36,7 +36,7 @@ $: orderModalArg = order;
|
|
|
36
36
|
|
|
37
37
|
<div class="mt-4">
|
|
38
38
|
<div class="mb-4 flex items-center justify-between">
|
|
39
|
-
<h2 class="text-lg font-semibold">Order
|
|
39
|
+
<h2 class="text-lg font-semibold">Order quotes</h2>
|
|
40
40
|
<div class="flex items-center gap-x-1">
|
|
41
41
|
{#if $orderQuoteQuery.data && $orderQuoteQuery.data.length > 0 && isHex($orderQuoteQuery.data[0].blockNumber)}
|
|
42
42
|
<EditableSpan
|
|
@@ -1,37 +1,32 @@
|
|
|
1
|
-
<script>import {
|
|
2
|
-
import { bigintStringToHex } from "../../utils/hex";
|
|
1
|
+
<script>import { bigintStringToHex } from "../../utils/hex";
|
|
3
2
|
import Hash, { HashType } from "../Hash.svelte";
|
|
4
3
|
import VaultBalanceChangesTable from "../tables/VaultBalanceChangesTable.svelte";
|
|
5
4
|
import VaultBalanceChart from "../charts/VaultBalanceChart.svelte";
|
|
6
5
|
import TanstackPageContentDetail from "./TanstackPageContentDetail.svelte";
|
|
7
6
|
import CardProperty from "../CardProperty.svelte";
|
|
8
7
|
import { QKEY_VAULT } from "../../queries/keys";
|
|
9
|
-
import { getVault } from "@rainlanguage/orderbook
|
|
8
|
+
import { getVault } from "@rainlanguage/orderbook";
|
|
10
9
|
import { formatUnits } from "viem";
|
|
11
10
|
import { createQuery } from "@tanstack/svelte-query";
|
|
12
11
|
import { onDestroy } from "svelte";
|
|
13
12
|
import { useQueryClient } from "@tanstack/svelte-query";
|
|
14
|
-
import { ArrowDownOutline, ArrowUpOutline } from "flowbite-svelte-icons";
|
|
15
13
|
import OrderOrVaultHash from "../OrderOrVaultHash.svelte";
|
|
16
|
-
import DepositOrWithdrawButtons from "./DepositOrWithdrawButtons.svelte";
|
|
17
14
|
import Refresh from "../icon/Refresh.svelte";
|
|
18
|
-
import {
|
|
19
|
-
|
|
15
|
+
import { invalidateTanstackQueries } from "../../queries/queryClient";
|
|
16
|
+
import { useAccount } from "../../providers/wallet/useAccount";
|
|
17
|
+
import { Button } from "flowbite-svelte";
|
|
18
|
+
import { ArrowDownToBracketOutline, ArrowUpFromBracketOutline } from "flowbite-svelte-icons";
|
|
20
19
|
export let id;
|
|
21
20
|
export let network;
|
|
22
|
-
export let walletAddressMatchesOrBlank = void 0;
|
|
23
|
-
export let handleDepositModal = void 0;
|
|
24
|
-
export let handleWithdrawModal = void 0;
|
|
25
21
|
export let lightweightChartsTheme = void 0;
|
|
26
22
|
export let activeNetworkRef;
|
|
27
23
|
export let activeOrderbookRef;
|
|
28
24
|
export let settings;
|
|
29
|
-
export let
|
|
30
|
-
export let
|
|
25
|
+
export let onDeposit;
|
|
26
|
+
export let onWithdraw;
|
|
31
27
|
const subgraphUrl = $settings?.subgraphs?.[network] || "";
|
|
32
|
-
const chainId = $settings?.networks?.[network]?.["chain-id"] || 0;
|
|
33
|
-
const rpcUrl = $settings?.networks?.[network]?.["rpc"] || "";
|
|
34
28
|
const queryClient = useQueryClient();
|
|
29
|
+
const { matchesAccount } = useAccount();
|
|
35
30
|
$: vaultDetailQuery = createQuery({
|
|
36
31
|
queryKey: [id, QKEY_VAULT + id],
|
|
37
32
|
queryFn: () => {
|
|
@@ -44,11 +39,7 @@ const updateActiveNetworkAndOrderbook = (subgraphName) => {
|
|
|
44
39
|
activeOrderbookRef.set(subgraphName);
|
|
45
40
|
};
|
|
46
41
|
const interval = setInterval(async () => {
|
|
47
|
-
|
|
48
|
-
queryKey: [id],
|
|
49
|
-
refetchType: "active",
|
|
50
|
-
exact: false
|
|
51
|
-
});
|
|
42
|
+
invalidateTanstackQueries(queryClient, [id, QKEY_VAULT + id]);
|
|
52
43
|
}, 5e3);
|
|
53
44
|
onDestroy(() => {
|
|
54
45
|
clearInterval(interval);
|
|
@@ -64,32 +55,30 @@ onDestroy(() => {
|
|
|
64
55
|
{data.token.name}
|
|
65
56
|
</div>
|
|
66
57
|
<div class="flex items-center gap-2">
|
|
67
|
-
{#if
|
|
68
|
-
<DepositOrWithdrawButtons
|
|
69
|
-
vault={data}
|
|
70
|
-
{chainId}
|
|
71
|
-
{rpcUrl}
|
|
72
|
-
query={vaultDetailQuery}
|
|
73
|
-
{handleDepositOrWithdrawModal}
|
|
74
|
-
{subgraphUrl}
|
|
75
|
-
/>
|
|
76
|
-
{:else if handleDepositModal && handleWithdrawModal && $walletAddressMatchesOrBlank?.(data.owner)}
|
|
58
|
+
{#if matchesAccount(data.owner)}
|
|
77
59
|
<Button
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
60
|
+
color="light"
|
|
61
|
+
size="xs"
|
|
62
|
+
data-testid="deposit-button"
|
|
63
|
+
aria-label="Deposit to vault"
|
|
64
|
+
on:click={() => onDeposit(data)}
|
|
82
65
|
>
|
|
66
|
+
<ArrowDownToBracketOutline size="xs" />
|
|
67
|
+
</Button>
|
|
83
68
|
<Button
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
69
|
+
color="light"
|
|
70
|
+
size="xs"
|
|
71
|
+
data-testid="withdraw-button"
|
|
72
|
+
aria-label="Withdraw from vault"
|
|
73
|
+
on:click={() => onWithdraw(data)}
|
|
88
74
|
>
|
|
75
|
+
<ArrowUpFromBracketOutline size="xs" />
|
|
76
|
+
</Button>
|
|
89
77
|
{/if}
|
|
90
78
|
|
|
91
79
|
<Refresh
|
|
92
|
-
|
|
80
|
+
testId="top-refresh"
|
|
81
|
+
on:click={() => invalidateTanstackQueries(queryClient, [id, QKEY_VAULT + id])}
|
|
93
82
|
spin={$vaultDetailQuery.isLoading || $vaultDetailQuery.isFetching}
|
|
94
83
|
/>
|
|
95
84
|
</div>
|
|
@@ -108,7 +97,7 @@ onDestroy(() => {
|
|
|
108
97
|
</CardProperty>
|
|
109
98
|
|
|
110
99
|
<CardProperty data-testid="vaultDetailOwnerAddress">
|
|
111
|
-
<svelte:fragment slot="key">Owner
|
|
100
|
+
<svelte:fragment slot="key">Owner address</svelte:fragment>
|
|
112
101
|
<svelte:fragment slot="value">
|
|
113
102
|
<Hash type={HashType.Wallet} value={data.owner} />
|
|
114
103
|
</svelte:fragment>
|
|
@@ -152,7 +141,7 @@ onDestroy(() => {
|
|
|
152
141
|
<CardProperty>
|
|
153
142
|
<svelte:fragment slot="key">Orders as output</svelte:fragment>
|
|
154
143
|
<svelte:fragment slot="value">
|
|
155
|
-
<p data-testid="
|
|
144
|
+
<p data-testid="vaultDetailOrdersAsOutput" class="flex flex-wrap justify-start">
|
|
156
145
|
{#if data.ordersAsOutput && data.ordersAsOutput.length > 0}
|
|
157
146
|
{#each data.ordersAsOutput as order}
|
|
158
147
|
<OrderOrVaultHash
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
|
+
import { type SgVault } from '@rainlanguage/orderbook';
|
|
2
3
|
import type { ChartTheme } from '../../utils/lightweightChartsThemes';
|
|
3
|
-
import type { Readable
|
|
4
|
-
import type { SgVault } from '@rainlanguage/orderbook/js_api';
|
|
4
|
+
import type { Readable } from 'svelte/store';
|
|
5
5
|
import type { AppStoresInterface } from '../../types/appStores';
|
|
6
|
-
import type { Config } from 'wagmi';
|
|
7
|
-
import type { DepositOrWithdrawModalProps } from '../../types/modal';
|
|
8
6
|
declare const __propDef: {
|
|
9
7
|
props: {
|
|
10
|
-
handleDepositOrWithdrawModal?: ((args: DepositOrWithdrawModalProps) => void) | undefined;
|
|
11
8
|
id: string;
|
|
12
9
|
network: string;
|
|
13
|
-
walletAddressMatchesOrBlank?: Readable<(otherAddress: string) => boolean> | undefined;
|
|
14
|
-
handleDepositModal?: ((vault: SgVault, onDeposit: () => void) => void) | undefined;
|
|
15
|
-
handleWithdrawModal?: ((vault: SgVault, onWithdraw: () => void) => void) | undefined;
|
|
16
10
|
lightweightChartsTheme?: Readable<ChartTheme> | undefined;
|
|
17
11
|
activeNetworkRef: AppStoresInterface["activeNetworkRef"];
|
|
18
12
|
activeOrderbookRef: AppStoresInterface["activeOrderbookRef"];
|
|
19
13
|
settings: any;
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Required callback function when deposit action is triggered for a vault
|
|
16
|
+
* @param vault The vault to deposit into
|
|
17
|
+
*/ onDeposit: (vault: SgVault) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Required callback function when withdraw action is triggered for a vault
|
|
20
|
+
* @param vault The vault to withdraw from
|
|
21
|
+
*/ onWithdraw: (vault: SgVault) => void;
|
|
22
22
|
};
|
|
23
23
|
events: {
|
|
24
24
|
[evt: string]: CustomEvent<any>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
2
|
import type { Writable } from 'svelte/store';
|
|
3
|
-
import type { ConfigSource } from '@rainlanguage/orderbook
|
|
3
|
+
import type { ConfigSource } from '@rainlanguage/orderbook';
|
|
4
4
|
declare const __propDef: {
|
|
5
5
|
props: {
|
|
6
6
|
settings: ConfigSource;
|
|
@@ -12,10 +12,11 @@ export let size = ctx.size || "md";
|
|
|
12
12
|
export let role = ctx.role || "img";
|
|
13
13
|
export let ariaLabel = "refresh";
|
|
14
14
|
export let spin = false;
|
|
15
|
+
export let testId = "refresh-button";
|
|
15
16
|
</script>
|
|
16
17
|
|
|
17
18
|
<svg
|
|
18
|
-
data-testid=
|
|
19
|
+
data-testid={testId}
|
|
19
20
|
xmlns="http://www.w3.org/2000/svg"
|
|
20
21
|
fill="none"
|
|
21
22
|
{...$$restProps}
|
|
@@ -7,12 +7,12 @@ const loadRegistryUrl = () => {
|
|
|
7
7
|
};
|
|
8
8
|
</script>
|
|
9
9
|
|
|
10
|
-
<div class="flex w-full items-start gap-4">
|
|
10
|
+
<div class="mb-4 flex w-full items-start gap-4">
|
|
11
11
|
<Input
|
|
12
12
|
id="strategy-url"
|
|
13
13
|
type="url"
|
|
14
14
|
placeholder="Enter URL to raw strategy registry file"
|
|
15
15
|
bind:value={newRegistryUrl}
|
|
16
16
|
/>
|
|
17
|
-
<Button class="text-nowrap" on:click={loadRegistryUrl}>Load
|
|
17
|
+
<Button class="text-nowrap" on:click={loadRegistryUrl}>Load registry URL</Button>
|
|
18
18
|
</div>
|
|
@@ -35,10 +35,10 @@ function decimalsComplete({ detail }) {
|
|
|
35
35
|
</div>
|
|
36
36
|
|
|
37
37
|
{#if !isAddressValid && address.length > 0}
|
|
38
|
-
<Helper class="mt-2 text-sm" color="red">Invalid
|
|
38
|
+
<Helper class="mt-2 text-sm" color="red">Invalid address</Helper>
|
|
39
39
|
{/if}
|
|
40
40
|
|
|
41
|
-
<Helper class="mt-2 text-sm">Token
|
|
41
|
+
<Helper class="mt-2 text-sm">Token address</Helper>
|
|
42
42
|
</div>
|
|
43
43
|
<div class="w-32 grow-0 break-all" data-testid="token-decimals-input">
|
|
44
44
|
<input
|
|
@@ -39,7 +39,7 @@ function fillMaxValue() {
|
|
|
39
39
|
/>
|
|
40
40
|
|
|
41
41
|
{#if maxValue}
|
|
42
|
-
<div class="absolute right-
|
|
42
|
+
<div class="absolute right-2 flex h-10 flex-col justify-center">
|
|
43
43
|
<Button color="blue" class="px-2 py-1" size="xs" pill on:click={fillMaxValue}>MAX</Button>
|
|
44
44
|
</div>
|
|
45
45
|
{/if}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script>import { createInfiniteQuery } from "@tanstack/svelte-query";
|
|
2
2
|
import TanstackAppTable from "../TanstackAppTable.svelte";
|
|
3
3
|
import { QKEY_ORDER_APY } from "../../queries/keys";
|
|
4
|
-
import { getOrderPerformance } from "@rainlanguage/orderbook
|
|
4
|
+
import { getOrderPerformance } from "@rainlanguage/orderbook";
|
|
5
5
|
import { TableBodyCell, TableHeadCell } from "flowbite-svelte";
|
|
6
6
|
import ApyTimeFilters from "../charts/APYTimeFilters.svelte";
|
|
7
7
|
import { bigintStringToPercentage } from "../../utils/number";
|