feature: Organizations form UX flow now matches the needs.

This commit is contained in:
2026-05-06 18:55:42 +03:30
parent 6258477860
commit bb44270795
5 changed files with 700 additions and 218 deletions

View File

@@ -10,13 +10,21 @@ export interface CounterpartSearchResultDto {
export interface CounterpartItemDto {
id: string;
kind: 'LINK' | 'INVITATION';
requestedByOrganizationId: string | null;
counterpartOrganizationId: string | null;
organizationName: string;
ownerEmail: string;
phone: string | null;
status: 'PENDING' | 'ACTIVE' | 'REJECTED' | 'EXPIRED';
invitationUrl: string | null;
createdAt: string;
acceptedAt: string | null;
}
export interface OrganizationInvitationHistoryItemDto {
id: string;
organizationName: string;
ownerEmail: string;
status: 'PENDING' | 'ACTIVE' | 'REJECTED' | 'EXPIRED';
createdAt: string;
acceptedAt: string | null;
}
@@ -32,6 +40,14 @@ export const organizationApi = {
return response.data;
},
listInvitations: async (): Promise<{
success: boolean;
data: { items: OrganizationInvitationHistoryItemDto[] };
}> => {
const response = await apiClient.get('/organizations/invitations');
return response.data;
},
createLink: async (
targetOrganizationId: string,
): Promise<{ success: boolean; data: { id: string; status: 'PENDING' | 'ACTIVE' | 'REJECTED' } }> => {
@@ -39,6 +55,19 @@ export const organizationApi = {
return response.data;
},
respondLink: async (
linkId: string,
action: 'ACCEPT' | 'REJECT',
): Promise<{ success: boolean; data: { id: string; status: 'PENDING' | 'ACTIVE' | 'REJECTED' } }> => {
const response = await apiClient.patch(`/organizations/links/${linkId}/respond`, { action });
return response.data;
},
deleteLink: async (linkId: string): Promise<{ success: boolean; data: { id: string }; message: string }> => {
const response = await apiClient.delete(`/organizations/links/${linkId}`);
return response.data;
},
invite: async (body: {
organizationName: string;
ownerEmail: string;
@@ -48,6 +77,13 @@ export const organizationApi = {
return response.data;
},
getInvitationLink: async (
invitationId: string,
): Promise<{ success: boolean; data: { invitationId: string; invitationUrl: string } }> => {
const response = await apiClient.post(`/organizations/invitations/${invitationId}/link`);
return response.data;
},
previewInvite: async (
token: string,
): Promise<{