redoc/src/services/SearchStore.ts
Alex Varchuk 2970f959cf
fix: rewrite recursive checks (#2072)
Co-authored-by: Roman Hotsiy <gotsijroman@gmail.com>
2022-07-18 17:47:06 +03:00

66 lines
1.5 KiB
TypeScript

import { IS_BROWSER } from '../utils/';
import type { IMenuItem } from './types';
import type { OperationModel } from './models';
import Worker from './SearchWorker.worker';
function getWorker() {
let worker: new () => Worker;
if (IS_BROWSER) {
try {
// tslint:disable-next-line
worker = require('workerize-loader?inline&fallback=false!./SearchWorker.worker');
} catch (e) {
worker = require('./SearchWorker.worker').default;
}
} else {
worker = require('./SearchWorker.worker').default;
}
return new worker();
}
export class SearchStore<T> {
searchWorker = getWorker();
indexItems(groups: Array<IMenuItem | OperationModel>) {
const recurse = items => {
items.forEach(group => {
if (group.type !== 'group') {
this.add(group.name, group.description || '', group.id);
}
recurse(group.items);
});
};
recurse(groups);
this.searchWorker.done();
}
add(title: string, body: string, meta?: T) {
this.searchWorker.add(title, body, meta);
}
dispose() {
(this.searchWorker as any).terminate();
(this.searchWorker as any).dispose();
}
search(q: string) {
return this.searchWorker.search<T>(q);
}
async toJS() {
return this.searchWorker.toJS();
}
load(state: any) {
this.searchWorker.load(state);
}
fromExternalJS(path?: string, exportName?: string) {
if (path && exportName) {
this.searchWorker.fromExternalJS(path, exportName);
}
}
}