@digi-frontend/dgate-api-documentation 1.0.28 → 1.0.31

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 (103) hide show
  1. package/.editorconfig +12 -12
  2. package/.prettierignore +7 -7
  3. package/.prettierrc +15 -15
  4. package/dist/{a7568b270e175038.svg → 070dc6ecd197bc80.svg} +8 -8
  5. package/dist/{43595976d1fdccbf.svg → 2e10bbdb265df50e.svg} +4 -4
  6. package/dist/{b82c7612e73342f3.svg → 7f54eeb0bb2d1150.svg} +3 -3
  7. package/dist/{56dc416b683db280.svg → 8789eb84283ea95b.svg} +5 -5
  8. package/dist/{af16a554be8c4d69.svg → 9bdff13f8d8fa48a.svg} +3 -3
  9. package/dist/_virtual/index4.js +1 -1
  10. package/dist/_virtual/index5.js +1 -1
  11. package/dist/_virtual/index6.js +1 -1
  12. package/dist/{64efc2716808c4a4.svg → bb8b87cace25e052.svg} +3 -3
  13. package/dist/{72db3b05a96dd600.svg → d32ce84bbd78babd.svg} +3 -3
  14. package/dist/{844eba3f2e42a9eb.svg → d501922060662842.svg} +3 -3
  15. package/dist/node_modules/toposort/index.js +1 -1
  16. package/dist/node_modules/yup/index.esm.js +1 -1
  17. package/dist/src/assets/icons/AddRow.svg.js +1 -1
  18. package/dist/src/assets/icons/AddRow.svg.js.map +1 -1
  19. package/dist/src/assets/icons/CheckMarkSquare.svg.js +1 -1
  20. package/dist/src/assets/icons/CheckMarkSquare.svg.js.map +1 -1
  21. package/dist/src/assets/icons/CloseIcon.svg.js +1 -1
  22. package/dist/src/assets/icons/CloseIcon.svg.js.map +1 -1
  23. package/dist/src/assets/icons/DeleteIcon.svg.js +1 -1
  24. package/dist/src/assets/icons/DeleteIcon.svg.js.map +1 -1
  25. package/dist/src/assets/icons/DownArrow.svg.js +1 -1
  26. package/dist/src/assets/icons/DownArrow.svg.js.map +1 -1
  27. package/dist/src/assets/icons/EditIcon.svg.js +1 -1
  28. package/dist/src/assets/icons/EditIcon.svg.js.map +1 -1
  29. package/dist/src/assets/icons/UpArrow.svg.js +1 -1
  30. package/dist/src/assets/icons/UpArrow.svg.js.map +1 -1
  31. package/dist/src/assets/icons/deleteOutlinedIcon.svg.js +1 -1
  32. package/dist/src/assets/icons/deleteOutlinedIcon.svg.js.map +1 -1
  33. package/dist/src/components/Chips/Chips.js.map +1 -1
  34. package/dist/src/components/InfoForm/InfoForm.js.map +1 -1
  35. package/dist/src/components/JsonInput/JsonInput.js.map +1 -1
  36. package/dist/src/components/LivePreview/LivePreview.js.map +1 -1
  37. package/dist/src/components/MethodAccordion/MethodAccordion.js +1 -1
  38. package/dist/src/components/MethodAccordion/MethodAccordion.js.map +1 -1
  39. package/dist/src/components/SVGLoader/SVGLoader.js.map +1 -1
  40. package/dist/src/components/SectionHead/SectionHead.js.map +1 -1
  41. package/dist/src/components/SimpleLabelValue/SimpleLabelValue.js.map +1 -1
  42. package/dist/src/components/Tooltip/Tooltip.js.map +1 -1
  43. package/dist/src/components/dialog/index.js.map +1 -1
  44. package/dist/src/components/table/table.js +1 -1
  45. package/dist/src/components/table/table.js.map +1 -1
  46. package/dist/src/components/table/tags-table.js +1 -1
  47. package/dist/src/components/table/tags-table.js.map +1 -1
  48. package/dist/src/constants/index.js.map +1 -1
  49. package/dist/src/constants/regex.js.map +1 -1
  50. package/dist/src/helpers/layout.helper.js.map +1 -1
  51. package/dist/src/helpers/methodAccordion.helper.js.map +1 -1
  52. package/dist/src/layout/layout.js.map +1 -1
  53. package/dist/src/validator/form.scheme.js.map +1 -1
  54. package/dist/styles.css +212 -212
  55. package/package.json +43 -43
  56. package/rollup.config.js +35 -35
  57. package/src/assets/icons/AddRow.svg +3 -3
  58. package/src/assets/icons/CheckMarkSquare.svg +5 -5
  59. package/src/assets/icons/CloseIcon.svg +4 -4
  60. package/src/assets/icons/DeleteIcon.svg +3 -3
  61. package/src/assets/icons/DownArrow.svg +3 -3
  62. package/src/assets/icons/EditIcon.svg +3 -3
  63. package/src/assets/icons/UpArrow.svg +3 -3
  64. package/src/assets/icons/deleteOutlinedIcon.svg +8 -8
  65. package/src/assets/icons/index.ts +8 -8
  66. package/src/components/Chips/Chips.tsx +87 -87
  67. package/src/components/Chips/style.scss +147 -147
  68. package/src/components/InfoForm/InfoForm.module.scss +165 -165
  69. package/src/components/InfoForm/InfoForm.tsx +426 -426
  70. package/src/components/JsonInput/JsonInput.tsx +149 -149
  71. package/src/components/JsonInput/style.module.scss +133 -133
  72. package/src/components/LivePreview/LivePreview.module.scss +24 -24
  73. package/src/components/LivePreview/LivePreview.tsx +184 -184
  74. package/src/components/MethodAccordion/MethodAccordion.module.scss +338 -338
  75. package/src/components/MethodAccordion/MethodAccordion.tsx +515 -514
  76. package/src/components/SVGLoader/SVGLoader.tsx +94 -94
  77. package/src/components/SectionHead/SectionHead.scss +29 -29
  78. package/src/components/SectionHead/SectionHead.tsx +22 -22
  79. package/src/components/SimpleLabelValue/SimpleLabelValue.tsx +31 -31
  80. package/src/components/SimpleLabelValue/index.ts +1 -1
  81. package/src/components/SimpleLabelValue/style.scss +30 -30
  82. package/src/components/Tooltip/Tooltip.scss +133 -133
  83. package/src/components/Tooltip/Tooltip.tsx +85 -85
  84. package/src/components/_global.scss +337 -337
  85. package/src/components/dialog/dialog.ts +54 -54
  86. package/src/components/dialog/index.tsx +85 -85
  87. package/src/components/dialog/style.scss +104 -104
  88. package/src/components/table/style.scss +190 -190
  89. package/src/components/table/table.tsx +327 -322
  90. package/src/components/table/tags-table.tsx +348 -341
  91. package/src/constants/index.ts +93 -93
  92. package/src/constants/regex.ts +7 -7
  93. package/src/global.d.ts +13 -13
  94. package/src/helpers/layout.helper.ts +162 -162
  95. package/src/helpers/methodAccordion.helper.ts +19 -19
  96. package/src/index.ts +1 -1
  97. package/src/layout/layout.module.css +61 -61
  98. package/src/layout/layout.tsx +150 -150
  99. package/src/types/layout.type.ts +30 -30
  100. package/src/types/openApi.ts +108 -108
  101. package/src/types/transformedOpenApi.ts +52 -52
  102. package/src/validator/form.scheme.ts +70 -70
  103. package/tsconfig.json +33 -33
