refactor(client-side): combine yup schema for story chapters with story schema file
This commit is contained in:
		
							parent
							
								
									f3a3240134
								
							
						
					
					
						commit
						a2300d959c
					
				| @ -1,56 +0,0 @@ | |||||||
| import * as yup from "yup"; |  | ||||||
| import { FormChapter, FormStory } from "./types/FormStory"; |  | ||||||
| 
 |  | ||||||
| export const cs =  yup.object<FormChapter>().shape({ |  | ||||||
| 	chapterTitle: yup.string().ensure().min(1).trim().required("Chapter title cannot be blank."), |  | ||||||
| 	summary: yup.string().ensure().min(10).required("Summary cannot be blank"), |  | ||||||
| 	notes: yup.string().ensure(), |  | ||||||
| 	bands: yup.array().ensure().of(yup.number()).min(1, "One or more bands must be selected."), |  | ||||||
| 	characters: yup.array().ensure().min(1, "One or more characters must be selected"), |  | ||||||
| 	relationships: yup.array().ensure().of( |  | ||||||
| 		yup.array().ensure().of( |  | ||||||
| 			yup.string() |  | ||||||
| 		).min(2, "Pairings must have at least two characters!").max(3, "Pairings can have no more than three characters!") |  | ||||||
| 	), |  | ||||||
| 	nsfw: yup.boolean().oneOf([true, false]), |  | ||||||
| 	loggedInOnly: yup.boolean() |  | ||||||
| 		.when("nsfw", ([nsfw], schema) => { |  | ||||||
| 			return nsfw ? schema.oneOf([true], "If your story contains adult content, you MUST restrict the ability to read it to logged-in users only. Failure to comply may result in a takedown.") : schema.oneOf([true, false]) |  | ||||||
| 		}), |  | ||||||
| 	hidden: yup.boolean().oneOf([true, false]), |  | ||||||
| 	pot: yup.string().oneOf(["pasteOrType", "upload"]).required("Story content is required!"), |  | ||||||
| 	storytext: yup.string().when("pot", |  | ||||||
| 		([pot], schema) => { |  | ||||||
| 			return pot === "pasteOrType" ?  schema.test("numWords", "Story must be at least 50 words",  |  | ||||||
| 				(value:any, context) => { |  | ||||||
| 					return value?.split(/\W+/).length > 50 || false |  | ||||||
| 				}).required("Story text can't be blank!") : schema.min(0) |  | ||||||
| 		}), |  | ||||||
| 		// hello Celeste
 |  | ||||||
| 	docFile: yup.mixed().when("pot", ([pot], schema) => { |  | ||||||
| 		return pot === "upload" ? yup.mixed().test("exists", "You need to upload a file!", (value) => { |  | ||||||
| 			// console.debug("file: ", value)
 |  | ||||||
| 			return !!value; |  | ||||||
| 		}).test("fileType", "Supported files are *.docx and *.doc", (value) => { |  | ||||||
| 			let ext; |  | ||||||
| 			if(typeof value == "string") { |  | ||||||
| 				ext = value?.split(".").reverse()[0] |  | ||||||
| 			} else { |  | ||||||
| 				ext = (value as File)?.name?.split(".").reverse()[0] |  | ||||||
| 			} |  | ||||||
| 			// console.log(ext)
 |  | ||||||
| 			let reg = /(docx|doc)$/i |  | ||||||
| 			return reg.test(ext) |  | ||||||
| 		}) : yup.mixed() |  | ||||||
| 	} /* { |  | ||||||
| 		is: "upload", |  | ||||||
| 		then: , |  | ||||||
| 		otherwise: yup.mixed() |  | ||||||
| 	} */) |  | ||||||
| }) |  | ||||||
| 
 |  | ||||||
| export const storySchema = yup.object().shape({ |  | ||||||
| 	title: yup.string().ensure().min(5).required("Title cannot be blank"), |  | ||||||
| 	chapters: yup.array().ensure().of(cs), |  | ||||||
| 	completed: yup.boolean().oneOf([true, false]) |  | ||||||
| }) |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user