EditRegexVariable.vue 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <div>
  3. <ui-textarea
  4. :model-value="data.description"
  5. :placeholder="t('common.description')"
  6. class="w-full"
  7. @change="updateData({ description: $event })"
  8. />
  9. <ui-input
  10. :model-value="data.variableName"
  11. :label="t('workflow.variables.name')"
  12. :title="t('workflow.variables.name')"
  13. class="mt-2 w-full"
  14. @change="updateData({ variableName: $event })"
  15. />
  16. <div class="flex items-end mt-2">
  17. <div class="flex-1 mr-2">
  18. <label
  19. class="ml-1 block text-gray-600 dark:text-gray-200 text-sm"
  20. for="var-expression"
  21. >
  22. RegEx
  23. </label>
  24. <div
  25. class="flex items-center bg-input transition-colors px-4 rounded-lg"
  26. >
  27. <span>/</span>
  28. <input
  29. id="var-expression"
  30. :value="data.expression"
  31. placeholder="Expression"
  32. class="py-2 w-11/12 bg-transparent focus:ring-0 px-1"
  33. @input="updateData({ expression: $event.target.value })"
  34. />
  35. <span class="text-right">/</span>
  36. </div>
  37. </div>
  38. <ui-popover>
  39. <template #trigger>
  40. <button class="p-2 rounded-lg bg-input" title="Flags">
  41. {{ data.flag.length === 0 ? 'flags' : data.flag.join('') }}
  42. </button>
  43. </template>
  44. <p>Flags</p>
  45. <ul class="mt-2 space-y-1">
  46. <li v-for="flag in flags" :key="flag.id">
  47. <ui-checkbox
  48. :model-value="data.flag.includes(flag.id)"
  49. @change="updateFlag($event, flag.id)"
  50. >
  51. {{ flag.name }}
  52. </ui-checkbox>
  53. </li>
  54. </ul>
  55. </ui-popover>
  56. </div>
  57. </div>
  58. </template>
  59. <script setup>
  60. import { useI18n } from 'vue-i18n';
  61. const props = defineProps({
  62. data: {
  63. type: Object,
  64. default: () => ({}),
  65. },
  66. });
  67. const emit = defineEmits(['update:data']);
  68. const { t } = useI18n();
  69. const flags = [
  70. { id: 'g', name: 'global' },
  71. { id: 'i', name: 'ignore case' },
  72. { id: 'm', name: 'multiline' },
  73. ];
  74. function updateData(value) {
  75. emit('update:data', { ...props.data, ...value });
  76. }
  77. function updateFlag(include, flag) {
  78. const copyFlag = [...props.data.flag];
  79. if (include) {
  80. copyFlag.push(flag);
  81. } else {
  82. const index = copyFlag.indexOf(flag);
  83. copyFlag.splice(index, 1);
  84. }
  85. updateData({ flag: copyFlag });
  86. }
  87. </script>
  88. <style>
  89. .log-data .block-variable {
  90. margin-top: 4px;
  91. }
  92. </style>