From b7159adcf712d4fa6cbe1c689f1548208efb247d Mon Sep 17 00:00:00 2001 From: gaowhen Date: Thu, 4 Jul 2024 13:52:08 +0800 Subject: [PATCH 1/5] products page --- explorer-ui/src/pages/index.tsx | 8 ++- explorer-ui/src/pages/products.tsx | 111 +++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 explorer-ui/src/pages/products.tsx diff --git a/explorer-ui/src/pages/index.tsx b/explorer-ui/src/pages/index.tsx index b72f139..e6540fc 100644 --- a/explorer-ui/src/pages/index.tsx +++ b/explorer-ui/src/pages/index.tsx @@ -1,4 +1,5 @@ import Head from "next/head"; +import Link from "next/link"; import { useQuery } from "@tanstack/react-query"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; @@ -47,9 +48,12 @@ export default function Home() { -
+ {programData.Program[0]?.products_count} -
+
diff --git a/explorer-ui/src/pages/products.tsx b/explorer-ui/src/pages/products.tsx new file mode 100644 index 0000000..f56f589 --- /dev/null +++ b/explorer-ui/src/pages/products.tsx @@ -0,0 +1,111 @@ +/* eslint-disable @typescript-eslint/no-floating-promises */ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import Head from "next/head"; +import Link from "next/link"; +import { useQuery } from "@tanstack/react-query"; +import { Link2 } from "lucide-react"; + +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; + +import { getProducts } from "@/queries"; + +const limit = 50; + +export default function Products() { + const page = 0; + + const { data } = useQuery({ + queryKey: ["products"], + queryFn: async () => getProducts(), + }); + + return ( + <> + + Products - Dephy Explorer + + + +
+
+ {data ? ( + + + + Products + + + {data.Product?.length} products + + + + + + + # + Symbol + Name + Mint Account + Url + SolanaFM + + + + {data.Product?.map((product, i) => ( + + + + {page * limit + i + 1} + + + {product.metadata?.symbol} + {product.metadata?.name} + {product.mint_account} + + {product.metadata?.uri ? ( + + + + ) : null} + + + + + + + + ))} + +
+
+
+ ) : null} +
+
+ + ); +} From 63664c6222a6dc71d76a911b0fb46abf9533058e Mon Sep 17 00:00:00 2001 From: gaowhen Date: Thu, 4 Jul 2024 14:14:59 +0800 Subject: [PATCH 2/5] ignore gql files --- explorer-ui/.eslintrc.cjs | 44 +++++++++++++++++----------------- explorer-ui/src/gql/graphql.ts | 15 ++++-------- 2 files changed, 27 insertions(+), 32 deletions(-) diff --git a/explorer-ui/.eslintrc.cjs b/explorer-ui/.eslintrc.cjs index a92fb0b..b28a493 100644 --- a/explorer-ui/.eslintrc.cjs +++ b/explorer-ui/.eslintrc.cjs @@ -1,42 +1,42 @@ /** @type {import("eslint").Linter.Config} */ const config = { - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": true + parser: "@typescript-eslint/parser", + parserOptions: { + project: true, }, - "plugins": [ - "@typescript-eslint" - ], - "extends": [ + plugins: ["@typescript-eslint"], + extends: [ "next/core-web-vitals", "plugin:@typescript-eslint/recommended-type-checked", - "plugin:@typescript-eslint/stylistic-type-checked" + "plugin:@typescript-eslint/stylistic-type-checked", ], - "rules": { + rules: { "@typescript-eslint/array-type": "off", "@typescript-eslint/consistent-type-definitions": "off", "@typescript-eslint/consistent-type-imports": [ "warn", { - "prefer": "type-imports", - "fixStyle": "inline-type-imports" - } + prefer: "type-imports", + fixStyle: "inline-type-imports", + }, ], "@typescript-eslint/no-unused-vars": [ "warn", { - "argsIgnorePattern": "^_" - } + argsIgnorePattern: "^_", + }, ], "@typescript-eslint/require-await": "off", "@typescript-eslint/no-misused-promises": [ "error", { - "checksVoidReturn": { - "attributes": false - } - } - ] - } -} -module.exports = config; \ No newline at end of file + checksVoidReturn: { + attributes: false, + }, + }, + ], + }, + ignorePatterns: ["./src/grp/*"], +}; + +module.exports = config; diff --git a/explorer-ui/src/gql/graphql.ts b/explorer-ui/src/gql/graphql.ts index d009631..07801b6 100644 --- a/explorer-ui/src/gql/graphql.ts +++ b/explorer-ui/src/gql/graphql.ts @@ -1,8 +1,3 @@ -/* eslint-disable @typescript-eslint/consistent-type-imports */ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/consistent-indexed-object-style */ -/* eslint-disable @typescript-eslint/ban-types */ - import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; export type Maybe = T | null; export type InputMaybe = Maybe; @@ -2131,8 +2126,8 @@ export type GetProgramsQueryVariables = Exact<{ [key: string]: never; }>; export type GetProgramsQuery = { __typename?: 'Query', Program?: Array<{ __typename?: 'Program_Type', pubkey: string, vendors_count: any, products_count: any, devices_count: any, authority: { __typename?: 'Admin_Type', pubkey: string } }> | null }; -export const GetProductsDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "query", "name": { "kind": "Name", "value": "getProducts" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "Product" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "mint_account" } }, { "kind": "Field", "name": { "kind": "Name", "value": "mint_authority" } }, { "kind": "Field", "name": { "kind": "Name", "value": "devices_count" } }, { "kind": "Field", "name": { "kind": "Name", "value": "metadata" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "name" } }, { "kind": "Field", "name": { "kind": "Name", "value": "symbol" } }, { "kind": "Field", "name": { "kind": "Name", "value": "uri" } }, { "kind": "Field", "name": { "kind": "Name", "value": "additional" } }] } }, { "kind": "Field", "name": { "kind": "Name", "value": "vendor" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "pubkey" } }] } }] } }] } }] } as unknown as DocumentNode; -export const GetProductDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "query", "name": { "kind": "Name", "value": "getProduct" }, "variableDefinitions": [{ "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "mint_account" } }, "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "String" } } }, { "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "limit" } }, "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "Int" } } }, { "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "offset" } }, "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "String" } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "Product" }, "arguments": [{ "kind": "Argument", "name": { "kind": "Name", "value": "filter" }, "value": { "kind": "ObjectValue", "fields": [{ "kind": "ObjectField", "name": { "kind": "Name", "value": "mint_account" }, "value": { "kind": "ObjectValue", "fields": [{ "kind": "ObjectField", "name": { "kind": "Name", "value": "eq" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "mint_account" } } }] } }] } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "mint_account" } }, { "kind": "Field", "name": { "kind": "Name", "value": "mint_authority" } }, { "kind": "Field", "name": { "kind": "Name", "value": "devices_count" } }, { "kind": "Field", "name": { "kind": "Name", "value": "metadata" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "name" } }, { "kind": "Field", "name": { "kind": "Name", "value": "symbol" } }, { "kind": "Field", "name": { "kind": "Name", "value": "uri" } }, { "kind": "Field", "name": { "kind": "Name", "value": "additional" } }] } }, { "kind": "Field", "name": { "kind": "Name", "value": "vendor" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "pubkey" } }] } }, { "kind": "Field", "name": { "kind": "Name", "value": "devices" }, "arguments": [{ "kind": "Argument", "name": { "kind": "Name", "value": "order" }, "value": { "kind": "ObjectValue", "fields": [{ "kind": "ObjectField", "name": { "kind": "Name", "value": "tx" }, "value": { "kind": "ObjectValue", "fields": [{ "kind": "ObjectField", "name": { "kind": "Name", "value": "slot" }, "value": { "kind": "ObjectValue", "fields": [{ "kind": "ObjectField", "name": { "kind": "Name", "value": "dir" }, "value": { "kind": "EnumValue", "value": "ASC" } }] } }] } }] } }, { "kind": "Argument", "name": { "kind": "Name", "value": "first" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "limit" } } }, { "kind": "Argument", "name": { "kind": "Name", "value": "after" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "offset" } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "pubkey" } }, { "kind": "Field", "name": { "kind": "Name", "value": "signing_alg" } }, { "kind": "Field", "name": { "kind": "Name", "value": "token_account" } }, { "kind": "Field", "name": { "kind": "Name", "value": "tx" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "block_ts" } }] } }, { "kind": "Field", "name": { "kind": "Name", "value": "did" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "token_account" } }, { "kind": "Field", "name": { "kind": "Name", "value": "mint_account" } }, { "kind": "Field", "name": { "kind": "Name", "value": "metadata" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "name" } }, { "kind": "Field", "name": { "kind": "Name", "value": "symbol" } }, { "kind": "Field", "name": { "kind": "Name", "value": "uri" } }, { "kind": "Field", "name": { "kind": "Name", "value": "additional" } }] } }, { "kind": "Field", "name": { "kind": "Name", "value": "owner" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "pubkey" } }] } }] } }] } }] } }] } }] } as unknown as DocumentNode; -export const GetVendorDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "query", "name": { "kind": "Name", "value": "getVendor" }, "variableDefinitions": [{ "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "vendor_pubkey" } }, "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "String" } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "Vendor" }, "arguments": [{ "kind": "Argument", "name": { "kind": "Name", "value": "filter" }, "value": { "kind": "ObjectValue", "fields": [{ "kind": "ObjectField", "name": { "kind": "Name", "value": "pubkey" }, "value": { "kind": "ObjectValue", "fields": [{ "kind": "ObjectField", "name": { "kind": "Name", "value": "eq" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "vendor_pubkey" } } }] } }] } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "pubkey" } }, { "kind": "Field", "name": { "kind": "Name", "value": "products_count" } }, { "kind": "Field", "name": { "kind": "Name", "value": "devices_count" } }, { "kind": "Field", "name": { "kind": "Name", "value": "products" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "mint_account" } }, { "kind": "Field", "name": { "kind": "Name", "value": "mint_authority" } }, { "kind": "Field", "name": { "kind": "Name", "value": "metadata" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "name" } }, { "kind": "Field", "name": { "kind": "Name", "value": "symbol" } }, { "kind": "Field", "name": { "kind": "Name", "value": "uri" } }, { "kind": "Field", "name": { "kind": "Name", "value": "additional" } }] } }, { "kind": "Field", "name": { "kind": "Name", "value": "devices_count" } }, { "kind": "Field", "name": { "kind": "Name", "value": "tx" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "block_ts" } }] } }] } }] } }] } }] } as unknown as DocumentNode; -export const GetDeviceDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "query", "name": { "kind": "Name", "value": "getDevice" }, "variableDefinitions": [{ "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "device_pubkey" } }, "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "String" } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "Device" }, "arguments": [{ "kind": "Argument", "name": { "kind": "Name", "value": "filter" }, "value": { "kind": "ObjectValue", "fields": [{ "kind": "ObjectField", "name": { "kind": "Name", "value": "pubkey" }, "value": { "kind": "ObjectValue", "fields": [{ "kind": "ObjectField", "name": { "kind": "Name", "value": "eq" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "device_pubkey" } } }] } }] } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "pubkey" } }, { "kind": "Field", "name": { "kind": "Name", "value": "signing_alg" } }, { "kind": "Field", "name": { "kind": "Name", "value": "token_account" } }, { "kind": "Field", "name": { "kind": "Name", "value": "tx" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "block_ts" } }] } }, { "kind": "Field", "name": { "kind": "Name", "value": "product" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "mint_account" } }, { "kind": "Field", "name": { "kind": "Name", "value": "metadata" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "name" } }, { "kind": "Field", "name": { "kind": "Name", "value": "symbol" } }, { "kind": "Field", "name": { "kind": "Name", "value": "uri" } }, { "kind": "Field", "name": { "kind": "Name", "value": "additional" } }] } }, { "kind": "Field", "name": { "kind": "Name", "value": "vendor" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "pubkey" } }] } }] } }, { "kind": "Field", "name": { "kind": "Name", "value": "did" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "mint_account" } }, { "kind": "Field", "name": { "kind": "Name", "value": "mint_authority" } }, { "kind": "Field", "name": { "kind": "Name", "value": "metadata" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "name" } }, { "kind": "Field", "name": { "kind": "Name", "value": "symbol" } }, { "kind": "Field", "name": { "kind": "Name", "value": "uri" } }, { "kind": "Field", "name": { "kind": "Name", "value": "additional" } }] } }, { "kind": "Field", "name": { "kind": "Name", "value": "owner" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "pubkey" } }] } }] } }] } }] } }] } as unknown as DocumentNode; -export const GetProgramsDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "query", "name": { "kind": "Name", "value": "getPrograms" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "Program" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "pubkey" } }, { "kind": "Field", "name": { "kind": "Name", "value": "authority" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "pubkey" } }] } }, { "kind": "Field", "name": { "kind": "Name", "value": "vendors_count" } }, { "kind": "Field", "name": { "kind": "Name", "value": "products_count" } }, { "kind": "Field", "name": { "kind": "Name", "value": "devices_count" } }] } }] } }] } as unknown as DocumentNode; \ No newline at end of file +export const GetProductsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProducts"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"Product"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"mint_authority"}},{"kind":"Field","name":{"kind":"Name","value":"devices_count"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"vendor"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetProductDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProduct"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"mint_account"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"limit"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"offset"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"Product"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"mint_account"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"mint_account"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"mint_authority"}},{"kind":"Field","name":{"kind":"Name","value":"devices_count"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"vendor"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}},{"kind":"Field","name":{"kind":"Name","value":"devices"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"order"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"tx"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slot"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"dir"},"value":{"kind":"EnumValue","value":"ASC"}}]}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"limit"}}},{"kind":"Argument","name":{"kind":"Name","value":"after"},"value":{"kind":"Variable","name":{"kind":"Name","value":"offset"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}},{"kind":"Field","name":{"kind":"Name","value":"signing_alg"}},{"kind":"Field","name":{"kind":"Name","value":"token_account"}},{"kind":"Field","name":{"kind":"Name","value":"tx"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"block_ts"}}]}},{"kind":"Field","name":{"kind":"Name","value":"did"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token_account"}},{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"owner"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetVendorDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getVendor"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"vendor_pubkey"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"Vendor"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"pubkey"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"vendor_pubkey"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}},{"kind":"Field","name":{"kind":"Name","value":"products_count"}},{"kind":"Field","name":{"kind":"Name","value":"devices_count"}},{"kind":"Field","name":{"kind":"Name","value":"products"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"mint_authority"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"devices_count"}},{"kind":"Field","name":{"kind":"Name","value":"tx"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"block_ts"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetDeviceDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getDevice"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"device_pubkey"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"Device"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"pubkey"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"device_pubkey"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}},{"kind":"Field","name":{"kind":"Name","value":"signing_alg"}},{"kind":"Field","name":{"kind":"Name","value":"token_account"}},{"kind":"Field","name":{"kind":"Name","value":"tx"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"block_ts"}}]}},{"kind":"Field","name":{"kind":"Name","value":"product"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"vendor"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"did"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"mint_authority"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"owner"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetProgramsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getPrograms"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"Program"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}},{"kind":"Field","name":{"kind":"Name","value":"authority"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}},{"kind":"Field","name":{"kind":"Name","value":"vendors_count"}},{"kind":"Field","name":{"kind":"Name","value":"products_count"}},{"kind":"Field","name":{"kind":"Name","value":"devices_count"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file From d7405b0d139f5c646dec5fca195849f97b226281 Mon Sep 17 00:00:00 2001 From: gaowhen Date: Thu, 4 Jul 2024 14:20:59 +0800 Subject: [PATCH 3/5] fix: eslint ignore --- explorer-ui/.eslintrc.cjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/explorer-ui/.eslintrc.cjs b/explorer-ui/.eslintrc.cjs index b28a493..8bbe5ce 100644 --- a/explorer-ui/.eslintrc.cjs +++ b/explorer-ui/.eslintrc.cjs @@ -36,7 +36,7 @@ const config = { }, ], }, - ignorePatterns: ["./src/grp/*"], + ignorePatterns: ["./src/gql/*"], }; module.exports = config; From 766d363247df4d7d50ad862913e49d1ccdb022dd Mon Sep 17 00:00:00 2001 From: gaowhen Date: Thu, 4 Jul 2024 14:23:25 +0800 Subject: [PATCH 4/5] fix: eslint ignore --- explorer-ui/.eslintrc.cjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/explorer-ui/.eslintrc.cjs b/explorer-ui/.eslintrc.cjs index 8bbe5ce..e72bf12 100644 --- a/explorer-ui/.eslintrc.cjs +++ b/explorer-ui/.eslintrc.cjs @@ -36,7 +36,7 @@ const config = { }, ], }, - ignorePatterns: ["./src/gql/*"], + ignorePatterns: ["src/gql/*"], }; module.exports = config; From b4172d38b7336847eeb2f019994220a57b8e6490 Mon Sep 17 00:00:00 2001 From: gaowhen Date: Thu, 4 Jul 2024 15:46:25 +0800 Subject: [PATCH 5/5] products page --- explorer-ui/src/gql/graphql.ts | 7 ++++-- explorer-ui/src/pages/index.tsx | 4 +++- explorer-ui/src/pages/products.tsx | 38 ++++++++++++++++++------------ explorer-ui/src/queries.ts | 23 ++++++++++++++---- 4 files changed, 49 insertions(+), 23 deletions(-) diff --git a/explorer-ui/src/gql/graphql.ts b/explorer-ui/src/gql/graphql.ts index 07801b6..c3dc9d9 100644 --- a/explorer-ui/src/gql/graphql.ts +++ b/explorer-ui/src/gql/graphql.ts @@ -2092,7 +2092,10 @@ export enum NullsOrderingEnum { Smallest = 'SMALLEST' } -export type GetProductsQueryVariables = Exact<{ [key: string]: never; }>; +export type GetProductsQueryVariables = Exact<{ + limit?: InputMaybe; + offset?: InputMaybe; +}>; export type GetProductsQuery = { __typename?: 'Query', Product?: Array<{ __typename?: 'Product_Type', mint_account: string, mint_authority?: string | null, devices_count: any, metadata?: { __typename?: 'TokenMetadata_Type', name?: string | null, symbol?: string | null, uri?: string | null, additional: Array } | null, vendor: { __typename?: 'Vendor_Type', pubkey: string } }> | null }; @@ -2126,7 +2129,7 @@ export type GetProgramsQueryVariables = Exact<{ [key: string]: never; }>; export type GetProgramsQuery = { __typename?: 'Query', Program?: Array<{ __typename?: 'Program_Type', pubkey: string, vendors_count: any, products_count: any, devices_count: any, authority: { __typename?: 'Admin_Type', pubkey: string } }> | null }; -export const GetProductsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProducts"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"Product"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"mint_authority"}},{"kind":"Field","name":{"kind":"Name","value":"devices_count"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"vendor"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetProductsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProducts"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"limit"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"offset"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"Product"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"limit"}}},{"kind":"Argument","name":{"kind":"Name","value":"after"},"value":{"kind":"Variable","name":{"kind":"Name","value":"offset"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"mint_authority"}},{"kind":"Field","name":{"kind":"Name","value":"devices_count"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"vendor"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}}]}}]}}]} as unknown as DocumentNode; export const GetProductDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getProduct"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"mint_account"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"limit"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"offset"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"Product"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"mint_account"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"mint_account"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"mint_authority"}},{"kind":"Field","name":{"kind":"Name","value":"devices_count"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"vendor"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}},{"kind":"Field","name":{"kind":"Name","value":"devices"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"order"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"tx"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"slot"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"dir"},"value":{"kind":"EnumValue","value":"ASC"}}]}}]}}]}},{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"Variable","name":{"kind":"Name","value":"limit"}}},{"kind":"Argument","name":{"kind":"Name","value":"after"},"value":{"kind":"Variable","name":{"kind":"Name","value":"offset"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}},{"kind":"Field","name":{"kind":"Name","value":"signing_alg"}},{"kind":"Field","name":{"kind":"Name","value":"token_account"}},{"kind":"Field","name":{"kind":"Name","value":"tx"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"block_ts"}}]}},{"kind":"Field","name":{"kind":"Name","value":"did"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token_account"}},{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"owner"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; export const GetVendorDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getVendor"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"vendor_pubkey"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"Vendor"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"pubkey"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"vendor_pubkey"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}},{"kind":"Field","name":{"kind":"Name","value":"products_count"}},{"kind":"Field","name":{"kind":"Name","value":"devices_count"}},{"kind":"Field","name":{"kind":"Name","value":"products"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"mint_authority"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"devices_count"}},{"kind":"Field","name":{"kind":"Name","value":"tx"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"block_ts"}}]}}]}}]}}]}}]} as unknown as DocumentNode; export const GetDeviceDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"getDevice"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"device_pubkey"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"Device"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"pubkey"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"device_pubkey"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}},{"kind":"Field","name":{"kind":"Name","value":"signing_alg"}},{"kind":"Field","name":{"kind":"Name","value":"token_account"}},{"kind":"Field","name":{"kind":"Name","value":"tx"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"block_ts"}}]}},{"kind":"Field","name":{"kind":"Name","value":"product"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"vendor"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"did"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mint_account"}},{"kind":"Field","name":{"kind":"Name","value":"mint_authority"}},{"kind":"Field","name":{"kind":"Name","value":"metadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"symbol"}},{"kind":"Field","name":{"kind":"Name","value":"uri"}},{"kind":"Field","name":{"kind":"Name","value":"additional"}}]}},{"kind":"Field","name":{"kind":"Name","value":"owner"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pubkey"}}]}}]}}]}}]}}]} as unknown as DocumentNode; diff --git a/explorer-ui/src/pages/index.tsx b/explorer-ui/src/pages/index.tsx index e6540fc..5dd96f4 100644 --- a/explorer-ui/src/pages/index.tsx +++ b/explorer-ui/src/pages/index.tsx @@ -1,6 +1,7 @@ import Head from "next/head"; import Link from "next/link"; import { useQuery } from "@tanstack/react-query"; +import { ChevronsRight } from "lucide-react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; @@ -50,9 +51,10 @@ export default function Home() { {programData.Program[0]?.products_count} +
diff --git a/explorer-ui/src/pages/products.tsx b/explorer-ui/src/pages/products.tsx index f56f589..f697b48 100644 --- a/explorer-ui/src/pages/products.tsx +++ b/explorer-ui/src/pages/products.tsx @@ -11,6 +11,7 @@ import { CardDescription, CardHeader, CardTitle, + CardFooter, } from "@/components/ui/card"; import { Table, @@ -57,11 +58,9 @@ export default function Products() { # - Symbol Name Mint Account Url - SolanaFM @@ -72,36 +71,45 @@ export default function Products() { {page * limit + i + 1} - {product.metadata?.symbol} {product.metadata?.name} - {product.mint_account} + + + {product.mint_account} + + + {product.metadata?.uri ? ( + {product.metadata?.uri} ) : null} - - - - - ))} + {/* +
+ Showing + + {page * limit + 1}-{(page + 1) * limit} + + of {data.Product?.length} devices +
+
*/} ) : null} diff --git a/explorer-ui/src/queries.ts b/explorer-ui/src/queries.ts index 346d78c..f65b0be 100644 --- a/explorer-ui/src/queries.ts +++ b/explorer-ui/src/queries.ts @@ -1,7 +1,17 @@ import type { TypedDocumentNode } from '@graphql-typed-document-node/core'; import { parse } from 'graphql' import { gql, GraphQLClient } from 'graphql-request' -import type { GetProductQuery, GetProductQueryVariables, GetProductsQuery, GetVendorQuery, GetVendorQueryVariables, GetDeviceQuery, GetDeviceQueryVariables, GetProgramsQuery } from './gql/graphql' +import type { + GetProductQuery, + GetProductQueryVariables, + GetProductsQuery, + GetVendorQuery, + GetVendorQueryVariables, + GetDeviceQuery, + GetDeviceQueryVariables, + GetProgramsQuery, + GetProductsQueryVariables +} from './gql/graphql' import { env } from '@/env'; @@ -10,10 +20,10 @@ import { env } from '@/env'; export const gqlClient = new GraphQLClient(env.NEXT_PUBLIC_GRAPHQL_URI) -export async function getProducts() { +export async function getProducts(offset = 0, limit = 50) { const query: TypedDocumentNode = parse(gql` - query getProducts { - Product { + query getProducts ($limit: Int, $offset: String) { + Product(first: $limit, after: $offset) { mint_account mint_authority devices_count @@ -30,7 +40,10 @@ export async function getProducts() { } `) - const variables = {} + const variables: GetProductsQueryVariables = { + offset: `${offset - 1}`, + limit, + } return await gqlClient.request(query, variables) }