Skip to content

Commit

Permalink
Avoid duplicate lesson slugs
Browse files Browse the repository at this point in the history
  • Loading branch information
apbetioli committed Jun 3, 2024
1 parent ea656f5 commit 1bbf9cb
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
13 changes: 10 additions & 3 deletions app/admin/courses/[id]/course-form-lesson.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,17 @@ export function CourseFormLesson({
}, [lesson])

const handleInputChange = (name: string, value: any) => {
if (isNew && name === 'name') {
setCurrent({ ...current, [name]: value, slug: kebabCase(value) })
if (name === 'name') {
setCurrent({
...current,
[name]: value,
slug: kebabCase(group.name + value),
})
} else {
setCurrent({ ...current, [name]: value })
setCurrent({
...current,
[name]: value,
})
}
}

Expand Down
20 changes: 20 additions & 0 deletions lib/features/admin-slice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,15 @@ const adminSlice = createSlice({
const groupToUpdate = findGroup(state, action.payload.group)
groupToUpdate.changed = true

const exists = groupToUpdate.lessons.find(
(lesson) => lesson.slug === action.payload.lesson.slug,
)
if (exists) {
throw new Error(
'Lesson slug already exists! Please choose another name.',
)
}

groupToUpdate.lessons.push(
createLesson({
...action.payload.lesson,
Expand All @@ -170,6 +179,17 @@ const adminSlice = createSlice({
const index = findLessonIndex(groupToUpdate, action.payload.lesson)
groupToUpdate.changed = true

const exists = groupToUpdate.lessons.find(
(lesson) =>
lesson.slug === action.payload.lesson.slug &&
lesson.uiId !== action.payload.lesson.uiId,
)
if (exists) {
throw new Error(
'Lesson slug already exists! Please choose another name.',
)
}

groupToUpdate.lessons.splice(index, 1, {
...action.payload.lesson,
changed: true,
Expand Down

0 comments on commit 1bbf9cb

Please sign in to comment.