aboutsummaryrefslogtreecommitdiff
path: root/packages/frontend
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2021-06-29 14:46:11 -0300
committerSebastian <sebasjm@gmail.com>2021-06-29 14:46:42 -0300
commit0bd2f72c27043bcadd0ac366eb4f5e55ac09ccbc (patch)
tree74c9d6e57538bede351294a754418a5330195299 /packages/frontend
parent1621cb765a5a62c1306e9f9e3969aa6f62b649ed (diff)
downloadmerchant-backoffice-0bd2f72c27043bcadd0ac366eb4f5e55ac09ccbc.tar.gz
merchant-backoffice-0bd2f72c27043bcadd0ac366eb4f5e55ac09ccbc.tar.bz2
merchant-backoffice-0bd2f72c27043bcadd0ac366eb4f5e55ac09ccbc.zip
fix issue when jumping into mimic mode
Diffstat (limited to 'packages/frontend')
-rw-r--r--packages/frontend/src/ApplicationReadyRoutes.tsx11
-rw-r--r--packages/frontend/src/InstanceRoutes.tsx5
-rw-r--r--packages/frontend/src/components/menu/SideBar.tsx26
-rw-r--r--packages/frontend/src/components/menu/index.tsx7
-rw-r--r--packages/frontend/src/paths/admin/list/Table.tsx12
-rw-r--r--packages/frontend/src/paths/admin/list/View.tsx5
-rw-r--r--packages/frontend/src/paths/admin/list/index.tsx4
7 files changed, 41 insertions, 29 deletions
diff --git a/packages/frontend/src/ApplicationReadyRoutes.tsx b/packages/frontend/src/ApplicationReadyRoutes.tsx
index a0f047d..7c17895 100644
--- a/packages/frontend/src/ApplicationReadyRoutes.tsx
+++ b/packages/frontend/src/ApplicationReadyRoutes.tsx
@@ -81,8 +81,8 @@ export function ApplicationReadyRoutes(): VNode {
}
return <Fragment>
- <Menu instance={match[1]} onLogout={clearTokenAndGoToRoot} />
- <InstanceRoutes id={match[1]} />
+ <Menu instance={match[1]} onLogout={clearTokenAndGoToRoot} setInstanceName={() => null} />
+ <InstanceRoutes id={match[1]} setInstanceName={() => null} />
</Fragment>
}
@@ -93,10 +93,11 @@ export function ApplicationReadyRoutes(): VNode {
}
function DefaultMainRoute({ clearTokenAndGoToRoot, instance }: any) {
- const instanceName = instance || 'default'
+ const [instanceName, setInstanceName] = useState(instance || 'default')
+
return <Fragment>
- <Menu instance={instanceName} admin onLogout={clearTokenAndGoToRoot} />
- <InstanceRoutes admin id={instanceName} />
+ <Menu instance={instanceName} admin onLogout={clearTokenAndGoToRoot} setInstanceName={setInstanceName} />
+ <InstanceRoutes admin id={instanceName} setInstanceName={setInstanceName} />
</Fragment>
}
diff --git a/packages/frontend/src/InstanceRoutes.tsx b/packages/frontend/src/InstanceRoutes.tsx
index 5c04275..2914f5f 100644
--- a/packages/frontend/src/InstanceRoutes.tsx
+++ b/packages/frontend/src/InstanceRoutes.tsx
@@ -19,7 +19,6 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { createHashHistory } from 'history';
import { Fragment, FunctionComponent, h, VNode } from 'preact';
import { Route, route, Router } from 'preact-router';
import { useCallback, useEffect, useMemo, useState } from "preact/hooks";
@@ -81,9 +80,10 @@ export enum AdminPaths {
export interface Props {
id: string;
admin?: boolean;
+ setInstanceName: (s:string) => void
}
-export function InstanceRoutes({ id, admin }: Props): VNode {
+export function InstanceRoutes({ id, admin, setInstanceName }: Props): VNode {
const [_, updateDefaultToken] = useBackendDefaultToken()
const [token, updateToken] = useBackendInstanceToken(id);
const { changeBackend, addTokenCleaner } = useBackendContext();
@@ -167,6 +167,7 @@ export function InstanceRoutes({ id, admin }: Props): VNode {
<Route path={AdminPaths.list_instances} component={InstanceListPage}
onCreate={() => { route(AdminPaths.new_instance) }}
onUpdate={(id: string): void => { route(`/instance/${id}/update`); }}
+ setInstanceName={setInstanceName}
onUnauthorized={LoginPageAccessDenied}
onLoadError={ServerErrorRedirectTo(InstancePaths.error)}
/>
diff --git a/packages/frontend/src/components/menu/SideBar.tsx b/packages/frontend/src/components/menu/SideBar.tsx
index 7925a1a..d579736 100644
--- a/packages/frontend/src/components/menu/SideBar.tsx
+++ b/packages/frontend/src/components/menu/SideBar.tsx
@@ -40,12 +40,12 @@ export function Sidebar({ mobile, instance, onLogout, admin, mimic }: Props): VN
const config = useConfigContext();
const backend = useBackendContext();
- const withInstanceIdIfNeeded = useCallback(function (path: string) {
- if (mimic) {
- return path + '?instance=' + instance
- }
- return path
- },[instance])
+ // const withInstanceIdIfNeeded = useCallback(function (path: string) {
+ // if (mimic) {
+ // return path + '?instance=' + instance
+ // }
+ // return path
+ // },[instance])
return (
<aside class="aside is-placed-left is-expanded">
@@ -64,31 +64,31 @@ export function Sidebar({ mobile, instance, onLogout, admin, mimic }: Props): VN
</p>
<ul class="menu-list">
<li>
- <a href={withInstanceIdIfNeeded("/update")} class="has-icon">
+ <a href={("/update")} class="has-icon">
<span class="icon"><i class="mdi mdi-square-edit-outline" /></span>
<span class="menu-item-label"><Translate>Settings</Translate></span>
</a>
</li>
<li>
- <a href={withInstanceIdIfNeeded("/orders")} class="has-icon">
+ <a href={("/orders")} class="has-icon">
<span class="icon"><i class="mdi mdi-cash-register" /></span>
<span class="menu-item-label"><Translate>Orders</Translate></span>
</a>
</li>
<li>
- <a href={withInstanceIdIfNeeded("/products")} class="has-icon">
+ <a href={("/products")} class="has-icon">
<span class="icon"><i class="mdi mdi-shopping" /></span>
<span class="menu-item-label"><Translate>Products</Translate></span>
</a>
</li>
<li>
- <a href={withInstanceIdIfNeeded("/transfers")} class="has-icon">
+ <a href={("/transfers")} class="has-icon">
<span class="icon"><i class="mdi mdi-bank" /></span>
<span class="menu-item-label"><Translate>Transfers</Translate></span>
</a>
</li>
<li>
- <a href={withInstanceIdIfNeeded("/reserves")} class="has-icon">
+ <a href={("/reserves")} class="has-icon">
<span class="icon"><i class="mdi mdi-cash" /></span>
<span class="menu-item-label">Reserves</span>
</a>
@@ -121,13 +121,13 @@ export function Sidebar({ mobile, instance, onLogout, admin, mimic }: Props): VN
{admin && !mimic && <Fragment>
<p class="menu-label"><Translate>Instances</Translate></p>
<li>
- <a href={withInstanceIdIfNeeded("/instance/new")} class="has-icon">
+ <a href={("/instance/new")} class="has-icon">
<span class="icon"><i class="mdi mdi-plus" /></span>
<span class="menu-item-label"><Translate>New</Translate></span>
</a>
</li>
<li>
- <a href={withInstanceIdIfNeeded("/instances")} class="has-icon">
+ <a href={("/instances")} class="has-icon">
<span class="icon"><i class="mdi mdi-format-list-bulleted" /></span>
<span class="menu-item-label"><Translate>List</Translate></span>
</a>
diff --git a/packages/frontend/src/components/menu/index.tsx b/packages/frontend/src/components/menu/index.tsx
index 3a7ccab..fcba281 100644
--- a/packages/frontend/src/components/menu/index.tsx
+++ b/packages/frontend/src/components/menu/index.tsx
@@ -52,6 +52,7 @@ interface MenuProps {
instance: string;
admin?: boolean;
onLogout?: () => void;
+ setInstanceName: (s:string) => void;
}
function WithTitle({ title, children }: { title: string, children: ComponentChildren }): VNode {
@@ -61,7 +62,7 @@ function WithTitle({ title, children }: { title: string, children: ComponentChil
return <Fragment>{children}</Fragment>
}
-export function Menu({ onLogout, title, instance, admin }: MenuProps): VNode {
+export function Menu({ onLogout, title, instance, admin, setInstanceName }: MenuProps): VNode {
const [mobileOpen, setMobileOpen] = useState(false)
return <Match>{({ path }: any) => {
@@ -76,7 +77,9 @@ export function Menu({ onLogout, title, instance, admin }: MenuProps): VNode {
{mimic && <nav class="level">
<div class="level-item has-text-centered has-background-warning">
- <p class="is-size-5">You are viewing the instance <b>"{instance}"</b>. <a href="/instances" >go back</a></p>
+ <p class="is-size-5">You are viewing the instance <b>"{instance}"</b>. <a href="#/instances" onClick={(e) => {
+ setInstanceName('default')
+ }}>go back</a></p>
</div>
</nav>}
</div>
diff --git a/packages/frontend/src/paths/admin/list/Table.tsx b/packages/frontend/src/paths/admin/list/Table.tsx
index 4210a92..b306c43 100644
--- a/packages/frontend/src/paths/admin/list/Table.tsx
+++ b/packages/frontend/src/paths/admin/list/Table.tsx
@@ -30,9 +30,10 @@ interface Props {
onDelete: (id: MerchantBackend.Instances.Instance) => void;
onCreate: () => void;
selected?: boolean;
+ setInstanceName: (s: string) => void;
}
-export function CardTable({ instances, onCreate, onUpdate, onDelete, selected }: Props): VNode {
+export function CardTable({ instances, onCreate, onUpdate, setInstanceName, onDelete, selected }: Props): VNode {
const [actionQueue, actionQueueHandler] = useState<Actions[]>([]);
const [rowSelection, rowSelectionHandler] = useState<string[]>([])
@@ -76,7 +77,7 @@ export function CardTable({ instances, onCreate, onUpdate, onDelete, selected }:
<div class="b-table has-pagination">
<div class="table-wrapper has-mobile-cards">
{instances.length > 0 ?
- <Table instances={instances} onUpdate={onUpdate} onDelete={onDelete} rowSelection={rowSelection} rowSelectionHandler={rowSelectionHandler} /> :
+ <Table instances={instances} onUpdate={onUpdate} setInstanceName={setInstanceName} onDelete={onDelete} rowSelection={rowSelection} rowSelectionHandler={rowSelectionHandler} /> :
<EmptyTable />
}
</div>
@@ -90,13 +91,14 @@ interface TableProps {
onUpdate: (id: string) => void;
onDelete: (id: MerchantBackend.Instances.Instance) => void;
rowSelectionHandler: StateUpdater<string[]>;
+ setInstanceName: (s:string) => void;
}
function toggleSelected<T>(id: T): (prev: T[]) => T[] {
return (prev: T[]): T[] => prev.indexOf(id) == -1 ? [...prev, id] : prev.filter(e => e != id)
}
-function Table({ rowSelection, rowSelectionHandler, instances, onUpdate, onDelete }: TableProps): VNode {
+function Table({ rowSelection, rowSelectionHandler, setInstanceName, instances, onUpdate, onDelete }: TableProps): VNode {
return (
<div class="table-container">
<table class="table is-fullwidth is-striped is-hoverable is-fullwidth">
@@ -122,7 +124,9 @@ function Table({ rowSelection, rowSelectionHandler, instances, onUpdate, onDelet
<span class="check" />
</label>
</td>
- <td><a href={`/orders?instance=${i.id}`} >{i.id}</a></td>
+ <td><a href={`#/orders?instance=${i.id}`} onClick={(e) => {
+ setInstanceName(i.id);
+ }}>{i.id}</a></td>
<td >{i.name}</td>
<td class="is-actions-cell right-sticky">
<div class="buttons is-right">
diff --git a/packages/frontend/src/paths/admin/list/View.tsx b/packages/frontend/src/paths/admin/list/View.tsx
index 61ed109..43ab4e7 100644
--- a/packages/frontend/src/paths/admin/list/View.tsx
+++ b/packages/frontend/src/paths/admin/list/View.tsx
@@ -29,14 +29,15 @@ interface Props {
onUpdate: (id: string) => void;
onDelete: (id: MerchantBackend.Instances.Instance) => void;
selected?: boolean;
+ setInstanceName: (s:string) => void;
}
-export function View({ instances, onCreate, onDelete, onUpdate, selected }: Props): VNode {
+export function View({ instances, onCreate, onDelete, onUpdate, setInstanceName, selected }: Props): VNode {
return <div id="app">
<section class="section is-main-section">
- <CardTable instances={instances} onDelete={onDelete} onUpdate={onUpdate} selected={selected} onCreate={onCreate} />
+ <CardTable instances={instances} onDelete={onDelete} setInstanceName={setInstanceName} onUpdate={onUpdate} selected={selected} onCreate={onCreate} />
</section>
</div >
diff --git a/packages/frontend/src/paths/admin/list/index.tsx b/packages/frontend/src/paths/admin/list/index.tsx
index d23288c..0d42e63 100644
--- a/packages/frontend/src/paths/admin/list/index.tsx
+++ b/packages/frontend/src/paths/admin/list/index.tsx
@@ -36,9 +36,10 @@ interface Props {
onUnauthorized: () => VNode;
onNotFound: () => VNode;
onLoadError: (error: HttpError) => VNode;
+ setInstanceName: (s:string) => void;
}
-export default function Instances({ onUnauthorized, onLoadError, onNotFound, onCreate, onUpdate }: Props): VNode {
+export default function Instances({ onUnauthorized, onLoadError, onNotFound, onCreate, onUpdate, setInstanceName }: Props): VNode {
const result = useBackendInstances()
const [deleting, setDeleting] = useState<MerchantBackend.Instances.Instance | null>(null)
const { deleteInstance } = useAdminAPI()
@@ -53,6 +54,7 @@ export default function Instances({ onUnauthorized, onLoadError, onNotFound, onC
onDelete={setDeleting}
onCreate={onCreate}
onUpdate={onUpdate}
+ setInstanceName={setInstanceName}
selected={!!deleting}
/>
{deleting && <DeleteModal