"use client"; import React, { useState } from "react"; import { DataType } from "./schema"; import { usePaginatedData } from "./hooks"; import { FormComponent } from "./FormComponent"; import { SearchComponent } from "./SearchComponent"; import { getTranslation, LanguageKey } from "./language"; import { ActionButtonsComponent } from "./ActionButtonsComponent"; import { SortingComponent } from "./SortingComponent"; import { PaginationToolsComponent } from "./PaginationToolsComponent"; import { DataDisplayComponent } from "./DataDisplayComponent"; interface TemplateProps { lang?: LanguageKey; } // Main template component function TemplateApp({ lang = "en" }: TemplateProps) { const t = getTranslation(lang); const { data, pagination, loading, error, updatePagination, refetch } = usePaginatedData(); const [mode, setMode] = useState<"list" | "create" | "view" | "update">( "list" ); const [selectedItem, setSelectedItem] = useState(null); const handleCreateClick = () => { setSelectedItem(null); setMode("create"); }; const handleViewClick = (item: DataType) => { setSelectedItem(item); setMode("view"); }; const handleUpdateClick = (item: DataType) => { setSelectedItem(item); setMode("update"); }; const handleFormSubmit = async (data: DataType) => { console.log("Submitting form data:", data); // Here you would call your API to save the data // await saveData(data); // After saving, refresh the list and go back to list view setMode("list"); setSelectedItem(null); refetch(); }; const handleFormCancel = () => { setMode("list"); setSelectedItem(null); }; return (

{t.title}

{/* Search Component */} {mode === "list" && ( ) => { // Update pagination with both page reset and new query updatePagination({ page: 1, query: query, }); }} lang={lang} /> )} {/* Action Buttons Component */} {mode === "list" && ( )} {/* Sorting Component */} {mode === "list" && ( )} {/* Pagination Tools Component */} {mode === "list" && ( )} {/* Data Display - Only shown in list mode */} {mode === "list" && ( )} {(mode === "create" || mode === "update" || mode === "view") && ( )}
); } export default TemplateApp;