@api-client/ui 0.0.4 → 0.0.5

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 (514) hide show
  1. package/dist/amf/lib/AmfParameters.js +0 -4
  2. package/dist/amf/lib/AmfParameters.js.map +1 -1
  3. package/dist/amf/lib/navigation-layout/EndpointsTree.js +0 -2
  4. package/dist/amf/lib/navigation-layout/EndpointsTree.js.map +1 -1
  5. package/dist/amf/lib/navigation-layout/NaturalTree.js +0 -2
  6. package/dist/amf/lib/navigation-layout/NaturalTree.js.map +1 -1
  7. package/dist/amf/store/AmfGraphStore.js +0 -2
  8. package/dist/amf/store/AmfGraphStore.js.map +1 -1
  9. package/dist/amf/store/AmfStore.js +0 -7
  10. package/dist/amf/store/AmfStore.js.map +1 -1
  11. package/dist/bindings/base/HttpClientStoreBindings.js +4 -1
  12. package/dist/bindings/base/HttpClientStoreBindings.js.map +1 -1
  13. package/dist/bindings/base/PlatformBindings.js +6 -10
  14. package/dist/bindings/base/PlatformBindings.js.map +1 -1
  15. package/dist/bindings/base/ProxyBindings.js +9 -6
  16. package/dist/bindings/base/ProxyBindings.js.map +1 -1
  17. package/dist/bindings/base/SharedWorkerThread.js +4 -1
  18. package/dist/bindings/base/SharedWorkerThread.js.map +1 -1
  19. package/dist/bindings/base/StoreBindings.js +162 -170
  20. package/dist/bindings/base/StoreBindings.js.map +1 -1
  21. package/dist/bindings/web/WebConfigurationBindings.js +22 -24
  22. package/dist/bindings/web/WebConfigurationBindings.js.map +1 -1
  23. package/dist/bindings/web/WebFileBindings.js +7 -4
  24. package/dist/bindings/web/WebFileBindings.js.map +1 -1
  25. package/dist/bindings/web/WebHttpClientStoreBindings.js +19 -21
  26. package/dist/bindings/web/WebHttpClientStoreBindings.js.map +1 -1
  27. package/dist/bindings/web/WebNavigationBindings.js +4 -1
  28. package/dist/bindings/web/WebNavigationBindings.js.map +1 -1
  29. package/dist/bindings/web/WebProxyBindings.js +5 -6
  30. package/dist/bindings/web/WebProxyBindings.js.map +1 -1
  31. package/dist/bindings/web/WebStoreBindings.js +39 -44
  32. package/dist/bindings/web/WebStoreBindings.js.map +1 -1
  33. package/dist/contextual-menu/ContextualMenu.js +10 -19
  34. package/dist/contextual-menu/ContextualMenu.js.map +1 -1
  35. package/dist/contextual-menu/ContextualMenuElement.js +4 -32
  36. package/dist/contextual-menu/ContextualMenuElement.js.map +1 -1
  37. package/dist/contextual-menu/MenuItem.js +0 -12
  38. package/dist/contextual-menu/MenuItem.js.map +1 -1
  39. package/dist/define/amf/api-annotation-document.js +1 -1
  40. package/dist/define/amf/api-annotation-document.js.map +1 -1
  41. package/dist/define/amf/api-authorization-editor.js +1 -1
  42. package/dist/define/amf/api-authorization-editor.js.map +1 -1
  43. package/dist/define/amf/api-channel-document.js +1 -1
  44. package/dist/define/amf/api-channel-document.js.map +1 -1
  45. package/dist/define/amf/api-documentation-document.js +1 -1
  46. package/dist/define/amf/api-documentation-document.js.map +1 -1
  47. package/dist/define/amf/api-documentation.js +1 -1
  48. package/dist/define/amf/api-documentation.js.map +1 -1
  49. package/dist/define/amf/api-navigation.js +1 -1
  50. package/dist/define/amf/api-navigation.js.map +1 -1
  51. package/dist/define/amf/api-operation-document.js +1 -1
  52. package/dist/define/amf/api-operation-document.js.map +1 -1
  53. package/dist/define/amf/api-parameter-document.js +1 -1
  54. package/dist/define/amf/api-parameter-document.js.map +1 -1
  55. package/dist/define/amf/api-parametrized-security-scheme.js +1 -1
  56. package/dist/define/amf/api-parametrized-security-scheme.js.map +1 -1
  57. package/dist/define/amf/api-payload-document.js +1 -1
  58. package/dist/define/amf/api-payload-document.js.map +1 -1
  59. package/dist/define/amf/api-request-document.js +1 -1
  60. package/dist/define/amf/api-request-document.js.map +1 -1
  61. package/dist/define/amf/api-request-editor.js +1 -1
  62. package/dist/define/amf/api-request-editor.js.map +1 -1
  63. package/dist/define/amf/api-request.js +1 -1
  64. package/dist/define/amf/api-request.js.map +1 -1
  65. package/dist/define/amf/api-resource-document.js +1 -1
  66. package/dist/define/amf/api-resource-document.js.map +1 -1
  67. package/dist/define/amf/api-response-document.js +1 -1
  68. package/dist/define/amf/api-response-document.js.map +1 -1
  69. package/dist/define/amf/api-schema-document.js +1 -1
  70. package/dist/define/amf/api-schema-document.js.map +1 -1
  71. package/dist/define/amf/api-security-document.js +1 -1
  72. package/dist/define/amf/api-security-document.js.map +1 -1
  73. package/dist/define/amf/api-security-requirement-document.js +1 -1
  74. package/dist/define/amf/api-security-requirement-document.js.map +1 -1
  75. package/dist/define/amf/api-server-picker.js +1 -1
  76. package/dist/define/amf/api-server-picker.js.map +1 -1
  77. package/dist/define/amf/api-summary.js +1 -1
  78. package/dist/define/amf/api-summary.js.map +1 -1
  79. package/dist/define/amf/authorization/amf-apikey-authorization.js +1 -1
  80. package/dist/define/amf/authorization/amf-apikey-authorization.js.map +1 -1
  81. package/dist/define/amf/authorization/amf-basic-authorization.js +1 -1
  82. package/dist/define/amf/authorization/amf-basic-authorization.js.map +1 -1
  83. package/dist/define/amf/authorization/amf-bearer-authorization.js +1 -1
  84. package/dist/define/amf/authorization/amf-bearer-authorization.js.map +1 -1
  85. package/dist/define/amf/authorization/amf-oauth2-authorization.js +1 -1
  86. package/dist/define/amf/authorization/amf-oauth2-authorization.js.map +1 -1
  87. package/dist/define/amf/authorization/amf-oidc-authorization.js +1 -1
  88. package/dist/define/amf/authorization/amf-oidc-authorization.js.map +1 -1
  89. package/dist/define/amf/authorization/amf-passthrough-authorization.js +1 -1
  90. package/dist/define/amf/authorization/amf-passthrough-authorization.js.map +1 -1
  91. package/dist/define/amf/authorization/amf-ramlcustom-authorization.js +1 -1
  92. package/dist/define/amf/authorization/amf-ramlcustom-authorization.js.map +1 -1
  93. package/dist/define/authorization/apikey-authorization.js +1 -1
  94. package/dist/define/authorization/apikey-authorization.js.map +1 -1
  95. package/dist/define/authorization/basic-authorization.js +1 -1
  96. package/dist/define/authorization/basic-authorization.js.map +1 -1
  97. package/dist/define/authorization/bearer-authorization.js +1 -1
  98. package/dist/define/authorization/bearer-authorization.js.map +1 -1
  99. package/dist/define/authorization/cc-authorization.js +1 -1
  100. package/dist/define/authorization/cc-authorization.js.map +1 -1
  101. package/dist/define/authorization/ntlm-authorization.js +1 -1
  102. package/dist/define/authorization/ntlm-authorization.js.map +1 -1
  103. package/dist/define/authorization/oauth2-authorization.js +1 -1
  104. package/dist/define/authorization/oauth2-authorization.js.map +1 -1
  105. package/dist/define/authorization/oidc-authorization.js +1 -1
  106. package/dist/define/authorization/oidc-authorization.js.map +1 -1
  107. package/dist/define/contextual-menu/contextual-menu.js +1 -1
  108. package/dist/define/contextual-menu/contextual-menu.js.map +1 -1
  109. package/dist/define/dialog/confirm-delete-dialog.js +1 -1
  110. package/dist/define/dialog/confirm-delete-dialog.js.map +1 -1
  111. package/dist/define/dialog/rename-dialog.js +1 -1
  112. package/dist/define/dialog/rename-dialog.js.map +1 -1
  113. package/dist/define/files/share-file.js +1 -1
  114. package/dist/define/files/share-file.js.map +1 -1
  115. package/dist/define/har/har-viewer.js +1 -1
  116. package/dist/define/har/har-viewer.js.map +1 -1
  117. package/dist/define/highlight/marked-highlight.js +1 -1
  118. package/dist/define/highlight/marked-highlight.js.map +1 -1
  119. package/dist/define/highlight/prism-highlight.js +1 -1
  120. package/dist/define/highlight/prism-highlight.js.map +1 -1
  121. package/dist/define/http/http-assertions.js +1 -1
  122. package/dist/define/http/http-assertions.js.map +1 -1
  123. package/dist/define/http/http-body-editor.js +1 -1
  124. package/dist/define/http/http-body-editor.js.map +1 -1
  125. package/dist/define/http/http-body-multipart-editor.js +1 -1
  126. package/dist/define/http/http-body-multipart-editor.js.map +1 -1
  127. package/dist/define/http/http-body-text-editor.js +1 -1
  128. package/dist/define/http/http-body-text-editor.js.map +1 -1
  129. package/dist/define/http/http-body-urlencoded-editor.js +1 -1
  130. package/dist/define/http/http-body-urlencoded-editor.js.map +1 -1
  131. package/dist/define/http/http-headers-form.js +1 -1
  132. package/dist/define/http/http-headers-form.js.map +1 -1
  133. package/dist/define/http/http-log-body.js +1 -1
  134. package/dist/define/http/http-log-body.js.map +1 -1
  135. package/dist/define/http/http-log-headers.js +1 -1
  136. package/dist/define/http/http-log-headers.js.map +1 -1
  137. package/dist/define/http/http-log-timings.js +1 -1
  138. package/dist/define/http/http-log-timings.js.map +1 -1
  139. package/dist/define/http/http-request-config.js +1 -1
  140. package/dist/define/http/http-request-config.js.map +1 -1
  141. package/dist/define/http/http-request-editor.js +1 -1
  142. package/dist/define/http/http-request-editor.js.map +1 -1
  143. package/dist/define/http/http-request-log.js +1 -1
  144. package/dist/define/http/http-request-log.js.map +1 -1
  145. package/dist/define/http/http-snippets.js +1 -1
  146. package/dist/define/http/http-snippets.js.map +1 -1
  147. package/dist/define/http/http-url-input.js +1 -1
  148. package/dist/define/http/http-url-input.js.map +1 -1
  149. package/dist/define/http/http-url-params-form.js +1 -1
  150. package/dist/define/http/http-url-params-form.js.map +1 -1
  151. package/dist/define/http-project/http-project-request-history.js +1 -1
  152. package/dist/define/http-project/http-project-request-history.js.map +1 -1
  153. package/dist/define/http-project/http-project-request.js +2 -2
  154. package/dist/define/http-project/http-project-request.js.map +1 -1
  155. package/dist/define/http-project/project-navigation.js +1 -1
  156. package/dist/define/http-project/project-navigation.js.map +1 -1
  157. package/dist/define/http-project/project-run-report.js +1 -1
  158. package/dist/define/http-project/project-run-report.js.map +1 -1
  159. package/dist/define/http-project/project-runner.js +2 -2
  160. package/dist/define/http-project/project-runner.js.map +1 -1
  161. package/dist/define/layout/split-view.js +1 -1
  162. package/dist/define/layout/split-view.js.map +1 -1
  163. package/dist/define/schema-design/schema-design-navigation.js +1 -1
  164. package/dist/define/schema-design/schema-design-navigation.js.map +1 -1
  165. package/dist/define/schema-design/schema-namespace-selector.js +1 -1
  166. package/dist/define/schema-design/schema-namespace-selector.js.map +1 -1
  167. package/dist/define/ui/ui-button.js +1 -1
  168. package/dist/define/ui/ui-button.js.map +1 -1
  169. package/dist/define/ui/ui-chip.js +1 -1
  170. package/dist/define/ui/ui-chip.js.map +1 -1
  171. package/dist/define/ui/ui-collapse.js +1 -1
  172. package/dist/define/ui/ui-collapse.js.map +1 -1
  173. package/dist/define/ui/ui-dialog.js +1 -1
  174. package/dist/define/ui/ui-dialog.js.map +1 -1
  175. package/dist/define/ui/ui-dropdown-list.js +1 -1
  176. package/dist/define/ui/ui-dropdown-list.js.map +1 -1
  177. package/dist/define/ui/ui-icon-button.js +1 -1
  178. package/dist/define/ui/ui-icon-button.js.map +1 -1
  179. package/dist/define/ui/ui-icon.js +1 -1
  180. package/dist/define/ui/ui-icon.js.map +1 -1
  181. package/dist/define/ui/ui-list-item.js +1 -1
  182. package/dist/define/ui/ui-list-item.js.map +1 -1
  183. package/dist/define/ui/ui-list.js +1 -1
  184. package/dist/define/ui/ui-list.js.map +1 -1
  185. package/dist/define/ui/ui-listbox.js +1 -1
  186. package/dist/define/ui/ui-listbox.js.map +1 -1
  187. package/dist/define/ui/ui-progress.js +1 -1
  188. package/dist/define/ui/ui-progress.js.map +1 -1
  189. package/dist/define/ui/ui-segmented-button-set.js +1 -1
  190. package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
  191. package/dist/define/ui/ui-segmented-button.js +1 -1
  192. package/dist/define/ui/ui-segmented-button.js.map +1 -1
  193. package/dist/define/ui/ui-snackbar.js +1 -1
  194. package/dist/define/ui/ui-snackbar.js.map +1 -1
  195. package/dist/define/ui/ui-tab.js +1 -1
  196. package/dist/define/ui/ui-tab.js.map +1 -1
  197. package/dist/define/ui/ui-tabs.js +1 -1
  198. package/dist/define/ui/ui-tabs.js.map +1 -1
  199. package/dist/directives/data-attr.js +0 -1
  200. package/dist/directives/data-attr.js.map +1 -1
  201. package/dist/elements/ApiElement.js +0 -7
  202. package/dist/elements/ApiElement.js.map +1 -1
  203. package/dist/elements/amf/ApiAnnotationDocument.element.js +0 -2
  204. package/dist/elements/amf/ApiAnnotationDocument.element.js.map +1 -1
  205. package/dist/elements/amf/ApiAuthorizationEditor.element.js +0 -32
  206. package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
  207. package/dist/elements/amf/ApiDocumentation.element.js +0 -91
  208. package/dist/elements/amf/ApiDocumentation.element.js.map +1 -1
  209. package/dist/elements/amf/ApiDocumentationBase.js +0 -9
  210. package/dist/elements/amf/ApiDocumentationBase.js.map +1 -1
  211. package/dist/elements/amf/ApiDocumentationDocument.element.js +0 -1
  212. package/dist/elements/amf/ApiDocumentationDocument.element.js.map +1 -1
  213. package/dist/elements/amf/ApiNavigation.element.js +0 -97
  214. package/dist/elements/amf/ApiNavigation.element.js.map +1 -1
  215. package/dist/elements/amf/ApiOperationDocument.element.js +0 -76
  216. package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
  217. package/dist/elements/amf/ApiParameterDocument.element.js +0 -3
  218. package/dist/elements/amf/ApiParameterDocument.element.js.map +1 -1
  219. package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js +0 -1
  220. package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js.map +1 -1
  221. package/dist/elements/amf/ApiPayloadDocument.element.js +0 -1
  222. package/dist/elements/amf/ApiPayloadDocument.element.js.map +1 -1
  223. package/dist/elements/amf/ApiRequest.element.js +0 -78
  224. package/dist/elements/amf/ApiRequest.element.js.map +1 -1
  225. package/dist/elements/amf/ApiRequestDocument.element.js +0 -38
  226. package/dist/elements/amf/ApiRequestDocument.element.js.map +1 -1
  227. package/dist/elements/amf/ApiRequestEditor.element.js +0 -118
  228. package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
  229. package/dist/elements/amf/ApiResourceDocument.element.js +0 -75
  230. package/dist/elements/amf/ApiResourceDocument.element.js.map +1 -1
  231. package/dist/elements/amf/ApiResponseDocument.element.js +0 -17
  232. package/dist/elements/amf/ApiResponseDocument.element.js.map +1 -1
  233. package/dist/elements/amf/ApiSchemaDocument.element.js +0 -28
  234. package/dist/elements/amf/ApiSchemaDocument.element.js.map +1 -1
  235. package/dist/elements/amf/ApiSecurityDocument.element.js +0 -28
  236. package/dist/elements/amf/ApiSecurityDocument.element.js.map +1 -1
  237. package/dist/elements/amf/ApiSecurityRequirementDocument.element.js +0 -1
  238. package/dist/elements/amf/ApiSecurityRequirementDocument.element.js.map +1 -1
  239. package/dist/elements/amf/ApiServerPicker.element.js +2 -65
  240. package/dist/elements/amf/ApiServerPicker.element.js.map +1 -1
  241. package/dist/elements/amf/ApiSummary.element.js +0 -26
  242. package/dist/elements/amf/ApiSummary.element.js.map +1 -1
  243. package/dist/elements/amf/authorization/AmfApiKey.js +0 -5
  244. package/dist/elements/amf/authorization/AmfApiKey.js.map +1 -1
  245. package/dist/elements/amf/authorization/AmfBasic.js +0 -4
  246. package/dist/elements/amf/authorization/AmfBasic.js.map +1 -1
  247. package/dist/elements/amf/authorization/AmfBearer.js +0 -4
  248. package/dist/elements/amf/authorization/AmfBearer.js.map +1 -1
  249. package/dist/elements/amf/authorization/AmfOauth2.js +0 -13
  250. package/dist/elements/amf/authorization/AmfOauth2.js.map +1 -1
  251. package/dist/elements/amf/authorization/AmfOidc.js +0 -4
  252. package/dist/elements/amf/authorization/AmfOidc.js.map +1 -1
  253. package/dist/elements/amf/authorization/AmfPassThrough.js +0 -6
  254. package/dist/elements/amf/authorization/AmfPassThrough.js.map +1 -1
  255. package/dist/elements/amf/authorization/AmfRamlCustom.js +0 -6
  256. package/dist/elements/amf/authorization/AmfRamlCustom.js.map +1 -1
  257. package/dist/elements/authorization/OAuth2Authorize.js +0 -14
  258. package/dist/elements/authorization/OAuth2Authorize.js.map +1 -1
  259. package/dist/elements/authorization/OidcAuthorize.js +0 -14
  260. package/dist/elements/authorization/OidcAuthorize.js.map +1 -1
  261. package/dist/elements/authorization/ui/ApiKeyAuthorization.js +0 -2
  262. package/dist/elements/authorization/ui/ApiKeyAuthorization.js.map +1 -1
  263. package/dist/elements/authorization/ui/Authorization.js +18 -32
  264. package/dist/elements/authorization/ui/Authorization.js.map +1 -1
  265. package/dist/elements/authorization/ui/CcAuthorization.js +1 -3
  266. package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
  267. package/dist/elements/authorization/ui/OAuth2Authorization.js +21 -50
  268. package/dist/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
  269. package/dist/elements/authorization/ui/OidcAuthorization.js +4 -6
  270. package/dist/elements/authorization/ui/OidcAuthorization.js.map +1 -1
  271. package/dist/elements/code/HttpSnippets.js +9 -8
  272. package/dist/elements/code/HttpSnippets.js.map +1 -1
  273. package/dist/elements/dialog/ConfirmDelete.js +0 -12
  274. package/dist/elements/dialog/ConfirmDelete.js.map +1 -1
  275. package/dist/elements/dialog/Rename.js +0 -6
  276. package/dist/elements/dialog/Rename.js.map +1 -1
  277. package/dist/elements/environment/EnvironmentEditor.js +8 -11
  278. package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
  279. package/dist/elements/environment/ServerEditor.js +7 -45
  280. package/dist/elements/environment/ServerEditor.js.map +1 -1
  281. package/dist/elements/environment/VariablesEditor.js +7 -12
  282. package/dist/elements/environment/VariablesEditor.js.map +1 -1
  283. package/dist/elements/files/ShareFile.js +19 -57
  284. package/dist/elements/files/ShareFile.js.map +1 -1
  285. package/dist/elements/har/HarViewer.js +6 -7
  286. package/dist/elements/har/HarViewer.js.map +1 -1
  287. package/dist/elements/highlight/MarkedHighlight.js +4 -56
  288. package/dist/elements/highlight/MarkedHighlight.js.map +1 -1
  289. package/dist/elements/highlight/PrismHighlight.js +9 -18
  290. package/dist/elements/highlight/PrismHighlight.js.map +1 -1
  291. package/dist/elements/highlight/PrismHighlighter.js +4 -6
  292. package/dist/elements/highlight/PrismHighlighter.js.map +1 -1
  293. package/dist/elements/http/BodyEditor.js +21 -33
  294. package/dist/elements/http/BodyEditor.js.map +1 -1
  295. package/dist/elements/http/BodyMultipartEditor.js +17 -18
  296. package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
  297. package/dist/elements/http/BodyTextEditor.js +2 -15
  298. package/dist/elements/http/BodyTextEditor.js.map +1 -1
  299. package/dist/elements/http/BodyUrlEncodedEditor.js +20 -21
  300. package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
  301. package/dist/elements/http/HeadersForm.js +16 -17
  302. package/dist/elements/http/HeadersForm.js.map +1 -1
  303. package/dist/elements/http/HttpAssertions.js +8 -6
  304. package/dist/elements/http/HttpAssertions.js.map +1 -1
  305. package/dist/elements/http/LogBody.js +10 -21
  306. package/dist/elements/http/LogBody.js.map +1 -1
  307. package/dist/elements/http/LogHeaders.js +4 -23
  308. package/dist/elements/http/LogHeaders.js.map +1 -1
  309. package/dist/elements/http/LogTimings.js +11 -13
  310. package/dist/elements/http/LogTimings.js.map +1 -1
  311. package/dist/elements/http/RequestConfigElement.js +7 -4
  312. package/dist/elements/http/RequestConfigElement.js.map +1 -1
  313. package/dist/elements/http/RequestEditor.js +54 -88
  314. package/dist/elements/http/RequestEditor.js.map +1 -1
  315. package/dist/elements/http/RequestLog.js +9 -14
  316. package/dist/elements/http/RequestLog.js.map +1 -1
  317. package/dist/elements/http/UrlInput.js +15 -25
  318. package/dist/elements/http/UrlInput.js.map +1 -1
  319. package/dist/elements/http/UrlParamsForm.js +16 -13
  320. package/dist/elements/http/UrlParamsForm.js.map +1 -1
  321. package/dist/elements/layout/LayoutManager.js +16 -24
  322. package/dist/elements/layout/LayoutManager.js.map +1 -1
  323. package/dist/elements/layout/LayoutPanelElement.js +17 -23
  324. package/dist/elements/layout/LayoutPanelElement.js.map +1 -1
  325. package/dist/elements/layout/SplitItem.js +4 -12
  326. package/dist/elements/layout/SplitItem.js.map +1 -1
  327. package/dist/elements/layout/SplitLayout.js +18 -24
  328. package/dist/elements/layout/SplitLayout.js.map +1 -1
  329. package/dist/elements/layout/SplitPanel.js +10 -16
  330. package/dist/elements/layout/SplitPanel.js.map +1 -1
  331. package/dist/elements/layout/SplitView.js +17 -26
  332. package/dist/elements/layout/SplitView.js.map +1 -1
  333. package/dist/elements/navigation/AppNavigationElement.js +8 -47
  334. package/dist/elements/navigation/AppNavigationElement.js.map +1 -1
  335. package/dist/elements/navigation/AppNavigationItemElement.js +19 -24
  336. package/dist/elements/navigation/AppNavigationItemElement.js.map +1 -1
  337. package/dist/elements/project/HttpProjectRequest.js +0 -38
  338. package/dist/elements/project/HttpProjectRequest.js.map +1 -1
  339. package/dist/elements/project/HttpProjectRequestHistory.js +9 -35
  340. package/dist/elements/project/HttpProjectRequestHistory.js.map +1 -1
  341. package/dist/elements/project/ProjectNavigation.js +0 -4
  342. package/dist/elements/project/ProjectNavigation.js.map +1 -1
  343. package/dist/elements/project/ProjectRunReport.js +4 -15
  344. package/dist/elements/project/ProjectRunReport.js.map +1 -1
  345. package/dist/elements/project/ProjectRunner.js +2 -47
  346. package/dist/elements/project/ProjectRunner.js.map +1 -1
  347. package/dist/elements/schema-design/AssociationFormElement.js +0 -13
  348. package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
  349. package/dist/elements/schema-design/DataEntityEditorElement.js +0 -22
  350. package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
  351. package/dist/elements/schema-design/DataModelVisualizationElement.js +0 -16
  352. package/dist/elements/schema-design/DataModelVisualizationElement.js.map +1 -1
  353. package/dist/elements/schema-design/DataSchemaDocument.js +0 -36
  354. package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
  355. package/dist/elements/schema-design/EntityFormElement.js +0 -18
  356. package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
  357. package/dist/elements/schema-design/PropertyFormElement.js +0 -12
  358. package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
  359. package/dist/elements/schema-design/SchemaDesignNavigation.js +0 -9
  360. package/dist/elements/schema-design/SchemaDesignNavigation.js.map +1 -1
  361. package/dist/elements/schema-design/SchemaNamespaceSelector.js +0 -9
  362. package/dist/elements/schema-design/SchemaNamespaceSelector.js.map +1 -1
  363. package/dist/elements/user/UserAvatarElement.js +0 -9
  364. package/dist/elements/user/UserAvatarElement.js.map +1 -1
  365. package/dist/events/http-client/models/CertificatesEvents.js +2 -2
  366. package/dist/events/http-client/models/CertificatesEvents.js.map +1 -1
  367. package/dist/http-client/idb/Base.js +5 -10
  368. package/dist/http-client/idb/Base.js.map +1 -1
  369. package/dist/http-client/idb/LegacyMockedStore.js +0 -1
  370. package/dist/http-client/idb/LegacyMockedStore.js.map +1 -1
  371. package/dist/http-client/idb/MockedStore.js +3 -1
  372. package/dist/http-client/idb/MockedStore.js.map +1 -1
  373. package/dist/http-client/store/DataImportProcessor.js +0 -3
  374. package/dist/http-client/store/DataImportProcessor.js.map +1 -1
  375. package/dist/http-client/store/HttpClientIdbDatabase.js +8 -7
  376. package/dist/http-client/store/HttpClientIdbDatabase.js.map +1 -1
  377. package/dist/http-client/store/IdbThread.js +23 -20
  378. package/dist/http-client/store/IdbThread.js.map +1 -1
  379. package/dist/http-client/store/idb/IdbProjectUi.js +4 -1
  380. package/dist/http-client/store/idb/IdbProjectUi.js.map +1 -1
  381. package/dist/http-client/store/idb/IdbStore.js +0 -2
  382. package/dist/http-client/store/idb/IdbStore.js.map +1 -1
  383. package/dist/http-client/store/idb/IdbUrlHistory.js +4 -1
  384. package/dist/http-client/store/idb/IdbUrlHistory.js.map +1 -1
  385. package/dist/http-client/store/idb/IdbWsHistory.js +4 -1
  386. package/dist/http-client/store/idb/IdbWsHistory.js.map +1 -1
  387. package/dist/lib/chart/HttpHistoryChart.js +7 -8
  388. package/dist/lib/chart/HttpHistoryChart.js.map +1 -1
  389. package/dist/mixins/FileDropMixin.js +0 -1
  390. package/dist/mixins/FileDropMixin.js.map +1 -1
  391. package/dist/mixins/RenderableMixin.js +11 -15
  392. package/dist/mixins/RenderableMixin.js.map +1 -1
  393. package/dist/pages/ApplicationScreen.js +34 -55
  394. package/dist/pages/ApplicationScreen.js.map +1 -1
  395. package/dist/pages/api-client/ApiClient.screen.js +11 -20
  396. package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
  397. package/dist/pages/api-client/Authenticate.screen.js +4 -6
  398. package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
  399. package/dist/pages/api-client/StoreConfig.screen.js +21 -37
  400. package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
  401. package/dist/pages/api-client/Telemetry.screen.js +1 -2
  402. package/dist/pages/api-client/Telemetry.screen.js.map +1 -1
  403. package/dist/pages/api-client/pages/Files.page.js +6 -27
  404. package/dist/pages/api-client/pages/Files.page.js.map +1 -1
  405. package/dist/pages/api-client/pages/Settings.page.js +2 -4
  406. package/dist/pages/api-client/pages/Settings.page.js.map +1 -1
  407. package/dist/pages/api-client/pages/Trash.page.js +2 -13
  408. package/dist/pages/api-client/pages/Trash.page.js.map +1 -1
  409. package/dist/pages/demo/DemoPage.js +13 -13
  410. package/dist/pages/demo/DemoPage.js.map +1 -1
  411. package/dist/pages/http-project/HttpProject.screen.js +25 -35
  412. package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
  413. package/dist/pages/schema-design/SchemaDesigner.screen.js +14 -27
  414. package/dist/pages/schema-design/SchemaDesigner.screen.js.map +1 -1
  415. package/dist/store/HttpStore.js +0 -3
  416. package/dist/store/HttpStore.js.map +1 -1
  417. package/dist/store/UserCache.js +5 -5
  418. package/dist/store/UserCache.js.map +1 -1
  419. package/dist/ui/UiElement.js +4 -5
  420. package/dist/ui/UiElement.js.map +1 -1
  421. package/dist/ui/button/SegmentedButton.js +9 -11
  422. package/dist/ui/button/SegmentedButton.js.map +1 -1
  423. package/dist/ui/button/SegmentedButtonsSet.js +6 -7
  424. package/dist/ui/button/SegmentedButtonsSet.js.map +1 -1
  425. package/dist/ui/button/UiButton.js +17 -39
  426. package/dist/ui/button/UiButton.js.map +1 -1
  427. package/dist/ui/button/UiIconButton.js +9 -35
  428. package/dist/ui/button/UiIconButton.js.map +1 -1
  429. package/dist/ui/chip/UiChip.js +9 -49
  430. package/dist/ui/chip/UiChip.js.map +1 -1
  431. package/dist/ui/collapse/UiCollapse.js +15 -20
  432. package/dist/ui/collapse/UiCollapse.js.map +1 -1
  433. package/dist/ui/controllers/ActionController.js +143 -144
  434. package/dist/ui/controllers/ActionController.js.map +1 -1
  435. package/dist/ui/controllers/RadioSelectionController.js +0 -1
  436. package/dist/ui/controllers/RadioSelectionController.js.map +1 -1
  437. package/dist/ui/date/DateTime.js +3 -3
  438. package/dist/ui/date/DateTime.js.map +1 -1
  439. package/dist/ui/dialog/UiDialog.js +14 -38
  440. package/dist/ui/dialog/UiDialog.js.map +1 -1
  441. package/dist/ui/effects/ripple.js +20 -18
  442. package/dist/ui/effects/ripple.js.map +1 -1
  443. package/dist/ui/effects/rippleDirective.js +6 -7
  444. package/dist/ui/effects/rippleDirective.js.map +1 -1
  445. package/dist/ui/icons/UiIcon.js +4 -3
  446. package/dist/ui/icons/UiIcon.js.map +1 -1
  447. package/dist/ui/input/CheckboxElement.js +12 -10
  448. package/dist/ui/input/CheckboxElement.js.map +1 -1
  449. package/dist/ui/input/CheckedElement.js +2 -13
  450. package/dist/ui/input/CheckedElement.js.map +1 -1
  451. package/dist/ui/input/Input.js +169 -234
  452. package/dist/ui/input/Input.js.map +1 -1
  453. package/dist/ui/input/RadioElement.js +13 -11
  454. package/dist/ui/input/RadioElement.js.map +1 -1
  455. package/dist/ui/input/SwitchElement.js +0 -18
  456. package/dist/ui/input/SwitchElement.js.map +1 -1
  457. package/dist/ui/input/TextAreaElement.js +0 -15
  458. package/dist/ui/input/TextAreaElement.js.map +1 -1
  459. package/dist/ui/list/DividerElement.js +5 -10
  460. package/dist/ui/list/DividerElement.js.map +1 -1
  461. package/dist/ui/list/UiDropdownList.js +7 -48
  462. package/dist/ui/list/UiDropdownList.js.map +1 -1
  463. package/dist/ui/list/UiList.js +3 -15
  464. package/dist/ui/list/UiList.js.map +1 -1
  465. package/dist/ui/list/UiListItem.js +4 -17
  466. package/dist/ui/list/UiListItem.js.map +1 -1
  467. package/dist/ui/list/UiListbox.js +0 -1
  468. package/dist/ui/list/UiListbox.js.map +1 -1
  469. package/dist/ui/notification/SnackNotifications.js +1 -2
  470. package/dist/ui/notification/SnackNotifications.js.map +1 -1
  471. package/dist/ui/notification/Snackbar.js +27 -51
  472. package/dist/ui/notification/Snackbar.js.map +1 -1
  473. package/dist/ui/progress/Range.js +24 -23
  474. package/dist/ui/progress/Range.js.map +1 -1
  475. package/dist/ui/progress/UiProgress.js +0 -11
  476. package/dist/ui/progress/UiProgress.js.map +1 -1
  477. package/dist/ui/table/DataTable.js +7 -12
  478. package/dist/ui/table/DataTable.js.map +1 -1
  479. package/dist/ui/tabs/UiTab.js +24 -25
  480. package/dist/ui/tabs/UiTab.js.map +1 -1
  481. package/dist/ui/tabs/UiTabs.js +21 -35
  482. package/dist/ui/tabs/UiTabs.js.map +1 -1
  483. package/dist/visualization/elements/VizWorkspaceElement.js +12 -21
  484. package/dist/visualization/elements/VizWorkspaceElement.js.map +1 -1
  485. package/dist/visualization/lib/AssociationAnchors.js +16 -28
  486. package/dist/visualization/lib/AssociationAnchors.js.map +1 -1
  487. package/dist/visualization/lib/Point.js +0 -2
  488. package/dist/visualization/lib/Point.js.map +1 -1
  489. package/dist/visualization/lib/SelectionManager.js +10 -11
  490. package/dist/visualization/lib/SelectionManager.js.map +1 -1
  491. package/dist/visualization/lib/WorkspaceAlignment.js +0 -1
  492. package/dist/visualization/lib/WorkspaceAlignment.js.map +1 -1
  493. package/dist/visualization/lib/WorkspaceDebugging.js +5 -8
  494. package/dist/visualization/lib/WorkspaceDebugging.js.map +1 -1
  495. package/dist/visualization/lib/WorkspaceEdges.js +17 -19
  496. package/dist/visualization/lib/WorkspaceEdges.js.map +1 -1
  497. package/dist/visualization/lib/WorkspaceGestures.js +0 -3
  498. package/dist/visualization/lib/WorkspaceGestures.js.map +1 -1
  499. package/dist/visualization/lib/WorkspaceSizing.js +4 -6
  500. package/dist/visualization/lib/WorkspaceSizing.js.map +1 -1
  501. package/dist/visualization/lib/lines/RectilinearLine.js +8 -34
  502. package/dist/visualization/lib/lines/RectilinearLine.js.map +1 -1
  503. package/dist/visualization/lib/tips/RectilinearTip.js +0 -1
  504. package/dist/visualization/lib/tips/RectilinearTip.js.map +1 -1
  505. package/dist/visualization/lib/tips/TipArtist.js +0 -3
  506. package/dist/visualization/lib/tips/TipArtist.js.map +1 -1
  507. package/dist/visualization/plugin/dnd/DragAndDropPlugin.js +3 -5
  508. package/dist/visualization/plugin/dnd/DragAndDropPlugin.js.map +1 -1
  509. package/dist/visualization/plugin/group-selection/GroupSelection.js +19 -19
  510. package/dist/visualization/plugin/group-selection/GroupSelection.js.map +1 -1
  511. package/dist/visualization/plugin/positioning/WorkspaceLayout.js +21 -38
  512. package/dist/visualization/plugin/positioning/WorkspaceLayout.js.map +1 -1
  513. package/package.json +3 -2
  514. package/tsconfig.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"HttpProjectRequestHistory.js","sourceRoot":"","sources":["../../../src/elements/project/HttpProjectRequestHistory.ts"],"names":[],"mappings":"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","sourcesContent":["import { \n ErrorResponse, IHttpHistory, IResponse, IRequestLog, \n RequestLog, IHistoryRequestListOptions, ContextStateUpdateEvent,\n ContextStateDeleteEvent,\n} from \"@api-client/core/build/browser.js\";\nimport { TemplateResult, html, PropertyValues, nothing } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport ApiElement from \"../ApiElement.js\";\nimport { relativeDay } from \"../../lib/time/Conversion.js\";\nimport { HttpHistoryChart, } from '../../lib/chart/HttpHistoryChart.js';\nimport { statusTemplate, } from '../http/HttpStatus.js';\nimport { Events } from '../../events/Events.js';\nimport { EventTypes } from '../../events/EventTypes.js';\nimport SegmentedButton from \"../../ui/button/SegmentedButton.js\";\nimport UiDialog, { UiDialogClosingReason } from \"../../ui/dialog/UiDialog.js\";\nimport '@github/relative-time-element';\nimport { SnackNotifications } from \"../../ui/notification/SnackNotifications.js\";\nimport UiIconButton from \"../../ui/button/UiIconButton.js\";\nimport '../../define/http/http-request-log.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-divider.js';\nimport '../../define/ui/ui-segmented-button.js';\nimport '../../define/ui/ui-segmented-button-set.js';\nimport '../../define/ui/ui-dialog.js';\n\nexport enum ProjectHistoryView {\n history = 'history',\n analysis = 'analysis',\n}\n\n/**\n * An element that renders HTTP history for a configured list of requests.\n * This element is just a view and contains no logic related to store communication \n * or user interactions. Use the dispatched events to handle user interactions.\n */\nexport default class HttpProjectRequestHistory extends ApiElement {\n /**\n * The history list to render.\n */\n @state() history: IHttpHistory[] = [];\n\n /**\n * The key of the project the request belongs to.\n */\n @property({ type: String }) project?: string;\n\n /**\n * The key of the request to render the history for.\n * Both `request` and `project` properties must be set to render any view.\n */\n @property({ type: String }) request?: string;\n\n /**\n * Returns true when the element is correctly setup.\n */\n get isSetup(): boolean {\n return !!this.project && !!this.request;\n }\n\n /**\n * Whether querying for a page of results.\n */\n @state() querying = false;\n\n /**\n * A sorted list of history items by the `midnight` property.\n */\n @state() protected model?: IHttpHistory[][];\n\n /**\n * The key of the selected request, if any\n */\n @state() selectedItem?: string;\n\n /**\n * The currently rendered item.\n */\n @state() protected renderedItem?: IHttpHistory | IRequestLog | RequestLog;\n\n @state() protected view: ProjectHistoryView = ProjectHistoryView.history;\n\n protected debounceTimeout?: number;\n\n /**\n * The cursor returned by the store used in pagination.\n */\n protected pageCursor?: string;\n\n constructor() {\n super();\n\n this.handleHistoryCreated = this.handleHistoryCreated.bind(this);\n this.handleHistoryDeleted = this.handleHistoryDeleted.bind(this);\n }\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('project') || cp.has('request')) {\n this.reset();\n this.queryDebounce();\n }\n if (cp.has('selectedItem')) {\n this.computeSelectedItem();\n }\n super.willUpdate(cp);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener(EventTypes.Store.History.State.create, this.handleHistoryCreated as EventListenerOrEventListenerObject);\n window.addEventListener(EventTypes.Store.History.State.delete, this.handleHistoryDeleted as EventListenerOrEventListenerObject);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener(EventTypes.Store.History.State.create, this.handleHistoryCreated as EventListenerOrEventListenerObject);\n window.removeEventListener(EventTypes.Store.History.State.delete, this.handleHistoryDeleted as EventListenerOrEventListenerObject);\n }\n\n protected setupVisibility(): void {\n if (this.history && !this.history.length) {\n this.setAttribute('hidden', '');\n } else {\n this.removeAttribute('hidden');\n }\n }\n\n reset(): void {\n this.history = [];\n this.pageCursor = undefined;\n this.model = undefined;\n this.selectedItem = undefined;\n this.setupVisibility();\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n\n queryDebounce(): void {\n if (!this.isSetup) {\n return;\n }\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n this.debounceTimeout = setTimeout(() => {\n delete this.debounceTimeout;\n this.queryPage();\n }, 1) as unknown as number;\n }\n\n protected async queryPage(): Promise<void> {\n const { project, request, pageCursor } = this;\n if (!project || !request || this.querying) {\n // todo: set `dirty` flag and re-query after finish.\n return;\n }\n this.querying = true;\n const init: IHistoryRequestListOptions = {\n type: 'request',\n project,\n id: request,\n space: '', // this is filled by the bindings\n };\n if (pageCursor) {\n init.cursor = pageCursor;\n }\n try {\n const result = await Events.Store.History.list(init, this);\n if (!result) {\n return;\n }\n const { items, cursor } = result;\n if (items) {\n this.addItems(items);\n }\n if (cursor) {\n this.pageCursor = cursor;\n }\n } catch (e) {\n // ...\n } finally {\n this.querying = false;\n this.setupVisibility();\n }\n }\n\n addItems(items: IHttpHistory[]): void {\n const { history = [] } = this;\n this.history = history.concat(items);\n const all = history.concat(items);\n const sorted = this.sortHistory(all);\n this.model = sorted;\n this.computeSelectedItem();\n if (sorted.length && !this.renderedItem) {\n this.selectedItem = sorted[0][0].key;\n }\n this.setupVisibility();\n }\n\n /**\n * Adds a new history to the list.\n * This is used instead of re-assigning the entire array and triggering initial computations.\n * @param item The history item to add\n * @param select When true it makes this item selected,\n */\n addItem(item: IHttpHistory, select?: boolean): void {\n const { model } = this;\n this.history.push(item)\n if (!model || !model.length) {\n this.model = [[item]];\n this.selectedItem = item.key;\n this.requestUpdate();\n this.setupVisibility();\n return;\n }\n const { midnight = Date.now() } = item;\n const index = model.findIndex(i => i[0].midnight === midnight);\n if (index >= 0) {\n this.pushSorted(model[index], item);\n } else {\n const position = model.findIndex(i => (i[0] && i[0].midnight || 0) < midnight);\n model.splice(position, 0, [item]);\n }\n if (select && item.key) {\n this.selectedItem = item.key;\n }\n this.requestUpdate();\n this.setupVisibility();\n }\n\n protected sortHistory(history: IHttpHistory[]): IHttpHistory[][] {\n if (!Array.isArray(history) || !history.length) {\n return [];\n }\n const result: IHttpHistory[][] = [];\n const now = Date.now();\n history.forEach((current) => {\n const { midnight = now } = current;\n const index = result.findIndex(i => i[0].midnight === midnight);\n if (index >= 0) {\n this.pushSorted(result[index], current);\n } else if (result[0] && result[0][0] && result[0][0].midnight && result[0][0].midnight < midnight) {\n result.unshift([current])\n } else {\n result.push([current]);\n }\n });\n return result;\n }\n\n protected handleHistoryCreated(e: ContextStateUpdateEvent<IHttpHistory>): void {\n const { item, parent } = e.detail;\n if (this.request !== parent) {\n return;\n }\n if (item) {\n this.addItem(item, true);\n }\n }\n\n protected handleHistoryDeleted(e: ContextStateDeleteEvent): void {\n const { model, history } = this;\n const { key, parent } = e.detail;\n if (!model || !history || parent !== this.request) {\n return;\n }\n const historyIndex = history.findIndex(i => i.key === key);\n if (historyIndex < 0) {\n return;\n }\n history.splice(historyIndex, 1);\n for (const group of model) {\n const index = group.findIndex(i => i.key === key);\n if (index >= 0) {\n group.splice(index, 1);\n if (group.length === 0) {\n const groupIndex = model.indexOf(group);\n model.splice(groupIndex, 1);\n }\n this.requestUpdate();\n this.setupVisibility();\n break;\n }\n }\n }\n\n protected computeSelectedItem(): void {\n const { history, selectedItem } = this;\n this.renderedItem = undefined;\n if (!selectedItem || !Array.isArray(history)) {\n return;\n }\n this.renderedItem = history.find(i => i.key === selectedItem);\n }\n\n /**\n * Allows to push a history item into a right index depending on the `created` property\n * so the data processor can skip sorting each group after mutation.\n * \n * The item is inserted before an item that is older (has lower `created` property). \n * \n * @param list The list to insert the item to\n * @param item The item to insert.\n */\n protected pushSorted(list: IHttpHistory[], item: IHttpHistory): void {\n const older = list.findIndex(i => i.created < item.created);\n if (older >= 0) {\n list.splice(older, 0, item);\n } else {\n // this item is the oldest\n list.push(item);\n }\n }\n\n protected handleSelection(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement | undefined;\n if (!item) {\n return;\n }\n const { key } = item.dataset;\n if (!key) {\n return;\n }\n this.selectedItem = key;\n }\n\n protected handleViewSelection(e: CustomEvent): void {\n if (!e.detail.selected) {\n return;\n }\n const button = e.detail.button as SegmentedButton;\n const view = button.dataset.value as ProjectHistoryView | undefined;\n if (view) {\n this.view = view;\n }\n }\n\n protected handleHistoryOption(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { option } = element.dataset;\n if (!option) {\n return;\n }\n if (option === 'clear') {\n this.triggerClearHistoryDialog();\n }\n }\n\n protected triggerClearHistoryDialog(): void {\n const dialog = this.shadowRoot?.querySelector('.clear-dialog') as UiDialog | null;\n if (!dialog) {\n return;\n }\n dialog.open = true;\n }\n\n protected handleClearHistoryDialogResult(e: CustomEvent<UiDialogClosingReason>): void {\n if (e.detail.cancelled) {\n return;\n }\n this.clearHistory();\n }\n\n async clearHistory(): Promise<void> {\n const { project, request } = this;\n if (!project || !request) {\n return;\n }\n // space parameter is filled by bindings.\n await Events.Store.History.clearRequest('', project, request, this);\n SnackNotifications.notify('History cleared');\n this.reset();\n }\n\n protected handleItemDelete(e: Event): void {\n const button = e.currentTarget as UiIconButton;\n const { key } = button.dataset;\n if (!key) {\n return;\n }\n this.deleteHistoryItem(key);\n }\n\n async deleteHistoryItem(key: string): Promise<void> {\n if (!key) {\n return;\n }\n const item = this.history.find(i => i.key === key);\n if (!item) {\n return;\n }\n await Events.Store.History.delete(key, this.request, this);\n SnackNotifications.notify('History item deleted', {\n actionLabel: 'Undo',\n actionCallback: () => {\n this.revertHistoryItemDelete(item);\n },\n timeout: 7000,\n });\n }\n\n async revertHistoryItemDelete(item: IHttpHistory): Promise<void> {\n const info = SnackNotifications.notify('Reverting...', { persistent: true });\n try {\n await Events.Store.History.create(item, this);\n SnackNotifications.cancel(info);\n SnackNotifications.notify('Reverted history item.');\n } catch (e) {\n SnackNotifications.cancel(info);\n SnackNotifications.notify('Unable to revert changes.');\n }\n }\n\n protected override render(): TemplateResult | typeof nothing {\n const { model } = this;\n if (!model || !model.length) {\n if (this.querying) {\n return this.renderLoader();\n }\n return nothing;\n }\n return html`\n ${this.renderHeader()}\n ${this.renderView()}\n ${this.renderClearHistoryDialog()}\n `;\n }\n\n protected renderLoader(): TemplateResult {\n return html`<progress></progress>`;\n }\n\n protected renderHeader(): TemplateResult {\n return html`\n <div class=\"header\">\n ${this.renderHistoryDropdown()}\n ${this.renderHistoryOptions()}\n ${this.renderViewToggle()}\n </div>\n `;\n }\n\n protected renderHistoryDropdown(): TemplateResult {\n const { model } = this;\n const disabled = !model || !model.length;\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"history-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleSelection}\"\n >\n <ui-button type=\"tonal\" ?disabled=\"${disabled}\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n History\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"History list\">\n ${this.renderHistoryList()}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderHistoryOptions(): TemplateResult {\n return html`\n <ui-dropdown-list @select=\"${this.handleHistoryOption}\" closeOnOutsideClick class=\"dropdown\">\n <ui-icon-button aria-label=\"Additional options\"><ui-icon icon=\"moreVert\" role=\"presentation\"></ui-icon></ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item role=\"menuitem\" data-option=\"clear\" image=\"icon\" title=\"Deletes all history for the request\">\n <ui-icon role=\"presentation\" slot=\"start\" icon=\"deleteOutline\"></ui-icon>\n Clear history\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderHistoryList(): (TemplateResult | typeof nothing)[] | typeof nothing {\n const { model } = this;\n if (!Array.isArray(model) || !model.length) {\n return nothing;\n }\n return model.map(group => this.renderHistoryGroup(group));\n }\n\n protected renderHistoryGroup(group: IHttpHistory[]): TemplateResult | typeof nothing {\n if (!group.length) {\n // this should not happen as the model is computed internally, \n // but I prefer to do just one check to not stop execution when error.\n return nothing;\n }\n const [first] = group;\n return html`\n ${this.renderHistoryGroupTitle(first)}\n ${group.map(item => this.renderHistoryItem(item))}\n `;\n }\n\n protected renderHistoryGroupTitle(item: IHttpHistory): TemplateResult {\n const { midnight = 0 } = item;\n return html`\n <div class=\"history-group-title\">${relativeDay(midnight)}</div>\n <ui-divider type=\"inset\"></ui-divider>\n `;\n }\n\n protected renderHistoryItem(item: IHttpHistory): TemplateResult | typeof nothing {\n const d = new Date(item.created);\n const isoTime = d.toISOString();\n\n const { log } = item;\n const { request, response } = log;\n const method = request && request.method;\n const url = request && request.url;\n if (!method || !url) {\n return nothing;\n }\n const error = !response || ErrorResponse.isErrorResponse(response);\n\n let status = 0;\n let statusText: string | undefined;\n let duration = 0;\n if (!error) {\n const typed = response as IResponse;\n status = typed.status;\n statusText = typed.statusText;\n duration = typed.loadingTime;\n }\n return html`\n <ui-list-item lines=\"two\" role=\"menuitem\" data-key=\"${item.key as string}\" data-kind=\"${item.kind}\">\n <div class=\"history-label\">\n <span class=\"label-value\">${statusTemplate(status, statusText)} ${duration} ms</span>\n ${this.renderHistoryItemDelete(item)}\n </div>\n <relative-time slot=\"supporting-text\" datetime=\"${isoTime}\"></relative-time>\n </ui-list-item>\n `;\n }\n\n protected renderHistoryItemDelete(item: IHttpHistory): TemplateResult | typeof nothing {\n return html`\n <ui-icon-button\n class=\"delete\"\n aria-label=\"Delete request\"\n data-key=\"${item.key as string}\" \n data-kind=\"${item.kind}\"\n @click=\"${this.handleItemDelete}\"\n ><ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon></ui-icon-button>\n `;\n }\n\n protected renderView(): TemplateResult | string {\n const { view } = this;\n if (view === ProjectHistoryView.analysis) {\n return this.renderAnalysis();\n }\n return this.renderLog();\n }\n\n protected renderLog(): TemplateResult | string {\n const { renderedItem } = this;\n if (!renderedItem) {\n return '';\n }\n const typed = renderedItem as IHttpHistory;\n const data = typed.log ? typed.log : renderedItem as IRequestLog | RequestLog;\n return html`\n <http-request-log .httpLog=\"${data}\"></http-request-log>\n `;\n }\n\n protected renderAnalysis(): TemplateResult | string {\n const { model } = this;\n if (!model) {\n return '';\n }\n const chart = new HttpHistoryChart(model);\n return chart.durationPlot();\n }\n\n protected renderViewToggle(): TemplateResult {\n return html`\n <div class=\"view-toggle\">\n <ui-segmented-button-set @select=\"${this.handleViewSelection}\">\n <ui-segmented-button selected title=\"Shows response history\" data-value=\"history\">History</ui-segmented-button>\n <ui-segmented-button title=\"Shows history analysis\" data-value=\"analysis\">Analysis</ui-segmented-button>\n </ui-segmented-button-set>\n </div>\n `;\n }\n\n protected renderClearHistoryDialog(): TemplateResult {\n return html`\n <ui-dialog modal class=\"clear-dialog\" @close=\"${this.handleClearHistoryDialogResult}\">\n <ui-icon slot=\"icon\" icon=\"deleteOutline\"></ui-icon>\n <span slot=\"title\">Delete history?</span>\n <p>This will clear responses history for this request.</p>\n <ui-button slot=\"button\" value=\"dismiss\" type=\"text\">Cancel</ui-button>\n <ui-button slot=\"button\" value=\"confirm\" type=\"text\">Accept</ui-button>\n </ui-dialog>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"HttpProjectRequestHistory.js","sourceRoot":"","sources":["../../../src/elements/project/HttpProjectRequestHistory.ts"],"names":[],"mappings":"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","sourcesContent":["import { \n ErrorResponse, IHttpHistory, IResponse, IRequestLog, \n RequestLog, IHistoryRequestListOptions, ContextStateUpdateEvent,\n ContextStateDeleteEvent,\n} from \"@api-client/core/build/browser.js\";\nimport { TemplateResult, html, PropertyValues, nothing } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport ApiElement from \"../ApiElement.js\";\nimport { relativeDay } from \"../../lib/time/Conversion.js\";\nimport { HttpHistoryChart, } from '../../lib/chart/HttpHistoryChart.js';\nimport { statusTemplate, } from '../http/HttpStatus.js';\nimport { Events } from '../../events/Events.js';\nimport { EventTypes } from '../../events/EventTypes.js';\nimport SegmentedButton from \"../../ui/button/SegmentedButton.js\";\nimport UiDialog, { UiDialogClosingReason } from \"../../ui/dialog/UiDialog.js\";\nimport '@github/relative-time-element';\nimport { SnackNotifications } from \"../../ui/notification/SnackNotifications.js\";\nimport UiIconButton from \"../../ui/button/UiIconButton.js\";\nimport '../../define/http/http-request-log.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-divider.js';\nimport '../../define/ui/ui-segmented-button.js';\nimport '../../define/ui/ui-segmented-button-set.js';\nimport '../../define/ui/ui-dialog.js';\n\nexport enum ProjectHistoryView {\n history = 'history',\n analysis = 'analysis',\n}\n\n/**\n * An element that renders HTTP history for a configured list of requests.\n * This element is just a view and contains no logic related to store communication \n * or user interactions. Use the dispatched events to handle user interactions.\n */\nexport default class HttpProjectRequestHistory extends ApiElement {\n /**\n * The history list to render.\n */\n @state() history: IHttpHistory[] = [];\n\n /**\n * The key of the project the request belongs to.\n */\n @property({ type: String }) project?: string;\n\n /**\n * The key of the request to render the history for.\n * Both `request` and `project` properties must be set to render any view.\n */\n @property({ type: String }) request?: string;\n\n /**\n * Returns true when the element is correctly setup.\n */\n get isSetup(): boolean {\n return !!this.project && !!this.request;\n }\n\n /**\n * Whether querying for a page of results.\n */\n @state() querying = false;\n\n /**\n * A sorted list of history items by the `midnight` property.\n */\n @state() protected model?: IHttpHistory[][];\n\n /**\n * The key of the selected request, if any\n */\n @state() selectedItem?: string;\n\n /**\n * The currently rendered item.\n */\n @state() protected renderedItem?: IHttpHistory | IRequestLog | RequestLog;\n\n @state() protected view: ProjectHistoryView = ProjectHistoryView.history;\n\n protected debounceTimeout?: number;\n\n /**\n * The cursor returned by the store used in pagination.\n */\n protected pageCursor?: string;\n\n constructor() {\n super();\n\n this.handleHistoryCreated = this.handleHistoryCreated.bind(this);\n this.handleHistoryDeleted = this.handleHistoryDeleted.bind(this);\n }\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('project') || cp.has('request')) {\n this.reset();\n this.queryDebounce();\n }\n if (cp.has('selectedItem')) {\n this.computeSelectedItem();\n }\n super.willUpdate(cp);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener(EventTypes.Store.History.State.create, this.handleHistoryCreated as EventListenerOrEventListenerObject);\n window.addEventListener(EventTypes.Store.History.State.delete, this.handleHistoryDeleted as EventListenerOrEventListenerObject);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener(EventTypes.Store.History.State.create, this.handleHistoryCreated as EventListenerOrEventListenerObject);\n window.removeEventListener(EventTypes.Store.History.State.delete, this.handleHistoryDeleted as EventListenerOrEventListenerObject);\n }\n\n protected setupVisibility(): void {\n if (this.history && !this.history.length) {\n this.setAttribute('hidden', '');\n } else {\n this.removeAttribute('hidden');\n }\n }\n\n reset(): void {\n this.history = [];\n this.pageCursor = undefined;\n this.model = undefined;\n this.selectedItem = undefined;\n this.setupVisibility();\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n\n queryDebounce(): void {\n if (!this.isSetup) {\n return;\n }\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n this.debounceTimeout = setTimeout(() => {\n delete this.debounceTimeout;\n this.queryPage();\n }, 1) as unknown as number;\n }\n\n protected async queryPage(): Promise<void> {\n const { project, request, pageCursor } = this;\n if (!project || !request || this.querying) {\n // todo: set `dirty` flag and re-query after finish.\n return;\n }\n this.querying = true;\n const init: IHistoryRequestListOptions = {\n type: 'request',\n project,\n id: request,\n space: '', // this is filled by the bindings\n };\n if (pageCursor) {\n init.cursor = pageCursor;\n }\n try {\n const result = await Events.Store.History.list(init, this);\n if (!result) {\n return;\n }\n const { items, cursor } = result;\n if (items) {\n this.addItems(items);\n }\n if (cursor) {\n this.pageCursor = cursor;\n }\n } catch (e) {\n // ...\n } finally {\n this.querying = false;\n this.setupVisibility();\n }\n }\n\n addItems(items: IHttpHistory[]): void {\n const { history = [] } = this;\n this.history = history.concat(items);\n const all = history.concat(items);\n const sorted = this.sortHistory(all);\n this.model = sorted;\n this.computeSelectedItem();\n if (sorted.length && !this.renderedItem) {\n this.selectedItem = sorted[0][0].key;\n }\n this.setupVisibility();\n }\n\n /**\n * Adds a new history to the list.\n * This is used instead of re-assigning the entire array and triggering initial computations.\n * @param item The history item to add\n * @param select When true it makes this item selected,\n */\n addItem(item: IHttpHistory, select?: boolean): void {\n const { model } = this;\n this.history.push(item)\n if (!model || !model.length) {\n this.model = [[item]];\n this.selectedItem = item.key;\n this.requestUpdate();\n this.setupVisibility();\n return;\n }\n const { midnight = Date.now() } = item;\n const index = model.findIndex(i => i[0].midnight === midnight);\n if (index >= 0) {\n this.pushSorted(model[index], item);\n } else {\n const position = model.findIndex(i => (i[0] && i[0].midnight || 0) < midnight);\n model.splice(position, 0, [item]);\n }\n if (select && item.key) {\n this.selectedItem = item.key;\n }\n this.requestUpdate();\n this.setupVisibility();\n }\n\n protected sortHistory(history: IHttpHistory[]): IHttpHistory[][] {\n if (!Array.isArray(history) || !history.length) {\n return [];\n }\n const result: IHttpHistory[][] = [];\n const now = Date.now();\n history.forEach((current) => {\n const { midnight = now } = current;\n const index = result.findIndex(i => i[0].midnight === midnight);\n if (index >= 0) {\n this.pushSorted(result[index], current);\n } else if (result[0] && result[0][0] && result[0][0].midnight && result[0][0].midnight < midnight) {\n result.unshift([current])\n } else {\n result.push([current]);\n }\n });\n return result;\n }\n\n protected handleHistoryCreated(e: ContextStateUpdateEvent<IHttpHistory>): void {\n const { item, parent } = e.detail;\n if (this.request !== parent) {\n return;\n }\n if (item) {\n this.addItem(item, true);\n }\n }\n\n protected handleHistoryDeleted(e: ContextStateDeleteEvent): void {\n const { model, history } = this;\n const { key, parent } = e.detail;\n if (!model || !history || parent !== this.request) {\n return;\n }\n const historyIndex = history.findIndex(i => i.key === key);\n if (historyIndex < 0) {\n return;\n }\n history.splice(historyIndex, 1);\n for (const group of model) {\n const index = group.findIndex(i => i.key === key);\n if (index >= 0) {\n group.splice(index, 1);\n if (group.length === 0) {\n const groupIndex = model.indexOf(group);\n model.splice(groupIndex, 1);\n }\n this.requestUpdate();\n this.setupVisibility();\n break;\n }\n }\n }\n\n protected computeSelectedItem(): void {\n const { history, selectedItem } = this;\n this.renderedItem = undefined;\n if (!selectedItem || !Array.isArray(history)) {\n return;\n }\n this.renderedItem = history.find(i => i.key === selectedItem);\n }\n\n /**\n * Allows to push a history item into a right index depending on the `created` property\n * so the data processor can skip sorting each group after mutation.\n * \n * The item is inserted before an item that is older (has lower `created` property). \n * \n * @param list The list to insert the item to\n * @param item The item to insert.\n */\n protected pushSorted(list: IHttpHistory[], item: IHttpHistory): void {\n const older = list.findIndex(i => i.created < item.created);\n if (older >= 0) {\n list.splice(older, 0, item);\n } else {\n // this item is the oldest\n list.push(item);\n }\n }\n\n protected handleSelection(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement | undefined;\n if (!item) {\n return;\n }\n const { key } = item.dataset;\n if (!key) {\n return;\n }\n this.selectedItem = key;\n }\n\n protected handleViewSelection(e: CustomEvent): void {\n if (!e.detail.selected) {\n return;\n }\n const button = e.detail.button as SegmentedButton;\n const view = button.dataset.value as ProjectHistoryView | undefined;\n if (view) {\n this.view = view;\n }\n }\n\n protected handleHistoryOption(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { option } = element.dataset;\n if (!option) {\n return;\n }\n if (option === 'clear') {\n this.triggerClearHistoryDialog();\n }\n }\n\n protected triggerClearHistoryDialog(): void {\n const dialog = this.shadowRoot?.querySelector('.clear-dialog') as UiDialog | null;\n if (!dialog) {\n return;\n }\n dialog.open = true;\n }\n\n protected handleClearHistoryDialogResult(e: CustomEvent<UiDialogClosingReason>): void {\n if (e.detail.cancelled) {\n return;\n }\n this.clearHistory();\n }\n\n async clearHistory(): Promise<void> {\n const { project, request } = this;\n if (!project || !request) {\n return;\n }\n // space parameter is filled by bindings.\n await Events.Store.History.clearRequest('', project, request, this);\n SnackNotifications.notify('History cleared');\n this.reset();\n }\n\n protected handleItemDelete(e: Event): void {\n const button = e.currentTarget as UiIconButton;\n const { key } = button.dataset;\n if (!key) {\n return;\n }\n this.deleteHistoryItem(key);\n }\n\n async deleteHistoryItem(key: string): Promise<void> {\n if (!key) {\n return;\n }\n const item = this.history.find(i => i.key === key);\n if (!item) {\n return;\n }\n await Events.Store.History.delete(key, this.request, this);\n SnackNotifications.notify('History item deleted', {\n actionLabel: 'Undo',\n actionCallback: () => {\n this.revertHistoryItemDelete(item);\n },\n timeout: 7000,\n });\n }\n\n async revertHistoryItemDelete(item: IHttpHistory): Promise<void> {\n const info = SnackNotifications.notify('Reverting...', { persistent: true });\n try {\n await Events.Store.History.create(item, this);\n SnackNotifications.cancel(info);\n SnackNotifications.notify('Reverted history item.');\n } catch (e) {\n SnackNotifications.cancel(info);\n SnackNotifications.notify('Unable to revert changes.');\n }\n }\n\n protected override render(): TemplateResult | typeof nothing {\n const { model } = this;\n if (!model || !model.length) {\n if (this.querying) {\n return this.renderLoader();\n }\n return nothing;\n }\n return html`\n ${this.renderHeader()}\n ${this.renderView()}\n ${this.renderClearHistoryDialog()}\n `;\n }\n\n protected renderLoader(): TemplateResult {\n return html`<progress></progress>`;\n }\n\n protected renderHeader(): TemplateResult {\n return html`\n <div class=\"header\">\n ${this.renderHistoryDropdown()}\n ${this.renderHistoryOptions()}\n ${this.renderViewToggle()}\n </div>\n `;\n }\n\n protected renderHistoryDropdown(): TemplateResult {\n const { model } = this;\n const disabled = !model || !model.length;\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"history-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleSelection}\"\n >\n <ui-button type=\"tonal\" ?disabled=\"${disabled}\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n History\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"History list\">\n ${this.renderHistoryList()}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderHistoryOptions(): TemplateResult {\n return html`\n <ui-dropdown-list @select=\"${this.handleHistoryOption}\" closeOnOutsideClick class=\"dropdown\">\n <ui-icon-button aria-label=\"Additional options\"><ui-icon icon=\"moreVert\" role=\"presentation\"></ui-icon></ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item role=\"menuitem\" data-option=\"clear\" image=\"icon\" title=\"Deletes all history for the request\">\n <ui-icon role=\"presentation\" slot=\"start\" icon=\"deleteOutline\"></ui-icon>\n Clear history\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderHistoryList(): (TemplateResult | typeof nothing)[] | typeof nothing {\n const { model } = this;\n if (!Array.isArray(model) || !model.length) {\n return nothing;\n }\n return model.map(group => this.renderHistoryGroup(group));\n }\n\n protected renderHistoryGroup(group: IHttpHistory[]): TemplateResult | typeof nothing {\n if (!group.length) {\n // this should not happen as the model is computed internally, \n // but I prefer to do just one check to not stop execution when error.\n return nothing;\n }\n const [first] = group;\n return html`\n ${this.renderHistoryGroupTitle(first)}\n ${group.map(item => this.renderHistoryItem(item))}\n `;\n }\n\n protected renderHistoryGroupTitle(item: IHttpHistory): TemplateResult {\n const { midnight = 0 } = item;\n return html`\n <div class=\"history-group-title\">${relativeDay(midnight)}</div>\n <ui-divider type=\"inset\"></ui-divider>\n `;\n }\n\n protected renderHistoryItem(item: IHttpHistory): TemplateResult | typeof nothing {\n const d = new Date(item.created);\n const isoTime = d.toISOString();\n\n const { log } = item;\n const { request, response } = log;\n const method = request && request.method;\n const url = request && request.url;\n if (!method || !url) {\n return nothing;\n }\n const error = !response || ErrorResponse.isErrorResponse(response);\n\n let status = 0;\n let statusText: string | undefined;\n let duration = 0;\n if (!error) {\n const typed = response as IResponse;\n status = typed.status;\n statusText = typed.statusText;\n duration = typed.loadingTime;\n }\n return html`\n <ui-list-item lines=\"two\" role=\"menuitem\" data-key=\"${item.key as string}\" data-kind=\"${item.kind}\">\n <div class=\"history-label\">\n <span class=\"label-value\">${statusTemplate(status, statusText)} ${duration} ms</span>\n ${this.renderHistoryItemDelete(item)}\n </div>\n <relative-time slot=\"supporting-text\" datetime=\"${isoTime}\"></relative-time>\n </ui-list-item>\n `;\n }\n\n protected renderHistoryItemDelete(item: IHttpHistory): TemplateResult | typeof nothing {\n return html`\n <ui-icon-button\n class=\"delete\"\n aria-label=\"Delete request\"\n data-key=\"${item.key as string}\" \n data-kind=\"${item.kind}\"\n @click=\"${this.handleItemDelete}\"\n ><ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon></ui-icon-button>\n `;\n }\n\n protected renderView(): TemplateResult | string {\n const { view } = this;\n if (view === ProjectHistoryView.analysis) {\n return this.renderAnalysis();\n }\n return this.renderLog();\n }\n\n protected renderLog(): TemplateResult | string {\n const { renderedItem } = this;\n if (!renderedItem) {\n return '';\n }\n const typed = renderedItem as IHttpHistory;\n const data = typed.log ? typed.log : renderedItem as IRequestLog | RequestLog;\n return html`\n <http-request-log .httpLog=\"${data}\"></http-request-log>\n `;\n }\n\n protected renderAnalysis(): TemplateResult | string {\n const { model } = this;\n if (!model) {\n return '';\n }\n const chart = new HttpHistoryChart(model);\n return chart.durationPlot();\n }\n\n protected renderViewToggle(): TemplateResult {\n return html`\n <div class=\"view-toggle\">\n <ui-segmented-button-set @select=\"${this.handleViewSelection}\">\n <ui-segmented-button selected title=\"Shows response history\" data-value=\"history\">History</ui-segmented-button>\n <ui-segmented-button title=\"Shows history analysis\" data-value=\"analysis\">Analysis</ui-segmented-button>\n </ui-segmented-button-set>\n </div>\n `;\n }\n\n protected renderClearHistoryDialog(): TemplateResult {\n return html`\n <ui-dialog modal class=\"clear-dialog\" @close=\"${this.handleClearHistoryDialogResult}\">\n <ui-icon slot=\"icon\" icon=\"deleteOutline\"></ui-icon>\n <span slot=\"title\">Delete history?</span>\n <p>This will clear responses history for this request.</p>\n <ui-button slot=\"button\" value=\"dismiss\" type=\"text\">Cancel</ui-button>\n <ui-button slot=\"button\" value=\"confirm\" type=\"text\">Accept</ui-button>\n </ui-dialog>\n `;\n }\n}\n"]}
