Fixed #3864 - Image: New image and preview slots

pull/3919/head^2
Tuğçe Küçükoğlu 2023-05-03 20:54:50 +03:00
parent ef4887d5a9
commit 85df7a558d
3 changed files with 42 additions and 5 deletions

View File

@ -54,7 +54,11 @@ const ImageSlots = [
description: 'Custom content for the component close.' description: 'Custom content for the component close.'
}, },
{ {
name: 'imagePreview', name: 'image',
description: 'Custom content for the component image.'
},
{
name: 'preview',
description: 'Custom content for the component preview.' description: 'Custom content for the component preview.'
} }
]; ];

View File

@ -62,10 +62,40 @@ export interface ImageSlots {
* Custom close template. * Custom close template.
*/ */
close(): VNode[]; close(): VNode[];
/** /**
* Custom image template.
*/
image(scope: {
/**
* Style class of the image element.
*/
class: any;
/**
* Style of the image element.
*/
style: any;
/**
* Image error function.
*/
onError: void;
}): VNode[];
/**
* Custom preview template. * Custom preview template.
*/ */
imagePreview(): VNode[]; preview(scope: {
/**
* Style class of the preview image element.
*/
class: any;
/**
* Style of the preview image element.
*/
style: any;
/**
* Preview click function.
*/
onClick: void;
}): VNode[];
} }
export interface ImageEmits {} export interface ImageEmits {}

View File

@ -1,6 +1,8 @@
<template> <template>
<span :class="containerClass" :style="style"> <span :class="containerClass" :style="style">
<img v-bind="$attrs" :style="imageStyle" :class="imageClass" @error="onError" /> <slot name="image" :class="imageClass" :style="imageStyle" :onError="onError">
<img v-bind="$attrs" :style="imageStyle" :class="imageClass" @error="onError" />
</slot>
<button v-if="preview" ref="previewButton" class="p-image-preview-indicator" @click="onImageClick" v-bind="previewButtonProps"> <button v-if="preview" ref="previewButton" class="p-image-preview-indicator" @click="onImageClick" v-bind="previewButtonProps">
<slot name="indicatoricon"> <slot name="indicatoricon">
<component :is="indicatorIcon ? 'i' : 'EyeIcon'" class="p-image-preview-icon" /> <component :is="indicatorIcon ? 'i' : 'EyeIcon'" class="p-image-preview-icon" />
@ -41,7 +43,7 @@
</div> </div>
<transition name="p-image-preview" @before-enter="onBeforeEnter" @enter="onEnter" @leave="onLeave" @before-leave="onBeforeLeave" @after-leave="onAfterLeave"> <transition name="p-image-preview" @before-enter="onBeforeEnter" @enter="onEnter" @leave="onLeave" @before-leave="onBeforeLeave" @after-leave="onAfterLeave">
<div v-if="previewVisible"> <div v-if="previewVisible">
<slot name="imagePreview" :previewImageClick="onPreviewImageClick" :imagePreviewStyle="imagePreviewStyle"> <slot name="preview" class="p-image-preview" :style="imagePreviewStyle" :onClick="onPreviewImageClick">
<img :src="$attrs.src" class="p-image-preview" :style="imagePreviewStyle" @click="onPreviewImageClick" /> <img :src="$attrs.src" class="p-image-preview" :style="imagePreviewStyle" @click="onPreviewImageClick" />
</slot> </slot>
</div> </div>
@ -158,6 +160,7 @@ export default {
rotateRight() { rotateRight() {
this.rotate += 90; this.rotate += 90;
this.previewClick = true; this.previewClick = true;
console.log('kdnwjknkj');
}, },
rotateLeft() { rotateLeft() {
this.rotate -= 90; this.rotate -= 90;