openstock/app/(root)/stocks/[symbol]/page.tsx

86 lines
3.3 KiB
TypeScript

import TradingViewWidget from "@/components/TradingViewWidget";
import WatchlistButton from "@/components/WatchlistButton";
import {
SYMBOL_INFO_WIDGET_CONFIG,
CANDLE_CHART_WIDGET_CONFIG,
BASELINE_WIDGET_CONFIG,
TECHNICAL_ANALYSIS_WIDGET_CONFIG,
COMPANY_PROFILE_WIDGET_CONFIG,
COMPANY_FINANCIALS_WIDGET_CONFIG,
} from "@/lib/constants";
import { auth } from '@/lib/better-auth/auth';
import { headers } from 'next/headers';
import { isStockInWatchlist } from '@/lib/actions/watchlist.actions';
export default async function StockDetails({ params }: StockDetailsPageProps) {
const { symbol } = await params;
const scriptUrl = `https://s3.tradingview.com/external-embedding/embed-widget-`;
const session = await auth.api.getSession({
headers: await headers()
});
const userId = session?.user?.id;
const isInWatchlist = userId ? await isStockInWatchlist(userId, symbol) : false;
return (
<div className="flex min-h-screen p-4 md:p-6 lg:p-8">
<section className="grid grid-cols-1 md:grid-cols-2 gap-8 w-full">
{/* Left column */}
<div className="flex flex-col gap-6">
<TradingViewWidget
scriptUrl={`${scriptUrl}symbol-info.js`}
config={SYMBOL_INFO_WIDGET_CONFIG(symbol)}
height={170}
/>
<TradingViewWidget
scriptUrl={`${scriptUrl}advanced-chart.js`}
config={CANDLE_CHART_WIDGET_CONFIG(symbol)}
className="custom-chart"
height={600}
allowExpand={true}
/>
<TradingViewWidget
scriptUrl={`${scriptUrl}advanced-chart.js`}
config={BASELINE_WIDGET_CONFIG(symbol)}
className="custom-chart"
height={600}
allowExpand={true}
/>
</div>
{/* Right column */}
<div className="flex flex-col gap-6">
<div className="flex items-center justify-between">
<WatchlistButton
symbol={symbol.toUpperCase()}
company={symbol.toUpperCase()}
isInWatchlist={isInWatchlist}
userId={userId}
/>
</div>
<TradingViewWidget
scriptUrl={`${scriptUrl}technical-analysis.js`}
config={TECHNICAL_ANALYSIS_WIDGET_CONFIG(symbol)}
height={400}
/>
<TradingViewWidget
scriptUrl={`${scriptUrl}company-profile.js`}
config={COMPANY_PROFILE_WIDGET_CONFIG(symbol)}
height={440}
/>
<TradingViewWidget
scriptUrl={`${scriptUrl}financials.js`}
config={COMPANY_FINANCIALS_WIDGET_CONFIG(symbol)}
height={800}
/>
</div>
</section>
</div>
);
}