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;
}
}