Status
diff --git a/resources/js/Components/Common/Project/ProjectTableRow.vue b/resources/js/Components/Common/Project/ProjectTableRow.vue
index 43496ed6..3dd74760 100644
--- a/resources/js/Components/Common/Project/ProjectTableRow.vue
+++ b/resources/js/Components/Common/Project/ProjectTableRow.vue
@@ -54,24 +54,7 @@ function deleteProject() {
No client
-
+ {{ project.billable_rate ?? '--' }}
diff --git a/resources/js/Components/Common/ProjectMember/ProjectMemberCreateModal.vue b/resources/js/Components/Common/ProjectMember/ProjectMemberCreateModal.vue
new file mode 100644
index 00000000..daacf221
--- /dev/null
+++ b/resources/js/Components/Common/ProjectMember/ProjectMemberCreateModal.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+ Add Project Member
+
+
+
+
+
+
+
+ Cancel
+
+ Add Project Member
+
+
+
+
+
+
diff --git a/resources/js/Components/Common/ProjectMember/ProjectMemberMoreOptionsDropdown.vue b/resources/js/Components/Common/ProjectMember/ProjectMemberMoreOptionsDropdown.vue
new file mode 100644
index 00000000..109afb20
--- /dev/null
+++ b/resources/js/Components/Common/ProjectMember/ProjectMemberMoreOptionsDropdown.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Components/Common/ProjectMember/ProjectMemberTable.vue b/resources/js/Components/Common/ProjectMember/ProjectMemberTable.vue
new file mode 100644
index 00000000..e8b08b20
--- /dev/null
+++ b/resources/js/Components/Common/ProjectMember/ProjectMemberTable.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
No project members
+
Add the first project member!
+
Add a new Project Member
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Components/Common/ProjectMember/ProjectMemberTableHeading.vue b/resources/js/Components/Common/ProjectMember/ProjectMemberTableHeading.vue
new file mode 100644
index 00000000..39fd5970
--- /dev/null
+++ b/resources/js/Components/Common/ProjectMember/ProjectMemberTableHeading.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+ Name
+
+
+ Billable Rate
+
+
+ Role
+
+
+ Edit
+
+
+
+
+
diff --git a/resources/js/Components/Common/ProjectMember/ProjectMemberTableRow.vue b/resources/js/Components/Common/ProjectMember/ProjectMemberTableRow.vue
new file mode 100644
index 00000000..99f983c4
--- /dev/null
+++ b/resources/js/Components/Common/ProjectMember/ProjectMemberTableRow.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+ {{ member?.name }}
+
+
+
+ {{
+ projectMember.billable_rate
+ ? formatCents(projectMember.billable_rate)
+ : '--'
+ }}
+
+
+ {{ capitalizeFirstLetter(member?.role ?? '') }}
+
+
+
+
+
+
diff --git a/resources/js/Components/UserSettingsIcon.vue b/resources/js/Components/UserSettingsIcon.vue
index 5f1d0952..f57d9212 100644
--- a/resources/js/Components/UserSettingsIcon.vue
+++ b/resources/js/Components/UserSettingsIcon.vue
@@ -78,7 +78,9 @@ const logout = () => {
diff --git a/resources/js/Pages/ProjectShow.vue b/resources/js/Pages/ProjectShow.vue
index 2d0e1cf8..96c29fb6 100644
--- a/resources/js/Pages/ProjectShow.vue
+++ b/resources/js/Pages/ProjectShow.vue
@@ -3,13 +3,23 @@ import MainContainer from '@/Pages/MainContainer.vue';
import AppLayout from '@/Layouts/AppLayout.vue';
import { FolderIcon, PlusIcon } from '@heroicons/vue/16/solid';
import SecondaryButton from '@/Components/SecondaryButton.vue';
-import { computed, ref } from 'vue';
+import { computed, onMounted, ref } from 'vue';
import { useProjectsStore } from '@/utils/useProjects';
import { storeToRefs } from 'pinia';
-import { ChevronRightIcon } from '@heroicons/vue/20/solid';
+import {
+ ChevronRightIcon,
+ CheckCircleIcon,
+ UserGroupIcon,
+} from '@heroicons/vue/20/solid';
import { Link } from '@inertiajs/vue3';
import TaskCreateModal from '@/Components/Common/Task/TaskCreateModal.vue';
import TaskTable from '@/Components/Common/Task/TaskTable.vue';
+import CardTitle from '@/Components/Common/CardTitle.vue';
+import Card from '@/Components/Common/Card.vue';
+import ProjectMemberTable from '@/Components/Common/ProjectMember/ProjectMemberTable.vue';
+import ProjectMemberCreateModal from '@/Components/Common/ProjectMember/ProjectMemberCreateModal.vue';
+import { useProjectMembersStore } from '@/utils/useProjectMembers';
+
const { projects } = storeToRefs(useProjectsStore());
const project = computed(() => {
@@ -20,8 +30,14 @@ const project = computed(() => {
);
});
const createTask = ref(false);
+const createProjectMember = ref(false);
+const projectId = route()?.params?.project as string;
+
+const { projectMembers } = storeToRefs(useProjectMembersStore());
-const projectId: string = route().params.project;
+onMounted(() => {
+ useProjectMembersStore().fetchProjectMembers(projectId);
+});
@@ -37,7 +53,7 @@ const projectId: string = route().params.project;
class="flex items-center space-x-2.5">
- Projects
+ Projects
@@ -60,13 +76,49 @@ const projectId: string = route().params.project;
-