name validation

This commit is contained in:
2025-10-22 09:21:40 -06:00
parent bd32599469
commit 6a56036782

View File

@@ -39,6 +39,27 @@ export default function NewItemForm({
); );
const [name, setName] = useState(""); const [name, setName] = useState("");
const [nameError, setNameError] = useState("");
const validateFileName = (fileName: string): string => {
// Check for invalid file system characters
const invalidChars = [":", "/", "\\", "*", '"', "<", ">", "|"];
for (const char of fileName) {
if (invalidChars.includes(char)) {
return `Name contains invalid character: "${char}". Please avoid: ${invalidChars.join(
" "
)}`;
}
}
return "";
};
const handleNameChange = (newName: string) => {
setName(newName);
const error = validateFileName(newName);
setNameError(error);
};
const defaultDate = getDateFromString( const defaultDate = getDateFromString(
creationDate ? creationDate : dateToMarkdownString(new Date()) creationDate ? creationDate : dateToMarkdownString(new Date())
@@ -65,6 +86,12 @@ export default function NewItemForm({
className="flex flex-col gap-3" className="flex flex-col gap-3"
onSubmit={(e) => { onSubmit={(e) => {
e.preventDefault(); e.preventDefault();
// Validate name before submission
if (nameError) {
return;
}
const dueAt = const dueAt =
dueDate === "" dueDate === ""
? dueDate ? dueDate
@@ -160,7 +187,16 @@ export default function NewItemForm({
/> />
</div> </div>
<div> <div>
<TextInput label={type + " Name"} value={name} setValue={setName} /> <TextInput
label={type + " Name"}
value={name}
setValue={handleNameChange}
/>
{nameError && (
<div className="text-red-300 bg-red-950/50 border p-1 rounded border-red-900/50 text-sm mt-1">
{nameError}
</div>
)}
</div> </div>
<div> <div>
{type !== "Page" && ( {type !== "Page" && (
@@ -178,7 +214,9 @@ export default function NewItemForm({
No assignment groups created, create them in the course settings page No assignment groups created, create them in the course settings page
</div> </div>
)} )}
<button type="submit">Create</button> <button disabled={!!nameError} type="submit">
Create
</button>
{isPending && <Spinner />} {isPending && <Spinner />}
</form> </form>
); );