feature: add ability to assign tasks

This commit is contained in:
Jordan Knott
2020-04-19 22:02:55 -05:00
parent beaa215bc2
commit c38024e692
60 changed files with 2871 additions and 790 deletions

View File

@ -2,6 +2,7 @@ import React, { createRef, useState } from 'react';
import styled from 'styled-components';
import DropdownMenu from '.';
import { action } from '@storybook/addon-actions';
export default {
component: DropdownMenu,
@ -49,7 +50,7 @@ export const Default = () => {
Click me
</Button>
</Container>
{menu.isOpen && <DropdownMenu left={menu.left} top={menu.top} />}
{menu.isOpen && <DropdownMenu onLogout={action('on logout')} left={menu.left} top={menu.top} />}
</>
);
};

View File

@ -6,9 +6,10 @@ import { Separator, Container, WrapperDiamond, Wrapper, ActionsList, ActionItem,
type DropdownMenuProps = {
left: number;
top: number;
onLogout: () => void;
};
const DropdownMenu: React.FC<DropdownMenuProps> = ({ left, top }) => {
const DropdownMenu: React.FC<DropdownMenuProps> = ({ left, top, onLogout }) => {
return (
<Container left={left} top={top}>
<Wrapper>
@ -18,7 +19,7 @@ const DropdownMenu: React.FC<DropdownMenuProps> = ({ left, top }) => {
</ActionItem>
<Separator />
<ActionsList>
<ActionItem>
<ActionItem onClick={onLogout}>
<Exit size={16} color="#c2c6dc" />
<ActionTitle>Logout</ActionTitle>
</ActionItem>

View File

@ -23,7 +23,7 @@ export const Default = () => {
position: 1,
labels: [{ labelId: 'soft-skills', color: '#fff', active: true, name: 'Soft Skills' }],
description: 'hello!',
members: [{ userID: '1', displayName: 'Jordan Knott' }],
members: [{ userID: '1', profileIcon: { url: null, initials: null }, displayName: 'Jordan Knott' }],
}}
onCancel={action('cancel')}
onDueDateChange={action('due date change')}

View File

@ -55,7 +55,7 @@ const Login = ({ onSubmit }: LoginProps) => {
<FormLabel htmlFor="password">
Password
<FormTextInput
type="text"
type="password"
id="password"
name="password"
ref={register({ required: 'Password is required' })}

View File

@ -114,19 +114,15 @@ export const MemberManagerPopup = () => {
{popupData.isOpen && (
<PopupMenu title="Members" top={popupData.top} onClose={() => setPopupData(initalState)} left={popupData.left}>
<MemberManager
availableMembers={[{ userID: '1', displayName: 'Jordan Knott' }]}
availableMembers={[
{ userID: '1', displayName: 'Jordan Knott', profileIcon: { url: null, initials: null } },
]}
activeMembers={[]}
onMemberChange={action('member change')}
/>
</PopupMenu>
)}
<span
style={{
width: '60px',
textAlign: 'center',
margin: '25px auto',
cursor: 'pointer',
}}
ref={$buttonRef}
onClick={() => {
if ($buttonRef && $buttonRef.current) {
@ -162,7 +158,7 @@ export const DueDateManagerPopup = () => {
position: 1,
labels: [{ labelId: 'soft-skills', color: '#fff', active: true, name: 'Soft Skills' }],
description: 'hello!',
members: [{ userID: '1', displayName: 'Jordan Knott' }],
members: [{ userID: '1', profileIcon: { url: null, initials: null }, displayName: 'Jordan Knott' }],
}}
onCancel={action('cancel')}
onDueDateChange={action('due date change')}

View File

@ -4,27 +4,22 @@ import { mixin } from 'shared/utils/styles';
export const ProjectContent = styled.div`
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
`;
export const ProjectTitle = styled.span`
font-size: 18px;
font-weight: 700;
transition: transform 0.25s ease;
text-align: center;
`;
export const TeamTitle = styled.span`
margin-top: 5px;
font-size: 14px;
font-weight: normal;
text-align: center;
color: #c2c6dc;
`;
export const ProjectWrapper = styled.div<{ color: string }>`
display: flex;
align-items: center;
padding: 15px 25px;
border-radius: 20px;
${mixin.boxShadowCard}
@ -32,11 +27,10 @@ export const ProjectWrapper = styled.div<{ color: string }>`
color: #fff;
cursor: pointer;
margin: 0 10px;
width: 120px;
height: 120px;
align-items: center;
justify-content: center;
width: 240px;
height: 100px;
transition: transform 0.25s ease;
align-items: center;
&:hover {
transform: translateY(-5px);

View File

@ -35,7 +35,7 @@ export const Default = () => {
position: 1,
labels: [{ labelId: 'soft-skills', color: '#fff', active: true, name: 'Soft Skills' }],
description,
members: [{ userID: '1', displayName: 'Jordan Knott' }],
members: [{ userID: '1', profileIcon: { url: null, initials: null }, displayName: 'Jordan Knott' }],
}}
onTaskNameChange={action('task name change')}
onTaskDescriptionChange={(_task, desc) => setDescription(desc)}

View File

@ -97,9 +97,9 @@ type TaskDetailsProps = {
onTaskNameChange: (task: Task, newName: string) => void;
onTaskDescriptionChange: (task: Task, newDescription: string) => void;
onDeleteTask: (task: Task) => void;
onCloseModal: () => void;
onOpenAddMemberPopup: (task: Task, bounds: ElementBounds) => void;
onOpenAddLabelPopup: (task: Task, bounds: ElementBounds) => void;
onCloseModal: () => void;
};
const TaskDetails: React.FC<TaskDetailsProps> = ({
@ -112,6 +112,7 @@ const TaskDetails: React.FC<TaskDetailsProps> = ({
onOpenAddLabelPopup,
}) => {
const [editorOpen, setEditorOpen] = useState(false);
const [description, setDescription] = useState(task.description ?? '');
const [taskName, setTaskName] = useState(task.name);
const handleClick = () => {
setEditorOpen(!editorOpen);
@ -141,6 +142,7 @@ const TaskDetails: React.FC<TaskDetailsProps> = ({
onOpenAddLabelPopup(task, bounds);
}
};
console.log(task);
return (
<>
<TaskActions>
@ -172,9 +174,10 @@ const TaskDetails: React.FC<TaskDetailsProps> = ({
<TaskDetailsLabel>Description</TaskDetailsLabel>
{editorOpen ? (
<DetailsEditor
description={task.description ?? ''}
description={description}
onTaskDescriptionChange={newDescription => {
setEditorOpen(false);
setDescription(newDescription);
onTaskDescriptionChange(task, newDescription);
}}
onCancel={() => {
@ -182,7 +185,7 @@ const TaskDetails: React.FC<TaskDetailsProps> = ({
}}
/>
) : (
<TaskContent description={task.description ?? ''} onEditContent={handleClick} />
<TaskContent description={description} onEditContent={handleClick} />
)}
</TaskDetailsContent>
<TaskDetailsSidebar>
@ -190,10 +193,10 @@ const TaskDetails: React.FC<TaskDetailsProps> = ({
<TaskDetailAssignees>
{task.members &&
task.members.map(member => {
const initials = 'JK';
console.log(member);
return (
<TaskDetailAssignee key={member.userID}>
<ProfileIcon>{initials}</ProfileIcon>
<ProfileIcon>{member.profileIcon.initials ?? ''}</ProfileIcon>
</TaskDetailAssignee>
);
})}

View File

@ -37,8 +37,14 @@ export const Default = () => {
<>
<NormalizeStyles />
<BaseStyles />
<TopNavbar onNotificationClick={action('notifications click')} onProfileClick={onClick} />
{menu.isOpen && <DropdownMenu left={menu.left} top={menu.top} />}
<TopNavbar
firstName="Jordan"
lastName="Knott"
initials="JK"
onNotificationClick={action('notifications click')}
onProfileClick={onClick}
/>
{menu.isOpen && <DropdownMenu onLogout={action('on logout')} left={menu.left} top={menu.top} />}
</>
);
};

View File

@ -19,8 +19,11 @@ import {
type NavBarProps = {
onProfileClick: (bottom: number, right: number) => void;
onNotificationClick: () => void;
firstName: string;
lastName: string;
initials: string;
};
const NavBar: React.FC<NavBarProps> = ({ onProfileClick, onNotificationClick }) => {
const NavBar: React.FC<NavBarProps> = ({ onProfileClick, onNotificationClick, firstName, lastName, initials }) => {
const $profileRef: any = useRef(null);
const handleProfileClick = () => {
console.log('click');
@ -45,11 +48,13 @@ const NavBar: React.FC<NavBarProps> = ({ onProfileClick, onNotificationClick })
</NotificationContainer>
<ProfileContainer>
<ProfileNameWrapper>
<ProfileNamePrimary>Jordan Knott</ProfileNamePrimary>
<ProfileNamePrimary>
{firstName} {lastName}
</ProfileNamePrimary>
<ProfileNameSecondary>Manager</ProfileNameSecondary>
</ProfileNameWrapper>
<ProfileIcon ref={$profileRef} onClick={handleProfileClick}>
JK
{initials}
</ProfileIcon>
</ProfileContainer>
</GlobalActions>

View File

@ -15,6 +15,27 @@ export type Scalars = {
export type TaskLabel = {
__typename?: 'TaskLabel';
taskLabelID: Scalars['ID'];
labelColorID: Scalars['UUID'];
colorHex: Scalars['String'];
};
export type ProfileIcon = {
__typename?: 'ProfileIcon';
url?: Maybe<Scalars['String']>;
initials?: Maybe<Scalars['String']>;
};
export type ProjectMember = {
__typename?: 'ProjectMember';
userID: Scalars['ID'];
firstName: Scalars['String'];
lastName: Scalars['String'];
profileIcon: ProfileIcon;
};
export type RefreshToken = {
__typename?: 'RefreshToken';
tokenId: Scalars['ID'];
@ -28,16 +49,10 @@ export type UserAccount = {
userID: Scalars['ID'];
email: Scalars['String'];
createdAt: Scalars['Time'];
displayName: Scalars['String'];
firstName: Scalars['String'];
lastName: Scalars['String'];
username: Scalars['String'];
};
export type Organization = {
__typename?: 'Organization';
organizationID: Scalars['ID'];
createdAt: Scalars['Time'];
name: Scalars['String'];
teams: Array<Team>;
profileIcon: ProfileIcon;
};
export type Team = {
@ -45,16 +60,17 @@ export type Team = {
teamID: Scalars['ID'];
createdAt: Scalars['Time'];
name: Scalars['String'];
projects: Array<Project>;
};
export type Project = {
__typename?: 'Project';
projectID: Scalars['ID'];
teamID: Scalars['String'];
createdAt: Scalars['Time'];
name: Scalars['String'];
team: Team;
owner: ProjectMember;
taskGroups: Array<TaskGroup>;
members: Array<ProjectMember>;
};
export type TaskGroup = {
@ -74,6 +90,9 @@ export type Task = {
createdAt: Scalars['Time'];
name: Scalars['String'];
position: Scalars['Float'];
description?: Maybe<Scalars['String']>;
assigned: Array<ProjectMember>;
labels: Array<TaskLabel>;
};
export type ProjectsFilter = {
@ -88,15 +107,19 @@ export type FindProject = {
projectId: Scalars['String'];
};
export type FindTask = {
taskID: Scalars['UUID'];
};
export type Query = {
__typename?: 'Query';
organizations: Array<Organization>;
users: Array<UserAccount>;
findUser: UserAccount;
findProject: Project;
teams: Array<Team>;
findTask: Task;
projects: Array<Project>;
taskGroups: Array<TaskGroup>;
me: UserAccount;
};
@ -110,6 +133,11 @@ export type QueryFindProjectArgs = {
};
export type QueryFindTaskArgs = {
input: FindTask;
};
export type QueryProjectsArgs = {
input?: Maybe<ProjectsFilter>;
};
@ -121,7 +149,8 @@ export type NewRefreshToken = {
export type NewUserAccount = {
username: Scalars['String'];
email: Scalars['String'];
displayName: Scalars['String'];
firstName: Scalars['String'];
lastName: Scalars['String'];
password: Scalars['String'];
};
@ -131,7 +160,8 @@ export type NewTeam = {
};
export type NewProject = {
teamID: Scalars['String'];
userID: Scalars['UUID'];
teamID: Scalars['UUID'];
name: Scalars['String'];
};
@ -141,10 +171,6 @@ export type NewTaskGroup = {
position: Scalars['Float'];
};
export type NewOrganization = {
name: Scalars['String'];
};
export type LogoutUser = {
userID: Scalars['String'];
};
@ -191,20 +217,43 @@ export type DeleteTaskGroupPayload = {
taskGroup: TaskGroup;
};
export type AssignTaskInput = {
taskID: Scalars['UUID'];
userID: Scalars['UUID'];
};
export type UpdateTaskDescriptionInput = {
taskID: Scalars['UUID'];
description: Scalars['String'];
};
export type AddTaskLabelInput = {
taskID: Scalars['UUID'];
labelColorID: Scalars['UUID'];
};
export type RemoveTaskLabelInput = {
taskID: Scalars['UUID'];
taskLabelID: Scalars['UUID'];
};
export type Mutation = {
__typename?: 'Mutation';
createRefreshToken: RefreshToken;
createUserAccount: UserAccount;
createOrganization: Organization;
createTeam: Team;
createProject: Project;
createTaskGroup: TaskGroup;
updateTaskGroupLocation: TaskGroup;
deleteTaskGroup: DeleteTaskGroupPayload;
addTaskLabel: Task;
removeTaskLabel: Task;
createTask: Task;
updateTaskDescription: Task;
updateTaskLocation: Task;
updateTaskName: Task;
deleteTask: DeleteTaskPayload;
assignTask: Task;
logoutUser: Scalars['Boolean'];
};
@ -219,11 +268,6 @@ export type MutationCreateUserAccountArgs = {
};
export type MutationCreateOrganizationArgs = {
input: NewOrganization;
};
export type MutationCreateTeamArgs = {
input: NewTeam;
};
@ -249,11 +293,26 @@ export type MutationDeleteTaskGroupArgs = {
};
export type MutationAddTaskLabelArgs = {
input?: Maybe<AddTaskLabelInput>;
};
export type MutationRemoveTaskLabelArgs = {
input?: Maybe<RemoveTaskLabelInput>;
};
export type MutationCreateTaskArgs = {
input: NewTask;
};
export type MutationUpdateTaskDescriptionArgs = {
input: UpdateTaskDescriptionInput;
};
export type MutationUpdateTaskLocationArgs = {
input: NewTaskLocation;
};
@ -269,10 +328,33 @@ export type MutationDeleteTaskArgs = {
};
export type MutationAssignTaskArgs = {
input?: Maybe<AssignTaskInput>;
};
export type MutationLogoutUserArgs = {
input: LogoutUser;
};
export type AssignTaskMutationVariables = {
taskID: Scalars['UUID'];
userID: Scalars['UUID'];
};
export type AssignTaskMutation = (
{ __typename?: 'Mutation' }
& { assignTask: (
{ __typename?: 'Task' }
& Pick<Task, 'taskID'>
& { assigned: Array<(
{ __typename?: 'ProjectMember' }
& Pick<ProjectMember, 'userID' | 'firstName' | 'lastName'>
)> }
) }
);
export type CreateTaskMutationVariables = {
taskGroupID: Scalars['String'];
name: Scalars['String'];
@ -351,36 +433,92 @@ export type FindProjectQuery = (
& { findProject: (
{ __typename?: 'Project' }
& Pick<Project, 'name'>
& { taskGroups: Array<(
& { members: Array<(
{ __typename?: 'ProjectMember' }
& Pick<ProjectMember, 'userID' | 'firstName' | 'lastName'>
& { profileIcon: (
{ __typename?: 'ProfileIcon' }
& Pick<ProfileIcon, 'url' | 'initials'>
) }
)>, taskGroups: Array<(
{ __typename?: 'TaskGroup' }
& Pick<TaskGroup, 'taskGroupID' | 'name' | 'position'>
& { tasks: Array<(
{ __typename?: 'Task' }
& Pick<Task, 'taskID' | 'name' | 'position'>
& Pick<Task, 'taskID' | 'name' | 'position' | 'description'>
)> }
)> }
) }
);
export type FindTaskQueryVariables = {
taskID: Scalars['UUID'];
};
export type FindTaskQuery = (
{ __typename?: 'Query' }
& { findTask: (
{ __typename?: 'Task' }
& Pick<Task, 'taskID' | 'name' | 'description' | 'position'>
& { taskGroup: (
{ __typename?: 'TaskGroup' }
& Pick<TaskGroup, 'taskGroupID'>
), assigned: Array<(
{ __typename?: 'ProjectMember' }
& Pick<ProjectMember, 'userID' | 'firstName' | 'lastName'>
& { profileIcon: (
{ __typename?: 'ProfileIcon' }
& Pick<ProfileIcon, 'url' | 'initials'>
) }
)> }
) }
);
export type GetProjectsQueryVariables = {};
export type GetProjectsQuery = (
{ __typename?: 'Query' }
& { organizations: Array<(
{ __typename?: 'Organization' }
& Pick<Organization, 'name'>
& { teams: Array<(
& { projects: Array<(
{ __typename?: 'Project' }
& Pick<Project, 'projectID' | 'name'>
& { team: (
{ __typename?: 'Team' }
& Pick<Team, 'name'>
& { projects: Array<(
{ __typename?: 'Project' }
& Pick<Project, 'name' | 'projectID'>
)> }
)> }
& Pick<Team, 'teamID' | 'name'>
) }
)> }
);
export type MeQueryVariables = {};
export type MeQuery = (
{ __typename?: 'Query' }
& { me: (
{ __typename?: 'UserAccount' }
& Pick<UserAccount, 'firstName' | 'lastName'>
& { profileIcon: (
{ __typename?: 'ProfileIcon' }
& Pick<ProfileIcon, 'initials'>
) }
) }
);
export type UpdateTaskDescriptionMutationVariables = {
taskID: Scalars['UUID'];
description: Scalars['String'];
};
export type UpdateTaskDescriptionMutation = (
{ __typename?: 'Mutation' }
& { updateTaskDescription: (
{ __typename?: 'Task' }
& Pick<Task, 'taskID'>
) }
);
export type UpdateTaskGroupLocationMutationVariables = {
taskGroupID: Scalars['UUID'];
position: Scalars['Float'];
@ -425,6 +563,44 @@ export type UpdateTaskNameMutation = (
);
export const AssignTaskDocument = gql`
mutation assignTask($taskID: UUID!, $userID: UUID!) {
assignTask(input: {taskID: $taskID, userID: $userID}) {
assigned {
userID
firstName
lastName
}
taskID
}
}
`;
export type AssignTaskMutationFn = ApolloReactCommon.MutationFunction<AssignTaskMutation, AssignTaskMutationVariables>;
/**
* __useAssignTaskMutation__
*
* To run a mutation, you first call `useAssignTaskMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useAssignTaskMutation` returns a tuple that includes:
* - A mutate function that you can call at any time to execute the mutation
* - An object with fields that represent the current status of the mutation's execution
*
* @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
*
* @example
* const [assignTaskMutation, { data, loading, error }] = useAssignTaskMutation({
* variables: {
* taskID: // value for 'taskID'
* userID: // value for 'userID'
* },
* });
*/
export function useAssignTaskMutation(baseOptions?: ApolloReactHooks.MutationHookOptions<AssignTaskMutation, AssignTaskMutationVariables>) {
return ApolloReactHooks.useMutation<AssignTaskMutation, AssignTaskMutationVariables>(AssignTaskDocument, baseOptions);
}
export type AssignTaskMutationHookResult = ReturnType<typeof useAssignTaskMutation>;
export type AssignTaskMutationResult = ApolloReactCommon.MutationResult<AssignTaskMutation>;
export type AssignTaskMutationOptions = ApolloReactCommon.BaseMutationOptions<AssignTaskMutation, AssignTaskMutationVariables>;
export const CreateTaskDocument = gql`
mutation createTask($taskGroupID: String!, $name: String!, $position: Float!) {
createTask(input: {taskGroupID: $taskGroupID, name: $name, position: $position}) {
@ -576,6 +752,15 @@ export const FindProjectDocument = gql`
query findProject($projectId: String!) {
findProject(input: {projectId: $projectId}) {
name
members {
userID
firstName
lastName
profileIcon {
url
initials
}
}
taskGroups {
taskGroupID
name
@ -584,6 +769,7 @@ export const FindProjectDocument = gql`
taskID
name
position
description
}
}
}
@ -615,16 +801,62 @@ export function useFindProjectLazyQuery(baseOptions?: ApolloReactHooks.LazyQuery
export type FindProjectQueryHookResult = ReturnType<typeof useFindProjectQuery>;
export type FindProjectLazyQueryHookResult = ReturnType<typeof useFindProjectLazyQuery>;
export type FindProjectQueryResult = ApolloReactCommon.QueryResult<FindProjectQuery, FindProjectQueryVariables>;
export const FindTaskDocument = gql`
query findTask($taskID: UUID!) {
findTask(input: {taskID: $taskID}) {
taskID
name
description
position
taskGroup {
taskGroupID
}
assigned {
userID
firstName
lastName
profileIcon {
url
initials
}
}
}
}
`;
/**
* __useFindTaskQuery__
*
* To run a query within a React component, call `useFindTaskQuery` and pass it any options that fit your needs.
* When your component renders, `useFindTaskQuery` returns an object from Apollo Client that contains loading, error, and data properties
* you can use to render your UI.
*
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
*
* @example
* const { data, loading, error } = useFindTaskQuery({
* variables: {
* taskID: // value for 'taskID'
* },
* });
*/
export function useFindTaskQuery(baseOptions?: ApolloReactHooks.QueryHookOptions<FindTaskQuery, FindTaskQueryVariables>) {
return ApolloReactHooks.useQuery<FindTaskQuery, FindTaskQueryVariables>(FindTaskDocument, baseOptions);
}
export function useFindTaskLazyQuery(baseOptions?: ApolloReactHooks.LazyQueryHookOptions<FindTaskQuery, FindTaskQueryVariables>) {
return ApolloReactHooks.useLazyQuery<FindTaskQuery, FindTaskQueryVariables>(FindTaskDocument, baseOptions);
}
export type FindTaskQueryHookResult = ReturnType<typeof useFindTaskQuery>;
export type FindTaskLazyQueryHookResult = ReturnType<typeof useFindTaskLazyQuery>;
export type FindTaskQueryResult = ApolloReactCommon.QueryResult<FindTaskQuery, FindTaskQueryVariables>;
export const GetProjectsDocument = gql`
query getProjects {
organizations {
projects {
projectID
name
teams {
team {
teamID
name
projects {
name
projectID
}
}
}
}
@ -654,6 +886,75 @@ export function useGetProjectsLazyQuery(baseOptions?: ApolloReactHooks.LazyQuery
export type GetProjectsQueryHookResult = ReturnType<typeof useGetProjectsQuery>;
export type GetProjectsLazyQueryHookResult = ReturnType<typeof useGetProjectsLazyQuery>;
export type GetProjectsQueryResult = ApolloReactCommon.QueryResult<GetProjectsQuery, GetProjectsQueryVariables>;
export const MeDocument = gql`
query me {
me {
firstName
lastName
profileIcon {
initials
}
}
}
`;
/**
* __useMeQuery__
*
* To run a query within a React component, call `useMeQuery` and pass it any options that fit your needs.
* When your component renders, `useMeQuery` returns an object from Apollo Client that contains loading, error, and data properties
* you can use to render your UI.
*
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
*
* @example
* const { data, loading, error } = useMeQuery({
* variables: {
* },
* });
*/
export function useMeQuery(baseOptions?: ApolloReactHooks.QueryHookOptions<MeQuery, MeQueryVariables>) {
return ApolloReactHooks.useQuery<MeQuery, MeQueryVariables>(MeDocument, baseOptions);
}
export function useMeLazyQuery(baseOptions?: ApolloReactHooks.LazyQueryHookOptions<MeQuery, MeQueryVariables>) {
return ApolloReactHooks.useLazyQuery<MeQuery, MeQueryVariables>(MeDocument, baseOptions);
}
export type MeQueryHookResult = ReturnType<typeof useMeQuery>;
export type MeLazyQueryHookResult = ReturnType<typeof useMeLazyQuery>;
export type MeQueryResult = ApolloReactCommon.QueryResult<MeQuery, MeQueryVariables>;
export const UpdateTaskDescriptionDocument = gql`
mutation updateTaskDescription($taskID: UUID!, $description: String!) {
updateTaskDescription(input: {taskID: $taskID, description: $description}) {
taskID
}
}
`;
export type UpdateTaskDescriptionMutationFn = ApolloReactCommon.MutationFunction<UpdateTaskDescriptionMutation, UpdateTaskDescriptionMutationVariables>;
/**
* __useUpdateTaskDescriptionMutation__
*
* To run a mutation, you first call `useUpdateTaskDescriptionMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useUpdateTaskDescriptionMutation` returns a tuple that includes:
* - A mutate function that you can call at any time to execute the mutation
* - An object with fields that represent the current status of the mutation's execution
*
* @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
*
* @example
* const [updateTaskDescriptionMutation, { data, loading, error }] = useUpdateTaskDescriptionMutation({
* variables: {
* taskID: // value for 'taskID'
* description: // value for 'description'
* },
* });
*/
export function useUpdateTaskDescriptionMutation(baseOptions?: ApolloReactHooks.MutationHookOptions<UpdateTaskDescriptionMutation, UpdateTaskDescriptionMutationVariables>) {
return ApolloReactHooks.useMutation<UpdateTaskDescriptionMutation, UpdateTaskDescriptionMutationVariables>(UpdateTaskDescriptionDocument, baseOptions);
}
export type UpdateTaskDescriptionMutationHookResult = ReturnType<typeof useUpdateTaskDescriptionMutation>;
export type UpdateTaskDescriptionMutationResult = ApolloReactCommon.MutationResult<UpdateTaskDescriptionMutation>;
export type UpdateTaskDescriptionMutationOptions = ApolloReactCommon.BaseMutationOptions<UpdateTaskDescriptionMutation, UpdateTaskDescriptionMutationVariables>;
export const UpdateTaskGroupLocationDocument = gql`
mutation updateTaskGroupLocation($taskGroupID: UUID!, $position: Float!) {
updateTaskGroupLocation(input: {taskGroupID: $taskGroupID, position: $position}) {

View File

@ -0,0 +1,10 @@
mutation assignTask($taskID: UUID!, $userID: UUID!) {
assignTask(input: {taskID: $taskID, userID: $userID}) {
assigned {
userID
firstName
lastName
}
taskID
}
}

View File

@ -1,6 +1,15 @@
query findProject($projectId: String!) {
findProject(input: { projectId: $projectId }) {
name
members {
userID
firstName
lastName
profileIcon {
url
initials
}
}
taskGroups {
taskGroupID
name
@ -9,6 +18,7 @@ query findProject($projectId: String!) {
taskID
name
position
description
}
}
}

View File

@ -0,0 +1,20 @@
query findTask($taskID: UUID!) {
findTask(input: {taskID: $taskID}) {
taskID
name
description
position
taskGroup {
taskGroupID
}
assigned {
userID
firstName
lastName
profileIcon {
url
initials
}
}
}
}

View File

@ -1,12 +1,10 @@
query getProjects {
organizations {
projects {
projectID
name
teams {
team {
teamID
name
projects {
name
projectID
}
}
}
}

View File

@ -0,0 +1,9 @@
query me {
me {
firstName
lastName
profileIcon {
initials
}
}
}

View File

@ -0,0 +1,5 @@
mutation updateTaskDescription($taskID: UUID!, $description: String!) {
updateTaskDescription(input: {taskID: $taskID, description: $description}) {
taskID
}
}