From 9b30533d4b339aa209fc2603cf334b81a0536321 Mon Sep 17 00:00:00 2001 From: Zoltan Runyo <zoltan.runyo@ess.eu> Date: Thu, 16 Dec 2021 11:07:53 +0100 Subject: [PATCH] ICSHWI-8454: Tool users from backend API --- src/api/SwaggerApi.js | 11 +++++++++++ src/components/IOC/IOCDetailAdmin.js | 25 +++++++++++++++++++------ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/api/SwaggerApi.js b/src/api/SwaggerApi.js index 244ea68e..800c7898 100644 --- a/src/api/SwaggerApi.js +++ b/src/api/SwaggerApi.js @@ -503,6 +503,17 @@ export function useNamingNames() { return useAsync({ fcn: method, call: false, init: [] }); } +export function unpackUserList(users) { + return users.toString().split(","); +} + +export function useUserNames() { + const api = useContext(apiContext); + const method = callAndUnpack((query) => api.apis.Authentication.getToolUsers({query: query}), unpackUserList) + + return useAsync({ fcn: method, call: false, init: [] }); +} + export function unpackDeploymentStatistics(statistics) { return { ...statistics }; } diff --git a/src/components/IOC/IOCDetailAdmin.js b/src/components/IOC/IOCDetailAdmin.js index a6896df8..365a4600 100644 --- a/src/components/IOC/IOCDetailAdmin.js +++ b/src/components/IOC/IOCDetailAdmin.js @@ -2,7 +2,7 @@ import React, { useState, useEffect, useRef } from 'react'; import { SimpleAccordion } from "../common/Accordion/SimpleAccordion"; import { Button, makeStyles, TextField, Typography } from "@material-ui/core"; import { Autocomplete, Alert } from "@material-ui/lab"; -import { useAllowedGitProjects, useNamingNames, useUpdateIoc } from "../../api/SwaggerApi"; +import { useAllowedGitProjects, useNamingNames, useUpdateIoc, useUserNames } from "../../api/SwaggerApi"; import { useTypingTimer } from "../common/SearchBoxFilter/TypingTimer"; import { ConfirmationDialog } from "../dialog/ConfirmationDialog"; import { SimpleModal } from "../../components/common/SimpleModal/SimpleModal"; @@ -23,6 +23,8 @@ export default function IOCDetailAdmin({ ioc, getIOC, resetTab, buttonDisabled } const [names, getNames] = useNamingNames(); const [name, setName] = useState({ id: ioc.externalNameId, description: ioc.description, name: ioc.namingName }); const [owner, setOwner] = useState(ioc.owner); + const [ownerQuery] = useState(); + const [users, getUsers] = useUserNames(); //for the dialog const [adHocDialogOpen, setAdHocDialogOpen] = useState(false); @@ -43,6 +45,8 @@ export default function IOCDetailAdmin({ ioc, getIOC, resetTab, buttonDisabled } useEffect(() => getNames(nameQuery), [nameQuery, getNames]); + useEffect(() => getUsers(ownerQuery), [ownerQuery, getUsers]); + //when user clicks Submit button a dialog should open const onSubmit = (event) => { event.preventDefault(); @@ -97,10 +101,19 @@ export default function IOCDetailAdmin({ ioc, getIOC, resetTab, buttonDisabled } ); } - function ownerText(disabled) { + function ownerAutocomplete(disabled) { return( - <TextField id="owner" className={classes.textField} label="Owner" variant="outlined" fullWidth required value={owner} - onChange={(event) => {setOwner(event.target.value); setError(null);}} disabled={disabled}/> + <Autocomplete + className={classes.textField} + autoHighlight + id="owner" + options={users} + getOptionLabel={(option) => { return option }} + defaultValue={owner} + renderInput={(params) => <TextField {...params} label="Owner" variant="outlined" fullWidth required />} + onChange={(event, value, reason) => {setOwner(value); setError(null);}} + disabled={disabled} + /> ); } @@ -130,8 +143,8 @@ export default function IOCDetailAdmin({ ioc, getIOC, resetTab, buttonDisabled } <AccessControl allowedRoles={["DeploymentToolAdmin"]} - renderNoAccess={() => ownerText(true)} > - {ownerText(false)} + renderNoAccess={() => ownerAutocomplete(true)} > + {ownerAutocomplete(false)} </AccessControl> {error ? -- GitLab