diff --git a/src/api/trusteeApi.ts b/src/api/trusteeApi.ts index 543c70a..4230612 100644 --- a/src/api/trusteeApi.ts +++ b/src/api/trusteeApi.ts @@ -686,6 +686,71 @@ export async function deletePosition( }); } +// ============================================================================ +// POSITION-DOCUMENT LINK API +// ============================================================================ + +export interface TrusteePositionDocument { + id: string; + positionId: string; + documentId: string; + mandateId?: string; + featureInstanceId?: string; + _createdAt?: number; + _modifiedAt?: number; + [key: string]: any; +} + +export async function fetchPositionDocuments( + request: ApiRequestFunction, + instanceId: string, + params?: PaginationParams +): Promise | TrusteePositionDocument[]> { + return await request({ + url: `${_getTrusteeBaseUrl(instanceId)}/position-documents`, + method: 'get', + params: _buildPaginationParams(params) + }); +} + +export async function fetchPositionDocumentById( + request: ApiRequestFunction, + instanceId: string, + linkId: string +): Promise { + try { + return await request({ + url: `${_getTrusteeBaseUrl(instanceId)}/position-documents/${linkId}`, + method: 'get' + }); + } catch { + return null; + } +} + +export async function createPositionDocument( + request: ApiRequestFunction, + instanceId: string, + data: Partial +): Promise { + return await request({ + url: `${_getTrusteeBaseUrl(instanceId)}/position-documents`, + method: 'post', + data + }); +} + +export async function deletePositionDocument( + request: ApiRequestFunction, + instanceId: string, + linkId: string +): Promise { + await request({ + url: `${_getTrusteeBaseUrl(instanceId)}/position-documents/${linkId}`, + method: 'delete' + }); +} + // ============================================================================ // ACCOUNTING API // ============================================================================ diff --git a/src/components/FormGenerator/FormGeneratorControls/FormGeneratorControls.tsx b/src/components/FormGenerator/FormGeneratorControls/FormGeneratorControls.tsx index 7134bb0..11f33b4 100644 --- a/src/components/FormGenerator/FormGeneratorControls/FormGeneratorControls.tsx +++ b/src/components/FormGenerator/FormGeneratorControls/FormGeneratorControls.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import type { IconType } from 'react-icons'; import { useLanguage } from '../../../providers/language/LanguageContext'; import styles from './FormGeneratorControls.module.css'; import { Button } from '../../UiComponents/Button'; @@ -44,7 +45,7 @@ export interface FormGeneratorControlsProps { label: string; onClick: () => void | Promise; loading?: boolean; - icon?: React.ReactNode; + icon?: IconType; }[]; // Refresh handler diff --git a/src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx b/src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx index 3a59674..33b5d8f 100644 --- a/src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx +++ b/src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx @@ -1,4 +1,5 @@ import React, { useState, useMemo, useRef, useEffect, useCallback } from 'react'; +import type { IconType } from 'react-icons'; import { useLanguage } from '../../../providers/language/LanguageContext'; import styles from './FormGeneratorTable.module.css'; import { @@ -153,7 +154,7 @@ export interface FormGeneratorTableProps { label: string; onClick: (rows: T[]) => void | Promise; loading?: boolean; - icon?: React.ReactNode; + icon?: IconType; }[]; onRefresh?: () => void; className?: string; diff --git a/src/hooks/useTrustee.ts b/src/hooks/useTrustee.ts index 3a993e2..244a45e 100644 --- a/src/hooks/useTrustee.ts +++ b/src/hooks/useTrustee.ts @@ -578,3 +578,6 @@ const positionConfig: TrusteeEntityConfig = { export const useTrusteePositions = _createTrusteeEntityHook(positionConfig); export const useTrusteePositionOperations = _createTrusteeOperationsHook(positionConfig); +export { useTrusteePositionDocuments, useTrusteePositionDocumentOperations } from './useTrusteePositionDocuments'; +export type { TrusteePositionDocument } from '../api/trusteeApi'; + diff --git a/src/pages/views/trustee/TrusteePositionDocumentsView.tsx b/src/pages/views/trustee/TrusteePositionDocumentsView.tsx index 6194a6a..6c4cdef 100644 --- a/src/pages/views/trustee/TrusteePositionDocumentsView.tsx +++ b/src/pages/views/trustee/TrusteePositionDocumentsView.tsx @@ -56,8 +56,8 @@ export const TrusteePositionDocumentsView: React.FC = () => { const excludedFields = ['id', 'mandateId', 'featureInstanceId', '_createdBy', '_createdAt', '_modifiedAt', '_modifiedBy']; return attributes - .filter(attr => !excludedFields.includes(attr.name)) - .map(attr => { + .filter((attr: any) => !excludedFields.includes(attr.name)) + .map((attr: any) => { // Replace {instanceId} placeholder in options URL let fkSource = attr.options; if (typeof fkSource === 'string' && instanceId) { @@ -133,7 +133,7 @@ export const TrusteePositionDocumentsView: React.FC = () => { // Form attributes (exclude system fields) const formAttributes = useMemo(() => { const excludedFields = ['id', 'mandateId', 'featureInstanceId', '_createdBy', '_createdAt', '_modifiedAt', '_modifiedBy']; - return (attributes || []).filter(attr => !excludedFields.includes(attr.name)); + return (attributes || []).filter((attr: any) => !excludedFields.includes(attr.name)); }, [attributes]); if (error) {