[ 
https://issues.apache.org/jira/browse/ARTEMIS-4680?focusedWorklogId=914172&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-914172
 ]

ASF GitHub Bot logged work on ARTEMIS-4680:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 11/Apr/24 13:58
            Start Date: 11/Apr/24 13:58
    Worklog Time Spent: 10m 
      Work Description: andytaylor commented on code in PR #3:
URL: 
https://github.com/apache/activemq-artemis-console-plugin/pull/3#discussion_r1561070218


##########
artemis-plugin/craco.config.js:
##########
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ const { ModuleFederationPlugin } = require('webpack').container
+const CracoEsbuildPlugin = require('craco-esbuild')
+const { hawtioBackend } = require('@hawtio/backend-middleware')
+const { dependencies } = require('./package.json')
+
+module.exports = {
+  plugins: [{ plugin: CracoEsbuildPlugin }],
+  webpack: {
+    plugins: {
+      add: [
+        new ModuleFederationPlugin({
+          // The container name corresponds to 'scope' passed to HawtioPlugin
+          name: 'artemisPlugin',
+          filename: 'remoteEntry.js',
+          // The key in exposes corresponds to 'remote' passed to HawtioPlugin
+          exposes: {
+            './plugin': './src/artemis-plugin',
+          },
+          shared: {
+            ...dependencies,
+            react: {
+              singleton: true,
+              requiredVersion: dependencies['react'],
+            },
+            'react-dom': {
+              singleton: true,
+              requiredVersion: dependencies['react-dom'],
+            },
+            'react-router-dom': {
+              singleton: true,
+              requiredVersion: dependencies['react-router-dom'],
+            },
+            '@hawtio/react': {
+              singleton: true,
+              requiredVersion: dependencies['@hawtio/react'],
+            },
+          },
+        }),
+      ],
+    },
+    configure: webpackConfig => {
+      // Required for Module Federation
+      webpackConfig.output.publicPath = 'auto'
+
+      webpackConfig.module.rules.push({
+        test: /\.md/,
+        type: 'asset/source',
+      })
+
+      // For suppressing sourcemap warnings from dependencies
+      webpackConfig.ignoreWarnings = [/Failed to parse source map/]
+
+       // To resolve errors for @module-federation/utilities 2.x
+      // https://github.com/module-federation/universe/issues/827
+      webpackConfig.resolve = {
+        ...webpackConfig.resolve,
+        fallback: {
+          path: require.resolve('path-browserify'),
+          os: require.resolve('os-browserify'),
+        },
+      }
+
+      // MiniCssExtractPlugin - Ignore order as otherwise conflicting order 
warning is raised
+      const miniCssExtractPlugin = webpackConfig.plugins.find(p => 
p.constructor.name === 'MiniCssExtractPlugin')
+      if (miniCssExtractPlugin) {
+        miniCssExtractPlugin.options.ignoreOrder = true
+      }
+
+      return webpackConfig
+    },
+  },
+  // For plugin development
+  devServer: {
+    setupMiddlewares: (middlewares, devServer) => {
+       // Enabling branding in dev mode
+       devServer.app.use((req, _, next) => {
+        if (req.url.startsWith('/artemis-plugin')) {
+          req.url = req.url.replace(/\/artemis-plugin(.*)/, '/hawtio$1')
+        }
+        next()
+      })
+       // Redirect / or /console to /console/
+       devServer.app.get('/', (_, res) => res.redirect('/console/'))
+       devServer.app.get('/console$', (_, res) => res.redirect('/console/'))
+
+      const username = 'developer'
+      const proxyEnabled = true
+      const plugin = []
+      const hawtconfig = {}
+
+      /**const keycloakEnabled = false
+      const keycloakClientConfig = {
+      }
+      const keycloakClientConfig = {
+        realm: 'artemis-keycloak-demo',
+        clientId: 'artemis-console',
+        url: 'http://localhost:8080/',
+        jaas: false,
+        pkceMethod: 'S256',
+      }*/

Review Comment:
   removed



##########
artemis-plugin/craco.config.js:
##########
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ const { ModuleFederationPlugin } = require('webpack').container
+const CracoEsbuildPlugin = require('craco-esbuild')
+const { hawtioBackend } = require('@hawtio/backend-middleware')
+const { dependencies } = require('./package.json')
+
+module.exports = {
+  plugins: [{ plugin: CracoEsbuildPlugin }],
+  webpack: {
+    plugins: {
+      add: [
+        new ModuleFederationPlugin({
+          // The container name corresponds to 'scope' passed to HawtioPlugin
+          name: 'artemisPlugin',
+          filename: 'remoteEntry.js',
+          // The key in exposes corresponds to 'remote' passed to HawtioPlugin
+          exposes: {
+            './plugin': './src/artemis-plugin',
+          },
+          shared: {
+            ...dependencies,
+            react: {
+              singleton: true,
+              requiredVersion: dependencies['react'],
+            },
+            'react-dom': {
+              singleton: true,
+              requiredVersion: dependencies['react-dom'],
+            },
+            'react-router-dom': {
+              singleton: true,
+              requiredVersion: dependencies['react-router-dom'],
+            },
+            '@hawtio/react': {
+              singleton: true,
+              requiredVersion: dependencies['@hawtio/react'],
+            },
+          },
+        }),
+      ],
+    },
+    configure: webpackConfig => {
+      // Required for Module Federation
+      webpackConfig.output.publicPath = 'auto'
+
+      webpackConfig.module.rules.push({
+        test: /\.md/,
+        type: 'asset/source',
+      })
+
+      // For suppressing sourcemap warnings from dependencies
+      webpackConfig.ignoreWarnings = [/Failed to parse source map/]
+
+       // To resolve errors for @module-federation/utilities 2.x
+      // https://github.com/module-federation/universe/issues/827
+      webpackConfig.resolve = {
+        ...webpackConfig.resolve,
+        fallback: {
+          path: require.resolve('path-browserify'),
+          os: require.resolve('os-browserify'),
+        },
+      }
+
+      // MiniCssExtractPlugin - Ignore order as otherwise conflicting order 
warning is raised
+      const miniCssExtractPlugin = webpackConfig.plugins.find(p => 
p.constructor.name === 'MiniCssExtractPlugin')
+      if (miniCssExtractPlugin) {
+        miniCssExtractPlugin.options.ignoreOrder = true
+      }
+
+      return webpackConfig
+    },
+  },
+  // For plugin development
+  devServer: {
+    setupMiddlewares: (middlewares, devServer) => {
+       // Enabling branding in dev mode
+       devServer.app.use((req, _, next) => {
+        if (req.url.startsWith('/artemis-plugin')) {
+          req.url = req.url.replace(/\/artemis-plugin(.*)/, '/hawtio$1')
+        }
+        next()
+      })
+       // Redirect / or /console to /console/
+       devServer.app.get('/', (_, res) => res.redirect('/console/'))
+       devServer.app.get('/console$', (_, res) => res.redirect('/console/'))
+
+      const username = 'developer'
+      const proxyEnabled = true
+      const plugin = []
+      const hawtconfig = {}
+
+      /**const keycloakEnabled = false
+      const keycloakClientConfig = {
+      }
+      const keycloakClientConfig = {
+        realm: 'artemis-keycloak-demo',
+        clientId: 'artemis-console',
+        url: 'http://localhost:8080/',
+        jaas: false,
+        pkceMethod: 'S256',
+      }*/
+
+      // Hawtio backend API mock
+      let login = true
+      devServer.app.get('/console/user', (_, res) => {
+        login ? res.send(`"${username}"`) : res.sendStatus(403)
+      })
+      devServer.app.post('/console/auth/login', (_, res) => {
+        login = true
+        res.send(String(login))
+      })
+      devServer.app.get('/console/auth/logout', (_, res) => {
+        login = false
+        res.redirect('/console/login')
+      })
+      devServer.app.get('/console/proxy/enabled', (_, res) => 
res.send(String(proxyEnabled)))
+      devServer.app.get('/console/plugin', (_, res) => 
res.send(JSON.stringify(plugin)))
+     // devServer.app.get('/console/keycloak/enabled', (_, res) => 
res.send(String(keycloakEnabled)))
+     // devServer.app.get('/console/keycloak/client-config', (_, res) => 
res.send(JSON.stringify(keycloakClientConfig)))
+     // devServer.app.get('/console/keycloak/validate-subject-matches', (_, 
res) => res.send('true'))

Review Comment:
   removed





Issue Time Tracking
-------------------

    Worklog Id:     (was: 914172)
    Time Spent: 2h 20m  (was: 2h 10m)

> Upgrade the console to use HawtIO 4
> -----------------------------------
>
>                 Key: ARTEMIS-4680
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-4680
>             Project: ActiveMQ Artemis
>          Issue Type: Improvement
>          Components: Web Console
>            Reporter: Andy Taylor
>            Assignee: Andy Taylor
>            Priority: Major
>          Time Spent: 2h 20m
>  Remaining Estimate: 0h
>
> The current console is based upon HawtIO 1 which in turn is built on 
> Bootstrap. Bootstrap is old and no longer actively being maintained.
>  
> This improvement is to migrate the current console to use HawtIO 4 which i 
> based on Typescript, react and Patternfly.
>  
> A WIP can be found 
> [here|https://github.com/andytaylor/activemq-artemis/tree/artemis-console-ng]



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to