{"version":3,"file":"sowatech-shared-ds-datasource.mjs","sources":["../../../projects/shared/ds-datasource/aggregate-functions.service.ts","../../../projects/shared/ds-datasource/ds-csv/ds-csv.service.ts","../../../projects/shared/ds-datasource/ds-dtos.model.ts","../../../projects/shared/ds-datasource/ds-filter-helper.service.ts","../../../projects/shared/ds-datasource/ds-pagination-helper.service.ts","../../../projects/shared/ds-datasource/ds-refreshparams-store.service.ts","../../../projects/shared/ds-datasource/ds-selection-list-helper.service.ts","../../../projects/shared/ds-datasource/ds-sort-helper.service.ts","../../../projects/shared/ds-datasource/ds-datasource.component.ts","../../../projects/shared/ds-datasource/ds-selection-checkbox.component.ts","../../../projects/shared/ds-datasource/ds-filter.directive.ts","../../../projects/shared/ds-datasource/ds-filterdisplay.component.ts","../../../projects/shared/ds-datasource/ds-pagination-info.component.ts","../../../projects/shared/ds-datasource/ds-pagination-size-selector.component.ts","../../../projects/shared/ds-datasource/ds-pagination.component.ts","../../../projects/shared/ds-datasource/ds-sort.directive.ts","../../../projects/shared/ds-datasource/ds-datasource.module.ts","../../../projects/shared/ds-datasource/sowatech-shared-ds-datasource.ts"],"sourcesContent":["/* eslint-disable guard-for-in */\r\nimport { Injectable } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { DatasourceComponent } from './ds-datasource.component';\r\nimport { AggregateFunctionDefinition, AggregateFunctionFieldConfig, AggregateFunctionOperator, AggregateItem, AggregateResult, RefreshResult } from './ds-dtos.model';\r\n\r\nconst SELECTION_NOT_VISIBLE_MESSAGE = 'not all selected Ids are visible';\r\nconst NO_DATA_MESSAGE = 'no data set';\r\n\r\n/**\r\n * Helfer für AggregateFunctions.\r\n * Hier muss über die `init` Methode die datasource gesetzt werden\r\n * und es muss die `getVisibleColumns` methode von außen gesetzt werden\r\n */\r\n@Injectable()\r\nexport class AggregateFunctionsService<ListItem> {\r\n    private readonly subscriptions: Subscription[] = [];\r\n\r\n    public readonly values: Partial<Record<keyof ListItem, AggregateFunctionValue[]>> = {};\r\n    private listDatasource: DatasourceComponent<ListItem>;\r\n\r\n    public getConfigs?: () => AggregateFunctionFieldConfig<ListItem>[];\r\n\r\n    public init(listDatasource: DatasourceComponent<ListItem>) {\r\n        this.listDatasource = listDatasource;\r\n        this.subscriptions.push(\r\n            this.listDatasource.onAfterRefresh.subscribe(() => this.recalc()),\r\n            this.listDatasource.onSelectedIdsChanges.subscribe(() => this.recalc({ refreshIfNotVisible: true })),\r\n        );\r\n    }\r\n\r\n    public recalc({ refreshIfNotVisible = false }: { refreshIfNotVisible?: boolean; } = {}) {\r\n        if (!this.getConfigs) return;\r\n\r\n        if (this.listDatasource.isExternalRefresh())\r\n            this.tryRecalcWithExternalRefresh({ refreshIfNotVisible });\r\n\r\n        else this.recalcClientSide();\r\n    }\r\n\r\n    public cleanUp() {\r\n        this.subscriptions.forEach(s => s.unsubscribe());\r\n    }\r\n\r\n    public getAggregateItems(): AggregateItem<ListItem>[] {\r\n        if (!this.getConfigs) return [];\r\n\r\n        const configs = this.getConfigs();\r\n        return configs.flatMap(col => col.aggregateFunctions?.map(\r\n            af => ({ operator: af.operator, fieldname: col.fieldname, includedData: col.includedAggregateData } as AggregateItem<ListItem>)\r\n        ) ?? []);\r\n    }\r\n\r\n    public getAggregateItemsForSelectedData(): AggregateItem<ListItem>[] {\r\n        const allAggregateItems = this.getAggregateItems();\r\n        return allAggregateItems.filter(i => i.includedData === 'selected');\r\n    }\r\n\r\n    public setByRefreshResult(result: RefreshResult<ListItem>) {\r\n        if (!this.getConfigs) return;\r\n        if (!result.aggregateResults) result.aggregateResults = [];\r\n\r\n        if (!result.refreshParams.aggregateParam.aggregatesOnly)\r\n            this.resetValues();\r\n\r\n        const configs = result.refreshParams.aggregateParam.aggregatesOnly\r\n            ? this.getConfigsForSelectedData()\r\n            : this.getConfigs();\r\n        for (const col of configs)\r\n            this.values[col.fieldname] = this.getAggregateValuesOfColumn(col, result.aggregateResults);\r\n    }\r\n\r\n    public getValue(fieldName: keyof ListItem, operator: AggregateFunctionOperator): number | undefined {\r\n        return this.values[fieldName]?.find(v => v.operator === operator).value;\r\n    }\r\n\r\n    private getConfigsForSelectedData() {\r\n        const configs = this.getConfigs();\r\n        return configs.filter(c => c.includedAggregateData === 'selected');\r\n    }\r\n\r\n    private tryRecalcWithExternalRefresh({ refreshIfNotVisible = false }: { refreshIfNotVisible?: boolean; } = {}) {\r\n        try {\r\n            this.recalcWithExternalRefresh();\r\n        }\r\n        catch (error) {\r\n            if ((error as Error).message === SELECTION_NOT_VISIBLE_MESSAGE) {\r\n                if (refreshIfNotVisible) this.listDatasource.refreshAggregateFunctionsExternal();\r\n            }\r\n            else if ((error as Error).message === NO_DATA_MESSAGE)\r\n                return;\r\n            else throw error;\r\n        }\r\n    }\r\n\r\n    private recalcWithExternalRefresh() {\r\n        if (this.listDatasource.data.length === 0)\r\n            throw new Error(NO_DATA_MESSAGE);\r\n        const selectedIds = this.listDatasource.selectedIds;\r\n        const idField = this.listDatasource.idfield;\r\n\r\n        const configs = this.getConfigsForSelectedData().filter(col => col.fieldname && col.aggregateFunctions);\r\n        if (configs.length === 0)\r\n            return;\r\n\r\n        const hasOnlyVisibleSelectedIds = selectedIds.every(id => this.listDatasource.data.some(d => d[idField] === id));\r\n        if (!hasOnlyVisibleSelectedIds)\r\n            throw new Error(SELECTION_NOT_VISIBLE_MESSAGE);\r\n        for (const col of configs)\r\n            this.values[col.fieldname] = this.getColumnResult(col);\r\n    }\r\n\r\n    private recalcClientSide() {\r\n        this.resetValues();\r\n\r\n        const configs = this.getConfigs().filter(col => col.fieldname && col.aggregateFunctions);\r\n        if (this.listDatasource.selectedCount > 0 && this.listDatasource.dataBackup.length === 0) {\r\n            // Falls datasource.dataBackup noch nicht gesetzt ist, aber selectedIds aus dem localStorage schon\r\n            return;\r\n        }\r\n        for (const col of configs)\r\n            this.values[col.fieldname] = this.getColumnResult(col);\r\n    }\r\n\r\n    private resetValues() {\r\n        for (const key in this.values)\r\n            delete this.values[key];\r\n    }\r\n\r\n    private getColumnResult(col: AggregateFunctionFieldConfig<ListItem>): AggregateFunctionValue[] {\r\n        if (!this.columnHasAggregateFunctions(col))\r\n            return [];\r\n\r\n        const values = (col.includedAggregateData ?? 'selected') === 'selected'\r\n            ? this.getValuesOfSelectedItems(col)\r\n            : this.listDatasource.dataFiltered.map(item => this.getTypedValue(item, col.fieldname));\r\n        return col.aggregateFunctions\r\n            .map(agg => ({ operator: agg.operator, value: aggregateFunctionImplementations[agg.operator].calc(values) }));\r\n    }\r\n\r\n    private getAggregateValuesOfColumn(col: AggregateFunctionFieldConfig<ListItem>, results: AggregateResult<ListItem>[]): AggregateFunctionValue[] {\r\n        if (!this.columnHasAggregateFunctions(col))\r\n            return [];\r\n\r\n        return col.aggregateFunctions\r\n            .map(agg => ({ operator: agg.operator, value: results.find(res => res.fieldname === col.fieldname && res.operator === agg.operator)?.value }));\r\n    }\r\n\r\n    private getValuesOfSelectedItems(col: AggregateFunctionFieldConfig<ListItem>) {\r\n        if (this.listDatasource.selectedCount === 0)\r\n            return [];\r\n        return this.listDatasource.selectedIds.map(id => {\r\n            const item = this.listDatasource.getDataItem(id);\r\n            if (item === undefined)\r\n                throw new Error('Item in Datasource nicht gefunden.'); // Ursache wahrscheinlich Serverseitiges Paging\r\n            return this.getTypedValue(item, col.fieldname);\r\n        }) as number[];\r\n    }\r\n\r\n    private getTypedValue(item: ListItem, fieldname: keyof ListItem) {\r\n        return item[fieldname] as unknown as number;\r\n    }\r\n\r\n    private columnHasAggregateFunctions(column: AggregateFunctionFieldConfig<ListItem>) {\r\n        return column.aggregateFunctions?.length > 0;\r\n    }\r\n}\r\n\r\nexport const aggregateFunctionImplementations: Record<AggregateFunctionOperator, AggregateFunctionDefinition> = {\r\n    sum: {\r\n        defaultPrefix: 'Σ ',\r\n        calc: values => values.length > 0 ? values.reduce((a, b) => a + b, 0) : undefined,\r\n    },\r\n    min: {\r\n        defaultPrefix: 'min ',\r\n        calc: values => values.length > 0 ? Math.min(...values) : undefined,\r\n    },\r\n    max: {\r\n        defaultPrefix: 'max ',\r\n        calc: values => values.length > 0 ? Math.max(...values) : undefined,\r\n    },\r\n    count: {\r\n        defaultPrefix: '# ',\r\n        calc: values => values.length,\r\n    },\r\n};\r\n\r\ntype AggregateFunctionValue = {\r\n    operator: AggregateFunctionOperator;\r\n    value: number | undefined;\r\n};\r\n","import { DatePipe } from '@angular/common';\r\nimport { Inject, Injectable, LOCALE_ID } from '@angular/core';\r\nimport { SelectItem } from '@sowatech/shared/@types';\r\nimport { DsDatasourceDefaultConfig, IDatasourceDefaultCSVConfig } from '@sowatech/shared/shared-config';\r\n\r\nconst NEWLINE = '\\r\\n';\r\n@Injectable()\r\nexport class DatasourceCSVService {\r\n\r\n    constructor(\r\n        private datePipe: DatePipe,\r\n        private configService: DsDatasourceDefaultConfig,\r\n        @Inject(LOCALE_ID) private readonly locale: string\r\n    ) { }\r\n\r\n    public generateAndDownloadCSV<Model>(csvData: Model[], filename: string, config?: CSVConfig): void {\r\n        const csvString = this.generateCSV(csvData, config);\r\n        this.executeDownload(csvString, filename);\r\n    }\r\n\r\n    private generateCSV<Model>(csvData: Model[], config?: CSVConfig): string {\r\n        const filledConfig = this.applyConfig(csvData, config);\r\n        return this.createCSV(csvData, filledConfig);\r\n    }\r\n\r\n    private createCSV<Model>(csvData: Model[], config: CSVConfig): string {\r\n        let result = '';\r\n        result = this.buildHeaderRow(config);\r\n        for (const row of csvData)\r\n            result += this.buildRow(row, config);\r\n        result = this.removeNewline(result);\r\n        return result;\r\n    }\r\n\r\n    private removeNewline(lineWithNewline: string): string {\r\n        return lineWithNewline.slice(0, NEWLINE.length * -1);\r\n    }\r\n\r\n    private removeSeparator(lineWithSeparator: string): string {\r\n        return lineWithSeparator.slice(0, -1);\r\n    }\r\n\r\n    private buildHeaderRow(config: CSVConfig): string {\r\n        let headerRow = '';\r\n        for (const col of config.columns)\r\n            headerRow += this.createCell(config.titles === 'columnTitle' ? col.text : col.fieldname, null, config);\r\n        headerRow = this.removeSeparator(headerRow);\r\n        headerRow += NEWLINE;\r\n        return headerRow;\r\n    }\r\n\r\n    private buildRow<Model>(item: Model, config: CSVConfig): string {\r\n        let row = '';\r\n        config.columns.forEach(column => {\r\n            const content = this.getContent<Model>(item, column);\r\n            row += this.createCell(content, column, config);\r\n        });\r\n        this.removeSeparator(row);\r\n        row += NEWLINE;\r\n        return row;\r\n    }\r\n\r\n    private getContent<Model>(item: Model, column: CSVColumn) {\r\n        const fieldValue = item[column.fieldname];\r\n        if (column.lookups && column.lookups.length > 0 && this.isSelectItemArray(column.lookups))\r\n            return column.lookups.find(lu => lu.value === fieldValue)?.text;\r\n        else if (column.type === 'boolean')\r\n            return fieldValue ? column.trueValueText : column.falseValueText;\r\n        return fieldValue;\r\n    }\r\n\r\n    private isSelectItemArray(lookups: Array<string> | Array<SelectItem>): lookups is Array<SelectItem> {\r\n        return typeof lookups[0] !== 'string';\r\n    }\r\n\r\n    private createCell<Field>(content: Field, columndata: CSVColumn, config: CSVConfig): string {\r\n        return this.applyQuotes(this.formatCSVField(content, columndata), config.useQuotes) + config.separator;\r\n    }\r\n\r\n    private applyQuotes(content: string, useQuotes: boolean): string {\r\n        const quotes = useQuotes ? '\"' : '';\r\n        return quotes + (useQuotes ? content.replace(/\"/g, '\"\"') : content) + quotes;\r\n    }\r\n\r\n    private formatCSVField(content: unknown, columndata: CSVColumn): string {\r\n        if (content === null || content === undefined) return '';\r\n        switch (typeof content) {\r\n            case 'number':\r\n                return content.toLocaleString(this.locale, columndata.digitsInfo ? new DigitsInfoHelper(columndata.digitsInfo) : { useGrouping: false, maximumFractionDigits: 20 });\r\n            case 'object':\r\n                return (content instanceof Date) ? this.datePipe.transform(content, columndata.dateformat ?? 'yyyy-MM-dd') : String(content);\r\n            default:\r\n                return String(content);\r\n        }\r\n    }\r\n\r\n    private applyConfig<Model>(csvData: Model[], config?: CSVConfig) {\r\n        const filledConfig: CSVConfig = { ...config };\r\n        filledConfig.columns ??= (csvData.length > 0 ? Object.keys(csvData[0]).map(fieldname => ({ fieldname })) : []);\r\n        filledConfig.separator ??= this.configService.csvConfig.separator;\r\n        filledConfig.useQuotes ??= this.configService.csvConfig.useQuotes;\r\n        filledConfig.titles ??= this.configService.csvConfig.titles;\r\n        return filledConfig;\r\n    }\r\n\r\n    private readonly utf8BOM = new Uint8Array([0xEF, 0xBB, 0xBF]);\r\n    private executeDownload(data: string, fileName: string) {\r\n        const blob: Blob = new Blob([this.utf8BOM, data], { type: 'text/csv' });\r\n        const tempLink = document.createElement('a');\r\n        tempLink.href = window.URL.createObjectURL(blob);\r\n        tempLink.setAttribute('download', fileName + '.csv');\r\n        tempLink.click();\r\n        window.URL.revokeObjectURL(tempLink.href);\r\n    }\r\n}\r\n\r\nexport interface CSVConfig extends IDatasourceDefaultCSVConfig {\r\n    columns?: Array<CSVColumn>;\r\n}\r\n\r\nexport interface CSVColumn<Model = any> {\r\n    fieldname: Extract<keyof Model, string>;\r\n    text?: string;\r\n    digitsInfo?: digitsInfo;\r\n    dateformat?: DateFormat;\r\n    type?: string;\r\n    lookups?: Array<SelectItem> | Array<string>;\r\n    trueValueText?: string;\r\n    falseValueText?: string;\r\n}\r\n\r\nclass DigitsInfoHelper {\r\n    constructor(digitsInfo: digitsInfo) {\r\n        this.minimumIntegerDigits = parseInt(digitsInfo.match(/^(\\d+)\\./)[1], 10);\r\n        this.minimumFractionDigits = parseInt(digitsInfo.match(/.(\\d+)-/)[1], 10);\r\n        this.maximumFractionDigits = parseInt(digitsInfo.match(/-(\\d+)$/)[1], 10);\r\n        this.useGrouping = false;\r\n    }\r\n    public readonly minimumIntegerDigits: number;\r\n    public readonly minimumFractionDigits: number;\r\n    public readonly maximumFractionDigits: number;\r\n    public readonly useGrouping: boolean;\r\n}\r\n\r\nexport type digitsInfo = `${number}.${number}-${number}`;\r\nexport type DateFormat = string;\r\n","export class ISortItem {\r\n    public fieldname: string;\r\n    public reverse: boolean;\r\n}\r\n\r\nexport class SortItem implements ISortItem {\r\n    constructor(sortItemData: ISortItem);\r\n    constructor(fieldname: string);\r\n    constructor(fieldname: string, reverse: boolean);\r\n    constructor(arg1: any, arg2?: boolean) {\r\n        if (typeof (arg1) === 'string') {\r\n            const fieldname = arg1;\r\n            const reverse = arg2 != undefined ? arg2 : false;\r\n            this.fieldname = fieldname;\r\n            this.reverse = reverse;\r\n        }\r\n        else {\r\n            const sortItemData: ISortItem = arg1;\r\n            this.fieldname = sortItemData.fieldname;\r\n            this.reverse = sortItemData.reverse != undefined ? sortItemData.reverse : false;\r\n        }\r\n    }\r\n    public fieldname: string;\r\n    public reverse = false;\r\n\r\n    public static createSortItems(src: ISortItem[]): SortItem[] {\r\n        const result = new Array<SortItem>();\r\n        if (src) {\r\n            for (const srcItem of src)\r\n                result.push(new SortItem(srcItem));\r\n\r\n        }\r\n        return result;\r\n    }\r\n}\r\n\r\n//reine daten (zb aus aus json)\r\nexport class IFilterItem {\r\n    public fieldnames: string[];\r\n    public fieldvalues: string[];\r\n    public filterOperator: FilterOperator;\r\n}\r\n\r\nexport class FilterItem implements IFilterItem {\r\n    constructor(filterItemData: IFilterItem);\r\n    constructor(fieldnames: Array<string>, fieldvalue: string, filterOperator?: FilterOperator);\r\n    constructor(fieldnames: Array<string>, fieldvalues: Array<string>, filterOperator?: FilterOperator);\r\n    constructor(arg1: any, arg2?: any, filterOperator?: FilterOperator) {\r\n\r\n        if (Array.isArray(arg1)) {\r\n            this.fieldnames = arg1 as Array<string>;\r\n            const fieldvalues = Array.isArray(arg2) ? arg2 : [arg2];\r\n            this.fieldvalues = [];\r\n            for (const f of fieldvalues) {\r\n\r\n                if (typeof (f) !== 'string') {\r\n                    const translation = $localize`:@@Datasource.Filter.StringExpected.msg.Text:fieldvalue string wurde erwartet`;\r\n                    console.error(translation);\r\n                }\r\n                this.fieldvalues.push(f.toLocaleLowerCase());\r\n            }\r\n            this.filterOperator = filterOperator;\r\n        }\r\n        else {\r\n            const filterItemData = arg1 as IFilterItem;\r\n            this.fieldnames = filterItemData.fieldnames;\r\n            this.fieldvalues = filterItemData.fieldvalues;\r\n            this.filterOperator = filterItemData.filterOperator;\r\n        }\r\n        if (this.filterOperator == undefined) this.filterOperator = FilterOperator.Contains;\r\n    }\r\n    public fieldnames: string[];\r\n    public fieldvalues: string[];\r\n    public filterOperator: FilterOperator;\r\n\r\n    public fieldnamesAreEqual(fieldnames: string[]): boolean;\r\n    public fieldnamesAreEqual(fieldname: string): boolean;\r\n    public fieldnamesAreEqual(arg1: string | string[]): boolean {\r\n        const fieldnames = Array.isArray(arg1) ? arg1 as string[] : [arg1 as string];\r\n        return this.fieldnames.length === fieldnames.length &&\r\n            fieldnames.every((f) => this.fieldnames.includes(f));\r\n    }\r\n\r\n    public get hasFieldValue(): boolean {\r\n        return this.fieldvalues && this.fieldvalues.filter(item => item).length > 0;\r\n    }\r\n\r\n    public valueMatchesFilter(comparer: (filtervalue: string) => boolean): boolean {\r\n        return this.fieldvalues.some(key => comparer(key));\r\n    }\r\n\r\n    public static createFilterItems(src: IFilterItem[]): FilterItem[] {\r\n        if (!src) return [];\r\n\r\n        return src.map(srcItem => new FilterItem(srcItem));\r\n    }\r\n\r\n    public equals(other: FilterItem): boolean {\r\n        return this.fieldnamesAreEqual(other.fieldnames)\r\n            && this.filterOperator === other.filterOperator\r\n            && this.fieldvalues.length === other.fieldvalues.length\r\n            && this.fieldvalues.every((value, index) => value === other.fieldvalues[index]);\r\n    }\r\n\r\n    public clone(): FilterItem {\r\n        return new FilterItem(this.fieldnames, this.fieldvalues, this.filterOperator);\r\n    }\r\n}\r\n\r\nexport enum FilterOperator { StartsWith, IsEqual, Contains, IsGreaterOrEqual, IsLessOrEqual }\r\n\r\nexport class PaginationInfo {\r\n    public currentPageIndex = 0;\r\n    public currentPageNumOfItems = 0;\r\n    public maxPageIndex = 0;\r\n    public totalNumOfItems = 0;\r\n    public pageSize = 0;\r\n    /** falls gesetzt, wird beim externalRefresh der PageIndex anhand der Id raus gesucht */\r\n    public goToPageOfId?: string;\r\n}\r\n\r\nexport interface AggregateItem<DTO = any> {\r\n    fieldname: Extract<keyof DTO, string>;\r\n    operator: AggregateFunctionOperator;\r\n    includedData: 'selected' | 'all';\r\n}\r\n\r\nexport class AggregateParam {\r\n    public items: AggregateItem[] = [];\r\n    /** falls includedData = 'selected' */\r\n    // Wir legen den typ der Id normalerweise nicht fest, aber der Server muss irgendeinen typen erwarten, deshalb string\r\n    public selectedIds: string[] = [];\r\n    /**\r\n     * wenn `true`: Beim Refresh werden nur die Aggregatfunktionen aktualisiert zurück gegeben.\r\n     * Es werden nicht die Daten neu geladen.\r\n     */\r\n    public aggregatesOnly = false;\r\n}\r\n\r\n/**\r\n * - 'page' - normaler refresh, bei dem 1 Page zurückgegeben wird\r\n * - 'aggregate-data' - refresh, bei dem nur die aggregate items geladen werden\r\n * - 'csv-export' - lädt alle datensätze für den csv-export\r\n */\r\nexport type ExternalRefreshMode = 'page' | 'aggregate-data' | 'csv-export';\r\n\r\nexport class RefreshParams {\r\n    public paginationInfo = new PaginationInfo();\r\n    public sortItems: SortItem[] = [];\r\n    public filterItems: FilterItem[] = [];\r\n    public aggregateParam = new AggregateParam();\r\n    public idField?: string; // wenn nicht gesetzt: serverseitig suchen\r\n    public mode?: ExternalRefreshMode = 'page';\r\n}\r\n\r\nexport interface AggregateResult<T> {\r\n    fieldname: Extract<keyof T, string>;\r\n    operator: AggregateFunctionOperator;\r\n    value: number;\r\n}\r\n\r\nexport class RefreshResult<T> {\r\n    public refreshParams = new RefreshParams();\r\n    public data: T[] = [];\r\n    public aggregateResults?: AggregateResult<T>[] = [];\r\n}\r\n\r\nexport type AggregateFunctionOperator = 'sum' | 'min' | 'max' | 'count';\r\n\r\nexport type AggregateFunctionFieldConfig<T> = {\r\n    fieldname?: Extract<keyof T, string>;\r\n    aggregateFunctions?: AggregateFunctionConfig[];\r\n    includedAggregateData?: 'selected' | 'all';\r\n    unit?: string;\r\n    digitInfo?: string;\r\n};\r\n\r\nexport type AggregateFunctionDefinition = {\r\n    defaultPrefix: string;\r\n    calc: (values: number[]) => number | undefined;\r\n};\r\n\r\nexport interface AggregateFunctionConfig {\r\n    operator: AggregateFunctionOperator;\r\n    /** @default GridColumn.unit */\r\n    unit?: string;\r\n    /** @default GridColumn.digitInfo */\r\n    format?: string;\r\n    /** @default AggregateFunctionDefinition.defaultPrefix // aus shared (z.B. 'sum' => 'Σ ') */\r\n    prefix?: string;\r\n}\r\n\r\n/**Refresh Mechanismus, der in der Datasource benutzt wird */\r\nexport enum RefreshType {\r\n    /**\r\n     * Der Datasource werden alle Daten übergeben und sie kümmert sich selbst um das Managen der Daten\r\n     */\r\n    internal,\r\n    /**\r\n     *In der Datasource wird ein Asynchroner Callback (\"externalRefresh\") gesetzt, der mit RefreshParams ein RefreshResult lädt\r\n     */\r\n    externalRefreshCallback,\r\n    /**\r\n     * Das Laden der Daten passiert außerhalb der Datasource.\r\n     * Es wird von einem Output (refreshResultRequested) ausgelöst und das Ergebnis wird per Input (externalRefreshResult) in die Datasource übergeben\r\n     */\r\n    externalRefreshInput,\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { LoggerService } from '@sowatech/shared/logger';\r\nimport moment from 'moment';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { FilterItem, FilterOperator } from './ds-dtos.model';\r\n\r\n@Injectable() export class FilterHelper {\r\n\r\n    constructor(private loggerService: LoggerService) {\r\n        this.filterStrategies = new Array<FilterStrategy>();\r\n        this.filterStrategies.push(new FilterStrategyStartsWith());\r\n        this.filterStrategies.push(new FilterStrategyIsEqual());\r\n        this.filterStrategies.push(new FilterStrategyContains());\r\n        this.filterStrategies.push(new FilterStrategyGreaterOrEqual());\r\n        this.filterStrategies.push(new FilterStrategyLessOrEqual());\r\n    }\r\n\r\n    private filterStrategies: Array<FilterStrategy>;\r\n    private items: Array<FilterItem> = [];\r\n    onFilterItems = new Subject<Array<FilterItem>>();\r\n    public get filterItems(): Array<FilterItem> { return this.items; }\r\n\r\n    private getItemByFieldNames(fieldnames: string[], filterOperator: FilterOperator): FilterItem {\r\n        const resultItems = this.items.filter((item) => item.fieldnamesAreEqual(fieldnames) && item.filterOperator == filterOperator);\r\n        if (resultItems.length > 1) console.warn('FilterHandler has duplicate fieldnames');\r\n        return resultItems.length > 0 ? resultItems[0] : null;\r\n    }\r\n\r\n    public getFirstValueByFieldname(fieldnames: string[], filterOperator: FilterOperator): string | null {\r\n        const filterItem = this.getItemByFieldNames(fieldnames, filterOperator);\r\n        return filterItem && filterItem.fieldvalues?.length > 0 ? filterItem.fieldvalues[0] : null;\r\n    }\r\n\r\n    public clear() {\r\n        this.items = [];\r\n        this.onFilterItems.next(this.items);\r\n    }\r\n\r\n    public add(filterItems: Array<FilterItem>);\r\n    public add(filterItem: FilterItem);\r\n    public add(arg: any) {\r\n        // handle overload params\r\n        let filterItems: Array<FilterItem>;\r\n        if (Array.isArray(arg))\r\n            filterItems = arg;\r\n\r\n        else {\r\n            filterItems = new Array<FilterItem>();\r\n            filterItems.push(arg);\r\n        }\r\n        // method body\r\n        for (const filterItem of filterItems) {\r\n            const existingItem = this.getItemByFieldNames(filterItem.fieldnames, filterItem.filterOperator);\r\n            if (existingItem) {\r\n                if (filterItem.hasFieldValue) {\r\n                    existingItem.fieldvalues = filterItem.fieldvalues;\r\n                    existingItem.filterOperator = filterItem.filterOperator;\r\n                }\r\n                else {\r\n                    const idx = this.items.indexOf(existingItem);\r\n                    this.items.splice(idx, 1);\r\n                }\r\n            }\r\n            else {\r\n                if (filterItem.hasFieldValue)\r\n                    this.items.push(filterItem);\r\n\r\n            }\r\n        }\r\n        this.onFilterItems.next(this.items);\r\n    }\r\n    public set(filterItems: Array<FilterItem>);\r\n    public set(filterItem: FilterItem);\r\n    public set(arg1: any) {\r\n        this.items = [];\r\n        this.add(arg1);\r\n    }\r\n\r\n    public execute(dataSourceBackup: Array<any>, dataSource: Array<any>) {\r\n        let workSource = dataSourceBackup.slice(0);\r\n        for (const f of this.items) {\r\n            workSource = workSource.filter(workItem => {\r\n                const filterOperatorStrategies = this.filterStrategies.filter(strat => strat.filterOperator == f.filterOperator);\r\n                const filterOperatorStrategy = filterOperatorStrategies.length > 0 ? filterOperatorStrategies[0] : null;\r\n                if (filterOperatorStrategy == null) this.loggerService.error('No strategy for filteroperator=' + f.filterOperator);\r\n                const filterSuccess = filterOperatorStrategy ? filterOperatorStrategy.filterConditionCompare(workItem, f) : false;\r\n                return filterSuccess;\r\n            });\r\n        }\r\n        dataSource.splice(0);\r\n        dataSource.push(...workSource);\r\n    }\r\n\r\n}\r\n\r\nabstract class FilterStrategy {\r\n\r\n    public filterOperator: FilterOperator;\r\n\r\n    public filterConditionCompare(testedItem: any, filter: FilterItem): boolean {\r\n        return filter.filterOperator != this.filterOperator || this.filterConditionCompareInternal(testedItem, filter);\r\n    }\r\n\r\n    protected filterConditionCompareInternal(testedItem: any, filter: FilterItem): boolean {\r\n        let result = false;\r\n        for (const fieldname of filter.fieldnames) {\r\n            const testedValueAsString = this.getValueAsLowerCaseString(testedItem[fieldname]);\r\n            result = this.filterConditionCompareValue(testedValueAsString, filter);\r\n            if (result) break;\r\n        }\r\n        return result;\r\n    }\r\n\r\n    protected abstract filterConditionCompareValue(testedValue: string, filter: FilterItem): boolean;\r\n\r\n    protected getValueAsLowerCaseString(value): string {\r\n        let result = '';\r\n\r\n        if (typeof (value) === 'string')\r\n            result = value as string;\r\n\r\n        if (typeof (value) === 'number')\r\n            result = (value as number).toString();\r\n\r\n        if (typeof (value) === 'boolean')\r\n            result = (value as boolean).toString();\r\n\r\n        if (value instanceof Date)\r\n            result = (moment(value as Date)).format('YYYY-MM-DD');\r\n\r\n        return result.toLocaleLowerCase();\r\n    }\r\n}\r\n\r\nclass FilterStrategyStartsWith extends FilterStrategy {\r\n\r\n    constructor() {\r\n        super();\r\n        this.filterOperator = FilterOperator.StartsWith;\r\n    }\r\n\r\n    protected filterConditionCompareValue(testedValue: string, filter: FilterItem): boolean {\r\n        const filterStartsWithWildCard = filter.hasFieldValue && filter.fieldvalues.find(fv => fv.startsWith('*')) != undefined;\r\n        if (filterStartsWithWildCard)\r\n            return this.filterConditionWildcard(testedValue, filter);\r\n\r\n        else\r\n            return this.filterConditionStrict(testedValue, filter);\r\n\r\n    }\r\n\r\n    protected filterConditionStrict(testedValue: string, filter: FilterItem): boolean {\r\n        return filter.valueMatchesFilter((inputValue: string) => testedValue.startsWith(inputValue));\r\n    }\r\n\r\n    protected filterConditionWildcard(testedValue: string, filter: FilterItem): boolean {\r\n        const filterWithoutWildCard = new FilterItem(filter);\r\n        filterWithoutWildCard.fieldvalues = filterWithoutWildCard.fieldvalues.map(fv => fv.startsWith('*') ? fv.substring(1) : fv);\r\n        return filterWithoutWildCard.valueMatchesFilter((inputValue: string) => testedValue.includes(inputValue));\r\n    }\r\n}\r\n\r\nclass FilterStrategyIsEqual extends FilterStrategy {\r\n\r\n    constructor() {\r\n        super();\r\n        this.filterOperator = FilterOperator.IsEqual;\r\n    }\r\n\r\n    protected filterConditionCompareValue(testedValue: string, filter: FilterItem): boolean {\r\n        return filter.valueMatchesFilter((inputValue: string) => inputValue === testedValue);\r\n    }\r\n\r\n}\r\n\r\nclass FilterStrategyContains extends FilterStrategy {\r\n\r\n    constructor() {\r\n        super();\r\n        this.filterOperator = FilterOperator.Contains;\r\n    }\r\n\r\n    protected filterConditionCompareValue(testedValue: string, filter: FilterItem): boolean {\r\n        return filter.valueMatchesFilter((inputValue: string) => testedValue.indexOf(inputValue) >= 0);\r\n    }\r\n\r\n}\r\n\r\nclass FilterStrategyGreaterOrEqual extends FilterStrategy {\r\n\r\n    constructor() {\r\n        super();\r\n        this.filterOperator = FilterOperator.IsGreaterOrEqual;\r\n    }\r\n\r\n    protected filterConditionCompareValue(testedValue: string, filter: FilterItem): boolean {\r\n        return filter.valueMatchesFilter((inputValue: string) => inputValue <= testedValue);\r\n    }\r\n}\r\n\r\nclass FilterStrategyLessOrEqual extends FilterStrategy {\r\n\r\n    constructor() {\r\n        super();\r\n        this.filterOperator = FilterOperator.IsLessOrEqual;\r\n    }\r\n\r\n    protected filterConditionCompareValue(testedValue: string, filter: FilterItem): boolean {\r\n        return filter.valueMatchesFilter((inputValue: string) => inputValue >= testedValue);\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { DsDatasourceDefaultConfig } from '@sowatech/shared/shared-config';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { PaginationInfo } from './ds-dtos.model';\r\n\r\n@Injectable()\r\nexport class PaginationHelper {\r\n    constructor(\r\n        config: DsDatasourceDefaultConfig,\r\n    ) {\r\n        this.pageSize = config.pageSize;\r\n    }\r\n\r\n    public init(dsPaginationChangedEmitter: Subject<PaginationInfo>) {\r\n        this.paginationChangedEmitter = dsPaginationChangedEmitter;\r\n    }\r\n\r\n    private paginationChangedEmitter: Subject<PaginationInfo>;\r\n    public get paginationInfo(): PaginationInfo {\r\n        return {\r\n            currentPageIndex: this.currentPageIndex,\r\n            maxPageIndex: this.maxPageIndex,\r\n            totalNumOfItems: this.totalNumOfItems,\r\n            currentPageNumOfItems: this.currentPageIndex < this.maxPageIndex ? this.pageSize : (this.totalNumOfItems - (this.maxPageIndex * this.pageSize)),\r\n            pageSize: this.pageSize\r\n        };\r\n    }\r\n\r\n    public pageSize: number;\r\n    public setPageSize(pageSize: number, data: Array<any>) {\r\n        this.pageSize = pageSize;\r\n        this.recalcMaxPageIndexAndTotalNum(data);\r\n    }\r\n\r\n    private _currentPageIndex = 0;\r\n    public get currentPageIndex(): number {\r\n        return this._currentPageIndex;\r\n    }\r\n    public set currentPageIndex(value: number) {\r\n        //if (value >= 0 && value <= this.maxPageIndex && value != this._currentPageIndex) {\r\n        //    this._currentPageIndex = value;\r\n        //    this.paginationChangedEmitter.emit(this.paginationInfo);\r\n        //}\r\n        if (value >= 0 && value != this._currentPageIndex) {\r\n            this._currentPageIndex = value;\r\n            this.paginationChangedEmitter.next(this.paginationInfo);\r\n        }\r\n    }\r\n\r\n    private totalNumOfItems = 0;\r\n\r\n    private _maxPageIndex = 0;\r\n    public get maxPageIndex(): number {\r\n        return this._maxPageIndex;\r\n    }\r\n\r\n    private recalcMaxPageIndexAndTotalNum(data: any[]) {\r\n        let haschanges = false;\r\n        if (this.totalNumOfItems !== data.length) {\r\n            this.totalNumOfItems = data.length;\r\n            haschanges = true;\r\n        }\r\n\r\n        let newmaxPageIndex = Math.ceil(data.length / this.pageSize) - 1;\r\n        if (newmaxPageIndex < 0) newmaxPageIndex = 0;\r\n        if (newmaxPageIndex != this._maxPageIndex) {\r\n            this._maxPageIndex = newmaxPageIndex;\r\n            //if (this.currentPageIndex > this._maxPageIndex) {\r\n            //    this.currentPageIndex = this._maxPageIndex;\r\n            //}\r\n            haschanges = true;\r\n        }\r\n        if (haschanges)\r\n            this.paginationChangedEmitter?.next(this.paginationInfo);\r\n    }\r\n\r\n    public execute(data: any[]) {\r\n        this.recalcMaxPageIndexAndTotalNum(data);\r\n        if (this.pageSize < 1 || data.length <= this.pageSize)\r\n            return;\r\n        else {\r\n            if (this.currentPageIndex < 0) this.currentPageIndex = 0;\r\n            //if (this.currentPageIndex > this.maxPageIndex) this.currentPageIndex = this.maxPageIndex;\r\n            const usedPageIndex = this.currentPageIndex <= this.maxPageIndex ? this.currentPageIndex : this.maxPageIndex;\r\n            //let workSource = Enumerable.from(data).skip(this.currentPageIndex * this.pageSize).take(this.pageSize).toArray();\r\n            const workSource = data.slice(usedPageIndex * this.pageSize, usedPageIndex * this.pageSize + this.pageSize);\r\n            data.splice(0);//duplicate ???\r\n            for (const workItem of workSource)\r\n                data.push(workItem);\r\n        }\r\n    }\r\n}\r\n","import { DestroyRef, inject, Injectable } from '@angular/core';\r\nimport { UserPropertiesStorageService } from '@sowatech/shared/user-properties-storage';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { FilterItem, IFilterItem, ISortItem, PaginationInfo, SortItem } from './ds-dtos.model';\r\n\r\nconst STOREKEY_PREFIX = 'DatasourceRefreshParamsStore.';\r\nconst STOREKEY_FILTERITEMS_POSTFIX = '.FilterItems';\r\nconst STOREKEY_SORTITEMS_POSTFIX = '.SortItems';\r\nconst STOREKEY_PAGEINDEX_POSTFIX = '.PageIndex';\r\nconst STOREKEY_PAGESIZE_POSTFIX = '.PageSize';\r\nconst STOREKEY_SELECTION_POSTFIX = '.Selection';\r\n\r\n@Injectable()\r\nexport class RefreshParamsStoreHelper {\r\n    private readonly userProperties = inject(UserPropertiesStorageService);\r\n    private readonly destroyRef = inject(DestroyRef);\r\n\r\n    public init(\r\n        storeKey: string,\r\n        onAfterViewInit: Subject<void>,\r\n        onFilterItems: Subject<Array<FilterItem>>,\r\n        onSortItems: Subject<Array<SortItem>>,\r\n        onPaginationChanged: Subject<PaginationInfo>,\r\n        onSelectionChanged: Subject<Array<any>>,\r\n        refreshDatasource: (filterItems: FilterItem[], sortItems: SortItem[], pageIndex?: number, selectedIds?: any[], pageSize?: number) => void\r\n    ) {\r\n        this.storeKey = storeKey;\r\n        const subscriptions = [\r\n            onAfterViewInit.subscribe(() => this.loadFromStorage()),\r\n            onFilterItems.subscribe((filterItems) => { this.onDatasourceFilterChanged(filterItems); }),\r\n            onSortItems.subscribe((sortItems) => { this.onDatasourceSortChanged(sortItems); }),\r\n            onPaginationChanged.subscribe((paginationInfo: PaginationInfo) => { this.onDatasourcePaginationChanged(paginationInfo); }),\r\n            onSelectionChanged.subscribe((selectedIds: any[]) => { this.onDatasourceSelectionChanged(selectedIds); }),\r\n        ];\r\n        this.destroyRef.onDestroy(() => subscriptions.forEach(s => s.unsubscribe()));\r\n\r\n        this.refreshDatasource = (filterItems: FilterItem[], sortItems: SortItem[], pageIndex?: number, selectedIds?: any[], pageSize?: number) => { refreshDatasource(filterItems, sortItems, pageIndex, selectedIds, pageSize); };\r\n    }\r\n\r\n    private storeKey: string;\r\n    public clearStorage() {\r\n        this.userProperties.save(this.filterItemsStoreKey, ''); // ? eher delete?\r\n        this.userProperties.save(this.sortItemsStoreKey, '');\r\n        this.userProperties.save(this.paginationStoreKey, '');\r\n        this.userProperties.save(this.selectionStoreKey, '');\r\n        this.userProperties.save(this.pageSizeStoreKey, '');\r\n    }\r\n\r\n    public loadFromStorage() {\r\n        const storedFilterData = this.userProperties.load<IFilterItem[]>(this.filterItemsStoreKey);\r\n        const filterItems = FilterItem.createFilterItems(storedFilterData);\r\n\r\n        const storedSortData = this.userProperties.load<ISortItem[]>(this.sortItemsStoreKey);\r\n        const sortItems = SortItem.createSortItems(storedSortData);\r\n\r\n        const pageIndex = this.userProperties.load<number>(this.paginationStoreKey);\r\n\r\n        const selectedItems = this.userProperties.load<any[]>(this.selectionStoreKey);\r\n        const pageSize = this.userProperties.load<number>(this.pageSizeStoreKey);\r\n        this.refreshDatasource(filterItems, sortItems, pageIndex, selectedItems, pageSize);\r\n    }\r\n\r\n    private refreshDatasource: (filterItems: FilterItem[], sortItems: SortItem[], pageIndex?: number, selectedIds?: any[], pageSize?: number) => void;\r\n\r\n    //---FILTER\r\n    private get filterItemsStoreKey(): string {\r\n        return STOREKEY_PREFIX + this.storeKey + STOREKEY_FILTERITEMS_POSTFIX;\r\n    }\r\n\r\n    private onDatasourceFilterChanged(filterItems: FilterItem[]) {\r\n        this.userProperties.save(this.filterItemsStoreKey, filterItems);\r\n    }\r\n\r\n    //---SORT\r\n    private get sortItemsStoreKey(): string {\r\n        return STOREKEY_PREFIX + this.storeKey + STOREKEY_SORTITEMS_POSTFIX;\r\n    }\r\n\r\n    private onDatasourceSortChanged(sortItems: SortItem[]) {\r\n        this.userProperties.save(this.sortItemsStoreKey, sortItems);\r\n    }\r\n\r\n    //---PAGINATION\r\n    private get paginationStoreKey(): string {\r\n        return STOREKEY_PREFIX + this.storeKey + STOREKEY_PAGEINDEX_POSTFIX;\r\n    }\r\n\r\n    private onDatasourcePaginationChanged(paginationInfo: PaginationInfo) {\r\n        this.userProperties.save<number>(this.paginationStoreKey, paginationInfo.currentPageIndex);\r\n        this.userProperties.save<number>(this.pageSizeStoreKey, paginationInfo.pageSize);\r\n    }\r\n\r\n    private get pageSizeStoreKey(): string {\r\n        return STOREKEY_PREFIX + this.storeKey + STOREKEY_PAGESIZE_POSTFIX;\r\n    }\r\n\r\n    //---SELECTION\r\n    private get selectionStoreKey(): string {\r\n        return STOREKEY_PREFIX + this.storeKey + STOREKEY_SELECTION_POSTFIX;\r\n    }\r\n\r\n    private onDatasourceSelectionChanged(selectedIds: any[]) {\r\n        this.userProperties.save<any[]>(this.selectionStoreKey, selectedIds);\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { LoggerService } from '@sowatech/shared/logger';\r\nimport { Subject } from 'rxjs';\r\n\r\ntype Id = any;\r\n\r\n@Injectable()\r\nexport class SelectionListHelper {\r\n    constructor(private loggerService: LoggerService) { }\r\n\r\n    private selectedIds: Id[] = [];\r\n    private onSelectedIdsChanged: Subject<Id[]>;\r\n    private onFocusedIdChanged: Subject<Id>;\r\n    /* onFocus wird im Vergleich zu den anderen immer aufgerufen, auch wenn der Focus gleich bleibt. */\r\n    private onFocus: Subject<Id>;\r\n\r\n    public init(dsSelectedIdsChangedEmitter: Subject<Array<Id>>, dsFocusedIdChangedEventEmitter: Subject<Id>, dsFocusEventEmitter: Subject<Id>) {\r\n        this.onSelectedIdsChanged = dsSelectedIdsChangedEmitter;\r\n        this.onFocusedIdChanged = dsFocusedIdChangedEventEmitter;\r\n        this.onFocus = dsFocusEventEmitter;\r\n    }\r\n\r\n    private doSelectionAndFocusChanged(hasChanged = true) {\r\n        this.doSelectionChanged(hasChanged);\r\n        this.doFocusChanged(hasChanged);\r\n    }\r\n\r\n    private doSelectionChanged(hasChanged = true) {\r\n        if (hasChanged)\r\n            this.onSelectedIdsChanged.next(this.selectedIds);\r\n    }\r\n\r\n    private doFocusChanged(hasChanged: boolean) {\r\n        const focusedId = this.selectedIds.length > 0 ? this.selectedIds[this.selectedIds.length - 1] : null;\r\n        this.onFocus.next(focusedId);\r\n        if (hasChanged)\r\n            this.onFocusedIdChanged.next(focusedId);\r\n    }\r\n\r\n    public set(ids: Id[]);\r\n    public set(id: Id);\r\n    public set(arg1: any) {\r\n        if (arg1 == null) {\r\n            this.loggerService.warn('SelectionListHelper.set of \\'undefined\\' not possible');\r\n            return;\r\n        }\r\n        const newSelectedIds: Id[] = Array.isArray(arg1) ? arg1 : [arg1];\r\n        const hasChanged = this.selectedIds.length !== newSelectedIds.length || this.selectedIds.some((item, index) => item !== newSelectedIds[index]);\r\n        this.selectedIds = newSelectedIds;\r\n        this.doSelectionAndFocusChanged(hasChanged);\r\n    }\r\n\r\n    public add(ids: Id[]);\r\n    public add(id: Id);\r\n    public add(arg1: any) {\r\n        if (arg1 == null) {\r\n            this.loggerService.warn('SelectionListHelper.add of \\'undefined\\' not possible');\r\n            return;\r\n        }\r\n\r\n        let ids: Id[];\r\n        if (Array.isArray(arg1))\r\n            ids = arg1 as Id[];\r\n\r\n        else {\r\n            const id = arg1;\r\n            ids = [id];\r\n        }\r\n\r\n        const newIds = ids.filter(id => !this.selectedIds.includes(id));\r\n        if (newIds.length > 0) {\r\n            this.selectedIds = this.selectedIds.concat(newIds);\r\n            this.doSelectionChanged();\r\n        }\r\n    }\r\n\r\n    public remove(id: Id) {\r\n        if (id == null) {\r\n            this.loggerService.warn(`SelectionListHelper.remove of '${id}' not possible`);\r\n            return;\r\n        }\r\n        if (!this.selectedIds.includes(id)) return;\r\n\r\n        this.selectedIds = this.selectedIds.filter(sId => sId != id);\r\n        this.doSelectionChanged();\r\n    }\r\n\r\n    public clear() {\r\n        if (this.selectedIds.length === 0) return;\r\n        this.selectedIds = [];\r\n        this.doSelectionAndFocusChanged();\r\n    }\r\n\r\n    public contains(id: Id): boolean {\r\n        if (id == null) {\r\n            this.loggerService.warn('call of SelectionListHelper.contains(id) with id==\\'undefined\\' always returns false');\r\n            return false;\r\n        }\r\n        return this.selectedIds.includes(id);\r\n    }\r\n\r\n    public getSelectedIds(): Id[] {\r\n        return this.selectedIds;\r\n    }\r\n}\r\n","import { EventEmitter, Injectable } from '@angular/core';\r\n\r\nimport { SortItem } from './ds-dtos.model';\r\n\r\n@Injectable()\r\nexport class SortHelper {\r\n    private fixedItems: Array<SortItem> = [];\r\n    private items: Array<SortItem> = [];\r\n    public onSortItems = new EventEmitter<Array<SortItem>>();\r\n\r\n    public get sortItems(): Array<SortItem> { return this.fixedItems.concat(this.items); }\r\n\r\n    public clear() {\r\n        this.items = [];\r\n        this.emitSortItems();\r\n    }\r\n\r\n    public add(sortItem: SortItem) {\r\n        const fixedItem = this.getFixedItemByFieldName(sortItem.fieldname);\r\n        if (fixedItem) {\r\n            fixedItem.reverse = sortItem.reverse;\r\n            this.emitSortItems();\r\n            return;\r\n        }\r\n\r\n        const existingItem = this.getItemByFieldName(sortItem.fieldname);\r\n        if (existingItem)\r\n            existingItem.reverse = sortItem.reverse;\r\n\r\n        else\r\n            this.items.push(sortItem);\r\n\r\n            this.emitSortItems();\r\n    }\r\n\r\n    public setItem(sortItem: SortItem) {\r\n        const fixedItem = this.getFixedItemByFieldName(sortItem.fieldname);\r\n        if (fixedItem) {\r\n            fixedItem.reverse = sortItem.reverse;\r\n            this.emitSortItems();\r\n            return;\r\n        }\r\n\r\n        this.items = [];\r\n        if (sortItem) this.add(sortItem);\r\n    }\r\n\r\n    public setItems(sortItems: SortItem[]) {\r\n        this.items = sortItems;\r\n    }\r\n\r\n    /** @returns HasChanges */\r\n    public setFixedItems(sortItems: SortItem[]): boolean {\r\n        if (!this.fixedItemsChanged(sortItems))\r\n            return false;\r\n        this.fixedItems = sortItems;\r\n        this.emitSortItems();\r\n        return true;\r\n    }\r\n\r\n    private fixedItemsChanged(sortItems: SortItem[]): boolean{\r\n        if (this.fixedItems.length === sortItems.length && this.fixedItems.every(fi => sortItems.find(si => si.fieldname === fi.fieldname)))\r\n            return false;\r\n        return true;\r\n    }\r\n\r\n    public execute(dataSource: Array<any>) {\r\n        if (this.sortItems?.length > 0)\r\n            dataSource.sort((a, b) => this.sortByMultiple(a, b, 0, this.sortItems.length - 1));\r\n    }\r\n\r\n    private getItemByFieldName(fieldname: string): SortItem {\r\n        const resultItems = this.items.filter((item) => item.fieldname == fieldname);\r\n        if (resultItems.length > 1) console.warn('SortHandler has duplicate fieldnames');\r\n        return resultItems.length > 0 ? resultItems[0] : null;\r\n    }\r\n\r\n    private getFixedItemByFieldName(fieldname: string): SortItem {\r\n        const resultItems = this.fixedItems.filter((item) => item.fieldname == fieldname);\r\n        if (resultItems.length > 1) console.warn('SortHandler has duplicate fieldnames');\r\n        return resultItems.length > 0 ? resultItems[0] : null;\r\n    }\r\n\r\n    private sortByMultiple(a: any, b: any, sortItemIndex = 0, maxSortItemIndex = 0): number {\r\n        const sortItem = this.sortItems[sortItemIndex];\r\n        const compVal = this.compare(a[sortItem.fieldname], b[sortItem.fieldname], sortItem.reverse);\r\n        return sortItemIndex >= maxSortItemIndex ? compVal : compVal === 0 ? this.sortByMultiple(a, b, ++sortItemIndex, maxSortItemIndex) : compVal;\r\n    }\r\n\r\n    private compare(a: any, b: any, reverse = false): number {\r\n        const reverseFactor = reverse ? -1 : 1;\r\n        if (a == null || b == null) {\r\n            const aNumber = a ? 1 : 0;\r\n            const bNumber = b ? 1 : 0;\r\n            return (aNumber - bNumber) * reverseFactor;\r\n        }\r\n        if (typeof (a) === 'string')\r\n            return (a as string).localeCompare(b) * reverseFactor;\r\n\r\n        if (typeof (a) === 'number') {\r\n            if (!a) a = 0;\r\n            if (!b) b = 0;\r\n            return (a - b) * reverseFactor;\r\n        }\r\n        if (typeof (a) === 'boolean') {\r\n            const aNumber = a ? 1 : 0;\r\n            const bNumber = b ? 1 : 0;\r\n            return (aNumber - bNumber) * reverseFactor;\r\n        }\r\n        if (a instanceof Date) {\r\n            const adate = a ? a as Date : new Date(0);\r\n            const bdate = b ? b as Date : new Date(0);\r\n            return (adate.valueOf() - bdate.valueOf()) * reverseFactor;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private emitSortItems() {\r\n        this.onSortItems.emit(this.sortItems);\r\n    }\r\n}\r\n","/* eslint-disable @angular-eslint/no-output-on-prefix */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { AfterViewInit, Component, computed, DoCheck, effect, EventEmitter, input, Input, IterableChanges, IterableDiffer, IterableDiffers, KeyValueChanges, KeyValueDiffer, KeyValueDiffers, model, OnDestroy, OnInit, output, Output, signal, untracked } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { LoggerService } from '@sowatech/shared/logger';\r\nimport { DsDatasourceDefaultConfig } from '@sowatech/shared/shared-config';\r\nimport { ensureArray } from '@sowatech/shared/utilities';\r\nimport { map, merge, Subject, Subscription } from 'rxjs';\r\n\r\nimport { AggregateFunctionsService } from './aggregate-functions.service';\r\nimport { CSVConfig, DatasourceCSVService } from './ds-csv/ds-csv.service';\r\nimport { AggregateParam, FilterItem, FilterOperator, PaginationInfo, RefreshParams, RefreshResult, RefreshType, SortItem } from './ds-dtos.model';\r\nimport { FilterHelper } from './ds-filter-helper.service';\r\nimport { PaginationHelper } from './ds-pagination-helper.service';\r\nimport { RefreshParamsStoreHelper } from './ds-refreshparams-store.service';\r\nimport { SelectionListHelper } from './ds-selection-list-helper.service';\r\nimport { SortHelper } from './ds-sort-helper.service';\r\n\r\ntype FieldName<T> = Extract<keyof T, string>;\r\ntype ModelId = any;\r\n\r\n@Component({\r\n    selector: 'ds-datasource',\r\n    template: '',\r\n    providers: [\r\n        SelectionListHelper,\r\n        SortHelper,\r\n        FilterHelper,\r\n        PaginationHelper,\r\n        RefreshParamsStoreHelper,\r\n        DatasourceCSVService,\r\n        AggregateFunctionsService,\r\n    ],\r\n    standalone: false\r\n})\r\nexport class DatasourceComponent<Model = any, ExternalRefreshDto = any> implements OnInit, AfterViewInit, OnDestroy, DoCheck {\r\n    constructor(\r\n        private loggerService: LoggerService,\r\n        private selectionList: SelectionListHelper,\r\n        private sortHelper: SortHelper,\r\n        private filterHelper: FilterHelper,\r\n        private paginationHelper: PaginationHelper,\r\n        private refreshParamsStoreHelper: RefreshParamsStoreHelper,\r\n        private iterableDiffers: IterableDiffers,\r\n        private keyValueDiffers: KeyValueDiffers,\r\n        private config: DsDatasourceDefaultConfig,\r\n        private csvService: DatasourceCSVService,\r\n        public aggregateFunctions: AggregateFunctionsService<Model>,\r\n    ) {\r\n        this.addRefreshBlocker();\r\n        this.autoSelect = this.config.autoSelect;\r\n        this.idfield = this.config.idfield;\r\n        this.hasChangeTracking = this.config.hasChangeTracking;\r\n        aggregateFunctions.init(this);\r\n\r\n        effect(() => this.externalRefreshResultEffectFn());\r\n        effect(() => this.refreshTypeEffectFn());\r\n        effect(() => {\r\n            const models = this.models();\r\n            if (models)\r\n                this.initDataSource([...models]);\r\n        });\r\n    }\r\n\r\n    private readonly subscriptions: Subscription[] = [];\r\n\r\n    ngOnInit() {\r\n        this.initPaginationHelper();\r\n        this.initSelectionList();\r\n        //this.initFilterHelper();//todo: eventemitter in ds component verlagern wie beoi paginationHelper\r\n        //this.initSortHelper();//todo\r\n        //this.initGroupHelper();//todo\r\n        this.subscriptions.push(this.onSelectedIdsChanges.subscribe(ids => this.checkSelectedIdsCanBeFound(ids)));\r\n        this.initRefreshParamsStoreHelper();\r\n    }\r\n\r\n    private onAfterViewInit: Subject<void> = new Subject<void>();\r\n    ngAfterViewInit() {\r\n        this.onAfterViewInit.next();\r\n\r\n        //bei externalRefreshInput wird durch einen effect nach dem ngAfterViewInit ein refresh Aufgerufen\r\n        const catchUpRefresh = this.refreshType() !== RefreshType.externalRefreshInput;\r\n        this.removeRefreshBlocker(catchUpRefresh);\r\n    }\r\n\r\n    ngDoCheck(): void {\r\n        if (!this.hasChangeTracking) return;\r\n        //-- liste selbst\r\n        const dataBackupIterableChanges = this.dataBackupIterableDiffer && this.dataBackupIterableDiffer.diff(this.dataBackup);\r\n\r\n        //-- jedes dataItem der liste\r\n        const allDataItemChangesDictionary: { [id: string]: KeyValueChanges<any, any>; } = {};\r\n        let hasDataItemChanges = false;\r\n        for (const dataItem of this.dataBackup) {\r\n            const dataItemDiffer = this.dataItemDifferDictionary[this.getDataItemId(dataItem)];\r\n            const dataItemChanges = dataItemDiffer && dataItemDiffer.diff(dataItem);\r\n            if (dataItemChanges) {\r\n                allDataItemChangesDictionary[this.getDataItemId(dataItem)] = dataItemChanges;\r\n                hasDataItemChanges = true;\r\n            }\r\n        }\r\n        if (dataBackupIterableChanges || hasDataItemChanges)\r\n            this.dataBackupChanged(dataBackupIterableChanges, allDataItemChangesDictionary);\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.aggregateFunctions.cleanUp();\r\n        this.subscriptions.forEach(s => s.unsubscribe());\r\n    }\r\n\r\n    @Input('src')\r\n    public set sourceData(data: Model[]) {\r\n        this.initDataSource(data);\r\n    }\r\n\r\n    /** Liste der Datensätze für die Datasource. Im Gegensatz zum `src` Input, wird das Array nicht direkt bearbeitet */\r\n    public readonly models = input<Model[]>();\r\n\r\n    @Input('changeTracking')\r\n    public set _changeTracking(value: boolean) {\r\n        this.hasChangeTracking = value;\r\n    }\r\n    private hasChangeTracking: boolean;\r\n\r\n    @Input('pageSize')\r\n    public set doSetPageSize(value: number) {\r\n        this.setPageSize(value);\r\n    }\r\n    @Input('store-key')\r\n    public storeKey: string; //key fuer localStorage (optional fuer speichern aktuelle refreshdaten)\r\n    @Input('idfield')\r\n    public idfield: FieldName<Model>; //wird benoetigt wenn ein datensatz anhand seiner id gefunden werden soll. zb selected ids bei paging\r\n    @Input()\r\n    public set sortBy(fieldname: FieldName<Model>) {\r\n        this.setSort(fieldname);\r\n    }\r\n    @Input()\r\n    public autoSelect = false;\r\n\r\n    /**\r\n     * Refresh Mechanismus, der in der Datasource benutzt wird\r\n     * @default internal\r\n     */\r\n    public refreshType = model(RefreshType.internal);\r\n    /** externalRefreshCallback oder externalRefreshInput */\r\n    public isExternalRefresh = computed(() => this.refreshType() === RefreshType.externalRefreshCallback || this.refreshType() === RefreshType.externalRefreshInput);\r\n\r\n    private refreshTypeEffectFn() {\r\n        if (this.refreshType() === RefreshType.externalRefreshInput) {\r\n            while (this.refreshIsBlocked)\r\n                this.removeRefreshBlocker(false);\r\n            this.refresh();\r\n        }\r\n    }\r\n\r\n    @Output()\r\n    public onAfterRefresh = new Subject<void>();\r\n    @Output()\r\n    public onBeforeRefresh = new Subject<void>();\r\n    @Output()\r\n    public onAfterInitDatasoure = new Subject<void>();\r\n\r\n    public set externalRefresh(\r\n        method: (params: RefreshParams) => Promise<RefreshResult<ExternalRefreshDto> | RefreshResult<Model>>\r\n    ) {\r\n        this._externalRefresh = method;\r\n        if (method) {\r\n            this.refreshType.set(RefreshType.externalRefreshCallback);\r\n            this.externalRefreshParams.set(new RefreshParams());\r\n            this.refresh();\r\n        }\r\n        else {\r\n            this.externalRefreshParams.set(null);\r\n            this.refreshType.set(RefreshType.internal);\r\n        }\r\n    }\r\n    public get externalRefresh(): (params: RefreshParams) => Promise<RefreshResult<ExternalRefreshDto> | RefreshResult<Model>> {\r\n        return this._externalRefresh;\r\n    }\r\n    private _externalRefresh: (params: RefreshParams) => Promise<RefreshResult<ExternalRefreshDto> | RefreshResult<Model>>;\r\n\r\n    public readonly externalRefreshParams = signal(new RefreshParams());\r\n    public readonly refreshResultRequested = output<RefreshParams>();\r\n    public readonly externalRefreshResult = input<RefreshResult<ExternalRefreshDto> | RefreshResult<Model>>(null);\r\n    private externalRefreshResultEffectFn() {\r\n        if (this.externalRefreshResult())\r\n            untracked(() => this.handleExternalRefreshResult(this.externalRefreshResult()));\r\n    }\r\n\r\n    public dataBackup: Model[] = []; //copy of the original provided data. used to refresh\r\n\r\n    private dataBackupIterableDiffer: IterableDiffer<any>;//die Liste an sich\r\n    private dataItemDifferDictionary: { [id: string]: KeyValueDiffer<any, any>; };//Dictionary KeyValueDiffer für alle Items der Liste\r\n\r\n    private initDataBackupDiffer() {\r\n        // see https://www.concretepage.com/questions/667\r\n        if (!this.hasChangeTracking) return;\r\n        //-- liste selbst\r\n        this.dataBackupIterableDiffer = this.iterableDiffers.find(this.dataBackup).create();//hat scheinar keinen effekt hier this.dataBackup zu übergeben; wirkt sich nciuht wie erwartet als initialiserung der changes aus\r\n        this.dataBackupIterableDiffer.diff(this.dataBackup);//initialChanges sind dirty durch das initiale erzeugen; nächster aufruf von diff jat dann keine changes mehr.\r\n\r\n        //-- jedes dataItem der liste\r\n        this.dataItemDifferDictionary = {};\r\n        for (const dataItem of this.dataBackup) {\r\n            const dataItemDiffer = this.keyValueDiffers.find(dataItem).create();\r\n            this.dataItemDifferDictionary[this.getDataItemId(dataItem)] = dataItemDiffer;\r\n            dataItemDiffer.diff(dataItem as any);//initialChanges sind dirty durch das initiale erzeugen; nächster aufruf von diff jat dann keine changes mehr.\r\n        }\r\n    }\r\n\r\n    private getDataItemId(dataItem: Model): ModelId {\r\n        return dataItem[this.idfield];\r\n    }\r\n\r\n    public dataChanged: EventEmitter<DataChangeEvent> = new EventEmitter();\r\n\r\n    private dataBackupChanged(iterableChanges: IterableChanges<any>, dataItemChanges: { [id: string]: KeyValueChanges<any, any>; }) {\r\n        const dataItemChangesHasAny = Object.keys(dataItemChanges).length > 0;\r\n        if (dataItemChangesHasAny)\r\n            this.dataChanged.emit({ dataItemChanges });\r\n\r\n        /* If you want to see details then use\r\n          kvchanges.forEachChangedItem((record) => ...);\r\n        */\r\n    }\r\n\r\n    public get dataFiltered(): Model[] {\r\n        //the filtered data (ignoring pagination)\r\n        const filteredData: Model[] = [];\r\n        this.doInternalRefresh(filteredData, false);\r\n        return filteredData;\r\n    }\r\n\r\n    public get hasData(): boolean {\r\n        return this.dataBackup.length > 0;\r\n    }\r\n\r\n    public data: Model[] = []; //the current filtered/sorted data. readonly! use initDataSource(data) to set new data\r\n    private readonly dataChange$ = merge(this.onAfterInitDatasoure, this.onAfterRefresh);\r\n    public readonly dataSignal = toSignal(this.dataChange$.pipe(map(() => [...this.data])), { initialValue: [] });\r\n\r\n    public getDataItem(id: ModelId): Model {\r\n        return this.dataBackup.find(item => item[this.idfield] == id);\r\n    }\r\n\r\n    public getDataDistinct(fieldname: string): Model[] {\r\n        return Array.from(new Set(this.dataBackup.map(d => d[fieldname]))); //.sort(); evtl. noch sorten\r\n    }\r\n\r\n    public focusNextOrFirstRow() {\r\n        if (!this.data || !this.idfield) return;\r\n        if (this.focusedItem) {\r\n            const currentData = this.data.find(d => d[this.idfield] == this.focusedItem[this.idfield]);\r\n            const index = this.data.indexOf(currentData);\r\n            if (this.data[index + 1] && this.data[index + 1][this.idfield])\r\n                this.focus(this.data[index + 1][this.idfield]);\r\n        }\r\n        else this.focus((this.data[0])[this.idfield], true);\r\n    }\r\n\r\n    public focusPreviousRow(): void {\r\n        if (!this.data || !this.idfield) return;\r\n        if (this.focusedItem) {\r\n            // eslint-disable-next-line eqeqeq\r\n            const currentData = this.data.find(d => d[this.idfield] == this.focusedItem[this.idfield]);\r\n            const index = this.data.indexOf(currentData);\r\n            if (this.data[index - 1] && this.data[index - 1][this.idfield])\r\n                this.focus(this.data[index - 1][this.idfield]);\r\n        }\r\n    }\r\n\r\n    public async initDataSource(data: Model[]) {\r\n        if (!data) return;\r\n        this.dataBackup = data.slice(0);\r\n        this.data = data;\r\n        if (data.length > 0) this.autoDetectIdField(data[0]);\r\n        this.initDataBackupDiffer();\r\n        await this.refresh();\r\n        this.autoSelectFirstItem();\r\n        this.checkSelectedIdsCanBeFound(this.selectedIds);\r\n        this.onAfterInitDatasoure.next(null);\r\n    }\r\n\r\n    public autoSelectFirstItem() {\r\n        if (!this.autoSelect) return;\r\n        if (!this.focusedItem && this.data.length > 0) {\r\n            const firstModel = this.data[0];\r\n            this.focus(firstModel[this.idfield], true);\r\n        }\r\n    }\r\n\r\n    private autoDetectIdField(dataItem: any) {\r\n        if (this.idfield) return;\r\n        if (dataItem.id !== undefined) this.idfield = 'id' as FieldName<Model>;\r\n        else if (dataItem.Id !== undefined) this.idfield = 'Id' as FieldName<Model>;\r\n        else if (dataItem.ID !== undefined) this.idfield = 'ID' as FieldName<Model>;\r\n        else this.loggerService.warn('datasource.idfield is not specified');\r\n    }\r\n\r\n    private blockedRefreshRequested = false;\r\n    private blockCounter = 0;\r\n\r\n    public get refreshIsBlocked() {\r\n        return this.blockCounter > 0;\r\n    }\r\n\r\n    public addRefreshBlocker() {\r\n        this.blockCounter++;\r\n    }\r\n\r\n    public removeRefreshBlocker(catchUpRefresh = true) {\r\n        this.blockCounter--;\r\n        if (this.blockCounter < 0)\r\n            this.blockCounter = 0;\r\n        if (this.blockCounter === 0) {\r\n            if (catchUpRefresh)\r\n                this.catchUpRefresh();\r\n            else\r\n                this.blockedRefreshRequested = false;\r\n        }\r\n    }\r\n\r\n    private catchUpRefresh() {\r\n        if (this.blockedRefreshRequested) {\r\n            this.refresh();\r\n            this.blockedRefreshRequested = false;\r\n        }\r\n    }\r\n\r\n    public async refresh() {\r\n        await untracked(async () => {\r\n            if (this.refreshIsBlocked) {\r\n                this.blockedRefreshRequested = true;\r\n                return;\r\n            }\r\n            this.onBeforeRefresh.next();\r\n            switch (this.refreshType()) {\r\n                case RefreshType.internal:\r\n                    this.doInternalRefresh(this.data);\r\n                    this.afterRefresh();\r\n                    break;\r\n                case RefreshType.externalRefreshCallback:\r\n                    await this.doExternalRefresh();\r\n                    this.afterRefresh();\r\n                    break;\r\n                case RefreshType.externalRefreshInput:\r\n                    this.requestNewRefreshResult();\r\n                    break;\r\n            }\r\n        });\r\n    }\r\n\r\n    private afterRefresh() {\r\n        if (this.focusAfterRefreshId != null) {\r\n            const focusId = this.focusAfterRefreshId;\r\n            this.focusAfterRefreshId = null;\r\n            this.focus(focusId, true);\r\n        }\r\n        this.onAfterRefresh.next();\r\n    }\r\n\r\n    public async refreshAggregateFunctionsExternal() {\r\n        if (this.refreshType() === RefreshType.externalRefreshCallback) {\r\n            const refreshParams = new RefreshParams();\r\n            refreshParams.filterItems = this.filterHelper.filterItems;\r\n            refreshParams.aggregateParam.items = this.aggregateFunctions.getAggregateItems();\r\n            refreshParams.aggregateParam.selectedIds = this.selectedIds.map(id => id.toString());\r\n            refreshParams.aggregateParam.aggregatesOnly = true;\r\n            refreshParams.mode = 'aggregate-data';\r\n            refreshParams.idField = this.idfield;\r\n\r\n            const result = await this.externalRefresh(refreshParams);\r\n            this.aggregateFunctions.setByRefreshResult(result as RefreshResult<Model>);\r\n        }\r\n        else if (this.refreshType() === RefreshType.externalRefreshInput) {\r\n            this.updateExternalRefreshParams(refreshParams => {\r\n                refreshParams.filterItems = this.filterHelper.filterItems;\r\n                refreshParams.aggregateParam.items = this.aggregateFunctions.getAggregateItems();\r\n                refreshParams.aggregateParam.selectedIds = this.selectedIds.map(id => id.toString());\r\n                refreshParams.aggregateParam.aggregatesOnly = true;\r\n                refreshParams.mode = 'aggregate-data';\r\n                refreshParams.idField = this.idfield;\r\n            });\r\n            this.emitRefreshResultRequested(this.externalRefreshParams());\r\n        }\r\n    }\r\n\r\n    private doInternalRefresh(destData: any[], doPagination = true) {\r\n        this.filterHelper.execute(this.dataBackup, destData);\r\n        this.sortHelper.execute(destData);\r\n        if (doPagination) this.paginationHelper.execute(destData);\r\n    }\r\n\r\n    public getExternalRefreshParams(): RefreshParams {\r\n        return this.externalRefreshParams();\r\n    }\r\n\r\n    private externalRefreshRunning = false;\r\n    private nextExternalRefresh?: (params: RefreshParams) => Promise<RefreshResult<ExternalRefreshDto> | RefreshResult<Model>>;\r\n\r\n    private async doExternalRefresh() {\r\n        this.setExternalRefreshParams();\r\n\r\n        if (this.externalRefreshRunning) {\r\n            this.nextExternalRefresh = () => this.externalRefresh(this.externalRefreshParams());\r\n            return;\r\n        }\r\n\r\n        try {\r\n            this.externalRefreshRunning = true;\r\n            const result = await this.getNextExternalRefreshResult();\r\n            this.externalRefreshRunning = false;\r\n\r\n            this.handleRefreshResult(result);\r\n        }\r\n        catch (error) {\r\n            this.loggerService.error(error);\r\n        }\r\n    }\r\n\r\n    private requestNewRefreshResult() {\r\n        this.setExternalRefreshParams();\r\n        this.emitRefreshResultRequested(this.externalRefreshParams());\r\n    }\r\n\r\n    private emitRefreshResultRequested(refreshParams: RefreshParams) {\r\n        const deepCopy = this.deepCopy(refreshParams);\r\n        this.refreshResultRequested.emit(deepCopy);\r\n    }\r\n\r\n    private setExternalRefreshParams() {\r\n        this.externalRefreshParams.update(refreshParams => {\r\n            refreshParams.paginationInfo.pageSize = this.paginationHelper.pageSize; //andere pageInfos koennen nicht durch paginationHelper ermittelt werden\r\n            refreshParams.sortItems = this.sortHelper.sortItems;\r\n            refreshParams.filterItems = this.filterHelper.filterItems;\r\n            refreshParams.aggregateParam.items = this.aggregateFunctions.getAggregateItems();\r\n            refreshParams.aggregateParam.selectedIds = this.selectedIds.map(id => id.toString());\r\n            refreshParams.idField = this.idfield;\r\n            return refreshParams;\r\n        });\r\n    }\r\n\r\n    /**Für Inline Updates der externalRefreshParams */\r\n    private updateExternalRefreshParams(updateFn: ((refreshParams: RefreshParams) => void)) {\r\n        this.externalRefreshParams.update(refreshParams => {\r\n            updateFn(refreshParams);\r\n            return refreshParams;\r\n        });\r\n    }\r\n\r\n    private handleRefreshResult(result: RefreshResult<ExternalRefreshDto> | RefreshResult<Model>) {\r\n        this.data.splice(0);\r\n        this.dataBackup = [];\r\n        result.refreshParams.aggregateParam ??= new AggregateParam(); // fix SHANG-145\r\n        this.externalRefreshParams.set(result.refreshParams);\r\n        this.onPaginationChanged.next(\r\n            result.refreshParams.paginationInfo\r\n        );\r\n        if (result.data) {\r\n            this.pushModelsToArray(result.data, this.data);\r\n            this.dataBackup = this.data.slice();\r\n            if (!this.idfield && this.data.length > 0) this.autoDetectIdField(this.data[0]);\r\n        }\r\n        this.aggregateFunctions.setByRefreshResult(result as RefreshResult<Model>);\r\n    }\r\n\r\n    private handleExternalRefreshResult(result: RefreshResult<ExternalRefreshDto> | RefreshResult<Model>) {\r\n        const deepCopy = this.deepCopy(result);\r\n        this.handleRefreshResult(deepCopy);\r\n        this.updateExternalRefreshParams(refreshParams => refreshParams.paginationInfo.goToPageOfId = undefined);\r\n        this.afterRefresh();\r\n    }\r\n\r\n    private pushModelsToArray(incomingData: ExternalRefreshDto[] | Model[], targetArray: Model[]) {\r\n        if (this.externalDataItem2ViewModel)\r\n            targetArray.push(...incomingData.map(dataItem => this.externalDataItem2ViewModel(dataItem as ExternalRefreshDto)));\r\n        else targetArray.push(...incomingData as Model[]);\r\n    }\r\n\r\n    private async getNextExternalRefreshResult() {\r\n        let result = await this.externalRefresh(this.externalRefreshParams());\r\n        while (this.nextExternalRefresh) {\r\n            const nextRefresh = this.nextExternalRefresh;\r\n            this.nextExternalRefresh = undefined;\r\n            result = await nextRefresh(this.externalRefreshParams());\r\n        }\r\n        return result;\r\n    }\r\n\r\n    public externalDataItem2ViewModel: (externalDataItem: ExternalRefreshDto) => Model;\r\n\r\n    private getPageIndexById(id: ModelId): number {\r\n        if (this.isExternalRefresh()) {\r\n            this.loggerService.warn('getPageIndexById not implemented for externalRefresh');\r\n            return -1;\r\n        }\r\n        else {\r\n            const searchData: any[] = [];\r\n            this.doInternalRefresh(searchData, false); //normales refresh ausfuehren in eine such-liste, OHNE die pagination auszufuehren\r\n            const itemIdx = searchData.indexOf(searchData.find(d => d[this.idfield] == id));\r\n\r\n            let pageIndex = -1;\r\n            if (this.paginationHelper.pageSize > 0)\r\n                pageIndex = Math.ceil((itemIdx + 1) / this.paginationHelper.pageSize) - 1;\r\n\r\n            return pageIndex;\r\n        }\r\n    }\r\n\r\n    //#region CSV Download\r\n\r\n    public async downloadDataAsCSV(fileName?: string, config?: CSVConfig, csvData?: Model[]): Promise<void> {\r\n        csvData ??= await this.getCSVData();\r\n        if (!csvData) return;\r\n\r\n        const name = this.assembleCSVName(fileName);\r\n        this.csvService.generateAndDownloadCSV(csvData, name, config);\r\n    }\r\n\r\n    private assembleCSVName(fileName?: string): string {\r\n        const date = new Date();\r\n        return `${fileName ?? this.storeKey ?? 'downloadDataAsCSV'}_${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;\r\n    }\r\n\r\n    private async getCSVData(): Promise<Model[] | null> {\r\n        switch (this.refreshType()) {\r\n            case RefreshType.internal: {\r\n                const csvData: Model[] = [];\r\n                this.doInternalRefresh(csvData, false);\r\n                return csvData;\r\n            }\r\n            case RefreshType.externalRefreshCallback:\r\n                return await this.externalCSVDataRefresh();\r\n            case RefreshType.externalRefreshInput:\r\n                this.emitRefreshResultRequested(\r\n                    this.getCsvExportRefreshParams()\r\n                );\r\n                return null;\r\n        }\r\n    }\r\n\r\n    private async externalCSVDataRefresh(): Promise<Array<Model>> {\r\n        const refreshParams = this.getCsvExportRefreshParams();\r\n        try {\r\n            const refreshResult = await this.externalRefresh(refreshParams);\r\n            const result = [];\r\n            if (refreshResult.data)\r\n                this.pushModelsToArray(refreshResult.data, result);\r\n            return result as Array<Model>;\r\n        }\r\n        catch (error) {\r\n            this.loggerService.error(error);\r\n        }\r\n    }\r\n\r\n    private getCsvExportRefreshParams() {\r\n        const refreshParams = new RefreshParams();\r\n        refreshParams.paginationInfo.pageSize = 999999;\r\n        refreshParams.sortItems = this.sortHelper.sortItems;\r\n        refreshParams.filterItems = this.filterHelper.filterItems;\r\n        refreshParams.mode = 'csv-export';\r\n        return refreshParams;\r\n    }\r\n\r\n    //#endregion\r\n\r\n\r\n    public setSort(field: string) {\r\n        this.sortHelper.setItem(new SortItem(field));\r\n        this.refresh();\r\n    }\r\n\r\n    public get onSortItems(): Subject<Array<SortItem>> {\r\n        return this.sortHelper.onSortItems;\r\n    }\r\n\r\n    public getSortItems(): Array<SortItem> {\r\n        return this.sortHelper.sortItems;\r\n    }\r\n\r\n    public sortAsc(fieldname: string, addSorting = false) {\r\n        addSorting ? this.sortHelper.add(new SortItem(fieldname)) : this.sortHelper.setItem(new SortItem(fieldname));\r\n        this.refresh();\r\n    }\r\n\r\n    public sortDesc(fieldname: string, addSorting = false) {\r\n        addSorting ? this.sortHelper.add(new SortItem(fieldname, true)) : this.sortHelper.setItem(new SortItem(fieldname, true));\r\n        this.refresh();\r\n    }\r\n\r\n    public sort(sortItems: SortItem | SortItem[]) {\r\n        if (sortItems instanceof Array)\r\n            this.sortHelper.setItems(sortItems);\r\n        else\r\n            this.sortHelper.setItem(sortItems);\r\n        this.refresh();\r\n    }\r\n\r\n    public clearSort() {\r\n        this.sortHelper.clear();\r\n        this.refresh();\r\n    }\r\n\r\n    public setFixedSort(fieldnames: string[]) {\r\n        const items = fieldnames.map(fieldname => new SortItem(fieldname));\r\n        const hasChanges = this.sortHelper.setFixedItems(items);\r\n        if (hasChanges)\r\n            this.refresh();\r\n    }\r\n\r\n    //----------------\r\n\r\n    public get onFilterItems(): Subject<Array<FilterItem>> {\r\n        return this.filterHelper.onFilterItems;\r\n    }\r\n\r\n    public setFilter(filterItems: Array<FilterItem>);\r\n    public setFilter(\r\n        fieldnames: string | string[],\r\n        fieldvalues: string | string[],\r\n        filteroperator?: FilterOperator\r\n    );\r\n    public setFilter(arg1: any, arg2?: any, filteroperator?: FilterOperator) {\r\n        if (arg2 === undefined) {\r\n            const filterItems = arg1 as FilterItem[];\r\n            this.filterHelper.set(filterItems);\r\n        } else {\r\n            const fieldnames: string[] = Array.isArray(arg1) ? arg1 : [arg1];\r\n            const fieldvalues: string[] = Array.isArray(arg2) ? arg2 : [arg2];\r\n            this.filterHelper.set(\r\n                new FilterItem(fieldnames, fieldvalues, filteroperator)\r\n            );\r\n        }\r\n        this.refresh();\r\n    }\r\n\r\n    public addFilter(filterItems: FilterItem[]);\r\n    public addFilter(\r\n        fieldnames: string | string[],\r\n        fieldvalues: string | string[],\r\n        filteroperator?: FilterOperator\r\n    );\r\n    public addFilter(arg1: any, arg2?: any, filteroperator?: FilterOperator) {\r\n        const filterItems = arg2 === undefined\r\n            ? arg1 as FilterItem[]\r\n            : [new FilterItem(ensureArray<string>(arg1), ensureArray<string>(arg2), filteroperator)];\r\n\r\n        const oldItems = this.filterHelper.filterItems.map(fi => fi.clone());\r\n        this.filterHelper.add(filterItems);\r\n        const newItems = this.filterHelper.filterItems.map(fi => fi.clone());\r\n        const filterChanged = !this.filterItemsEqual(oldItems, newItems);\r\n        if (filterChanged)\r\n            this.refresh();\r\n    }\r\n\r\n    private filterItemsEqual(oldItems: FilterItem[], newItems: FilterItem[]) {\r\n        return oldItems.length === newItems.length && oldItems.every((oldItem, i) => oldItem.equals(newItems[i]));\r\n    }\r\n\r\n    public clearFilter() {\r\n        this.filterHelper.clear();\r\n        this.refresh();\r\n    }\r\n\r\n    public getFilterItems(): Array<FilterItem> {\r\n        return this.filterHelper.filterItems;\r\n    }\r\n\r\n    public getFirstFilterValueByFieldname(fieldnames: string[], filterOperator: FilterOperator) {\r\n        return this.filterHelper.getFirstValueByFieldname(fieldnames, filterOperator);\r\n    }\r\n\r\n    //#region SelectionList\r\n\r\n    public readonly onSelectedIdsChanges = new Subject<ModelId[]>();\r\n    public readonly onFocusedIdChanges = new Subject<ModelId>();\r\n    public readonly onFocus = new Subject<ModelId>();\r\n    public readonly notFoundSelectedIds = signal([] as ModelId[]);\r\n    private initSelectionList() {\r\n        this.selectionList.init(\r\n            this.onSelectedIdsChanges,\r\n            this.onFocusedIdChanges,\r\n            this.onFocus\r\n        );\r\n    }\r\n\r\n    private checkSelectedIdsCanBeFound(selectedIds: ModelId[]) {\r\n        if (this.isExternalRefresh()) return;\r\n        const notFoundIds = [];\r\n        for (const selectedId of selectedIds) {\r\n            const model = this.dataBackup.find(data => data[this.idfield] === selectedId);\r\n            if (!model) notFoundIds.push(selectedId);\r\n        }\r\n        if (notFoundIds.length > 0) this.loggerService.warn('Cannot find following Ids in datasource:' + notFoundIds);\r\n        this.notFoundSelectedIds.set(notFoundIds);\r\n    }\r\n\r\n    public get selectedCount(): number {\r\n        return this.selectedIds.length;\r\n    }\r\n\r\n    public get selectedIds(): ModelId[] {\r\n        return this.selectionList.getSelectedIds();\r\n    }\r\n\r\n    public isSelected(id: ModelId): boolean {\r\n        return this.selectionList.contains(id);\r\n    }\r\n\r\n    private focusAfterRefreshId: ModelId;\r\n    public focusAfterRefresh(id: ModelId) {\r\n        this.focusAfterRefreshId = id;\r\n    }\r\n\r\n    public async focus(id: ModelId, gotoPage = false) {\r\n        if (!gotoPage) {\r\n            this.selectionList.set(id);\r\n            return;\r\n        }\r\n\r\n        if (!this.isExternalRefresh()) {\r\n            const pageIndex = this.getPageIndexById(id);\r\n            if (pageIndex >= 0)\r\n                this.gotoPage(pageIndex);\r\n            else\r\n                this.loggerService.warn(`cannot go to page of item  id=${id}. pageindex=${pageIndex}`);\r\n        }\r\n\r\n        else if (!this.data.some(d => d[this.idfield] === id)) {\r\n            this.updateExternalRefreshParams(refreshParams => refreshParams.paginationInfo.goToPageOfId = id.toString());\r\n            await this.refresh();\r\n            if (this.refreshType() !== RefreshType.externalRefreshInput)\r\n                this.updateExternalRefreshParams(refreshParams => refreshParams.paginationInfo.goToPageOfId = undefined);\r\n        }\r\n\r\n        this.selectionList.set(id);\r\n    }\r\n\r\n    public get focusedId(): ModelId {\r\n        return this.selectedCount > 0\r\n            ? this.selectedIds[this.selectedCount - 1]\r\n            : null;\r\n    }\r\n\r\n    public get focusedItem(): Model {\r\n        let focusedItem = null;\r\n        if (this.focusedId != null) {\r\n            const focusedItems = this.dataBackup.filter(\r\n                item => item[this.idfield] == this.focusedId\r\n            );\r\n            if (focusedItems.length > 0) focusedItem = focusedItems[0];\r\n        }\r\n        return focusedItem;\r\n    }\r\n\r\n    public setSelection(ids: ModelId[]);\r\n    public setSelection(id: ModelId);\r\n    public setSelection(arg1: any) {\r\n        this.selectionList.set(arg1);\r\n    }\r\n\r\n    public addSelection(ids: ModelId[]);\r\n    public addSelection(id: ModelId);\r\n    public addSelection(arg1: any) {\r\n        this.selectionList.add(arg1);\r\n    }\r\n\r\n    public removeSelection(id: ModelId) {\r\n        this.selectionList.remove(id);\r\n    }\r\n\r\n    public toggleSelection(id: ModelId) {\r\n        if (this.isSelected(id))\r\n            this.selectionList.remove(id);\r\n        else\r\n            this.selectionList.add(id);\r\n\r\n    }\r\n\r\n    public clearSelection() {\r\n        this.selectionList.clear();\r\n    }\r\n\r\n    public selectAll() {\r\n        this.setSelection(this.dataFiltered.map(d => d[this.idfield]));\r\n    }\r\n\r\n    //#endregion\r\n\r\n    public onPaginationChanged = new Subject<PaginationInfo>();\r\n    private initPaginationHelper() {\r\n        this.paginationHelper.init(this.onPaginationChanged);\r\n    }\r\n\r\n    public setPageSize(pageSize: number) {\r\n        if (this.paginationHelper.pageSize === pageSize) return;\r\n        this.paginationHelper.setPageSize(pageSize, this.data);\r\n        this.onPaginationChanged.next(this.paginationHelper.paginationInfo);\r\n        this.refresh();\r\n    }\r\n\r\n    public get paginationInfo(): PaginationInfo {\r\n        if (this.isExternalRefresh())\r\n            return this.externalRefreshParams().paginationInfo;\r\n        else\r\n            return this.paginationHelper.paginationInfo;\r\n    }\r\n\r\n    public gotoPage(pageIndex: number) {\r\n        if (this.isExternalRefresh())\r\n            this.updateExternalRefreshParams(refreshParams => refreshParams.paginationInfo.currentPageIndex = pageIndex);\r\n        else\r\n            this.paginationHelper.currentPageIndex = pageIndex;\r\n\r\n        this.refresh();\r\n    }\r\n\r\n    public async gotoPageOfFocusedItem() {\r\n        if (this.isExternalRefresh()) {\r\n            if (this.focusedItem) return;\r\n            this.updateExternalRefreshParams(refreshParams => refreshParams.paginationInfo.goToPageOfId = this.focusedId.toString());\r\n            await this.refresh();\r\n            if (this.refreshType() !== RefreshType.externalRefreshInput)\r\n                this.updateExternalRefreshParams(refreshParams => refreshParams.paginationInfo.goToPageOfId = undefined);\r\n        }\r\n        else {\r\n            const pageIndex = this.getPageIndexById(this.focusedId);\r\n            if (pageIndex >= 0) this.gotoPage(pageIndex);\r\n        }\r\n    }\r\n\r\n    public get currentPageIndex(): number {\r\n        if (this.isExternalRefresh())\r\n            return this.externalRefreshParams().paginationInfo.currentPageIndex;\r\n        else\r\n            return this.paginationHelper.currentPageIndex;\r\n    }\r\n\r\n    public get maxPageIndex(): number {\r\n        if (this.isExternalRefresh())\r\n            return this.externalRefreshParams().paginationInfo.maxPageIndex;\r\n        else\r\n            return this.paginationHelper.maxPageIndex;\r\n    }\r\n\r\n    public toggleAllFilteredSelected(selectAllFiltered: boolean) {\r\n        if (selectAllFiltered) this.setSelection(this.dataFiltered.map(d => d[this.idfield]));\r\n        else this.clearSelection();\r\n    }\r\n\r\n    //---RefreshParamStoreHelper\r\n    private initRefreshParamsStoreHelper() {\r\n        if (!this.storeKey) return;\r\n        this.refreshParamsStoreHelper.init(\r\n            this.storeKey,\r\n            this.onAfterViewInit,\r\n            this.onFilterItems,\r\n            this.onSortItems,\r\n            this.onPaginationChanged,\r\n            this.onSelectedIdsChanges,\r\n            (\r\n                filterItems: FilterItem[],\r\n                sortItems: SortItem[],\r\n                pageIndex?: number,\r\n                selectedIds?: any[],\r\n                pageSize?: number\r\n            ) => this.refreshParamsStore(\r\n                filterItems,\r\n                sortItems,\r\n                pageIndex,\r\n                selectedIds,\r\n                pageSize\r\n            ),\r\n        );\r\n    }\r\n\r\n    private refreshParamsStore(\r\n        filterItems: FilterItem[],\r\n        sortItems: SortItem[],\r\n        pageIndex?: number,\r\n        selectedIds?: ModelId[],\r\n        pageSize?: number\r\n    ) {\r\n        this.addRefreshBlocker();\r\n        this.setFilter(filterItems);\r\n        if (sortItems) this.sort(sortItems);\r\n        if (pageIndex != undefined) this.gotoPage(pageIndex);\r\n        if (pageSize) this.setPageSize(pageSize);\r\n        if (selectedIds) this.setSelection(selectedIds);\r\n        this.removeRefreshBlocker();\r\n    }\r\n\r\n    private deepCopy<T>(object: T) {\r\n        return JSON.parse(JSON.stringify(object)) as T;\r\n    }\r\n}\r\n\r\n// erfordert changeTracking:true\r\nexport class DataChangeEvent {\r\n    public dataItemChanges: { [id: string]: KeyValueChanges<any, any>; };\r\n}\r\n","import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { DatasourceComponent } from './ds-datasource.component';\r\n\r\n@Component({\r\n    selector: 'ds-selection-checkbox',\r\n    template: `\r\n        <input [attr.aria-label]=\"ariaLabel\" type=\"checkbox\" #checkboxcontrol [(ngModel)]=\"isChecked\" (click)=\"onClick($event)\" [disabled]=\"disable\" style=\"transform:scale(1.3)\"/>\r\n    `,\r\n    standalone: false\r\n})\r\n\r\nexport class DatasourceSelectionCheckboxComponent implements OnInit, OnDestroy {\r\n\r\n    private subscriptions = new Array<Subscription>();\r\n    ngOnInit() {\r\n        this.subscriptions.push(\r\n            this.datasource.onSelectedIdsChanges.subscribe((selectedIds: any[]) => {\r\n                this.onSelectedIdsChanges(selectedIds);\r\n            }),\r\n            this.datasource.onAfterRefresh.subscribe(() => {\r\n                this.toogleIsCheckedIfNesseary();\r\n            })\r\n        );\r\n\r\n        this._isChecked = this.selectId !== undefined && this.datasource.isSelected(this.selectId);\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.subscriptions.map(s => s.unsubscribe());\r\n    }\r\n\r\n    @Input() public datasource: DatasourceComponent;\r\n    @Input() public allowMultiSelect: boolean;\r\n    @Input('ds-select') public selectId: any;\r\n    /** Html Id Attribute for Input */\r\n    @Input('aria-label') public ariaLabel: string;\r\n    @Input() public disable: boolean;\r\n    @ViewChild('checkboxcontrol', { static: true }) public checkboxControl: ElementRef<HTMLInputElement>;\r\n\r\n    private toogleIsCheckedIfNesseary() {\r\n        if (!this.selectId && this.datasource.selectedIds.length == 0)\r\n            this.multiSelectIsChecked = false;\r\n\r\n    }\r\n\r\n    //isChecked: boolean = false;\r\n    private _isChecked = false;\r\n    private multiSelectIsChecked = false;\r\n    public set isChecked(value: boolean) {\r\n        if (this.selectId) {\r\n            if (value == this._isChecked) return;\r\n            if (value) {\r\n                if (this.allowMultiSelect)\r\n                    this.datasource.addSelection(this.selectId);\r\n                else\r\n                    this.datasource.focus(this.selectId);\r\n\r\n            } else\r\n                this.datasource.removeSelection(this.selectId);\r\n\r\n        }\r\n        else {\r\n            if (value == this.multiSelectIsChecked) return;\r\n            this.multiSelectIsChecked = value;\r\n            this.datasource.toggleAllFilteredSelected(this.multiSelectIsChecked);\r\n        }\r\n    }\r\n\r\n    public get isChecked(): boolean {\r\n        if (this.selectId) return this._isChecked;\r\n        else return this.multiSelectIsChecked;\r\n    }\r\n\r\n    private onSelectedIdsChanges(selectedIds: any[]) {\r\n        if (this.selectId) {\r\n            const isInSelection = selectedIds.indexOf(this.selectId) >= 0;\r\n            if (isInSelection !== this._isChecked) this._isChecked = isInSelection;\r\n        } else\r\n            this.multiSelectIsChecked = this.datasource.dataFiltered.length === selectedIds.length && selectedIds.length > 0;\r\n\r\n    }\r\n\r\n    public onClick($event: MouseEvent) {\r\n        $event.stopPropagation();\r\n    }\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { Directive, ElementRef, HostListener, inject, Input, OnDestroy, OnInit, signal } from '@angular/core';\r\nimport { LoggerService } from '@sowatech/shared/logger';\r\nimport { ensureArray } from '@sowatech/shared/utilities';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { DatasourceComponent } from './ds-datasource.component';\r\nimport { FilterItem, FilterOperator } from './ds-dtos.model';\r\n\r\n@Directive({\r\n    selector: '[ds-filter]',\r\n    standalone: false,\r\n    host: {\r\n        '[attr.data-cy-filter]': 'dataCyFilterSignal()'\r\n    },\r\n})\r\nexport class DatasourceFilterDirective implements OnInit, OnDestroy {\r\n    private readonly logger = inject(LoggerService);\r\n\r\n    protected readonly dataCyFilterSignal = signal('');\r\n\r\n    @Input('ds-filter')\r\n    public set dsfilter(filter: string | Array<string>) {\r\n        if (!(Array.isArray(filter) || typeof filter === 'string'))\r\n            return;\r\n\r\n        this.filterFields = ensureArray(filter);\r\n        this.dataCyFilterSignal.set(this.filterFields.join(','));\r\n    }\r\n\r\n    @Input('ds-filter-minlength') public filterMinLength = 0;\r\n\r\n    private get inputWithCheckedProperty(): boolean {\r\n        return this.filterInput.type === 'checkbox' || this.filterInput.type === 'radio';\r\n    }\r\n    private assertInputWithCheckedProperty() {\r\n        if (!this.inputWithCheckedProperty) this.logger.error('DatasourceFilterDirective: filter input has no check property');\r\n    }\r\n\r\n    @Input('datasource')\r\n    public set setDatasource(value: DatasourceComponent) {\r\n        this.datasource = value;\r\n    }\r\n    @Input('ds-filter-operator')\r\n    public set filterOperatorAsString(value: string) {\r\n        this.filterOperator = FilterOperator[value];\r\n    }\r\n    @Input('ds-filter-true-value') public filterTrueValue: string;//der filterwert für boolean inputs wie checkboxen\r\n    @Input('ds-filter-default') public defaultFilterValues: string;\r\n\r\n    private datasource: DatasourceComponent;\r\n\r\n    public filterFields: string | string[];\r\n    public filterOperator: FilterOperator = FilterOperator.Contains;\r\n\r\n    private filterInput = inject(ElementRef).nativeElement;\r\n    public get filterValue(): string {\r\n        if (this.inputWithCheckedProperty)\r\n            return this.filterTrueValue;\r\n        else\r\n            return this.filterInput.value;\r\n    }\r\n\r\n    private get isInputChecked(): boolean {\r\n        this.assertInputWithCheckedProperty();\r\n        return this.filterInput.checked;\r\n    }\r\n\r\n    private subscriptions = new Array<Subscription>();\r\n    ngOnInit() {\r\n        this.subscriptions.push(\r\n            this.datasource.onFilterItems.subscribe(filterItems => this.onFilterChanged(filterItems))\r\n        );\r\n        this.onFilterChanged(this.datasource.getFilterItems());\r\n        this.initDefaultFilter();\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        for (const s of this.subscriptions)\r\n            s.unsubscribe();\r\n    }\r\n\r\n    private initDefaultFilter() {\r\n        if (this.inputWithCheckedProperty && this.isInputChecked)\r\n            this.defaultFilterValues = this.filterTrueValue;\r\n\r\n        if (this.defaultFilterValues !== undefined) {\r\n            if (this.inputWithCheckedProperty)\r\n                this.filterInput.checked = true;\r\n            else\r\n                this.filterInput.value = this.defaultFilterValues;\r\n            this.addFilter();\r\n        }\r\n    }\r\n\r\n    private onFilterChanged(filterItems: FilterItem[]) {\r\n        const myFilterItem = filterItems.find((item) => item.fieldnamesAreEqual(this.filterFields as string) && item.filterOperator == this.filterOperator);\r\n        if (!myFilterItem) {\r\n            this.resetFilter();\r\n            return;\r\n        }\r\n\r\n        if (this.filterInput.tagName === 'SELECT') {\r\n            // wenn der Filter aus dem localStorage geladen wird, muss der Filtertext hier verzögert gesetzt werden. vmtl Reihenfolgenproblem beim rendern\r\n            setTimeout(() => this.filterInput.value = myFilterItem.fieldvalues.toString());\r\n            return;\r\n        }\r\n\r\n        this.filterInput.value = myFilterItem.fieldvalues.toString();\r\n    }\r\n\r\n    private resetFilter() {\r\n        this.resetOldValueToEmpty();\r\n        if (this.filterInput.value) this.filterInput.value = '';\r\n        if (this.inputWithCheckedProperty && this.filterInput.checked != false)\r\n            this.filterInput.checked = false;\r\n    }\r\n\r\n    @HostListener('blur')\r\n    public onBlur() {\r\n        this.addFilter();\r\n    }\r\n\r\n    @HostListener('change')\r\n    public onChange() {\r\n        this.addFilter();\r\n    }\r\n\r\n    @HostListener('input')\r\n    public onInput() {\r\n        this.setOldValueFromDatasource();\r\n        this.timeoutFilter();\r\n    }\r\n\r\n    private setOldValueFromDatasource() {\r\n        if (this.oldFilter === undefined)\r\n            this.oldFilter = this.datasource.getFirstFilterValueByFieldname(ensureArray<string>(this.filterFields), this.filterOperator);\r\n    }\r\n\r\n    private resetOldValueToEmpty(){\r\n        if(this.oldFilter) this.oldFilter = '';\r\n    }\r\n\r\n    private timeout: any;\r\n    /** selbstgebauter debounce */\r\n    private timeoutFilter() {\r\n        if (this.timeout != undefined)\r\n            clearTimeout(this.timeout);\r\n\r\n        this.timeout = setTimeout(() => {\r\n            this.timeout = undefined;\r\n            this.addFilter();\r\n        }, 800);\r\n    }\r\n\r\n    private oldFilter: undefined | null | string = undefined;\r\n    private addFilter() {\r\n        if (this.inputWithCheckedProperty) {\r\n            const filterValue = this.isInputChecked ? this.filterValue : '';\r\n            this.datasource.addFilter(this.filterFields as string, filterValue, this.filterOperator);\r\n            return;\r\n        }\r\n\r\n        if (this.filterValue.length >= this.filterMinLength && this.filterValue != this.oldFilter && !this.allEmpty(this.filterValue, this.oldFilter)) {\r\n            this.datasource.addFilter(this.filterFields as string, this.filterValue, this.filterOperator);\r\n            this.oldFilter = this.filterValue;\r\n        }\r\n    }\r\n\r\n    private isEmpty(val: string | undefined) {\r\n        return val === undefined || val === null || val === '';\r\n    }\r\n\r\n    private allEmpty(...args: Array<string | undefined>) {\r\n        return args.every(arg => this.isEmpty(arg));\r\n    }\r\n}\r\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { DatasourceComponent } from './ds-datasource.component';\r\nimport { FilterItem, FilterOperator } from './ds-dtos.model';\r\n\r\n@Component({\r\n    selector: 'ds-filterdisplay',\r\n    template: ` @if (isFilterSet && filterFieldsVisible) {\r\n  <code class=\"white-space-normal\" [title]=\"filterText\">\r\n    {{filterText}}\r\n    <i class=\"fa fa-undo clear-icon\" style=\"cursor:pointer\" title=\"Filter zurücksetzen\" (click)=\"clearFilter()\" [shortcut]=\"'ctrl + backspace'\"></i>\r\n  </code>\r\n}\r\n@if (isFilterSet && !filterFieldsVisible) {\r\n  <button class=\"btn btn-default btn-xs white-space-normal\" type=\"button\" (click)=\"clearFilter()\" title=\"Filter zurücksetzen\" [shortcut]=\"'ctrl + backspace'\">\r\n    {{filterText}}\r\n    <i class=\"fa fa-times-circle\"></i>\r\n  </button>\r\n}`,\r\n    styles: [`\r\n        code {\r\n            background-color: #d5e0f4;\r\n            color: #204077;\r\n            padding: 2px 4px;\r\n\r\n            white-space: nowrap !important;\r\n            overflow: hidden;\r\n            text-overflow: ellipsis;\r\n            display: inline-block;\r\n            max-width: 100%;\r\n            padding-right: 25px;\r\n            position: relative;\r\n        }\r\n        .clear-icon {\r\n            position: absolute;\r\n            right: 5px;\r\n            top: 5px;\r\n        }\r\n        .white-space-normal {\r\n            white-space: normal;\r\n        }\r\n    `],\r\n    standalone: false\r\n})\r\n\r\nexport class DatasourceFilterdisplayComponent implements OnInit, OnDestroy {\r\n\r\n    private subscriptions = new Array<Subscription>();\r\n    public isFilterSet = false;\r\n\r\n    ngOnInit() {\r\n        this.subscriptions.push(this.datasource.onFilterItems.subscribe((filterItems) => { this.onDatasourceFilterChanged(filterItems); }));\r\n        this.onDatasourceFilterChanged(this.datasource.getFilterItems());\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        for (const s of this.subscriptions)\r\n            s.unsubscribe();\r\n\r\n    }\r\n\r\n    @Input() datasource: DatasourceComponent;\r\n    @Input() filterFieldsVisible = true;\r\n\r\n    filterText: string;\r\n\r\n    private onDatasourceFilterChanged(filterItems: FilterItem[]) {\r\n        //setTimeout: fix zur verhinderung des fehlers 'Expression changed after checked'\r\n        setTimeout(() => {\r\n            this.isFilterSetCheck(filterItems);\r\n            this.createFilterText(filterItems);\r\n        }, 0);\r\n    }\r\n\r\n    private isFilterSetCheck(filterItems: FilterItem[]) {\r\n        this.isFilterSet = filterItems.length > 0 ? true : false;\r\n    }\r\n\r\n    private createFilterText(filterItems: FilterItem[]) {\r\n        this.filterText = '';\r\n        if (this.filterFieldsVisible) {\r\n            const textParts = new Array<string>();\r\n            for (const f of filterItems) {\r\n                const fieldvalue = f.hasFieldValue ? f.fieldvalues.join(' OR ') : 'NULL';\r\n                const fieldnamePartText = f.fieldnames.join(' OR ');\r\n                const textpart = `[${fieldnamePartText}] ${FilterOperator[f.filterOperator]} '${fieldvalue}'`;\r\n                textParts.push(textpart);\r\n            }\r\n            this.filterText = textParts.join(' AND ');\r\n        }\r\n        else\r\n            this.filterText = $localize`:@@Datasource.Filter.ResetToDefault.act.Label:Filter zurücksetzen`;\r\n        //optional: Set Filter text for locale (translation);\r\n    }\r\n\r\n    public clearFilter() {\r\n        this.datasource.clearFilter();\r\n    }\r\n}\r\n","import { Component, Input, OnDestroy } from '@angular/core';\r\nimport { LoggerService } from '@sowatech/shared/logger';\r\nimport { I18nService } from '@sowatech/shared/utilities';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { DatasourceComponent } from './ds-datasource.component';\r\nimport { PaginationInfo } from './ds-dtos.model';\r\n\r\n@Component({\r\n    selector: 'ds-pagination-info',\r\n    template: `\r\n        @if (itemNumberTotal > 0) {\r\n          <div class=\"dataTables_info\" role=\"status\" aria-live=\"polite\">\r\n            @if (!variant || variant==='default') {\r\n              {{ getDataFromToDisplayText(itemNumberFrom, itemNumberTo, itemNumberTotal) }}\r\n            }\r\n            @if (variant === 'compact') {\r\n              {{itemNumberFrom}}-{{itemNumberTo}} <span title=\"Gesamtanzahl Datensätze\" i18n-title=\"@@Datasource.VisibleRecordsRange.dsp.Tooltip\">({{itemNumberTotal}})</span>\r\n            }\r\n          </div>\r\n        }\r\n        \r\n        @if (itemNumberTotal === 0) {\r\n          <div class=\"dataTables_info\" role=\"status\" aria-live=\"polite\"></div>\r\n        }\r\n        `,\r\n    standalone: false\r\n})\r\n\r\nexport class DatasourcePaginationInfoComponent implements OnDestroy {\r\n    constructor(\r\n        private loggerService: LoggerService,\r\n        private i18n: I18nService,\r\n    ) { }\r\n\r\n    @Input('datasource')\r\n    public set setDatasource(value: DatasourceComponent) {\r\n        this.datasource = value;\r\n        this.subscriptions.push(\r\n            this.datasource.onPaginationChanged.subscribe(paginationInfo => this.paginationChanged(paginationInfo)));\r\n        this.paginationChanged(this.datasource.paginationInfo);\r\n    }\r\n\r\n    @Input()\r\n    public variant: 'default' | 'compact' = 'default';\r\n\r\n    private readonly subscriptions: Subscription[] = [];\r\n\r\n    ngOnDestroy() {\r\n        this.subscriptions.forEach(s => s.unsubscribe());\r\n    }\r\n\r\n    private datasource: DatasourceComponent;\r\n    public itemNumberFrom = 0;\r\n    public itemNumberTo = 0;\r\n    public itemNumberTotal = 0;\r\n\r\n    private paginationChanged(paginationInfo: PaginationInfo) {\r\n        if (!paginationInfo) {\r\n            this.loggerService.warn('paginationInfo is null');\r\n            return;\r\n        }\r\n        this.itemNumberTotal = paginationInfo.totalNumOfItems;\r\n        const usedPageIndex = paginationInfo.currentPageIndex <= paginationInfo.maxPageIndex ? paginationInfo.currentPageIndex : paginationInfo.maxPageIndex;\r\n        this.itemNumberFrom = (usedPageIndex * paginationInfo.pageSize) + 1;\r\n        this.itemNumberTo = paginationInfo.pageSize > 0 ? this.itemNumberFrom + paginationInfo.currentPageNumOfItems - 1 : this.itemNumberTotal;\r\n    }\r\n\r\n    public getDataFromToDisplayText(from: number, to: number, total: number) {\r\n        return this.i18n.replace($localize`:@@Datasource.VisibleRecordsRange.dsp.Text:Anzeige $0 bis $1 von $2 Datensätzen`,\r\n            [from.toString(), to.toString(), total.toString()]);\r\n    }\r\n}\r\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { DsDatasourceDefaultConfig } from '@sowatech/shared/shared-config';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { DatasourceComponent } from './ds-datasource.component';\r\n\r\n@Component({\r\n    selector: 'ds-pagination-size-selector',\r\n    template: `\r\n        <div class=\"dataTables_paginate\">\r\n          @if (datasourceDataCount>0) {\r\n            <ul class=\"pagination\">\r\n              @for (itemSize of pageSizes; track itemSize) {\r\n                <li class=\"paginate_button noselect page-item\"\r\n                  [ngClass]=\"itemSize === pageSize ? 'active disabled' : ''\">\r\n                  @if (itemSize > 0) {\r\n                    <span href=\"#\" class=\"page-link\" [ngClass]=\"itemSize === pageSize ? 'active noselect' : ''\"\r\n                    (click)=\"setPageSize(itemSize)\">{{ itemSize }}</span>\r\n                  }\r\n                  @if (itemSize === 0) {\r\n                    <span href=\"#\" class=\"page-link\" [ngClass]=\"itemSize === pageSize ? 'active noselect' : ''\"\r\n                    (click)=\"setPageSize(itemSize)\" i18n=\"@@Datasource.Pagination.All.dsp.Label\">Alle</span>\r\n                  }\r\n                </li>\r\n              }\r\n            </ul>\r\n          }\r\n        </div>`,\r\n    styles: [`\r\n        .noselect {\r\n          -webkit-touch-callout: none;\r\n          -webkit-user-select: none;\r\n          -khtml-user-select: none;\r\n          -moz-user-select: none;\r\n          -ms-user-select: none;\r\n          user-select: none;\r\n          cursor:pointer;\r\n        }\r\n    `],\r\n    standalone: false\r\n})\r\nexport class DatasourcePaginationSizeSelectorComponent implements OnInit, OnDestroy {\r\n    constructor(\r\n        config: DsDatasourceDefaultConfig,\r\n    ) {\r\n        this.pageSize = config.pageSize;\r\n    }\r\n    private subscriptions = new Array<Subscription>();\r\n\r\n    ngOnInit() {\r\n        this.datasource.removeRefreshBlocker();\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.subscriptions.forEach(s => s.unsubscribe());\r\n    }\r\n\r\n    @Input('pageSizes')\r\n    public set _pageSizes(values: Array<number>) {\r\n        this.pageSizes = values;\r\n    }\r\n\r\n    public pageSizes: Array<number> = [];\r\n\r\n    @Input('pageSize')\r\n    public set _pageSize(value: number) {\r\n        this.setPageSize(value);\r\n    }\r\n\r\n    @Input('datasource')\r\n    public set setDatasource(datasource: DatasourceComponent) {\r\n        this.datasource = datasource;\r\n        datasource.addRefreshBlocker();\r\n        this.subscriptions.push(\r\n            this.datasource.onAfterRefresh.subscribe(() => this.datasourceDataCount = this.datasource.data.length),\r\n            this.datasource.onPaginationChanged.subscribe(paginationInfo => this.setPageSize(paginationInfo.pageSize)),\r\n        );\r\n        this.setPageSize();\r\n    }\r\n    private datasource: DatasourceComponent;\r\n\r\n    public datasourceDataCount = 0;\r\n    public pageSize: number;\r\n    public setPageSize(value?: number) {\r\n        if (value !== undefined)\r\n            this.pageSize = value;\r\n\r\n        if (this.datasource) {\r\n            const setValue = this.pageSize > 0 ? this.pageSize : 999999999;\r\n            this.datasource.setPageSize(setValue);\r\n        }\r\n    }\r\n}\r\n","import { Component, Input, OnDestroy } from '@angular/core';\r\nimport { PaginationInfoVariant } from '@sowatech/shared/shared-config';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { DatasourceComponent } from './ds-datasource.component';\r\nimport { PaginationInfo } from './ds-dtos.model';\r\n\r\n@Component({\r\n    selector: 'ds-pagination',\r\n    template: `\r\n        @if (variant !== 'pageOnly') {\r\n          <div class=\"dataTables_paginate\">\r\n            @if (pageItems.length>0 && totalNumOfItems>0) {\r\n              <ul class=\"pagination\">\r\n                <li class=\"paginate_button page-item noselect\" [ngClass]=\"!hasPrevious?'disabled':''\">\r\n                  <span class=\"noselect page-link\" (click)=\"previousPage()\">‹</span>\r\n                </li>\r\n                @for (page of pageItems; track page) {\r\n                  <li class=\"paginate_button page-item noselect\" [ngClass]=\"page.isCurrent?'active disabled':''\">\r\n                    <span href=\"#\" class=\"noselect page-link\" (click)=\"gotoPage($event,page.pageIndex)\">{{page.text}}</span>\r\n                  </li>\r\n                }\r\n                <li class=\"paginate_button page-item noselect\" [ngClass]=\"!hasNext?'disabled':''\">\r\n                  <span href=\"#\" class=\"noselect page-link\" (click)=\"nextPage()\">›</span>\r\n                </li>\r\n              </ul>\r\n            }\r\n          </div>\r\n        } @else {\r\n          <fieldset class=\"page-selector\">\r\n            <label for=\"page\" i18n=\"@@Datasource.Pagination.Page.dsp.Label\">Seite</label>\r\n            <button class=\"btn btn-xs paginate_button\" i18n-title=\"@@Datasource.Pagination.Previous.dsp.Tooltip\" title=\"Vorherige Seite\" (click)=\"previousPage()\">\r\n              <i class=\"fas fa-chevron-left\"></i>\r\n            </button>\r\n            <input id=\"page\" type=\"number\" min=\"1\" (change)=\"updateSelectedPage($any($event.target).value)\" [value]=\"this.selectedPage\">\r\n            <button class=\"btn btn-xs paginate_button\" i18n-title=\"@@Datasource.Pagination.Next.dsp.Tooltip\" title=\"Nächste Seite\" (click)=\"nextPage()\">\r\n              <i class=\"fas fa-chevron-right\"></i>\r\n            </button>\r\n          </fieldset>\r\n        }\r\n        `,\r\n    styleUrls: ['./ds-pagination.component.scss'],\r\n    standalone: false\r\n})\r\nexport class DatasourcePaginationComponent implements OnDestroy {\r\n    private readonly subscriptions: Subscription[] = [];\r\n\r\n    ngOnDestroy() {\r\n        this.subscriptions.forEach(s => s.unsubscribe());\r\n    }\r\n\r\n    public pageItems: Array<PageItem> = [];\r\n    public pageSize = 0;\r\n    public totalNumOfItems = 0;\r\n\r\n    @Input('datasource')\r\n    public set setDatasource(datasource: DatasourceComponent) {\r\n        this.datasource = datasource;\r\n        this.subscriptions.push(this.datasource.onPaginationChanged.subscribe((paginationInfo: PaginationInfo) => {\r\n            this.paginationChanged(paginationInfo);\r\n        }));\r\n        this.paginationChanged(this.datasource.paginationInfo);\r\n    }\r\n\r\n    @Input() public variant: PaginationInfoVariant;\r\n    /** Da this.datasource.currentPageIndex 0-basiert ist, speichert diese Variable die tatsächliche Seitenzahl (currentPageIndex + 1) */\r\n    public selectedPage = 1;\r\n\r\n    private datasource: DatasourceComponent;\r\n\r\n    public hasPrevious = false;\r\n    public hasNext = false;\r\n\r\n    public previousPage() {\r\n        if (this.hasPrevious) {\r\n            this.datasource.gotoPage(this.datasource.currentPageIndex - 1);\r\n            this.selectedPage--;\r\n        }\r\n    }\r\n\r\n    public nextPage() {\r\n        if (this.hasNext) {\r\n            this.datasource.gotoPage(this.datasource.currentPageIndex + 1);\r\n            this.selectedPage++;\r\n        }\r\n    }\r\n\r\n    public updateSelectedPage(pageNumber: number) {\r\n        this.datasource.gotoPage(pageNumber - 1);\r\n        this.selectedPage = pageNumber;\r\n    }\r\n\r\n    public gotoPage(event: MouseEvent, pageIndex: number) {\r\n        event.stopPropagation();//aus unklaren gründen hier nötig, damit im dropdowncontainer der dropdwon sich nicjht schliesst bei klick auf pagination; bei debug hat dort das parant-li dieses spans hier keinen parent. betrifft nur dieses li.\r\n        this.datasource.gotoPage(pageIndex);\r\n    }\r\n\r\n    private paginationChanged(paginationInfo: PaginationInfo) {\r\n        this.pageItems = [];\r\n        if (paginationInfo) {\r\n            this.totalNumOfItems = paginationInfo.totalNumOfItems;\r\n            this.pageSize = paginationInfo.pageSize;\r\n            let activePageIndex = paginationInfo.currentPageIndex;\r\n            if (activePageIndex > this.datasource.maxPageIndex) activePageIndex = this.datasource.maxPageIndex;\r\n            const minPageItemsIndex = Math.max(0, activePageIndex - 3);\r\n            const maxPageItemsIndex = Math.min(activePageIndex + 3, this.datasource.maxPageIndex);\r\n            for (let pi = minPageItemsIndex; pi <= maxPageItemsIndex; pi++) {\r\n                this.pageItems.push(\r\n                    {\r\n                        text: (pi + 1).toString(),\r\n                        pageIndex: pi,\r\n                        isCurrent: pi === activePageIndex\r\n                    }\r\n                );\r\n            }\r\n            this.hasPrevious = (activePageIndex > 0);\r\n            this.hasNext = (activePageIndex < this.datasource.maxPageIndex);\r\n        }\r\n    }\r\n}\r\n\r\nexport class PageItem {\r\n    public text: string;\r\n    public pageIndex: number;\r\n    public isCurrent: boolean;\r\n}\r\n","import { Directive, ElementRef, HostListener, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { DatasourceComponent } from './ds-datasource.component';\r\nimport { SortItem } from './ds-dtos.model';\r\n\r\n@Directive({\r\n    selector: '[ds-sort]',\r\n    standalone: false\r\n})\r\n\r\nexport class DatasourceSortDirective implements OnInit, OnDestroy {\r\n\r\n    @Input('ds-sort') public sortField: string;\r\n    @Input() public datasource: DatasourceComponent;\r\n    // eslint-disable-next-line @angular-eslint/no-input-rename\r\n    @Input('icon-left') public setIconLeft = false;\r\n    // eslint-disable-next-line @angular-eslint/no-input-rename\r\n    @Input('ds-sort-icon-align') public sortIconAlign: 'left' | 'right';\r\n\r\n    private nativeElement: HTMLElement;\r\n\r\n    constructor(el: ElementRef) {\r\n        this.nativeElement = el.nativeElement;\r\n    }\r\n\r\n    private subscriptions = new Array<Subscription>();\r\n\r\n    ngOnInit() {\r\n        if (this.sortField) {\r\n            this.setClassNone();\r\n            this.subscriptions.push(this.datasource.onSortItems.subscribe((sortItems: SortItem[]) => {\r\n                this.onTableSortingChanged(sortItems);\r\n            }));\r\n            this.onTableSortingChanged(this.datasource.getSortItems());\r\n        }\r\n        if (this.sortIconAlign === 'left')\r\n            this.setClassIconLeft();\r\n\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        for (const s of this.subscriptions)\r\n            s.unsubscribe();\r\n\r\n    }\r\n\r\n    private onTableSortingChanged(sortItems: SortItem[]) {\r\n        const mySortItem = sortItems.find(item => item.fieldname === this.sortField);\r\n        if (!mySortItem)\r\n            this.setClassNone();\r\n\r\n        else {\r\n            if (mySortItem.reverse)\r\n                this.setClassDesc();\r\n\r\n            else\r\n                this.setClassAsc();\r\n\r\n        }\r\n    }\r\n\r\n    private setClassNone() {\r\n        this.removeClass('sorting_asc');\r\n        this.removeClass('sorting_desc');\r\n        this.addClass('sorting');\r\n    }\r\n\r\n    private setClassAsc() {\r\n        this.addClass('sorting_asc');\r\n        this.removeClass('sorting_desc');\r\n        this.removeClass('sorting');\r\n    }\r\n\r\n    private setClassDesc() {\r\n        this.addClass('sorting_desc');\r\n        this.removeClass('sorting_asc');\r\n        this.removeClass('sorting');\r\n    }\r\n\r\n    private setClassIconLeft() {\r\n        this.addClass('iconleft');\r\n    }\r\n\r\n    private removeClass(className: string) {\r\n        this.nativeElement.classList.remove(className);\r\n    }\r\n\r\n    private addClass(className: string) {\r\n        if (!this.nativeElement.classList.contains(className)) this.nativeElement.classList.add(className);\r\n    }\r\n\r\n    @HostListener('click', ['$event'])\r\n    protected onClick(event: PointerEvent) {\r\n        if (!this.sortField) return;\r\n        if (this.nativeElement.classList.contains('sorting_asc'))\r\n            this.datasource.sortDesc(this.sortField, event.ctrlKey);\r\n        else\r\n            this.datasource.sortAsc(this.sortField, event.ctrlKey);\r\n    }\r\n}\r\n","import { CommonModule, DecimalPipe } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { GlobalKeyboardShortcutsModule } from '@sowatech/shared/global-keyboard-shortcuts';\r\n\r\nimport { DatasourceComponent } from './ds-datasource.component';\r\nimport { DatasourceFilterDirective } from './ds-filter.directive';\r\nimport { DatasourceFilterdisplayComponent } from './ds-filterdisplay.component';\r\nimport { DatasourcePaginationInfoComponent } from './ds-pagination-info.component';\r\nimport { DatasourcePaginationSizeSelectorComponent } from './ds-pagination-size-selector.component';\r\nimport { DatasourcePaginationComponent } from './ds-pagination.component';\r\nimport { DatasourceSelectionCheckboxComponent } from './ds-selection-checkbox.component';\r\nimport { DatasourceSortDirective } from './ds-sort.directive';\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule, FormsModule,\r\n        GlobalKeyboardShortcutsModule\r\n    ],\r\n    declarations: [\r\n        DatasourceComponent,\r\n        DatasourceFilterDirective,\r\n        DatasourceFilterdisplayComponent,\r\n        DatasourceSortDirective,\r\n        DatasourcePaginationInfoComponent,\r\n        DatasourcePaginationComponent,\r\n        DatasourceSelectionCheckboxComponent,\r\n        DatasourcePaginationSizeSelectorComponent\r\n    ],\r\n    exports: [\r\n        DatasourceComponent,\r\n        DatasourceFilterDirective,\r\n        DatasourceFilterdisplayComponent,\r\n        DatasourceSortDirective,\r\n        DatasourcePaginationInfoComponent,\r\n        DatasourcePaginationComponent,\r\n        DatasourceSelectionCheckboxComponent,\r\n        DatasourcePaginationSizeSelectorComponent\r\n    ],\r\n    providers: [DecimalPipe],\r\n})\r\nexport class DatasourceModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.SelectionListHelper","i3.SortHelper","i4.FilterHelper","i5.PaginationHelper","i6.RefreshParamsStoreHelper","i7","i8.DatasourceCSVService","i9.AggregateFunctionsService","i2"],"mappings":"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"}