SharedWorkflowState.vue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <template>
  2. <ui-card>
  3. <div class="mb-4 flex items-center">
  4. <div class="text-overflow mr-4 flex-1">
  5. <p class="text-overflow mr-2 w-full">{{ data.state.name }}</p>
  6. <p
  7. class="text-overflow mr-2 w-full leading-tight text-gray-600 dark:text-gray-200"
  8. :title="`Started at: ${formatDate(
  9. data.state.startedTimestamp,
  10. 'DD MMM, hh:mm A'
  11. )}`"
  12. >
  13. {{ formatDate(data.state.startedTimestamp, 'relative') }}
  14. </p>
  15. </div>
  16. <ui-button
  17. v-if="data.state.tabId"
  18. icon
  19. class="mr-2"
  20. title="Open tab"
  21. @click="openTab"
  22. >
  23. <v-remixicon name="riExternalLinkLine" />
  24. </ui-button>
  25. <ui-button variant="accent" @click="stopWorkflow">
  26. <v-remixicon name="riStopLine" class="mr-2 -ml-1" />
  27. <span>{{ t('common.stop') }}</span>
  28. </ui-button>
  29. </div>
  30. <div class="bg-box-transparent divide-y rounded-lg px-4">
  31. <div
  32. v-for="block in data.state.currentBlock"
  33. :key="block.id || block.name"
  34. class="flex items-center py-2"
  35. >
  36. <v-remixicon :name="blocks[block.name].icon" />
  37. <p class="text-overflow ml-2 mr-4 flex-1">
  38. {{ blocks[block.name].name }}
  39. </p>
  40. <ui-spinner color="text-accent" size="20" />
  41. </div>
  42. </div>
  43. <div
  44. v-if="data.parentState"
  45. class="mt-2 rounded-lg bg-yellow-200 py-2 px-4 text-sm"
  46. >
  47. {{ t('workflow.state.executeBy', { name: data.parentState.name }) }}
  48. <span class="lowercase">
  49. {{
  50. data.parentState.isCollection
  51. ? t('common.collection')
  52. : t('common.workflow')
  53. }}
  54. </span>
  55. </div>
  56. </ui-card>
  57. </template>
  58. <script setup>
  59. import browser from 'webextension-polyfill';
  60. import { useI18n } from 'vue-i18n';
  61. import { getBlocks } from '@/utils/getSharedData';
  62. import RendererWorkflowService from '@/service/renderer/RendererWorkflowService';
  63. import dayjs from '@/lib/dayjs';
  64. const props = defineProps({
  65. data: {
  66. type: Object,
  67. default: () => ({}),
  68. },
  69. });
  70. const blocks = getBlocks();
  71. const { t } = useI18n();
  72. function formatDate(date, format) {
  73. if (format === 'relative') return dayjs(date).fromNow();
  74. return dayjs(date).format(format);
  75. }
  76. function openTab() {
  77. browser.tabs.update(props.data.state.tabId, { active: true });
  78. }
  79. function stopWorkflow() {
  80. RendererWorkflowService.stopWorkflowExecution(props.data.id);
  81. }
  82. </script>