svelte-search-engine
Version:
A wrapper for Google's Programmable Search Engine, providing a Svelte-friendly interface.
49 lines (48 loc) • 1.56 kB
JavaScript
import { mount } from 'svelte';
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 = mount(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());
}