|
@@ -1,8 +1,14 @@
|
|
|
<template>
|
|
|
<div class="mb-2 mt-4">
|
|
|
+ <ui-textarea
|
|
|
+ :model-value="data.description"
|
|
|
+ placeholder="Description"
|
|
|
+ class="w-full mb-2"
|
|
|
+ @change="updateData({ description: $event })"
|
|
|
+ />
|
|
|
<ui-input
|
|
|
:model-value="data.url"
|
|
|
- class="mb-3 w-full"
|
|
|
+ class="mb-2 w-full"
|
|
|
placeholder="https://example.com/postreceive"
|
|
|
required
|
|
|
title="The Post receive URL"
|
|
@@ -12,7 +18,7 @@
|
|
|
<ui-select
|
|
|
:model-value="data.contentType"
|
|
|
placeholder="Select a content type"
|
|
|
- class="mb-3 w-full"
|
|
|
+ class="mb-2 w-full"
|
|
|
@change="updateData({ contentType: $event })"
|
|
|
>
|
|
|
<option
|
|
@@ -25,60 +31,57 @@
|
|
|
</ui-select>
|
|
|
<ui-input
|
|
|
:model-value="data.timeout"
|
|
|
- class="mb-3 w-full"
|
|
|
+ class="mb-2 w-full"
|
|
|
placeholder="Timeout"
|
|
|
title="Http request execution timeout(ms)"
|
|
|
type="number"
|
|
|
@change="updateData({ timeout: +$event })"
|
|
|
/>
|
|
|
- <button
|
|
|
- class="mb-2 block w-full text-left focus:ring-0"
|
|
|
- @click="showOptionsRef = !showOptionsRef"
|
|
|
- >
|
|
|
- <v-remixicon
|
|
|
- name="riArrowLeftSLine"
|
|
|
- class="mr-1 transition-transform align-middle inline-block -ml-1"
|
|
|
- :rotate="showOptionsRef ? 270 : 180"
|
|
|
- />
|
|
|
- <span class="align-middle">Options Headers</span>
|
|
|
- </button>
|
|
|
- <transition-expand>
|
|
|
- <div v-if="showOptionsRef" class="my-2 border-2 border-dashed p-2">
|
|
|
- <div class="grid grid-cols-7 justify-items-center gap-2">
|
|
|
- <span class="col-span-3 font-bold">KEY</span>
|
|
|
- <span class="col-span-3 font-bold">VALUE</span>
|
|
|
- <div class=""></div>
|
|
|
- <template v-for="(items, index) in headerRef" :key="index">
|
|
|
- <ui-input v-model="items.name" type="text" class="col-span-3" />
|
|
|
- <ui-input v-model="items.value" type="text" class="col-span-3" />
|
|
|
- <button class="focus:ring-0" @click="removeHeader(index)">
|
|
|
- <v-remixicon name="riCloseCircleLine" size="20" />
|
|
|
- </button>
|
|
|
- </template>
|
|
|
- <button
|
|
|
- class="col-span-7 mt-2 block w-full text-center focus:ring-0"
|
|
|
- @click="addHeader"
|
|
|
- >
|
|
|
- <span
|
|
|
- ><v-remixicon
|
|
|
- class="align-middle inline-block"
|
|
|
- name="riAddLine"
|
|
|
- size="20"
|
|
|
- /></span>
|
|
|
- <span class="align-middle">Add Header</span>
|
|
|
+ <ui-tabs v-model="activeTab" fill class="mb-4">
|
|
|
+ <ui-tab value="headers">Headers</ui-tab>
|
|
|
+ <ui-tab value="body">Content body</ui-tab>
|
|
|
+ </ui-tabs>
|
|
|
+ <ui-tab-panels :model-value="activeTab">
|
|
|
+ <ui-tab-panel
|
|
|
+ value="headers"
|
|
|
+ class="grid grid-cols-7 justify-items-center gap-2"
|
|
|
+ >
|
|
|
+ <template v-for="(items, index) in headerRef" :key="index">
|
|
|
+ <ui-input
|
|
|
+ v-model="items.name"
|
|
|
+ :placeholder="`Header ${index + 1}`"
|
|
|
+ type="text"
|
|
|
+ class="col-span-3"
|
|
|
+ />
|
|
|
+ <ui-input
|
|
|
+ v-model="items.value"
|
|
|
+ placeholder="Value"
|
|
|
+ type="text"
|
|
|
+ class="col-span-3"
|
|
|
+ />
|
|
|
+ <button @click="removeHeader(index)">
|
|
|
+ <v-remixicon name="riCloseCircleLine" size="20" />
|
|
|
</button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </transition-expand>
|
|
|
-
|
|
|
- <prism-editor
|
|
|
- v-if="!showContentModalRef"
|
|
|
- :highlight="highlighter('json')"
|
|
|
- :model-value="data.content"
|
|
|
- class="p-4 max-h-80 mb-3"
|
|
|
- readonly
|
|
|
- @click="showContentModalRef = true"
|
|
|
- />
|
|
|
+ </template>
|
|
|
+ <ui-button
|
|
|
+ class="col-span-4 mt-4 block w-full"
|
|
|
+ variant="accent"
|
|
|
+ @click="addHeader"
|
|
|
+ >
|
|
|
+ <span> Add Header </span>
|
|
|
+ </ui-button>
|
|
|
+ </ui-tab-panel>
|
|
|
+ <ui-tab-panel value="body">
|
|
|
+ <prism-editor
|
|
|
+ v-if="!showContentModalRef"
|
|
|
+ :highlight="highlighter('json')"
|
|
|
+ :model-value="data.body"
|
|
|
+ class="p-4 max-h-80 mb-2"
|
|
|
+ readonly
|
|
|
+ @click="showContentModalRef = true"
|
|
|
+ />
|
|
|
+ </ui-tab-panel>
|
|
|
+ </ui-tab-panels>
|
|
|
<ui-modal
|
|
|
v-model="showContentModalRef"
|
|
|
content-class="max-w-3xl"
|
|
@@ -92,36 +95,20 @@
|
|
|
style="height: calc(100vh - 18rem)"
|
|
|
/>
|
|
|
<div class="mt-3">
|
|
|
- <ul class="list-disc pl-5">
|
|
|
- <li>
|
|
|
- You can using <code>{%var[.index]%}</code> to dynamically calcute,
|
|
|
- driven by
|
|
|
- <a
|
|
|
- href="https://github.com/janl/mustache.js"
|
|
|
- class="border-b-2 border-red-300"
|
|
|
- target="_blank"
|
|
|
- >mustaches</a
|
|
|
- >
|
|
|
- </li>
|
|
|
- <li>
|
|
|
- Supported variables:
|
|
|
- <ul class="list-disc space-y-2 mt-2 text-sm pl-5">
|
|
|
- <li>column: Array[string]</li>
|
|
|
- <template
|
|
|
- v-for="column in workflow.data.value.dataColumns"
|
|
|
- :key="column.name"
|
|
|
- >
|
|
|
- <li>{{ column.name }}: Array[{{ column.type }}]</li>
|
|
|
- </template>
|
|
|
- </ul>
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
+ <a
|
|
|
+ href="https://github.com/Kholid060/automa/wiki/Features#reference-data"
|
|
|
+ rel="noopener"
|
|
|
+ class="border-b text-primary"
|
|
|
+ target="_blank"
|
|
|
+ >
|
|
|
+ Click here to learn how to add dynamic data
|
|
|
+ </a>
|
|
|
</div>
|
|
|
</ui-modal>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script setup>
|
|
|
-import { inject, ref, watch } from 'vue';
|
|
|
+import { ref, watch } from 'vue';
|
|
|
import { PrismEditor } from 'vue-prism-editor';
|
|
|
import { highlighter } from '@/lib/prism';
|
|
|
import { contentTypes } from '@/utils/shared';
|
|
@@ -132,11 +119,10 @@ const props = defineProps({
|
|
|
default: () => ({}),
|
|
|
},
|
|
|
});
|
|
|
-const workflow = inject('workflow');
|
|
|
const emit = defineEmits(['update:data']);
|
|
|
|
|
|
-const showOptionsRef = ref(false);
|
|
|
-const contentRef = ref(props.data.content);
|
|
|
+const activeTab = ref('headers');
|
|
|
+const contentRef = ref(props.data.body);
|
|
|
const headerRef = ref(props.data.headers);
|
|
|
const showContentModalRef = ref(false);
|
|
|
|
|
@@ -145,7 +131,7 @@ function updateData(value) {
|
|
|
}
|
|
|
|
|
|
watch(contentRef, (value) => {
|
|
|
- updateData({ content: value });
|
|
|
+ updateData({ body: value });
|
|
|
});
|
|
|
|
|
|
function removeHeader(index) {
|