refactor(components): add data-testid
attribute to some components
This commit is contained in:
parent
bf44122abe
commit
6fd6d7cbb1
@ -11,12 +11,26 @@
|
|||||||
wrapCol?: any;
|
wrapCol?: any;
|
||||||
}>();
|
}>();
|
||||||
let dark = inject<boolean>("dark");
|
let dark = inject<boolean>("dark");
|
||||||
|
const stop = (e, ed) => {
|
||||||
|
console.log(e.type.toUpperCase(), e, ed);
|
||||||
|
e.preventDefault();
|
||||||
|
e.cancel();
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
e.stopPropagation();
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<ClientOnly>
|
<ClientOnly>
|
||||||
<vee-field :name="props.name" v-slot="{ errorMessage, field, value }" :model-value="props.val">
|
<vee-field :name="props.name" v-slot="{ errorMessage, field, value, setValue }" :model-value="props.val">
|
||||||
<a-form-item :validate-status="!!errorMessage ? 'error' : ''" :name="props.name" :label="props.label as any" :help="errorMessage">
|
<a-form-item
|
||||||
|
:data-testid="$attrs['data-testid']"
|
||||||
|
:validate-status="!!errorMessage ? 'error' : ''"
|
||||||
|
:name="props.name"
|
||||||
|
:label="props.label as any"
|
||||||
|
:help="errorMessage"
|
||||||
|
>
|
||||||
<tinymce-editor
|
<tinymce-editor
|
||||||
|
model-events="drag dragdrop dragend draggesture dragover dragstart drop change"
|
||||||
v-bind="field"
|
v-bind="field"
|
||||||
width="100%"
|
width="100%"
|
||||||
@change="
|
@change="
|
||||||
@ -27,6 +41,16 @@
|
|||||||
"
|
"
|
||||||
:initial-value="value"
|
:initial-value="value"
|
||||||
v-model:model-value="field.value"
|
v-model:model-value="field.value"
|
||||||
|
@drag="stop"
|
||||||
|
@deactivate="(e) => console.log(e)"
|
||||||
|
@dragOver="stop"
|
||||||
|
@dragEnter="stop"
|
||||||
|
@dragEnd="stop"
|
||||||
|
@dragDrop="stop"
|
||||||
|
@draggesture="stop"
|
||||||
|
@dragGesture="stop"
|
||||||
|
@dragstart="stop"
|
||||||
|
@drop="stop"
|
||||||
tinymce-script-src="/tinymce/tinymce.min.js"
|
tinymce-script-src="/tinymce/tinymce.min.js"
|
||||||
:init="{
|
:init="{
|
||||||
...props.init,
|
...props.init,
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
:options="state.data"
|
:options="state.data"
|
||||||
v-model:value="value"
|
v-model:value="value"
|
||||||
:allow-clear="true"
|
:allow-clear="true"
|
||||||
|
v-bind="$attrs"
|
||||||
>
|
>
|
||||||
<template v-if="state.fetching" #notFoundContent>
|
<template v-if="state.fetching" #notFoundContent>
|
||||||
<a-spin size="small" />
|
<a-spin size="small" />
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<a-form-item :validate-status="!!errorMessage ? 'error' : undefined" :help="errorMessage as any" label="Bands">
|
<a-form-item :validate-status="!!errorMessage ? 'error' : undefined" :help="errorMessage as any" label="Bands">
|
||||||
<a-select
|
<a-select
|
||||||
|
v-bind="$attrs"
|
||||||
:allow-clear="true"
|
:allow-clear="true"
|
||||||
mode="multiple"
|
mode="multiple"
|
||||||
option-filter-prop="label"
|
option-filter-prop="label"
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<a-form-item :help="errorMessage" label="Characters" :name="bandName as string" :validate-status="!!errorMessage ? 'error' : undefined">
|
<a-form-item :help="errorMessage" label="Characters" :name="bandName as string" :validate-status="!!errorMessage ? 'error' : undefined">
|
||||||
<a-select mode="multiple" :options="opts" v-model:value="value">
|
<a-select v-bind="$attrs" mode="multiple" :options="opts" v-model:value="value">
|
||||||
<template #removeIcon>
|
<template #removeIcon>
|
||||||
<i class="far fa-circle-x" />
|
<i class="far fa-circle-x" />
|
||||||
</template>
|
</template>
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<a-form-item :help="errorMessage" label="Genre(s)" :validate-status="!!errorMessage ? 'error' : undefined">
|
<a-form-item :help="errorMessage" label="Genre(s)" :validate-status="!!errorMessage ? 'error' : undefined">
|
||||||
<a-select :allow-clear="true" :options="opts" v-model:value="value" mode="multiple">
|
<a-select v-bind="$attrs" :allow-clear="true" :options="opts" v-model:value="value" mode="multiple">
|
||||||
<template #removeIcon>
|
<template #removeIcon>
|
||||||
<i class="far fa-circle-x" />
|
<i class="far fa-circle-x" />
|
||||||
</template>
|
</template>
|
||||||
|
@ -19,19 +19,19 @@
|
|||||||
<a-form-item label="Pairings">
|
<a-form-item label="Pairings">
|
||||||
<a-row :gutter="5" :wrap="true" v-for="(field, idx) in fields" :key="field.key">
|
<a-row :gutter="5" :wrap="true" v-for="(field, idx) in fields" :key="field.key">
|
||||||
<Field :name="fname + 'relationships' + `[${idx}]`">
|
<Field :name="fname + 'relationships' + `[${idx}]`">
|
||||||
<a-select mode="multiple" :options="opts" v-model:value="field.value as string[]" @change="(val) => update(idx, val as string[])">
|
<a-select mode="multiple" v-bind="$attrs" :options="opts" v-model:value="field.value as string[]" @change="(val) => update(idx, val as string[])">
|
||||||
<template #removeIcon>
|
<template #removeIcon>
|
||||||
<i class="far fa-circle-x" />
|
<i class="far fa-circle-x" />
|
||||||
</template>
|
</template>
|
||||||
</a-select>
|
</a-select>
|
||||||
</Field>
|
</Field>
|
||||||
<a-col :span="4">
|
<a-col :span="4">
|
||||||
<a-button @click="(e) => remove(idx)"> - </a-button>
|
<a-button :data-testid="`${$attrs['data-testid']}.${idx}.remove`" @click="(e) => remove(idx)"> - </a-button>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
<a-row justify="end">
|
<a-row justify="end">
|
||||||
<a-col :span="2">
|
<a-col :span="2">
|
||||||
<a-button @click="(e) => push([])"> + </a-button>
|
<a-button :data-testid="`${$attrs['data-testid']}.add`" @click="(e) => push([])"> + </a-button>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
import elCharacters from "../atoms/characters.vue";
|
import elCharacters from "../atoms/characters.vue";
|
||||||
import elPairings from "../atoms/pairings.vue";
|
import elPairings from "../atoms/pairings.vue";
|
||||||
import uploadOrPaste from "./uploadOrPaste.vue";
|
import uploadOrPaste from "./uploadOrPaste.vue";
|
||||||
|
import { IBand } from "@models/band";
|
||||||
// import test1 from
|
// import test1 from
|
||||||
|
|
||||||
let { name, data } = defineProps<{
|
let { name, data } = defineProps<{
|
||||||
@ -16,7 +17,7 @@
|
|||||||
data: FormChapter;
|
data: FormChapter;
|
||||||
}>();
|
}>();
|
||||||
let acData = toRef(data);
|
let acData = toRef(data);
|
||||||
let { data: _bands } = await useApiFetch("/band/all");
|
let { data: _bands } = await useApiFetch<IBand[]>("/band/all");
|
||||||
let bands = ref(_bands);
|
let bands = ref(_bands);
|
||||||
provide("curName", name + ".");
|
provide("curName", name + ".");
|
||||||
provide("bandlist", bands);
|
provide("bandlist", bands);
|
||||||
@ -30,58 +31,59 @@
|
|||||||
updateBands,
|
updateBands,
|
||||||
});
|
});
|
||||||
const wrapc = { span: 12 };
|
const wrapc = { span: 12 };
|
||||||
|
const tbase = `storyform.${name}.form`;
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div :data-testid="tbase">
|
||||||
<a-row :gutter="[10, 0]">
|
<a-row :gutter="[10, 0]">
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<Field :name="name + '.chapterTitle'" v-slot="{ value, field, errorMessage }">
|
<Field :name="name + '.chapterTitle'" v-slot="{ value, field, errorMessage }">
|
||||||
<a-form-item :name="[field.name as string]" label="Chapter title" :help="errorMessage" :status="!!errorMessage ? 'error' : undefined">
|
<a-form-item :name="[field.name as string]" label="Chapter title" :help="errorMessage" :status="!!errorMessage ? 'error' : undefined">
|
||||||
<a-input v-bind="field" />
|
<a-input :data-testid="`${tbase}.title`" v-bind="field" />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</Field>
|
</Field>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<el-bands />
|
<el-bands :data-testid="`${tbase}.bands`" />
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
<a-row :gutter="[10, 0]">
|
<a-row :gutter="[10, 0]">
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<base-editor v-model:val="acData.summary" :name="name + '.summary'" :wrap-col="wrapc" label="Summary" :init="bare" />
|
<base-editor :data-testid="`${tbase}.summary`" v-model:val="acData.summary" :name="name + '.summary'" :wrap-col="wrapc" label="Summary" :init="bare" />
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<base-editor v-model:val="acData.notes" :name="name + '.notes'" :wrap-col="wrapc" label="Author's notes" :init="bare" />
|
<base-editor :data-testid="`${tbase}.notes`" v-model:val="acData.notes" :name="name + '.notes'" :wrap-col="wrapc" label="Author's notes" :init="bare" />
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
<a-row :gutter="[10, 0]">
|
<a-row :gutter="[10, 0]">
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<el-characters />
|
<el-characters :data-testid="`${tbase}.characters`" />
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<el-pairings />
|
<el-pairings :data-testid="`${tbase}.relationships`" />
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
<Field :name="name + '.nsfw'" type="checkbox" :unchecked-value="false" :value="true" v-slot="{ value, field, errorMessage }">
|
<Field :name="name + '.nsfw'" type="checkbox" :unchecked-value="false" :value="true" v-slot="{ value, field, errorMessage }">
|
||||||
<a-checkbox v-bind="field" v-model="field.value"> Has NSFW content </a-checkbox>
|
<a-checkbox :data-testid="`${tbase}.nsfw`" v-bind="field" v-model="field.value"> Has NSFW content </a-checkbox>
|
||||||
<error-message :name="field.name" />
|
<error-message :name="field.name" />
|
||||||
</Field>
|
</Field>
|
||||||
<Field :name="name + '.loggedInOnly'" type="checkbox" :unchecked-value="false" :value="true" v-slot="{ value, field, errorMessage }">
|
<Field :name="name + '.loggedInOnly'" type="checkbox" :unchecked-value="false" :value="true" v-slot="{ value, field, errorMessage }">
|
||||||
<a-checkbox v-bind="field"> Visible only to registered users </a-checkbox>
|
<a-checkbox :data-testid="`${tbase}.loggedInOnly`" v-bind="field"> Visible only to registered users </a-checkbox>
|
||||||
<error-message :name="field.name" />
|
<error-message :name="field.name" />
|
||||||
</Field>
|
</Field>
|
||||||
<Field :name="name + '.hidden'" type="checkbox" :unchecked-value="false" :value="true" v-slot="{ value, field, errorMessage }">
|
<Field :name="name + '.hidden'" type="checkbox" :unchecked-value="false" :value="true" v-slot="{ value, field, errorMessage }">
|
||||||
<a-tooltip>
|
<a-tooltip>
|
||||||
<template #title> Hides your story from everyone except you and site admins. </template>
|
<template #title> Hides your story from everyone except you and site admins. </template>
|
||||||
<a-checkbox v-bind="field"> Hidden </a-checkbox>
|
<a-checkbox v-bind="field" :data-testid="`${tbase}.hidden`"> Hidden </a-checkbox>
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
</Field>
|
</Field>
|
||||||
<a-row>
|
<a-row>
|
||||||
<a-col :span="24">
|
<a-col :span="24">
|
||||||
<genre />
|
<genre :data-testid="`${tbase}.genre`" />
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
<a-divider> Contents </a-divider>
|
<a-divider> Contents </a-divider>
|
||||||
<upload-or-paste />
|
<upload-or-paste :data-testid="`${tbase}.uploadOrPaste`" />
|
||||||
<Field :name="name + '.id'" v-if="!!data.id" :model-value="data.id" />
|
<Field :hidden="true" :name="name + '.id'" v-if="!!data.id" :model-value="data.id" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -11,14 +11,15 @@
|
|||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<a-radio-group v-model:value="pvalue">
|
<a-radio-group v-model:value="pvalue">
|
||||||
<a-radio value="pasteOrType">Paste or type content</a-radio>
|
<a-radio value="pasteOrType" :data-testid="$attrs['data-testid'] + '.radio.pasteOrType'">Paste or type content</a-radio>
|
||||||
<a-radio value="upload">Upload a file</a-radio>
|
<a-radio value="upload" :data-testid="$attrs['data-testid'] + '.radio.upload'">Upload a file</a-radio>
|
||||||
</a-radio-group>
|
</a-radio-group>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<base-editor label="" v-if="pvalue === 'pasteOrType'" :init="story" :name="fname + 'content'" />
|
<base-editor :data-testid="$attrs['data-testid'] + '.type'" label="" v-if="pvalue === 'pasteOrType'" :init="story" :name="fname + 'content'" />
|
||||||
<a-upload
|
<a-upload
|
||||||
v-model:file-list="fileList"
|
v-model:file-list="fileList"
|
||||||
|
:data-testid="$attrs['data-testid'] + '.upload'"
|
||||||
v-else-if="pvalue === 'upload'"
|
v-else-if="pvalue === 'upload'"
|
||||||
:name="fname + 'file'"
|
:name="fname + 'file'"
|
||||||
accept=".doc,.docx,.md,.markdown"
|
accept=".doc,.docx,.md,.markdown"
|
||||||
@ -32,6 +33,7 @@
|
|||||||
let resp;
|
let resp;
|
||||||
try {
|
try {
|
||||||
resp = bap.file.response;
|
resp = bap.file.response;
|
||||||
|
console.log('RESPONSE', resp);
|
||||||
if (resp.success) {
|
if (resp.success) {
|
||||||
fileField.setValue(resp.fileName);
|
fileField.setValue(resp.fileName);
|
||||||
console.log(fileField.value);
|
console.log(fileField.value);
|
||||||
|
Loading…
Reference in New Issue
Block a user