@digi-frontend/dgate-api-documentation 1.1.12 → 1.3.0

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 (240) hide show
  1. package/.editorconfig +13 -0
  2. package/.prettierignore +8 -0
  3. package/.prettierrc +15 -0
  4. package/dist/_virtual/index4.js +1 -1
  5. package/dist/_virtual/index5.js +1 -1
  6. package/dist/_virtual/index6.js +1 -1
  7. package/dist/_virtual/index7.js +1 -1
  8. package/dist/node_modules/@popperjs/core/lib/createPopper.js +1 -1
  9. package/dist/node_modules/@popperjs/core/lib/createPopper.js.map +1 -1
  10. package/dist/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js +1 -1
  11. package/dist/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js.map +1 -1
  12. package/dist/node_modules/@popperjs/core/lib/enums.js +1 -1
  13. package/dist/node_modules/@popperjs/core/lib/enums.js.map +1 -1
  14. package/dist/node_modules/@popperjs/core/lib/modifiers/applyStyles.js +1 -1
  15. package/dist/node_modules/@popperjs/core/lib/modifiers/applyStyles.js.map +1 -1
  16. package/dist/node_modules/@popperjs/core/lib/modifiers/eventListeners.js +1 -1
  17. package/dist/node_modules/@popperjs/core/lib/modifiers/eventListeners.js.map +1 -1
  18. package/dist/node_modules/@popperjs/core/lib/modifiers/flip.js +1 -1
  19. package/dist/node_modules/@popperjs/core/lib/modifiers/flip.js.map +1 -1
  20. package/dist/node_modules/@popperjs/core/lib/modifiers/hide.js +1 -1
  21. package/dist/node_modules/@popperjs/core/lib/modifiers/hide.js.map +1 -1
  22. package/dist/node_modules/@popperjs/core/lib/modifiers/offset.js +1 -1
  23. package/dist/node_modules/@popperjs/core/lib/modifiers/offset.js.map +1 -1
  24. package/dist/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js +1 -1
  25. package/dist/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js.map +1 -1
  26. package/dist/node_modules/@popperjs/core/lib/utils/debounce.js +1 -1
  27. package/dist/node_modules/@popperjs/core/lib/utils/debounce.js.map +1 -1
  28. package/dist/node_modules/@popperjs/core/lib/utils/detectOverflow.js +1 -1
  29. package/dist/node_modules/@popperjs/core/lib/utils/detectOverflow.js.map +1 -1
  30. package/dist/node_modules/@popperjs/core/lib/utils/expandToHashMap.js +1 -1
  31. package/dist/node_modules/@popperjs/core/lib/utils/expandToHashMap.js.map +1 -1
  32. package/dist/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js +1 -1
  33. package/dist/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js.map +1 -1
  34. package/dist/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js +1 -1
  35. package/dist/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js.map +1 -1
  36. package/dist/node_modules/@popperjs/core/lib/utils/mergeByName.js +1 -1
  37. package/dist/node_modules/@popperjs/core/lib/utils/mergeByName.js.map +1 -1
  38. package/dist/node_modules/@popperjs/core/lib/utils/orderModifiers.js +1 -1
  39. package/dist/node_modules/@popperjs/core/lib/utils/orderModifiers.js.map +1 -1
  40. package/dist/node_modules/@popperjs/core/lib/utils/userAgent.js +1 -1
  41. package/dist/node_modules/@popperjs/core/lib/utils/userAgent.js.map +1 -1
  42. package/dist/node_modules/@tippyjs/react/dist/tippy-react.esm.js +1 -1
  43. package/dist/node_modules/@tippyjs/react/dist/tippy-react.esm.js.map +1 -1
  44. package/dist/node_modules/digitinary-ui/dist/index.js +1 -1
  45. package/dist/node_modules/digitinary-ui/dist/index.js.map +1 -1
  46. package/dist/node_modules/dom-serializer/lib/foreignNames.js +1 -1
  47. package/dist/node_modules/dom-serializer/lib/foreignNames.js.map +1 -1
  48. package/dist/node_modules/dom-serializer/lib/index.js +1 -1
  49. package/dist/node_modules/dom-serializer/lib/index.js.map +1 -1
  50. package/dist/node_modules/dom-serializer/node_modules/entities/lib/decode.js +1 -1
  51. package/dist/node_modules/dom-serializer/node_modules/entities/lib/decode.js.map +1 -1
  52. package/dist/node_modules/dom-serializer/node_modules/entities/lib/generated/decode-data-html.js +1 -1
  53. package/dist/node_modules/dom-serializer/node_modules/entities/lib/generated/decode-data-html.js.map +1 -1
  54. package/dist/node_modules/dom-serializer/node_modules/entities/lib/generated/decode-data-xml.js +1 -1
  55. package/dist/node_modules/dom-serializer/node_modules/entities/lib/generated/decode-data-xml.js.map +1 -1
  56. package/dist/node_modules/domhandler/lib/node.js +1 -1
  57. package/dist/node_modules/domhandler/lib/node.js.map +1 -1
  58. package/dist/node_modules/domutils/lib/feeds.js +1 -1
  59. package/dist/node_modules/domutils/lib/feeds.js.map +1 -1
  60. package/dist/node_modules/domutils/lib/helpers.js +1 -1
  61. package/dist/node_modules/domutils/lib/helpers.js.map +1 -1
  62. package/dist/node_modules/domutils/lib/legacy.js +1 -1
  63. package/dist/node_modules/domutils/lib/legacy.js.map +1 -1
  64. package/dist/node_modules/domutils/lib/querying.js +1 -1
  65. package/dist/node_modules/domutils/lib/querying.js.map +1 -1
  66. package/dist/node_modules/domutils/lib/stringify.js +1 -1
  67. package/dist/node_modules/domutils/lib/stringify.js.map +1 -1
  68. package/dist/node_modules/entities/dist/commonjs/decode.js +1 -1
  69. package/dist/node_modules/entities/dist/commonjs/decode.js.map +1 -1
  70. package/dist/node_modules/entities/dist/commonjs/generated/decode-data-html.js +1 -1
  71. package/dist/node_modules/entities/dist/commonjs/generated/decode-data-html.js.map +1 -1
  72. package/dist/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +1 -1
  73. package/dist/node_modules/entities/dist/commonjs/generated/decode-data-xml.js.map +1 -1
  74. package/dist/node_modules/formik/dist/formik.esm.js +1 -1
  75. package/dist/node_modules/formik/dist/formik.esm.js.map +1 -1
  76. package/dist/node_modules/formik/node_modules/deepmerge/dist/es.js +1 -1
  77. package/dist/node_modules/formik/node_modules/deepmerge/dist/es.js.map +1 -1
  78. package/dist/node_modules/highlight.js/lib/core.js +1 -1
  79. package/dist/node_modules/highlight.js/lib/core.js.map +1 -1
  80. package/dist/node_modules/highlight.js/lib/languages/json.js +1 -1
  81. package/dist/node_modules/highlight.js/lib/languages/json.js.map +1 -1
  82. package/dist/node_modules/html-react-parser/lib/utilities.js.map +1 -1
  83. package/dist/node_modules/htmlparser2/dist/commonjs/Tokenizer.js +1 -1
  84. package/dist/node_modules/htmlparser2/dist/commonjs/Tokenizer.js.map +1 -1
  85. package/dist/node_modules/htmlparser2/dist/commonjs/index.js +1 -1
  86. package/dist/node_modules/htmlparser2/dist/commonjs/index.js.map +1 -1
  87. package/dist/node_modules/js-yaml/dist/js-yaml.mjs.js +1 -1
  88. package/dist/node_modules/js-yaml/dist/js-yaml.mjs.js.map +1 -1
  89. package/dist/node_modules/lodash-es/_baseClone.js +1 -1
  90. package/dist/node_modules/lodash-es/_baseClone.js.map +1 -1
  91. package/dist/node_modules/lodash-es/_getSymbols.js +1 -1
  92. package/dist/node_modules/lodash-es/_getSymbols.js.map +1 -1
  93. package/dist/node_modules/lodash-es/_memoizeCapped.js +1 -1
  94. package/dist/node_modules/lodash-es/_memoizeCapped.js.map +1 -1
  95. package/dist/node_modules/lodash-es/_stringToPath.js +1 -1
  96. package/dist/node_modules/lodash-es/_stringToPath.js.map +1 -1
  97. package/dist/node_modules/property-expr/index.js +1 -1
  98. package/dist/node_modules/property-expr/index.js.map +1 -1
  99. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js +1 -1
  100. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -1
  101. package/dist/node_modules/react-property/lib/index.js +1 -1
  102. package/dist/node_modules/react-property/lib/index.js.map +1 -1
  103. package/dist/node_modules/react-syntax-highlighter/dist/esm/create-element.js +1 -1
  104. package/dist/node_modules/react-syntax-highlighter/dist/esm/create-element.js.map +1 -1
  105. package/dist/node_modules/react-syntax-highlighter/dist/esm/highlight.js +1 -1
  106. package/dist/node_modules/react-syntax-highlighter/dist/esm/highlight.js.map +1 -1
  107. package/dist/node_modules/react-toastify/dist/index.mjs.js +1 -1
  108. package/dist/node_modules/react-toastify/dist/index.mjs.js.map +1 -1
  109. package/dist/node_modules/style-to-js/cjs/index.js +1 -1
  110. package/dist/node_modules/style-to-js/cjs/index.js.map +1 -1
  111. package/dist/node_modules/style-to-object/cjs/index.js +1 -1
  112. package/dist/node_modules/style-to-object/cjs/index.js.map +1 -1
  113. package/dist/node_modules/tiny-case/index.js +1 -1
  114. package/dist/node_modules/tiny-case/index.js.map +1 -1
  115. package/dist/node_modules/tippy.js/dist/tippy.esm.js +1 -1
  116. package/dist/node_modules/tippy.js/dist/tippy.esm.js.map +1 -1
  117. package/dist/node_modules/toposort/index.js +1 -1
  118. package/dist/node_modules/toposort/index.js.map +1 -1
  119. package/dist/node_modules/tslib/tslib.es6.js +1 -1
  120. package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
  121. package/dist/node_modules/yup/index.esm.js +1 -1
  122. package/dist/node_modules/yup/index.esm.js.map +1 -1
  123. package/dist/src/components/InfoForm/InfoForm.js +1 -1
  124. package/dist/src/components/InfoForm/InfoForm.js.map +1 -1
  125. package/dist/src/components/JsonInput/JsonInput.js +1 -1
  126. package/dist/src/components/JsonInput/JsonInput.js.map +1 -1
  127. package/dist/src/components/LivePreview/LivePreview.js +1 -1
  128. package/dist/src/components/LivePreview/LivePreview.js.map +1 -1
  129. package/dist/src/components/MethodAccordion/MethodAccordion.js +1 -1
  130. package/dist/src/components/MethodAccordion/MethodAccordion.js.map +1 -1
  131. package/dist/src/components/SVGLoader/SVGLoader.js +1 -1
  132. package/dist/src/components/SVGLoader/SVGLoader.js.map +1 -1
  133. package/dist/src/components/Tooltip/Tooltip.js +1 -1
  134. package/dist/src/components/Tooltip/Tooltip.js.map +1 -1
  135. package/dist/src/components/table/table.js +1 -1
  136. package/dist/src/components/table/table.js.map +1 -1
  137. package/dist/src/components/table/tags-table.js +1 -1
  138. package/dist/src/components/table/tags-table.js.map +1 -1
  139. package/dist/src/constants/methods.constant.js +1 -1
  140. package/dist/src/constants/methods.constant.js.map +1 -1
  141. package/dist/src/context/SectionToggleContext.js +1 -1
  142. package/dist/src/context/SectionToggleContext.js.map +1 -1
  143. package/dist/src/helpers/docs.helper.js +1 -1
  144. package/dist/src/helpers/docs.helper.js.map +1 -1
  145. package/dist/src/helpers/layout.helper.js +1 -1
  146. package/dist/src/helpers/layout.helper.js.map +1 -1
  147. package/dist/src/layout/docsComponents/DocsAside/DocsAside.js +1 -1
  148. package/dist/src/layout/docsComponents/DocsAside/DocsAside.js.map +1 -1
  149. package/dist/src/layout/docsComponents/DocsContent/DocsContent.js +1 -1
  150. package/dist/src/layout/docsComponents/DocsContent/DocsContent.js.map +1 -1
  151. package/dist/src/layout/docsComponents/DocsContent/EndpointPage/index.js +1 -1
  152. package/dist/src/layout/docsComponents/DocsContent/EndpointPage/index.js.map +1 -1
  153. package/dist/src/layout/docsComponents/DocsContent/OverviewPage/index.js +1 -1
  154. package/dist/src/layout/docsComponents/DocsContent/OverviewPage/index.js.map +1 -1
  155. package/dist/src/layout/docsComponents/DocsHeader/DocsHeader.js +1 -1
  156. package/dist/src/layout/docsComponents/DocsHeader/DocsHeader.js.map +1 -1
  157. package/dist/src/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.js +1 -1
  158. package/dist/src/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.js.map +1 -1
  159. package/dist/src/layout/docsLayout.js +1 -1
  160. package/dist/src/layout/docsLayout.js.map +1 -1
  161. package/dist/src/layout/layout.js +1 -1
  162. package/dist/src/layout/layout.js.map +1 -1
  163. package/dist/src/utils/index.js +1 -1
  164. package/dist/src/utils/index.js.map +1 -1
  165. package/dist/src/validator/form.scheme.js +1 -1
  166. package/dist/src/validator/form.scheme.js.map +1 -1
  167. package/dist/styles.css +773 -773
  168. package/index.ts +2 -0
  169. package/package.json +4 -9
  170. package/rollup.config.js +37 -0
  171. package/src/assets/icons/AddRow.svg +3 -0
  172. package/src/assets/icons/ApiIcon.svg +12 -0
  173. package/src/assets/icons/ArrowBack.svg +3 -0
  174. package/src/assets/icons/BookIcon.svg +6 -0
  175. package/src/assets/icons/CheckMarkSquare.svg +5 -0
  176. package/src/assets/icons/CloseIcon.svg +4 -0
  177. package/src/assets/icons/CopySticker.svg +6 -0
  178. package/src/assets/icons/DeleteIcon.svg +3 -0
  179. package/src/assets/icons/DownArrow.svg +3 -0
  180. package/src/assets/icons/EditIcon.svg +3 -0
  181. package/src/assets/icons/FilterIcon.svg +4 -0
  182. package/src/assets/icons/Plus.svg +5 -0
  183. package/src/assets/icons/PlusSquare.svg +3 -0
  184. package/src/assets/icons/RequestOption.svg +5 -0
  185. package/src/assets/icons/UpArrow.svg +3 -0
  186. package/src/assets/icons/arrow-down.svg +3 -0
  187. package/src/assets/icons/arrow-up.svg +10 -0
  188. package/src/assets/icons/arrowDownGray.svg +3 -0
  189. package/src/assets/icons/arrowRightGray.svg +3 -0
  190. package/src/assets/icons/close-circle.svg +5 -0
  191. package/src/assets/icons/copy.svg +4 -0
  192. package/src/assets/icons/deleteOutlinedIcon.svg +8 -0
  193. package/src/assets/icons/document.svg +6 -0
  194. package/src/assets/icons/eye.svg +4 -0
  195. package/src/assets/icons/index.ts +27 -0
  196. package/src/assets/icons/infoIcon.svg +5 -0
  197. package/src/assets/icons/newCopyIcon.svg +4 -0
  198. package/src/assets/icons/searchIcon.svg +4 -0
  199. package/src/components/Chips/Chips.tsx +87 -0
  200. package/src/components/InfoForm/InfoForm.tsx +432 -0
  201. package/src/components/JsonInput/JsonInput.tsx +149 -0
  202. package/src/components/LivePreview/LivePreview.tsx +224 -0
  203. package/src/components/MethodAccordion/MethodAccordion.tsx +1070 -0
  204. package/src/components/SVGLoader/SVGLoader.tsx +96 -0
  205. package/src/components/SectionHead/SectionHead.tsx +22 -0
  206. package/src/components/SimpleLabelValue/SimpleLabelValue.tsx +31 -0
  207. package/src/components/SimpleLabelValue/index.ts +1 -0
  208. package/src/components/Tooltip/Tooltip.tsx +85 -0
  209. package/src/components/dialog/dialog.ts +61 -0
  210. package/src/components/dialog/index.tsx +88 -0
  211. package/src/components/table/table.tsx +508 -0
  212. package/src/components/table/tags-table.tsx +348 -0
  213. package/src/constants/index.ts +95 -0
  214. package/src/constants/methods.constant.ts +26 -0
  215. package/src/constants/regex.ts +7 -0
  216. package/src/context/SectionToggleContext.tsx +121 -0
  217. package/src/global.d.ts +13 -0
  218. package/src/helpers/docs.helper.ts +42 -0
  219. package/src/helpers/layout.helper.ts +290 -0
  220. package/src/helpers/methodAccordion.helper.ts +20 -0
  221. package/src/index.ts +2 -0
  222. package/src/layout/docsComponents/Codebox/Codebox.tsx +61 -0
  223. package/src/layout/docsComponents/DocsAside/DocsAside.tsx +112 -0
  224. package/src/layout/docsComponents/DocsContent/DocsContent.tsx +51 -0
  225. package/src/layout/docsComponents/DocsContent/EndpointPage/index.tsx +307 -0
  226. package/src/layout/docsComponents/DocsContent/OverviewPage/index.tsx +223 -0
  227. package/src/layout/docsComponents/DocsHeader/DocsHeader.tsx +188 -0
  228. package/src/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.tsx +229 -0
  229. package/src/layout/docsComponents/index.tsx +28 -0
  230. package/src/layout/docsLayout.tsx +123 -0
  231. package/src/layout/layout.module.css +65 -0
  232. package/src/layout/layout.tsx +177 -0
  233. package/src/types/docsLayout.type.ts +7 -0
  234. package/src/types/index.ts +28 -0
  235. package/src/types/layout.type.ts +32 -0
  236. package/src/types/openApi.ts +109 -0
  237. package/src/types/transformedOpenApi.ts +52 -0
  238. package/src/utils/index.ts +15 -0
  239. package/src/validator/form.scheme.ts +96 -0
  240. package/tsconfig.json +33 -0
