Skip to content

Commit

Permalink
fix: improvents in performance reducing requests
Browse files Browse the repository at this point in the history
  • Loading branch information
amalcaraz committed Dec 20, 2023
1 parent b02bf5a commit 648755c
Show file tree
Hide file tree
Showing 7 changed files with 128 additions and 26 deletions.
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"lint:fix": "next lint --fix"
},
"dependencies": {
"@aleph-front/aleph-core": "^1.13.15",
"@aleph-front/aleph-core": "^1.13.16",
"@fortawesome/fontawesome-svg-core": "^6.3.0",
"@helia/unixfs": "^1.4.1",
"@hookform/resolvers": "^3.1.1",
Expand Down
6 changes: 2 additions & 4 deletions src/components/common/Viewport/cmp.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import { ViewportProps } from './types'
import { StyledViewport } from './styles'
import { memo } from 'react'
import { useRequestCCNs } from '@/hooks/common/useRequestEntity/useRequestCCNs'
import { useRequestCRNs } from '@/hooks/common/useRequestEntity/useRequestCRNs'
import { useRequestRewards } from '@/hooks/common/useRequestEntity/useRequestRewards'
import { useRequestCCNsFeed } from '@/hooks/common/useRequestEntity/useRequestCCNsFeed'
import { useRequestRewardsFeed } from '@/hooks/common/useRequestEntity/useRequestRewardsFeed'
import { useRequestAlephNodes } from '@/hooks/common/useRequestEntity/useRequestAlephNodes'

export const Viewport = ({ children }: ViewportProps) => {
useRequestCCNs({})
useRequestCRNs({})
useRequestAlephNodes({})
useRequestRewards({})

useRequestCCNsFeed()
Expand Down
5 changes: 4 additions & 1 deletion src/domain/file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,14 @@ export class FileManager {
async uploadFile(fileObject: File): Promise<string> {
if (!this.account) throw new Error('Invalid account')

// @note: Quick temporal fix to upload files
const buffer = Buffer.from(await fileObject.arrayBuffer())

const message = await store.Publish({
account: this.account,
channel,
APIServer: apiServer,
fileObject,
fileObject: buffer,
})

return message.content.item_hash
Expand Down
27 changes: 21 additions & 6 deletions src/domain/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,10 +203,11 @@ export class NodeManager {

async getCCNNodes(): Promise<CCN[]> {
const res = await this.fetchAllNodes()
const { crns } = res
let { ccns } = res
let { ccns, crns } = res

ccns = this.parseResourceNodes(ccns, crns)
crns = this.parseResourceNodes(crns)

ccns = this.parseChildrenResourceNodes(ccns, crns)
ccns = await this.parseScores(ccns, false)
ccns = await this.parseMetrics(ccns, false)

Expand All @@ -218,6 +219,8 @@ export class NodeManager {
const { ccns } = res
let { crns } = res

crns = this.parseResourceNodes(crns)

crns = this.parseParentNodes(crns, ccns)
crns = await this.parseScores(crns, true)
crns = await this.parseMetrics(crns, true)
Expand All @@ -231,7 +234,9 @@ export class NodeManager {
const { timestamp } = response
let { ccns, crns } = response

ccns = this.parseResourceNodes(ccns, crns)
crns = this.parseResourceNodes(crns)

ccns = this.parseChildrenResourceNodes(ccns, crns)
ccns = await this.parseScores(ccns, false)
ccns = await this.parseMetrics(ccns, false)

Expand Down Expand Up @@ -265,7 +270,9 @@ export class NodeManager {
let crns: CRN[] = resource_nodes
let ccns: CCN[] = nodes

ccns = this.parseResourceNodes(ccns, crns)
crns = this.parseResourceNodes(crns)

ccns = this.parseChildrenResourceNodes(ccns, crns)
ccns = await this.parseScores(ccns, false)
ccns = await this.parseMetrics(ccns, false)

Expand Down Expand Up @@ -606,7 +613,15 @@ export class NodeManager {
return lastVersion.outdated === node.metricsData?.version
}

protected parseResourceNodes(ccns: CCN[], crns: CRN[]): CCN[] {
protected parseResourceNodes(crns: CRN[]): CRN[] {
return crns.map((crn) => {
// @note: some nodes has {locked: ""}
crn.locked = !!crn.locked
return crn
})
}

protected parseChildrenResourceNodes(ccns: CCN[], crns: CRN[]): CCN[] {
const crnsMap = crns.reduce((ac, cu) => {
if (!cu.parent) return ac

Expand Down
90 changes: 90 additions & 0 deletions src/hooks/common/useRequestEntity/useRequestAlephNodes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import { useMemo } from 'react'
import { CCN, CRN, NodeLastVersions, NodeManager } from '@/domain/node'
import { useAppState } from '@/contexts/appState'
import { useAppStoreRequest } from '../useStoreRequest'
import { useRequest } from '@aleph-front/aleph-core'
import { EntitySetAction } from '@/store/entity'

export type UseRequestAlephNodesProps = {
triggerDeps?: unknown[]
}

export type UseRequestAlephNodesReturn = {
ccns?: CCN[]
crns?: CRN[]
ccnLastVersion?: NodeLastVersions
crnLastVersion?: NodeLastVersions
}

export function useRequestAlephNodes({
triggerDeps,
}: UseRequestAlephNodesProps): UseRequestAlephNodesReturn {
const [appState, dispatch] = useAppState()
const { account } = appState.account
const { ccns, crns } = appState

// @todo: Refactor this (use singleton)
const nodeManager = useMemo(() => new NodeManager(account), [account])

const state = useMemo(() => {
return {
data: {
ccns: { data: ccns.entities, loading: ccns.loading, error: ccns.error },
crns: { data: crns.entities, loading: crns.loading, error: crns.error },
timestamp: Date.now(),
},
loading: ccns.loading || crns.loading,
error: ccns.error || crns.error,
}
}, [ccns, crns])

const { data } = useRequest({
state,
setState: (newState) => {
const { ccns, crns } = newState.data || {}
ccns && dispatch(new EntitySetAction({ name: 'ccns', state: ccns }))
crns && dispatch(new EntitySetAction({ name: 'crns', state: crns }))
},
doRequest: async () => {
const res = await nodeManager.getAllNodes()
return {
ccns: { data: res.ccns, loading: false, error: undefined },
crns: { data: res.crns, loading: false, error: undefined },
timestamp: Date.now(),
}
},
onSuccess: () => null,
flushData: false,
triggerOnMount: true,
triggerDeps,
})

// -----------------------------

const { data: ccnLastVersion } = useAppStoreRequest({
name: 'lastCCNVersion',
doRequest: () => nodeManager.getLatestCCNVersion(),
onSuccess: () => null,
onError: () => null,
flushData: false,
triggerOnMount: true,
})

// -----------------------------

const { data: crnLastVersion } = useAppStoreRequest({
name: 'lastCRNVersion',
doRequest: () => nodeManager.getLatestCRNVersion(),
onSuccess: () => null,
onError: () => null,
flushData: false,
triggerOnMount: true,
})

return {
ccns: data?.ccns.data,
crns: data?.crns.data,
ccnLastVersion,
crnLastVersion,
}
}
10 changes: 3 additions & 7 deletions src/hooks/common/useStoreEntitiesRequest.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Dispatch, useMemo } from 'react'
import { useAppState } from '@/contexts/appState'
import { EntityAction, EntityActionType, EntityState } from '@/store/entity'
import { EntityAction, EntitySetAction, EntityState } from '@/store/entity'
import { StoreState } from '@/store/store'
import {
UseRequestProps,
Expand Down Expand Up @@ -41,12 +41,8 @@ export function useStoreEntityRequest<T, S>({

return useRequest({
state,
setState: (newState) => {
return dispatch({
type: EntityActionType.ENTITY_SET,
payload: { name, state: newState },
})
},
setState: (newState) =>
dispatch(new EntitySetAction({ name, state: newState })),
...props,
})
}
Expand Down

0 comments on commit 648755c

Please sign in to comment.