diff --git a/src/components/entity/modules/ModuleView.js b/src/components/entity/modules/ModuleView.js
index 1e31276..05de64d 100644
--- a/src/components/entity/modules/ModuleView.js
+++ b/src/components/entity/modules/ModuleView.js
@@ -23,49 +23,55 @@ const ModuleView = ({module, onDelete, onModify}) => {
// View -----------------------
- return (
-
+ return (
+
+
-
- View {module.ModuleCode} {module.ModuleName}
- Level {module.ModuleLevel}
- cohort {module.ModuleYearID}
-
- {module.ModuleLeaderID} (Module Leader)
-
-
+
+ View {module.ModuleCode} {module.ModuleName}
+ Level {module.ModuleLevel}
+ cohort {module.ModuleYearID}
+
+ {module.ModuleLeaderID} (Module Leader)
+
+
-
-
+
+ }
+ label={"Modify"}
+ onClick={onModify}
+ />
+ }
+ label={"Delete"}
+ // styleButton={{backgroundColor: 'mistyrose'}}
+ // styleLabel={{color: 'red'}}
+ onClick={requestDelete}
+ />
+
- );
+ );
};
const styles = StyleSheet.create({
container: {
gap: 15,
- }, infoTray: {
+ },
+ infoTray: {
gap: 5,
- }, image: {
+ },
+ image: {
borderRadius: 3,
- }, text: {
+ },
+ text: {
fontSize: 16,
- }, boldText: {
+ },
+ boldText: {
fontSize: 16, fontWeight: 'bold',
- }, dimText: {
+ },
+ dimText: {
color: "grey",
}
diff --git a/src/components/entity/users/UserForm.js b/src/components/entity/users/UserForm.js
index 4a6773c..8f3251a 100644
--- a/src/components/entity/users/UserForm.js
+++ b/src/components/entity/users/UserForm.js
@@ -20,15 +20,14 @@ const defaultUser = {
const UserForm = ({ originalUser, onSubmit, onCancel }) => {
// Initialisation -------------
-
+
const yearsEndpoint = 'https://softwarehub.uk/unibase/api/years';
- const usertypesEndpoint = 'https://softwarehub.uk/unibase/api/usertypes';
+ const userEndpoint = 'https://softwarehub.uk/unibase/api/user';
const [years, , isYearsLoading] = useLoad(yearsEndpoint);
- const [usertypes, , isUsertypesLoading] = useLoad(usertypesEndpoint);
+ const [users, , isUsersLoading] = useLoad(userEndpoint);
// State ----------------------
-
const [user, setUser] = useState(originalUser || {
...defaultUser,
UserID: Math.floor(100000 + Math.random() * 900000),
@@ -37,7 +36,6 @@ const UserForm = ({ originalUser, onSubmit, onCancel }) => {
});
// Handlers -------------------
-
const handleChange = (field, value) => {
setUser({ ...user, [field]: value });
};
@@ -45,15 +43,14 @@ const UserForm = ({ originalUser, onSubmit, onCancel }) => {
const handleSubmit = () => onSubmit(user);
// View -----------------------
-
const submitLabel = originalUser ? 'Modify' : 'Add';
const submitIcon = originalUser ? : ;
const levels = [
- { value: '4', label: 'Level 4' },
- { value: '5', label: 'Level 5' },
- { value: '6', label: 'Level 6' },
- { value: '7', label: 'Level 7' }
+ { value: 4, label: 'Level 4' },
+ { value: 5, label: 'Level 5' },
+ { value: 6, label: 'Level 6' },
+ { value: 7, label: 'Level 7' }
];
return (
@@ -81,29 +78,27 @@ const UserForm = ({ originalUser, onSubmit, onCancel }) => {
onChange={(value) => handleChange('UserEmail', value)}
/>
+
handleChange('UserLevel', value)}
+ />
+
{isYearsLoading ? (
- Loading Levels...
+ Loading Years...
) : (
handleChange('UserLevel', value)}
- isLoading={isYearsLoading}
+ label='Year/Cohort'
+ value={user.UserYearID}
+ onChange={(value) => handleChange('UserYearID', value)}
+ prompt='Select year/cohort...'
+ options={years}
/>
)}
- handleChange('UserYearID', value)}
- prompt='Select year/cohort...'
- options={years}
- isLoading={isYearsLoading}
- />
-
- {isUsertypesLoading ? (
+ {isUsersLoading ? (
Loading User Types...
) : (
{
value={user.UserUsertypeID}
onChange={(value) => handleChange('UserUsertypeID', value)}
prompt='Select user type...'
- options={usertypes}
- isLoading={isUsertypesLoading}
+ options={users}
/>
)}
diff --git a/src/components/entity/users/UserItem.js b/src/components/entity/users/UserItem.js
index 90878df..c693e05 100644
--- a/src/components/entity/users/UserItem.js
+++ b/src/components/entity/users/UserItem.js
@@ -1,25 +1,24 @@
-import {StyleSheet, Text, View, Pressable} from "react-native";
+import { StyleSheet, Text, View, Pressable } from "react-native";
-const UserItem = ({user, onSelect}) => {
- // Initialisation -------------
- // State ----------------------
- // Handlers -------------------
- // View -----------------------
+const UserItem = ({ user, onSelect }) => {
+ // Initialisation -------------
+ // State ----------------------
+ // Handlers -------------------
+ // View -----------------------
return (
- onSelect(user)}>
-
+ onSelect(user)}>
+
- {user.UserCode} {user.UserName}
+ `${user.UserFirstname} ${user.UserLastname}`
);
};
-
const styles = StyleSheet.create({
- usersItem: {
+ userItem: {
paddingVertical: 15,
borderBottomWidth: 1,
borderBottomColor: "lightgray",
@@ -29,4 +28,4 @@ const styles = StyleSheet.create({
},
});
-export default UserItem;
\ No newline at end of file
+export default UserItem;
diff --git a/src/components/entity/users/UserList.js b/src/components/entity/users/UserList.js
index 1bf6d8f..5d6ea47 100644
--- a/src/components/entity/users/UserList.js
+++ b/src/components/entity/users/UserList.js
@@ -2,19 +2,19 @@ import {StyleSheet, ScrollView} from "react-native";
import UserItem from "./UserItem";
import React from "react";
-const UserList = ({modules, onSelect}) => {
+const UserList = ({users, onSelect}) => {
// Initialisation -------------
// State ----------------------
// Handlers -------------------
// View -----------------------
return (
-
- {modules.map((module) => {
+
+ {users.map((user) => {
return (
)
@@ -26,7 +26,7 @@ const UserList = ({modules, onSelect}) => {
const styles = StyleSheet.create({
- modulesContainer: {},
+ usersContainer: {},
});
export default UserList;
\ No newline at end of file
diff --git a/src/components/entity/users/UserView.js b/src/components/entity/users/UserView.js
index 1557d06..7ee7040 100644
--- a/src/components/entity/users/UserView.js
+++ b/src/components/entity/users/UserView.js
@@ -1,74 +1,59 @@
-import {Alert, StyleSheet, Text, View} from "react-native";
+import { StyleSheet, Text, View } from "react-native";
import FullWidthImage from "react-native-fullwidth-image";
-import {Button, ButtonTray} from "../../UI/Button";
-import Icons from "../../UI/Icons.js"
+import Icons from "../../UI/Icons";
+import { ListItem } from "../../UI/List";
-const UserView = ({module, onDelete, onModify}) => {
- // Initialisation -------------
- // State ----------------------
- // Handlers -------------------
+const UserItem = ({ user, onSelect }) => {
+ // Initialisation -------------
- const handleDelete = () => onDelete(module);
+ const fullName = `${user.UserFirstname} ${user.UserLastname}`;
- const requestDelete = () => {
- Alert.alert(
- 'Delete Warning',
- `Are you sure you want to delete module ${module.ModuleCode} ${module.ModuleName}?`,
- [
- {text: 'cancel'},
- {text: 'Delete', onPress: handleDelete}
- ]
- );
- }
+ // State ----------------------
+ // Handlers -------------------
- // View -----------------------
+ const handleSelect = () => onSelect(user);
- return (
-
+ // View -----------------------
-
- View {module.ModuleCode} {module.ModuleName}
- Level {module.ModuleLevel}
- cohort {module.ModuleYearID}
-
- {module.ModuleLeaderID} (Module Leader)
-
-
-
-
- }
- label={"Modify"}
- onClick={onModify}
+ return (
+
+
- }
- label={"Delete"}
- // styleButton={{backgroundColor: 'mistyrose'}}
- // styleLabel={{color: 'red'}}
- onClick={requestDelete}
- />
-
- );
+
+ {fullName}
+ {user.UserEmail}
+
+ {user.UserUsertypeName || 'Unknown Type'}
+ (Level {user.UserLevel})
+
+
+
+
+
+ );
};
-
const styles = StyleSheet.create({
- container: {
- gap: 15,
- }, infoTray: {
- gap: 5,
- }, image: {
+ image: {
borderRadius: 3,
- }, text: {
+ },
+ infoTray: {
+ gap: 5,
+ flex: 1,
+ },
+ text: {
fontSize: 16,
- }, boldText: {
- fontSize: 16, fontWeight: 'bold',
- }, dimText: {
+ },
+ boldText: {
+ fontSize: 16,
+ fontWeight: 'bold',
+ },
+ dimText: {
color: "grey",
- }
-
+ },
});
-export default UserView;
\ No newline at end of file
+export default UserItem;
diff --git a/src/components/screens/ModuleListScreen.js b/src/components/screens/ModuleListScreen.js
index 1a1fab1..0c7e2d5 100644
--- a/src/components/screens/ModuleListScreen.js
+++ b/src/components/screens/ModuleListScreen.js
@@ -2,9 +2,6 @@
import {LogBox, Text} from "react-native";
import Screen from "../layout/Screen";
import ModuleList from "../entity/modules/ModuleList";
-// import API from "../API/API";
-// import initialModules from "../../data/modules.js";
-// import RenderCount from "../UI/RenderCount";
import {Button, ButtonTray} from "../UI/Button";
import Icons from "../UI/Icons";
import useLoad from "../API/useLoad";
@@ -14,8 +11,7 @@ const ModuleListScreen = ({navigation}) => {
// Initialisation -------------
// let modules = initialModules;
LogBox.ignoreLogs(['Non-serializable values were found in the navigation state']);
-
-
+
const modulesEndpoint = 'https://softwarehub.uk/unibase/api/modules';
// State ----------------------
diff --git a/src/components/screens/UserListScreen.js b/src/components/screens/UserListScreen.js
index c536f97..062426f 100644
--- a/src/components/screens/UserListScreen.js
+++ b/src/components/screens/UserListScreen.js
@@ -1,42 +1,32 @@
-// import {useState, useEffect} from "react";
-import {LogBox, Text} from "react-native";
+import { LogBox, Text } from "react-native";
import Screen from "../layout/Screen";
-import {Button, ButtonTray} from "../UI/Button";
+import UserList from "../entity/users/UserList";
+import { Button, ButtonTray } from "../UI/Button";
import Icons from "../UI/Icons";
import useLoad from "../API/useLoad";
-import {createDrawerNavigator} from "@react-navigation/drawer";
-import ModuleViewScreen from "./ModuleViewScreen";
-import UserViewScreen from "./UserViewScreen";
-
-const UserListScreen = ({navigation}) => {
-// Initialisation -------------
-// let modules = initialModules;
+const UserListScreen = ({ navigation }) => {
+ // Initialisation -------------
LogBox.ignoreLogs(['Non-serializable values were found in the navigation state']);
- const Drawer = createDrawerNavigator();
-
const usersEndpoint = 'https://softwarehub.uk/unibase/api/users';
-// State ----------------------
-
+ // State ----------------------
const [users, setUsers, isLoading, loadUsers] = useLoad(usersEndpoint);
-// Handlers -------------------
-
+ // Handlers -------------------
const handleDelete = (user) =>
- setUsers(users.filter((item) => item.UserID !== module.UserID));
-
+ setUsers(users.filter((item) => item.UserID !== user.UserID));
const onDelete = (user) => {
handleDelete(user);
navigation.goBack();
- }
+ };
const handleAdd = (user) => setUsers([...users, user]);
const handleModify = (updatedUser) => setUsers(
- users.map((user) => (module.UserID === updatedUser.UserID) ? updatedUser : user),
+ users.map((user) => (user.UserID === updatedUser.UserID) ? updatedUser : user),
);
const onAdd = (user) => {
@@ -46,45 +36,31 @@ const UserListScreen = ({navigation}) => {
const onModify = (user) => {
handleModify(user);
- navigation.replace('UserViewScreen', {user, onDelete, onModify});
+ navigation.replace('UserViewScreen', { user, onDelete, onModify });
};
- const goToViewScreen = (module) =>
- navigation.navigate('UserViewScreen', {user, onDelete, onModify});
+ const goToViewScreen = (user) =>
+ navigation.navigate('UserViewScreen', { user, onDelete, onModify });
const goToAddScreen = () =>
- navigation.navigate('UserAddScreen', {onAdd});
+ navigation.navigate('UserAddScreen', { onAdd });
const handleSwitchToModules = () => {
- navigation.navigate("UserListScreen");
-
-
-// View -----------------------
-
- return (
-
-
-
-
-
-
-
- {/**/}
-
- } onClick={goToAddScreen}/>
-
-
- {isLoading && Loading Records...}
-
-
-
-
- );
+ navigation.navigate("ModuleListScreen");
};
+
+ // View -----------------------
+ return (
+ }>
+
+ } onClick={goToAddScreen} />
+
+
+ {isLoading && Loading Records...}
+
+
+
+ );
};
-// const styles = StyleSheet.create({});
-
export default UserListScreen;
-
-
diff --git a/src/data/users.js b/src/data/users.js
new file mode 100644
index 0000000..7359659
--- /dev/null
+++ b/src/data/users.js
@@ -0,0 +1,84 @@
+const users = [
+ {
+ UserID: 820,
+ UserFirstname: 'Graeme',
+ UserLastname: 'Jones',
+ UserEmail: 'Ku06696@kingston.ac.uk',
+ UserImageURL:
+ 'https://images.generated.photos/Zx-gNUWFq9NPQDPRLEJQQPWx19QhpKGSAnzIPFUDz3k/rs:fit:512:512/wm:0.95:sowe:18:18:0.33/czM6Ly9pY29uczgu/Z3Bob3Rvcy1wcm9k/LnBob3Rvcy92Ml8w/MDM4MjcxLmpwZw.jpg',
+ UserType: 'Staff',
+ UserYear: null,
+ },
+ {
+ UserID: 824,
+ UserFirstname: 'Paul',
+ UserLastname: 'Knave',
+ UserEmail: 'K1234567@kingston.ac.uk',
+ UserImageURL:
+ 'https://images.generated.photos/IitdqDaBBrr4auYZFuuC_dplp3OtwU2cCuN4q35rN8M/rs:fit:256:256/czM6Ly9pY29uczgu/Z3Bob3Rvcy1wcm9k/LnBob3Rvcy92Ml8w/NDcyMTg5LmpwZw.jpg',
+ UserType: 'Staff',
+ UserYear: null,
+ },
+ {
+ UserID: 527,
+ UserFirstname: 'Justin',
+ UserLastname: 'TWUMASI',
+ UserEmail: 'K3346661@kingston.ac.uk',
+ UserImageURL:
+ 'https://images.generated.photos/1zzVOGo2BC7zlIbuqtT9E03KbcRrCFw0CeIkCRH-pQo/rs:fit:256:256/czM6Ly9pY29uczgu/Z3Bob3Rvcy1wcm9k/LnBob3Rvcy92M18w/OTU2NTI4LmpwZw.jpg',
+ UserType: 'Student',
+ UserYear: '2022-23',
+ },
+ {
+ UserID: 287,
+ UserFirstname: 'Faris',
+ UserLastname: 'AHMED',
+ UserEmail: 'K3265517@kingston.ac.uk',
+ UserImageURL:
+ 'https://images.generated.photos/BdRHDOlzfO2nY3cm9SJuBaf_LPCCv0tzUq3hSv6-Ub8/rs:fit:256:256/czM6Ly9pY29uczgu/Z3Bob3Rvcy1wcm9k/LnBob3Rvcy92M18w/NDYzODY2LmpwZw.jpg',
+ UserType: 'Student',
+ UserYear: '2022-23',
+ },
+ {
+ UserID: 467,
+ UserFirstname: 'Tobi',
+ UserLastname: 'OLU',
+ UserEmail: 'K8769678@kingston.ac.uk',
+ UserImageURL:
+ 'https://images.generated.photos/JaFMncOoAFAerEyw_xWIeFMjzgfkkseT_oGEyP6CgQI/rs:fit:256:256/czM6Ly9pY29uczgu/Z3Bob3Rvcy1wcm9k/LnBob3Rvcy92M18w/MzI5MTY3LmpwZw.jpg',
+ UserType: 'Student',
+ UserYear: '2022-23',
+ },
+ {
+ UserID: 534,
+ UserFirstname: 'Artur',
+ UserLastname: 'WAGNER',
+ UserEmail: 'K6664833@kingston.ac.uk',
+ UserImageURL:
+ 'https://images.generated.photos/XRfSKWBVup-KW5T_lvS0tyce6rGaEBKUDWvk6lxZ8x8/rs:fit:256:256/czM6Ly9pY29uczgu/Z3Bob3Rvcy1wcm9k/LnBob3Rvcy92M18w/MDIwNTQwLmpwZw.jpg',
+ UserType: 'Student',
+ UserYear: '2022-23',
+ },
+ {
+ UserID: 515,
+ UserFirstname: 'Luke',
+ UserLastname: 'STEVENS',
+ UserEmail: 'K6845215@kingston.ac.uk',
+ UserImageURL:
+ 'https://images.generated.photos/XtsBlRxQLgWzFAtycpalUkvVdf9tAvCfC9vEPtSVaxY/rs:fit:256:256/czM6Ly9pY29uczgu/Z3Bob3Rvcy1wcm9k/LnBob3Rvcy92M18w/MzQ2ODE2LmpwZw.jpg',
+ UserType: 'Student',
+ UserYear: '2022-23',
+ },
+ {
+ UserID: 276,
+ UserFirstname: 'Hashim',
+ UserLastname: 'ABDALLAH',
+ UserEmail: 'K1083353@kingston.ac.uk',
+ UserImageURL:
+ 'https://images.generated.photos/eL1-OlKDqGf1IaL_b2O8aSj7osDX_eFVHZEoJ0f3ZV0/rs:fit:256:256/czM6Ly9pY29uczgu/Z3Bob3Rvcy1wcm9k/LnBob3Rvcy92M18w/NzYwNjc0LmpwZw.jpg',
+ UserType: 'Student',
+ UserYear: '2022-23',
+ },
+];
+
+export default users;
\ No newline at end of file