@@ -0,0 +1,432 @@
1
+ import { useEffect, useState } from 'react'
2
+ // @ts-ignore
3
+ import { useFormikContext } from 'formik'
4
+ import { Button, Input, TextArea } from 'digitinary-ui'
5
+ import styles from './InfoForm.module.scss'
6
+ import regex from '../../constants/regex'
7
+ import { TransformedOpenApi } from '../../types/transformedOpenApi'
8
+ import Tooltip from '../../components/Tooltip/Tooltip'
9
+ import { CloseIcon, DeleteIcon, DeleteOutlinedIcon, EditIcon } from '../../assets/icons'
10
+ import SVGLoader from '../../components/SVGLoader/SVGLoader'
11
+ import CommonDialog from '../../components/dialog'
12
+ import { tagsTableHeaders } from '../../constants/index'
13
+ import TagsTable from '../../components/table/tags-table'
14
+
15
+ const InfoForm = ({ readOnly }: { readOnly?: boolean }) => {
16
+ const [tableData, setTableData] = useState([])
17
+ const [tableRecords, setTableRecords] = useState()
18
+ const [authType, setAuthType] = useState('')
19
+ const [description, setDescription] = useState('')
20
+ const [url, setURL] = useState('')
21
+ const { values, setFieldValue, errors } = useFormikContext<TransformedOpenApi>()
22
+ const [externalTooltipRefs, setExternalTooltipRefs] = useState<{ [key: number]: any }>({})
23
+ const [tooltipRefs, setTooltipRefs] = useState<{ [key: number]: any }>({})
24
+ const [selectedTagIndex, setSelectedTagIndex] = useState<number | null>(null)
25
+ const [selectedTagName, setSelectedTagName] = useState<string | null>(null)
26
+ const [openDeleteDialog, setOpenDeleteDialog] = useState(false)
27
+ const [isFormOpen, setIsFormOpen] = useState(false)
28
+
29
+ useEffect(() => {
30
+ if (values && values.components && values.components.securitySchemes) {
31
+ const authenticatorKeys = Object.keys(values.components.securitySchemes)
32
+ if (authenticatorKeys.length) {
33
+ const _authType =
34
+ values.components.securitySchemes[authenticatorKeys[0]].scheme ||
35
+ values.components.securitySchemes[authenticatorKeys[0]].type
36
+
37
+ setAuthType(_authType && _authType.toLowerCase() == 'public' ? 'Keyless' : _authType)
38
+ }
39
+ }
40
+ }, [])
41
+
42
+ useEffect(() => {
43
+ setTableRecords(generateTableRecords(tableData))
44
+ }, [tableData])
45
+
46
+ useEffect(() => {
47
+ if (values.tags && values.tags.length) {
48
+ setTableData(values.tags)
49
+ }
50
+ }, [values.tags])
51
+
52
+ const confirmDeleteTag = () => {
53
+ if (selectedTagIndex !== null) {
54
+ setTableData((prev) => prev.filter((_, i) => i !== selectedTagIndex))
55
+ setFieldValue(
56
+ `tags`,
57
+ values.tags?.filter((_, i) => i !== selectedTagIndex)
58
+ )
59
+ }
60
+ setOpenDeleteDialog(false)
61
+ setSelectedTagIndex(null)
62
+ }
63
+
64
+ const capitalize = (str) => {
65
+ if (!str) return ''
66
+ return str.charAt(0).toUpperCase() + str.slice(1)
67
+ }
68
+
69
+ const onTableChange = (key, value, index) => {
70
+ const newTableData = tableData.map((item, tIndex) => {
71
+ if (tIndex === index) {
72
+ return { ...item, [key]: value }
73
+ } else {
74
+ return item
75
+ }
76
+ })
77
+
78
+ setTableData(newTableData)
79
+ }
80
+
81
+ const saveNewRow = (tag) => {
82
+ setTableData([...tableData, tag])
83
+ const oldTags = values.tags || []
84
+ setFieldValue(`tags`, [...oldTags, tag])
85
+ }
86
+
87
+ const handleDeleteClick = (id: number, name: string) => {
88
+ setSelectedTagIndex(id)
89
+ setSelectedTagName(name)
90
+
91
+ setOpenDeleteDialog(true)
92
+ }
93
+
94
+ const generateTableRecords = (items) => {
95
+ return items.map((item, index) => ({
96
+ id: index,
97
+ tagName: item.name,
98
+ description: (
99
+ <div className={styles.paramDescContainer}>
100
+ <Tooltip
101
+ key={`${index}-description`}
102
+ allowHTML
103
+ disabled={values.tags[index].description?.length <= 12}
104
+ content={<div style={{ padding: '0.625rem' }}>{values.tags[index].description}</div>}
105
+ arrowWithBorder
106
+ placement="bottom-end"
107
+ type="function"
108
+ delay={[0, 0]}
109
+ onShow={() => tooltipRefs[index]?.hide()}
110
+ >
111
+ <p style={{ alignSelf: 'center', fontWeight: 600, fontSize: '1rem' }}>
112
+ {values.tags[index].description
113
+ ? values.tags[index].description.substring(0, 12)
114
+ : readOnly && '-'}
115
+ {values.tags[index].description && values.tags[index].description.length > 12
116
+ ? '...'
117
+ : ''}
118
+ </p>
119
+ </Tooltip>
120
+ <Tooltip
121
+ arrowWithBorder
122
+ placement="bottom-end"
123
+ type="function"
124
+ trigger="click"
125
+ delay={[0, 0]}
126
+ onCreate={(instance) =>
127
+ setTooltipRefs((prev) => ({
128
+ ...prev,
129
+ [index]: instance,
130
+ }))
131
+ }
132
+ content={
133
+ <div className={styles.editDescTooltipContent}>
134
+ <p className={styles.editDescTooltipContent_header}>Description</p>
135
+ <TextArea
136
+ placeholder="Describe tag..."
137
+ value={item.description}
138
+ disabled={readOnly}
139
+ onChange={(value) => {
140
+ if (value === '' || regex.ASCII.test(value))
141
+ onTableChange('description', value, index)
142
+ }}
143
+ maxLength={25}
144
+ />
145
+ {!readOnly && (
146
+ <Button
147
+ className={styles.editDescTooltipContent_btn}
148
+ variant="outlined"
149
+ size="small"
150
+ onClick={() => {
151
+ setFieldValue(`tags[${index}].description`, item.description?.trim())
152
+ tooltipRefs[index]?.hide()
153
+ }}
154
+ disabled={!item.description?.trim()}
155
+ >
156
+ Apply
157
+ </Button>
158
+ )}
159
+ </div>
160
+ }
161
+ >
162
+ {readOnly || values.tags[index].description ? (
163
+ <Button
164
+ className={styles.editDescBtn}
165
+ variant="link"
166
+ color="action"
167
+ endIcon={<SVGLoader src={EditIcon} width="1.5rem" height="1.5rem" />}
168
+ ></Button>
169
+ ) : (
170
+ <Button
171
+ className={styles.editDescBtn}
172
+ variant="link"
173
+ color="action"
174
+ endIcon={<SVGLoader src={EditIcon} width="1.5rem" height="1.5rem" />}
175
+ >
176
+ {readOnly || values.tags[index].description
177
+ ? 'View Description'
178
+ : 'Add Description'}
179
+ </Button>
180
+ )}
181
+ </Tooltip>
182
+ </div>
183
+ ),
184
+ externalDocs: (
185
+ <div className={styles.paramDescContainer}>
186
+ {values.tags[index].externalDocs?.description && values.tags[index].externalDocs?.url && (
187
+ <a
188
+ className={styles.externalDocsLink}
189
+ href={
190
+ values.tags[index]?.externalDocs?.url &&
191
+ values.tags[index]?.externalDocs?.url?.indexOf('http') > -1
192
+ ? values.tags[index]?.externalDocs?.url
193
+ : `https://${values.tags[index]?.externalDocs?.url}`
194
+ }
195
+ target="_blank"
196
+ style={
197
+ !values.tags[index].externalDocs?.description
198
+ ? { textDecoration: 'none', pointerEvents: 'none' }
199
+ : {}
200
+ }
201
+ >
202
+ {values.tags[index].externalDocs?.description
203
+ ? values.tags[index].externalDocs?.description?.substring(0, 12)
204
+ : readOnly && '-'}
205
+ {values.tags[index].externalDocs?.description &&
206
+ values.tags[index].externalDocs?.description?.length > 12
207
+ ? '...'
208
+ : ''}
209
+ </a>
210
+ )}
211
+
212
+ <Tooltip
213
+ arrowWithBorder
214
+ placement="bottom-end"
215
+ type="function"
216
+ trigger="click"
217
+ delay={[0, 0]}
218
+ onCreate={(instance) =>
219
+ setExternalTooltipRefs((prev) => ({
220
+ ...prev,
221
+ [index]: instance,
222
+ }))
223
+ }
224
+ content={
225
+ <div className={styles.editDescTooltipContent}>
226
+ <p className={styles.editDescTooltipContent_header}>External Docs Description</p>
227
+ <TextArea
228
+ placeholder="Describe External Doc..."
229
+ value={item.externalDocs?.description}
230
+ disabled={readOnly}
231
+ maxLength={25}
232
+ onChange={(value) => {
233
+ if (value === '' || regex.ASCII.test(value)) {
234
+ onTableChange(
235
+ 'externalDocs',
236
+ { ...item.externalDocs, description: value },
237
+ index
238
+ )
239
+ setDescription(value)
240
+ }
241
+ }}
242
+ />
243
+ <p className={styles.editDescTooltipContent_header}>External Docs Link</p>
244
+ <TextArea
245
+ placeholder="External Docs Link..."
246
+ value={item.externalDocs?.url}
247
+ disabled={readOnly}
248
+ maxLength={200}
249
+ restrictedCharsRegex={regex.urlRegex}
250
+ onChange={(value) => {
251
+ if (value === '' || regex.ASCII.test(value)) {
252
+ onTableChange('externalDocs', { ...item.externalDocs, url: value }, index)
253
+ setURL(value)
254
+ }
255
+ }}
256
+ />
257
+ {!readOnly && (
258
+ <Button
259
+ className={styles.editDescTooltipContent_btn}
260
+ variant="outlined"
261
+ size="small"
262
+ onClick={() => {
263
+ setFieldValue(`tags[${index}].externalDocs`, {
264
+ description: description?.trim(),
265
+ url: url?.trim(),
266
+ })
267
+ setDescription('')
268
+ setURL('')
269
+ externalTooltipRefs[index]?.hide()
270
+ }}
271
+ disabled={
272
+ !(
273
+ (values.tags[index].externalDocs?.url && !url?.trim()) ||
274
+ (url?.trim() && regex.urlRegex.test(url))
275
+ )
276
+ }
277
+ >
278
+ Apply
279
+ </Button>
280
+ )}
281
+ </div>
282
+ }
283
+ >
284
+ {readOnly || values.tags[index].externalDocs?.description ? (
285
+ <div className={styles.editExternalDocs}>
286
+ <SVGLoader
287
+ src={EditIcon}
288
+ width="1.5rem"
289
+ height="1.5rem"
290
+ onClick={(e) => {
291
+ e?.stopPropagation()
292
+ setDescription(item.externalDocs?.description)
293
+ setURL(item.externalDocs?.url)
294
+ }}
295
+ />
296
+ </div>
297
+ ) : (
298
+ <Button
299
+ className={styles.editDescBtn}
300
+ variant="link"
301
+ color="action"
302
+ endIcon={<SVGLoader src={EditIcon} width="1.5rem" height="1.5rem" />}
303
+ onClick={() => {
304
+ setDescription(item.externalDocs?.description)
305
+ setURL(item.externalDocs?.url)
306
+ }}
307
+ >
308
+ {readOnly ||
309
+ (values.tags[index]?.externalDocs &&
310
+ (values.tags[index]?.externalDocs?.url ||
311
+ values.tags[index].externalDocs?.description))
312
+ ? 'View '
313
+ : 'Add '}{' '}
314
+ External Docs Link
315
+ </Button>
316
+ )}
317
+ </Tooltip>
318
+
319
+ {!readOnly && <div className={styles.paramDescContainer_separator}></div>}
320
+
321
+ {!readOnly && (
322
+ <Button
323
+ className={styles.deleteParamBtn}
324
+ variant="link"
325
+ color="error"
326
+ endIcon={<SVGLoader src={DeleteIcon} width="1.125rem" height="1.125rem" />}
327
+ onClick={() => handleDeleteClick(index, item.name)}
328
+ ></Button>
329
+ )}
330
+ </div>
331
+ ),
332
+ }))
333
+ }
334
+
335
+ return (
336
+ <form className={styles.apiInfoForm} onSubmit={(e) => e.preventDefault()}>
337
+ <div className={styles.apiDocRow}>
338
+ <Input
339
+ size="large"
340
+ placeholder="e.g. Payments"
341
+ label="API Name"
342
+ required
343
+ value={values?.info?.title}
344
+ maxLength={35}
345
+ onChange={(value) => {
346
+ setFieldValue('info.title', value)
347
+ }}
348
+ onClear={() => {
349
+ setFieldValue('info.title', '')
350
+ }}
351
+ errorMsg={errors?.info?.title}
352
+ restrictedCharactersRegex={regex.basic}
353
+ />
354
+ <Input size="large" label="Version" required value={values?.info?.version} disabled />
355
+ </div>
356
+ <TextArea
357
+ size="large"
358
+ placeholder="Enter a description of the API's functionality..."
359
+ label="Description"
360
+ value={values?.info?.description}
361
+ maxLength={120}
362
+ required
363
+ onChange={(value: string) => {
364
+ if (value === '' || regex.ASCII.test(value)) {
365
+ setFieldValue('info.description', value)
366
+ }
367
+ }}
368
+ onClear={() => {
369
+ setFieldValue('info.description', '')
370
+ }}
371
+ errorMsg={errors?.info?.description}
372
+ />
373
+ <div className={styles.paramsTable}>
374
+ <TagsTable
375
+ id="paramter-table"
376
+ data={tableRecords}
377
+ headCells={tagsTableHeaders}
378
+ isFormOpen={isFormOpen}
379
+ setIsFormOpen={setIsFormOpen}
380
+ saveNewRow={saveNewRow}
381
+ readOnly={readOnly}
382
+ />
383
+ </div>
384
+ <CommonDialog
385
+ status="error"
386
+ content={
387
+ <p
388
+ style={{
389
+ textAlign: 'center',
390
+ fontWeight: 400,
391
+ fontSize: '1rem',
392
+ lineHeight: '1.4375rem',
393
+ }}
394
+ className="delete-msg-container"
395
+ >
396
+ Are you sure you want to delete
397
+ <span className="plan-name">
398
+ {' '}
399
+ Tag <strong>{selectedTagName}</strong>
400
+ </span>
401
+ ?
402
+ </p>
403
+ }
404
+ onSubmit={{
405
+ onClick: confirmDeleteTag,
406
+ text: 'Delete',
407
+ color: 'error',
408
+ fullWidth: true,
409
+ }}
410
+ onCancel={{
411
+ text: 'Cancel',
412
+ color: 'action',
413
+ fullWidth: true,
414
+ variant: 'outlined',
415
+ }}
416
+ onClose={() => setOpenDeleteDialog(false)}
417
+ open={openDeleteDialog}
418
+ icon={<SVGLoader src={DeleteOutlinedIcon} width="4.0625rem" height="4.0625rem" />}
419
+ closeIcon={
420
+ <SVGLoader
421
+ src={CloseIcon}
422
+ width="1.5rem"
423
+ height="1.5rem"
424
+ onClick={() => setOpenDeleteDialog(false)}
425
+ />
426
+ }
427
+ />
428
+ </form>
429
+ )
430
+ }
431
+
432
+ export default InfoForm
@@ -0,0 +1,149 @@
1
+ import React, { useEffect, useState } from 'react'
2
+ import yaml from 'js-yaml'
3
+ import styles from './style.module.scss'
4
+ import regex from '../../constants/regex'
5
+
6
+ const errorMapping = {
7
+ BOTH: 'Invalid JSON or YAML format',
8
+ JSON: 'Invalid JSON format',
9
+ YML: 'Invalid YAML format',
10
+ }
11
+
12
+ const JsonInput = ({
13
+ placeholder,
14
+ label,
15
+ value,
16
+ onValidation,
17
+ onChange,
18
+ dataId,
19
+ className = '',
20
+ errorMessage,
21
+ acceptType = 'BOTH',
22
+ fieldIsDisabled,
23
+ withFooter = true,
24
+ }) => {
25
+ const [isValid, setIsValid] = useState()
26
+ const [disabledBeautify, setDisabledBeautify] = useState(true)
27
+
28
+ const handlePrettify = (e) => {
29
+ if (value === '') return
30
+ e.preventDefault()
31
+ try {
32
+ let prettifiedData
33
+ if ((acceptType === 'BOTH' || acceptType === 'JSON') && isValidJson(value)) {
34
+ // If it's valid JSON, prettify JSON
35
+ prettifiedData = JSON.stringify(JSON.parse(value), null, 2)
36
+ } else if (acceptType === 'BOTH' || acceptType === 'YML') {
37
+ // If it's not valid JSON, prettify YAML
38
+ prettifiedData = yaml.dump(yaml.load(value), { indent: 0 })
39
+ }
40
+ onChange(prettifiedData)
41
+ setIsValid(true) // Reset validity status
42
+ } catch (error) {
43
+ console.error(error)
44
+ setIsValid(false)
45
+ }
46
+ }
47
+
48
+ // Function to check if input is valid JSON
49
+ const isValidJson = (str) => {
50
+ try {
51
+ JSON.parse(str)
52
+ return true
53
+ } catch (error) {
54
+ return false
55
+ }
56
+ }
57
+
58
+ const checkIsValid = () => {
59
+ if (acceptType === 'BOTH' || acceptType === 'JSON') {
60
+ return isValidJson(value)
61
+ } else if (acceptType === 'BOTH' || acceptType === 'YML') {
62
+ try {
63
+ // Try parsing as YAML
64
+ yaml.load(value)
65
+ return true
66
+ } catch (error) {
67
+ console.error(error)
68
+ return false
69
+ }
70
+ }
71
+ }
72
+
73
+ useEffect(() => {
74
+ try {
75
+ handlePrettify(value)
76
+ } catch {}
77
+ }, [])
78
+
79
+ return (
80
+ <div
81
+ className={`${styles['json-editor-container']} ${className} ${
82
+ fieldIsDisabled ? styles.disabled : ''
83
+ }`}
84
+ >
85
+ {label && <p className={`${styles['json-editor-label']}`}>{label}</p>}
86
+ <div
87
+ className={`${styles['json-editor']} ${
88
+ value !== '' && isValid === false ? styles.invalid : ''
89
+ }`}
90
+ >
91
+ <textarea
92
+ disabled={fieldIsDisabled}
93
+ data-id={dataId}
94
+ value={value}
95
+ onChange={(e) => {
96
+ if (fieldIsDisabled) return
97
+ if (regex.ASCII.test(e.target.value)) {
98
+ setIsValid(undefined)
99
+ setDisabledBeautify(true)
100
+ onChange(e.target.value)
101
+ }
102
+ }}
103
+ onPaste={(e) => {
104
+ if (fieldIsDisabled) return
105
+ if (regex.ASCII.test(e.target.value)) {
106
+ setIsValid(undefined)
107
+ setDisabledBeautify(true)
108
+ onChange(e.target.value)
109
+ }
110
+ }}
111
+ min="1"
112
+ placeholder={placeholder}
113
+ />
114
+ {withFooter && (
115
+ <div className={`${styles['actions-container']}`}>
116
+ <button
117
+ type="button"
118
+ className={styles.validate}
119
+ onClick={() => {
120
+ const valid = checkIsValid()
121
+ setIsValid(valid)
122
+ onValidation(valid)
123
+ setDisabledBeautify(!checkIsValid())
124
+ }}
125
+ data-id={`${dataId}-VALIDATE-BUTTON`}
126
+ disabled={value === ''}
127
+ >
128
+ Validate
129
+ </button>
130
+ <button
131
+ type="button"
132
+ disabled={value === '' || disabledBeautify}
133
+ data-id={`${dataId}-BEAUTIFY-BUTTON`}
134
+ className={styles.beautify}
135
+ onClick={handlePrettify}
136
+ >
137
+ Beautify
138
+ </button>
139
+ </div>
140
+ )}
141
+ </div>
142
+ {(errorMessage || (value !== '' && isValid === false)) && (
143
+ <p className={styles['error-message']}>{errorMessage || errorMapping[acceptType]}</p>
144
+ )}
145
+ </div>
146
+ )
147
+ }
148
+
149
+ export default JsonInput