Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 2 additions & 40 deletions client/src/common/CurrentUserProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,46 +1,8 @@
import { createContext, ReactElement, useContext } from "react";
import { gql, useQuery } from "@apollo/client";
import { useQuery } from "@apollo/client";
import RequestWrapper2 from "./RequestWrapper2";
import { Navigate, useLocation } from "react-router-dom";
import { AccessCheck } from "../queries/userQueries";

export const GET_CURRENT_USER = gql`
query GetCurrentUser {
currentUser {
id
ritUsername
firstName
lastName
setupComplete
archived
admin
holds {
removeDate
}
passedModules {
moduleID
moduleName
passedDate
}
accessChecks {
equipmentID
approved
}
cardTagID
trainingHolds {
moduleID
expires
}
manager
staff
trainer
currencyAccount{
id
balance
}
}
}
`;
import { AccessCheck, GET_CURRENT_USER } from "../queries/userQueries";

export interface PassedModule {
moduleID: number;
Expand Down Expand Up @@ -146,7 +108,7 @@
);
}

export function useCurrentUser(): CurrentUser {

Check warning on line 111 in client/src/common/CurrentUserProvider.tsx

View workflow job for this annotation

GitHub Actions / build

Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
const context = useContext(CurrentUserContext);

if (context === undefined) {
Expand Down
1 change: 0 additions & 1 deletion client/src/common/ModuleStatusRow.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import CheckCircleIcon from "@mui/icons-material/CheckCircle";
import CloseIcon from "@mui/icons-material/Close";
import { format } from "date-fns";
import { useQuery } from "@apollo/client";
import { GET_ACCESS_PROGRESSES } from "../queries/trainingQueries";
import { GET_PASSED_SUBMISSION } from "../queries/getSubmissions";
import { useCurrentUser } from "./CurrentUserProvider.js";
import RadioButtonUncheckedIcon from '@mui/icons-material/RadioButtonUnchecked';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { Divider, Grid, Stack, Typography } from "@mui/material";
import { useCurrentUser } from "../../../../common/CurrentUserProvider";
import { GET_ALL_TRAINING_MODULES } from "../../../maker/training/TrainingPage";
import { useQuery } from "@apollo/client";
import {
ModuleStatus,
Expand All @@ -12,6 +11,7 @@ import AccessCheck from "../../../../types/AccessCheck";
import EquipmentCard from "../../../../common/EquipmentCard";
import ModuleStatusRow from "../../../../common/ModuleStatusRow";
import { useIsMobile } from "../../../../common/IsMobileProvider";
import { GET_ALL_TRAINING_MODULES } from "../../../../queries/trainingQueries";

export default function UserTraingingsPage() {
const user = useCurrentUser();
Expand Down
2 changes: 1 addition & 1 deletion client/src/pages/lab_management/inventory/Ledger.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export default function Ledger() {


const matchingItems = queryResult.data?.Ledgers.filter((i: InventoryLedger) => {
var searchString = i.category + " " + i.initiator?.firstName + " " + i.initiator?.lastName + " " + i.items.toString() + " " + i.purchaser?.firstName + " " + i.purchaser?.lastName + " " + i.totalCost + " ";
const searchString = i.category + " " + i.initiator?.firstName + " " + i.initiator?.lastName + " " + i.items.toString() + " " + i.purchaser?.firstName + " " + i.purchaser?.lastName + " " + i.totalCost + " ";
return searchString.toLowerCase().includes(searchText.toLowerCase())
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ChangeEvent, useEffect, useState } from "react";
import { ChangeEvent, useState } from "react";
import {
Button,
FormControl,
Expand All @@ -7,7 +7,6 @@ import {
MenuItem,
Select,
Stack,
TextareaAutosize,
TextField,
Typography,
} from "@mui/material";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { ToolItemType, ToolItemTypeInput } from "../../../types/ToolItem";
import { useEffect, useState } from "react";
import PrettyModal from "../../../common/PrettyModal";
import { useNavigate, useParams } from "react-router-dom";
import { Box, Button, Divider, InputLabel, FormControl, MenuItem, Select, Stack, Switch, TextField, Tooltip, Typography, FormControlLabel, TextareaAutosize } from "@mui/material";
import { Box, Button, Divider, InputLabel, FormControl, MenuItem, Select, Stack, Switch, TextField, Tooltip, Typography, FormControlLabel } from "@mui/material";
import GET_ROOMS from "../../../queries/roomQueries";
import RequestWrapper from "../../../common/RequestWrapper";
import Room from "../../../types/Room";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useQuery } from "@apollo/client";
import { EquipmentInstance, GET_EQUIPMENT_INSTANCES } from "../../../queries/equipmentInstanceQueries";
import { Alert, Grid, Typography } from "@mui/material";
import { Alert, Grid } from "@mui/material";
import RequestWrapper2 from "../../../common/RequestWrapper2";
import EquipmentInstanceCard from "./EquipmentInstanceCard";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export default function DeleteTrainingModuleButton(props: DeleteTrainingModuleBu
try {
await deleteTrainingModule();
} catch (error) {
toast.error("Failed to delete training module");
toast.error(`Failed to delete training module: ${error}`);
return;
}
}
Expand Down
1 change: 0 additions & 1 deletion client/src/pages/lab_management/users/UserPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import BlockIcon from '@mui/icons-material/Block';
import DeleteIcon from '@mui/icons-material/Delete';
import ManageUserArchive from "./ManageUserArchive";
import { AccessCheckExtraInfo, GET_USER, Hold, Restriction } from "../../../queries/userQueries";
import NavLink from "../../../top_nav/NavLink";


const CREATE_HOLD = gql`
Expand Down
3 changes: 1 addition & 2 deletions client/src/pages/maker/signup/SignupPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,12 @@ import {
Typography,
} from "@mui/material";
import {
GET_CURRENT_USER,
useCurrentUser,
} from "../../../common/CurrentUserProvider";
import styled from "styled-components";
import { useMutation } from "@apollo/client";
import { useNavigate } from "react-router-dom";
import { UPDATE_STUDENT_PROFILE } from "../../../queries/userQueries";
import { GET_CURRENT_USER, UPDATE_STUDENT_PROFILE } from "../../../queries/userQueries";

const StyledFakeTextField = styled.div`
border-radius: 4px;
Expand Down
1 change: 0 additions & 1 deletion client/src/pages/maker/take_quiz/EquipmentProgessCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {
Typography,
Stack,
CardHeader} from "@mui/material";
import { useEffect, useState } from "react";
import { useQuery } from "@apollo/client";
import { GET_ACCESS_PROGRESSES } from "../../../queries/trainingQueries";
import RequestWrapper from "../../../common/RequestWrapper";
Expand Down
3 changes: 0 additions & 3 deletions client/src/pages/maker/take_quiz/QuizPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ import { Stack } from "@mui/system";
import { Typography } from "@mui/material";
import { useIsMobile } from "../../../common/IsMobileProvider";


// we're going to bring this back soon probably
// eslint-disable-next-line
function _shuffle(array: any[] | undefined) {
if (array === undefined) return undefined;
let currentIndex = array.length;
Expand Down
13 changes: 8 additions & 5 deletions client/src/pages/maker/take_quiz/QuizTaker.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import React, { useEffect, useState } from "react";
import { useState } from "react";
import { Module, QuizItemType } from "../../../types/Quiz";
import { useImmer } from "use-immer";
import { Button, Card, CardContent, Stack, Typography } from "@mui/material";
import Question from "./Question";
import styled, { css } from "styled-components";
import { gql, useMutation } from "@apollo/client";
import { GET_CURRENT_USER } from "../../../common/CurrentUserProvider";
import { useNavigate } from "react-router-dom";
import { toast } from "react-toastify";
import Markdown from 'react-markdown'
import GET_TRAINING_MODULES from "../../../queries/trainingQueries";
import { useIsMobile } from "../../../common/IsMobileProvider";
import { GET_CURRENT_USER } from "../../../queries/userQueries";


const StyledDiv = styled.div`
Expand Down Expand Up @@ -103,9 +103,12 @@ export default function QuizTaker({ module }: QuizTakerProps) {
(o) => o === optionID
);

optionIndex === -1
? draft[itemIndex].optionIDs.push(optionID)
: draft[itemIndex].optionIDs.splice(optionIndex, 1);
if (optionIndex === -1){
draft[itemIndex].optionIDs.push(optionID)
} else {
draft[itemIndex].optionIDs.splice(optionIndex, 1);
}

})
setQuizProgressed(true);
};
Expand Down
1 change: 0 additions & 1 deletion client/src/pages/maker/training/Explainer.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import React, { useEffect, useState } from "react";
import { Divider, Paper, Stack } from "@mui/material";
import ArrowForwardIcon from "@mui/icons-material/ArrowForward";
import ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';
Expand Down
15 changes: 3 additions & 12 deletions client/src/pages/maker/training/TrainingPage.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React, { useState } from "react";
import { useState } from "react";
import Page from "../../Page";
import Explainer from "./Explainer";
import { gql, useQuery } from "@apollo/client";
import { useQuery } from "@apollo/client";
import RequestWrapper2 from "../../../common/RequestWrapper2";
import { useCurrentUser } from "../../../common/CurrentUserProvider";
import {
Expand All @@ -10,16 +10,7 @@ import {
} from "../../../common/TrainingModuleUtils";
import TrainingModuleRow from "../../../common/TrainingModuleRow";
import SearchBar, { searchFilter } from "../../../common/SearchBar";

export const GET_ALL_TRAINING_MODULES = gql`
query GetAllTrainingModules {
modules {
id
name
archived
}
}
`;
import { GET_ALL_TRAINING_MODULES } from "../../../queries/trainingQueries";

/**
* This function returns a page that displays all training modules with their statuses for the current user, along with
Expand Down
8 changes: 1 addition & 7 deletions client/src/pages/makerspace_page/DefaultHoursBlock.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,9 @@ import { Button, Checkbox, FormControlLabel, InputAdornment, Stack, TextField, T
import { MakerspaceDefaultHours } from "../../types/MakerspaceHours";
import { useState } from "react";
import WatchLaterIcon from '@mui/icons-material/WatchLater';
import gql from "graphql-tag";
import { useMutation } from "@apollo/client";
import { toast } from "react-toastify";

export const UPDATE_DEFAULT_HOURS = gql`
mutation UpdateDefaultHours($hours: DefaultHoursInput!) {
updateDefaultHours(hours: $hours)
}
`;
import { UPDATE_DEFAULT_HOURS } from "../../queries/makerspaceQueries";

interface DefaultHoursBlockProps {
hours: MakerspaceDefaultHours;
Expand Down
2 changes: 1 addition & 1 deletion client/src/pages/makerspace_page/ManageRoomTrainings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { gql, useMutation, useQuery } from "@apollo/client";
import GET_TRAINING_MODULES from "../../queries/trainingQueries";
import RequestWrapper2 from "../../common/RequestWrapper2";
import { useState } from "react";
import { GET_ROOM } from "./MonitorRoomPage";
import { GET_ROOM } from "../../queries/roomQueries";
import { useParams } from "react-router-dom";

interface ManageRoomTrainingsProps {
Expand Down
43 changes: 2 additions & 41 deletions client/src/pages/makerspace_page/MonitorRoomPage.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { useState } from "react";
import { Box, Button, Stack, TextField, Typography } from "@mui/material";
import { gql, useMutation, useQuery } from "@apollo/client";
import { useMutation, useQuery } from "@apollo/client";
import { useNavigate, useParams } from "react-router-dom";
import RequestWrapper2 from "../../common/RequestWrapper2";
import RoomMakerspaceAssociation from "./RoomMakerspaceAssociation";
import { ARCHIVE_ROOM, DELETE_ROOM, UNARCHIVE_ROOM, UPDATE_ROOM_NAME } from "../../queries/roomQueries";
import { ARCHIVE_ROOM, DELETE_ROOM, GET_ROOM, UNARCHIVE_ROOM, UPDATE_ROOM_NAME } from "../../queries/roomQueries";
import ArchiveIcon from "@mui/icons-material/Archive";
import PublishIcon from "@mui/icons-material/Publish";
import DeleteIcon from "@mui/icons-material/Delete";
Expand All @@ -17,45 +17,6 @@ import ManageRoomTrainings from "./ManageRoomTrainings";
import { toast } from "react-toastify";
import EquipmentBlockDialog from "./EquipmentBlockDialog";

export const GET_ROOM = gql`
query GetRoom($id: ID!) {
room(id: $id) {
name
archived
makerspace {
id
name
}
recentSwipes {
id
user {
id
firstName
lastName
}
}
equipment {
id
name
archived
imageUrl
sopUrl
trainingModules {
id
name
}
numAvailable
numInUse
byReservationOnly
}
trainingModules {
id
name
}
}
}
`;

export interface Swipe {
id: string;
user: {
Expand Down
8 changes: 1 addition & 7 deletions client/src/pages/makerspace_page/SpecialHoursBlock.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
import { Checkbox, FormControlLabel, IconButton, InputAdornment, Stack, TextField, Typography } from "@mui/material";
import MakerspaceHours from "../../types/MakerspaceHours";
import WatchLaterIcon from '@mui/icons-material/WatchLater';
import gql from "graphql-tag";
import { useMutation } from "@apollo/client";
import DeleteIcon from '@mui/icons-material/Delete';

export const DELETE_SPECIAL_HOURS = gql`
mutation DeleteSpecialHours($day: DateTime!, $makerspaceID: ID!) {
deleteSpecialHours(day: $day, makerspaceID: $makerspaceID)
}
`;
import { DELETE_SPECIAL_HOURS } from "../../queries/makerspaceQueries";

interface SpecialHoursBlockProps {
hours: MakerspaceHours;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Autocomplete, Box, Button, FormControlLabel, Stack, Switch, TextField, ToggleButton, ToggleButtonGroup, Typography } from "@mui/material";
import { Autocomplete, Box, Button, Stack, TextField, ToggleButton, ToggleButtonGroup, Typography } from "@mui/material";
import { Equipment } from "./EditEquipmentPage";
import { ARCHIVE_EQUIPMENT, PUBLISH_EQUIPMENT, UPDATE_EQUIPMENT } from "../../../queries/equipmentQueries";
import { useMutation, useQuery } from "@apollo/client";
Expand Down Expand Up @@ -132,11 +132,6 @@ export default function EquipmentInformation(props: EquipmentInformationProps) {
return (
<Autocomplete
renderInput={(params: any) => <TextField {...params} label="Location" />}
/* Autocomplete's value prop wants undefined, not null.
* But if we give it undefined then it thinks it's an
* uncontrolled prop and throws a console error
* when we set the value. This is a MUI problem.
* @ts-ignore */
value={props.equipment.room}
options={rooms}
isOptionEqualToValue={(option, value) => option.id === value.id}
Expand Down Expand Up @@ -187,7 +182,7 @@ export default function EquipmentInformation(props: EquipmentInformationProps) {
setModuleIds([...moduleIDs, mID]);
}}
removeModule={(mID) => {
var temp = [...moduleIDs];
const temp = [...moduleIDs];
temp.splice(temp.indexOf(mID), 1);
setModuleIds(temp);
}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export default function EquipmentTrainings(props: EquipmentTrainingProps) {
return (
<RequestWrapper2 result={getModulesResult} render={(data) => {

const possibleModules = getModulesResult.data.modules.filter((m: ObjectSummary) => (
const possibleModules = data.modules.filter((m: ObjectSummary) => (
!props.equipmentModules.some((eMod) => m.id === eMod.id) // TODO: filter to this makerspace's + global trainings
));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ export default function NewEquipmentPage() {
});

const [name, setName] = useState("");
const [imageUrl, setImageUrl] = useState("");
const [sopUrl, setSopUrl] = useState("");
const [notes, setNotes] = useState("");
const [byReservation, setByReservation] = useState(false);
Expand All @@ -48,7 +47,7 @@ export default function NewEquipmentPage() {
name: name,
roomID: room.id,
moduleIDs: [],
imageUrl: imageUrl,
imageUrl: "",
sopUrl: sopUrl,
notes: notes,
byReservationOnly: byReservation,
Expand Down Expand Up @@ -93,11 +92,6 @@ export default function NewEquipmentPage() {
renderInput={(params: any) => (
<TextField {...params} required label="Location" />
)}
/* Autocomplete's value prop wants undefined, not null.
* But if we give it undefined then it thinks it's an
* uncontrolled prop and throws a console error
* when we set the value. This is a MUI problem.
* @ts-ignore */
value={room}
options={rooms}
isOptionEqualToValue={(option, value) => option.id === value.id}
Expand Down
Loading
Loading