optimize form render with many fields

pull/217/head
Pete Matsyburka 2 years ago
parent fd4e15003a
commit f358f24abb

@ -326,18 +326,25 @@
:can-send-email="canSendEmail && !!submitter.email" :can-send-email="canSendEmail && !!submitter.email"
:submitter-slug="submitterSlug" :submitter-slug="submitterSlug"
/> />
<div class="flex justify-center"> <div
<div class="flex items-center mt-5 mb-1"> v-if="stepFields.length < 80"
class="flex justify-center"
>
<div class="flex items-center mt-4 mb-1 flex-wrap">
<a <a
v-for="(step, index) in stepFields" v-for="(step, index) in stepFields"
:key="step[0].uuid" :key="step[0].uuid"
href="#" href="#"
class="inline border border-base-300 h-3 w-3 rounded-full mx-1" class="inline border border-base-300 h-3 w-3 rounded-full mx-1 mt-1"
:class="{ 'bg-base-300': index === currentStep, 'bg-base-content': (index < currentStep && stepFields[index].every((f) => !f.required || ![null, undefined, ''].includes(values[f.uuid]))) || isCompleted, 'bg-white': index > currentStep }" :class="{ 'bg-base-300': index === currentStep, 'bg-base-content': (index < currentStep && stepFields[index].every((f) => !f.required || ![null, undefined, ''].includes(values[f.uuid]))) || isCompleted, 'bg-white': index > currentStep }"
@click.prevent="isCompleted ? '' : [saveStep(), goToStep(step, true)]" @click.prevent="isCompleted ? '' : [saveStep(), goToStep(step, true)]"
/> />
</div> </div>
</div> </div>
<div
v-else
class="mt-5"
/>
</div> </div>
</div> </div>
</template> </template>

@ -205,7 +205,7 @@
<div <div
v-if="withFieldsList" v-if="withFieldsList"
class="relative w-80 flex-none mt-1 pr-4 pl-0.5 hidden md:block" class="relative w-80 flex-none mt-1 pr-4 pl-0.5 hidden md:block"
:class="drawField ? 'overflow-hidden' : 'overflow-auto'" :class="drawField ? 'overflow-hidden' : 'overflow-y-auto overflow-x-hidden'"
> >
<div <div
v-if="drawField" v-if="drawField"
@ -888,9 +888,11 @@ export default {
}) })
}, },
save () { save () {
if (this.$el.closest('template-builder')) { this.$nextTick(() => {
this.$el.closest('template-builder').dataset.template = JSON.stringify(this.template) if (this.$el.closest('template-builder')) {
} this.$el.closest('template-builder').dataset.template = JSON.stringify(this.template)
}
})
this.pushUndo() this.pushUndo()

@ -72,6 +72,8 @@
<span <span
v-else v-else
class="dropdown dropdown-end" class="dropdown dropdown-end"
@mouseenter="renderDropdown = true"
@touchstart="renderDropdown = true"
> >
<label <label
tabindex="0" tabindex="0"
@ -84,6 +86,7 @@
/> />
</label> </label>
<ul <ul
v-if="renderDropdown"
tabindex="0" tabindex="0"
class="mt-1.5 dropdown-content menu menu-xs p-2 shadow bg-base-100 rounded-box w-52 z-10" class="mt-1.5 dropdown-content menu menu-xs p-2 shadow bg-base-100 rounded-box w-52 z-10"
draggable="true" draggable="true"
@ -331,7 +334,8 @@ export default {
data () { data () {
return { return {
isNameFocus: false, isNameFocus: false,
showPaymentModal: false showPaymentModal: false,
renderDropdown: false
} }
}, },
computed: { computed: {

@ -1,5 +1,9 @@
<template> <template>
<div v-if="mobileView"> <div
v-if="mobileView"
@mouseenter="renderDropdown = true"
@touchstart="renderDropdown = true"
>
<div class="flex space-x-2 items-end"> <div class="flex space-x-2 items-end">
<div class="group/contenteditable-container bg-base-100 rounded-md p-2 border border-base-300 w-full flex justify-between items-end"> <div class="group/contenteditable-container bg-base-100 rounded-md p-2 border border-base-300 w-full flex justify-between items-end">
<div class="flex items-center space-x-2"> <div class="flex items-center space-x-2">
@ -29,7 +33,7 @@
/> />
</label> </label>
<ul <ul
v-if="editable" v-if="editable && renderDropdown"
tabindex="0" tabindex="0"
class="rounded-md min-w-max mb-2" class="rounded-md min-w-max mb-2"
:class="menuClasses" :class="menuClasses"
@ -85,6 +89,8 @@
<div <div
v-else v-else
class="dropdown" class="dropdown"
@mouseenter="renderDropdown = true"
@touchstart="renderDropdown = true"
> >
<label <label
v-if="compact" v-if="compact"
@ -125,7 +131,7 @@
</span> </span>
</label> </label>
<ul <ul
v-if="editable || !compact" v-if="(editable || !compact) && renderDropdown"
tabindex="0" tabindex="0"
:class="menuClasses" :class="menuClasses"
@click="closeDropdown" @click="closeDropdown"
@ -222,6 +228,11 @@ export default {
} }
}, },
emits: ['update:model-value', 'remove', 'new-submitter', 'name-change'], emits: ['update:model-value', 'remove', 'new-submitter', 'name-change'],
data () {
return {
renderDropdown: false
}
},
computed: { computed: {
colors () { colors () {
return [ return [

@ -1,5 +1,9 @@
<template> <template>
<span class="dropdown"> <span
class="dropdown"
@mouseenter="renderDropdown = true"
@touchstart="renderDropdown = true"
>
<slot> <slot>
<label <label
tabindex="0" tabindex="0"
@ -15,7 +19,7 @@
</label> </label>
</slot> </slot>
<ul <ul
v-if="editable" v-if="editable && renderDropdown"
tabindex="0" tabindex="0"
class="dropdown-content menu menu-xs p-2 shadow rounded-box w-52 z-10 mb-3" class="dropdown-content menu menu-xs p-2 shadow rounded-box w-52 z-10 mb-3"
:class="menuClasses" :class="menuClasses"
@ -78,6 +82,11 @@ export default {
} }
}, },
emits: ['update:model-value'], emits: ['update:model-value'],
data () {
return {
renderDropdown: false
}
},
computed: { computed: {
fieldNames () { fieldNames () {
return { return {

Loading…
Cancel
Save