feat: refs #8220 modified create item form and added respective e2e
gitea/salix-front/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Jon Elias 2024-12-12 10:18:07 +01:00
parent c2a09868a1
commit 292171348c
2 changed files with 142 additions and 7 deletions

View File

@ -14,6 +14,9 @@ import ItemDescriptorProxy from './Card/ItemDescriptorProxy.vue';
import { cloneItem } from 'src/pages/Item/composables/cloneItem';
import RightMenu from 'src/components/common/RightMenu.vue';
import ItemListFilter from './ItemListFilter.vue';
import VnInput from 'src/components/common/VnInput.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
import FetchData from 'src/components/FetchData.vue';
const entityId = computed(() => route.params.id);
const { openCloneDialog } = cloneItem();
@ -21,7 +24,11 @@ const { viewSummary } = useSummaryDialog();
const { t } = useI18n();
const tableRef = ref();
const route = useRoute();
const validPriorities = ref([]);
const itemConfigs = (data) => {
const dataRow = data[0];
validPriorities.value = dataRow.validPriorities;
};
const itemFilter = {
include: [
{
@ -90,7 +97,6 @@ const columns = computed(() => [
label: t('globals.description'),
name: 'description',
align: 'left',
create: true,
columnFilter: {
name: 'search',
},
@ -135,7 +141,6 @@ const columns = computed(() => [
columnField: {
component: null,
},
create: true,
},
{
label: t('item.list.category'),
@ -158,6 +163,11 @@ const columns = computed(() => [
name: 'intrastat',
align: 'left',
component: 'select',
attrs: {
url: 'Intrastats',
optionValue: 'description',
optionLabel: 'description',
},
columnFilter: {
name: 'intrastat',
attrs: {
@ -169,7 +179,6 @@ const columns = computed(() => [
columnField: {
component: null,
},
create: true,
cardVisible: true,
},
{
@ -195,7 +204,6 @@ const columns = computed(() => [
columnField: {
component: null,
},
create: true,
cardVisible: true,
},
{
@ -298,6 +306,7 @@ const columns = computed(() => [
</script>
<template>
<FetchData url="ItemConfigs" @on-fetch="(data) => itemConfigs(data)" auto-load />
<VnSearchbar
data-key="ItemList"
:label="t('item.searchbar.label')"
@ -313,11 +322,13 @@ const columns = computed(() => [
data-key="ItemList"
url="Items/filter"
:create="{
urlCreate: 'Items',
urlCreate: 'Items/new',
title: t('Create Item'),
onDataSaved: () => tableRef.redirect(),
onDataSaved: ({ id }) => tableRef.redirect(`${id}/basic-data`),
formInitialData: {
editorFk: entityId,
tag: 56,
priority: 2,
},
}"
:order="['isActive DESC', 'name', 'id']"
@ -356,6 +367,96 @@ const columns = computed(() => [
</div>
<FetchedTags :item="row" :max-length="6" />
</template>
<template #more-create-dialog="{ data }">
<VnInput
v-model="data.provisionalName"
:label="t('globals.description')"
:is-required="true"
/>
<VnSelect
url="Tags"
v-model="data.tag"
:label="t('globals.tag')"
:fields="['id', 'name']"
option-label="name"
option-value="id"
:is-required="true"
:sort-by="['name ASC']"
>
<template #option="scope">
<QItem v-bind="scope.itemProps">
<QItemSection>
<QItemLabel>{{ scope.opt?.name }}</QItemLabel>
<QItemLabel caption> #{{ scope.opt?.id }} </QItemLabel>
</QItemSection>
</QItem>
</template>
</VnSelect>
<VnSelect
:options="validPriorities"
v-model="data.priority"
:label="t('item.create.priority')"
:is-required="true"
/>
<VnSelect
url="ItemTypes"
v-model="data.typeFk"
:label="t('item.list.typeName')"
:fields="['id', 'code', 'name']"
option-label="name"
option-value="id"
:is-required="true"
>
<template #option="scope">
<QItem v-bind="scope.itemProps">
<QItemSection>
<QItemLabel>{{ scope.opt?.name }}</QItemLabel>
<QItemLabel caption>
{{ scope.opt?.code }} #{{ scope.opt?.id }}
</QItemLabel>
</QItemSection>
</QItem>
</template>
</VnSelect>
<VnSelect
url="Intrastats"
v-model="data.intrastatFk"
:label="t('globals.intrastat')"
:fields="['id', 'description']"
option-label="description"
option-value="id"
:is-required="true"
>
<template #option="scope">
<QItem v-bind="scope.itemProps">
<QItemSection>
<QItemLabel>{{ scope.opt?.description }}</QItemLabel>
<QItemLabel caption> #{{ scope.opt?.id }} </QItemLabel>
</QItemSection>
</QItem>
</template>
</VnSelect>
<VnSelect
url="Origins"
v-model="data.originFk"
:label="t('globals.origin')"
:fields="['id', 'code', 'name']"
option-label="code"
option-value="id"
:is-required="true"
>
<template #option="scope">
<QItem v-bind="scope.itemProps">
<QItemSection>
<QItemLabel>{{ scope.opt?.name }}</QItemLabel>
<QItemLabel caption>
{{ scope.opt?.code }} #{{ scope.opt?.id }}
</QItemLabel>
</QItemSection>
</QItem>
</template>
</VnSelect>
</template>
</VnTable>
</template>

View File

@ -0,0 +1,34 @@
/// <reference types="cypress" />
describe('Item list', () => {
beforeEach(() => {
cy.viewport(1920, 1080);
cy.login('developer');
cy.visit(`/#/item/list`);
cy.get('#searchbar input').type('{enter}');
});
it('should filter the items and redirect to the summary', () => {
cy.dataCy('ItemFilterCategorySelect').type('Plant');
cy.get('.q-menu .q-item').contains('Plant').click();
cy.dataCy('ItemFilterTypeSelect').type('Anthurium');
cy.get('.q-menu .q-item').contains('Anthurium').click();
cy.get('.q-virtual-scroll__content > :nth-child(4) > :nth-child(4)').click();
});
it('should create an item', () => {
const data = {
Description: { val: `Test item` },
Type: { val: `Crisantemo`, type: 'select' },
Intrastat: { val: `Coral y materiales similares`, type: 'select' },
Origin: { val: `SPA`, type: 'select' },
};
cy.dataCy('vnTableCreateBtn').click();
cy.fillInForm(data);
cy.dataCy('FormModelPopup_save').click();
cy.checkNotification('Data created');
cy.get(
':nth-child(2) > .q-drawer > .q-drawer__content > .q-scrollarea > .q-scrollarea__container > .q-scrollarea__content'
).should('be.visible');
});
});