ResponseBodyRenderer.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <template>
  2. <SmartTabs
  3. v-if="response"
  4. v-model="selectedLensTab"
  5. styles="sticky z-10 bg-primary top-lowerPrimaryStickyFold"
  6. render-inactive-tabs
  7. >
  8. <SmartTab
  9. v-for="(lens, index) in validLenses"
  10. :id="lens.renderer"
  11. :key="`lens-${index}`"
  12. :label="$t(lens.lensName)"
  13. class="flex flex-col flex-1 w-full h-full"
  14. >
  15. <component :is="lens.renderer" :response="response" />
  16. </SmartTab>
  17. <SmartTab
  18. v-if="headerLength"
  19. id="headers"
  20. :label="$t('response.headers')"
  21. :info="`${headerLength}`"
  22. class="flex flex-col flex-1"
  23. >
  24. <LensesHeadersRenderer :headers="response.headers" />
  25. </SmartTab>
  26. <SmartTab
  27. id="results"
  28. :label="$t('test.results')"
  29. :indicator="
  30. testResults &&
  31. (testResults.expectResults.length ||
  32. testResults.tests.length ||
  33. testResults.envDiff.selected.additions.length ||
  34. testResults.envDiff.selected.updations.length ||
  35. testResults.envDiff.global.updations.length)
  36. ? true
  37. : false
  38. "
  39. class="flex flex-col flex-1"
  40. >
  41. <HttpTestResult />
  42. </SmartTab>
  43. </SmartTabs>
  44. </template>
  45. <script>
  46. import { defineComponent } from "@nuxtjs/composition-api"
  47. import { getSuitableLenses, getLensRenderers } from "~/helpers/lenses/lenses"
  48. import { useReadonlyStream } from "~/helpers/utils/composables"
  49. import { restTestResults$ } from "~/newstore/RESTSession"
  50. export default defineComponent({
  51. components: {
  52. // Lens Renderers
  53. ...getLensRenderers(),
  54. },
  55. props: {
  56. response: { type: Object, default: () => {} },
  57. },
  58. setup() {
  59. const testResults = useReadonlyStream(restTestResults$, null)
  60. return {
  61. testResults,
  62. }
  63. },
  64. data() {
  65. return {
  66. selectedLensTab: "",
  67. }
  68. },
  69. computed: {
  70. headerLength() {
  71. if (!this.response || !this.response.headers) return 0
  72. return Object.keys(this.response.headers).length
  73. },
  74. validLenses() {
  75. if (!this.response) return []
  76. return getSuitableLenses(this.response)
  77. },
  78. },
  79. watch: {
  80. validLenses: {
  81. handler(newValue) {
  82. if (newValue.length === 0) return
  83. this.selectedLensTab = newValue[0].renderer
  84. },
  85. immediate: true,
  86. },
  87. },
  88. })
  89. </script>