FrameGroup.vue 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <li
  3. v-if="!frameGroup.expanded && frameGroup.type === 'vendor'"
  4. class="stack-frame-group stack-frame-group-vendor"
  5. @click="$emit('expand')"
  6. >
  7. <div class="stack-frame | cursor-pointer">
  8. <button class="stack-frame-number">
  9. <Icon name="plus" class="align-middle text-gray-500" />
  10. </button>
  11. <div class="span-2 stack-frame-text">
  12. <button class="text-left text-gray-500">
  13. {{
  14. frameGroup.frames.length > 1
  15. ? `${frameGroup.frames.length} vendor frames…`
  16. : '1 vendor frame…'
  17. }}
  18. </button>
  19. </div>
  20. </div>
  21. </li>
  22. <li
  23. v-else-if="frameGroup.type === 'unknown'"
  24. class="stack-frame-group stack-frame-group-unknown"
  25. >
  26. <div class="stack-frame">
  27. <button class="stack-frame-number"></button>
  28. <div class="span-2 stack-frame-text">
  29. <span class="text-left text-gray-500">
  30. {{
  31. frameGroup.frames.length > 1
  32. ? `${frameGroup.frames.length} unknown frames`
  33. : '1 unknown frame'
  34. }}
  35. </span>
  36. </div>
  37. </div>
  38. </li>
  39. <li v-else>
  40. <ul
  41. class="stack-frame-group"
  42. :class="frameGroup.type === 'vendor' ? 'stack-frame-group-vendor' : ''"
  43. >
  44. <li
  45. v-for="(frame, i) in frameGroup.frames"
  46. :key="i"
  47. class="stack-frame | cursor-pointer"
  48. :class="frame.selected ? 'stack-frame-selected' : ''"
  49. @click="$emit('select', frame.frame_number)"
  50. >
  51. <div class="stack-frame-number">{{ frame.frame_number }}</div>
  52. <div class="stack-frame-text">
  53. <header
  54. v-if="i === 0"
  55. class="stack-frame-header"
  56. :class="frame.class ? 'mb-1' : ''"
  57. >
  58. <FilePath
  59. :pathClass="
  60. frameGroup.type === 'vendor' ? 'text-gray-800' : 'text-purple-800'
  61. "
  62. class="stack-frame-path"
  63. :file="frame.relative_file"
  64. />
  65. </header>
  66. <span v-if="frame.class" class="stack-frame-exception-class">
  67. <ExceptionClass class="stack-frame-exception-class" :name="frame.class" />
  68. </span>
  69. </div>
  70. <div class="stack-frame-line">
  71. <LineNumber :lineNumber="frame.line_number" />
  72. </div>
  73. </li>
  74. </ul>
  75. </li>
  76. </template>
  77. <script>
  78. import ExceptionClass from '../Shared/ExceptionClass.vue';
  79. import FilePath from '../Shared/FilePath.vue';
  80. import LineNumber from '../Shared/LineNumber.vue';
  81. export default {
  82. props: {
  83. frameGroup: { required: true },
  84. },
  85. components: {
  86. ExceptionClass,
  87. FilePath,
  88. LineNumber,
  89. },
  90. };
  91. </script>