@digi-frontend/dgate-api-documentation 1.0.47 → 1.0.52

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 (158) hide show
  1. package/dist/_virtual/core.js +2 -0
  2. package/dist/_virtual/core.js.map +1 -0
  3. package/dist/_virtual/core2.js +2 -0
  4. package/dist/_virtual/core2.js.map +1 -0
  5. package/dist/_virtual/format.js +2 -0
  6. package/dist/_virtual/format.js.map +1 -0
  7. package/dist/_virtual/index3.js +1 -1
  8. package/dist/_virtual/index4.js +1 -1
  9. package/dist/_virtual/index5.js +1 -1
  10. package/dist/_virtual/index6.js +1 -1
  11. package/dist/f4452c3ebcf0d5da.svg +4 -0
  12. package/dist/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js +2 -0
  13. package/dist/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js.map +1 -0
  14. package/dist/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js +2 -0
  15. package/dist/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js.map +1 -0
  16. package/dist/node_modules/@babel/runtime/helpers/esm/defineProperty.js +2 -0
  17. package/dist/node_modules/@babel/runtime/helpers/esm/defineProperty.js.map +1 -0
  18. package/dist/node_modules/@babel/runtime/helpers/esm/extends.js +2 -0
  19. package/dist/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -0
  20. package/dist/node_modules/@babel/runtime/helpers/esm/iterableToArray.js +2 -0
  21. package/dist/node_modules/@babel/runtime/helpers/esm/iterableToArray.js.map +1 -0
  22. package/dist/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js +2 -0
  23. package/dist/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js.map +1 -0
  24. package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js +2 -0
  25. package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js.map +1 -0
  26. package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +2 -0
  27. package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -0
  28. package/dist/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js +2 -0
  29. package/dist/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js.map +1 -0
  30. package/dist/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +2 -0
  31. package/dist/node_modules/@babel/runtime/helpers/esm/toPrimitive.js.map +1 -0
  32. package/dist/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +2 -0
  33. package/dist/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js.map +1 -0
  34. package/dist/node_modules/@babel/runtime/helpers/esm/typeof.js +2 -0
  35. package/dist/node_modules/@babel/runtime/helpers/esm/typeof.js.map +1 -0
  36. package/dist/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js +2 -0
  37. package/dist/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js.map +1 -0
  38. package/dist/node_modules/fault/index.js +2 -0
  39. package/dist/node_modules/fault/index.js.map +1 -0
  40. package/dist/node_modules/format/format.js +2 -0
  41. package/dist/node_modules/format/format.js.map +1 -0
  42. package/dist/node_modules/highlight.js/lib/core.js +2 -0
  43. package/dist/node_modules/highlight.js/lib/core.js.map +1 -0
  44. package/dist/node_modules/lowlight/lib/core.js +2 -0
  45. package/dist/node_modules/lowlight/lib/core.js.map +1 -0
  46. package/dist/node_modules/nanoid/index.js +2 -0
  47. package/dist/node_modules/nanoid/index.js.map +1 -0
  48. package/dist/node_modules/nanoid/url-alphabet/index.js +2 -0
  49. package/dist/node_modules/nanoid/url-alphabet/index.js.map +1 -0
  50. package/dist/node_modules/react-syntax-highlighter/dist/esm/checkForListedLanguage.js +2 -0
  51. package/dist/node_modules/react-syntax-highlighter/dist/esm/checkForListedLanguage.js.map +1 -0
  52. package/dist/node_modules/react-syntax-highlighter/dist/esm/create-element.js +2 -0
  53. package/dist/node_modules/react-syntax-highlighter/dist/esm/create-element.js.map +1 -0
  54. package/dist/node_modules/react-syntax-highlighter/dist/esm/highlight.js +2 -0
  55. package/dist/node_modules/react-syntax-highlighter/dist/esm/highlight.js.map +1 -0
  56. package/dist/node_modules/react-syntax-highlighter/dist/esm/light.js +2 -0
  57. package/dist/node_modules/react-syntax-highlighter/dist/esm/light.js.map +1 -0
  58. package/dist/node_modules/react-syntax-highlighter/dist/esm/styles/hljs/stackoverflow-dark.js +2 -0
  59. package/dist/node_modules/react-syntax-highlighter/dist/esm/styles/hljs/stackoverflow-dark.js.map +1 -0
  60. package/dist/node_modules/react-syntax-highlighter/dist/esm/styles/hljs/stackoverflow-light.js +2 -0
  61. package/dist/node_modules/react-syntax-highlighter/dist/esm/styles/hljs/stackoverflow-light.js.map +1 -0
  62. package/dist/node_modules/toposort/index.js +1 -1
  63. package/dist/node_modules/yup/index.esm.js +1 -1
  64. package/dist/src/assets/icons/UpArrow.svg.js +2 -0
  65. package/dist/src/assets/icons/UpArrow.svg.js.map +1 -0
  66. package/dist/src/assets/icons/copy.svg.js +2 -0
  67. package/dist/src/assets/icons/copy.svg.js.map +1 -0
  68. package/dist/src/components/MethodAccordion/MethodAccordion.js +1 -1
  69. package/dist/src/components/MethodAccordion/MethodAccordion.js.map +1 -1
  70. package/dist/src/components/dialog/index.js +1 -1
  71. package/dist/src/components/dialog/index.js.map +1 -1
  72. package/dist/src/components/table/table.js +1 -1
  73. package/dist/src/components/table/table.js.map +1 -1
  74. package/dist/src/constants/methods.constant.js +1 -1
  75. package/dist/src/constants/methods.constant.js.map +1 -1
  76. package/dist/src/helpers/docs.helper.js +2 -0
  77. package/dist/src/helpers/docs.helper.js.map +1 -0
  78. package/dist/src/helpers/layout.helper.js +1 -1
  79. package/dist/src/helpers/layout.helper.js.map +1 -1
  80. package/dist/src/layout/docsComponents/Codebox/Codebox.js +2 -0
  81. package/dist/src/layout/docsComponents/Codebox/Codebox.js.map +1 -0
  82. package/dist/src/layout/docsComponents/Codebox/style.module.scss.js +2 -0
  83. package/dist/src/layout/docsComponents/Codebox/style.module.scss.js.map +1 -0
  84. package/dist/src/layout/docsComponents/DocsAside/DocsAside.js +1 -1
  85. package/dist/src/layout/docsComponents/DocsAside/DocsAside.js.map +1 -1
  86. package/dist/src/layout/docsComponents/DocsAside/style.module.scss.js +2 -0
  87. package/dist/src/layout/docsComponents/DocsAside/style.module.scss.js.map +1 -0
  88. package/dist/src/layout/docsComponents/DocsContent/DocsContent.js +1 -1
  89. package/dist/src/layout/docsComponents/DocsContent/DocsContent.js.map +1 -1
  90. package/dist/src/layout/docsComponents/DocsContent/EndpointPage/index.js +1 -1
  91. package/dist/src/layout/docsComponents/DocsContent/EndpointPage/index.js.map +1 -1
  92. package/dist/src/layout/docsComponents/DocsContent/TagPage/index.js +2 -0
  93. package/dist/src/layout/docsComponents/DocsContent/TagPage/index.js.map +1 -0
  94. package/dist/src/layout/docsComponents/DocsHeader/DocsHeader.js +1 -1
  95. package/dist/src/layout/docsComponents/DocsHeader/DocsHeader.js.map +1 -1
  96. package/dist/src/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.js +1 -1
  97. package/dist/src/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.js.map +1 -1
  98. package/dist/src/layout/docsLayout.js +1 -1
  99. package/dist/src/layout/docsLayout.js.map +1 -1
  100. package/dist/src/layout/layout.js +1 -1
  101. package/dist/src/layout/layout.js.map +1 -1
  102. package/dist/src/layout/layout.module.css.js +1 -1
  103. package/dist/src/utils/index.js +2 -0
  104. package/dist/src/utils/index.js.map +1 -0
  105. package/dist/src/validator/form.scheme.js +1 -1
  106. package/dist/src/validator/form.scheme.js.map +1 -1
  107. package/dist/styles.css +1164 -892
  108. package/dist/types/assets/icons/index.d.ts +1 -0
  109. package/dist/types/components/dialog/dialog.d.ts +1 -0
  110. package/dist/types/components/dialog/index.d.ts +1 -1
  111. package/dist/types/helpers/docs.helper.d.ts +2 -2
  112. package/dist/types/layout/docsComponents/Codebox/Codebox.d.ts +4 -0
  113. package/dist/types/layout/docsComponents/DocsAside/DocsAside.d.ts +4 -2
  114. package/dist/types/layout/docsComponents/DocsContent/DocsContent.d.ts +5 -1
  115. package/dist/types/layout/docsComponents/DocsContent/EndpointPage/index.d.ts +3 -1
  116. package/dist/types/layout/docsComponents/DocsContent/TagPage/index.d.ts +6 -1
  117. package/dist/types/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.d.ts +12 -5
  118. package/dist/types/layout/docsLayout.d.ts +5 -4
  119. package/dist/types/layout/layout.d.ts +1 -1
  120. package/dist/types/types/index.d.ts +27 -0
  121. package/dist/types/types/layout.type.d.ts +1 -0
  122. package/dist/types/types/openApi.d.ts +1 -0
  123. package/dist/types/utils/index.d.ts +1 -0
  124. package/dist/types/validator/form.scheme.d.ts +1 -0
  125. package/package.json +3 -3
  126. package/rollup.config.js +2 -0
  127. package/src/assets/icons/copy.svg +4 -0
  128. package/src/assets/icons/index.ts +1 -0
  129. package/src/components/MethodAccordion/MethodAccordion.module.scss +20 -11
  130. package/src/components/MethodAccordion/MethodAccordion.tsx +393 -17
  131. package/src/components/dialog/dialog.ts +1 -0
  132. package/src/components/dialog/index.tsx +27 -24
  133. package/src/components/table/table.tsx +5 -1
  134. package/src/constants/methods.constant.ts +1 -1
  135. package/src/helpers/docs.helper.ts +17 -4
  136. package/src/helpers/layout.helper.ts +19 -2
  137. package/src/layout/docsComponents/Codebox/Codebox.tsx +61 -0
  138. package/src/layout/docsComponents/Codebox/style.module.scss +43 -0
  139. package/src/layout/docsComponents/DocsAside/DocsAside.tsx +89 -4
  140. package/src/layout/docsComponents/DocsAside/style.module.scss +113 -0
  141. package/src/layout/docsComponents/DocsContent/DocsContent.tsx +25 -3
  142. package/src/layout/docsComponents/DocsContent/EndpointPage/index.tsx +134 -122
  143. package/src/layout/docsComponents/DocsContent/EndpointPage/style.scss +45 -0
  144. package/src/layout/docsComponents/DocsContent/TagPage/index.tsx +77 -74
  145. package/src/layout/docsComponents/DocsContent/TagPage/style.scss +42 -5
  146. package/src/layout/docsComponents/DocsHeader/DocsHeader.module.scss +78 -5
  147. package/src/layout/docsComponents/DocsHeader/DocsHeader.tsx +85 -15
  148. package/src/layout/docsComponents/DocsSideMenuTree/DocsSideMenuTree.tsx +119 -87
  149. package/src/layout/docsComponents/index.scss +3 -1
  150. package/src/layout/docsLayout.tsx +47 -18
  151. package/src/layout/layout.module.css +8 -5
  152. package/src/layout/layout.tsx +39 -21
  153. package/src/types/index.ts +28 -0
  154. package/src/types/layout.type.ts +1 -0
  155. package/src/types/openApi.ts +1 -0
  156. package/src/utils/index.ts +7 -0
  157. package/src/validator/form.scheme.ts +9 -1
  158. package/src/layout/docsComponents/DocsAside/style.scss +0 -3
