UNPKG

svelte-search-engine

Version:

A wrapper for Google's Programmable Search Engine, providing a Svelte-friendly interface.

48 lines (47 loc) 1.53 kB
import { writable } from 'svelte/store'; import { registry } from './registry'; import { destroyRegistry } from './destroy'; export const searchType = ['web', 'image']; export const init = writable(false); export const starting = writable(null); export const ready = writable(null); export const rendered = writable(null); export function createCallbacks(type) { return { starting(gname, query) { starting.set({ type, gname, query }); }, ready(gname, query, promos, results, div) { ready.set({ type, gname, query, promos, results, div }); return registry.has(type, gname) ? true : undefined; }, rendered(gname, query, promos, results) { rendered.set({ type, gname, query, promos, results }); } }; } export function subscribeComponent(gname, component) { return ready.subscribe((input) => { if (!input) { return; } const c = new component({ target: input.div, props: { promos: input.promos, results: input.results } }); destroyRegistry.set(input.div, c); }); } export function subscribeComponents(gname, components) { const arr = searchType.reduce((acc, k) => { const component = components[k]; if (component) { acc.push(subscribeComponent(gname, component)); } return acc; }, []); return () => arr.forEach((unsubscribe) => unsubscribe()); }