Skip to content

Commit ca0af08

Browse files
committed
update param define structure
Signed-off-by: nidhi-singh02 <nidhi2894@gmail.com>
1 parent 8e696b9 commit ca0af08

File tree

2 files changed

+728
-305
lines changed

2 files changed

+728
-305
lines changed

components/SponsoredFeedsTable.tsx

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,54 @@ import { useState } from "react";
22
import CopyIcon from "./icons/CopyIcon";
33
import { mapValues } from "../utils/ObjectHelpers";
44

5+
interface UpdateParameters {
6+
heartbeatLength: number;
7+
heartbeatUnit: "second" | "minute" | "hour";
8+
priceDeviation: number;
9+
}
10+
511
interface SponsoredFeed {
612
name: string;
713
priceFeedId: string;
8-
updateParameters: string;
14+
updateParameters: UpdateParameters;
915
}
1016

1117
interface SponsoredFeedsTableProps {
1218
feeds: SponsoredFeed[];
1319
networkName: string;
1420
}
1521

22+
/**
23+
* Helper functions
24+
*/
25+
26+
// Format update parameters as a string for grouping
27+
const formatUpdateParams = (params: UpdateParameters): string => {
28+
return `${params.heartbeatLength} ${params.heartbeatUnit} heartbeat / ${params.priceDeviation}% price deviation`;
29+
};
30+
31+
// Render update parameters with proper styling
32+
const renderUpdateParams = (params: UpdateParameters, isDefault: boolean) => (
33+
<div className="flex items-start gap-1.5">
34+
<div
35+
className={`w-1.5 h-1.5 rounded-full mt-1 flex-shrink-0 ${
36+
isDefault ? "bg-green-500" : "bg-orange-500"
37+
}`}
38+
></div>
39+
<span
40+
className={`text-xs leading-relaxed font-medium ${
41+
isDefault
42+
? "text-gray-700 dark:text-gray-300"
43+
: "text-orange-600 dark:text-orange-400"
44+
}`}
45+
>
46+
<strong>{params.heartbeatLength}</strong> {params.heartbeatUnit} heartbeat
47+
<br />
48+
<strong>{params.priceDeviation}%</strong> price deviation
49+
</span>
50+
</div>
51+
);
52+
1653
export const SponsoredFeedsTable = ({
1754
feeds,
1855
networkName,
@@ -28,16 +65,14 @@ export const SponsoredFeedsTable = ({
2865

2966
// Calculate parameter statistics
3067
const paramCounts = mapValues(
31-
Object.groupBy(feeds, (feed) => feed.updateParameters),
68+
Object.groupBy(feeds, (feed) => formatUpdateParams(feed.updateParameters)),
3269
(feeds: SponsoredFeed[]) => feeds.length
3370
);
3471

3572
const defaultParams = Object.entries(paramCounts).sort(
3673
([, a], [, b]) => b - a
3774
)[0][0];
3875

39-
// CSS max-h-96 will handle scrolling automatically
40-
4176
return (
4277
<div className="my-6">
4378
<p className="mb-3">
@@ -52,11 +87,7 @@ export const SponsoredFeedsTable = ({
5287
<div className="flex items-center gap-1.5">
5388
<div className="w-1.5 h-1.5 bg-green-500 rounded-full flex-shrink-0"></div>
5489
<span className="font-medium">Default:</span>
55-
<span
56-
dangerouslySetInnerHTML={{
57-
__html: defaultParams.replace("<br/>", " / "),
58-
}}
59-
/>
90+
<span>{defaultParams}</span>
6091
<span className="text-gray-500">
6192
({paramCounts[defaultParams]})
6293
</span>
@@ -67,11 +98,7 @@ export const SponsoredFeedsTable = ({
6798
<div key={params} className="flex items-center gap-1.5">
6899
<div className="w-1.5 h-1.5 bg-orange-500 rounded-full flex-shrink-0"></div>
69100
<span className="font-medium">Exception:</span>
70-
<span
71-
dangerouslySetInnerHTML={{
72-
__html: params.replace("<br/>", " / "),
73-
}}
74-
/>
101+
<span>{params}</span>
75102
<span className="text-gray-500">({count})</span>
76103
</div>
77104
))}
@@ -97,11 +124,15 @@ export const SponsoredFeedsTable = ({
97124
</thead>
98125
<tbody className="bg-white dark:bg-gray-900">
99126
{feeds.map((feed, index) => {
100-
const isDefault = feed.updateParameters === defaultParams;
127+
const formattedParams = formatUpdateParams(
128+
feed.updateParameters
129+
);
130+
const isDefault = formattedParams === defaultParams;
101131
const prevFeed = feeds[index - 1];
102132
const isFirstInGroup =
103133
!prevFeed ||
104-
prevFeed.updateParameters !== feed.updateParameters;
134+
formatUpdateParams(prevFeed.updateParameters) !==
135+
formattedParams;
105136

106137
return (
107138
<tr
@@ -139,23 +170,7 @@ export const SponsoredFeedsTable = ({
139170
</td>
140171
<td className="px-3 py-2 align-top">
141172
{isFirstInGroup ? (
142-
<div className="flex items-start gap-1.5">
143-
<div
144-
className={`w-1.5 h-1.5 rounded-full mt-1 flex-shrink-0 ${
145-
isDefault ? "bg-green-500" : "bg-orange-500"
146-
}`}
147-
></div>
148-
<span
149-
className={`text-xs leading-relaxed font-medium ${
150-
isDefault
151-
? "text-gray-700 dark:text-gray-300"
152-
: "text-orange-600 dark:text-orange-400"
153-
}`}
154-
dangerouslySetInnerHTML={{
155-
__html: feed.updateParameters,
156-
}}
157-
/>
158-
</div>
173+
renderUpdateParams(feed.updateParameters, isDefault)
159174
) : (
160175
<div className="flex items-start gap-1.5 text-gray-400 text-xs">
161176
<div className="w-1.5 h-1.5 bg-green-500 rounded-full mt-1 flex-shrink-0"></div>

0 commit comments

Comments
 (0)