forked from awesomestvi/navet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathenergy-drilldown-widget.tsx
More file actions
48 lines (45 loc) · 1.73 KB
/
Copy pathenergy-drilldown-widget.tsx
File metadata and controls
48 lines (45 loc) · 1.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { memo } from 'react';
import { getThemeSurfaceTokens } from '@/app/components/shared/theme/theme-surface-tokens';
import { useI18n, useTheme } from '@/app/hooks';
import type { EnergyNode } from '../../types/energy.types';
import { EnergyWidgetShell } from '../energy-widget-shell';
interface EnergyDrilldownWidgetProps {
node: EnergyNode | null;
}
export const EnergyDrilldownWidget = memo(function EnergyDrilldownWidget({
node,
}: EnergyDrilldownWidgetProps) {
const { t } = useI18n();
const { theme } = useTheme();
const surface = getThemeSurfaceTokens(theme);
return (
<EnergyWidgetShell
title={t('energy.widgets.drilldown.title')}
eyebrow={t('energy.widgets.drilldown.eyebrow')}
>
{node ? (
<div className={`rounded-3xl border p-4 ${surface.border} ${surface.panelMuted}`}>
<div className={`text-xs uppercase tracking-[0.16em] ${surface.textMuted}`}>
{node.kind}
</div>
<div className={`mt-2 text-lg font-semibold ${surface.textPrimary}`}>{node.name}</div>
<div className={`mt-2 text-sm ${surface.textSecondary}`}>
{t('energy.widgets.drilldown.resource')}: {node.resourceType.replace('_', ' ')}
{node.room ? ` • ${node.room}` : ''}
{node.system ? ` • ${node.system}` : ''}
</div>
<div className="mt-4 flex flex-wrap gap-2">
{node.entityIds.map((entityId) => (
<span
key={entityId}
className={`rounded-full border px-3 py-1.5 text-xs ${surface.border} ${surface.textSecondary}`}
>
{entityId}
</span>
))}
</div>
</div>
) : null}
</EnergyWidgetShell>
);
});