From 6256cdabb8aad0b097f7645ac8313471722fcdda Mon Sep 17 00:00:00 2001 From: Gregor Vostrak Date: Wed, 10 Apr 2024 03:06:48 +0200 Subject: [PATCH 1/2] add project members to project show page --- openapi.json.client.ts | 15 ++ .../Components/Common/BillableRateInput.vue | 72 +++++++ resources/js/Components/Common/Card.vue | 7 + resources/js/Components/Common/CardTitle.vue | 25 ++- .../Common/Member/MemberCombobox.vue | 190 ++++++++++++++++++ .../Common/Member/MemberTableRow.vue | 5 +- .../Common/Project/ProjectTableHeading.vue | 2 +- .../Common/Project/ProjectTableRow.vue | 19 +- .../ProjectMemberCreateModal.vue | 71 +++++++ .../ProjectMemberMoreOptionsDropdown.vue | 57 ++++++ .../ProjectMember/ProjectMemberTable.vue | 53 +++++ .../ProjectMemberTableHeading.vue | 23 +++ .../ProjectMember/ProjectMemberTableRow.vue | 59 ++++++ resources/js/Components/Dropdown.vue | 2 +- resources/js/Pages/ProjectShow.vue | 74 ++++++- resources/js/utils/api.ts | 12 ++ resources/js/utils/format.ts | 3 + resources/js/utils/money.ts | 17 +- resources/js/utils/useProjectMembers.ts | 71 +++++++ 19 files changed, 731 insertions(+), 46 deletions(-) create mode 100644 resources/js/Components/Common/BillableRateInput.vue create mode 100644 resources/js/Components/Common/Card.vue create mode 100644 resources/js/Components/Common/Member/MemberCombobox.vue create mode 100644 resources/js/Components/Common/ProjectMember/ProjectMemberCreateModal.vue create mode 100644 resources/js/Components/Common/ProjectMember/ProjectMemberMoreOptionsDropdown.vue create mode 100644 resources/js/Components/Common/ProjectMember/ProjectMemberTable.vue create mode 100644 resources/js/Components/Common/ProjectMember/ProjectMemberTableHeading.vue create mode 100644 resources/js/Components/Common/ProjectMember/ProjectMemberTableRow.vue create mode 100644 resources/js/utils/format.ts create mode 100644 resources/js/utils/useProjectMembers.ts diff --git a/openapi.json.client.ts b/openapi.json.client.ts index 1d049e02..8037703d 100644 --- a/openapi.json.client.ts +++ b/openapi.json.client.ts @@ -1487,6 +1487,21 @@ const endpoints = makeApi([ }, ], }, + { + method: 'get', + path: '/v1/users/me/time-entries/active', + alias: 'getMyActiveTimeEntry', + description: `This endpoint is independent of organization.`, + requestFormat: 'json', + response: z.object({ data: TimeEntryResource }).passthrough(), + errors: [ + { + status: 404, + description: `Not found`, + schema: z.object({ message: z.string() }).passthrough(), + }, + ], + }, ]); export const api = new Zodios('/api', endpoints); diff --git a/resources/js/Components/Common/BillableRateInput.vue b/resources/js/Components/Common/BillableRateInput.vue new file mode 100644 index 00000000..8a53f4be --- /dev/null +++ b/resources/js/Components/Common/BillableRateInput.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/resources/js/Components/Common/Card.vue b/resources/js/Components/Common/Card.vue new file mode 100644 index 00000000..203b4548 --- /dev/null +++ b/resources/js/Components/Common/Card.vue @@ -0,0 +1,7 @@ + + + diff --git a/resources/js/Components/Common/CardTitle.vue b/resources/js/Components/Common/CardTitle.vue index 1696d69c..fff8f32f 100644 --- a/resources/js/Components/Common/CardTitle.vue +++ b/resources/js/Components/Common/CardTitle.vue @@ -8,16 +8,21 @@ defineProps<{ diff --git a/resources/js/Components/Common/Member/MemberCombobox.vue b/resources/js/Components/Common/Member/MemberCombobox.vue new file mode 100644 index 00000000..4d92c460 --- /dev/null +++ b/resources/js/Components/Common/Member/MemberCombobox.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/resources/js/Components/Common/Member/MemberTableRow.vue b/resources/js/Components/Common/Member/MemberTableRow.vue index b936542f..21903883 100644 --- a/resources/js/Components/Common/Member/MemberTableRow.vue +++ b/resources/js/Components/Common/Member/MemberTableRow.vue @@ -4,6 +4,7 @@ import { CheckCircleIcon, UserCircleIcon } from '@heroicons/vue/20/solid'; import { useClientsStore } from '@/utils/useClients'; import MemberMoreOptionsDropdown from '@/Components/Common/Member/MemberMoreOptionsDropdown.vue'; import TableRow from '@/Components/TableRow.vue'; +import { capitalizeFirstLetter } from '../../../utils/format'; const props = defineProps<{ member: Member; @@ -12,10 +13,6 @@ const props = defineProps<{ function removeMember() { useClientsStore().deleteClient(props.member.id); } - -function capitalizeFirstLetter(string: string) { - return string.charAt(0).toUpperCase() + string.slice(1); -}