feat(Storybook): allow opening a given page via cmdline

- syntax: `Storybook <page name>`, e.g. `Storybook CountdownPill` opens
up the corresponding page from the file under
`storybook/pages/CountdownPillPage.qml`
- the idea: for example being able to run squish tests against Storybook
(pages)
- also adjusted Makefile, so that it's possible to do the same via
`make`, e.g. `make run-storybook ARGS=CountdownPill`; unknown
options/arguments are ignored
This commit is contained in:
Lukáš Tinkl 2024-11-26 16:15:19 +01:00 committed by Lukáš Tinkl
parent b04a9a4dd2
commit 9ff9c4b01a
3 changed files with 21 additions and 5 deletions

View File

@ -365,7 +365,7 @@ storybook-build: | storybook-configure
run-storybook: storybook-build
echo -e "\033[92mRunning:\033[39m Storybook"
$(STORYBOOK_BUILD_PATH)/bin/Storybook
$(STORYBOOK_BUILD_PATH)/bin/Storybook ${ARGS}
run-storybook-tests: storybook-build
echo -e "\033[92mRunning:\033[39m Storybook Tests"

View File

@ -41,6 +41,13 @@ int main(int argc, char *argv[])
QGuiApplication::setOrganizationDomain(QStringLiteral("status.im"));
QGuiApplication::setApplicationName(QStringLiteral("Status Desktop Storybook"));
QCommandLineParser cmdParser;
cmdParser.addHelpOption();
cmdParser.addPositionalArgument(QStringLiteral("page"), QStringLiteral("Open the given page on startup"));
if (!cmdParser.parse(app.arguments())) {
qWarning() << "Error (ignored) while parsing cmd line arguments:" << cmdParser.errorText();
}
qputenv("QT_QUICK_CONTROLS_HOVER_ENABLED", QByteArrayLiteral("1"));
auto chromiumFlags = qgetenv("QTWEBENGINE_CHROMIUM_FLAGS");
if(!chromiumFlags.contains("--disable-seccomp-filter-sandbox")) {
@ -62,8 +69,8 @@ int main(int argc, char *argv[])
for (const auto& path : additionalImportPaths)
engine.addImportPath(path);
engine.rootContext()->setContextProperty(
"pagesFolder", QML_IMPORT_ROOT + QStringLiteral("/pages"));
engine.rootContext()->setContextProperty(QStringLiteral("pagesFolder"),
QML_IMPORT_ROOT + QStringLiteral("/pages"));
qmlRegisterType<PagesModelInitialized>("Storybook", 1, 0, "PagesModel");
qmlRegisterType<SectionsDecoratorModel>("Storybook", 1, 0, "SectionsDecoratorModel");
@ -117,6 +124,11 @@ int main(int argc, char *argv[])
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
const auto args = cmdParser.positionalArguments();
if (!args.isEmpty())
engine.setInitialProperties({{QStringLiteral("currentPage"), args.constFirst()}});
engine.load(url);
return QGuiApplication::exec();

View File

@ -26,7 +26,12 @@ ApplicationWindow {
palette.base: Theme.palette.indirectColor1
font.pixelSize: 13
onCurrentPageChanged: testsReRunTimer.restart()
onCurrentPageChanged: {
testsReRunTimer.restart()
settings.setValue("currentPage", currentPage)
}
Component.onCompleted: currentPage = settings.value("currentPage")
QtObject {
id: d
@ -335,7 +340,6 @@ ApplicationWindow {
Settings {
id: settings
property alias currentPage: root.currentPage
property alias loadAsynchronously: settingsLayout.loadAsynchronously
property alias runTestsAutomatically: settingsLayout.runTestsAutomatically
property alias darkMode: darkModeCheckBox.checked