Spaces:
Build error
Build error
| import localforage from "localforage"; | |
| import { matchSorter } from "match-sorter"; | |
| import sortBy from "sort-by"; | |
| export async function getContacts(query) { | |
| await fakeNetwork(`getContacts:${query}`); | |
| let contacts = await localforage.getItem("contacts"); | |
| if (!contacts) contacts = []; | |
| if (query) { | |
| contacts = matchSorter(contacts, query, { keys: ["first", "last"] }); | |
| } | |
| return contacts.sort(sortBy("last", "createdAt")); | |
| } | |
| export async function createContact() { | |
| await fakeNetwork(); | |
| let id = Math.random().toString(36).substring(2, 9); | |
| let contact = { id, createdAt: Date.now() }; | |
| let contacts = await getContacts(); | |
| contacts.unshift(contact); | |
| await set(contacts); | |
| return contact; | |
| } | |
| export async function getContact(id) { | |
| await fakeNetwork(`contact:${id}`); | |
| let contacts = await localforage.getItem("contacts"); | |
| let contact = contacts.find((contact) => contact.id === id); | |
| return contact ?? null; | |
| } | |
| export async function updateContact(id, updates) { | |
| await fakeNetwork(); | |
| let contacts = await localforage.getItem("contacts"); | |
| let contact = contacts.find((contact) => contact.id === id); | |
| if (!contact) throw new Error("No contact found for", id); | |
| Object.assign(contact, updates); | |
| await set(contacts); | |
| return contact; | |
| } | |
| export async function deleteContact(id) { | |
| let contacts = await localforage.getItem("contacts"); | |
| let index = contacts.findIndex((contact) => contact.id === id); | |
| if (index > -1) { | |
| contacts.splice(index, 1); | |
| await set(contacts); | |
| return true; | |
| } | |
| return false; | |
| } | |
| function set(contacts) { | |
| return localforage.setItem("contacts", contacts); | |
| } | |
| // fake a cache so we don't slow down stuff we've already seen | |
| let fakeCache = {}; | |
| async function fakeNetwork(key) { | |
| if (!key) { | |
| fakeCache = {}; | |
| } | |
| if (fakeCache[key]) { | |
| return; | |
| } | |
| fakeCache[key] = true; | |
| return new Promise((res) => { | |
| setTimeout(res, Math.random() * 800); | |
| }); | |
| } | |