enunciados + leetcode
Enunciados como los de una entrevista real para resolver por tu cuenta, con el tiempo que te darían, y problemas de LeetCode recomendados para cada tecnología y seniority. Nada se corrige acá: resolvelo en tu editor, en voz alta, y marcá lo que ya practicaste.
Construí un componente Autocomplete para buscar ciudades. Mockeá la API con una función searchCities(query: string, signal?: AbortSignal): Promise<{ id: string, name: string, country: string }[]> que resuelve después de un delay aleatorio de 100 a 800 ms y filtra una lista fija.
Mientras el usuario escribe se muestran sugerencias debajo del input. Se puede navegar con flechas, elegir con Enter y cerrar con Escape. Al elegir una ciudad, el input muestra su nombre y la lista se cierra.
Ojo: como el delay es aleatorio, una respuesta vieja puede llegar después de una nueva. La UI nunca debería mostrar resultados de una búsqueda que ya no corresponde al texto actual.
# requisitos
AbortController, o como mínimo ignora respuestas viejas.role="combobox", role="listbox", aria-activedescendant y aria-expanded.# si te sobra tiempo, te van a preguntar
useAutocomplete?Tenés que mostrar una tabla de órdenes que vienen de fetchOrders({ page, pageSize, sortBy, sortDir }): Promise<{ items: Order[], total: number }>, donde Order es { id: string, customer: string, amount: number, createdAt: string }. Mockeá la función con un array de 137 órdenes y un delay de 500 ms.
La tabla muestra 10 órdenes por página, se puede ordenar haciendo click en los encabezados de customer, amount y createdAt, y tiene controles de página anterior y siguiente con el texto Página 3 de 14.
# requisitos
Intl.NumberFormat e Intl.DateTimeFormat.# si te sobra tiempo, te van a preguntar
Implementá promiseAll(items) que se comporte como Promise.all sin usarlo. Recibe un array que puede mezclar promesas y valores comunes, y devuelve una promesa que resuelve con un array de resultados en el mismo orden de entrada.
Ejemplo: promiseAll([1, Promise.resolve(2), new Promise(r => setTimeout(() => r(3), 100))]) resuelve con [1, 2, 3]. Si cualquiera rechaza, la promesa devuelta rechaza con ese mismo error apenas ocurre.
# requisitos
[].# si te sobra tiempo, te van a preguntar
promiseAllSettled.n?Promise.all, Promise.race y Promise.any?useEffect.