@@ -7,10 +7,6 @@ import { ProjectFolderKind, ProjectRequestKind, EnvironmentKind, } from '@api-cl
7
7
  import { Events } from '../../events/Events.js';
8
8
  import AppNavigation from '../navigation/AppNavigationElement.js';
9
9
  export default class ProjectNavigation extends AppNavigation {
10
- /**
11
- * The instance of the project to create the navigation for.
12
- */
13
- project;
14
10
  /**
15
11
  * Computed value. Returns true when the project has any items to render in the view.
16
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectNavigation.js","sourceRoot":"","sources":["../../../src/elements/project/ProjectNavigation.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-continue */\n/* eslint-disable class-methods-use-this */\nimport { html, TemplateResult, PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { \n HttpProject, ProjectFolder, ProjectRequest, ProjectFolderKind, ProjectRequestKind, \n Environment, EnvironmentKind,\n} from '@api-client/core/build/browser.js';\nimport { Events } from '../../events/Events.js';\nimport AppNavigation from '../navigation/AppNavigationElement.js';\n\nexport default class ProjectNavigation extends AppNavigation {\n /**\n * The instance of the project to create the navigation for.\n */\n @property({ type: Object }) project?: HttpProject;\n\n /**\n * Computed value. Returns true when the project has any items to render in the view.\n */\n get hasItems(): boolean {\n const { project } = this;\n if (!project) {\n return false;\n }\n // the HttpProject doesn't do any computations when folder is not set. It's just a copy of the source array.\n const folders = project.listFolders();\n const requests = project.listRequests();\n const environments = project.listEnvironments();\n return !!folders.length || !!requests.length || !!environments.length;\n }\n\n constructor() {\n super();\n this.noVisualSelection = true;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('aria-label', 'HTTP project');\n }\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('project') && this.project) {\n this.label = this.project.info.renderLabel;\n }\n super.willUpdate(cp);\n }\n\n protected override _setupDataTransfer(item: HTMLLIElement, dt: DataTransfer): void {\n const { project } = this;\n if (!project) {\n return;\n }\n super._setupDataTransfer(item, dt);\n dt.setData('text/httpproject', project.key);\n }\n\n protected override _commitName(key: string, kind: string, name: string): void {\n const { project } = this;\n if (!project) {\n return;\n }\n if (!name) {\n return;\n }\n if (kind === ProjectFolderKind) {\n const object = project.findFolder(key);\n if (!object) {\n throw new Error(`Invalid state. Folder not found.`);\n }\n object.info.name = name;\n } else if (kind === ProjectRequestKind) {\n const object = project.findRequest(key);\n if (!object) {\n throw new Error(`Invalid state. Request not found.`);\n }\n object.info.name = name;\n } else if (kind === EnvironmentKind) {\n const object = project.findEnvironment(key);\n if (!object) {\n throw new Error(`Invalid state. Environment not found.`);\n }\n object.info.name = name;\n } else {\n throw new Error(`Invalid state. Unknown kind.`);\n }\n this.edited = undefined;\n Events.HttpProject.changed(this);\n Events.HttpProject.State.nameChanged(key, kind, this);\n }\n\n override render(): TemplateResult | string {\n const { project } = this;\n if (!project) {\n return html``;\n }\n if (!this.hasItems) {\n return this._emptyStateTemplate();\n }\n const content = this._renderParentChildrenTemplate(project);\n return html`\n ${this.renderLabel()}\n ${this._outerListTemplate(content) }\n `;\n }\n\n protected _renderParentChildrenTemplate(parent: HttpProject | ProjectFolder): TemplateResult | string {\n const { key } = parent;\n const folders = parent.listFolders();\n const requests = parent.listRequests();\n const environments = parent.listEnvironments();\n const isProject = parent.getProject() === undefined;\n const isEmpty = !folders.length && !environments.length && !requests.length;\n if (isEmpty) {\n return html`<p class=\"list-item-content empty\" aria-disabled=\"true\">Empty folder</p>`;\n }\n return html`\n ${folders.map(f => this.renderFolder(f, isProject ? undefined : key))}\n ${environments.map(r => this.renderEnvironment(r, isProject ? undefined : key))}\n ${requests.map(r => this.renderRequest(r, isProject ? undefined : key))}\n `;\n }\n\n protected _emptyStateTemplate(): TemplateResult | string {\n return html`\n ${this.renderLabel()}\n <div class=\"empty-state\">\n <p>This project has no items.</p>\n <p>Right-click on this panel to add a request.</p>\n </div>\n `;\n }\n\n protected renderFolder(folder: ProjectFolder, parentKey?: string): TemplateResult | string {\n const content = this._renderParentChildrenTemplate(folder);\n const name = folder.info.name || 'Unnamed folder';\n const { kind, key } = folder;\n return this._parentListItemTemplate(key, kind, name, content, {\n parent: parentKey,\n parentIcon: 'folderFilled',\n });\n }\n\n protected renderRequest(request: ProjectRequest, parentKey?: string): TemplateResult | string {\n const name = request.info.name || 'Unnamed request';\n const { key, kind } = request;\n const content = this._itemContentTemplate('request', name);\n return this._listItemTemplate(key, kind, name, content, {\n parent: parentKey,\n draggable: true,\n });\n }\n\n protected renderEnvironment(environment: Environment, parentKey?: string): TemplateResult | string {\n const name = environment.info.name || 'Unnamed environment';\n const { key, kind } = environment;\n const content = this._itemContentTemplate('environment', name);\n return this._listItemTemplate(key, kind, name, content, {\n parent: parentKey,\n draggable: true,\n });\n }\n}\n"]}
1
+ {"version":3,"file":"ProjectNavigation.js","sourceRoot":"","sources":["../../../src/elements/project/ProjectNavigation.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-continue */\n/* eslint-disable class-methods-use-this */\nimport { html, TemplateResult, PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { \n HttpProject, ProjectFolder, ProjectRequest, ProjectFolderKind, ProjectRequestKind, \n Environment, EnvironmentKind,\n} from '@api-client/core/build/browser.js';\nimport { Events } from '../../events/Events.js';\nimport AppNavigation from '../navigation/AppNavigationElement.js';\n\nexport default class ProjectNavigation extends AppNavigation {\n /**\n * The instance of the project to create the navigation for.\n */\n @property({ type: Object }) project?: HttpProject;\n\n /**\n * Computed value. Returns true when the project has any items to render in the view.\n */\n get hasItems(): boolean {\n const { project } = this;\n if (!project) {\n return false;\n }\n // the HttpProject doesn't do any computations when folder is not set. It's just a copy of the source array.\n const folders = project.listFolders();\n const requests = project.listRequests();\n const environments = project.listEnvironments();\n return !!folders.length || !!requests.length || !!environments.length;\n }\n\n constructor() {\n super();\n this.noVisualSelection = true;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('aria-label', 'HTTP project');\n }\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('project') && this.project) {\n this.label = this.project.info.renderLabel;\n }\n super.willUpdate(cp);\n }\n\n protected override _setupDataTransfer(item: HTMLLIElement, dt: DataTransfer): void {\n const { project } = this;\n if (!project) {\n return;\n }\n super._setupDataTransfer(item, dt);\n dt.setData('text/httpproject', project.key);\n }\n\n protected override _commitName(key: string, kind: string, name: string): void {\n const { project } = this;\n if (!project) {\n return;\n }\n if (!name) {\n return;\n }\n if (kind === ProjectFolderKind) {\n const object = project.findFolder(key);\n if (!object) {\n throw new Error(`Invalid state. Folder not found.`);\n }\n object.info.name = name;\n } else if (kind === ProjectRequestKind) {\n const object = project.findRequest(key);\n if (!object) {\n throw new Error(`Invalid state. Request not found.`);\n }\n object.info.name = name;\n } else if (kind === EnvironmentKind) {\n const object = project.findEnvironment(key);\n if (!object) {\n throw new Error(`Invalid state. Environment not found.`);\n }\n object.info.name = name;\n } else {\n throw new Error(`Invalid state. Unknown kind.`);\n }\n this.edited = undefined;\n Events.HttpProject.changed(this);\n Events.HttpProject.State.nameChanged(key, kind, this);\n }\n\n override render(): TemplateResult | string {\n const { project } = this;\n if (!project) {\n return html``;\n }\n if (!this.hasItems) {\n return this._emptyStateTemplate();\n }\n const content = this._renderParentChildrenTemplate(project);\n return html`\n ${this.renderLabel()}\n ${this._outerListTemplate(content) }\n `;\n }\n\n protected _renderParentChildrenTemplate(parent: HttpProject | ProjectFolder): TemplateResult | string {\n const { key } = parent;\n const folders = parent.listFolders();\n const requests = parent.listRequests();\n const environments = parent.listEnvironments();\n const isProject = parent.getProject() === undefined;\n const isEmpty = !folders.length && !environments.length && !requests.length;\n if (isEmpty) {\n return html`<p class=\"list-item-content empty\" aria-disabled=\"true\">Empty folder</p>`;\n }\n return html`\n ${folders.map(f => this.renderFolder(f, isProject ? undefined : key))}\n ${environments.map(r => this.renderEnvironment(r, isProject ? undefined : key))}\n ${requests.map(r => this.renderRequest(r, isProject ? undefined : key))}\n `;\n }\n\n protected _emptyStateTemplate(): TemplateResult | string {\n return html`\n ${this.renderLabel()}\n <div class=\"empty-state\">\n <p>This project has no items.</p>\n <p>Right-click on this panel to add a request.</p>\n </div>\n `;\n }\n\n protected renderFolder(folder: ProjectFolder, parentKey?: string): TemplateResult | string {\n const content = this._renderParentChildrenTemplate(folder);\n const name = folder.info.name || 'Unnamed folder';\n const { kind, key } = folder;\n return this._parentListItemTemplate(key, kind, name, content, {\n parent: parentKey,\n parentIcon: 'folderFilled',\n });\n }\n\n protected renderRequest(request: ProjectRequest, parentKey?: string): TemplateResult | string {\n const name = request.info.name || 'Unnamed request';\n const { key, kind } = request;\n const content = this._itemContentTemplate('request', name);\n return this._listItemTemplate(key, kind, name, content, {\n parent: parentKey,\n draggable: true,\n });\n }\n\n protected renderEnvironment(environment: Environment, parentKey?: string): TemplateResult | string {\n const name = environment.info.name || 'Unnamed environment';\n const { key, kind } = environment;\n const content = this._itemContentTemplate('environment', name);\n return this._listItemTemplate(key, kind, name, content, {\n parent: parentKey,\n draggable: true,\n });\n }\n}\n"]}
@@ -23,21 +23,10 @@ export var ProjectRunReportView;
23
23
  * An element that renders the execution log of the project runner with the IProjectExecutionLog.
24
24
  */
25
25
  export default class ProjectRunReport extends LitElement {
26
- report;
27
- /**
28
- * The index of the selected iteration, if any.
29
- */
30
- selectedIteration;
31
- /**
32
- * The index of the selected request, if any
33
- */
34
- selectedRequest;
35
- /**
36
- * The currently rendered iteration.
37
- */
38
- currentIteration;
39
- currentLog;
40
- view = ProjectRunReportView.summary;
26
+ constructor() {
27
+ super(...arguments);
28
+ this.view = ProjectRunReportView.summary;
29
+ }
41
30
  willUpdate(cp) {
42
31
  super.updated(cp);
43
32
  if (cp.has('report')) {
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectRunReport.js","sourceRoot":"","sources":["../../../src/elements/project/ProjectRunReport.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, TemplateResult, html, PropertyValues, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { \n ErrorResponse, IProjectExecutionIteration, IProjectExecutionLog, \n IRequestLog, IResponse \n} from '@api-client/core/build/browser.js';\nimport { statusTemplate } from '../http/HttpStatus.js';\nimport SegmentedButton from '../../ui/button/SegmentedButton.js';\nimport { RequestLogView } from '../http/RequestLog.js';\nimport '@github/relative-time-element';\nimport '../../define/http/http-request-log.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-segmented-button.js';\nimport '../../define/ui/ui-segmented-button-set.js';\n\nexport enum ProjectRunReportView {\n summary = 'summary',\n details = 'details',\n}\n\n/**\n * An element that renders the execution log of the project runner with the IProjectExecutionLog.\n */\nexport default class ProjectRunReport extends LitElement {\n @property({ type: Object }) report?: IProjectExecutionLog;\n\n /**\n * The index of the selected iteration, if any.\n */\n @state() protected selectedIteration?: number;\n\n /**\n * The index of the selected request, if any\n */\n @state() protected selectedRequest?: number;\n\n /**\n * The currently rendered iteration.\n */\n @state() protected currentIteration?: IProjectExecutionIteration;\n\n @state() protected currentLog?: IRequestLog;\n\n @state() protected view: ProjectRunReportView = ProjectRunReportView.summary;\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n super.updated(cp);\n if (cp.has('report')) {\n this.processReport();\n }\n }\n\n protected processReport(): void {\n const { report } = this;\n if (!report) {\n this.selectedIteration = undefined\n this.selectedRequest = undefined\n this.currentIteration = undefined\n this.currentLog = undefined\n return;\n }\n this.selectedIteration = 0;\n this.selectedRequest = 0;\n const [ iteration ] = report.iterations;\n this.currentIteration = iteration;\n this.currentLog = iteration && iteration.executed && iteration.executed[0];\n }\n\n protected handleIterationSelection(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { index } = element.dataset;\n if (!index) {\n return;\n }\n const typed = Number(index);\n if (Number.isNaN(typed)) {\n return;\n }\n this.selectIteration(typed);\n }\n\n selectIteration(index: number): void {\n const { report } = this;\n if (!report) {\n return;\n }\n const item = report.iterations[index];\n if (!item) {\n return;\n }\n this.selectedIteration = index;\n this.currentIteration = item;\n this.selectedRequest = 0\n this.currentLog = item.executed && item.executed[0];\n }\n\n protected handleRequestSelection(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { index } = element.dataset;\n if (!index) {\n return;\n }\n const typed = Number(index);\n if (Number.isNaN(typed)) {\n return;\n }\n this.selectRequest(typed);\n }\n\n selectRequest(index: number): void {\n const { currentIteration } = this;\n if (!currentIteration) {\n return;\n }\n const item = currentIteration.executed[index];\n if (!item) {\n return;\n }\n this.selectedRequest = index;\n this.currentLog = item;\n }\n\n protected handleViewSelection(e: CustomEvent): void {\n if (!e.detail.selected) {\n return;\n }\n const button = e.detail.button as SegmentedButton;\n const view = button.dataset.value as ProjectRunReportView | undefined;\n if (view) {\n this.view = view;\n }\n }\n\n protected handleLinkClick(e: Event): void {\n const node = e.target as HTMLElement;\n const { iterationIndex, requestIndex, target } = node.dataset;\n if (!requestIndex || !iterationIndex) {\n return;\n }\n const iteration = Number(iterationIndex);\n const request = Number(requestIndex);\n if (Number.isNaN(request) || Number.isNaN(iteration)) {\n return;\n }\n this.selectIteration(iteration);\n this.selectRequest(request);\n this.view = ProjectRunReportView.details;\n if (target) {\n this.selectLogView(target as RequestLogView);\n }\n }\n\n protected handleLinkKeyDown(e: KeyboardEvent): void {\n if (['Enter', 'Space'].includes(e.code)) {\n this.handleLinkClick(e);\n }\n }\n\n protected async selectLogView(view: RequestLogView): Promise<void> {\n await this.updateComplete;\n const node = this.shadowRoot?.querySelector('http-request-log');\n if (!node) {\n return;\n }\n node.view = view;\n }\n\n protected override render(): TemplateResult {\n const { report } = this;\n if (!report) {\n return html``;\n }\n return html`\n ${this.renderHeader(report)}\n ${this.renderView()}\n `;\n }\n\n protected renderHeader(report: IProjectExecutionLog): TemplateResult {\n return html`\n <div class=\"header\">\n ${this.renderCurrentSelectors(report)}\n ${this.renderViewToggle()}\n </div>\n `;\n }\n\n protected renderCurrentSelectors(report: IProjectExecutionLog): TemplateResult | typeof nothing {\n if (this.view === ProjectRunReportView.summary) {\n return nothing;\n }\n const hasIterations = report.iterations.length > 1;\n return html`\n ${hasIterations ? this.renderInteractionsList(report.iterations) : nothing}\n ${this.renderRequestsList()}\n `;\n }\n\n protected renderViewToggle(): TemplateResult {\n const { view } = this;\n return html`\n <div class=\"view-toggle\">\n <ui-segmented-button-set @select=\"${this.handleViewSelection}\">\n <ui-segmented-button \n .selected=\"${view === ProjectRunReportView.summary}\" \n title=\"Shows summary of the run report\" \n data-value=\"summary\"\n >Summary</ui-segmented-button>\n <ui-segmented-button \n .selected=\"${view === ProjectRunReportView.details}\" \n title=\"Shows detailed response information for each request\" \n data-value=\"details\"\n >Details</ui-segmented-button>\n </ui-segmented-button-set>\n </div>\n `;\n }\n\n protected renderInteractionsList(iterations: IProjectExecutionIteration[]): TemplateResult {\n const { selectedIteration = 0 } = this;\n const iteration = iterations[selectedIteration];\n const index = iteration ? iteration.index + 1 : 1;\n\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"iterations-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleIterationSelection}\"\n >\n <ui-button type=\"tonal\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n Iteration #${index}\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"Iterations list\">\n ${iterations.map(current => this.renderIterationOption(current.index))}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderIterationOption(index: number): TemplateResult {\n const classes = {\n 'iteration-option': true,\n highlight: this.selectedIteration === index,\n };\n return html`\n <ui-list-item role=\"menuitem\" data-index=\"${index}\" class=\"${classMap(classes)}\">\n Iteration #${index + 1}\n </ui-list-item>\n `;\n }\n\n protected renderRequestsList(): TemplateResult {\n const { currentIteration, selectedRequest = 0 } = this;\n if (!currentIteration) {\n return this.renderEmptyRequestsList();\n }\n if (!currentIteration.executed || !currentIteration.executed.length) {\n return this.renderEmptyRequestsList();\n }\n const options = currentIteration.executed.map((item, index) => this.renderRequestsOption(item, index));\n const item = currentIteration.executed[selectedRequest];\n const title = item.request && item.request.url || `Request #${selectedRequest}`;\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"history-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleRequestSelection}\"\n >\n <ui-button type=\"tonal\" title=\"${title}\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n <span class=\"request-title-dropdown\">${title}</span>\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"History list\">\n ${options}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderEmptyRequestsList(): TemplateResult {\n return html`\n <ui-button type=\"tonal\" disabled>\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n No requests\n </ui-button>\n `;\n }\n\n protected renderRequestsOption(item: IRequestLog, index: number): TemplateResult {\n const title = item.request && item.request.url || `Request #${index}`;\n const error = !item.response || ErrorResponse.isErrorResponse(item.response);\n const classes = {\n 'history-option': true,\n error,\n highlight: this.selectedRequest === index,\n };\n let status = 0;\n let statusText: string | undefined;\n let duration = 0;\n if (!error) {\n const typed = item.response as IResponse;\n status = typed.status;\n statusText = typed.statusText;\n duration = typed.loadingTime;\n }\n return html`\n <ui-list-item lines=\"two\" role=\"menuitem\" data-index=\"${index}\" class=\"${classMap(classes)}\">\n <div class=\"history-label\">\n <span class=\"label-value\">${statusTemplate(status, statusText)} ${duration} ms</span>\n </div>\n <span slot=\"supporting-text\">${title}</span>\n </ui-list-item>\n `;\n }\n\n protected renderView(): TemplateResult {\n switch (this.view) {\n case ProjectRunReportView.details: return this.renderLog();\n case ProjectRunReportView.summary: return this.renderSummary();\n default: return html`<p>Invalid view selection.</p>`;\n }\n }\n\n protected renderLog(): TemplateResult {\n const { currentLog } = this;\n return html`\n <div class=\"response\">\n ${currentLog ? html`<http-request-log .httpLog=\"${currentLog}\"></http-request-log>` : ''}\n </div>\n `;\n }\n\n protected renderSummary(): TemplateResult {\n const { report } = this;\n if (!report) {\n return html`<p>Report is not set.</p>`;\n }\n const { iterations, ended } = report;\n const de = new Date(ended);\n return html`\n <div class=\"summary-header\">\n Run ended <relative-time slot=\"supporting-text\" datetime=\"${de.toISOString()}\"></relative-time>\n </div>\n ${iterations.map(iteration => this.renderIterationSummary(iteration))}\n `;\n }\n\n protected renderIterationSummary(iteration: IProjectExecutionIteration): TemplateResult {\n const { error, executed, index } = iteration;\n return html`\n ${error ? this.renderIterationError() : this.renderIterationSummaryTable(index, executed)}\n `;\n }\n\n protected renderIterationError(): TemplateResult {\n return html`\n <p class=\"iteration-error\">The iteration was not executed due to an error.</p>\n `;\n }\n\n protected renderIterationSummaryTable(iterationIndex: number, executed: IRequestLog[]): TemplateResult {\n const failedIndex: string[] = [];\n executed.forEach((item, index) => {\n const { assertions=[] } = item;\n const hasFailed = assertions.find(i => !i.ok);\n if (hasFailed) {\n failedIndex.push(`#${index + 1}`);\n }\n });\n const formatter = new Intl.ListFormat(undefined, { style: 'long', type: 'conjunction' });\n return html`\n <table class=\"execution-table\">\n <caption>Iteration #${iterationIndex + 1}. Failed requests: ${failedIndex.length ? formatter.format(failedIndex) : 'none'}.</caption>\n <thead>\n <tr>\n <th scope=\"col\" class=\"request\">HTTP request</th>\n <th scope=\"col\" class=\"status\">Status</th>\n <th scope=\"col\" class=\"time\">Time</th>\n <th scope=\"col\" class=\"assertions\">Assertions</th>\n </tr>\n </thead>\n <tbody>\n ${executed.map((item, requestIndex) => this.renderSummaryTableRow(item, iterationIndex, requestIndex))}\n </tbody>\n </table>\n `;\n }\n\n renderSummaryTableRow(item: IRequestLog, iterationIndex: number, requestIndex: number): TemplateResult {\n const { assertions = [], request, response } = item;\n if (!request) {\n return html`\n <tr>\n <td colspan=\"3\">The request was not executed (missing request info)</td>\n </tr>\n `;\n }\n const error = !item.response || ErrorResponse.isErrorResponse(item.response);\n let status: TemplateResult;\n let duration = 0;\n if (error) {\n status = html`Errored`;\n } else if (response) {\n status = statusTemplate(response.status, response.statusText);\n duration = (response as IResponse).loadingTime;\n } else {\n status = html`Unknown`;\n }\n const successAssertions = (item.assertions || []).filter(i => i.ok);\n const hasFailed = assertions.length - successAssertions.length !== 0;\n return html`\n <tr>\n <td class=\"request\">\n <span class=\"http-label pill\" data-method=\"${(request.method || 'get').toLowerCase()}\">${request.method}</span>\n <span \n class=\"link\" \n title=\"Open details\" \n data-iteration-index=\"${iterationIndex}\" \n data-request-index=\"${requestIndex}\"\n @click=\"${this.handleLinkClick}\"\n @keydown=\"${this.handleLinkKeyDown}\"\n tabindex=\"0\"\n >${request.url}</span>\n </td>\n <td class=\"status\">${status}</td>\n <td class=\"time\">${duration}ms</td>\n <td class=\"assertions\">\n <span\n class=\"link\"\n title=\"Open assertion details\"\n data-iteration-index=\"${iterationIndex}\" \n data-request-index=\"${requestIndex}\"\n data-target=\"${RequestLogView.assertions}\"\n @click=\"${this.handleLinkClick}\"\n @keydown=\"${this.handleLinkKeyDown}\"\n tabindex=\"0\"\n >${successAssertions.length}/${assertions.length}</span>\n ${hasFailed ? html`<div class=\"badge small\"></div>` : ''}\n </td>\n </tr>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"ProjectRunReport.js","sourceRoot":"","sources":["../../../src/elements/project/ProjectRunReport.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, TemplateResult, html, PropertyValues, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { \n ErrorResponse, IProjectExecutionIteration, IProjectExecutionLog, \n IRequestLog, IResponse \n} from '@api-client/core/build/browser.js';\nimport { statusTemplate } from '../http/HttpStatus.js';\nimport SegmentedButton from '../../ui/button/SegmentedButton.js';\nimport { RequestLogView } from '../http/RequestLog.js';\nimport '@github/relative-time-element';\nimport '../../define/http/http-request-log.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-segmented-button.js';\nimport '../../define/ui/ui-segmented-button-set.js';\n\nexport enum ProjectRunReportView {\n summary = 'summary',\n details = 'details',\n}\n\n/**\n * An element that renders the execution log of the project runner with the IProjectExecutionLog.\n */\nexport default class ProjectRunReport extends LitElement {\n @property({ type: Object }) report?: IProjectExecutionLog;\n\n /**\n * The index of the selected iteration, if any.\n */\n @state() protected selectedIteration?: number;\n\n /**\n * The index of the selected request, if any\n */\n @state() protected selectedRequest?: number;\n\n /**\n * The currently rendered iteration.\n */\n @state() protected currentIteration?: IProjectExecutionIteration;\n\n @state() protected currentLog?: IRequestLog;\n\n @state() protected view: ProjectRunReportView = ProjectRunReportView.summary;\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n super.updated(cp);\n if (cp.has('report')) {\n this.processReport();\n }\n }\n\n protected processReport(): void {\n const { report } = this;\n if (!report) {\n this.selectedIteration = undefined\n this.selectedRequest = undefined\n this.currentIteration = undefined\n this.currentLog = undefined\n return;\n }\n this.selectedIteration = 0;\n this.selectedRequest = 0;\n const [ iteration ] = report.iterations;\n this.currentIteration = iteration;\n this.currentLog = iteration && iteration.executed && iteration.executed[0];\n }\n\n protected handleIterationSelection(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { index } = element.dataset;\n if (!index) {\n return;\n }\n const typed = Number(index);\n if (Number.isNaN(typed)) {\n return;\n }\n this.selectIteration(typed);\n }\n\n selectIteration(index: number): void {\n const { report } = this;\n if (!report) {\n return;\n }\n const item = report.iterations[index];\n if (!item) {\n return;\n }\n this.selectedIteration = index;\n this.currentIteration = item;\n this.selectedRequest = 0\n this.currentLog = item.executed && item.executed[0];\n }\n\n protected handleRequestSelection(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { index } = element.dataset;\n if (!index) {\n return;\n }\n const typed = Number(index);\n if (Number.isNaN(typed)) {\n return;\n }\n this.selectRequest(typed);\n }\n\n selectRequest(index: number): void {\n const { currentIteration } = this;\n if (!currentIteration) {\n return;\n }\n const item = currentIteration.executed[index];\n if (!item) {\n return;\n }\n this.selectedRequest = index;\n this.currentLog = item;\n }\n\n protected handleViewSelection(e: CustomEvent): void {\n if (!e.detail.selected) {\n return;\n }\n const button = e.detail.button as SegmentedButton;\n const view = button.dataset.value as ProjectRunReportView | undefined;\n if (view) {\n this.view = view;\n }\n }\n\n protected handleLinkClick(e: Event): void {\n const node = e.target as HTMLElement;\n const { iterationIndex, requestIndex, target } = node.dataset;\n if (!requestIndex || !iterationIndex) {\n return;\n }\n const iteration = Number(iterationIndex);\n const request = Number(requestIndex);\n if (Number.isNaN(request) || Number.isNaN(iteration)) {\n return;\n }\n this.selectIteration(iteration);\n this.selectRequest(request);\n this.view = ProjectRunReportView.details;\n if (target) {\n this.selectLogView(target as RequestLogView);\n }\n }\n\n protected handleLinkKeyDown(e: KeyboardEvent): void {\n if (['Enter', 'Space'].includes(e.code)) {\n this.handleLinkClick(e);\n }\n }\n\n protected async selectLogView(view: RequestLogView): Promise<void> {\n await this.updateComplete;\n const node = this.shadowRoot?.querySelector('http-request-log');\n if (!node) {\n return;\n }\n node.view = view;\n }\n\n protected override render(): TemplateResult {\n const { report } = this;\n if (!report) {\n return html``;\n }\n return html`\n ${this.renderHeader(report)}\n ${this.renderView()}\n `;\n }\n\n protected renderHeader(report: IProjectExecutionLog): TemplateResult {\n return html`\n <div class=\"header\">\n ${this.renderCurrentSelectors(report)}\n ${this.renderViewToggle()}\n </div>\n `;\n }\n\n protected renderCurrentSelectors(report: IProjectExecutionLog): TemplateResult | typeof nothing {\n if (this.view === ProjectRunReportView.summary) {\n return nothing;\n }\n const hasIterations = report.iterations.length > 1;\n return html`\n ${hasIterations ? this.renderInteractionsList(report.iterations) : nothing}\n ${this.renderRequestsList()}\n `;\n }\n\n protected renderViewToggle(): TemplateResult {\n const { view } = this;\n return html`\n <div class=\"view-toggle\">\n <ui-segmented-button-set @select=\"${this.handleViewSelection}\">\n <ui-segmented-button \n .selected=\"${view === ProjectRunReportView.summary}\" \n title=\"Shows summary of the run report\" \n data-value=\"summary\"\n >Summary</ui-segmented-button>\n <ui-segmented-button \n .selected=\"${view === ProjectRunReportView.details}\" \n title=\"Shows detailed response information for each request\" \n data-value=\"details\"\n >Details</ui-segmented-button>\n </ui-segmented-button-set>\n </div>\n `;\n }\n\n protected renderInteractionsList(iterations: IProjectExecutionIteration[]): TemplateResult {\n const { selectedIteration = 0 } = this;\n const iteration = iterations[selectedIteration];\n const index = iteration ? iteration.index + 1 : 1;\n\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"iterations-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleIterationSelection}\"\n >\n <ui-button type=\"tonal\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n Iteration #${index}\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"Iterations list\">\n ${iterations.map(current => this.renderIterationOption(current.index))}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderIterationOption(index: number): TemplateResult {\n const classes = {\n 'iteration-option': true,\n highlight: this.selectedIteration === index,\n };\n return html`\n <ui-list-item role=\"menuitem\" data-index=\"${index}\" class=\"${classMap(classes)}\">\n Iteration #${index + 1}\n </ui-list-item>\n `;\n }\n\n protected renderRequestsList(): TemplateResult {\n const { currentIteration, selectedRequest = 0 } = this;\n if (!currentIteration) {\n return this.renderEmptyRequestsList();\n }\n if (!currentIteration.executed || !currentIteration.executed.length) {\n return this.renderEmptyRequestsList();\n }\n const options = currentIteration.executed.map((item, index) => this.renderRequestsOption(item, index));\n const item = currentIteration.executed[selectedRequest];\n const title = item.request && item.request.url || `Request #${selectedRequest}`;\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"history-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleRequestSelection}\"\n >\n <ui-button type=\"tonal\" title=\"${title}\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n <span class=\"request-title-dropdown\">${title}</span>\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"History list\">\n ${options}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderEmptyRequestsList(): TemplateResult {\n return html`\n <ui-button type=\"tonal\" disabled>\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n No requests\n </ui-button>\n `;\n }\n\n protected renderRequestsOption(item: IRequestLog, index: number): TemplateResult {\n const title = item.request && item.request.url || `Request #${index}`;\n const error = !item.response || ErrorResponse.isErrorResponse(item.response);\n const classes = {\n 'history-option': true,\n error,\n highlight: this.selectedRequest === index,\n };\n let status = 0;\n let statusText: string | undefined;\n let duration = 0;\n if (!error) {\n const typed = item.response as IResponse;\n status = typed.status;\n statusText = typed.statusText;\n duration = typed.loadingTime;\n }\n return html`\n <ui-list-item lines=\"two\" role=\"menuitem\" data-index=\"${index}\" class=\"${classMap(classes)}\">\n <div class=\"history-label\">\n <span class=\"label-value\">${statusTemplate(status, statusText)} ${duration} ms</span>\n </div>\n <span slot=\"supporting-text\">${title}</span>\n </ui-list-item>\n `;\n }\n\n protected renderView(): TemplateResult {\n switch (this.view) {\n case ProjectRunReportView.details: return this.renderLog();\n case ProjectRunReportView.summary: return this.renderSummary();\n default: return html`<p>Invalid view selection.</p>`;\n }\n }\n\n protected renderLog(): TemplateResult {\n const { currentLog } = this;\n return html`\n <div class=\"response\">\n ${currentLog ? html`<http-request-log .httpLog=\"${currentLog}\"></http-request-log>` : ''}\n </div>\n `;\n }\n\n protected renderSummary(): TemplateResult {\n const { report } = this;\n if (!report) {\n return html`<p>Report is not set.</p>`;\n }\n const { iterations, ended } = report;\n const de = new Date(ended);\n return html`\n <div class=\"summary-header\">\n Run ended <relative-time slot=\"supporting-text\" datetime=\"${de.toISOString()}\"></relative-time>\n </div>\n ${iterations.map(iteration => this.renderIterationSummary(iteration))}\n `;\n }\n\n protected renderIterationSummary(iteration: IProjectExecutionIteration): TemplateResult {\n const { error, executed, index } = iteration;\n return html`\n ${error ? this.renderIterationError() : this.renderIterationSummaryTable(index, executed)}\n `;\n }\n\n protected renderIterationError(): TemplateResult {\n return html`\n <p class=\"iteration-error\">The iteration was not executed due to an error.</p>\n `;\n }\n\n protected renderIterationSummaryTable(iterationIndex: number, executed: IRequestLog[]): TemplateResult {\n const failedIndex: string[] = [];\n executed.forEach((item, index) => {\n const { assertions=[] } = item;\n const hasFailed = assertions.find(i => !i.ok);\n if (hasFailed) {\n failedIndex.push(`#${index + 1}`);\n }\n });\n const formatter = new Intl.ListFormat(undefined, { style: 'long', type: 'conjunction' });\n return html`\n <table class=\"execution-table\">\n <caption>Iteration #${iterationIndex + 1}. Failed requests: ${failedIndex.length ? formatter.format(failedIndex) : 'none'}.</caption>\n <thead>\n <tr>\n <th scope=\"col\" class=\"request\">HTTP request</th>\n <th scope=\"col\" class=\"status\">Status</th>\n <th scope=\"col\" class=\"time\">Time</th>\n <th scope=\"col\" class=\"assertions\">Assertions</th>\n </tr>\n </thead>\n <tbody>\n ${executed.map((item, requestIndex) => this.renderSummaryTableRow(item, iterationIndex, requestIndex))}\n </tbody>\n </table>\n `;\n }\n\n renderSummaryTableRow(item: IRequestLog, iterationIndex: number, requestIndex: number): TemplateResult {\n const { assertions = [], request, response } = item;\n if (!request) {\n return html`\n <tr>\n <td colspan=\"3\">The request was not executed (missing request info)</td>\n </tr>\n `;\n }\n const error = !item.response || ErrorResponse.isErrorResponse(item.response);\n let status: TemplateResult;\n let duration = 0;\n if (error) {\n status = html`Errored`;\n } else if (response) {\n status = statusTemplate(response.status, response.statusText);\n duration = (response as IResponse).loadingTime;\n } else {\n status = html`Unknown`;\n }\n const successAssertions = (item.assertions || []).filter(i => i.ok);\n const hasFailed = assertions.length - successAssertions.length !== 0;\n return html`\n <tr>\n <td class=\"request\">\n <span class=\"http-label pill\" data-method=\"${(request.method || 'get').toLowerCase()}\">${request.method}</span>\n <span \n class=\"link\" \n title=\"Open details\" \n data-iteration-index=\"${iterationIndex}\" \n data-request-index=\"${requestIndex}\"\n @click=\"${this.handleLinkClick}\"\n @keydown=\"${this.handleLinkKeyDown}\"\n tabindex=\"0\"\n >${request.url}</span>\n </td>\n <td class=\"status\">${status}</td>\n <td class=\"time\">${duration}ms</td>\n <td class=\"assertions\">\n <span\n class=\"link\"\n title=\"Open assertion details\"\n data-iteration-index=\"${iterationIndex}\" \n data-request-index=\"${requestIndex}\"\n data-target=\"${RequestLogView.assertions}\"\n @click=\"${this.handleLinkClick}\"\n @keydown=\"${this.handleLinkKeyDown}\"\n tabindex=\"0\"\n >${successAssertions.length}/${assertions.length}</span>\n ${hasFailed ? html`<div class=\"badge small\"></div>` : ''}\n </td>\n </tr>\n `;\n }\n}\n"]}
@@ -20,55 +20,10 @@ import { EventTypes } from '../../events/EventTypes.js';
20
20
  * @fires change - When the configuration of the runner change.
21
21
  */
22
22
  export default class ProjectRunner extends ApiElement {
23
- /**
24
- * The instance of the current project.
25
- */
26
- project;
27
- /**
28
- * This property is required for the API access to work.
29
- * Set it to the current application information.
30
- */
31
- appInfo;
32
- /**
33
- * The key of the folder to render the runner for.
34
- * When not set, it renders the runner for the project.
35
- * @attribute
36
- */
37
- folder;
38
- /**
39
- * The object we operate on.
40
- */
41
- root;
42
- /**
43
- * Whether the element is currently running the project execution.
44
- */
45
- running;
46
- /**
47
- * Whether the element is currently querying for the history data.
48
- */
49
- querying;
50
- /**
51
- * The page cursor for pagination.
52
- */
53
- pageCursor;
54
- /**
55
- * The run configuration.
56
- */
57
- config;
58
- lastError;
59
- history = [];
60
- queryPageDebouncer;
61
- debounceTimeout = 100;
62
- /**
63
- * The key of the currently rendered report.
64
- */
65
- selectedReport;
66
- /**
67
- * The currently rendered report.
68
- */
69
- renderedReport;
70
23
  constructor() {
71
24
  super();
25
+ this.history = [];
26
+ this.debounceTimeout = 100;
72
27
  this.handleProjectRunCreated = this.handleProjectRunCreated.bind(this);
73
28
  this.handleProjectRunDeleted = this.handleProjectRunDeleted.bind(this);
74
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectRunner.js","sourceRoot":"","sources":["../../../src/elements/project/ProjectRunner.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, PropertyValues, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { \n HttpProject, ProjectFolder, IProjectRunnerOptions, \n Events as CoreEvents, IProjectExecutionLog, \n IApplication, HttpProjectKind, \n IHttpProjectProxyInit,\n ProjectExecutionKind,\n IProjectExecution,\n IProjectExecutionListOptions,\n ContextStateUpdateEvent,\n ContextStateDeleteEvent,\n} from '@api-client/core/build/browser.js';\nimport ApiElement from '../ApiElement.js';\nimport CheckboxElement from '../../ui/input/CheckboxElement.js';\nimport Input from '../../ui/input/Input.js';\nimport { Events } from '../../events/Events.js';\nimport '@github/relative-time-element';\nimport '../../define/http-project/project-run-report.js';\nimport '../../define/ui/ui-checkbox.js';\nimport '../../define/ui/ui-text-field.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-progress.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport { EventTypes } from '../../events/EventTypes.js';\n\n/**\n * @fires change - When the configuration of the runner change.\n */\nexport default class ProjectRunner extends ApiElement {\n /**\n * The instance of the current project.\n */\n @property({ type: Object }) project?: HttpProject;\n\n /**\n * This property is required for the API access to work.\n * Set it to the current application information.\n */\n @property({ type: Object }) appInfo?: IApplication;\n\n /**\n * The key of the folder to render the runner for.\n * When not set, it renders the runner for the project.\n * @attribute\n */\n @property({ type: String, reflect: true }) folder?: string;\n\n /**\n * The object we operate on.\n */\n @state() protected root?: HttpProject | ProjectFolder;\n\n /**\n * Whether the element is currently running the project execution.\n */\n @state() protected running?: boolean;\n\n /**\n * Whether the element is currently querying for the history data.\n */\n @state() protected querying?: boolean;\n\n /**\n * The page cursor for pagination.\n */\n protected pageCursor?: string;\n\n /**\n * The run configuration.\n */\n @property({ type: Object }) config?: IProjectRunnerOptions;\n\n @state() protected lastError?: string;\n\n protected history: IProjectExecution[] = [];\n\n protected queryPageDebouncer?: number;\n\n debounceTimeout = 100;\n\n /**\n * The key of the currently rendered report.\n */\n protected selectedReport?: string;\n\n /**\n * The currently rendered report.\n */\n @state() renderedReport?: IProjectExecution;\n\n constructor() {\n super();\n\n this.handleProjectRunCreated = this.handleProjectRunCreated.bind(this);\n this.handleProjectRunDeleted = this.handleProjectRunDeleted.bind(this);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener(EventTypes.Store.ProjectRuns.State.create, this.handleProjectRunCreated as EventListenerOrEventListenerObject);\n window.addEventListener(EventTypes.Store.ProjectRuns.State.delete, this.handleProjectRunDeleted as EventListenerOrEventListenerObject);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener(EventTypes.Store.ProjectRuns.State.create, this.handleProjectRunCreated as EventListenerOrEventListenerObject);\n window.removeEventListener(EventTypes.Store.ProjectRuns.State.delete, this.handleProjectRunDeleted as EventListenerOrEventListenerObject);\n }\n\n override willUpdate(cp: PropertyValues<this>): void {\n super.willUpdate(cp);\n if (cp.has('project') || cp.has('folder')) {\n this.setupRoot();\n }\n }\n\n protected setupRoot(): void {\n const { project, folder } = this;\n if (!project) {\n this.root = undefined;\n return;\n }\n if (!folder) {\n this.root = project;\n } else {\n this.root = project.findFolder(folder);\n }\n this.resetHistory();\n this.queryPageDebounce();\n }\n\n protected handleProjectRunCreated(e: ContextStateUpdateEvent<IProjectExecution>): void {\n const { parent } = e.detail;\n const item = e.detail.item as IProjectExecution;\n const { folder } = this;\n // parent is either folder (if the log has a folder) or the project.\n if (folder) {\n if (parent !== folder || !item.parent || item.parent !== folder) {\n return;\n }\n } else if (parent !== this.project?.key) {\n return;\n }\n this.history.push(item);\n this.history.sort(this.historySort);\n this.selectHistory(item.key);\n }\n\n protected handleProjectRunDeleted(e: ContextStateDeleteEvent): void {\n const { history } = this;\n const { key } = e.detail;\n const index = history.findIndex(i => i.key === key);\n if (index < 0) {\n return;\n }\n history.splice(index, 1);\n this.requestUpdate();\n if (this.selectedReport === key) {\n this.selectedReport = undefined;\n const [first] = history;\n if (first) {\n this.selectHistory(first.key);\n }\n }\n }\n\n protected handleRun(): void {\n this.execute();\n }\n\n /**\n * Executes the current configuration.\n */\n async execute(): Promise<void> {\n this.lastError = undefined;\n const { config = {}, folder, project } = this;\n if (!project) {\n return;\n }\n if (folder) {\n config.parent = folder;\n }\n const init: IHttpProjectProxyInit = {\n kind: HttpProjectKind,\n project: project.toJSON(),\n options: config,\n };\n \n this.running = true;\n try {\n const result = await CoreEvents.Transport.Core.httpProject(init, this);\n if (!result) {\n this.lastError = 'The project execution event was not handled.';\n } else {\n this.createHistory(result.result);\n }\n } catch (e) {\n this.lastError = (e as Error).message;\n }\n this.running = false;\n }\n\n protected async createHistory(result: IProjectExecutionLog): Promise<void> {\n const { appInfo, project } = this;\n if (!appInfo) {\n throw new Error(`The appInfo is not set on ${this.localName}`);\n }\n if (!project) {\n return;\n }\n await Events.Store.ProjectRuns.add({\n ...result,\n app: appInfo.code,\n project: project.key,\n key: '',\n kind: ProjectExecutionKind,\n midnight: 0,\n parent: this.folder,\n });\n }\n\n resetHistory(): void {\n this.querying = false;\n this.pageCursor = undefined;\n this.history = [];\n if (this.queryPageDebouncer) {\n clearTimeout(this.queryPageDebouncer);\n this.queryPageDebouncer = undefined;\n }\n }\n\n queryPageDebounce(): void {\n if (this.queryPageDebouncer) {\n return;\n }\n this.queryPageDebouncer = setTimeout(() => { \n this.queryPageDebouncer = undefined;\n this.queryPage();\n }, this.debounceTimeout) as unknown as number;\n }\n\n async queryPage(): Promise<void> {\n const { project, appInfo, folder, pageCursor } = this;\n if (this.querying || !project) {\n return;\n }\n this.querying = true;\n const opts: IProjectExecutionListOptions = {\n space: '',\n project: project.key,\n };\n if (appInfo) {\n opts.app = appInfo.code;\n }\n if (folder) {\n opts.parent = folder;\n }\n if (pageCursor) {\n opts.cursor = pageCursor;\n }\n try {\n const result = await Events.Store.ProjectRuns.list(opts, this);\n if (!result) {\n throw new Error(`Project runs query not handled by the store.`);\n }\n const { items, cursor } = result;\n if (items.length) {\n if (cursor) {\n this.pageCursor = cursor;\n }\n this.history = this.history.concat(items);\n this.history.sort(this.historySort);\n if (!this.selectedReport) {\n const [last] = this.history;\n this.selectHistory(last.key);\n }\n this.requestUpdate();\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n } finally {\n this.querying = false;\n }\n }\n\n protected historySort(a: IProjectExecution, b: IProjectExecution): number {\n return b.ended - a.ended;\n }\n\n setRecursive(value: boolean): void {\n const { config = {} } = this;\n config.recursive = value;\n this.config = config;\n this.notifyChange();\n }\n\n setParallel(value: boolean): void {\n const { config = {} } = this;\n config.parallel = value;\n this.config = config;\n this.notifyChange();\n }\n\n setIterations(value: number): void {\n const { config = {} } = this;\n config.iterations = value;\n this.config = config;\n this.notifyChange();\n }\n\n setIterationDelay(value: number): void {\n const { config = {} } = this;\n config.iterationDelay = value;\n this.config = config;\n this.notifyChange();\n }\n\n notifyChange(): void {\n this.dispatchEvent(new Event('change'));\n }\n\n protected handleRecursiveChecked(e: Event): void {\n const input = e.target as CheckboxElement;\n this.setRecursive(input.checked);\n }\n\n protected handleParallelChecked(e: Event): void {\n const input = e.target as CheckboxElement;\n this.setParallel(input.checked);\n }\n\n protected handleIterationsChange(e: Event): void {\n const input = e.target as Input;\n this.setIterations(input.valueAsNumber)\n input.checkValidity();\n }\n\n protected handleIterationDelayChange(e: Event): void {\n const input = e.target as Input;\n this.setIterationDelay(input.valueAsNumber)\n input.checkValidity();\n }\n\n protected handleHistorySelection(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { key } = element.dataset;\n if (!key) {\n return;\n }\n this.selectHistory(key);\n }\n\n selectHistory(key: string): void {\n this.selectedReport = key;\n const { history } = this;\n const report = history.find(i => i.key === key);\n if (report) {\n this.renderedReport = report;\n } else {\n this.renderedReport = undefined;\n }\n }\n\n protected override render(): TemplateResult {\n const { root } = this;\n if (!root) {\n return html``;\n }\n return html`\n <section id=\"config\">\n <div class=\"header title-large section-title\">Project runner for ${root.info.renderLabel}</div>\n <form name=\"run-config\" class=\"run-config surface1\">\n <div class=\"section-title title-medium\">Run configuration</div>\n ${this.renderRecursiveOption()}\n ${this.renderParallelOption()}\n ${this.renderIterationOption()}\n ${this.renderIterationDelayOption()}\n ${this.renderSubmit()}\n </form>\n ${this.renderError()}\n ${this.renderLoader()}\n ${this.renderReport()}\n </section>\n `;\n }\n\n protected renderRecursiveOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.recursive === 'boolean' ? config.recursive : false;\n return html`\n <div class=\"form-row\">\n <ui-checkbox \n id=\"recursive\"\n .checked=\"${value}\"\n name=\"recursive\" \n aria-labelledby=\"recursiveLabel\"\n aria-describedby=\"recursiveDescription\" \n @change=\"${this.handleRecursiveChecked}\"\n ></ui-checkbox>\n <label class=\"label-large\" for=\"recursive\" id=\"recursiveLabel\">\n Recursive\n </label>\n <p class=\"body-medium\" id=\"recursiveDescription\">\n Runs all requests from the current folder and its sub-folders\n </p>\n </div>\n `;\n }\n\n protected renderParallelOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.parallel === 'boolean' ? config.parallel : false;\n return html`\n <div class=\"form-row\">\n <ui-checkbox\n id=\"parallel\"\n .checked=\"${value}\"\n name=\"parallel\" \n aria-labelledby=\"parallelLabel\"\n aria-describedby=\"parallelDescription\" \n @change=\"${this.handleParallelChecked}\"\n ></ui-checkbox>\n <label class=\"label-large\" for=\"parallel\" id=\"parallelLabel\">\n Parallel\n </label>\n <p class=\"body-medium\" id=\"parallelDescription\">\n Runs each iteration in parallel. The number of actual execution depends on the number of cores on your device. \n This is ignored when number of iterations is 1.\n </p>\n </div>\n `;\n }\n\n protected renderIterationOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.iterations === 'number' ? config.iterations : 1;\n return html`\n <div class=\"form-row\">\n <ui-text-field\n required \n label=\"Iterations\"\n aria-describedby=\"iterationsDescription\" \n name=\"iterations\" \n type=\"number\" \n min=\"1\" \n step=\"1\" \n .value=\"${String(value)}\"\n @change=\"${this.handleIterationsChange}\"\n ></ui-text-field>\n <p class=\"body-medium\" id=\"iterationsDescription\">\n The number of times the execution should be repeated.\n </p>\n </div>\n `;\n }\n\n protected renderIterationDelayOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.iterationDelay === 'number' ? config.iterationDelay : 0;\n return html`\n <div class=\"form-row\">\n <ui-text-field\n required\n label=\"Iteration delay\"\n aria-describedby=\"iterationDelayDescription\"\n name=\"iterationDelay\"\n type=\"number\"\n min=\"0\"\n step=\"1\"\n .value=\"${String(value)}\"\n @change=\"${this.handleIterationDelayChange}\"\n ></ui-text-field>\n <p class=\"body-medium\" id=\"iterationDelayDescription\">\n The number of milliseconds to wait between each iteration.\n </p>\n </div>\n `;\n }\n\n protected renderSubmit(): TemplateResult {\n return html`\n <div class=\"submit-row\">\n <ui-button type=\"filled\" @click=\"${this.handleRun}\" ?disabled=\"${this.running}\">Run</ui-button>\n </div>\n `;\n }\n\n protected renderLoader(): TemplateResult | string {\n if (!this.running) {\n return '';\n }\n return html`\n <ui-progress indeterminate></ui-progress>\n `;\n }\n\n protected renderError(): TemplateResult | string {\n const { lastError } = this;\n if (!lastError) {\n return '';\n }\n return html`<div class=\"error on-error-text body-large last-error\">${lastError}</div>`;\n }\n\n protected renderReport(): TemplateResult | typeof nothing {\n const { renderedReport, history } = this;\n if (!history.length) {\n return nothing;\n }\n return html`\n <section aria-label=\"Latest report\" class=\"report surface1\">\n <div class=\"section-title title-medium\">Run reports</div>\n ${this.renderHistorySelector()}\n <project-run-report .report=\"${renderedReport}\"></project-run-report>\n </section>\n `;\n }\n\n protected renderHistorySelector(): TemplateResult {\n const { history } = this;\n const disabled = !history.length;\n const selected = history.find(i => i.key === this.selectedReport);\n return html`\n <div class=\"history-selector\">\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"history-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleHistorySelection}\"\n >\n <ui-button type=\"tonal\" ?disabled=\"${disabled}\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n ${selected ? html`<relative-time datetime=\"${new Date(selected.ended).toISOString()}\"></relative-time>` : 'History'}\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"History list\">\n ${history.map(current => this.renderHistoryOption(current))}\n </ui-list>\n </ui-dropdown-list>\n </div>\n `;\n }\n\n renderHistoryOption(item: IProjectExecution): TemplateResult {\n const { ended, key } = item;\n const classes = {\n 'history-option': true,\n highlight: this.selectedReport === key,\n };\n const de = new Date(ended);\n return html`\n <ui-list-item role=\"menuitem\" data-key=\"${key}\" class=\"${classMap(classes)}\">\n <relative-time datetime=\"${de.toISOString()}\"></relative-time>\n </ui-list-item>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"ProjectRunner.js","sourceRoot":"","sources":["../../../src/elements/project/ProjectRunner.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, PropertyValues, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { \n HttpProject, ProjectFolder, IProjectRunnerOptions, \n Events as CoreEvents, IProjectExecutionLog, \n IApplication, HttpProjectKind, \n IHttpProjectProxyInit,\n ProjectExecutionKind,\n IProjectExecution,\n IProjectExecutionListOptions,\n ContextStateUpdateEvent,\n ContextStateDeleteEvent,\n} from '@api-client/core/build/browser.js';\nimport ApiElement from '../ApiElement.js';\nimport CheckboxElement from '../../ui/input/CheckboxElement.js';\nimport Input from '../../ui/input/Input.js';\nimport { Events } from '../../events/Events.js';\nimport '@github/relative-time-element';\nimport '../../define/http-project/project-run-report.js';\nimport '../../define/ui/ui-checkbox.js';\nimport '../../define/ui/ui-text-field.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-progress.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport { EventTypes } from '../../events/EventTypes.js';\n\n/**\n * @fires change - When the configuration of the runner change.\n */\nexport default class ProjectRunner extends ApiElement {\n /**\n * The instance of the current project.\n */\n @property({ type: Object }) project?: HttpProject;\n\n /**\n * This property is required for the API access to work.\n * Set it to the current application information.\n */\n @property({ type: Object }) appInfo?: IApplication;\n\n /**\n * The key of the folder to render the runner for.\n * When not set, it renders the runner for the project.\n * @attribute\n */\n @property({ type: String, reflect: true }) folder?: string;\n\n /**\n * The object we operate on.\n */\n @state() protected root?: HttpProject | ProjectFolder;\n\n /**\n * Whether the element is currently running the project execution.\n */\n @state() protected running?: boolean;\n\n /**\n * Whether the element is currently querying for the history data.\n */\n @state() protected querying?: boolean;\n\n /**\n * The page cursor for pagination.\n */\n protected pageCursor?: string;\n\n /**\n * The run configuration.\n */\n @property({ type: Object }) config?: IProjectRunnerOptions;\n\n @state() protected lastError?: string;\n\n protected history: IProjectExecution[] = [];\n\n protected queryPageDebouncer?: number;\n\n debounceTimeout = 100;\n\n /**\n * The key of the currently rendered report.\n */\n protected selectedReport?: string;\n\n /**\n * The currently rendered report.\n */\n @state() renderedReport?: IProjectExecution;\n\n constructor() {\n super();\n\n this.handleProjectRunCreated = this.handleProjectRunCreated.bind(this);\n this.handleProjectRunDeleted = this.handleProjectRunDeleted.bind(this);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener(EventTypes.Store.ProjectRuns.State.create, this.handleProjectRunCreated as EventListenerOrEventListenerObject);\n window.addEventListener(EventTypes.Store.ProjectRuns.State.delete, this.handleProjectRunDeleted as EventListenerOrEventListenerObject);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener(EventTypes.Store.ProjectRuns.State.create, this.handleProjectRunCreated as EventListenerOrEventListenerObject);\n window.removeEventListener(EventTypes.Store.ProjectRuns.State.delete, this.handleProjectRunDeleted as EventListenerOrEventListenerObject);\n }\n\n override willUpdate(cp: PropertyValues<this>): void {\n super.willUpdate(cp);\n if (cp.has('project') || cp.has('folder')) {\n this.setupRoot();\n }\n }\n\n protected setupRoot(): void {\n const { project, folder } = this;\n if (!project) {\n this.root = undefined;\n return;\n }\n if (!folder) {\n this.root = project;\n } else {\n this.root = project.findFolder(folder);\n }\n this.resetHistory();\n this.queryPageDebounce();\n }\n\n protected handleProjectRunCreated(e: ContextStateUpdateEvent<IProjectExecution>): void {\n const { parent } = e.detail;\n const item = e.detail.item as IProjectExecution;\n const { folder } = this;\n // parent is either folder (if the log has a folder) or the project.\n if (folder) {\n if (parent !== folder || !item.parent || item.parent !== folder) {\n return;\n }\n } else if (parent !== this.project?.key) {\n return;\n }\n this.history.push(item);\n this.history.sort(this.historySort);\n this.selectHistory(item.key);\n }\n\n protected handleProjectRunDeleted(e: ContextStateDeleteEvent): void {\n const { history } = this;\n const { key } = e.detail;\n const index = history.findIndex(i => i.key === key);\n if (index < 0) {\n return;\n }\n history.splice(index, 1);\n this.requestUpdate();\n if (this.selectedReport === key) {\n this.selectedReport = undefined;\n const [first] = history;\n if (first) {\n this.selectHistory(first.key);\n }\n }\n }\n\n protected handleRun(): void {\n this.execute();\n }\n\n /**\n * Executes the current configuration.\n */\n async execute(): Promise<void> {\n this.lastError = undefined;\n const { config = {}, folder, project } = this;\n if (!project) {\n return;\n }\n if (folder) {\n config.parent = folder;\n }\n const init: IHttpProjectProxyInit = {\n kind: HttpProjectKind,\n project: project.toJSON(),\n options: config,\n };\n \n this.running = true;\n try {\n const result = await CoreEvents.Transport.Core.httpProject(init, this);\n if (!result) {\n this.lastError = 'The project execution event was not handled.';\n } else {\n this.createHistory(result.result);\n }\n } catch (e) {\n this.lastError = (e as Error).message;\n }\n this.running = false;\n }\n\n protected async createHistory(result: IProjectExecutionLog): Promise<void> {\n const { appInfo, project } = this;\n if (!appInfo) {\n throw new Error(`The appInfo is not set on ${this.localName}`);\n }\n if (!project) {\n return;\n }\n await Events.Store.ProjectRuns.add({\n ...result,\n app: appInfo.code,\n project: project.key,\n key: '',\n kind: ProjectExecutionKind,\n midnight: 0,\n parent: this.folder,\n });\n }\n\n resetHistory(): void {\n this.querying = false;\n this.pageCursor = undefined;\n this.history = [];\n if (this.queryPageDebouncer) {\n clearTimeout(this.queryPageDebouncer);\n this.queryPageDebouncer = undefined;\n }\n }\n\n queryPageDebounce(): void {\n if (this.queryPageDebouncer) {\n return;\n }\n this.queryPageDebouncer = setTimeout(() => { \n this.queryPageDebouncer = undefined;\n this.queryPage();\n }, this.debounceTimeout) as unknown as number;\n }\n\n async queryPage(): Promise<void> {\n const { project, appInfo, folder, pageCursor } = this;\n if (this.querying || !project) {\n return;\n }\n this.querying = true;\n const opts: IProjectExecutionListOptions = {\n space: '',\n project: project.key,\n };\n if (appInfo) {\n opts.app = appInfo.code;\n }\n if (folder) {\n opts.parent = folder;\n }\n if (pageCursor) {\n opts.cursor = pageCursor;\n }\n try {\n const result = await Events.Store.ProjectRuns.list(opts, this);\n if (!result) {\n throw new Error(`Project runs query not handled by the store.`);\n }\n const { items, cursor } = result;\n if (items.length) {\n if (cursor) {\n this.pageCursor = cursor;\n }\n this.history = this.history.concat(items);\n this.history.sort(this.historySort);\n if (!this.selectedReport) {\n const [last] = this.history;\n this.selectHistory(last.key);\n }\n this.requestUpdate();\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n } finally {\n this.querying = false;\n }\n }\n\n protected historySort(a: IProjectExecution, b: IProjectExecution): number {\n return b.ended - a.ended;\n }\n\n setRecursive(value: boolean): void {\n const { config = {} } = this;\n config.recursive = value;\n this.config = config;\n this.notifyChange();\n }\n\n setParallel(value: boolean): void {\n const { config = {} } = this;\n config.parallel = value;\n this.config = config;\n this.notifyChange();\n }\n\n setIterations(value: number): void {\n const { config = {} } = this;\n config.iterations = value;\n this.config = config;\n this.notifyChange();\n }\n\n setIterationDelay(value: number): void {\n const { config = {} } = this;\n config.iterationDelay = value;\n this.config = config;\n this.notifyChange();\n }\n\n notifyChange(): void {\n this.dispatchEvent(new Event('change'));\n }\n\n protected handleRecursiveChecked(e: Event): void {\n const input = e.target as CheckboxElement;\n this.setRecursive(input.checked);\n }\n\n protected handleParallelChecked(e: Event): void {\n const input = e.target as CheckboxElement;\n this.setParallel(input.checked);\n }\n\n protected handleIterationsChange(e: Event): void {\n const input = e.target as Input;\n this.setIterations(input.valueAsNumber)\n input.checkValidity();\n }\n\n protected handleIterationDelayChange(e: Event): void {\n const input = e.target as Input;\n this.setIterationDelay(input.valueAsNumber)\n input.checkValidity();\n }\n\n protected handleHistorySelection(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { key } = element.dataset;\n if (!key) {\n return;\n }\n this.selectHistory(key);\n }\n\n selectHistory(key: string): void {\n this.selectedReport = key;\n const { history } = this;\n const report = history.find(i => i.key === key);\n if (report) {\n this.renderedReport = report;\n } else {\n this.renderedReport = undefined;\n }\n }\n\n protected override render(): TemplateResult {\n const { root } = this;\n if (!root) {\n return html``;\n }\n return html`\n <section id=\"config\">\n <div class=\"header title-large section-title\">Project runner for ${root.info.renderLabel}</div>\n <form name=\"run-config\" class=\"run-config surface1\">\n <div class=\"section-title title-medium\">Run configuration</div>\n ${this.renderRecursiveOption()}\n ${this.renderParallelOption()}\n ${this.renderIterationOption()}\n ${this.renderIterationDelayOption()}\n ${this.renderSubmit()}\n </form>\n ${this.renderError()}\n ${this.renderLoader()}\n ${this.renderReport()}\n </section>\n `;\n }\n\n protected renderRecursiveOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.recursive === 'boolean' ? config.recursive : false;\n return html`\n <div class=\"form-row\">\n <ui-checkbox \n id=\"recursive\"\n .checked=\"${value}\"\n name=\"recursive\" \n aria-labelledby=\"recursiveLabel\"\n aria-describedby=\"recursiveDescription\" \n @change=\"${this.handleRecursiveChecked}\"\n ></ui-checkbox>\n <label class=\"label-large\" for=\"recursive\" id=\"recursiveLabel\">\n Recursive\n </label>\n <p class=\"body-medium\" id=\"recursiveDescription\">\n Runs all requests from the current folder and its sub-folders\n </p>\n </div>\n `;\n }\n\n protected renderParallelOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.parallel === 'boolean' ? config.parallel : false;\n return html`\n <div class=\"form-row\">\n <ui-checkbox\n id=\"parallel\"\n .checked=\"${value}\"\n name=\"parallel\" \n aria-labelledby=\"parallelLabel\"\n aria-describedby=\"parallelDescription\" \n @change=\"${this.handleParallelChecked}\"\n ></ui-checkbox>\n <label class=\"label-large\" for=\"parallel\" id=\"parallelLabel\">\n Parallel\n </label>\n <p class=\"body-medium\" id=\"parallelDescription\">\n Runs each iteration in parallel. The number of actual execution depends on the number of cores on your device. \n This is ignored when number of iterations is 1.\n </p>\n </div>\n `;\n }\n\n protected renderIterationOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.iterations === 'number' ? config.iterations : 1;\n return html`\n <div class=\"form-row\">\n <ui-text-field\n required \n label=\"Iterations\"\n aria-describedby=\"iterationsDescription\" \n name=\"iterations\" \n type=\"number\" \n min=\"1\" \n step=\"1\" \n .value=\"${String(value)}\"\n @change=\"${this.handleIterationsChange}\"\n ></ui-text-field>\n <p class=\"body-medium\" id=\"iterationsDescription\">\n The number of times the execution should be repeated.\n </p>\n </div>\n `;\n }\n\n protected renderIterationDelayOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.iterationDelay === 'number' ? config.iterationDelay : 0;\n return html`\n <div class=\"form-row\">\n <ui-text-field\n required\n label=\"Iteration delay\"\n aria-describedby=\"iterationDelayDescription\"\n name=\"iterationDelay\"\n type=\"number\"\n min=\"0\"\n step=\"1\"\n .value=\"${String(value)}\"\n @change=\"${this.handleIterationDelayChange}\"\n ></ui-text-field>\n <p class=\"body-medium\" id=\"iterationDelayDescription\">\n The number of milliseconds to wait between each iteration.\n </p>\n </div>\n `;\n }\n\n protected renderSubmit(): TemplateResult {\n return html`\n <div class=\"submit-row\">\n <ui-button type=\"filled\" @click=\"${this.handleRun}\" ?disabled=\"${this.running}\">Run</ui-button>\n </div>\n `;\n }\n\n protected renderLoader(): TemplateResult | string {\n if (!this.running) {\n return '';\n }\n return html`\n <ui-progress indeterminate></ui-progress>\n `;\n }\n\n protected renderError(): TemplateResult | string {\n const { lastError } = this;\n if (!lastError) {\n return '';\n }\n return html`<div class=\"error on-error-text body-large last-error\">${lastError}</div>`;\n }\n\n protected renderReport(): TemplateResult | typeof nothing {\n const { renderedReport, history } = this;\n if (!history.length) {\n return nothing;\n }\n return html`\n <section aria-label=\"Latest report\" class=\"report surface1\">\n <div class=\"section-title title-medium\">Run reports</div>\n ${this.renderHistorySelector()}\n <project-run-report .report=\"${renderedReport}\"></project-run-report>\n </section>\n `;\n }\n\n protected renderHistorySelector(): TemplateResult {\n const { history } = this;\n const disabled = !history.length;\n const selected = history.find(i => i.key === this.selectedReport);\n return html`\n <div class=\"history-selector\">\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"history-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleHistorySelection}\"\n >\n <ui-button type=\"tonal\" ?disabled=\"${disabled}\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n ${selected ? html`<relative-time datetime=\"${new Date(selected.ended).toISOString()}\"></relative-time>` : 'History'}\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"History list\">\n ${history.map(current => this.renderHistoryOption(current))}\n </ui-list>\n </ui-dropdown-list>\n </div>\n `;\n }\n\n renderHistoryOption(item: IProjectExecution): TemplateResult {\n const { ended, key } = item;\n const classes = {\n 'history-option': true,\n highlight: this.selectedReport === key,\n };\n const de = new Date(ended);\n return html`\n <ui-list-item role=\"menuitem\" data-key=\"${key}\" class=\"${classMap(classes)}\">\n <relative-time datetime=\"${de.toISOString()}\"></relative-time>\n </ui-list-item>\n `;\n }\n}\n"]}