@topconsultnpm/sdkui-react 6.20.0-test1 → 6.21.0-dev1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/lib/components/NewComponents/ContextMenu/styles.d.ts +3 -1
  2. package/lib/components/NewComponents/ContextMenu/styles.js +7 -5
  3. package/lib/components/NewComponents/FloatingMenuBar/TMFloatingMenuBar.js +7 -1
  4. package/lib/components/base/Styled.d.ts +4 -1
  5. package/lib/components/base/Styled.js +11 -3
  6. package/lib/components/base/TMPanel.js +6 -4
  7. package/lib/components/base/TMPopUp.js +4 -0
  8. package/lib/components/base/TMTreeView.d.ts +5 -2
  9. package/lib/components/base/TMTreeView.js +74 -22
  10. package/lib/components/base/TMWaitPanel.js +6 -5
  11. package/lib/components/choosers/TMDataListItemChooser.js +1 -1
  12. package/lib/components/choosers/TMDataListItemEditor.d.ts +11 -0
  13. package/lib/components/choosers/TMDataListItemEditor.js +130 -0
  14. package/lib/components/choosers/TMDataListItemFields.d.ts +11 -0
  15. package/lib/components/choosers/TMDataListItemFields.js +61 -0
  16. package/lib/components/choosers/TMDataListItemPicker.d.ts +2 -0
  17. package/lib/components/choosers/TMDataListItemPicker.js +182 -18
  18. package/lib/components/choosers/TMDynDataListItemChooser.js +11 -6
  19. package/lib/components/choosers/TMImageIDChooser.d.ts +16 -0
  20. package/lib/components/choosers/TMImageIDChooser.js +53 -0
  21. package/lib/components/choosers/TMMetadataChooser.js +1 -1
  22. package/lib/components/choosers/TMUserChooser.js +4 -2
  23. package/lib/components/editors/TMDateBox.js +1 -1
  24. package/lib/components/editors/TMHtmlEditor.js +1 -1
  25. package/lib/components/editors/TMLocalizedTextBox.d.ts +1 -0
  26. package/lib/components/editors/TMLocalizedTextBox.js +3 -3
  27. package/lib/components/editors/TMMetadataValues.js +203 -41
  28. package/lib/components/editors/TMTextArea.d.ts +1 -0
  29. package/lib/components/editors/TMTextArea.js +6 -6
  30. package/lib/components/editors/TMTextBox.js +9 -10
  31. package/lib/components/features/archive/TMArchive.d.ts +3 -1
  32. package/lib/components/features/archive/TMArchive.js +31 -44
  33. package/lib/components/features/blog/TMBlogCommentForm.d.ts +3 -0
  34. package/lib/components/features/blog/TMBlogCommentForm.js +42 -36
  35. package/lib/components/features/documents/TMDcmtBlog.d.ts +1 -0
  36. package/lib/components/features/documents/TMDcmtBlog.js +2 -1
  37. package/lib/components/features/documents/TMDcmtForm.d.ts +44 -34
  38. package/lib/components/features/documents/TMDcmtForm.js +367 -565
  39. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +34 -0
  40. package/lib/components/features/documents/TMDcmtFormActionButtons.js +124 -0
  41. package/lib/components/features/documents/TMDcmtPreview.js +66 -13
  42. package/lib/components/features/documents/TMDcmtTasks.d.ts +3 -1
  43. package/lib/components/features/documents/TMDcmtTasks.js +2 -2
  44. package/lib/components/features/documents/TMFileUploader.d.ts +5 -0
  45. package/lib/components/features/documents/TMFileUploader.js +28 -6
  46. package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +27 -2
  47. package/lib/components/features/documents/TMMasterDetailDcmts.js +264 -97
  48. package/lib/components/features/documents/TMRelationViewer.d.ts +19 -2
  49. package/lib/components/features/documents/TMRelationViewer.js +540 -116
  50. package/lib/components/features/search/TMSearch.d.ts +3 -2
  51. package/lib/components/features/search/TMSearch.js +3 -3
  52. package/lib/components/features/search/TMSearchQueryPanel.js +6 -6
  53. package/lib/components/features/search/TMSearchResult.d.ts +29 -25
  54. package/lib/components/features/search/TMSearchResult.js +446 -562
  55. package/lib/components/features/search/TMSignatureInfoContent.js +10 -6
  56. package/lib/components/features/search/TMTreeSelector.js +1 -1
  57. package/lib/components/features/tasks/TMTaskForm.d.ts +3 -1
  58. package/lib/components/features/tasks/TMTaskForm.js +61 -193
  59. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +80 -0
  60. package/lib/components/features/tasks/TMTaskFormUtils.js +559 -0
  61. package/lib/components/features/tasks/TMTasksUtils.d.ts +3 -1
  62. package/lib/components/features/tasks/TMTasksUtils.js +46 -16
  63. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +0 -7
  64. package/lib/components/features/tasks/TMTasksUtilsView.js +7 -14
  65. package/lib/components/features/tasks/TMTasksView.js +5 -3
  66. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +20 -3
  67. package/lib/components/features/workflow/TMWorkflowPopup.js +21 -109
  68. package/lib/components/features/workflow/diagram/ConnectionComponent.d.ts +1 -0
  69. package/lib/components/features/workflow/diagram/ConnectionComponent.js +6 -2
  70. package/lib/components/features/workflow/diagram/DiagramItemForm.d.ts +2 -0
  71. package/lib/components/features/workflow/diagram/DiagramItemForm.js +32 -25
  72. package/lib/components/features/workflow/diagram/RecipientList.d.ts +3 -1
  73. package/lib/components/features/workflow/diagram/RecipientList.js +13 -9
  74. package/lib/components/features/workflow/diagram/WFDiagram.js +102 -5
  75. package/lib/components/features/workflow/diagram/workflowHelpers.js +31 -19
  76. package/lib/components/forms/Login/TMLoginForm.js +1 -1
  77. package/lib/components/forms/TMSaveForm.js +61 -13
  78. package/lib/components/grids/TMBlogsPost.js +8 -8
  79. package/lib/components/grids/TMBlogsPostUtils.js +2 -2
  80. package/lib/components/grids/TMRecentsManager.js +1 -1
  81. package/lib/components/index.d.ts +2 -0
  82. package/lib/components/index.js +2 -0
  83. package/lib/components/layout/panelManager/TMPanelManagerContainer.js +3 -2
  84. package/lib/components/pages/TMPage.js +4 -0
  85. package/lib/components/query/TMQueryEditor.d.ts +1 -0
  86. package/lib/components/query/TMQueryEditor.js +3 -3
  87. package/lib/components/viewers/TMMidViewer.js +2 -1
  88. package/lib/components/viewers/TMTidViewer.js +7 -3
  89. package/lib/helper/Enum_Localizator.js +5 -0
  90. package/lib/helper/GlobalStyles.js +3 -0
  91. package/lib/helper/SDKUI_Globals.d.ts +12 -0
  92. package/lib/helper/SDKUI_Globals.js +21 -1
  93. package/lib/helper/SDKUI_Localizator.d.ts +31 -7
  94. package/lib/helper/SDKUI_Localizator.js +286 -46
  95. package/lib/helper/TMIcons.d.ts +2 -1
  96. package/lib/helper/TMIcons.js +4 -1
  97. package/lib/helper/TMUtils.d.ts +33 -41
  98. package/lib/helper/TMUtils.js +157 -170
  99. package/lib/helper/checkinCheckoutManager.d.ts +1 -1
  100. package/lib/helper/checkinCheckoutManager.js +25 -6
  101. package/lib/helper/helpers.d.ts +6 -2
  102. package/lib/helper/helpers.js +24 -8
  103. package/lib/helper/index.d.ts +1 -0
  104. package/lib/helper/index.js +1 -0
  105. package/lib/helper/queryHelper.js +1 -1
  106. package/lib/hooks/useBetaFeatures.d.ts +1 -0
  107. package/lib/hooks/useBetaFeatures.js +41 -0
  108. package/lib/hooks/useCheckInOutOperations.d.ts +7 -6
  109. package/lib/hooks/useCheckInOutOperations.js +9 -16
  110. package/lib/hooks/useDataUserIdItem.js +2 -2
  111. package/lib/hooks/useDcmtOperations.d.ts +3 -2
  112. package/lib/hooks/useDcmtOperations.js +16 -4
  113. package/lib/hooks/useDocumentOperations.d.ts +140 -0
  114. package/lib/hooks/useDocumentOperations.js +1307 -0
  115. package/lib/hooks/useRelatedDocuments.d.ts +1 -1
  116. package/lib/hooks/useRelatedDocuments.js +64 -42
  117. package/lib/index.d.ts +1 -0
  118. package/lib/index.js +1 -0
  119. package/lib/services/platform_services.d.ts +1 -1
  120. package/lib/services/platform_services.js +4 -0
  121. package/lib/ts/types.d.ts +5 -1
  122. package/lib/ts/types.js +1 -0
  123. package/package.json +2 -2
  124. package/lib/components/features/search/TMSearchResultsMenuItems.d.ts +0 -11
  125. package/lib/components/features/search/TMSearchResultsMenuItems.js +0 -770
  126. package/lib/components/features/search/TMSignSettingsForm.d.ts +0 -9
  127. package/lib/components/features/search/TMSignSettingsForm.js +0 -621
