gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-merchant-backoffice] branch master updated: routing pages without


From: gnunet
Subject: [taler-merchant-backoffice] branch master updated: routing pages without changing path url
Date: Tue, 16 Mar 2021 19:00:45 +0100

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository merchant-backoffice.

The following commit(s) were added to refs/heads/master by this push:
     new 36095f3  routing pages without changing path url
36095f3 is described below

commit 36095f3ffcfbc872b95438aeea6d7b8c00c884ad
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Tue Mar 16 15:00:36 2021 -0300

    routing pages without changing path url
---
 packages/frontend/package.json                    |  2 ++
 packages/frontend/src/ApplicationReadyRoutes.tsx  |  1 -
 packages/frontend/src/InstanceRoutes.tsx          | 37 ++++++++++++-----------
 packages/frontend/src/components/menu/SideBar.tsx |  2 +-
 packages/frontend/src/hooks/index.ts              | 13 ++++++--
 packages/frontend/src/paths/admin/list/Table.tsx  |  4 ++-
 pnpm-lock.yaml                                    | 37 +++++++++++++++++++++--
 7 files changed, 71 insertions(+), 25 deletions(-)

diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index caeb49b..e5ea502 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -44,6 +44,7 @@
   "dependencies": {
     "axios": "^0.21.1",
     "date-fns": "^2.19.0",
+    "history": "4.10.1",
     "messageformat": "^2.3.0",
     "preact": "^10.5.13",
     "preact-messages": "workspace:*",
@@ -64,6 +65,7 @@
     "@testing-library/preact": "^2.0.1",
     "@testing-library/preact-hooks": "^1.1.0",
     "@types/enzyme": "^3.10.8",
+    "@types/history": "^4.7.8",
     "@types/jest": "^26.0.20",
     "@typescript-eslint/eslint-plugin": "^4.18.0",
     "@typescript-eslint/parser": "^4.18.0",
diff --git a/packages/frontend/src/ApplicationReadyRoutes.tsx 
b/packages/frontend/src/ApplicationReadyRoutes.tsx
index e5cb672..62ed149 100644
--- a/packages/frontend/src/ApplicationReadyRoutes.tsx
+++ b/packages/frontend/src/ApplicationReadyRoutes.tsx
@@ -27,7 +27,6 @@ import { InstanceRoutes } from "./InstanceRoutes";
 import LoginPage from './paths/login';
 import { INSTANCE_ID_LOOKUP } from './utils/constants';
 import { NotYetReadyAppMenu, Menu } from './components/menu';
-import { AdminRoutes } from './AdminRoutes';
 import { useMessageTemplate } from 'preact-messages';
 interface Props {
   pushNotification: (n: Notification) => void;
diff --git a/packages/frontend/src/InstanceRoutes.tsx 
b/packages/frontend/src/InstanceRoutes.tsx
index 6e35d50..aec17d6 100644
--- a/packages/frontend/src/InstanceRoutes.tsx
+++ b/packages/frontend/src/InstanceRoutes.tsx
@@ -23,6 +23,7 @@ import { Fragment, h, VNode } from 'preact';
 import { useCallback, useEffect, useMemo } from "preact/hooks";
 import { Route, Router, route } from 'preact-router';
 import { useMessageTemplate } from 'preact-messages';
+import { createHashHistory } from 'history';
 import { useBackendInstanceToken } from './hooks';
 import { InstanceContextProvider, useBackendContext } from './context/backend';
 import { SwrError } from "./hooks/backend";
@@ -47,7 +48,7 @@ import TipUpdatePage from './paths/instance/tips/update'
 
 import TransferListPage from './paths/instance/transfers/list'
 import TransferCreatePage from './paths/instance/transfers/create'
-// import { AdminRoutes } from './AdminRoutes';
+
 import InstanceListPage from './paths/admin/list';
 import InstanceCreatePage from "./paths/admin/create";
 
@@ -83,7 +84,7 @@ export interface Props {
   admin?: boolean;
 }
 
-const rootPath = typeof window !== 'undefined' ? window.location.pathname : '/'
+// const rootPath = typeof window !== 'undefined' ? window.location.pathname : 
'/'
 
 export function InstanceRoutes({ id, pushNotification, admin }: Props): VNode {
   const [token, updateToken] = useBackendInstanceToken(id);
@@ -104,9 +105,9 @@ export function InstanceRoutes({ id, pushNotification, 
admin }: Props): VNode {
   const value = useMemo(() => ({ id, token, admin }), [id, token])
 
   return <InstanceContextProvider value={value}>
-    <Router>
+    <Router history={createHashHistory()}>
       {admin &&
-        <Route path={rootPath + AdminPaths.list_instances} 
component={InstanceListPage}
+        <Route path={AdminPaths.list_instances} component={InstanceListPage}
 
           onCreate={() => {
             route(AdminPaths.new_instance);
@@ -128,7 +129,7 @@ export function InstanceRoutes({ id, pushNotification, 
admin }: Props): VNode {
       }
 
       {admin &&
-        <Route path={rootPath + AdminPaths.new_instance} 
component={InstanceCreatePage}
+        <Route path={AdminPaths.new_instance} component={InstanceCreatePage}
 
           onBack={() => route(AdminPaths.list_instances)}
 
@@ -144,7 +145,7 @@ export function InstanceRoutes({ id, pushNotification, 
admin }: Props): VNode {
         />
       }
 
-      <Route path={rootPath + InstancePaths.details}
+      <Route path={InstancePaths.details}
         component={DetailPage}
 
         onUnauthorized={() => <LoginPage
@@ -156,7 +157,7 @@ export function InstanceRoutes({ id, pushNotification, 
admin }: Props): VNode {
           onConfirm={updateLoginStatus} />}
       />
 
-      <Route path={rootPath + InstancePaths.update}
+      <Route path={InstancePaths.update}
         component={InstanceUpdatePage}
 
         onUnauthorized={() => <LoginPage
@@ -181,7 +182,7 @@ export function InstanceRoutes({ id, pushNotification, 
admin }: Props): VNode {
         }}
       />
 
-      <Route path={rootPath + InstancePaths.product_list}
+      <Route path={InstancePaths.product_list}
         component={ProductListPage}
         onUnauthorized={() => <LoginPage
           withMessage={{ message: i18n`Access denied`, description: i18n`Check 
your token is valid`, type: 'ERROR', }}
@@ -191,14 +192,14 @@ export function InstanceRoutes({ id, pushNotification, 
admin }: Props): VNode {
           withMessage={{ message: i18n`Problem reaching the server`, 
description: i18n`Got message: ${error.message} from: ${error.backend} 
(hasToken: ${error.hasToken})`, type: 'ERROR', }}
           onConfirm={updateLoginStatus} />}
       />
-      <Route path={rootPath + InstancePaths.product_update}
+      <Route path={InstancePaths.product_update}
         component={ProductUpdatePage}
       />
-      <Route path={rootPath + InstancePaths.product_new}
+      <Route path={InstancePaths.product_new}
         component={ProductCreatePage}
       />
 
-      <Route path={rootPath + InstancePaths.order_list}
+      <Route path={InstancePaths.order_list}
         component={OrderListPage}
         onUnauthorized={() => <LoginPage
           withMessage={{ message: i18n`Access denied`, description: i18n`Check 
your token is valid`, type: 'ERROR', }}
@@ -208,14 +209,14 @@ export function InstanceRoutes({ id, pushNotification, 
admin }: Props): VNode {
           withMessage={{ message: i18n`Problem reaching the server`, 
description: i18n`Got message: ${error.message} from: ${error.backend} 
(hasToken: ${error.hasToken})`, type: 'ERROR', }}
           onConfirm={updateLoginStatus} />}
       />
-      <Route path={rootPath + InstancePaths.order_update}
+      <Route path={InstancePaths.order_update}
         component={OrderUpdatePage}
       />
-      <Route path={rootPath + InstancePaths.order_new}
+      <Route path={InstancePaths.order_new}
         component={OrderCreatePage}
       />
 
-      <Route path={rootPath + InstancePaths.tips_list}
+      <Route path={InstancePaths.tips_list}
         component={TipListPage}
         onUnauthorized={() => <LoginPage
           withMessage={{ message: i18n`Access denied`, description: i18n`Check 
your token is valid`, type: 'ERROR', }}
@@ -225,14 +226,14 @@ export function InstanceRoutes({ id, pushNotification, 
admin }: Props): VNode {
           withMessage={{ message: i18n`Problem reaching the server`, 
description: i18n`Got message: ${error.message} from: ${error.backend} 
(hasToken: ${error.hasToken})`, type: 'ERROR', }}
           onConfirm={updateLoginStatus} />}
       />
-      <Route path={rootPath + InstancePaths.tips_update}
+      <Route path={InstancePaths.tips_update}
         component={TipUpdatePage}
       />
-      <Route path={rootPath + InstancePaths.tips_new}
+      <Route path={InstancePaths.tips_new}
         component={TipCreatePage}
       />
 
-      <Route path={rootPath + InstancePaths.transfers_list}
+      <Route path={InstancePaths.transfers_list}
         component={TransferListPage}
         onUnauthorized={() => <LoginPage
           withMessage={{ message: i18n`Access denied`, description: i18n`Check 
your token is valid`, type: 'ERROR', }}
@@ -242,7 +243,7 @@ export function InstanceRoutes({ id, pushNotification, 
admin }: Props): VNode {
           withMessage={{ message: i18n`Problem reaching the server`, 
description: i18n`Got message: ${error.message} from: ${error.backend} 
(hasToken: ${error.hasToken})`, type: 'ERROR', }}
           onConfirm={updateLoginStatus} />}
       />
-      <Route path={rootPath + InstancePaths.transfers_new}
+      <Route path={InstancePaths.transfers_new}
         component={TransferCreatePage}
       />
 
diff --git a/packages/frontend/src/components/menu/SideBar.tsx 
b/packages/frontend/src/components/menu/SideBar.tsx
index f4000c1..b8dc635 100644
--- a/packages/frontend/src/components/menu/SideBar.tsx
+++ b/packages/frontend/src/components/menu/SideBar.tsx
@@ -64,7 +64,7 @@ export function Sidebar({ mobile, instance, onLogout, admin 
}: Props): VNode {
           </li>
           <li>
             <a href="/products" class="has-icon">
-              <span class="icon"><i class="mdi mdi-mdi-shopping" /></span>
+              <span class="icon"><i class="mdi mdi-shopping" /></span>
               <span class="menu-item-label">Products</span>
             </a>
           </li>
diff --git a/packages/frontend/src/hooks/index.ts 
b/packages/frontend/src/hooks/index.ts
index cab1a05..e1af7de 100644
--- a/packages/frontend/src/hooks/index.ts
+++ b/packages/frontend/src/hooks/index.ts
@@ -48,7 +48,7 @@ export function useBackendURL(): [string, boolean, 
StateUpdater<string>, () => v
     setTriedToLog('yes')
     return setter(p => (v instanceof Function ? v(p) : v).replace(/\/$/, ''))
   }
-  
+
   const resetBackend = () => {
     setTriedToLog(undefined)
   }
@@ -77,6 +77,13 @@ export function useBackendInstanceToken(id: string): [string 
| undefined, StateU
     })
   }, [id, setIds])
 
+  const [defaultToken, defaultSetToken] = useBackendDefaultToken()
+
+  // instance named 'default' use the default token
+  if (id === 'default') {
+    return [defaultToken, defaultSetToken, clearAllTokens]
+  }
+
   return [token, setToken, clearAllTokens]
 }
 
@@ -96,7 +103,9 @@ export function useBackendInstanceToken(id: string): [string 
| undefined, StateU
 // }
 
 export function useLang(): [string, StateUpdater<string>] {
-  return useNotNullLocalStorage('lang-preference', typeof window !== 
"undefined" ? navigator.language || (navigator as any).userLanguage : 'en')
+  const browserLang = typeof window !== "undefined" ? navigator.language || 
(navigator as any).userLanguage : undefined;
+  const defaultLang = (browserLang || 'en').substring(0,2)
+  return useNotNullLocalStorage('lang-preference', defaultLang)
 }
 
 export function useLocalStorage(key: string, initialValue?: string): [string | 
undefined, StateUpdater<string | undefined>] {
diff --git a/packages/frontend/src/paths/admin/list/Table.tsx 
b/packages/frontend/src/paths/admin/list/Table.tsx
index 024ef9c..cb7ae31 100644
--- a/packages/frontend/src/paths/admin/list/Table.tsx
+++ b/packages/frontend/src/paths/admin/list/Table.tsx
@@ -22,6 +22,7 @@
 import { h, VNode } from "preact"
 import { Message } from "preact-messages"
 import { StateUpdater, useEffect, useState } from "preact/hooks"
+import { useBackendContext } from "../../../context/backend";
 import { MerchantBackend } from "../../../declaration"
 
 interface Props {
@@ -94,6 +95,7 @@ function toggleSelected<T>(id: T): (prev: T[]) => T[] {
 }
 
 function Table({ rowSelection, rowSelectionHandler, instances, onUpdate, 
onDelete }: TableProps): VNode {
+  const { changeBackend, url } = useBackendContext()
   return (
     <table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
       <thead>
@@ -118,7 +120,7 @@ function Table({ rowSelection, rowSelectionHandler, 
instances, onUpdate, onDelet
                 <span class="check" />
               </label>
             </td>
-            <td><a onClick={(): void => onUpdate(i.id)} style={{ cursor: 
'pointer' }} >{i.id}</a></td>
+            <td><a href={`/instances/${i.id}`} {...{ native: true }} 
onClick={() => changeBackend(`${url}/instances/${i.id}`)} >{i.id}</a></td>
             <td >{i.name}</td>
             <td class="is-actions-cell">
               <div class="buttons is-right">
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c26e72d..1d791fe 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -5,6 +5,7 @@ importers:
     dependencies:
       axios: 0.21.1
       date-fns: 2.19.0
+      history: 4.10.1
       messageformat: 2.3.0
       preact: 10.5.13
       preact-messages: link:../preact-messages
@@ -24,6 +25,7 @@ importers:
       '@testing-library/preact': 2.0.1_preact@10.5.13
       '@testing-library/preact-hooks': 1.1.0_8a3b8354086a0a31d950b2aa8b26d524
       '@types/enzyme': 3.10.8
+      '@types/history': 4.7.8
       '@types/jest': 26.0.20
       '@typescript-eslint/eslint-plugin': 
4.18.0_ef0f217f6395606fd8bbe7b0291eff7e
       '@typescript-eslint/parser': 4.18.0_eslint@7.22.0+typescript@4.2.3
@@ -71,6 +73,7 @@ importers:
       '@testing-library/preact': ^2.0.1
       '@testing-library/preact-hooks': ^1.1.0
       '@types/enzyme': ^3.10.8
+      '@types/history': ^4.7.8
       '@types/jest': ^26.0.20
       '@typescript-eslint/eslint-plugin': ^4.18.0
       '@typescript-eslint/parser': ^4.18.0
@@ -91,6 +94,7 @@ importers:
       eslint: ^7.22.0
       eslint-config-preact: ^1.1.3
       eslint-plugin-header: ^3.1.1
+      history: 4.10.1
       html-webpack-inline-chunk-plugin: ^1.1.1
       html-webpack-inline-source-plugin: 0.0.10
       html-webpack-skip-assets-plugin: ^1.0.1
@@ -3077,6 +3081,10 @@ packages:
     dev: true
     resolution:
       integrity: 
sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==
+  /@types/history/4.7.8:
+    dev: true
+    resolution:
+      integrity: 
sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==
   /@types/html-minifier-terser/5.1.1:
     dev: true
     resolution:
@@ -8640,6 +8648,17 @@ packages:
     dev: true
     resolution:
       integrity: 
sha512-8mlRcn5vk/r4+QcqerapwBYTe+iPL5ih6xrNylxrnBdHQiijDETfXX7VIxC3UiCRiINBJfANBAsPzAvRQj8RpQ==
+  /history/4.10.1:
+    dependencies:
+      '@babel/runtime': 7.13.10
+      loose-envify: 1.4.0
+      resolve-pathname: 3.0.0
+      tiny-invariant: 1.1.0
+      tiny-warning: 1.0.3
+      value-equal: 1.0.1
+    dev: false
+    resolution:
+      integrity: 
sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==
   /hmac-drbg/1.0.1:
     dependencies:
       hash.js: 1.1.7
@@ -10340,7 +10359,6 @@ packages:
     resolution:
       integrity: sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=
   /js-tokens/4.0.0:
-    dev: true
     resolution:
       integrity: 
sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
   /js-yaml/3.14.1:
@@ -10817,7 +10835,6 @@ packages:
   /loose-envify/1.4.0:
     dependencies:
       js-tokens: 4.0.0
-    dev: true
     hasBin: true
     resolution:
       integrity: 
sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -14079,6 +14096,10 @@ packages:
       node: '>=8'
     resolution:
       integrity: 
sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+  /resolve-pathname/3.0.0:
+    dev: false
+    resolution:
+      integrity: 
sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
   /resolve-url/0.2.1:
     deprecated: https://github.com/lydell/resolve-url#deprecated
     dev: true
@@ -15555,6 +15576,14 @@ packages:
     optional: true
     resolution:
       integrity: 
sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
+  /tiny-invariant/1.1.0:
+    dev: false
+    resolution:
+      integrity: 
sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==
+  /tiny-warning/1.0.3:
+    dev: false
+    resolution:
+      integrity: 
sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
   /tinycolor2/1.4.2:
     dev: true
     resolution:
@@ -16358,6 +16387,10 @@ packages:
     dev: true
     resolution:
       integrity: sha1-X6kS2B630MdK/BQN5zF/DKffQ34=
+  /value-equal/1.0.1:
+    dev: false
+    resolution:
+      integrity: 
sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
   /vary/1.1.2:
     dev: true
     engines:

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]