@@ -1,6 +1,6 @@
 | 
			
		||||
import toast from "react-hot-toast";
 | 
			
		||||
import { useSnapshot } from "valtio";
 | 
			
		||||
import { ArrowSquareOut, Copy, Wallet, X } from "phosphor-react";
 | 
			
		||||
import { ArrowSquareOut, Copy, Trash, Wallet, X } from "phosphor-react";
 | 
			
		||||
import React, { useEffect, useState, FC } from "react";
 | 
			
		||||
import Dinero from "dinero.js";
 | 
			
		||||
 | 
			
		||||
@@ -30,6 +30,7 @@ const labelStyle = css({
 | 
			
		||||
import transactionsData from "../content/transactions.json";
 | 
			
		||||
import { SetHookDialog } from "./SetHookDialog";
 | 
			
		||||
import { addFunds } from "../state/actions/addFaucetAccount";
 | 
			
		||||
import { deleteHook } from "../state/actions/deployHook";
 | 
			
		||||
 | 
			
		||||
export const AccountDialog = ({
 | 
			
		||||
  activeAccountAddress,
 | 
			
		||||
@@ -90,6 +91,22 @@ export const AccountDialog = ({
 | 
			
		||||
          }}
 | 
			
		||||
        >
 | 
			
		||||
          <Wallet size="15px" /> {activeAccount?.name}
 | 
			
		||||
          <DialogClose asChild>
 | 
			
		||||
            <Button
 | 
			
		||||
              size="xs"
 | 
			
		||||
              outline
 | 
			
		||||
              css={{ ml: "auto", mr: "$9" }}
 | 
			
		||||
              tabIndex={-1}
 | 
			
		||||
              onClick={() => {
 | 
			
		||||
                const index = state.accounts.findIndex(
 | 
			
		||||
                  (acc) => acc.address === activeAccount?.address
 | 
			
		||||
                );
 | 
			
		||||
                state.accounts.splice(index, 1);
 | 
			
		||||
              }}
 | 
			
		||||
            >
 | 
			
		||||
              Delete Account <Trash size="15px" />
 | 
			
		||||
            </Button>
 | 
			
		||||
          </DialogClose>
 | 
			
		||||
        </DialogTitle>
 | 
			
		||||
        <DialogDescription as="div" css={{ fontFamily: "$monospace" }}>
 | 
			
		||||
          <Stack css={{ display: "flex", flexDirection: "column", gap: "$3" }}>
 | 
			
		||||
@@ -222,10 +239,25 @@ export const AccountDialog = ({
 | 
			
		||||
                    fontFamily: "$monospace",
 | 
			
		||||
                  }}
 | 
			
		||||
                >
 | 
			
		||||
                  {activeAccount &&
 | 
			
		||||
                    activeAccount.hooks.map((i) => truncate(i, 6)).join(",")}
 | 
			
		||||
                  {activeAccount && activeAccount.hooks.length > 0
 | 
			
		||||
                    ? activeAccount.hooks.map((i) => truncate(i, 12)).join(",")
 | 
			
		||||
                    : "–"}
 | 
			
		||||
                </Text>
 | 
			
		||||
              </Flex>
 | 
			
		||||
              {activeAccount && activeAccount?.hooks?.length > 0 && (
 | 
			
		||||
                <Flex css={{ marginLeft: "auto" }}>
 | 
			
		||||
                  <Button
 | 
			
		||||
                    size="xs"
 | 
			
		||||
                    outline
 | 
			
		||||
                    css={{ mt: "$3", mr: "$1", ml: "auto" }}
 | 
			
		||||
                    onClick={() => {
 | 
			
		||||
                      deleteHook(activeAccount);
 | 
			
		||||
                    }}
 | 
			
		||||
                  >
 | 
			
		||||
                    Delete Hook <Trash size="15px" />
 | 
			
		||||
                  </Button>
 | 
			
		||||
                </Flex>
 | 
			
		||||
              )}
 | 
			
		||||
            </Flex>
 | 
			
		||||
          </Stack>
 | 
			
		||||
        </DialogDescription>
 | 
			
		||||
 
 | 
			
		||||
@@ -50,8 +50,9 @@ export const addFaucetAccount = async (showToast: boolean = false) => {
 | 
			
		||||
      if (showToast) {
 | 
			
		||||
        toast.success("New account created", { id: toastId });
 | 
			
		||||
      }
 | 
			
		||||
      const currNames = state.accounts.map(acc => acc.name);
 | 
			
		||||
      state.accounts.push({
 | 
			
		||||
        name: names[state.accounts.length],
 | 
			
		||||
        name: names.filter(name => !currNames.includes(name))[0],
 | 
			
		||||
        xrp: (json.xrp || 0 * 1000000).toString(),
 | 
			
		||||
        address: json.address,
 | 
			
		||||
        secret: json.secret,
 | 
			
		||||
@@ -76,7 +77,7 @@ export const addFaucetAccount = async (showToast: boolean = false) => {
 | 
			
		||||
})();
 | 
			
		||||
 | 
			
		||||
export const addFunds = async (address: string) => {
 | 
			
		||||
  const toastId = toast.loading("Creating account");
 | 
			
		||||
  const toastId = toast.loading("Requesting funds");
 | 
			
		||||
  const res = await fetch(`${window.location.origin}/api/faucet?account=${address}`, {
 | 
			
		||||
    method: "POST",
 | 
			
		||||
  });
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
import { derive, sign } from "xrpl-accountlib";
 | 
			
		||||
import toast from "react-hot-toast";
 | 
			
		||||
 | 
			
		||||
import state, { IAccount } from "../index";
 | 
			
		||||
import calculateHookOn, { TTS } from "../../utils/hookOnCalculator";
 | 
			
		||||
@@ -138,4 +139,73 @@ export const deployHook = async (account: IAccount & { name?: string }, data: Se
 | 
			
		||||
    }
 | 
			
		||||
    return submitRes;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const deleteHook = async (account: IAccount & { name?: string }) => {
 | 
			
		||||
  if (!state.client) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (typeof window !== "undefined") {
 | 
			
		||||
    const tx = {
 | 
			
		||||
      Account: account.address,
 | 
			
		||||
      TransactionType: "SetHook",
 | 
			
		||||
      Sequence: account.sequence,
 | 
			
		||||
      Fee: "100000",
 | 
			
		||||
      Hooks: [
 | 
			
		||||
        {
 | 
			
		||||
          Hook: {
 | 
			
		||||
            CreateCode: "",
 | 
			
		||||
            Flags: 1,
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const keypair = derive.familySeed(account.secret);
 | 
			
		||||
    const { signedTransaction } = sign(tx, keypair);
 | 
			
		||||
    const currentAccount = state.accounts.find(
 | 
			
		||||
      (acc) => acc.address === account.address
 | 
			
		||||
    );
 | 
			
		||||
    if (currentAccount) {
 | 
			
		||||
      currentAccount.isLoading = true;
 | 
			
		||||
    }
 | 
			
		||||
    let submitRes;
 | 
			
		||||
    const toastId = toast.loading("Deleting hook...");
 | 
			
		||||
    try {
 | 
			
		||||
      submitRes = await state.client.send({
 | 
			
		||||
        command: "submit",
 | 
			
		||||
        tx_blob: signedTransaction,
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      if (submitRes.engine_result === "tesSUCCESS") {
 | 
			
		||||
        toast.success('Hook deleted successfully ✅', { id: toastId })
 | 
			
		||||
        state.deployLogs.push({
 | 
			
		||||
          type: "success",
 | 
			
		||||
          message: "Hook deleted successfully ✅",
 | 
			
		||||
        });
 | 
			
		||||
        state.deployLogs.push({
 | 
			
		||||
          type: "success",
 | 
			
		||||
          message: `[${submitRes.engine_result}] ${submitRes.engine_result_message} Validated ledger index: ${submitRes.validated_ledger_index}`,
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        toast.error(`${submitRes.engine_result_message || submitRes.error_exception}`, { id: toastId })
 | 
			
		||||
        state.deployLogs.push({
 | 
			
		||||
          type: "error",
 | 
			
		||||
          message: `[${submitRes.engine_result || submitRes.error}] ${submitRes.engine_result_message || submitRes.error_exception}`,
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      console.log(err);
 | 
			
		||||
      toast.error('Error occured while deleting hoook', { id: toastId })
 | 
			
		||||
      state.deployLogs.push({
 | 
			
		||||
        type: "error",
 | 
			
		||||
        message: "Error occured while deleting hook",
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
    if (currentAccount) {
 | 
			
		||||
      currentAccount.isLoading = false;
 | 
			
		||||
    }
 | 
			
		||||
    return submitRes;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
@@ -38,10 +38,4 @@ const calculateHookOn = (arr: (keyof TTS)[]) => {
 | 
			
		||||
  return start.substring(2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (typeof window !== 'undefined') {
 | 
			
		||||
  // @ts-ignore
 | 
			
		||||
 | 
			
		||||
  window.kissa = calculateHookOn
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default calculateHookOn
 | 
			
		||||
		Reference in New Issue
	
	Block a user