merchant-backoffice

ZZZ: Inactive/Deprecated
Log | Files | Refs | Submodules | README

commit 0b57def514b01352a014f388bac686255ddd060a
parent df1918755c0af900c6c447f1d4e0ef27174fb26e
Author: Sebastian <sebasjm@gmail.com>
Date:   Wed, 10 Feb 2021 16:25:35 -0300

better login page

Diffstat:
Msrc/components/auth/LoginPage.tsx | 30++++++++++++++++++++++++++----
Msrc/components/hooks/backend.ts | 13+++++++++----
Msrc/components/navbar/index.tsx | 5+++--
Msrc/routes/instances/CreateModal.tsx | 5+++--
Msrc/routes/instances/Table.tsx | 3++-
Msrc/routes/instances/UpdateModal.tsx | 3++-
6 files changed, 45 insertions(+), 14 deletions(-)

diff --git a/src/components/auth/LoginPage.tsx b/src/components/auth/LoginPage.tsx @@ -7,9 +7,31 @@ interface Props { export default function LoginPage({ onLogIn }: Props): VNode { const [token, update] = useState('') - - return <div> - <input value={token} onInput={e => update(e?.currentTarget.value)} /> - <button onClick={(): void => onLogIn(token)}>set</button> + + return <div class="modal is-active is-clipped"> + <div class="modal-background" /> + <div class="modal-card"> + <header class="modal-card-head"> + <p class="modal-card-title">Authentication required</p> + </header> + <section class="modal-card-body"> + Please enter your auth id + <div class="field is-horizontal"> + <div class="field-label is-normal"> + <label class="label">Id</label> + </div> + <div class="field-body"> + <div class="field"> + <p class="control is-expanded has-icons-left"> + <input class="input" type="text" placeholder="abcdef" name="id" value={token} onInput={e => update(e?.currentTarget.value)} /> + </p> + </div> + </div> + </div> + </section> + <footer class="modal-card-foot"> + <button class="button is-info" onClick={(): void => onLogIn(token)} >Confirm</button> + </footer> + </div> </div> } \ No newline at end of file diff --git a/src/components/hooks/backend.ts b/src/components/hooks/backend.ts @@ -46,9 +46,13 @@ async function fetcher(url: string): Promise<any> { return request(url, 'get') } -export function updateToken(token: string): void { - localStorage.setItem(TOKEN_KEY, token) - globalMutate('instances') +export function updateToken(token: string | null): void { + if (token) { + localStorage.setItem(TOKEN_KEY, token) + } else { + localStorage.removeItem(TOKEN_KEY) + } + globalMutate('/instances', null) } interface WithCreate<T> { @@ -79,12 +83,13 @@ export function useBackendInstance(id: string | null): HttpResponse<MerchantBack const update = async (updateId: string, instance: MerchantBackend.Instances.InstanceReconfigurationMessage) => { await request(`/instances/${updateId}`, 'patch', instance) + globalMutate('/instances', null) globalMutate(`/instances/${updateId}`, null) }; const _delete = async (deleteId: string) => { await request(`/instances/${deleteId}`, 'delete') - globalMutate('/instances') + globalMutate('/instances', null) globalMutate(`/instances/${deleteId}`, null) } diff --git a/src/components/navbar/index.tsx b/src/components/navbar/index.tsx @@ -1,4 +1,5 @@ import { h, VNode } from 'preact'; +import { updateToken } from '../hooks/backend'; export default function NavigationBar(): VNode { return ( @@ -8,7 +9,7 @@ export default function NavigationBar(): VNode { <span class="icon"><i class="mdi mdi-forwardburger mdi-24px" /></span> </a> <div class="navbar-item has-control"> - <div class="control"><input placeholder="Search everywhere..." class="input" /></div> + {/* <div class="control"><input placeholder="Search everywhere..." class="input" /></div> */} </div> </div> <div class="navbar-brand is-right"> @@ -17,7 +18,7 @@ export default function NavigationBar(): VNode { </a> </div> <div class="navbar-menu navbar-end"> - <button class="button is-primary">Log out</button> + <button class="button is-primary" onClick={ () => updateToken(null) }>Log out</button> </div> </nav> ); diff --git a/src/routes/instances/CreateModal.tsx b/src/routes/instances/CreateModal.tsx @@ -26,7 +26,7 @@ const schema = yup.object().shape({ name: yup.string().required().label("Name"), payto_uris: yup.array().of(yup.string()) .min(1).label("Payment Method") - .meta({ placeholder: 'comma separated values' }) + .meta({ placeholder: 'comma separated values', help: 'payto://x-taler-bank/bank.taler:5882/blogger' }) .transform(stringToArray), default_max_deposit_fee: yup.string().required().label("Max Deposit Fee"), default_max_wire_fee: yup.string().required().label("Max Wire"), @@ -60,7 +60,7 @@ export default function CreateModal({ active, onCancel, onConfirm }: Props): VNo } } - return <ConfirmModal description="update instance" active={active} onConfirm={submit} onCancel={onCancel}> + return <ConfirmModal description="create instance" active={active} onConfirm={submit} onCancel={onCancel}> {Object.keys(schema.fields).map(f => { const info = schema.fields[f].describe() @@ -74,6 +74,7 @@ export default function CreateModal({ active, onCancel, onConfirm }: Props): VNo <div class="field"> <p class="control is-expanded has-icons-left"> <input class="input" type="text" placeholder={info?.meta?.placeholder} readonly={info?.meta?.readonly} name={f} value={value[f]} onChange={e => valueHandler(prev => ({ ...prev, [f]: e.currentTarget.value }))} /> + {info?.meta?.help} </p> {errors[f] ? <p class="help is-danger">{errors[f]}</p> : null} </div> diff --git a/src/routes/instances/Table.tsx b/src/routes/instances/Table.tsx @@ -71,10 +71,11 @@ export default function Table({ instances, onCreate, onDelete, onSelect, onUpdat <thead> <tr> <th class="is-checkbox-cell"> - <label class="b-checkbox checkbox"> + { instances.length > 0 ? <label class="b-checkbox checkbox"> <input type="checkbox" checked={rowSelection.length === instances.length} onClick={e => rowSelectionHandler(rowSelection.length === instances.length ? [] : instances.map(i => i.id))} /> <span class="check" /> </label> + : null } </th> <th>id</th> <th>name</th> diff --git a/src/routes/instances/UpdateModal.tsx b/src/routes/instances/UpdateModal.tsx @@ -13,7 +13,7 @@ const schema = yup.object().shape({ name: yup.string().required().label("Name"), payto_uris: yup.array().of(yup.string()) .min(1).label("Payment Method") - .meta({ placeholder: 'comma separated values' }) + .meta({ placeholder: 'comma separated values', help: 'payto://x-taler-bank/bank.taler:5882/blogger' }) .transform(stringToArray), default_max_deposit_fee: yup.string().required().label("Max Deposit Fee"), default_max_wire_fee: yup.string().required().label("Max Wire"), @@ -64,6 +64,7 @@ export default function UpdateModal({ element, onCancel, onConfirm }: Props): VN <div class="field"> <p class="control is-expanded has-icons-left"> <input class="input" type="text" placeholder={info?.meta?.placeholder} readonly={info?.meta?.readonly} name={f} value={value[f]} onChange={e => valueHandler(prev => ({ ...prev, [f]: e.currentTarget.value }))} /> + {info?.meta?.help} </p> {errors[f] ? <p class="help is-danger">{errors[f]}</p> : null} </div>