EditGetText.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <template>
  2. <edit-interaction-base v-bind="{ data }" @change="updateData">
  3. <div class="flex rounded-lg bg-input px-4 items-center transition mt-2">
  4. <span>/</span>
  5. <input
  6. :value="data.regex"
  7. placeholder="Regex"
  8. class="w-11/12 bg-transparent p-2 focus:ring-0"
  9. @change="updateData({ regex: $event.target.value })"
  10. />
  11. <ui-popover>
  12. <template #trigger>
  13. <button>/{{ regexExp.join('') }}</button>
  14. </template>
  15. <p class="mb-2 text-gray-600 dark:text-gray-200">Expression flags</p>
  16. <div class="space-y-1">
  17. <div v-for="item in exps" :key="item.id">
  18. <ui-checkbox
  19. :model-value="regexExp.includes(item.id)"
  20. @change="handleExpCheckbox(item.id, $event)"
  21. >
  22. {{ item.name }}
  23. </ui-checkbox>
  24. </div>
  25. </div>
  26. </ui-popover>
  27. </div>
  28. <ui-checkbox
  29. :model-value="data.saveData"
  30. class="mt-3"
  31. @change="updateData({ saveData: $event })"
  32. >
  33. {{ t('workflow.blocks.get-text.checkbox') }}
  34. </ui-checkbox>
  35. <div v-if="data.saveData" class="flex items-center mt-1">
  36. <ui-select
  37. :model-value="data.dataColumn"
  38. placeholder="Data column"
  39. class="mr-2 flex-1"
  40. @change="updateData({ dataColumn: $event })"
  41. >
  42. <option
  43. v-for="column in workflow.data.value.dataColumns"
  44. :key="column.name"
  45. :value="column.name"
  46. >
  47. {{ column.name }}
  48. </option>
  49. </ui-select>
  50. <ui-button
  51. icon
  52. title="Data columns"
  53. @click="workflow.showDataColumnsModal(true)"
  54. >
  55. <v-remixicon name="riKey2Line" />
  56. </ui-button>
  57. </div>
  58. <ui-input
  59. :model-value="data.prefixText"
  60. :title="t('workflow.blocks.get-text.prefixText.title')"
  61. :placeholder="t('workflow.blocks.get-text.prefixText.placeholder')"
  62. class="w-full mt-3 mb-2"
  63. @change="updateData({ prefixText: $event })"
  64. />
  65. <ui-input
  66. :model-value="data.suffixText"
  67. :title="t('workflow.blocks.get-text.suffixText.title')"
  68. :placeholder="t('workflow.blocks.get-text.suffixText.placeholder')"
  69. class="w-full"
  70. @change="updateData({ suffixText: $event })"
  71. />
  72. <ui-checkbox
  73. :model-value="data.addExtraRow"
  74. class="mt-3"
  75. @change="updateData({ addExtraRow: $event })"
  76. >
  77. {{ t('workflow.blocks.get-text.extraRow.checkbox') }}
  78. </ui-checkbox>
  79. <ui-input
  80. v-if="data.addExtraRow"
  81. :model-value="data.extraRowValue"
  82. :title="t('workflow.blocks.get-text.extraRow.title')"
  83. :placeholder="t('workflow.blocks.get-text.extraRow.placeholder')"
  84. class="w-full mt-3 mb-2"
  85. @change="updateData({ extraRowValue: $event })"
  86. />
  87. <div v-if="data.addExtraRow" class="flex items-center mt-1">
  88. <ui-select
  89. :model-value="data.extraRowDataColumn"
  90. placeholder="Data column"
  91. class="mr-2 flex-1"
  92. @change="updateData({ extraRowDataColumn: $event })"
  93. >
  94. <option
  95. v-for="column in workflow.data.value.dataColumns"
  96. :key="column.name"
  97. :value="column.name"
  98. >
  99. {{ column.name }}
  100. </option>
  101. </ui-select>
  102. <ui-button
  103. icon
  104. title="Data columns"
  105. @click="workflow.showDataColumnsModal(true)"
  106. >
  107. <v-remixicon name="riKey2Line" />
  108. </ui-button>
  109. </div>
  110. </edit-interaction-base>
  111. </template>
  112. <script setup>
  113. import { inject, ref } from 'vue';
  114. import { useI18n } from 'vue-i18n';
  115. import EditInteractionBase from './EditInteractionBase.vue';
  116. const props = defineProps({
  117. data: {
  118. type: Object,
  119. default: () => ({}),
  120. },
  121. });
  122. const emit = defineEmits(['update:data']);
  123. const { t } = useI18n();
  124. const workflow = inject('workflow');
  125. const regexExp = ref(props.data.regexExp);
  126. const exps = [
  127. { id: 'g', name: 'global' },
  128. { id: 'i', name: 'ignore case' },
  129. { id: 'm', name: 'multiline' },
  130. ];
  131. function updateData(value) {
  132. emit('update:data', { ...props.data, ...value });
  133. }
  134. function handleExpCheckbox(id, value) {
  135. if (value) {
  136. regexExp.value.push(id);
  137. } else {
  138. regexExp.value.splice(regexExp.value.indexOf(id), 1);
  139. }
  140. updateData({ regexExp: regexExp.value });
  141. }
  142. </script>