"use client"; import React, { useState } from "react"; import ChannelRow from "./SubscriberTableRow"; interface ChannelDataProp { channel_name: string; profile_pic: string; subscribers: number; sub_org: string; video_count: number; day_diff: number; views: number; diff_1d: number; diff_7d: number; diff_30d: number; } interface SubscriberDataTableProp { channel_data: ChannelDataProp[]; timestamp: string; } type SortKey = keyof ChannelDataProp | "rank"; const DataTable = ({ channel_data, timestamp }: SubscriberDataTableProp) => { const [sortKey, setSortKey] = useState("subscribers"); const [sortOrder, setSortOrder] = useState<"asc" | "desc">("desc"); const [indexName, setIndexName] = useState("RANK"); const handleSort = (key: SortKey) => { if (sortKey === key) { setSortOrder(sortOrder === "asc" ? "desc" : "asc"); } else { setSortKey(key); setSortOrder("desc"); } if (key === "sub_org") { setIndexName("INDEX"); } else { setIndexName("RANK"); } }; const sortedData = [...channel_data].sort((a, b) => { let aValue: any, bValue: any; if (sortKey === "rank") { aValue = channel_data.indexOf(a) + 1; bValue = channel_data.indexOf(b) + 1; } else { aValue = a[sortKey as keyof ChannelDataProp]; bValue = b[sortKey as keyof ChannelDataProp]; } if (typeof aValue === "string") { return sortOrder === "asc" ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue); } return sortOrder === "asc" ? aValue - bValue : bValue - aValue; }); return ( <>
Limited data shown on mobile view!

Subscriber Count

Updated Hourly. Retrieved at: {timestamp}

{sortedData.map((channel, index) => ( ))}
{indexName} CHANNEL handleSort("sub_org")} > GROUP {sortKey === "sub_org" && ( {sortOrder === "asc" ? "▲" : "▼"} )} handleSort("video_count")} > VIDEO COUNT {sortKey === "video_count" && ( {sortOrder === "asc" ? "▲" : "▼"} )} handleSort("views")} > VIEW COUNT {sortKey === "views" && ( {sortOrder === "asc" ? "▲" : "▼"} )} handleSort("subscribers")} > SUBSCRIBERS {sortKey === "subscribers" && ( {sortOrder === "asc" ? "▲" : "▼"} )} handleSort("diff_1d")} > DIFF (24H)
); }; export default DataTable; export type { SubscriberDataTableProp }; export type { ChannelDataProp };