Junior — Middle+
Task manager implementation
livecode
Условие задачи
Создайте приложение списка дел, использующее определённые ниже методы. Компонент UI должен отображаться внутри элемента <main>. Вспомогательные функции sleep, getId и интерфейс TodoItem предоставлены, вместе с хранилищем store в памяти. Реализуйте асинхронные функции getItems, createItem и deleteItem, которые моделируют задержку с помощью sleep и работают с хранилищем. Функции должны возвращать копии элементов, добавлять новые элементы с уникальными id и временными метками, а также удалять элементы по id, выбрасывая ошибку, если id не существует.
const App = () => {
return <main></main>;
};
export default App;
export function sleep(ms: number) {
return new Promise((res) => setTimeout(res, ms));
}
let count = 0;
function getId() {
return count++;
}
export interface TodoItem {
id: number;
title: string;
complete: boolean;
createAt: number;
}
const store: TodoItem[] = [
{
id: 666,
title: "default",
complete: false,
createAt: 123
}
];
export async function getItems() {
await sleep(1_000);
// клонируем элементы, чтобы безопасно мутировать их в store
return store.map((item) => ({ ...item }));
}
export async function createItem(title: string) {
await sleep(1_000);
const item = {
id: getId(),
title,
complete: false,
createAt: Date.now()
};
store.push(item);
return item;
}
export async function deleteItem(id: number) {
await sleep(1_000);
const storedItemIndex = store.findIndex((item) => item.id === id);
if (storedItemIndex === -1) {
throw new Error("item not found");
}
store.splice(storedItemIndex, 1);
}