From c71dbebac7722b851946434e7569425bd7dc44cd Mon Sep 17 00:00:00 2001 From: Maximiliano Osorio Date: Mon, 15 Jul 2024 09:21:49 -0400 Subject: [PATCH] add: typing --- .../Toolbar/ShareModal/ShareModal.tsx | 9 ++- .../ShareModal/components/ProjectSelector.tsx | 14 ++-- .../ShareModal/components/UserSelector.css | 1 + .../ShareModal/components/UserSelector.tsx | 14 ++-- src/upstream-api/projects/types.ts | 69 +++++++++++++++++++ src/upstream-hooks/projects/useList.ts | 4 +- 6 files changed, 91 insertions(+), 20 deletions(-) create mode 100644 src/upstream-api/projects/types.ts diff --git a/src/tapis-app/Apps/_components/Toolbar/ShareModal/ShareModal.tsx b/src/tapis-app/Apps/_components/Toolbar/ShareModal/ShareModal.tsx index 5902015..d743494 100644 --- a/src/tapis-app/Apps/_components/Toolbar/ShareModal/ShareModal.tsx +++ b/src/tapis-app/Apps/_components/Toolbar/ShareModal/ShareModal.tsx @@ -181,6 +181,7 @@ const ShareModel: React.FC = ({ toggle }) => { visibility: 'private', }; + const sharedCounter = newUsers.length + usersFromProjects.length; return ( { @@ -191,10 +192,12 @@ const ShareModel: React.FC = ({ toggle }) => { body={
- The following actions will be applied to the selected apps: + Pending Actions for Selected Apps:
    -
  • Unshare: {removedUsers.length} users
  • -
  • Share: {newUsers.length} users
  • +
  • Unshare with: {removedUsers.length} users
  • +
  • + Share with: {newUsers.length + usersFromProjects.length} users +
diff --git a/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/ProjectSelector.tsx b/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/ProjectSelector.tsx index 840ff91..d66b75b 100644 --- a/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/ProjectSelector.tsx +++ b/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/ProjectSelector.tsx @@ -1,6 +1,7 @@ import { useState } from 'react'; import { Container, FormGroup, Input, Label } from 'reactstrap'; import { QueryWrapper } from 'tapis-ui/_wrappers'; +import { Project } from 'upstream-api/projects/types'; import { useList } from 'upstream-hooks/projects'; interface ProjectSelectorProps { @@ -9,9 +10,9 @@ interface ProjectSelectorProps { } const ProjectSelector = ({ setUsers, users }: ProjectSelectorProps) => { - const [selectedProjects, setSelectedProjects] = useState([]); - const { data, isLoading, error } = useList(); - const handleCheckboxChange = (project) => { + const [selectedProjects, setSelectedProjects] = useState([]); + const { data: projects, isLoading, error } = useList(); + const handleCheckboxChange = (project: Project) => { if (selectedProjects.includes(project.id)) { setSelectedProjects(selectedProjects.filter((p) => p !== project.id)); } else { @@ -24,8 +25,8 @@ const ProjectSelector = ({ setUsers, users }: ProjectSelectorProps) => { return ( - {data && - data?.map((project, index) => ( + {projects && + projects?.map((project, index) => ( - {/* */} ))} diff --git a/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/UserSelector.css b/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/UserSelector.css index d2483d9..6d45a29 100644 --- a/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/UserSelector.css +++ b/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/UserSelector.css @@ -1,5 +1,6 @@ .link-button { background: none; + background-color: none; color: blue; border: none; padding: 0; diff --git a/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/UserSelector.tsx b/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/UserSelector.tsx index 7515e59..28b605b 100644 --- a/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/UserSelector.tsx +++ b/src/tapis-app/Apps/_components/Toolbar/ShareModal/components/UserSelector.tsx @@ -1,7 +1,5 @@ import { useState } from 'react'; -import { Button, Container, FormGroup, Input, Label } from 'reactstrap'; -import { QueryWrapper } from 'tapis-ui/_wrappers'; -import { useList } from 'upstream-hooks/projects'; +import { FormGroup, Input, Label, Button } from 'reactstrap'; import './UserSelector.css'; interface UserSelectorProps { @@ -16,7 +14,7 @@ const UserSelector = ({ setRemovedUsers, }: UserSelectorProps) => { const [users, setUsers] = useState(initialUsers); - const handleCheckboxChange = (user) => { + const handleCheckboxChange = (user: string) => { if (users.includes(user)) { setUsers(users.filter((u) => u !== user)); setRemovedUsers([...removedUsers, user]); @@ -27,8 +25,10 @@ const UserSelector = ({

Manage existing permissions

Shared with {initialUsers.length} users - {removedUsers.length > 0 && ( - + )} {users && diff --git a/src/upstream-api/projects/types.ts b/src/upstream-api/projects/types.ts new file mode 100644 index 0000000..4223b59 --- /dev/null +++ b/src/upstream-api/projects/types.ts @@ -0,0 +1,69 @@ +export interface Project { + id: number; + title: string; + description: string; + chargeCode: string; + gid: number; + source: any; + fieldId: number; + field: string; + typeId: number; + type: string; + piId: number; + pi: Pi; + allocations: Allocation[]; + nickname: any; + members: User[]; +} +interface User { + id: number; + username: string; + role: string; + firstName: string; + lastName: string; + email: string; +} + +export interface Pi { + id: number; + username: string; + email: string; + firstName: string; + lastName: string; + institution: string; + institutionId: number; + department: string; + departmentId: number; + citizenship: string; + citizenshipId: number; + source: string; + uid: number; + homeDirectory: string; + gid: number; +} + +export interface Allocation { + id: number; + start: string; + end: string; + status: string; + justification: string; + decisionSummary: any; + dateRequested: string; + dateReviewed: any; + computeRequested: number; + computeAllocated: number; + storageRequested: number; + storageAllocated: number; + memoryRequested: number; + memoryAllocated: number; + resourceId: number; + resource: string; + projectId: number; + project: string; + requestorId: number; + requestor: string; + reviewerId: number; + reviewer: any; + computeUsed: number; +} diff --git a/src/upstream-hooks/projects/useList.ts b/src/upstream-hooks/projects/useList.ts index 9993e81..5e67183 100644 --- a/src/upstream-hooks/projects/useList.ts +++ b/src/upstream-hooks/projects/useList.ts @@ -3,6 +3,7 @@ import { list } from 'upstream-api/projects'; import { Jobs } from '@tapis/tapis-typescript'; import QueryKeys from './queryKeys'; import { useUpstreamConfig } from 'upstream-hooks/context'; +import { Project } from 'upstream-api/projects/types'; export const defaultParams: Jobs.GetJobListRequest = { orderBy: 'created(desc)', @@ -10,7 +11,7 @@ export const defaultParams: Jobs.GetJobListRequest = { const useList = () => { const { accessToken, basePath } = useUpstreamConfig(); - const result = useQuery( + const result = useQuery( [QueryKeys.list, accessToken], // Default to no token. This will generate a 403 when calling the list function // which is expected behavior for not having a token @@ -21,7 +22,6 @@ const useList = () => { enabled: !!accessToken, } ); - console.log(result); return result; };