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