diff --git a/packages/page-coretime/src/Sale/SaleDetailsView.tsx b/packages/page-coretime/src/Sale/SaleDetailsView.tsx
index ec67a927da25..9f0d8314e92b 100644
--- a/packages/page-coretime/src/Sale/SaleDetailsView.tsx
+++ b/packages/page-coretime/src/Sale/SaleDetailsView.tsx
@@ -3,14 +3,14 @@
import type { ChainName, SaleParameters } from '../types.js';
-import React, { useCallback } from 'react';
+import React, { useMemo } from 'react';
-import { Button, styled } from '@polkadot/react-components';
+import { styled } from '@polkadot/react-components';
import { PhaseName } from '../constants.js';
import { useTranslation } from '../translate.js';
import PhaseTable from './PhaseTable.js';
-import { SubScanButton } from './SubScanButton.js';
+import { SubscanModuleCallUrl } from './SubscanModuleCallUrl.js';
const ResponsiveContainer = styled.div`
display: flex;
@@ -78,16 +78,14 @@ const phases = {
}
};
+const dotLakeUrl = 'https://data.parity.io/coretime';
+
const SaleDetailsView = ({ chainName, chosenSaleNumber, saleParams }: { saleParams: SaleParameters, chosenSaleNumber: number, chainName: ChainName }) => {
const { t } = useTranslation();
- const openCoretimeDashboard = useCallback(() => {
- window.open('https://data.parity.io/coretime');
- }, []);
-
- const openSubscanSalePriceGraph = useCallback(() => {
- window.open(`https://coretime-${chainName}.subscan.io/coretime_dashboard`);
- }, [chainName]);
+ const subscanPriceGraphUrl = useMemo(() =>
+ `https://coretime-${chainName}.subscan.io/coretime_dashboard`
+ , [chainName]);
if (chosenSaleNumber === -1 || !saleParams) {
return null;
@@ -121,24 +119,33 @@ const SaleDetailsView = ({ chainName, chosenSaleNumber, saleParams }: { salePara
{t('Region for sale ')}
{t('Region is an asset of Coretime. It signifies the upcoming sales period within which a core can be secured by purchasing coretime. Acquiring coretime grants access to a core for the duration of that specific region.')}
{saleParams?.regionForSale && }
- Price graph
-
- {t('Core Purchase Transactions')}
-
+ {t('Subscan Links')}
+
{t('DotLake Coretime Dashboard')}
-
+ Dot Lake
{t('Coretime providers')}
{Object.entries(providers).map(([provider, { alt, href, logo }]) => (
diff --git a/packages/page-coretime/src/Sale/SubScanButton.tsx b/packages/page-coretime/src/Sale/SubScanButton.tsx
deleted file mode 100644
index 552701c0606d..000000000000
--- a/packages/page-coretime/src/Sale/SubScanButton.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2017-2025 @polkadot/app-coretime authors & contributors
-// SPDX-License-Identifier: Apache-2.0
-
-import type { SaleParameters } from '../types.js';
-
-import React, { useCallback } from 'react';
-
-import { Button } from '@polkadot/react-components';
-
-import { useTranslation } from '../translate.js';
-import { constructSubscanQuery } from '../utils/index.js';
-
-export const SubScanButton = ({ chainName, chosenSaleNumber, currentRegion }: { chosenSaleNumber: number, currentRegion: SaleParameters['currentRegion'], chainName: string }) => {
- const { t } = useTranslation();
- const onQuerySaleClick = useCallback(() => {
- if (currentRegion) {
- window.open(constructSubscanQuery(currentRegion.start.blocks.coretime, currentRegion.end.blocks.coretime, chainName));
- }
- }, [currentRegion, chainName]);
-
- if (chosenSaleNumber === -1 || !currentRegion) {
- return null;
- }
-
- return (
-
- );
-};
diff --git a/packages/page-coretime/src/Sale/SubscanModuleCallUrl.tsx b/packages/page-coretime/src/Sale/SubscanModuleCallUrl.tsx
new file mode 100644
index 000000000000..17408e96780b
--- /dev/null
+++ b/packages/page-coretime/src/Sale/SubscanModuleCallUrl.tsx
@@ -0,0 +1,30 @@
+// Copyright 2017-2025 @polkadot/app-coretime authors & contributors
+// SPDX-License-Identifier: Apache-2.0
+
+import type { SaleParameters } from '../types.js';
+
+import React, { useMemo } from 'react';
+
+import { constructSubscanQuery } from '../utils/index.js';
+
+function formatDate (input: string) {
+ const date = new Date(input + ' UTC');
+
+ return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
+}
+
+export const SubscanModuleCallUrl = ({ call = 'purchase', chainName, chosenSaleNumber, currentRegion, module = 'broker', urlTitle }: { chosenSaleNumber: number, currentRegion: SaleParameters['currentRegion'], chainName: string, urlTitle: string, module?: string, call?: string }) => {
+ const url = useMemo(() => constructSubscanQuery(formatDate(currentRegion.start.date), formatDate(currentRegion.end.date), chainName, module, call), [currentRegion, chainName, module, call]);
+
+ if (chosenSaleNumber === -1 || !currentRegion) {
+ return null;
+ }
+
+ return (
+
{urlTitle}
+ );
+};
diff --git a/packages/page-coretime/src/Sale/index.tsx b/packages/page-coretime/src/Sale/index.tsx
index 0557b7ce5b65..48061ae8f304 100644
--- a/packages/page-coretime/src/Sale/index.tsx
+++ b/packages/page-coretime/src/Sale/index.tsx
@@ -119,7 +119,7 @@ function Sale ({ chainName }: Props): React.ReactElement
{
saleParams={saleParams}
/>}
-
{t('Sale information')}
+
{t('Sale history information')}
Number(coretimeInfo?.salesInfo?.coresOffered) - Number(coretimeInfo?.salesInfo.coresSold);
-export const constructSubscanQuery = (blockStart: number, blockEnd: number, chainName: string, module = 'broker', call = 'purchase') => {
+export const constructSubscanQuery = (dateStart: string, dateEnd: string, chainName: string, module = 'broker', call = 'purchase') => {
const page = 1;
const pageSize = 25;
const signed = 'all';
const baseURL = `https://coretime-${chainName}.subscan.io/extrinsic`;
- return `${baseURL}?page=${page}&time_dimension=block&page_size=${pageSize}&module=${module}&signed=${signed}&call=${call}&block_start=${blockStart}&block_end=${blockEnd}`;
+ return `${baseURL}?page=${page}&time_dimension=date&page_size=${pageSize}&module=${module}&signed=${signed}&call=${call}&date_start=${dateStart}&date_end=${dateEnd}`;
};