project setup
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
import { useState } from "react";
|
||||
import { View, Text } from "react-native";
|
||||
import { DataTable } from "react-native-paper";
|
||||
|
||||
import { Todo } from "@/store/models/Todo.model";
|
||||
import { TableSortDirection } from "@/constants/tableSortDirectionEnum";
|
||||
import { AdminTodoTableHeader } from "@/components/features/todos/AdminTodoTableHeader";
|
||||
import { AdminTodoActions } from "@/components/features/todos/AdminTodoActions";
|
||||
import { PriorityIndicator } from "@/components/ui/PriorityIndicator";
|
||||
import { StatusTableItem } from "@/components/ui/StatusTableItem";
|
||||
import { TodoDetailsModal } from "@/components/features/todos/TodoDetailsModal";
|
||||
import { formatDateMDY, formatTime } from "@/utils/dateUtils";
|
||||
|
||||
interface DesktopAdminTodoTableProps {
|
||||
todos: Todo[];
|
||||
sortColumn: string | null;
|
||||
sortDirection: TableSortDirection;
|
||||
onSort: (column: string) => void;
|
||||
onEdit: (todo: Todo) => void;
|
||||
onDelete: (todo: Todo) => void;
|
||||
}
|
||||
|
||||
export const DesktopAdminTodosTable = ({
|
||||
todos,
|
||||
sortColumn,
|
||||
sortDirection,
|
||||
onSort,
|
||||
onEdit,
|
||||
onDelete,
|
||||
}: DesktopAdminTodoTableProps) => {
|
||||
const [detailsOpen, setDetailsOpen] = useState(false);
|
||||
const [selectedTodo, setSelectedTodo] = useState<Todo | null>(null);
|
||||
|
||||
const openDetails = (todo: Todo) => {
|
||||
setSelectedTodo(todo);
|
||||
setDetailsOpen(true);
|
||||
};
|
||||
|
||||
const closeDetails = () => setDetailsOpen(false);
|
||||
return (
|
||||
<DataTable>
|
||||
<AdminTodoTableHeader
|
||||
sortColumn={sortColumn}
|
||||
sortDirection={sortDirection}
|
||||
onSort={onSort}
|
||||
/>
|
||||
|
||||
{todos.map((todo) => (
|
||||
<DataTable.Row key={todo.id}>
|
||||
<DataTable.Cell>
|
||||
<View className="flex-row items-center flex-shrink px-1 py-1">
|
||||
<Text onPress={() => openDetails(todo)} numberOfLines={10}>
|
||||
{todo.title}
|
||||
</Text>
|
||||
</View>
|
||||
</DataTable.Cell>
|
||||
<DataTable.Cell>
|
||||
<View className="flex-row items-center flex-shrink px-1 py-1">
|
||||
<Text numberOfLines={10}>
|
||||
{todo.task && todo.task.length > 50
|
||||
? `${todo.task.slice(0, 50)}...`
|
||||
: todo.task}
|
||||
</Text>
|
||||
</View>
|
||||
</DataTable.Cell>
|
||||
<DataTable.Cell
|
||||
style={{
|
||||
justifyContent: "center",
|
||||
}}
|
||||
>
|
||||
<StatusTableItem todoStatus={todo.status} />
|
||||
</DataTable.Cell>
|
||||
<DataTable.Cell
|
||||
style={{
|
||||
justifyContent: "center",
|
||||
}}
|
||||
>
|
||||
<PriorityIndicator priority={todo.priority} />
|
||||
</DataTable.Cell>
|
||||
<DataTable.Cell style={{ justifyContent: "center" }}>
|
||||
<Text className="px-1 py-1">{`${formatDateMDY(
|
||||
todo.createdAt
|
||||
)} ${formatTime(todo.createdAt)}`}</Text>
|
||||
</DataTable.Cell>
|
||||
<DataTable.Cell style={{ justifyContent: "center" }}>
|
||||
<AdminTodoActions
|
||||
todo={todo}
|
||||
onView={(t) => openDetails(t)}
|
||||
onEdit={onEdit}
|
||||
onDelete={onDelete}
|
||||
/>
|
||||
</DataTable.Cell>
|
||||
</DataTable.Row>
|
||||
))}
|
||||
{selectedTodo && (
|
||||
<TodoDetailsModal
|
||||
visible={detailsOpen}
|
||||
todo={selectedTodo}
|
||||
onClose={closeDetails}
|
||||
/>
|
||||
)}
|
||||
</DataTable>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user