forked from verdnatura/salix-front
Merge pull request '#6907 - input_clearable_hover' (!198) from 6907_fix_input_clearable_hover into dev
Reviewed-on: verdnatura/salix-front#198 Reviewed-by: Alex Moreno <alexm@verdnatura.es> Reviewed-by: Juan Ferrer <juan@verdnatura.es> Reviewed-by: Javi Gallego <jgallego@verdnatura.es>
This commit is contained in:
commit
19e5694e09
|
@ -26,7 +26,7 @@ const value = computed({
|
||||||
emit('update:modelValue', value);
|
emit('update:modelValue', value);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
const hover = ref(false);
|
||||||
const styleAttrs = computed(() => {
|
const styleAttrs = computed(() => {
|
||||||
return $props.isOutlined
|
return $props.isOutlined
|
||||||
? {
|
? {
|
||||||
|
@ -41,6 +41,10 @@ const onEnterPress = () => {
|
||||||
emit('keyup.enter');
|
emit('keyup.enter');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleValue = (val = null) => {
|
||||||
|
value.value = val;
|
||||||
|
};
|
||||||
|
|
||||||
const focus = () => {
|
const focus = () => {
|
||||||
vnInputRef.value.focus();
|
vnInputRef.value.focus();
|
||||||
};
|
};
|
||||||
|
@ -51,20 +55,33 @@ defineExpose({
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<QInput
|
<div
|
||||||
ref="vnInputRef"
|
@mouseover="hover = true"
|
||||||
v-model="value"
|
@mouseleave="hover = false"
|
||||||
v-bind="{ ...$attrs, ...styleAttrs }"
|
|
||||||
type="text"
|
|
||||||
:class="{ required: $attrs.required }"
|
|
||||||
@keyup.enter="onEnterPress()"
|
|
||||||
:rules="$attrs.required ? [requiredFieldRule] : null"
|
:rules="$attrs.required ? [requiredFieldRule] : null"
|
||||||
>
|
>
|
||||||
<template v-if="$slots.prepend" #prepend>
|
<QInput
|
||||||
<slot name="prepend" />
|
ref="vnInputRef"
|
||||||
</template>
|
v-model="value"
|
||||||
<template v-if="$slots.append" #append>
|
v-bind="{ ...$attrs, ...styleAttrs }"
|
||||||
<slot name="append" />
|
:type="$attrs.type"
|
||||||
</template>
|
:class="{ required: $attrs.required }"
|
||||||
</QInput>
|
@keyup.enter="onEnterPress()"
|
||||||
|
:clearable="false"
|
||||||
|
>
|
||||||
|
<template v-if="$slots.prepend" #prepend>
|
||||||
|
<slot name="prepend" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #append>
|
||||||
|
<slot name="append" v-if="$slots.append" />
|
||||||
|
<QIcon
|
||||||
|
name="close"
|
||||||
|
size="xs"
|
||||||
|
v-if="hover && value"
|
||||||
|
@click="handleValue(null)"
|
||||||
|
></QIcon>
|
||||||
|
</template>
|
||||||
|
</QInput>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed, ref } from 'vue';
|
import { computed, ref } from 'vue';
|
||||||
import VnInput from 'components/common/VnInput.vue';
|
import isValidDate from 'filters/isValidDate';
|
||||||
import isValidDate from "filters/isValidDate";
|
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
|
@ -17,6 +16,8 @@ const props = defineProps({
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
const hover = ref(false);
|
||||||
|
|
||||||
const emit = defineEmits(['update:modelValue']);
|
const emit = defineEmits(['update:modelValue']);
|
||||||
|
|
||||||
const joinDateAndTime = (date, time) => {
|
const joinDateAndTime = (date, time) => {
|
||||||
|
@ -77,30 +78,39 @@ const styleAttrs = computed(() => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<VnInput
|
<div @mouseover="hover = true" @mouseleave="hover = false">
|
||||||
class="vn-input-date"
|
<QInput
|
||||||
:model-value="displayDate(value)"
|
class="vn-input-date"
|
||||||
v-bind="{ ...$attrs, ...styleAttrs }"
|
readonly
|
||||||
readonly
|
:model-value="displayDate(value)"
|
||||||
@click="isPopupOpen = true"
|
v-bind="{ ...$attrs, ...styleAttrs }"
|
||||||
>
|
@click="isPopupOpen = true"
|
||||||
<template #append>
|
>
|
||||||
<QIcon name="event" class="cursor-pointer">
|
<template #append>
|
||||||
<QPopupProxy
|
<QIcon
|
||||||
v-model="isPopupOpen"
|
name="close"
|
||||||
cover
|
size="xs"
|
||||||
transition-show="scale"
|
v-if="hover && value"
|
||||||
transition-hide="scale"
|
@click="onDateUpdate(null)"
|
||||||
:no-parent-event="props.readonly"
|
></QIcon>
|
||||||
>
|
<QIcon name="event" class="cursor-pointer">
|
||||||
<QDate
|
<QPopupProxy
|
||||||
:model-value="formatDate(value)"
|
v-model="isPopupOpen"
|
||||||
@update:model-value="onDateUpdate"
|
cover
|
||||||
/>
|
transition-show="scale"
|
||||||
</QPopupProxy>
|
transition-hide="scale"
|
||||||
</QIcon>
|
:no-parent-event="props.readonly"
|
||||||
</template>
|
>
|
||||||
</VnInput>
|
<QDate
|
||||||
|
:today-btn="true"
|
||||||
|
:model-value="formatDate(value)"
|
||||||
|
@update:model-value="onDateUpdate"
|
||||||
|
/>
|
||||||
|
</QPopupProxy>
|
||||||
|
</QIcon>
|
||||||
|
</template>
|
||||||
|
</QInput>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
import { computed, ref } from 'vue';
|
import { computed, ref } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import isValidDate from 'filters/isValidDate';
|
import isValidDate from 'filters/isValidDate';
|
||||||
import VnInput from "components/common/VnInput.vue";
|
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
|
@ -20,6 +19,7 @@ const props = defineProps({
|
||||||
});
|
});
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const emit = defineEmits(['update:modelValue']);
|
const emit = defineEmits(['update:modelValue']);
|
||||||
|
|
||||||
const value = computed({
|
const value = computed({
|
||||||
get() {
|
get() {
|
||||||
return props.modelValue;
|
return props.modelValue;
|
||||||
|
@ -27,12 +27,7 @@ const value = computed({
|
||||||
set(value) {
|
set(value) {
|
||||||
const [hours, minutes] = value.split(':');
|
const [hours, minutes] = value.split(':');
|
||||||
const date = new Date(props.modelValue);
|
const date = new Date(props.modelValue);
|
||||||
date.setHours(
|
date.setHours(Number.parseInt(hours) || 0, Number.parseInt(minutes) || 0, 0, 0);
|
||||||
Number.parseInt(hours) || 0,
|
|
||||||
Number.parseInt(minutes) || 0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
emit('update:modelValue', value ? date.toISOString() : null);
|
emit('update:modelValue', value ? date.toISOString() : null);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -71,7 +66,7 @@ const styleAttrs = computed(() => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<VnInput
|
<QInput
|
||||||
class="vn-input-time"
|
class="vn-input-time"
|
||||||
readonly
|
readonly
|
||||||
:model-value="formatTime(value)"
|
:model-value="formatTime(value)"
|
||||||
|
@ -79,7 +74,7 @@ const styleAttrs = computed(() => {
|
||||||
@click="isPopupOpen = true"
|
@click="isPopupOpen = true"
|
||||||
>
|
>
|
||||||
<template #append>
|
<template #append>
|
||||||
<QIcon name="event" class="cursor-pointer">
|
<QIcon name="schedule" class="cursor-pointer">
|
||||||
<QPopupProxy
|
<QPopupProxy
|
||||||
v-model="isPopupOpen"
|
v-model="isPopupOpen"
|
||||||
cover
|
cover
|
||||||
|
@ -111,7 +106,7 @@ const styleAttrs = computed(() => {
|
||||||
</QPopupProxy>
|
</QPopupProxy>
|
||||||
</QIcon>
|
</QIcon>
|
||||||
</template>
|
</template>
|
||||||
</VnInput>
|
</QInput>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
|
|
@ -1,48 +1,64 @@
|
||||||
const locationOptions ='[role="listbox"] > div.q-virtual-scroll__content > .q-item'
|
const locationOptions = '[role="listbox"] > div.q-virtual-scroll__content > .q-item';
|
||||||
describe('VnLocation', () => {
|
describe('VnLocation', () => {
|
||||||
describe('Create',()=>{
|
describe('Create', () => {
|
||||||
const inputLocation = ':nth-child(3) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control';
|
const inputLocation =
|
||||||
|
'.q-form .q-card> :nth-child(3) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control';
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.viewport(1280, 720);
|
cy.viewport(1280, 720);
|
||||||
cy.login('developer');
|
cy.login('developer');
|
||||||
cy.visit('/#/worker/create');
|
cy.visit('/#/worker/create');
|
||||||
cy.waitForElement('.q-card');
|
cy.waitForElement('.q-card');
|
||||||
});
|
});
|
||||||
it('Show all options', function() {
|
it('Show all options', function () {
|
||||||
cy.get(inputLocation).click();
|
cy.get(inputLocation).click();
|
||||||
cy.get(locationOptions).should('have.length.at.least',5);
|
cy.get(locationOptions).should('have.length.at.least', 5);
|
||||||
});
|
});
|
||||||
it('input filter location as "al"', function() {
|
it('input filter location as "al"', function () {
|
||||||
cy.get(inputLocation).click();
|
cy.get(inputLocation).click();
|
||||||
cy.get(inputLocation).clear();
|
cy.get(inputLocation).clear();
|
||||||
cy.get(inputLocation).type('al');
|
cy.get(inputLocation).type('al');
|
||||||
cy.get(locationOptions).should('have.length.at.least',3);
|
cy.get(locationOptions).should('have.length.at.least', 3);
|
||||||
});
|
});
|
||||||
it('input filter location as "ecuador"', function() {
|
it('input filter location as "ecuador"', function () {
|
||||||
cy.get(inputLocation).click();
|
cy.get(inputLocation).click();
|
||||||
cy.get(inputLocation).clear();
|
cy.get(inputLocation).clear();
|
||||||
cy.get(inputLocation).type('ecuador');
|
cy.get(inputLocation).type('ecuador');
|
||||||
cy.get(locationOptions).should('have.length.at.least',1);
|
cy.get(locationOptions).should('have.length.at.least', 1);
|
||||||
cy.get(`${locationOptions}:nth-child(1)`).click();
|
cy.get(`${locationOptions}:nth-child(1)`).click();
|
||||||
cy.get(':nth-child(3) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(2) > .q-icon').click();
|
cy.get(inputLocation + '> :nth-child(2) > .q-icon').click();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('Fiscal-data',()=>{
|
describe('Fiscal-data', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.viewport(1280, 720);
|
cy.viewport(1280, 720);
|
||||||
cy.login('developer');
|
cy.login('developer');
|
||||||
cy.visit('/#/supplier/567/fiscal-data', {timeout: 2000});
|
cy.visit('/#/supplier/567/fiscal-data', { timeout: 2000 });
|
||||||
cy.waitForElement('.q-card');
|
cy.waitForElement('.q-card');
|
||||||
});
|
});
|
||||||
it('Create postCode', function() {
|
it('Create postCode', function () {
|
||||||
cy.get(':nth-child(6) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(3) > .q-icon').click();
|
cy.get(
|
||||||
|
':nth-child(6) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(3) > .q-icon'
|
||||||
|
).click();
|
||||||
cy.get(' .q-card > h1').should('have.text', 'New postcode');
|
cy.get(' .q-card > h1').should('have.text', 'New postcode');
|
||||||
cy.get('.q-card > :nth-child(4) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(1) > input').clear('12');
|
cy.get(
|
||||||
cy.get('.q-card > :nth-child(4) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(1) > input').type('1234453');
|
'.q-card > :nth-child(4) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(1) > input'
|
||||||
cy.selectOption('.q-dialog__inner > .column > #formModel > .q-card > :nth-child(4) > :nth-child(2) > .q-field > .q-field__inner > .q-field__control ', 'Valencia');
|
).clear('12');
|
||||||
cy.selectOption('.q-dialog__inner > .column > #formModel > .q-card > :nth-child(5) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control ', 'Province one');
|
cy.get(
|
||||||
cy.selectOption('.q-dialog__inner > .column > #formModel > .q-card > :nth-child(5) > :nth-child(2) > .q-field > .q-field__inner > .q-field__control ', 'España');
|
'.q-card > :nth-child(4) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control > :nth-child(1) > input'
|
||||||
|
).type('1234453');
|
||||||
|
cy.selectOption(
|
||||||
|
'.q-dialog__inner > .column > #formModel > .q-card > :nth-child(4) > :nth-child(2) > .q-field > .q-field__inner > .q-field__control ',
|
||||||
|
'Valencia'
|
||||||
|
);
|
||||||
|
cy.selectOption(
|
||||||
|
'.q-dialog__inner > .column > #formModel > .q-card > :nth-child(5) > :nth-child(1) > .q-field > .q-field__inner > .q-field__control ',
|
||||||
|
'Province one'
|
||||||
|
);
|
||||||
|
cy.selectOption(
|
||||||
|
'.q-dialog__inner > .column > #formModel > .q-card > :nth-child(5) > :nth-child(2) > .q-field > .q-field__inner > .q-field__control ',
|
||||||
|
'España'
|
||||||
|
);
|
||||||
cy.get('.q-mt-lg > .q-btn--standard').click();
|
cy.get('.q-mt-lg > .q-btn--standard').click();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
|
|
@ -8,6 +8,7 @@ describe('ClaimDevelopment', () => {
|
||||||
cy.viewport(1920, 1080);
|
cy.viewport(1920, 1080);
|
||||||
cy.login('developer');
|
cy.login('developer');
|
||||||
cy.visit(`/#/claim/${claimId}/development`);
|
cy.visit(`/#/claim/${claimId}/development`);
|
||||||
|
cy.waitForElement('tbody');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should reset line', () => {
|
it('should reset line', () => {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/// <reference types="cypress" />
|
/// <reference types="cypress" />
|
||||||
describe('InvoiceInBasicData', () => {
|
describe('InvoiceInBasicData', () => {
|
||||||
const selects = ':nth-child(1) > :nth-child(1) > .q-field';
|
const selects = '.q-form .q-card>:nth-child(1) > :nth-child(1) > .q-field';
|
||||||
const appendBtns = 'label button';
|
const appendBtns = 'label button';
|
||||||
const dialogAppendBtns = '.q-dialog label button';
|
const dialogAppendBtns = '.q-dialog label button';
|
||||||
const dialogInputs = '.q-dialog input';
|
const dialogInputs = '.q-dialog input';
|
||||||
|
|
|
@ -72,6 +72,7 @@ Cypress.Commands.add('getValue', (selector) => {
|
||||||
|
|
||||||
// Fill Inputs
|
// Fill Inputs
|
||||||
Cypress.Commands.add('selectOption', (selector, option) => {
|
Cypress.Commands.add('selectOption', (selector, option) => {
|
||||||
|
cy.waitForElement(selector);
|
||||||
cy.get(selector).find('.q-select__dropdown-icon').click();
|
cy.get(selector).find('.q-select__dropdown-icon').click();
|
||||||
cy.get('.q-menu .q-item').contains(option).click();
|
cy.get('.q-menu .q-item').contains(option).click();
|
||||||
});
|
});
|
||||||
|
@ -183,11 +184,11 @@ Cypress.Commands.add('closeSideMenu', (element) => {
|
||||||
|
|
||||||
Cypress.Commands.add('clearSearchbar', (element) => {
|
Cypress.Commands.add('clearSearchbar', (element) => {
|
||||||
if (element) cy.waitForElement(element);
|
if (element) cy.waitForElement(element);
|
||||||
cy.get('#searchbar > form > label > div:nth-child(1) input').clear();
|
cy.get('#searchbar > form > div:nth-child(1) > label > div:nth-child(1) input').clear();
|
||||||
});
|
});
|
||||||
|
|
||||||
Cypress.Commands.add('writeSearchbar', (value) => {
|
Cypress.Commands.add('writeSearchbar', (value) => {
|
||||||
cy.get('#searchbar > form > label > div:nth-child(1) input').type(value);
|
cy.get('#searchbar > form > div:nth-child(1) > label > div:nth-child(1) input').type(value);
|
||||||
});
|
});
|
||||||
Cypress.Commands.add('validateContent', (selector, expectedValue) => {
|
Cypress.Commands.add('validateContent', (selector, expectedValue) => {
|
||||||
cy.get(selector).should('have.text', expectedValue);
|
cy.get(selector).should('have.text', expectedValue);
|
||||||
|
|
Loading…
Reference in New Issue