diff --git a/storybook/main.qml b/storybook/main.qml index 5bba675c59..f56efc13b2 100644 --- a/storybook/main.qml +++ b/storybook/main.qml @@ -104,9 +104,8 @@ ApplicationWindow { Layout.fillWidth: true Layout.fillHeight: true - PagesList { + FilteredPagesList { anchors.fill: parent - currentPage: root.currentPage model: pagesModel diff --git a/storybook/src/Storybook/FilteredPagesList.qml b/storybook/src/Storybook/FilteredPagesList.qml new file mode 100644 index 0000000000..d04ac33013 --- /dev/null +++ b/storybook/src/Storybook/FilteredPagesList.qml @@ -0,0 +1,49 @@ +import QtQuick 2.14 +import QtQuick.Layouts 1.14 +import QtQuick.Controls 2.14 + +import SortFilterProxyModel 0.2 + +ColumnLayout { + id: root + + property alias model: filteredModel.sourceModel + property alias currentPage: pagesList.currentPage + + signal pageSelected(string page) + + SortFilterProxyModel { + id: filteredModel + + filters: ExpressionFilter { + enabled: textField.length > 0 + expression: { + const searchText = textField.text.toLowerCase() + return model.title.toLowerCase().indexOf(searchText) !== -1 + } + } + } + + TextField { + id: textField + + Layout.fillWidth: true + placeholderText: "search" + + Keys.onEscapePressed: { + text = "" + focus = false + } + } + + PagesList { + id: pagesList + + Layout.fillWidth: true + Layout.fillHeight: true + + model: filteredModel + + onPageSelected: root.pageSelected(page) + } +} diff --git a/storybook/src/Storybook/qmldir b/storybook/src/Storybook/qmldir index 6fb4352b3c..9776539133 100644 --- a/storybook/src/Storybook/qmldir +++ b/storybook/src/Storybook/qmldir @@ -1,4 +1,5 @@ CompilationErrorsBox 1.0 CompilationErrorsBox.qml +FilteredPagesList 1.0 FilteredPagesList.qml HotComponentFromSource 1.0 HotComponentFromSource.qml HotLoader 1.0 HotLoader.qml HotReloader 1.0 HotReloader.qml