"scripts": {
"start": "react-scripts-ts start",
"build": "REACT_APP_BUILD_NUMBER=$BUILD_NUMBER REACT_APP_GIT_COMMIT=$GIT_COMMIT react-scripts-ts build",
- "test": "CI=true react-scripts-ts test --env=jsdom",
+ "test": "react-scripts-ts test --env=jsdom",
"eject": "react-scripts-ts eject",
"lint": "tslint src/** -t verbose",
"build-css": "node-sass-chokidar src/ -o src/",
lastName: string;
uuid: string;
ownerUuid: string;
+ isAdmin: boolean;
}
export const getUserFullname = (user?: User) => {
export const USER_LAST_NAME_KEY = 'userLastName';
export const USER_UUID_KEY = 'userUuid';
export const USER_OWNER_UUID_KEY = 'userOwnerUuid';
+export const USER_IS_ADMIN = 'userIsAdmin';
export interface UserDetailsResponse {
email: string;
const lastName = localStorage.getItem(USER_LAST_NAME_KEY);
const uuid = localStorage.getItem(USER_UUID_KEY);
const ownerUuid = localStorage.getItem(USER_OWNER_UUID_KEY);
+ const isAdmin = Boolean(localStorage.getItem(USER_IS_ADMIN));
- return email && firstName && lastName && uuid && ownerUuid
- ? { email, firstName, lastName, uuid, ownerUuid }
+ return email && firstName && lastName && uuid && ownerUuid && isAdmin
+ ? { email, firstName, lastName, uuid, ownerUuid, isAdmin }
: undefined;
}
localStorage.setItem(USER_LAST_NAME_KEY, user.lastName);
localStorage.setItem(USER_UUID_KEY, user.uuid);
localStorage.setItem(USER_OWNER_UUID_KEY, user.ownerUuid);
+ localStorage.setItem(USER_IS_ADMIN, JSON.stringify(user.isAdmin));
}
public removeUser() {
firstName: resp.data.first_name,
lastName: resp.data.last_name,
uuid: resp.data.uuid,
- ownerUuid: resp.data.owner_uuid
+ ownerUuid: resp.data.owner_uuid,
+ isAdmin: resp.data.is_admin
};
})
.catch(e => {
USER_FIRST_NAME_KEY,
USER_LAST_NAME_KEY,
USER_OWNER_UUID_KEY,
- USER_UUID_KEY
+ USER_UUID_KEY,
+ USER_IS_ADMIN
} from "~/services/auth-service/auth-service";
import 'jest-localstorage-mock';
localStorage.setItem(USER_LAST_NAME_KEY, "Doe");
localStorage.setItem(USER_UUID_KEY, "uuid");
localStorage.setItem(USER_OWNER_UUID_KEY, "ownerUuid");
+ localStorage.setItem(USER_IS_ADMIN, "isAdmin");
store.dispatch(initAuth());
firstName: "John",
lastName: "Doe",
uuid: "uuid",
- ownerUuid: "ownerUuid"
+ ownerUuid: "ownerUuid",
+ isAdmin: true
}
});
});
firstName: "John",
lastName: "Doe",
uuid: "uuid",
- ownerUuid: "ownerUuid"
+ ownerUuid: "ownerUuid",
+ isAdmin: true
};
const state = reducer(initialState, authActions.INIT({ user, token: "token" }));
expect(state).toEqual({
firstName: "John",
lastName: "Doe",
uuid: "uuid",
- ownerUuid: "ownerUuid"
+ ownerUuid: "ownerUuid",
+ isAdmin: true
};
const state = reducer(initialState, authActions.USER_DETAILS_SUCCESS(user));
lastName: "Doe",
uuid: "uuid",
ownerUuid: "ownerUuid",
+ isAdmin: true
}
});
});
dispatch(virtualMachinesActions.SET_REQUESTED_DATE(date));
};
-
export const loadVirtualMachinesData = () =>
async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
dispatch<any>(loadRequestedDate());
import { ArvadosTheme } from '~/common/custom-theme';
import { DefaultCodeSnippet } from '~/components/default-code-snippet/default-code-snippet';
import { Link } from 'react-router-dom';
-import { Dispatch, compose } from 'redux';
+import { compose } from 'redux';
import { saveRequestedDate, loadVirtualMachinesData } from '~/store/virtual-machines/virtual-machines-actions';
import { RootState } from '~/store/store';
import { ListResults } from '~/services/common-service/common-resource-service';
}
});
-const mapStateToProps = ({ virtualMachines }: RootState) => {
+const mapStateToProps = ({ virtualMachines, auth }: RootState) => {
return {
requestedDate: virtualMachines.date,
+ isAdmin: auth.user!.isAdmin,
...virtualMachines
};
};
virtualMachines: ListResults<any>;
logins: VirtualMachinesLoginsResource[];
links: ListResults<any>;
+ isAdmin: string;
}
interface VirtualMachinesPanelActionProps {
componentDidMount() {
this.props.loadVirtualMachinesData();
}
-
+
render() {
- const { virtualMachines, links } = this.props;
+ const { virtualMachines, links, isAdmin } = this.props;
return (
<Grid container spacing={16}>
- {virtualMachines.itemsAvailable === 0 && <CardContentWithNoVirtualMachines {...this.props} />}
+ {isAdmin && <CardContentWithNoVirtualMachines {...this.props} />}
{virtualMachines.itemsAvailable > 0 && links.itemsAvailable > 0 && <CardContentWithVirtualMachines {...this.props} />}
{<CardSSHSection {...this.props} />}
</Grid>