refactor(server/utils): add chapter index parameter to storyCheck function
				
					
				
			This commit is contained in:
		
							parent
							
								
									22816477eb
								
							
						
					
					
						commit
						b3594c3cdb
					
				
							
								
								
									
										122
									
								
								components/reviews/singleReview.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								components/reviews/singleReview.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,122 @@ | ||||
| <script lang="ts" setup> | ||||
| 	import { Form as veeForm, Field as veeField, useForm } from "vee-validate"; | ||||
| 	import { IReview } from "~/models/stories/review"; | ||||
| 	import { comment } from "~/lib/client/editorConfig"; | ||||
| 	import { SingleChapterResult } from "~/lib/client/types/slightlyDifferentStory"; | ||||
| 	const props = defineProps<{ review: IReview; story: SingleChapterResult }>(); | ||||
| 	const review = toRef(props.review); | ||||
| 	const story = toRef(props.story); | ||||
| 	const { data } = useAuth(); | ||||
| 	const isCommentAuthor = computed(() => { | ||||
| 		return data?.value?.user?._id === props.review.author._id; | ||||
| 	}); | ||||
| 	const isAuthor = computed(() => { | ||||
| 		return props.story.author._id === data?.value?.user?._id; | ||||
| 	}); | ||||
| 	const replyFormVisible = ref<boolean>(false); | ||||
| 	const isEditing = ref<boolean>(false); | ||||
| 	const editSubmit = async (values) => { | ||||
| 		const { data } = await useApiFetch<any>(`/review/${props.review._id}`, { | ||||
| 			method: "put", | ||||
| 			body: values, | ||||
| 		}); | ||||
| 		review.value.text = data.value.data.text; | ||||
| 		isEditing.value = false; | ||||
| 	}; | ||||
| 
 | ||||
| 	const replySubmit = async (values) => { | ||||
| 		const { data } = await useApiFetch<any>( | ||||
| 			`/review/${props.review._id}/reply`, | ||||
| 			{ | ||||
| 				method: "post", | ||||
| 				body: values, | ||||
| 			}, | ||||
| 		); | ||||
| 		review.value.replies.push(data.value.data); | ||||
| 		replyFormVisible.value = false; | ||||
| 	}; | ||||
| 
 | ||||
| 	const reallyDelete = async () => { | ||||
| 		await useApiFetch(`/review/${props.review._id}`, { | ||||
| 			method: "delete", | ||||
| 		}); | ||||
| 	}; | ||||
| 
 | ||||
| 	// const { handleSubmit } = useForm() | ||||
| </script> | ||||
| 
 | ||||
| <template> | ||||
| 	<a-comment> | ||||
| 		<template #actions> | ||||
| 			<div v-if="!!data?.user" class="review-actions"> | ||||
| 				<a-button | ||||
| 					v-if="isCommentAuthor" | ||||
| 					@click="() => (isEditing = !isEditing)" | ||||
| 				> | ||||
| 					Edit | ||||
| 				</a-button> | ||||
| 				<a-popconfirm | ||||
| 					title="Are you sure you want to permanently delete this review?" | ||||
| 					ok-text="Yes" | ||||
| 					cancel-text="Never mind" | ||||
| 					@confirm="reallyDelete" | ||||
| 					v-if="isCommentAuthor || isAuthor" | ||||
| 				> | ||||
| 					<a-button> Delete </a-button> | ||||
| 				</a-popconfirm> | ||||
| 				<a-button | ||||
| 					v-if="isAuthor" | ||||
| 					type="primary" | ||||
| 					@click="() => (replyFormVisible = !replyFormVisible)" | ||||
| 				> | ||||
| 					Reply | ||||
| 				</a-button> | ||||
| 			</div> | ||||
| 		</template> | ||||
| 		<template #author> | ||||
| 			<b style="display: flex"> | ||||
| 				<span v-if="review.replyingTo == null">Review by </span> | ||||
| 				<span v-else> Response from  </span> | ||||
| 				<nuxt-link :to="`/user/${review.author._id}`"> | ||||
| 					{{ review.author.username }} | ||||
| 				</nuxt-link> | ||||
| 			</b> | ||||
| 		</template> | ||||
| 		<template #content> | ||||
| 			<div> | ||||
| 				<vee-form @submit="editSubmit" v-if="isEditing"> | ||||
| 					<vee-field name="content" v-slot="{ value, field, errorMessage }"> | ||||
| 						<base-editor | ||||
| 							:val="review.text" | ||||
| 							:width="150" | ||||
| 							label="" | ||||
| 							:name="field.name" | ||||
| 							:init="comment" | ||||
| 						/> | ||||
| 					</vee-field> | ||||
| 					<a-button type="primary" html-type="submit"> Edit review </a-button> | ||||
| 				</vee-form> | ||||
| 				<div v-else v-html="review.text" /> | ||||
| 				<vee-form @submit="replySubmit" v-if="replyFormVisible"> | ||||
| 					<vee-field name="content" v-slot="{ value, field, errorMessage }"> | ||||
| 						<base-editor | ||||
| 							:width="150" | ||||
| 							label="" | ||||
| 							:name="field.name" | ||||
| 							:init="comment" | ||||
| 						/> | ||||
| 					</vee-field> | ||||
| 					<a-button type="primary" html-type="submit"> Post response </a-button> | ||||
| 				</vee-form> | ||||
| 			</div> | ||||
| 		</template> | ||||
| 		<div v-for="reply in review.replies"> | ||||
| 			<single-review :review="reply" :story="story" /> | ||||
| 		</div> | ||||
| 	</a-comment> | ||||
| </template> | ||||
| <style scoped> | ||||
| 	.review-actions > * + * { | ||||
| 		margin-left: 0.4em; | ||||
| 	} | ||||
| </style> | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user