ShareForm.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <template>
  2. <div>
  3. <div class="grid cols-2 justify-start gapx-6 gapy-2">
  4. <CheckboxField
  5. :key="tab.name"
  6. v-for="tab in tabs"
  7. :label="tab.label"
  8. :name="tab.name"
  9. v-model="tab.checked"
  10. @change="tab.checked = !tab.checked"
  11. class="text-gray-200 hover:text-white"
  12. />
  13. </div>
  14. <div class="mt-4">
  15. <div class="mb-3" v-if="error">
  16. We were unable to share your error.<br />
  17. Please try again later.
  18. </div>
  19. <button
  20. class="button-secondary button-sm text-white bg-tint-600"
  21. :disabled="isLoading"
  22. @click="shareError"
  23. >
  24. {{ isLoading ? 'Sharing…' : 'Share' }}
  25. </button>
  26. </div>
  27. </div>
  28. </template>
  29. <script>
  30. import CheckboxField from './CheckboxField';
  31. export default {
  32. components: { CheckboxField },
  33. props: ['error', 'isLoading'],
  34. computed: {
  35. selectedTabs() {
  36. return this.tabs.filter(tab => tab.checked).map(tab => tab.name);
  37. },
  38. },
  39. data() {
  40. return {
  41. tabs: [
  42. { label: 'Stack trace', name: 'stackTraceTab', checked: true },
  43. { label: 'Request', name: 'requestTab', checked: true },
  44. { label: 'App', name: 'appTab', checked: true },
  45. { label: 'User', name: 'userTab', checked: true },
  46. { label: 'Context', name: 'contextTab', checked: true },
  47. { label: 'Debug', name: 'debugTab', checked: true },
  48. ],
  49. };
  50. },
  51. methods: {
  52. shareError() {
  53. if (!this.isLoading) {
  54. this.$emit('share', this.selectedTabs);
  55. }
  56. },
  57. },
  58. };
  59. </script>