add builder editable prop

pull/109/head
DocuSeal 2 years ago
parent 2d24eac4a3
commit c0e49ebeea

@ -23,7 +23,7 @@
:style="{ left: (cellW / area.w * 100) + '%' }" :style="{ left: (cellW / area.w * 100) + '%' }"
> >
<span <span
v-if="index === 0" v-if="index === 0 && editable"
class="h-2.5 w-2.5 rounded-full -bottom-1 border-gray-400 bg-white shadow-md border absolute cursor-ew-resize z-10" class="h-2.5 w-2.5 rounded-full -bottom-1 border-gray-400 bg-white shadow-md border absolute cursor-ew-resize z-10"
style="left: -4px" style="left: -4px"
@mousedown.stop="startResizeCell" @mousedown.stop="startResizeCell"
@ -42,6 +42,7 @@
v-model="field.submitter_uuid" v-model="field.submitter_uuid"
class="border-r" class="border-r"
:compact="true" :compact="true"
:editable="editable"
:menu-classes="'dropdown-content bg-white menu menu-xs p-2 shadow rounded-box w-52 rounded-t-none -left-[1px]'" :menu-classes="'dropdown-content bg-white menu menu-xs p-2 shadow rounded-box w-52 rounded-t-none -left-[1px]'"
:submitters="template.submitters" :submitters="template.submitters"
@update:model-value="save" @update:model-value="save"
@ -50,6 +51,7 @@
<FieldType <FieldType
v-model="field.type" v-model="field.type"
:button-width="27" :button-width="27"
:editable="editable"
:button-classes="'px-1'" :button-classes="'px-1'"
:menu-classes="'bg-white rounded-t-none'" :menu-classes="'bg-white rounded-t-none'"
@update:model-value="[maybeUpdateOptions(), save()]" @update:model-value="[maybeUpdateOptions(), save()]"
@ -58,7 +60,7 @@
<span <span
v-if="field.type !== 'checkbox' || field.name" v-if="field.type !== 'checkbox' || field.name"
ref="name" ref="name"
contenteditable :contenteditable="editable"
class="pr-1 cursor-text outline-none block" class="pr-1 cursor-text outline-none block"
style="min-width: 2px" style="min-width: 2px"
@keydown.enter.prevent="onNameEnter" @keydown.enter.prevent="onNameEnter"
@ -84,7 +86,7 @@
>Required</label> >Required</label>
</div> </div>
<button <button
v-else v-else-if="editable"
class="pr-1" class="pr-1"
title="Remove" title="Remove"
@click.prevent="$emit('remove')" @click.prevent="$emit('remove')"
@ -113,7 +115,7 @@
class="absolute top-0 bottom-0 right-0 left-0 cursor-pointer" class="absolute top-0 bottom-0 right-0 left-0 cursor-pointer"
/> />
<span <span
v-if="field?.type" v-if="field?.type && editable"
class="h-4 w-4 md:h-2.5 md:w-2.5 -right-1 rounded-full -bottom-1 border-gray-400 bg-white shadow-md border absolute cursor-nwse-resize" class="h-4 w-4 md:h-2.5 md:w-2.5 -right-1 rounded-full -bottom-1 border-gray-400 bg-white shadow-md border absolute cursor-nwse-resize"
@mousedown.stop="startResize" @mousedown.stop="startResize"
@touchstart="startTouchResize" @touchstart="startTouchResize"
@ -145,6 +147,11 @@ export default {
required: false, required: false,
default: false default: false
}, },
editable: {
type: Boolean,
required: false,
default: true
},
field: { field: {
type: Object, type: Object,
required: false, required: false,
@ -313,6 +320,10 @@ export default {
startDrag (e) { startDrag (e) {
this.selectedAreaRef.value = this.area this.selectedAreaRef.value = this.area
if (!this.editable) {
return
}
const rect = e.target.getBoundingClientRect() const rect = e.target.getBoundingClientRect()
this.dragFrom = { x: e.clientX - rect.left, y: e.clientY - rect.top } this.dragFrom = { x: e.clientX - rect.left, y: e.clientY - rect.top }

@ -16,6 +16,7 @@
</a> </a>
<Contenteditable <Contenteditable
:model-value="template.name" :model-value="template.name"
:editable="editable"
class="text-3xl font-semibold focus:text-clip" class="text-3xl font-semibold focus:text-clip"
:icon-stroke-width="2.3" :icon-stroke-width="2.3"
@update:model-value="updateName" @update:model-value="updateName"
@ -76,6 +77,7 @@
:item="item" :item="item"
:document="sortedDocuments[index]" :document="sortedDocuments[index]"
:accept-file-types="acceptFileTypes" :accept-file-types="acceptFileTypes"
:editable="editable"
:template="template" :template="template"
:is-direct-upload="isDirectUpload" :is-direct-upload="isDirectUpload"
@scroll-to="scrollIntoDocument(item)" @scroll-to="scrollIntoDocument(item)"
@ -90,7 +92,7 @@
:class="{ 'bg-base-100': withStickySubmitters }" :class="{ 'bg-base-100': withStickySubmitters }"
> >
<Upload <Upload
v-if="sortedDocuments.length" v-if="sortedDocuments.length && editable"
:accept-file-types="acceptFileTypes" :accept-file-types="acceptFileTypes"
:template-id="template.id" :template-id="template.id"
:is-direct-upload="isDirectUpload" :is-direct-upload="isDirectUpload"
@ -122,12 +124,13 @@
:document="document" :document="document"
:is-drag="!!dragFieldType" :is-drag="!!dragFieldType"
:draw-field="drawField" :draw-field="drawField"
:editable="editable"
@draw="onDraw" @draw="onDraw"
@drop-field="onDropfield" @drop-field="onDropfield"
@remove-area="removeArea" @remove-area="removeArea"
/> />
<DocumentControls <DocumentControls
v-if="isBreakpointLg" v-if="isBreakpointLg && editable"
:with-arrows="template.schema.length > 1" :with-arrows="template.schema.length > 1"
:item="template.schema.find((item) => item.attachment_uuid === document.uuid)" :item="template.schema.find((item) => item.attachment_uuid === document.uuid)"
:document="document" :document="document"
@ -142,7 +145,7 @@
/> />
</template> </template>
<div <div
v-if="sortedDocuments.length && isBreakpointLg" v-if="sortedDocuments.length && isBreakpointLg && editable"
class="pb-4" class="pb-4"
> >
<Upload <Upload
@ -180,7 +183,7 @@
</span> </span>
</span> </span>
<FieldType <FieldType
v-if="sortedDocuments.length && !drawField" v-if="sortedDocuments.length && !drawField && editable"
class="dropdown-top dropdown-end fixed bottom-4 right-4 z-10 md:hidden" class="dropdown-top dropdown-end fixed bottom-4 right-4 z-10 md:hidden"
:model-value="''" :model-value="''"
@update:model-value="startFieldDraw($event)" @update:model-value="startFieldDraw($event)"
@ -231,6 +234,7 @@
:submitters="template.submitters" :submitters="template.submitters"
:selected-submitter="selectedSubmitter" :selected-submitter="selectedSubmitter"
:with-sticky-submitters="withStickySubmitters" :with-sticky-submitters="withStickySubmitters"
:editable="editable"
@set-draw="drawField = $event" @set-draw="drawField = $event"
@set-drag="dragFieldType = $event" @set-drag="dragFieldType = $event"
@change-submitter="selectedSubmitter = $event" @change-submitter="selectedSubmitter = $event"
@ -300,6 +304,11 @@ export default {
required: false, required: false,
default: '' default: ''
}, },
editable: {
type: Boolean,
required: false,
default: true
},
acceptFileTypes: { acceptFileTypes: {
type: String, type: String,
required: false, required: false,

@ -5,7 +5,7 @@
> >
<span <span
ref="contenteditable" ref="contenteditable"
contenteditable :contenteditable="editable"
style="min-width: 2px" style="min-width: 2px"
:class="iconInline ? 'inline' : 'block'" :class="iconInline ? 'inline' : 'block'"
class="peer outline-none focus:block" class="peer outline-none focus:block"
@ -24,6 +24,7 @@
* *
</span> </span>
<IconPencil <IconPencil
v-if="editable"
class="cursor-pointer flex-none opacity-0 group-hover/contenteditable-container:opacity-100 group-hover/contenteditable:opacity-100 align-middle peer-focus:hidden" class="cursor-pointer flex-none opacity-0 group-hover/contenteditable-container:opacity-100 group-hover/contenteditable:opacity-100 align-middle peer-focus:hidden"
:style="iconInline ? {} : { right: -(1.1 * iconWidth) + 'px' }" :style="iconInline ? {} : { right: -(1.1 * iconWidth) + 'px' }"
title="Edit" title="Edit"
@ -69,6 +70,11 @@ export default {
required: false, required: false,
default: false default: false
}, },
editable: {
type: Boolean,
required: false,
default: true
},
iconStrokeWidth: { iconStrokeWidth: {
type: Number, type: Number,
required: false, required: false,

@ -5,6 +5,7 @@
:key="image.id" :key="image.id"
:ref="setPageRefs" :ref="setPageRefs"
:number="index" :number="index"
:editable="editable"
:areas="areasIndex[index]" :areas="areasIndex[index]"
:is-drag="isDrag" :is-drag="isDrag"
:draw-field="drawField" :draw-field="drawField"
@ -38,6 +39,11 @@ export default {
type: Object, type: Object,
required: true required: true
}, },
editable: {
type: Boolean,
required: false,
default: true
},
drawField: { drawField: {
type: Object, type: Object,
required: false, required: false,

@ -13,6 +13,7 @@
<div class="flex items-center p-1 space-x-1"> <div class="flex items-center p-1 space-x-1">
<FieldType <FieldType
v-model="field.type" v-model="field.type"
:editable="editable"
:button-width="20" :button-width="20"
@update:model-value="[maybeUpdateOptions(), save()]" @update:model-value="[maybeUpdateOptions(), save()]"
@click="scrollToFirstArea" @click="scrollToFirstArea"
@ -20,6 +21,7 @@
<Contenteditable <Contenteditable
ref="name" ref="name"
:model-value="field.name || defaultName" :model-value="field.name || defaultName"
:editable="editable"
:icon-inline="true" :icon-inline="true"
:icon-width="18" :icon-width="18"
:icon-stroke-width="1.6" :icon-stroke-width="1.6"
@ -46,7 +48,7 @@
>Required</label> >Required</label>
</div> </div>
<div <div
v-else v-else-if="editable"
class="flex items-center space-x-1" class="flex items-center space-x-1"
> >
<span <span
@ -211,6 +213,11 @@ export default {
field: { field: {
type: Object, type: Object,
required: true required: true
},
editable: {
type: Boolean,
required: false,
default: true
} }
}, },
emits: ['set-draw', 'remove', 'move-up', 'move-down', 'scroll-to'], emits: ['set-draw', 'remove', 'move-up', 'move-down', 'scroll-to'],

@ -25,6 +25,7 @@
v-model="selectedSubmitter.name" v-model="selectedSubmitter.name"
class="cursor-text" class="cursor-text"
:icon-inline="true" :icon-inline="true"
:editable="editable"
:select-on-edit-click="true" :select-on-edit-click="true"
:icon-width="18" :icon-width="18"
@update:model-value="$emit('name-change', selectedSubmitter)" @update:model-value="$emit('name-change', selectedSubmitter)"
@ -38,6 +39,7 @@
</span> </span>
</label> </label>
<ul <ul
v-if="editable || !compact"
tabindex="0" tabindex="0"
:class="menuClasses" :class="menuClasses"
@click="closeDropdown" @click="closeDropdown"
@ -62,7 +64,7 @@
</span> </span>
</span> </span>
<button <button
v-if="!compact && submitters.length > 1" v-if="!compact && submitters.length > 1 && editable"
class="hidden group-hover:block px-2" class="hidden group-hover:block px-2"
@click.stop="remove(submitter)" @click.stop="remove(submitter)"
> >
@ -70,7 +72,7 @@
</button> </button>
</a> </a>
</li> </li>
<li v-if="submitters.length < 10"> <li v-if="submitters.length < 10 && editable">
<a <a
href="#" href="#"
class="flex px-2" class="flex px-2"
@ -107,6 +109,11 @@ export default {
type: Array, type: Array,
required: true required: true
}, },
editable: {
type: Boolean,
required: false,
default: true
},
compact: { compact: {
type: Boolean, type: Boolean,
required: false, required: false,

@ -15,6 +15,7 @@
</label> </label>
</slot> </slot>
<ul <ul
v-if="editable"
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"
@ -65,6 +66,11 @@ export default {
required: false, required: false,
default: '' default: ''
}, },
editable: {
type: Boolean,
required: false,
default: true
},
buttonWidth: { buttonWidth: {
type: Number, type: Number,
required: false, required: false,

@ -5,6 +5,7 @@
class="w-full rounded-lg" class="w-full rounded-lg"
:class="{ 'bg-base-100': withStickySubmitters }" :class="{ 'bg-base-100': withStickySubmitters }"
:submitters="submitters" :submitters="submitters"
:editable="editable"
@new-submitter="save" @new-submitter="save"
@remove="removeSubmitter" @remove="removeSubmitter"
@name-change="save" @name-change="save"
@ -17,6 +18,7 @@
:key="field.uuid" :key="field.uuid"
:field="field" :field="field"
:type-index="fields.filter((f) => f.type === field.type).indexOf(field)" :type-index="fields.filter((f) => f.type === field.type).indexOf(field)"
:editable="editable"
@remove="removeField" @remove="removeField"
@move-up="move(field, -1)" @move-up="move(field, -1)"
@move-down="move(field, 1)" @move-down="move(field, 1)"
@ -24,7 +26,10 @@
@set-draw="$emit('set-draw', $event)" @set-draw="$emit('set-draw', $event)"
/> />
</div> </div>
<div class="grid grid-cols-3 gap-1 pb-2"> <div
v-if="editable"
class="grid grid-cols-3 gap-1 pb-2"
>
<template <template
v-for="(icon, type) in fieldIcons" v-for="(icon, type) in fieldIcons"
:key="type" :key="type"
@ -100,7 +105,7 @@
</template> </template>
</div> </div>
<div <div
v-if="fields.length < 4" v-if="fields.length < 4 && editable"
class="text-xs p-2 border border-base-200 rounded" class="text-xs p-2 border border-base-200 rounded"
> >
<ul class="list-disc list-outside ml-3"> <ul class="list-disc list-outside ml-3">
@ -137,6 +142,11 @@ export default {
type: Array, type: Array,
required: true required: true
}, },
editable: {
type: Boolean,
required: false,
default: true
},
withStickySubmitters: { withStickySubmitters: {
type: Boolean, type: Boolean,
required: false, required: false,

@ -22,6 +22,7 @@
:ref="setAreaRefs" :ref="setAreaRefs"
:area="item.area" :area="item.area"
:field="item.field" :field="item.field"
:editable="editable"
@start-resize="resizeDirection = $event" @start-resize="resizeDirection = $event"
@stop-resize="resizeDirection = null" @stop-resize="resizeDirection = null"
@start-drag="isMove = true" @start-drag="isMove = true"
@ -77,6 +78,11 @@ export default {
required: false, required: false,
default: null default: null
}, },
editable: {
type: Boolean,
required: false,
default: true
},
isDrag: { isDrag: {
type: Boolean, type: Boolean,
required: false, required: false,
@ -141,6 +147,10 @@ export default {
return return
} }
if (!this.editable) {
return
}
this.showMask = true this.showMask = true
this.$nextTick(() => { this.$nextTick(() => {

@ -12,7 +12,10 @@
class="group flex justify-end cursor-pointer top-0 bottom-0 left-0 right-0 absolute p-1" class="group flex justify-end cursor-pointer top-0 bottom-0 left-0 right-0 absolute p-1"
@click="$emit('scroll-to', item)" @click="$emit('scroll-to', item)"
> >
<div class="flex justify-between w-full"> <div
v-if="editable"
class="flex justify-between w-full"
>
<div style="width: 26px" /> <div style="width: 26px" />
<div class=""> <div class="">
<ReplaceButton <ReplaceButton
@ -95,6 +98,11 @@ export default {
type: Object, type: Object,
required: true required: true
}, },
editable: {
type: Boolean,
required: false,
default: true
},
acceptFileTypes: { acceptFileTypes: {
type: String, type: String,
required: false, required: false,

Loading…
Cancel
Save