Skip to content

Commit 8fdd044

Browse files
committed
BookmarkDoBuilder: use nicer search filter text in bookmark description
Instead of showing low-level JSON values, use the text computed by PageWithTable#getSearchFilterText. 447101
1 parent ed0a599 commit 8fdd044

File tree

3 files changed

+90
-27
lines changed

3 files changed

+90
-27
lines changed

eclipse-scout-core/src/bookmark/BookmarkDoBuilder.ts

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@
88
* SPDX-License-Identifier: EPL-2.0
99
*/
1010
import {
11-
arrays, BaseDoEntity, BookmarkDo, BookmarkDoBuilderModel, BookmarkSupport, BookmarkTableRowIdentifierDo, ChartTableControlConfigHelper, Desktop, Form, IBookmarkDefinitionDo, IBookmarkDo, IBookmarkPageDo, IChartTableControlConfigDo,
12-
InitModelOf, NodeBookmarkPageDo, objects, ObjectWithType, OutlineBookmarkDefinitionDo, Page, PageBookmarkDefinitionDo, PageWithTable, scout, Session, strings, TableBookmarkPageDo, TableClientUiPreferencesDo, TableUiPreferences,
13-
tableUiPreferences
11+
arrays, BookmarkDo, BookmarkDoBuilderModel, BookmarkSupport, BookmarkTableRowIdentifierDo, ChartTableControlConfigHelper, Desktop, Form, IBookmarkDefinitionDo, IBookmarkDo, IBookmarkPageDo, IChartTableControlConfigDo, InitModelOf,
12+
NodeBookmarkPageDo, ObjectWithType, OutlineBookmarkDefinitionDo, Page, PageBookmarkDefinitionDo, PageWithTable, scout, Session, strings, TableBookmarkPageDo, TableClientUiPreferencesDo, TableUiPreferences, tableUiPreferences
1413
} from '../index';
1514

