mirror of
				https://github.com/Instadapp/assembly.git
				synced 2024-07-29 22:37:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div
 | |
|     class="flex items-center justify-center"
 | |
|     :style="{
 | |
|       width: width + 'px',
 | |
|       height: width + 'px',
 | |
|     }"
 | |
|   >
 | |
|     <transition
 | |
|       enter-active-class="duration-300 ease-out"
 | |
|       enter-class="opacity-0"
 | |
|       enter-to-class="opacity-100"
 | |
|       leave-active-class="duration-200 ease-in"
 | |
|       leave-class="opacity-100"
 | |
|       leave-to-class="opacity-0"
 | |
|       @leave="show = false"
 | |
|       @after-leave="show = true"
 | |
|     >
 | |
|       <img
 | |
|         v-if="show && !!src"
 | |
|         :width="width"
 | |
|         :height="width"
 | |
|         :src="src"
 | |
|         alt="QR Code"
 | |
|         class="w-full h-full overflow-hidden rounded-xs"
 | |
|       />
 | |
|     </transition>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import { defineComponent, watch, ref, useContext, onUnmounted } from '@nuxtjs/composition-api'
 | |
| import { toDataURL } from 'qrcode'
 | |
| 
 | |
| export default defineComponent({
 | |
|   props: {
 | |
|     value: { type: String, required: true },
 | |
|     width: { type: Number, default: 220 },
 | |
|   },
 | |
|   setup(props, context) {
 | |
|     const src = ref(null)
 | |
|     const show = ref(true)
 | |
| 
 | |
|     watch(
 | |
|       () => [props.value],
 | |
|       async ([value]) => {
 | |
|         URL.revokeObjectURL(src.value)
 | |
| 
 | |
|         src.value = null
 | |
| 
 | |
|         if (!value) return
 | |
| 
 | |
|         src.value = await toDataURL(value, {
 | |
|           width: props.width,
 | |
|           margin: 0,
 | |
|           color: {
 | |
|             light: '#00000000',
 | |
|             dark: '#131E40ff',
 | |
|           },
 | |
|         })
 | |
|       },
 | |
|       { immediate: true }
 | |
|     )
 | |
| 
 | |
|     onUnmounted(() => URL.revokeObjectURL(src.value))
 | |
| 
 | |
|     return { src, show }
 | |
|   },
 | |
| })
 | |
| </script>
 | 
