0

0.10.9 を超える明快さで内部 API を使用するにはどうすればよいですか? バージョン 0.10.6 では、プロジェクトでこのインポートを使用して、データグリッドの内部フィルターを変更します。

import {DatagridStringFilterImpl} from "clarity-angular/data/datagrid/built-in/filters/datagrid-string-filter-impl"; 
import {RegisteredFilter} from "clarity-angular/data/datagrid/providers/filters";

少なくともバージョン 0.10.9 では、これはもう書き込めません。コンパイラは次のエラーで終了します。

ERROR in ./src/app/common/DatagridUtils.ts
Module not found: Error: Can't resolve 'clarity-
angular/data/datagrid/providers/filters' in 'C:\java\workspace\rimc\rimc-web\src\main\webapp\angularapp\src\app\common'
 @ ./src/app/common/DatagridUtils.ts 5:16-74
 @ ./src/app/sampleData/sample-data.component.ts
 @ ./src/app/app.module.ts
 @ ./src/app/index.ts
 @ ./src/main.ts
 @ multi webpack-dev-server/client?http://localhost:4200 ./src/main.ts

 ERROR in ./src/app/common/DatagridUtils.ts
 Module not found: Error: Can't resolve 'clarity-angular/data/datagrid/built-in/filters/datagrid-string-filter-impl' in 
'C:\java\workspace\project\angularapp\src\app\common'
  @ ./src/app/common/DatagridUtils.ts 4:36-121
  @ ./src/app/sampleData/sample-data.component.ts
  @ ./src/app/app.module.ts
  @ ./src/app/index.ts
  @ ./src/main.ts
  @ multi webpack-dev-server/client?http://localhost:4200 ./src/main.ts
 webpack: Failed to compile.

最近報告したバグ 1512 の解決により、0.10.10 にアップグレードしたいと考えています。

編集:カスタム フィルターの組み込みサポートの代わりに内部 API を使用する理由を尋ねられたので、ここに私の答えがあります: 私の状況では、データグリッドの上の別の入力フィールドで表されるフルテキスト フィルターを使用したいからです。このフィールドに入力すると、データグリッドの更新がトリガーされ、リクエストがバックエンドに送信されます。トリックは、リクエストをトリガーする直前に、別の入力フィールドからデータグリッドフィルターの内部値にフルテキストフィルター値を追加することです。上記のバージョンで変更された内部 API の助けを借りてすべて。この機能を実現する別の方法があれば、喜んでこちらにお送りします。

編集2:(ソースコード)

import {
Datagrid, DatagridPropertyComparator, DatagridPropertyStringFilter, DatagridStringFilter,
State
} from "clarity-angular";
import {DatagridStringFilterImpl} from "clarity-angular/data/datagrid/built-in/filters/datagrid-string-filter-impl";
import {FiltersProvider, RegisteredFilter} from "clarity-angular/data/datagrid/providers/filters";


export default class DatagridUtils {

static fulltextPropertyName: string = '_fulltext';

static getState(datagrid: Datagrid, fulltext: any) {

    const state: State = {};

    let activeFilters;

    if (datagrid && datagrid['filters']) {
        const page = datagrid['page'];
        if (page.size > 0) {
            state.page = {from: page.firstItem, to: page.lastItem, size: page.size};
        }

        const sort = datagrid['sort'];
        if (sort.comparator) {
            if (sort.comparator instanceof DatagridPropertyComparator) {
                /*
                 * Special case for the default object property comparator,
                 * we give the property name instead of the actual comparator.
                 */
                state.sort = {by: (<DatagridPropertyComparator>sort.comparator).prop, reverse: sort.reverse};
            } else {
                state.sort = {by: sort.comparator, reverse: sort.reverse};
            }
        }

        let filtersProvider = datagrid['filters'];
        let fulltextFilter = this.getFulltextFilter(filtersProvider);
        if (!fulltextFilter) {
            fulltextFilter = new DatagridStringFilterImpl(new DatagridPropertyStringFilter(this.fulltextPropertyName, false));
            // rucni registrace, aby se neregistroval observer, ktery nam vse zacykluje
            const registered = new RegisteredFilter(fulltextFilter, () => {
            });
            filtersProvider['_all'].push(registered);
        }
        if (typeof fulltext === 'string') {
            fulltextFilter['value'] = fulltext;
            // zmena filtru zpusobi prechod na 1. stranku
            page.current = 1;
        }

        activeFilters = filtersProvider.getActiveFilters();
        if (activeFilters.length > 0) {
            state.filters = [];
            for (const filter of activeFilters) {
                if (filter instanceof DatagridStringFilterImpl) {
                    const stringFilter = (<DatagridStringFilterImpl>filter).filterFn;
                    if (stringFilter instanceof DatagridPropertyStringFilter) {
                        /*
                         * Special case again for the default object property filter,
                         * we give the property name instead of the full filter object.
                         */
                        state.filters.push({
                            property: (<DatagridPropertyStringFilter>stringFilter).prop,
                            value: (<DatagridStringFilterImpl>filter).value
                        });
                        continue;
                    }
                }
                state.filters.push(filter);
            }
        }
    }

    return state;

}

static getFulltextFilter(filtersProvider): DatagridStringFilterImpl {
    let all = filtersProvider['_all'];
    for (const filter of all) {

        if (filter.filter instanceof DatagridStringFilterImpl) {
            const stringFilter = (<DatagridStringFilterImpl>filter.filter).filterFn;
            if (stringFilter instanceof DatagridPropertyStringFilter) {
                if ((<DatagridPropertyStringFilter>stringFilter).prop === this.fulltextPropertyName) {
                    return filter.filter;
                }
            }
        }
    }

    return null;
}

}

4

0 に答える 0