@@ -7,42 +7,42 @@ import {
7
7
  RequestOption,
8
8
  } from '../../../../assets/icons/index'
9
9
  import { ArrowIcon, SelectGroup } from 'digitinary-ui'
10
- import { useState } from 'react'
10
+ import { useEffect, useState } from 'react'
11
+ import { EndpointData } from 'src/layout/docsLayout'
12
+ import { handleStatusColor } from '../../../../helpers/methodAccordion.helper'
13
+ import { httpStatusCodes } from '../../../../constants/index'
14
+ import styles from '../../Codebox/style.module.scss'
15
+ import Tooltip from '../../../../components/Tooltip/Tooltip'
16
+
17
+ export const EndpointPage = ({ data }) => {
18
+ const [activeTab, setActiveTab] = useState('header')
19
+
20
+ const httpStatusCodeOptions = httpStatusCodes.map((code) => ({
21
+ label: (
22
+ <div className={'statusCodeOptionContainer'}>
23
+ <div
24
+ className={'statusCodeOptionCircle'}
25
+ style={{ backgroundColor: handleStatusColor(code) }}
26
+ ></div>
27
+ <span>{code}</span>
28
+ </div>
29
+ ),
30
+ value: code,
31
+ }))
11
32
 
12
- export const EndpointPage = () => {
13
33
  const [expanded, setExpanded] = useState(null)
34
+ const [selectedResStatusCode, setSelectedResStatusCode] = useState(httpStatusCodeOptions[4])
35
+ const [headersList, setHeadersList] = useState({})
36
+ const requestTableData = (data?.parameters || []).filter(
37
+ (param) => param.in?.toLowerCase() === activeTab.toLowerCase()
38
+ )
14
39
 
15
- const requestTableData = [
16
- {
17
- name: 'Parameter Name',
18
- required: 'True',
19
- type: 'String',
20
- enum: 'Active/Expired/Cancelled',
21
- description:
22
- 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
23
- },
24
- {
25
- name: 'Parameter Name',
26
- required: 'False',
27
- type: 'Boolean',
28
- enum: 'Active/Expired/Cancelled',
29
- description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.sssssss',
30
- },
31
- {
32
- name: 'Parameter Name',
33
- required: 'True',
34
- type: 'Object',
35
- enum: '-',
36
- description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.sssssss',
37
- },
38
- {
39
- name: 'Parameter Name',
40
- required: 'True',
41
- type: 'Array_String',
42
- enum: '-',
43
- description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.sssssss',
44
- },
45
- ]
40
+ useEffect(() => {
41
+ if (selectedResStatusCode && selectedResStatusCode.value) {
42
+ const headerObj = data?.responses[selectedResStatusCode.value]
43
+ setHeadersList(headerObj?.headers)
44
+ }
45
+ }, [selectedResStatusCode])
46
46
 
47
47
  return (
48
48
  <div className="api-details-expanded">
@@ -51,99 +51,116 @@ export const EndpointPage = () => {
51
51
  <SVGLoader src={ArrowBack} />
52
52
  </button>
53
53
 
54
- <button className="disabled">Test</button>
54
+ <Tooltip content="Comming soon">
55
+ <button className="disabled">Test</button>
56
+ </Tooltip>
55
57
  </div>
56
58
  <h3> Api Name</h3>
57
- <h1 className="api-title">Endpoint Name</h1>
59
+ <h1 className="api-title">{data?.api?.title}</h1>
58
60
  <div className="url-box">
59
61
  <div style={{ textAlign: 'center' }}>
60
- <span className="method-label post">Post</span>
61
- <span className="url-text">https://apigw sdb-1.test.dgate.digitinary.net/test</span>
62
+ <span className={`method-label ${data?.method?.toLowerCase()}`}>{data.method}</span>
63
+ <span className="url-text">{data?.path}</span>
62
64
  </div>
63
-
64
- <SVGLoader src={CopySticker} className="copy-icon" />
65
+ <span className="icon" onClick={() => navigator.clipboard.writeText(data?.path)}>
66
+ <SVGLoader src={CopySticker} />
67
+ </span>
65
68
  </div>
66
69
 
67
- <p className="api-desc">Endpoint Description</p>
70
+ <p className="api-desc">{data?.api?.description || 'No Description'}</p>
68
71
 
69
72
  <h3>Request</h3>
70
73
 
71
74
  <div className="request-section">
72
75
  <div className="request-tabs">
73
- <button className="tab">
74
- <SVGLoader src={RequestOption} className="icon-left" />
75
- Header
76
- </button>
77
- <button className="tab">
78
- <SVGLoader src={RequestOption} className="icon-left" />
79
- Path
80
- </button>
81
- <button className="tab">
82
- <SVGLoader src={RequestOption} className="icon-left" />
83
- Query
84
- </button>
85
- <button className="tab">
86
- <SVGLoader src={RequestOption} className="icon-left" />
87
- Request Body
88
- </button>
76
+ {['header', 'path', 'query', 'Body'].map((tab) => (
77
+ <button
78
+ key={tab}
79
+ className={`tab ${activeTab === tab ? 'active' : ''}`}
80
+ onClick={() => setActiveTab(tab)}
81
+ >
82
+ <SVGLoader src={RequestOption} className="icon-left" />
83
+ <span className="tab-label">
84
+ {tab === 'requestBody'
85
+ ? 'Request Body'
86
+ : tab.charAt(0).toUpperCase() + tab.slice(1)}
87
+ </span>
88
+ </button>
89
+ ))}
89
90
  </div>
90
- <div className="table-wrapper">
91
- <table className="param-table">
92
- <thead>
93
- <tr>
94
- <th className="head-table-label">Parameter Name</th>
95
- <th className="head-table-label">Required</th>
96
- <th className="head-table-label">Type</th>
97
- <th className="head-table-label">Enum</th>
98
- <th className="head-table-label">Description</th>
99
- </tr>
100
- </thead>
101
- <tbody>
102
- {requestTableData.map((row, index) => (
103
- <tr key={index}>
104
- <td>{row.name}</td>
105
- <td>{row.required}</td>
106
- <td>{row.type}</td>
107
- <td>{row.enum}</td>
108
- <td className="desc-cell">
109
- <div className={`desc-text ${expanded === index ? 'expanded' : ''}`}>
110
- {row.description}
111
- </div>
112
- <button
113
- className="desc-toggle"
114
- onClick={() => setExpanded(expanded === index ? null : index)}
115
- >
116
- <SVGLoader
117
- src={DownArrowIcon}
118
- className={expanded === index ? 'rotated' : ''}
119
- />
120
- </button>
121
- </td>
91
+
92
+ {
93
+ <div className="table-wrapper">
94
+ <table className="param-table">
95
+ <thead>
96
+ <tr>
97
+ <th className="head-table-label">Parameter Name</th>
98
+ <th className="head-table-label">Required</th>
99
+ <th className="head-table-label">Type</th>
100
+ <th className="head-table-label">Enum</th>
101
+ <th className="head-table-label">Description</th>
122
102
  </tr>
123
- ))}
124
- </tbody>
125
- </table>
126
- </div>
103
+ </thead>
104
+ <tbody>
105
+ {data.parameters
106
+ ?.filter((p) => p.in?.toLowerCase() === activeTab.toLowerCase())
107
+ .map((row, index) => (
108
+ <tr key={index}>
109
+ <td>{row.name}</td>
110
+ <td>{row.required ? 'True' : 'False'}</td>
111
+ <td>{row.schema?.type || '-'}</td>
112
+ <td>{Array.isArray(row.schema?.enum) ? row.schema.enum.join(' / ') : '-'}</td>
113
+ <td className="desc-cell">
114
+ <div className={`desc-text ${expanded === index ? 'expanded' : ''}`}>
115
+ {row.description || 'No description'}
116
+ </div>
117
+ <button
118
+ className="desc-toggle"
119
+ onClick={() => setExpanded(expanded === index ? null : index)}
120
+ >
121
+ <SVGLoader
122
+ src={DownArrowIcon}
123
+ className={expanded === index ? 'rotated' : ''}
124
+ />
125
+ </button>
126
+ </td>
127
+ </tr>
128
+ ))}
129
+ </tbody>
130
+ </table>
131
+ </div>
132
+ }
127
133
  </div>
128
134
 
129
135
  <div className="response-section">
130
- <div className="response-drop-test">
131
- <SelectGroup
132
- className="response-drop"
133
- withSearch={false}
134
- isMultiple={false}
135
- clearable={false}
136
- placeholder="200"
137
- options={[]}
138
- //value={selectedStatusCode}
139
- onChange={(value) => {
140
- // setSelectedStatusCode(value)
141
- }}
142
- />
136
+ <h3>Response</h3>
137
+
138
+ <div style={{ width: '7.5rem', marginLeft: 'auto' }}>
139
+ {Object.keys(data?.responses || {})?.length > 0 && (
140
+ <div className={styles.codeboxSection}>
141
+ <div className={`${styles.codeboxHeader}`}>
142
+ <SelectGroup
143
+ size="small"
144
+ withSearch={false}
145
+ isMultiple={false}
146
+ clearable={false}
147
+ placeholder="200"
148
+ options={[
149
+ {
150
+ list: httpStatusCodeOptions,
151
+ },
152
+ ]}
153
+ value={selectedResStatusCode}
154
+ onChange={(value) => {
155
+ setSelectedResStatusCode(value)
156
+ }}
157
+ />
158
+ </div>
159
+ </div>
160
+ )}
143
161
  </div>
144
162
 
145
- <h3>Response</h3>
146
- <button className="tab">
163
+ <button className="tab active ">
147
164
  <SVGLoader src={RequestOption} className="icon-left" />
148
165
  Header
149
166
  </button>
@@ -152,7 +169,7 @@ export const EndpointPage = () => {
152
169
  <table className="param-table">
153
170
  <thead>
154
171
  <tr>
155
- <th className="head-table-label">Parameter Name</th>
172
+ <th className="head-table-label">Header Name</th>
156
173
  <th className="head-table-label">Required</th>
157
174
  <th className="head-table-label">Type</th>
158
175
  <th className="head-table-label">Enum</th>
@@ -160,20 +177,15 @@ export const EndpointPage = () => {
160
177
  </tr>
161
178
  </thead>
162
179
  <tbody>
163
- <tr>
164
- <td>Parameter Name</td>
165
- <td>True</td>
166
- <td>String</td>
167
- <td>Active/Expired/Cancelled</td>
168
- <td>Borem taciti dolor ...</td>
169
- </tr>
170
- <tr>
171
- <td>Parameter Name</td>
172
- <td>True</td>
173
- <td>Array_Object</td>
174
- <td>-</td>
175
- <td>Borem taciti dolor ...</td>
176
- </tr>
180
+ {Object.keys(headersList).map((key, index) => (
181
+ <tr>
182
+ <td>{key}</td>
183
+ <td>{headersList[key]?.required.toString()}</td>
184
+ <td>{headersList[key]?.schema?.type}</td>
185
+ <td>{headersList[key]?.schema?.enum?.join('/')}</td>
186
+ <td>{headersList[key]?.description}</td>
187
+ </tr>
188
+ ))}
177
189
  </tbody>
178
190
  </table>
179
191
  </div>
@@ -62,6 +62,7 @@ main {
62
62
  font-weight: 400;
63
63
  letter-spacing: 0px;
64
64
  line-height: 1.5rem;
65
+ margin-top: 1.5rem;
65
66
  margin-bottom: 0.5rem;
66
67
  }
67
68
 
@@ -86,6 +87,31 @@ main {
86
87
  text-transform: uppercase;
87
88
  color: #3aaa35;
88
89
  text-decoration: underline;
90
+
91
+ &.get {
92
+ color: #3a6cd1;
93
+ }
94
+ &.post {
95
+ color: #3aaa35;
96
+ }
97
+ &.put {
98
+ color: #faad14;
99
+ }
100
+ &.patch {
101
+ color: #58e2c2;
102
+ }
103
+ &.delete {
104
+ color: #da3f3f;
105
+ }
106
+ &.head {
107
+ color: #9461c9;
108
+ }
109
+ &.trace {
110
+ color: #ffa28f;
111
+ }
112
+ &.options {
113
+ color: #495d97;
114
+ }
89
115
  }
90
116
 
91
117
  .url-box {
@@ -127,13 +153,31 @@ main {
127
153
  cursor: pointer;
128
154
  font-size: 0.875rem;
129
155
  color: #000000;
156
+ display: flex;
157
+ align-items: center;
158
+ gap: 0.375rem;
130
159
  }
131
160
 
132
161
  .tab {
162
+ background: white;
163
+ border: 1px solid #d1d3d8;
164
+ padding: 0.375rem 0.75rem;
165
+ border-radius: 6px;
166
+ cursor: pointer;
167
+ font-size: 0.875rem;
168
+ color: #000000;
133
169
  display: flex;
134
170
  align-items: center;
135
171
  gap: 0.375rem;
172
+
173
+ &.active {
174
+ background-color: #e5edff;
175
+ border-color: #4d75d9;
176
+ color: #000000;
177
+ font-weight: 400;
178
+ }
136
179
  }
180
+
137
181
  .icon-left {
138
182
  width: 0.875rem;
139
183
  height: 0.875rem;
@@ -145,6 +189,7 @@ main {
145
189
  border-radius: 0.8rem;
146
190
  background: white;
147
191
  border: 1px #bbbec5 solid;
192
+ margin-bottom: 2rem;
148
193
  }
149
194
 
150
195
  .param-table {
@@ -1,24 +1,51 @@
1
1
  import './style.scss'
2
2
  import SVGLoader from '../../../../components/SVGLoader/SVGLoader'
3
- import { CopySticker } from '../../../../assets/icons/index'
3
+ import { arrowRightGray, CopySticker } from '../../../../assets/icons/index'
4
+ import { OverviewData } from 'src/layout/docsLayout'
4
5
 
5
- export const TagPage = () => {
6
+ export const TagPage = ({ data, setActiveItemData, setActiveType, setExpandedSections }) => {
7
+ const handleClick = (endpoint) => {
8
+ setActiveItemData({
9
+ ...endpoint,
10
+ api: {
11
+ id: data.apiSpecId,
12
+ title: data.title,
13
+ description: data.description,
14
+ version: data.version,
15
+ ...data,
16
+ },
17
+ })
18
+ setActiveType('ENDPOINT')
19
+
20
+ setExpandedSections((prev) => ({
21
+ ...prev,
22
+ [`api-${data.apiSpecId}-section`]: true,
23
+ [`api-${data.apiSpecId}-endpoints`]: true,
24
+ [`api-${data.apiSpecId}-resource-${endpoint.id}`]: true,
25
+ }))
26
+ }
6
27
  return (
7
28
  <div className="api-details-page">
8
29
  <h2 className="welcome">Welcome to</h2>
9
- <h1 className="api-title">API Name</h1>
30
+ <h1 className="api-title">{data?.title}</h1>
10
31
  <p className="api-version">
11
- API Version: <span>2.3.0</span>
32
+ API Version: <span>{data?.version}</span>
12
33
  </p>
13
34
 
14
35
  <div className="custom-url-input">
15
36
  <label className="input-label">API Base URL</label>
16
37
  <div className="input-wrapper">
17
- <input type="text" value="https://apigw-sdb-1.test.dgate.digitinary.net/test" readOnly />
38
+ <input
39
+ type="text"
40
+ value={!!data && !!data.servers && data.servers.length > 0 ? data.servers[0]?.url : '-'}
41
+ readOnly
42
+ />
18
43
  <span
19
44
  className="icon"
20
45
  onClick={() =>
21
- navigator.clipboard.writeText('https://apigw-sdb-1.test.dgate.digitinary.net/test')
46
+ navigator.clipboard.writeText(
47
+ `${!!data && !!data.servers && data.servers.length > 0 ? data.servers[0]?.url : '-'}`
48
+ )
22
49
  }
23
50
  >
24
51
  <SVGLoader src={CopySticker} />
@@ -28,84 +55,60 @@ export const TagPage = () => {
28
55
 
29
56
  <p className="api-desc">API Description</p>
30
57
  <div className="api-product-tag">
31
- Product with this API <span className="product-tag">Product 01</span>
58
+ Product with this API <span className="product-tag">{data.associatedProduct.name}</span>
32
59
  </div>
33
60
 
34
61
  <h3 className="section-title">Endpoints</h3>
35
62
 
36
- <div className="endpoint-group">
37
- <h4 className="tag-title">Tag 01</h4>
38
- <div className="endpoint-list">
39
- <div className="endpoint-card">
40
- <div className="endpoint-card-header">
41
- <span className="method-label get">GET</span>
42
- <h5>Endpoint Name</h5>
43
- </div>
63
+ {Object.entries(data?.tags).map(([tag, endpoints]) => (
64
+ <div className="endpoint-group" key={tag}>
65
+ <h4 className="tag-title">{tag}</h4>
66
+ <div className="endpoint-list">
67
+ {endpoints.map((endpoint, idx) => (
68
+ <div
69
+ className="endpoint-card"
70
+ onClick={() => handleClick(endpoint)}
71
+ key={`${tag}-${idx}`}
72
+ >
73
+ <div>
74
+ <div className="endpoint-card-header">
75
+ <span className={`method-label ${endpoint.method.toLowerCase()}`}>
76
+ {endpoint.method}
77
+ </span>
78
+ <div className="title-wrapper">
79
+ <h5>
80
+ {(endpoint.summary || 'Endpoint Name').slice(0, 17)}
81
+ {(endpoint.summary?.length ?? 0) > 17 && '...'}
82
+ </h5>
83
+ </div>
84
+ </div>
85
+ <div className="endpoint-meta">
86
+ <p>{endpoint.path}</p>
87
+ <p className="description">{endpoint.description ?? 'No Description '}</p>
88
+ </div>
89
+ </div>
44
90
 
45
- <div className="endpoint-meta">
46
- <p>/auth/login/</p>
47
- <p className="description">Login endpoint</p>
48
- </div>
49
- </div>
50
- <div className="endpoint-card">
51
- <div className="endpoint-card-header">
52
- <span className="method-label patch">PATCH</span>
53
- <h5>Endpoint Name</h5>
54
- </div>
55
- <div className="endpoint-meta">
56
- <p>/auth/login/</p>
57
- <p className="description">Update login info</p>
58
- </div>
91
+ <div className="endpoint-arrow">
92
+ <SVGLoader src={arrowRightGray} />
93
+ </div>
94
+ </div>
95
+ ))}
59
96
  </div>
60
97
  </div>
61
- </div>
98
+ ))}
62
99
 
63
- <div className="endpoint-group">
64
- <h4 className="tag-title">Tag 02</h4>
65
- <div className="endpoint-list">
66
- <div className="endpoint-card">
67
- <div className="endpoint-card-header">
68
- <span className="method-label post">POST</span>
69
- <h5>Endpoint Name</h5>
70
- </div>
71
- <div className="endpoint-meta">
72
- <p>/auth/login/</p>
73
- <p className="description">Create login session</p>
74
- </div>
75
- </div>
76
- <div className="endpoint-card">
77
- <div className="endpoint-card-header">
78
- <span className="method-label put">PUT</span>
79
- <h5>Endpoint Name</h5>
80
- </div>
81
- <div className="endpoint-meta">
82
- <p>/auth/login/</p>
83
- <p className="description">Replace login session</p>
84
- </div>
85
- </div>
86
- <div className="endpoint-card">
87
- <div className="endpoint-card-header">
88
- <span className="method-label delete">DELETE</span>
89
- <h5>Endpoint Name</h5>
90
- </div>
91
- <div className="endpoint-meta">
92
- <p>/auth/login/</p>
93
- <p className="description">Delete login session</p>
94
- </div>
100
+ {data.apiVersions?.length > 0 && (
101
+ <div className="versions-section">
102
+ <h4>API Versions</h4>
103
+ <div className="version-list">
104
+ {data.apiVersions.map((verObj, index) => (
105
+ <button key={index} className="version-btn">
106
+ {verObj.metaData?.version || 'N/A'}
107
+ </button>
108
+ ))}
95
109
  </div>
96
110
  </div>
97
- </div>
98
-
99
- <div className="versions-section">
100
- <h4>API Versions</h4>
101
- <div className="version-list">
102
- {['1.2.0', '1.3.0', '1.4.0', '1.5.0', '2.2.0'].map((ver) => (
103
- <button key={ver} className="version-btn">
104
- {ver}
105
- </button>
106
- ))}
107
- </div>
108
- </div>
111
+ )}
109
112
  </div>
110
113
  )
111
114
  }
@@ -135,21 +135,36 @@
135
135
  }
136
136
 
137
137
  .endpoint-card {
138
- border: 1px solid #ddd;
139
- border-radius: 0.5rem;
138
+ display: flex;
139
+ align-items: center;
140
+ justify-content: space-between;
140
141
  padding: 1rem;
142
+ border: 1px solid #e5e7eb;
143
+ border-radius: 0.5rem;
141
144
  background-color: #fff;
145
+ margin-bottom: 1rem;
146
+ transition: box-shadow 0.2s ease;
142
147
 
143
148
  .endpoint-card-header {
144
149
  display: flex;
145
150
  gap: 1.5rem;
146
151
  align-items: flex-start;
147
152
 
153
+ .title-wrapper {
154
+ flex: 1;
155
+ width: 8rem;
156
+ min-width: 0;
157
+ }
158
+
148
159
  h5 {
149
160
  font-size: 1rem;
150
161
  font-weight: 400;
151
162
  line-height: 1.25rem;
152
163
  letter-spacing: 0px;
164
+ white-space: nowrap;
165
+ overflow: hidden;
166
+ text-overflow: ellipsis;
167
+ max-width: 100%;
153
168
  }
154
169
  }
155
170
 
@@ -161,7 +176,7 @@
161
176
  padding: 0.275rem 1.563rem;
162
177
  border-radius: 0.188rem;
163
178
  display: inline-block;
164
- margin-bottom: 0.5rem;
179
+ margin-bottom: 1rem;
165
180
  text-transform: uppercase;
166
181
 
167
182
  &.get {
@@ -184,6 +199,18 @@
184
199
  background-color: #da3f3f;
185
200
  color: #ffffff;
186
201
  }
202
+ &.head {
203
+ background-color: #9461c9;
204
+ color: #ffffff;
205
+ }
206
+ &.trace {
207
+ background-color: #ffa28f;
208
+ color: #ffffff;
209
+ }
210
+ &.options {
211
+ background-color: #495d97;
212
+ color: #ffffff;
213
+ }
187
214
  }
188
215
 
189
216
  .endpoint-meta {
@@ -208,9 +235,16 @@
208
235
  line-height: 1rem;
209
236
  font-weight: 400;
210
237
  letter-spacing: 0px;
211
- margin-top: 1rem;
238
+ margin-top: 1.5rem;
212
239
  }
213
240
  }
241
+ .endpoint-arrow {
242
+ align-content: center;
243
+ width: 1rem;
244
+ height: 1rem;
245
+ flex-shrink: 0;
246
+ margin-left: 1rem;
247
+ }
214
248
  }
215
249
  }
216
250
 
@@ -230,9 +264,11 @@
230
264
  .version-list {
231
265
  display: flex;
232
266
  flex-wrap: wrap;
233
- gap: 0.5rem;
267
+ gap: 1rem;
234
268
 
235
269
  .version-btn {
270
+ width: 3.9375rem;
271
+ height: 3rem;
236
272
  padding: 0.4rem 0.8rem;
237
273
  border: 1px solid #4d75d9;
238
274
  border-radius: 0.375rem;
@@ -240,6 +276,7 @@
240
276
  cursor: pointer;
241
277
  font-size: 0.875rem;
242
278
  color: #4d75d9;
279
+ box-shadow: inset 0 1px 3px #00000040;
243
280
  }
244
281
  }
245
282
  }