vscroll
Version:
Virtual scroll engine
37 lines • 1.33 kB
JavaScript
import { AdapterContext } from './adapter/context';
import { reactiveConfigStorage, AdapterPropType, getDefaultAdapterProps } from './adapter/props';
import { wantedStorage } from './adapter/wanted';
const getDefaultAdapterConfig = () => {
const reactive = getDefaultAdapterProps()
.filter(({ type }) => type === AdapterPropType.Reactive)
.reduce((acc, { name, value }) => {
acc[name] = {
source: value,
emit: (source, val) => source.set(val)
};
return acc;
}, {});
return { mock: false, reactive };
};
export class DatasourceGeneric {
constructor(datasource, config) {
this.get = datasource.get;
this.settings = datasource.settings;
this.devSettings = datasource.devSettings;
const adapterContext = new AdapterContext(config || { mock: false });
this.adapter = adapterContext;
}
// todo: should it be published?
dispose() {
reactiveConfigStorage.delete(this.adapter.id);
wantedStorage.delete(this.adapter.id);
}
}
export const makeDatasource = (getAdapterConfig) => class extends DatasourceGeneric {
constructor(datasource) {
const config = typeof getAdapterConfig === 'function' ? getAdapterConfig() : getDefaultAdapterConfig();
super(datasource, config);
}
};
export const Datasource = makeDatasource();
//# sourceMappingURL=datasource.js.map