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

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 (104) hide show
  1. package/.editorconfig +12 -12
  2. package/.prettierignore +7 -7
  3. package/.prettierrc +15 -15
  4. package/dist/{2e10bbdb265df50e.svg → 43595976d1fdccbf.svg} +4 -4
  5. package/dist/{8789eb84283ea95b.svg → 56dc416b683db280.svg} +5 -5
  6. package/dist/{bb8b87cace25e052.svg → 64efc2716808c4a4.svg} +3 -3
  7. package/dist/{d32ce84bbd78babd.svg → 72db3b05a96dd600.svg} +3 -3
  8. package/dist/{d501922060662842.svg → 844eba3f2e42a9eb.svg} +3 -3
  9. package/dist/_virtual/index3.js +1 -1
  10. package/dist/_virtual/index4.js +1 -1
  11. package/dist/_virtual/index5.js +1 -1
  12. package/dist/_virtual/index6.js +1 -1
  13. package/dist/{070dc6ecd197bc80.svg → a7568b270e175038.svg} +8 -8
  14. package/dist/{9bdff13f8d8fa48a.svg → af16a554be8c4d69.svg} +3 -3
  15. package/dist/{7f54eeb0bb2d1150.svg → b82c7612e73342f3.svg} +3 -3
  16. package/dist/node_modules/toposort/index.js +1 -1
  17. package/dist/node_modules/yup/index.esm.js +1 -1
  18. package/dist/src/assets/icons/AddRow.svg.js +1 -1
  19. package/dist/src/assets/icons/AddRow.svg.js.map +1 -1
  20. package/dist/src/assets/icons/CheckMarkSquare.svg.js +1 -1
  21. package/dist/src/assets/icons/CheckMarkSquare.svg.js.map +1 -1
  22. package/dist/src/assets/icons/CloseIcon.svg.js +1 -1
  23. package/dist/src/assets/icons/CloseIcon.svg.js.map +1 -1
  24. package/dist/src/assets/icons/DeleteIcon.svg.js +1 -1
  25. package/dist/src/assets/icons/DeleteIcon.svg.js.map +1 -1
  26. package/dist/src/assets/icons/DownArrow.svg.js +1 -1
  27. package/dist/src/assets/icons/DownArrow.svg.js.map +1 -1
  28. package/dist/src/assets/icons/EditIcon.svg.js +1 -1
  29. package/dist/src/assets/icons/EditIcon.svg.js.map +1 -1
  30. package/dist/src/assets/icons/UpArrow.svg.js +1 -1
  31. package/dist/src/assets/icons/UpArrow.svg.js.map +1 -1
  32. package/dist/src/assets/icons/deleteOutlinedIcon.svg.js +1 -1
  33. package/dist/src/assets/icons/deleteOutlinedIcon.svg.js.map +1 -1
  34. package/dist/src/components/Chips/Chips.js.map +1 -1
  35. package/dist/src/components/InfoForm/InfoForm.js +1 -1
  36. package/dist/src/components/InfoForm/InfoForm.js.map +1 -1
  37. package/dist/src/components/JsonInput/JsonInput.js.map +1 -1
  38. package/dist/src/components/LivePreview/LivePreview.js.map +1 -1
  39. package/dist/src/components/MethodAccordion/MethodAccordion.js.map +1 -1
  40. package/dist/src/components/SVGLoader/SVGLoader.js.map +1 -1
  41. package/dist/src/components/SectionHead/SectionHead.js.map +1 -1
  42. package/dist/src/components/SimpleLabelValue/SimpleLabelValue.js.map +1 -1
  43. package/dist/src/components/Tooltip/Tooltip.js.map +1 -1
  44. package/dist/src/components/dialog/index.js.map +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 +1 -1
  50. package/dist/src/constants/regex.js.map +1 -1
  51. package/dist/src/helpers/layout.helper.js.map +1 -1
  52. package/dist/src/helpers/methodAccordion.helper.js.map +1 -1
  53. package/dist/src/layout/layout.js.map +1 -1
  54. package/dist/src/validator/form.scheme.js.map +1 -1
  55. package/dist/styles.css +335 -335
  56. package/package.json +43 -43
  57. package/rollup.config.js +35 -35
  58. package/src/assets/icons/AddRow.svg +3 -3
  59. package/src/assets/icons/CheckMarkSquare.svg +5 -5
  60. package/src/assets/icons/CloseIcon.svg +4 -4
  61. package/src/assets/icons/DeleteIcon.svg +3 -3
  62. package/src/assets/icons/DownArrow.svg +3 -3
  63. package/src/assets/icons/EditIcon.svg +3 -3
  64. package/src/assets/icons/UpArrow.svg +3 -3
  65. package/src/assets/icons/deleteOutlinedIcon.svg +8 -8
  66. package/src/assets/icons/index.ts +8 -8
  67. package/src/components/Chips/Chips.tsx +87 -87
  68. package/src/components/Chips/style.scss +147 -147
  69. package/src/components/InfoForm/InfoForm.module.scss +165 -165
  70. package/src/components/InfoForm/InfoForm.tsx +424 -426
  71. package/src/components/JsonInput/JsonInput.tsx +149 -149
  72. package/src/components/JsonInput/style.module.scss +133 -133
  73. package/src/components/LivePreview/LivePreview.module.scss +24 -24
  74. package/src/components/LivePreview/LivePreview.tsx +184 -184
  75. package/src/components/MethodAccordion/MethodAccordion.module.scss +338 -338
  76. package/src/components/MethodAccordion/MethodAccordion.tsx +515 -515
  77. package/src/components/SVGLoader/SVGLoader.tsx +94 -94
  78. package/src/components/SectionHead/SectionHead.scss +29 -29
  79. package/src/components/SectionHead/SectionHead.tsx +22 -22
  80. package/src/components/SimpleLabelValue/SimpleLabelValue.tsx +31 -31
  81. package/src/components/SimpleLabelValue/index.ts +1 -1
  82. package/src/components/SimpleLabelValue/style.scss +30 -30
  83. package/src/components/Tooltip/Tooltip.scss +133 -133
  84. package/src/components/Tooltip/Tooltip.tsx +85 -85
  85. package/src/components/_global.scss +337 -337
  86. package/src/components/dialog/dialog.ts +54 -54
  87. package/src/components/dialog/index.tsx +85 -85
  88. package/src/components/dialog/style.scss +104 -104
  89. package/src/components/table/style.scss +190 -190
  90. package/src/components/table/table.tsx +327 -327
  91. package/src/components/table/tags-table.tsx +348 -348
  92. package/src/constants/index.ts +93 -93
  93. package/src/constants/regex.ts +7 -7
  94. package/src/global.d.ts +13 -13
  95. package/src/helpers/layout.helper.ts +162 -162
  96. package/src/helpers/methodAccordion.helper.ts +19 -19
  97. package/src/index.ts +1 -1
  98. package/src/layout/layout.module.css +61 -61
  99. package/src/layout/layout.tsx +150 -150
  100. package/src/types/layout.type.ts +30 -30
  101. package/src/types/openApi.ts +108 -108
  102. package/src/types/transformedOpenApi.ts +52 -52
  103. package/src/validator/form.scheme.ts +70 -70
  104. package/tsconfig.json +33 -33
@@ -1,327 +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
- <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
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