From c1a40808250f00e491adec7684caf4b4e24ed67a Mon Sep 17 00:00:00 2001 From: Melloware Date: Fri, 9 Aug 2024 14:57:15 -0400 Subject: [PATCH] Fix #11: Dev UI Card (#16) --- .../deployment/TemporalProcessor.java | 4 +- .../devui/TemporalDevUIProcessor.java | 34 ++++++++ .../resources/dev-ui/qwc-temporal-card.js | 86 +++++++++++++++++++ .../resources/META-INF/quarkus-extension.yaml | 2 +- .../src/main/resources/application.properties | 2 + .../deployment/TemporalTestProcessor.java | 2 +- 6 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 extension/deployment/src/main/java/io/quarkiverse/temporal/deployment/devui/TemporalDevUIProcessor.java create mode 100644 extension/deployment/src/main/resources/dev-ui/qwc-temporal-card.js create mode 100644 integration-test/src/main/resources/application.properties diff --git a/extension/deployment/src/main/java/io/quarkiverse/temporal/deployment/TemporalProcessor.java b/extension/deployment/src/main/java/io/quarkiverse/temporal/deployment/TemporalProcessor.java index c866be9..766e3f4 100644 --- a/extension/deployment/src/main/java/io/quarkiverse/temporal/deployment/TemporalProcessor.java +++ b/extension/deployment/src/main/java/io/quarkiverse/temporal/deployment/TemporalProcessor.java @@ -103,7 +103,7 @@ void produceActivityBeans( @BuildStep(onlyIf = EnableMock.class) @Produce(ConfigValidatedBuildItem.class) void recordWorkflowClient(Capabilities capabilities) { - if (capabilities.isMissing("fr.lavachequicode.temporal.test")) { + if (capabilities.isMissing("io.quarkiverse.temporal.test")) { throw new ConfigurationException("Please add the quarkus-temporal-test extension to enable mocking"); } } @@ -221,4 +221,4 @@ public boolean getAsBoolean() { } } -} +} \ No newline at end of file diff --git a/extension/deployment/src/main/java/io/quarkiverse/temporal/deployment/devui/TemporalDevUIProcessor.java b/extension/deployment/src/main/java/io/quarkiverse/temporal/deployment/devui/TemporalDevUIProcessor.java new file mode 100644 index 0000000..d575594 --- /dev/null +++ b/extension/deployment/src/main/java/io/quarkiverse/temporal/deployment/devui/TemporalDevUIProcessor.java @@ -0,0 +1,34 @@ +package io.quarkiverse.temporal.deployment.devui; + +import java.util.Objects; + +import io.quarkus.deployment.IsDevelopment; +import io.quarkus.deployment.annotations.BuildProducer; +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.devui.spi.page.CardPageBuildItem; +import io.quarkus.devui.spi.page.ExternalPageBuilder; +import io.quarkus.devui.spi.page.Page; +import io.quarkus.devui.spi.page.PageBuilder; +import io.temporal.client.WorkflowClient; + +/** + * Dev UI card for displaying important details such Temporal version. + */ +public class TemporalDevUIProcessor { + + @BuildStep(onlyIf = IsDevelopment.class) + void createCard(BuildProducer cardPageBuildItemBuildProducer) { + final CardPageBuildItem card = new CardPageBuildItem(); + + final PageBuilder versionPage = Page.externalPageBuilder("Version") + .icon("font-awesome-solid:book") + .url("https://temporal.io") + .doNotEmbed() + .staticLabel(Objects.toString(WorkflowClient.class.getPackage().getImplementationVersion(), "?")); + card.addPage(versionPage); + + card.setCustomCard("qwc-temporal-card.js"); + + cardPageBuildItemBuildProducer.produce(card); + } +} \ No newline at end of file diff --git a/extension/deployment/src/main/resources/dev-ui/qwc-temporal-card.js b/extension/deployment/src/main/resources/dev-ui/qwc-temporal-card.js new file mode 100644 index 0000000..559da0c --- /dev/null +++ b/extension/deployment/src/main/resources/dev-ui/qwc-temporal-card.js @@ -0,0 +1,86 @@ +import { LitElement, html, css} from 'lit'; +import { pages } from 'build-time-data'; +import 'qwc/qwc-extension-link.js'; + +const NAME = "Temporal"; +export class QwcTemporalCard extends LitElement { + + static styles = css` + .identity { + display: flex; + justify-content: flex-start; + } + + .description { + padding-bottom: 10px; + } + + .logo { + padding-bottom: 10px; + margin-right: 5px; + } + + .card-content { + color: var(--lumo-contrast-90pct); + display: flex; + flex-direction: column; + justify-content: flex-start; + padding: 2px 2px; + height: 100%; + } + + .card-content slot { + display: flex; + flex-flow: column wrap; + padding-top: 5px; + } + `; + + static properties = { + description: {type: String} + }; + + constructor() { + super(); + } + + connectedCallback() { + super.connectedCallback(); + } + + render() { + return html`
+
+ +
${this.description}
+
+ ${this._renderCardLinks()} +
+ `; + } + + _renderCardLinks(){ + return html`${pages.map(page => html` + + + `)}`; + } + +} +customElements.define('qwc-temporal-card', QwcTemporalCard); \ No newline at end of file diff --git a/extension/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/extension/runtime/src/main/resources/META-INF/quarkus-extension.yaml index 1ab02aa..4552241 100644 --- a/extension/runtime/src/main/resources/META-INF/quarkus-extension.yaml +++ b/extension/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -12,6 +12,6 @@ metadata: - "integration" config: - "quarkus.temporal." - status: "preview" + status: "experimental" guide: "https://quarkiverse.github.io/quarkiverse-docs/quarkus-temporal/dev/index.html" icon-url: "https://raw.githubusercontent.com/quarkiverse/quarkus-temporal/main/docs/modules/ROOT/assets/images/temporal_logo.svg" \ No newline at end of file diff --git a/integration-test/src/main/resources/application.properties b/integration-test/src/main/resources/application.properties new file mode 100644 index 0000000..0736113 --- /dev/null +++ b/integration-test/src/main/resources/application.properties @@ -0,0 +1,2 @@ +# HTTP +quarkus.http.port=8081 diff --git a/test-extension/deployment/src/main/java/io/quarkiverse/temporal/test/deployment/TemporalTestProcessor.java b/test-extension/deployment/src/main/java/io/quarkiverse/temporal/test/deployment/TemporalTestProcessor.java index 900f482..0b4a80f 100644 --- a/test-extension/deployment/src/main/java/io/quarkiverse/temporal/test/deployment/TemporalTestProcessor.java +++ b/test-extension/deployment/src/main/java/io/quarkiverse/temporal/test/deployment/TemporalTestProcessor.java @@ -23,7 +23,7 @@ FeatureBuildItem feature() { @BuildStep void capabilities(BuildProducer capabilityProducer) { - capabilityProducer.produce(new CapabilityBuildItem("fr.lavachequicode.temporal.test", "temporal")); + capabilityProducer.produce(new CapabilityBuildItem("io.quarkiverse.temporal.test", "temporal")); } @Record(ExecutionTime.RUNTIME_INIT)