-
- }>
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
Contracts
+
+ Explore the contracts that match your search query.
+
+
+
+
+ {contracts.map((contract) => (
+
+ ))}
-
+
);
-};
-
-export default DashboardPage;
+}
diff --git a/ark-indexer-marketplace-admin/src/components/CollectionSearch.tsx b/ark-indexer-marketplace-admin/src/components/CollectionSearch.tsx
index 0dc4d009..861d1e35 100644
--- a/ark-indexer-marketplace-admin/src/components/CollectionSearch.tsx
+++ b/ark-indexer-marketplace-admin/src/components/CollectionSearch.tsx
@@ -5,8 +5,8 @@ import { useRouter } from "next/navigation";
import { Input } from "./ui/input";
-export default function CollectionSearch() {
- const [text, setText] = useState
("");
+export default function CollectionSearch(props: { search?: string }) {
+ const [text, setText] = useState(props.search ?? "");
const router = useRouter();
return (
@@ -21,7 +21,7 @@ export default function CollectionSearch() {
}
}}
type="search"
- placeholder="Search collection..."
+ placeholder="Type collection name..."
className="md:w-[100px] lg:w-[300px]"
value={text}
/>
diff --git a/ark-indexer-marketplace-admin/src/components/SearchContracts.tsx b/ark-indexer-marketplace-admin/src/components/SearchContracts.tsx
new file mode 100644
index 00000000..80ba443e
--- /dev/null
+++ b/ark-indexer-marketplace-admin/src/components/SearchContracts.tsx
@@ -0,0 +1,18 @@
+"use client";
+
+import ContractGridItem from "~/components/dashboard/ContractGridItem";
+import { api } from "~/trpc/react";
+
+export default function SearchContracts(props: { search: string }) {
+ const [contracts] = api.contract.searchContracts.useSuspenseQuery({
+ contractName: props.search,
+ });
+
+ return (
+
+ {contracts.map((contract) => (
+
+ ))}
+
+ );
+}
diff --git a/ark-indexer-marketplace-admin/src/components/dashboard/ContractGridItem.tsx b/ark-indexer-marketplace-admin/src/components/dashboard/ContractGridItem.tsx
new file mode 100644
index 00000000..a6feffba
--- /dev/null
+++ b/ark-indexer-marketplace-admin/src/components/dashboard/ContractGridItem.tsx
@@ -0,0 +1,56 @@
+import Link from "next/link";
+
+import type { Contract } from "~/types";
+
+interface ContractGridItemProps {
+ contract: Contract;
+}
+
+export default function ContractGridItem(props: ContractGridItemProps) {
+ const { contract } = props;
+ return (
+
+
+ {contract.contract_image ? (
+
+

+
+ ) : (
+
+ )}
+
+
+
+
+ {contract.contract_name}
+
+
+
+ {contract.is_spam && (
+
+ SPAM
+
+ )}
+
+ {contract.is_verified && (
+
+ VERIFIED
+
+ )}
+
+
+
+
+
+ );
+}
diff --git a/ark-indexer-marketplace-admin/src/components/dashboard/Header.tsx b/ark-indexer-marketplace-admin/src/components/dashboard/Header.tsx
index ad50513f..bdc529db 100644
--- a/ark-indexer-marketplace-admin/src/components/dashboard/Header.tsx
+++ b/ark-indexer-marketplace-admin/src/components/dashboard/Header.tsx
@@ -33,7 +33,6 @@ export default function DashboardHeader({ user }: DashboardHeaderProps) {
-
@@ -63,19 +62,6 @@ export default function DashboardHeader({ user }: DashboardHeaderProps) {