import { type Component, createResource, createSignal, createEffect, } from "solid-js"; import "./BlockedSite.css"; import { TODOS_REPO_KEY } from "@/utils/proxy-service-keys"; import type { Todo } from "@/utils/types"; import { createProxyService } from "@webext-core/proxy-service"; import { v4 as uuidv4 } from "uuid"; const todosRepo = createProxyService(TODOS_REPO_KEY); export const Todo: Component = (props) => { const [rawTodos, { refetch }] = createResource(todosRepo.getAll, []); const [todos, setTodos] = createSignal([]); const [inputNewTodo, setInputNewTodo] = createSignal(""); createEffect(async () => { const allTodos = rawTodos(); if (!allTodos) { return; } console.log("OI"); const filteredTodos = allTodos.filter( (todo: Todo) => (props.showCompleted && todo.completed) || (props.showOnlyCompleted && todo.completed) || (!props.showOnlyCompleted && !todo.completed), ); setTodos(filteredTodos); }); const createTodo = async () => { const name = inputNewTodo(); if (!name) return; if (!name.trim()) return; const generateTodoId = uuidv4(); await todosRepo.insert({ id: generateTodoId, name: name, completed: false, }); setInputNewTodo(""); await refetch(); }; const updateTodo = async (todo: Todo, isCompleted: boolean) => { todo.completed = isCompleted; await todosRepo.update(todo); await refetch(); }; const deleteTodo = async (todo: Todo) => { await todosRepo.delete(todo); await refetch(); }; const clearAllCompletedTodo = async () => { const allTodos = await todosRepo.getAll(); const completedTodos = allTodos.filter((todo) => todo.completed); const deletePromises = completedTodos.map((todo) => todosRepo.delete(todo)); await Promise.all(deletePromises); refetch(); }; return ( <>