mirror of https://github.com/docusealco/docuseal
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							116 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
	
	
							116 lines
						
					
					
						
							2.9 KiB
						
					
					
				<template>
 | 
						|
  <Field
 | 
						|
    v-if="dragPlaceholder && isField && !isMask && field"
 | 
						|
    ref="dragPlaceholder"
 | 
						|
    :style="dragPlaceholderStyle"
 | 
						|
    :field="field"
 | 
						|
    :with-options="false"
 | 
						|
    class="fixed z-20 pointer-events-none"
 | 
						|
    :editable="false"
 | 
						|
  />
 | 
						|
  <div
 | 
						|
    v-else-if="dragPlaceholder && (isDefault || isRequired) && !isMask && field"
 | 
						|
    ref="dragPlaceholder"
 | 
						|
    :style="[dragPlaceholderStyle, { backgroundColor: backgroundColor }]"
 | 
						|
    class="fixed z-20 border border-base-300 rounded group default-field fields-list-item pointer-events-none"
 | 
						|
  >
 | 
						|
    <div class="flex items-center justify-between relative cursor-grab">
 | 
						|
      <div class="flex items-center p-1 space-x-1">
 | 
						|
        <IconDrag />
 | 
						|
        <component
 | 
						|
          :is="fieldIcons[field.type || 'text']"
 | 
						|
          :stroke-width="1.6"
 | 
						|
          :width="20"
 | 
						|
        />
 | 
						|
        <span class="block pl-0.5">
 | 
						|
          {{ field.title || field.name }}
 | 
						|
        </span>
 | 
						|
      </div>
 | 
						|
      <span
 | 
						|
        v-if="isRequired"
 | 
						|
        :data-tip="t('required')"
 | 
						|
        class="text-red-400 text-3xl pr-1.5 tooltip tooltip-left h-8"
 | 
						|
      >
 | 
						|
        *
 | 
						|
      </span>
 | 
						|
    </div>
 | 
						|
  </div>
 | 
						|
  <button
 | 
						|
    v-else-if="dragPlaceholder && !isMask && field"
 | 
						|
    ref="dragPlaceholder"
 | 
						|
    class="fixed field-type-button z-20 flex items-center justify-center border border-dashed w-full rounded border-base-content/20 opacity-90 pointer-events-none"
 | 
						|
    :style="[dragPlaceholderStyle, { backgroundColor }]"
 | 
						|
  >
 | 
						|
    <div
 | 
						|
      class="flex items-console cursor-grab h-full absolute left-0 bg-base-200/50"
 | 
						|
    >
 | 
						|
      <IconDrag class="my-auto" />
 | 
						|
    </div>
 | 
						|
    <div class="flex items-center flex-col px-2 py-2">
 | 
						|
      <component :is="fieldIcons[field.type || 'text']" />
 | 
						|
      <span class="text-xs mt-1">
 | 
						|
        {{ fieldNames[field.type || 'text'] }}
 | 
						|
      </span>
 | 
						|
    </div>
 | 
						|
  </button>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
import Field from './field'
 | 
						|
import IconDrag from './icon_drag'
 | 
						|
import FieldType from './field_type'
 | 
						|
 | 
						|
export default {
 | 
						|
  name: 'DragPlaceholder',
 | 
						|
  components: {
 | 
						|
    Field,
 | 
						|
    IconDrag
 | 
						|
  },
 | 
						|
  inject: ['t', 'backgroundColor'],
 | 
						|
  props: {
 | 
						|
    field: {
 | 
						|
      type: Object,
 | 
						|
      required: false,
 | 
						|
      default: null
 | 
						|
    },
 | 
						|
    isDefault: {
 | 
						|
      type: Boolean,
 | 
						|
      required: false,
 | 
						|
      default: false
 | 
						|
    },
 | 
						|
    isRequired: {
 | 
						|
      type: Boolean,
 | 
						|
      required: false,
 | 
						|
      default: false
 | 
						|
    },
 | 
						|
    isField: {
 | 
						|
      type: Boolean,
 | 
						|
      required: false,
 | 
						|
      default: false
 | 
						|
    }
 | 
						|
  },
 | 
						|
  data () {
 | 
						|
    return {
 | 
						|
      isMask: false,
 | 
						|
      dragPlaceholder: null
 | 
						|
    }
 | 
						|
  },
 | 
						|
  computed: {
 | 
						|
    dragPlaceholderStyle () {
 | 
						|
      if (this.dragPlaceholder) {
 | 
						|
        return {
 | 
						|
          left: this.dragPlaceholder.x + 'px',
 | 
						|
          top: this.dragPlaceholder.y + 'px',
 | 
						|
          width: this.dragPlaceholder.w + 'px',
 | 
						|
          height: this.dragPlaceholder.h + 'px'
 | 
						|
        }
 | 
						|
      } else {
 | 
						|
        return {}
 | 
						|
      }
 | 
						|
    },
 | 
						|
    fieldNames: FieldType.computed.fieldNames,
 | 
						|
    fieldIcons: FieldType.computed.fieldIcons
 | 
						|
  }
 | 
						|
}
 | 
						|
</script>
 |