{"version":3,"file":"fundamental-ngx-cdk-data-source.mjs","sources":["../../../../libs/cdk/data-source/helpers/is-datasource.ts","../../../../libs/cdk/data-source/tokens.ts","../../../../libs/cdk/data-source/data-source.directive.ts","../../../../libs/cdk/data-source/data-source.module.ts","../../../../libs/cdk/data-source/helpers/common.ts","../../../../libs/cdk/data-source/models/matching-strategy.ts","../../../../libs/cdk/data-source/base/abstract-data-provider.class.ts","../../../../libs/cdk/data-source/base/base-data-source.class.ts","../../../../libs/cdk/data-source/helpers/apply-datasource-directive.ts","../../../../libs/cdk/data-source/fundamental-ngx-cdk-data-source.ts"],"sourcesContent":["import { DataSourceProvider } from '../models/data-source-provider';\n\n/**\n * Checks whether passed value is a valid data source.\n */\nexport function isDataSource<T = any>(value: any): value is DataSourceProvider<T> {\n    return value && typeof value.unsubscribe === 'function' && value.dataChanges;\n}\n","import { InjectionToken } from '@angular/core';\nimport { DataSourceParser } from './models/data-source';\n\n/**\n * Injection token used for passing custom datasource transformer into DataSourceProvider.\n */\nexport const FD_DATA_SOURCE_TRANSFORMER = new InjectionToken<DataSourceParser>('FdDataSourceTransformer');\n","import { DestroyRef, Directive, EventEmitter, inject, Input, OnDestroy, Output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { isDataSource } from './helpers/is-datasource';\nimport { DataSource, DataSourceParser, DataSourceProvider } from './models';\nimport { FD_DATA_SOURCE_TRANSFORMER } from './tokens';\n\n@Directive({\n    selector: '[fdkDataSource]',\n    standalone: true\n})\nexport class DataSourceDirective<T = any, P extends DataSourceProvider<T> = DataSourceProvider<T>>\n    implements OnDestroy\n{\n    /**\n     * Emits when the data source object has been changed.\n     */\n    @Output()\n    readonly dataSourceChanged = new EventEmitter<void>();\n\n    /**\n     * Event emitted when datasource content has been changed.\n     */\n    @Output()\n    readonly dataChanged = new EventEmitter<T[]>();\n\n    /**\n     * Event emitted when data provider loading state has been changed.\n     */\n    @Output()\n    readonly isLoading = new EventEmitter<boolean>();\n\n    /**\n     * Data source.\n     * @param source\n     */\n    @Input()\n    set dataSource(source: DataSource<T, P> | null) {\n        this._dataSource = source;\n        this._initializeDataSource();\n        this.dataSourceChanged.next();\n    }\n\n    get dataSource(): DataSource<T, P> | null {\n        return this._dataSource;\n    }\n\n    /** @hidden */\n    dataSourceProvider: P | undefined;\n\n    /**\n     * Data stream. Emits when new data retrieved.\n     */\n    readonly dataChanged$ = new BehaviorSubject<T[]>([]);\n\n    /** @hidden */\n    protected readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private _dataSource: DataSource<T, P> | null;\n\n    /** @hidden */\n    private _dsSubscription = new Subscription();\n\n    /** @hidden */\n    private readonly _dataSourceTransformer = inject<DataSourceParser<T, P>>(FD_DATA_SOURCE_TRANSFORMER);\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this.dataSourceProvider?.unsubscribe();\n        this._dsSubscription?.unsubscribe();\n    }\n\n    /** @Hidden */\n    protected _toDataStream(source: DataSource<T> | null): P | undefined {\n        return !source\n            ? undefined\n            : this._dataSourceTransformer\n              ? this._dataSourceTransformer.parse(source)\n              : undefined;\n    }\n\n    /** @hidden */\n    private _initializeDataSource(): void {\n        if (isDataSource(this.dataSource)) {\n            this.dataSourceProvider?.unsubscribe();\n\n            this._dsSubscription?.unsubscribe();\n        }\n        // Convert whatever comes in as DataSource, so we can work with it identically\n        this.dataSourceProvider = this._toDataStream(this.dataSource);\n\n        if (!this.dataSourceProvider) {\n            return;\n        }\n\n        this._dsSubscription = new Subscription();\n\n        this._dsSubscription.add(\n            this.dataSourceProvider.dataLoading\n                .pipe(takeUntilDestroyed(this._destroyRef))\n                .subscribe((isLoading) => this.isLoading.emit(isLoading))\n        );\n\n        this._dsSubscription.add(\n            this.dataSourceProvider.dataChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((data) => {\n                this.dataChanged.emit(data);\n                this.dataChanged$.next(data);\n            })\n        );\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { DataSourceDirective } from './data-source.directive';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [DataSourceDirective],\n    exports: [DataSourceDirective]\n})\nexport class DataSourceModule {}\n","import { isBlank, isStringMap, isType } from '@fundamental-ngx/cdk/utils';\n\nexport type ProviderParams = ReadonlyMap<string, any>;\n\n/** @Hidden */\nexport function getMatchingStrategyStartsWithPerTermReqexp(value: string): RegExp {\n    return new RegExp(`(\\\\s|^)(${value})`, 'gi');\n}\n\n/** @hidden */\nexport function objectValues(obj: any): any[] {\n    return Object.keys(obj).map((key) => obj[key]);\n}\n\n/** @hidden */\nexport function objectToName(target: any): string {\n    if (isBlank(target) || (!isStringMap(target) && !isType(target))) {\n        throw new Error(' Cannot convert. Uknown object');\n    }\n\n    return isType(target) ? target.prototype.constructor.name : target.constructor.name;\n}\n","export enum MatchingStrategy {\n    STARTS_WITH_PER_TERM = 'starts with per term',\n    STARTS_WITH = 'starts with',\n    CONTAINS = 'contains'\n}\n\nexport type MatchBy = (item: any) => any;\n\nexport interface MatchingBy {\n    firstBy: MatchBy;\n    secondaryBy?: MatchBy;\n}\n","import { isFunction, isJsObject } from '@fundamental-ngx/cdk/utils';\nimport { Observable, isObservable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport {\n    ProviderParams,\n    getMatchingStrategyStartsWithPerTermReqexp,\n    objectToName,\n    objectValues\n} from '../helpers/common';\nimport { MatchBy, MatchingBy, MatchingStrategy } from '../models/matching-strategy';\n\n/**\n * Base data provider class.\n */\nexport abstract class AbstractDataProvider<T> {\n    /** @hidden */\n    abstract fetch(params: ProviderParams, start?: number, end?: number): Observable<T[]>;\n\n    /** @hidden */\n    abstract getTotalItems(params?: Map<string, any>): Observable<number>;\n\n    /** @hidden */\n    protected _keyPath: string;\n\n    /** @hidden */\n    protected _matchingStrategy: MatchingStrategy = MatchingStrategy.STARTS_WITH;\n\n    /** @hidden */\n    protected _matchingBy: MatchingBy | null = null;\n\n    /** @hidden */\n    setLookupKey(key: string): void {\n        this._keyPath = key;\n    }\n\n    /** @hidden */\n    setMatchingBy(matchingBy: MatchingBy): void {\n        this._matchingBy = matchingBy;\n    }\n\n    /** @hidden */\n    setMatchingStrategy(strategy: MatchingStrategy): void {\n        this._matchingStrategy = strategy;\n    }\n}\n\n/**\n * Default data provider class used for other components to extend from.\n */\nexport class DataProvider<T> extends AbstractDataProvider<T> {\n    /** Default limit for the pagination. */\n    public defaultLimit = 50;\n    /** @hidden */\n    constructor(protected values: Observable<T[]> | T[]) {\n        super();\n    }\n\n    /** @hidden */\n    fetch(params: Map<string, any>): Observable<T[]> {\n        const observable = isObservable(this.values) ? this.values : of(this.values);\n\n        const queryString = params.get('query');\n        const limit = params.get('limit') || this.defaultLimit;\n\n        if (!queryString || queryString === '*') {\n            return observable.pipe(map((items) => this.withLimit(items, limit)));\n        }\n\n        const toLowerPattern = queryString.toLowerCase();\n\n        return observable.pipe(\n            map((items) => {\n                const result: any[] = [];\n\n                for (let i = 0; i < items.length; i++) {\n                    const item = items[i];\n                    if (this.matches(item, toLowerPattern)) {\n                        result.push(item);\n                        if (result.length >= limit) {\n                            break;\n                        }\n                    }\n                }\n\n                return result;\n            })\n        );\n    }\n\n    /**\n     * Returns observable with the number of total items that satisfy the search query.\n     * Warning: this is a naive implementation of the number of the filtered items.\n     * For real-world scenarios, it is recommended to override this method with its own logic.\n     */\n    getTotalItems(params: Map<string, any>): Observable<number> {\n        const observable = isObservable(this.values) ? this.values : of(this.values);\n        const queryString = params.get('query');\n\n        if (!queryString) {\n            return observable.pipe(map((items) => items.length));\n        }\n\n        const toLowerPattern = queryString.toLowerCase();\n\n        return observable.pipe(map((items) => items.filter((item) => this.matches(item, toLowerPattern)).length));\n    }\n\n    /**\n     * Warning: If you don't supply search Key and you want fulltext search, and you use this\n     * default implementation, be aware that it can perform poorly as it is a naive implementation\n     * that does not do deep compare.\n     */\n    matches(item: T, pattern: string): boolean {\n        if (!this._matchingBy) {\n            return false;\n        }\n        const { firstBy, secondaryBy } = this._matchingBy;\n\n        let matched = this.matchesBy(item, pattern, firstBy);\n        if (!matched && secondaryBy) {\n            matched = this.matchesBy(item, pattern, secondaryBy);\n        }\n\n        return matched;\n    }\n\n    /** @hidden */\n    matchesBy(item: any, pattern: string, matchingBy: MatchBy): boolean {\n        const value = isJsObject(item) && matchingBy ? matchingBy(item) : item;\n\n        if (isFunction(value)) {\n            return value.call(item);\n        } else if (isJsObject(value)) {\n            return this.hasObjectValue(item, pattern);\n        } else if (this._matchingStrategy === MatchingStrategy.STARTS_WITH_PER_TERM) {\n            const reqexp = getMatchingStrategyStartsWithPerTermReqexp(pattern);\n            return !!pattern && !!value && !!value.match(reqexp);\n        } else if (this._matchingStrategy === MatchingStrategy.STARTS_WITH) {\n            return !!pattern && !!value && value.toString().toLowerCase().startsWith(pattern.toLowerCase());\n        } else if (this._matchingStrategy === MatchingStrategy.CONTAINS) {\n            return !!pattern && !!value && value.toString().toLowerCase().indexOf(pattern) > -1;\n        } else {\n            return !!pattern && !!value && value.toString().toLowerCase() === pattern;\n        }\n    }\n\n    /** @hidden */\n    protected hasObjectValue(obj: any, pattern: string): boolean {\n        const values = objectValues(obj);\n        const parentObj = objectToName(obj);\n        const length2 = values.filter((value: any) => {\n            if (!value || Array.isArray(value)) {\n                return false;\n            } else if (!isJsObject(value) && !isFunction(value)) {\n                return value.toString().toLowerCase().indexOf(pattern) !== -1;\n            } else if (isJsObject(value) && objectToName(value) !== parentObj) {\n                return this.hasObjectValue(value, pattern);\n            }\n\n            return false;\n        }).length;\n        return length2 > 0;\n    }\n\n    /** @hidden */\n    private withLimit(data: Array<T>, limit?: number): Array<T> {\n        if (limit && data.length > limit) {\n            return data.slice(0, limit);\n        }\n        return data;\n    }\n}\n","import { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { DataSourceProvider } from '../models';\nimport { AbstractDataProvider } from './abstract-data-provider.class';\n\nexport abstract class BaseDataSource<T> implements DataSourceProvider<T> {\n    /**\n     * Max limit of items to be returned.\n     */\n    static readonly MaxLimit = 5;\n\n    /**\n     * Whether to enable limit of max items.\n     */\n    limitless = false;\n\n    /** @hidden */\n    protected readonly _dataChanges$: BehaviorSubject<T[]> = new BehaviorSubject<T[]>([]);\n    /** @hidden */\n    protected readonly _dataRequested$ = new BehaviorSubject<boolean>(false);\n    /** @hidden */\n    protected readonly _dataReceived$ = new BehaviorSubject<boolean>(false);\n    /** @hidden */\n    protected readonly _destroy$ = new Subject<void>();\n\n    /** @hidden */\n    protected readonly _dataLoading$ = new BehaviorSubject<boolean>(false);\n\n    /**\n     * Emitted when new data has been requested.\n     * @returns Observable\n     */\n    get dataRequested(): Observable<boolean> {\n        return this._dataRequested$.asObservable();\n    }\n\n    /**\n     * Emitted when new data has been received.\n     * @returns Observable\n     */\n    get dataReceived(): Observable<boolean> {\n        return this._dataReceived$.asObservable();\n    }\n\n    /**\n     * Emitted when loading state has been changed.\n     * @returns Observable.\n     */\n    get dataLoading(): Observable<boolean> {\n        return this._dataLoading$.asObservable();\n    }\n\n    /**\n     * Emits when the data from the provider has been changed.\n     * @returns Observable of data source objects.\n     */\n    get dataChanges(): Observable<T[]> {\n        return this._dataChanges$.asObservable().pipe(takeUntil(this._destroy$));\n    }\n\n    /** @hidden */\n    protected constructor(public dataProvider: AbstractDataProvider<any>) {}\n\n    /**\n     * Searches through the data source with defined parameters.\n     * @param predicate Search query.\n     * @param start start index.\n     * @param end end index.\n     */\n    match(predicate: string | Map<string, string> = new Map<string, string>(), start = 0, end = Infinity): void {\n        this._dataRequested$.next(true);\n        this._dataLoading$.next(true);\n        const searchParam = this._getSearchParams(predicate);\n\n        this.dataProvider\n            .fetch(searchParam, start, end)\n            .pipe(takeUntil(this._destroy$))\n            .subscribe({\n                next: (result: T[]) => {\n                    this._dataReceived$.next(true);\n                    this._dataLoading$.next(false);\n                    this._dataChanges$.next(result);\n                },\n                error: () => {\n                    this._dataReceived$.next(false);\n                    this._dataLoading$.next(false);\n                }\n            });\n    }\n\n    /**\n     * Returns the Observable of a total items number filtered by the `predicate` param.\n     * @param predicate Search query.\n     */\n    getTotalItems(predicate: string | Map<string, string> = new Map<string, string>()): Observable<number> {\n        const searchParam = this._getSearchParams(predicate);\n\n        return this.dataProvider.getTotalItems(searchParam);\n    }\n\n    /**\n     * Closes the stream\n     */\n    unsubscribe(): void {\n        this._destroy$.next();\n        this._destroy$.complete();\n    }\n\n    /** @hidden */\n    private _getSearchParams(predicate: string | Map<string, string>): Map<string, any> {\n        const searchParam = new Map<string, any>();\n\n        if (typeof predicate === 'string') {\n            searchParam.set('query', predicate);\n        } else if (predicate instanceof Map) {\n            predicate.forEach((v, k) => searchParam.set(k, v));\n        } else {\n            throw new Error('DataSource.match() predicate can only accepts string and Map');\n        }\n\n        if (!searchParam.has('limit') && !this.limitless) {\n            searchParam.set('limit', BaseDataSource.MaxLimit);\n        }\n\n        return searchParam;\n    }\n}\n","import { Type } from '@angular/core';\nimport { DataSourceDirective } from '../data-source.directive';\n\nexport const applyDatasourceDirective:\n    | Type<unknown>\n    | {\n          directive: Type<unknown>;\n          inputs?: string[];\n          outputs?: string[];\n      } = {\n    directive: DataSourceDirective,\n    inputs: ['dataSource'],\n    outputs: ['dataChanged']\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}