@@ -28,8 +28,7 @@ const getNonDirectoryFiles = (items, exclude) => {
28
28
  });
29
29
  };
30
30
  const TMBlogCommentForm = (props) => {
31
- const maxLength = 1000;
32
- const { participants, selectedAttachments, selectedAttachmentDid, allFileItems, allArchivedDocumentsFileItems = [], onClose, context, showAttachmentsSection = true, removeAndEditAttachment = true, onFilterCreated, refreshCallback, isCommentRequired = false } = props;
31
+ const { participants, selectedAttachments, selectedAttachmentDid, allFileItems, allArchivedDocumentsFileItems = [], onClose, context, showAttachmentsSection = true, removeAndEditAttachment = true, onFilterCreated, refreshCallback, isCommentRequired = false, maxLength = 1000, onCustomSave } = props;
33
32
  // Initialize state with combined array
34
33
  const [dataSource, setDataSource] = useState(() => [...getNonDirectoryFiles(allFileItems?.items || [], []), ...allArchivedDocumentsFileItems]);
35
34
  const [isEditorEnabled, setIsEditorEnabled] = useState(true);
@@ -101,14 +100,6 @@ const TMBlogCommentForm = (props) => {
101
100
  try {
102
101
  // Show a loading spinner with a localized description
103
102
  TMSpinner.show({ description: SDKUI_Localizator.Comment });
104
- // Exit early if the engine or its required identifiers are undefined
105
- if (context.object === undefined
106
- || (context.engine === 'WorkingGroupEngine' && !context.object.id)
107
- || (context.engine === 'SearchEngine' && (!context.object.tid || !context.object.did))
108
- || (context.engine === 'DossierEngine' && !context.object.id)) {
109
- TMSpinner.hide();
110
- return;
111
- }
112
103
  // Create a new BlogPost object
113
104
  const blogPost = new BlogPost();
114
105
  // Retrieve the comment from formData, or use an empty string if undefined
@@ -132,36 +123,51 @@ const TMBlogCommentForm = (props) => {
132
123
  });
133
124
  blogPost.attachments = attachment;
134
125
  }
135
- if (context.engine === 'WorkingGroupEngine' && context.object && context.object.id) {
136
- // Create an instance of WorkingGroupEngine to interact with the working group
137
- const workingGroupEngine = new WorkingGroupEngine(SDK_Globals.tmSession);
138
- // Call the BlogPostAddAsync method to add the blog post to the working group
139
- const newBlogPostId = await workingGroupEngine.BlogPostAddAsync(context.object.id, blogPost);
126
+ if (onCustomSave) {
127
+ // Use the external save handler - logic is managed externally
128
+ await onCustomSave(blogPost);
140
129
  await refreshCallback?.();
141
- if (newBlogPostId && onFilterCreated) {
142
- onFilterCreated(post => post.id === newBlogPostId);
143
- }
144
- ;
145
130
  }
146
- else if (context.engine === 'SearchEngine') {
147
- // Create an instance of SearchEngine
148
- const searchEngine = SDK_Globals.tmSession?.NewSearchEngine();
149
- const newBlogPostId = await searchEngine.BlogPostAddAsync(context.object.tid, context.object.did, cleanComment);
150
- await refreshCallback?.();
151
- if (newBlogPostId && onFilterCreated) {
152
- onFilterCreated(post => post.id === newBlogPostId);
131
+ else {
132
+ // Validate context only when using internal engine logic
133
+ if (context.object === undefined
134
+ || (context.engine === 'WorkingGroupEngine' && !context.object.id)
135
+ || (context.engine === 'SearchEngine' && (!context.object.tid || !context.object.did))
136
+ || (context.engine === 'DossierEngine' && !context.object.id)) {
137
+ TMSpinner.hide();
138
+ return;
153
139
  }
154
- ;
155
- }
156
- else if (context.engine === 'DossierEngine' && context.object && context.object.id) {
157
- // Create an instance of DossierEngine
158
- const dossierEngine = SDK_Globals.tmSession?.NewDossierEngine();
159
- const newBlogPostId = await dossierEngine.BlogPostAddAsync(context.object.id, blogPost);
160
- await refreshCallback?.();
161
- if (newBlogPostId && onFilterCreated) {
162
- onFilterCreated(post => post.id === newBlogPostId);
140
+ if (context.engine === 'WorkingGroupEngine' && context.object && context.object.id) {
141
+ // Create an instance of WorkingGroupEngine to interact with the working group
142
+ const workingGroupEngine = new WorkingGroupEngine(SDK_Globals.tmSession);
143
+ // Call the BlogPostAddAsync method to add the blog post to the working group
144
+ const newBlogPostId = await workingGroupEngine.BlogPostAddAsync(context.object.id, blogPost);
145
+ await refreshCallback?.();
146
+ if (newBlogPostId && onFilterCreated) {
147
+ onFilterCreated(post => post.id === newBlogPostId);
148
+ }
149
+ ;
150
+ }
151
+ else if (context.engine === 'SearchEngine') {
152
+ // Create an instance of SearchEngine
153
+ const searchEngine = SDK_Globals.tmSession?.NewSearchEngine();
154
+ const newBlogPostId = await searchEngine.BlogPostAddAsync(context.object.tid, context.object.did, cleanComment);
155
+ await refreshCallback?.();
156
+ if (newBlogPostId && onFilterCreated) {
157
+ onFilterCreated(post => post.id === newBlogPostId);
158
+ }
159
+ ;
160
+ }
161
+ else if (context.engine === 'DossierEngine' && context.object && context.object.id) {
162
+ // Create an instance of DossierEngine
163
+ const dossierEngine = SDK_Globals.tmSession?.NewDossierEngine();
164
+ const newBlogPostId = await dossierEngine.BlogPostAddAsync(context.object.id, blogPost);
165
+ await refreshCallback?.();
166
+ if (newBlogPostId && onFilterCreated) {
167
+ onFilterCreated(post => post.id === newBlogPostId);
168
+ }
169
+ ;
163
170
  }
164
- ;
165
171
  }
166
172
  }
167
173
  catch (e) {
@@ -5,6 +5,7 @@ interface ITMDcmtBlogProps {
5
5
  did: number | undefined;
6
6
  isVisible?: boolean;
7
7
  fetchBlogDataTrigger?: number;
8
+ onRefreshBlogDatagrid?: () => Promise<void>;
8
9
  allTasks?: Array<TaskDescriptor>;
9
10
  getAllTasks?: () => Promise<void>;
10
11
  deleteTaskByIdsCallback?: (deletedTaskIds: Array<number>) => Promise<void>;
@@ -8,7 +8,7 @@ import TMBlogCommentForm from '../blog/TMBlogCommentForm';
8
8
  import TMBlogsPost from '../../grids/TMBlogsPost';
9
9
  import TMSpinner from '../../base/TMSpinner';
10
10
  import { TMExceptionBoxManager } from '../../base/TMPopUp';
11
- const TMDcmtBlog = ({ tid, did, isVisible, fetchBlogDataTrigger, allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers }) => {
11
+ const TMDcmtBlog = ({ tid, did, isVisible, fetchBlogDataTrigger, onRefreshBlogDatagrid, allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers }) => {
12
12
  const [blogsDatasource, setBlogsDatasource] = useState([]);
13
13
  const [hasLoadedDataOnce, setHasLoadedDataOnce] = useState(false); //traccia se *qualsiasi* dato è stato caricato per la prima volta
14
14
  const [lastLoadedDid, setLastLoadedDid] = useState(undefined); // `lastLoadedDid` tiene traccia dell'ultimo `did` per cui abbiamo caricato i dati
@@ -58,6 +58,7 @@ const TMDcmtBlog = ({ tid, did, isVisible, fetchBlogDataTrigger, allTasks = [],
58
58
  }, [tid, did, isVisible, hasLoadedDataOnce, lastLoadedDid]);
59
59
  const refreshCallback = async () => {
60
60
  await fetchBlogDataAsync(tid, did);
61
+ await onRefreshBlogDatagrid?.();
61
62
  };
62
63
  const resetExternalBlogPost = useCallback(() => {
63
64
  setExternalBlogPost(undefined);
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { HomeBlogPost, LayoutModes, ObjectRef, SearchResultDescriptor, TaskDescriptor, ValidationItem } from '@topconsultnpm/sdk-ts';
2
+ import { DcmtTypeDescriptor, HomeBlogPost, LayoutModes, ObjectRef, SearchResultDescriptor, TaskDescriptor, ValidationItem } from '@topconsultnpm/sdk-ts';
3
3
  import { DcmtInfo, FormModes, MetadataValueDescriptorEx, TaskContext } from '../../../ts';
4
4
  /**
5
5
  * Definisce il contesto da cui è stato invocato il TMDcmtForm.
@@ -14,63 +14,73 @@ export declare enum InvocationContext {
14
14
  WorkflowCtrl = "workflowCtrl"
15
15
  }
16
16
  interface ITMDcmtFormProps {
17
- allTasks?: Array<TaskDescriptor>;
18
- getAllTasks?: () => Promise<void>;
19
- deleteTaskByIdsCallback?: (deletedTaskIds: Array<number>) => Promise<void>;
20
- addTaskCallback?: (task: TaskDescriptor) => Promise<void>;
21
- editTaskCallback?: (task: TaskDescriptor) => Promise<void>;
22
- handleNavigateToWGs?: (value: HomeBlogPost | number) => Promise<void>;
23
- handleNavigateToDossiers?: (value: HomeBlogPost | number) => Promise<void>;
24
17
  TID?: number;
25
18
  DID?: number;
19
+ groupId?: string;
26
20
  layoutMode?: LayoutModes;
27
21
  formMode?: FormModes;
28
- allowNavigation?: boolean;
29
- allowRelations?: boolean;
22
+ invocationContext?: InvocationContext;
30
23
  showHeader?: boolean;
24
+ showBackButton?: boolean;
31
25
  showDcmtFormSidebar?: boolean;
32
26
  isExpertMode?: boolean;
33
- count?: number;
34
- itemIndex?: number;
35
- canNext?: boolean;
36
- canPrev?: boolean;
37
27
  isClosable?: boolean;
38
- groupId?: string;
39
- invocationContext?: InvocationContext;
40
- taskFormDialogComponent?: React.ReactNode;
41
- moreInfoTasks?: Array<TaskDescriptor>;
42
- showBackButton?: boolean;
43
- onNext?: () => void;
44
- onPrev?: () => void;
45
- onClose?: () => void;
46
- onSavedAsyncCallback?: (tid: number | undefined, did: number | undefined, metadataResult?: SearchResultDescriptor | null) => Promise<void>;
47
- onSaveRecents?: (TIDs: number[]) => void;
48
- onWFOperationCompleted?: () => Promise<void>;
49
- onTaskCompleted?: (task: TaskDescriptor) => void;
50
- onTaskCreateRequest?: (taskContext: TaskContext, onTaskCreated?: (task?: TaskDescriptor) => void) => void;
51
- connectorFileSave?: () => Promise<File>;
52
28
  isModal?: boolean;
53
29
  titleModal?: string;
54
30
  widthModal?: string;
55
31
  heightModal?: string;
32
+ allowNavigation?: boolean;
33
+ count?: number;
34
+ itemIndex?: number;
35
+ canNext?: boolean;
36
+ canPrev?: boolean;
56
37
  inputFile?: File | null;
57
38
  inputMids?: Array<{
58
39
  mid: number;
59
40
  value: string;
60
41
  }>;
42
+ connectorFileSave?: () => Promise<File>;
43
+ isSharedDcmt?: boolean;
44
+ sharedSourceTID?: number;
45
+ sharedSourceDID?: number;
46
+ allowRelations?: boolean;
47
+ allowButtonsRefs?: boolean;
61
48
  openS4TViewer?: boolean;
62
- onOpenS4TViewerRequest?: (dcmtInfo: Array<DcmtInfo>, onRefreshSearchAsync?: (() => Promise<void>)) => void;
63
49
  s4TViewerDialogComponent?: React.ReactNode;
64
50
  enableDragDropOverlay?: boolean;
51
+ taskFormDialogComponent?: React.ReactNode;
52
+ allTasks?: Array<TaskDescriptor>;
53
+ moreInfoTasks?: Array<TaskDescriptor>;
54
+ onClose?: () => void;
55
+ onNext?: () => void;
56
+ onPrev?: () => void;
57
+ onSavedAsyncCallback?: (tid: number | undefined, did: number | undefined, metadataResult?: SearchResultDescriptor | null) => Promise<void>;
58
+ onSaveRecents?: (TIDs: number[]) => void;
59
+ onWFOperationCompleted?: () => Promise<void>;
60
+ getAllTasks?: () => Promise<void>;
61
+ deleteTaskByIdsCallback?: (deletedTaskIds: Array<number>) => Promise<void>;
62
+ addTaskCallback?: (task: TaskDescriptor) => Promise<void>;
63
+ editTaskCallback?: (task: TaskDescriptor) => Promise<void>;
64
+ onTaskCompleted?: (task: TaskDescriptor) => void;
65
+ onTaskCreateRequest?: (taskContext: TaskContext, onTaskCreated?: (task?: TaskDescriptor) => void) => void;
66
+ handleNavigateToWGs?: (value: HomeBlogPost | number) => Promise<void>;
67
+ handleNavigateToDossiers?: (value: HomeBlogPost | number) => Promise<void>;
68
+ onReferenceClick?: (ref: ObjectRef) => void;
69
+ onScanRequest?: (onFileScanned: (file: File) => void) => void;
70
+ onOpenS4TViewerRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: (() => Promise<void>)) => void;
71
+ onOpenPdfEditorRequest?: (dcmtInfo: Array<DcmtInfo>, refreshDocumentPreview?: (() => Promise<void>)) => void;
72
+ openFileUploaderPdfEditor?: (fromDTD?: DcmtTypeDescriptor, file?: File | null, handleFile?: (file: File) => void, refreshDocumentPreview?: () => Promise<void>) => void;
65
73
  passToSearch?: (outputMids: Array<{
66
74
  mid: number;
67
75
  value: string;
68
76
  }>, tid?: number) => void;
69
- isSharedDcmt?: boolean;
70
- sharedSourceTID?: number;
71
- sharedSourceDID?: number;
72
- allowButtonsRefs?: boolean;
73
- onReferenceClick?: (ref: ObjectRef) => void;
77
+ datagridUtility?: {
78
+ onRefreshSearchAsyncDatagrid?: () => Promise<void>;
79
+ onRefreshDataRowsAsync?: (() => Promise<void>);
80
+ refreshFocusedDataRowAsync?: (tid: number | undefined, did: number | undefined, refreshUI?: boolean, metadataResult?: SearchResultDescriptor | null) => Promise<void>;
81
+ onRefreshBlogDatagrid?: () => Promise<void>;
82
+ onRefreshPreviewDatagrid?: () => Promise<void>;
83
+ };
74
84
  }
75
85
  declare const TMDcmtForm: React.FC<ITMDcmtFormProps>;
76
86
  export default TMDcmtForm;