StackTab.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <template>
  2. <Stack
  3. :frames="report.stacktrace"
  4. :selected-frame-number="selectedFrameNumber"
  5. @frameclick="selectedFrameNumber = $event"
  6. />
  7. </template>
  8. <script>
  9. import Stack from '../Stack/Stack.vue';
  10. import findKey from 'lodash/findKey';
  11. export default {
  12. inject: ['report'],
  13. props: {
  14. file: { required: false },
  15. lineNumber: { required: false },
  16. },
  17. data() {
  18. return {
  19. selectedFrameNumber: this.report.stacktrace.length,
  20. };
  21. },
  22. components: {
  23. Stack,
  24. },
  25. provide() {
  26. return {
  27. setSelectedFrameNumber: frameNumber => (this.selectedFrameNumber = frameNumber),
  28. };
  29. },
  30. created() {
  31. this.selectFrame();
  32. },
  33. computed: {
  34. selectedFrame() {
  35. return this.report.stacktrace[this.report.stacktrace.length - this.selectedFrameNumber];
  36. },
  37. },
  38. methods: {
  39. selectFrame() {
  40. if (this.file) {
  41. const frameKey = findKey(this.report.stacktrace, f => f.file === this.file);
  42. this.selectedFrameNumber =
  43. this.report.stacktrace.length - frameKey || this.selectedFrameNumber;
  44. }
  45. },
  46. },
  47. };
  48. </script>