/** * File: AppDataView.tsx * Created by: AI Assistant * Date: 2025-11-29 * Purpose: Data view component for kreatiVortex platform * Part of: kreatiVortex - Platform Pembelajaran Tari Online */ 'use client'; import React from 'react'; import { cn } from '@/lib/utils'; interface Column { key: keyof T; label: string; render?: (value: T[keyof T], row: T) => React.ReactNode; className?: string; } interface AppDataViewProps { data: T[]; columns: Column[]; loading?: boolean; className?: string; emptyMessage?: string; } function AppDataView>({ data, columns, loading = false, className, emptyMessage = 'Tidak ada data tersedia' }: AppDataViewProps) { if (loading) { return (
{/* Skeleton rows */} {Array.from({ length: 5 }).map((_, index) => (
))}
); } if (data.length === 0) { return (

{emptyMessage}

Coba ubah filter atau tambah data baru

); } return (
{/* Table for desktop */}
{columns.map((column) => ( ))} {data.map((row, index) => ( {columns.map((column) => ( ))} ))}
{column.label}
{column.render ? column.render(row[column.key], row) : String(row[column.key] || '')}
{/* Cards for mobile */}
{data.map((row, index) => (
{columns.map((column) => (
{column.label}
{column.render ? column.render(row[column.key], row) : String(row[column.key] || '')}
))}
))}
); } export default AppDataView;