add project members to project show page

This commit is contained in:
Gregor Vostrak
2024-04-10 03:06:48 +02:00
parent 5293bc7a05
commit b94c159af0
19 changed files with 731 additions and 46 deletions

View File

@@ -24,6 +24,18 @@ export type CreateProjectBody = ZodiosBodyByAlias<
'createProject'
>;
export type ProjectMemberResponse = ZodiosResponseByAlias<
SolidTimeApi,
'getProjectMembers'
>;
export type CreateProjectMemberBody = ZodiosBodyByAlias<
SolidTimeApi,
'createProjectMember'
>;
export type ProjectMember = ProjectMemberResponse['data'][0];
export type CreateTaskBody = ZodiosBodyByAlias<SolidTimeApi, 'createTask'>;
export type CreateClientBody = ZodiosBodyByAlias<SolidTimeApi, 'createClient'>;

View File

@@ -0,0 +1,3 @@
export function capitalizeFirstLetter(string: string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}

View File

@@ -1,6 +1,21 @@
export function formatMoney(amount: number, currency: string) {
export function formatMoney(
amount: number,
currency: string = getOrganizationCurrencyString()
) {
return new Intl.NumberFormat('en-US', {
style: 'currency',
currency: currency,
}).format(amount);
}
export function formatCents(amount: number) {
return formatMoney(amount / 100);
}
export function getOrganizationCurrencyString() {
return 'EUR';
}
export function getOrganizationCurrencySymbol() {
return '€';
}

View File

@@ -0,0 +1,71 @@
import { defineStore } from 'pinia';
import { api } from '../../../openapi.json.client';
import { computed, ref } from 'vue';
import type {
CreateProjectMemberBody,
ProjectMember,
ProjectMemberResponse,
} from '@/utils/api';
import { getCurrentOrganizationId } from '@/utils/useUser';
export const useProjectMembersStore = defineStore('project-members', () => {
const projectMemberResponse = ref<ProjectMemberResponse | null>(null);
async function fetchProjectMembers(projectId: string) {
const organization = getCurrentOrganizationId();
if (organization) {
projectMemberResponse.value = await api.getProjectMembers({
params: {
organization: organization,
project: projectId,
},
});
}
}
async function createProjectMember(
projectId: string,
projectMemberBody: CreateProjectMemberBody
) {
const organization = getCurrentOrganizationId();
if (organization) {
await api.createProjectMember(projectMemberBody, {
params: {
organization: organization,
project: projectId,
},
});
await fetchProjectMembers(projectId);
}
}
async function deleteProjectMember(
projectId: string,
projectMemberId: string
) {
const organizationId = getCurrentOrganizationId();
if (organizationId) {
await api.deleteProjectMember(
{},
{
params: {
organization: organizationId,
projectMember: projectMemberId,
},
}
);
await fetchProjectMembers(projectId);
}
}
const projectMembers = computed<ProjectMember[]>(
() => projectMemberResponse.value?.data || []
);
return {
projectMembers,
fetchProjectMembers,
createProjectMember,
deleteProjectMember,
};
});