diff --git a/src/pages/groups/CreateGroups.tsx b/src/pages/groups/CreateGroups.tsx index ab7699f..ec7d14f 100644 --- a/src/pages/groups/CreateGroups.tsx +++ b/src/pages/groups/CreateGroups.tsx @@ -23,6 +23,8 @@ import { type StaffData, } from '@/fineract-api' import { getConfiguration } from '@/lib/fineract-openapi' +import { inputToFineractDate } from '@/lib/date-utils' +import type { ExtendedPostGroupsRequest } from '@/pages/groups/types' import { useTranslation } from 'react-i18next' const groupsApi = new GroupsApi(getConfiguration()) @@ -79,15 +81,17 @@ const CreateGroups = () => { await groupsApi.create8({ name: formData.name, officeId: Number(formData.officeId), - // staffId: formData.staffId, active: formData.active, - // externalId: formData.externalId || undefined, - // submittedOnDate: formData.submittedOnDate || undefined, - // activationDate: - // formData.active && formData.activationDate - // ? formData.activationDate - // : undefined, - }) + staffId: formData.staffId ? Number(formData.staffId) : undefined, + externalId: formData.externalId.trim() || undefined, + submittedOnDate: inputToFineractDate(formData.submittedOnDate), + activationDate: + formData.active && formData.activationDate + ? inputToFineractDate(formData.activationDate) + : undefined, + dateFormat: 'dd MMMM yyyy', + locale: 'en', + } as ExtendedPostGroupsRequest) navigate('/groups') } catch (e) { console.error('Failed to create group', e) diff --git a/src/pages/groups/groups-view/group-actions/EditGroups.tsx b/src/pages/groups/groups-view/group-actions/EditGroups.tsx index b77e603..2f5d650 100644 --- a/src/pages/groups/groups-view/group-actions/EditGroups.tsx +++ b/src/pages/groups/groups-view/group-actions/EditGroups.tsx @@ -15,7 +15,10 @@ import { Label } from '@/components/ui/label' import { Input } from '@/components/ui/input' import { GroupsApi } from '@/fineract-api' -import type { ExtendedGroupResponse } from '@/pages/groups/types' +import type { + ExtendedGroupResponse, + ExtendedPutGroupsRequest, +} from '@/pages/groups/types' import { getConfiguration } from '@/lib/fineract-openapi' import { dateArrayToInputValue, inputToFineractDate } from '@/lib/date-utils' import { useTranslation } from 'react-i18next' @@ -60,7 +63,7 @@ const EditGroups = () => { groupData?.timeline?.activatedOnDate as number[] | null ) ) - // externalId left blank on purpose, user must fill if needed + setExternalId(groupData.externalId ?? '') } catch (err) { console.error("Can't fetch group", err) } @@ -78,7 +81,7 @@ const EditGroups = () => { if (!id) return setSaving(true) try { - const payload: Record = { + const payload: ExtendedPutGroupsRequest = { name: name.trim(), locale: 'en', dateFormat: 'dd MMMM yyyy', @@ -89,9 +92,9 @@ const EditGroups = () => { if (sub) payload.submittedOnDate = sub const act = inputToFineractDate(activationOn) if (act) payload.activationDate = act - if (externalId.trim()) payload.externalId = externalId.trim() + payload.externalId = externalId.trim() || undefined - await groupsApi.update13(Number(id), { name: payload.name as string }) + await groupsApi.update13(Number(id), payload) navigate(`/groups/${id}/general`) } catch (err) { console.error('Failed to update group', err) diff --git a/src/pages/groups/types.ts b/src/pages/groups/types.ts index 5d60a74..adbb07b 100644 --- a/src/pages/groups/types.ts +++ b/src/pages/groups/types.ts @@ -5,7 +5,11 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -import type { GetGroupsGroupIdResponse } from '@/fineract-api' +import type { + GetGroupsGroupIdResponse, + PostGroupsRequest, + PutGroupsGroupIdRequest, +} from '@/fineract-api' /** * The generated `GetGroupsGroupIdResponse` is incomplete — the real API @@ -51,3 +55,23 @@ export interface ClientMember { displayName?: string officeName?: string } + +/** + * Fields missing from both PostGroupsRequest and PutGroupsGroupIdRequest in + * the generated OpenAPI types. Extracted here so both extended interfaces stay + * in sync if more fields are discovered later. + */ +interface GroupRequestExtras { + staffId?: number + externalId?: string + submittedOnDate?: string + activationDate?: string + dateFormat?: string + locale?: string +} + +export interface ExtendedPostGroupsRequest + extends PostGroupsRequest, GroupRequestExtras {} + +export interface ExtendedPutGroupsRequest + extends PutGroupsGroupIdRequest, GroupRequestExtras {}