Skip to content

Instantly share code, notes, and snippets.

@N1XUS
Created January 20, 2023 12:51
Show Gist options
  • Select an option

  • Save N1XUS/4f8dee62ee1a4bb9e1990a8be73023dc to your computer and use it in GitHub Desktop.

Select an option

Save N1XUS/4f8dee62ee1a4bb9e1990a8be73023dc to your computer and use it in GitHub Desktop.
export class ComboboxDataProvider extends AbstractDataProvider<AcceptableComboboxItem> {
constructor(private _values: Observable<AcceptableComboboxItem[]> | AcceptableComboboxItem[]) {
super();
}
fetch(): Observable<AcceptableComboboxItem[]> {
return isObservable(this._values) ? this._values : of(this._values);
}
}
export class ComboboxDataSource extends AbstractDataSourceProvider<AcceptableComboboxItem> {
constructor(dataProvider: ComboboxDataProvider) {
super(dataProvider);
}
}
export class ArrayComboboxDataSource extends ComboboxDataSource {
/** @hidden */
constructor(data: AcceptableComboboxItem[]) {
super(new ComboboxDataProvider(data));
}
}
export class ObservableComboboxDataSource extends ComboboxDataSource {
/** @hidden */
constructor(data: Observable<AcceptableComboboxItem[]>) {
super(new ComboboxDataProvider(data));
}
}
export interface ComboboxItem {
label: string;
value: string;
}
export type AcceptableComboboxItem = ComboboxItem | string;
export class ComboboxDataTransformer implements DataSourceParser<AcceptableComboboxItem> {
parse(source: Nullable<DataSource<AcceptableComboboxItem>>) {
if (isDataSource(source)) {
return source as ComboboxDataSource;
}
if (Array.isArray(source)) {
return new ArrayComboboxDataSource(source);
}
if (isObservable(source)) {
return new ObservableComboboxDataSource(source);
}
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment