Skip to content

Commit

Permalink
Merge pull request #81 from COS301-SE-2024/feature/work-integration
Browse files Browse the repository at this point in the history
Feature/work integration
  • Loading branch information
JoshuaTristanWereley authored Jun 24, 2024
2 parents 917b67c + bcb0233 commit aaa8d17
Show file tree
Hide file tree
Showing 47 changed files with 13,428 additions and 12,314 deletions.
Binary file modified src/client/bun.lockb
Binary file not shown.
24,339 changes: 12,347 additions & 11,992 deletions src/client/package-lock.json

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions src/client/src/lib/components/admin/+Lectures.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import { onMount } from 'svelte';
import { lecturers, lecChange } from '$lib/store';
import { getUsers } from '$lib/services/users';
import AddToWorkSpace from '$lib/components/admin/modals/add/+AddToWorkSpace.svelte';
import AddLecturer from '$lib/components/admin/modals/add/+AddLecturer.svelte';
import EditLecturer from '$lib/components/admin/modals/edit/+EditLecturer.svelte';
import Remove from '$lib/components/admin/modals/remove/+Remove.svelte';
Expand Down Expand Up @@ -94,6 +95,7 @@
<TableBodyCell>
<div class="flex items-center gap-x-6">
<Remove id={lecturer._id} />
<AddToWorkSpace id={lecturer._id} />
<EditLecturer lecturerID={lecturer._id} />
</div>
</TableBodyCell>
Expand Down
2 changes: 2 additions & 0 deletions src/client/src/lib/components/admin/+Students.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import { onMount } from 'svelte';
import { students, stuChange } from '$lib/store';
import { getUsers } from '$lib/services/users';
import AddToWorkSpace from '$lib/components/admin/modals/add/+AddToWorkSpace.svelte';
import AddStudent from '$lib/components/admin/modals/add/+AddStudent.svelte';
import EditStudent from '$lib/components/admin/modals/edit/+EditStudent.svelte';
import Remove from '$lib/components/admin/modals/remove/+Remove.svelte';
Expand Down Expand Up @@ -92,6 +93,7 @@
<TableBodyCell>
<div class="flex items-center gap-x-6">
<Remove id={student._id} />
<AddToWorkSpace id={student._id} />
<EditStudent studentID={student._id} />
</div>
</TableBodyCell>
Expand Down
24 changes: 9 additions & 15 deletions src/client/src/lib/components/admin/+Workspaces.svelte
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
<script lang="ts">
import AddStuToWork from '$lib/components/admin/modals/add/+AddStuToWork.svelte';
import AddLecToWork from '$lib/components/admin/modals/add/+AddLecToWork.svelte';
import EditWorkspace from '$lib/components/admin/modals/edit/+EditWorkspace.svelte';
import AddWorkspace from '$lib/components/admin/modals/add/+AddWorkspace.svelte';
import { wrkspcs } from '$lib/store';
import {
Table,
TableBody,
Expand All @@ -16,9 +14,13 @@
} from 'flowbite-svelte';
import { SearchOutline } from 'flowbite-svelte-icons';
let headers = ['Name', 'Add Lecturer', 'Add Student', 'Edit'];
let headers = ['Name', 'Edit'];
export let workspaces;
wrkspcs.set(workspaces);
$: $wrkspcs;
</script>

<section class="container mx-auto my-2 px-4">
Expand All @@ -30,7 +32,7 @@
<span
class="rounded-full bg-green-100 px-3 py-1 text-xs text-green-600 dark:bg-gray-800 dark:text-green-400"
>
{workspaces.length}
{$wrkspcs.length}
{' '} workspaces
</span>
</div>
Expand All @@ -55,7 +57,7 @@
{/each}
</TableHead>
<TableBody tableBodyClass="divide-y">
{#each workspaces as workspace}
{#each $wrkspcs as workspace}
<TableBodyRow>
<TableBodyCell class="inline-flex items-center gap-x-3">
<div class="flex items-center gap-x-2">
Expand All @@ -68,15 +70,7 @@
</TableBodyCell>

<TableBodyCell>
<AddLecToWork />
</TableBodyCell>

<TableBodyCell>
<AddStuToWork />
</TableBodyCell>

<TableBodyCell>
<EditWorkspace />
<EditWorkspace id={workspace.id} />
</TableBodyCell>
</TableBodyRow>
{/each}
Expand Down
101 changes: 101 additions & 0 deletions src/client/src/lib/components/admin/modals/add/+AddToWorkSpace.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<script lang="ts">
import { Button, Modal, Label } from 'flowbite-svelte';
import { set_workspaces } from '$lib/services/workspaces';
import axios from 'axios';
import { wrkspcs } from '$lib/store';
import { Checkbox } from 'flowbite-svelte';
import IconLibraryPlus from '@tabler/icons-svelte/IconLibraryPlus.svelte';
export let id;
let formModal = false;
// Function to handle form submission
async function handleSubmit(event) {
console.log('add to workspace is being handled');
// Prevent the default form submission behavior
event.preventDefault();
const formData = new FormData(event.currentTarget);
formData.append('userId', id);
// Collect all checked workspaces and append them to the form data
let checkedWorkspaces = [];
const checkboxes = event.currentTarget.querySelectorAll('input[name="workspace"]:checked');
checkboxes.forEach((checkbox) => {
checkedWorkspaces.push(checkbox.value);
});
formData.append('Workspaces', JSON.stringify(checkedWorkspaces));
const response = await fetch('/admin/workspaces?/adduser', {
method: 'POST',
body: formData
});
console.log(response);
formModal = false;
}
let workspaces = [];
async function openModal() {
await set_workspaces();
const url = 'http://localhost:3000/users/' + id;
const response = await axios.get(url);
// Handle the response data
const res_data = response.data;
const wk_ids = [];
for (let j = 0; j < res_data.workspaces.length; j++) {
const wk_id = res_data.workspaces[j];
wk_ids.push(wk_id);
}
for (let j = 0; j < $wrkspcs.length; j++) {
const wk_id = $wrkspcs[j].id;
if (wk_ids.includes(wk_id)) {
workspaces.push({
name: $wrkspcs[j].name,
id: $wrkspcs[j].id,
checked: true
});
} else {
workspaces.push({
name: $wrkspcs[j].name,
id: $wrkspcs[j].id,
checked: false
});
}
}
formModal = true;
}
</script>

<button
on:click={openModal}
class="transition-colors duration-200 hover:text-green-500 focus:outline-none dark:text-gray-300 dark:hover:text-green-500"
>
<IconLibraryPlus stroke={2} />
</button>

<Modal bind:open={formModal} size="xs" autoclose={false} class="w-full">
<form class="flex flex-col space-y-6" on:submit={handleSubmit}>
<h3 class="mb-4 text-xl font-medium text-gray-900 dark:text-white">Add to Workspace</h3>

<Label for="workspaces" class="mb-2 mt-2 space-y-2">Workspaces</Label>
{#each workspaces as workspace}
<Checkbox name="workspace" value={workspace.id} bind:checked={workspace.checked}
>{workspace.name}</Checkbox
>
{/each}
<Button type="submit" class="w-full1">Add to Workspace</Button>
</form>
</Modal>
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@
if (organisationId !== 'non-existent') {
formData.append('organisationId', organisationId);
formData.append('createdBy', createdBy);
const response = await fetch('/admin/workspaces?/add', {
method: 'POST',
body: formData
});
console.log(response);
formModal = false;
} else {
Expand Down Expand Up @@ -51,11 +53,11 @@
<form class="flex flex-col space-y-6" on:submit={handleSubmit}>
<h3 class="mb-4 text-xl font-medium text-gray-900 dark:text-white">Create New Workspace</h3>

<Label for="org_name" class="mb-2 mt-2 space-y-2">Workspace Name</Label>
<Label for="work_name" class="mb-2 mt-2 space-y-2">Workspace Name</Label>
<Input
type="text"
id="org_name"
name="org_name"
id="work_name"
name="work_name"
placeholder="Example University"
size="md"
required
Expand Down
Original file line number Diff line number Diff line change
@@ -1,34 +1,24 @@
<script lang="ts">
import { Button, Modal, Label, Input } from 'flowbite-svelte';
import IconEdit from '@tabler/icons-svelte/IconEdit.svelte';
import { updateUser } from '$lib/services/users';
import { stuChange } from '$lib/store';
export let studentID = '';
export let id;
let formModal = false;
async function handleSubmit(event: Event) {
// Function to handle form submission
async function handleSubmit(event) {
console.log('edit workspace is being handled');
// Prevent the default form submission behavior
event.preventDefault();
const formData = new FormData(event.target as HTMLFormElement);
const formData = new FormData(event.currentTarget);
formData.append('work_id', id);
const name = formData.get('name')?.toString() ?? '';
const surname = formData.get('surname')?.toString() ?? '';
const email = formData.get('email')?.toString() ?? '';
const response = await fetch('/admin/workspaces?/edit', {
method: 'POST',
body: formData
});
const newInfo = {
name: name || undefined,
surname: surname || undefined,
email: email || undefined
};
try {
await updateUser(studentID, newInfo);
stuChange.set('new');
} catch (error) {
console.error('Create User Error:', error);
}
console.log(response);
formModal = false;
}
Expand All @@ -43,17 +33,21 @@

<Modal bind:open={formModal} size="xs" autoclose={false} class="w-full">
<form class="flex flex-col space-y-6" on:submit={handleSubmit}>
<h3 class="mb-4 text-xl font-medium text-gray-900 dark:text-white">Edit Student</h3>

<Label for="name" class="mb-2 mt-2 space-y-2">Name</Label>
<Input type="text" id="name" name="name" placeholder="John" size="md" />

<Label for="surname" class="mb-2 mt-2 space-y-2">Surname</Label>
<Input type="text" id="surname" name="surname" placeholder="Doe" size="md" />

<Label for="email" class="mb-2 mt-2 space-y-2">Email</Label>
<Input type="text" id="email" name="email" placeholder="email@example.com" size="md" />

<Button type="submit" class="w-full1">Edit Students</Button>
<h3 class="mb-4 text-xl font-medium text-gray-900 dark:text-white">Edit Workspace</h3>

<Label for="work_name" class="mb-2 mt-2 space-y-2">Workspace Name</Label>
<Input
type="text"
id="work_name"
name="work_name"
placeholder="Example University"
size="md"
required
/>

<Label for="upload_image" class="mb-2 mt-2 space-y-2">Upload image:</Label>
<Input type="file" id="image" name="image" />

<Button type="submit" class="w-full1">Edit Workspace</Button>
</form>
</Modal>
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
localStorage.removeItem('organisationID');
organisationName.set('');
goto('/organisation');
goto('/admin/organisation');
} catch (error) {
console.error('Delete organization error:', error);
}
Expand Down
25 changes: 2 additions & 23 deletions src/client/src/lib/components/lecturer/+Dashboard.svelte
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<script>
export let files;
import { Tabs, TabItem } from 'flowbite-svelte';
import Overview from '$lib/components/lecturer/+Overview.svelte';
</script>
Expand All @@ -7,29 +8,7 @@
<TabItem open>
<div slot="title" class="flex items-center gap-2">Overview</div>
<div>
<Overview />
</div>
</TabItem>

<TabItem>
<div slot="title" class="flex items-center gap-2">Study Material Upload</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400">
<b>Study Material:</b>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua.
</p>
</div>
</TabItem>

<TabItem>
<div slot="title" class="flex items-center gap-2">3D Material Upload</div>
<div>
<p class="text-sm text-gray-500 dark:text-gray-400">
<b>3D Material:</b>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua.
</p>
<Overview {files} />
</div>
</TabItem>
</Tabs>
22 changes: 17 additions & 5 deletions src/client/src/lib/components/lecturer/+Overview.svelte
Original file line number Diff line number Diff line change
@@ -1,21 +1,33 @@
<script>
export let files;
import FilesCard from '$lib/components/utils/lecturer/+FilesCard.svelte';
import ObjectCard from '$lib/components/utils/lecturer/+ObjectCard.svelte';
const stats = [
{
title: 'Students',
stat: '20'
stat: '2'
},
{
title: 'Lectures today',
stat: '3'
stat: '1'
},
{
title: 'Study Material',
stat: '4'
stat: files.length
}
];
let study_files = [];
let object_files = [];
files.forEach((file) => {
if (file.type === 'pdf') {
study_files.push(file);
} else {
object_files.push(file);
}
});
</script>

<div class="grid grid-cols-1 gap-5 bg-gray-100 p-2 sm:grid-cols-2 sm:p-5 lg:grid-cols-3">
Expand All @@ -42,6 +54,6 @@
</div>

<div class="grid grid-cols-1 gap-3 bg-gray-100 p-2 sm:grid-cols-1 sm:p-10 lg:grid-cols-2">
<FilesCard />
<ObjectCard />
<FilesCard files={study_files} />
<ObjectCard files={object_files} />
</div>
Loading

0 comments on commit aaa8d17

Please sign in to comment.