From 086e5b80ef193c12d411305c47dfb92412e682a3 Mon Sep 17 00:00:00 2001 From: bee344 Date: Fri, 22 Mar 2024 12:53:33 -0300 Subject: [PATCH 01/56] added overview page --- packages/apps-routing/src/coretime.ts | 22 +++++++++ packages/apps-routing/src/index.ts | 2 + .../apps/public/locales/en/app-coretime.json | 4 ++ packages/apps/public/locales/en/index.json | 1 + packages/page-assets/src/Overview/Asset.tsx | 1 + packages/page-coretime/README.md | 1 + packages/page-coretime/package.json | 27 +++++++++++ packages/page-coretime/src/Overview/Cores.tsx | 20 ++++++++ packages/page-coretime/src/Overview/Pools.tsx | 22 +++++++++ .../page-coretime/src/Overview/Summary.tsx | 41 ++++++++++++++++ .../page-coretime/src/Overview/Timeslice.tsx | 24 ++++++++++ .../page-coretime/src/Overview/Workload.tsx | 29 ++++++++++++ .../page-coretime/src/Overview/Workloads.tsx | 45 ++++++++++++++++++ .../page-coretime/src/Overview/Workplan.tsx | 0 packages/page-coretime/src/Overview/index.tsx | 23 +++++++++ packages/page-coretime/src/index.tsx | 47 +++++++++++++++++++ packages/page-coretime/src/translate.ts | 8 ++++ packages/page-coretime/src/types.ts | 14 ++++++ .../page-coretime/src/useWorkloadInfos.ts | 47 +++++++++++++++++++ packages/page-coretime/tsconfig.build.json | 13 +++++ packages/react-query/src/BrokerStatus.tsx | 29 ++++++++++++ packages/react-query/src/PoolSize.tsx | 38 +++++++++++++++ packages/react-query/src/index.ts | 2 + tsconfig.base.json | 1 + 24 files changed, 461 insertions(+) create mode 100644 packages/apps-routing/src/coretime.ts create mode 100644 packages/apps/public/locales/en/app-coretime.json create mode 100644 packages/page-coretime/README.md create mode 100644 packages/page-coretime/package.json create mode 100644 packages/page-coretime/src/Overview/Cores.tsx create mode 100644 packages/page-coretime/src/Overview/Pools.tsx create mode 100644 packages/page-coretime/src/Overview/Summary.tsx create mode 100644 packages/page-coretime/src/Overview/Timeslice.tsx create mode 100644 packages/page-coretime/src/Overview/Workload.tsx create mode 100644 packages/page-coretime/src/Overview/Workloads.tsx create mode 100644 packages/page-coretime/src/Overview/Workplan.tsx create mode 100644 packages/page-coretime/src/Overview/index.tsx create mode 100644 packages/page-coretime/src/index.tsx create mode 100644 packages/page-coretime/src/translate.ts create mode 100644 packages/page-coretime/src/types.ts create mode 100644 packages/page-coretime/src/useWorkloadInfos.ts create mode 100644 packages/page-coretime/tsconfig.build.json create mode 100644 packages/react-query/src/BrokerStatus.tsx create mode 100644 packages/react-query/src/PoolSize.tsx diff --git a/packages/apps-routing/src/coretime.ts b/packages/apps-routing/src/coretime.ts new file mode 100644 index 000000000000..a6ad45f0d0f4 --- /dev/null +++ b/packages/apps-routing/src/coretime.ts @@ -0,0 +1,22 @@ +// Copyright 2017-2024 @polkadot/apps-routing authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { Route, TFunction } from './types.js'; + +import Component from '@polkadot/app-coretime'; + +export default function create (t: TFunction): Route { + return { + Component, + display: { + needsApi: [ + 'query.broker.status' + ], + needsApiInstances: true + }, + group: 'network', + icon: 'building', + name: 'coretime', + text: t('nav.coretime', 'Coretime', { ns: 'app-coretime' }), + }; +} diff --git a/packages/apps-routing/src/index.ts b/packages/apps-routing/src/index.ts index b4d066dec0b3..f571579ca5f0 100644 --- a/packages/apps-routing/src/index.ts +++ b/packages/apps-routing/src/index.ts @@ -44,6 +44,7 @@ import transfer from './transfer.js'; import treasury from './treasury.js'; import utilities from './utilities.js'; import whitelist from './whitelist.js'; +import coretime from './coretime.js'; export default function create (t: TFunction): Routes { return [ @@ -57,6 +58,7 @@ export default function create (t: TFunction): Routes { staking(t), staking2(t), collator(t), + coretime(t), // governance v2 referenda(t), membership(t), diff --git a/packages/apps/public/locales/en/app-coretime.json b/packages/apps/public/locales/en/app-coretime.json new file mode 100644 index 000000000000..447aa1b2256a --- /dev/null +++ b/packages/apps/public/locales/en/app-coretime.json @@ -0,0 +1,4 @@ +{ + "Overview": "Overview", + "nav.coretime": "Coretime" +} \ No newline at end of file diff --git a/packages/apps/public/locales/en/index.json b/packages/apps/public/locales/en/index.json index 346a9663cd19..6b08a8a7b2d3 100644 --- a/packages/apps/public/locales/en/index.json +++ b/packages/apps/public/locales/en/index.json @@ -8,6 +8,7 @@ "app-claims.json", "app-collator.json", "app-contracts.json", + "app-coretime.json", "app-council.json", "app-democracy.json", "app-explorer.json", diff --git a/packages/page-assets/src/Overview/Asset.tsx b/packages/page-assets/src/Overview/Asset.tsx index cda1193fb08b..d60f669901e3 100644 --- a/packages/page-assets/src/Overview/Asset.tsx +++ b/packages/page-assets/src/Overview/Asset.tsx @@ -22,6 +22,7 @@ function Asset ({ className, value: { details, id, isIssuerMe, metadata } }: Pro : [0, '---'], [metadata] ); + console.log(metadata?.name.toUtf8()) return ( diff --git a/packages/page-coretime/README.md b/packages/page-coretime/README.md new file mode 100644 index 000000000000..d9c23d4732fd --- /dev/null +++ b/packages/page-coretime/README.md @@ -0,0 +1 @@ +# @polkadot/app-coretime diff --git a/packages/page-coretime/package.json b/packages/page-coretime/package.json new file mode 100644 index 000000000000..e2d710787924 --- /dev/null +++ b/packages/page-coretime/package.json @@ -0,0 +1,27 @@ +{ + "bugs": "https://github.com/polkadot-js/apps/issues", + "engines": { + "node": ">=18" + }, + "homepage": "https://github.com/polkadot-js/apps/tree/master/packages/page-coretime#readme", + "license": "Apache-2.0", + "name": "@polkadot/app-coretime", + "private": true, + "repository": { + "directory": "packages/page-coretime", + "type": "git", + "url": "https://github.com/polkadot-js/apps.git" + }, + "sideEffects": false, + "type": "module", + "version": "0.133.2-119-x", + "dependencies": { + "@polkadot/react-components": "^0.133.2-119-x", + "@polkadot/react-query": "^0.133.2-119-x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*", + "react-is": "*" + } +} diff --git a/packages/page-coretime/src/Overview/Cores.tsx b/packages/page-coretime/src/Overview/Cores.tsx new file mode 100644 index 000000000000..3fc938887bae --- /dev/null +++ b/packages/page-coretime/src/Overview/Cores.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { BrokerStatus } from '@polkadot/react-query'; + +interface Props { + children?: React.ReactNode; + className?: string; +} + +function Cores({ children, className }: Props): React.ReactElement | null { + + return ( + + {children} + + ); +} + +export default React.memo(Cores); diff --git a/packages/page-coretime/src/Overview/Pools.tsx b/packages/page-coretime/src/Overview/Pools.tsx new file mode 100644 index 000000000000..449dee816e44 --- /dev/null +++ b/packages/page-coretime/src/Overview/Pools.tsx @@ -0,0 +1,22 @@ +import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; +import type { u32 } from '@polkadot/types'; +import React from 'react'; +import { PoolSize } from '@polkadot/react-query'; + +interface Props { + children?: React.ReactNode; + className?: string; + timeslice?: PalletBrokerStatusRecord | null; + lastTimeslice?: u32 | null; +} + +function Pools({ children, className }: Props): React.ReactElement | null { + return ( + + {children} + + ); +} + +export default React.memo(Pools); diff --git a/packages/page-coretime/src/Overview/Summary.tsx b/packages/page-coretime/src/Overview/Summary.tsx new file mode 100644 index 000000000000..acbdfe50a363 --- /dev/null +++ b/packages/page-coretime/src/Overview/Summary.tsx @@ -0,0 +1,41 @@ +// Copyright 2017-2024 @polkadot/app-explorer authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; + +import { CardSummary, SummaryBox } from '@polkadot/react-components'; +import { useApi } from '@polkadot/react-hooks'; + +import Timeslice from './Timeslice.js'; +import { useTranslation } from '../translate.js'; +import Cores from './Cores.js'; +import Pools from './Pools.js'; + + +function Summary (): React.ReactElement { + const { t } = useTranslation(); + const { api } = useApi(); + + return ( + +
+ {api.query.broker && ( + <> + + + + + + + + + + + + )} +
+
+ ); +} + +export default React.memo(Summary); diff --git a/packages/page-coretime/src/Overview/Timeslice.tsx b/packages/page-coretime/src/Overview/Timeslice.tsx new file mode 100644 index 000000000000..60e28c12a9b9 --- /dev/null +++ b/packages/page-coretime/src/Overview/Timeslice.tsx @@ -0,0 +1,24 @@ +import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; +import type { u32 } from '@polkadot/types'; +import React from 'react'; +import { BrokerStatus } from '@polkadot/react-query'; + +interface Props { + children?: React.ReactNode; + className?: string; + timeslice?: PalletBrokerStatusRecord | null; + lastTimeslice?: u32 | null; +} + +function Timeslice({ children, className }: Props): React.ReactElement | null { + + return ( + + {children} + + ); +} + +export default React.memo(Timeslice); diff --git a/packages/page-coretime/src/Overview/Workload.tsx b/packages/page-coretime/src/Overview/Workload.tsx new file mode 100644 index 000000000000..99f9bd5c5e15 --- /dev/null +++ b/packages/page-coretime/src/Overview/Workload.tsx @@ -0,0 +1,29 @@ +// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { CoreWorkloadInfo } from '../types.js'; + +import React from 'react'; + +import { Table } from '@polkadot/react-components'; + +interface Props { + className?: string; + value: CoreWorkloadInfo; +} + +function Workload ({ className, value: { core, info } }: Props): React.ReactElement { + console.log('core', core) + + console.log('info', info.toString()) + console.log('assignment', info[0]['assignment'].toString()) + return ( + + + {info[0]['mask'].toString()} + {info[0]['assignment'].toString()} + + ); +} + +export default React.memo(Workload); diff --git a/packages/page-coretime/src/Overview/Workloads.tsx b/packages/page-coretime/src/Overview/Workloads.tsx new file mode 100644 index 000000000000..64d0e779ae91 --- /dev/null +++ b/packages/page-coretime/src/Overview/Workloads.tsx @@ -0,0 +1,45 @@ +// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// SPDX-License-Identifier: Apache-2.0 +import { CoreWorkloadInfo } from '../types.js' + +import React, { useRef } from 'react'; + +import { Table } from '@polkadot/react-components'; + +import { useTranslation } from '../translate.js'; +import Workload from './Workload.js'; + + + +interface Props { + className?: string; + infos?: CoreWorkloadInfo[]; +} + +function Workloads ({ className, infos }: Props): React.ReactElement { + const { t } = useTranslation(); + + const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ + [t('workload'), 'start', 1], + [t('mask'), 'start media--1300'], + [t('assignment'), 'start media--1600'], + [] + ]); + + return ( + + {infos?.map((info) => ( + + ))} +
+ ); +} + +export default React.memo(Workloads); diff --git a/packages/page-coretime/src/Overview/Workplan.tsx b/packages/page-coretime/src/Overview/Workplan.tsx new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/page-coretime/src/Overview/index.tsx b/packages/page-coretime/src/Overview/index.tsx new file mode 100644 index 000000000000..0e0b3a0707a5 --- /dev/null +++ b/packages/page-coretime/src/Overview/index.tsx @@ -0,0 +1,23 @@ +import Summary from './Summary.js'; + +import React from 'react'; +import Workloads from './Workloads.js'; +import { CoreWorkloadInfo } from '../types.js'; + +interface Props { + className?: string; + infos?: CoreWorkloadInfo[]; +} + +function Overview ({ className, infos }: Props): React.ReactElement { + console.log('timeslice', Summary) + + return ( +
+ + +
+ ) +} + +export default React.memo(Overview); diff --git a/packages/page-coretime/src/index.tsx b/packages/page-coretime/src/index.tsx new file mode 100644 index 000000000000..997a7afab328 --- /dev/null +++ b/packages/page-coretime/src/index.tsx @@ -0,0 +1,47 @@ +// Copyright 2017-2024 @polkadot/app-explorer authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { TabItem } from '@polkadot/react-components/types'; + +import React, { useRef } from 'react'; + +import { Tabs } from '@polkadot/react-components'; + +import { useTranslation } from './translate.js'; +import Overview from './Overview/index.js'; +import useWorkloadInfos from './useWorkloadInfos.js'; + +interface Props { + basePath: string; + className?: string; +} + +function createItemsRef(t: (key: string, options?: { replace: Record }) => string): TabItem[] { + console.log('creation') + return [ + { + isRoot: true, + name: 'overview', + text: t('Overview') + } + ]; +} + +function CoretimeApp({ basePath, className }: Props): React.ReactElement { + const { t } = useTranslation(); + const itemsRef = useRef(createItemsRef(t)); + console.log('coretime overview') + const infos = useWorkloadInfos(); + + return ( +
+ + +
+ ); +} + +export default React.memo(CoretimeApp); diff --git a/packages/page-coretime/src/translate.ts b/packages/page-coretime/src/translate.ts new file mode 100644 index 000000000000..125dda4ab07d --- /dev/null +++ b/packages/page-coretime/src/translate.ts @@ -0,0 +1,8 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { useTranslation as useTranslationBase } from 'react-i18next'; + +export function useTranslation (): { t: (key: string, options?: { replace: Record }) => string } { + return useTranslationBase('app-coretime'); +} diff --git a/packages/page-coretime/src/types.ts b/packages/page-coretime/src/types.ts new file mode 100644 index 000000000000..9c9c1bf40b39 --- /dev/null +++ b/packages/page-coretime/src/types.ts @@ -0,0 +1,14 @@ +// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; + +export interface WorkloadInfo { + core: number; + info: PalletBrokerScheduleItem[] +} + +export interface CoreWorkloadInfo { + core: number; + info: PalletBrokerScheduleItem[]; +} diff --git a/packages/page-coretime/src/useWorkloadInfos.ts b/packages/page-coretime/src/useWorkloadInfos.ts new file mode 100644 index 000000000000..0c0ace3cc3e1 --- /dev/null +++ b/packages/page-coretime/src/useWorkloadInfos.ts @@ -0,0 +1,47 @@ +// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { useEffect, useState } from 'react'; +import type { StorageKey, u16 } from '@polkadot/types'; + +import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; +import { CoreWorkloadInfo } from './types.js'; +import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; +import type { BN } from '@polkadot/util'; + +function extractInfo (info: PalletBrokerScheduleItem[], core: number): CoreWorkloadInfo { + console.log('cored', core) + console.log('unfod', info) + return { + core, + info + }; +} + +const OPT_KEY = { + transform: (keys: StorageKey<[u16]>[]): u16[] => + keys.map(({ args: [core] }) => core) +}; + +function useWorkloadInfosImpl (): CoreWorkloadInfo[] | undefined { + const { api } = useApi(); + const cores = useMapKeys(api.query.broker.workload, [], OPT_KEY) + const workloadInfo = useCall<[[BN[]], PalletBrokerScheduleItem[]]>(api.query.broker.workload.multi, [cores], {withParams: true} ); + const [state, setState] = useState(); + console.log(workloadInfo) + + useEffect((): void => { + + workloadInfo && + setState( + workloadInfo[0][0].map((info, index) => + extractInfo(workloadInfo[1][index] as unknown as PalletBrokerScheduleItem[], info.toNumber()) + ) + ); + }, [workloadInfo]); + + return state; +} + +export default createNamedHook('useWorkloadInfos', useWorkloadInfosImpl); + diff --git a/packages/page-coretime/tsconfig.build.json b/packages/page-coretime/tsconfig.build.json new file mode 100644 index 000000000000..5edd804731f0 --- /dev/null +++ b/packages/page-coretime/tsconfig.build.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "..", + "outDir": "./build", + "rootDir": "./src" + }, + "references": [ + { "path": "../apps-config/tsconfig.build.json" }, + { "path": "../page-explorer/tsconfig.build.json" }, + { "path": "../react-components/tsconfig.build.json" } + ] +} diff --git a/packages/react-query/src/BrokerStatus.tsx b/packages/react-query/src/BrokerStatus.tsx new file mode 100644 index 000000000000..ef43cfaf77c7 --- /dev/null +++ b/packages/react-query/src/BrokerStatus.tsx @@ -0,0 +1,29 @@ +// Copyright 2017-2024 @polkadot/react-query authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; +import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; + +import { useApi, useCall } from '@polkadot/react-hooks'; + +interface Props { + children?: React.ReactNode; + className?: string; + query: string; +} + +function BrokerStatus({ children, className = '', query }: Props): React.ReactElement { + const { api } = useApi(); + const status = useCall(api.query.broker?.status); + const strStatus = status === undefined ? '' : status.toJSON()[query] + + return ( +
+ {strStatus?.toString()} + {children} +
+ ); +} + +export default React.memo(BrokerStatus); + diff --git a/packages/react-query/src/PoolSize.tsx b/packages/react-query/src/PoolSize.tsx new file mode 100644 index 000000000000..3a7eafb1df4b --- /dev/null +++ b/packages/react-query/src/PoolSize.tsx @@ -0,0 +1,38 @@ +// Copyright 2017-2024 @polkadot/react-query authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; +import { useApi, useCall } from '@polkadot/react-hooks'; +import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; + +interface Props { + children?: React.ReactNode; + className?: string; +} + +function PoolSize({ children, className = '' }: Props): React.ReactElement { + + const { api } = useApi(); + const status = useCall(api.query.broker?.status); + let systemPool: number = 0; + let privatePool: number = 0; + let poolSize: string = ''; + if (status === undefined ){ + poolSize = '0'; + } else { + systemPool = status.toJSON()['systemPoolSize'] as number; + privatePool = status.toJSON()['systemPoolSize'] as number; + poolSize = (systemPool + privatePool).toString(); + } + + return ( +
+ {poolSize} + {children} +
+ ); + +} + +export default React.memo(PoolSize); + diff --git a/packages/react-query/src/index.ts b/packages/react-query/src/index.ts index 6d92730788e1..7171af444a24 100644 --- a/packages/react-query/src/index.ts +++ b/packages/react-query/src/index.ts @@ -19,3 +19,5 @@ export { default as SessionToTime } from './SessionToTime.js'; export { default as TimeNow } from './TimeNow.js'; export { default as TotalInactive } from './TotalInactive.js'; export { default as TotalIssuance } from './TotalIssuance.js'; +export { default as BrokerStatus } from './BrokerStatus.js'; +export { default as PoolSize} from './PoolSize.js'; diff --git a/tsconfig.base.json b/tsconfig.base.json index 1cd6767401e8..10469b8fffc4 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -24,6 +24,7 @@ "@polkadot/app-addresses": ["page-addresses/src/index.tsx"], "@polkadot/app-alliance": ["page-alliance/src/index.tsx"], "@polkadot/app-assets": ["page-assets/src/index.tsx"], + "@polkadot/app-coretime": ["page-coretime/src/index.tsx"], "@polkadot/app-bounties": ["page-bounties/src/index.tsx"], "@polkadot/app-calendar": ["page-calendar/src/index.tsx"], "@polkadot/app-claims": ["page-claims/src/index.tsx"], From eca60ec9654084c840e36ca6915ae50118d20aeb Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 25 Mar 2024 10:51:56 -0300 Subject: [PATCH 02/56] sanitized task --- packages/page-coretime/src/Overview/Workload.tsx | 5 ++++- packages/page-coretime/src/Overview/Workloads.tsx | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/page-coretime/src/Overview/Workload.tsx b/packages/page-coretime/src/Overview/Workload.tsx index 99f9bd5c5e15..bcb9b861fb3a 100644 --- a/packages/page-coretime/src/Overview/Workload.tsx +++ b/packages/page-coretime/src/Overview/Workload.tsx @@ -17,11 +17,14 @@ function Workload ({ className, value: { core, info } }: Props): React.ReactElem console.log('info', info.toString()) console.log('assignment', info[0]['assignment'].toString()) + + const sanitizedAssignment = info[0]['assignment']['isTask'] ? info[0]['assignment']['asTask'] : info[0]['assignment']; + return ( {info[0]['mask'].toString()} - {info[0]['assignment'].toString()} + {sanitizedAssignment.toString()} ); } diff --git a/packages/page-coretime/src/Overview/Workloads.tsx b/packages/page-coretime/src/Overview/Workloads.tsx index 64d0e779ae91..edc788f9a849 100644 --- a/packages/page-coretime/src/Overview/Workloads.tsx +++ b/packages/page-coretime/src/Overview/Workloads.tsx @@ -25,6 +25,7 @@ function Workloads ({ className, infos }: Props): React.ReactElement { [t('assignment'), 'start media--1600'], [] ]); + infos?.sort((a, b) => a.core - b.core); return ( Date: Tue, 26 Mar 2024 08:58:46 -0300 Subject: [PATCH 03/56] added workplan table --- .../page-coretime/src/Overview/Workload.tsx | 7 +-- .../page-coretime/src/Overview/Workloads.tsx | 16 ++++--- .../page-coretime/src/Overview/Workplan.tsx | 31 ++++++++++++ .../page-coretime/src/Overview/Workplans.tsx | 48 +++++++++++++++++++ packages/page-coretime/src/Overview/index.tsx | 12 +++-- 5 files changed, 97 insertions(+), 17 deletions(-) create mode 100644 packages/page-coretime/src/Overview/Workplans.tsx diff --git a/packages/page-coretime/src/Overview/Workload.tsx b/packages/page-coretime/src/Overview/Workload.tsx index bcb9b861fb3a..7851652524be 100644 --- a/packages/page-coretime/src/Overview/Workload.tsx +++ b/packages/page-coretime/src/Overview/Workload.tsx @@ -13,17 +13,14 @@ interface Props { } function Workload ({ className, value: { core, info } }: Props): React.ReactElement { - console.log('core', core) - - console.log('info', info.toString()) - console.log('assignment', info[0]['assignment'].toString()) + const maskAsPerc = info[0]['mask'].bitLength() / 80 * 100; const sanitizedAssignment = info[0]['assignment']['isTask'] ? info[0]['assignment']['asTask'] : info[0]['assignment']; return ( - + ); diff --git a/packages/page-coretime/src/Overview/Workloads.tsx b/packages/page-coretime/src/Overview/Workloads.tsx index edc788f9a849..a13efa895a6e 100644 --- a/packages/page-coretime/src/Overview/Workloads.tsx +++ b/packages/page-coretime/src/Overview/Workloads.tsx @@ -13,10 +13,10 @@ import Workload from './Workload.js'; interface Props { className?: string; - infos?: CoreWorkloadInfo[]; + workloadInfos?: CoreWorkloadInfo[]; } -function Workloads ({ className, infos }: Props): React.ReactElement { +function Workloads ({ className, workloadInfos }: Props): React.ReactElement { const { t } = useTranslation(); const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ @@ -25,18 +25,20 @@ function Workloads ({ className, infos }: Props): React.ReactElement { [t('assignment'), 'start media--1600'], [] ]); - infos?.sort((a, b) => a.core - b.core); + + workloadInfos?.sort((a, b) => a.core - b.core); + return (
{info[0]['mask'].toString()}{`${maskAsPerc} %`} {sanitizedAssignment.toString()}
- {infos?.map((info) => ( + {workloadInfos?.map((workloadInfo) => ( ))}
diff --git a/packages/page-coretime/src/Overview/Workplan.tsx b/packages/page-coretime/src/Overview/Workplan.tsx index e69de29bb2d1..4bd5a0ec05b8 100644 --- a/packages/page-coretime/src/Overview/Workplan.tsx +++ b/packages/page-coretime/src/Overview/Workplan.tsx @@ -0,0 +1,31 @@ +// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { CoreWorkplanInfo } from '../types.js'; + +import React from 'react'; + +import { Table } from '@polkadot/react-components'; + +interface Props { + className?: string; + value: CoreWorkplanInfo; +} + +function Workload ({ className, value: { core, timeslice, info } }: Props): React.ReactElement { + + const maskAsPerc = info[0]['mask'].bitLength() / 80 * 100; + + const sanitizedAssignment = info[0]['assignment']['isTask'] ? info[0]['assignment']['asTask'] : info[0]['assignment']; + + return ( + + + {`${maskAsPerc} %`} + {sanitizedAssignment.toString()} + {timeslice.toString()} + + ); +} + +export default React.memo(Workload); diff --git a/packages/page-coretime/src/Overview/Workplans.tsx b/packages/page-coretime/src/Overview/Workplans.tsx new file mode 100644 index 000000000000..538d8dabf885 --- /dev/null +++ b/packages/page-coretime/src/Overview/Workplans.tsx @@ -0,0 +1,48 @@ +// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// SPDX-License-Identifier: Apache-2.0 +import { CoreWorkplanInfo } from '../types.js' + +import React, { useRef } from 'react'; + +import { Table } from '@polkadot/react-components'; + +import { useTranslation } from '../translate.js'; +import Workplan from './Workplan.js'; + + + +interface Props { + className?: string; + workplanInfos?: CoreWorkplanInfo[]; +} + +function Workplans ({ className, workplanInfos }: Props): React.ReactElement { + const { t } = useTranslation(); + + const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ + [t('workplan'), 'start', 1], + [t('mask'), 'start media--1600'], + [t('assignment'), 'start media--1600'], + [t('timeslice'), 'start media--1900'], + [] + ]); + + workplanInfos?.sort((a, b) => a.core - b.core); + + return ( + + {workplanInfos?.map((workplanInfo) => ( + + ))} +
+ ); +} + +export default React.memo(Workplans); diff --git a/packages/page-coretime/src/Overview/index.tsx b/packages/page-coretime/src/Overview/index.tsx index 0e0b3a0707a5..bdf6706da2d5 100644 --- a/packages/page-coretime/src/Overview/index.tsx +++ b/packages/page-coretime/src/Overview/index.tsx @@ -2,20 +2,22 @@ import Summary from './Summary.js'; import React from 'react'; import Workloads from './Workloads.js'; -import { CoreWorkloadInfo } from '../types.js'; +import Workplans from './Workplans.js'; +import { CoreWorkloadInfo, CoreWorkplanInfo } from '../types.js'; interface Props { className?: string; - infos?: CoreWorkloadInfo[]; + workloadInfos?: CoreWorkloadInfo[]; + workplanInfos?: CoreWorkplanInfo[]; } -function Overview ({ className, infos }: Props): React.ReactElement { - console.log('timeslice', Summary) +function Overview ({ className, workloadInfos, workplanInfos }: Props): React.ReactElement { return (
- + +
) } From 2375c96ea992f4b8448c80d4afce2ab9c0e0cbbb Mon Sep 17 00:00:00 2001 From: bee344 Date: Tue, 26 Mar 2024 09:05:20 -0300 Subject: [PATCH 04/56] staged missing files --- packages/page-coretime/src/index.tsx | 8 +-- packages/page-coretime/src/types.ts | 7 +-- .../page-coretime/src/useWorkloadInfos.ts | 6 +-- .../page-coretime/src/useWorkplanInfos.ts | 51 +++++++++++++++++++ 4 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 packages/page-coretime/src/useWorkplanInfos.ts diff --git a/packages/page-coretime/src/index.tsx b/packages/page-coretime/src/index.tsx index 997a7afab328..c16635367b47 100644 --- a/packages/page-coretime/src/index.tsx +++ b/packages/page-coretime/src/index.tsx @@ -10,6 +10,7 @@ import { Tabs } from '@polkadot/react-components'; import { useTranslation } from './translate.js'; import Overview from './Overview/index.js'; import useWorkloadInfos from './useWorkloadInfos.js'; +import useWorkplanInfos from './useWorkplanInfos.js'; interface Props { basePath: string; @@ -30,8 +31,8 @@ function createItemsRef(t: (key: string, options?: { replace: Record { const { t } = useTranslation(); const itemsRef = useRef(createItemsRef(t)); - console.log('coretime overview') - const infos = useWorkloadInfos(); + const workloadInfos = useWorkloadInfos(); + const workplanInfos = useWorkplanInfos(); return (
@@ -39,7 +40,8 @@ function CoretimeApp({ basePath, className }: Props): React.ReactElement basePath={basePath} items={itemsRef.current} /> - +
); } diff --git a/packages/page-coretime/src/types.ts b/packages/page-coretime/src/types.ts index 9c9c1bf40b39..d6c41098c9d1 100644 --- a/packages/page-coretime/src/types.ts +++ b/packages/page-coretime/src/types.ts @@ -3,12 +3,13 @@ import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; -export interface WorkloadInfo { +export interface CoreWorkloadInfo { core: number; - info: PalletBrokerScheduleItem[] + info: PalletBrokerScheduleItem[]; } -export interface CoreWorkloadInfo { +export interface CoreWorkplanInfo { + timeslice: number; core: number; info: PalletBrokerScheduleItem[]; } diff --git a/packages/page-coretime/src/useWorkloadInfos.ts b/packages/page-coretime/src/useWorkloadInfos.ts index 0c0ace3cc3e1..7b30c8df606c 100644 --- a/packages/page-coretime/src/useWorkloadInfos.ts +++ b/packages/page-coretime/src/useWorkloadInfos.ts @@ -10,8 +10,8 @@ import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; import type { BN } from '@polkadot/util'; function extractInfo (info: PalletBrokerScheduleItem[], core: number): CoreWorkloadInfo { - console.log('cored', core) - console.log('unfod', info) + console.log('workloadinf', info) + return { core, info @@ -28,8 +28,6 @@ function useWorkloadInfosImpl (): CoreWorkloadInfo[] | undefined { const cores = useMapKeys(api.query.broker.workload, [], OPT_KEY) const workloadInfo = useCall<[[BN[]], PalletBrokerScheduleItem[]]>(api.query.broker.workload.multi, [cores], {withParams: true} ); const [state, setState] = useState(); - console.log(workloadInfo) - useEffect((): void => { workloadInfo && diff --git a/packages/page-coretime/src/useWorkplanInfos.ts b/packages/page-coretime/src/useWorkplanInfos.ts new file mode 100644 index 000000000000..e4c36cad73da --- /dev/null +++ b/packages/page-coretime/src/useWorkplanInfos.ts @@ -0,0 +1,51 @@ +// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { useEffect, useState } from 'react'; +import type { StorageKey, u16, u32, Option } from '@polkadot/types'; + +import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; +import { CoreWorkplanInfo } from './types.js'; +import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; + +function extractInfo(info: PalletBrokerScheduleItem[], timeslice: number, core: number) { + console.log('inf', info) + return { + timeslice, + core, + info, + }; +} + +const OPT_KEY = { + transform: (keys: StorageKey<[u32, u16]>[]): [u32, u16][] => + keys.map(({ args: [timeslice, core] }) => [timeslice, core]) +}; + +function useWorkplanInfosImpl(): CoreWorkplanInfo[] | undefined { + const { api } = useApi(); + const workplanKeys = useMapKeys(api.query.broker.workplan, [], OPT_KEY); + + const sanitizedKeys = workplanKeys?.map((value) => { + return value[0]; + }) + + + const workplanInfo = useCall<[[[u32, u16][]], Option[]]>(api.query.broker.workplan.multi, [sanitizedKeys], { withParams: true }); + + const [state, setState] = useState(); + useEffect((): void => { + + workplanInfo && workplanInfo[1] && + setState( + workplanInfo[0][0].map((info, index) => + extractInfo(workplanInfo[1][index].unwrap() as unknown as PalletBrokerScheduleItem[], info[0].toNumber(), info[1].toNumber()) + ) + ); + }, [workplanInfo]); + + return state; +} + +export default createNamedHook('useWorkplanInfos', useWorkplanInfosImpl); + From a5be44ffb7425875203276b325c5a30b6b61acdf Mon Sep 17 00:00:00 2001 From: bee344 Date: Wed, 3 Apr 2024 10:26:22 -0300 Subject: [PATCH 05/56] updated filters --- packages/apps-routing/src/coretime.ts | 4 +- packages/apps-routing/src/index.ts | 2 +- packages/page-assets/src/Overview/Asset.tsx | 1 - packages/page-coretime/src/Overview/Cores.tsx | 10 +- packages/page-coretime/src/Overview/Pools.tsx | 12 +- .../page-coretime/src/Overview/Summary.tsx | 3 +- .../page-coretime/src/Overview/Timeslice.tsx | 13 +- .../page-coretime/src/Overview/Workload.tsx | 20 ++- .../page-coretime/src/Overview/Workloads.tsx | 23 +-- .../page-coretime/src/Overview/Workplan.tsx | 9 +- .../page-coretime/src/Overview/Workplans.tsx | 23 +-- packages/page-coretime/src/Overview/index.tsx | 145 +++++++++++++++++- packages/page-coretime/src/index.tsx | 14 +- .../page-coretime/src/useWorkloadInfos.ts | 17 +- .../page-coretime/src/useWorkplanInfos.ts | 18 +-- packages/react-query/src/BrokerStatus.tsx | 8 +- packages/react-query/src/PoolSize.tsx | 22 +-- packages/react-query/src/index.ts | 4 +- 18 files changed, 256 insertions(+), 92 deletions(-) diff --git a/packages/apps-routing/src/coretime.ts b/packages/apps-routing/src/coretime.ts index a6ad45f0d0f4..caba0df9ded3 100644 --- a/packages/apps-routing/src/coretime.ts +++ b/packages/apps-routing/src/coretime.ts @@ -15,8 +15,8 @@ export default function create (t: TFunction): Route { needsApiInstances: true }, group: 'network', - icon: 'building', + icon: 'calendar-clock', name: 'coretime', - text: t('nav.coretime', 'Coretime', { ns: 'app-coretime' }), + text: t('nav.coretime', 'Coretime (Experimental)', { ns: 'app-coretime' }) }; } diff --git a/packages/apps-routing/src/index.ts b/packages/apps-routing/src/index.ts index f571579ca5f0..db95396692b4 100644 --- a/packages/apps-routing/src/index.ts +++ b/packages/apps-routing/src/index.ts @@ -12,6 +12,7 @@ import calendar from './calendar.js'; import claims from './claims.js'; import collator from './collator.js'; import contracts from './contracts.js'; +import coretime from './coretime.js'; import council from './council.js'; import democracy from './democracy.js'; import explorer from './explorer.js'; @@ -44,7 +45,6 @@ import transfer from './transfer.js'; import treasury from './treasury.js'; import utilities from './utilities.js'; import whitelist from './whitelist.js'; -import coretime from './coretime.js'; export default function create (t: TFunction): Routes { return [ diff --git a/packages/page-assets/src/Overview/Asset.tsx b/packages/page-assets/src/Overview/Asset.tsx index d60f669901e3..cda1193fb08b 100644 --- a/packages/page-assets/src/Overview/Asset.tsx +++ b/packages/page-assets/src/Overview/Asset.tsx @@ -22,7 +22,6 @@ function Asset ({ className, value: { details, id, isIssuerMe, metadata } }: Pro : [0, '---'], [metadata] ); - console.log(metadata?.name.toUtf8()) return ( diff --git a/packages/page-coretime/src/Overview/Cores.tsx b/packages/page-coretime/src/Overview/Cores.tsx index 3fc938887bae..6f2130ac8a99 100644 --- a/packages/page-coretime/src/Overview/Cores.tsx +++ b/packages/page-coretime/src/Overview/Cores.tsx @@ -1,4 +1,8 @@ +// [object Object] +// SPDX-License-Identifier: Apache-2.0 + import React from 'react'; + import { BrokerStatus } from '@polkadot/react-query'; interface Props { @@ -6,12 +10,12 @@ interface Props { className?: string; } -function Cores({ children, className }: Props): React.ReactElement | null { - +function Cores ({ children, className }: Props): React.ReactElement | null { return ( + query='coreCount' + > {children} ); diff --git a/packages/page-coretime/src/Overview/Pools.tsx b/packages/page-coretime/src/Overview/Pools.tsx index 449dee816e44..9b7fd169aae3 100644 --- a/packages/page-coretime/src/Overview/Pools.tsx +++ b/packages/page-coretime/src/Overview/Pools.tsx @@ -1,6 +1,11 @@ -import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; +// [object Object] +// SPDX-License-Identifier: Apache-2.0 + import type { u32 } from '@polkadot/types'; +import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; + import React from 'react'; + import { PoolSize } from '@polkadot/react-query'; interface Props { @@ -10,10 +15,11 @@ interface Props { lastTimeslice?: u32 | null; } -function Pools({ children, className }: Props): React.ReactElement | null { +function Pools ({ children, className }: Props): React.ReactElement | null { return ( + className={className} + > {children} ); diff --git a/packages/page-coretime/src/Overview/Summary.tsx b/packages/page-coretime/src/Overview/Summary.tsx index acbdfe50a363..e7d8345119a0 100644 --- a/packages/page-coretime/src/Overview/Summary.tsx +++ b/packages/page-coretime/src/Overview/Summary.tsx @@ -6,11 +6,10 @@ import React from 'react'; import { CardSummary, SummaryBox } from '@polkadot/react-components'; import { useApi } from '@polkadot/react-hooks'; -import Timeslice from './Timeslice.js'; import { useTranslation } from '../translate.js'; import Cores from './Cores.js'; import Pools from './Pools.js'; - +import Timeslice from './Timeslice.js'; function Summary (): React.ReactElement { const { t } = useTranslation(); diff --git a/packages/page-coretime/src/Overview/Timeslice.tsx b/packages/page-coretime/src/Overview/Timeslice.tsx index 60e28c12a9b9..7f1985a96d77 100644 --- a/packages/page-coretime/src/Overview/Timeslice.tsx +++ b/packages/page-coretime/src/Overview/Timeslice.tsx @@ -1,6 +1,11 @@ -import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; +// [object Object] +// SPDX-License-Identifier: Apache-2.0 + import type { u32 } from '@polkadot/types'; +import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; + import React from 'react'; + import { BrokerStatus } from '@polkadot/react-query'; interface Props { @@ -10,12 +15,12 @@ interface Props { lastTimeslice?: u32 | null; } -function Timeslice({ children, className }: Props): React.ReactElement | null { - +function Timeslice ({ children, className }: Props): React.ReactElement | null { return ( + query='lastTimeslice' + > {children} ); diff --git a/packages/page-coretime/src/Overview/Workload.tsx b/packages/page-coretime/src/Overview/Workload.tsx index 7851652524be..fb1eddfde803 100644 --- a/packages/page-coretime/src/Overview/Workload.tsx +++ b/packages/page-coretime/src/Overview/Workload.tsx @@ -12,10 +12,24 @@ interface Props { value: CoreWorkloadInfo; } -function Workload ({ className, value: { core, info } }: Props): React.ReactElement { - const maskAsPerc = info[0]['mask'].bitLength() / 80 * 100; +function hexToBin(hex: string): string { + return parseInt(hex, 16).toString(2); +} + + +function Workload({ className, value: { core, info } }: Props): React.ReactElement { + const maskAsPerc = info[0].mask.bitLength() / 80 * 100; + const trimmedHex: string = info[0].mask.toHex().slice(2); + const arr: string[] = trimmedHex.split(""); + + let buffArr: string = ''; + + arr.forEach((bit) => { + buffArr = buffArr.concat(hexToBin(bit)) + }) + - const sanitizedAssignment = info[0]['assignment']['isTask'] ? info[0]['assignment']['asTask'] : info[0]['assignment']; + const sanitizedAssignment = info[0].assignment.isTask ? info[0].assignment.asTask : info[0].assignment; return ( diff --git a/packages/page-coretime/src/Overview/Workloads.tsx b/packages/page-coretime/src/Overview/Workloads.tsx index a13efa895a6e..3c6539d55c80 100644 --- a/packages/page-coretime/src/Overview/Workloads.tsx +++ b/packages/page-coretime/src/Overview/Workloads.tsx @@ -1,6 +1,6 @@ // Copyright 2017-2024 @polkadot/app-assets authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { CoreWorkloadInfo } from '../types.js' +import type { CoreWorkloadInfo } from '../types.js'; import React, { useRef } from 'react'; @@ -9,25 +9,27 @@ import { Table } from '@polkadot/react-components'; import { useTranslation } from '../translate.js'; import Workload from './Workload.js'; - - interface Props { className?: string; - workloadInfos?: CoreWorkloadInfo[]; + workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo; } function Workloads ({ className, workloadInfos }: Props): React.ReactElement { const { t } = useTranslation(); + let sanitized:CoreWorkloadInfo[] = []; const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ [t('workload'), 'start', 1], [t('mask'), 'start media--1300'], [t('assignment'), 'start media--1600'], - [] ]); + if (Array.isArray(workloadInfos)) { + sanitized = workloadInfos + } else if (workloadInfos) { + sanitized.push(workloadInfos) + } - workloadInfos?.sort((a, b) => a.core - b.core); - + sanitized?.sort((a, b) => a.core - b.core); return ( - {workloadInfos?.map((workloadInfo) => ( + + {sanitized?.map((v) => ( ))}
diff --git a/packages/page-coretime/src/Overview/Workplan.tsx b/packages/page-coretime/src/Overview/Workplan.tsx index 4bd5a0ec05b8..d1f30a483d6e 100644 --- a/packages/page-coretime/src/Overview/Workplan.tsx +++ b/packages/page-coretime/src/Overview/Workplan.tsx @@ -12,16 +12,15 @@ interface Props { value: CoreWorkplanInfo; } -function Workload ({ className, value: { core, timeslice, info } }: Props): React.ReactElement { +function Workload ({ className, value: { core, info, timeslice } }: Props): React.ReactElement { + const maskAsPerc = info[0].mask.bitLength() / 80 * 100; - const maskAsPerc = info[0]['mask'].bitLength() / 80 * 100; - - const sanitizedAssignment = info[0]['assignment']['isTask'] ? info[0]['assignment']['asTask'] : info[0]['assignment']; + const sanitizedAssignment = info[0].assignment.isTask ? info[0].assignment.asTask : info[0].assignment; return ( - {`${maskAsPerc} %`} + {`${maskAsPerc} %`} {sanitizedAssignment.toString()} {timeslice.toString()} diff --git a/packages/page-coretime/src/Overview/Workplans.tsx b/packages/page-coretime/src/Overview/Workplans.tsx index 538d8dabf885..0b95341ece0a 100644 --- a/packages/page-coretime/src/Overview/Workplans.tsx +++ b/packages/page-coretime/src/Overview/Workplans.tsx @@ -1,6 +1,6 @@ // Copyright 2017-2024 @polkadot/app-assets authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { CoreWorkplanInfo } from '../types.js' +import type { CoreWorkplanInfo } from '../types.js'; import React, { useRef } from 'react'; @@ -9,33 +9,38 @@ import { Table } from '@polkadot/react-components'; import { useTranslation } from '../translate.js'; import Workplan from './Workplan.js'; - - interface Props { className?: string; - workplanInfos?: CoreWorkplanInfo[]; + filteredWorkplan?: CoreWorkplanInfo[] | CoreWorkplanInfo; } -function Workplans ({ className, workplanInfos }: Props): React.ReactElement { +function Workplans({ className, filteredWorkplan }: Props): React.ReactElement { const { t } = useTranslation(); + let sanitized: CoreWorkplanInfo[] = []; + + if (Array.isArray(filteredWorkplan)) { + sanitized = filteredWorkplan + } else if (filteredWorkplan) { + sanitized.push(filteredWorkplan) + } const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ [t('workplan'), 'start', 1], [t('mask'), 'start media--1600'], [t('assignment'), 'start media--1600'], [t('timeslice'), 'start media--1900'], - [] ]); - workplanInfos?.sort((a, b) => a.core - b.core); + sanitized?.sort((a, b) => a.core - b.core); return ( - {workplanInfos?.map((workplanInfo) => ( + + {sanitized?.map((workplanInfo) => ( { +function uniqByForEach(array: CoreWorkplanInfo[] | undefined) { + const workplanCores: number[] = []; + const workplanTS: number[] = []; + if (array) { + array.forEach((item) => { + if (!workplanCores.includes(item.core)) { + workplanCores.push(item.core); + } + if (!workplanTS.includes(item.timeslice)) { + workplanTS.push(item.timeslice); + } + }) + return { workplanCores, workplanTS }; + } else { + return { workplanCores: [], workplanTS: [] } + } +} + +function Overview({ className, workloadInfos, workplanInfos }: Props): React.ReactElement { + const { t } = useTranslation(); + + const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); + const [workplanCoreSelected, setWorkplanCoreSelected] = useState(-1); + const [workplanSliceSelected, setWorkplanSliceSelected] = useState(-1); + + const workloadCores = workloadInfos?.length; + let coreArr: number[] = []; + + const len = workloadCores ? workloadCores : 0; + + Array(len).fill(0).map((_, index) => { + coreArr.push(index) + }); + + const { workplanCores, workplanTS } = uniqByForEach(workplanInfos) + workplanCores?.sort((a, b) => a - b); + workplanTS?.sort((a, b) => a - b); + + const workloadCoreOpts = useMemo( + () => [{ text: t('All active/available cores'), value: -1 }].concat( + coreArr + .map((c) => ({ + text: `Core ${c}`, + value: c + })) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [coreArr, t] + ); + const filteredWLC = useMemo( + () => { + return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected) + }, + [workloadInfos, workloadCoreSelected] + ); + const workplanCoreOpts = useMemo( + () => [{ text: t('All scehduled cores'), value: -1 }].concat( + workplanCores + .map((c) => ({ + text: `Core ${c}`, + value: c + })) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [workplanCores, t] + ); + + const filteredWorkplan = useMemo( + () => { + if (workplanCoreSelected === workplanSliceSelected) { + return workplanInfos + } else if (workplanCoreSelected === -1) { + return workplanInfos?.filter(({ timeslice }) => timeslice === workplanSliceSelected) + } else if (workplanSliceSelected === -1) { + return workplanInfos?.filter(({ core }) => core === workplanCoreSelected) + } else { + return workplanInfos?.filter(({ core, timeslice }) => core === workplanCoreSelected && timeslice === workplanSliceSelected) + } + } + , + [workplanInfos, workplanCoreSelected, workplanSliceSelected] + ); + + const workplanTSOpts = useMemo( + () => [{ text: t('All available slices'), value: -1 }].concat( + workplanTS + .map((ts) => ({ + text: `Timeslice ${ts}`, + value: ts + })) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [workplanTS, t] + ); return (
- - + + + + + + + + + + + + +
- ) + ); } export default React.memo(Overview); diff --git a/packages/page-coretime/src/index.tsx b/packages/page-coretime/src/index.tsx index c16635367b47..8a1ad8605b9b 100644 --- a/packages/page-coretime/src/index.tsx +++ b/packages/page-coretime/src/index.tsx @@ -7,8 +7,8 @@ import React, { useRef } from 'react'; import { Tabs } from '@polkadot/react-components'; -import { useTranslation } from './translate.js'; import Overview from './Overview/index.js'; +import { useTranslation } from './translate.js'; import useWorkloadInfos from './useWorkloadInfos.js'; import useWorkplanInfos from './useWorkplanInfos.js'; @@ -17,8 +17,8 @@ interface Props { className?: string; } -function createItemsRef(t: (key: string, options?: { replace: Record }) => string): TabItem[] { - console.log('creation') +function createItemsRef (t: (key: string, options?: { replace: Record }) => string): TabItem[] { + return [ { isRoot: true, @@ -28,7 +28,7 @@ function createItemsRef(t: (key: string, options?: { replace: Record { +function CoretimeApp ({ basePath, className }: Props): React.ReactElement { const { t } = useTranslation(); const itemsRef = useRef(createItemsRef(t)); const workloadInfos = useWorkloadInfos(); @@ -40,8 +40,10 @@ function CoretimeApp({ basePath, className }: Props): React.ReactElement basePath={basePath} items={itemsRef.current} /> - + ); } diff --git a/packages/page-coretime/src/useWorkloadInfos.ts b/packages/page-coretime/src/useWorkloadInfos.ts index 7b30c8df606c..9d4f0febcd63 100644 --- a/packages/page-coretime/src/useWorkloadInfos.ts +++ b/packages/page-coretime/src/useWorkloadInfos.ts @@ -1,16 +1,16 @@ // Copyright 2017-2024 @polkadot/app-assets authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { useEffect, useState } from 'react'; import type { StorageKey, u16 } from '@polkadot/types'; - -import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; -import { CoreWorkloadInfo } from './types.js'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; import type { BN } from '@polkadot/util'; +import type { CoreWorkloadInfo } from './types.js'; + +import { useEffect, useState } from 'react'; + +import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; function extractInfo (info: PalletBrokerScheduleItem[], core: number): CoreWorkloadInfo { - console.log('workloadinf', info) return { core, @@ -25,11 +25,11 @@ const OPT_KEY = { function useWorkloadInfosImpl (): CoreWorkloadInfo[] | undefined { const { api } = useApi(); - const cores = useMapKeys(api.query.broker.workload, [], OPT_KEY) - const workloadInfo = useCall<[[BN[]], PalletBrokerScheduleItem[]]>(api.query.broker.workload.multi, [cores], {withParams: true} ); + const cores = useMapKeys(api.query.broker.workload, [], OPT_KEY); + const workloadInfo = useCall<[[BN[]], PalletBrokerScheduleItem[]]>(api.query.broker.workload.multi, [cores], { withParams: true }); const [state, setState] = useState(); - useEffect((): void => { + useEffect((): void => { workloadInfo && setState( workloadInfo[0][0].map((info, index) => @@ -42,4 +42,3 @@ function useWorkloadInfosImpl (): CoreWorkloadInfo[] | undefined { } export default createNamedHook('useWorkloadInfos', useWorkloadInfosImpl); - diff --git a/packages/page-coretime/src/useWorkplanInfos.ts b/packages/page-coretime/src/useWorkplanInfos.ts index e4c36cad73da..fd72693bdf66 100644 --- a/packages/page-coretime/src/useWorkplanInfos.ts +++ b/packages/page-coretime/src/useWorkplanInfos.ts @@ -1,19 +1,19 @@ // Copyright 2017-2024 @polkadot/app-assets authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { Option, StorageKey, u16, u32 } from '@polkadot/types'; +import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; +import type { CoreWorkplanInfo } from './types.js'; + import { useEffect, useState } from 'react'; -import type { StorageKey, u16, u32, Option } from '@polkadot/types'; import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; -import { CoreWorkplanInfo } from './types.js'; -import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; function extractInfo(info: PalletBrokerScheduleItem[], timeslice: number, core: number) { - console.log('inf', info) return { - timeslice, core, info, + timeslice }; } @@ -28,15 +28,14 @@ function useWorkplanInfosImpl(): CoreWorkplanInfo[] | undefined { const sanitizedKeys = workplanKeys?.map((value) => { return value[0]; - }) - + }); const workplanInfo = useCall<[[[u32, u16][]], Option[]]>(api.query.broker.workplan.multi, [sanitizedKeys], { withParams: true }); const [state, setState] = useState(); - useEffect((): void => { - workplanInfo && workplanInfo[1] && + useEffect((): void => { + workplanInfo?.[1] && setState( workplanInfo[0][0].map((info, index) => extractInfo(workplanInfo[1][index].unwrap() as unknown as PalletBrokerScheduleItem[], info[0].toNumber(), info[1].toNumber()) @@ -48,4 +47,3 @@ function useWorkplanInfosImpl(): CoreWorkplanInfo[] | undefined { } export default createNamedHook('useWorkplanInfos', useWorkplanInfosImpl); - diff --git a/packages/react-query/src/BrokerStatus.tsx b/packages/react-query/src/BrokerStatus.tsx index ef43cfaf77c7..93bb71e05b3c 100644 --- a/packages/react-query/src/BrokerStatus.tsx +++ b/packages/react-query/src/BrokerStatus.tsx @@ -1,9 +1,10 @@ // Copyright 2017-2024 @polkadot/react-query authors & contributors // SPDX-License-Identifier: Apache-2.0 -import React from 'react'; import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; +import React from 'react'; + import { useApi, useCall } from '@polkadot/react-hooks'; interface Props { @@ -12,10 +13,10 @@ interface Props { query: string; } -function BrokerStatus({ children, className = '', query }: Props): React.ReactElement { +function BrokerStatus ({ children, className = '', query }: Props): React.ReactElement { const { api } = useApi(); const status = useCall(api.query.broker?.status); - const strStatus = status === undefined ? '' : status.toJSON()[query] + const strStatus = status === undefined ? '' : status.toJSON()[query]; return (
@@ -26,4 +27,3 @@ function BrokerStatus({ children, className = '', query }: Props): React.ReactEl } export default React.memo(BrokerStatus); - diff --git a/packages/react-query/src/PoolSize.tsx b/packages/react-query/src/PoolSize.tsx index 3a7eafb1df4b..04cd041d50e5 100644 --- a/packages/react-query/src/PoolSize.tsx +++ b/packages/react-query/src/PoolSize.tsx @@ -1,27 +1,29 @@ // Copyright 2017-2024 @polkadot/react-query authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; + import React from 'react'; + import { useApi, useCall } from '@polkadot/react-hooks'; -import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; interface Props { children?: React.ReactNode; className?: string; } -function PoolSize({ children, className = '' }: Props): React.ReactElement { - +function PoolSize ({ children, className = '' }: Props): React.ReactElement { const { api } = useApi(); const status = useCall(api.query.broker?.status); - let systemPool: number = 0; - let privatePool: number = 0; - let poolSize: string = ''; - if (status === undefined ){ + let systemPool = 0; + let privatePool = 0; + let poolSize = ''; + + if (status === undefined) { poolSize = '0'; } else { - systemPool = status.toJSON()['systemPoolSize'] as number; - privatePool = status.toJSON()['systemPoolSize'] as number; + systemPool = status.toJSON().systemPoolSize as number; + privatePool = status.toJSON().systemPoolSize as number; poolSize = (systemPool + privatePool).toString(); } @@ -31,8 +33,6 @@ function PoolSize({ children, className = '' }: Props): React.ReactElement ); - } export default React.memo(PoolSize); - diff --git a/packages/react-query/src/index.ts b/packages/react-query/src/index.ts index 7171af444a24..53d94bf4566b 100644 --- a/packages/react-query/src/index.ts +++ b/packages/react-query/src/index.ts @@ -8,6 +8,7 @@ export { default as BestFinalized } from './BestFinalized.js'; export { default as BestNumber } from './BestNumber.js'; export { default as BlockToTime } from './BlockToTime.js'; export { default as Bonded } from './Bonded.js'; +export { default as BrokerStatus } from './BrokerStatus.js'; export { default as Chain } from './Chain.js'; export { default as Elapsed } from './Elapsed.js'; export { default as FormatBalance } from './FormatBalance.js'; @@ -15,9 +16,8 @@ export { default as LockedVote } from './LockedVote.js'; export { default as NodeName } from './NodeName.js'; export { default as NodeVersion } from './NodeVersion.js'; export { default as Nonce } from './Nonce.js'; +export { default as PoolSize } from './PoolSize.js'; export { default as SessionToTime } from './SessionToTime.js'; export { default as TimeNow } from './TimeNow.js'; export { default as TotalInactive } from './TotalInactive.js'; export { default as TotalIssuance } from './TotalIssuance.js'; -export { default as BrokerStatus } from './BrokerStatus.js'; -export { default as PoolSize} from './PoolSize.js'; From e7eabac8328aa21c84335f0fe5736cfc0e267ac4 Mon Sep 17 00:00:00 2001 From: bee344 Date: Wed, 3 Apr 2024 12:14:37 -0300 Subject: [PATCH 06/56] fixed some types --- packages/page-coretime/src/useWorkloadInfos.ts | 11 ++++++----- packages/page-coretime/src/useWorkplanInfos.ts | 7 ++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/page-coretime/src/useWorkloadInfos.ts b/packages/page-coretime/src/useWorkloadInfos.ts index 9d4f0febcd63..86ddaa1a5bc3 100644 --- a/packages/page-coretime/src/useWorkloadInfos.ts +++ b/packages/page-coretime/src/useWorkloadInfos.ts @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-assets authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { StorageKey, u16 } from '@polkadot/types'; +import type { StorageKey, u16, Vec } from '@polkadot/types'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; import type { BN } from '@polkadot/util'; import type { CoreWorkloadInfo } from './types.js'; @@ -10,7 +10,7 @@ import { useEffect, useState } from 'react'; import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; -function extractInfo (info: PalletBrokerScheduleItem[], core: number): CoreWorkloadInfo { +function extractInfo(info: PalletBrokerScheduleItem[], core: number): CoreWorkloadInfo { return { core, @@ -23,17 +23,18 @@ const OPT_KEY = { keys.map(({ args: [core] }) => core) }; -function useWorkloadInfosImpl (): CoreWorkloadInfo[] | undefined { +function useWorkloadInfosImpl(): CoreWorkloadInfo[] | undefined { const { api } = useApi(); const cores = useMapKeys(api.query.broker.workload, [], OPT_KEY); - const workloadInfo = useCall<[[BN[]], PalletBrokerScheduleItem[]]>(api.query.broker.workload.multi, [cores], { withParams: true }); + const workloadInfo = useCall<[[BN[]], Vec[]]>(api.query.broker.workload.multi, [cores], { withParams: true }); const [state, setState] = useState(); useEffect((): void => { workloadInfo && setState( workloadInfo[0][0].map((info, index) => - extractInfo(workloadInfo[1][index] as unknown as PalletBrokerScheduleItem[], info.toNumber()) + extractInfo(workloadInfo[1][index], info.toNumber()) + ) ); }, [workloadInfo]); diff --git a/packages/page-coretime/src/useWorkplanInfos.ts b/packages/page-coretime/src/useWorkplanInfos.ts index fd72693bdf66..fad2a9d8455f 100644 --- a/packages/page-coretime/src/useWorkplanInfos.ts +++ b/packages/page-coretime/src/useWorkplanInfos.ts @@ -5,11 +5,12 @@ import type { Option, StorageKey, u16, u32 } from '@polkadot/types'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; import type { CoreWorkplanInfo } from './types.js'; +import type { Vec } from '@polkadot/types'; import { useEffect, useState } from 'react'; import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; -function extractInfo(info: PalletBrokerScheduleItem[], timeslice: number, core: number) { +function extractInfo(info: Vec, timeslice: number, core: number) { return { core, info, @@ -30,7 +31,7 @@ function useWorkplanInfosImpl(): CoreWorkplanInfo[] | undefined { return value[0]; }); - const workplanInfo = useCall<[[[u32, u16][]], Option[]]>(api.query.broker.workplan.multi, [sanitizedKeys], { withParams: true }); + const workplanInfo = useCall<[[[u32, u16][]], Option>[]]>(api.query.broker.workplan.multi, [sanitizedKeys], { withParams: true }); const [state, setState] = useState(); @@ -38,7 +39,7 @@ function useWorkplanInfosImpl(): CoreWorkplanInfo[] | undefined { workplanInfo?.[1] && setState( workplanInfo[0][0].map((info, index) => - extractInfo(workplanInfo[1][index].unwrap() as unknown as PalletBrokerScheduleItem[], info[0].toNumber(), info[1].toNumber()) + extractInfo(workplanInfo[1][index].unwrap(), info[0].toNumber(), info[1].toNumber()) ) ); }, [workplanInfo]); From ac0c3cdde3efa41730c0e4a0b4b350d7bcb65609 Mon Sep 17 00:00:00 2001 From: bee344 Date: Wed, 3 Apr 2024 17:11:15 -0300 Subject: [PATCH 07/56] updated mask graph --- .../page-coretime/src/Overview/Workload.tsx | 16 ++++------ .../page-coretime/src/Overview/Workplan.tsx | 17 +++++++--- packages/page-coretime/src/utils.ts | 3 ++ .../react-components/src/MaskCoverage.tsx | 31 +++++++++++++++++++ packages/react-components/src/index.ts | 1 + 5 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 packages/page-coretime/src/utils.ts create mode 100644 packages/react-components/src/MaskCoverage.tsx diff --git a/packages/page-coretime/src/Overview/Workload.tsx b/packages/page-coretime/src/Overview/Workload.tsx index fb1eddfde803..6b9de9888925 100644 --- a/packages/page-coretime/src/Overview/Workload.tsx +++ b/packages/page-coretime/src/Overview/Workload.tsx @@ -2,9 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 import type { CoreWorkloadInfo } from '../types.js'; +import { hexToBin } from '../utils.js'; import React from 'react'; - +import { MaskCoverage } from '@polkadot/react-components'; import { Table } from '@polkadot/react-components'; interface Props { @@ -12,20 +13,14 @@ interface Props { value: CoreWorkloadInfo; } -function hexToBin(hex: string): string { - return parseInt(hex, 16).toString(2); -} - - function Workload({ className, value: { core, info } }: Props): React.ReactElement { - const maskAsPerc = info[0].mask.bitLength() / 80 * 100; const trimmedHex: string = info[0].mask.toHex().slice(2); const arr: string[] = trimmedHex.split(""); - let buffArr: string = ''; + let buffArr: string[] = []; arr.forEach((bit) => { - buffArr = buffArr.concat(hexToBin(bit)) + hexToBin(bit).split("").forEach((v) => buffArr.push(v)) }) @@ -34,10 +29,11 @@ function Workload({ className, value: { core, info } }: Props): React.ReactEleme return (
- + ); } + export default React.memo(Workload); diff --git a/packages/page-coretime/src/Overview/Workplan.tsx b/packages/page-coretime/src/Overview/Workplan.tsx index d1f30a483d6e..547e2369d14d 100644 --- a/packages/page-coretime/src/Overview/Workplan.tsx +++ b/packages/page-coretime/src/Overview/Workplan.tsx @@ -4,7 +4,8 @@ import type { CoreWorkplanInfo } from '../types.js'; import React from 'react'; - +import { MaskCoverage } from '@polkadot/react-components'; +import { hexToBin } from '../utils.js'; import { Table } from '@polkadot/react-components'; interface Props { @@ -12,15 +13,23 @@ interface Props { value: CoreWorkplanInfo; } -function Workload ({ className, value: { core, info, timeslice } }: Props): React.ReactElement { - const maskAsPerc = info[0].mask.bitLength() / 80 * 100; +function Workload({ className, value: { core, info, timeslice } }: Props): React.ReactElement { + const trimmedHex: string = info[0].mask.toHex().slice(2); + console.log(trimmedHex) + const arr: string[] = trimmedHex.split(""); + + let buffArr: string[] = []; + + arr.forEach((bit) => { + hexToBin(bit).split("").forEach((v) => buffArr.push(v)) + }) const sanitizedAssignment = info[0].assignment.isTask ? info[0].assignment.asTask : info[0].assignment; return ( - + diff --git a/packages/page-coretime/src/utils.ts b/packages/page-coretime/src/utils.ts new file mode 100644 index 000000000000..ca33e579799f --- /dev/null +++ b/packages/page-coretime/src/utils.ts @@ -0,0 +1,3 @@ +export function hexToBin(hex: string): string { + return parseInt(hex, 16).toString(2); +} diff --git a/packages/react-components/src/MaskCoverage.tsx b/packages/react-components/src/MaskCoverage.tsx new file mode 100644 index 000000000000..fa70e4003cfd --- /dev/null +++ b/packages/react-components/src/MaskCoverage.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { styled } from './styled.js'; +const BarContainer = styled.div` + display: flex; +`; + +interface SectionProps { + value: string; // Define the props interface +} + +const Segment = styled.div` + width: 5px; + height: 20px; + margin-right: 2px; + opacity: ${(props) => { + return props.value + }}; + width: 100%; + background-color: var(--bg-inverse); +`; +function MaskCoverage({ values }: { values: string[] }) { + return ( + + {values.map((value, index) => ( + + ))} + + ); +} + +export default React.memo(MaskCoverage); diff --git a/packages/react-components/src/index.ts b/packages/react-components/src/index.ts index 5d4599b09bc8..b3cf8cceecd9 100644 --- a/packages/react-components/src/index.ts +++ b/packages/react-components/src/index.ts @@ -76,6 +76,7 @@ export { default as Password } from './Password.js'; export { default as PasswordStrength } from './PasswordStrength.js'; export { default as Popup } from './Popup/index.js'; export { default as Progress } from './Progress.js'; +export { default as MaskCoverage } from './MaskCoverage.js'; export { default as Row } from './Row.js'; export { default as Sidebar } from './Sidebar.js'; export { default as SortDropdown } from './SortDropdown.js'; From 1b93bc15e7a1bd4c8feb2bc46a403a211a1373f5 Mon Sep 17 00:00:00 2001 From: bee344 Date: Thu, 4 Apr 2024 12:13:54 -0300 Subject: [PATCH 08/56] copyright --- packages/page-coretime/src/Overview/Cores.tsx | 2 +- packages/page-coretime/src/Overview/Pools.tsx | 2 +- .../page-coretime/src/Overview/Summary.tsx | 2 +- .../page-coretime/src/Overview/Timeslice.tsx | 2 +- .../page-coretime/src/Overview/Workload.tsx | 21 +++++----- .../page-coretime/src/Overview/Workloads.tsx | 11 +++--- .../page-coretime/src/Overview/Workplan.tsx | 18 ++++----- .../page-coretime/src/Overview/Workplans.tsx | 16 ++++---- packages/page-coretime/src/Overview/index.tsx | 38 +++++++++++-------- packages/page-coretime/src/index.tsx | 3 +- packages/page-coretime/src/types.ts | 2 +- .../page-coretime/src/useWorkloadInfos.ts | 7 ++-- .../page-coretime/src/useWorkplanInfos.ts | 9 ++--- packages/page-coretime/src/utils.ts | 5 ++- .../react-components/src/MaskCoverage.tsx | 15 ++++++-- packages/react-components/src/index.ts | 2 +- 16 files changed, 85 insertions(+), 70 deletions(-) diff --git a/packages/page-coretime/src/Overview/Cores.tsx b/packages/page-coretime/src/Overview/Cores.tsx index 6f2130ac8a99..8dc22795c718 100644 --- a/packages/page-coretime/src/Overview/Cores.tsx +++ b/packages/page-coretime/src/Overview/Cores.tsx @@ -1,4 +1,4 @@ -// [object Object] +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import React from 'react'; diff --git a/packages/page-coretime/src/Overview/Pools.tsx b/packages/page-coretime/src/Overview/Pools.tsx index 9b7fd169aae3..295b49b555cc 100644 --- a/packages/page-coretime/src/Overview/Pools.tsx +++ b/packages/page-coretime/src/Overview/Pools.tsx @@ -1,4 +1,4 @@ -// [object Object] +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { u32 } from '@polkadot/types'; diff --git a/packages/page-coretime/src/Overview/Summary.tsx b/packages/page-coretime/src/Overview/Summary.tsx index e7d8345119a0..d2791347a869 100644 --- a/packages/page-coretime/src/Overview/Summary.tsx +++ b/packages/page-coretime/src/Overview/Summary.tsx @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-explorer authors & contributors +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import React from 'react'; diff --git a/packages/page-coretime/src/Overview/Timeslice.tsx b/packages/page-coretime/src/Overview/Timeslice.tsx index 7f1985a96d77..beb9a38cbf9b 100644 --- a/packages/page-coretime/src/Overview/Timeslice.tsx +++ b/packages/page-coretime/src/Overview/Timeslice.tsx @@ -1,4 +1,4 @@ -// [object Object] +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { u32 } from '@polkadot/types'; diff --git a/packages/page-coretime/src/Overview/Workload.tsx b/packages/page-coretime/src/Overview/Workload.tsx index 6b9de9888925..e4a097d12448 100644 --- a/packages/page-coretime/src/Overview/Workload.tsx +++ b/packages/page-coretime/src/Overview/Workload.tsx @@ -1,28 +1,28 @@ -// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { CoreWorkloadInfo } from '../types.js'; -import { hexToBin } from '../utils.js'; import React from 'react'; -import { MaskCoverage } from '@polkadot/react-components'; -import { Table } from '@polkadot/react-components'; + +import { MaskCoverage, Table } from '@polkadot/react-components'; + +import { hexToBin } from '../utils.js'; interface Props { className?: string; value: CoreWorkloadInfo; } -function Workload({ className, value: { core, info } }: Props): React.ReactElement { +function Workload ({ className, value: { core, info } }: Props): React.ReactElement { const trimmedHex: string = info[0].mask.toHex().slice(2); - const arr: string[] = trimmedHex.split(""); + const arr: string[] = trimmedHex.split(''); - let buffArr: string[] = []; + const buffArr: string[] = []; arr.forEach((bit) => { - hexToBin(bit).split("").forEach((v) => buffArr.push(v)) - }) - + hexToBin(bit).split('').forEach((v) => buffArr.push(v)); + }); const sanitizedAssignment = info[0].assignment.isTask ? info[0].assignment.asTask : info[0].assignment; @@ -35,5 +35,4 @@ function Workload({ className, value: { core, info } }: Props): React.ReactEleme ); } - export default React.memo(Workload); diff --git a/packages/page-coretime/src/Overview/Workloads.tsx b/packages/page-coretime/src/Overview/Workloads.tsx index 3c6539d55c80..8c484fc85052 100644 --- a/packages/page-coretime/src/Overview/Workloads.tsx +++ b/packages/page-coretime/src/Overview/Workloads.tsx @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { CoreWorkloadInfo } from '../types.js'; @@ -16,17 +16,18 @@ interface Props { function Workloads ({ className, workloadInfos }: Props): React.ReactElement { const { t } = useTranslation(); - let sanitized:CoreWorkloadInfo[] = []; + let sanitized: CoreWorkloadInfo[] = []; const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ [t('workload'), 'start', 1], [t('mask'), 'start media--1300'], - [t('assignment'), 'start media--1600'], + [t('assignment'), 'start media--1600'] ]); + if (Array.isArray(workloadInfos)) { - sanitized = workloadInfos + sanitized = workloadInfos; } else if (workloadInfos) { - sanitized.push(workloadInfos) + sanitized.push(workloadInfos); } sanitized?.sort((a, b) => a.core - b.core); diff --git a/packages/page-coretime/src/Overview/Workplan.tsx b/packages/page-coretime/src/Overview/Workplan.tsx index 547e2369d14d..1f684135210f 100644 --- a/packages/page-coretime/src/Overview/Workplan.tsx +++ b/packages/page-coretime/src/Overview/Workplan.tsx @@ -1,28 +1,28 @@ -// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { CoreWorkplanInfo } from '../types.js'; import React from 'react'; -import { MaskCoverage } from '@polkadot/react-components'; + +import { MaskCoverage, Table } from '@polkadot/react-components'; + import { hexToBin } from '../utils.js'; -import { Table } from '@polkadot/react-components'; interface Props { className?: string; value: CoreWorkplanInfo; } -function Workload({ className, value: { core, info, timeslice } }: Props): React.ReactElement { +function Workload ({ className, value: { core, info, timeslice } }: Props): React.ReactElement { const trimmedHex: string = info[0].mask.toHex().slice(2); - console.log(trimmedHex) - const arr: string[] = trimmedHex.split(""); + const arr: string[] = trimmedHex.split(''); - let buffArr: string[] = []; + const buffArr: string[] = []; arr.forEach((bit) => { - hexToBin(bit).split("").forEach((v) => buffArr.push(v)) - }) + hexToBin(bit).split('').forEach((v) => buffArr.push(v)); + }); const sanitizedAssignment = info[0].assignment.isTask ? info[0].assignment.asTask : info[0].assignment; diff --git a/packages/page-coretime/src/Overview/Workplans.tsx b/packages/page-coretime/src/Overview/Workplans.tsx index 0b95341ece0a..5187f95f0f1b 100644 --- a/packages/page-coretime/src/Overview/Workplans.tsx +++ b/packages/page-coretime/src/Overview/Workplans.tsx @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { CoreWorkplanInfo } from '../types.js'; @@ -14,21 +14,21 @@ interface Props { filteredWorkplan?: CoreWorkplanInfo[] | CoreWorkplanInfo; } -function Workplans({ className, filteredWorkplan }: Props): React.ReactElement { +function Workplans ({ className, filteredWorkplan }: Props): React.ReactElement { const { t } = useTranslation(); let sanitized: CoreWorkplanInfo[] = []; - if (Array.isArray(filteredWorkplan)) { - sanitized = filteredWorkplan - } else if (filteredWorkplan) { - sanitized.push(filteredWorkplan) - } + if (Array.isArray(filteredWorkplan)) { + sanitized = filteredWorkplan; + } else if (filteredWorkplan) { + sanitized.push(filteredWorkplan); + } const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ [t('workplan'), 'start', 1], [t('mask'), 'start media--1600'], [t('assignment'), 'start media--1600'], - [t('timeslice'), 'start media--1900'], + [t('timeslice'), 'start media--1900'] ]); sanitized?.sort((a, b) => a.core - b.core); diff --git a/packages/page-coretime/src/Overview/index.tsx b/packages/page-coretime/src/Overview/index.tsx index 4c4f20cc24b2..949a7a357481 100644 --- a/packages/page-coretime/src/Overview/index.tsx +++ b/packages/page-coretime/src/Overview/index.tsx @@ -1,15 +1,16 @@ -// [object Object] +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { CoreWorkloadInfo, CoreWorkplanInfo } from '../types.js'; import React, { useMemo, useState } from 'react'; + import { Button, Columar, Dropdown } from '@polkadot/react-components'; +import { useTranslation } from '../translate.js'; import Summary from './Summary.js'; import Workloads from './Workloads.js'; import Workplans from './Workplans.js'; -import { useTranslation } from '../translate.js'; interface Props { className?: string; @@ -17,25 +18,28 @@ interface Props { workplanInfos?: CoreWorkplanInfo[]; } -function uniqByForEach(array: CoreWorkplanInfo[] | undefined) { +function uniqByForEach (array: CoreWorkplanInfo[] | undefined) { const workplanCores: number[] = []; const workplanTS: number[] = []; + if (array) { array.forEach((item) => { if (!workplanCores.includes(item.core)) { workplanCores.push(item.core); } + if (!workplanTS.includes(item.timeslice)) { workplanTS.push(item.timeslice); } - }) + }); + return { workplanCores, workplanTS }; } else { - return { workplanCores: [], workplanTS: [] } + return { workplanCores: [], workplanTS: [] }; } } -function Overview({ className, workloadInfos, workplanInfos }: Props): React.ReactElement { +function Overview ({ className, workloadInfos, workplanInfos }: Props): React.ReactElement { const { t } = useTranslation(); const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); @@ -43,15 +47,16 @@ function Overview({ className, workloadInfos, workplanInfos }: Props): React.Rea const [workplanSliceSelected, setWorkplanSliceSelected] = useState(-1); const workloadCores = workloadInfos?.length; - let coreArr: number[] = []; + const coreArr: number[] = []; - const len = workloadCores ? workloadCores : 0; + const len = workloadCores || 0; Array(len).fill(0).map((_, index) => { - coreArr.push(index) + coreArr.push(index); }); - const { workplanCores, workplanTS } = uniqByForEach(workplanInfos) + const { workplanCores, workplanTS } = uniqByForEach(workplanInfos); + workplanCores?.sort((a, b) => a - b); workplanTS?.sort((a, b) => a - b); @@ -68,7 +73,7 @@ function Overview({ className, workloadInfos, workplanInfos }: Props): React.Rea ); const filteredWLC = useMemo( () => { - return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected) + return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected); }, [workloadInfos, workloadCoreSelected] ); @@ -87,13 +92,13 @@ function Overview({ className, workloadInfos, workplanInfos }: Props): React.Rea const filteredWorkplan = useMemo( () => { if (workplanCoreSelected === workplanSliceSelected) { - return workplanInfos + return workplanInfos; } else if (workplanCoreSelected === -1) { - return workplanInfos?.filter(({ timeslice }) => timeslice === workplanSliceSelected) + return workplanInfos?.filter(({ timeslice }) => timeslice === workplanSliceSelected); } else if (workplanSliceSelected === -1) { - return workplanInfos?.filter(({ core }) => core === workplanCoreSelected) + return workplanInfos?.filter(({ core }) => core === workplanCoreSelected); } else { - return workplanInfos?.filter(({ core, timeslice }) => core === workplanCoreSelected && timeslice === workplanSliceSelected) + return workplanInfos?.filter(({ core, timeslice }) => core === workplanCoreSelected && timeslice === workplanSliceSelected); } } , @@ -141,7 +146,8 @@ function Overview({ className, workloadInfos, workplanInfos }: Props): React.Rea + workloadInfos={filteredWLC} + /> }) => string): TabItem[] { - return [ { isRoot: true, diff --git a/packages/page-coretime/src/types.ts b/packages/page-coretime/src/types.ts index d6c41098c9d1..4e449735fdef 100644 --- a/packages/page-coretime/src/types.ts +++ b/packages/page-coretime/src/types.ts @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; diff --git a/packages/page-coretime/src/useWorkloadInfos.ts b/packages/page-coretime/src/useWorkloadInfos.ts index 86ddaa1a5bc3..9d9ddba36369 100644 --- a/packages/page-coretime/src/useWorkloadInfos.ts +++ b/packages/page-coretime/src/useWorkloadInfos.ts @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { StorageKey, u16, Vec } from '@polkadot/types'; @@ -10,8 +10,7 @@ import { useEffect, useState } from 'react'; import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; -function extractInfo(info: PalletBrokerScheduleItem[], core: number): CoreWorkloadInfo { - +function extractInfo (info: PalletBrokerScheduleItem[], core: number): CoreWorkloadInfo { return { core, info @@ -23,7 +22,7 @@ const OPT_KEY = { keys.map(({ args: [core] }) => core) }; -function useWorkloadInfosImpl(): CoreWorkloadInfo[] | undefined { +function useWorkloadInfosImpl (): CoreWorkloadInfo[] | undefined { const { api } = useApi(); const cores = useMapKeys(api.query.broker.workload, [], OPT_KEY); const workloadInfo = useCall<[[BN[]], Vec[]]>(api.query.broker.workload.multi, [cores], { withParams: true }); diff --git a/packages/page-coretime/src/useWorkplanInfos.ts b/packages/page-coretime/src/useWorkplanInfos.ts index fad2a9d8455f..e877efedeb21 100644 --- a/packages/page-coretime/src/useWorkplanInfos.ts +++ b/packages/page-coretime/src/useWorkplanInfos.ts @@ -1,16 +1,15 @@ -// Copyright 2017-2024 @polkadot/app-assets authors & contributors +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { Option, StorageKey, u16, u32 } from '@polkadot/types'; +import type { Option, StorageKey, u16, u32, Vec } from '@polkadot/types'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; import type { CoreWorkplanInfo } from './types.js'; -import type { Vec } from '@polkadot/types'; import { useEffect, useState } from 'react'; import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; -function extractInfo(info: Vec, timeslice: number, core: number) { +function extractInfo (info: Vec, timeslice: number, core: number) { return { core, info, @@ -23,7 +22,7 @@ const OPT_KEY = { keys.map(({ args: [timeslice, core] }) => [timeslice, core]) }; -function useWorkplanInfosImpl(): CoreWorkplanInfo[] | undefined { +function useWorkplanInfosImpl (): CoreWorkplanInfo[] | undefined { const { api } = useApi(); const workplanKeys = useMapKeys(api.query.broker.workplan, [], OPT_KEY); diff --git a/packages/page-coretime/src/utils.ts b/packages/page-coretime/src/utils.ts index ca33e579799f..f4702a95b153 100644 --- a/packages/page-coretime/src/utils.ts +++ b/packages/page-coretime/src/utils.ts @@ -1,3 +1,6 @@ -export function hexToBin(hex: string): string { +// [object Object] +// SPDX-License-Identifier: Apache-2.0 + +export function hexToBin (hex: string): string { return parseInt(hex, 16).toString(2); } diff --git a/packages/react-components/src/MaskCoverage.tsx b/packages/react-components/src/MaskCoverage.tsx index fa70e4003cfd..507252d04259 100644 --- a/packages/react-components/src/MaskCoverage.tsx +++ b/packages/react-components/src/MaskCoverage.tsx @@ -1,5 +1,10 @@ +// [object Object] +// SPDX-License-Identifier: Apache-2.0 + import React from 'react'; + import { styled } from './styled.js'; + const BarContainer = styled.div` display: flex; `; @@ -13,16 +18,20 @@ const Segment = styled.div` height: 20px; margin-right: 2px; opacity: ${(props) => { - return props.value + return props.value; }}; width: 100%; background-color: var(--bg-inverse); `; -function MaskCoverage({ values }: { values: string[] }) { + +function MaskCoverage ({ values }: { values: string[] }) { return ( {values.map((value, index) => ( - + ))} ); diff --git a/packages/react-components/src/index.ts b/packages/react-components/src/index.ts index b3cf8cceecd9..e7da661fcaec 100644 --- a/packages/react-components/src/index.ts +++ b/packages/react-components/src/index.ts @@ -66,6 +66,7 @@ export { default as LinkExternal } from './LinkExternal.js'; export { default as LockedVote } from './LockedVote.js'; export { default as MarkError } from './MarkError.js'; export { default as MarkWarning } from './MarkWarning.js'; +export { default as MaskCoverage } from './MaskCoverage.js'; export { default as Menu } from './Menu/index.js'; export { default as Modal } from './Modal/index.js'; export { default as NextTick } from './NextTick.js'; @@ -76,7 +77,6 @@ export { default as Password } from './Password.js'; export { default as PasswordStrength } from './PasswordStrength.js'; export { default as Popup } from './Popup/index.js'; export { default as Progress } from './Progress.js'; -export { default as MaskCoverage } from './MaskCoverage.js'; export { default as Row } from './Row.js'; export { default as Sidebar } from './Sidebar.js'; export { default as SortDropdown } from './SortDropdown.js'; From c72d69aa50d8419a0bf6945d5ba82c76fd2d65e1 Mon Sep 17 00:00:00 2001 From: bee344 Date: Thu, 4 Apr 2024 12:31:13 -0300 Subject: [PATCH 09/56] linting --- packages/page-coretime/src/Overview/Workloads.tsx | 1 + packages/page-coretime/src/Overview/Workplans.tsx | 1 + packages/page-coretime/src/Overview/index.tsx | 7 +++---- packages/page-coretime/src/utils.ts | 2 +- packages/react-components/src/MaskCoverage.tsx | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/page-coretime/src/Overview/Workloads.tsx b/packages/page-coretime/src/Overview/Workloads.tsx index 8c484fc85052..28129c6caf84 100644 --- a/packages/page-coretime/src/Overview/Workloads.tsx +++ b/packages/page-coretime/src/Overview/Workloads.tsx @@ -1,5 +1,6 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 + import type { CoreWorkloadInfo } from '../types.js'; import React, { useRef } from 'react'; diff --git a/packages/page-coretime/src/Overview/Workplans.tsx b/packages/page-coretime/src/Overview/Workplans.tsx index 5187f95f0f1b..21bcfe655fdb 100644 --- a/packages/page-coretime/src/Overview/Workplans.tsx +++ b/packages/page-coretime/src/Overview/Workplans.tsx @@ -1,5 +1,6 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 + import type { CoreWorkplanInfo } from '../types.js'; import React, { useRef } from 'react'; diff --git a/packages/page-coretime/src/Overview/index.tsx b/packages/page-coretime/src/Overview/index.tsx index 949a7a357481..006705897cb6 100644 --- a/packages/page-coretime/src/Overview/index.tsx +++ b/packages/page-coretime/src/Overview/index.tsx @@ -47,13 +47,12 @@ function Overview ({ className, workloadInfos, workplanInfos }: Props): React.Re const [workplanSliceSelected, setWorkplanSliceSelected] = useState(-1); const workloadCores = workloadInfos?.length; - const coreArr: number[] = []; + + const coreArr: number[] = useMemo(() => [], []); const len = workloadCores || 0; - Array(len).fill(0).map((_, index) => { - coreArr.push(index); - }); + Array(len).fill(0).map((_, index) => coreArr.push(index)); const { workplanCores, workplanTS } = uniqByForEach(workplanInfos); diff --git a/packages/page-coretime/src/utils.ts b/packages/page-coretime/src/utils.ts index f4702a95b153..972e01ca944b 100644 --- a/packages/page-coretime/src/utils.ts +++ b/packages/page-coretime/src/utils.ts @@ -1,4 +1,4 @@ -// [object Object] +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 export function hexToBin (hex: string): string { diff --git a/packages/react-components/src/MaskCoverage.tsx b/packages/react-components/src/MaskCoverage.tsx index 507252d04259..1aa1a56443c8 100644 --- a/packages/react-components/src/MaskCoverage.tsx +++ b/packages/react-components/src/MaskCoverage.tsx @@ -1,4 +1,4 @@ -// [object Object] +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 import React from 'react'; From 63635f8d636a156e94db106238a1387dd3e71d81 Mon Sep 17 00:00:00 2001 From: bee344 Date: Thu, 4 Apr 2024 14:44:16 -0300 Subject: [PATCH 10/56] install --- .../page-coretime/src/Overview/Summary.tsx | 14 +++++++++ packages/react-query/src/CoreDescriptor.tsx | 29 +++++++++++++++++++ yarn.lock | 22 +++++++++----- 3 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 packages/react-query/src/CoreDescriptor.tsx diff --git a/packages/page-coretime/src/Overview/Summary.tsx b/packages/page-coretime/src/Overview/Summary.tsx index d2791347a869..b5dbfe17e76b 100644 --- a/packages/page-coretime/src/Overview/Summary.tsx +++ b/packages/page-coretime/src/Overview/Summary.tsx @@ -32,6 +32,20 @@ function Summary (): React.ReactElement { )} + {api.query.coretimeAssignmentProvider && ( + <> + + + + + + + + + + + + )} ); diff --git a/packages/react-query/src/CoreDescriptor.tsx b/packages/react-query/src/CoreDescriptor.tsx new file mode 100644 index 000000000000..f4361bae0c2a --- /dev/null +++ b/packages/react-query/src/CoreDescriptor.tsx @@ -0,0 +1,29 @@ +// Copyright 2017-2024 @polkadot/react-query authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types-augment/lookup/types-kusama'; + +import React from 'react'; + +import { useApi, useCall } from '@polkadot/react-hooks'; + +interface Props { + children?: React.ReactNode; + className?: string; + query: string; +} + +function BrokerStatus ({ children, className = '', query }: Props): React.ReactElement { + const { api } = useApi(); + const status = useCall(api.query.broker?.status); + const strStatus = status === undefined ? '' : status.toJSON()[query]; + + return ( +
+ {strStatus?.toString()} + {children} +
+ ); +} + +export default React.memo(BrokerStatus); diff --git a/yarn.lock b/yarn.lock index 2d5c21b33ebb..056bdcd06799 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1500,6 +1500,19 @@ __metadata: languageName: unknown linkType: soft +"@polkadot/app-coretime@workspace:packages/page-coretime": + version: 0.0.0-use.local + resolution: "@polkadot/app-coretime@workspace:packages/page-coretime" + dependencies: + "@polkadot/react-components": "npm:^0.133.2-119-x" + "@polkadot/react-query": "npm:^0.133.2-119-x" + peerDependencies: + react: "*" + react-dom: "*" + react-is: "*" + languageName: unknown + linkType: soft + "@polkadot/app-council@workspace:packages/page-council": version: 0.0.0-use.local resolution: "@polkadot/app-council@workspace:packages/page-council" @@ -6292,14 +6305,7 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^2.0.10, colorette@npm:^2.0.14": - version: 2.0.16 - resolution: "colorette@npm:2.0.16" - checksum: 10/8501db5750d3b8f0935bdc9e999cbd6b6420b5c127a8c0bd41aaf252fe3f6636ff3a5c51e6dc8e12692e0b96ee3d28a4dfd0f89a86ef167a5728d4c926b67f31 - languageName: node - linkType: hard - -"colorette@npm:^2.0.7": +"colorette@npm:^2.0.10, colorette@npm:^2.0.14, colorette@npm:^2.0.7": version: 2.0.20 resolution: "colorette@npm:2.0.20" checksum: 10/0b8de48bfa5d10afc160b8eaa2b9938f34a892530b2f7d7897e0458d9535a066e3998b49da9d21161c78225b272df19ae3a64d6df28b4c9734c0e55bbd02406f From db64a22ec6ee6dcdf4657484a5664e5480c3b12f Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 15 Apr 2024 13:45:44 -0300 Subject: [PATCH 11/56] added relay overview --- packages/apps-routing/src/coretime.ts | 3 +- packages/page-coretime/package.json | 6 +- .../page-coretime/src/Overview/BrokerId.tsx | 25 ++ .../src/Overview/CoreDescriptor.tsx | 44 ++++ .../src/Overview/CoreDescriptors.tsx | 50 ++++ .../page-coretime/src/Overview/CoreQueue.tsx | 28 ++ .../src/Overview/CurrentWork.tsx | 53 ++++ .../src/Overview/QueueStatus.tsx | 38 +++ .../page-coretime/src/Overview/Summary.tsx | 90 ++++--- packages/page-coretime/src/Overview/index.tsx | 249 ++++++++++-------- packages/page-coretime/src/index.tsx | 53 ++-- packages/page-coretime/src/types.ts | 15 +- .../page-coretime/src/useCoreDescriptor.ts | 51 ++++ .../page-coretime/src/useCoreSchedules.ts | 0 packages/page-coretime/src/useQueueStatus.tsx | 36 +++ .../page-coretime/src/useWorkloadInfos.ts | 4 +- packages/react-query/src/CoreDescriptor.tsx | 2 +- yarn.lock | 8 +- 18 files changed, 577 insertions(+), 178 deletions(-) create mode 100644 packages/page-coretime/src/Overview/BrokerId.tsx create mode 100644 packages/page-coretime/src/Overview/CoreDescriptor.tsx create mode 100644 packages/page-coretime/src/Overview/CoreDescriptors.tsx create mode 100644 packages/page-coretime/src/Overview/CoreQueue.tsx create mode 100644 packages/page-coretime/src/Overview/CurrentWork.tsx create mode 100644 packages/page-coretime/src/Overview/QueueStatus.tsx create mode 100644 packages/page-coretime/src/useCoreDescriptor.ts create mode 100644 packages/page-coretime/src/useCoreSchedules.ts create mode 100644 packages/page-coretime/src/useQueueStatus.tsx diff --git a/packages/apps-routing/src/coretime.ts b/packages/apps-routing/src/coretime.ts index caba0df9ded3..2a6dc1d7cafc 100644 --- a/packages/apps-routing/src/coretime.ts +++ b/packages/apps-routing/src/coretime.ts @@ -10,7 +10,8 @@ export default function create (t: TFunction): Route { Component, display: { needsApi: [ - 'query.broker.status' + ['query.broker.status', + 'query.coretimeAssignmentProvider.coreDescriptors'] ], needsApiInstances: true }, diff --git a/packages/page-coretime/package.json b/packages/page-coretime/package.json index e2d710787924..f7ec62036b16 100644 --- a/packages/page-coretime/package.json +++ b/packages/page-coretime/package.json @@ -14,10 +14,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.133.2-119-x", + "version": "0.135.2-44-x", "dependencies": { - "@polkadot/react-components": "^0.133.2-119-x", - "@polkadot/react-query": "^0.133.2-119-x" + "@polkadot/react-components": "0.135.2-44-x", + "@polkadot/react-query": "0.135.2-44-x" }, "peerDependencies": { "react": "*", diff --git a/packages/page-coretime/src/Overview/BrokerId.tsx b/packages/page-coretime/src/Overview/BrokerId.tsx new file mode 100644 index 000000000000..309f174cc8ab --- /dev/null +++ b/packages/page-coretime/src/Overview/BrokerId.tsx @@ -0,0 +1,25 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { useApi } from '@polkadot/react-hooks'; +import type { u32 } from '@polkadot/types'; + +import React from 'react'; + +interface Props { + className?: string; + children?: React.ReactNode; +} + +function BrokerId({ children, className }: Props): React.ReactElement | null { + const { api } = useApi(); + const id = api.consts.coretime?.brokerId as u32; + return ( +
+ {id?.toString()} + {children} +
+ ); +} + +export default React.memo(BrokerId); diff --git a/packages/page-coretime/src/Overview/CoreDescriptor.tsx b/packages/page-coretime/src/Overview/CoreDescriptor.tsx new file mode 100644 index 000000000000..24d6cfe17897 --- /dev/null +++ b/packages/page-coretime/src/Overview/CoreDescriptor.tsx @@ -0,0 +1,44 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { CoreDescription } from '../types.js'; +import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; + + +import CoreQueue from './CoreQueue.js'; + +import React from 'react'; +import { Table } from '@polkadot/react-components'; +import CurrentWork from './CurrentWork.js'; + +interface Props { + className?: string; + value: CoreDescription; +} + +function CoreDescriptor({ className, value: { core, info } }: Props): React.ReactElement { + let sanitized: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[] = []; + + if (Array.isArray(info)) { + sanitized = info; + } else if (info) { + sanitized.push(info); + } + + return ( +
+ + {sanitized?.map((i) => ( + + )) + } + {sanitized?.map((i) => ( + + ))} + + ); +} + +export default React.memo(CoreDescriptor); diff --git a/packages/page-coretime/src/Overview/CoreDescriptors.tsx b/packages/page-coretime/src/Overview/CoreDescriptors.tsx new file mode 100644 index 000000000000..2e49e41490f5 --- /dev/null +++ b/packages/page-coretime/src/Overview/CoreDescriptors.tsx @@ -0,0 +1,50 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { CoreDescription } from '../types.js'; + +import React, { useRef } from 'react'; + +import { Table } from '@polkadot/react-components'; + +import { useTranslation } from '../translate.js'; +import CoreDescriptor from './CoreDescriptor.js'; + +interface Props { + className?: string; + coreInfos?: CoreDescription[] | CoreDescription; +} + +function CoreDescriptors({ className, coreInfos }: Props): React.ReactElement { + const { t } = useTranslation(); + let sanitized: CoreDescription[] = []; + + const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ + [t('core'), 'start', 1], + [t('current work'), 'start media--1300'], + [t('work queue'), 'start media--1600'], + ]); + + if (Array.isArray(coreInfos)) { + sanitized = coreInfos; + } else if (coreInfos) { + sanitized.push(coreInfos); + } + + return ( +
{`${maskAsPerc} %`} {sanitizedAssignment.toString()}
{`${maskAsPerc} %`} {sanitizedAssignment.toString()} {timeslice.toString()}
+ {sanitized?.map((v) => ( + + ))} +
+ ); +} + +export default React.memo(CoreDescriptors); diff --git a/packages/page-coretime/src/Overview/CoreQueue.tsx b/packages/page-coretime/src/Overview/CoreQueue.tsx new file mode 100644 index 000000000000..bd5ab109b754 --- /dev/null +++ b/packages/page-coretime/src/Overview/CoreQueue.tsx @@ -0,0 +1,28 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { PolkadotRuntimeParachainsAssignerCoretimeQueueDescriptor } from '@polkadot/types/lookup'; + +import React from 'react'; + +interface Props { + value?: PolkadotRuntimeParachainsAssignerCoretimeQueueDescriptor; +} + +function CoreQueue({ value }: Props): React.ReactElement { + if (value) { + return ( + <> + {value?.first.toString()} + {value?.last.toString()} + + ); + } else { + return ( + {'Queue empty'} + ) + } + +} + +export default React.memo(CoreQueue); diff --git a/packages/page-coretime/src/Overview/CurrentWork.tsx b/packages/page-coretime/src/Overview/CurrentWork.tsx new file mode 100644 index 000000000000..d2ade0a55345 --- /dev/null +++ b/packages/page-coretime/src/Overview/CurrentWork.tsx @@ -0,0 +1,53 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { PolkadotRuntimeParachainsAssignerCoretimeWorkState } from '@polkadot/types/lookup'; + +import React from 'react'; + +interface Props { + value?: PolkadotRuntimeParachainsAssignerCoretimeWorkState; +} + +function CurrentWork({ value }: Props): React.ReactElement { + const assignments: string[] = []; + if (value) { + if (value.assignments.length > 1) { + value.assignments.map((_, index) => { + const ratio = value.assignments[index][1].ratio.toNumber() / 57600 * 100; + if (value.assignments[index][0].isIdle) { + assignments.push(`${ratio}% Idle`) + } else if (value.assignments[index][0].isPool) { + assignments.push(`${ratio}% Pool`) + } else { + assignments.push(`${ratio}% Task: ${value.assignments[index][0].asTask.toString()}`) + } + } + ) + return ( + {assignments.join(', ')} + ); + } else { + if (value.assignments[0][0].isIdle) { + return ( + {`100% Idle`} + ); + } else if (value.assignments[0][0].isPool) { + return ( + {`100% Pool`} + ); + } else { + return ( + {`100% Task: ${value.assignments[0][0].asTask.toString()}`} + ); + } + } + + } else { + return ( + {'Queue empty'} + ) + } +} + +export default React.memo(CurrentWork); diff --git a/packages/page-coretime/src/Overview/QueueStatus.tsx b/packages/page-coretime/src/Overview/QueueStatus.tsx new file mode 100644 index 000000000000..b2dfc40fef35 --- /dev/null +++ b/packages/page-coretime/src/Overview/QueueStatus.tsx @@ -0,0 +1,38 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; + +import { FormatBalance } from '@polkadot/react-query'; + +import { OnDemandQueueStatus } from '../types.js'; + +interface Props { + className?: string; + value?: OnDemandQueueStatus; + query: string; +} + +function QueueStatus ({ className, value, query }: Props): React.ReactElement { + + if (query === 'traffic') { + return ( +
+ +
+ ) + } else { + return ( +
+ {value?.nextIndex.toString()} +
+ ) + } + +} + +export default React.memo(QueueStatus); diff --git a/packages/page-coretime/src/Overview/Summary.tsx b/packages/page-coretime/src/Overview/Summary.tsx index b5dbfe17e76b..632199ee067c 100644 --- a/packages/page-coretime/src/Overview/Summary.tsx +++ b/packages/page-coretime/src/Overview/Summary.tsx @@ -10,45 +10,65 @@ import { useTranslation } from '../translate.js'; import Cores from './Cores.js'; import Pools from './Pools.js'; import Timeslice from './Timeslice.js'; +import BrokerId from './BrokerId.js'; +import QueueStatus from './QueueStatus.js'; +import useQueueStatus from '../useQueueStatus.js'; -function Summary (): React.ReactElement { +interface Props { + relay?: boolean; +} +function Summary({ relay }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); - return ( - -
- {api.query.broker && ( - <> - - - - - - - - - - - - )} - {api.query.coretimeAssignmentProvider && ( - <> - - - - - - - - - - - - )} -
-
- ); + if (relay) { + const queueStatus = useQueueStatus(); + return ( + +
+ {api.query.coretimeAssignmentProvider && ( + <> + + + + + + + + + + + + )} +
+
+ ); + } else { + return ( + +
+ {api.query.broker && ( + <> + + + + + + + + + + + + )} +
+
+ ); + } + + } export default React.memo(Summary); diff --git a/packages/page-coretime/src/Overview/index.tsx b/packages/page-coretime/src/Overview/index.tsx index 006705897cb6..df82a2591fc3 100644 --- a/packages/page-coretime/src/Overview/index.tsx +++ b/packages/page-coretime/src/Overview/index.tsx @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { CoreWorkloadInfo, CoreWorkplanInfo } from '../types.js'; +import type { CoreDescription, CoreWorkloadInfo, CoreWorkplanInfo } from '../types.js'; import React, { useMemo, useState } from 'react'; @@ -11,14 +11,17 @@ import { useTranslation } from '../translate.js'; import Summary from './Summary.js'; import Workloads from './Workloads.js'; import Workplans from './Workplans.js'; +import CoreDescriptors from './CoreDescriptors.js'; interface Props { className?: string; workloadInfos?: CoreWorkloadInfo[]; workplanInfos?: CoreWorkplanInfo[]; + coreInfos?: CoreDescription[]; + relay?: boolean; } -function uniqByForEach (array: CoreWorkplanInfo[] | undefined) { +function uniqByForEach(array: CoreWorkplanInfo[] | undefined) { const workplanCores: number[] = []; const workplanTS: number[] = []; @@ -39,123 +42,141 @@ function uniqByForEach (array: CoreWorkplanInfo[] | undefined) { } } -function Overview ({ className, workloadInfos, workplanInfos }: Props): React.ReactElement { +function Overview({ className, workloadInfos, workplanInfos, coreInfos, relay }: Props): React.ReactElement { const { t } = useTranslation(); - const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); - const [workplanCoreSelected, setWorkplanCoreSelected] = useState(-1); - const [workplanSliceSelected, setWorkplanSliceSelected] = useState(-1); - - const workloadCores = workloadInfos?.length; - - const coreArr: number[] = useMemo(() => [], []); - - const len = workloadCores || 0; - - Array(len).fill(0).map((_, index) => coreArr.push(index)); - - const { workplanCores, workplanTS } = uniqByForEach(workplanInfos); - - workplanCores?.sort((a, b) => a - b); - workplanTS?.sort((a, b) => a - b); - - const workloadCoreOpts = useMemo( - () => [{ text: t('All active/available cores'), value: -1 }].concat( - coreArr - .map((c) => ({ - text: `Core ${c}`, - value: c - })) - .filter((v): v is { text: string, value: number } => !!v.text) - ), - [coreArr, t] - ); - const filteredWLC = useMemo( - () => { - return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected); - }, - [workloadInfos, workloadCoreSelected] - ); - const workplanCoreOpts = useMemo( - () => [{ text: t('All scehduled cores'), value: -1 }].concat( - workplanCores - .map((c) => ({ - text: `Core ${c}`, - value: c - })) - .filter((v): v is { text: string, value: number } => !!v.text) - ), - [workplanCores, t] - ); - - const filteredWorkplan = useMemo( - () => { - if (workplanCoreSelected === workplanSliceSelected) { - return workplanInfos; - } else if (workplanCoreSelected === -1) { - return workplanInfos?.filter(({ timeslice }) => timeslice === workplanSliceSelected); - } else if (workplanSliceSelected === -1) { - return workplanInfos?.filter(({ core }) => core === workplanCoreSelected); - } else { - return workplanInfos?.filter(({ core, timeslice }) => core === workplanCoreSelected && timeslice === workplanSliceSelected); + if (relay) { + + return ( +
+ + + + + + +
+ ); + + } else { + const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); + const [workplanCoreSelected, setWorkplanCoreSelected] = useState(-1); + const [workplanSliceSelected, setWorkplanSliceSelected] = useState(-1); + + const workloadCores = workloadInfos?.length; + + const coreArr: number[] = useMemo(() => [], []); + + const len = workloadCores || 0; + + Array(len).fill(0).map((_, index) => coreArr.push(index)); + + const { workplanCores, workplanTS } = uniqByForEach(workplanInfos); + + workplanCores?.sort((a, b) => a - b); + workplanTS?.sort((a, b) => a - b); + + const workloadCoreOpts = useMemo( + () => [{ text: t('All active/available cores'), value: -1 }].concat( + coreArr + .map((c) => ({ + text: `Core ${c}`, + value: c + })) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [coreArr, t] + ); + const filteredWLC = useMemo( + () => { + return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected); + }, + [workloadInfos, workloadCoreSelected] + ); + const workplanCoreOpts = useMemo( + () => [{ text: t('All scehduled cores'), value: -1 }].concat( + workplanCores + .map((c) => ({ + text: `Core ${c}`, + value: c + })) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [workplanCores, t] + ); + + const filteredWorkplan = useMemo( + () => { + if (workplanCoreSelected === workplanSliceSelected) { + return workplanInfos; + } else if (workplanCoreSelected === -1) { + return workplanInfos?.filter(({ timeslice }) => timeslice === workplanSliceSelected); + } else if (workplanSliceSelected === -1) { + return workplanInfos?.filter(({ core }) => core === workplanCoreSelected); + } else { + return workplanInfos?.filter(({ core, timeslice }) => core === workplanCoreSelected && timeslice === workplanSliceSelected); + } } - } - , - [workplanInfos, workplanCoreSelected, workplanSliceSelected] - ); - - const workplanTSOpts = useMemo( - () => [{ text: t('All available slices'), value: -1 }].concat( - workplanTS - .map((ts) => ({ - text: `Timeslice ${ts}`, - value: ts - })) - .filter((v): v is { text: string, value: number } => !!v.text) - ), - [workplanTS, t] - ); - - return ( -
- - - - - - - - - [{ text: t('All available slices'), value: -1 }].concat( + workplanTS + .map((ts) => ({ + text: `Timeslice ${ts}`, + value: ts + })) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [workplanTS, t] + ); + + return ( +
+ + + + - - - - - -
- ); + + + + + + + + + +
+ ); + } + + } export default React.memo(Overview); diff --git a/packages/page-coretime/src/index.tsx b/packages/page-coretime/src/index.tsx index 34a0c844a6e4..54f3240db796 100644 --- a/packages/page-coretime/src/index.tsx +++ b/packages/page-coretime/src/index.tsx @@ -11,13 +11,15 @@ import Overview from './Overview/index.js'; import { useTranslation } from './translate.js'; import useWorkloadInfos from './useWorkloadInfos.js'; import useWorkplanInfos from './useWorkplanInfos.js'; +import { useApi } from '@polkadot/react-hooks'; +import useCoreDescriptor from './useCoreDescriptor.js'; interface Props { basePath: string; className?: string; } -function createItemsRef (t: (key: string, options?: { replace: Record }) => string): TabItem[] { +function createItemsRef(t: (key: string, options?: { replace: Record }) => string): TabItem[] { return [ { isRoot: true, @@ -27,24 +29,41 @@ function createItemsRef (t: (key: string, options?: { replace: Record { +function CoretimeApp({ basePath, className }: Props): React.ReactElement { const { t } = useTranslation(); const itemsRef = useRef(createItemsRef(t)); - const workloadInfos = useWorkloadInfos(); - const workplanInfos = useWorkplanInfos(); - - return ( -
- - -
- ); + const { api } = useApi(); + + if (api.query.broker) { + const workloadInfos = useWorkloadInfos(); + const workplanInfos = useWorkplanInfos(); + + return ( +
+ + +
+ ); + } else { + const coreInfos = useCoreDescriptor(); + return ( +
+ + +
+ ); + } + } export default React.memo(CoretimeApp); diff --git a/packages/page-coretime/src/types.ts b/packages/page-coretime/src/types.ts index 4e449735fdef..d1a8264f6d13 100644 --- a/packages/page-coretime/src/types.ts +++ b/packages/page-coretime/src/types.ts @@ -1,7 +1,8 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; +import type { PalletBrokerScheduleItem, PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; +import type { u32, u128 } from '@polkadot/types'; export interface CoreWorkloadInfo { core: number; @@ -13,3 +14,15 @@ export interface CoreWorkplanInfo { core: number; info: PalletBrokerScheduleItem[]; } + +export interface CoreDescription { + core: number; + info: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[]; +} + +export interface OnDemandQueueStatus { + traffic: u128; + nextIndex: u32; + smallestIndex: u32; + freedIndices: [string, u32][]; +} diff --git a/packages/page-coretime/src/useCoreDescriptor.ts b/packages/page-coretime/src/useCoreDescriptor.ts new file mode 100644 index 000000000000..572707eba8db --- /dev/null +++ b/packages/page-coretime/src/useCoreDescriptor.ts @@ -0,0 +1,51 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { StorageKey, u32, Vec } from '@polkadot/types'; + +import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; + +import { useEffect, useState } from 'react'; + +import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; +import { CoreDescription } from './types.js'; + +function extractInfo(info: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[], core: number) { + return { + core, + info, + }; +} + +const OPT_KEY = { + transform: (keys: StorageKey<[u32]>[]): u32[] => + keys.map(({ args: [id] }) => id) +}; + +function useCoreDescriptorImpl(): CoreDescription[] | undefined { + const { api } = useApi(); + const keys = useMapKeys(api.query.coretimeAssignmentProvider.coreDescriptors, [], OPT_KEY); + + const sanitizedKeys = keys?.map((_, index) => { + return index; + }); + + sanitizedKeys?.pop(); + + const coreDescriptors = useCall<[[number[]], Vec[]]>(api.query.coretimeAssignmentProvider.coreDescriptors.multi, [sanitizedKeys], { withParams: true }); + + const [state, setState] = useState(); + + useEffect((): void => { + coreDescriptors && + setState( + coreDescriptors[0][0].map((info, index) => { + return extractInfo(coreDescriptors[1][index], info)} + ) + ); + }, [coreDescriptors]); + + return state; +} + +export default createNamedHook('useCoreDescriptor', useCoreDescriptorImpl); diff --git a/packages/page-coretime/src/useCoreSchedules.ts b/packages/page-coretime/src/useCoreSchedules.ts new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/page-coretime/src/useQueueStatus.tsx b/packages/page-coretime/src/useQueueStatus.tsx new file mode 100644 index 000000000000..1ca71b440f4e --- /dev/null +++ b/packages/page-coretime/src/useQueueStatus.tsx @@ -0,0 +1,36 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { useEffect, useState } from 'react'; + +import { createNamedHook, useApi, useCall } from '@polkadot/react-hooks'; +import { OnDemandQueueStatus } from './types.js'; + +function extractInfo(value: OnDemandQueueStatus) { + + return { + traffic: value.traffic, + nextIndex: value.nextIndex, + smallestIndex: value.smallestIndex, + freedIndices: value.freedIndices, + }; +} + +function useQueueStatusImpl(): OnDemandQueueStatus | undefined { + const { api } = useApi(); + + const queue = useCall(api.query.onDemandAssignmentProvider.queueStatus); + + const [state, setState] = useState(); + + useEffect((): void => { + queue && + setState( + extractInfo(queue) + ); + }, [queue]); + + return state; +} + +export default createNamedHook('useQueueStatus', useQueueStatusImpl); diff --git a/packages/page-coretime/src/useWorkloadInfos.ts b/packages/page-coretime/src/useWorkloadInfos.ts index 9d9ddba36369..aaefd7e323a6 100644 --- a/packages/page-coretime/src/useWorkloadInfos.ts +++ b/packages/page-coretime/src/useWorkloadInfos.ts @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { StorageKey, u16, Vec } from '@polkadot/types'; +import type { StorageKey, u32, Vec } from '@polkadot/types'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; import type { BN } from '@polkadot/util'; import type { CoreWorkloadInfo } from './types.js'; @@ -18,7 +18,7 @@ function extractInfo (info: PalletBrokerScheduleItem[], core: number): CoreWorkl } const OPT_KEY = { - transform: (keys: StorageKey<[u16]>[]): u16[] => + transform: (keys: StorageKey<[u32]>[]): u32[] => keys.map(({ args: [core] }) => core) }; diff --git a/packages/react-query/src/CoreDescriptor.tsx b/packages/react-query/src/CoreDescriptor.tsx index f4361bae0c2a..ba4e6bb4e7c3 100644 --- a/packages/react-query/src/CoreDescriptor.tsx +++ b/packages/react-query/src/CoreDescriptor.tsx @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/react-query authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types-augment/lookup/types-kusama'; +import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; import React from 'react'; diff --git a/yarn.lock b/yarn.lock index 233f3b8bee37..f828053c44f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1575,8 +1575,8 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-coretime@workspace:packages/page-coretime" dependencies: - "@polkadot/react-components": "npm:^0.133.2-119-x" - "@polkadot/react-query": "npm:^0.133.2-119-x" + "@polkadot/react-components": "npm:0.135.2-44-x" + "@polkadot/react-query": "npm:0.135.2-44-x" peerDependencies: react: "*" react-dom: "*" @@ -2300,7 +2300,7 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/react-components@npm:^0.135.2-44-x, @polkadot/react-components@workspace:packages/react-components": +"@polkadot/react-components@npm:0.135.2-44-x, @polkadot/react-components@npm:^0.135.2-44-x, @polkadot/react-components@workspace:packages/react-components": version: 0.0.0-use.local resolution: "@polkadot/react-components@workspace:packages/react-components" dependencies: @@ -2423,7 +2423,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-query@npm:^0.135.2-44-x, @polkadot/react-query@workspace:packages/react-query": +"@polkadot/react-query@npm:0.135.2-44-x, @polkadot/react-query@npm:^0.135.2-44-x, @polkadot/react-query@workspace:packages/react-query": version: 0.0.0-use.local resolution: "@polkadot/react-query@workspace:packages/react-query" peerDependencies: From b1147f5c935a3adbfe4076aa052dc34a00831d6d Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 15 Apr 2024 14:14:17 -0300 Subject: [PATCH 12/56] linting --- packages/apps-routing/src/coretime.ts | 2 +- packages/page-coretime/package.json | 4 +- .../page-coretime/src/Overview/BrokerId.tsx | 26 +-- .../src/Overview/CoreDescriptor.tsx | 62 +++---- .../src/Overview/CoreDescriptors.tsx | 64 +++---- .../page-coretime/src/Overview/CoreQueue.tsx | 29 ++-- .../src/Overview/CurrentWork.tsx | 22 +-- .../src/Overview/QueueStatus.tsx | 42 +++-- .../page-coretime/src/Overview/Summary.tsx | 29 ++-- packages/page-coretime/src/Overview/index.tsx | 159 +++++++++--------- packages/page-coretime/src/index.tsx | 22 +-- packages/page-coretime/src/types.ts | 2 +- .../page-coretime/src/useCoreDescriptor.ts | 50 +++--- .../page-coretime/src/useCoreSchedules.ts | 0 packages/page-coretime/src/useQueueStatus.tsx | 36 ++-- yarn.lock | 10 +- 16 files changed, 279 insertions(+), 280 deletions(-) delete mode 100644 packages/page-coretime/src/useCoreSchedules.ts diff --git a/packages/apps-routing/src/coretime.ts b/packages/apps-routing/src/coretime.ts index 2a6dc1d7cafc..7ec91fbc81d8 100644 --- a/packages/apps-routing/src/coretime.ts +++ b/packages/apps-routing/src/coretime.ts @@ -11,7 +11,7 @@ export default function create (t: TFunction): Route { display: { needsApi: [ ['query.broker.status', - 'query.coretimeAssignmentProvider.coreDescriptors'] + 'query.coretimeAssignmentProvider.coreDescriptors'] ], needsApiInstances: true }, diff --git a/packages/page-coretime/package.json b/packages/page-coretime/package.json index f7ec62036b16..3751587cb9d9 100644 --- a/packages/page-coretime/package.json +++ b/packages/page-coretime/package.json @@ -16,8 +16,8 @@ "type": "module", "version": "0.135.2-44-x", "dependencies": { - "@polkadot/react-components": "0.135.2-44-x", - "@polkadot/react-query": "0.135.2-44-x" + "@polkadot/react-components": "0.135.2-48-x", + "@polkadot/react-query": "0.135.2-48-x" }, "peerDependencies": { "react": "*", diff --git a/packages/page-coretime/src/Overview/BrokerId.tsx b/packages/page-coretime/src/Overview/BrokerId.tsx index 309f174cc8ab..622a0e3471d1 100644 --- a/packages/page-coretime/src/Overview/BrokerId.tsx +++ b/packages/page-coretime/src/Overview/BrokerId.tsx @@ -1,25 +1,27 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { useApi } from '@polkadot/react-hooks'; import type { u32 } from '@polkadot/types'; import React from 'react'; +import { useApi } from '@polkadot/react-hooks'; + interface Props { - className?: string; - children?: React.ReactNode; + className?: string; + children?: React.ReactNode; } -function BrokerId({ children, className }: Props): React.ReactElement | null { - const { api } = useApi(); - const id = api.consts.coretime?.brokerId as u32; - return ( -
- {id?.toString()} - {children} -
- ); +function BrokerId ({ children, className }: Props): React.ReactElement | null { + const { api } = useApi(); + const id = api.consts.coretime?.brokerId as u32; + + return ( +
+ {id?.toString()} + {children} +
+ ); } export default React.memo(BrokerId); diff --git a/packages/page-coretime/src/Overview/CoreDescriptor.tsx b/packages/page-coretime/src/Overview/CoreDescriptor.tsx index 24d6cfe17897..b1b4ef97cff3 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptor.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptor.tsx @@ -1,44 +1,48 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { CoreDescription } from '../types.js'; import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; - - -import CoreQueue from './CoreQueue.js'; +import type { CoreDescription } from '../types.js'; import React from 'react'; + import { Table } from '@polkadot/react-components'; + +import CoreQueue from './CoreQueue.js'; import CurrentWork from './CurrentWork.js'; interface Props { - className?: string; - value: CoreDescription; + className?: string; + value: CoreDescription; } -function CoreDescriptor({ className, value: { core, info } }: Props): React.ReactElement { - let sanitized: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[] = []; - - if (Array.isArray(info)) { - sanitized = info; - } else if (info) { - sanitized.push(info); - } - - return ( - - - {sanitized?.map((i) => ( - - )) - } - {sanitized?.map((i) => ( - - ))} - - ); +function CoreDescriptor ({ className, value: { core, info } }: Props): React.ReactElement { + let sanitized: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[] = []; + + if (Array.isArray(info)) { + sanitized = info; + } else if (info) { + sanitized.push(info); + } + + return ( + + + {sanitized?.map((i) => ( + + )) + } + {sanitized?.map((i) => ( + + ))} + + ); } export default React.memo(CoreDescriptor); diff --git a/packages/page-coretime/src/Overview/CoreDescriptors.tsx b/packages/page-coretime/src/Overview/CoreDescriptors.tsx index 2e49e41490f5..74efae3a6873 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptors.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptors.tsx @@ -11,40 +11,40 @@ import { useTranslation } from '../translate.js'; import CoreDescriptor from './CoreDescriptor.js'; interface Props { - className?: string; - coreInfos?: CoreDescription[] | CoreDescription; + className?: string; + coreInfos?: CoreDescription[] | CoreDescription; } -function CoreDescriptors({ className, coreInfos }: Props): React.ReactElement { - const { t } = useTranslation(); - let sanitized: CoreDescription[] = []; - - const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ - [t('core'), 'start', 1], - [t('current work'), 'start media--1300'], - [t('work queue'), 'start media--1600'], - ]); - - if (Array.isArray(coreInfos)) { - sanitized = coreInfos; - } else if (coreInfos) { - sanitized.push(coreInfos); - } - - return ( - - {sanitized?.map((v) => ( - - ))} -
- ); +function CoreDescriptors ({ className, coreInfos }: Props): React.ReactElement { + const { t } = useTranslation(); + let sanitized: CoreDescription[] = []; + + const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ + [t('core'), 'start', 1], + [t('current work'), 'start media--1300'], + [t('work queue'), 'start media--1600'] + ]); + + if (Array.isArray(coreInfos)) { + sanitized = coreInfos; + } else if (coreInfos) { + sanitized.push(coreInfos); + } + + return ( + + {sanitized?.map((v) => ( + + ))} +
+ ); } export default React.memo(CoreDescriptors); diff --git a/packages/page-coretime/src/Overview/CoreQueue.tsx b/packages/page-coretime/src/Overview/CoreQueue.tsx index bd5ab109b754..a8f1e59c7015 100644 --- a/packages/page-coretime/src/Overview/CoreQueue.tsx +++ b/packages/page-coretime/src/Overview/CoreQueue.tsx @@ -6,23 +6,22 @@ import type { PolkadotRuntimeParachainsAssignerCoretimeQueueDescriptor } from '@ import React from 'react'; interface Props { - value?: PolkadotRuntimeParachainsAssignerCoretimeQueueDescriptor; + value?: PolkadotRuntimeParachainsAssignerCoretimeQueueDescriptor; } -function CoreQueue({ value }: Props): React.ReactElement { - if (value) { - return ( - <> - {value?.first.toString()} - {value?.last.toString()} - - ); - } else { - return ( - {'Queue empty'} - ) - } - +function CoreQueue ({ value }: Props): React.ReactElement { + if (value) { + return ( + <> + {value?.first.toString()} + {value?.last.toString()} + + ); + } else { + return ( + {'Queue empty'} + ); + } } export default React.memo(CoreQueue); diff --git a/packages/page-coretime/src/Overview/CurrentWork.tsx b/packages/page-coretime/src/Overview/CurrentWork.tsx index d2ade0a55345..41d0a54f6e12 100644 --- a/packages/page-coretime/src/Overview/CurrentWork.tsx +++ b/packages/page-coretime/src/Overview/CurrentWork.tsx @@ -9,32 +9,35 @@ interface Props { value?: PolkadotRuntimeParachainsAssignerCoretimeWorkState; } -function CurrentWork({ value }: Props): React.ReactElement { +function CurrentWork ({ value }: Props): React.ReactElement { const assignments: string[] = []; + if (value) { if (value.assignments.length > 1) { - value.assignments.map((_, index) => { + value.assignments.forEach((_, index) => { const ratio = value.assignments[index][1].ratio.toNumber() / 57600 * 100; + if (value.assignments[index][0].isIdle) { - assignments.push(`${ratio}% Idle`) + assignments.push(`${ratio}% Idle`); } else if (value.assignments[index][0].isPool) { - assignments.push(`${ratio}% Pool`) + assignments.push(`${ratio}% Pool`); } else { - assignments.push(`${ratio}% Task: ${value.assignments[index][0].asTask.toString()}`) + assignments.push(`${ratio}% Task: ${value.assignments[index][0].asTask.toString()}`); } } - ) + ); + return ( {assignments.join(', ')} ); } else { if (value.assignments[0][0].isIdle) { return ( - {`100% Idle`} + {'100% Idle'} ); } else if (value.assignments[0][0].isPool) { return ( - {`100% Pool`} + {'100% Pool'} ); } else { return ( @@ -42,11 +45,10 @@ function CurrentWork({ value }: Props): React.ReactElement { ); } } - } else { return ( {'Queue empty'} - ) + ); } } diff --git a/packages/page-coretime/src/Overview/QueueStatus.tsx b/packages/page-coretime/src/Overview/QueueStatus.tsx index b2dfc40fef35..6bed5449c31c 100644 --- a/packages/page-coretime/src/Overview/QueueStatus.tsx +++ b/packages/page-coretime/src/Overview/QueueStatus.tsx @@ -1,38 +1,36 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { OnDemandQueueStatus } from '../types.js'; + import React from 'react'; import { FormatBalance } from '@polkadot/react-query'; -import { OnDemandQueueStatus } from '../types.js'; - interface Props { className?: string; value?: OnDemandQueueStatus; query: string; } -function QueueStatus ({ className, value, query }: Props): React.ReactElement { - - if (query === 'traffic') { - return ( -
- -
- ) - } else { - return ( -
- {value?.nextIndex.toString()} -
- ) - } - +function QueueStatus ({ className, query, value }: Props): React.ReactElement { + if (query === 'traffic') { + return ( +
+ +
+ ); + } else { + return ( +
+ {value?.nextIndex.toString()} +
+ ); + } } export default React.memo(QueueStatus); diff --git a/packages/page-coretime/src/Overview/Summary.tsx b/packages/page-coretime/src/Overview/Summary.tsx index 632199ee067c..2b67bf1997ce 100644 --- a/packages/page-coretime/src/Overview/Summary.tsx +++ b/packages/page-coretime/src/Overview/Summary.tsx @@ -7,37 +7,42 @@ import { CardSummary, SummaryBox } from '@polkadot/react-components'; import { useApi } from '@polkadot/react-hooks'; import { useTranslation } from '../translate.js'; +import useQueueStatus from '../useQueueStatus.js'; +import BrokerId from './BrokerId.js'; import Cores from './Cores.js'; import Pools from './Pools.js'; -import Timeslice from './Timeslice.js'; -import BrokerId from './BrokerId.js'; import QueueStatus from './QueueStatus.js'; -import useQueueStatus from '../useQueueStatus.js'; +import Timeslice from './Timeslice.js'; interface Props { relay?: boolean; } -function Summary({ relay }: Props): React.ReactElement { + +function Summary ({ relay }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); + const queueStatus = useQueueStatus(); if (relay) { - const queueStatus = useQueueStatus(); return ( -
+
{api.query.coretimeAssignmentProvider && ( <> - + - + @@ -48,7 +53,7 @@ function Summary({ relay }: Props): React.ReactElement { } else { return ( -
+
{api.query.broker && ( <> @@ -67,8 +72,6 @@ function Summary({ relay }: Props): React.ReactElement { ); } - - } export default React.memo(Summary); diff --git a/packages/page-coretime/src/Overview/index.tsx b/packages/page-coretime/src/Overview/index.tsx index df82a2591fc3..9217d097b62c 100644 --- a/packages/page-coretime/src/Overview/index.tsx +++ b/packages/page-coretime/src/Overview/index.tsx @@ -8,10 +8,10 @@ import React, { useMemo, useState } from 'react'; import { Button, Columar, Dropdown } from '@polkadot/react-components'; import { useTranslation } from '../translate.js'; +import CoreDescriptors from './CoreDescriptors.js'; import Summary from './Summary.js'; import Workloads from './Workloads.js'; import Workplans from './Workplans.js'; -import CoreDescriptors from './CoreDescriptors.js'; interface Props { className?: string; @@ -21,7 +21,7 @@ interface Props { relay?: boolean; } -function uniqByForEach(array: CoreWorkplanInfo[] | undefined) { +function uniqByForEach (array: CoreWorkplanInfo[] | undefined) { const workplanCores: number[] = []; const workplanTS: number[] = []; @@ -42,98 +42,93 @@ function uniqByForEach(array: CoreWorkplanInfo[] | undefined) { } } -function Overview({ className, workloadInfos, workplanInfos, coreInfos, relay }: Props): React.ReactElement { +function Overview ({ className, coreInfos, relay, workloadInfos, workplanInfos }: Props): React.ReactElement { const { t } = useTranslation(); + const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); + const [workplanCoreSelected, setWorkplanCoreSelected] = useState(-1); + const [workplanSliceSelected, setWorkplanSliceSelected] = useState(-1); + const workloadCores = workloadInfos?.length; + + const coreArr: number[] = useMemo(() => [], []); + + const len = workloadCores || 0; + + Array(len).fill(0).map((_, index) => coreArr.push(index)); + + const { workplanCores, workplanTS } = uniqByForEach(workplanInfos); + + workplanCores?.sort((a, b) => a - b); + workplanTS?.sort((a, b) => a - b); + + const workloadCoreOpts = useMemo( + () => [{ text: t('All active/available cores'), value: -1 }].concat( + coreArr + .map((c) => ({ + text: `Core ${c}`, + value: c + })) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [coreArr, t] + ); + const filteredWLC = useMemo( + () => { + return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected); + }, + [workloadInfos, workloadCoreSelected] + ); + const workplanCoreOpts = useMemo( + () => [{ text: t('All scehduled cores'), value: -1 }].concat( + workplanCores + .map((c) => ({ + text: `Core ${c}`, + value: c + })) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [workplanCores, t] + ); + + const filteredWorkplan = useMemo( + () => { + if (workplanCoreSelected === workplanSliceSelected) { + return workplanInfos; + } else if (workplanCoreSelected === -1) { + return workplanInfos?.filter(({ timeslice }) => timeslice === workplanSliceSelected); + } else if (workplanSliceSelected === -1) { + return workplanInfos?.filter(({ core }) => core === workplanCoreSelected); + } else { + return workplanInfos?.filter(({ core, timeslice }) => core === workplanCoreSelected && timeslice === workplanSliceSelected); + } + } + , + [workplanInfos, workplanCoreSelected, workplanSliceSelected] + ); + + const workplanTSOpts = useMemo( + () => [{ text: t('All available slices'), value: -1 }].concat( + workplanTS + .map((ts) => ({ + text: `Timeslice ${ts}`, + value: ts + })) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [workplanTS, t] + ); if (relay) { - return (
- +
); - } else { - const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); - const [workplanCoreSelected, setWorkplanCoreSelected] = useState(-1); - const [workplanSliceSelected, setWorkplanSliceSelected] = useState(-1); - - const workloadCores = workloadInfos?.length; - - const coreArr: number[] = useMemo(() => [], []); - - const len = workloadCores || 0; - - Array(len).fill(0).map((_, index) => coreArr.push(index)); - - const { workplanCores, workplanTS } = uniqByForEach(workplanInfos); - - workplanCores?.sort((a, b) => a - b); - workplanTS?.sort((a, b) => a - b); - - const workloadCoreOpts = useMemo( - () => [{ text: t('All active/available cores'), value: -1 }].concat( - coreArr - .map((c) => ({ - text: `Core ${c}`, - value: c - })) - .filter((v): v is { text: string, value: number } => !!v.text) - ), - [coreArr, t] - ); - const filteredWLC = useMemo( - () => { - return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected); - }, - [workloadInfos, workloadCoreSelected] - ); - const workplanCoreOpts = useMemo( - () => [{ text: t('All scehduled cores'), value: -1 }].concat( - workplanCores - .map((c) => ({ - text: `Core ${c}`, - value: c - })) - .filter((v): v is { text: string, value: number } => !!v.text) - ), - [workplanCores, t] - ); - - const filteredWorkplan = useMemo( - () => { - if (workplanCoreSelected === workplanSliceSelected) { - return workplanInfos; - } else if (workplanCoreSelected === -1) { - return workplanInfos?.filter(({ timeslice }) => timeslice === workplanSliceSelected); - } else if (workplanSliceSelected === -1) { - return workplanInfos?.filter(({ core }) => core === workplanCoreSelected); - } else { - return workplanInfos?.filter(({ core, timeslice }) => core === workplanCoreSelected && timeslice === workplanSliceSelected); - } - } - , - [workplanInfos, workplanCoreSelected, workplanSliceSelected] - ); - - const workplanTSOpts = useMemo( - () => [{ text: t('All available slices'), value: -1 }].concat( - workplanTS - .map((ts) => ({ - text: `Timeslice ${ts}`, - value: ts - })) - .filter((v): v is { text: string, value: number } => !!v.text) - ), - [workplanTS, t] - ); - return (
@@ -175,8 +170,6 @@ function Overview({ className, workloadInfos, workplanInfos, coreInfos, relay }:
); } - - } export default React.memo(Overview); diff --git a/packages/page-coretime/src/index.tsx b/packages/page-coretime/src/index.tsx index 54f3240db796..c7d003d328fb 100644 --- a/packages/page-coretime/src/index.tsx +++ b/packages/page-coretime/src/index.tsx @@ -6,20 +6,20 @@ import type { TabItem } from '@polkadot/react-components/types'; import React, { useRef } from 'react'; import { Tabs } from '@polkadot/react-components'; +import { useApi } from '@polkadot/react-hooks'; import Overview from './Overview/index.js'; import { useTranslation } from './translate.js'; +import useCoreDescriptor from './useCoreDescriptor.js'; import useWorkloadInfos from './useWorkloadInfos.js'; import useWorkplanInfos from './useWorkplanInfos.js'; -import { useApi } from '@polkadot/react-hooks'; -import useCoreDescriptor from './useCoreDescriptor.js'; interface Props { basePath: string; className?: string; } -function createItemsRef(t: (key: string, options?: { replace: Record }) => string): TabItem[] { +function createItemsRef (t: (key: string, options?: { replace: Record }) => string): TabItem[] { return [ { isRoot: true, @@ -29,15 +29,15 @@ function createItemsRef(t: (key: string, options?: { replace: Record { +function CoretimeApp ({ basePath, className }: Props): React.ReactElement { const { t } = useTranslation(); const itemsRef = useRef(createItemsRef(t)); const { api } = useApi(); + const coreInfos = useCoreDescriptor(); + const workloadInfos = useWorkloadInfos(); + const workplanInfos = useWorkplanInfos(); if (api.query.broker) { - const workloadInfos = useWorkloadInfos(); - const workplanInfos = useWorkplanInfos(); - return (
); } else { - const coreInfos = useCoreDescriptor(); return (
- +
); } - } export default React.memo(CoretimeApp); diff --git a/packages/page-coretime/src/types.ts b/packages/page-coretime/src/types.ts index d1a8264f6d13..830872b585ae 100644 --- a/packages/page-coretime/src/types.ts +++ b/packages/page-coretime/src/types.ts @@ -1,8 +1,8 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { PalletBrokerScheduleItem, PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; import type { u32, u128 } from '@polkadot/types'; +import type { PalletBrokerScheduleItem, PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; export interface CoreWorkloadInfo { core: number; diff --git a/packages/page-coretime/src/useCoreDescriptor.ts b/packages/page-coretime/src/useCoreDescriptor.ts index 572707eba8db..443048808bb4 100644 --- a/packages/page-coretime/src/useCoreDescriptor.ts +++ b/packages/page-coretime/src/useCoreDescriptor.ts @@ -2,50 +2,50 @@ // SPDX-License-Identifier: Apache-2.0 import type { StorageKey, u32, Vec } from '@polkadot/types'; - import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; +import type { CoreDescription } from './types.js'; import { useEffect, useState } from 'react'; import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; -import { CoreDescription } from './types.js'; -function extractInfo(info: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[], core: number) { - return { - core, - info, - }; +function extractInfo (info: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[], core: number) { + return { + core, + info + }; } const OPT_KEY = { - transform: (keys: StorageKey<[u32]>[]): u32[] => - keys.map(({ args: [id] }) => id) + transform: (keys: StorageKey<[u32]>[]): u32[] => + keys.map(({ args: [id] }) => id) }; -function useCoreDescriptorImpl(): CoreDescription[] | undefined { - const { api } = useApi(); - const keys = useMapKeys(api.query.coretimeAssignmentProvider.coreDescriptors, [], OPT_KEY); +function useCoreDescriptorImpl (): CoreDescription[] | undefined { + const { api } = useApi(); + const keys = useMapKeys(api.query.coretimeAssignmentProvider.coreDescriptors, [], OPT_KEY); - const sanitizedKeys = keys?.map((_, index) => { - return index; - }); + const sanitizedKeys = keys?.map((_, index) => { + return index; + }); - sanitizedKeys?.pop(); + sanitizedKeys?.pop(); - const coreDescriptors = useCall<[[number[]], Vec[]]>(api.query.coretimeAssignmentProvider.coreDescriptors.multi, [sanitizedKeys], { withParams: true }); + const coreDescriptors = useCall<[[number[]], Vec[]]>(api.query.coretimeAssignmentProvider.coreDescriptors.multi, [sanitizedKeys], { withParams: true }); - const [state, setState] = useState(); + const [state, setState] = useState(); - useEffect((): void => { - coreDescriptors && + useEffect((): void => { + coreDescriptors && setState( - coreDescriptors[0][0].map((info, index) => { - return extractInfo(coreDescriptors[1][index], info)} - ) + coreDescriptors[0][0].map((info, index) => { + return extractInfo(coreDescriptors[1][index], info); + } + ) ); - }, [coreDescriptors]); + }, [coreDescriptors]); - return state; + return state; } export default createNamedHook('useCoreDescriptor', useCoreDescriptorImpl); diff --git a/packages/page-coretime/src/useCoreSchedules.ts b/packages/page-coretime/src/useCoreSchedules.ts deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/page-coretime/src/useQueueStatus.tsx b/packages/page-coretime/src/useQueueStatus.tsx index 1ca71b440f4e..4d31064798f6 100644 --- a/packages/page-coretime/src/useQueueStatus.tsx +++ b/packages/page-coretime/src/useQueueStatus.tsx @@ -1,36 +1,36 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { OnDemandQueueStatus } from './types.js'; + import { useEffect, useState } from 'react'; import { createNamedHook, useApi, useCall } from '@polkadot/react-hooks'; -import { OnDemandQueueStatus } from './types.js'; - -function extractInfo(value: OnDemandQueueStatus) { - return { - traffic: value.traffic, - nextIndex: value.nextIndex, - smallestIndex: value.smallestIndex, - freedIndices: value.freedIndices, - }; +function extractInfo (value: OnDemandQueueStatus) { + return { + freedIndices: value.freedIndices, + nextIndex: value.nextIndex, + smallestIndex: value.smallestIndex, + traffic: value.traffic + }; } -function useQueueStatusImpl(): OnDemandQueueStatus | undefined { - const { api } = useApi(); +function useQueueStatusImpl (): OnDemandQueueStatus | undefined { + const { api } = useApi(); - const queue = useCall(api.query.onDemandAssignmentProvider.queueStatus); + const queue = useCall(api.query.onDemandAssignmentProvider.queueStatus); - const [state, setState] = useState(); + const [state, setState] = useState(); - useEffect((): void => { - queue && + useEffect((): void => { + queue && setState( - extractInfo(queue) + extractInfo(queue) ); - }, [queue]); + }, [queue]); - return state; + return state; } export default createNamedHook('useQueueStatus', useQueueStatusImpl); diff --git a/yarn.lock b/yarn.lock index 43ce841eb39c..bc09f4538a2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1575,8 +1575,8 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-coretime@workspace:packages/page-coretime" dependencies: - "@polkadot/react-components": "npm:0.135.2-44-x" - "@polkadot/react-query": "npm:0.135.2-44-x" + "@polkadot/react-components": "npm:0.135.2-48-x" + "@polkadot/react-query": "npm:0.135.2-48-x" peerDependencies: react: "*" react-dom: "*" @@ -2300,7 +2300,7 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/react-components@npm:^0.135.2-48-x, @polkadot/react-components@workspace:packages/react-components": +"@polkadot/react-components@npm:0.135.2-48-x, @polkadot/react-components@npm:^0.135.2-48-x, @polkadot/react-components@workspace:packages/react-components": version: 0.0.0-use.local resolution: "@polkadot/react-components@workspace:packages/react-components" dependencies: @@ -2423,9 +2423,7 @@ __metadata: languageName: node linkType: hard - -"@polkadot/react-query@npm:^0.135.2-48-x, @polkadot/react-query@workspace:packages/react-query": - +"@polkadot/react-query@npm:0.135.2-48-x, @polkadot/react-query@npm:^0.135.2-48-x, @polkadot/react-query@workspace:packages/react-query": version: 0.0.0-use.local resolution: "@polkadot/react-query@workspace:packages/react-query" peerDependencies: From 385eee83209351927f7b9e17106389022488e18c Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 15 Apr 2024 14:51:53 -0300 Subject: [PATCH 13/56] refactoring hooks --- packages/page-coretime/src/Overview/Summary.tsx | 7 ++++--- packages/page-coretime/src/Overview/Workplans.tsx | 2 +- packages/page-coretime/src/index.tsx | 5 +---- packages/react-hooks/src/index.ts | 4 ++++ .../src/useCoreDescriptor.ts | 2 +- .../src/useQueueStatus.ts} | 2 +- .../{page-coretime => react-hooks}/src/useWorkloadInfos.ts | 2 +- .../{page-coretime => react-hooks}/src/useWorkplanInfos.ts | 2 +- 8 files changed, 14 insertions(+), 12 deletions(-) rename packages/{page-coretime => react-hooks}/src/useCoreDescriptor.ts (95%) rename packages/{page-coretime/src/useQueueStatus.tsx => react-hooks/src/useQueueStatus.ts} (92%) rename packages/{page-coretime => react-hooks}/src/useWorkloadInfos.ts (94%) rename packages/{page-coretime => react-hooks}/src/useWorkplanInfos.ts (95%) diff --git a/packages/page-coretime/src/Overview/Summary.tsx b/packages/page-coretime/src/Overview/Summary.tsx index 2b67bf1997ce..93141a6b586e 100644 --- a/packages/page-coretime/src/Overview/Summary.tsx +++ b/packages/page-coretime/src/Overview/Summary.tsx @@ -1,13 +1,14 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { OnDemandQueueStatus } from '../types.js'; + import React from 'react'; import { CardSummary, SummaryBox } from '@polkadot/react-components'; -import { useApi } from '@polkadot/react-hooks'; +import { useApi, useQueueStatus } from '@polkadot/react-hooks'; import { useTranslation } from '../translate.js'; -import useQueueStatus from '../useQueueStatus.js'; import BrokerId from './BrokerId.js'; import Cores from './Cores.js'; import Pools from './Pools.js'; @@ -21,7 +22,7 @@ interface Props { function Summary ({ relay }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); - const queueStatus = useQueueStatus(); + const queueStatus: OnDemandQueueStatus | undefined = useQueueStatus(); if (relay) { return ( diff --git a/packages/page-coretime/src/Overview/Workplans.tsx b/packages/page-coretime/src/Overview/Workplans.tsx index 21bcfe655fdb..fc47b8a804e4 100644 --- a/packages/page-coretime/src/Overview/Workplans.tsx +++ b/packages/page-coretime/src/Overview/Workplans.tsx @@ -37,7 +37,7 @@ function Workplans ({ className, filteredWorkplan }: Props): React.ReactElement< return ( diff --git a/packages/page-coretime/src/index.tsx b/packages/page-coretime/src/index.tsx index c7d003d328fb..f39a059d48e1 100644 --- a/packages/page-coretime/src/index.tsx +++ b/packages/page-coretime/src/index.tsx @@ -6,13 +6,10 @@ import type { TabItem } from '@polkadot/react-components/types'; import React, { useRef } from 'react'; import { Tabs } from '@polkadot/react-components'; -import { useApi } from '@polkadot/react-hooks'; +import { useApi, useCoreDescriptor, useWorkloadInfos, useWorkplanInfos } from '@polkadot/react-hooks'; import Overview from './Overview/index.js'; import { useTranslation } from './translate.js'; -import useCoreDescriptor from './useCoreDescriptor.js'; -import useWorkloadInfos from './useWorkloadInfos.js'; -import useWorkplanInfos from './useWorkplanInfos.js'; interface Props { basePath: string; diff --git a/packages/react-hooks/src/index.ts b/packages/react-hooks/src/index.ts index c24ec9133836..46b88d08ab8b 100644 --- a/packages/react-hooks/src/index.ts +++ b/packages/react-hooks/src/index.ts @@ -27,6 +27,7 @@ export { useCall } from './useCall.js'; export { useCallMulti } from './useCallMulti.js'; export { useCollectiveInstance } from './useCollectiveInstance.js'; export { useCollectiveMembers } from './useCollectiveMembers.js'; +export { default as useCoreDescriptor } from './useCoreDescriptor.js'; export { useDebounce } from './useDebounce.js'; export { useDelegations } from './useDelegations.js'; export { useDeriveAccountFlags } from './useDeriveAccountFlags.js'; @@ -65,6 +66,7 @@ export { usePopupWindow } from './usePopupWindow.js'; export { usePreimage } from './usePreimage.js'; export { useProxies } from './useProxies.js'; export { useQueue } from './useQueue.js'; +export { default as useQueueStatus } from './useQueueStatus.js'; export { useRegistrars } from './useRegistrars.js'; export { useSavedFlags } from './useSavedFlags.js'; export { useScroll } from './useScroll.js'; @@ -83,3 +85,5 @@ export { useVotingStatus } from './useVotingStatus.js'; export { useWeight } from './useWeight.js'; export { useWindowColumns } from './useWindowColumns.js'; export { useWindowSize } from './useWindowSize.js'; +export { default as useWorkloadInfos } from './useWorkloadInfos.js'; +export { default as useWorkplanInfos } from './useWorkplanInfos.js'; diff --git a/packages/page-coretime/src/useCoreDescriptor.ts b/packages/react-hooks/src/useCoreDescriptor.ts similarity index 95% rename from packages/page-coretime/src/useCoreDescriptor.ts rename to packages/react-hooks/src/useCoreDescriptor.ts index 443048808bb4..4d573c5ce14a 100644 --- a/packages/page-coretime/src/useCoreDescriptor.ts +++ b/packages/react-hooks/src/useCoreDescriptor.ts @@ -3,7 +3,7 @@ import type { StorageKey, u32, Vec } from '@polkadot/types'; import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; -import type { CoreDescription } from './types.js'; +import type { CoreDescription } from '../../page-coretime/src/types.js'; import { useEffect, useState } from 'react'; diff --git a/packages/page-coretime/src/useQueueStatus.tsx b/packages/react-hooks/src/useQueueStatus.ts similarity index 92% rename from packages/page-coretime/src/useQueueStatus.tsx rename to packages/react-hooks/src/useQueueStatus.ts index 4d31064798f6..e8ace00eea78 100644 --- a/packages/page-coretime/src/useQueueStatus.tsx +++ b/packages/react-hooks/src/useQueueStatus.ts @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { OnDemandQueueStatus } from './types.js'; +import type { OnDemandQueueStatus } from '../../page-coretime/src/types.js'; import { useEffect, useState } from 'react'; diff --git a/packages/page-coretime/src/useWorkloadInfos.ts b/packages/react-hooks/src/useWorkloadInfos.ts similarity index 94% rename from packages/page-coretime/src/useWorkloadInfos.ts rename to packages/react-hooks/src/useWorkloadInfos.ts index aaefd7e323a6..a538d7b595ed 100644 --- a/packages/page-coretime/src/useWorkloadInfos.ts +++ b/packages/react-hooks/src/useWorkloadInfos.ts @@ -4,7 +4,7 @@ import type { StorageKey, u32, Vec } from '@polkadot/types'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; import type { BN } from '@polkadot/util'; -import type { CoreWorkloadInfo } from './types.js'; +import type { CoreWorkloadInfo } from '../../page-coretime/src/types.js'; import { useEffect, useState } from 'react'; diff --git a/packages/page-coretime/src/useWorkplanInfos.ts b/packages/react-hooks/src/useWorkplanInfos.ts similarity index 95% rename from packages/page-coretime/src/useWorkplanInfos.ts rename to packages/react-hooks/src/useWorkplanInfos.ts index e877efedeb21..dc7369bcf92c 100644 --- a/packages/page-coretime/src/useWorkplanInfos.ts +++ b/packages/react-hooks/src/useWorkplanInfos.ts @@ -3,7 +3,7 @@ import type { Option, StorageKey, u16, u32, Vec } from '@polkadot/types'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; -import type { CoreWorkplanInfo } from './types.js'; +import type { CoreWorkplanInfo } from '../../page-coretime/src/types.js'; import { useEffect, useState } from 'react'; From d467f5c8f8b2d7694d74ff4753bc62ce18a69610 Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 15 Apr 2024 14:52:01 -0300 Subject: [PATCH 14/56] translations --- .../apps/public/locales/es/translation.json | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/apps/public/locales/es/translation.json b/packages/apps/public/locales/es/translation.json index b6021427527c..55b40acaf248 100644 --- a/packages/apps/public/locales/es/translation.json +++ b/packages/apps/public/locales/es/translation.json @@ -42,7 +42,10 @@ "Address Prefix": "Título de la dirección", "Adjust the mode from basic (with a limited number of beginner-user-friendly apps) to full (with all basic & advanced apps available)": "Ajustar el modo desde lo básico (con un número limitado de aplicaciones para principiantes) a lo más completo (con todas las aplicaciones básicas y avanzadas disponibles)", "Advanced creation options": "Opciones avanzadas para la creación", + "All active/available cores": "Todos los núcleos activos/disponibles", + "All available slices": "Todas las secciones disponibles", "All rewards will go towards the selected output destination when a payout is made.": "Todas las recompensas irán hacia el destino de salida seleccionado cuando se efectúe el pago.", + "All scehduled cores": "Todos los núcleos agendados", "All the listed validators and all their nominators will receive their rewards.": "Todos los validadores de la lista y todos sus nominadores recibirán su recompensa.", "Allocate a suggested tip amount. With enough endorsements, the suggested values are averaged and sent to the beneficiary.": "Asigna una cantidad sugerida de propina. Con suficiente respaldo, los valores sugeridos serán un promedio y se enviarán al beneficiario.", "Amount to add to the currently bonded funds. This is adjusted using the available funds on the account.": "Cantidad a añadir a los fondos actualmente en reserva. Se ajusta con los fondos disponibles en la cuenta.", @@ -241,6 +244,7 @@ "No code hashes available": "No hay hash de código disponible", "No committee proposals": "No hay propuestas del comité", "No contracts available": "No hay contrato disponible", + "No core description found": "No se ha encontrado descripción de núcleos", "No council motions": "No hay mociones del consejo", "No documentation provided": "No se ha facilitado documentación", "No events available": "No hay eventos disponibles", @@ -259,6 +263,8 @@ "No runners up found": "No se han encontrado mensajeros", "No upgradable extensions found": "No se han encontrado extensiones actualizables", "No waiting validators found": "No se han encontrado validadores en espera", + "No workload found": "No se ha encontrado workload", + "No workplan found": "No se ha encontrado workplan", "Node info": "Información del nodo", "Nominate": "Nominar", "Nominate Validators": "Nominar validadores", @@ -708,6 +714,7 @@ "approval type": "tipo de aprobación", "approved": "aprobado", "asset id": "id del activo", + "assignment": "asignación", "auto-selected targets for nomination": "candidatos auto seleccionados para la nominación", "available": "disponible", "available signatories": "firmantes disponibles", @@ -729,6 +736,7 @@ "blocks": "bloques", "bond": "vínculo", "bonded": "vinculado", + "broker Id": "Id del Broker", "call from account": "llamada desde la cuenta", "call the selected endpoint": "llamar al punto final seleccionado", "candidate account": "cuenta del candidato", @@ -755,12 +763,16 @@ "conviction": "sentencia", "conviction: Conviction": "convicción: Convicción", "copied": "copiado", + "core": "núcleo", + "core count": "cantidad de núcleos", "council candidates": "candidatos al consejo", "council proposal": "propuesta del consejo", "council proposal type": "tipo de propuesta del consejo", "created account": "cuenta creada", "created multisig": "multisig creada", "crypto type to use": "typo de crypto a usar", + "current work": "trabajo actual", + "current timeslice": "rango de tiempo actual", "custom endpoint": "endpoint personalizado", "data": "dato", "default icon theme": "tema del icono por defecto", @@ -841,6 +853,7 @@ "locked balance": "balance bloqueado", "logs": "logs", "manage hardware connections": "manejar conexiones hardware", + "mask": "máscara", "matches": "coincidencias", "maximum gas allowed": "máximo de gas permitido", "members": "miembros", @@ -883,6 +896,7 @@ "new address": "nueva dirección", "next": "siguiente", "next id": "siguiente ID", + "next index": "next index", "no": "no", "no accounts yet, create or import an existing": "no hay cuentas aún, cree o importe un existente", "no addresses saved yet, add any existing address": "no hay direcciones almacenadas aún, añada cualquier dirección existente", @@ -917,6 +931,7 @@ "pending swap id": "pendiente del ID de intercambio", "points": "puntos", "pot": "espacio", + "pool size": "Tamaño de pool", "preimage hash": "hash de la preimgaen", "prev": "previo", "prime member": "primer miembro", @@ -983,8 +998,11 @@ "seed (hex or string)": "semilla (hexadecimal o secuencia)", "select the account you wish to sign data with": "seleccionar la cuenta que desea para firmar el dato", "selected constant query": "consulta constante seleccionada", + "selected core for workload": "núcleo seleccionado para workload", + "selected core for workplan": "núcleo seleccionado para workplan", "selected signatories": "firmantes seleccionados", "selected state query": "consulta de estado seleccionado", + "selected timeslice": "rango de tiempo seleccionado", "selected validators": "validadores elegidos", "send": "enviar", "send as RPC call": "enviar como una llamada a RPC", @@ -1050,6 +1068,7 @@ "total peers": "pares totales", "total stake": "stake total", "total staked": "staked total", + "traffic": "tráfico", "transactions": "transacciones", "transfer received": "transferencia recibida", "transferrable": "transferible", @@ -1095,6 +1114,8 @@ "web": "web", "website": "sitio web", "with an index of": "con el índice de", + "work queue": "cola de trabajo", + "workload": "workload", "wrong password supplied": "contraseña incorrecta suministrada", "yes": "si", "your current password": "su contraseña actual", From bd267f7b36fe2701ae4b049af12c01e50dee8ed9 Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 15 Apr 2024 18:34:35 -0300 Subject: [PATCH 15/56] updated coretime deps --- packages/apps-config/src/api/typesBundle.ts | 6 +++++ .../apps/public/locales/en/app-coretime.json | 25 ++++++++++++++++++- .../apps/public/locales/en/translation.json | 23 +++++++++++++++++ .../apps/public/locales/es/translation.json | 4 +-- packages/page-coretime/package.json | 4 +-- yarn.lock | 8 +++--- 6 files changed, 61 insertions(+), 9 deletions(-) diff --git a/packages/apps-config/src/api/typesBundle.ts b/packages/apps-config/src/api/typesBundle.ts index f13029550bd1..8b1b02874b3a 100644 --- a/packages/apps-config/src/api/typesBundle.ts +++ b/packages/apps-config/src/api/typesBundle.ts @@ -59612,6 +59612,12 @@ export const typesBundle = { "SealV0": "(u64, Signature)", "Seal": "(ConsensusEngineId, Bytes)", "Consensus": "(ConsensusEngineId, Bytes)", + "ExtrinsicInclusionMode": { + "_enum": [ + "AllExtrinsics", + "OnlyInherents" + ] + }, "BeefyKey": "[u8; 33]", "Keys": "SessionKeys2", "SessionKeys1": "(AccountId)", diff --git a/packages/apps/public/locales/en/app-coretime.json b/packages/apps/public/locales/en/app-coretime.json index 447aa1b2256a..571578e44350 100644 --- a/packages/apps/public/locales/en/app-coretime.json +++ b/packages/apps/public/locales/en/app-coretime.json @@ -1,4 +1,27 @@ { + "All active/available cores": "All active/available cores", + "All available slices": "All available slices", + "All scehduled cores": "All scehduled cores", + "No core description found": "No core description found", + "No workload found": "No workload found", + "No workplan found": "No workplan found", "Overview": "Overview", - "nav.coretime": "Coretime" + "assignment": "assignment", + "broker Id": "broker Id", + "core": "core", + "core count": "core count", + "current timeslice": "current timeslice", + "current work": "current work", + "mask": "mask", + "nav.coretime": "Coretime", + "next index": "next index", + "pool size": "pool size", + "selected core for workload": "selected core for workload", + "selected core for workplan": "selected core for workplan", + "selected timeslice": "selected timeslice", + "timeslice": "timeslice", + "traffic": "traffic", + "work queue": "work queue", + "workload": "workload", + "workplan": "workplan" } \ No newline at end of file diff --git a/packages/apps/public/locales/en/translation.json b/packages/apps/public/locales/en/translation.json index d2def6ee6d15..19b710053d0f 100644 --- a/packages/apps/public/locales/en/translation.json +++ b/packages/apps/public/locales/en/translation.json @@ -68,10 +68,13 @@ "Addresses": "", "Advanced creation options": "", "After delay": "", + "All active/available cores": "", "All active/available tracks": "", + "All available slices": "", "All bags": "", "All pools": "", "All rewards will go towards the selected output destination when a payout is made.": "", + "All scehduled cores": "", "All stashes": "", "All the listed validators and all their nominators will receive their rewards.": "", "All validators": "", @@ -428,6 +431,7 @@ "No committee proposals": "", "No completed campaigns found": "", "No contracts available": "", + "No core description found": "", "No council motions": "", "No discretionary lock-voting is in place; all DOT used to vote counts the same.": "", "No documentation provided": "", @@ -463,6 +467,8 @@ "No waiting validators found": "", "No websites": "", "No winners in this auction": "", + "No workload found": "", + "No workplan found": "", "No, block all nominations": "", "Node info": "", "Nominate": "", @@ -1162,6 +1168,7 @@ "asset name": "", "asset symbol": "", "assets": "", + "assignment": "", "at specific block": "", "auctions": "", "available signatories": "", @@ -1202,6 +1209,7 @@ "bounty remark": "", "bounty requested allocation": "", "bounty title": "", + "broker Id": "", "bytes": "", "bytes transferred": "", "calculated storage fee": "", @@ -1259,6 +1267,8 @@ "conviction": "", "conviction: Conviction": "", "copied": "", + "core": "", + "core count": "", "council candidates": "", "council proposal type": "", "count": "", @@ -1282,7 +1292,9 @@ "current range winning bid": "", "current support (failing)": "", "current support (passing)": "", + "current timeslice": "", "current value": "", + "current work": "", "currently elected": "", "custom endpoint": "", "decision deposit": "", @@ -1470,6 +1482,7 @@ "logs": "", "lowest / avg staked": "", "manage hardware connections": "", + "mask": "", "matches": "", "max": "", "max ProofSize allowed": "", @@ -1518,6 +1531,7 @@ "next": "", "next action": "", "next burn": "", + "next index": "", "no": "", "no addresses saved yet, add any existing address": "", "no name": "", @@ -1570,6 +1584,7 @@ "period": "", "points": "", "pool id": "", + "pool size": "", "pools": "", "pot": "", "preimage": "", @@ -1654,8 +1669,11 @@ "seed (hex or string)": "", "select curator": "", "selected constant query": "", + "selected core for workload": "", + "selected core for workplan": "", "selected signatories": "", "selected state query": "", + "selected timeslice": "", "selected track": "", "selected validators": "", "send": "", @@ -1728,6 +1746,7 @@ "the supplied signature": "", "threshold": "", "timeout": "", + "timeslice": "", "tip": "", "tip amount": "", "tip reason": "", @@ -1750,6 +1769,7 @@ "total sub": "", "total transferrable": "", "track origin": "", + "traffic": "", "transactions": "", "transfer asset": "", "transfer received": "", @@ -1834,6 +1854,9 @@ "with an index of": "", "with capacity": "", "with weight override": "", + "work queue": "", + "workload": "", + "workplan": "", "yes": "", "yesterday": "", "your current password": "", diff --git a/packages/apps/public/locales/es/translation.json b/packages/apps/public/locales/es/translation.json index 55b40acaf248..eb2671e3bd78 100644 --- a/packages/apps/public/locales/es/translation.json +++ b/packages/apps/public/locales/es/translation.json @@ -771,8 +771,8 @@ "created account": "cuenta creada", "created multisig": "multisig creada", "crypto type to use": "typo de crypto a usar", - "current work": "trabajo actual", "current timeslice": "rango de tiempo actual", + "current work": "trabajo actual", "custom endpoint": "endpoint personalizado", "data": "dato", "default icon theme": "tema del icono por defecto", @@ -930,8 +930,8 @@ "pending hashes": "hashes pendientes", "pending swap id": "pendiente del ID de intercambio", "points": "puntos", - "pot": "espacio", "pool size": "Tamaño de pool", + "pot": "espacio", "preimage hash": "hash de la preimgaen", "prev": "previo", "prime member": "primer miembro", diff --git a/packages/page-coretime/package.json b/packages/page-coretime/package.json index 3751587cb9d9..092d8c39d429 100644 --- a/packages/page-coretime/package.json +++ b/packages/page-coretime/package.json @@ -16,8 +16,8 @@ "type": "module", "version": "0.135.2-44-x", "dependencies": { - "@polkadot/react-components": "0.135.2-48-x", - "@polkadot/react-query": "0.135.2-48-x" + "@polkadot/react-components": "0.135.2-49-x", + "@polkadot/react-query": "0.135.2-49-x" }, "peerDependencies": { "react": "*", diff --git a/yarn.lock b/yarn.lock index 64e94ac66b3a..d3289982fd3b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1575,8 +1575,8 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-coretime@workspace:packages/page-coretime" dependencies: - "@polkadot/react-components": "npm:0.135.2-48-x" - "@polkadot/react-query": "npm:0.135.2-48-x" + "@polkadot/react-components": "npm:0.135.2-49-x" + "@polkadot/react-query": "npm:0.135.2-49-x" peerDependencies: react: "*" react-dom: "*" @@ -2300,7 +2300,7 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/react-components@npm:^0.135.2-49-x, @polkadot/react-components@workspace:packages/react-components": +"@polkadot/react-components@npm:0.135.2-49-x, @polkadot/react-components@npm:^0.135.2-49-x, @polkadot/react-components@workspace:packages/react-components": version: 0.0.0-use.local resolution: "@polkadot/react-components@workspace:packages/react-components" dependencies: @@ -2423,7 +2423,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-query@npm:^0.135.2-49-x, @polkadot/react-query@workspace:packages/react-query": +"@polkadot/react-query@npm:0.135.2-49-x, @polkadot/react-query@npm:^0.135.2-49-x, @polkadot/react-query@workspace:packages/react-query": version: 0.0.0-use.local resolution: "@polkadot/react-query@workspace:packages/react-query" peerDependencies: From db3ac4c0a9e11e247259ae1905a3d2d0060f4fbc Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 15 Apr 2024 18:51:34 -0300 Subject: [PATCH 16/56] updated tsconfig --- packages/page-coretime/tsconfig.build.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/page-coretime/tsconfig.build.json b/packages/page-coretime/tsconfig.build.json index 5edd804731f0..0292e5e4c9fe 100644 --- a/packages/page-coretime/tsconfig.build.json +++ b/packages/page-coretime/tsconfig.build.json @@ -6,8 +6,8 @@ "rootDir": "./src" }, "references": [ - { "path": "../apps-config/tsconfig.build.json" }, - { "path": "../page-explorer/tsconfig.build.json" }, + { "path": "../react-api/tsconfig.xref.json" }, + { "path": "../react-hooks/tsconfig.build.json" }, { "path": "../react-components/tsconfig.build.json" } ] } From 3eb6a37244a6e7a3c72f9cc0b4b0cce0f1853602 Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 15 Apr 2024 19:24:15 -0300 Subject: [PATCH 17/56] fixed build --- packages/apps-routing/tsconfig.build.json | 1 + .../src/Overview/CoreDescriptor.tsx | 2 +- .../src/Overview/CoreDescriptors.tsx | 2 +- .../src/Overview/QueueStatus.tsx | 2 +- .../page-coretime/src/Overview/Summary.tsx | 2 +- .../page-coretime/src/Overview/Workload.tsx | 2 +- .../page-coretime/src/Overview/Workloads.tsx | 2 +- .../page-coretime/src/Overview/Workplan.tsx | 2 +- .../page-coretime/src/Overview/Workplans.tsx | 2 +- packages/page-coretime/src/Overview/index.tsx | 2 +- packages/page-coretime/src/types.ts | 28 ------------------- packages/react-hooks/src/index.ts | 8 +++--- packages/react-hooks/src/types.ts | 27 ++++++++++++++++-- packages/react-hooks/src/useCoreDescriptor.ts | 4 +-- packages/react-hooks/src/useQueueStatus.ts | 4 +-- packages/react-hooks/src/useWorkloadInfos.ts | 4 +-- packages/react-hooks/src/useWorkplanInfos.ts | 4 +-- 17 files changed, 47 insertions(+), 51 deletions(-) delete mode 100644 packages/page-coretime/src/types.ts diff --git a/packages/apps-routing/tsconfig.build.json b/packages/apps-routing/tsconfig.build.json index 979662b51ec6..14024fc40172 100644 --- a/packages/apps-routing/tsconfig.build.json +++ b/packages/apps-routing/tsconfig.build.json @@ -13,6 +13,7 @@ { "path": "../page-bounties/tsconfig.build.json" }, { "path": "../page-calendar/tsconfig.build.json" }, { "path": "../page-claims/tsconfig.build.json" }, + { "path": "../page-coretime/tsconfig.build.json" }, { "path": "../page-collator/tsconfig.build.json" }, { "path": "../page-contracts/tsconfig.build.json" }, { "path": "../page-council/tsconfig.build.json" }, diff --git a/packages/page-coretime/src/Overview/CoreDescriptor.tsx b/packages/page-coretime/src/Overview/CoreDescriptor.tsx index b1b4ef97cff3..4ce33fca0fd7 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptor.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptor.tsx @@ -1,8 +1,8 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { CoreDescription } from '@polkadot/react-hooks/types'; import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; -import type { CoreDescription } from '../types.js'; import React from 'react'; diff --git a/packages/page-coretime/src/Overview/CoreDescriptors.tsx b/packages/page-coretime/src/Overview/CoreDescriptors.tsx index 74efae3a6873..afcf79193c87 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptors.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptors.tsx @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { CoreDescription } from '../types.js'; +import type { CoreDescription } from '@polkadot/react-hooks/types'; import React, { useRef } from 'react'; diff --git a/packages/page-coretime/src/Overview/QueueStatus.tsx b/packages/page-coretime/src/Overview/QueueStatus.tsx index 6bed5449c31c..296e2b691f5b 100644 --- a/packages/page-coretime/src/Overview/QueueStatus.tsx +++ b/packages/page-coretime/src/Overview/QueueStatus.tsx @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { OnDemandQueueStatus } from '../types.js'; +import type { OnDemandQueueStatus } from '@polkadot/react-hooks/types'; import React from 'react'; diff --git a/packages/page-coretime/src/Overview/Summary.tsx b/packages/page-coretime/src/Overview/Summary.tsx index 93141a6b586e..3081c05ac4d0 100644 --- a/packages/page-coretime/src/Overview/Summary.tsx +++ b/packages/page-coretime/src/Overview/Summary.tsx @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { OnDemandQueueStatus } from '../types.js'; +import type { OnDemandQueueStatus } from '@polkadot/react-hooks/types'; import React from 'react'; diff --git a/packages/page-coretime/src/Overview/Workload.tsx b/packages/page-coretime/src/Overview/Workload.tsx index e4a097d12448..5bb3b853be72 100644 --- a/packages/page-coretime/src/Overview/Workload.tsx +++ b/packages/page-coretime/src/Overview/Workload.tsx @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { CoreWorkloadInfo } from '../types.js'; +import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import React from 'react'; diff --git a/packages/page-coretime/src/Overview/Workloads.tsx b/packages/page-coretime/src/Overview/Workloads.tsx index 28129c6caf84..0bf17d6c43bb 100644 --- a/packages/page-coretime/src/Overview/Workloads.tsx +++ b/packages/page-coretime/src/Overview/Workloads.tsx @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { CoreWorkloadInfo } from '../types.js'; +import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import React, { useRef } from 'react'; diff --git a/packages/page-coretime/src/Overview/Workplan.tsx b/packages/page-coretime/src/Overview/Workplan.tsx index 1f684135210f..874e0378a186 100644 --- a/packages/page-coretime/src/Overview/Workplan.tsx +++ b/packages/page-coretime/src/Overview/Workplan.tsx @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { CoreWorkplanInfo } from '../types.js'; +import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; import React from 'react'; diff --git a/packages/page-coretime/src/Overview/Workplans.tsx b/packages/page-coretime/src/Overview/Workplans.tsx index fc47b8a804e4..2b3832717184 100644 --- a/packages/page-coretime/src/Overview/Workplans.tsx +++ b/packages/page-coretime/src/Overview/Workplans.tsx @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { CoreWorkplanInfo } from '../types.js'; +import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; import React, { useRef } from 'react'; diff --git a/packages/page-coretime/src/Overview/index.tsx b/packages/page-coretime/src/Overview/index.tsx index 9217d097b62c..84dfba90584a 100644 --- a/packages/page-coretime/src/Overview/index.tsx +++ b/packages/page-coretime/src/Overview/index.tsx @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { CoreDescription, CoreWorkloadInfo, CoreWorkplanInfo } from '../types.js'; +import type { CoreDescription, CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; import React, { useMemo, useState } from 'react'; diff --git a/packages/page-coretime/src/types.ts b/packages/page-coretime/src/types.ts deleted file mode 100644 index 830872b585ae..000000000000 --- a/packages/page-coretime/src/types.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2017-2024 @polkadot/app-coretime authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -import type { u32, u128 } from '@polkadot/types'; -import type { PalletBrokerScheduleItem, PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; - -export interface CoreWorkloadInfo { - core: number; - info: PalletBrokerScheduleItem[]; -} - -export interface CoreWorkplanInfo { - timeslice: number; - core: number; - info: PalletBrokerScheduleItem[]; -} - -export interface CoreDescription { - core: number; - info: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[]; -} - -export interface OnDemandQueueStatus { - traffic: u128; - nextIndex: u32; - smallestIndex: u32; - freedIndices: [string, u32][]; -} diff --git a/packages/react-hooks/src/index.ts b/packages/react-hooks/src/index.ts index 46b88d08ab8b..d72129218bd0 100644 --- a/packages/react-hooks/src/index.ts +++ b/packages/react-hooks/src/index.ts @@ -27,7 +27,7 @@ export { useCall } from './useCall.js'; export { useCallMulti } from './useCallMulti.js'; export { useCollectiveInstance } from './useCollectiveInstance.js'; export { useCollectiveMembers } from './useCollectiveMembers.js'; -export { default as useCoreDescriptor } from './useCoreDescriptor.js'; +export { useCoreDescriptor } from './useCoreDescriptor.js'; export { useDebounce } from './useDebounce.js'; export { useDelegations } from './useDelegations.js'; export { useDeriveAccountFlags } from './useDeriveAccountFlags.js'; @@ -66,7 +66,7 @@ export { usePopupWindow } from './usePopupWindow.js'; export { usePreimage } from './usePreimage.js'; export { useProxies } from './useProxies.js'; export { useQueue } from './useQueue.js'; -export { default as useQueueStatus } from './useQueueStatus.js'; +export { useQueueStatus } from './useQueueStatus.js'; export { useRegistrars } from './useRegistrars.js'; export { useSavedFlags } from './useSavedFlags.js'; export { useScroll } from './useScroll.js'; @@ -85,5 +85,5 @@ export { useVotingStatus } from './useVotingStatus.js'; export { useWeight } from './useWeight.js'; export { useWindowColumns } from './useWindowColumns.js'; export { useWindowSize } from './useWindowSize.js'; -export { default as useWorkloadInfos } from './useWorkloadInfos.js'; -export { default as useWorkplanInfos } from './useWorkplanInfos.js'; +export { useWorkloadInfos } from './useWorkloadInfos.js'; +export { useWorkplanInfos } from './useWorkplanInfos.js'; diff --git a/packages/react-hooks/src/types.ts b/packages/react-hooks/src/types.ts index 5416c5c54872..a32e74612cd9 100644 --- a/packages/react-hooks/src/types.ts +++ b/packages/react-hooks/src/types.ts @@ -6,9 +6,9 @@ import type { ApiPromise } from '@polkadot/api'; import type { SubmittableExtrinsic } from '@polkadot/api/types'; import type { DeriveAccountFlags, DeriveAccountRegistration } from '@polkadot/api-derive/types'; import type { DisplayedJudgement } from '@polkadot/react-components/types'; -import type { u128 } from '@polkadot/types'; +import type { u32, u128 } from '@polkadot/types'; import type { AccountId, BlockNumber, Call, Exposure, Hash, SessionIndex, ValidatorPrefs } from '@polkadot/types/interfaces'; -import type { PalletPreimageRequestStatus, PalletStakingRewardDestination, PalletStakingStakingLedger } from '@polkadot/types/lookup'; +import type { PalletBrokerScheduleItem, PalletPreimageRequestStatus, PalletStakingRewardDestination, PalletStakingStakingLedger, PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; import type { ICompact, IExtrinsic, INumber, Registry } from '@polkadot/types/types'; import type { KeyringJson$Meta } from '@polkadot/ui-keyring/types'; import type { BN } from '@polkadot/util'; @@ -213,3 +213,26 @@ export interface WeightResult { v1Weight: BN; v2Weight: V2WeightConstruct; } + +export interface CoreDescription { + core: number; + info: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[]; +} + +export interface OnDemandQueueStatus { + traffic: u128; + nextIndex: u32; + smallestIndex: u32; + freedIndices: [string, u32][]; +} + +export interface CoreWorkloadInfo { + core: number; + info: PalletBrokerScheduleItem[]; +} + +export interface CoreWorkplanInfo { + timeslice: number; + core: number; + info: PalletBrokerScheduleItem[]; +} diff --git a/packages/react-hooks/src/useCoreDescriptor.ts b/packages/react-hooks/src/useCoreDescriptor.ts index 4d573c5ce14a..52920ba8bb80 100644 --- a/packages/react-hooks/src/useCoreDescriptor.ts +++ b/packages/react-hooks/src/useCoreDescriptor.ts @@ -3,7 +3,7 @@ import type { StorageKey, u32, Vec } from '@polkadot/types'; import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; -import type { CoreDescription } from '../../page-coretime/src/types.js'; +import type { CoreDescription } from './types.js'; import { useEffect, useState } from 'react'; @@ -48,4 +48,4 @@ function useCoreDescriptorImpl (): CoreDescription[] | undefined { return state; } -export default createNamedHook('useCoreDescriptor', useCoreDescriptorImpl); +export const useCoreDescriptor = createNamedHook('useCoreDescriptor', useCoreDescriptorImpl); diff --git a/packages/react-hooks/src/useQueueStatus.ts b/packages/react-hooks/src/useQueueStatus.ts index e8ace00eea78..42bf4b9d7d73 100644 --- a/packages/react-hooks/src/useQueueStatus.ts +++ b/packages/react-hooks/src/useQueueStatus.ts @@ -1,7 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { OnDemandQueueStatus } from '../../page-coretime/src/types.js'; +import type { OnDemandQueueStatus } from './types.js'; import { useEffect, useState } from 'react'; @@ -33,4 +33,4 @@ function useQueueStatusImpl (): OnDemandQueueStatus | undefined { return state; } -export default createNamedHook('useQueueStatus', useQueueStatusImpl); +export const useQueueStatus = createNamedHook('useQueueStatus', useQueueStatusImpl); diff --git a/packages/react-hooks/src/useWorkloadInfos.ts b/packages/react-hooks/src/useWorkloadInfos.ts index a538d7b595ed..3f89acae0309 100644 --- a/packages/react-hooks/src/useWorkloadInfos.ts +++ b/packages/react-hooks/src/useWorkloadInfos.ts @@ -4,7 +4,7 @@ import type { StorageKey, u32, Vec } from '@polkadot/types'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; import type { BN } from '@polkadot/util'; -import type { CoreWorkloadInfo } from '../../page-coretime/src/types.js'; +import type { CoreWorkloadInfo } from './types.js'; import { useEffect, useState } from 'react'; @@ -41,4 +41,4 @@ function useWorkloadInfosImpl (): CoreWorkloadInfo[] | undefined { return state; } -export default createNamedHook('useWorkloadInfos', useWorkloadInfosImpl); +export const useWorkloadInfos = createNamedHook('useWorkloadInfos', useWorkloadInfosImpl); diff --git a/packages/react-hooks/src/useWorkplanInfos.ts b/packages/react-hooks/src/useWorkplanInfos.ts index dc7369bcf92c..ec0fbce8522f 100644 --- a/packages/react-hooks/src/useWorkplanInfos.ts +++ b/packages/react-hooks/src/useWorkplanInfos.ts @@ -3,7 +3,7 @@ import type { Option, StorageKey, u16, u32, Vec } from '@polkadot/types'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; -import type { CoreWorkplanInfo } from '../../page-coretime/src/types.js'; +import type { CoreWorkplanInfo } from './types.js'; import { useEffect, useState } from 'react'; @@ -46,4 +46,4 @@ function useWorkplanInfosImpl (): CoreWorkplanInfo[] | undefined { return state; } -export default createNamedHook('useWorkplanInfos', useWorkplanInfosImpl); +export const useWorkplanInfos = createNamedHook('useWorkplanInfos', useWorkplanInfosImpl); From 39c1d5a82c9fb825b826caba21ff1bf654b2f873 Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 15 Apr 2024 19:31:57 -0300 Subject: [PATCH 18/56] root tsconfig --- tsconfig.build.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.build.json b/tsconfig.build.json index 180ae82d011e..74621f3f58f1 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -25,6 +25,7 @@ { "path": "./packages/page-claims/tsconfig.spec.json" }, { "path": "./packages/page-collator/tsconfig.build.json" }, { "path": "./packages/page-contracts/tsconfig.build.json" }, + { "path": "./packages/page-coretime/tsconfig.spec.json" }, { "path": "./packages/page-council/tsconfig.build.json" }, { "path": "./packages/page-democracy/tsconfig.build.json" }, { "path": "./packages/page-explorer/tsconfig.build.json" }, From a56c8b199b9244b7f3fc0785b803a266549c6c25 Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 15 Apr 2024 19:39:26 -0300 Subject: [PATCH 19/56] fix tsconfig --- tsconfig.build.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.build.json b/tsconfig.build.json index 74621f3f58f1..8414fa1242cc 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -25,7 +25,7 @@ { "path": "./packages/page-claims/tsconfig.spec.json" }, { "path": "./packages/page-collator/tsconfig.build.json" }, { "path": "./packages/page-contracts/tsconfig.build.json" }, - { "path": "./packages/page-coretime/tsconfig.spec.json" }, + { "path": "./packages/page-coretime/tsconfig.build.json" }, { "path": "./packages/page-council/tsconfig.build.json" }, { "path": "./packages/page-democracy/tsconfig.build.json" }, { "path": "./packages/page-explorer/tsconfig.build.json" }, From 13b3bd372fbb99c87b636aef66d43ca7743aceb9 Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 15 Apr 2024 23:18:02 -0300 Subject: [PATCH 20/56] app-coretime and app-broker --- packages/apps-routing/src/broker.ts | 22 +++ packages/apps-routing/src/coretime.ts | 4 +- packages/apps-routing/src/index.ts | 2 + packages/apps-routing/tsconfig.build.json | 1 + .../apps/public/locales/en/app-broker.json | 26 +++ packages/apps/public/locales/en/index.json | 1 + packages/page-broker/README.md | 1 + packages/page-broker/package.json | 27 +++ .../src/Overview/Cores.tsx | 2 +- .../src/Overview/Pools.tsx | 5 +- packages/page-broker/src/Overview/Summary.tsx | 40 +++++ .../src/Overview/Timeslice.tsx | 2 +- .../src/Overview/Workload.tsx | 2 +- .../src/Overview/Workloads.tsx | 2 +- .../src/Overview/Workplan.tsx | 2 +- .../src/Overview/Workplans.tsx | 2 +- packages/page-broker/src/Overview/index.tsx | 169 +++++++++++++++++ packages/page-broker/src/index.tsx | 49 +++++ packages/page-broker/src/translate.ts | 8 + .../src/utils.ts | 2 +- packages/page-broker/tsconfig.build.json | 13 ++ .../src/Overview/CurrentWork.tsx | 46 ++--- .../page-coretime/src/Overview/Summary.tsx | 84 +++------ packages/page-coretime/src/Overview/index.tsx | 170 ++---------------- packages/page-coretime/src/index.tsx | 43 ++--- packages/react-query/src/BrokerStatus.tsx | 2 + tsconfig.base.json | 1 + tsconfig.build.json | 1 + yarn.lock | 13 ++ 29 files changed, 454 insertions(+), 288 deletions(-) create mode 100644 packages/apps-routing/src/broker.ts create mode 100644 packages/apps/public/locales/en/app-broker.json create mode 100644 packages/page-broker/README.md create mode 100644 packages/page-broker/package.json rename packages/{page-coretime => page-broker}/src/Overview/Cores.tsx (86%) rename packages/{page-coretime => page-broker}/src/Overview/Pools.tsx (82%) create mode 100644 packages/page-broker/src/Overview/Summary.tsx rename packages/{page-coretime => page-broker}/src/Overview/Timeslice.tsx (90%) rename packages/{page-coretime => page-broker}/src/Overview/Workload.tsx (93%) rename packages/{page-coretime => page-broker}/src/Overview/Workloads.tsx (94%) rename packages/{page-coretime => page-broker}/src/Overview/Workplan.tsx (94%) rename packages/{page-coretime => page-broker}/src/Overview/Workplans.tsx (95%) create mode 100644 packages/page-broker/src/Overview/index.tsx create mode 100644 packages/page-broker/src/index.tsx create mode 100644 packages/page-broker/src/translate.ts rename packages/{page-coretime => page-broker}/src/utils.ts (65%) create mode 100644 packages/page-broker/tsconfig.build.json diff --git a/packages/apps-routing/src/broker.ts b/packages/apps-routing/src/broker.ts new file mode 100644 index 000000000000..f2922ec0fa2e --- /dev/null +++ b/packages/apps-routing/src/broker.ts @@ -0,0 +1,22 @@ +// Copyright 2017-2024 @polkadot/apps-routing authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { Route, TFunction } from './types.js'; + +import Component from '@polkadot/app-broker'; + +export default function create (t: TFunction): Route { + return { + Component, + display: { + needsApi: [ + 'query.broker.status' + ], + needsApiInstances: true + }, + group: 'network', + icon: 'calendar-clock', + name: 'broker', + text: t('nav.broker', 'Coretime Broker (Experimental)', { ns: 'app-broker' }) + }; +} diff --git a/packages/apps-routing/src/coretime.ts b/packages/apps-routing/src/coretime.ts index 7ec91fbc81d8..89637a2ed7df 100644 --- a/packages/apps-routing/src/coretime.ts +++ b/packages/apps-routing/src/coretime.ts @@ -10,8 +10,8 @@ export default function create (t: TFunction): Route { Component, display: { needsApi: [ - ['query.broker.status', - 'query.coretimeAssignmentProvider.coreDescriptors'] + + 'query.coretimeAssignmentProvider.coreDescriptors' ], needsApiInstances: true }, diff --git a/packages/apps-routing/src/index.ts b/packages/apps-routing/src/index.ts index db95396692b4..61595c99e485 100644 --- a/packages/apps-routing/src/index.ts +++ b/packages/apps-routing/src/index.ts @@ -8,6 +8,7 @@ import addresses from './addresses.js'; import alliance from './alliance.js'; import assets from './assets.js'; import bounties from './bounties.js'; +import broker from './broker.js'; import calendar from './calendar.js'; import claims from './claims.js'; import collator from './collator.js'; @@ -59,6 +60,7 @@ export default function create (t: TFunction): Routes { staking2(t), collator(t), coretime(t), + broker(t), // governance v2 referenda(t), membership(t), diff --git a/packages/apps-routing/tsconfig.build.json b/packages/apps-routing/tsconfig.build.json index 14024fc40172..f6d68259674a 100644 --- a/packages/apps-routing/tsconfig.build.json +++ b/packages/apps-routing/tsconfig.build.json @@ -14,6 +14,7 @@ { "path": "../page-calendar/tsconfig.build.json" }, { "path": "../page-claims/tsconfig.build.json" }, { "path": "../page-coretime/tsconfig.build.json" }, + { "path": "../page-broker/tsconfig.build.json" }, { "path": "../page-collator/tsconfig.build.json" }, { "path": "../page-contracts/tsconfig.build.json" }, { "path": "../page-council/tsconfig.build.json" }, diff --git a/packages/apps/public/locales/en/app-broker.json b/packages/apps/public/locales/en/app-broker.json new file mode 100644 index 000000000000..8b9ef2ca3def --- /dev/null +++ b/packages/apps/public/locales/en/app-broker.json @@ -0,0 +1,26 @@ +{ + "All active/available cores": "All active/available cores", + "All available slices": "All available slices", + "All scehduled cores": "All scehduled cores", + "No core description found": "No core description found", + "No workload found": "No workload found", + "No workplan found": "No workplan found", + "assignment": "assignment", + "broker Id": "broker Id", + "core": "core", + "core count": "core count", + "current timeslice": "current timeslice", + "current work": "current work", + "mask": "mask", + "nav.broker": "Coretime Broker (Experimental)", + "next index": "next index", + "pool size": "pool size", + "selected core for workload": "selected core for workload", + "selected core for workplan": "selected core for workplan", + "selected timeslice": "selected timeslice", + "timeslice": "timeslice", + "traffic": "traffic", + "work queue": "work queue", + "workload": "workload", + "workplan": "workplan" +} \ No newline at end of file diff --git a/packages/apps/public/locales/en/index.json b/packages/apps/public/locales/en/index.json index 6b08a8a7b2d3..bc194854015b 100644 --- a/packages/apps/public/locales/en/index.json +++ b/packages/apps/public/locales/en/index.json @@ -4,6 +4,7 @@ "app-alliance.json", "app-assets.json", "app-bounties.json", + "app-broker.json", "app-calendar.json", "app-claims.json", "app-collator.json", diff --git a/packages/page-broker/README.md b/packages/page-broker/README.md new file mode 100644 index 000000000000..18165844eb42 --- /dev/null +++ b/packages/page-broker/README.md @@ -0,0 +1 @@ +# @polkadot/app-broker diff --git a/packages/page-broker/package.json b/packages/page-broker/package.json new file mode 100644 index 000000000000..9e985103ea7d --- /dev/null +++ b/packages/page-broker/package.json @@ -0,0 +1,27 @@ +{ + "bugs": "https://github.com/polkadot-js/apps/issues", + "engines": { + "node": ">=18" + }, + "homepage": "https://github.com/polkadot-js/apps/tree/master/packages/page-broker#readme", + "license": "Apache-2.0", + "name": "@polkadot/app-broker", + "private": true, + "repository": { + "directory": "packages/page-broker", + "type": "git", + "url": "https://github.com/polkadot-js/apps.git" + }, + "sideEffects": false, + "type": "module", + "version": "0.135.2-44-x", + "dependencies": { + "@polkadot/react-components": "0.135.2-49-x", + "@polkadot/react-query": "0.135.2-49-x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*", + "react-is": "*" + } +} diff --git a/packages/page-coretime/src/Overview/Cores.tsx b/packages/page-broker/src/Overview/Cores.tsx similarity index 86% rename from packages/page-coretime/src/Overview/Cores.tsx rename to packages/page-broker/src/Overview/Cores.tsx index 8dc22795c718..2e15228a741d 100644 --- a/packages/page-coretime/src/Overview/Cores.tsx +++ b/packages/page-broker/src/Overview/Cores.tsx @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 import React from 'react'; diff --git a/packages/page-coretime/src/Overview/Pools.tsx b/packages/page-broker/src/Overview/Pools.tsx similarity index 82% rename from packages/page-coretime/src/Overview/Pools.tsx rename to packages/page-broker/src/Overview/Pools.tsx index 295b49b555cc..b086acb49fca 100644 --- a/packages/page-coretime/src/Overview/Pools.tsx +++ b/packages/page-broker/src/Overview/Pools.tsx @@ -1,4 +1,7 @@ -// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +// [object Object] // SPDX-License-Identifier: Apache-2.0 import type { u32 } from '@polkadot/types'; diff --git a/packages/page-broker/src/Overview/Summary.tsx b/packages/page-broker/src/Overview/Summary.tsx new file mode 100644 index 000000000000..d60bb173f041 --- /dev/null +++ b/packages/page-broker/src/Overview/Summary.tsx @@ -0,0 +1,40 @@ +// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; + +import { CardSummary, SummaryBox } from '@polkadot/react-components'; +import { useApi } from '@polkadot/react-hooks'; + +import { useTranslation } from '../translate.js'; +import Cores from './Cores.js'; +import Pools from './Pools.js'; +import Timeslice from './Timeslice.js'; + +function Summary (): React.ReactElement { + const { t } = useTranslation(); + const { api } = useApi(); + + return ( + +
+ {api.query.broker && ( + <> + + + + + + + + + + + + )} +
+
+ ); +} + +export default React.memo(Summary); diff --git a/packages/page-coretime/src/Overview/Timeslice.tsx b/packages/page-broker/src/Overview/Timeslice.tsx similarity index 90% rename from packages/page-coretime/src/Overview/Timeslice.tsx rename to packages/page-broker/src/Overview/Timeslice.tsx index beb9a38cbf9b..d00bff69e01c 100644 --- a/packages/page-coretime/src/Overview/Timeslice.tsx +++ b/packages/page-broker/src/Overview/Timeslice.tsx @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { u32 } from '@polkadot/types'; diff --git a/packages/page-coretime/src/Overview/Workload.tsx b/packages/page-broker/src/Overview/Workload.tsx similarity index 93% rename from packages/page-coretime/src/Overview/Workload.tsx rename to packages/page-broker/src/Overview/Workload.tsx index 5bb3b853be72..393fda4886ff 100644 --- a/packages/page-coretime/src/Overview/Workload.tsx +++ b/packages/page-broker/src/Overview/Workload.tsx @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; diff --git a/packages/page-coretime/src/Overview/Workloads.tsx b/packages/page-broker/src/Overview/Workloads.tsx similarity index 94% rename from packages/page-coretime/src/Overview/Workloads.tsx rename to packages/page-broker/src/Overview/Workloads.tsx index 0bf17d6c43bb..d794e5b8e2ea 100644 --- a/packages/page-coretime/src/Overview/Workloads.tsx +++ b/packages/page-broker/src/Overview/Workloads.tsx @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; diff --git a/packages/page-coretime/src/Overview/Workplan.tsx b/packages/page-broker/src/Overview/Workplan.tsx similarity index 94% rename from packages/page-coretime/src/Overview/Workplan.tsx rename to packages/page-broker/src/Overview/Workplan.tsx index 874e0378a186..55005b1c14cf 100644 --- a/packages/page-coretime/src/Overview/Workplan.tsx +++ b/packages/page-broker/src/Overview/Workplan.tsx @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; diff --git a/packages/page-coretime/src/Overview/Workplans.tsx b/packages/page-broker/src/Overview/Workplans.tsx similarity index 95% rename from packages/page-coretime/src/Overview/Workplans.tsx rename to packages/page-broker/src/Overview/Workplans.tsx index 2b3832717184..407197d2eeb4 100644 --- a/packages/page-coretime/src/Overview/Workplans.tsx +++ b/packages/page-broker/src/Overview/Workplans.tsx @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx new file mode 100644 index 000000000000..db43e8d57ec2 --- /dev/null +++ b/packages/page-broker/src/Overview/index.tsx @@ -0,0 +1,169 @@ +// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { CoreDescription, CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; + +import React, { useMemo, useState } from 'react'; + +import { Button, Columar, Dropdown } from '@polkadot/react-components'; + +import { useTranslation } from '../translate.js'; +import Summary from './Summary.js'; +import Workloads from './Workloads.js'; +import Workplans from './Workplans.js'; + +interface Props { + className?: string; + workloadInfos?: CoreWorkloadInfo[]; + workplanInfos?: CoreWorkplanInfo[]; + coreInfos?: CoreDescription[]; + relay?: boolean; +} + +function uniqByForEach (array: CoreWorkplanInfo[] | undefined) { + const workplanCores: number[] = []; + const workplanTS: number[] = []; + + if (array) { + array.forEach((item) => { + if (!workplanCores.includes(item.core)) { + workplanCores.push(item.core); + } + + if (!workplanTS.includes(item.timeslice)) { + workplanTS.push(item.timeslice); + } + }); + + return { workplanCores, workplanTS }; + } else { + return { workplanCores: [], workplanTS: [] }; + } +} + +function Overview ({ className, workloadInfos, workplanInfos }: Props): React.ReactElement { + const { t } = useTranslation(); + const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); + const [workplanCoreSelected, setWorkplanCoreSelected] = useState(-1); + const [workplanSliceSelected, setWorkplanSliceSelected] = useState(-1); + const workloadCores = workloadInfos?.length; + + const coreArr: number[] = useMemo(() => [], []); + + const len = workloadCores || 0; + + Array(len).fill(0).map((_, index) => coreArr.push(index)); + + const { workplanCores, workplanTS } = uniqByForEach(workplanInfos); + + workplanCores?.sort((a, b) => a - b); + workplanTS?.sort((a, b) => a - b); + + const workloadCoreOpts = useMemo( + () => [{ text: t('All active/available cores'), value: -1 }].concat( + coreArr + .map((c) => { + console.log('c', c); + + return { + text: `Core ${c}`, + value: c + }; + }) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [coreArr, t] + ); + const filteredWLC = useMemo( + () => { + return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected); + }, + [workloadInfos, workloadCoreSelected] + ); + const workplanCoreOpts = useMemo( + () => [{ text: t('All scehduled cores'), value: -1 }].concat( + workplanCores + .map((c) => { + console.log('cwp', c); + + return { + text: `Core ${c}`, + value: c + }; + }) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [workplanCores, t] + ); + + const filteredWorkplan = useMemo( + () => { + if (workplanCoreSelected === workplanSliceSelected) { + return workplanInfos; + } else if (workplanCoreSelected === -1) { + return workplanInfos?.filter(({ timeslice }) => timeslice === workplanSliceSelected); + } else if (workplanSliceSelected === -1) { + return workplanInfos?.filter(({ core }) => core === workplanCoreSelected); + } else { + return workplanInfos?.filter(({ core, timeslice }) => core === workplanCoreSelected && timeslice === workplanSliceSelected); + } + } + , + [workplanInfos, workplanCoreSelected, workplanSliceSelected] + ); + + const workplanTSOpts = useMemo( + () => [{ text: t('All available slices'), value: -1 }].concat( + workplanTS + .map((ts) => ({ + text: `Timeslice ${ts}`, + value: ts + })) + .filter((v): v is { text: string, value: number } => !!v.text) + ), + [workplanTS, t] + ); + + return ( +
+ + + + + + + + + + + + + + +
+ ); +} + +export default React.memo(Overview); diff --git a/packages/page-broker/src/index.tsx b/packages/page-broker/src/index.tsx new file mode 100644 index 000000000000..6c62538dff80 --- /dev/null +++ b/packages/page-broker/src/index.tsx @@ -0,0 +1,49 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { TabItem } from '@polkadot/react-components/types'; + +import React, { useRef } from 'react'; + +import { Tabs } from '@polkadot/react-components'; +import { useWorkloadInfos, useWorkplanInfos } from '@polkadot/react-hooks'; + +import Overview from './Overview/index.js'; +import { useTranslation } from './translate.js'; + +interface Props { + basePath: string; + className?: string; +} + +function createItemsRef (t: (key: string, options?: { replace: Record }) => string): TabItem[] { + return [ + { + isRoot: true, + name: 'overview', + text: t('Overview') + } + ]; +} + +function BrokerApp ({ basePath, className }: Props): React.ReactElement { + const { t } = useTranslation(); + const itemsRef = useRef(createItemsRef(t)); + const workloadInfos = useWorkloadInfos(); + const workplanInfos = useWorkplanInfos(); + + return ( +
+ + +
+ ); +} + +export default React.memo(BrokerApp); diff --git a/packages/page-broker/src/translate.ts b/packages/page-broker/src/translate.ts new file mode 100644 index 000000000000..6de8c7786c53 --- /dev/null +++ b/packages/page-broker/src/translate.ts @@ -0,0 +1,8 @@ +// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { useTranslation as useTranslationBase } from 'react-i18next'; + +export function useTranslation (): { t: (key: string, options?: { replace: Record }) => string } { + return useTranslationBase('app-broker'); +} diff --git a/packages/page-coretime/src/utils.ts b/packages/page-broker/src/utils.ts similarity index 65% rename from packages/page-coretime/src/utils.ts rename to packages/page-broker/src/utils.ts index 972e01ca944b..5fc4a677bf83 100644 --- a/packages/page-coretime/src/utils.ts +++ b/packages/page-broker/src/utils.ts @@ -1,4 +1,4 @@ -// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 export function hexToBin (hex: string): string { diff --git a/packages/page-broker/tsconfig.build.json b/packages/page-broker/tsconfig.build.json new file mode 100644 index 000000000000..0292e5e4c9fe --- /dev/null +++ b/packages/page-broker/tsconfig.build.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": "..", + "outDir": "./build", + "rootDir": "./src" + }, + "references": [ + { "path": "../react-api/tsconfig.xref.json" }, + { "path": "../react-hooks/tsconfig.build.json" }, + { "path": "../react-components/tsconfig.build.json" } + ] +} diff --git a/packages/page-coretime/src/Overview/CurrentWork.tsx b/packages/page-coretime/src/Overview/CurrentWork.tsx index 41d0a54f6e12..4060e443aa36 100644 --- a/packages/page-coretime/src/Overview/CurrentWork.tsx +++ b/packages/page-coretime/src/Overview/CurrentWork.tsx @@ -10,46 +10,26 @@ interface Props { } function CurrentWork ({ value }: Props): React.ReactElement { - const assignments: string[] = []; + const response: string[] = []; if (value) { - if (value.assignments.length > 1) { - value.assignments.forEach((_, index) => { - const ratio = value.assignments[index][1].ratio.toNumber() / 57600 * 100; - - if (value.assignments[index][0].isIdle) { - assignments.push(`${ratio}% Idle`); - } else if (value.assignments[index][0].isPool) { - assignments.push(`${ratio}% Pool`); - } else { - assignments.push(`${ratio}% Task: ${value.assignments[index][0].asTask.toString()}`); - } - } - ); - - return ( -
- ); - } else { - if (value.assignments[0][0].isIdle) { - return ( - - ); - } else if (value.assignments[0][0].isPool) { - return ( - - ); + value.assignments.forEach((_, index) => { + const ratio = value.assignments[index][1].ratio.toNumber() / 57600 * 100; + + if (value.assignments[index][0].isIdle) { + response.push(`${ratio}% Idle`); + } else if (value.assignments[index][0].isPool) { + response.push(`${ratio}% Pool`); } else { - return ( - - ); + response.push(`${ratio}% Task: ${value.assignments[index][0].asTask.toString()}`); } } - } else { - return ( - ); } + + return ( + + ); } export default React.memo(CurrentWork); diff --git a/packages/page-coretime/src/Overview/Summary.tsx b/packages/page-coretime/src/Overview/Summary.tsx index 3081c05ac4d0..fd66274c0ee4 100644 --- a/packages/page-coretime/src/Overview/Summary.tsx +++ b/packages/page-coretime/src/Overview/Summary.tsx @@ -10,69 +10,39 @@ import { useApi, useQueueStatus } from '@polkadot/react-hooks'; import { useTranslation } from '../translate.js'; import BrokerId from './BrokerId.js'; -import Cores from './Cores.js'; -import Pools from './Pools.js'; import QueueStatus from './QueueStatus.js'; -import Timeslice from './Timeslice.js'; -interface Props { - relay?: boolean; -} - -function Summary ({ relay }: Props): React.ReactElement { +function Summary (): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); const queueStatus: OnDemandQueueStatus | undefined = useQueueStatus(); - if (relay) { - return ( - -
- {api.query.coretimeAssignmentProvider && ( - <> - - - - - - - - - - - - )} -
-
- ); - } else { - return ( - -
- {api.query.broker && ( - <> - - - - - - - - - - - - )} -
-
- ); - } + return ( + +
+ {api.query.coretimeAssignmentProvider && ( + <> + + + + + + + + + + + + )} +
+
+ ); } export default React.memo(Summary); diff --git a/packages/page-coretime/src/Overview/index.tsx b/packages/page-coretime/src/Overview/index.tsx index 84dfba90584a..046ea5a0e703 100644 --- a/packages/page-coretime/src/Overview/index.tsx +++ b/packages/page-coretime/src/Overview/index.tsx @@ -1,175 +1,31 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { CoreDescription, CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; +import type { CoreDescription } from '@polkadot/react-hooks/types'; -import React, { useMemo, useState } from 'react'; +import React from 'react'; -import { Button, Columar, Dropdown } from '@polkadot/react-components'; +import { Columar } from '@polkadot/react-components'; -import { useTranslation } from '../translate.js'; import CoreDescriptors from './CoreDescriptors.js'; import Summary from './Summary.js'; -import Workloads from './Workloads.js'; -import Workplans from './Workplans.js'; interface Props { className?: string; - workloadInfos?: CoreWorkloadInfo[]; - workplanInfos?: CoreWorkplanInfo[]; coreInfos?: CoreDescription[]; - relay?: boolean; } -function uniqByForEach (array: CoreWorkplanInfo[] | undefined) { - const workplanCores: number[] = []; - const workplanTS: number[] = []; - - if (array) { - array.forEach((item) => { - if (!workplanCores.includes(item.core)) { - workplanCores.push(item.core); - } - - if (!workplanTS.includes(item.timeslice)) { - workplanTS.push(item.timeslice); - } - }); - - return { workplanCores, workplanTS }; - } else { - return { workplanCores: [], workplanTS: [] }; - } -} - -function Overview ({ className, coreInfos, relay, workloadInfos, workplanInfos }: Props): React.ReactElement { - const { t } = useTranslation(); - const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); - const [workplanCoreSelected, setWorkplanCoreSelected] = useState(-1); - const [workplanSliceSelected, setWorkplanSliceSelected] = useState(-1); - const workloadCores = workloadInfos?.length; - - const coreArr: number[] = useMemo(() => [], []); - - const len = workloadCores || 0; - - Array(len).fill(0).map((_, index) => coreArr.push(index)); - - const { workplanCores, workplanTS } = uniqByForEach(workplanInfos); - - workplanCores?.sort((a, b) => a - b); - workplanTS?.sort((a, b) => a - b); - - const workloadCoreOpts = useMemo( - () => [{ text: t('All active/available cores'), value: -1 }].concat( - coreArr - .map((c) => ({ - text: `Core ${c}`, - value: c - })) - .filter((v): v is { text: string, value: number } => !!v.text) - ), - [coreArr, t] - ); - const filteredWLC = useMemo( - () => { - return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected); - }, - [workloadInfos, workloadCoreSelected] +function Overview ({ className, coreInfos }: Props): React.ReactElement { + return ( +
+ + + + + + +
); - const workplanCoreOpts = useMemo( - () => [{ text: t('All scehduled cores'), value: -1 }].concat( - workplanCores - .map((c) => ({ - text: `Core ${c}`, - value: c - })) - .filter((v): v is { text: string, value: number } => !!v.text) - ), - [workplanCores, t] - ); - - const filteredWorkplan = useMemo( - () => { - if (workplanCoreSelected === workplanSliceSelected) { - return workplanInfos; - } else if (workplanCoreSelected === -1) { - return workplanInfos?.filter(({ timeslice }) => timeslice === workplanSliceSelected); - } else if (workplanSliceSelected === -1) { - return workplanInfos?.filter(({ core }) => core === workplanCoreSelected); - } else { - return workplanInfos?.filter(({ core, timeslice }) => core === workplanCoreSelected && timeslice === workplanSliceSelected); - } - } - , - [workplanInfos, workplanCoreSelected, workplanSliceSelected] - ); - - const workplanTSOpts = useMemo( - () => [{ text: t('All available slices'), value: -1 }].concat( - workplanTS - .map((ts) => ({ - text: `Timeslice ${ts}`, - value: ts - })) - .filter((v): v is { text: string, value: number } => !!v.text) - ), - [workplanTS, t] - ); - - if (relay) { - return ( -
- - - - - - -
- ); - } else { - return ( -
- - - - - - - - - - - - - - -
- ); - } } export default React.memo(Overview); diff --git a/packages/page-coretime/src/index.tsx b/packages/page-coretime/src/index.tsx index f39a059d48e1..2cb6fadf68bb 100644 --- a/packages/page-coretime/src/index.tsx +++ b/packages/page-coretime/src/index.tsx @@ -6,7 +6,7 @@ import type { TabItem } from '@polkadot/react-components/types'; import React, { useRef } from 'react'; import { Tabs } from '@polkadot/react-components'; -import { useApi, useCoreDescriptor, useWorkloadInfos, useWorkplanInfos } from '@polkadot/react-hooks'; +import { useCoreDescriptor } from '@polkadot/react-hooks'; import Overview from './Overview/index.js'; import { useTranslation } from './translate.js'; @@ -29,38 +29,19 @@ function createItemsRef (t: (key: string, options?: { replace: Record { const { t } = useTranslation(); const itemsRef = useRef(createItemsRef(t)); - const { api } = useApi(); const coreInfos = useCoreDescriptor(); - const workloadInfos = useWorkloadInfos(); - const workplanInfos = useWorkplanInfos(); - if (api.query.broker) { - return ( -
- - -
- ); - } else { - return ( -
- - -
- ); - } + return ( +
+ + +
+ ); } export default React.memo(CoretimeApp); diff --git a/packages/react-query/src/BrokerStatus.tsx b/packages/react-query/src/BrokerStatus.tsx index 93bb71e05b3c..81c4974359b1 100644 --- a/packages/react-query/src/BrokerStatus.tsx +++ b/packages/react-query/src/BrokerStatus.tsx @@ -18,6 +18,8 @@ function BrokerStatus ({ children, className = '', query }: Props): React.ReactE const status = useCall(api.query.broker?.status); const strStatus = status === undefined ? '' : status.toJSON()[query]; + console.log(strStatus); + return (
{strStatus?.toString()} diff --git a/tsconfig.base.json b/tsconfig.base.json index 10469b8fffc4..443a78493298 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -25,6 +25,7 @@ "@polkadot/app-alliance": ["page-alliance/src/index.tsx"], "@polkadot/app-assets": ["page-assets/src/index.tsx"], "@polkadot/app-coretime": ["page-coretime/src/index.tsx"], + "@polkadot/app-broker": ["page-broker/src/index.tsx"], "@polkadot/app-bounties": ["page-bounties/src/index.tsx"], "@polkadot/app-calendar": ["page-calendar/src/index.tsx"], "@polkadot/app-claims": ["page-claims/src/index.tsx"], diff --git a/tsconfig.build.json b/tsconfig.build.json index 8414fa1242cc..be93dee332c4 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -20,6 +20,7 @@ { "path": "./packages/page-bounties/tsconfig.build.json" }, { "path": "./packages/page-bounties/tsconfig.spec.json" }, { "path": "./packages/page-bounties/tsconfig.test.json" }, + { "path": "./packages/page-broker/tsconfig.build.json" }, { "path": "./packages/page-calendar/tsconfig.build.json" }, { "path": "./packages/page-claims/tsconfig.build.json" }, { "path": "./packages/page-claims/tsconfig.spec.json" }, diff --git a/yarn.lock b/yarn.lock index d3289982fd3b..c4c82e9bc195 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1523,6 +1523,19 @@ __metadata: languageName: unknown linkType: soft +"@polkadot/app-broker@workspace:packages/page-broker": + version: 0.0.0-use.local + resolution: "@polkadot/app-broker@workspace:packages/page-broker" + dependencies: + "@polkadot/react-components": "npm:0.135.2-49-x" + "@polkadot/react-query": "npm:0.135.2-49-x" + peerDependencies: + react: "*" + react-dom: "*" + react-is: "*" + languageName: unknown + linkType: soft + "@polkadot/app-calendar@workspace:packages/page-calendar": version: 0.0.0-use.local resolution: "@polkadot/app-calendar@workspace:packages/page-calendar" From 7d154ca5fdf6069f05d9749efb514917f6f158f4 Mon Sep 17 00:00:00 2001 From: bee344 Date: Tue, 16 Apr 2024 08:56:20 -0300 Subject: [PATCH 21/56] filter bug fix --- packages/page-broker/src/Overview/index.tsx | 36 +++++++++---------- packages/page-broker/src/index.tsx | 7 ++-- packages/page-coretime/src/index.tsx | 5 +-- packages/react-hooks/src/useCoreDescriptor.ts | 22 ++++++------ packages/react-hooks/src/useWorkloadInfos.ts | 10 +++--- packages/react-hooks/src/useWorkplanInfos.ts | 10 +++--- 6 files changed, 44 insertions(+), 46 deletions(-) diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index db43e8d57ec2..501b53d56c64 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -3,7 +3,7 @@ import type { CoreDescription, CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; -import React, { useMemo, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { Button, Columar, Dropdown } from '@polkadot/react-components'; @@ -17,7 +17,6 @@ interface Props { workloadInfos?: CoreWorkloadInfo[]; workplanInfos?: CoreWorkplanInfo[]; coreInfos?: CoreDescription[]; - relay?: boolean; } function uniqByForEach (array: CoreWorkplanInfo[] | undefined) { @@ -46,13 +45,14 @@ function Overview ({ className, workloadInfos, workplanInfos }: Props): React.Re const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); const [workplanCoreSelected, setWorkplanCoreSelected] = useState(-1); const [workplanSliceSelected, setWorkplanSliceSelected] = useState(-1); - const workloadCores = workloadInfos?.length; + const [coreArr, setCoreArr] = useState([]); - const coreArr: number[] = useMemo(() => [], []); + useEffect(() => { + // Your coreArr initialization logic goes here + const newCoreArr = Array.from({ length: workloadInfos?.length || 0 }, (_, index) => index); - const len = workloadCores || 0; - - Array(len).fill(0).map((_, index) => coreArr.push(index)); + setCoreArr(newCoreArr); + }, [workloadInfos]); const { workplanCores, workplanTS } = uniqByForEach(workplanInfos); @@ -62,14 +62,12 @@ function Overview ({ className, workloadInfos, workplanInfos }: Props): React.Re const workloadCoreOpts = useMemo( () => [{ text: t('All active/available cores'), value: -1 }].concat( coreArr - .map((c) => { - console.log('c', c); - - return { + .map((c) => ( + { text: `Core ${c}`, value: c - }; - }) + } + )) .filter((v): v is { text: string, value: number } => !!v.text) ), [coreArr, t] @@ -83,14 +81,12 @@ function Overview ({ className, workloadInfos, workplanInfos }: Props): React.Re const workplanCoreOpts = useMemo( () => [{ text: t('All scehduled cores'), value: -1 }].concat( workplanCores - .map((c) => { - console.log('cwp', c); - - return { + .map((c) => + ({ text: `Core ${c}`, value: c - }; - }) + }) + ) .filter((v): v is { text: string, value: number } => !!v.text) ), [workplanCores, t] @@ -129,7 +125,7 @@ function Overview ({ className, workloadInfos, workplanInfos }: Props): React.Re { const { t } = useTranslation(); const itemsRef = useRef(createItemsRef(t)); - const workloadInfos = useWorkloadInfos(); - const workplanInfos = useWorkplanInfos(); + const { api, isApiReady } = useApi(); + const workloadInfos = useWorkloadInfos(api, isApiReady); + const workplanInfos = useWorkplanInfos(api, isApiReady); return (
diff --git a/packages/page-coretime/src/index.tsx b/packages/page-coretime/src/index.tsx index 2cb6fadf68bb..77bed4cad06c 100644 --- a/packages/page-coretime/src/index.tsx +++ b/packages/page-coretime/src/index.tsx @@ -6,7 +6,7 @@ import type { TabItem } from '@polkadot/react-components/types'; import React, { useRef } from 'react'; import { Tabs } from '@polkadot/react-components'; -import { useCoreDescriptor } from '@polkadot/react-hooks'; +import { useApi, useCoreDescriptor } from '@polkadot/react-hooks'; import Overview from './Overview/index.js'; import { useTranslation } from './translate.js'; @@ -28,8 +28,9 @@ function createItemsRef (t: (key: string, options?: { replace: Record { const { t } = useTranslation(); + const { api, isApiReady } = useApi(); const itemsRef = useRef(createItemsRef(t)); - const coreInfos = useCoreDescriptor(); + const coreInfos = useCoreDescriptor(api, isApiReady); return (
diff --git a/packages/react-hooks/src/useCoreDescriptor.ts b/packages/react-hooks/src/useCoreDescriptor.ts index 52920ba8bb80..16fa404a3771 100644 --- a/packages/react-hooks/src/useCoreDescriptor.ts +++ b/packages/react-hooks/src/useCoreDescriptor.ts @@ -1,13 +1,14 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; import type { StorageKey, u32, Vec } from '@polkadot/types'; import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; import type { CoreDescription } from './types.js'; import { useEffect, useState } from 'react'; -import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; +import { createNamedHook, useCall, useMapKeys } from '@polkadot/react-hooks'; function extractInfo (info: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[], core: number) { return { @@ -21,9 +22,8 @@ const OPT_KEY = { keys.map(({ args: [id] }) => id) }; -function useCoreDescriptorImpl (): CoreDescription[] | undefined { - const { api } = useApi(); - const keys = useMapKeys(api.query.coretimeAssignmentProvider.coreDescriptors, [], OPT_KEY); +function useCoreDescriptorImpl (api: ApiPromise, ready: boolean): CoreDescription[] | undefined { + const keys = useMapKeys(ready && api.query.coretimeAssignmentProvider.coreDescriptors, [], OPT_KEY); const sanitizedKeys = keys?.map((_, index) => { return index; @@ -31,18 +31,18 @@ function useCoreDescriptorImpl (): CoreDescription[] | undefined { sanitizedKeys?.pop(); - const coreDescriptors = useCall<[[number[]], Vec[]]>(api.query.coretimeAssignmentProvider.coreDescriptors.multi, [sanitizedKeys], { withParams: true }); + const coreDescriptors = useCall<[[number[]], Vec[]]>(ready && api.query.coretimeAssignmentProvider.coreDescriptors.multi, [sanitizedKeys], { withParams: true }); const [state, setState] = useState(); useEffect((): void => { coreDescriptors && - setState( - coreDescriptors[0][0].map((info, index) => { - return extractInfo(coreDescriptors[1][index], info); - } - ) - ); + setState( + coreDescriptors[0][0].map((info, index) => { + return extractInfo(coreDescriptors[1][index], info); + } + ) + ); }, [coreDescriptors]); return state; diff --git a/packages/react-hooks/src/useWorkloadInfos.ts b/packages/react-hooks/src/useWorkloadInfos.ts index 3f89acae0309..8521aa2042c6 100644 --- a/packages/react-hooks/src/useWorkloadInfos.ts +++ b/packages/react-hooks/src/useWorkloadInfos.ts @@ -1,6 +1,7 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; import type { StorageKey, u32, Vec } from '@polkadot/types'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; import type { BN } from '@polkadot/util'; @@ -8,7 +9,7 @@ import type { CoreWorkloadInfo } from './types.js'; import { useEffect, useState } from 'react'; -import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; +import { createNamedHook, useCall, useMapKeys } from '@polkadot/react-hooks'; function extractInfo (info: PalletBrokerScheduleItem[], core: number): CoreWorkloadInfo { return { @@ -22,10 +23,9 @@ const OPT_KEY = { keys.map(({ args: [core] }) => core) }; -function useWorkloadInfosImpl (): CoreWorkloadInfo[] | undefined { - const { api } = useApi(); - const cores = useMapKeys(api.query.broker.workload, [], OPT_KEY); - const workloadInfo = useCall<[[BN[]], Vec[]]>(api.query.broker.workload.multi, [cores], { withParams: true }); +function useWorkloadInfosImpl (api: ApiPromise, ready: boolean): CoreWorkloadInfo[] | undefined { + const cores = useMapKeys(ready && api.query.broker.workload, [], OPT_KEY); + const workloadInfo = useCall<[[BN[]], Vec[]]>(ready && api.query.broker.workload.multi, [cores], { withParams: true }); const [state, setState] = useState(); useEffect((): void => { diff --git a/packages/react-hooks/src/useWorkplanInfos.ts b/packages/react-hooks/src/useWorkplanInfos.ts index ec0fbce8522f..2f4944d744e8 100644 --- a/packages/react-hooks/src/useWorkplanInfos.ts +++ b/packages/react-hooks/src/useWorkplanInfos.ts @@ -1,13 +1,14 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; import type { Option, StorageKey, u16, u32, Vec } from '@polkadot/types'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; import type { CoreWorkplanInfo } from './types.js'; import { useEffect, useState } from 'react'; -import { createNamedHook, useApi, useCall, useMapKeys } from '@polkadot/react-hooks'; +import { createNamedHook, useCall, useMapKeys } from '@polkadot/react-hooks'; function extractInfo (info: Vec, timeslice: number, core: number) { return { @@ -22,15 +23,14 @@ const OPT_KEY = { keys.map(({ args: [timeslice, core] }) => [timeslice, core]) }; -function useWorkplanInfosImpl (): CoreWorkplanInfo[] | undefined { - const { api } = useApi(); - const workplanKeys = useMapKeys(api.query.broker.workplan, [], OPT_KEY); +function useWorkplanInfosImpl (api: ApiPromise, ready: boolean): CoreWorkplanInfo[] | undefined { + const workplanKeys = useMapKeys(ready && api.query.broker.workplan, [], OPT_KEY); const sanitizedKeys = workplanKeys?.map((value) => { return value[0]; }); - const workplanInfo = useCall<[[[u32, u16][]], Option>[]]>(api.query.broker.workplan.multi, [sanitizedKeys], { withParams: true }); + const workplanInfo = useCall<[[[u32, u16][]], Option>[]]>(ready && api.query.broker.workplan.multi, [sanitizedKeys], { withParams: true }); const [state, setState] = useState(); From 8e59a15069cf0c337429eb19106eb28988afe70d Mon Sep 17 00:00:00 2001 From: bee344 Date: Tue, 16 Apr 2024 09:09:57 -0300 Subject: [PATCH 22/56] prettied mask bar --- packages/react-components/src/MaskCoverage.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/react-components/src/MaskCoverage.tsx b/packages/react-components/src/MaskCoverage.tsx index 1aa1a56443c8..fa7639c3fe5c 100644 --- a/packages/react-components/src/MaskCoverage.tsx +++ b/packages/react-components/src/MaskCoverage.tsx @@ -7,13 +7,17 @@ import { styled } from './styled.js'; const BarContainer = styled.div` display: flex; + align-items: center; + border-radius: 4px; + overflow: hidden; `; interface SectionProps { - value: string; // Define the props interface + value: string; } const Segment = styled.div` + flex: 1; width: 5px; height: 20px; margin-right: 2px; @@ -21,7 +25,7 @@ const Segment = styled.div` return props.value; }}; width: 100%; - background-color: var(--bg-inverse); + background-color: ${(props) => props.value === '1' ? 'var(--bg-inverse)' : 'white'}; `; function MaskCoverage ({ values }: { values: string[] }) { From 0eb56523008231f55c2c7e8dfd9c99954ef2c0a8 Mon Sep 17 00:00:00 2001 From: bee344 Date: Tue, 16 Apr 2024 14:02:12 -0300 Subject: [PATCH 23/56] updated deps --- packages/page-broker/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/page-broker/package.json b/packages/page-broker/package.json index 9e985103ea7d..39294d719e79 100644 --- a/packages/page-broker/package.json +++ b/packages/page-broker/package.json @@ -16,8 +16,8 @@ "type": "module", "version": "0.135.2-44-x", "dependencies": { - "@polkadot/react-components": "0.135.2-49-x", - "@polkadot/react-query": "0.135.2-49-x" + "@polkadot/react-components": "0.135.2-51-x", + "@polkadot/react-query": "0.135.2-51-x" }, "peerDependencies": { "react": "*", From 75a144037d2d3bb5f516581bb4ad2ee0833b7e1f Mon Sep 17 00:00:00 2001 From: bee344 Date: Wed, 17 Apr 2024 10:17:55 -0300 Subject: [PATCH 24/56] updated deps broker --- packages/page-coretime/package.json | 4 ++-- yarn.lock | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/page-coretime/package.json b/packages/page-coretime/package.json index 092d8c39d429..d43ee5cbafa8 100644 --- a/packages/page-coretime/package.json +++ b/packages/page-coretime/package.json @@ -16,8 +16,8 @@ "type": "module", "version": "0.135.2-44-x", "dependencies": { - "@polkadot/react-components": "0.135.2-49-x", - "@polkadot/react-query": "0.135.2-49-x" + "@polkadot/react-components": "0.135.2-51-x", + "@polkadot/react-query": "0.135.2-51-x" }, "peerDependencies": { "react": "*", diff --git a/yarn.lock b/yarn.lock index 04a78652d3ac..5a03622a6376 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1523,6 +1523,19 @@ __metadata: languageName: unknown linkType: soft +"@polkadot/app-broker@workspace:packages/page-broker": + version: 0.0.0-use.local + resolution: "@polkadot/app-broker@workspace:packages/page-broker" + dependencies: + "@polkadot/react-components": "npm:0.135.2-51-x" + "@polkadot/react-query": "npm:0.135.2-51-x" + peerDependencies: + react: "*" + react-dom: "*" + react-is: "*" + languageName: unknown + linkType: soft + "@polkadot/app-calendar@workspace:packages/page-calendar": version: 0.0.0-use.local resolution: "@polkadot/app-calendar@workspace:packages/page-calendar" @@ -1575,8 +1588,8 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-coretime@workspace:packages/page-coretime" dependencies: - "@polkadot/react-components": "npm:0.135.2-49-x" - "@polkadot/react-query": "npm:0.135.2-49-x" + "@polkadot/react-components": "npm:0.135.2-51-x" + "@polkadot/react-query": "npm:0.135.2-51-x" peerDependencies: react: "*" react-dom: "*" @@ -2300,7 +2313,7 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/react-components@npm:^0.135.2-51-x, @polkadot/react-components@workspace:packages/react-components": +"@polkadot/react-components@npm:0.135.2-51-x, @polkadot/react-components@npm:^0.135.2-51-x, @polkadot/react-components@workspace:packages/react-components": version: 0.0.0-use.local resolution: "@polkadot/react-components@workspace:packages/react-components" dependencies: @@ -2423,7 +2436,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-query@npm:^0.135.2-51-x, @polkadot/react-query@workspace:packages/react-query": +"@polkadot/react-query@npm:0.135.2-51-x, @polkadot/react-query@npm:^0.135.2-51-x, @polkadot/react-query@workspace:packages/react-query": version: 0.0.0-use.local resolution: "@polkadot/react-query@workspace:packages/react-query" peerDependencies: From 1e0f226a163e316a89e4d7b2927366274a97f5db Mon Sep 17 00:00:00 2001 From: bee344 Date: Tue, 28 May 2024 12:30:53 -0300 Subject: [PATCH 25/56] removed TS filter and added graph --- .../apps/public/locales/en/app-broker.json | 1 - .../apps/public/locales/en/app-coretime.json | 1 - .../apps/public/locales/en/translation.json | 1 - .../apps/public/locales/es/translation.json | 1 - packages/page-broker/package.json | 6 +- packages/page-broker/src/Overview/Summary.tsx | 14 ++++- packages/page-broker/src/Overview/index.tsx | 46 ++++---------- packages/page-broker/src/index.tsx | 3 +- packages/page-coretime/package.json | 6 +- packages/react-components/src/UsageBar.tsx | 61 +++++++++++++++++++ packages/react-components/src/index.ts | 1 + yarn.lock | 21 +++++-- 12 files changed, 111 insertions(+), 51 deletions(-) create mode 100644 packages/react-components/src/UsageBar.tsx diff --git a/packages/apps/public/locales/en/app-broker.json b/packages/apps/public/locales/en/app-broker.json index 8b9ef2ca3def..d2f394639f03 100644 --- a/packages/apps/public/locales/en/app-broker.json +++ b/packages/apps/public/locales/en/app-broker.json @@ -17,7 +17,6 @@ "pool size": "pool size", "selected core for workload": "selected core for workload", "selected core for workplan": "selected core for workplan", - "selected timeslice": "selected timeslice", "timeslice": "timeslice", "traffic": "traffic", "work queue": "work queue", diff --git a/packages/apps/public/locales/en/app-coretime.json b/packages/apps/public/locales/en/app-coretime.json index 571578e44350..fca8fb4c065d 100644 --- a/packages/apps/public/locales/en/app-coretime.json +++ b/packages/apps/public/locales/en/app-coretime.json @@ -18,7 +18,6 @@ "pool size": "pool size", "selected core for workload": "selected core for workload", "selected core for workplan": "selected core for workplan", - "selected timeslice": "selected timeslice", "timeslice": "timeslice", "traffic": "traffic", "work queue": "work queue", diff --git a/packages/apps/public/locales/en/translation.json b/packages/apps/public/locales/en/translation.json index 3805baad2ba6..80420286d657 100644 --- a/packages/apps/public/locales/en/translation.json +++ b/packages/apps/public/locales/en/translation.json @@ -1676,7 +1676,6 @@ "selected core for workplan": "", "selected signatories": "", "selected state query": "", - "selected timeslice": "", "selected track": "", "selected validators": "", "send": "", diff --git a/packages/apps/public/locales/es/translation.json b/packages/apps/public/locales/es/translation.json index eb2671e3bd78..d930ecbf4b18 100644 --- a/packages/apps/public/locales/es/translation.json +++ b/packages/apps/public/locales/es/translation.json @@ -1002,7 +1002,6 @@ "selected core for workplan": "núcleo seleccionado para workplan", "selected signatories": "firmantes seleccionados", "selected state query": "consulta de estado seleccionado", - "selected timeslice": "rango de tiempo seleccionado", "selected validators": "validadores elegidos", "send": "enviar", "send as RPC call": "enviar como una llamada a RPC", diff --git a/packages/page-broker/package.json b/packages/page-broker/package.json index 39294d719e79..09bd502b1303 100644 --- a/packages/page-broker/package.json +++ b/packages/page-broker/package.json @@ -14,10 +14,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.135.2-44-x", + "version": "0.138.1", "dependencies": { - "@polkadot/react-components": "0.135.2-51-x", - "@polkadot/react-query": "0.135.2-51-x" + "@polkadot/react-components": "0.138.1", + "@polkadot/react-query": "0.138.1" }, "peerDependencies": { "react": "*", diff --git a/packages/page-broker/src/Overview/Summary.tsx b/packages/page-broker/src/Overview/Summary.tsx index d60bb173f041..e485563d5fc0 100644 --- a/packages/page-broker/src/Overview/Summary.tsx +++ b/packages/page-broker/src/Overview/Summary.tsx @@ -3,15 +3,22 @@ import React from 'react'; -import { CardSummary, SummaryBox } from '@polkadot/react-components'; +import { CardSummary, SummaryBox, UsageBar } from '@polkadot/react-components'; import { useApi } from '@polkadot/react-hooks'; +import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import { useTranslation } from '../translate.js'; import Cores from './Cores.js'; import Pools from './Pools.js'; import Timeslice from './Timeslice.js'; +import { LinkOption } from '@polkadot/apps-config/endpoints/types'; -function Summary (): React.ReactElement { +interface Props { + apiEndpoint?: LinkOption | null; + workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo +} + +function Summary({ apiEndpoint, workloadInfos }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); @@ -32,6 +39,9 @@ function Summary (): React.ReactElement { )} + ); diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index 501b53d56c64..4a204d319cad 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -4,6 +4,7 @@ import type { CoreDescription, CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; import React, { useEffect, useMemo, useState } from 'react'; +import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; import { Button, Columar, Dropdown } from '@polkadot/react-components'; @@ -17,9 +18,10 @@ interface Props { workloadInfos?: CoreWorkloadInfo[]; workplanInfos?: CoreWorkplanInfo[]; coreInfos?: CoreDescription[]; + apiEndpoint?: LinkOption | null; } -function uniqByForEach (array: CoreWorkplanInfo[] | undefined) { +function uniqByForEach(array: CoreWorkplanInfo[] | undefined) { const workplanCores: number[] = []; const workplanTS: number[] = []; @@ -40,11 +42,10 @@ function uniqByForEach (array: CoreWorkplanInfo[] | undefined) { } } -function Overview ({ className, workloadInfos, workplanInfos }: Props): React.ReactElement { +function Overview({ className, workloadInfos, workplanInfos, apiEndpoint }: Props): React.ReactElement { const { t } = useTranslation(); const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); const [workplanCoreSelected, setWorkplanCoreSelected] = useState(-1); - const [workplanSliceSelected, setWorkplanSliceSelected] = useState(-1); const [coreArr, setCoreArr] = useState([]); useEffect(() => { @@ -82,10 +83,10 @@ function Overview ({ className, workloadInfos, workplanInfos }: Props): React.Re () => [{ text: t('All scehduled cores'), value: -1 }].concat( workplanCores .map((c) => - ({ - text: `Core ${c}`, - value: c - }) + ({ + text: `Core ${c}`, + value: c + }) ) .filter((v): v is { text: string, value: number } => !!v.text) ), @@ -94,35 +95,19 @@ function Overview ({ className, workloadInfos, workplanInfos }: Props): React.Re const filteredWorkplan = useMemo( () => { - if (workplanCoreSelected === workplanSliceSelected) { + if (workplanCoreSelected === -1) { return workplanInfos; - } else if (workplanCoreSelected === -1) { - return workplanInfos?.filter(({ timeslice }) => timeslice === workplanSliceSelected); - } else if (workplanSliceSelected === -1) { - return workplanInfos?.filter(({ core }) => core === workplanCoreSelected); } else { - return workplanInfos?.filter(({ core, timeslice }) => core === workplanCoreSelected && timeslice === workplanSliceSelected); + return workplanInfos?.filter(({ core }) => core === workplanCoreSelected); } } , - [workplanInfos, workplanCoreSelected, workplanSliceSelected] - ); - - const workplanTSOpts = useMemo( - () => [{ text: t('All available slices'), value: -1 }].concat( - workplanTS - .map((ts) => ({ - text: `Timeslice ${ts}`, - value: ts - })) - .filter((v): v is { text: string, value: number } => !!v.text) - ), - [workplanTS, t] + [workplanInfos, workplanCoreSelected] ); return (
- + - diff --git a/packages/page-broker/src/index.tsx b/packages/page-broker/src/index.tsx index 7ccb8df60c9d..cfb8a2bca158 100644 --- a/packages/page-broker/src/index.tsx +++ b/packages/page-broker/src/index.tsx @@ -29,7 +29,7 @@ function createItemsRef (t: (key: string, options?: { replace: Record { const { t } = useTranslation(); const itemsRef = useRef(createItemsRef(t)); - const { api, isApiReady } = useApi(); + const { api, apiEndpoint, isApiReady } = useApi(); const workloadInfos = useWorkloadInfos(api, isApiReady); const workplanInfos = useWorkplanInfos(api, isApiReady); @@ -42,6 +42,7 @@ function BrokerApp ({ basePath, className }: Props): React.ReactElement {
); diff --git a/packages/page-coretime/package.json b/packages/page-coretime/package.json index d43ee5cbafa8..1cd7a5733530 100644 --- a/packages/page-coretime/package.json +++ b/packages/page-coretime/package.json @@ -14,10 +14,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.135.2-44-x", + "version": "0.138.1", "dependencies": { - "@polkadot/react-components": "0.135.2-51-x", - "@polkadot/react-query": "0.135.2-51-x" + "@polkadot/react-components": "0.138.1", + "@polkadot/react-query": "0.138.1" }, "peerDependencies": { "react": "*", diff --git a/packages/react-components/src/UsageBar.tsx b/packages/react-components/src/UsageBar.tsx new file mode 100644 index 000000000000..db84ee194e3a --- /dev/null +++ b/packages/react-components/src/UsageBar.tsx @@ -0,0 +1,61 @@ +import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; +import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; + +import React from 'react'; + +interface Props { + info?: CoreWorkloadInfo[] | CoreWorkloadInfo; + apiEndpoint?: LinkOption | null; +} + +function UsageBar({ info, apiEndpoint }: Props): React.ReactElement { + const color = apiEndpoint?.ui.color ? apiEndpoint?.ui.color : '#f19135'; + const radius = 50; + const strokeWidth = 15; + const circumference = 2 * Math.PI * radius; + + let sanitized: CoreWorkloadInfo[] = []; + + if (Array.isArray(info)) { + sanitized = info; + } else if (info) { + sanitized.push(info); + } + + let tasks = 0; + let idles = 0; + let pools = 0; + + sanitized?.forEach((v) => { + if (v.info[0].assignment.isTask) { + ++tasks; + } else if (v.info[0].assignment.isPool) { + ++pools; + } else { + ++idles; + } + }); + + let total = tasks + idles + pools; + let taskPerc = (tasks / total) * 100; + let poolPerc = (pools / total) * 100; + + const taskOffset = (taskPerc / 100) * circumference; + const poolOffset = taskOffset + (poolPerc / 100) * circumference; + + return ( +
+ + + + + + +
+ + + ) +} + +export default React.memo(UsageBar); diff --git a/packages/react-components/src/index.ts b/packages/react-components/src/index.ts index e7da661fcaec..1878f2f0077c 100644 --- a/packages/react-components/src/index.ts +++ b/packages/react-components/src/index.ts @@ -97,6 +97,7 @@ export { default as Toggle } from './Toggle.js'; export { default as ToggleGroup } from './ToggleGroup.js'; export { default as Tooltip } from './Tooltip.js'; export { default as TxButton } from './TxButton.js'; +export { default as UsageBar } from './UsageBar.js'; export { default as VoteAccount } from './VoteAccount.js'; export { default as VoteValue } from './VoteValue.js'; diff --git a/yarn.lock b/yarn.lock index ab02e1fa76b1..cd5dc80304aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1287,6 +1287,19 @@ __metadata: languageName: unknown linkType: soft +"@polkadot/app-broker@workspace:packages/page-broker": + version: 0.0.0-use.local + resolution: "@polkadot/app-broker@workspace:packages/page-broker" + dependencies: + "@polkadot/react-components": "npm:0.138.1" + "@polkadot/react-query": "npm:0.138.1" + peerDependencies: + react: "*" + react-dom: "*" + react-is: "*" + languageName: unknown + linkType: soft + "@polkadot/app-calendar@workspace:packages/page-calendar": version: 0.0.0-use.local resolution: "@polkadot/app-calendar@workspace:packages/page-calendar" @@ -1339,8 +1352,8 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-coretime@workspace:packages/page-coretime" dependencies: - "@polkadot/react-components": "npm:0.135.2-51-x" - "@polkadot/react-query": "npm:0.135.2-51-x" + "@polkadot/react-components": "npm:0.138.1" + "@polkadot/react-query": "npm:0.138.1" peerDependencies: react: "*" react-dom: "*" @@ -2079,7 +2092,7 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/react-components@npm:^0.138.1, @polkadot/react-components@workspace:packages/react-components": +"@polkadot/react-components@npm:0.138.1, @polkadot/react-components@npm:^0.138.1, @polkadot/react-components@workspace:packages/react-components": version: 0.0.0-use.local resolution: "@polkadot/react-components@workspace:packages/react-components" dependencies: @@ -2202,7 +2215,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-query@npm:^0.138.1, @polkadot/react-query@workspace:packages/react-query": +"@polkadot/react-query@npm:0.138.1, @polkadot/react-query@npm:^0.138.1, @polkadot/react-query@workspace:packages/react-query": version: 0.0.0-use.local resolution: "@polkadot/react-query@workspace:packages/react-query" peerDependencies: From 394393767a5d654c48a3affee24b8ed670a9dd96 Mon Sep 17 00:00:00 2001 From: bee344 Date: Thu, 30 May 2024 08:24:46 -0300 Subject: [PATCH 26/56] linting --- .../page-broker/src/Overview/CoreTable.tsx | 48 +++++++ .../page-broker/src/Overview/CoresTables.tsx | 74 ++++++++++ packages/page-broker/src/Overview/Summary.tsx | 10 +- .../page-broker/src/Overview/Workload.tsx | 23 +-- .../page-broker/src/Overview/Workloads.tsx | 38 +---- .../page-broker/src/Overview/Workplan.tsx | 29 ++-- .../page-broker/src/Overview/Workplans.tsx | 34 ++--- packages/page-broker/src/Overview/index.tsx | 43 +++--- packages/page-broker/src/index.tsx | 3 +- packages/react-components/src/UsageBar.tsx | 136 ++++++++++++------ packages/react-hooks/src/types.ts | 4 +- packages/react-query/src/BrokerStatus.tsx | 2 - 12 files changed, 292 insertions(+), 152 deletions(-) create mode 100644 packages/page-broker/src/Overview/CoreTable.tsx create mode 100644 packages/page-broker/src/Overview/CoresTables.tsx diff --git a/packages/page-broker/src/Overview/CoreTable.tsx b/packages/page-broker/src/Overview/CoreTable.tsx new file mode 100644 index 000000000000..0956801e723c --- /dev/null +++ b/packages/page-broker/src/Overview/CoreTable.tsx @@ -0,0 +1,48 @@ +// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; + +import React, { useRef } from 'react'; + +import { Columar, Table } from '@polkadot/react-components'; + +import { useTranslation } from '../translate.js'; +import Workloads from './Workloads.js'; +import Workplans from './Workplans.js'; + +interface Props { + core?: number; + workload?: CoreWorkloadInfo[], + workplan?: CoreWorkplanInfo[] +} + +function CoreTable ({ core, workload, workplan }: Props): React.ReactElement { + const { t } = useTranslation(); + + const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ + [t('core')] + ]); + + return ( +
{assignments.join(', ')}{'100% Idle'}{'100% Pool'}{`100% Task: ${value.assignments[0][0].asTask.toString()}`}{'Queue empty'}{response.length > 1 ? response.join(', ') : response[0]}
+ + + +
+ + + + + + + + + +
+ ); +} + +export default React.memo(CoreTable); diff --git a/packages/page-broker/src/Overview/CoresTables.tsx b/packages/page-broker/src/Overview/CoresTables.tsx new file mode 100644 index 000000000000..ab4b31197db8 --- /dev/null +++ b/packages/page-broker/src/Overview/CoresTables.tsx @@ -0,0 +1,74 @@ +// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { ApiPromise } from '@polkadot/api'; +import type { CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; +import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; + +import React from 'react'; + +import { useCall } from '@polkadot/react-hooks'; + +import CoreTable from './CoreTable.js'; + +interface Props { + api?: ApiPromise; + workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo; + workplanInfos?: CoreWorkplanInfo[] | CoreWorkplanInfo; +} + +function CoresTable ({ api, workloadInfos, workplanInfos }: Props): React.ReactElement { + const query = useCall(api?.query.broker?.status); + const cores = query ? query.toJSON().coreCount : 0; + + console.log('core', cores); + const coreArr = []; + + for (let core = 0; core < Number(cores); core++) { + console.log('core', core); + coreArr.push(core); + } + + let sanitizedWorkloadInfos: CoreWorkloadInfo[] = []; + let sanitizedWorkplanInfos: CoreWorkplanInfo[] = []; + + if (Array.isArray(workloadInfos)) { + sanitizedWorkloadInfos = workloadInfos; + } else if (workloadInfos) { + sanitizedWorkloadInfos.push(workloadInfos); + } + + if (Array.isArray(workplanInfos)) { + sanitizedWorkplanInfos = workplanInfos; + } else if (workplanInfos) { + sanitizedWorkplanInfos.push(workplanInfos); + } + + sanitizedWorkloadInfos?.sort((a, b) => a.core - b.core); + sanitizedWorkplanInfos?.sort((a, b) => a.core - b.core); + + const list: [number, CoreWorkloadInfo[], CoreWorkplanInfo[]][] = []; + + coreArr.forEach((c) => { + list.push([c, sanitizedWorkloadInfos.filter((v) => v.core === c), sanitizedWorkplanInfos.filter((v) => v.core === c)]); + }); + + return ( + <> + { + list.map((c) => + ( + + ) + ) + } + + ); +} + +export default React.memo(CoresTable); diff --git a/packages/page-broker/src/Overview/Summary.tsx b/packages/page-broker/src/Overview/Summary.tsx index e485563d5fc0..9c3324530f5e 100644 --- a/packages/page-broker/src/Overview/Summary.tsx +++ b/packages/page-broker/src/Overview/Summary.tsx @@ -1,24 +1,25 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; +import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; + import React from 'react'; import { CardSummary, SummaryBox, UsageBar } from '@polkadot/react-components'; import { useApi } from '@polkadot/react-hooks'; -import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import { useTranslation } from '../translate.js'; import Cores from './Cores.js'; import Pools from './Pools.js'; import Timeslice from './Timeslice.js'; -import { LinkOption } from '@polkadot/apps-config/endpoints/types'; interface Props { apiEndpoint?: LinkOption | null; workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo } -function Summary({ apiEndpoint, workloadInfos }: Props): React.ReactElement { +function Summary ({ apiEndpoint, workloadInfos }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); @@ -40,8 +41,9 @@ function Summary({ apiEndpoint, workloadInfos }: Props): React.ReactElement { )} + >
); diff --git a/packages/page-broker/src/Overview/Workload.tsx b/packages/page-broker/src/Overview/Workload.tsx index 393fda4886ff..f0e6391bbdf3 100644 --- a/packages/page-broker/src/Overview/Workload.tsx +++ b/packages/page-broker/src/Overview/Workload.tsx @@ -5,16 +5,15 @@ import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import React from 'react'; -import { MaskCoverage, Table } from '@polkadot/react-components'; +import { Columar } from '@polkadot/react-components'; import { hexToBin } from '../utils.js'; interface Props { - className?: string; value: CoreWorkloadInfo; } -function Workload ({ className, value: { core, info } }: Props): React.ReactElement { +function Workload ({ value: { info } }: Props): React.ReactElement { const trimmedHex: string = info[0].mask.toHex().slice(2); const arr: string[] = trimmedHex.split(''); @@ -24,14 +23,22 @@ function Workload ({ className, value: { core, info } }: Props): React.ReactElem hexToBin(bit).split('').forEach((v) => buffArr.push(v)); }); + buffArr.filter((v) => v === '1'); + const sanitizedAssignment = info[0].assignment.isTask ? info[0].assignment.asTask : info[0].assignment; return ( - - - - {sanitizedAssignment.toString()} - + + +
{'Assignment'}
+ {sanitizedAssignment.toString()} +
+ +
{'Mask'}
+ {`${buffArr.length / 80 * 100}%`} +
+
+ ); } diff --git a/packages/page-broker/src/Overview/Workloads.tsx b/packages/page-broker/src/Overview/Workloads.tsx index d794e5b8e2ea..87488c9d9bfa 100644 --- a/packages/page-broker/src/Overview/Workloads.tsx +++ b/packages/page-broker/src/Overview/Workloads.tsx @@ -3,50 +3,24 @@ import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; -import React, { useRef } from 'react'; +import React from 'react'; -import { Table } from '@polkadot/react-components'; - -import { useTranslation } from '../translate.js'; import Workload from './Workload.js'; interface Props { - className?: string; - workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo; + workloadInfos?: CoreWorkloadInfo[]; } -function Workloads ({ className, workloadInfos }: Props): React.ReactElement { - const { t } = useTranslation(); - let sanitized: CoreWorkloadInfo[] = []; - - const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ - [t('workload'), 'start', 1], - [t('mask'), 'start media--1300'], - [t('assignment'), 'start media--1600'] - ]); - - if (Array.isArray(workloadInfos)) { - sanitized = workloadInfos; - } else if (workloadInfos) { - sanitized.push(workloadInfos); - } - - sanitized?.sort((a, b) => a.core - b.core); - +function Workloads ({ workloadInfos }: Props): React.ReactElement { return ( - - - {sanitized?.map((v) => ( + <> + {workloadInfos?.map((v) => ( ))} -
+ ); } diff --git a/packages/page-broker/src/Overview/Workplan.tsx b/packages/page-broker/src/Overview/Workplan.tsx index 55005b1c14cf..4662bacb6868 100644 --- a/packages/page-broker/src/Overview/Workplan.tsx +++ b/packages/page-broker/src/Overview/Workplan.tsx @@ -5,7 +5,7 @@ import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; import React from 'react'; -import { MaskCoverage, Table } from '@polkadot/react-components'; +import { Columar } from '@polkadot/react-components'; import { hexToBin } from '../utils.js'; @@ -14,7 +14,7 @@ interface Props { value: CoreWorkplanInfo; } -function Workload ({ className, value: { core, info, timeslice } }: Props): React.ReactElement { +function Workload ({ value: { info, timeslice } }: Props): React.ReactElement { const trimmedHex: string = info[0].mask.toHex().slice(2); const arr: string[] = trimmedHex.split(''); @@ -24,15 +24,28 @@ function Workload ({ className, value: { core, info, timeslice } }: Props): Reac hexToBin(bit).split('').forEach((v) => buffArr.push(v)); }); + buffArr.filter((v) => v === '1'); + const sanitizedAssignment = info[0].assignment.isTask ? info[0].assignment.asTask : info[0].assignment; return ( - - - - {sanitizedAssignment.toString()} - {timeslice.toString()} - + + + +
{'Assignment'}
+ {sanitizedAssignment.toString()} +
+ + +
{'Mask'}
+ {`${buffArr.length / 80 * 100}%`} +
+ + +
{'Timeslice'}
+ {timeslice.toString()} +
+
); } diff --git a/packages/page-broker/src/Overview/Workplans.tsx b/packages/page-broker/src/Overview/Workplans.tsx index 407197d2eeb4..f98d7ef95a79 100644 --- a/packages/page-broker/src/Overview/Workplans.tsx +++ b/packages/page-broker/src/Overview/Workplans.tsx @@ -3,51 +3,35 @@ import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; -import React, { useRef } from 'react'; +import React from 'react'; -import { Table } from '@polkadot/react-components'; - -import { useTranslation } from '../translate.js'; import Workplan from './Workplan.js'; interface Props { className?: string; - filteredWorkplan?: CoreWorkplanInfo[] | CoreWorkplanInfo; + workplanInfos?: CoreWorkplanInfo[] | CoreWorkplanInfo; } -function Workplans ({ className, filteredWorkplan }: Props): React.ReactElement { - const { t } = useTranslation(); +function Workplans ({ workplanInfos }: Props): React.ReactElement { let sanitized: CoreWorkplanInfo[] = []; - if (Array.isArray(filteredWorkplan)) { - sanitized = filteredWorkplan; - } else if (filteredWorkplan) { - sanitized.push(filteredWorkplan); + if (Array.isArray(workplanInfos)) { + sanitized = workplanInfos; + } else if (workplanInfos) { + sanitized.push(workplanInfos); } - const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ - [t('workplan'), 'start', 1], - [t('mask'), 'start media--1600'], - [t('assignment'), 'start media--1600'], - [t('timeslice'), 'start media--1900'] - ]); - sanitized?.sort((a, b) => a.core - b.core); return ( - - + <> {sanitized?.map((workplanInfo) => ( ))} -
+ ); } diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index 4a204d319cad..3f9a1ed8a1ea 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -1,27 +1,28 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; +import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; import type { CoreDescription, CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; import React, { useEffect, useMemo, useState } from 'react'; -import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; -import { Button, Columar, Dropdown } from '@polkadot/react-components'; +import { Button, Dropdown } from '@polkadot/react-components'; import { useTranslation } from '../translate.js'; +import CoresTable from './CoresTables.js'; import Summary from './Summary.js'; -import Workloads from './Workloads.js'; -import Workplans from './Workplans.js'; interface Props { className?: string; + api?: ApiPromise workloadInfos?: CoreWorkloadInfo[]; workplanInfos?: CoreWorkplanInfo[]; coreInfos?: CoreDescription[]; apiEndpoint?: LinkOption | null; } -function uniqByForEach(array: CoreWorkplanInfo[] | undefined) { +function uniqByForEach (array: CoreWorkplanInfo[] | undefined) { const workplanCores: number[] = []; const workplanTS: number[] = []; @@ -42,7 +43,7 @@ function uniqByForEach(array: CoreWorkplanInfo[] | undefined) { } } -function Overview({ className, workloadInfos, workplanInfos, apiEndpoint }: Props): React.ReactElement { +function Overview ({ api, apiEndpoint, className, workloadInfos, workplanInfos }: Props): React.ReactElement { const { t } = useTranslation(); const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); const [workplanCoreSelected, setWorkplanCoreSelected] = useState(-1); @@ -83,10 +84,10 @@ function Overview({ className, workloadInfos, workplanInfos, apiEndpoint }: Prop () => [{ text: t('All scehduled cores'), value: -1 }].concat( workplanCores .map((c) => - ({ - text: `Core ${c}`, - value: c - }) + ({ + text: `Core ${c}`, + value: c + }) ) .filter((v): v is { text: string, value: number } => !!v.text) ), @@ -107,7 +108,10 @@ function Overview({ className, workloadInfos, workplanInfos, apiEndpoint }: Prop return (
- + - - - - - - - - +
); } diff --git a/packages/page-broker/src/index.tsx b/packages/page-broker/src/index.tsx index cfb8a2bca158..ed0bb5cc81dd 100644 --- a/packages/page-broker/src/index.tsx +++ b/packages/page-broker/src/index.tsx @@ -40,9 +40,10 @@ function BrokerApp ({ basePath, className }: Props): React.ReactElement { items={itemsRef.current} /> ); diff --git a/packages/react-components/src/UsageBar.tsx b/packages/react-components/src/UsageBar.tsx index db84ee194e3a..adb10c94c7e7 100644 --- a/packages/react-components/src/UsageBar.tsx +++ b/packages/react-components/src/UsageBar.tsx @@ -1,61 +1,103 @@ -import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; +// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// SPDX-License-Identifier: Apache-2.0 + import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; +import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import React from 'react'; interface Props { - info?: CoreWorkloadInfo[] | CoreWorkloadInfo; - apiEndpoint?: LinkOption | null; + info?: CoreWorkloadInfo[] | CoreWorkloadInfo; + apiEndpoint?: LinkOption | null; } -function UsageBar({ info, apiEndpoint }: Props): React.ReactElement { - const color = apiEndpoint?.ui.color ? apiEndpoint?.ui.color : '#f19135'; - const radius = 50; - const strokeWidth = 15; - const circumference = 2 * Math.PI * radius; +function UsageBar ({ apiEndpoint, info }: Props): React.ReactElement { + const color = apiEndpoint?.ui.color ? apiEndpoint?.ui.color : '#f19135'; + const radius = 50; + const strokeWidth = 15; + const circumference = 2 * Math.PI * radius; + + let sanitized: CoreWorkloadInfo[] = []; - let sanitized: CoreWorkloadInfo[] = []; + if (Array.isArray(info)) { + sanitized = info; + } else if (info) { + sanitized.push(info); + } - if (Array.isArray(info)) { - sanitized = info; - } else if (info) { - sanitized.push(info); + let tasks = 0; + let idles = 0; + let pools = 0; + + sanitized?.forEach((v) => { + if (v.info[0].assignment.isTask) { + ++tasks; + } else if (v.info[0].assignment.isPool) { + ++pools; + } else { + ++idles; } + }); + + const total = tasks + idles + pools; + const taskPerc = (tasks / total) * 100; + const poolPerc = (pools / total) * 100; + + const taskOffset = (taskPerc / 100) * circumference; + const poolOffset = taskOffset + (poolPerc / 100) * circumference; + + return ( +
+ + + + + + +
- let tasks = 0; - let idles = 0; - let pools = 0; - - sanitized?.forEach((v) => { - if (v.info[0].assignment.isTask) { - ++tasks; - } else if (v.info[0].assignment.isPool) { - ++pools; - } else { - ++idles; - } - }); - - let total = tasks + idles + pools; - let taskPerc = (tasks / total) * 100; - let poolPerc = (pools / total) * 100; - - const taskOffset = (taskPerc / 100) * circumference; - const poolOffset = taskOffset + (poolPerc / 100) * circumference; - - return ( -
- - - - - - -
- - - ) + ); } export default React.memo(UsageBar); diff --git a/packages/react-hooks/src/types.ts b/packages/react-hooks/src/types.ts index a9eea48eaa2d..34868f258406 100644 --- a/packages/react-hooks/src/types.ts +++ b/packages/react-hooks/src/types.ts @@ -8,7 +8,7 @@ import type { DeriveAccountFlags, DeriveAccountRegistration } from '@polkadot/ap import type { DisplayedJudgement } from '@polkadot/react-components/types'; import type { Option, u32, u128, Vec } from '@polkadot/types'; import type { AccountId, BlockNumber, Call, Hash, SessionIndex, ValidatorPrefs } from '@polkadot/types/interfaces'; -import type { PalletPreimageRequestStatus, PalletStakingRewardDestination, PalletStakingStakingLedger, SpStakingExposurePage, SpStakingPagedExposureMetadata } from '@polkadot/types/lookup'; +import type { PalletBrokerScheduleItem, PalletPreimageRequestStatus, PalletStakingRewardDestination, PalletStakingStakingLedger, PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor, SpStakingExposurePage, SpStakingPagedExposureMetadata } from '@polkadot/types/lookup'; import type { ICompact, IExtrinsic, INumber, Registry } from '@polkadot/types/types'; import type { KeyringJson$Meta } from '@polkadot/ui-keyring/types'; import type { BN } from '@polkadot/util'; @@ -19,7 +19,7 @@ export type CallParam = any; export type CallParams = [] | CallParam[]; -export interface CallOptions { +export interface CallOptions { defaultValue?: T; // eslint-disable-next-line @typescript-eslint/no-explicit-any paramMap?: (params: any) => CallParams; diff --git a/packages/react-query/src/BrokerStatus.tsx b/packages/react-query/src/BrokerStatus.tsx index 81c4974359b1..93bb71e05b3c 100644 --- a/packages/react-query/src/BrokerStatus.tsx +++ b/packages/react-query/src/BrokerStatus.tsx @@ -18,8 +18,6 @@ function BrokerStatus ({ children, className = '', query }: Props): React.ReactE const status = useCall(api.query.broker?.status); const strStatus = status === undefined ? '' : status.toJSON()[query]; - console.log(strStatus); - return (
{strStatus?.toString()} From b6477500eddfc4ab6d43b62c04dec3145b8b42eb Mon Sep 17 00:00:00 2001 From: bee344 Date: Thu, 30 May 2024 08:29:01 -0300 Subject: [PATCH 27/56] fixed headers --- packages/page-broker/src/Overview/CoreTable.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/page-broker/src/Overview/CoreTable.tsx b/packages/page-broker/src/Overview/CoreTable.tsx index 0956801e723c..c3e9963faa3b 100644 --- a/packages/page-broker/src/Overview/CoreTable.tsx +++ b/packages/page-broker/src/Overview/CoreTable.tsx @@ -21,7 +21,9 @@ function CoreTable ({ core, workload, workplan }: Props): React.ReactElement([ - [t('core')] + [t('core')], + [], + [] ]); return ( From a56d3a3df2e1a598173a235da1d23ffc555497cb Mon Sep 17 00:00:00 2001 From: bee344 Date: Thu, 30 May 2024 11:33:42 -0300 Subject: [PATCH 28/56] fixed filter --- .../page-broker/src/Overview/CoresTables.tsx | 42 +++++++------ packages/page-broker/src/Overview/index.tsx | 59 ++----------------- packages/page-broker/src/index.tsx | 1 - 3 files changed, 26 insertions(+), 76 deletions(-) diff --git a/packages/page-broker/src/Overview/CoresTables.tsx b/packages/page-broker/src/Overview/CoresTables.tsx index ab4b31197db8..2da6c5627a77 100644 --- a/packages/page-broker/src/Overview/CoresTables.tsx +++ b/packages/page-broker/src/Overview/CoresTables.tsx @@ -1,34 +1,22 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; -import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; import React from 'react'; -import { useCall } from '@polkadot/react-hooks'; - import CoreTable from './CoreTable.js'; interface Props { - api?: ApiPromise; + cores?: number; workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo; workplanInfos?: CoreWorkplanInfo[] | CoreWorkplanInfo; } -function CoresTable ({ api, workloadInfos, workplanInfos }: Props): React.ReactElement { - const query = useCall(api?.query.broker?.status); - const cores = query ? query.toJSON().coreCount : 0; +function CoresTable({ cores, workloadInfos, workplanInfos }: Props): React.ReactElement { - console.log('core', cores); const coreArr = []; - for (let core = 0; core < Number(cores); core++) { - console.log('core', core); - coreArr.push(core); - } - let sanitizedWorkloadInfos: CoreWorkloadInfo[] = []; let sanitizedWorkplanInfos: CoreWorkplanInfo[] = []; @@ -47,6 +35,16 @@ function CoresTable ({ api, workloadInfos, workplanInfos }: Props): React.ReactE sanitizedWorkloadInfos?.sort((a, b) => a.core - b.core); sanitizedWorkplanInfos?.sort((a, b) => a.core - b.core); + if (cores === -1) { + for (let core = 0; core < sanitizedWorkloadInfos?.length; core++) { + console.log('core', core); + coreArr.push(core); + } + } else if (cores) { + coreArr.push(cores) + } + + const list: [number, CoreWorkloadInfo[], CoreWorkplanInfo[]][] = []; coreArr.forEach((c) => { @@ -57,14 +55,14 @@ function CoresTable ({ api, workloadInfos, workplanInfos }: Props): React.ReactE <> { list.map((c) => - ( - - ) + ( + + ) ) } diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index 3f9a1ed8a1ea..5619fe1afcda 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -1,7 +1,6 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { ApiPromise } from '@polkadot/api'; import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; import type { CoreDescription, CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; @@ -15,38 +14,16 @@ import Summary from './Summary.js'; interface Props { className?: string; - api?: ApiPromise workloadInfos?: CoreWorkloadInfo[]; workplanInfos?: CoreWorkplanInfo[]; coreInfos?: CoreDescription[]; apiEndpoint?: LinkOption | null; } -function uniqByForEach (array: CoreWorkplanInfo[] | undefined) { - const workplanCores: number[] = []; - const workplanTS: number[] = []; - - if (array) { - array.forEach((item) => { - if (!workplanCores.includes(item.core)) { - workplanCores.push(item.core); - } - - if (!workplanTS.includes(item.timeslice)) { - workplanTS.push(item.timeslice); - } - }); - - return { workplanCores, workplanTS }; - } else { - return { workplanCores: [], workplanTS: [] }; - } -} - -function Overview ({ api, apiEndpoint, className, workloadInfos, workplanInfos }: Props): React.ReactElement { +function Overview ({ apiEndpoint, className, workloadInfos, workplanInfos }: Props): React.ReactElement { const { t } = useTranslation(); const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); - const [workplanCoreSelected, setWorkplanCoreSelected] = useState(-1); + let workplanCoreSelected = -1; const [coreArr, setCoreArr] = useState([]); useEffect(() => { @@ -56,11 +33,6 @@ function Overview ({ api, apiEndpoint, className, workloadInfos, workplanInfos } setCoreArr(newCoreArr); }, [workloadInfos]); - const { workplanCores, workplanTS } = uniqByForEach(workplanInfos); - - workplanCores?.sort((a, b) => a - b); - workplanTS?.sort((a, b) => a - b); - const workloadCoreOpts = useMemo( () => [{ text: t('All active/available cores'), value: -1 }].concat( coreArr @@ -76,22 +48,10 @@ function Overview ({ api, apiEndpoint, className, workloadInfos, workplanInfos } ); const filteredWLC = useMemo( () => { + workplanCoreSelected = workloadCoreSelected return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected); }, - [workloadInfos, workloadCoreSelected] - ); - const workplanCoreOpts = useMemo( - () => [{ text: t('All scehduled cores'), value: -1 }].concat( - workplanCores - .map((c) => - ({ - text: `Core ${c}`, - value: c - }) - ) - .filter((v): v is { text: string, value: number } => !!v.text) - ), - [workplanCores, t] + [workloadInfos, workloadCoreSelected, workplanCoreSelected] ); const filteredWorkplan = useMemo( @@ -115,21 +75,14 @@ function Overview ({ api, apiEndpoint, className, workloadInfos, workplanInfos } - diff --git a/packages/page-broker/src/index.tsx b/packages/page-broker/src/index.tsx index ed0bb5cc81dd..f9de69ef0cfd 100644 --- a/packages/page-broker/src/index.tsx +++ b/packages/page-broker/src/index.tsx @@ -40,7 +40,6 @@ function BrokerApp ({ basePath, className }: Props): React.ReactElement { items={itemsRef.current} /> Date: Thu, 30 May 2024 13:32:47 -0300 Subject: [PATCH 29/56] updated coretime summary --- .../page-broker/src/Overview/CoreTable.tsx | 1 + .../page-broker/src/Overview/CoresTables.tsx | 25 ++++--- .../page-broker/src/Overview/Workplans.tsx | 14 ++-- packages/page-broker/src/Overview/index.tsx | 13 ++-- .../page-coretime/src/Overview/Summary.tsx | 16 +++-- packages/page-coretime/src/Overview/index.tsx | 3 +- packages/react-components/src/UsageBar.tsx | 66 ++++++++++++++----- 7 files changed, 87 insertions(+), 51 deletions(-) diff --git a/packages/page-broker/src/Overview/CoreTable.tsx b/packages/page-broker/src/Overview/CoreTable.tsx index c3e9963faa3b..0a4963cbe5c2 100644 --- a/packages/page-broker/src/Overview/CoreTable.tsx +++ b/packages/page-broker/src/Overview/CoreTable.tsx @@ -25,6 +25,7 @@ function CoreTable ({ core, workload, workplan }: Props): React.ReactElement { - +function CoresTable ({ cores, workloadInfos, workplanInfos }: Props): React.ReactElement { const coreArr = []; let sanitizedWorkloadInfos: CoreWorkloadInfo[] = []; @@ -37,14 +36,12 @@ function CoresTable({ cores, workloadInfos, workplanInfos }: Props): React.React if (cores === -1) { for (let core = 0; core < sanitizedWorkloadInfos?.length; core++) { - console.log('core', core); coreArr.push(core); } - } else if (cores) { - coreArr.push(cores) + } else if (cores !== undefined) { + coreArr.push(cores); } - const list: [number, CoreWorkloadInfo[], CoreWorkplanInfo[]][] = []; coreArr.forEach((c) => { @@ -55,14 +52,14 @@ function CoresTable({ cores, workloadInfos, workplanInfos }: Props): React.React <> { list.map((c) => - ( - - ) + ( + + ) ) } diff --git a/packages/page-broker/src/Overview/Workplans.tsx b/packages/page-broker/src/Overview/Workplans.tsx index f98d7ef95a79..39daf8a05e23 100644 --- a/packages/page-broker/src/Overview/Workplans.tsx +++ b/packages/page-broker/src/Overview/Workplans.tsx @@ -12,7 +12,7 @@ interface Props { workplanInfos?: CoreWorkplanInfo[] | CoreWorkplanInfo; } -function Workplans ({ workplanInfos }: Props): React.ReactElement { +function Workplans({ workplanInfos }: Props): React.ReactElement { let sanitized: CoreWorkplanInfo[] = []; if (Array.isArray(workplanInfos)) { @@ -21,16 +21,18 @@ function Workplans ({ workplanInfos }: Props): React.ReactElement { sanitized.push(workplanInfos); } + console.log('core', sanitized) + sanitized?.sort((a, b) => a.core - b.core); return ( <> {sanitized?.map((workplanInfo) => ( - - ))} + + ))} ); } diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index 5619fe1afcda..771fcb488140 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -20,10 +20,9 @@ interface Props { apiEndpoint?: LinkOption | null; } -function Overview ({ apiEndpoint, className, workloadInfos, workplanInfos }: Props): React.ReactElement { +function Overview({ apiEndpoint, className, workloadInfos, workplanInfos }: Props): React.ReactElement { const { t } = useTranslation(); const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); - let workplanCoreSelected = -1; const [coreArr, setCoreArr] = useState([]); useEffect(() => { @@ -48,24 +47,22 @@ function Overview ({ apiEndpoint, className, workloadInfos, workplanInfos }: Pro ); const filteredWLC = useMemo( () => { - workplanCoreSelected = workloadCoreSelected return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected); }, - [workloadInfos, workloadCoreSelected, workplanCoreSelected] + [workloadInfos, workloadCoreSelected] ); const filteredWorkplan = useMemo( () => { - if (workplanCoreSelected === -1) { + if (workloadCoreSelected === -1) { return workplanInfos; } else { - return workplanInfos?.filter(({ core }) => core === workplanCoreSelected); + return workplanInfos?.filter(({ core }) => core === workloadCoreSelected); } } , - [workplanInfos, workplanCoreSelected] + [workplanInfos, workloadCoreSelected] ); - return (
{ const { t } = useTranslation(); - const { api } = useApi(); + const { api, apiEndpoint } = useApi(); const queueStatus: OnDemandQueueStatus | undefined = useQueueStatus(); return ( @@ -40,6 +44,10 @@ function Summary (): React.ReactElement { )} +
); diff --git a/packages/page-coretime/src/Overview/index.tsx b/packages/page-coretime/src/Overview/index.tsx index 046ea5a0e703..55b91f17a36f 100644 --- a/packages/page-coretime/src/Overview/index.tsx +++ b/packages/page-coretime/src/Overview/index.tsx @@ -18,7 +18,8 @@ interface Props { function Overview ({ className, coreInfos }: Props): React.ReactElement { return (
- + diff --git a/packages/react-components/src/UsageBar.tsx b/packages/react-components/src/UsageBar.tsx index adb10c94c7e7..10b8b7237c46 100644 --- a/packages/react-components/src/UsageBar.tsx +++ b/packages/react-components/src/UsageBar.tsx @@ -2,42 +2,72 @@ // SPDX-License-Identifier: Apache-2.0 import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; -import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; +import type { CoreWorkloadInfo, CoreDescription } from '@polkadot/react-hooks/types'; +import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; import React from 'react'; interface Props { info?: CoreWorkloadInfo[] | CoreWorkloadInfo; apiEndpoint?: LinkOption | null; + coreDescriptors?: CoreDescription[]; } -function UsageBar ({ apiEndpoint, info }: Props): React.ReactElement { +function UsageBar({ apiEndpoint, info, coreDescriptors }: Props): React.ReactElement { const color = apiEndpoint?.ui.color ? apiEndpoint?.ui.color : '#f19135'; const radius = 50; const strokeWidth = 15; const circumference = 2 * Math.PI * radius; - let sanitized: CoreWorkloadInfo[] = []; - - if (Array.isArray(info)) { - sanitized = info; - } else if (info) { - sanitized.push(info); - } - let tasks = 0; let idles = 0; let pools = 0; - sanitized?.forEach((v) => { - if (v.info[0].assignment.isTask) { - ++tasks; - } else if (v.info[0].assignment.isPool) { - ++pools; - } else { - ++idles; + if (coreDescriptors) { + coreDescriptors.map((description) => { + let sanitized: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[] = []; + if (Array.isArray(description.info)) { + sanitized = description.info; + } else if (description.info) { + sanitized.push(description.info); + } + console.log(description.info) + sanitized.map((i) => { + let info = i.currentWork.unwrapOr(undefined); + if (info) { + info.assignments.forEach((_, index) => { + if (info.assignments[index][0].isIdle) { + idles++ + } else if (info.assignments[index][0].isPool) { + pools++ + } else { + tasks++ + } + }) + } + }) + }) + + } else { + + let sanitized: CoreWorkloadInfo[] = []; + + if (Array.isArray(info)) { + sanitized = info; + } else if (info) { + sanitized.push(info); } - }); + + sanitized?.forEach((v) => { + if (v.info[0].assignment.isTask) { + ++tasks; + } else if (v.info[0].assignment.isPool) { + ++pools; + } else { + ++idles; + } + }); + } const total = tasks + idles + pools; const taskPerc = (tasks / total) * 100; From 625751e55732d058a85df26bb904f2388f13b707 Mon Sep 17 00:00:00 2001 From: bee344 Date: Thu, 30 May 2024 14:51:19 -0300 Subject: [PATCH 30/56] updated relay tables --- .../page-broker/src/Overview/CoreTable.tsx | 1 - .../page-broker/src/Overview/Workplans.tsx | 14 +++++------ packages/page-broker/src/Overview/index.tsx | 3 ++- .../src/Overview/CoreDescriptor.tsx | 2 +- .../page-coretime/src/Overview/Summary.tsx | 6 ++--- packages/page-coretime/src/Overview/index.tsx | 15 ++++++----- packages/react-components/src/UsageBar.tsx | 25 ++++++++++--------- 7 files changed, 32 insertions(+), 34 deletions(-) diff --git a/packages/page-broker/src/Overview/CoreTable.tsx b/packages/page-broker/src/Overview/CoreTable.tsx index 0a4963cbe5c2..c3e9963faa3b 100644 --- a/packages/page-broker/src/Overview/CoreTable.tsx +++ b/packages/page-broker/src/Overview/CoreTable.tsx @@ -25,7 +25,6 @@ function CoreTable ({ core, workload, workplan }: Props): React.ReactElement { +function Workplans ({ workplanInfos }: Props): React.ReactElement { let sanitized: CoreWorkplanInfo[] = []; if (Array.isArray(workplanInfos)) { @@ -21,18 +21,16 @@ function Workplans({ workplanInfos }: Props): React.ReactElement { sanitized.push(workplanInfos); } - console.log('core', sanitized) - sanitized?.sort((a, b) => a.core - b.core); return ( <> {sanitized?.map((workplanInfo) => ( - - ))} + + ))} ); } diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index 771fcb488140..3925473eecaa 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -20,7 +20,7 @@ interface Props { apiEndpoint?: LinkOption | null; } -function Overview({ apiEndpoint, className, workloadInfos, workplanInfos }: Props): React.ReactElement { +function Overview ({ apiEndpoint, className, workloadInfos, workplanInfos }: Props): React.ReactElement { const { t } = useTranslation(); const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); const [coreArr, setCoreArr] = useState([]); @@ -63,6 +63,7 @@ function Overview({ apiEndpoint, className, workloadInfos, workplanInfos }: Prop , [workplanInfos, workloadCoreSelected] ); + return (
{ +function Summary ({ coreDscriptors }: Props): React.ReactElement { const { t } = useTranslation(); const { api, apiEndpoint } = useApi(); const queueStatus: OnDemandQueueStatus | undefined = useQueueStatus(); @@ -29,7 +29,7 @@ function Summary({ coreDscriptors }: Props): React.ReactElement { - + { return (
- - - - - + coreDscriptors={coreInfos} + >
+ { + coreInfos?.map((v) => ( + + )) + }
); } diff --git a/packages/react-components/src/UsageBar.tsx b/packages/react-components/src/UsageBar.tsx index 10b8b7237c46..b33c38e8eaec 100644 --- a/packages/react-components/src/UsageBar.tsx +++ b/packages/react-components/src/UsageBar.tsx @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; -import type { CoreWorkloadInfo, CoreDescription } from '@polkadot/react-hooks/types'; +import type { CoreDescription, CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; import React from 'react'; @@ -13,7 +13,7 @@ interface Props { coreDescriptors?: CoreDescription[]; } -function UsageBar({ apiEndpoint, info, coreDescriptors }: Props): React.ReactElement { +function UsageBar ({ apiEndpoint, coreDescriptors, info }: Props): React.ReactElement { const color = apiEndpoint?.ui.color ? apiEndpoint?.ui.color : '#f19135'; const radius = 50; const strokeWidth = 15; @@ -26,30 +26,31 @@ function UsageBar({ apiEndpoint, info, coreDescriptors }: Props): React.ReactEle if (coreDescriptors) { coreDescriptors.map((description) => { let sanitized: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[] = []; + if (Array.isArray(description.info)) { sanitized = description.info; } else if (description.info) { sanitized.push(description.info); } - console.log(description.info) + + console.log(description.info); sanitized.map((i) => { - let info = i.currentWork.unwrapOr(undefined); + const info = i.currentWork.unwrapOr(undefined); + if (info) { info.assignments.forEach((_, index) => { if (info.assignments[index][0].isIdle) { - idles++ + idles++; } else if (info.assignments[index][0].isPool) { - pools++ + pools++; } else { - tasks++ + tasks++; } - }) + }); } - }) - }) - + }); + }); } else { - let sanitized: CoreWorkloadInfo[] = []; if (Array.isArray(info)) { From f18502d9bcda4ebebfaa809c80b01d607030613f Mon Sep 17 00:00:00 2001 From: bee344 Date: Wed, 5 Jun 2024 11:50:05 -0300 Subject: [PATCH 31/56] fixed bulk price display --- .../page-broker/src/Overview/CoreTable.tsx | 22 +++++-- .../page-broker/src/Overview/CoresTables.tsx | 7 ++- packages/page-broker/src/Overview/Pools.tsx | 31 ---------- .../page-broker/src/Overview/RegionLength.tsx | 28 +++++++++ .../page-broker/src/Overview/RenewalPrice.tsx | 36 ++++++++++++ packages/page-broker/src/Overview/Summary.tsx | 21 +++++-- .../page-broker/src/Overview/Timeslice.tsx | 5 -- .../src/Overview/TimeslicePeriod.tsx | 27 +++++++++ .../page-broker/src/Overview/Workload.tsx | 20 ++++++- .../page-broker/src/Overview/Workloads.tsx | 7 ++- .../page-broker/src/Overview/Workplan.tsx | 14 +++-- .../page-broker/src/Overview/Workplans.tsx | 5 +- packages/page-broker/src/Overview/index.tsx | 13 ++++- packages/page-broker/src/index.tsx | 2 + .../src/Overview/CoreDescriptor.tsx | 2 +- packages/page-coretime/src/Overview/index.tsx | 5 +- packages/react-components/src/UsageBar.tsx | 29 +++++++--- packages/react-hooks/src/index.ts | 3 + packages/react-hooks/src/useCurrentPrice.tsx | 31 ++++++++++ packages/react-hooks/src/useRegions.ts | 57 +++++++++++++++++++ packages/react-hooks/src/useRenewalBump.ts | 31 ++++++++++ packages/react-query/src/FormatBalance.tsx | 25 +++++--- 22 files changed, 346 insertions(+), 75 deletions(-) delete mode 100644 packages/page-broker/src/Overview/Pools.tsx create mode 100644 packages/page-broker/src/Overview/RegionLength.tsx create mode 100644 packages/page-broker/src/Overview/RenewalPrice.tsx create mode 100644 packages/page-broker/src/Overview/TimeslicePeriod.tsx create mode 100644 packages/react-hooks/src/useCurrentPrice.tsx create mode 100644 packages/react-hooks/src/useRegions.ts create mode 100644 packages/react-hooks/src/useRenewalBump.ts diff --git a/packages/page-broker/src/Overview/CoreTable.tsx b/packages/page-broker/src/Overview/CoreTable.tsx index c3e9963faa3b..1fd1a5e377d4 100644 --- a/packages/page-broker/src/Overview/CoreTable.tsx +++ b/packages/page-broker/src/Overview/CoreTable.tsx @@ -1,6 +1,7 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; import React, { useRef } from 'react'; @@ -12,18 +13,20 @@ import Workloads from './Workloads.js'; import Workplans from './Workplans.js'; interface Props { + api: ApiPromise; core?: number; workload?: CoreWorkloadInfo[], - workplan?: CoreWorkplanInfo[] + workplan?: CoreWorkplanInfo[], + timeslice: number, } -function CoreTable ({ core, workload, workplan }: Props): React.ReactElement { +function CoreTable ({ api, core, timeslice, workload, workplan }: Props): React.ReactElement { const { t } = useTranslation(); const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ [t('core')], - [], - [] + ['workload'], + ['workplan'] ]); return ( @@ -34,13 +37,20 @@ function CoreTable ({ core, workload, workplan }: Props): React.ReactElement - + - + diff --git a/packages/page-broker/src/Overview/CoresTables.tsx b/packages/page-broker/src/Overview/CoresTables.tsx index 913725384855..678a2b21f151 100644 --- a/packages/page-broker/src/Overview/CoresTables.tsx +++ b/packages/page-broker/src/Overview/CoresTables.tsx @@ -1,6 +1,7 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; import React from 'react'; @@ -8,12 +9,14 @@ import React from 'react'; import CoreTable from './CoreTable.js'; interface Props { + api: ApiPromise; cores?: number; workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo; workplanInfos?: CoreWorkplanInfo[] | CoreWorkplanInfo; + timeslice: number; } -function CoresTable ({ cores, workloadInfos, workplanInfos }: Props): React.ReactElement { +function CoresTable ({ api, cores, timeslice, workloadInfos, workplanInfos }: Props): React.ReactElement { const coreArr = []; let sanitizedWorkloadInfos: CoreWorkloadInfo[] = []; @@ -54,8 +57,10 @@ function CoresTable ({ cores, workloadInfos, workplanInfos }: Props): React.Reac list.map((c) => ( diff --git a/packages/page-broker/src/Overview/Pools.tsx b/packages/page-broker/src/Overview/Pools.tsx deleted file mode 100644 index b086acb49fca..000000000000 --- a/packages/page-broker/src/Overview/Pools.tsx +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2017-2024 @polkadot/app-broker authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -// [object Object] -// SPDX-License-Identifier: Apache-2.0 - -import type { u32 } from '@polkadot/types'; -import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; - -import React from 'react'; - -import { PoolSize } from '@polkadot/react-query'; - -interface Props { - children?: React.ReactNode; - className?: string; - timeslice?: PalletBrokerStatusRecord | null; - lastTimeslice?: u32 | null; -} - -function Pools ({ children, className }: Props): React.ReactElement | null { - return ( - - {children} - - ); -} - -export default React.memo(Pools); diff --git a/packages/page-broker/src/Overview/RegionLength.tsx b/packages/page-broker/src/Overview/RegionLength.tsx new file mode 100644 index 000000000000..130010659b87 --- /dev/null +++ b/packages/page-broker/src/Overview/RegionLength.tsx @@ -0,0 +1,28 @@ +// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { PalletBrokerConfigRecord } from '@polkadot/types/lookup'; + +import React from 'react'; + +import { useApi, useCall } from '@polkadot/react-hooks'; + +interface Props { + className?: string; + children?: React.ReactNode; +} + +function RegionLength ({ children, className }: Props): React.ReactElement | null { + const { api } = useApi(); + const config = useCall(api.query.broker?.configuration); + const length = config?.toJSON().regionLength; + + return ( +
+ {length?.toString()} + {children} +
+ ); +} + +export default React.memo(RegionLength); diff --git a/packages/page-broker/src/Overview/RenewalPrice.tsx b/packages/page-broker/src/Overview/RenewalPrice.tsx new file mode 100644 index 000000000000..09db6e96c061 --- /dev/null +++ b/packages/page-broker/src/Overview/RenewalPrice.tsx @@ -0,0 +1,36 @@ +// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; + +import { formatBalance } from '@polkadot/util'; + +interface Props { + className?: string; + children?: React.ReactNode; + renewalBump?: string; + currentPrice?: string; +} + +function RenewalPrice({ currentPrice, renewalBump }: Props): React.ReactElement | null { + const percentage = renewalBump === undefined ? 0 : Number.parseInt(renewalBump) / 1000000000; + + console.log(percentage); + + const price = currentPrice === undefined ? 0 : Number.parseInt(currentPrice); + + console.log(currentPrice); + + const renewalPrice = price * percentage + price; + + console.log(renewalPrice); + + return ( +
+ {formatBalance(renewalPrice)} +
+ + ); +} + +export default React.memo(RenewalPrice); diff --git a/packages/page-broker/src/Overview/Summary.tsx b/packages/page-broker/src/Overview/Summary.tsx index 9c3324530f5e..6ed70910badd 100644 --- a/packages/page-broker/src/Overview/Summary.tsx +++ b/packages/page-broker/src/Overview/Summary.tsx @@ -7,12 +7,14 @@ import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import React from 'react'; import { CardSummary, SummaryBox, UsageBar } from '@polkadot/react-components'; -import { useApi } from '@polkadot/react-hooks'; +import { useApi, useCurrentPrice, useRenewalBump } from '@polkadot/react-hooks'; import { useTranslation } from '../translate.js'; import Cores from './Cores.js'; -import Pools from './Pools.js'; +import RegionLength from './RegionLength.js'; +import RenewalPrice from './RenewalPrice.js'; import Timeslice from './Timeslice.js'; +import TimeslicePeriod from './TimeslicePeriod.js'; interface Props { apiEndpoint?: LinkOption | null; @@ -22,6 +24,8 @@ interface Props { function Summary ({ apiEndpoint, workloadInfos }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); + const renewalBump = useRenewalBump(); + const currentPrice = useCurrentPrice(); return ( @@ -34,8 +38,17 @@ function Summary ({ apiEndpoint, workloadInfos }: Props): React.ReactElement { - - + + + + + + + + diff --git a/packages/page-broker/src/Overview/Timeslice.tsx b/packages/page-broker/src/Overview/Timeslice.tsx index d00bff69e01c..a8f3546d3bee 100644 --- a/packages/page-broker/src/Overview/Timeslice.tsx +++ b/packages/page-broker/src/Overview/Timeslice.tsx @@ -1,9 +1,6 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { u32 } from '@polkadot/types'; -import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; - import React from 'react'; import { BrokerStatus } from '@polkadot/react-query'; @@ -11,8 +8,6 @@ import { BrokerStatus } from '@polkadot/react-query'; interface Props { children?: React.ReactNode; className?: string; - timeslice?: PalletBrokerStatusRecord | null; - lastTimeslice?: u32 | null; } function Timeslice ({ children, className }: Props): React.ReactElement | null { diff --git a/packages/page-broker/src/Overview/TimeslicePeriod.tsx b/packages/page-broker/src/Overview/TimeslicePeriod.tsx new file mode 100644 index 000000000000..2581778ae1a4 --- /dev/null +++ b/packages/page-broker/src/Overview/TimeslicePeriod.tsx @@ -0,0 +1,27 @@ +// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { u32 } from '@polkadot/types'; + +import React from 'react'; + +import { useApi } from '@polkadot/react-hooks'; + +interface Props { + className?: string; + children?: React.ReactNode; +} + +function BrokerId ({ children, className }: Props): React.ReactElement | null { + const { api } = useApi(); + const period = api.consts.broker?.timeslicePeriod as u32; + + return ( +
+ {period?.toString()} + {children} +
+ ); +} + +export default React.memo(BrokerId); diff --git a/packages/page-broker/src/Overview/Workload.tsx b/packages/page-broker/src/Overview/Workload.tsx index f0e6391bbdf3..4cfbb26aa033 100644 --- a/packages/page-broker/src/Overview/Workload.tsx +++ b/packages/page-broker/src/Overview/Workload.tsx @@ -1,19 +1,23 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import React from 'react'; import { Columar } from '@polkadot/react-components'; +import { useRegions } from '@polkadot/react-hooks'; import { hexToBin } from '../utils.js'; interface Props { + api: ApiPromise; value: CoreWorkloadInfo; + timeslice: number, } -function Workload ({ value: { info } }: Props): React.ReactElement { +function Workload ({ api, timeslice, value: { core, info } }: Props): React.ReactElement { const trimmedHex: string = info[0].mask.toHex().slice(2); const arr: string[] = trimmedHex.split(''); @@ -23,6 +27,10 @@ function Workload ({ value: { info } }: Props): React.ReactElement { hexToBin(bit).split('').forEach((v) => buffArr.push(v)); }); + const regionInfo = useRegions(api); + + regionInfo?.filter((v) => v.core === core && v.start >= timeslice && v.mask === info[0].mask.toHex()); + buffArr.filter((v) => v === '1'); const sanitizedAssignment = info[0].assignment.isTask ? info[0].assignment.asTask : info[0].assignment; @@ -37,6 +45,16 @@ function Workload ({ value: { info } }: Props): React.ReactElement {
{'Mask'}
{`${buffArr.length / 80 * 100}%`}
+ +
{'Lease start'}
+ {timeslice?.toString()} +
+ +
{'Lease end'}
+ + {regionInfo?.[0].end.toString()} + +
); diff --git a/packages/page-broker/src/Overview/Workloads.tsx b/packages/page-broker/src/Overview/Workloads.tsx index 87488c9d9bfa..2dd35397db7d 100644 --- a/packages/page-broker/src/Overview/Workloads.tsx +++ b/packages/page-broker/src/Overview/Workloads.tsx @@ -1,6 +1,7 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import React from 'react'; @@ -8,15 +9,19 @@ import React from 'react'; import Workload from './Workload.js'; interface Props { + api: ApiPromise; workloadInfos?: CoreWorkloadInfo[]; + timeslice: number; } -function Workloads ({ workloadInfos }: Props): React.ReactElement { +function Workloads ({ api, timeslice, workloadInfos }: Props): React.ReactElement { return ( <> {workloadInfos?.map((v) => ( ))} diff --git a/packages/page-broker/src/Overview/Workplan.tsx b/packages/page-broker/src/Overview/Workplan.tsx index 4662bacb6868..b956d74d1e3d 100644 --- a/packages/page-broker/src/Overview/Workplan.tsx +++ b/packages/page-broker/src/Overview/Workplan.tsx @@ -1,20 +1,23 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; import React from 'react'; import { Columar } from '@polkadot/react-components'; +import { useRegions } from '@polkadot/react-hooks'; import { hexToBin } from '../utils.js'; interface Props { className?: string; + api: ApiPromise; value: CoreWorkplanInfo; } -function Workload ({ value: { info, timeslice } }: Props): React.ReactElement { +function Workload ({ api, value: { core, info, timeslice } }: Props): React.ReactElement { const trimmedHex: string = info[0].mask.toHex().slice(2); const arr: string[] = trimmedHex.split(''); @@ -28,6 +31,10 @@ function Workload ({ value: { info, timeslice } }: Props): React.ReactElement v.core === core && v.start >= timeslice); + return ( @@ -40,11 +47,6 @@ function Workload ({ value: { info, timeslice } }: Props): React.ReactElement{'Mask'} {`${buffArr.length / 80 * 100}%`} - - -
{'Timeslice'}
- {timeslice.toString()} -
); } diff --git a/packages/page-broker/src/Overview/Workplans.tsx b/packages/page-broker/src/Overview/Workplans.tsx index f98d7ef95a79..dda22ec5cef2 100644 --- a/packages/page-broker/src/Overview/Workplans.tsx +++ b/packages/page-broker/src/Overview/Workplans.tsx @@ -1,6 +1,7 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; import React from 'react'; @@ -9,10 +10,11 @@ import Workplan from './Workplan.js'; interface Props { className?: string; + api: ApiPromise; workplanInfos?: CoreWorkplanInfo[] | CoreWorkplanInfo; } -function Workplans ({ workplanInfos }: Props): React.ReactElement { +function Workplans ({ api, workplanInfos }: Props): React.ReactElement { let sanitized: CoreWorkplanInfo[] = []; if (Array.isArray(workplanInfos)) { @@ -27,6 +29,7 @@ function Workplans ({ workplanInfos }: Props): React.ReactElement { <> {sanitized?.map((workplanInfo) => ( diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index 3925473eecaa..28bd4f6dfe84 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -1,12 +1,15 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ApiPromise } from '@polkadot/api'; import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; import type { CoreDescription, CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; +import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; import React, { useEffect, useMemo, useState } from 'react'; import { Button, Dropdown } from '@polkadot/react-components'; +import { useCall } from '@polkadot/react-hooks'; import { useTranslation } from '../translate.js'; import CoresTable from './CoresTables.js'; @@ -18,9 +21,11 @@ interface Props { workplanInfos?: CoreWorkplanInfo[]; coreInfos?: CoreDescription[]; apiEndpoint?: LinkOption | null; + api: ApiPromise; + isReady: boolean; } -function Overview ({ apiEndpoint, className, workloadInfos, workplanInfos }: Props): React.ReactElement { +function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workplanInfos }: Props): React.ReactElement { const { t } = useTranslation(); const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); const [coreArr, setCoreArr] = useState([]); @@ -64,6 +69,10 @@ function Overview ({ apiEndpoint, className, workloadInfos, workplanInfos }: Pro [workplanInfos, workloadCoreSelected] ); + const status = useCall(isReady && api.query.broker?.status); + const timeslice = status?.toHuman().lastCommittedTimeslice?.toString(); + const timesliceAsString = timeslice === undefined ? '' : timeslice.toString().split(',').join(''); + return (
diff --git a/packages/page-broker/src/index.tsx b/packages/page-broker/src/index.tsx index f9de69ef0cfd..74e4aa32cd78 100644 --- a/packages/page-broker/src/index.tsx +++ b/packages/page-broker/src/index.tsx @@ -40,7 +40,9 @@ function BrokerApp ({ basePath, className }: Props): React.ReactElement { items={itemsRef.current} /> diff --git a/packages/page-coretime/src/Overview/CoreDescriptor.tsx b/packages/page-coretime/src/Overview/CoreDescriptor.tsx index 8421e1d8343d..4ce33fca0fd7 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptor.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptor.tsx @@ -6,7 +6,7 @@ import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@p import React from 'react'; -import { Columar, Table } from '@polkadot/react-components'; +import { Table } from '@polkadot/react-components'; import CoreQueue from './CoreQueue.js'; import CurrentWork from './CurrentWork.js'; diff --git a/packages/page-coretime/src/Overview/index.tsx b/packages/page-coretime/src/Overview/index.tsx index 1f4402c6f9c6..ab87570c6c7a 100644 --- a/packages/page-coretime/src/Overview/index.tsx +++ b/packages/page-coretime/src/Overview/index.tsx @@ -21,7 +21,10 @@ function Overview ({ className, coreInfos }: Props): React.ReactElement { > { coreInfos?.map((v) => ( - + )) }
diff --git a/packages/react-components/src/UsageBar.tsx b/packages/react-components/src/UsageBar.tsx index b33c38e8eaec..fa1d51d0a60b 100644 --- a/packages/react-components/src/UsageBar.tsx +++ b/packages/react-components/src/UsageBar.tsx @@ -24,7 +24,7 @@ function UsageBar ({ apiEndpoint, coreDescriptors, info }: Props): React.ReactEl let pools = 0; if (coreDescriptors) { - coreDescriptors.map((description) => { + coreDescriptors.forEach((description) => { let sanitized: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[] = []; if (Array.isArray(description.info)) { @@ -33,8 +33,7 @@ function UsageBar ({ apiEndpoint, coreDescriptors, info }: Props): React.ReactEl sanitized.push(description.info); } - console.log(description.info); - sanitized.map((i) => { + sanitized.forEach((i) => { const info = i.currentWork.unwrapOr(undefined); if (info) { @@ -74,8 +73,8 @@ function UsageBar ({ apiEndpoint, coreDescriptors, info }: Props): React.ReactEl const taskPerc = (tasks / total) * 100; const poolPerc = (pools / total) * 100; - const taskOffset = (taskPerc / 100) * circumference; - const poolOffset = taskOffset + (poolPerc / 100) * circumference; + const taskOffset = (taskPerc / 100) * 360; + const poolOffset = taskOffset + (poolPerc / 100) * 360; return (
@@ -92,6 +91,14 @@ function UsageBar ({ apiEndpoint, coreDescriptors, info }: Props): React.ReactEl stroke='#f0f0f0' strokeWidth={strokeWidth} /> + usage + > + Tasks assignment: {taskPerc.toFixed(2)}% + + > + Pool assignment: {poolPerc.toFixed(2)}% + + > + Idle assignment: {(100 - taskPerc - poolPerc).toFixed(2)}% +
diff --git a/packages/react-hooks/src/index.ts b/packages/react-hooks/src/index.ts index b110a533e721..79544fe8a8cc 100644 --- a/packages/react-hooks/src/index.ts +++ b/packages/react-hooks/src/index.ts @@ -28,6 +28,7 @@ export { useCallMulti } from './useCallMulti.js'; export { useCollectiveInstance } from './useCollectiveInstance.js'; export { useCollectiveMembers } from './useCollectiveMembers.js'; export { useCoreDescriptor } from './useCoreDescriptor.js'; +export { useCurrentPrice } from './useCurrentPrice.js'; export { useDebounce } from './useDebounce.js'; export { useDelegations } from './useDelegations.js'; export { useDeriveAccountFlags } from './useDeriveAccountFlags.js'; @@ -68,7 +69,9 @@ export { usePreimage } from './usePreimage.js'; export { useProxies } from './useProxies.js'; export { useQueue } from './useQueue.js'; export { useQueueStatus } from './useQueueStatus.js'; +export { useRegions } from './useRegions.js'; export { useRegistrars } from './useRegistrars.js'; +export { useRenewalBump } from './useRenewalBump.js'; export { useSavedFlags } from './useSavedFlags.js'; export { useScroll } from './useScroll.js'; export { useStakingInfo } from './useStakingInfo.js'; diff --git a/packages/react-hooks/src/useCurrentPrice.tsx b/packages/react-hooks/src/useCurrentPrice.tsx new file mode 100644 index 000000000000..8412abd516cb --- /dev/null +++ b/packages/react-hooks/src/useCurrentPrice.tsx @@ -0,0 +1,31 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { PalletBrokerSaleInfoRecord } from '@polkadot/types/lookup'; + +import { useEffect, useState } from 'react'; + +import { createNamedHook, useApi, useCall } from '@polkadot/react-hooks'; + +function extractCurrentPrice (saleInfo: PalletBrokerSaleInfoRecord) { + return saleInfo.toJSON().price?.toString(); +} + +function useCurrentPriceImpl () { + const { api, isApiReady } = useApi(); + + const saleInfo = useCall(isApiReady && api.query.broker.saleInfo); + + const [state, setState] = useState(); + + useEffect((): void => { + saleInfo && + setState( + extractCurrentPrice(saleInfo) + ); + }, [saleInfo]); + + return state; +} + +export const useCurrentPrice = createNamedHook('useCurrentPrice', useCurrentPriceImpl); diff --git a/packages/react-hooks/src/useRegions.ts b/packages/react-hooks/src/useRegions.ts new file mode 100644 index 000000000000..4608853694c7 --- /dev/null +++ b/packages/react-hooks/src/useRegions.ts @@ -0,0 +1,57 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { ApiPromise } from '@polkadot/api'; +import type { Option, StorageKey } from '@polkadot/types'; +import type { AccountId } from '@polkadot/types/interfaces'; +import type { PalletBrokerRegionId, PalletBrokerRegionRecord } from '@polkadot/types/lookup'; + +import { useEffect, useState } from 'react'; + +import { createNamedHook, useCall, useMapKeys } from '@polkadot/react-hooks'; + +interface RegionInfo { + core: number, + start: number, + end: number, + owner: AccountId, + paid: string, + mask: `0x${string}` +} + +function extractInfo (core: number, start: number, end: number, owner: AccountId, paid: string, mask: `0x${string}`) { + return { + core, + end, + mask, + owner, + paid, + start + }; +} + +const OPT_KEY = { + transform: (keys: StorageKey<[PalletBrokerRegionId]>[]): PalletBrokerRegionId[] => + keys.map(({ args: [regionId] }) => regionId) +}; + +function useRegionsImpl (api: ApiPromise): RegionInfo[] | undefined { + const regionKeys = useMapKeys(api.query.broker.regions, [], OPT_KEY); + + const regionInfo = useCall<[[PalletBrokerRegionId[]], Option[]]>(api.query.broker.regions.multi, [regionKeys], { withParams: true }); + + const [state, setState] = useState(); + + useEffect((): void => { + regionInfo?.[1] && + setState( + regionInfo[0][0].map((info, index) => + extractInfo(info.core.toNumber(), info.begin.toNumber(), regionInfo[1][index].unwrap().end.toNumber(), regionInfo[1][index].unwrap().owner.unwrap(), regionInfo[1][index].unwrap().paid.toString(), info.mask.toHex()) + ) + ); + }, [regionInfo]); + + return state; +} + +export const useRegions = createNamedHook('useRegions', useRegionsImpl); diff --git a/packages/react-hooks/src/useRenewalBump.ts b/packages/react-hooks/src/useRenewalBump.ts new file mode 100644 index 000000000000..aaffd9d01486 --- /dev/null +++ b/packages/react-hooks/src/useRenewalBump.ts @@ -0,0 +1,31 @@ +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { PalletBrokerConfigRecord } from '@polkadot/types/lookup'; + +import { useEffect, useState } from 'react'; + +import { createNamedHook, useApi, useCall } from '@polkadot/react-hooks'; + +function extractRenewalBump (config: PalletBrokerConfigRecord) { + return config.toJSON().renewalBump?.toString(); +} + +function useRenewalBumpImpl () { + const { api, isApiReady } = useApi(); + + const config = useCall(isApiReady && api.query.broker.configuration); + + const [state, setState] = useState(); + + useEffect((): void => { + config && + setState( + extractRenewalBump(config) + ); + }, [config]); + + return state; +} + +export const useRenewalBump = createNamedHook('useRenewalBump', useRenewalBumpImpl); diff --git a/packages/react-query/src/FormatBalance.tsx b/packages/react-query/src/FormatBalance.tsx index 1493b61453ef..277b819d1c26 100644 --- a/packages/react-query/src/FormatBalance.tsx +++ b/packages/react-query/src/FormatBalance.tsx @@ -21,6 +21,7 @@ interface Props { isShort?: boolean; label?: React.ReactNode; labelPost?: LabelPost; + useTicker?: boolean; value?: Compact | BN | string | number | null; valueFormatted?: string; withCurrency?: boolean; @@ -47,8 +48,12 @@ function getFormat (registry: Registry, formatIndex = 0): [number, string] { ]; } -function createElement (prefix: string, postfix: string, unit: string, label: LabelPost = '', isShort = false): React.ReactNode { - return <>{`${prefix}${isShort ? '' : '.'}`}{!isShort && {`0000${postfix || ''}`.slice(-4)}} {unit}{label}; +function createElement (prefix: string, postfix: string, unit: string, label: LabelPost = '', isShort = false, ticker?: string): React.ReactNode { + if (ticker) { + return <>{`${prefix}${isShort ? '' : '.'}`}{!isShort && {`${postfix || ''}`.slice(-4)}} {ticker}{label}; + } else { + return <>{`${prefix}${isShort ? '' : '.'}`}{!isShort && {`0000${postfix || ''}`.slice(-4)}} {unit}{label}; + } } function splitFormat (value: string, label?: LabelPost, isShort?: boolean): React.ReactNode { @@ -58,8 +63,8 @@ function splitFormat (value: string, label?: LabelPost, isShort?: boolean): Reac return createElement(prefix, postfix, unit, label, isShort); } -function applyFormat (value: Compact | BN | string | number, [decimals, token]: [number, string], withCurrency = true, withSi?: boolean, _isShort?: boolean, labelPost?: LabelPost): React.ReactNode { - const [prefix, postfix] = formatBalance(value, { decimals, forceUnit: '-', withSi: false }).split('.'); +function applyFormat (value: Compact | BN | string | number, [decimals, token]: [number, string], withCurrency = true, withSi?: boolean, _isShort?: boolean, labelPost?: LabelPost, useTicker?: boolean): React.ReactNode { + const [prefix, postfix, ticker] = formatBalance(value, { decimals }).split(/[.\s]+/); const isShort = _isShort || (withSi && prefix.length >= K_LENGTH); const unitPost = withCurrency ? token : ''; @@ -71,10 +76,15 @@ function applyFormat (value: Compact | BN | string | number, [decimals, tok return <>{major}.{minor}{unit}{unit ? unitPost : ` ${unitPost}`}{labelPost || ''}; } - return createElement(prefix, postfix, unitPost, labelPost, isShort); + if (useTicker) { + return createElement(prefix, postfix, unitPost, labelPost, isShort, ticker); + } else { + return createElement(prefix, postfix, unitPost, labelPost, isShort); + } + } -function FormatBalance ({ children, className = '', format, formatIndex, isShort, label, labelPost, value, valueFormatted, withCurrency, withSi }: Props): React.ReactElement { +function FormatBalance ({ children, className = '', useTicker, format, formatIndex, isShort, label, labelPost, value, valueFormatted, withCurrency, withSi }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); @@ -96,7 +106,7 @@ function FormatBalance ({ children, className = '', format, formatIndex, isShort : value ? value === 'all' ? <>{t('everything')}{labelPost || ''} - : applyFormat(value, formatInfo, withCurrency, withSi, isShort, labelPost) + : applyFormat(value, formatInfo, withCurrency, withSi, isShort, labelPost, useTicker) : isString(labelPost) ? `-${labelPost.toString()}` : labelPost @@ -122,7 +132,6 @@ const StyledSpan = styled.span` .ui--FormatBalance-unit { font-size: var(--font-percent-tiny); - text-transform: uppercase; } .ui--FormatBalance-value { From 366a5e60af5a93fc9e01ea00c8e04e55d9e715cc Mon Sep 17 00:00:00 2001 From: bee344 Date: Thu, 6 Jun 2024 14:02:07 -0300 Subject: [PATCH 32/56] updated regions --- .../page-broker/src/Overview/CoresTables.tsx | 6 ++--- .../page-broker/src/Overview/RenewalPrice.tsx | 12 +++------ packages/react-hooks/src/index.ts | 1 + packages/react-hooks/src/useBrokerStatus.ts | 25 +++++++++++++++++++ packages/react-hooks/src/useRegions.ts | 3 ++- packages/react-query/src/BrokerStatus.tsx | 10 +++----- packages/react-query/src/FormatBalance.tsx | 3 +-- 7 files changed, 38 insertions(+), 22 deletions(-) create mode 100644 packages/react-hooks/src/useBrokerStatus.ts diff --git a/packages/page-broker/src/Overview/CoresTables.tsx b/packages/page-broker/src/Overview/CoresTables.tsx index 678a2b21f151..74d84d347ece 100644 --- a/packages/page-broker/src/Overview/CoresTables.tsx +++ b/packages/page-broker/src/Overview/CoresTables.tsx @@ -45,16 +45,16 @@ function CoresTable ({ api, cores, timeslice, workloadInfos, workplanInfos }: Pr coreArr.push(cores); } - const list: [number, CoreWorkloadInfo[], CoreWorkplanInfo[]][] = []; + const filteredList: [number, CoreWorkloadInfo[], CoreWorkplanInfo[]][] = []; coreArr.forEach((c) => { - list.push([c, sanitizedWorkloadInfos.filter((v) => v.core === c), sanitizedWorkplanInfos.filter((v) => v.core === c)]); + filteredList.push([c, sanitizedWorkloadInfos.filter((v) => v.core === c), sanitizedWorkplanInfos.filter((v) => v.core === c)]); }); return ( <> { - list.map((c) => + filteredList.map((c) => ( | null { - const percentage = renewalBump === undefined ? 0 : Number.parseInt(renewalBump) / 1000000000; +function RenewalPrice ({ currentPrice, renewalBump }: Props): React.ReactElement | null { + const percentage = renewalBump ? Number.parseInt(renewalBump) / 1000000000 : 0; - console.log(percentage); - - const price = currentPrice === undefined ? 0 : Number.parseInt(currentPrice); - - console.log(currentPrice); + const price = currentPrice ? Number.parseInt(currentPrice) : 0; const renewalPrice = price * percentage + price; - console.log(renewalPrice); - return (
{formatBalance(renewalPrice)} diff --git a/packages/react-hooks/src/index.ts b/packages/react-hooks/src/index.ts index 79544fe8a8cc..5e7ccb717c6f 100644 --- a/packages/react-hooks/src/index.ts +++ b/packages/react-hooks/src/index.ts @@ -22,6 +22,7 @@ export { useBlockEvents } from './useBlockEvents.js'; export { useBlockInterval } from './useBlockInterval.js'; export { useBlocksPerDays } from './useBlocksPerDays.js'; export { useBlockTime } from './useBlockTime.js'; +export { useBrokerStatus } from './useBrokerStatus.js'; export { useCacheKey } from './useCacheKey.js'; export { useCall } from './useCall.js'; export { useCallMulti } from './useCallMulti.js'; diff --git a/packages/react-hooks/src/useBrokerStatus.ts b/packages/react-hooks/src/useBrokerStatus.ts new file mode 100644 index 000000000000..87a39a229f82 --- /dev/null +++ b/packages/react-hooks/src/useBrokerStatus.ts @@ -0,0 +1,25 @@ +// Copyright 2017-2024 @polkadot/react-query authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; + +import { useEffect, useState } from 'react'; + +import { createNamedHook, useApi, useCall } from '@polkadot/react-hooks'; + +function useBrokerStatusImpl (query: string): string | undefined { + const { api } = useApi(); + const status = useCall(api.query.broker?.status); + const [state, setState] = useState(); + + useEffect((): void => { + status && + setState( + status + ); + }, [status]); + + return state?.toJSON()[query]?.toString(); +} + +export const useBrokerStatus = createNamedHook('useBrokerStatus', useBrokerStatusImpl); diff --git a/packages/react-hooks/src/useRegions.ts b/packages/react-hooks/src/useRegions.ts index 4608853694c7..f269c94dffd5 100644 --- a/packages/react-hooks/src/useRegions.ts +++ b/packages/react-hooks/src/useRegions.ts @@ -43,7 +43,8 @@ function useRegionsImpl (api: ApiPromise): RegionInfo[] | undefined { const [state, setState] = useState(); useEffect((): void => { - regionInfo?.[1] && + regionInfo && + regionInfo[0][0].length > 0 && setState( regionInfo[0][0].map((info, index) => extractInfo(info.core.toNumber(), info.begin.toNumber(), regionInfo[1][index].unwrap().end.toNumber(), regionInfo[1][index].unwrap().owner.unwrap(), regionInfo[1][index].unwrap().paid.toString(), info.mask.toHex()) diff --git a/packages/react-query/src/BrokerStatus.tsx b/packages/react-query/src/BrokerStatus.tsx index 93bb71e05b3c..d0f5a712b188 100644 --- a/packages/react-query/src/BrokerStatus.tsx +++ b/packages/react-query/src/BrokerStatus.tsx @@ -1,11 +1,9 @@ // Copyright 2017-2024 @polkadot/react-query authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; - import React from 'react'; -import { useApi, useCall } from '@polkadot/react-hooks'; +import { useBrokerStatus } from '@polkadot/react-hooks'; interface Props { children?: React.ReactNode; @@ -14,13 +12,11 @@ interface Props { } function BrokerStatus ({ children, className = '', query }: Props): React.ReactElement { - const { api } = useApi(); - const status = useCall(api.query.broker?.status); - const strStatus = status === undefined ? '' : status.toJSON()[query]; + const info = useBrokerStatus(query); return (
- {strStatus?.toString()} + {info} {children}
); diff --git a/packages/react-query/src/FormatBalance.tsx b/packages/react-query/src/FormatBalance.tsx index 277b819d1c26..f4bd486717ff 100644 --- a/packages/react-query/src/FormatBalance.tsx +++ b/packages/react-query/src/FormatBalance.tsx @@ -81,10 +81,9 @@ function applyFormat (value: Compact | BN | string | number, [decimals, tok } else { return createElement(prefix, postfix, unitPost, labelPost, isShort); } - } -function FormatBalance ({ children, className = '', useTicker, format, formatIndex, isShort, label, labelPost, value, valueFormatted, withCurrency, withSi }: Props): React.ReactElement { +function FormatBalance ({ children, className = '', format, formatIndex, isShort, label, labelPost, useTicker, value, valueFormatted, withCurrency, withSi }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); From f80a5a92a8f7fa8ec9ff74a2e3c9d39193de84c6 Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 10 Jun 2024 18:49:30 -0300 Subject: [PATCH 33/56] styling --- .../page-broker/src/Overview/CoreTable.tsx | 30 ++++------ .../page-broker/src/Overview/Workload.tsx | 60 +++++++++---------- .../page-broker/src/Overview/Workloads.tsx | 17 +++++- .../page-broker/src/Overview/Workplan.tsx | 20 +++---- .../page-broker/src/Overview/Workplans.tsx | 17 +++++- .../src/Overview/CoreDescriptor.tsx | 9 ++- .../src/Overview/CoreDescriptors.tsx | 4 +- .../page-coretime/src/Overview/CoreQueue.tsx | 40 +++++++++---- .../src/Overview/CurrentWork.tsx | 37 +++++++++++- packages/react-hooks/src/useRegions.ts | 7 +-- 10 files changed, 152 insertions(+), 89 deletions(-) diff --git a/packages/page-broker/src/Overview/CoreTable.tsx b/packages/page-broker/src/Overview/CoreTable.tsx index 1fd1a5e377d4..8f6cabb4e177 100644 --- a/packages/page-broker/src/Overview/CoreTable.tsx +++ b/packages/page-broker/src/Overview/CoreTable.tsx @@ -6,7 +6,7 @@ import type { CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/t import React, { useRef } from 'react'; -import { Columar, Table } from '@polkadot/react-components'; +import { Table } from '@polkadot/react-components'; import { useTranslation } from '../translate.js'; import Workloads from './Workloads.js'; @@ -25,8 +25,8 @@ function CoreTable ({ api, core, timeslice, workload, workplan }: Props): React. const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ [t('core')], - ['workload'], - ['workplan'] + [], + [] ]); return ( @@ -35,23 +35,17 @@ function CoreTable ({ api, core, timeslice, workload, workplan }: Props): React. > - - - - + - - - - + ); diff --git a/packages/page-broker/src/Overview/Workload.tsx b/packages/page-broker/src/Overview/Workload.tsx index 4cfbb26aa033..b3100a8b8d01 100644 --- a/packages/page-broker/src/Overview/Workload.tsx +++ b/packages/page-broker/src/Overview/Workload.tsx @@ -6,27 +6,21 @@ import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import React from 'react'; -import { Columar } from '@polkadot/react-components'; -import { useRegions } from '@polkadot/react-hooks'; - -import { hexToBin } from '../utils.js'; +import { ExpandButton } from '@polkadot/react-components'; +import { useRegions, useToggle } from '@polkadot/react-hooks'; interface Props { api: ApiPromise; value: CoreWorkloadInfo; - timeslice: number, + timeslice: number; + isExpanded?: boolean; } function Workload ({ api, timeslice, value: { core, info } }: Props): React.ReactElement { - const trimmedHex: string = info[0].mask.toHex().slice(2); - const arr: string[] = trimmedHex.split(''); + const [isExpanded, toggleIsExpanded] = useToggle(false); const buffArr: string[] = []; - arr.forEach((bit) => { - hexToBin(bit).split('').forEach((v) => buffArr.push(v)); - }); - const regionInfo = useRegions(api); regionInfo?.filter((v) => v.core === core && v.start >= timeslice && v.mask === info[0].mask.toHex()); @@ -36,27 +30,33 @@ function Workload ({ api, timeslice, value: { core, info } }: Props): React.Reac const sanitizedAssignment = info[0].assignment.isTask ? info[0].assignment.asTask : info[0].assignment; return ( - - + <> +
{'Assignment'}
- {sanitizedAssignment.toString()} -
- + {sanitizedAssignment.toString()} + +
{'Mask'}
- {`${buffArr.length / 80 * 100}%`} -
- -
{'Lease start'}
- {timeslice?.toString()} -
- -
{'Lease end'}
- - {regionInfo?.[0].end.toString()} - -
-
- + {`${buffArr.length / 80 * 100}%`} + + + + {isExpanded && + + +
{'Lease start'}
+ {regionInfo?.[0].start.toString()} + + +
{'Lease end'}
+ {regionInfo?.[0].end.toString()} + + + } + ); } diff --git a/packages/page-broker/src/Overview/Workloads.tsx b/packages/page-broker/src/Overview/Workloads.tsx index 2dd35397db7d..1da13f69cd7c 100644 --- a/packages/page-broker/src/Overview/Workloads.tsx +++ b/packages/page-broker/src/Overview/Workloads.tsx @@ -4,7 +4,9 @@ import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; -import React from 'react'; +import React, { useRef } from 'react'; + +import { Table } from '@polkadot/react-components'; import Workload from './Workload.js'; @@ -15,8 +17,17 @@ interface Props { } function Workloads ({ api, timeslice, workloadInfos }: Props): React.ReactElement { + const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ + ['workloads'], + [], + [] + ]); + return ( - <> + {workloadInfos?.map((v) => ( ))} - +
); } diff --git a/packages/page-broker/src/Overview/Workplan.tsx b/packages/page-broker/src/Overview/Workplan.tsx index b956d74d1e3d..a52332fc68ec 100644 --- a/packages/page-broker/src/Overview/Workplan.tsx +++ b/packages/page-broker/src/Overview/Workplan.tsx @@ -6,7 +6,6 @@ import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; import React from 'react'; -import { Columar } from '@polkadot/react-components'; import { useRegions } from '@polkadot/react-hooks'; import { hexToBin } from '../utils.js'; @@ -36,18 +35,17 @@ function Workload ({ api, value: { core, info, timeslice } }: Props): React.Reac regionInfo?.filter((v) => v.core === core && v.start >= timeslice); return ( - + - -
{'Assignment'}
- {sanitizedAssignment.toString()} -
+
{'Assignment'}
+ {sanitizedAssignment !== undefined ? sanitizedAssignment.toString() : 'N/A'} - -
{'Mask'}
- {`${buffArr.length / 80 * 100}%`} -
-
+
{'Mask'}
+ {buffArr.length > 0 ? `${buffArr.length / 80 * 100}%` : 'N/A'} + + + + ); } diff --git a/packages/page-broker/src/Overview/Workplans.tsx b/packages/page-broker/src/Overview/Workplans.tsx index dda22ec5cef2..289178747b22 100644 --- a/packages/page-broker/src/Overview/Workplans.tsx +++ b/packages/page-broker/src/Overview/Workplans.tsx @@ -4,7 +4,9 @@ import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; -import React from 'react'; +import React, { useRef } from 'react'; + +import { Table } from '@polkadot/react-components'; import Workplan from './Workplan.js'; @@ -15,6 +17,12 @@ interface Props { } function Workplans ({ api, workplanInfos }: Props): React.ReactElement { + const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ + ['workplans'], + [], + [] + ]); + let sanitized: CoreWorkplanInfo[] = []; if (Array.isArray(workplanInfos)) { @@ -26,7 +34,10 @@ function Workplans ({ api, workplanInfos }: Props): React.ReactElement { sanitized?.sort((a, b) => a.core - b.core); return ( - <> + {sanitized?.map((workplanInfo) => ( { value={workplanInfo} /> ))} - +
); } diff --git a/packages/page-coretime/src/Overview/CoreDescriptor.tsx b/packages/page-coretime/src/Overview/CoreDescriptor.tsx index 4ce33fca0fd7..ed7d17946e0c 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptor.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptor.tsx @@ -29,10 +29,13 @@ function CoreDescriptor ({ className, value: { core, info } }: Props): React.Rea {sanitized?.map((i) => ( - + > + + )) } {sanitized?.map((i) => ( diff --git a/packages/page-coretime/src/Overview/CoreDescriptors.tsx b/packages/page-coretime/src/Overview/CoreDescriptors.tsx index afcf79193c87..6392821447a5 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptors.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptors.tsx @@ -21,8 +21,8 @@ function CoreDescriptors ({ className, coreInfos }: Props): React.ReactElement

([ [t('core'), 'start', 1], - [t('current work'), 'start media--1300'], - [t('work queue'), 'start media--1600'] + [], + [] ]); if (Array.isArray(coreInfos)) { diff --git a/packages/page-coretime/src/Overview/CoreQueue.tsx b/packages/page-coretime/src/Overview/CoreQueue.tsx index a8f1e59c7015..b1bcb8a06207 100644 --- a/packages/page-coretime/src/Overview/CoreQueue.tsx +++ b/packages/page-coretime/src/Overview/CoreQueue.tsx @@ -3,25 +3,39 @@ import type { PolkadotRuntimeParachainsAssignerCoretimeQueueDescriptor } from '@polkadot/types/lookup'; -import React from 'react'; +import React, { useRef } from 'react'; + +import { Table } from '@polkadot/react-components'; interface Props { value?: PolkadotRuntimeParachainsAssignerCoretimeQueueDescriptor; } function CoreQueue ({ value }: Props): React.ReactElement { - if (value) { - return ( - <> - {value?.first.toString()} - {value?.last.toString()} - - ); - } else { - return ( - {'Queue empty'} - ); - } + const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ + ['work queue'] + ]); + + return ( + + {value + ? + + + + : + + } +
+
{'first'}
+ {value?.first.toString()} +
+
{'last'}
+ {value?.last.toString()} +
+ {'No work queue found'} +
+ ); } export default React.memo(CoreQueue); diff --git a/packages/page-coretime/src/Overview/CurrentWork.tsx b/packages/page-coretime/src/Overview/CurrentWork.tsx index 4060e443aa36..4c9f2c3a6c21 100644 --- a/packages/page-coretime/src/Overview/CurrentWork.tsx +++ b/packages/page-coretime/src/Overview/CurrentWork.tsx @@ -3,13 +3,20 @@ import type { PolkadotRuntimeParachainsAssignerCoretimeWorkState } from '@polkadot/types/lookup'; -import React from 'react'; +import React, { useRef } from 'react'; + +import { ExpandButton, Table } from '@polkadot/react-components'; +import { useToggle } from '@polkadot/react-hooks'; interface Props { value?: PolkadotRuntimeParachainsAssignerCoretimeWorkState; } function CurrentWork ({ value }: Props): React.ReactElement { + const [isExpanded, toggleIsExpanded] = useToggle(false); + const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ + ['current work'] + ]); const response: string[] = []; if (value) { @@ -28,7 +35,33 @@ function CurrentWork ({ value }: Props): React.ReactElement { } return ( - {response.length > 1 ? response.join(', ') : response[0]} + + {value + ? response.map((r, index) => ( + index < 1 + ? + + + + : isExpanded && + + + )) + : + + + } +
+ {r} +
+ {r} +
+ {'No tasks currently assigned'} +
+ // {response.length > 1 ? response.join(', ') : response[0]} ); } diff --git a/packages/react-hooks/src/useRegions.ts b/packages/react-hooks/src/useRegions.ts index f269c94dffd5..08d84ab9f701 100644 --- a/packages/react-hooks/src/useRegions.ts +++ b/packages/react-hooks/src/useRegions.ts @@ -3,7 +3,6 @@ import type { ApiPromise } from '@polkadot/api'; import type { Option, StorageKey } from '@polkadot/types'; -import type { AccountId } from '@polkadot/types/interfaces'; import type { PalletBrokerRegionId, PalletBrokerRegionRecord } from '@polkadot/types/lookup'; import { useEffect, useState } from 'react'; @@ -14,12 +13,12 @@ interface RegionInfo { core: number, start: number, end: number, - owner: AccountId, + owner: string, paid: string, mask: `0x${string}` } -function extractInfo (core: number, start: number, end: number, owner: AccountId, paid: string, mask: `0x${string}`) { +function extractInfo (core: number, start: number, end: number, owner: string, paid: string, mask: `0x${string}`) { return { core, end, @@ -47,7 +46,7 @@ function useRegionsImpl (api: ApiPromise): RegionInfo[] | undefined { regionInfo[0][0].length > 0 && setState( regionInfo[0][0].map((info, index) => - extractInfo(info.core.toNumber(), info.begin.toNumber(), regionInfo[1][index].unwrap().end.toNumber(), regionInfo[1][index].unwrap().owner.unwrap(), regionInfo[1][index].unwrap().paid.toString(), info.mask.toHex()) + extractInfo(info.core.toNumber(), info.begin.toNumber(), regionInfo[1][index].unwrap().end.toNumber(), regionInfo[1][index].unwrap().owner.toString(), regionInfo[1][index].unwrap().paid.toString(), info.mask.toHex()) ) ); }, [regionInfo]); From c631fa2390313f45cc1d2406703293112d57f908 Mon Sep 17 00:00:00 2001 From: bee344 Date: Tue, 11 Jun 2024 08:44:24 -0300 Subject: [PATCH 34/56] fixed pallet version mismaatch info --- .../src/Overview/QueueStatus.tsx | 33 ++++++++--------- .../page-coretime/src/Overview/Summary.tsx | 37 ++++++++++--------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/packages/page-coretime/src/Overview/QueueStatus.tsx b/packages/page-coretime/src/Overview/QueueStatus.tsx index 296e2b691f5b..16dad860c2fc 100644 --- a/packages/page-coretime/src/Overview/QueueStatus.tsx +++ b/packages/page-coretime/src/Overview/QueueStatus.tsx @@ -14,23 +14,22 @@ interface Props { } function QueueStatus ({ className, query, value }: Props): React.ReactElement { - if (query === 'traffic') { - return ( -

- -
- ); - } else { - return ( -
- {value?.nextIndex.toString()} -
- ); - } + return ( + <> + {value && query === 'traffic' + ?
+ +
+ : value && +
+ {value?.nextIndex.toString()} +
} + + ); } export default React.memo(QueueStatus); diff --git a/packages/page-coretime/src/Overview/Summary.tsx b/packages/page-coretime/src/Overview/Summary.tsx index 793a58bbc71c..bffd40dc86d4 100644 --- a/packages/page-coretime/src/Overview/Summary.tsx +++ b/packages/page-coretime/src/Overview/Summary.tsx @@ -24,26 +24,27 @@ function Summary ({ coreDscriptors }: Props): React.ReactElement { return (
- {api.query.coretimeAssignmentProvider && ( - <> + <> + {api.query.coretimeAssignmentProvider && - - - - - - - - - - )} + } + {api.query.onDemandAssignmentProvider.queueStatus && + <> + + + + + + + } + Date: Tue, 11 Jun 2024 09:56:21 -0300 Subject: [PATCH 35/56] fixed expand button --- .../page-broker/src/Overview/Workload.tsx | 66 ++++++++++------- .../page-broker/src/Overview/Workplan.tsx | 70 +++++++++++++------ 2 files changed, 89 insertions(+), 47 deletions(-) diff --git a/packages/page-broker/src/Overview/Workload.tsx b/packages/page-broker/src/Overview/Workload.tsx index b3100a8b8d01..26226cfbc264 100644 --- a/packages/page-broker/src/Overview/Workload.tsx +++ b/packages/page-broker/src/Overview/Workload.tsx @@ -3,59 +3,75 @@ import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; +import type { PalletBrokerCoretimeInterfaceCoreAssignment } from '@polkadot/types/lookup'; import React from 'react'; import { ExpandButton } from '@polkadot/react-components'; import { useRegions, useToggle } from '@polkadot/react-hooks'; +import { hexToBin } from '../utils.js'; + interface Props { api: ApiPromise; value: CoreWorkloadInfo; timeslice: number; - isExpanded?: boolean; } function Workload ({ api, timeslice, value: { core, info } }: Props): React.ReactElement { const [isExpanded, toggleIsExpanded] = useToggle(false); - const buffArr: string[] = []; + const infoVec: [PalletBrokerCoretimeInterfaceCoreAssignment, number][] = []; const regionInfo = useRegions(api); regionInfo?.filter((v) => v.core === core && v.start >= timeslice && v.mask === info[0].mask.toHex()); - buffArr.filter((v) => v === '1'); + info.forEach((data) => { + const trimmedHex: string = data.mask.toHex().slice(2); + const arr: string[] = trimmedHex.split(''); + const buffArr: string[] = []; + + arr.forEach((bit) => { + hexToBin(bit).split('').forEach((v) => buffArr.push(v)); + }); + buffArr.filter((v) => v === '1'); + infoVec.push([data.assignment, buffArr.length / 80 * 100]); + }); - const sanitizedAssignment = info[0].assignment.isTask ? info[0].assignment.asTask : info[0].assignment; + const needsExpansion = infoVec.length > 1; return ( - <> - -
{'Assignment'}
- {sanitizedAssignment.toString()} - - -
{'Mask'}
- {`${buffArr.length / 80 * 100}%`} - - - - {isExpanded && - + <> + {infoVec.map((data, index) => ( + -
{'Lease start'}
- {regionInfo?.[0].start.toString()} +
{'Assignment'}
+ {data[0].isTask ? data[0].asTask.toString() : data[0].toString()} -
{'Lease end'}
- {regionInfo?.[0].end.toString()} +
{'Mask'}
+ {`${data[1]}%`} + {needsExpansion && index === 1 && + } + {isExpanded && + + +
{'Lease start'}
+ {regionInfo?.[0].start.toString()} + + +
{'Lease end'}
+ {regionInfo?.[0].end.toString()} + + + } - } + ))} ); } diff --git a/packages/page-broker/src/Overview/Workplan.tsx b/packages/page-broker/src/Overview/Workplan.tsx index a52332fc68ec..174a06e669aa 100644 --- a/packages/page-broker/src/Overview/Workplan.tsx +++ b/packages/page-broker/src/Overview/Workplan.tsx @@ -3,10 +3,12 @@ import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; +import type { PalletBrokerCoretimeInterfaceCoreAssignment } from '@polkadot/types/lookup'; import React from 'react'; -import { useRegions } from '@polkadot/react-hooks'; +import { ExpandButton } from '@polkadot/react-components'; +import { useRegions, useToggle } from '@polkadot/react-hooks'; import { hexToBin } from '../utils.js'; @@ -16,37 +18,61 @@ interface Props { value: CoreWorkplanInfo; } -function Workload ({ api, value: { core, info, timeslice } }: Props): React.ReactElement { - const trimmedHex: string = info[0].mask.toHex().slice(2); - const arr: string[] = trimmedHex.split(''); +function Workplan ({ api, value: { core, info, timeslice } }: Props): React.ReactElement { + const [isExpanded, toggleIsExpanded] = useToggle(false); + const infoVec: [PalletBrokerCoretimeInterfaceCoreAssignment, number][] = []; - const buffArr: string[] = []; + info.forEach((data) => { + const trimmedHex: string = data.mask.toHex().slice(2); + const arr: string[] = trimmedHex.split(''); + const buffArr: string[] = []; - arr.forEach((bit) => { - hexToBin(bit).split('').forEach((v) => buffArr.push(v)); + arr.forEach((bit) => { + hexToBin(bit).split('').forEach((v) => buffArr.push(v)); + }); + buffArr.filter((v) => v === '1'); + infoVec.push([data.assignment, buffArr.length / 80 * 100]); }); - buffArr.filter((v) => v === '1'); - - const sanitizedAssignment = info[0].assignment.isTask ? info[0].assignment.asTask : info[0].assignment; + const needsExpansion = infoVec.length > 1; const regionInfo = useRegions(api); regionInfo?.filter((v) => v.core === core && v.start >= timeslice); return ( - - -
{'Assignment'}
- {sanitizedAssignment !== undefined ? sanitizedAssignment.toString() : 'N/A'} - -
{'Mask'}
- {buffArr.length > 0 ? `${buffArr.length / 80 * 100}%` : 'N/A'} - - - - + <> + {infoVec.map((data, index) => ( + + +
{'Assignment'}
+ {data[0].isTask ? data[0].asTask.toString() : data[0].toString()} + + +
{'Mask'}
+ {`${data[1]}%`} + + {needsExpansion && index === 1 && + } + {isExpanded && + + +
{'Lease start'}
+ {regionInfo?.[0].start.toString()} + + +
{'Lease end'}
+ {regionInfo?.[0].end.toString()} + + + } + + ))} + ); } -export default React.memo(Workload); +export default React.memo(Workplan); From 7a1a310cc8b5326c3dee7f0b2ef2b22653df75fa Mon Sep 17 00:00:00 2001 From: bee344 Date: Tue, 11 Jun 2024 11:29:36 -0300 Subject: [PATCH 36/56] fixed alignment issues --- .../page-broker/src/Overview/CoreTable.tsx | 4 +- .../page-broker/src/Overview/Workload.tsx | 60 ++++++++++--------- .../page-broker/src/Overview/Workloads.tsx | 29 ++++----- .../page-broker/src/Overview/Workplans.tsx | 27 +++++---- .../src/Overview/CoreDescriptor.tsx | 15 +++-- .../page-coretime/src/Overview/CoreQueue.tsx | 2 +- .../src/Overview/CurrentWork.tsx | 19 +++--- 7 files changed, 83 insertions(+), 73 deletions(-) diff --git a/packages/page-broker/src/Overview/CoreTable.tsx b/packages/page-broker/src/Overview/CoreTable.tsx index 8f6cabb4e177..ed71eaa3bbdc 100644 --- a/packages/page-broker/src/Overview/CoreTable.tsx +++ b/packages/page-broker/src/Overview/CoreTable.tsx @@ -34,14 +34,14 @@ function CoreTable ({ api, core, timeslice, workload, workplan }: Props): React. header={headerRef.current} > - + - + - {infoVec.map((data, index) => ( - - -
{'Assignment'}
- {data[0].isTask ? data[0].asTask.toString() : data[0].toString()} - - -
{'Mask'}
- {`${data[1]}%`} - - {needsExpansion && index === 1 && - } - {isExpanded && - - -
{'Lease start'}
- {regionInfo?.[0].start.toString()} - - -
{'Lease end'}
- {regionInfo?.[0].end.toString()} - - - } - - ))} + { + infoVec.map((data, index) => ( + + +
{'Assignment'}
+ {data[0].isTask ? data[0].asTask.toString() : data[0].toString()} + + +
{'Mask'}
+ {`${data[1]}%`} + + {needsExpansion && index === 1 && + } + {isExpanded && + + +
{'Lease start'}
+ {regionInfo?.[0].start.toString()} + + +
{'Lease end'}
+ {regionInfo?.[0].end.toString()} + + + } + + )) + } ); } diff --git a/packages/page-broker/src/Overview/Workloads.tsx b/packages/page-broker/src/Overview/Workloads.tsx index 1da13f69cd7c..c120f0861e15 100644 --- a/packages/page-broker/src/Overview/Workloads.tsx +++ b/packages/page-broker/src/Overview/Workloads.tsx @@ -19,24 +19,25 @@ interface Props { function Workloads ({ api, timeslice, workloadInfos }: Props): React.ReactElement { const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ ['workloads'], - [], [] ]); return ( - - {workloadInfos?.map((v) => ( - - ))} -
+
+ + {workloadInfos?.map((v) => ( + + ))} +
+
); } diff --git a/packages/page-broker/src/Overview/Workplans.tsx b/packages/page-broker/src/Overview/Workplans.tsx index 289178747b22..a7aba968e254 100644 --- a/packages/page-broker/src/Overview/Workplans.tsx +++ b/packages/page-broker/src/Overview/Workplans.tsx @@ -19,7 +19,6 @@ interface Props { function Workplans ({ api, workplanInfos }: Props): React.ReactElement { const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ ['workplans'], - [], [] ]); @@ -34,18 +33,20 @@ function Workplans ({ api, workplanInfos }: Props): React.ReactElement { sanitized?.sort((a, b) => a.core - b.core); return ( - - {sanitized?.map((workplanInfo) => ( - - ))} -
+
+ + {sanitized?.map((workplanInfo) => ( + + ))} +
+
); } diff --git a/packages/page-coretime/src/Overview/CoreDescriptor.tsx b/packages/page-coretime/src/Overview/CoreDescriptor.tsx index ed7d17946e0c..35862652abaf 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptor.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptor.tsx @@ -16,7 +16,7 @@ interface Props { value: CoreDescription; } -function CoreDescriptor ({ className, value: { core, info } }: Props): React.ReactElement { +function CoreDescriptor ({ value: { core, info } }: Props): React.ReactElement { let sanitized: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[] = []; if (Array.isArray(info)) { @@ -26,7 +26,7 @@ function CoreDescriptor ({ className, value: { core, info } }: Props): React.Rea } return ( - + <> {sanitized?.map((i) => ( ( - + > + + ))} - + ); } diff --git a/packages/page-coretime/src/Overview/CoreQueue.tsx b/packages/page-coretime/src/Overview/CoreQueue.tsx index b1bcb8a06207..f2f4567a9b2e 100644 --- a/packages/page-coretime/src/Overview/CoreQueue.tsx +++ b/packages/page-coretime/src/Overview/CoreQueue.tsx @@ -31,7 +31,7 @@ function CoreQueue ({ value }: Props): React.ReactElement { : - {'No work queue found'} +
{'No work queue found'}
} diff --git a/packages/page-coretime/src/Overview/CurrentWork.tsx b/packages/page-coretime/src/Overview/CurrentWork.tsx index 4c9f2c3a6c21..9c28519a662a 100644 --- a/packages/page-coretime/src/Overview/CurrentWork.tsx +++ b/packages/page-coretime/src/Overview/CurrentWork.tsx @@ -34,6 +34,8 @@ function CurrentWork ({ value }: Props): React.ReactElement { ); } + const needsExpansion = response.length > 1; + return ( {value @@ -42,16 +44,18 @@ function CurrentWork ({ value }: Props): React.ReactElement { ? - + { + needsExpansion && + } - : isExpanded && + : { + isExpanded && + } )) : @@ -61,7 +65,6 @@ function CurrentWork ({ value }: Props): React.ReactElement { }
{r} -
{r} -
- // {response.length > 1 ? response.join(', ') : response[0]} ); } From ce51e82618b480eb99c5be8dcbb7318d902bd189 Mon Sep 17 00:00:00 2001 From: bee344 Date: Thu, 13 Jun 2024 08:07:14 -0300 Subject: [PATCH 37/56] yarn install --- package.json | 2 +- packages/page-broker/package.json | 6 +++--- packages/page-coretime/package.json | 6 +++--- yarn.lock | 21 +++++++++++++++++---- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 255c2202ea87..83d924b0890b 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "version": "0.138.2-14-x", "versions": { "git": "0.138.2-14-x", - "npm": "0.138.1" + "npm": "0.138.2-14-x" }, "workspaces": [ "packages/*" diff --git a/packages/page-broker/package.json b/packages/page-broker/package.json index 09bd502b1303..d0bcb7184a62 100644 --- a/packages/page-broker/package.json +++ b/packages/page-broker/package.json @@ -14,10 +14,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.138.1", + "version": "0.138.2-14-x", "dependencies": { - "@polkadot/react-components": "0.138.1", - "@polkadot/react-query": "0.138.1" + "@polkadot/react-components": "0.138.2-14-x", + "@polkadot/react-query": "0.138.2-14-x" }, "peerDependencies": { "react": "*", diff --git a/packages/page-coretime/package.json b/packages/page-coretime/package.json index 1cd7a5733530..9f5f5a6c6144 100644 --- a/packages/page-coretime/package.json +++ b/packages/page-coretime/package.json @@ -14,10 +14,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.138.1", + "version": "0.138.2-14-x", "dependencies": { - "@polkadot/react-components": "0.138.1", - "@polkadot/react-query": "0.138.1" + "@polkadot/react-components": "0.138.2-14-x", + "@polkadot/react-query": "0.138.2-14-x" }, "peerDependencies": { "react": "*", diff --git a/yarn.lock b/yarn.lock index f87b86a484c0..a36c11a5158f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1287,6 +1287,19 @@ __metadata: languageName: unknown linkType: soft +"@polkadot/app-broker@workspace:packages/page-broker": + version: 0.0.0-use.local + resolution: "@polkadot/app-broker@workspace:packages/page-broker" + dependencies: + "@polkadot/react-components": "npm:0.138.2-14-x" + "@polkadot/react-query": "npm:0.138.2-14-x" + peerDependencies: + react: "*" + react-dom: "*" + react-is: "*" + languageName: unknown + linkType: soft + "@polkadot/app-calendar@workspace:packages/page-calendar": version: 0.0.0-use.local resolution: "@polkadot/app-calendar@workspace:packages/page-calendar" @@ -1339,8 +1352,8 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-coretime@workspace:packages/page-coretime" dependencies: - "@polkadot/react-components": "npm:0.138.1" - "@polkadot/react-query": "npm:0.138.1" + "@polkadot/react-components": "npm:0.138.2-14-x" + "@polkadot/react-query": "npm:0.138.2-14-x" peerDependencies: react: "*" react-dom: "*" @@ -2079,7 +2092,7 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/react-components@npm:^0.138.2-14-x, @polkadot/react-components@workspace:packages/react-components": +"@polkadot/react-components@npm:0.138.2-14-x, @polkadot/react-components@npm:^0.138.2-14-x, @polkadot/react-components@workspace:packages/react-components": version: 0.0.0-use.local resolution: "@polkadot/react-components@workspace:packages/react-components" dependencies: @@ -2202,7 +2215,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-query@npm:^0.138.2-14-x, @polkadot/react-query@workspace:packages/react-query": +"@polkadot/react-query@npm:0.138.2-14-x, @polkadot/react-query@npm:^0.138.2-14-x, @polkadot/react-query@workspace:packages/react-query": version: 0.0.0-use.local resolution: "@polkadot/react-query@workspace:packages/react-query" peerDependencies: From 1f14531b924b64cf28614537757115f601a49c5a Mon Sep 17 00:00:00 2001 From: bee344 Date: Thu, 13 Jun 2024 08:24:50 -0300 Subject: [PATCH 38/56] integrated some suggestions --- .../src/Overview/CoreDescriptors.tsx | 18 +--- .../src/Overview/CurrentWork.tsx | 88 +++++++++---------- 2 files changed, 43 insertions(+), 63 deletions(-) diff --git a/packages/page-coretime/src/Overview/CoreDescriptors.tsx b/packages/page-coretime/src/Overview/CoreDescriptors.tsx index 6392821447a5..5ddeb73048f3 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptors.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptors.tsx @@ -12,12 +12,11 @@ import CoreDescriptor from './CoreDescriptor.js'; interface Props { className?: string; - coreInfos?: CoreDescription[] | CoreDescription; + coreInfos?: CoreDescription; } -function CoreDescriptors ({ className, coreInfos }: Props): React.ReactElement { +function CoreDescriptors({ className, coreInfos }: Props): React.ReactElement { const { t } = useTranslation(); - let sanitized: CoreDescription[] = []; const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ [t('core'), 'start', 1], @@ -25,24 +24,13 @@ function CoreDescriptors ({ className, coreInfos }: Props): React.ReactElement

- {sanitized?.map((v) => ( - - ))} + {coreInfos && } ); } diff --git a/packages/page-coretime/src/Overview/CurrentWork.tsx b/packages/page-coretime/src/Overview/CurrentWork.tsx index 9c28519a662a..a305dfb25acd 100644 --- a/packages/page-coretime/src/Overview/CurrentWork.tsx +++ b/packages/page-coretime/src/Overview/CurrentWork.tsx @@ -1,71 +1,63 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { PolkadotRuntimeParachainsAssignerCoretimeWorkState } from '@polkadot/types/lookup'; +import { useState, useEffect, useRef } from 'react'; -import React, { useRef } from 'react'; +import type { PolkadotRuntimeParachainsAssignerCoretimeWorkState } from '@polkadot/types/lookup'; -import { ExpandButton, Table } from '@polkadot/react-components'; -import { useToggle } from '@polkadot/react-hooks'; +import React from 'react'; +import { Table } from '@polkadot/react-components'; interface Props { value?: PolkadotRuntimeParachainsAssignerCoretimeWorkState; } -function CurrentWork ({ value }: Props): React.ReactElement { - const [isExpanded, toggleIsExpanded] = useToggle(false); - const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ - ['current work'] - ]); - const response: string[] = []; - +function createAssignments(value?: PolkadotRuntimeParachainsAssignerCoretimeWorkState): string { if (value) { - value.assignments.forEach((_, index) => { - const ratio = value.assignments[index][1].ratio.toNumber() / 57600 * 100; - - if (value.assignments[index][0].isIdle) { - response.push(`${ratio}% Idle`); - } else if (value.assignments[index][0].isPool) { - response.push(`${ratio}% Pool`); + if (value.assignments.length > 1) { + return value.assignments.map((_, index) => { + const ratio = value.assignments[index][1].ratio.toNumber() / 57600 * 100; + + if (value.assignments[index][0].isIdle) { + return `${ratio}% Idle`; + } else if (value.assignments[index][0].isPool) { + return `${ratio}% Pool`; + } else { + return `${ratio}% Task: ${value.assignments[index][0].asTask.toString()}`; + } + }).join(', ') + } else { + if (value.assignments[0][0].isIdle) { + return '100% Idle' + } else if (value.assignments[0][0].isPool) { + return '100% Pool' } else { - response.push(`${ratio}% Task: ${value.assignments[index][0].asTask.toString()}`); + return `100% Task: ${value.assignments[0][0].asTask.toString()}` } } - ); + } else { + return 'Queue empty' } +} + +function CurrentWork({ value }: Props): React.ReactElement { + const [assignments, setAssignments] = useState(''); - const needsExpansion = response.length > 1; + useEffect(() => { + setAssignments(createAssignments(value)) + }, []); + + const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ + ['current work'] + ]); return ( - {value - ? response.map((r, index) => ( - index < 1 - ? - { - needsExpansion && - } - - : { - isExpanded && - } - - )) - : - - - } + + +
- {r} -
- {r} -
- {'No tasks currently assigned'} -
{assignments}
- ); + ) } export default React.memo(CurrentWork); From ed89520c1995ce1c0df121519147196feb8aa6b1 Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 24 Jun 2024 09:27:15 -0300 Subject: [PATCH 39/56] linting --- .../src/Overview/CoreDescriptors.tsx | 2 +- .../src/Overview/CurrentWork.tsx | 25 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/packages/page-coretime/src/Overview/CoreDescriptors.tsx b/packages/page-coretime/src/Overview/CoreDescriptors.tsx index 5ddeb73048f3..0afad2a508f6 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptors.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptors.tsx @@ -15,7 +15,7 @@ interface Props { coreInfos?: CoreDescription; } -function CoreDescriptors({ className, coreInfos }: Props): React.ReactElement { +function CoreDescriptors ({ className, coreInfos }: Props): React.ReactElement { const { t } = useTranslation(); const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ diff --git a/packages/page-coretime/src/Overview/CurrentWork.tsx b/packages/page-coretime/src/Overview/CurrentWork.tsx index a305dfb25acd..6465a6dc7d82 100644 --- a/packages/page-coretime/src/Overview/CurrentWork.tsx +++ b/packages/page-coretime/src/Overview/CurrentWork.tsx @@ -1,18 +1,17 @@ // Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { useState, useEffect, useRef } from 'react'; - import type { PolkadotRuntimeParachainsAssignerCoretimeWorkState } from '@polkadot/types/lookup'; -import React from 'react'; +import React, { useEffect, useRef, useState } from 'react'; + import { Table } from '@polkadot/react-components'; interface Props { value?: PolkadotRuntimeParachainsAssignerCoretimeWorkState; } -function createAssignments(value?: PolkadotRuntimeParachainsAssignerCoretimeWorkState): string { +function createAssignments (value?: PolkadotRuntimeParachainsAssignerCoretimeWorkState): string { if (value) { if (value.assignments.length > 1) { return value.assignments.map((_, index) => { @@ -25,27 +24,27 @@ function createAssignments(value?: PolkadotRuntimeParachainsAssignerCoretimeWork } else { return `${ratio}% Task: ${value.assignments[index][0].asTask.toString()}`; } - }).join(', ') + }).join(', '); } else { if (value.assignments[0][0].isIdle) { - return '100% Idle' + return '100% Idle'; } else if (value.assignments[0][0].isPool) { - return '100% Pool' + return '100% Pool'; } else { - return `100% Task: ${value.assignments[0][0].asTask.toString()}` + return `100% Task: ${value.assignments[0][0].asTask.toString()}`; } } } else { - return 'Queue empty' + return 'Queue empty'; } } -function CurrentWork({ value }: Props): React.ReactElement { +function CurrentWork ({ value }: Props): React.ReactElement { const [assignments, setAssignments] = useState(''); useEffect(() => { - setAssignments(createAssignments(value)) - }, []); + setAssignments(createAssignments(value)); + }, [value]); const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ ['current work'] @@ -57,7 +56,7 @@ function CurrentWork({ value }: Props): React.ReactElement { {assignments} - ) + ); } export default React.memo(CurrentWork); From 1652b82f8a3f94f9ff16f2acc91da960f791d856 Mon Sep 17 00:00:00 2001 From: bee344 Date: Mon, 24 Jun 2024 09:43:07 -0300 Subject: [PATCH 40/56] updated version --- packages/page-broker/package.json | 6 +++--- packages/page-coretime/package.json | 6 +++--- yarn.lock | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/page-broker/package.json b/packages/page-broker/package.json index d0bcb7184a62..502f16bb0205 100644 --- a/packages/page-broker/package.json +++ b/packages/page-broker/package.json @@ -14,10 +14,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.138.2-14-x", + "version": "0.139.2-0-x", "dependencies": { - "@polkadot/react-components": "0.138.2-14-x", - "@polkadot/react-query": "0.138.2-14-x" + "@polkadot/react-components": "0.139.2-0-x", + "@polkadot/react-query": "0.139.2-0-x" }, "peerDependencies": { "react": "*", diff --git a/packages/page-coretime/package.json b/packages/page-coretime/package.json index 9f5f5a6c6144..559709411513 100644 --- a/packages/page-coretime/package.json +++ b/packages/page-coretime/package.json @@ -14,10 +14,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.138.2-14-x", + "version": "0.139.2-0-x", "dependencies": { - "@polkadot/react-components": "0.138.2-14-x", - "@polkadot/react-query": "0.138.2-14-x" + "@polkadot/react-components": "0.139.2-0-x", + "@polkadot/react-query": "0.139.2-0-x" }, "peerDependencies": { "react": "*", diff --git a/yarn.lock b/yarn.lock index ca6fc7988202..8e435c4b6c0f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1291,8 +1291,8 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-broker@workspace:packages/page-broker" dependencies: - "@polkadot/react-components": "npm:0.138.2-14-x" - "@polkadot/react-query": "npm:0.138.2-14-x" + "@polkadot/react-components": "npm:0.139.2-0-x" + "@polkadot/react-query": "npm:0.139.2-0-x" peerDependencies: react: "*" react-dom: "*" @@ -1352,8 +1352,8 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-coretime@workspace:packages/page-coretime" dependencies: - "@polkadot/react-components": "npm:0.138.2-14-x" - "@polkadot/react-query": "npm:0.138.2-14-x" + "@polkadot/react-components": "npm:0.139.2-0-x" + "@polkadot/react-query": "npm:0.139.2-0-x" peerDependencies: react: "*" react-dom: "*" @@ -2092,7 +2092,7 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/react-components@npm:^0.139.2-0-x, @polkadot/react-components@workspace:packages/react-components": +"@polkadot/react-components@npm:0.139.2-0-x, @polkadot/react-components@npm:^0.139.2-0-x, @polkadot/react-components@workspace:packages/react-components": version: 0.0.0-use.local resolution: "@polkadot/react-components@workspace:packages/react-components" dependencies: @@ -2215,7 +2215,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-query@npm:^0.139.2-0-x, @polkadot/react-query@workspace:packages/react-query": +"@polkadot/react-query@npm:0.139.2-0-x, @polkadot/react-query@npm:^0.139.2-0-x, @polkadot/react-query@workspace:packages/react-query": version: 0.0.0-use.local resolution: "@polkadot/react-query@workspace:packages/react-query" peerDependencies: From d0037064f1e9959da9299b75bd8ac61b7848bdfa Mon Sep 17 00:00:00 2001 From: tarikgul Date: Tue, 16 Jul 2024 14:13:56 -0400 Subject: [PATCH 41/56] Fix Header on table --- .../src/Overview/CoreDescriptor.tsx | 54 +++++++++++-------- .../src/Overview/CoreDescriptors.tsx | 44 ++++++++++++--- 2 files changed, 69 insertions(+), 29 deletions(-) diff --git a/packages/page-coretime/src/Overview/CoreDescriptor.tsx b/packages/page-coretime/src/Overview/CoreDescriptor.tsx index 35862652abaf..822b2a76445f 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptor.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptor.tsx @@ -6,7 +6,7 @@ import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@p import React from 'react'; -import { Table } from '@polkadot/react-components'; +import { styled } from '@polkadot/react-components'; import CoreQueue from './CoreQueue.js'; import CurrentWork from './CurrentWork.js'; @@ -27,28 +27,40 @@ function CoreDescriptor ({ value: { core, info } }: Props): React.ReactElement

- - {sanitized?.map((i) => ( - - - - )) - } - {sanitized?.map((i) => ( - - - - ))} + + {sanitized?.map((i) => ( + + + + )) + } + {sanitized?.map((i) => ( + + + + ))} + ); } +const StyledTr = styled.tr` + .shortHash { + max-width: var(--width-shorthash); + min-width: 3em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: var(--width-shorthash); + } +`; + export default React.memo(CoreDescriptor); diff --git a/packages/page-coretime/src/Overview/CoreDescriptors.tsx b/packages/page-coretime/src/Overview/CoreDescriptors.tsx index 0afad2a508f6..d7aee496568d 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptors.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptors.tsx @@ -3,9 +3,10 @@ import type { CoreDescription } from '@polkadot/react-hooks/types'; -import React, { useRef } from 'react'; +import React, { useMemo } from 'react'; -import { Table } from '@polkadot/react-components'; +import { ExpandButton, Table } from '@polkadot/react-components'; +import { useToggle } from '@polkadot/react-hooks'; import { useTranslation } from '../translate.js'; import CoreDescriptor from './CoreDescriptor.js'; @@ -17,18 +18,45 @@ interface Props { function CoreDescriptors ({ className, coreInfos }: Props): React.ReactElement { const { t } = useTranslation(); + const [isExpanded, toggleExpanded] = useToggle(); + const trackName = 'core' +; - const headerRef = useRef<([React.ReactNode?, string?, number?] | false)[]>([ - [t('core'), 'start', 1], - [], - [] - ]); + const [headerButton, headerChildren] = useMemo( + () => [ + false && coreInfos && ( + + ), + isExpanded && coreInfos && ( + + + + ) + ], + [isExpanded, toggleExpanded, coreInfos] + ); + + const [header, key] = useMemo( + (): [([React.ReactNode?, string?, number?] | null)[], string] => [ + [ + [trackName ? <>{trackName}

{coreInfos?.core}
: t('core'), 'start', 8], + null && [headerButton] + ], + trackName + ], + [headerButton, t, coreInfos, trackName] + ); return ( {coreInfos && }
From 47381de98e93c1e389c99b96a1f7b2a4e5e4113b Mon Sep 17 00:00:00 2001 From: tarikgul Date: Wed, 17 Jul 2024 15:05:05 -0400 Subject: [PATCH 42/56] Small nit around naming --- packages/page-coretime/src/Overview/CoreDescriptor.tsx | 4 ++-- .../page-coretime/src/Overview/CoreDescriptors.tsx | 10 ++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/page-coretime/src/Overview/CoreDescriptor.tsx b/packages/page-coretime/src/Overview/CoreDescriptor.tsx index 822b2a76445f..339fa4db7d3f 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptor.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptor.tsx @@ -16,7 +16,7 @@ interface Props { value: CoreDescription; } -function CoreDescriptor ({ value: { core, info } }: Props): React.ReactElement { +function CoreDescriptor ({ value: { core, info }, className }: Props): React.ReactElement { let sanitized: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[] = []; if (Array.isArray(info)) { @@ -27,7 +27,7 @@ function CoreDescriptor ({ value: { core, info } }: Props): React.ReactElement

- + {sanitized?.map((i) => ( { const { t } = useTranslation(); const [isExpanded, toggleExpanded] = useToggle(); - const trackName = 'core' -; const [headerButton, headerChildren] = useMemo( () => [ @@ -42,12 +40,12 @@ function CoreDescriptors ({ className, coreInfos }: Props): React.ReactElement

[ [ - [trackName ? <>{trackName}

{coreInfos?.core}
: t('core'), 'start', 8], + [<>{t('core')}
{coreInfos?.core}
, 'start', 8], null && [headerButton] ], - trackName + 'core' ], - [headerButton, t, coreInfos, trackName] + [headerButton, t, coreInfos] ); return ( @@ -58,7 +56,7 @@ function CoreDescriptors ({ className, coreInfos }: Props): React.ReactElement

- {coreInfos && } + {coreInfos && } ); } From 60da07a31c2797accb08f98fdcf36f5975d426f6 Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Fri, 16 Aug 2024 18:11:58 +0800 Subject: [PATCH 43/56] Usage bar console err fix: NaN --- packages/react-components/src/UsageBar.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-components/src/UsageBar.tsx b/packages/react-components/src/UsageBar.tsx index fa1d51d0a60b..526dfb1dad59 100644 --- a/packages/react-components/src/UsageBar.tsx +++ b/packages/react-components/src/UsageBar.tsx @@ -70,8 +70,8 @@ function UsageBar ({ apiEndpoint, coreDescriptors, info }: Props): React.ReactEl } const total = tasks + idles + pools; - const taskPerc = (tasks / total) * 100; - const poolPerc = (pools / total) * 100; + const taskPerc = !!total ? (tasks / total) * 100 : 0; + const poolPerc = !!total ? (pools / total) * 100 : 0; const taskOffset = (taskPerc / 100) * 360; const poolOffset = taskOffset + (poolPerc / 100) * 360; From 47c17e3369c69c3bbe4ff3037610d2a0c5652398 Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Mon, 2 Sep 2024 18:16:24 +0800 Subject: [PATCH 44/56] rearranged the layout for page broker on Coretime chain, changed UsageBar element to be more generic --- .../page-broker/src/Overview/CoreTable.tsx | 35 ++- .../page-broker/src/Overview/CoresTables.tsx | 58 ++--- packages/page-broker/src/Overview/Summary.tsx | 38 +++- .../page-broker/src/Overview/WorkInfoRow.tsx | 63 ++++++ .../page-broker/src/Overview/Workload.tsx | 96 ++++---- .../page-broker/src/Overview/Workloads.tsx | 44 ---- .../page-broker/src/Overview/Workplan.tsx | 90 +++----- .../page-broker/src/Overview/Workplans.tsx | 53 ----- packages/page-broker/src/Overview/index.tsx | 18 +- packages/page-broker/src/types.ts | 14 ++ packages/page-broker/src/utils.ts | 94 ++++++++ packages/react-components/src/UsageBar.tsx | 214 +++++++----------- packages/react-hooks/src/types.ts | 9 + packages/react-hooks/src/useRegions.ts | 10 +- 14 files changed, 437 insertions(+), 399 deletions(-) create mode 100644 packages/page-broker/src/Overview/WorkInfoRow.tsx delete mode 100644 packages/page-broker/src/Overview/Workloads.tsx delete mode 100644 packages/page-broker/src/Overview/Workplans.tsx create mode 100644 packages/page-broker/src/types.ts diff --git a/packages/page-broker/src/Overview/CoreTable.tsx b/packages/page-broker/src/Overview/CoreTable.tsx index ed71eaa3bbdc..e4da59f814c8 100644 --- a/packages/page-broker/src/Overview/CoreTable.tsx +++ b/packages/page-broker/src/Overview/CoreTable.tsx @@ -9,12 +9,11 @@ import React, { useRef } from 'react'; import { Table } from '@polkadot/react-components'; import { useTranslation } from '../translate.js'; -import Workloads from './Workloads.js'; -import Workplans from './Workplans.js'; +import Workload from './Workload.js'; interface Props { api: ApiPromise; - core?: number; + core: number; workload?: CoreWorkloadInfo[], workplan?: CoreWorkplanInfo[], timeslice: number, @@ -22,31 +21,25 @@ interface Props { function CoreTable ({ api, core, timeslice, workload, workplan }: Props): React.ReactElement { const { t } = useTranslation(); - - const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ - [t('core')], - [], - [] - ]); + const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([[t('core')]]); + const header = [[

{headerRef.current} {core + 1}
, 'core', 8]]; return ( - - - + ))}
- ( + - - -
); } diff --git a/packages/page-broker/src/Overview/CoresTables.tsx b/packages/page-broker/src/Overview/CoresTables.tsx index 74d84d347ece..666b8373e421 100644 --- a/packages/page-broker/src/Overview/CoresTables.tsx +++ b/packages/page-broker/src/Overview/CoresTables.tsx @@ -6,6 +6,7 @@ import type { CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/t import React from 'react'; +import { sortByCore } from '../utils.js'; import CoreTable from './CoreTable.js'; interface Props { @@ -16,55 +17,44 @@ interface Props { timeslice: number; } +interface CoreInfo { + core: number, + workload: CoreWorkloadInfo[], + workplan: CoreWorkplanInfo[] +} + function CoresTable ({ api, cores, timeslice, workloadInfos, workplanInfos }: Props): React.ReactElement { const coreArr = []; + const sanitizedLoad: CoreWorkloadInfo[] = sortByCore(workloadInfos); + const sanitizedPlan: CoreWorkplanInfo[] = sortByCore(workplanInfos); - let sanitizedWorkloadInfos: CoreWorkloadInfo[] = []; - let sanitizedWorkplanInfos: CoreWorkplanInfo[] = []; - - if (Array.isArray(workloadInfos)) { - sanitizedWorkloadInfos = workloadInfos; - } else if (workloadInfos) { - sanitizedWorkloadInfos.push(workloadInfos); - } - - if (Array.isArray(workplanInfos)) { - sanitizedWorkplanInfos = workplanInfos; - } else if (workplanInfos) { - sanitizedWorkplanInfos.push(workplanInfos); - } - - sanitizedWorkloadInfos?.sort((a, b) => a.core - b.core); - sanitizedWorkplanInfos?.sort((a, b) => a.core - b.core); - - if (cores === -1) { - for (let core = 0; core < sanitizedWorkloadInfos?.length; core++) { - coreArr.push(core); - } + if (cores === -1 && !!sanitizedLoad) { + coreArr.push(...sanitizedPlan.map((_, index) => index)); } else if (cores !== undefined) { coreArr.push(cores); } - const filteredList: [number, CoreWorkloadInfo[], CoreWorkplanInfo[]][] = []; - - coreArr.forEach((c) => { - filteredList.push([c, sanitizedWorkloadInfos.filter((v) => v.core === c), sanitizedWorkplanInfos.filter((v) => v.core === c)]); - }); + const filteredList: CoreInfo[] = coreArr.map((c) => ({ + core: c, + workload: sanitizedLoad.filter((v) => v.core === c), + workplan: sanitizedPlan.filter((v) => v.core === c) + })); return ( <> { - filteredList.map((c) => - ( + filteredList.map((c) => { + return ( - ) + ); + } ) } diff --git a/packages/page-broker/src/Overview/Summary.tsx b/packages/page-broker/src/Overview/Summary.tsx index 6ed70910badd..0c2aee612fda 100644 --- a/packages/page-broker/src/Overview/Summary.tsx +++ b/packages/page-broker/src/Overview/Summary.tsx @@ -7,7 +7,7 @@ import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; import React from 'react'; import { CardSummary, SummaryBox, UsageBar } from '@polkadot/react-components'; -import { useApi, useCurrentPrice, useRenewalBump } from '@polkadot/react-hooks'; +import { useApi, useBrokerStatus, useCurrentPrice, useRenewalBump } from '@polkadot/react-hooks'; import { useTranslation } from '../translate.js'; import Cores from './Cores.js'; @@ -21,11 +21,38 @@ interface Props { workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo } -function Summary ({ apiEndpoint, workloadInfos }: Props): React.ReactElement { +interface statsType { + idles: number, + pools: number, + tasks: number +} + +function Summary ({ workloadInfos }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); const renewalBump = useRenewalBump(); const currentPrice = useCurrentPrice(); + const totalCores = useBrokerStatus('coreCount'); + + const { idles, pools, tasks }: statsType = React.useMemo(() => { + if (!totalCores || !workloadInfos) { + return { idles: 0, pools: 0, tasks: 0 }; + } + + let [idles, pools, tasks] = [0, 0, 0]; + const sanitized: CoreWorkloadInfo[] = Array.isArray(workloadInfos) ? workloadInfos : [workloadInfos]; + + sanitized.forEach((v) => { + if (v.info[0].assignment.isTask) { + ++tasks; + } else if (v.info[0].assignment.isPool) { + ++pools; + } + }); + idles = Number(totalCores) - (pools + tasks); + + return { idles, pools, tasks }; + }, [totalCores, workloadInfos]); return ( @@ -54,8 +81,11 @@ function Summary ({ apiEndpoint, workloadInfos }: Props): React.ReactElement { )}
diff --git a/packages/page-broker/src/Overview/WorkInfoRow.tsx b/packages/page-broker/src/Overview/WorkInfoRow.tsx new file mode 100644 index 000000000000..37878f5596f8 --- /dev/null +++ b/packages/page-broker/src/Overview/WorkInfoRow.tsx @@ -0,0 +1,63 @@ +// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { InfoRow } from '../types.js'; + +import React from 'react'; + +import { AddressMini } from '@polkadot/react-components'; + +const TableCol = ({ className, header, value }: { header: string, value: string | number | null | undefined, className?: React.CSSProperties}) => + +
{header}
+

{value}

+ ; + +function WorkInfoRow ({ data }: {data: InfoRow}): React.ReactElement { + const NoTaskAssigned = !data.taskId; + + if (NoTaskAssigned) { + return ( + <> + no task assigned + + ); + } + + return ( + <> + + +
{'Block/timeslice'}
+
{data.maskBits}
+ + + + + {!!data.owner && + <> +
{'Owner'}
+ } + + + ); +} + +export default React.memo(WorkInfoRow); diff --git a/packages/page-broker/src/Overview/Workload.tsx b/packages/page-broker/src/Overview/Workload.tsx index 2435336274f4..ced59d2788a5 100644 --- a/packages/page-broker/src/Overview/Workload.tsx +++ b/packages/page-broker/src/Overview/Workload.tsx @@ -2,78 +2,82 @@ // SPDX-License-Identifier: Apache-2.0 import type { ApiPromise } from '@polkadot/api'; -import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; -import type { PalletBrokerCoretimeInterfaceCoreAssignment } from '@polkadot/types/lookup'; +import type { CoreWorkloadInfo, CoreWorkplanInfo, RegionInfo } from '@polkadot/react-hooks/types'; +import type { InfoRow } from '../types.js'; -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { ExpandButton } from '@polkadot/react-components'; import { useRegions, useToggle } from '@polkadot/react-hooks'; -import { hexToBin } from '../utils.js'; +import { formatWorkInfo } from '../utils.js'; +import WorkInfoRow from './WorkInfoRow.js'; +import Workplan from './Workplan.js'; interface Props { api: ApiPromise; value: CoreWorkloadInfo; timeslice: number; + workplan?: CoreWorkplanInfo[] | null, } -function Workload ({ api, timeslice, value: { core, info } }: Props): React.ReactElement { +function Workload ({ api, timeslice, value: { core, info }, workplan }: Props): React.ReactElement { const [isExpanded, toggleIsExpanded] = useToggle(false); - - const infoVec: [PalletBrokerCoretimeInterfaceCoreAssignment, number][] = []; - + const [tableData, setTableData] = useState(); + const [currentRegion, setCurrentRegion] = useState(); const regionInfo = useRegions(api); - regionInfo?.filter((v) => v.core === core && v.start >= timeslice && v.mask === info[0].mask.toHex()); - - info.forEach((data) => { - const trimmedHex: string = data.mask.toHex().slice(2); - const arr: string[] = trimmedHex.split(''); - const buffArr: string[] = []; + useEffect(() => { + if (info) { + const region = regionInfo?.find((v) => v.core === core && v.start <= timeslice && v.end > timeslice); - arr.forEach((bit) => { - hexToBin(bit).split('').forEach((v) => buffArr.push(v)); - }); - buffArr.filter((v) => v === '1'); - infoVec.push([data.assignment, buffArr.length / 80 * 100]); - }); + setTableData(formatWorkInfo(info, core, region, timeslice)); + setCurrentRegion(region); + } + }, [info, regionInfo, core, timeslice]); - const needsExpansion = infoVec.length > 1; + const hasWorkplan = !!workplan?.length; return ( <> { - infoVec.map((data, index) => ( - - -
{'Assignment'}
- {data[0].isTask ? data[0].asTask.toString() : data[0].toString()} - - -
{'Mask'}
- {`${data[1]}%`} - - {needsExpansion && index === 1 && - ( + + + +
Workplan ({hasWorkplan})
+ {hasWorkplan && + (} - {isExpanded && - - -
{'Lease start'}
- {regionInfo?.[0].start.toString()} - - -
{'Lease end'}
- {regionInfo?.[0].end.toString()} - - - } + />) + } + {!hasWorkplan && 'none'} + )) } + {isExpanded && + <> + + workplans + + + {workplan?.map((workplanInfo) => ( + + ))} + + + } ); } diff --git a/packages/page-broker/src/Overview/Workloads.tsx b/packages/page-broker/src/Overview/Workloads.tsx deleted file mode 100644 index c120f0861e15..000000000000 --- a/packages/page-broker/src/Overview/Workloads.tsx +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2017-2024 @polkadot/app-broker authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -import type { ApiPromise } from '@polkadot/api'; -import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; - -import React, { useRef } from 'react'; - -import { Table } from '@polkadot/react-components'; - -import Workload from './Workload.js'; - -interface Props { - api: ApiPromise; - workloadInfos?: CoreWorkloadInfo[]; - timeslice: number; -} - -function Workloads ({ api, timeslice, workloadInfos }: Props): React.ReactElement { - const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ - ['workloads'], - [] - ]); - - return ( -
- - {workloadInfos?.map((v) => ( - - ))} -
-
- ); -} - -export default React.memo(Workloads); diff --git a/packages/page-broker/src/Overview/Workplan.tsx b/packages/page-broker/src/Overview/Workplan.tsx index 174a06e669aa..ea21cd45fcbc 100644 --- a/packages/page-broker/src/Overview/Workplan.tsx +++ b/packages/page-broker/src/Overview/Workplan.tsx @@ -2,75 +2,57 @@ // SPDX-License-Identifier: Apache-2.0 import type { ApiPromise } from '@polkadot/api'; -import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; -import type { PalletBrokerCoretimeInterfaceCoreAssignment } from '@polkadot/types/lookup'; +import type { CoreWorkplanInfo, RegionInfo } from '@polkadot/react-hooks/types'; +import type { InfoRow } from '../types.js'; -import React from 'react'; +import React, { useEffect, useState } from 'react'; -import { ExpandButton } from '@polkadot/react-components'; -import { useRegions, useToggle } from '@polkadot/react-hooks'; +import { Spinner } from '@polkadot/react-components'; -import { hexToBin } from '../utils.js'; +import { formatWorkInfo } from '../utils.js'; +import WorkInfoRow from './WorkInfoRow.js'; interface Props { className?: string; api: ApiPromise; value: CoreWorkplanInfo; + currentTimeSlice: number + isExpanded: boolean + region: RegionInfo } -function Workplan ({ api, value: { core, info, timeslice } }: Props): React.ReactElement { - const [isExpanded, toggleIsExpanded] = useToggle(false); - const infoVec: [PalletBrokerCoretimeInterfaceCoreAssignment, number][] = []; - - info.forEach((data) => { - const trimmedHex: string = data.mask.toHex().slice(2); - const arr: string[] = trimmedHex.split(''); - const buffArr: string[] = []; - - arr.forEach((bit) => { - hexToBin(bit).split('').forEach((v) => buffArr.push(v)); - }); - buffArr.filter((v) => v === '1'); - infoVec.push([data.assignment, buffArr.length / 80 * 100]); - }); - - const needsExpansion = infoVec.length > 1; - - const regionInfo = useRegions(api); - - regionInfo?.filter((v) => v.core === core && v.start >= timeslice); +function Workplan ({ currentTimeSlice, isExpanded, region, value: { core, info } }: Props): React.ReactElement { + const [tableData, setTableData] = useState(); + + useEffect(() => { + setTableData(formatWorkInfo(info, core, region, currentTimeSlice)); + }, [info, region, core, currentTimeSlice]); + + if (!tableData?.length) { + return ( + + + + + ); + } return ( <> - {infoVec.map((data, index) => ( - - -
{'Assignment'}
- {data[0].isTask ? data[0].asTask.toString() : data[0].toString()} - - -
{'Mask'}
- {`${data[1]}%`} - - {needsExpansion && index === 1 && - } - {isExpanded && - - -
{'Lease start'}
- {regionInfo?.[0].start.toString()} - - -
{'Lease end'}
- {regionInfo?.[0].end.toString()} - - - } + {tableData?.map((data) => ( + + + ))} + ); } diff --git a/packages/page-broker/src/Overview/Workplans.tsx b/packages/page-broker/src/Overview/Workplans.tsx deleted file mode 100644 index a7aba968e254..000000000000 --- a/packages/page-broker/src/Overview/Workplans.tsx +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2017-2024 @polkadot/app-broker authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -import type { ApiPromise } from '@polkadot/api'; -import type { CoreWorkplanInfo } from '@polkadot/react-hooks/types'; - -import React, { useRef } from 'react'; - -import { Table } from '@polkadot/react-components'; - -import Workplan from './Workplan.js'; - -interface Props { - className?: string; - api: ApiPromise; - workplanInfos?: CoreWorkplanInfo[] | CoreWorkplanInfo; -} - -function Workplans ({ api, workplanInfos }: Props): React.ReactElement { - const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([ - ['workplans'], - [] - ]); - - let sanitized: CoreWorkplanInfo[] = []; - - if (Array.isArray(workplanInfos)) { - sanitized = workplanInfos; - } else if (workplanInfos) { - sanitized.push(workplanInfos); - } - - sanitized?.sort((a, b) => a.core - b.core); - - return ( -
- - {sanitized?.map((workplanInfo) => ( - - ))} -
-
- ); -} - -export default React.memo(Workplans); diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index 28bd4f6dfe84..ef2a67ae3794 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -8,7 +8,7 @@ import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; import React, { useEffect, useMemo, useState } from 'react'; -import { Button, Dropdown } from '@polkadot/react-components'; +import { Dropdown, Input } from '@polkadot/react-components'; import { useCall } from '@polkadot/react-hooks'; import { useTranslation } from '../translate.js'; @@ -28,10 +28,10 @@ interface Props { function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workplanInfos }: Props): React.ReactElement { const { t } = useTranslation(); const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); + const [parachainId, setParachainId] = useState(''); const [coreArr, setCoreArr] = useState([]); useEffect(() => { - // Your coreArr initialization logic goes here const newCoreArr = Array.from({ length: workloadInfos?.length || 0 }, (_, index) => index); setCoreArr(newCoreArr); @@ -42,7 +42,7 @@ function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workpl coreArr .map((c) => ( { - text: `Core ${c}`, + text: `Core ${c + 1}`, value: c } )) @@ -79,7 +79,7 @@ function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workpl apiEndpoint={apiEndpoint} workloadInfos={workloadInfos} > - +
- + + +
{ + hexToBin(bit).split('').forEach((v) => buffArr.push(v)); + }); + buffArr.filter((v) => v === '1'); + + return buffArr; +} + +function formatDate (date: Date) { + const day = date.getDate(); + const month = date.toLocaleString('default', { month: 'long' }); + const year = date.getFullYear(); + + return `${day} ${month} ${year}`; +} + +export const estimateTime = (targetBlock: string, latestBlock: number, timestamp: number): string | null => { + if (!timestamp || !latestBlock || !targetBlock) { + console.error('Invalid input: one or more inputs are missing'); + + return null; + } + + try { + const blockTime = new BN(6000); // Average block time in milliseconds (6 seconds) + const timeSlice = new BN(80); + const targetBlockBN = new BN(targetBlock).mul(timeSlice); + const latestBlockBN = new BN(latestBlock); + const timestampBN = new BN(timestamp); + const blockDifference = targetBlockBN.sub((latestBlockBN)).abs().mul(blockTime); + + let estTimestamp; + + if (targetBlockBN.lt(latestBlockBN)) { + estTimestamp = timestampBN.sub(blockDifference); + } else { + estTimestamp = timestampBN.add(blockDifference); + } + + return formatDate(new Date(estTimestamp.toNumber())); + } catch (error) { + console.error('Error in calculation:', error); + + return null; + } +}; + +export function sortByCore (dataArray?: T | T[]): T[] { + if (!dataArray) { + return []; + } + + const sanitized = Array.isArray(dataArray) ? dataArray : [dataArray]; + + return sanitized.sort((a, b) => a.core - b.core); +} + +export function formatWorkInfo (info: PalletBrokerScheduleItem[], core: number, currentRegion: RegionInfo, timeslice: number) { + const infoVec: InfoRow[] = []; + + info.forEach((data) => { + const maskBits: number = processHexMask(data.mask).length; + const isPool = data?.assignment.isPool; + const taskId = data?.assignment.isTask ? data?.assignment.asTask.toString() : isPool ? 'Pool' : ''; + const item: InfoRow = { core, maskBits, taskId }; + + if (currentRegion) { + const start = currentRegion?.start?.toString() ?? 0; + const end = currentRegion?.end?.toString() ?? 0; + const blockNumber = timeslice * 80; + + item.start = estimateTime(start, blockNumber, new Date().getTime()); + item.end = estimateTime(end, blockNumber, new Date().getTime()); + item.endBlock = Number(end) * 80; + item.owner = currentRegion?.owner.toString(); + } + + infoVec.push(item); + }); + + return infoVec; +} diff --git a/packages/react-components/src/UsageBar.tsx b/packages/react-components/src/UsageBar.tsx index 526dfb1dad59..19a79609a75d 100644 --- a/packages/react-components/src/UsageBar.tsx +++ b/packages/react-components/src/UsageBar.tsx @@ -1,146 +1,102 @@ -// Copyright 2017-2024 @polkadot/app-broker authors & contributors +// Copyright 2017-2024 @polkadot/app-coretime authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; -import type { CoreDescription, CoreWorkloadInfo } from '@polkadot/react-hooks/types'; -import type { PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor } from '@polkadot/types/lookup'; - import React from 'react'; -interface Props { - info?: CoreWorkloadInfo[] | CoreWorkloadInfo; - apiEndpoint?: LinkOption | null; - coreDescriptors?: CoreDescription[]; +import { styled } from '@polkadot/react-components'; + +interface PieChartProps { + data: { label: string; value: number; color: string }[]; } -function UsageBar ({ apiEndpoint, coreDescriptors, info }: Props): React.ReactElement { - const color = apiEndpoint?.ui.color ? apiEndpoint?.ui.color : '#f19135'; +const Container = styled.div` + display: flex; + align-items: center; +`; + +const GraphContainer = styled.div` + position: relative; +`; + +const LegendContainer = styled.div` + display: flex; + flex-direction: column; + margin-left: 20px; +`; + +const LegendItem = styled.div` + display: flex; + align-items: center; + margin-bottom: 10px; +`; + +const ColorBox = styled.div<{ color: string }>` + width: 20px; + height: 20px; + background-color: ${(props: {color: string}) => props.color}; + margin-right: 10px; +`; + +function UsageBar ({ data }: PieChartProps): React.ReactElement { const radius = 50; const strokeWidth = 15; const circumference = 2 * Math.PI * radius; - let tasks = 0; - let idles = 0; - let pools = 0; - - if (coreDescriptors) { - coreDescriptors.forEach((description) => { - let sanitized: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[] = []; - - if (Array.isArray(description.info)) { - sanitized = description.info; - } else if (description.info) { - sanitized.push(description.info); - } - - sanitized.forEach((i) => { - const info = i.currentWork.unwrapOr(undefined); - - if (info) { - info.assignments.forEach((_, index) => { - if (info.assignments[index][0].isIdle) { - idles++; - } else if (info.assignments[index][0].isPool) { - pools++; - } else { - tasks++; - } - }); - } - }); - }); - } else { - let sanitized: CoreWorkloadInfo[] = []; + const total = data.reduce((acc, item) => acc + item.value, 0); - if (Array.isArray(info)) { - sanitized = info; - } else if (info) { - sanitized.push(info); - } - - sanitized?.forEach((v) => { - if (v.info[0].assignment.isTask) { - ++tasks; - } else if (v.info[0].assignment.isPool) { - ++pools; - } else { - ++idles; - } - }); - } - - const total = tasks + idles + pools; - const taskPerc = !!total ? (tasks / total) * 100 : 0; - const poolPerc = !!total ? (pools / total) * 100 : 0; - - const taskOffset = (taskPerc / 100) * 360; - const poolOffset = taskOffset + (poolPerc / 100) * 360; + let cumulativeOffset = 0; return ( -
- - - usage - + + - Tasks assignment: {taskPerc.toFixed(2)}% - - - Pool assignment: {poolPerc.toFixed(2)}% - - - Idle assignment: {(100 - taskPerc - poolPerc).toFixed(2)}% - - -
- + + {data.map((item, index) => { + const percentage = (item.value / total) * 100; + const dashArray = (percentage / 100) * circumference; + const dashOffset = (cumulativeOffset / 100) * circumference; + + cumulativeOffset += percentage; + + return ( + + {`${item.label}: ${percentage.toFixed(2)}%`} + + ); + })} + + + + {data.map((item, index) => ( + + + {`${item.label}: ${((item.value / total) * 100).toFixed(2)}%`} + + ))} + + ); } diff --git a/packages/react-hooks/src/types.ts b/packages/react-hooks/src/types.ts index 34868f258406..9f8d41e97b14 100644 --- a/packages/react-hooks/src/types.ts +++ b/packages/react-hooks/src/types.ts @@ -238,3 +238,12 @@ export interface CoreWorkplanInfo { core: number; info: PalletBrokerScheduleItem[]; } + +export interface RegionInfo { + core: number, + start: number, + end: number, + owner: string, + paid: string, + mask: `0x${string}` +} diff --git a/packages/react-hooks/src/useRegions.ts b/packages/react-hooks/src/useRegions.ts index 08d84ab9f701..302378b2addf 100644 --- a/packages/react-hooks/src/useRegions.ts +++ b/packages/react-hooks/src/useRegions.ts @@ -4,20 +4,12 @@ import type { ApiPromise } from '@polkadot/api'; import type { Option, StorageKey } from '@polkadot/types'; import type { PalletBrokerRegionId, PalletBrokerRegionRecord } from '@polkadot/types/lookup'; +import type { RegionInfo } from './types.js'; import { useEffect, useState } from 'react'; import { createNamedHook, useCall, useMapKeys } from '@polkadot/react-hooks'; -interface RegionInfo { - core: number, - start: number, - end: number, - owner: string, - paid: string, - mask: `0x${string}` -} - function extractInfo (core: number, start: number, end: number, owner: string, paid: string, mask: `0x${string}`) { return { core, From 12fda8d7d24693c3da71fe8dbaf6dd6aa5e2ca77 Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Tue, 3 Sep 2024 20:55:15 +0800 Subject: [PATCH 45/56] filtering parachains by id --- .../page-broker/src/Overview/CoreTable.tsx | 2 +- .../page-broker/src/Overview/CoresTables.tsx | 2 +- .../page-broker/src/Overview/WorkInfoRow.tsx | 2 +- .../page-broker/src/Overview/Workload.tsx | 4 +- .../page-broker/src/Overview/Workplan.tsx | 4 +- packages/page-broker/src/Overview/index.tsx | 73 ++++++++++++------- 6 files changed, 53 insertions(+), 34 deletions(-) diff --git a/packages/page-broker/src/Overview/CoreTable.tsx b/packages/page-broker/src/Overview/CoreTable.tsx index e4da59f814c8..dc8490cf0695 100644 --- a/packages/page-broker/src/Overview/CoreTable.tsx +++ b/packages/page-broker/src/Overview/CoreTable.tsx @@ -22,7 +22,7 @@ interface Props { function CoreTable ({ api, core, timeslice, workload, workplan }: Props): React.ReactElement { const { t } = useTranslation(); const headerRef = useRef<([React.ReactNode?, string?] | false)[]>([[t('core')]]); - const header = [[
{headerRef.current} {core + 1}
, 'core', 8]]; + const header = [[
{headerRef.current} {core}
, 'core', 8]]; return ( index)); + coreArr.push(...sanitizedLoad.map((plan) => plan.core)); } else if (cores !== undefined) { coreArr.push(cores); } diff --git a/packages/page-broker/src/Overview/WorkInfoRow.tsx b/packages/page-broker/src/Overview/WorkInfoRow.tsx index 37878f5596f8..c8c6028e7195 100644 --- a/packages/page-broker/src/Overview/WorkInfoRow.tsx +++ b/packages/page-broker/src/Overview/WorkInfoRow.tsx @@ -10,7 +10,7 @@ import { AddressMini } from '@polkadot/react-components'; const TableCol = ({ className, header, value }: { header: string, value: string | number | null | undefined, className?: React.CSSProperties}) => ; function WorkInfoRow ({ data }: {data: InfoRow}): React.ReactElement { diff --git a/packages/page-broker/src/Overview/Workload.tsx b/packages/page-broker/src/Overview/Workload.tsx index ced59d2788a5..3780e30df66d 100644 --- a/packages/page-broker/src/Overview/Workload.tsx +++ b/packages/page-broker/src/Overview/Workload.tsx @@ -29,7 +29,7 @@ function Workload ({ api, timeslice, value: { core, info }, workplan }: Props): useEffect(() => { if (info) { - const region = regionInfo?.find((v) => v.core === core && v.start <= timeslice && v.end > timeslice); + const region: RegionInfo | undefined = regionInfo?.find((v) => v.core === core && v.start <= timeslice && v.end > timeslice); setTableData(formatWorkInfo(info, core, region, timeslice)); setCurrentRegion(region); @@ -48,7 +48,7 @@ function Workload ({ api, timeslice, value: { core, info }, workplan }: Props): > ; +

{value || <> }

+ +); -function WorkInfoRow ({ data }: {data: InfoRow}): React.ReactElement { +function WorkInfoRow({ data }: { data: InfoRow }): React.ReactElement { const NoTaskAssigned = !data.taskId; if (NoTaskAssigned) { @@ -27,35 +49,35 @@ function WorkInfoRow ({ data }: {data: InfoRow}): React.ReactElement { return ( <> - + /> + - + /> :

 

} + ); } diff --git a/packages/page-broker/src/Overview/Workload.tsx b/packages/page-broker/src/Overview/Workload.tsx index 3780e30df66d..46fb05a708b1 100644 --- a/packages/page-broker/src/Overview/Workload.tsx +++ b/packages/page-broker/src/Overview/Workload.tsx @@ -48,7 +48,7 @@ function Workload ({ api, timeslice, value: { core, info }, workplan }: Props): > - + {workplan?.map((workplanInfo) => ( diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index 8ca869dd4183..c1e823abd0cd 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -8,13 +8,21 @@ import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; import React, { useEffect, useMemo, useState } from 'react'; -import { Dropdown, Input } from '@polkadot/react-components'; +import { Dropdown, Input, styled } from '@polkadot/react-components'; import { useCall, useDebounce } from '@polkadot/react-hooks'; import { useTranslation } from '../translate.js'; import CoresTable from './CoresTables.js'; import Summary from './Summary.js'; +const StyledDiv = styled.div` + @media (max-width: 768px) { + display: flex; + flex-direction: column; + margin-bottom: 1rem; + } +`; + interface Props { className?: string; workloadInfos?: CoreWorkloadInfo[]; @@ -94,7 +102,7 @@ function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workpl apiEndpoint={apiEndpoint} workloadInfos={workloadInfos} > -
+
- - + (dataArray?: T | T[]): T[ if (!dataArray) { return []; } + const sanitized = Array.isArray(dataArray) ? dataArray : [dataArray]; + return sanitized.sort((a, b) => a.core - b.core); } From dac3a519d99e920cc860ea9567950513969a4f06 Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Wed, 4 Sep 2024 20:14:59 +0800 Subject: [PATCH 53/56] version updates for react-components and react-query --- packages/page-broker/package.json | 6 +- packages/page-coretime/package.json | 6 +- yarn.lock | 2028 ++------------------------- 3 files changed, 98 insertions(+), 1942 deletions(-) diff --git a/packages/page-broker/package.json b/packages/page-broker/package.json index 502f16bb0205..7e7783a4572d 100644 --- a/packages/page-broker/package.json +++ b/packages/page-broker/package.json @@ -14,10 +14,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.139.2-0-x", + "version": "0.143.3-11-x", "dependencies": { - "@polkadot/react-components": "0.139.2-0-x", - "@polkadot/react-query": "0.139.2-0-x" + "@polkadot/react-components": "0.143.3-11-x", + "@polkadot/react-query": "0.143.3-11-x" }, "peerDependencies": { "react": "*", diff --git a/packages/page-coretime/package.json b/packages/page-coretime/package.json index 559709411513..8a1dc22e3620 100644 --- a/packages/page-coretime/package.json +++ b/packages/page-coretime/package.json @@ -14,10 +14,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.139.2-0-x", + "version": "0.143.3-11-x", "dependencies": { - "@polkadot/react-components": "0.139.2-0-x", - "@polkadot/react-query": "0.139.2-0-x" + "@polkadot/react-components": "0.143.3-11-x", + "@polkadot/react-query": "0.143.3-11-x" }, "peerDependencies": { "react": "*", diff --git a/yarn.lock b/yarn.lock index 3f15659c3bff..07cb2401ef57 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,6 +1,9 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + __metadata: version: 8 - cacheKey: merged + cacheKey: 10 "7zip-bin@npm:~5.2.0": version: 5.2.0 @@ -16,29 +19,6 @@ __metadata: languageName: node linkType: hard -"@acala-network/chopsticks-core@npm:^0.10.0": - version: 0.10.0 - resolution: "@acala-network/chopsticks-core@npm:0.10.0" - dependencies: - "@acala-network/chopsticks-executor": "npm:0.10.0" - "@polkadot/rpc-provider": "npm:^10.11.2" - "@polkadot/types": "npm:^10.11.2" - "@polkadot/types-codec": "npm:^10.11.2" - "@polkadot/types-known": "npm:^10.11.2" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - comlink: "npm:^4.4.1" - eventemitter3: "npm:^5.0.1" - lodash: "npm:^4.17.21" - lru-cache: "npm:^10.2.0" - pino: "npm:^8.19.0" - pino-pretty: "npm:^11.0.0" - rxjs: "npm:^7.8.1" - zod: "npm:^3.22.4" - checksum: 10/2fcf74c0208b0431124c1a5633e3e14ba6eb341135a91aca4ebd82b18ef1415b80c4335cb46e9c298fbf3e7113c1cf568568b6a056f460880370428cd53cecde - languageName: node - linkType: hard - "@acala-network/chopsticks-core@npm:^0.13.3": version: 0.13.3 resolution: "@acala-network/chopsticks-core@npm:0.13.3" @@ -62,16 +42,6 @@ __metadata: languageName: node linkType: hard -"@acala-network/chopsticks-executor@npm:0.10.0": - version: 0.10.0 - resolution: "@acala-network/chopsticks-executor@npm:0.10.0" - dependencies: - "@polkadot/util": "npm:^12.6.2" - "@polkadot/wasm-util": "npm:^7.3.2" - checksum: 10/0c209dc01eb10f20dbb2e6492a0c78c8ecc2820839ded693f65402de7a7ab3cd8f84d0de42dac3e733fcca5c468ad6cf8c8453848e27468906313e6bda626734 - languageName: node - linkType: hard - "@acala-network/chopsticks-executor@npm:0.13.3": version: 0.13.3 resolution: "@acala-network/chopsticks-executor@npm:0.13.3" @@ -613,13 +583,6 @@ __metadata: languageName: node linkType: hard -"@kiltprotocol/type-definitions@npm:0.35.1": - version: 0.35.1 - resolution: "@kiltprotocol/type-definitions@npm:0.35.1" - checksum: 10/8534af75e75e72a812ae2265e00292c3103735ec77b03df765ab9aa3ae47062203f684aa7d0b6ca7e0c2ce13835ecd72a74aeb2e53bf0ff14f0f03a1b2f9fdbe - languageName: node - linkType: hard - "@kiltprotocol/type-definitions@npm:^1.11200.0": version: 1.11200.0 resolution: "@kiltprotocol/type-definitions@npm:1.11200.0" @@ -645,18 +608,6 @@ __metadata: languageName: node linkType: hard -"@ledgerhq/devices@npm:^8.2.0": - version: 8.2.0 - resolution: "@ledgerhq/devices@npm:8.2.0" - dependencies: - "@ledgerhq/errors": "npm:^6.16.1" - "@ledgerhq/logs": "npm:^6.12.0" - rxjs: "npm:^7.8.1" - semver: "npm:^7.3.5" - checksum: 10/41603caa54398cddb734f6ea753f4aa81bda0ae7f293769a04c44103f5f0b3489132143026cc575cc125c55815a6b3e6a7a2f5b5aa96295881e7e6b95b35e45d - languageName: node - linkType: hard - "@ledgerhq/devices@npm:^8.3.0, @ledgerhq/devices@npm:^8.4.0": version: 8.4.0 resolution: "@ledgerhq/devices@npm:8.4.0" @@ -669,13 +620,6 @@ __metadata: languageName: node linkType: hard -"@ledgerhq/errors@npm:^6.16.1": - version: 6.16.1 - resolution: "@ledgerhq/errors@npm:6.16.1" - checksum: 10/0d098e709c70cc52841bc13da7b6c6556a3f19321dc5aed9586d01290bb0698e7ed7ad3c292c43640156a5d33d63da2ea29962201e7f63da1f32df8092a2a548 - languageName: node - linkType: hard - "@ledgerhq/errors@npm:^6.16.4, @ledgerhq/errors@npm:^6.17.0": version: 6.17.0 resolution: "@ledgerhq/errors@npm:6.17.0" @@ -683,19 +627,6 @@ __metadata: languageName: node linkType: hard -"@ledgerhq/hw-transport-node-hid-noevents@npm:^6.29.1": - version: 6.29.1 - resolution: "@ledgerhq/hw-transport-node-hid-noevents@npm:6.29.1" - dependencies: - "@ledgerhq/devices": "npm:^8.2.0" - "@ledgerhq/errors": "npm:^6.16.1" - "@ledgerhq/hw-transport": "npm:^6.30.1" - "@ledgerhq/logs": "npm:^6.12.0" - node-hid: "npm:^2.1.2" - checksum: 10/7a940f911d163542134ecb8e615f8c28da5411627f6a4737402d07d87b30600b3b89ed56c0f688b058badf826a032af5980284285985a223bbb88df38477d974 - languageName: node - linkType: hard - "@ledgerhq/hw-transport-node-hid-noevents@npm:^6.30.1": version: 6.30.1 resolution: "@ledgerhq/hw-transport-node-hid-noevents@npm:6.30.1" @@ -709,21 +640,6 @@ __metadata: languageName: node linkType: hard -"@ledgerhq/hw-transport-node-hid-singleton@npm:^6.30.1": - version: 6.30.1 - resolution: "@ledgerhq/hw-transport-node-hid-singleton@npm:6.30.1" - dependencies: - "@ledgerhq/devices": "npm:^8.2.0" - "@ledgerhq/errors": "npm:^6.16.1" - "@ledgerhq/hw-transport": "npm:^6.30.1" - "@ledgerhq/hw-transport-node-hid-noevents": "npm:^6.29.1" - "@ledgerhq/logs": "npm:^6.12.0" - node-hid: "npm:^2.1.2" - usb: "npm:2.9.0" - checksum: 10/a1e8298ce0ed8f029d246ed53a6e2f530133aeec79a304810332bbe0a2040d12f37b0b7311e3931c3b96d610f9477fdf6d3e37ec1d62f487f149d7ed68a5f47d - languageName: node - linkType: hard - "@ledgerhq/hw-transport-node-hid-singleton@npm:^6.31.1": version: 6.31.1 resolution: "@ledgerhq/hw-transport-node-hid-singleton@npm:6.31.1" @@ -739,18 +655,6 @@ __metadata: languageName: node linkType: hard -"@ledgerhq/hw-transport-webhid@npm:^6.28.1": - version: 6.28.1 - resolution: "@ledgerhq/hw-transport-webhid@npm:6.28.1" - dependencies: - "@ledgerhq/devices": "npm:^8.2.0" - "@ledgerhq/errors": "npm:^6.16.1" - "@ledgerhq/hw-transport": "npm:^6.30.1" - "@ledgerhq/logs": "npm:^6.12.0" - checksum: 10/4ccfe10366662d60a5404fad4f35dcc0da61d0f4b4d1dedf97bb3d2143fc095358ac8cbc462b4b88bf0f411bbadbcddf113ebe0b6167ef9080a12f7eec5cb68d - languageName: node - linkType: hard - "@ledgerhq/hw-transport-webhid@npm:^6.29.0": version: 6.29.0 resolution: "@ledgerhq/hw-transport-webhid@npm:6.29.0" @@ -763,18 +667,6 @@ __metadata: languageName: node linkType: hard -"@ledgerhq/hw-transport-webusb@npm:^6.28.1": - version: 6.28.1 - resolution: "@ledgerhq/hw-transport-webusb@npm:6.28.1" - dependencies: - "@ledgerhq/devices": "npm:^8.2.0" - "@ledgerhq/errors": "npm:^6.16.1" - "@ledgerhq/hw-transport": "npm:^6.30.1" - "@ledgerhq/logs": "npm:^6.12.0" - checksum: 10/9fa938e0a054afec245af7357a42567522295e202344574ec70ce0edd6a819b38aaee2ea0e7fba46d81ce8c92a937e7263e4a9d567da6de11977b2f91bf3dcd8 - languageName: node - linkType: hard - "@ledgerhq/hw-transport-webusb@npm:^6.29.0": version: 6.29.0 resolution: "@ledgerhq/hw-transport-webusb@npm:6.29.0" @@ -811,18 +703,6 @@ __metadata: languageName: node linkType: hard -"@ledgerhq/hw-transport@npm:^6.27.1, @ledgerhq/hw-transport@npm:^6.30.1": - version: 6.30.1 - resolution: "@ledgerhq/hw-transport@npm:6.30.1" - dependencies: - "@ledgerhq/devices": "npm:^8.2.0" - "@ledgerhq/errors": "npm:^6.16.1" - "@ledgerhq/logs": "npm:^6.12.0" - events: "npm:^3.3.0" - checksum: 10/347881563193cd29faa4a9eb8b01a62ecfbb9cdba1b074a84943f60d7e101c63c5cddb3f346333d5e7b25293add1c94dc82a7d322c11e21d1024815828cbc18b - languageName: node - linkType: hard - "@ledgerhq/logs@npm:^6.12.0": version: 6.12.0 resolution: "@ledgerhq/logs@npm:6.12.0" @@ -952,13 +832,6 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:^1.2.0, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.3": - version: 1.4.0 - resolution: "@noble/hashes@npm:1.4.0" - checksum: 10/e156e65794c473794c52fa9d06baf1eb20903d0d96719530f523cc4450f6c721a957c544796e6efd0197b2296e7cd70efeb312f861465e17940a3e3c7e0febc6 - languageName: node - linkType: hard - "@noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.3, @noble/hashes@npm:^1.4.0": version: 1.4.0 resolution: "@noble/hashes@npm:1.4.0" @@ -1206,13 +1079,6 @@ __metadata: languageName: node linkType: hard -"@polkadot-api/json-rpc-provider-proxy@npm:0.0.1": - version: 0.0.1 - resolution: "@polkadot-api/json-rpc-provider-proxy@npm:0.0.1" - checksum: 10/6ee0916504ab702ac40eb1f983c21246738c1cd8624b35886a075430271800543d32ba5a7f9e6a0cb078880f9756db1bdc83cb86c42b39d326e780a8cf9bf22a - languageName: node - linkType: hard - "@polkadot-api/json-rpc-provider-proxy@npm:^0.1.0": version: 0.1.0 resolution: "@polkadot-api/json-rpc-provider-proxy@npm:0.1.0" @@ -1220,13 +1086,6 @@ __metadata: languageName: node linkType: hard -"@polkadot-api/json-rpc-provider@npm:0.0.1": - version: 0.0.1 - resolution: "@polkadot-api/json-rpc-provider@npm:0.0.1" - checksum: 10/1f315bdadcba7def7145011132e6127b983c6f91f976be217ad7d555bb96a67f3a270fe4a46e427531822c5d54d353d84a6439d112a99cdfc07013d3b662ee3c - languageName: node - linkType: hard - "@polkadot-api/json-rpc-provider@npm:0.0.1, @polkadot-api/json-rpc-provider@npm:^0.0.1": version: 0.0.1 resolution: "@polkadot-api/json-rpc-provider@npm:0.0.1" @@ -1244,16 +1103,6 @@ __metadata: languageName: node linkType: hard -"@polkadot-api/metadata-builders@npm:0.0.1": - version: 0.0.1 - resolution: "@polkadot-api/metadata-builders@npm:0.0.1" - dependencies: - "@polkadot-api/substrate-bindings": "npm:0.0.1" - "@polkadot-api/utils": "npm:0.0.1" - checksum: 10/e7bf0ad10cbddf75012eaaa1b30060fb1eb142c02f7dfd8edc5a1d78a40ef078b09c85d36bf9f2ac4ab309970ba01dc648ef46745412b006e62e4ddf4f334339 - languageName: node - linkType: hard - "@polkadot-api/metadata-builders@npm:0.3.2": version: 0.3.2 resolution: "@polkadot-api/metadata-builders@npm:0.3.2" @@ -1264,20 +1113,6 @@ __metadata: languageName: node linkType: hard -"@polkadot-api/observable-client@npm:0.1.0": - version: 0.1.0 - resolution: "@polkadot-api/observable-client@npm:0.1.0" - dependencies: - "@polkadot-api/metadata-builders": "npm:0.0.1" - "@polkadot-api/substrate-bindings": "npm:0.0.1" - "@polkadot-api/substrate-client": "npm:0.0.1" - "@polkadot-api/utils": "npm:0.0.1" - peerDependencies: - rxjs: ">=7.8.0" - checksum: 10/822b4b24e8b2522fa2b0d88d68d098862d36e9ef285dba7468a6ac9084a37670ef0782a9b8a00c2c4d5510a0af90b3611ea097f530bdad1b07bef63234341bf5 - languageName: node - linkType: hard - "@polkadot-api/observable-client@npm:^0.3.0": version: 0.3.2 resolution: "@polkadot-api/observable-client@npm:0.3.2" @@ -1292,18 +1127,6 @@ __metadata: languageName: node linkType: hard -"@polkadot-api/substrate-bindings@npm:0.0.1": - version: 0.0.1 - resolution: "@polkadot-api/substrate-bindings@npm:0.0.1" - dependencies: - "@noble/hashes": "npm:^1.3.1" - "@polkadot-api/utils": "npm:0.0.1" - "@scure/base": "npm:^1.1.1" - scale-ts: "npm:^1.6.0" - checksum: 10/9a1a70bd571f1cf262796b445c7a005b425e8e6f855b11757442c6bbe398d4a90575cd3973c9b1918202d3c7ff7162675c349c014677a31cc70cd84f7f973f90 - languageName: node - linkType: hard - "@polkadot-api/substrate-bindings@npm:0.6.0": version: 0.6.0 resolution: "@polkadot-api/substrate-bindings@npm:0.6.0" @@ -1328,13 +1151,6 @@ __metadata: languageName: node linkType: hard -"@polkadot-api/substrate-client@npm:0.0.1": - version: 0.0.1 - resolution: "@polkadot-api/substrate-client@npm:0.0.1" - checksum: 10/a00521dbda6e87a2d0e860c1608dc164269c62748d60a51326452d3573abfa1d01ed79644f103f1d989c49e8c61169ed04b155d466ec9e6f09f6e424572dea48 - languageName: node - linkType: hard - "@polkadot-api/substrate-client@npm:^0.1.2": version: 0.1.4 resolution: "@polkadot-api/substrate-client@npm:0.1.4" @@ -1345,13 +1161,6 @@ __metadata: languageName: node linkType: hard -"@polkadot-api/utils@npm:0.0.1": - version: 0.0.1 - resolution: "@polkadot-api/utils@npm:0.0.1" - checksum: 10/4bf89955ccf4dafb2ef34f007fc0a12bd6d983a10c4219464a6b1c07e7bfe80ff26f156fa201b3f11ad53adca0abb261fc7ee43b86dcdc10fa0f5325788359ae - languageName: node - linkType: hard - "@polkadot-api/utils@npm:0.1.0": version: 0.1.0 resolution: "@polkadot-api/utils@npm:0.1.0" @@ -1366,21 +1175,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-augment@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/api-augment@npm:11.3.1" - dependencies: - "@polkadot/api-base": "npm:11.3.1" - "@polkadot/rpc-augment": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-augment": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - tslib: "npm:^2.6.2" - checksum: 10/d07c33f41ef60203519e9db3ab964195607ca2b6a87e73eee4f1d2dfa8bc4d1fa78d01665a9adc0455a14ee6a5eb7547cfa1c596ce579788594c03b76d175c30 - languageName: node - linkType: hard - "@polkadot/api-augment@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/api-augment@npm:12.4.2" @@ -1396,19 +1190,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-base@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/api-base@npm:11.3.1" - dependencies: - "@polkadot/rpc-core": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - rxjs: "npm:^7.8.1" - tslib: "npm:^2.6.2" - checksum: 10/99db2a85af336045a6bee894d5bd073e2b17e6008f713fe20f0ddc135cc64435e0d1066c126b818a835a1592526be560455ed45d5aea6ed6b964d6bfb6538f62 - languageName: node - linkType: hard - "@polkadot/api-base@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/api-base@npm:12.4.2" @@ -1422,23 +1203,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-contract@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/api-contract@npm:11.3.1" - dependencies: - "@polkadot/api": "npm:11.3.1" - "@polkadot/api-augment": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/types-create": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - rxjs: "npm:^7.8.1" - tslib: "npm:^2.6.2" - checksum: 10/4a73734a848c36cbf3fc30313729ba4c563d5848dc87d1e21b581fa8b34d46bac3c284e2f99333fe420eb7810a09071e58ccdb91607d898a717240c5d5313231 - languageName: node - linkType: hard - "@polkadot/api-contract@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/api-contract@npm:12.4.2" @@ -1456,24 +1220,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-derive@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/api-derive@npm:11.3.1" - dependencies: - "@polkadot/api": "npm:11.3.1" - "@polkadot/api-augment": "npm:11.3.1" - "@polkadot/api-base": "npm:11.3.1" - "@polkadot/rpc-core": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - rxjs: "npm:^7.8.1" - tslib: "npm:^2.6.2" - checksum: 10/63b6b37426a4ed14383be14bb5551a61f7136293144d93e911025b33e577708934600d7602afa72cc4c61f10992bec4a20e9c91ef6ea3e1306fd0aad91e87b0d - languageName: node - linkType: hard - "@polkadot/api-derive@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/api-derive@npm:12.4.2" @@ -1492,31 +1238,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/api@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/api@npm:11.3.1" - dependencies: - "@polkadot/api-augment": "npm:11.3.1" - "@polkadot/api-base": "npm:11.3.1" - "@polkadot/api-derive": "npm:11.3.1" - "@polkadot/keyring": "npm:^12.6.2" - "@polkadot/rpc-augment": "npm:11.3.1" - "@polkadot/rpc-core": "npm:11.3.1" - "@polkadot/rpc-provider": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-augment": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/types-create": "npm:11.3.1" - "@polkadot/types-known": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - eventemitter3: "npm:^5.0.1" - rxjs: "npm:^7.8.1" - tslib: "npm:^2.6.2" - checksum: 10/db47b9673cd055fa4d942319f633cfcd04c463098b840464ab0aa986000a1bb4c70a4fc122434b14f53c00d87958fcf4d29ab395fc601dba84c0cbb84f2d7546 - languageName: node - linkType: hard - "@polkadot/api@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/api@npm:12.4.2" @@ -1546,20 +1267,19 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-accounts@workspace:packages/page-accounts" dependencies: - "@polkadot/hw-ledger": "npm:^12.6.2" - "@polkadot/phishing": "npm:^6" - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-hooks": "npm:^0.139.2-0-x" - "@polkadot/test-support": "npm:0.139.2-0-x" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/vanitygen": "npm:^0.56.12" + "@polkadot/hw-ledger": "npm:^13.0.2" + "@polkadot/phishing": "npm:^0.23.4" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-hooks": "npm:^0.143.3-11-x" + "@polkadot/test-support": "npm:0.143.3-11-x" + "@polkadot/util": "npm:^13.0.2" + "@polkadot/vanitygen": "npm:^0.57.4" detect-browser: "npm:^5.3.0" file-saver: "npm:^2.0.5" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1567,7 +1287,7 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-addresses@workspace:packages/page-addresses" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" "@testing-library/react": "npm:^14.1.2" file-saver: "npm:^2.0.5" testcontainers: "npm:^10.4.0" @@ -1575,7 +1295,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1586,7 +1305,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1597,7 +1315,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1605,12 +1322,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-assets@workspace:packages/page-assets" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1618,13 +1334,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-bounties@workspace:packages/page-bounties" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/test-support": "npm:0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/test-support": "npm:0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1632,13 +1347,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-broker@workspace:packages/page-broker" dependencies: - "@polkadot/react-components": "npm:0.139.2-0-x" - "@polkadot/react-query": "npm:0.139.2-0-x" + "@polkadot/react-components": "npm:0.143.3-11-x" + "@polkadot/react-query": "npm:0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1646,12 +1360,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-calendar@workspace:packages/page-calendar" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1659,13 +1372,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-claims@workspace:packages/page-claims" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" secp256k1: "npm:^3.8.0" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1676,7 +1388,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1684,13 +1395,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-contracts@workspace:packages/page-contracts" dependencies: - "@polkadot/api-contract": "npm:^11.3.1" + "@polkadot/api-contract": "npm:12.4.2" eventemitter3: "npm:^5.0.1" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1698,13 +1408,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-coretime@workspace:packages/page-coretime" dependencies: - "@polkadot/react-components": "npm:0.139.2-0-x" - "@polkadot/react-query": "npm:0.139.2-0-x" + "@polkadot/react-components": "npm:0.143.3-11-x" + "@polkadot/react-query": "npm:0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1712,13 +1421,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-council@workspace:packages/page-council" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-query": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-query": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1726,26 +1434,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-democracy@workspace:packages/page-democracy" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-query": "npm:^0.139.2-0-x" - peerDependencies: - react: "*" - react-dom: "*" - react-is: "*" - checksum: 10/undefined - languageName: unknown - linkType: soft - -"@polkadot/app-explorer@npm:^0.139.2-0-x, @polkadot/app-explorer@workspace:packages/page-explorer": - version: 0.0.0-use.local - resolution: "@polkadot/app-explorer@workspace:packages/page-explorer" - dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-query": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1758,7 +1452,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1766,14 +1459,13 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-extrinsics@workspace:packages/page-extrinsics" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-params": "npm:^0.139.2-0-x" - "@polkadot/react-signer": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-params": "npm:^0.143.3-11-x" + "@polkadot/react-signer": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1784,7 +1476,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1792,13 +1483,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-files@workspace:packages/page-files" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" axios: "npm:^1.6.2" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1806,12 +1496,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-gilt@workspace:packages/page-gilt" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1819,12 +1508,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-js@workspace:packages/page-js" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1832,13 +1520,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-membership@workspace:packages/page-membership" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-query": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-query": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1846,12 +1533,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-nfts@workspace:packages/page-nfts" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1859,12 +1545,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-nis@workspace:packages/page-nis" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1872,13 +1557,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-parachains@workspace:packages/page-parachains" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-query": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-query": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1886,12 +1570,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-poll@workspace:packages/page-poll" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1902,7 +1585,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1913,7 +1595,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1926,7 +1607,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1934,12 +1614,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-rpc@workspace:packages/page-rpc" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1947,12 +1626,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-runtime@workspace:packages/page-runtime" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1963,7 +1641,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1971,15 +1648,14 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-settings@workspace:packages/page-settings" dependencies: - "@polkadot/apps-config": "npm:^0.139.2-0-x" - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-query": "npm:^0.139.2-0-x" + "@polkadot/apps-config": "npm:^0.143.3-11-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-query": "npm:^0.143.3-11-x" query-string: "npm:^8.1.0" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -1987,12 +1663,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-signing@workspace:packages/page-signing" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2000,12 +1675,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-society@workspace:packages/page-society" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2013,14 +1687,13 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-staking-legacy@workspace:packages/page-staking-legacy" dependencies: - "@polkadot/app-explorer": "npm:^0.139.2-0-x" - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-query": "npm:^0.139.2-0-x" + "@polkadot/app-explorer": "npm:^0.143.3-11-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-query": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2031,7 +1704,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2039,14 +1711,13 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-staking@workspace:packages/page-staking" dependencies: - "@polkadot/app-explorer": "npm:^0.139.2-0-x" - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-query": "npm:^0.139.2-0-x" + "@polkadot/app-explorer": "npm:^0.143.3-11-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-query": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2054,13 +1725,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-storage@workspace:packages/page-storage" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-params": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-params": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2068,12 +1738,11 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-sudo@workspace:packages/page-sudo" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2081,13 +1750,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-tech-comm@workspace:packages/page-tech-comm" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-query": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-query": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2095,13 +1763,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-treasury@workspace:packages/page-treasury" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-query": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-query": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2109,13 +1776,12 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/app-utilities@workspace:packages/page-utilities" dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-params": "npm:^0.139.2-0-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-params": "npm:^0.143.3-11-x" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2126,61 +1792,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined - languageName: unknown - linkType: soft - -"@polkadot/apps-config@npm:^0.139.2-0-x, @polkadot/apps-config@workspace:packages/apps-config": - version: 0.0.0-use.local - resolution: "@polkadot/apps-config@workspace:packages/apps-config" - dependencies: - "@acala-network/type-definitions": "npm:5.1.2" - "@bifrost-finance/type-definitions": "npm:1.11.3" - "@crustio/type-definitions": "npm:1.3.0" - "@darwinia/types": "npm:2.8.10" - "@darwinia/types-known": "npm:2.8.10" - "@digitalnative/type-definitions": "npm:1.1.27" - "@docknetwork/node-types": "npm:0.16.0" - "@edgeware/node-types": "npm:3.6.2-wako" - "@equilab/definitions": "npm:1.4.18" - "@fragnova/api-augment": "npm:0.1.0-spec-1.0.4-mainnet" - "@frequency-chain/api-augment": "npm:1.11.1" - "@interlay/interbtc-types": "npm:1.13.0" - "@kiltprotocol/type-definitions": "npm:0.35.1" - "@laminar/type-definitions": "npm:0.3.1" - "@logion/node-api": "npm:0.27.0-4" - "@mangata-finance/type-definitions": "npm:^2.1.2" - "@metaverse-network-sdk/type-definitions": "npm:0.0.1-16" - "@parallel-finance/type-definitions": "npm:2.0.1" - "@peaqnetwork/type-definitions": "npm:0.0.4" - "@pendulum-chain/type-definitions": "npm:0.3.8" - "@phala/typedefs": "npm:0.2.33" - "@polkadot/api": "npm:^11.3.1" - "@polkadot/api-derive": "npm:^11.3.1" - "@polkadot/networks": "npm:^12.6.2" - "@polkadot/react-identicon": "npm:^3.6.6" - "@polkadot/types": "npm:^11.3.1" - "@polkadot/types-codec": "npm:^11.3.1" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - "@polkadot/wasm-util": "npm:^7.3.2" - "@polkadot/x-fetch": "npm:^12.6.2" - "@polkadot/x-ws": "npm:^12.6.2" - "@polymeshassociation/polymesh-types": "npm:5.7.0" - "@snowfork/snowbridge-types": "npm:0.2.7" - "@sora-substrate/type-definitions": "npm:1.27.7" - "@subsocial/definitions": "npm:0.8.14" - "@unique-nft/opal-testnet-types": "npm:1003.70.0" - "@unique-nft/quartz-mainnet-types": "npm:1003.70.0" - "@unique-nft/sapphire-mainnet-types": "npm:1003.70.0" - "@unique-nft/unique-mainnet-types": "npm:1001.63.0" - "@zeitgeistpm/type-defs": "npm:1.0.0" - "@zeroio/type-definitions": "npm:0.0.14" - moonbeam-types-bundle: "npm:2.0.10" - pontem-types-bundle: "npm:1.0.15" - rxjs: "npm:^7.8.1" - tslib: "npm:^2.6.2" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2234,7 +1845,6 @@ __metadata: pontem-types-bundle: "npm:1.0.15" rxjs: "npm:^7.8.1" tslib: "npm:^2.6.2" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2242,7 +1852,7 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/apps-electron@workspace:packages/apps-electron" dependencies: - "@polkadot/dev": "npm:^0.78.4" + "@polkadot/dev": "npm:^0.78.13" "@types/tmp": "npm:^0.2.6" copy-webpack-plugin: "npm:^11.0.0" electron: "npm:28.0.0" @@ -2254,18 +1864,6 @@ __metadata: tmp: "npm:^0.2.1" peerDependencies: webpack: "*" - checksum: 10/undefined - languageName: unknown - linkType: soft - -"@polkadot/apps-routing@npm:^0.139.2-0-x, @polkadot/apps-routing@workspace:packages/apps-routing": - version: 0.0.0-use.local - resolution: "@polkadot/apps-routing@workspace:packages/apps-routing" - peerDependencies: - react: "*" - react-dom: "*" - react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2276,7 +1874,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2284,16 +1881,16 @@ __metadata: version: 0.0.0-use.local resolution: "@polkadot/apps@workspace:packages/apps" dependencies: - "@acala-network/chopsticks-core": "npm:^0.10.0" - "@polkadot/apps-config": "npm:^0.139.2-0-x" - "@polkadot/apps-routing": "npm:^0.139.2-0-x" - "@polkadot/dev": "npm:^0.78.4" - "@polkadot/react-api": "npm:^0.139.2-0-x" - "@polkadot/react-components": "npm:^0.139.2-0-x" - "@polkadot/react-hooks": "npm:^0.139.2-0-x" - "@polkadot/react-params": "npm:^0.139.2-0-x" - "@polkadot/react-query": "npm:^0.139.2-0-x" - "@polkadot/react-signer": "npm:^0.139.2-0-x" + "@acala-network/chopsticks-core": "npm:^0.13.3" + "@polkadot/apps-config": "npm:^0.143.3-11-x" + "@polkadot/apps-routing": "npm:^0.143.3-11-x" + "@polkadot/dev": "npm:^0.78.13" + "@polkadot/react-api": "npm:^0.143.3-11-x" + "@polkadot/react-components": "npm:^0.143.3-11-x" + "@polkadot/react-hooks": "npm:^0.143.3-11-x" + "@polkadot/react-params": "npm:^0.143.3-11-x" + "@polkadot/react-query": "npm:^0.143.3-11-x" + "@polkadot/react-signer": "npm:^0.143.3-11-x" "@types/punycode": "npm:^2.1.3" assert: "npm:^2.1.0" buffer: "npm:^6.0.3" @@ -2318,7 +1915,6 @@ __metadata: peerDependencies: typescript: "*" webpack: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2332,16 +1928,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/dev-test@npm:^0.78.4": - version: 0.78.4 - resolution: "@polkadot/dev-test@npm:0.78.4" - dependencies: - jsdom: "npm:^23.0.1" - tslib: "npm:^2.6.2" - checksum: 10/9968b813c644e24f109d146811abc9bb147336f059110271c8253ad7a0d9aadc7d22ddcb8bbecea3c37ecddafe09cc98fc2c651feb7f551cffcf1f9911fe9d3b - languageName: node - linkType: hard - "@polkadot/dev-ts@npm:^0.78.13": version: 0.78.13 resolution: "@polkadot/dev-ts@npm:0.78.13" @@ -2353,17 +1939,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/dev-ts@npm:^0.78.4": - version: 0.78.4 - resolution: "@polkadot/dev-ts@npm:0.78.4" - dependencies: - json5: "npm:^2.2.3" - tslib: "npm:^2.6.2" - typescript: "npm:^5.3.3" - checksum: 10/ee495b9abe5e9d73262eb992eab1e9ff4fccf64fe26721b8d3c4078124908d2c82185aef99431f193db007c20229227a1bdfc0c0fcfff9e06106be2a31d3acb4 - languageName: node - linkType: hard - "@polkadot/dev@npm:^0.78.13": version: 0.78.13 resolution: "@polkadot/dev@npm:0.78.13" @@ -2439,101 +2014,9 @@ __metadata: languageName: node linkType: hard -"@polkadot/dev@npm:^0.78.4": - version: 0.78.4 - resolution: "@polkadot/dev@npm:0.78.4" - dependencies: - "@eslint/js": "npm:^8.56.0" - "@polkadot/dev-test": "npm:^0.78.4" - "@polkadot/dev-ts": "npm:^0.78.4" - "@rollup/plugin-alias": "npm:^5.1.0" - "@rollup/plugin-commonjs": "npm:^25.0.7" - "@rollup/plugin-dynamic-import-vars": "npm:^2.1.2" - "@rollup/plugin-inject": "npm:^5.0.5" - "@rollup/plugin-json": "npm:^6.1.0" - "@rollup/plugin-node-resolve": "npm:^15.2.3" - "@tsconfig/strictest": "npm:^2.0.2" - "@typescript-eslint/eslint-plugin": "npm:^6.14.0" - "@typescript-eslint/parser": "npm:^6.14.0" - eslint: "npm:^8.56.0" - eslint-config-standard: "npm:^17.1.0" - eslint-import-resolver-node: "npm:^0.3.9" - eslint-import-resolver-typescript: "npm:^3.6.1" - eslint-plugin-deprecation: "npm:^2.0.0" - eslint-plugin-header: "npm:^3.1.1" - eslint-plugin-import: "npm:^2.29.1" - eslint-plugin-import-newlines: "npm:^1.3.4" - eslint-plugin-jest: "npm:^27.6.0" - eslint-plugin-n: "npm:^16.4.0" - eslint-plugin-promise: "npm:^6.1.1" - eslint-plugin-react: "npm:^7.33.2" - eslint-plugin-react-hooks: "npm:^4.6.0" - eslint-plugin-simple-import-sort: "npm:^10.0.0" - eslint-plugin-sort-destructure-keys: "npm:^1.5.0" - espree: "npm:^9.6.1" - gh-pages: "npm:^6.1.0" - gh-release: "npm:^7.0.2" - globals: "npm:^13.24.0" - json5: "npm:^2.2.3" - madge: "npm:^6.1.0" - rollup: "npm:^4.9.1" - rollup-plugin-cleanup: "npm:^3.2.1" - tslib: "npm:^2.6.2" - typescript: "npm:^5.3.3" - webpack: "npm:^5.89.0" - webpack-cli: "npm:^5.1.4" - webpack-dev-server: "npm:^4.15.1" - webpack-merge: "npm:^5.10.0" - webpack-subresource-integrity: "npm:^5.2.0-rc.1" - yargs: "npm:^17.7.2" - bin: - polkadot-ci-ghact-build: scripts/polkadot-ci-ghact-build.mjs - polkadot-ci-ghact-docs: scripts/polkadot-ci-ghact-docs.mjs - polkadot-ci-ghpages-force: scripts/polkadot-ci-ghpages-force.mjs - polkadot-dev-build-docs: scripts/polkadot-dev-build-docs.mjs - polkadot-dev-build-ts: scripts/polkadot-dev-build-ts.mjs - polkadot-dev-circular: scripts/polkadot-dev-circular.mjs - polkadot-dev-clean-build: scripts/polkadot-dev-clean-build.mjs - polkadot-dev-contrib: scripts/polkadot-dev-contrib.mjs - polkadot-dev-copy-dir: scripts/polkadot-dev-copy-dir.mjs - polkadot-dev-copy-to: scripts/polkadot-dev-copy-to.mjs - polkadot-dev-deno-map: scripts/polkadot-dev-deno-map.mjs - polkadot-dev-run-lint: scripts/polkadot-dev-run-lint.mjs - polkadot-dev-run-node-ts: scripts/polkadot-dev-run-node-ts.mjs - polkadot-dev-run-test: scripts/polkadot-dev-run-test.mjs - polkadot-dev-version: scripts/polkadot-dev-version.mjs - polkadot-dev-yarn-only: scripts/polkadot-dev-yarn-only.mjs - polkadot-exec-eslint: scripts/polkadot-exec-eslint.mjs - polkadot-exec-ghpages: scripts/polkadot-exec-ghpages.mjs - polkadot-exec-ghrelease: scripts/polkadot-exec-ghrelease.mjs - polkadot-exec-node-test: scripts/polkadot-exec-node-test.mjs - polkadot-exec-rollup: scripts/polkadot-exec-rollup.mjs - polkadot-exec-tsc: scripts/polkadot-exec-tsc.mjs - polkadot-exec-webpack: scripts/polkadot-exec-webpack.mjs - checksum: 10/24bfb6022bfd2277234857a77429daecd842facfec3176890a4e159e09e508ec521574b2d10fe0910aac3d82d0f052702e9e5fda579513d114dc5176ed112f58 - languageName: node - linkType: hard - -"@polkadot/extension-compat-metamask@npm:^0.47.6": - version: 0.47.6 - resolution: "@polkadot/extension-compat-metamask@npm:0.47.6" - dependencies: - "@metamask/detect-provider": "npm:^2.0.0" - "@polkadot/extension-inject": "npm:0.47.6" - "@polkadot/types": "npm:^11.3.1" - "@polkadot/util": "npm:^12.6.2" - tslib: "npm:^2.6.2" - web3: "npm:^4.7.0" - peerDependencies: - "@polkadot/api": "*" - "@polkadot/util": "*" - checksum: 10/3eea1ce9deff1b51acfbe7d3e096494c424f8f9d6b918fceab988ba483ec81ebf282ef28a2660ff58aa35ab66f26cce15324633d43dc1b49931b473c07a00f44 - languageName: node - linkType: hard - -"@polkadot/extension-compat-metamask@npm:^0.52.3": - version: 0.52.3 - resolution: "@polkadot/extension-compat-metamask@npm:0.52.3" +"@polkadot/extension-compat-metamask@npm:^0.52.3": + version: 0.52.3 + resolution: "@polkadot/extension-compat-metamask@npm:0.52.3" dependencies: "@metamask/detect-provider": "npm:^2.0.0" "@polkadot/extension-inject": "npm:0.52.3" @@ -2548,22 +2031,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/extension-dapp@npm:^0.47.6": - version: 0.47.6 - resolution: "@polkadot/extension-dapp@npm:0.47.6" - dependencies: - "@polkadot/extension-inject": "npm:0.47.6" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - tslib: "npm:^2.6.2" - peerDependencies: - "@polkadot/api": "*" - "@polkadot/util": "*" - "@polkadot/util-crypto": "*" - checksum: 10/7b56add2d0b12ba1ec150136ff41ed58382e5205d28daf5dea314060868fb2a832491cbd6978cdea8c7310b00d4ef20a0ecbafc2047dabd4b8f023063c58849e - languageName: node - linkType: hard - "@polkadot/extension-dapp@npm:^0.52.3": version: 0.52.3 resolution: "@polkadot/extension-dapp@npm:0.52.3" @@ -2580,24 +2047,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/extension-inject@npm:0.47.6": - version: 0.47.6 - resolution: "@polkadot/extension-inject@npm:0.47.6" - dependencies: - "@polkadot/api": "npm:^11.3.1" - "@polkadot/rpc-provider": "npm:^11.3.1" - "@polkadot/types": "npm:^11.3.1" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - "@polkadot/x-global": "npm:^12.6.2" - tslib: "npm:^2.6.2" - peerDependencies: - "@polkadot/api": "*" - "@polkadot/util": "*" - checksum: 10/9ac6da3e8323b45a02c8ce176f81f75d72320c1395bc8c55ffa6b60377794ae125dd4a77f19329c7b2f3e9d7a0cdb9b74d803a2862597c6a66dd2349a3aff574 - languageName: node - linkType: hard - "@polkadot/extension-inject@npm:0.52.3": version: 0.52.3 resolution: "@polkadot/extension-inject@npm:0.52.3" @@ -2616,23 +2065,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/hw-ledger-transports@npm:12.6.2, @polkadot/hw-ledger-transports@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/hw-ledger-transports@npm:12.6.2" - dependencies: - "@ledgerhq/hw-transport": "npm:^6.30.1" - "@ledgerhq/hw-transport-node-hid-singleton": "npm:^6.30.1" - "@ledgerhq/hw-transport-webhid": "npm:^6.28.1" - "@ledgerhq/hw-transport-webusb": "npm:^6.28.1" - "@polkadot/util": "npm:12.6.2" - tslib: "npm:^2.6.2" - dependenciesMeta: - "@ledgerhq/hw-transport-node-hid-singleton": - optional: true - checksum: 10/601c64e2058ffad724dfbcc8d860832598bf1f91e72ebf9516e4a3cb22ba8154d8496801fb5d098bf10cb84ea43841bcccf7d5a3fdf5c39c624db352d94e5310 - languageName: node - linkType: hard - "@polkadot/hw-ledger-transports@npm:13.0.2, @polkadot/hw-ledger-transports@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/hw-ledger-transports@npm:13.0.2" @@ -2650,18 +2082,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/hw-ledger@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/hw-ledger@npm:12.6.2" - dependencies: - "@polkadot/hw-ledger-transports": "npm:12.6.2" - "@polkadot/util": "npm:12.6.2" - "@zondax/ledger-substrate": "npm:^0.41.3" - tslib: "npm:^2.6.2" - checksum: 10/47cf0e1638181e8d8b6a27092c3a4285b80138e58470617b6d5f319e0c3146afa51266dea082979736526202fb89bd8f6bf4f726a2b1c87ff79923cfcbe3724a - languageName: node - linkType: hard - "@polkadot/hw-ledger@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/hw-ledger@npm:13.0.2" @@ -2674,20 +2094,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/keyring@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/keyring@npm:12.6.2" - dependencies: - "@polkadot/util": "npm:12.6.2" - "@polkadot/util-crypto": "npm:12.6.2" - tslib: "npm:^2.6.2" - peerDependencies: - "@polkadot/util": 12.6.2 - "@polkadot/util-crypto": 12.6.2 - checksum: 10/8faf59684ff5d041ba5fa7dd85c3ee4ac3920b2d907f81a485e37aedab64798f9c59b7ec914eb24dfc5271a4ef31e1244aecbd247c66f2b2ec518cfd37dd30fc - languageName: node - linkType: hard - "@polkadot/keyring@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/keyring@npm:13.0.2" @@ -2702,17 +2108,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/networks@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/networks@npm:12.6.2" - dependencies: - "@polkadot/util": "npm:12.6.2" - "@substrate/ss58-registry": "npm:^1.44.0" - tslib: "npm:^2.6.2" - checksum: 10/6c2cd7f631ec40489e8f8260b15a138bd0d276d222e4133847e8915c476aea415498dd8d8ab583bdf76f2e4e5bb1c7a20bca9dac110eae2fb48d5f6cf6798349 - languageName: node - linkType: hard - "@polkadot/networks@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/networks@npm:13.0.2" @@ -2724,18 +2119,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/phishing@npm:^0.22.9": - version: 0.22.9 - resolution: "@polkadot/phishing@npm:0.22.9" - dependencies: - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - "@polkadot/x-fetch": "npm:^12.6.2" - tslib: "npm:^2.6.2" - checksum: 10/73badb3afffb5aefa307c9fe9258003a4f51b86b29eb4c0542837373aa2d5548d80c4c4f3f4e68109ed88594457164ee2f0778d809dab209e3915eaccf21d6b2 - languageName: node - linkType: hard - "@polkadot/phishing@npm:^0.23.4": version: 0.23.4 resolution: "@polkadot/phishing@npm:0.23.4" @@ -2748,24 +2131,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-api@npm:^0.139.2-0-x, @polkadot/react-api@workspace:packages/react-api": - version: 0.0.0-use.local - resolution: "@polkadot/react-api@workspace:packages/react-api" - dependencies: - "@polkadot/api": "npm:^11.3.1" - "@polkadot/extension-compat-metamask": "npm:^0.47.6" - "@polkadot/extension-dapp": "npm:^0.47.6" - "@polkadot/rpc-provider": "npm:^11.3.1" - fflate: "npm:^0.8.1" - rxjs: "npm:^7.8.1" - peerDependencies: - react: "*" - react-dom: "*" - react-is: "*" - checksum: 10/undefined - languageName: unknown - linkType: soft - "@polkadot/react-api@npm:^0.143.3-11-x, @polkadot/react-api@workspace:packages/react-api": version: 0.0.0-use.local resolution: "@polkadot/react-api@workspace:packages/react-api" @@ -2780,62 +2145,10 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft -"@polkadot/react-components@npm:0.139.2-0-x, @polkadot/react-components@npm:^0.139.2-0-x, @polkadot/react-components@workspace:packages/react-components": - version: 0.0.0-use.local - resolution: "@polkadot/react-components@workspace:packages/react-components" - dependencies: - "@fortawesome/fontawesome-svg-core": "npm:^6.5.1" - "@fortawesome/free-solid-svg-icons": "npm:^6.5.1" - "@fortawesome/react-fontawesome": "npm:^0.2.0" - "@polkadot/keyring": "npm:^12.6.2" - "@polkadot/react-api": "npm:^0.139.2-0-x" - "@polkadot/react-identicon": "npm:^3.6.6" - "@polkadot/react-qr": "npm:^3.6.6" - "@polkadot/react-query": "npm:^0.139.2-0-x" - "@polkadot/ui-keyring": "npm:^3.6.6" - "@polkadot/ui-settings": "npm:^3.6.6" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - "@types/chartjs-plugin-crosshair": "npm:^1.1.4" - "@types/codeflask": "npm:^1.4.6" - "@types/owasp-password-strength-test": "npm:^1.3.2" - "@types/react": "npm:^18.2.45" - "@types/react-dom": "npm:^18.2.18" - chart.js: "npm:^4.4.1" - chartjs-plugin-annotation: "npm:^3.0.1" - chartjs-plugin-crosshair: "npm:^2.0.0" - codeflask: "npm:^1.4.1" - i18next: "npm:^23.7.11" - i18next-browser-languagedetector: "npm:^7.2.0" - owasp-password-strength-test: "npm:^1.3.0" - react-beautiful-dnd: "npm:^13.1.1" - react-chartjs-2: "npm:^5.2.0" - react-copy-to-clipboard: "npm:^5.1.0" - react-dropzone: "npm:^14.2.3" - react-i18next: "npm:^13.5.0" - react-markdown: "npm:^9.0.1" - react-router: "npm:^6.21.0" - react-router-dom: "npm:^6.21.0" - react-tooltip: "npm:^4.5.1" - rehype-raw: "npm:^7.0.0" - semantic-ui-css: "npm:^2.5.0" - semantic-ui-react: "npm:^0.88.2" - store: "npm:^2.0.12" - styled-components: "npm:^6.1.1" - styled-theming: "npm:^2.2.0" - peerDependencies: - react: "*" - react-dom: "*" - react-is: "*" - checksum: 10/undefined - languageName: unknown - linkType: soft - -"@polkadot/react-components@npm:^0.143.3-11-x, @polkadot/react-components@workspace:packages/react-components": +"@polkadot/react-components@npm:0.143.3-11-x, @polkadot/react-components@npm:^0.143.3-11-x, @polkadot/react-components@workspace:packages/react-components": version: 0.0.0-use.local resolution: "@polkadot/react-components@workspace:packages/react-components" dependencies: @@ -2882,22 +2195,6 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined - languageName: unknown - linkType: soft - -"@polkadot/react-hooks@npm:^0.139.2-0-x, @polkadot/react-hooks@workspace:packages/react-hooks": - version: 0.0.0-use.local - resolution: "@polkadot/react-hooks@workspace:packages/react-hooks" - dependencies: - "@polkadot/hw-ledger": "npm:^12.6.2" - "@polkadot/hw-ledger-transports": "npm:^12.6.2" - is-ipfs: "npm:^8.0.1" - peerDependencies: - react: "*" - react-dom: "*" - react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -2912,35 +2209,9 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft -"@polkadot/react-identicon@npm:^3.6.6": - version: 3.6.6 - resolution: "@polkadot/react-identicon@npm:3.6.6" - dependencies: - "@polkadot/keyring": "npm:^12.6.2" - "@polkadot/ui-settings": "npm:3.6.6" - "@polkadot/ui-shared": "npm:3.6.6" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - ethereum-blockies-base64: "npm:^1.0.2" - jdenticon: "npm:3.2.0" - react-copy-to-clipboard: "npm:^5.1.0" - styled-components: "npm:^6.1.1" - tslib: "npm:^2.6.2" - peerDependencies: - "@polkadot/keyring": "*" - "@polkadot/util": "*" - "@polkadot/util-crypto": "*" - react: "*" - react-dom: "*" - react-is: "*" - checksum: 10/cb572c4eca49f0d248468be7a4820bffa260f7c3c92c15691df31209708197c82e3f1b675156067cc3a318d191678c96c678495551c724c3bb09677b06f02358 - languageName: node - linkType: hard - "@polkadot/react-identicon@npm:^3.9.1": version: 3.9.1 resolution: "@polkadot/react-identicon@npm:3.9.1" @@ -2966,20 +2237,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-params@npm:^0.139.2-0-x, @polkadot/react-params@workspace:packages/react-params": - version: 0.0.0-use.local - resolution: "@polkadot/react-params@workspace:packages/react-params" - dependencies: - "@polkadot/react-components": "npm:^0.139.2-0-x" - multiformats: "npm:^12.1.3" - peerDependencies: - react: "*" - react-dom: "*" - react-is: "*" - checksum: 10/undefined - languageName: unknown - linkType: soft - "@polkadot/react-params@npm:^0.143.3-11-x, @polkadot/react-params@workspace:packages/react-params": version: 0.0.0-use.local resolution: "@polkadot/react-params@workspace:packages/react-params" @@ -2990,31 +2247,9 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft -"@polkadot/react-qr@npm:^3.6.6": - version: 3.6.6 - resolution: "@polkadot/react-qr@npm:3.6.6" - dependencies: - "@polkadot/ui-settings": "npm:3.6.6" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - qrcode-generator: "npm:^1.4.4" - react-qr-reader: "npm:^2.2.1" - styled-components: "npm:^6.1.1" - tslib: "npm:^2.6.2" - peerDependencies: - "@polkadot/util": "*" - "@polkadot/util-crypto": "*" - react: "*" - react-dom: "*" - react-is: "*" - checksum: 10/39a896a29f556b5dbc89e1527ce808b59289d3992771c02704a8b9b87191823deb3aaaee480a8c0b73a6719243f3cbc6fc9a18d8f9abbb57b9a34f65758a3aa3 - languageName: node - linkType: hard - "@polkadot/react-qr@npm:^3.9.1": version: 3.9.1 resolution: "@polkadot/react-qr@npm:3.9.1" @@ -3037,39 +2272,13 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-query@npm:0.139.2-0-x, @polkadot/react-query@npm:^0.139.2-0-x, @polkadot/react-query@workspace:packages/react-query": - version: 0.0.0-use.local - resolution: "@polkadot/react-query@workspace:packages/react-query" - peerDependencies: - react: "*" - react-dom: "*" - react-is: "*" - checksum: 10/undefined - languageName: unknown - linkType: soft - -"@polkadot/react-query@npm:^0.143.3-11-x, @polkadot/react-query@workspace:packages/react-query": +"@polkadot/react-query@npm:0.143.3-11-x, @polkadot/react-query@npm:^0.143.3-11-x, @polkadot/react-query@workspace:packages/react-query": version: 0.0.0-use.local resolution: "@polkadot/react-query@workspace:packages/react-query" peerDependencies: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined - languageName: unknown - linkType: soft - -"@polkadot/react-signer@npm:^0.139.2-0-x, @polkadot/react-signer@workspace:packages/react-signer": - version: 0.0.0-use.local - resolution: "@polkadot/react-signer@workspace:packages/react-signer" - dependencies: - "@polkadot/hw-ledger": "npm:^12.6.2" - "@polkadot/react-components": "npm:^0.139.2-0-x" - peerDependencies: - react: "*" - react-dom: "*" - react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft @@ -3084,23 +2293,9 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft -"@polkadot/rpc-augment@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/rpc-augment@npm:11.3.1" - dependencies: - "@polkadot/rpc-core": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - tslib: "npm:^2.6.2" - checksum: 10/5bd0ce4f87e8db315508da93e17e6a052c324dd758656d606ea0660a20d12975e0b20e444e621e299d442f95da7025af1591d8abcb69e7d1a91d72d88d130619 - languageName: node - linkType: hard - "@polkadot/rpc-augment@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/rpc-augment@npm:12.4.2" @@ -3114,20 +2309,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/rpc-core@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/rpc-core@npm:11.3.1" - dependencies: - "@polkadot/rpc-augment": "npm:11.3.1" - "@polkadot/rpc-provider": "npm:11.3.1" - "@polkadot/types": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - rxjs: "npm:^7.8.1" - tslib: "npm:^2.6.2" - checksum: 10/476316f6d32c9e440bbdcd35a05b9a0b0febe1923c7568146466604f1b9c3ac252f2d2db13f0f39b263aa42d4c039e32c2d360122c3e065a1709e12ee99dd8bd - languageName: node - linkType: hard - "@polkadot/rpc-core@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/rpc-core@npm:12.4.2" @@ -3142,30 +2323,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/rpc-provider@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/rpc-provider@npm:11.3.1" - dependencies: - "@polkadot/keyring": "npm:^12.6.2" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-support": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - "@polkadot/x-fetch": "npm:^12.6.2" - "@polkadot/x-global": "npm:^12.6.2" - "@polkadot/x-ws": "npm:^12.6.2" - "@substrate/connect": "npm:0.8.10" - eventemitter3: "npm:^5.0.1" - mock-socket: "npm:^9.3.1" - nock: "npm:^13.5.0" - tslib: "npm:^2.6.2" - dependenciesMeta: - "@substrate/connect": - optional: true - checksum: 10/97fac8e9c4d089592a44462299124666557c1fff422e12933b6060068fe269b571838958c7945c2bc1fddaf7043be7c8d30fc70d0dbfeb10a61b8bbe92de5863 - languageName: node - linkType: hard - "@polkadot/rpc-provider@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/rpc-provider@npm:12.4.2" @@ -3190,23 +2347,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/test-support@npm:0.139.2-0-x, @polkadot/test-support@workspace:packages/test-support": - version: 0.0.0-use.local - resolution: "@polkadot/test-support@workspace:packages/test-support" - dependencies: - "@polkadot/types-support": "npm:^11.3.1" - "@testing-library/jest-dom": "npm:^5.17.0" - "@testing-library/react": "npm:^14.1.2" - testcontainers: "npm:^10.4.0" - tsconfig-paths: "npm:^4.2.0" - peerDependencies: - react: "*" - react-dom: "*" - react-is: "*" - checksum: 10/undefined - languageName: unknown - linkType: soft - "@polkadot/test-support@npm:0.143.3-11-x, @polkadot/test-support@workspace:packages/test-support": version: 0.0.0-use.local resolution: "@polkadot/test-support@workspace:packages/test-support" @@ -3220,22 +2360,9 @@ __metadata: react: "*" react-dom: "*" react-is: "*" - checksum: 10/undefined languageName: unknown linkType: soft -"@polkadot/types-augment@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/types-augment@npm:11.3.1" - dependencies: - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - tslib: "npm:^2.6.2" - checksum: 10/c30a44f1be20d5c1be61697de4e360e7b7a9cb889e4ec5f7e41b4aecc2b2aab1f05563ae8ba35f887a06327bcc9f567e4fcc1e775d278b251d40b0b29c9fb0fa - languageName: node - linkType: hard - "@polkadot/types-augment@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/types-augment@npm:12.4.2" @@ -3248,17 +2375,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/types-codec@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/types-codec@npm:11.3.1" - dependencies: - "@polkadot/util": "npm:^12.6.2" - "@polkadot/x-bigint": "npm:^12.6.2" - tslib: "npm:^2.6.2" - checksum: 10/0651b5cd99d4a36bcf356f0059cc2e3dc4371021aef60ebb6b2ad9d9aaec02aae485fa8a1c3f4e8c3fdac238db773c9cd1b9abac2836a124db0a2487521b87a1 - languageName: node - linkType: hard - "@polkadot/types-codec@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/types-codec@npm:12.4.2" @@ -3270,17 +2386,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/types-create@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/types-create@npm:11.3.1" - dependencies: - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - tslib: "npm:^2.6.2" - checksum: 10/51afd714da4cbc737255f731e3ade86a3e1fe59cea671f34f05df6e6a07bc1116e208e94d03002d84e69de859b962eda7d085cc9ebed64acbe9030eca1ceddca - languageName: node - linkType: hard - "@polkadot/types-create@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/types-create@npm:12.4.2" @@ -3292,20 +2397,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/types-known@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/types-known@npm:11.3.1" - dependencies: - "@polkadot/networks": "npm:^12.6.2" - "@polkadot/types": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/types-create": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - tslib: "npm:^2.6.2" - checksum: 10/46597dfc1926d4d92ff56dcded164f60825e19cf22479b7250bce37ddab18127643124039aaa2c68405af60c3494d3cf9ceaf73a74fa31a67e94853d4662b937 - languageName: node - linkType: hard - "@polkadot/types-known@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/types-known@npm:12.4.2" @@ -3320,16 +2411,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/types-support@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/types-support@npm:11.3.1" - dependencies: - "@polkadot/util": "npm:^12.6.2" - tslib: "npm:^2.6.2" - checksum: 10/0a1d7e89b25fcfb583cbfa6ef2fc147180d33d3e7d63f470bd94cf0968d0758e3aec5757ba85db293f425134787210969716a1a68f6c30c040b377e63dafe861 - languageName: node - linkType: hard - "@polkadot/types-support@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/types-support@npm:12.4.2" @@ -3340,22 +2421,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/types@npm:^11.3.1": - version: 11.3.1 - resolution: "@polkadot/types@npm:11.3.1" - dependencies: - "@polkadot/keyring": "npm:^12.6.2" - "@polkadot/types-augment": "npm:11.3.1" - "@polkadot/types-codec": "npm:11.3.1" - "@polkadot/types-create": "npm:11.3.1" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - rxjs: "npm:^7.8.1" - tslib: "npm:^2.6.2" - checksum: 10/86503edc80dd034173523f2adb3b948597a38f63458adecc59bd7af7ef637b323191b902899c8b5a494f0fe15b874595d644ade0c3b8a963e003460ebcc17ec6 - languageName: node - linkType: hard - "@polkadot/types@npm:^12.4.2": version: 12.4.2 resolution: "@polkadot/types@npm:12.4.2" @@ -3372,26 +2437,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/ui-keyring@npm:^3.6.6": - version: 3.6.6 - resolution: "@polkadot/ui-keyring@npm:3.6.6" - dependencies: - "@polkadot/keyring": "npm:^12.6.2" - "@polkadot/ui-settings": "npm:3.6.6" - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - mkdirp: "npm:^3.0.1" - rxjs: "npm:^7.8.1" - store: "npm:^2.0.12" - tslib: "npm:^2.6.2" - peerDependencies: - "@polkadot/keyring": "*" - "@polkadot/ui-settings": "*" - "@polkadot/util": "*" - checksum: 10/45460e9ccb3c3255b4c3967b2361a4bfec5bce428a870b26802c5d7dea9fdb2e40f48165ce28fbb2006bf63467c5c2f8036eb807c2cdc5dabd61e9c243f4d7dc - languageName: node - linkType: hard - "@polkadot/ui-keyring@npm:^3.9.1": version: 3.9.1 resolution: "@polkadot/ui-keyring@npm:3.9.1" @@ -3412,22 +2457,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/ui-settings@npm:3.6.6, @polkadot/ui-settings@npm:^3.6.6": - version: 3.6.6 - resolution: "@polkadot/ui-settings@npm:3.6.6" - dependencies: - "@polkadot/networks": "npm:^12.6.2" - "@polkadot/util": "npm:^12.6.2" - eventemitter3: "npm:^5.0.1" - store: "npm:^2.0.12" - tslib: "npm:^2.6.2" - peerDependencies: - "@polkadot/networks": "*" - "@polkadot/util": "*" - checksum: 10/0241f00cd7380f4a4653e01a1e959eb2acb1797101ec45cc28ba6843e4d376269ded6e5eb925e61c3126772ec9e92be0461e4c846095b78649968e754efb6a7d - languageName: node - linkType: hard - "@polkadot/ui-settings@npm:3.9.1, @polkadot/ui-settings@npm:^3.9.1": version: 3.9.1 resolution: "@polkadot/ui-settings@npm:3.9.1" @@ -3444,19 +2473,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/ui-shared@npm:3.6.6": - version: 3.6.6 - resolution: "@polkadot/ui-shared@npm:3.6.6" - dependencies: - colord: "npm:^2.9.3" - tslib: "npm:^2.6.2" - peerDependencies: - "@polkadot/util": "*" - "@polkadot/util-crypto": "*" - checksum: 10/dd3b0948027167d527ebb8ae9f5444f55f0f36a0bb958b042a8adee911e4712096a5aa40be77a056bcc4c29d2d635bc946fda70c8908446a21007bdf30f5fc60 - languageName: node - linkType: hard - "@polkadot/ui-shared@npm:3.9.1": version: 3.9.1 resolution: "@polkadot/ui-shared@npm:3.9.1" @@ -3470,26 +2486,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/util-crypto@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/util-crypto@npm:12.6.2" - dependencies: - "@noble/curves": "npm:^1.3.0" - "@noble/hashes": "npm:^1.3.3" - "@polkadot/networks": "npm:12.6.2" - "@polkadot/util": "npm:12.6.2" - "@polkadot/wasm-crypto": "npm:^7.3.2" - "@polkadot/wasm-util": "npm:^7.3.2" - "@polkadot/x-bigint": "npm:12.6.2" - "@polkadot/x-randomvalues": "npm:12.6.2" - "@scure/base": "npm:^1.1.5" - tslib: "npm:^2.6.2" - peerDependencies: - "@polkadot/util": 12.6.2 - checksum: 10/a587e5e25697f3a928ae8677b82ccdbcc1df95122db2bbde753b0605f44487136fe2f55c502460d931def0007e856db40b1b34b4da3c674638ead459e79f227a - languageName: node - linkType: hard - "@polkadot/util-crypto@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/util-crypto@npm:13.0.2" @@ -3510,21 +2506,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/util@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/util@npm:12.6.2" - dependencies: - "@polkadot/x-bigint": "npm:12.6.2" - "@polkadot/x-global": "npm:12.6.2" - "@polkadot/x-textdecoder": "npm:12.6.2" - "@polkadot/x-textencoder": "npm:12.6.2" - "@types/bn.js": "npm:^5.1.5" - bn.js: "npm:^5.2.1" - tslib: "npm:^2.6.2" - checksum: 10/b7a3c2be417d670fc64d0642818cadbf041cbcfae830f2ee45fc2496e86c8e11c385854b733504a7d6a6391066fd0ef544a1748f0f8809215c37a5c0ff64571d - languageName: node - linkType: hard - "@polkadot/util@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/util@npm:13.0.2" @@ -3540,20 +2521,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/vanitygen@npm:^0.56.12": - version: 0.56.12 - resolution: "@polkadot/vanitygen@npm:0.56.12" - dependencies: - "@polkadot/util": "npm:^12.6.2" - "@polkadot/util-crypto": "npm:^12.6.2" - tslib: "npm:^2.6.2" - yargs: "npm:^17.7.2" - bin: - polkadot-js-vanitygen: runcli.mjs - checksum: 10/06f8893da79b32ebc36e5f2c9ee24d4d722834b1038815f058d925e0f7a6034b6de5c3fa254c9780587fe6d7336740c04db495e56f7ff6557b68002d3994652a - languageName: node - linkType: hard - "@polkadot/vanitygen@npm:^0.57.4": version: 0.57.4 resolution: "@polkadot/vanitygen@npm:0.57.4" @@ -3648,16 +2615,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-bigint@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/x-bigint@npm:12.6.2" - dependencies: - "@polkadot/x-global": "npm:12.6.2" - tslib: "npm:^2.6.2" - checksum: 10/8a9533ba955d06213e3810d48e95618186cc832375f82d8b52376a99d7c8f9fdd01ffb9c35495522aec8c28d18ca5ef6c8feeec9770b83ebb64cded4cd3b7e27 - languageName: node - linkType: hard - "@polkadot/x-bigint@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/x-bigint@npm:13.0.2" @@ -3668,17 +2625,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-fetch@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/x-fetch@npm:12.6.2" - dependencies: - "@polkadot/x-global": "npm:12.6.2" - node-fetch: "npm:^3.3.2" - tslib: "npm:^2.6.2" - checksum: 10/755feee15234b31de9e74bae5eca1a2e9c17e3e76330e5c5cca5e446fc3c350b8f02e3c3853005d1dd4b3da9d4f6a6c3ffd6d2146ae529b0fa6ed3c4206343af - languageName: node - linkType: hard - "@polkadot/x-fetch@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/x-fetch@npm:13.0.2" @@ -3690,15 +2636,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-global@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/x-global@npm:12.6.2" - dependencies: - tslib: "npm:^2.6.2" - checksum: 10/9159bd77e099f734f7c48ba3e37a886ba376c50066b664ee52caf0bf8eb0399b762ca08404ef6470c22e4d20e9fc8c5e0a87026efcbbd0f21ea5504b0e33d587 - languageName: node - linkType: hard - "@polkadot/x-global@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/x-global@npm:13.0.2" @@ -3708,19 +2645,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-randomvalues@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/x-randomvalues@npm:12.6.2" - dependencies: - "@polkadot/x-global": "npm:12.6.2" - tslib: "npm:^2.6.2" - peerDependencies: - "@polkadot/util": 12.6.2 - "@polkadot/wasm-util": "*" - checksum: 10/9ab555931ab81a8834800da35f04cb86df48b0d706d33ea89c51f42b8d340dab7312c462d01ecae04573ba6a01ff1ad6066ea6cf82b1330482ff537eb3c12eeb - languageName: node - linkType: hard - "@polkadot/x-randomvalues@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/x-randomvalues@npm:13.0.2" @@ -3734,16 +2658,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-textdecoder@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/x-textdecoder@npm:12.6.2" - dependencies: - "@polkadot/x-global": "npm:12.6.2" - tslib: "npm:^2.6.2" - checksum: 10/ba8ebe34cce1445a78d4eb744c8cfcf068cebfaf6c8efca23e1cdb037e8769cb2738b77b7266e3f86cd2459bb3eb87744f9518cba76e76fca609a16e6b84789e - languageName: node - linkType: hard - "@polkadot/x-textdecoder@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/x-textdecoder@npm:13.0.2" @@ -3754,16 +2668,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-textencoder@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/x-textencoder@npm:12.6.2" - dependencies: - "@polkadot/x-global": "npm:12.6.2" - tslib: "npm:^2.6.2" - checksum: 10/b2e721d19660f7bcf3995d695fac5d78d4bc8c5fd0632ec0735eb20dd9b4b79fad1ce7dfe7ade202c4ace5cd2d6b8ac663bb4dca273afa050f73cf1e99498f82 - languageName: node - linkType: hard - "@polkadot/x-textencoder@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/x-textencoder@npm:13.0.2" @@ -3774,17 +2678,6 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-ws@npm:^12.6.2": - version: 12.6.2 - resolution: "@polkadot/x-ws@npm:12.6.2" - dependencies: - "@polkadot/x-global": "npm:12.6.2" - tslib: "npm:^2.6.2" - ws: "npm:^8.15.1" - checksum: 10/de987c0a9d5df7d9eb17d96fd47afb2417eb85b7126e4e11bc4fe7dc908b54307390a1e3da61d251cd5f1f6edd054712f018bdc695ce946e0267806d1f050119 - languageName: node - linkType: hard - "@polkadot/x-ws@npm:^13.0.2": version: 13.0.2 resolution: "@polkadot/x-ws@npm:13.0.2" @@ -3929,15 +2822,6 @@ __metadata: "@rollup/rollup-android-arm-eabi@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.0" - checksum: 10/undefined - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@rollup/rollup-android-arm-eabi@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.9.1" - checksum: 10/undefined conditions: os=android & cpu=arm languageName: node linkType: hard @@ -3945,15 +2829,6 @@ __metadata: "@rollup/rollup-android-arm64@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-android-arm64@npm:4.21.0" - checksum: 10/undefined - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-android-arm64@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-android-arm64@npm:4.9.1" - checksum: 10/undefined conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -3961,15 +2836,6 @@ __metadata: "@rollup/rollup-darwin-arm64@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-darwin-arm64@npm:4.21.0" - checksum: 10/undefined - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-arm64@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.9.1" - checksum: 10/undefined conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -3977,15 +2843,6 @@ __metadata: "@rollup/rollup-darwin-x64@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-darwin-x64@npm:4.21.0" - checksum: 10/undefined - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-x64@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.9.1" - checksum: 10/undefined conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -3993,23 +2850,13 @@ __metadata: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.0" - checksum: 10/undefined conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.9.1" - checksum: 10/undefined - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-musleabihf@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.0" - checksum: 10/undefined conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard @@ -4017,15 +2864,6 @@ __metadata: "@rollup/rollup-linux-arm64-gnu@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.0" - checksum: 10/undefined - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-gnu@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.9.1" - checksum: 10/undefined conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard @@ -4033,15 +2871,6 @@ __metadata: "@rollup/rollup-linux-arm64-musl@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.0" - checksum: 10/undefined - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-musl@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.9.1" - checksum: 10/undefined conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard @@ -4049,7 +2878,6 @@ __metadata: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.0" - checksum: 10/undefined conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard @@ -4057,15 +2885,6 @@ __metadata: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.0" - checksum: 10/undefined - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.9.1" - checksum: 10/undefined conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard @@ -4073,7 +2892,6 @@ __metadata: "@rollup/rollup-linux-s390x-gnu@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.0" - checksum: 10/undefined conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard @@ -4081,15 +2899,6 @@ __metadata: "@rollup/rollup-linux-x64-gnu@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.0" - checksum: 10/undefined - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-gnu@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.9.1" - checksum: 10/undefined conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard @@ -4097,15 +2906,6 @@ __metadata: "@rollup/rollup-linux-x64-musl@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.0" - checksum: 10/undefined - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-musl@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.9.1" - checksum: 10/undefined conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard @@ -4113,15 +2913,6 @@ __metadata: "@rollup/rollup-win32-arm64-msvc@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.0" - checksum: 10/undefined - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-arm64-msvc@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.9.1" - checksum: 10/undefined conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -4129,15 +2920,6 @@ __metadata: "@rollup/rollup-win32-ia32-msvc@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.0" - checksum: 10/undefined - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-ia32-msvc@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.9.1" - checksum: 10/undefined conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -4145,33 +2927,24 @@ __metadata: "@rollup/rollup-win32-x64-msvc@npm:4.21.0": version: 4.21.0 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.0" - checksum: 10/undefined conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.9.1": - version: 4.9.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.9.1" - checksum: 10/undefined - conditions: os=win32 & cpu=x64 +"@scure/base@npm:^1.1.1, @scure/base@npm:^1.1.5, @scure/base@npm:~1.1.0": + version: 1.1.5 + resolution: "@scure/base@npm:1.1.5" + checksum: 10/543fa9991c6378b6a0d5ab7f1e27b30bb9c1e860d3ac81119b4213cfdf0ad7b61be004e06506e89de7ce0cec9391c17f5c082bb34c3b617a2ee6a04129f52481 languageName: node linkType: hard -"@scure/base@npm:^1.1.1, @scure/base@npm:^1.1.5, @scure/base@npm:^1.1.7, @scure/base@npm:~1.1.0": +"@scure/base@npm:^1.1.7": version: 1.1.7 resolution: "@scure/base@npm:1.1.7" checksum: 10/fc50ffaab36cb46ff9fa4dc5052a06089ab6a6707f63d596bb34aaaec76173c9a564ac312a0b981b5e7a5349d60097b8878673c75d6cbfc4da7012b63a82099b languageName: node linkType: hard -"@scure/base@npm:^1.1.1, @scure/base@npm:^1.1.5, @scure/base@npm:~1.1.0": - version: 1.1.5 - resolution: "@scure/base@npm:1.1.5" - checksum: 10/543fa9991c6378b6a0d5ab7f1e27b30bb9c1e860d3ac81119b4213cfdf0ad7b61be004e06506e89de7ce0cec9391c17f5c082bb34c3b617a2ee6a04129f52481 - languageName: node - linkType: hard - "@scure/bip32@npm:1.3.1": version: 1.3.1 resolution: "@scure/bip32@npm:1.3.1" @@ -4291,13 +3064,6 @@ __metadata: languageName: node linkType: hard -"@substrate/connect-known-chains@npm:^1.1.4": - version: 1.1.4 - resolution: "@substrate/connect-known-chains@npm:1.1.4" - checksum: 10/17fdce09bf2ba042371910a5e1c701d7db7e40b7c021eb67f36ed2d28175b8846e01eb2438be03827e2cd2654d35be5a1a248c36e9588ccdbe4545da0bee5047 - languageName: node - linkType: hard - "@substrate/connect-known-chains@npm:^1.1.5": version: 1.3.0 resolution: "@substrate/connect-known-chains@npm:1.3.0" @@ -4305,18 +3071,6 @@ __metadata: languageName: node linkType: hard -"@substrate/connect@npm:0.8.10": - version: 0.8.10 - resolution: "@substrate/connect@npm:0.8.10" - dependencies: - "@substrate/connect-extension-protocol": "npm:^2.0.0" - "@substrate/connect-known-chains": "npm:^1.1.4" - "@substrate/light-client-extension-helpers": "npm:^0.0.6" - smoldot: "npm:2.0.22" - checksum: 10/078c08d12eb12b55b2c8ee0e0c335284db07d13b48cc5329db68a6376173f1fb6b2357fb47f8ec4da7b66f4230d9bc2c3873beb66d755c475969d1cdbbec316f - languageName: node - linkType: hard - "@substrate/connect@npm:0.8.11": version: 0.8.11 resolution: "@substrate/connect@npm:0.8.11" @@ -4329,23 +3083,6 @@ __metadata: languageName: node linkType: hard -"@substrate/light-client-extension-helpers@npm:^0.0.6": - version: 0.0.6 - resolution: "@substrate/light-client-extension-helpers@npm:0.0.6" - dependencies: - "@polkadot-api/json-rpc-provider": "npm:0.0.1" - "@polkadot-api/json-rpc-provider-proxy": "npm:0.0.1" - "@polkadot-api/observable-client": "npm:0.1.0" - "@polkadot-api/substrate-client": "npm:0.0.1" - "@substrate/connect-extension-protocol": "npm:^2.0.0" - "@substrate/connect-known-chains": "npm:^1.1.4" - rxjs: "npm:^7.8.1" - peerDependencies: - smoldot: 2.x - checksum: 10/1a3576019538c8150dd56ddae3ec6ed7b6272af72cd6d17cbb5de76d6ae554af2a0bf72bbb9ffd4b9c64c9eb9ee3f13caaad57e01c5173e35a0cb799fd27574a - languageName: node - linkType: hard - "@substrate/light-client-extension-helpers@npm:^1.0.0": version: 1.0.0 resolution: "@substrate/light-client-extension-helpers@npm:1.0.0" @@ -4363,13 +3100,6 @@ __metadata: languageName: node linkType: hard -"@substrate/ss58-registry@npm:^1.44.0": - version: 1.44.0 - resolution: "@substrate/ss58-registry@npm:1.44.0" - checksum: 10/97a05ca6f439f42ea24bd4d3fc1ab9e77e65e6dd0d2d823e438ae9a82ea4d6249012066149a23c1dad8fb27ec5a3913f6639c2e480377fea3ee96fd1bd592bd0 - languageName: node - linkType: hard - "@substrate/ss58-registry@npm:^1.46.0": version: 1.49.0 resolution: "@substrate/ss58-registry@npm:1.49.0" @@ -4607,13 +3337,6 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: 10/7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408 - languageName: node - linkType: hard - "@types/estree@npm:*, @types/estree@npm:^1.0.0": version: 1.0.0 resolution: "@types/estree@npm:1.0.0" @@ -4621,6 +3344,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:1.0.5": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: 10/7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408 + languageName: node + linkType: hard + "@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.18": version: 4.17.27 resolution: "@types/express-serve-static-core@npm:4.17.27" @@ -5142,31 +3872,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.14.0" - dependencies: - "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:6.14.0" - "@typescript-eslint/type-utils": "npm:6.14.0" - "@typescript-eslint/utils": "npm:6.14.0" - "@typescript-eslint/visitor-keys": "npm:6.14.0" - debug: "npm:^4.3.4" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.4" - natural-compare: "npm:^1.4.0" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" - peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/d420277bed0104713fb4a3c2e0fed32b300919708db3f2e3d13bc83e80a9aec181bfc4e1e6012c65408c318f3ac113926fc77e6667d7657e34fa0d5a2c21ee32 - languageName: node - linkType: hard - "@typescript-eslint/eslint-plugin@npm:^6.19.1": version: 6.21.0 resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" @@ -5192,24 +3897,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/parser@npm:6.14.0" - dependencies: - "@typescript-eslint/scope-manager": "npm:6.14.0" - "@typescript-eslint/types": "npm:6.14.0" - "@typescript-eslint/typescript-estree": "npm:6.14.0" - "@typescript-eslint/visitor-keys": "npm:6.14.0" - debug: "npm:^4.3.4" - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/34f46aa8aaadb0d0ecb7d791a8436fcf44ec04af33ee9d198bcf6f7ca3927d8caa79d4756e0c4ef0d50979d895df0b8f1a2473fc83104423c96856e9d56047f3 - languageName: node - linkType: hard - "@typescript-eslint/parser@npm:^6.19.1": version: 6.21.0 resolution: "@typescript-eslint/parser@npm:6.21.0" @@ -5238,16 +3925,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/scope-manager@npm:6.14.0" - dependencies: - "@typescript-eslint/types": "npm:6.14.0" - "@typescript-eslint/visitor-keys": "npm:6.14.0" - checksum: 10/fbe945169fe092df5953a54a552a9e8d9dc3dc158a39cd99de7f1843a169c82d3ba59e314b7d0f5b8110dbbe8c37c9e62dc2dda91a31536fe054221d5d8972c3 - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/scope-manager@npm:6.21.0" @@ -5258,23 +3935,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/type-utils@npm:6.14.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:6.14.0" - "@typescript-eslint/utils": "npm:6.14.0" - debug: "npm:^4.3.4" - ts-api-utils: "npm:^1.0.1" - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/52c2a380d694f629ed2d37ce9decc5d8f6d276b030dcb8ee2d0a21b667d789e0d50c8a4d06fa60a053cbcc162b50c3708260f569ccd765609f17499d5294c19d - languageName: node - linkType: hard - "@typescript-eslint/type-utils@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/type-utils@npm:6.21.0" @@ -5306,13 +3966,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/types@npm:6.14.0" - checksum: 10/bcb32d69ac4a570634e37a3f149b7653a85334ac7b1d736961b627647ceff74797c4ac30b1405c508ede9462fad53b0b4442dbdf21877bf91263390c6e426e95 - languageName: node - linkType: hard - "@typescript-eslint/types@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/types@npm:6.21.0" @@ -5338,24 +3991,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.14.0" - dependencies: - "@typescript-eslint/types": "npm:6.14.0" - "@typescript-eslint/visitor-keys": "npm:6.14.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - semver: "npm:^7.5.4" - ts-api-utils: "npm:^1.0.1" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/870f00e81de428c0afae3f753c04229170aeec76d62dcded0e22cff1c733fe60a350cf68571c889f87ea7a6008b73f7c62a079e91ab056d79aa2b9803a5b7150 - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" @@ -5393,23 +4028,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.14.0, @typescript-eslint/utils@npm:^6.0.0": - version: 6.14.0 - resolution: "@typescript-eslint/utils@npm:6.14.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - "@types/json-schema": "npm:^7.0.12" - "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:6.14.0" - "@typescript-eslint/types": "npm:6.14.0" - "@typescript-eslint/typescript-estree": "npm:6.14.0" - semver: "npm:^7.5.4" - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: 10/fec7338edc31d89d5413ec49ce690e05741511ba1ba2a8c59ce14321f5026e73e0584dc9f35645ab4100561bcf8ecef8a08c042388743db53fe73f047132a150 - languageName: node - linkType: hard - "@typescript-eslint/utils@npm:6.21.0, @typescript-eslint/utils@npm:^6.0.0": version: 6.21.0 resolution: "@typescript-eslint/utils@npm:6.21.0" @@ -5465,16 +4083,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.14.0": - version: 6.14.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.14.0" - dependencies: - "@typescript-eslint/types": "npm:6.14.0" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10/404f87a121b4375b13e59ffc11ac2fe3c8e40025d0ef5cd6738ab7b3648ce1d41378414b1130ee68e0b454d7e6ec1937540799cdaa4ea572e2447b04d737ee44 - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" @@ -5771,23 +4379,6 @@ __metadata: languageName: node linkType: hard -"@zondax/ledger-substrate@npm:^0.41.3": - version: 0.41.3 - resolution: "@zondax/ledger-substrate@npm:0.41.3" - dependencies: - "@ledgerhq/hw-transport": "npm:^6.27.1" - bip32: "npm:^4.0.0" - bip32-ed25519: "git+https://github.com/Zondax/bip32-ed25519.git" - bip39: "npm:^3.0.4" - blakejs: "npm:^1.2.1" - bs58: "npm:^5.0.0" - hash.js: "npm:^1.1.7" - bin: - ledger-substrate: dist/cmd/cli.js - checksum: 10/6e02ee297ccabacaebecc5241db8be6e45000edc86ff65cc9f5572f846691740ffd6a5547cc4e1fef83afa426203a3759fd6784ee1e964a73fed46d8fed948ba - languageName: node - linkType: hard - "@zxing/browser@npm:^0.1.5": version: 0.1.5 resolution: "@zxing/browser@npm:0.1.5" @@ -6584,17 +5175,6 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.6.2": - version: 1.6.2 - resolution: "axios@npm:1.6.2" - dependencies: - follow-redirects: "npm:^1.15.0" - form-data: "npm:^4.0.0" - proxy-from-env: "npm:^1.1.0" - checksum: 10/612bc93f8f738a518e7c5f9de9cc782bcd36aac6bae279160ef6a10260378e21c1786520eab3336898e3d66e0839ebdf739f327fb6d0431baa4d3235703a7652 - languageName: node - linkType: hard - "axios@npm:^1.6.2, axios@npm:^1.7.2": version: 1.7.2 resolution: "axios@npm:1.7.2" @@ -6643,13 +5223,6 @@ __metadata: languageName: node linkType: hard -"base-x@npm:^4.0.0": - version: 4.0.0 - resolution: "base-x@npm:4.0.0" - checksum: 10/b25db9e07eb1998472a20557c7f00c797dc0595f79df95155ab74274e7fa98b9f2659b3ee547ac8773666b7f69540656793aeb97ad2b1ceccdb6fa5faaf69ac0 - languageName: node - linkType: hard - "base62@npm:^1.1.0": version: 1.2.8 resolution: "base62@npm:1.2.8" @@ -6703,38 +5276,6 @@ __metadata: languageName: node linkType: hard -"bip32-ed25519@git+https://github.com/Zondax/bip32-ed25519.git": - version: 0.0.4 - resolution: "bip32-ed25519@https://github.com/Zondax/bip32-ed25519.git#commit=0949df01b5c93885339bc28116690292088f6134" - dependencies: - bn.js: "npm:^5.1.1" - elliptic: "npm:^6.4.1" - hash.js: "npm:^1.1.7" - checksum: 10/e7c78aa5751b31a6375c0336991c2945e4eb63ef7bc97e8bf35c41f91c165b7999a1013a7d61c62ce99e237f688ea8afca04af63d928723cb8a74653de0fb489 - languageName: node - linkType: hard - -"bip32@npm:^4.0.0": - version: 4.0.0 - resolution: "bip32@npm:4.0.0" - dependencies: - "@noble/hashes": "npm:^1.2.0" - "@scure/base": "npm:^1.1.1" - typeforce: "npm:^1.11.5" - wif: "npm:^2.0.6" - checksum: 10/f2da719618b26e2fdec3d0bc4945cf7dc435ff93eaeebc0b6b70b8911e7a33128cf77c4c0bce45be679c5f2a96aa5128dbed329193a9f88d755ff9c90185b6a0 - languageName: node - linkType: hard - -"bip39@npm:^3.0.4": - version: 3.1.0 - resolution: "bip39@npm:3.1.0" - dependencies: - "@noble/hashes": "npm:^1.2.0" - checksum: 10/406c0b5bdab0d43df2ff8916c5b57bb7f65cd36a115cbd7620a75b972638f8511840bfc27bfc68946027086fd33ed3050d8cd304e85fd527503b23d857a8486e - languageName: node - linkType: hard - "bip66@npm:^1.1.5": version: 1.1.5 resolution: "bip66@npm:1.1.5" @@ -6761,15 +5302,8 @@ __metadata: dependencies: buffer: "npm:^6.0.3" inherits: "npm:^2.0.4" - readable-stream: "npm:^3.4.0" - checksum: 10/0340d3d70def4213cd9cbcd8592f7c5922d3668e7b231286c354613fac4a8411ad373cff26e06162da7423035bbd5caafce3e140a5f397be72fcd1e9d86f1179 - languageName: node - linkType: hard - -"blakejs@npm:^1.2.1": - version: 1.2.1 - resolution: "blakejs@npm:1.2.1" - checksum: 10/0638b1bd058b21892633929c43005aa6a4cc4b2ac5b338a146c3c076622f1b360795bd7a4d1f077c9b01863ed2df0c1504a81c5b520d164179120434847e6cd7 + readable-stream: "npm:^3.4.0" + checksum: 10/0340d3d70def4213cd9cbcd8592f7c5922d3668e7b231286c354613fac4a8411ad373cff26e06162da7423035bbd5caafce3e140a5f397be72fcd1e9d86f1179 languageName: node linkType: hard @@ -6976,15 +5510,6 @@ __metadata: languageName: node linkType: hard -"bs58@npm:^4.0.0, bs58@npm:^4.0.1": - version: 4.0.1 - resolution: "bs58@npm:4.0.1" - dependencies: - base-x: "npm:^3.0.2" - checksum: 10/b3c5365bb9e0c561e1a82f1a2d809a1a692059fae016be233a6127ad2f50a6b986467c3a50669ce4c18929dcccb297c5909314dd347a25a68c21b68eb3e95ac2 - languageName: node - linkType: hard - "bs58@npm:^4.0.1": version: 4.0.1 resolution: "bs58@npm:4.0.1" @@ -6994,26 +5519,6 @@ __metadata: languageName: node linkType: hard -"bs58@npm:^5.0.0": - version: 5.0.0 - resolution: "bs58@npm:5.0.0" - dependencies: - base-x: "npm:^4.0.0" - checksum: 10/2475cb0684e07077521aac718e604a13e0f891d58cff923d437a2f7e9e28703ab39fce9f84c7c703ab369815a675f11e3bd394d38643bfe8969fbe42e6833d45 - languageName: node - linkType: hard - -"bs58check@npm:<3.0.0": - version: 2.1.2 - resolution: "bs58check@npm:2.1.2" - dependencies: - bs58: "npm:^4.0.0" - create-hash: "npm:^1.1.0" - safe-buffer: "npm:^5.1.2" - checksum: 10/43bdf08a5dd04581b78f040bc4169480e17008da482ffe2a6507327bbc4fc5c28de0501f7faf22901cfe57fbca79cbb202ca529003fedb4cb8dccd265b38e54d - languageName: node - linkType: hard - "btoa@npm:^1.2.1": version: 1.2.1 resolution: "btoa@npm:1.2.1" @@ -8195,15 +6700,6 @@ __metadata: languageName: node linkType: hard -"cssstyle@npm:^3.0.0": - version: 3.0.0 - resolution: "cssstyle@npm:3.0.0" - dependencies: - rrweb-cssom: "npm:^0.6.0" - checksum: 10/3774cf5fd0fe5d0fe2d7e2b726eea690e7e35a2f3ecdd83bcf2df12ad664bc6cc30727800b712c16b5df6a67e5129a643fe15c0bfb1fc221d0020c488b1f4ff3 - languageName: node - linkType: hard - "cssstyle@npm:^4.0.1": version: 4.0.1 resolution: "cssstyle@npm:4.0.1" @@ -8833,7 +7329,6 @@ __metadata: verror: "npm:^1.10.0" bin: dmg-license: bin/dmg-license.js - checksum: 10/undefined conditions: os=darwin languageName: node linkType: hard @@ -9191,21 +7686,6 @@ __metadata: languageName: node linkType: hard -"elliptic@npm:^6.4.1, elliptic@npm:^6.5.2, elliptic@npm:^6.5.3": - version: 6.5.4 - resolution: "elliptic@npm:6.5.4" - dependencies: - bn.js: "npm:^4.11.9" - brorand: "npm:^1.1.0" - hash.js: "npm:^1.0.0" - hmac-drbg: "npm:^1.0.1" - inherits: "npm:^2.0.4" - minimalistic-assert: "npm:^1.0.1" - minimalistic-crypto-utils: "npm:^1.0.1" - checksum: 10/2cd7ff4b69720dbb2ca1ca650b2cf889d1df60c96d4a99d331931e4fe21e45a7f3b8074e86618ca7e56366c4b6258007f234f9d61d9b0c87bbbc8ea990b99e94 - languageName: node - linkType: hard - "elliptic@npm:^6.5.2, elliptic@npm:^6.5.3": version: 6.5.4 resolution: "elliptic@npm:6.5.4" @@ -9667,24 +8147,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^27.6.0": - version: 27.6.0 - resolution: "eslint-plugin-jest@npm:27.6.0" - dependencies: - "@typescript-eslint/utils": "npm:^5.10.0" - peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: "*" - peerDependenciesMeta: - "@typescript-eslint/eslint-plugin": - optional: true - jest: - optional: true - checksum: 10/e01ff002d55fa09624c53a4b984e80175e75da671bc9b48cc2909b134fe6df25c8143798359bb5991e77e4ffb5b7d69c1c2340e8f661d080b7938a9e5e077122 - languageName: node - linkType: hard - "eslint-plugin-jest@npm:^27.6.3": version: 27.9.0 resolution: "eslint-plugin-jest@npm:27.9.0" @@ -9703,26 +8165,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-n@npm:^16.4.0": - version: 16.4.0 - resolution: "eslint-plugin-n@npm:16.4.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - builtins: "npm:^5.0.1" - eslint-plugin-es-x: "npm:^7.5.0" - get-tsconfig: "npm:^4.7.0" - ignore: "npm:^5.2.4" - is-builtin-module: "npm:^3.2.1" - is-core-module: "npm:^2.12.1" - minimatch: "npm:^3.1.2" - resolve: "npm:^1.22.2" - semver: "npm:^7.5.3" - peerDependencies: - eslint: ">=7.0.0" - checksum: 10/4339616442d27659903e83796810535a3be2a0a00aa69c60494f29a5dfdee4f9a39d645b8965f469153f3c87dae9c522f324a1e20c6d6b8bc92ad648b35a7803 - languageName: node - linkType: hard - "eslint-plugin-n@npm:^16.6.2": version: 16.6.2 resolution: "eslint-plugin-n@npm:16.6.2" @@ -10513,16 +8955,6 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.10.0, follow-redirects@npm:^1.15.0": - version: 1.15.2 - resolution: "follow-redirects@npm:1.15.2" - peerDependenciesMeta: - debug: - optional: true - checksum: 10/8be0d39919770054812537d376850ccde0b4762b0501c440bd08724971a078123b55f57704f2984e0664fecc0c86adea85add63295804d9dce401cd9604c91d3 - languageName: node - linkType: hard - "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.10.0, follow-redirects@npm:^1.15.6": version: 1.15.6 resolution: "follow-redirects@npm:1.15.6" @@ -10705,7 +9137,6 @@ __metadata: resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" dependencies: node-gyp: "npm:latest" - checksum: 10/undefined conditions: os=darwin languageName: node linkType: hard @@ -10874,24 +9305,6 @@ __metadata: languageName: node linkType: hard -"gh-pages@npm:^6.1.0": - version: 6.1.0 - resolution: "gh-pages@npm:6.1.0" - dependencies: - async: "npm:^3.2.4" - commander: "npm:^11.0.0" - email-addresses: "npm:^5.0.0" - filenamify: "npm:^4.3.0" - find-cache-dir: "npm:^3.3.1" - fs-extra: "npm:^11.1.1" - globby: "npm:^6.1.0" - bin: - gh-pages: bin/gh-pages.js - gh-pages-clean: bin/gh-pages-clean.js - checksum: 10/feed88a4ff759955420bdee2648baf37bd24e7b7d0819aa599fc6ebe4e94dab344daf8cce7fdad5508f03230b4948bf2ed5bb191a8aae5b728b6e390895db3e7 - languageName: node - linkType: hard - "gh-pages@npm:^6.1.1": version: 6.1.1 resolution: "gh-pages@npm:6.1.1" @@ -11369,16 +9782,6 @@ __metadata: languageName: node linkType: hard -"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": - version: 1.1.7 - resolution: "hash.js@npm:1.1.7" - dependencies: - inherits: "npm:^2.0.3" - minimalistic-assert: "npm:^1.0.1" - checksum: 10/0c89ee4006606a40f92df5cc3c263342e7fea68110f3e9ef032bd2083650430505db01b6b7926953489517d4027535e4fdc7f970412893d3031c361d3ec8f4b3 - languageName: node - linkType: hard - "hasown@npm:^2.0.0": version: 2.0.0 resolution: "hasown@npm:2.0.0" @@ -11705,16 +10108,6 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "http-proxy-agent@npm:7.0.0" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10/dbaaf3d9f3fc4df4a5d7ec45d456ec50f575240b557160fa63427b447d1f812dd7fe4a4f17d2e1ba003d231f07edf5a856ea6d91cb32d533062ff20a7803ccac - languageName: node - linkType: hard - "http-proxy-agent@npm:^7.0.2": version: 7.0.2 resolution: "http-proxy-agent@npm:7.0.2" @@ -11792,16 +10185,6 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^7.0.2": - version: 7.0.2 - resolution: "https-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.0.2" - debug: "npm:4" - checksum: 10/9ec844f78fd643608239c9c3f6819918631df5cd3e17d104cc507226a39b5d4adda9d790fc9fd63ac0d2bb8a761b2f9f60faa80584a9bf9d7f2e8c5ed0acd330 - languageName: node - linkType: hard - "https-proxy-agent@npm:^7.0.5": version: 7.0.5 resolution: "https-proxy-agent@npm:7.0.5" @@ -11879,7 +10262,6 @@ __metadata: dependencies: cli-truncate: "npm:^2.1.0" node-addon-api: "npm:^1.6.3" - checksum: 10/undefined conditions: os=darwin languageName: node linkType: hard @@ -12883,40 +11265,6 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^23.0.1": - version: 23.0.1 - resolution: "jsdom@npm:23.0.1" - dependencies: - cssstyle: "npm:^3.0.0" - data-urls: "npm:^5.0.0" - decimal.js: "npm:^10.4.3" - form-data: "npm:^4.0.0" - html-encoding-sniffer: "npm:^4.0.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.2" - is-potential-custom-element-name: "npm:^1.0.1" - nwsapi: "npm:^2.2.7" - parse5: "npm:^7.1.2" - rrweb-cssom: "npm:^0.6.0" - saxes: "npm:^6.0.0" - symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^4.1.3" - w3c-xmlserializer: "npm:^5.0.0" - webidl-conversions: "npm:^7.0.0" - whatwg-encoding: "npm:^3.1.1" - whatwg-mimetype: "npm:^4.0.0" - whatwg-url: "npm:^14.0.0" - ws: "npm:^8.14.2" - xml-name-validator: "npm:^5.0.0" - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true - checksum: 10/b48fd785cfe5ea0c87e5fadb5fa7f4897bc64731a3930d9013cc0a0b16fbea323e7cced4dddf486b4edb305e7f511ccf78ef6b165b99e3a209069a394add6aa1 - languageName: node - linkType: hard - "jsdom@npm:^24.0.0": version: 24.1.1 resolution: "jsdom@npm:24.1.1" @@ -13064,13 +11412,6 @@ __metadata: languageName: node linkType: hard -"jsqr@npm:^1.2.0": - version: 1.3.1 - resolution: "jsqr@npm:1.3.1" - checksum: 10/aa87566a2d2928a447b529596292ee7e392eef70cf83258bb3029bb429db08953e54c2802e8f9c54daedf2bdba72f089a351b342f5796463c44be624aa8cd617 - languageName: node - linkType: hard - "jstransform@npm:^11.0.3": version: 11.0.3 resolution: "jstransform@npm:11.0.3" @@ -14410,17 +12751,6 @@ __metadata: languageName: node linkType: hard -"nock@npm:^13.5.0": - version: 13.5.4 - resolution: "nock@npm:13.5.4" - dependencies: - debug: "npm:^4.1.0" - json-stringify-safe: "npm:^5.0.1" - propagate: "npm:^2.0.0" - checksum: 10/75bad391bae4efb81b742734af5f2d87309cd93d3ca6b78372fd37946d78ccb254d79104676619866915e6734abfc1b00fee2aa42073a4843ca3c746aad35a4d - languageName: node - linkType: hard - "nock@npm:^13.5.4": version: 13.5.5 resolution: "nock@npm:13.5.5" @@ -14552,20 +12882,6 @@ __metadata: languageName: node linkType: hard -"node-hid@npm:^2.1.2": - version: 2.1.2 - resolution: "node-hid@npm:2.1.2" - dependencies: - bindings: "npm:^1.5.0" - node-addon-api: "npm:^3.0.2" - node-gyp: "npm:latest" - prebuild-install: "npm:^7.1.1" - bin: - hid-showdevices: src/show-devices.js - checksum: 10/7b424d9f049221b439cfa3a092f415b608bcd316b819ff1fb0bf5234d766348d9fdaeaafa5ccece514c045825a936cb5617080168066d16b3aaeb0e9808e38f9 - languageName: node - linkType: hard - "node-releases@npm:^2.0.13": version: 2.0.13 resolution: "node-releases@npm:2.0.13" @@ -14688,13 +13004,6 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.7": - version: 2.2.7 - resolution: "nwsapi@npm:2.2.7" - checksum: 10/22c002080f0297121ad138aba5a6509e724774d6701fe2c4777627bd939064ecd9e1b6dc1c2c716bb7ca0b9f16247892ff2f664285202ac7eff6ec9543725320 - languageName: node - linkType: hard - "oauth-sign@npm:~0.9.0": version: 0.9.0 resolution: "oauth-sign@npm:0.9.0" @@ -15359,7 +13668,7 @@ __metadata: dependencies: "@crustio/crust-pin": "npm:^1.0.0" "@pinata/sdk": "npm:^1.2.1" - "@polkadot/dev": "npm:^0.78.4" + "@polkadot/dev": "npm:^0.78.13" "@types/chart.js": "npm:^2.9.41" "@types/file-saver": "npm:^2.0.7" "@types/react-beautiful-dnd": "npm:^13.1.7" @@ -15379,7 +13688,6 @@ __metadata: react-dom: "npm:^18.2.0" react-is: "npm:^18.2.0" source-map-explorer: "npm:^2.5.3" - checksum: 10/undefined languageName: unknown linkType: soft @@ -16095,20 +14403,6 @@ __metadata: languageName: node linkType: hard -"react-qr-reader@npm:^2.2.1": - version: 2.2.1 - resolution: "react-qr-reader@npm:2.2.1" - dependencies: - jsqr: "npm:^1.2.0" - prop-types: "npm:^15.7.2" - webrtc-adapter: "npm:^7.2.1" - peerDependencies: - react: ~16 - react-dom: ~16 - checksum: 10/c0825017c0c836936fed376c107c6d64e3a0795fd8e54bba5f14fa46f17d0b00c6f9cfd9a3c4216cd52509d2042860f3e4fea25687167e9585dbf87642c2cc2d - languageName: node - linkType: hard - "react-redux@npm:^7.2.0": version: 7.2.3 resolution: "react-redux@npm:7.2.3" @@ -16766,59 +15060,6 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.9.1": - version: 4.9.1 - resolution: "rollup@npm:4.9.1" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.9.1" - "@rollup/rollup-android-arm64": "npm:4.9.1" - "@rollup/rollup-darwin-arm64": "npm:4.9.1" - "@rollup/rollup-darwin-x64": "npm:4.9.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.9.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.9.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.9.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.9.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.9.1" - "@rollup/rollup-linux-x64-musl": "npm:4.9.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.9.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.9.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.9.1" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10/956afe393c6cef29882312008603a9fc80db356fd838fe7bb879ad8d4a35cbe7294a3225f2d55601a17dafbeec27a9ec086ef7572cb89eb2df83634fd1bd1666 - languageName: node - linkType: hard - "rollup@npm:^4.9.6": version: 4.21.0 resolution: "rollup@npm:4.21.0" @@ -16896,15 +15137,6 @@ __metadata: languageName: node linkType: hard -"rtcpeerconnection-shim@npm:^1.2.15": - version: 1.2.15 - resolution: "rtcpeerconnection-shim@npm:1.2.15" - dependencies: - sdp: "npm:^2.6.0" - checksum: 10/cfd57301dc67dfe22a191c3809bfa0d6e5cf7fdab4632a9787743f2ab83c3a8f6870cfc7785fe132aca5df912a6193edb807217dc978fab2cf4919ba408e725b - languageName: node - linkType: hard - "run-async@npm:^2.4.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" @@ -17063,13 +15295,6 @@ __metadata: languageName: node linkType: hard -"sdp@npm:^2.12.0, sdp@npm:^2.6.0": - version: 2.12.0 - resolution: "sdp@npm:2.12.0" - checksum: 10/2433d52c018e762147800103fec4d45389953810a6fee616be9baf4d6cccad108aef69f6e8cefd4de97419059f6c0353b92e37ec677726d72928b7aba5b77476 - languageName: node - linkType: hard - "secp256k1@npm:^3.8.0": version: 3.8.0 resolution: "secp256k1@npm:3.8.0" @@ -17458,15 +15683,6 @@ __metadata: languageName: node linkType: hard -"smoldot@npm:2.0.22": - version: 2.0.22 - resolution: "smoldot@npm:2.0.22" - dependencies: - ws: "npm:^8.8.1" - checksum: 10/8d63720ff7aee9ff4cbfb3d6952c68781aaaecf49fcb20d8b76919e854975b029071778c4c3bd50a18a4c3e0c96857b2b6daa526bbad4a3bee20f2aad8dfe388 - languageName: node - linkType: hard - "smoldot@npm:2.0.26": version: 2.0.26 resolution: "smoldot@npm:2.0.26" @@ -18499,18 +16715,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.1.3": - version: 4.1.3 - resolution: "tough-cookie@npm:4.1.3" - dependencies: - psl: "npm:^1.1.33" - punycode: "npm:^2.1.1" - universalify: "npm:^0.2.0" - url-parse: "npm:^1.5.3" - checksum: 10/cf148c359b638a7069fc3ba9a5257bdc9616a6948a98736b92c3570b3f8401cf9237a42bf716878b656f372a1fb65b74dd13a46ccff8eceba14ffd053d33f72a - languageName: node - linkType: hard - "tough-cookie@npm:^4.1.4": version: 4.1.4 resolution: "tough-cookie@npm:4.1.4" @@ -18666,13 +16870,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.2": - version: 2.6.2 - resolution: "tslib@npm:2.6.2" - checksum: 10/bd26c22d36736513980091a1e356378e8b662ded04204453d353a7f34a4c21ed0afc59b5f90719d4ba756e581a162ecbf93118dc9c6be5acf70aa309188166ca - languageName: node - linkType: hard - "tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.2, tslib@npm:^2.6.3": version: 2.6.3 resolution: "tslib@npm:2.6.3" @@ -18833,13 +17030,6 @@ __metadata: languageName: node linkType: hard -"typeforce@npm:^1.11.5": - version: 1.18.0 - resolution: "typeforce@npm:1.18.0" - checksum: 10/dbf98c75b1d57e56e33c1e1271d5505e67981f4e6a2e2e6e8e31160b58777fea1726160810b6c606517db16476805b7dce315926ba2d4859b9a56cab05b7a41f - languageName: node - linkType: hard - "typescript@npm:^5.3.3": version: 5.3.3 resolution: "typescript@npm:5.3.3" @@ -19823,16 +18013,6 @@ __metadata: languageName: node linkType: hard -"webrtc-adapter@npm:^7.2.1": - version: 7.7.0 - resolution: "webrtc-adapter@npm:7.7.0" - dependencies: - rtcpeerconnection-shim: "npm:^1.2.15" - sdp: "npm:^2.12.0" - checksum: 10/f20f69a10a6f8e4b9be7aaa9af8b3dfac1dbb89fbed1ccedbf2437975071d9d33f8f10ca61fbeb705e3b43ed950e455e0b972340214308b921fb965e5dbc5674 - languageName: node - linkType: hard - "websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": version: 0.7.4 resolution: "websocket-driver@npm:0.7.4" @@ -19974,15 +18154,6 @@ __metadata: languageName: node linkType: hard -"wif@npm:^2.0.6": - version: 2.0.6 - resolution: "wif@npm:2.0.6" - dependencies: - bs58check: "npm:<3.0.0" - checksum: 10/c8d7581664532d9ab6d163ee5194a9bec71b089a6e50d54d6ec57a9bd714fcf84bc8d9f22f4cfc7c297fc6ad10b973b8e83eca5c41240163fc61f44b5154b7da - languageName: node - linkType: hard - "wildcard@npm:^2.0.0": version: 2.0.0 resolution: "wildcard@npm:2.0.0" @@ -20041,21 +18212,6 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.13.0, ws@npm:^8.14.2, ws@npm:^8.15.1, ws@npm:^8.8.1": - version: 8.15.1 - resolution: "ws@npm:8.15.1" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/746a3102d43e8df7b09f5814bec858f12d10185a7abd655537f3291b687d440bb80fc9d1e082f8dee42d4d74307f78a96810e18a2c8e13053b003c6608c1c648 - languageName: node - linkType: hard - "ws@npm:^8.13.0, ws@npm:^8.16.0, ws@npm:^8.18.0, ws@npm:^8.8.1": version: 8.18.0 resolution: "ws@npm:8.18.0" From 36f4365e7c52033c8d3a0f788bfaddfecedecf39 Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Wed, 4 Sep 2024 20:30:45 +0800 Subject: [PATCH 54/56] exporting defaultHighlight --- packages/react-components/src/styles/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-components/src/styles/index.ts b/packages/react-components/src/styles/index.ts index 56b6fe4e3e7e..162444a4522a 100644 --- a/packages/react-components/src/styles/index.ts +++ b/packages/react-components/src/styles/index.ts @@ -18,7 +18,7 @@ const FACTORS = [0.2126, 0.7152, 0.0722]; const PARTS = [0, 2, 4]; const VERY_DARK = 16; -const defaultHighlight = '#f19135'; +export const defaultHighlight = '#f19135'; function getHighlight (uiHighlight: string | undefined): string { return (uiHighlight || defaultHighlight); From c4b6627c32930f3456ecee05e7f4b74f00065ef6 Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Wed, 4 Sep 2024 21:24:27 +0800 Subject: [PATCH 55/56] responsive summary --- packages/page-broker/src/Overview/Summary.tsx | 79 ++++++++++++------- .../page-broker/src/Overview/WorkInfoRow.tsx | 18 ++--- packages/page-broker/src/Overview/index.tsx | 10 +-- packages/react-components/src/UsageBar.tsx | 4 + 4 files changed, 67 insertions(+), 44 deletions(-) diff --git a/packages/page-broker/src/Overview/Summary.tsx b/packages/page-broker/src/Overview/Summary.tsx index 210a7bd4bfd4..1fd871fa2809 100644 --- a/packages/page-broker/src/Overview/Summary.tsx +++ b/packages/page-broker/src/Overview/Summary.tsx @@ -7,7 +7,7 @@ import type { statsType } from '../types.js'; import React from 'react'; -import { CardSummary, SummaryBox, UsageBar } from '@polkadot/react-components'; +import { CardSummary, SummaryBox, UsageBar, styled } from '@polkadot/react-components'; import { defaultHighlight } from '@polkadot/react-components/styles'; import { useApi, useBrokerStatus, useCurrentPrice, useRenewalBump } from '@polkadot/react-hooks'; @@ -19,12 +19,28 @@ import RenewalPrice from './RenewalPrice.js'; import Timeslice from './Timeslice.js'; import TimeslicePeriod from './TimeslicePeriod.js'; + +const StyledDiv = styled.div` + display: flex; + flex-wrap: wrap; + gap: 1rem; +`; + +const StyledSection = styled.section` + display: flex; + gap: 1rem; + @media (max-width: 768px) { + flex-direction: column; + margin-bottom: 2rem + } +`; + interface Props { apiEndpoint?: LinkOption | null; workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo } -function Summary ({ workloadInfos }: Props): React.ReactElement { +function Summary({ workloadInfos }: Props): React.ReactElement { const { t } = useTranslation(); const { api, apiEndpoint } = useApi(); const renewalBump = useRenewalBump(); @@ -35,38 +51,43 @@ function Summary ({ workloadInfos }: Props): React.ReactElement { return ( -
+ {api.query.broker && ( <> - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + )} - -
+
+ + +
+
); } diff --git a/packages/page-broker/src/Overview/WorkInfoRow.tsx b/packages/page-broker/src/Overview/WorkInfoRow.tsx index 6a3d60f3a1f5..8c3dadb64a9f 100644 --- a/packages/page-broker/src/Overview/WorkInfoRow.tsx +++ b/packages/page-broker/src/Overview/WorkInfoRow.tsx @@ -5,31 +5,31 @@ import type { InfoRow } from '../types.js'; import React from 'react'; import { AddressMini, styled } from '@polkadot/react-components'; -const StyledTableCol = styled.td<{ hideOn?: 'mobile' | 'tablet' | 'both' }>` +const StyledTableCol = styled.td<{ hide?: 'mobile' | 'tablet' | 'both' }>` width: 150px; vertical-align: top; @media (max-width: 768px) { /* Mobile */ - ${(props) => props.hideOn === 'mobile' || props.hideOn === 'both' ? 'display: none;' : ''} + ${(props) => props.hide === 'mobile' || props.hide === 'both' ? 'display: none;' : ''} } @media (min-width: 769px) and (max-width: 1024px) { /* Tablet */ - ${(props) => props.hideOn === 'tablet' || props.hideOn === 'both' ? 'display: none;' : ''} + ${(props) => props.hide === 'tablet' || props.hide === 'both' ? 'display: none;' : ''} } `; const TableCol = ({ header, value, - hideOn, + hide, }: { header: string; value: string | number | null | undefined; - hideOn?: 'mobile' | 'tablet' | 'both'; + hide?: 'mobile' | 'tablet' | 'both'; }) => ( - +
{header}

{value || <> }

@@ -59,18 +59,18 @@ function WorkInfoRow({ data }: { data: InfoRow }): React.ReactElement { - +
{'Owner'}
{!!data.owner ? - +
{ let cumulativeOffset = 0; + if (!total) { + return <> + } + return ( From 8e1fd05ff964799585cc4d020a83a50763f11b6a Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Thu, 5 Sep 2024 16:48:19 +0800 Subject: [PATCH 56/56] small fix for workplan filtering --- packages/page-broker/src/Overview/Summary.tsx | 5 ++-- .../page-broker/src/Overview/WorkInfoRow.tsx | 30 ++++++++++--------- packages/page-broker/src/Overview/index.tsx | 9 ++---- .../src/Overview/CoreDescriptor.tsx | 2 +- .../src/Overview/CoreDescriptors.tsx | 5 +++- packages/react-components/src/UsageBar.tsx | 2 +- 6 files changed, 26 insertions(+), 27 deletions(-) diff --git a/packages/page-broker/src/Overview/Summary.tsx b/packages/page-broker/src/Overview/Summary.tsx index 1fd871fa2809..ac149fd27674 100644 --- a/packages/page-broker/src/Overview/Summary.tsx +++ b/packages/page-broker/src/Overview/Summary.tsx @@ -7,7 +7,7 @@ import type { statsType } from '../types.js'; import React from 'react'; -import { CardSummary, SummaryBox, UsageBar, styled } from '@polkadot/react-components'; +import { CardSummary, styled, SummaryBox, UsageBar } from '@polkadot/react-components'; import { defaultHighlight } from '@polkadot/react-components/styles'; import { useApi, useBrokerStatus, useCurrentPrice, useRenewalBump } from '@polkadot/react-hooks'; @@ -19,7 +19,6 @@ import RenewalPrice from './RenewalPrice.js'; import Timeslice from './Timeslice.js'; import TimeslicePeriod from './TimeslicePeriod.js'; - const StyledDiv = styled.div` display: flex; flex-wrap: wrap; @@ -40,7 +39,7 @@ interface Props { workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo } -function Summary({ workloadInfos }: Props): React.ReactElement { +function Summary ({ workloadInfos }: Props): React.ReactElement { const { t } = useTranslation(); const { api, apiEndpoint } = useApi(); const renewalBump = useRenewalBump(); diff --git a/packages/page-broker/src/Overview/WorkInfoRow.tsx b/packages/page-broker/src/Overview/WorkInfoRow.tsx index 8c3dadb64a9f..5d55da49718b 100644 --- a/packages/page-broker/src/Overview/WorkInfoRow.tsx +++ b/packages/page-broker/src/Overview/WorkInfoRow.tsx @@ -2,7 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 import type { InfoRow } from '../types.js'; + import React from 'react'; + import { AddressMini, styled } from '@polkadot/react-components'; const StyledTableCol = styled.td<{ hide?: 'mobile' | 'tablet' | 'both' }>` @@ -20,11 +22,9 @@ const StyledTableCol = styled.td<{ hide?: 'mobile' | 'tablet' | 'both' }>` } `; -const TableCol = ({ - header, - value, +const TableCol = ({ header, hide, -}: { + value }: { header: string; value: string | number | null | undefined; hide?: 'mobile' | 'tablet' | 'both'; @@ -35,7 +35,7 @@ const TableCol = ({ ); -function WorkInfoRow({ data }: { data: InfoRow }): React.ReactElement { +function WorkInfoRow ({ data }: { data: InfoRow }): React.ReactElement { const NoTaskAssigned = !data.taskId; if (NoTaskAssigned) { @@ -49,34 +49,36 @@ function WorkInfoRow({ data }: { data: InfoRow }): React.ReactElement { return ( <> + /> + /> -
{'Owner'}
- {!!data.owner ? {'Owner'} + {data.owner + ? :

 

} + /> + :

 

}
); diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index fc8db7737de7..f0960b3b52f7 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -75,11 +75,6 @@ function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workpl [workloadInfos, workloadCoreSelected, parachainId] ); - const filteredWorkplan = useMemo( - () => workplanInfos && filterLoad(parachainId, workplanInfos, workloadCoreSelected), - [workplanInfos, workloadCoreSelected, parachainId] - ); - function onDropDownChange (v: number) { setWorkloadCoreSelected(v); setParachainId(''); @@ -100,7 +95,7 @@ function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workpl apiEndpoint={apiEndpoint} workloadInfos={workloadInfos} > - +
); diff --git a/packages/page-coretime/src/Overview/CoreDescriptor.tsx b/packages/page-coretime/src/Overview/CoreDescriptor.tsx index 339fa4db7d3f..3704e938ea88 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptor.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptor.tsx @@ -16,7 +16,7 @@ interface Props { value: CoreDescription; } -function CoreDescriptor ({ value: { core, info }, className }: Props): React.ReactElement { +function CoreDescriptor ({ className, value: { core, info } }: Props): React.ReactElement { let sanitized: PolkadotRuntimeParachainsAssignerCoretimeCoreDescriptor[] = []; if (Array.isArray(info)) { diff --git a/packages/page-coretime/src/Overview/CoreDescriptors.tsx b/packages/page-coretime/src/Overview/CoreDescriptors.tsx index dd4f4a1c4034..2e63e28186cd 100644 --- a/packages/page-coretime/src/Overview/CoreDescriptors.tsx +++ b/packages/page-coretime/src/Overview/CoreDescriptors.tsx @@ -56,7 +56,10 @@ function CoreDescriptors ({ className, coreInfos }: Props): React.ReactElement

- {coreInfos && } + {coreInfos && }

{header}
-

{value}

+

{value}

-
Workplan ({hasWorkplan})
+
Workplan ({workplan?.length})
{hasWorkplan && ( { diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index ef2a67ae3794..6fd9f2c172f2 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -9,7 +9,7 @@ import type { PalletBrokerStatusRecord } from '@polkadot/types/lookup'; import React, { useEffect, useMemo, useState } from 'react'; import { Dropdown, Input } from '@polkadot/react-components'; -import { useCall } from '@polkadot/react-hooks'; +import { useCall, useDebounce } from '@polkadot/react-hooks'; import { useTranslation } from '../translate.js'; import CoresTable from './CoresTables.js'; @@ -25,10 +25,29 @@ interface Props { isReady: boolean; } +const filterLoad = (parachainId: string, load: CoreWorkloadInfo[] | CoreWorkplanInfo[], workloadCoreSelected: number) => { + if (parachainId) { + return load?.filter(({ info }) => { + if (info?.[0]?.assignment.isTask) { + return info?.[0]?.assignment.isTask ? info?.[0]?.assignment.asTask.toString() === parachainId : false; + } + + return false; + }); + } + + if (workloadCoreSelected === -1) { + return load; + } else { + return load?.filter(({ core }) => core === workloadCoreSelected); + } +}; + function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workplanInfos }: Props): React.ReactElement { const { t } = useTranslation(); const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); - const [parachainId, setParachainId] = useState(''); + const [_parachainId, setParachainId] = useState(''); + const parachainId = useDebounce(_parachainId); const [coreArr, setCoreArr] = useState([]); useEffect(() => { @@ -42,7 +61,7 @@ function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workpl coreArr .map((c) => ( { - text: `Core ${c + 1}`, + text: `Core ${c}`, value: c } )) @@ -51,24 +70,25 @@ function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workpl [coreArr, t] ); const filteredWLC = useMemo( - () => { - return workloadCoreSelected === -1 ? workloadInfos : workloadInfos?.filter(({ core }) => core === workloadCoreSelected); - }, - [workloadInfos, workloadCoreSelected] + () => workloadInfos && filterLoad(parachainId, workloadInfos, workloadCoreSelected), + [workloadInfos, workloadCoreSelected, parachainId] ); const filteredWorkplan = useMemo( - () => { - if (workloadCoreSelected === -1) { - return workplanInfos; - } else { - return workplanInfos?.filter(({ core }) => core === workloadCoreSelected); - } - } - , - [workplanInfos, workloadCoreSelected] + () => workplanInfos && filterLoad(parachainId, workplanInfos, workloadCoreSelected), + [workplanInfos, workloadCoreSelected, parachainId] ); + function onDropDownChange (v: number) { + setWorkloadCoreSelected(v); + setParachainId(''); + } + + function onInputChange (v: string) { + setParachainId(v); + setWorkloadCoreSelected(-1); + } + const status = useCall(isReady && api.query.broker?.status); const timeslice = status?.toHuman().lastCommittedTimeslice?.toString(); const timesliceAsString = timeslice === undefined ? '' : timeslice.toString().split(',').join(''); @@ -79,21 +99,22 @@ function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workpl apiEndpoint={apiEndpoint} workloadInfos={workloadInfos} > -
+
- +
+
Date: Tue, 3 Sep 2024 20:57:32 +0800 Subject: [PATCH 46/56] moved a type to a seprate type file --- packages/page-broker/src/Overview/CoresTables.tsx | 7 +------ packages/page-broker/src/types.ts | 8 ++++++++ packages/page-broker/src/utils.ts | 4 ++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/page-broker/src/Overview/CoresTables.tsx b/packages/page-broker/src/Overview/CoresTables.tsx index 1fe6d240baaf..8f9d805b0efe 100644 --- a/packages/page-broker/src/Overview/CoresTables.tsx +++ b/packages/page-broker/src/Overview/CoresTables.tsx @@ -8,6 +8,7 @@ import React from 'react'; import { sortByCore } from '../utils.js'; import CoreTable from './CoreTable.js'; +import { CoreInfo } from '../types.js'; interface Props { api: ApiPromise; @@ -17,12 +18,6 @@ interface Props { timeslice: number; } -interface CoreInfo { - core: number, - workload: CoreWorkloadInfo[], - workplan: CoreWorkplanInfo[] -} - function CoresTable ({ api, cores, timeslice, workloadInfos, workplanInfos }: Props): React.ReactElement { const coreArr = []; const sanitizedLoad: CoreWorkloadInfo[] = sortByCore(workloadInfos); diff --git a/packages/page-broker/src/types.ts b/packages/page-broker/src/types.ts index b85a4057e27b..552baa178ec9 100644 --- a/packages/page-broker/src/types.ts +++ b/packages/page-broker/src/types.ts @@ -1,6 +1,8 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; + export interface InfoRow { taskId: string | null, maskBits: number, @@ -12,3 +14,9 @@ export interface InfoRow { leaseLength?: number endBlock?: number } + +export interface CoreInfo { + core: number, + workload: CoreWorkloadInfo[], + workplan: CoreWorkplanInfo[] +} diff --git a/packages/page-broker/src/utils.ts b/packages/page-broker/src/utils.ts index 2c2ab5851db2..38ef10712ffa 100644 --- a/packages/page-broker/src/utils.ts +++ b/packages/page-broker/src/utils.ts @@ -26,7 +26,7 @@ export function processHexMask (mask: PalletBrokerScheduleItem['mask']) { function formatDate (date: Date) { const day = date.getDate(); - const month = date.toLocaleString('default', { month: 'long' }); + const month = date.toLocaleString('default', { month: 'short' }); const year = date.getFullYear(); return `${day} ${month} ${year}`; @@ -73,7 +73,7 @@ export function sortByCore (dataArray?: T | T[]): T[ return sanitized.sort((a, b) => a.core - b.core); } -export function formatWorkInfo (info: PalletBrokerScheduleItem[], core: number, currentRegion: RegionInfo, timeslice: number) { +export function formatWorkInfo (info: PalletBrokerScheduleItem[], core: number, currentRegion: RegionInfo | undefined, timeslice: number) { const infoVec: InfoRow[] = []; info.forEach((data) => { From 265efe6b5e358de951a250e456dfa4472dc65b97 Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Tue, 3 Sep 2024 21:15:40 +0800 Subject: [PATCH 47/56] skip build and npm --- packages/page-broker/.skip-build | 0 packages/page-broker/.skip-npm | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/page-broker/.skip-build create mode 100644 packages/page-broker/.skip-npm diff --git a/packages/page-broker/.skip-build b/packages/page-broker/.skip-build new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/page-broker/.skip-npm b/packages/page-broker/.skip-npm new file mode 100644 index 000000000000..e69de29bb2d1 From 3c065b106b457434cf106fe6f6684a6381f1af02 Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Tue, 3 Sep 2024 21:16:18 +0800 Subject: [PATCH 48/56] generated locales --- packages/apps/public/locales/en/app-broker.json | 6 ++++++ packages/apps/public/locales/en/translation.json | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/packages/apps/public/locales/en/app-broker.json b/packages/apps/public/locales/en/app-broker.json index d2f394639f03..61cb1d672816 100644 --- a/packages/apps/public/locales/en/app-broker.json +++ b/packages/apps/public/locales/en/app-broker.json @@ -5,19 +5,25 @@ "No core description found": "No core description found", "No workload found": "No workload found", "No workplan found": "No workplan found", + "Overview": "Overview", "assignment": "assignment", "broker Id": "broker Id", "core": "core", "core count": "core count", "current timeslice": "current timeslice", "current work": "current work", + "estimated bulk price": "estimated bulk price", "mask": "mask", "nav.broker": "Coretime Broker (Experimental)", "next index": "next index", + "parachain id": "parachain id", "pool size": "pool size", + "region length": "region length", + "selected core": "selected core", "selected core for workload": "selected core for workload", "selected core for workplan": "selected core for workplan", "timeslice": "timeslice", + "timeslice period": "timeslice period", "traffic": "traffic", "work queue": "work queue", "workload": "workload", diff --git a/packages/apps/public/locales/en/translation.json b/packages/apps/public/locales/en/translation.json index 80420286d657..d648d487f75b 100644 --- a/packages/apps/public/locales/en/translation.json +++ b/packages/apps/public/locales/en/translation.json @@ -1368,6 +1368,7 @@ "era {{era}}/unapplied": "", "eras": "", "errors": "", + "estimated bulk price": "", "ethereum private key": "", "event count": "", "events": "", @@ -1637,6 +1638,7 @@ "referendum id": "", "refresh in": "", "refund from account": "", + "region length": "", "register from": "", "registrar account": "", "registrar index": "", @@ -1672,6 +1674,7 @@ "seed (hex or string)": "", "select curator": "", "selected constant query": "", + "selected core": "", "selected core for workload": "", "selected core for workplan": "", "selected signatories": "", @@ -1749,6 +1752,7 @@ "threshold": "", "timeout": "", "timeslice": "", + "timeslice period": "", "tip": "", "tip amount": "", "tip reason": "", @@ -1772,6 +1776,7 @@ "total transferrable": "", "track origin": "", "traffic": "", + "traffic multiplier": "", "transactions": "", "transfer asset": "", "transfer received": "", From e7e058e0ccbd806b6120b936da9cc5a28c35c4e5 Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Tue, 3 Sep 2024 21:51:01 +0800 Subject: [PATCH 49/56] added default ui colours to test chains and kusama --- packages/apps-config/src/endpoints/productionRelayKusama.ts | 1 + packages/apps-config/src/endpoints/testingRelayRococo.ts | 4 +++- packages/apps-config/src/endpoints/testingRelayWestend.ts | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/apps-config/src/endpoints/productionRelayKusama.ts b/packages/apps-config/src/endpoints/productionRelayKusama.ts index eeacff0130d9..ac0aca550fa8 100644 --- a/packages/apps-config/src/endpoints/productionRelayKusama.ts +++ b/packages/apps-config/src/endpoints/productionRelayKusama.ts @@ -966,6 +966,7 @@ export const prodParasKusamaCommon: EndpointOption[] = [ teleport: [-1], text: 'Coretime', ui: { + color: '#113911', logo: chainsCoretimeKusamaSVG } }, diff --git a/packages/apps-config/src/endpoints/testingRelayRococo.ts b/packages/apps-config/src/endpoints/testingRelayRococo.ts index 36d84e565e6d..e9880074e8be 100644 --- a/packages/apps-config/src/endpoints/testingRelayRococo.ts +++ b/packages/apps-config/src/endpoints/testingRelayRococo.ts @@ -746,7 +746,9 @@ export const testParasRococoCommon: EndpointOption[] = [ relayName: 'rococo', teleport: [-1], text: 'Coretime', - ui: {} + ui: { + color: '#f19135' + } }, { homepage: 'https://encointer.org/', diff --git a/packages/apps-config/src/endpoints/testingRelayWestend.ts b/packages/apps-config/src/endpoints/testingRelayWestend.ts index 7bd8b747490e..70f35a27ea52 100644 --- a/packages/apps-config/src/endpoints/testingRelayWestend.ts +++ b/packages/apps-config/src/endpoints/testingRelayWestend.ts @@ -182,7 +182,9 @@ export const testParasWestendCommon: EndpointOption[] = [ relayName: 'westend', teleport: [-1], text: 'Coretime', - ui: {} + ui: { + color: '#f19135' + } }, { info: 'westendPeople', From e12c632b95de94ff4d51c8d22dcb82067d3ca5ae Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Tue, 3 Sep 2024 21:51:57 +0800 Subject: [PATCH 50/56] abstracted logic from the rendering --- packages/page-broker/src/Overview/Summary.tsx | 41 +++++-------------- packages/page-broker/src/Overview/index.tsx | 19 +++------ packages/page-broker/src/types.ts | 10 ++++- packages/page-broker/src/utils.ts | 36 +++++++++++++--- 4 files changed, 54 insertions(+), 52 deletions(-) diff --git a/packages/page-broker/src/Overview/Summary.tsx b/packages/page-broker/src/Overview/Summary.tsx index 0c2aee612fda..eeab4ca6b950 100644 --- a/packages/page-broker/src/Overview/Summary.tsx +++ b/packages/page-broker/src/Overview/Summary.tsx @@ -15,44 +15,22 @@ import RegionLength from './RegionLength.js'; import RenewalPrice from './RenewalPrice.js'; import Timeslice from './Timeslice.js'; import TimeslicePeriod from './TimeslicePeriod.js'; +import { statsType } from '../types.js'; +import { getStats } from '../utils.js'; interface Props { apiEndpoint?: LinkOption | null; workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo } -interface statsType { - idles: number, - pools: number, - tasks: number -} - -function Summary ({ workloadInfos }: Props): React.ReactElement { +function Summary({ workloadInfos }: Props): React.ReactElement { const { t } = useTranslation(); - const { api } = useApi(); + const { api, apiEndpoint } = useApi(); const renewalBump = useRenewalBump(); const currentPrice = useCurrentPrice(); const totalCores = useBrokerStatus('coreCount'); - - const { idles, pools, tasks }: statsType = React.useMemo(() => { - if (!totalCores || !workloadInfos) { - return { idles: 0, pools: 0, tasks: 0 }; - } - - let [idles, pools, tasks] = [0, 0, 0]; - const sanitized: CoreWorkloadInfo[] = Array.isArray(workloadInfos) ? workloadInfos : [workloadInfos]; - - sanitized.forEach((v) => { - if (v.info[0].assignment.isTask) { - ++tasks; - } else if (v.info[0].assignment.isPool) { - ++pools; - } - }); - idles = Number(totalCores) - (pools + tasks); - - return { idles, pools, tasks }; - }, [totalCores, workloadInfos]); + const uiHighlight = apiEndpoint?.ui.color + const { idles, pools, tasks }: statsType = React.useMemo(() => getStats(totalCores, workloadInfos), [totalCores, workloadInfos]); return ( @@ -80,13 +58,14 @@ function Summary ({ workloadInfos }: Props): React.ReactElement { )} - + >} ); diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index 6fd9f2c172f2..c6c5e53a58f6 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -27,23 +27,15 @@ interface Props { const filterLoad = (parachainId: string, load: CoreWorkloadInfo[] | CoreWorkplanInfo[], workloadCoreSelected: number) => { if (parachainId) { - return load?.filter(({ info }) => { - if (info?.[0]?.assignment.isTask) { - return info?.[0]?.assignment.isTask ? info?.[0]?.assignment.asTask.toString() === parachainId : false; - } - - return false; - }); + return load?.filter(({ info }) => info?.[0]?.assignment.isTask ? info?.[0]?.assignment.asTask.toString() === parachainId : false); } - if (workloadCoreSelected === -1) { return load; - } else { - return load?.filter(({ core }) => core === workloadCoreSelected); } + return load?.filter(({ core }) => core === workloadCoreSelected); }; -function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workplanInfos }: Props): React.ReactElement { +function Overview({ api, apiEndpoint, className, isReady, workloadInfos, workplanInfos }: Props): React.ReactElement { const { t } = useTranslation(); const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); const [_parachainId, setParachainId] = useState(''); @@ -69,6 +61,7 @@ function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workpl ), [coreArr, t] ); + const filteredWLC = useMemo( () => workloadInfos && filterLoad(parachainId, workloadInfos, workloadCoreSelected), [workloadInfos, workloadCoreSelected, parachainId] @@ -79,12 +72,12 @@ function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workpl [workplanInfos, workloadCoreSelected, parachainId] ); - function onDropDownChange (v: number) { + function onDropDownChange(v: number) { setWorkloadCoreSelected(v); setParachainId(''); } - function onInputChange (v: string) { + function onInputChange(v: string) { setParachainId(v); setWorkloadCoreSelected(-1); } diff --git a/packages/page-broker/src/types.ts b/packages/page-broker/src/types.ts index 552baa178ec9..3bd8029e4620 100644 --- a/packages/page-broker/src/types.ts +++ b/packages/page-broker/src/types.ts @@ -3,7 +3,7 @@ import type { CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; -export interface InfoRow { +export type InfoRow = { taskId: string | null, maskBits: number, core: number @@ -15,8 +15,14 @@ export interface InfoRow { endBlock?: number } -export interface CoreInfo { +export type CoreInfo = { core: number, workload: CoreWorkloadInfo[], workplan: CoreWorkplanInfo[] } + +export type statsType = { + idles: number, + pools: number, + tasks: number +} \ No newline at end of file diff --git a/packages/page-broker/src/utils.ts b/packages/page-broker/src/utils.ts index 38ef10712ffa..d1924f2012ae 100644 --- a/packages/page-broker/src/utils.ts +++ b/packages/page-broker/src/utils.ts @@ -1,17 +1,17 @@ // Copyright 2017-2024 @polkadot/app-broker authors & contributors // SPDX-License-Identifier: Apache-2.0 -import type { RegionInfo } from '@polkadot/react-hooks/types'; +import type { CoreWorkloadInfo, RegionInfo } from '@polkadot/react-hooks/types'; import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup'; import type { InfoRow } from './types.js'; import { BN } from '@polkadot/util'; -export function hexToBin (hex: string): string { +export function hexToBin(hex: string): string { return parseInt(hex, 16).toString(2); } -export function processHexMask (mask: PalletBrokerScheduleItem['mask']) { +export function processHexMask(mask: PalletBrokerScheduleItem['mask']) { const trimmedHex: string = mask.toHex().slice(2); const arr: string[] = trimmedHex.split(''); const buffArr: string[] = []; @@ -24,7 +24,7 @@ export function processHexMask (mask: PalletBrokerScheduleItem['mask']) { return buffArr; } -function formatDate (date: Date) { +function formatDate(date: Date) { const day = date.getDate(); const month = date.toLocaleString('default', { month: 'short' }); const year = date.getFullYear(); @@ -63,7 +63,7 @@ export const estimateTime = (targetBlock: string, latestBlock: number, timestamp } }; -export function sortByCore (dataArray?: T | T[]): T[] { +export function sortByCore(dataArray?: T | T[]): T[] { if (!dataArray) { return []; } @@ -73,7 +73,7 @@ export function sortByCore (dataArray?: T | T[]): T[ return sanitized.sort((a, b) => a.core - b.core); } -export function formatWorkInfo (info: PalletBrokerScheduleItem[], core: number, currentRegion: RegionInfo | undefined, timeslice: number) { +export function formatWorkInfo(info: PalletBrokerScheduleItem[], core: number, currentRegion: RegionInfo | undefined, timeslice: number) { const infoVec: InfoRow[] = []; info.forEach((data) => { @@ -98,3 +98,27 @@ export function formatWorkInfo (info: PalletBrokerScheduleItem[], core: number, return infoVec; } + + +export function getStats(totalCores: string | undefined, workloadInfos: CoreWorkloadInfo[] | CoreWorkloadInfo | undefined) { + if (!totalCores || !workloadInfos) { + return { idles: 0, pools: 0, tasks: 0 }; + } + const sanitized: CoreWorkloadInfo[] = Array.isArray(workloadInfos) ? workloadInfos : [workloadInfos]; + + const { pools, tasks } = sanitized.reduce( + (acc, { info }) => { + if (info[0].assignment.isTask) { + acc.tasks += 1; + } else if (info[0].assignment.isPool) { + acc.pools += 1; + } + return acc; + }, + { pools: 0, tasks: 0 } + ); + const idles = Number(totalCores) - (pools + tasks); + + return { idles, pools, tasks }; + +} \ No newline at end of file From eab6e68545a1a691e18fc1b6dcf6e452a8375e5a Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Tue, 3 Sep 2024 22:02:09 +0800 Subject: [PATCH 51/56] default ui highlight fallback --- .../page-broker/src/Overview/CoresTables.tsx | 2 +- packages/page-broker/src/Overview/Summary.tsx | 14 ++++++------- packages/page-broker/src/Overview/index.tsx | 8 +++++--- packages/page-broker/src/types.ts | 8 ++++---- packages/page-broker/src/utils.ts | 20 +++++++++---------- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/page-broker/src/Overview/CoresTables.tsx b/packages/page-broker/src/Overview/CoresTables.tsx index 8f9d805b0efe..7a3df557f417 100644 --- a/packages/page-broker/src/Overview/CoresTables.tsx +++ b/packages/page-broker/src/Overview/CoresTables.tsx @@ -3,12 +3,12 @@ import type { ApiPromise } from '@polkadot/api'; import type { CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; +import type { CoreInfo } from '../types.js'; import React from 'react'; import { sortByCore } from '../utils.js'; import CoreTable from './CoreTable.js'; -import { CoreInfo } from '../types.js'; interface Props { api: ApiPromise; diff --git a/packages/page-broker/src/Overview/Summary.tsx b/packages/page-broker/src/Overview/Summary.tsx index eeab4ca6b950..210a7bd4bfd4 100644 --- a/packages/page-broker/src/Overview/Summary.tsx +++ b/packages/page-broker/src/Overview/Summary.tsx @@ -3,33 +3,34 @@ import type { LinkOption } from '@polkadot/apps-config/endpoints/types'; import type { CoreWorkloadInfo } from '@polkadot/react-hooks/types'; +import type { statsType } from '../types.js'; import React from 'react'; import { CardSummary, SummaryBox, UsageBar } from '@polkadot/react-components'; +import { defaultHighlight } from '@polkadot/react-components/styles'; import { useApi, useBrokerStatus, useCurrentPrice, useRenewalBump } from '@polkadot/react-hooks'; import { useTranslation } from '../translate.js'; +import { getStats } from '../utils.js'; import Cores from './Cores.js'; import RegionLength from './RegionLength.js'; import RenewalPrice from './RenewalPrice.js'; import Timeslice from './Timeslice.js'; import TimeslicePeriod from './TimeslicePeriod.js'; -import { statsType } from '../types.js'; -import { getStats } from '../utils.js'; interface Props { apiEndpoint?: LinkOption | null; workloadInfos?: CoreWorkloadInfo[] | CoreWorkloadInfo } -function Summary({ workloadInfos }: Props): React.ReactElement { +function Summary ({ workloadInfos }: Props): React.ReactElement { const { t } = useTranslation(); const { api, apiEndpoint } = useApi(); const renewalBump = useRenewalBump(); const currentPrice = useCurrentPrice(); const totalCores = useBrokerStatus('coreCount'); - const uiHighlight = apiEndpoint?.ui.color + const uiHighlight = apiEndpoint?.ui.color || defaultHighlight; const { idles, pools, tasks }: statsType = React.useMemo(() => getStats(totalCores, workloadInfos), [totalCores, workloadInfos]); return ( @@ -58,14 +59,13 @@ function Summary({ workloadInfos }: Props): React.ReactElement { )} - - {!!uiHighlight && } + > ); diff --git a/packages/page-broker/src/Overview/index.tsx b/packages/page-broker/src/Overview/index.tsx index c6c5e53a58f6..8ca869dd4183 100644 --- a/packages/page-broker/src/Overview/index.tsx +++ b/packages/page-broker/src/Overview/index.tsx @@ -29,13 +29,15 @@ const filterLoad = (parachainId: string, load: CoreWorkloadInfo[] | CoreWorkplan if (parachainId) { return load?.filter(({ info }) => info?.[0]?.assignment.isTask ? info?.[0]?.assignment.asTask.toString() === parachainId : false); } + if (workloadCoreSelected === -1) { return load; } + return load?.filter(({ core }) => core === workloadCoreSelected); }; -function Overview({ api, apiEndpoint, className, isReady, workloadInfos, workplanInfos }: Props): React.ReactElement { +function Overview ({ api, apiEndpoint, className, isReady, workloadInfos, workplanInfos }: Props): React.ReactElement { const { t } = useTranslation(); const [workloadCoreSelected, setWorkloadCoreSelected] = useState(-1); const [_parachainId, setParachainId] = useState(''); @@ -72,12 +74,12 @@ function Overview({ api, apiEndpoint, className, isReady, workloadInfos, workpla [workplanInfos, workloadCoreSelected, parachainId] ); - function onDropDownChange(v: number) { + function onDropDownChange (v: number) { setWorkloadCoreSelected(v); setParachainId(''); } - function onInputChange(v: string) { + function onInputChange (v: string) { setParachainId(v); setWorkloadCoreSelected(-1); } diff --git a/packages/page-broker/src/types.ts b/packages/page-broker/src/types.ts index 3bd8029e4620..b52b15610ba1 100644 --- a/packages/page-broker/src/types.ts +++ b/packages/page-broker/src/types.ts @@ -3,7 +3,7 @@ import type { CoreWorkloadInfo, CoreWorkplanInfo } from '@polkadot/react-hooks/types'; -export type InfoRow = { +export interface InfoRow { taskId: string | null, maskBits: number, core: number @@ -15,14 +15,14 @@ export type InfoRow = { endBlock?: number } -export type CoreInfo = { +export interface CoreInfo { core: number, workload: CoreWorkloadInfo[], workplan: CoreWorkplanInfo[] } -export type statsType = { +export interface statsType { idles: number, pools: number, tasks: number -} \ No newline at end of file +} diff --git a/packages/page-broker/src/utils.ts b/packages/page-broker/src/utils.ts index d1924f2012ae..0413b9595498 100644 --- a/packages/page-broker/src/utils.ts +++ b/packages/page-broker/src/utils.ts @@ -7,11 +7,11 @@ import type { InfoRow } from './types.js'; import { BN } from '@polkadot/util'; -export function hexToBin(hex: string): string { +export function hexToBin (hex: string): string { return parseInt(hex, 16).toString(2); } -export function processHexMask(mask: PalletBrokerScheduleItem['mask']) { +export function processHexMask (mask: PalletBrokerScheduleItem['mask']) { const trimmedHex: string = mask.toHex().slice(2); const arr: string[] = trimmedHex.split(''); const buffArr: string[] = []; @@ -24,7 +24,7 @@ export function processHexMask(mask: PalletBrokerScheduleItem['mask']) { return buffArr; } -function formatDate(date: Date) { +function formatDate (date: Date) { const day = date.getDate(); const month = date.toLocaleString('default', { month: 'short' }); const year = date.getFullYear(); @@ -63,17 +63,15 @@ export const estimateTime = (targetBlock: string, latestBlock: number, timestamp } }; -export function sortByCore(dataArray?: T | T[]): T[] { +export function sortByCore (dataArray?: T | T[]): T[] { if (!dataArray) { return []; } - const sanitized = Array.isArray(dataArray) ? dataArray : [dataArray]; - return sanitized.sort((a, b) => a.core - b.core); } -export function formatWorkInfo(info: PalletBrokerScheduleItem[], core: number, currentRegion: RegionInfo | undefined, timeslice: number) { +export function formatWorkInfo (info: PalletBrokerScheduleItem[], core: number, currentRegion: RegionInfo | undefined, timeslice: number) { const infoVec: InfoRow[] = []; info.forEach((data) => { @@ -99,11 +97,11 @@ export function formatWorkInfo(info: PalletBrokerScheduleItem[], core: number, c return infoVec; } - -export function getStats(totalCores: string | undefined, workloadInfos: CoreWorkloadInfo[] | CoreWorkloadInfo | undefined) { +export function getStats (totalCores: string | undefined, workloadInfos: CoreWorkloadInfo[] | CoreWorkloadInfo | undefined) { if (!totalCores || !workloadInfos) { return { idles: 0, pools: 0, tasks: 0 }; } + const sanitized: CoreWorkloadInfo[] = Array.isArray(workloadInfos) ? workloadInfos : [workloadInfos]; const { pools, tasks } = sanitized.reduce( @@ -113,6 +111,7 @@ export function getStats(totalCores: string | undefined, workloadInfos: CoreWork } else if (info[0].assignment.isPool) { acc.pools += 1; } + return acc; }, { pools: 0, tasks: 0 } @@ -120,5 +119,4 @@ export function getStats(totalCores: string | undefined, workloadInfos: CoreWork const idles = Number(totalCores) - (pools + tasks); return { idles, pools, tasks }; - -} \ No newline at end of file +} From 75b3362d3c4127432b2dbb63143aed4292747886 Mon Sep 17 00:00:00 2001 From: Daria Mikhailova Date: Wed, 4 Sep 2024 19:09:23 +0800 Subject: [PATCH 52/56] table responsive - hiding timeslice info from the rows on mobile --- .../page-broker/src/Overview/WorkInfoRow.tsx | 62 +++++++++++++------ .../page-broker/src/Overview/Workload.tsx | 4 +- packages/page-broker/src/Overview/index.tsx | 15 +++-- packages/page-broker/src/utils.ts | 2 + 4 files changed, 57 insertions(+), 26 deletions(-) diff --git a/packages/page-broker/src/Overview/WorkInfoRow.tsx b/packages/page-broker/src/Overview/WorkInfoRow.tsx index c8c6028e7195..6a3d60f3a1f5 100644 --- a/packages/page-broker/src/Overview/WorkInfoRow.tsx +++ b/packages/page-broker/src/Overview/WorkInfoRow.tsx @@ -2,18 +2,40 @@ // SPDX-License-Identifier: Apache-2.0 import type { InfoRow } from '../types.js'; - import React from 'react'; +import { AddressMini, styled } from '@polkadot/react-components'; + +const StyledTableCol = styled.td<{ hideOn?: 'mobile' | 'tablet' | 'both' }>` + width: 150px; + vertical-align: top; -import { AddressMini } from '@polkadot/react-components'; + @media (max-width: 768px) { + /* Mobile */ + ${(props) => props.hideOn === 'mobile' || props.hideOn === 'both' ? 'display: none;' : ''} + } -const TableCol = ({ className, header, value }: { header: string, value: string | number | null | undefined, className?: React.CSSProperties}) => -
+ @media (min-width: 769px) and (max-width: 1024px) { + /* Tablet */ + ${(props) => props.hideOn === 'tablet' || props.hideOn === 'both' ? 'display: none;' : ''} + } +`; + +const TableCol = ({ + header, + value, + hideOn, +}: { + header: string; + value: string | number | null | undefined; + hideOn?: 'mobile' | 'tablet' | 'both'; +}) => ( +
{header}
-

{value}

-
-
{'Block/timeslice'}
-
{data.maskBits}
-
{!!data.owner && - <> +
{'Owner'}
- } -
-
Workplan ({workplan?.length})
+
Workplan
{hasWorkplan && (
workplansworkplans
); } diff --git a/packages/react-components/src/UsageBar.tsx b/packages/react-components/src/UsageBar.tsx index 941f7067b45a..59e4ae8e5e10 100644 --- a/packages/react-components/src/UsageBar.tsx +++ b/packages/react-components/src/UsageBar.tsx @@ -47,7 +47,7 @@ function UsageBar ({ data }: PieChartProps): React.ReactElement { let cumulativeOffset = 0; if (!total) { - return <> + return <>; } return (