mirror of
https://github.com/zadam/trilium.git
synced 2025-06-06 18:08:33 +02:00
created a specific widget for search result to add "no results" message
This commit is contained in:
parent
4160da70be
commit
c94fb7a62d
@ -22,6 +22,7 @@ import ImagePropertiesWidget from "../widgets/type_property_widgets/image_proper
|
|||||||
import NotePropertiesWidget from "../widgets/type_property_widgets/note_properties.js";
|
import NotePropertiesWidget from "../widgets/type_property_widgets/note_properties.js";
|
||||||
import NoteIconWidget from "../widgets/note_icon.js";
|
import NoteIconWidget from "../widgets/note_icon.js";
|
||||||
import NotePathsWidget from "../widgets/note_paths.js";
|
import NotePathsWidget from "../widgets/note_paths.js";
|
||||||
|
import SearchResultWidget from "../widgets/search_result.js";
|
||||||
|
|
||||||
export default class DesktopExtraWindowLayout {
|
export default class DesktopExtraWindowLayout {
|
||||||
constructor(customWidgets) {
|
constructor(customWidgets) {
|
||||||
@ -69,6 +70,7 @@ export default class DesktopExtraWindowLayout {
|
|||||||
.child(new TabCachingWidget(() => new SqlTableSchemasWidget()))
|
.child(new TabCachingWidget(() => new SqlTableSchemasWidget()))
|
||||||
.child(new TabCachingWidget(() => new NoteDetailWidget()))
|
.child(new TabCachingWidget(() => new NoteDetailWidget()))
|
||||||
.child(new TabCachingWidget(() => new NoteListWidget()))
|
.child(new TabCachingWidget(() => new NoteListWidget()))
|
||||||
|
.child(new TabCachingWidget(() => new SearchResultWidget()))
|
||||||
.child(new TabCachingWidget(() => new SqlResultWidget()))
|
.child(new TabCachingWidget(() => new SqlResultWidget()))
|
||||||
)
|
)
|
||||||
.child(...this.customWidgets.get('center-pane'))
|
.child(...this.customWidgets.get('center-pane'))
|
||||||
|
@ -32,6 +32,7 @@ import FilePropertiesWidget from "../widgets/type_property_widgets/file_properti
|
|||||||
import ImagePropertiesWidget from "../widgets/type_property_widgets/image_properties.js";
|
import ImagePropertiesWidget from "../widgets/type_property_widgets/image_properties.js";
|
||||||
import NotePropertiesWidget from "../widgets/type_property_widgets/note_properties.js";
|
import NotePropertiesWidget from "../widgets/type_property_widgets/note_properties.js";
|
||||||
import NoteIconWidget from "../widgets/note_icon.js";
|
import NoteIconWidget from "../widgets/note_icon.js";
|
||||||
|
import SearchResultWidget from "../widgets/search_result.js";
|
||||||
|
|
||||||
const RIGHT_PANE_CSS = `
|
const RIGHT_PANE_CSS = `
|
||||||
<style>
|
<style>
|
||||||
@ -179,6 +180,7 @@ export default class DesktopMainWindowLayout {
|
|||||||
.child(new TabCachingWidget(() => new SqlTableSchemasWidget()))
|
.child(new TabCachingWidget(() => new SqlTableSchemasWidget()))
|
||||||
.child(new TabCachingWidget(() => new NoteDetailWidget()))
|
.child(new TabCachingWidget(() => new NoteDetailWidget()))
|
||||||
.child(new TabCachingWidget(() => new NoteListWidget()))
|
.child(new TabCachingWidget(() => new NoteListWidget()))
|
||||||
|
.child(new TabCachingWidget(() => new SearchResultWidget()))
|
||||||
.child(new TabCachingWidget(() => new SqlResultWidget()))
|
.child(new TabCachingWidget(() => new SqlResultWidget()))
|
||||||
)
|
)
|
||||||
.child(new TabCachingWidget(() => new SimilarNotesWidget()))
|
.child(new TabCachingWidget(() => new SimilarNotesWidget()))
|
||||||
|
@ -195,6 +195,8 @@ class TreeCache {
|
|||||||
branches,
|
branches,
|
||||||
attributes: []
|
attributes: []
|
||||||
});
|
});
|
||||||
|
|
||||||
|
treeCache.notes[note.noteId].searchResultsLoaded = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,11 +23,9 @@ const TPL = `
|
|||||||
export default class NoteListWidget extends TabAwareWidget {
|
export default class NoteListWidget extends TabAwareWidget {
|
||||||
isEnabled() {
|
isEnabled() {
|
||||||
return super.isEnabled()
|
return super.isEnabled()
|
||||||
|
&& ['book', 'text', 'code'].includes(this.note.type)
|
||||||
&& this.note.mime !== 'text/x-sqlite;schema=trilium'
|
&& this.note.mime !== 'text/x-sqlite;schema=trilium'
|
||||||
&& (
|
&& this.note.hasChildren()
|
||||||
['book', 'search', 'code'].includes(this.note.type)
|
|
||||||
|| (this.note.type === 'text' && this.note.hasChildren())
|
|
||||||
)
|
|
||||||
&& !this.note.hasLabel('hideChildrenOverview');
|
&& !this.note.hasLabel('hideChildrenOverview');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,17 +87,6 @@ export default class NoteListWidget extends TabAwareWidget {
|
|||||||
setTimeout(() => this.checkRenderStatus(), 100);
|
setTimeout(() => this.checkRenderStatus(), 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
searchRefreshedEvent({tabId}) {
|
|
||||||
if (!this.isTab(tabId)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.noteIdRefreshed = this.noteId;
|
|
||||||
this.shownNoteId = null;
|
|
||||||
|
|
||||||
this.checkRenderStatus();
|
|
||||||
}
|
|
||||||
|
|
||||||
notesReloadedEvent({noteIds}) {
|
notesReloadedEvent({noteIds}) {
|
||||||
if (noteIds.includes(this.noteId)) {
|
if (noteIds.includes(this.noteId)) {
|
||||||
this.refresh();
|
this.refresh();
|
||||||
|
72
src/public/app/widgets/search_result.js
Normal file
72
src/public/app/widgets/search_result.js
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
import TabAwareWidget from "./tab_aware_widget.js";
|
||||||
|
import NoteListRenderer from "../services/note_list_renderer.js";
|
||||||
|
|
||||||
|
const TPL = `
|
||||||
|
<div class="search-result-widget">
|
||||||
|
<style>
|
||||||
|
.search-result-widget {
|
||||||
|
flex-grow: 100000;
|
||||||
|
flex-shrink: 100000;
|
||||||
|
min-height: 0;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-result-widget .note-list {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-no-results, .search-not-executed-yet {
|
||||||
|
margin: 20px;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="search-no-results alert alert-info">
|
||||||
|
No notes have been found for given search parameters.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="search-not-executed-yet alert alert-info">
|
||||||
|
Search has not been executed yet. Click on "Search" button above to see the results.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="search-result-widget-content">
|
||||||
|
</div>
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
export default class SearchResultWidget extends TabAwareWidget {
|
||||||
|
isEnabled() {
|
||||||
|
return super.isEnabled()
|
||||||
|
&& this.note.type === 'search';
|
||||||
|
}
|
||||||
|
|
||||||
|
doRender() {
|
||||||
|
this.$widget = $(TPL);
|
||||||
|
this.$content = this.$widget.find('.search-result-widget-content');
|
||||||
|
this.$noResults = this.$widget.find('.search-no-results');
|
||||||
|
this.$notExecutedYet = this.$widget.find('.search-not-executed-yet');
|
||||||
|
this.contentSized();
|
||||||
|
}
|
||||||
|
|
||||||
|
async refreshWithNote(note) {
|
||||||
|
this.$content.empty();
|
||||||
|
this.$noResults.toggle(note.getChildNoteIds().length === 0 && !!note.searchResultsLoaded);
|
||||||
|
this.$notExecutedYet.toggle(!note.searchResultsLoaded);
|
||||||
|
|
||||||
|
const noteListRenderer = new NoteListRenderer(this.$content, note, note.getChildNoteIds());
|
||||||
|
await noteListRenderer.renderList();
|
||||||
|
}
|
||||||
|
|
||||||
|
searchRefreshedEvent({tabId}) {
|
||||||
|
if (!this.isTab(tabId)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
notesReloadedEvent({noteIds}) {
|
||||||
|
if (noteIds.includes(this.noteId)) {
|
||||||
|
this.refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user