@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,348 +1,348 @@
1
- import { useEffect, useState } from 'react'
2
- import './style.scss'
3
- import _styles from '../InfoForm/InfoForm.module.scss'
4
- import { Button, Input, TextArea } from 'digitinary-ui'
5
- import Tooltip from '../Tooltip/Tooltip'
6
- import SVGLoader from '../SVGLoader/SVGLoader'
7
- import { AddRow, EditIcon, DeleteIcon } from '../../assets/icons'
8
- import styles from '../MethodAccordion/MethodAccordion.module.scss'
9
- import { useFormik } from 'formik'
10
- import * as yup from 'yup'
11
- import regex from '../../constants/regex'
12
-
13
- const TagsTable = ({ id, headCells, data, isFormOpen, setIsFormOpen, saveNewRow, readOnly }) => {
14
- const [text, setText] = useState('')
15
- const [externalDesc, setExternalDesc] = useState('')
16
- const [externalUrl, setExternalUrl] = useState('')
17
- const [tooltipRef, setTooltipRef] = useState(null)
18
- const [externalTooltipRefs, setExternalTooltipRefs] = useState(null)
19
- const { values, errors, setFieldValue, isValid, submitForm, resetForm } = useFormik({
20
- validateOnMount: true,
21
- initialValues: {
22
- name: '',
23
- description: '',
24
- externalDocs: {
25
- url: '',
26
- description: '',
27
- },
28
- },
29
- validationSchema: yup.object().shape({
30
- name: yup.string().trim().required('Tag name is required'),
31
- description: yup.string().optional(),
32
- externalDocs: yup
33
- .object()
34
- .shape({
35
- url: yup
36
- .string()
37
- .trim()
38
- .matches(regex.urlRegex, 'Invalid URL')
39
- .when('description', (description, schema) => {
40
- return description?.at(0)
41
- ? schema.required('URL is required when description is provided')
42
- : schema.optional()
43
- }),
44
- description: yup.string().trim().optional(),
45
- })
46
- .optional(),
47
- }),
48
- onSubmit: (values) => {
49
- saveNewRow(values)
50
- setText('')
51
- resetForm()
52
- setIsFormOpen(false)
53
- },
54
- validateOnChange: true,
55
- })
56
-
57
- return (
58
- <div className="tableSectionContainer">
59
- <div className="tableContainer">
60
- <table id={id || ''} className={`table borderRadiusTop borderRadiusBottom`}>
61
- <thead className="tableHead">
62
- <tr>
63
- {headCells?.map((headCell) => (
64
- <th
65
- key={headCell.id}
66
- className={`tableHeadCell ${headCell.classes || ''}`}
67
- style={{ width: headCell.width, minWidth: headCell.minWidth }}
68
- >
69
- <div
70
- className="headContainer"
71
- data-id={`${
72
- typeof headCell.label === 'string'
73
- ? headCell.label.toUpperCase().replace(/[^a-zA-Z0-9]+/g, '_')
74
- : 'UNKNOWN_LABEL'
75
- }_COLUMN`}
76
- >
77
- {headCell.label}
78
- </div>
79
- </th>
80
- ))}
81
- </tr>
82
- </thead>
83
- <tbody className="tableBody" data-id="TABLE_BODY">
84
- {data?.map((row, rowIndex) => {
85
- return (
86
- <tr key={rowIndex} data-i={rowIndex} className={`row`}>
87
- {headCells?.map((headCell) => {
88
- const cellContent = row[headCell.id] !== '_' && (
89
- <div
90
- data-id="TEXT_DESCRIPTION"
91
- className="tableData"
92
- style={{
93
- width: headCell.width,
94
- minWidth: headCell.minWidth,
95
- }}
96
- >
97
- {row[headCell.id]}
98
- </div>
99
- )
100
-
101
- return (
102
- <td
103
- key={headCell.id}
104
- style={{
105
- width: headCell.width,
106
- minWidth: headCell.minWidth,
107
- }}
108
- >
109
- {cellContent}
110
- </td>
111
- )
112
- })}
113
- </tr>
114
- )
115
- })}
116
- {isFormOpen ? (
117
- <tr key={''} data-i={''} className={`row`}>
118
- <td key={'tag name'}>
119
- <div data-id="TEXT_DESCRIPTION" className="tableData">
120
- <Input
121
- placeholder="Tag name"
122
- size="large"
123
- type="text"
124
- maxLength={25}
125
- onChange={(value) => {
126
- !regex.basic.test(value) && setFieldValue('name', value)
127
- }} // Pass the value directly
128
- value={values.name} // Bind value to the state
129
- disabled={readOnly}
130
- />
131
- </div>
132
- </td>
133
-
134
- <td key={'tagDescRequired'}>
135
- <div data-id="TEXT_DESCRIPTION" className="tableData">
136
- <div className={styles.paramDescContainer}>
137
- <Tooltip
138
- arrowWithBorder
139
- placement="bottom-end"
140
- type="function"
141
- trigger="click"
142
- delay={[0, 0]}
143
- onCreate={(instance) => setTooltipRef(instance)}
144
- onShow={() => {
145
- setText(values.description || '') // Reset to current value when shown
146
- }}
147
- onHidden={() => {
148
- setText(values.description || '') // Reset on close
149
- }}
150
- content={
151
- <div className={_styles.editDescTooltipContent}>
152
- <p className={_styles.editDescTooltipContent_header}>Description</p>
153
- <TextArea
154
- value={text || values.description}
155
- disabled={readOnly}
156
- maxLength={25}
157
- placeholder="Describe Tag..."
158
- onChange={(value) => {
159
- if (value === '' || regex.ASCII.test(value)) setText(value)
160
- }}
161
- />
162
- {!readOnly && (
163
- <Button
164
- className={_styles.editDescTooltipContent_btn}
165
- variant="outlined"
166
- size="small"
167
- onClick={() => {
168
- setFieldValue('description', text?.trim())
169
- tooltipRef?.hide()
170
- }}
171
- disabled={!(text || values.description)?.trim()}
172
- >
173
- Apply
174
- </Button>
175
- )}
176
- </div>
177
- }
178
- >
179
- <Button
180
- className={_styles.editDescBtn}
181
- style={{ paddingLeft: 0 }}
182
- variant="link"
183
- color="action"
184
- endIcon={<SVGLoader src={EditIcon} width="1.5rem" height="1.5rem" />}
185
- >
186
- {readOnly ? 'View ' : 'Add '} Description
187
- </Button>
188
- </Tooltip>
189
- </div>{' '}
190
- </div>
191
- </td>
192
- <td key={'tagExternal'}>
193
- <div className="tableData">
194
- <div className={_styles.paramDescContainer}>
195
- <Tooltip
196
- arrowWithBorder
197
- placement="bottom-end"
198
- type="function"
199
- trigger="click"
200
- delay={[0, 0]}
201
- onCreate={(instance) => setExternalTooltipRefs(instance)}
202
- onShow={() => {
203
- setExternalDesc(values.externalDocs.description || '')
204
- setExternalUrl(values.externalDocs.url || '')
205
- }}
206
- onHidden={() => {
207
- setExternalDesc(values.externalDocs.description || '')
208
- setExternalUrl(values.externalDocs.url || '')
209
- }}
210
- content={
211
- <div className={_styles.editDescTooltipContent}>
212
- <p className={_styles.editDescTooltipContent_header}>
213
- External Docs Description
214
- </p>
215
- <TextArea
216
- placeholder="Describe External Doc..."
217
- value={externalDesc || values.externalDocs.description}
218
- disabled={readOnly}
219
- maxLength={25}
220
- onChange={(value) => {
221
- if (value === '' || regex.ASCII.test(value)) setExternalDesc(value)
222
- }}
223
- />
224
- <p className={_styles.editDescTooltipContent_header}>
225
- External Docs Link
226
- </p>
227
- <TextArea
228
- placeholder="External Docs Link..."
229
- value={externalUrl || values.externalDocs.url}
230
- disabled={readOnly}
231
- maxLength={200}
232
- onChange={(value) => {
233
- if (value === '' || regex.ASCII.test(value)) setExternalUrl(value)
234
- }}
235
- />
236
- {!readOnly && (
237
- <Button
238
- className={_styles.editDescTooltipContent_btn}
239
- variant="outlined"
240
- size="small"
241
- onClick={() => {
242
- setFieldValue(`externalDocs`, {
243
- description: externalDesc,
244
- url: externalUrl,
245
- })
246
-
247
- externalTooltipRefs?.hide()
248
- }}
249
- disabled={
250
- !(externalDesc || values.externalDocs.description)?.trim() ||
251
- !(externalUrl || values.externalDocs.url)?.trim() ||
252
- !regex.urlRegex.test(externalUrl || values.externalDocs.url)
253
- }
254
- >
255
- Apply
256
- </Button>
257
- )}
258
- </div>
259
- }
260
- >
261
- {readOnly ? (
262
- <a
263
- className={_styles.editDescBtn}
264
- variant="link"
265
- color="action"
266
- href={values.externalDocs?.url}
267
- target="_blank"
268
- >
269
- {values?.externalDocs?.description
270
- ? values?.externalDocs?.description?.substring(0, 12)
271
- : '-'}
272
- {values?.externalDocs?.description &&
273
- values?.externalDocs?.description?.length > 12
274
- ? '...'
275
- : ''}
276
- </a>
277
- ) : (
278
- <Button
279
- className={_styles.editDescBtn}
280
- variant="link"
281
- color="action"
282
- endIcon={<SVGLoader src={EditIcon} width="1.5rem" height="1.5rem" />}
283
- >
284
- {readOnly ? 'View ' : 'Add '} External Docs Link
285
- </Button>
286
- )}
287
- </Tooltip>
288
- <div className={_styles.paramDescContainer_separator}></div>
289
- {!readOnly && (
290
- <Button
291
- className={_styles.deleteParamBtn}
292
- variant="link"
293
- color="error"
294
- endIcon={
295
- <SVGLoader src={DeleteIcon} width="1.125rem" height="1.125rem" />
296
- }
297
- onClick={() => {
298
- resetForm()
299
- setText('')
300
- setIsFormOpen(false)
301
- }} // Correctly delete the new row
302
- />
303
- )}
304
-
305
- {!readOnly && (
306
- <Button
307
- className={_styles.deleteParamBtn}
308
- variant="link"
309
- color="success"
310
- disabled={!isValid}
311
- endIcon={<SVGLoader src={AddRow} width="0.125rem" height="0.125rem" />}
312
- onClick={() => {
313
- setText('')
314
- submitForm()
315
- }} // Save the new row when clicked
316
- />
317
- )}
318
- </div>
319
- </div>
320
- </td>
321
- </tr>
322
- ) : (
323
- <>
324
- {!readOnly && (
325
- <tr key={'addNew'} data-i={'addNew'} className={`row`}>
326
- <td colSpan={5}>
327
- <Button
328
- variant="link"
329
- color="primary"
330
- onClick={() => {
331
- setIsFormOpen((prev) => !prev)
332
- }}
333
- >
334
- + Add Tag
335
- </Button>
336
- </td>
337
- </tr>
338
- )}
339
- </>
340
- )}
341
- </tbody>
342
- </table>
343
- </div>
344
- </div>
345
- )
346
- }
347
-
348
- export default TagsTable
1
+ import { useEffect, useState } from 'react'
2
+ import './style.scss'
3
+ import _styles from '../InfoForm/InfoForm.module.scss'
4
+ import { Button, Input, TextArea } from 'digitinary-ui'
5
+ import Tooltip from '../Tooltip/Tooltip'
6
+ import SVGLoader from '../SVGLoader/SVGLoader'
7
+ import { AddRow, EditIcon, DeleteIcon } from '../../assets/icons'
8
+ import styles from '../MethodAccordion/MethodAccordion.module.scss'
9
+ import { useFormik } from 'formik'
10
+ import * as yup from 'yup'
11
+ import regex from '../../constants/regex'
12
+
13
+ const TagsTable = ({ id, headCells, data, isFormOpen, setIsFormOpen, saveNewRow, readOnly }) => {
14
+ const [text, setText] = useState('')
15
+ const [externalDesc, setExternalDesc] = useState('')
16
+ const [externalUrl, setExternalUrl] = useState('')
17
+ const [tooltipRef, setTooltipRef] = useState(null)
18
+ const [externalTooltipRefs, setExternalTooltipRefs] = useState(null)
19
+ const { values, errors, setFieldValue, isValid, submitForm, resetForm } = useFormik({
20
+ validateOnMount: true,
21
+ initialValues: {
22
+ name: '',
23
+ description: '',
24
+ externalDocs: {
25
+ url: '',
26
+ description: '',
27
+ },
28
+ },
29
+ validationSchema: yup.object().shape({
30
+ name: yup.string().trim().required('Tag name is required'),
31
+ description: yup.string().optional(),
32
+ externalDocs: yup
33
+ .object()
34
+ .shape({
35
+ url: yup
36
+ .string()
37
+ .trim()
38
+ .matches(regex.urlRegex, 'Invalid URL')
39
+ .when('description', (description, schema) => {
40
+ return description?.at(0)
41
+ ? schema.required('URL is required when description is provided')
42
+ : schema.optional()
43
+ }),
44
+ description: yup.string().trim().optional(),
45
+ })
46
+ .optional(),
47
+ }),
48
+ onSubmit: (values) => {
49
+ saveNewRow(values)
50
+ setText('')
51
+ resetForm()
52
+ setIsFormOpen(false)
53
+ },
54
+ validateOnChange: true,
55
+ })
56
+
57
+ return (
58
+ <div className="tableSectionContainer">
59
+ <div className="tableContainer">
60
+ <table id={id || ''} className={`table borderRadiusTop borderRadiusBottom`}>
61
+ <thead className="tableHead">
62
+ <tr>
63
+ {headCells?.map((headCell) => (
64
+ <th
65
+ key={headCell.id}
66
+ className={`tableHeadCell ${headCell.classes || ''}`}
67
+ style={{ width: headCell.width, minWidth: headCell.minWidth }}
68
+ >
69
+ <div
70
+ className="headContainer"
71
+ data-id={`${
72
+ typeof headCell.label === 'string'
73
+ ? headCell.label.toUpperCase().replace(/[^a-zA-Z0-9]+/g, '_')
74
+ : 'UNKNOWN_LABEL'
75
+ }_COLUMN`}
76
+ >
77
+ {headCell.label}
78
+ </div>
79
+ </th>
80
+ ))}
81
+ </tr>
82
+ </thead>
83
+ <tbody className="tableBody" data-id="TABLE_BODY">
84
+ {data?.map((row, rowIndex) => {
85
+ return (
86
+ <tr key={rowIndex} data-i={rowIndex} className={`row`}>
87
+ {headCells?.map((headCell) => {
88
+ const cellContent = row[headCell.id] !== '_' && (
89
+ <div
90
+ data-id="TEXT_DESCRIPTION"
91
+ className="tableData"
92
+ style={{
93
+ width: headCell.width,
94
+ minWidth: headCell.minWidth,
95
+ }}
96
+ >
97
+ {row[headCell.id]}
98
+ </div>
99
+ )
100
+
101
+ return (
102
+ <td
103
+ key={headCell.id}
104
+ style={{
105
+ width: headCell.width,
106
+ minWidth: headCell.minWidth,
107
+ }}
108
+ >
109
+ {cellContent}
110
+ </td>
111
+ )
112
+ })}
113
+ </tr>
114
+ )
115
+ })}
116
+ {isFormOpen ? (
117
+ <tr key={''} data-i={''} className={`row`}>
118
+ <td key={'tag name'}>
119
+ <div data-id="TEXT_DESCRIPTION" className="tableData">
120
+ <Input
121
+ placeholder="Tag name"
122
+ size="large"
123
+ type="text"
124
+ maxLength={25}
125
+ onChange={(value) => {
126
+ !regex.basic.test(value) && setFieldValue('name', value)
127
+ }} // Pass the value directly
128
+ value={values.name} // Bind value to the state
129
+ disabled={readOnly}
130
+ />
131
+ </div>
132
+ </td>
133
+
134
+ <td key={'tagDescRequired'}>
135
+ <div data-id="TEXT_DESCRIPTION" className="tableData">
136
+ <div className={styles.paramDescContainer}>
137
+ <Tooltip
138
+ arrowWithBorder
139
+ placement="bottom-end"
140
+ type="function"
141
+ trigger="click"
142
+ delay={[0, 0]}
143
+ onCreate={(instance) => setTooltipRef(instance)}
144
+ onShow={() => {
145
+ setText(values.description || '') // Reset to current value when shown
146
+ }}
147
+ onHidden={() => {
148
+ setText(values.description || '') // Reset on close
149
+ }}
150
+ content={
151
+ <div className={_styles.editDescTooltipContent}>
152
+ <p className={_styles.editDescTooltipContent_header}>Description</p>
153
+ <TextArea
154
+ value={text || values.description}
155
+ disabled={readOnly}
156
+ maxLength={25}
157
+ placeholder="Describe Tag..."
158
+ onChange={(value) => {
159
+ if (value === '' || regex.ASCII.test(value)) setText(value)
160
+ }}
161
+ />
162
+ {!readOnly && (
163
+ <Button
164
+ className={_styles.editDescTooltipContent_btn}
165
+ variant="outlined"
166
+ size="small"
167
+ onClick={() => {
168
+ setFieldValue('description', text?.trim())
169
+ tooltipRef?.hide()
170
+ }}
171
+ disabled={!(text || values.description)?.trim()}
172
+ >
173
+ Apply
174
+ </Button>
175
+ )}
176
+ </div>
177
+ }
178
+ >
179
+ <Button
180
+ className={_styles.editDescBtn}
181
+ style={{ paddingLeft: 0 }}
182
+ variant="link"
183
+ color="action"
184
+ endIcon={<SVGLoader src={EditIcon} width="1.5rem" height="1.5rem" />}
185
+ >
186
+ {readOnly ? 'View ' : 'Add '} Description
187
+ </Button>
188
+ </Tooltip>
189
+ </div>{' '}
190
+ </div>
191
+ </td>
192
+ <td key={'tagExternal'}>
193
+ <div className="tableData">
194
+ <div className={_styles.paramDescContainer}>
195
+ <Tooltip
196
+ arrowWithBorder
197
+ placement="bottom-end"
198
+ type="function"
199
+ trigger="click"
200
+ delay={[0, 0]}
201
+ onCreate={(instance) => setExternalTooltipRefs(instance)}
202
+ onShow={() => {
203
+ setExternalDesc(values.externalDocs.description || '')
204
+ setExternalUrl(values.externalDocs.url || '')
205
+ }}
206
+ onHidden={() => {
207
+ setExternalDesc(values.externalDocs.description || '')
208
+ setExternalUrl(values.externalDocs.url || '')
209
+ }}
210
+ content={
211
+ <div className={_styles.editDescTooltipContent}>
212
+ <p className={_styles.editDescTooltipContent_header}>
213
+ External Docs Description
214
+ </p>
215
+ <TextArea
216
+ placeholder="Describe External Doc..."
217
+ value={externalDesc || values.externalDocs.description}
218
+ disabled={readOnly}
219
+ maxLength={25}
220
+ onChange={(value) => {
221
+ if (value === '' || regex.ASCII.test(value)) setExternalDesc(value)
222
+ }}
223
+ />
224
+ <p className={_styles.editDescTooltipContent_header}>
225
+ External Docs Link
226
+ </p>
227
+ <TextArea
228
+ placeholder="External Docs Link..."
229
+ restrictedCharsRegex={regex.urlRegex}
230
+ value={externalUrl || values.externalDocs.url}
231
+ disabled={readOnly}
232
+ maxLength={200}
233
+ onChange={(value) => {
234
+ if (value === '' || regex.ASCII.test(value)) setExternalUrl(value)
235
+ }}
236
+ />
237
+ {!readOnly && (
238
+ <Button
239
+ className={_styles.editDescTooltipContent_btn}
240
+ variant="outlined"
241
+ size="small"
242
+ onClick={() => {
243
+ setFieldValue(`externalDocs`, {
244
+ description: externalDesc,
245
+ url: externalUrl,
246
+ })
247
+
248
+ externalTooltipRefs?.hide()
249
+ }}
250
+ disabled={
251
+ !(externalUrl || values.externalDocs.url)?.trim() ||
252
+ !regex.urlRegex.test(externalUrl || values.externalDocs.url)
253
+ }
254
+ >
255
+ Apply
256
+ </Button>
257
+ )}
258
+ </div>
259
+ }
260
+ >
261
+ {readOnly ? (
262
+ <a
263
+ className={_styles.editDescBtn}
264
+ variant="link"
265
+ color="action"
266
+ href={values.externalDocs?.url}
267
+ target="_blank"
268
+ >
269
+ {values?.externalDocs?.description
270
+ ? values?.externalDocs?.description?.substring(0, 12)
271
+ : '-'}
272
+ {values?.externalDocs?.description &&
273
+ values?.externalDocs?.description?.length > 12
274
+ ? '...'
275
+ : ''}
276
+ </a>
277
+ ) : (
278
+ <Button
279
+ className={_styles.editDescBtn}
280
+ variant="link"
281
+ color="action"
282
+ endIcon={<SVGLoader src={EditIcon} width="1.5rem" height="1.5rem" />}
283
+ >
284
+ {readOnly ? 'View ' : 'Add '} External Docs Link
285
+ </Button>
286
+ )}
287
+ </Tooltip>
288
+ <div className={_styles.paramDescContainer_separator}></div>
289
+ {!readOnly && (
290
+ <Button
291
+ className={_styles.deleteParamBtn}
292
+ variant="link"
293
+ color="error"
294
+ endIcon={
295
+ <SVGLoader src={DeleteIcon} width="1.125rem" height="1.125rem" />
296
+ }
297
+ onClick={() => {
298
+ resetForm()
299
+ setText('')
300
+ setIsFormOpen(false)
301
+ }} // Correctly delete the new row
302
+ />
303
+ )}
304
+
305
+ {!readOnly && (
306
+ <Button
307
+ className={_styles.deleteParamBtn}
308
+ variant="link"
309
+ color="success"
310
+ disabled={!isValid}
311
+ endIcon={<SVGLoader src={AddRow} width="0.125rem" height="0.125rem" />}
312
+ onClick={() => {
313
+ setText('')
314
+ submitForm()
315
+ }} // Save the new row when clicked
316
+ />
317
+ )}
318
+ </div>
319
+ </div>
320
+ </td>
321
+ </tr>
322
+ ) : (
323
+ <>
324
+ {!readOnly && (
325
+ <tr key={'addNew'} data-i={'addNew'} className={`row`}>
326
+ <td colSpan={5}>
327
+ <Button
328
+ variant="link"
329
+ color="primary"
330
+ onClick={() => {
331
+ setIsFormOpen((prev) => !prev)
332
+ }}
333
+ >
334
+ + Add Tag
335
+ </Button>
336
+ </td>
337
+ </tr>
338
+ )}
339
+ </>
340
+ )}
341
+ </tbody>
342
+ </table>
343
+ </div>
344
+ </div>
345
+ )
346
+ }
347
+
348
+ export default TagsTable