@@ -1,322 +1,327 @@
1
- import React, { useState } from 'react'
2
- import './style.scss'
3
- import { Button, Input, SelectGroupV2, Switch, TextArea } from 'digitinary-ui'
4
- import Tooltip from '../Tooltip/Tooltip'
5
- import SVGLoader from '../SVGLoader/SVGLoader'
6
- import { AddRow, EditIcon, DeleteIcon } from '../../assets/icons'
7
- import styles from '../MethodAccordion/MethodAccordion.module.scss'
8
- import { useFormik } from 'formik'
9
- import * as yup from 'yup'
10
- import { capitalize } from '../../helpers/methodAccordion.helper'
11
- import regex from '../../constants/regex'
12
-
13
- const ParamterTable = ({
14
- id,
15
- headCells,
16
- data,
17
- isFormOpen,
18
- setIsFormOpen,
19
- saveNewRow,
20
- readOnly,
21
- }) => {
22
- const [text, setText] = useState('')
23
- const [tooltipRef, setTooltipRef] = useState(null)
24
- const { values, errors, setFieldValue, isValid, submitForm, resetForm } = useFormik({
25
- validateOnMount: true,
26
- initialValues: {
27
- name: '',
28
- in: 'Query',
29
- schema: {
30
- type: 'String',
31
- },
32
- required: true,
33
- description: '',
34
- },
35
- validationSchema: yup.object().shape({
36
- name: yup.string().trim().required('Parameter name is required'),
37
- in: yup.string().required('Paramter type is required'),
38
- schema: yup.object().shape({
39
- type: yup.string().required('Parameter schema type is required'),
40
- }),
41
- required: yup.boolean().optional(),
42
- description: yup.string().trim().optional(),
43
- }),
44
- onSubmit: (values) => {
45
- saveNewRow(values)
46
- setIsFormOpen(false)
47
- setText('')
48
- resetForm()
49
- },
50
- })
51
-
52
- return (
53
- <div className="tableSectionContainer">
54
- <div className="tableContainer">
55
- <table id={id || ''} className={`table borderRadiusTop borderRadiusBottom`}>
56
- <thead className="tableHead">
57
- <tr>
58
- {headCells?.map((headCell) => (
59
- <th
60
- key={headCell.id}
61
- className={`tableHeadCell ${headCell.classes || ''}`}
62
- style={{ width: headCell.width, minWidth: headCell.minWidth }}
63
- >
64
- <div
65
- className="headContainer"
66
- data-id={`${
67
- typeof headCell.label === 'string'
68
- ? headCell.label.toUpperCase().replace(/[^a-zA-Z0-9]+/g, '_')
69
- : 'UNKNOWN_LABEL'
70
- }_COLUMN`}
71
- >
72
- {headCell.label}
73
- </div>
74
- </th>
75
- ))}
76
- </tr>
77
- </thead>
78
- <tbody className="tableBody" data-id="TABLE_BODY">
79
- {data?.map((row, rowIndex) => {
80
- return (
81
- <tr key={rowIndex} data-i={rowIndex} className={`row`}>
82
- {headCells?.map((headCell) => {
83
- const cellContent = row[headCell.id] !== '_' && (
84
- <div
85
- data-id="TEXT_DESCRIPTION"
86
- className="tableData"
87
- style={{
88
- width: headCell.width,
89
- minWidth: headCell.minWidth,
90
- }}
91
- >
92
- {row[headCell.id]}
93
- </div>
94
- )
95
-
96
- return (
97
- <td
98
- key={headCell.id}
99
- style={{
100
- width: headCell.width,
101
- minWidth: headCell.minWidth,
102
- }}
103
- >
104
- {cellContent}
105
- </td>
106
- )
107
- })}
108
- </tr>
109
- )
110
- })}
111
- {data?.length === 0 && readOnly && (
112
- <tr className="fallbackTableRow">
113
- <td className="fallbackContainer" colSpan={headCells?.length}>
114
- <div className="fallbackTextContainer">
115
- <span className="fallbackText"> No Data Available</span>
116
- </div>
117
- </td>
118
- </tr>
119
- )}
120
-
121
- {isFormOpen && !readOnly ? (
122
- <tr className={`row`}>
123
- <td key={'Parameter name'}>
124
- <div data-id="TEXT_DESCRIPTION" className="tableData">
125
- <Input
126
- placeholder="Parameter name"
127
- size="large"
128
- type="text"
129
- onChange={(value) => {
130
- if (value === '' || regex.ASCII.test(value as string))
131
- setFieldValue('name', value)
132
- }}
133
- value={values.name}
134
- disabled={readOnly}
135
- />
136
- </div>
137
- </td>
138
-
139
- <td key={'parameter in'}>
140
- <div data-id="TEXT_DESCRIPTION" className="tableData">
141
- <SelectGroupV2
142
- disabled={readOnly}
143
- value={{
144
- label: capitalize(values.in),
145
- value: capitalize(values.in),
146
- }}
147
- onChange={(item) => setFieldValue('in', item?.value?.toLowerCase())} // Updates state on selection
148
- options={[
149
- {
150
- list: [
151
- { label: 'Query', value: 'query' },
152
- { label: 'Header', value: 'header' },
153
- { label: 'Path', value: 'path' },
154
- { label: 'Body', value: 'body' },
155
- ],
156
- },
157
- ]}
158
- errorMsg={!!errors.in && errors.in}
159
- isMultiple={false}
160
- withSearch={false}
161
- clearable={false}
162
- />{' '}
163
- </div>
164
- </td>
165
-
166
- <td key={'parameter schema type'}>
167
- <div data-id="TEXT_DESCRIPTION" className="tableData">
168
- <SelectGroupV2
169
- disabled={readOnly}
170
- clearable={false}
171
- value={{
172
- label: capitalize(values.schema.type),
173
- value: capitalize(values.schema.type),
174
- }}
175
- errorMsg={!!errors.schema && errors.schema}
176
- onChange={(item) => setFieldValue('schema.type', item?.value?.toLowerCase())} // Updates state on selection
177
- options={[
178
- {
179
- list: [
180
- { label: 'String', value: 'string' },
181
- { label: 'Integer', value: 'integer' },
182
- { label: 'Boolean', value: 'boolean' },
183
- { label: 'Object', value: 'object' },
184
- { label: 'Array', value: 'array' },
185
- { label: 'Number', value: 'number' },
186
- ],
187
- },
188
- ]}
189
- isMultiple={false}
190
- withSearch={false}
191
- />{' '}
192
- </div>
193
- </td>
194
-
195
- <td key={'parameter required'}>
196
- <div data-id="is required" className="tableData">
197
- {readOnly ? (
198
- <>{values.required ? 'True' : 'False'}</>
199
- ) : (
200
- <Switch
201
- checked={values.required}
202
- onClick={() => {
203
- if (readOnly) {
204
- return
205
- }
206
- setFieldValue('required', !values.required)
207
- }}
208
- />
209
- )}
210
- </div>
211
- </td>
212
-
213
- <td key={'parameter schema desc'}>
214
- <div data-id="TEXT_DESCRIPTION" className="tableData">
215
- <div className={styles.paramDescContainer}>
216
- <Tooltip
217
- arrowWithBorder
218
- placement="bottom-end"
219
- type="function"
220
- trigger="click"
221
- delay={[0, 0]}
222
- onCreate={(instance) => setTooltipRef(instance)}
223
- content={
224
- <div className={styles.editDescTooltipContent}>
225
- <p className={styles.editDescTooltipContent_header}>Description</p>
226
- <TextArea
227
- value={text || values.description}
228
- onChange={(value) => {
229
- if (value === '' || regex.ASCII.test(value)) setText(value)
230
- }}
231
- disabled={readOnly}
232
- placeholder="Describe parameter..."
233
- maxLength={120}
234
- />
235
- {!readOnly && (
236
- <Button
237
- className={styles.editDescTooltipContent_btn}
238
- variant="outlined"
239
- size="small"
240
- onClick={() => {
241
- setFieldValue('description', text?.trim())
242
- tooltipRef?.hide()
243
- }}
244
- disabled={text?.trim() === ''}
245
- >
246
- Apply
247
- </Button>
248
- )}
249
- </div>
250
- }
251
- >
252
- <Button
253
- className={styles.editDescBtn}
254
- variant="link"
255
- color="action"
256
- endIcon={<SVGLoader src={EditIcon} width="1.5rem" height="1.5rem" />}
257
- >
258
- {readOnly ? 'View ' : 'Add '} Description
259
- </Button>
260
- </Tooltip>
261
-
262
- <div className={styles.paramDescContainer_separator}></div>
263
- {!readOnly && (
264
- <Button
265
- className={styles.deleteParamBtn}
266
- variant="link"
267
- color="error"
268
- endIcon={
269
- <SVGLoader src={DeleteIcon} width="1.125rem" height="1.125rem" />
270
- }
271
- onClick={() => {
272
- resetForm()
273
- setText('')
274
- setIsFormOpen(false)
275
- }} // Correctly delete the new row
276
- />
277
- )}
278
-
279
- {!readOnly && (
280
- <Button
281
- className={styles.deleteParamBtn}
282
- variant="link"
283
- color="success"
284
- disabled={!isValid}
285
- endIcon={<SVGLoader src={AddRow} width="0.125rem" height="0.125rem" />}
286
- onClick={() => {
287
- setText('')
288
- submitForm()
289
- }} // Save the new row when clicked
290
- />
291
- )}
292
- </div>{' '}
293
- </div>
294
- </td>
295
- </tr>
296
- ) : (
297
- <>
298
- {!readOnly && (
299
- <tr key={'addNew'} data-i={'addNew'} className={`row`}>
300
- <td colSpan={5}>
301
- <Button
302
- variant="link"
303
- color="primary"
304
- onClick={() => {
305
- setIsFormOpen((prev) => !prev)
306
- }}
307
- >
308
- + Add Parameter
309
- </Button>
310
- </td>
311
- </tr>
312
- )}
313
- </>
314
- )}
315
- </tbody>
316
- </table>
317
- </div>
318
- </div>
319
- )
320
- }
321
-
322
- export default ParamterTable
1
+ import React, { useState } from 'react'
2
+ import './style.scss'
3
+ import { Button, Input, SelectGroupV2, Switch, TextArea } from 'digitinary-ui'
4
+ import Tooltip from '../Tooltip/Tooltip'
5
+ import SVGLoader from '../SVGLoader/SVGLoader'
6
+ import { AddRow, EditIcon, DeleteIcon } from '../../assets/icons'
7
+ import styles from '../MethodAccordion/MethodAccordion.module.scss'
8
+ import { useFormik } from 'formik'
9
+ import * as yup from 'yup'
10
+ import { capitalize } from '../../helpers/methodAccordion.helper'
11
+ import regex from '../../constants/regex'
12
+
13
+ const ParamterTable = ({
14
+ id,
15
+ headCells,
16
+ data,
17
+ isFormOpen,
18
+ setIsFormOpen,
19
+ saveNewRow,
20
+ readOnly,
21
+ }) => {
22
+ const [text, setText] = useState('')
23
+ const [tooltipRef, setTooltipRef] = useState(null)
24
+ const { values, errors, setFieldValue, isValid, submitForm, resetForm } = useFormik({
25
+ validateOnMount: true,
26
+ initialValues: {
27
+ name: '',
28
+ in: 'Query',
29
+ schema: {
30
+ type: 'String',
31
+ },
32
+ required: true,
33
+ description: '',
34
+ },
35
+ validationSchema: yup.object().shape({
36
+ name: yup.string().trim().required('Parameter name is required'),
37
+ in: yup.string().required('Paramter type is required'),
38
+ schema: yup.object().shape({
39
+ type: yup.string().required('Parameter schema type is required'),
40
+ }),
41
+ required: yup.boolean().optional(),
42
+ description: yup.string().trim().optional(),
43
+ }),
44
+ onSubmit: (values) => {
45
+ saveNewRow(values)
46
+ setIsFormOpen(false)
47
+ setText('')
48
+ resetForm()
49
+ },
50
+ })
51
+
52
+ return (
53
+ <div className="tableSectionContainer">
54
+ <div className="tableContainer">
55
+ <table id={id || ''} className={`table borderRadiusTop borderRadiusBottom`}>
56
+ <thead className="tableHead">
57
+ <tr>
58
+ {headCells?.map((headCell) => (
59
+ <th
60
+ key={headCell.id}
61
+ className={`tableHeadCell ${headCell.classes || ''}`}
62
+ style={{ width: headCell.width, minWidth: headCell.minWidth }}
63
+ >
64
+ <div
65
+ className="headContainer"
66
+ data-id={`${
67
+ typeof headCell.label === 'string'
68
+ ? headCell.label.toUpperCase().replace(/[^a-zA-Z0-9]+/g, '_')
69
+ : 'UNKNOWN_LABEL'
70
+ }_COLUMN`}
71
+ >
72
+ {headCell.label}
73
+ </div>
74
+ </th>
75
+ ))}
76
+ </tr>
77
+ </thead>
78
+ <tbody className="tableBody" data-id="TABLE_BODY">
79
+ {data?.map((row, rowIndex) => {
80
+ return (
81
+ <tr key={rowIndex} data-i={rowIndex} className={`row`}>
82
+ {headCells?.map((headCell) => {
83
+ const cellContent = row[headCell.id] !== '_' && (
84
+ <div
85
+ data-id="TEXT_DESCRIPTION"
86
+ className="tableData"
87
+ style={{
88
+ width: headCell.width,
89
+ minWidth: headCell.minWidth,
90
+ }}
91
+ >
92
+ {row[headCell.id]}
93
+ </div>
94
+ )
95
+
96
+ return (
97
+ <td
98
+ key={headCell.id}
99
+ style={{
100
+ width: headCell.width,
101
+ minWidth: headCell.minWidth,
102
+ }}
103
+ >
104
+ {cellContent}
105
+ </td>
106
+ )
107
+ })}
108
+ </tr>
109
+ )
110
+ })}
111
+ {data?.length === 0 && readOnly && (
112
+ <tr className="fallbackTableRow">
113
+ <td className="fallbackContainer" colSpan={headCells?.length}>
114
+ <div className="fallbackTextContainer">
115
+ <span className="fallbackText"> No Data Available</span>
116
+ </div>
117
+ </td>
118
+ </tr>
119
+ )}
120
+
121
+ {isFormOpen && !readOnly ? (
122
+ <tr className={`row`}>
123
+ <td key={'Parameter name'}>
124
+ <div data-id="TEXT_DESCRIPTION" className="tableData">
125
+ <Input
126
+ placeholder="Parameter name"
127
+ size="large"
128
+ type="text"
129
+ onChange={(value) => {
130
+ if (value === '' || regex.ASCII.test(value as string))
131
+ setFieldValue('name', value)
132
+ }}
133
+ value={values.name}
134
+ disabled={readOnly}
135
+ />
136
+ </div>
137
+ </td>
138
+
139
+ <td key={'parameter in'}>
140
+ <div data-id="TEXT_DESCRIPTION" className="tableData">
141
+ <SelectGroupV2
142
+ disabled={readOnly}
143
+ value={{
144
+ label: capitalize(values.in),
145
+ value: capitalize(values.in),
146
+ }}
147
+ onChange={(item) => setFieldValue('in', item?.value?.toLowerCase())} // Updates state on selection
148
+ options={[
149
+ {
150
+ list: [
151
+ { label: 'Query', value: 'query' },
152
+ { label: 'Header', value: 'header' },
153
+ { label: 'Path', value: 'path' },
154
+ { label: 'Body', value: 'body' },
155
+ ],
156
+ },
157
+ ]}
158
+ errorMsg={!!errors.in && errors.in}
159
+ isMultiple={false}
160
+ withSearch={false}
161
+ clearable={false}
162
+ />{' '}
163
+ </div>
164
+ </td>
165
+
166
+ <td key={'parameter schema type'}>
167
+ <div data-id="TEXT_DESCRIPTION" className="tableData">
168
+ <SelectGroupV2
169
+ disabled={readOnly}
170
+ clearable={false}
171
+ value={{
172
+ label: capitalize(values.schema.type),
173
+ value: capitalize(values.schema.type),
174
+ }}
175
+ errorMsg={!!errors.schema && errors.schema}
176
+ onChange={(item) => setFieldValue('schema.type', item?.value?.toLowerCase())} // Updates state on selection
177
+ options={[
178
+ {
179
+ list: [
180
+ { label: 'String', value: 'string' },
181
+ { label: 'Integer', value: 'integer' },
182
+ { label: 'Boolean', value: 'boolean' },
183
+ { label: 'Object', value: 'object' },
184
+ { label: 'Array', value: 'array' },
185
+ { label: 'Number', value: 'number' },
186
+ ],
187
+ },
188
+ ]}
189
+ isMultiple={false}
190
+ withSearch={false}
191
+ />{' '}
192
+ </div>
193
+ </td>
194
+
195
+ <td key={'parameter required'}>
196
+ <div data-id="is required" className="tableData">
197
+ {readOnly ? (
198
+ <>{values.required ? 'True' : 'False'}</>
199
+ ) : (
200
+ <Switch
201
+ checked={values.required}
202
+ onClick={() => {
203
+ if (readOnly) {
204
+ return
205
+ }
206
+ setFieldValue('required', !values.required)
207
+ }}
208
+ />
209
+ )}
210
+ </div>
211
+ </td>
212
+
213
+ <td key={'parameter schema desc'}>
214
+ <div data-id="TEXT_DESCRIPTION" className="tableData">
215
+ <div className={styles.paramDescContainer}>
216
+ <Tooltip
217
+ arrowWithBorder
218
+ placement="bottom-end"
219
+ type="function"
220
+ trigger="click"
221
+ delay={[0, 0]}
222
+ onCreate={(instance) => setTooltipRef(instance)}
223
+ content={
224
+ <div className={styles.editDescTooltipContent}>
225
+ <p className={styles.editDescTooltipContent_header}>Description</p>
226
+ <TextArea
227
+ value={text || values.description}
228
+ onChange={(value) => {
229
+ if (value === '' || regex.ASCII.test(value)) setText(value)
230
+ }}
231
+ disabled={readOnly}
232
+ placeholder="Describe parameter..."
233
+ maxLength={120}
234
+ />
235
+ {!readOnly && (
236
+ <Button
237
+ className={styles.editDescTooltipContent_btn}
238
+ variant="outlined"
239
+ size="small"
240
+ onClick={() => {
241
+ setFieldValue('description', text?.trim())
242
+ tooltipRef?.hide()
243
+ }}
244
+ disabled={text?.trim() === ''}
245
+ >
246
+ Apply
247
+ </Button>
248
+ )}
249
+ </div>
250
+ }
251
+ >
252
+ <Button
253
+ className={styles.editDescBtn}
254
+ variant="link"
255
+ color="action"
256
+ endIcon={<SVGLoader src={EditIcon} width="1.5rem" height="1.5rem" />}
257
+ >
258
+ {readOnly ? 'View ' : 'Add '} Description
259
+ </Button>
260
+ </Tooltip>
261
+
262
+ <div className={styles.paramDescContainer_separator}></div>
263
+ {!readOnly && (
264
+ <Button
265
+ className={styles.deleteParamBtn}
266
+ variant="link"
267
+ color="error"
268
+ endIcon={
269
+ <SVGLoader src={DeleteIcon} width="1.125rem" height="1.125rem" />
270
+ }
271
+ onClick={() => {
272
+ resetForm()
273
+ setText('')
274
+ setIsFormOpen(false)
275
+ }} // Correctly delete the new row
276
+ />
277
+ )}
278
+
279
+ {!readOnly && (
280
+ <Tooltip
281
+ disabled={!!values.name.trim()}
282
+ content={`Parameter name can't be empty `}
283
+ >
284
+ <Button
285
+ className={styles.deleteParamBtn}
286
+ variant="link"
287
+ color="success"
288
+ disabled={!values.name.trim()}
289
+ endIcon={<SVGLoader src={AddRow} width="0.125rem" height="0.125rem" />}
290
+ onClick={() => {
291
+ setText('')
292
+ submitForm()
293
+ }} // Save the new row when clicked
294
+ />
295
+ </Tooltip>
296
+ )}
297
+ </div>{' '}
298
+ </div>
299
+ </td>
300
+ </tr>
301
+ ) : (
302
+ <>
303
+ {!readOnly && (
304
+ <tr key={'addNew'} data-i={'addNew'} className={`row`}>
305
+ <td colSpan={5}>
306
+ <Button
307
+ variant="link"
308
+ color="primary"
309
+ onClick={() => {
310
+ setIsFormOpen((prev) => !prev)
311
+ }}
312
+ >
313
+ + Add Parameter
314
+ </Button>
315
+ </td>
316
+ </tr>
317
+ )}
318
+ </>
319
+ )}
320
+ </tbody>
321
+ </table>
322
+ </div>
323
+ </div>
324
+ )
325
+ }
326
+
327
+ export default ParamterTable