diff --git a/apps/dashboard/src/lib/components/Course/components/NewsFeed/NewFeedModal.svelte b/apps/dashboard/src/lib/components/Course/components/NewsFeed/NewFeedModal.svelte index 5d4ff977..0df1e908 100644 --- a/apps/dashboard/src/lib/components/Course/components/NewsFeed/NewFeedModal.svelte +++ b/apps/dashboard/src/lib/components/Course/components/NewsFeed/NewFeedModal.svelte @@ -11,6 +11,8 @@ NOTIFICATION_NAME, triggerSendEmail } from '$lib/utils/services/notification/notification'; + import { createNewsfeedValidation } from '$lib/utils/functions/validator'; + import { getTextFromHTML } from '$lib/utils/functions/toHtml'; export let author: Author | any = {}; export let courseId = ''; @@ -22,9 +24,14 @@ let newPost = ''; let isLoading = false; let createdFeed; + let errors = {}; const onPost = async () => { - if (!newPost) return; + errors = createNewsfeedValidation(getTextFromHTML(newPost)); + + if (Object.keys(errors).length) { + return; + } isLoading = true; try { if (edit) { @@ -105,6 +112,9 @@ placeholder="Share an update with your students" maxHeight={400} /> + {#if errors.newPost} +

{errors.newPost}

+ {/if}
diff --git a/apps/dashboard/src/lib/components/Course/components/NewsFeed/NewsFeedCard.svelte b/apps/dashboard/src/lib/components/Course/components/NewsFeed/NewsFeedCard.svelte index 018c0c93..b1c13198 100644 --- a/apps/dashboard/src/lib/components/Course/components/NewsFeed/NewsFeedCard.svelte +++ b/apps/dashboard/src/lib/components/Course/components/NewsFeed/NewsFeedCard.svelte @@ -14,6 +14,7 @@ import { isHtmlValueEmpty } from '$lib/utils/functions/toHtml'; import pluralize from 'pluralize'; import { onMount } from 'svelte'; + import { addNewsfeedCommentValidation } from '$lib/utils/functions/validator'; export let feed: Feed; export let editFeed: Feed; @@ -29,6 +30,7 @@ let comment = ''; let areCommentsExpanded = false; let isDeleteFeedModal = false; + let errors = {}; let reactions = { smile: '😀', @@ -55,9 +57,11 @@ }; const handleAddNewComment = (event) => { - if (!comment) return; - if (event.key === 'Enter' || event.type === 'click') { + errors = addNewsfeedCommentValidation(comment); + if (Object.keys(errors).length) { + return; + } event.preventDefault(); addNewComment(comment, feed.id, author.id); comment = ''; @@ -226,6 +230,9 @@
+ {#if errors.newComment} +

{errors.newComment}

+ {/if}
diff --git a/apps/dashboard/src/lib/utils/functions/validator.js b/apps/dashboard/src/lib/utils/functions/validator.js index 45c717c5..eacbc3bc 100644 --- a/apps/dashboard/src/lib/utils/functions/validator.js +++ b/apps/dashboard/src/lib/utils/functions/validator.js @@ -4,9 +4,13 @@ import { validateEmail } from './validateEmail'; const getOrgNameValidation = () => z.string().min(5, { message: 'Organization must contain 5 or more characters' }); + const getSiteNameValidation = () => z.string().min(5, { message: 'Site name must contain 5 or more characters' }); +const getNewsfeedValidation = () => + z.string().min(5, { message: 'Field must contain 5 or more characters' }); + const createQuizValidationSchema = z.object({ title: z.string().min(6, { message: 'Must be 6 or more characters long', @@ -199,6 +203,24 @@ export const onboardingValidation = (fields = {}, step) => { // return processErrors(error); // }; +export const createNewsfeedValidation = (newPost) => { + const schema = z.object({ + newPost: getNewsfeedValidation() + }); + const { error } = schema.safeParse({ newPost }); + + return processErrors(error); +}; + +export const addNewsfeedCommentValidation = (newComment) => { + const schema = z.object({ + newComment: getNewsfeedValidation() + }); + const { error } = schema.safeParse({ newComment }); + + return processErrors(error); +}; + export const createOrgValidation = (fields = {}) => { const schema = z.object({ orgName: getOrgNameValidation(),