diff --git a/packages/api/src/repository/ResultRequest.ts b/packages/api/src/repository/ResultRequest.ts index f75041bd..15fadf04 100644 --- a/packages/api/src/repository/ResultRequest.ts +++ b/packages/api/src/repository/ResultRequest.ts @@ -4,6 +4,7 @@ import { Db, Collection, WithoutId, + PaginatedRequests, } from '../../types' import { containFalsyValues } from './containFalsyValues' @@ -51,17 +52,26 @@ export class ResultRequestRepository { feedFullName: string, page: number, size: number, - ): Promise> { - return ( - await this.collection - .find({ - feedFullName, - }) - .sort({ timestamp: -1 }) - .skip(size * (page - 1)) - .limit(size) - .toArray() - ).map(this.normalizeId) + ): Promise { + return { + requests: ( + await this.collection + .find({ + feedFullName, + }) + .sort({ timestamp: -1 }) + .skip(size * (page - 1)) + .limit(size) + .toArray() + ).map(this.normalizeId), + total: ( + await this.collection + .find({ + feedFullName, + }) + .toArray() + ).length, + } } async getLastResult( diff --git a/packages/api/src/typeDefs.ts b/packages/api/src/typeDefs.ts index d61a5edb..7de93235 100644 --- a/packages/api/src/typeDefs.ts +++ b/packages/api/src/typeDefs.ts @@ -50,6 +50,11 @@ const typeDefs = gql` timestamp: String! @column } + type PaginatedResultRequest { + requests: [ResultRequest] + total: Int! + } + # type DataRequest @entity(embedded: true) { # retrieval: String! @column # aggregation: String! @column @@ -59,7 +64,11 @@ const typeDefs = gql` type Query { feed(feedFullName: String!): Feed feeds(network: String): FeedsPage! - requests(feedFullName: String!, page: Int!, size: Int!): [ResultRequest]! + requests( + feedFullName: String! + page: Int! + size: Int! + ): PaginatedResultRequest! networks: [NetworksConfig]! } ` diff --git a/packages/api/types.ts b/packages/api/types.ts index 317e63f2..2fc6c998 100644 --- a/packages/api/types.ts +++ b/packages/api/types.ts @@ -150,6 +150,11 @@ export type ResultRequestDbObjectNormalized = ResultRequestDbObject & { id: string } +export type PaginatedRequests = { + requests: Array + total: number +} + export type Repositories = { feedRepository: FeedRepository resultRequestRepository: ResultRequestRepository diff --git a/packages/ui/api/index.ts b/packages/ui/api/index.ts index 80cdd11e..1d987b5f 100644 --- a/packages/ui/api/index.ts +++ b/packages/ui/api/index.ts @@ -4,7 +4,7 @@ import feedQuery from './queries/feed' import feedsQuery from './queries/feeds' import networksQuery from './queries/networks' import feedRequestsQuery from './queries/requests' -import type { Ecosystem, Feed, FeedRequests, Network } from '~/types' +import type { Ecosystem, Feed, FeedRequest, Network } from '~/types' function getApiEndpoint() { return useRuntimeConfig().public.apiBase @@ -19,7 +19,7 @@ export const getAllFeedsRequests = async ({ network }: { network: string }) => }, { accept: 'application/json' }, )) as { - feeds: FeedRequests[] + feeds: FeedRequest[] total: number } @@ -68,8 +68,8 @@ export const getFeedRequests = async ({ feedFullName: string page: number size: number -}) => - (await request( +}) => { + const result = (await request( getApiEndpoint(), feedRequestsQuery, { @@ -79,5 +79,10 @@ export const getFeedRequests = async ({ }, { accept: 'application/json' }, )) as { - requests: FeedRequests[] + requests: { + requests: FeedRequest[] + total: number + } } + return result.requests +} diff --git a/packages/ui/api/queries/requests.ts b/packages/ui/api/queries/requests.ts index f51e53e4..83611767 100644 --- a/packages/ui/api/queries/requests.ts +++ b/packages/ui/api/queries/requests.ts @@ -3,10 +3,14 @@ import { gql } from 'graphql-request' export default gql` query requests($feedFullName: String!, $page: Int!, $size: Int!) { requests(feedFullName: $feedFullName, page: $page, size: $size) { - feedFullName - result - drTxHash - timestamp + requests { + feedFullName + result + drTxHash + requestId + timestamp + } + total } } ` diff --git a/packages/ui/components/DataFeedDetails.vue b/packages/ui/components/DataFeedDetails.vue index 83d60c43..17259654 100644 --- a/packages/ui/components/DataFeedDetails.vue +++ b/packages/ui/components/DataFeedDetails.vue @@ -34,7 +34,7 @@ > @@ -57,8 +57,8 @@ :transactions="transactions" /> @@ -186,9 +186,6 @@ const maxTimeToResolve = computed(() => { } }) -const itemsLength = computed(() => { - return feed.value?.requests.length -}) const feedName = computed(() => normalizedFeed.value?.name ?? '') const networkName = computed(() => normalizedFeed.value?.networkName ?? '') @@ -209,12 +206,8 @@ const chartData: Ref[]> = computed(() => { } }) const transactions = computed(() => { - if ( - feed.value && - store.paginatedFeedRequest && - store.paginatedFeedRequest.length > 0 - ) { - return store.paginatedFeedRequest.map((request: any) => ({ + if (store.paginatedFeedRequest && store.paginatedFeedRequest.total > 0) { + return store.paginatedFeedRequest.requests.map((request) => ({ witnetLink: getWitnetBlockExplorerLink(request.drTxHash), drTxHash: request.drTxHash, data: { @@ -228,6 +221,8 @@ const transactions = computed(() => { return null } }) +const totalItems = computed(() => store.paginatedFeedRequest?.total ?? 0) + const handleCurrentChange = async (val: number) => { if (currentPage.value !== val) { currentPage.value = val diff --git a/packages/ui/stores/index.ts b/packages/ui/stores/index.ts index 2a3540a0..a0314229 100644 --- a/packages/ui/stores/index.ts +++ b/packages/ui/stores/index.ts @@ -57,7 +57,7 @@ export const useStore = defineStore('data', { page, size, }) - this.paginatedFeedRequest = result.requests + this.paginatedFeedRequest = result return this.paginatedFeedRequest }, updateSelectedNetwork({ networks }: { networks: Network[] | [] }) { diff --git a/packages/ui/types.ts b/packages/ui/types.ts index a82c8377..3daacbd3 100644 --- a/packages/ui/types.ts +++ b/packages/ui/types.ts @@ -52,7 +52,7 @@ export type Ecosystem = { total: number } -export type FeedRequests = { +export type FeedRequest = { feedFullName: string result: string drTxHash: string @@ -75,7 +75,7 @@ export type Feed = { proxyAddress: string heartbeat: string finality: string - requests: FeedRequests[] + requests: FeedRequest[] blockExplorer: string color: string logo: string @@ -88,5 +88,8 @@ export interface DataStore { ecosystems: Ecosystem[] | [] totalFeeds: number feed: Feed | null - paginatedFeedRequest: FeedRequests[] | null + paginatedFeedRequest: { + requests: FeedRequest[] + total: number + } | null }