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"
:submitter-slug="submitterSlug"
/>
<div class="flex justify-center">
<div class="flex items-center mt-5 mb-1">
<div
v-if="stepFields.length < 80"
class="flex justify-center"
>
<div class="flex items-center mt-4 mb-1 flex-wrap">
<a
v-for="(step, index) in stepFields"
:key="step[0].uuid"
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 }"
@click.prevent="isCompleted ? '' : [saveStep(), goToStep(step, true)]"
/>
</div>
</div>
<div
v-else
class="mt-5"
/>
</div>
</div>
</template>

@ -205,7 +205,7 @@
<div
v-if="withFieldsList"
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
v-if="drawField"
@ -888,9 +888,11 @@ export default {
})
},
save () {
if (this.$el.closest('template-builder')) {
this.$el.closest('template-builder').dataset.template = JSON.stringify(this.template)
}
this.$nextTick(() => {
if (this.$el.closest('template-builder')) {
this.$el.closest('template-builder').dataset.template = JSON.stringify(this.template)
}
})
this.pushUndo()

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

@ -1,5 +1,9 @@
<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="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">
@ -29,7 +33,7 @@
/>
</label>
<ul
v-if="editable"
v-if="editable && renderDropdown"
tabindex="0"
class="rounded-md min-w-max mb-2"
:class="menuClasses"
@ -85,6 +89,8 @@
<div
v-else
class="dropdown"
@mouseenter="renderDropdown = true"
@touchstart="renderDropdown = true"
>
<label
v-if="compact"
@ -125,7 +131,7 @@
</span>
</label>
<ul
v-if="editable || !compact"
v-if="(editable || !compact) && renderDropdown"
tabindex="0"
:class="menuClasses"
@click="closeDropdown"
@ -222,6 +228,11 @@ export default {
}
},
emits: ['update:model-value', 'remove', 'new-submitter', 'name-change'],
data () {
return {
renderDropdown: false
}
},
computed: {
colors () {
return [

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

Loading…
Cancel
Save