1
import {DataLoader, Page as ArgoPage, Toolbar, Utils} from 'argo-ui';
2
import * as React from 'react';
3
import {BehaviorSubject, Observable} from 'rxjs';
4
import {map} from 'rxjs/operators';
6
import {Context, ContextApis} from '../../context';
7
import {services} from '../../services';
8
import requests from '../../services/requests';
10
const mostRecentLoggedIn = new BehaviorSubject<boolean>(false);
14
function isLoggedIn(): Observable<boolean> {
15
services.users.get().then(info => mostRecentLoggedIn.next(info.loggedIn));
16
return mostRecentLoggedIn;
19
export const AddAuthToToolbar = (init: Toolbar | Observable<Toolbar>, ctx: ContextApis): Observable<Toolbar> => {
20
return Utils.toObservable(init).pipe(
22
toolbar = toolbar || {};
25
<DataLoader key='loginPanel' load={() => isLoggedIn()}>
28
<button className='login-logout-button' key='logout' onClick={() => (window.location.href = requests.toAbsURL('/auth/logout'))}>
32
<button className='login-logout-button' key='login' onClick={() => ctx.navigation.goto(`/login?return_url=${encodeURIComponent(location.href)}`)}>
44
interface PageProps extends React.Props<any> {
47
toolbar?: Toolbar | Observable<Toolbar>;
49
useTitleOnly?: boolean;
52
export const Page = (props: PageProps) => {
53
const ctx = React.useContext(Context);
55
<DataLoader load={() => services.viewPreferences.getPreferences()}>
57
<div className={`${props.hideAuth ? 'page-wrapper' : ''} ${!!pref.hideSidebar ? 'sb-page-wrapper__sidebar-collapsed' : 'sb-page-wrapper'}`}>
60
children={props.children}
61
topBarTitle={props.topBarTitle}
62
useTitleOnly={props.useTitleOnly}
63
toolbar={!props.hideAuth ? AddAuthToToolbar(props.toolbar, ctx) : props.toolbar}