1615
export class BookmarkDoBuilder implements ObjectWithType, BookmarkDoBuilderModel {
@@ -36,6 +35,9 @@ export class BookmarkDoBuilder implements ObjectWithType, BookmarkDoBuilderModel
3635
createTablePreferences: boolean;
3736
createTableRowSelections: boolean;
3837

38+
// Map to store texts computed by _tablePageToTableBookmarkPage() for later use in _createBookmarkDescription()
39+
protected _searchFilterTexts = new Map<TableBookmarkPageDo, string>();
40+
3941
// --------------------------------------
4042

4143
constructor() {
@@ -163,7 +165,7 @@ export class BookmarkDoBuilder implements ObjectWithType, BookmarkDoBuilderModel
163165
throw BookmarkDoBuilder.ERROR_MISSING_ROW_BOOKMARK_IDENTIFIER;
164166
}
165167

166-
return scout.create(TableBookmarkPageDo, {
168+
let bookmarkPage = scout.create(TableBookmarkPageDo, {
167169
pageParam: page.pageParam,
168170
displayText: page.getDisplayText(),
169171
expandedChildRow: expandedChildRowIdentifier,
@@ -173,6 +175,16 @@ export class BookmarkDoBuilder implements ObjectWithType, BookmarkDoBuilderModel
173175
tablePreferences: tablePreferences,
174176
chartTableControlConfig: chartTableControlConfig
175177
});
178+
179+
// Compute search filter text and put it into a map for later use in _createBookmarkDescription()
180+
if (this.createDescription && searchData) {
181+
let searchFilterText = await page.getSearchFilterText();
182+
if (searchFilterText) {
183+
this._searchFilterTexts.set(bookmarkPage, searchFilterText);
184+
}
185+
}
186+
187+
return bookmarkPage;
176188
}
177189

178190
protected _createExpandedTableRowIdentifier(page: PageWithTable, childPage: Page): BookmarkTableRowIdentifierDo {
@@ -275,18 +287,19 @@ export class BookmarkDoBuilder implements ObjectWithType, BookmarkDoBuilderModel
275287

276288
let lines = [];
277289
pagePath.forEach((bookmarkPage, index) => {
278-
let prefix = strings.repeat(' ', index);
290+
let indent = ' ';
291+
let prefix = strings.repeat(indent, index);
279292

280293
let displayText = bookmarkPage.displayText || this.session.text('Node');
281294
lines.push(prefix + displayText);
282295

283-
if (bookmarkPage instanceof TableBookmarkPageDo && bookmarkPage.searchData) {
284-
let searchData = bookmarkPage.searchData instanceof BaseDoEntity ? bookmarkPage.searchData.toPojo() : bookmarkPage.searchData;
285-
Object.keys(searchData)
286-
.filter(key => !strings.startsWith(key, '_'))
287-
.filter(key => !objects.isNullOrUndefinedOrEmpty(searchData[key]))
288-
.map(key => key + ': ' + JSON.stringify((searchData)[key]))
289-
.forEach(searchLine => lines.push(prefix + ' ' + searchLine));
296+
if (bookmarkPage instanceof TableBookmarkPageDo) {
297+
// Get search filter text added by _tablePageToTableBookmarkPage()
298+
let searchFilterText = this._searchFilterTexts.get(bookmarkPage);
299+
// Split search filter text into lines and add them to the description (with additional indentation)
300+
if (searchFilterText) {
301+
lines.push(...searchFilterText.split('\n').map(s => prefix + indent + s));
302+
}
290303
}
291304
});
292305
return lines.join('\n');

eclipse-scout-core/test/bookmark/BookmarkSupportSpec.ts

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2010, 2025 BSI Business Systems Integration AG
2+
* Copyright (c) 2010, 2026 BSI Business Systems Integration AG
33
*
44
* This program and the accompanying materials are made
55
* available under the terms of the Eclipse Public License 2.0
@@ -9,7 +9,7 @@
99
*/
1010

1111
import {
12-
ActivateBookmarkPathParam, BaseDoEntity, BookmarkDo, BookmarkDoBuilder, BookmarkSupport, BookmarkTableRowIdentifierDo, BookmarkTableRowIdentifierStringComponentDo, BooleanColumn, Column, Desktop, NodeBookmarkPageDo, NumberColumn,
12+
ActivateBookmarkPathParam, BaseDoEntity, BookmarkDo, BookmarkDoBuilder, BookmarkSupport, BookmarkTableRowIdentifierDo, BookmarkTableRowIdentifierStringComponentDo, BooleanColumn, Column, dates, Desktop, NodeBookmarkPageDo, NumberColumn,
1313
NumberColumnUserFilter, NumberColumnUserFilterStateDo, Outline, OutlineBookmarkDefinitionDo, PageBookmarkDefinitionDo, PageIdDummyPageParamDo, ResetMenu, scout, SearchMenu, Table, TableBookmarkPageDo, TableClientUiPreferenceProfileDo,
1414
TableClientUiPreferencesDo, TableColumnClientUiPreferenceDo, TableTextUserFilter, TableTextUserFilterStateDo, TableUiPreferences, UuidPool
1515
} from '../../src/index';
@@ -33,6 +33,9 @@ describe('BookmarkSupport', () => {
3333
});
3434
desktop = session.desktop;
3535
bookmarkSupport = BookmarkSupport.get(session);
36+
37+
session.textMap.add('Yes', 'Yes');
38+
session.textMap.add('No', 'No');
3639
});
3740

3841
// ---------------------------------------------------------------
@@ -187,7 +190,7 @@ describe('BookmarkSupport', () => {
187190
expect(bookmark).toBeInstanceOf(BookmarkDo);
188191
expect(bookmark.id).toBeUndefined();
189192
expect(bookmark.title).toBe('Outline 1 - Table Page 3');
190-
expect(bookmark.description).toBe('Table Page 3\n text: "n"');
193+
expect(bookmark.description).toBe('Table Page 3\n Text: n\n Show hidden values: No');
191194
expect(bookmark.definition).toBeInstanceOf(OutlineBookmarkDefinitionDo);
192195
let bookmarkDefinition = bookmark.definition as OutlineBookmarkDefinitionDo;
193196
expect(bookmarkDefinition.outlineId).toBe(SPEC_OUTLINE_1_UUID);
@@ -198,7 +201,9 @@ describe('BookmarkSupport', () => {
198201
expect(bookmarkedPage.pageParam).toBeInstanceOf(PageIdDummyPageParamDo);
199202
expect((bookmarkedPage.pageParam as PageIdDummyPageParamDo).pageId).toBe(SPEC_TABLE_PAGE_3_UUID);
200203
expect(bookmarkedPage.searchData).toBeInstanceOf(BaseDoEntity);
201-
expect((bookmarkedPage.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {text: 'n'}).toPojo());
204+
expect((bookmarkedPage.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {
205+
text: 'n', showHiddenValues: false, languages: [], creationDate: null
206+
}).toPojo());
202207

203208
expect(bookmarkedPage.tablePreferences).toBeTruthy();
204209
expect(bookmarkedPage.tablePreferences.tableId).toBe(`${SPEC_TABLE_PAGE_3_TABLE_UUID}|${SPEC_TABLE_PAGE_3_UUID}`);
@@ -322,7 +327,7 @@ describe('BookmarkSupport', () => {
322327
outline.drillDown(page2);
323328
await page2.ensureLoadChildren();
324329
expect(page2.detailTable.rows.length).toBe(5);
325-
page2.setSearchFilter(scout.create(SpecSearchDo, {text: 'i'})); // Matches 'Pineapple' and 'Kiwi'
330+
page2.setSearchFilter(scout.create(SpecSearchDo, {text: 'i', showHiddenValues: true})); // Matches 'Pineapple' and 'Kiwi'
326331
page2.reloadPage();
327332
await page2.ensureLoadChildren();
328333
expect(page2.detailTable.rows.length).toBe(2);
@@ -355,7 +360,10 @@ describe('BookmarkSupport', () => {
355360
outline.drillDown(page4);
356361
await page4.ensureLoadChildren();
357362
expect(page4.detailTable.rows.length).toBe(5);
358-
page4.setSearchFilter(scout.create(SpecSearchDo, {text: 'n'})); // Matches 'Banana', 'Pineapple' and 'Lemon'
363+
jasmine.clock().install();
364+
page4.setSearchFilter(scout.create(SpecSearchDo, {text: 'n', languages: [100, 300], creationDate: dates.create('1999-12-31')})); // Matches 'Banana', 'Pineapple' and 'Lemon'
365+
jasmine.clock().tick(300); // wait for list box update the display text
366+
jasmine.clock().uninstall();
359367
page4.reloadPage();
360368
await page4.ensureLoadChildren();
361369
expect(page4.detailTable.rows.length).toBe(3);
@@ -372,7 +380,17 @@ describe('BookmarkSupport', () => {
372380
expect(bookmark).toBeInstanceOf(BookmarkDo);
373381
expect(bookmark.id).toBeUndefined();
374382
expect(bookmark.title).toBe('Outline 2 - Node Page 3 - Table Page 2 - Kiwi - Table Page 2');
375-
expect(bookmark.description).toBe('Node Page 3\n Table Page 2\n text: "i"\n Kiwi\n Table Page 2\n text: "n"');
383+
expect(bookmark.description).toBe('' +
384+
'Node Page 3\n' +
385+
' Table Page 2\n' +
386+
' Text: i\n' +
387+
' Show hidden values: Yes\n' +
388+
' Kiwi\n' +
389+
' Table Page 2\n' +
390+
' Text: n\n' +
391+
' Show hidden values: No\n' +
392+
' Languages: English, Italian\n' +
393+
' Creation date: 31.12.1999');
376394
expect(bookmark.definition).toBeInstanceOf(OutlineBookmarkDefinitionDo);
377395
let bookmarkDefinition = bookmark.definition as OutlineBookmarkDefinitionDo;
378396
expect(bookmarkDefinition.outlineId).toBe(SPEC_OUTLINE_2_UUID);
@@ -390,7 +408,9 @@ describe('BookmarkSupport', () => {
390408
expect((pagePathElement2.pageParam as PageIdDummyPageParamDo).pageId).toBe(SPEC_TABLE_PAGE_2_UUID);
391409
expect(pagePathElement2.searchFilterComplete).toBe(true);
392410
expect(pagePathElement2.searchData).toBeInstanceOf(BaseDoEntity);
393-
expect((pagePathElement2.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {text: 'i'}).toPojo());
411+
expect((pagePathElement2.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {
412+
text: 'i', showHiddenValues: true, languages: [], creationDate: null
413+
}).toPojo());
394414
expect(pagePathElement2.expandedChildRow).toBeInstanceOf(BookmarkTableRowIdentifierDo);
395415
expect(pagePathElement2.expandedChildRow.toPojo()).toEqual(scout.create(BookmarkTableRowIdentifierDo, {
396416
keyComponents: [scout.create(BookmarkTableRowIdentifierStringComponentDo, {key: FRUIT_5_KEY})]
@@ -408,7 +428,9 @@ describe('BookmarkSupport', () => {
408428
expect(bookmarkedPage.pageParam).toBeInstanceOf(PageIdDummyPageParamDo);
409429
expect((bookmarkedPage.pageParam as PageIdDummyPageParamDo).pageId).toBe(SPEC_TABLE_PAGE_2_UUID);
410430
expect(bookmarkedPage.searchData).toBeInstanceOf(BaseDoEntity);
411-
expect((bookmarkedPage.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {text: 'n'}).toPojo());
431+
expect((bookmarkedPage.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {
432+
text: 'n', showHiddenValues: false, languages: [100, 300], creationDate: dates.create('1999-12-31')
433+
}).toPojo());
412434
expect(bookmarkedPage.expandedChildRow).toBe(null);
413435
expect(bookmarkedPage.selectedChildRows.length).toBe(0); // selected rows are not exported by default
414436
});
@@ -482,7 +504,7 @@ describe('BookmarkSupport', () => {
482504
expect(bookmark).toBeInstanceOf(BookmarkDo);
483505
expect(bookmark.id).toBeUndefined();
484506
expect(bookmark.title).toBe('Outline 3 - Table Page 2 - Kiwi');
485-
expect(bookmark.description).toBe('Table Page 2\n text: "i"\n Kiwi');
507+
expect(bookmark.description).toBe('Table Page 2\n Text: i\n Show hidden values: No\n Kiwi');
486508
expect(bookmark.definition).toBeInstanceOf(OutlineBookmarkDefinitionDo);
487509
let bookmarkDefinition = bookmark.definition as OutlineBookmarkDefinitionDo;
488510
expect(bookmarkDefinition.outlineId).toBe(SPEC_OUTLINE_3_UUID);
@@ -495,7 +517,9 @@ describe('BookmarkSupport', () => {
495517
expect((pagePathElement1.pageParam as PageIdDummyPageParamDo).pageId).toBe(SPEC_TABLE_PAGE_2_UUID);
496518
expect(pagePathElement1.searchFilterComplete).toBe(true);
497519
expect(pagePathElement1.searchData).toBeInstanceOf(BaseDoEntity);
498-
expect((pagePathElement1.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {text: 'i'}).toPojo());
520+
expect((pagePathElement1.searchData as BaseDoEntity).toPojo()).toEqual(scout.create(SpecSearchDo, {
521+
text: 'i', showHiddenValues: false, languages: [], creationDate: null
522+
}).toPojo());
499523
expect(pagePathElement1.expandedChildRow).toBeInstanceOf(BookmarkTableRowIdentifierDo);
500524
expect(pagePathElement1.expandedChildRow.toPojo()).toEqual(scout.create(BookmarkTableRowIdentifierDo, {
501525
keyComponents: [scout.create(BookmarkTableRowIdentifierStringComponentDo, {key: FRUIT_5_KEY})]

eclipse-scout-core/test/bookmark/bookmark-fixtures.ts

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2010, 2025 BSI Business Systems Integration AG
2+
* Copyright (c) 2010, 2026 BSI Business Systems Integration AG
33
*
44
* This program and the accompanying materials are made
55
* available under the terms of the Eclipse Public License 2.0
@@ -8,9 +8,10 @@
88
* SPDX-License-Identifier: EPL-2.0
99
*/
1010
import {
11-
BaseDoEntity, BooleanColumn, Column, Desktop, DesktopModel, Form, FormModel, GroupBox, NumberColumn, ObjectOrModel, Outline, OutlineViewButton, Page, PageParamDo, PageWithNodes, PageWithTable, ResetMenu, scout, SearchFormTableControl,
12-
SearchMenu, StringField, strings, Table, TableRow, Tree, typeName
11+
BaseDoEntity, BooleanColumn, CheckBoxField, Column, DateField, Desktop, DesktopModel, Form, FormModel, GroupBox, ListBox, NumberColumn, ObjectOrModel, Outline, OutlineViewButton, Page, PageParamDo, PageWithNodes, PageWithTable, ResetMenu,
12+
scout, SearchFormTableControl, SearchMenu, StringField, strings, Table, TableRow, Tree, typeName
1313
} from '../../src';
14+
import {LanguageDummyLookupCall} from '../../src/testing';
1415

1516
// ---------------------------------------------------------------
1617
//
@@ -146,6 +147,9 @@ export class SpecPageParamDo extends PageParamDo {
146147
@typeName('SpecSearch')
147148
export class SpecSearchDo extends BaseDoEntity {
148149
text: string;
150+
showHiddenValues: boolean;
151+
languages: number[];
152+
creationDate: Date;
149153
}
150154

151155
export class SpecNodePage1 extends PageWithNodes {
@@ -422,6 +426,9 @@ export class SpecSearchForm extends Form {
422426
declare data: SpecSearchDo;
423427
declare widgetMap: {
424428
'TextField': StringField;
429+
'ShowHiddenValuesField': CheckBoxField;
430+
'LanguagesField': ListBox<number>;
431+
'CreationDateField': DateField;
425432
'SearchMenu': SearchMenu;
426433
'ResetMenu': ResetMenu;
427434
};
@@ -435,6 +442,19 @@ export class SpecSearchForm extends Form {
435442
id: 'TextField',
436443
objectType: StringField,
437444
label: 'Text'
445+
}, {
446+
id: 'ShowHiddenValuesField',
447+
objectType: CheckBoxField,
448+
label: 'Show hidden values'
449+
}, {
450+
id: 'LanguagesField',
451+
objectType: ListBox<number>,
452+
label: 'Languages',
453+
lookupCall: LanguageDummyLookupCall
454+
}, {
455+
id: 'CreationDateField',
456+
objectType: DateField,
457+
label: 'Creation date'
438458
}],
439459
menus: [{
440460
id: 'SearchMenu',
@@ -452,11 +472,17 @@ export class SpecSearchForm extends Form {
452472
return;
453473
}
454474
this.widget('TextField').setValue(this.data.text);
475+
this.widget('ShowHiddenValuesField').setValue(this.data.showHiddenValues);
476+
this.widget('LanguagesField').setValue(this.data.languages);
477+
this.widget('CreationDateField').setValue(this.data.creationDate);
455478
}
456479

457480
override exportData(): any {
458481
return scout.create(SpecSearchDo, {
459-
text: this.widget('TextField').value
482+
text: this.widget('TextField').value,
483+
showHiddenValues: this.widget('ShowHiddenValuesField').value,
484+
languages: this.widget('LanguagesField').value,
485+
creationDate: this.widget('CreationDateField').value
460486
});
461487
}
462488
}

0 commit comments

Comments
 (0)