-
-
- Courses
-
- Manage courses content (scaffold).
-
-
-
- Speaking
-
- Manage speaking content (scaffold).
-
+
+
Content Management
+
+
+
+
+
+
+ Courses
+ Manage course videos and educational content
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Speaking
+ Manage speaking practice sessions and exercises
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Practice
+ Manage practice details, members, and leadership
+
+
+
+
+
+
+
+
)
}
diff --git a/src/pages/content-management/CoursesPage.tsx b/src/pages/content-management/CoursesPage.tsx
index 255b4ff..5c5afa7 100644
--- a/src/pages/content-management/CoursesPage.tsx
+++ b/src/pages/content-management/CoursesPage.tsx
@@ -1,13 +1,29 @@
+import { Link } from "react-router-dom"
+import { Plus } from "lucide-react"
import { Card, CardContent, CardHeader, CardTitle } from "../../components/ui/card"
+import { Button } from "../../components/ui/button"
export function CoursesPage() {
return (
-
-
- Courses
-
- Courses module placeholder.
-
+
+
+
Courses
+
+
+
+
+
+
+ Course Management
+
+
+ Manage your course videos and content here.
+
+
+
)
}
diff --git a/src/pages/content-management/PracticeDetailsPage.tsx b/src/pages/content-management/PracticeDetailsPage.tsx
new file mode 100644
index 0000000..fb11147
--- /dev/null
+++ b/src/pages/content-management/PracticeDetailsPage.tsx
@@ -0,0 +1,286 @@
+import { useState } from "react"
+import { Plus, Edit, Trash2 } from "lucide-react"
+import { Button } from "../../components/ui/button"
+import { Card } from "../../components/ui/card"
+import { Input } from "../../components/ui/input"
+import { Textarea } from "../../components/ui/textarea"
+import { Select } from "../../components/ui/select"
+import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "../../components/ui/dialog"
+
+const mockLeaders = [
+ { id: "1", name: "John Doe", role: "CEO" },
+ { id: "2", name: "Jane Smith", role: "COO" },
+]
+
+const mockMembers = [
+ { id: "1", name: "John Doe", role: "Member" },
+ { id: "2", name: "Jane Smith", role: "Member" },
+]
+
+export function PracticeDetailsPage() {
+ const [isMemberModalOpen, setIsMemberModalOpen] = useState(false)
+ const [isLeaderModalOpen, setIsLeaderModalOpen] = useState(false)
+ const [memberName, setMemberName] = useState("")
+ const [memberRole, setMemberRole] = useState("")
+ const [leaderName, setLeaderName] = useState("")
+ const [leaderRole, setLeaderRole] = useState("")
+
+ const [formData, setFormData] = useState({
+ name: "",
+ description: "",
+ type: "",
+ street: "",
+ city: "",
+ state: "",
+ zipCode: "",
+ })
+
+ const handleAddMember = () => {
+ console.log("Add member:", { memberName, memberRole })
+ setIsMemberModalOpen(false)
+ setMemberName("")
+ setMemberRole("")
+ }
+
+ const handleAddLeader = () => {
+ console.log("Add leader:", { leaderName, leaderRole })
+ setIsLeaderModalOpen(false)
+ setLeaderName("")
+ setLeaderRole("")
+ }
+
+ return (
+
+
Practice Management
+
+
+ {/* Practice Leadership */}
+
+
+
Practice Leadership
+
+
+
+ {mockLeaders.map((leader) => (
+
+
+
{leader.name}
+
{leader.role}
+
+
+
+
+
+
+ ))}
+
+
+
+ {/* Practice Details */}
+
+ Practice Details
+
+
+
+ setFormData({ ...formData, name: e.target.value })}
+ placeholder="Enter practice name"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Practice Members */}
+
+
+
Practice Members
+
+
+
+ {mockMembers.map((member) => (
+
+
+
{member.name}
+
{member.role}
+
+
+
+
+
+
+ ))}
+
+
+
+ {/* Add Member Modal */}
+
+
+ {/* Add Leader Modal */}
+
+
+ )
+}
+
diff --git a/src/pages/content-management/PracticeMembersPage.tsx b/src/pages/content-management/PracticeMembersPage.tsx
new file mode 100644
index 0000000..b7140a1
--- /dev/null
+++ b/src/pages/content-management/PracticeMembersPage.tsx
@@ -0,0 +1,100 @@
+import { useState } from "react"
+import { Plus } from "lucide-react"
+import { Button } from "../../components/ui/button"
+import { Card } from "../../components/ui/card"
+import { Avatar, AvatarFallback, AvatarImage } from "../../components/ui/avatar"
+import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "../../components/ui/dialog"
+import { Input } from "../../components/ui/input"
+
+const mockMembers = [
+ { id: "1", name: "John", avatar: "" },
+ { id: "2", name: "Jane", avatar: "" },
+ { id: "3", name: "Mike", avatar: "" },
+ { id: "4", name: "Sarah", avatar: "" },
+ { id: "5", name: "David", avatar: "" },
+ { id: "6", name: "Emily", avatar: "" },
+]
+
+export function PracticeMembersPage() {
+ const [isModalOpen, setIsModalOpen] = useState(false)
+ const [memberName, setMemberName] = useState("")
+ const [memberRole, setMemberRole] = useState("")
+
+ const handleAddMember = () => {
+ console.log("Add member:", { memberName, memberRole })
+ setIsModalOpen(false)
+ setMemberName("")
+ setMemberRole("")
+ }
+
+ return (
+
+
Practice Management
+
+
+
+
Current Members
+
+
+
+ {mockMembers.map((member) => (
+
+
+
+
+ {member.name[0]}
+
+
+
{member.name}
+
+ ))}
+
+
+
+
+
+ )
+}
+
diff --git a/src/pages/content-management/SpeakingPage.tsx b/src/pages/content-management/SpeakingPage.tsx
index 050df48..b09f42e 100644
--- a/src/pages/content-management/SpeakingPage.tsx
+++ b/src/pages/content-management/SpeakingPage.tsx
@@ -1,13 +1,29 @@
+import { Link } from "react-router-dom"
+import { Plus } from "lucide-react"
import { Card, CardContent, CardHeader, CardTitle } from "../../components/ui/card"
+import { Button } from "../../components/ui/button"
export function SpeakingPage() {
return (
-
-
- Speaking
-
- Speaking module placeholder.
-
+
+
+
Speaking
+
+
+
+
+
+
+ Speaking Practice Management
+
+
+ Manage speaking practice sessions and exercises here.
+
+
+
)
}
diff --git a/src/pages/role-management/AddRolePage.tsx b/src/pages/role-management/AddRolePage.tsx
new file mode 100644
index 0000000..eb0df32
--- /dev/null
+++ b/src/pages/role-management/AddRolePage.tsx
@@ -0,0 +1,104 @@
+import { useState } from "react"
+import { ArrowLeft } from "lucide-react"
+import { useNavigate } from "react-router-dom"
+import { Button } from "../../components/ui/button"
+import { Card } from "../../components/ui/card"
+import { Input } from "../../components/ui/input"
+import { Textarea } from "../../components/ui/textarea"
+
+const permissions = [
+ "View Dashboard",
+ "Manage Users",
+ "Manage Roles",
+ "Manage Practices",
+ "View Reports",
+ "Manage Content",
+ "Manage Settings",
+]
+
+export function AddRolePage() {
+ const navigate = useNavigate()
+ const [roleName, setRoleName] = useState("")
+ const [roleDescription, setRoleDescription] = useState("")
+ const [selectedPermissions, setSelectedPermissions] = useState
([])
+
+ const togglePermission = (permission: string) => {
+ setSelectedPermissions((prev) =>
+ prev.includes(permission)
+ ? prev.filter((p) => p !== permission)
+ : [...prev, permission],
+ )
+ }
+
+ const handleSubmit = () => {
+ console.log("Add role:", { roleName, roleDescription, selectedPermissions })
+ navigate("/roles")
+ }
+
+ return (
+
+
+
+
Add New Role
+
+
+
+
+
+
+ setRoleName(e.target.value)}
+ placeholder="Enter role name"
+ required
+ />
+
+
+
+
+
+
+
+
+
+ {permissions.map((permission) => (
+
+ ))}
+
+
+
+
+
+
+
+
+
+ )
+}
+
diff --git a/src/pages/role-management/RoleManagementLayout.tsx b/src/pages/role-management/RoleManagementLayout.tsx
new file mode 100644
index 0000000..152c401
--- /dev/null
+++ b/src/pages/role-management/RoleManagementLayout.tsx
@@ -0,0 +1,11 @@
+import { Outlet } from "react-router-dom"
+
+export function RoleManagementLayout() {
+ return (
+
+ )
+}
+
diff --git a/src/pages/role-management/RolesListPage.tsx b/src/pages/role-management/RolesListPage.tsx
new file mode 100644
index 0000000..bd024b4
--- /dev/null
+++ b/src/pages/role-management/RolesListPage.tsx
@@ -0,0 +1,44 @@
+import { useNavigate } from "react-router-dom"
+import { Plus, Edit } from "lucide-react"
+import { Button } from "../../components/ui/button"
+import { Card, CardContent } from "../../components/ui/card"
+
+const mockRoles = [
+ { id: "1", name: "Admin", userCount: 10 },
+ { id: "2", name: "User", userCount: 5 },
+]
+
+export function RolesListPage() {
+ const navigate = useNavigate()
+ return (
+
+
+
Role Management
+
+
+
+
+ {mockRoles.map((role) => (
+
+
+
+ {role.name}
+ {role.userCount} Users
+
+
+
+ ))}
+
+
+ )
+}
+
diff --git a/src/pages/user-management/RegisterUserPage.tsx b/src/pages/user-management/RegisterUserPage.tsx
new file mode 100644
index 0000000..03497c6
--- /dev/null
+++ b/src/pages/user-management/RegisterUserPage.tsx
@@ -0,0 +1,75 @@
+import { ArrowLeft } from "lucide-react"
+import { useNavigate } from "react-router-dom"
+import { Button } from "../../components/ui/button"
+import { Card } from "../../components/ui/card"
+import { Input } from "../../components/ui/input"
+import { Textarea } from "../../components/ui/textarea"
+import { Select } from "../../components/ui/select"
+
+export function RegisterUserPage() {
+ const navigate = useNavigate()
+
+ return (
+
+
+
+
Register New User
+
+
+
+
+
+
+ )
+}
+
diff --git a/src/pages/user-management/UserGroupsPage.tsx b/src/pages/user-management/UserGroupsPage.tsx
new file mode 100644
index 0000000..1b69748
--- /dev/null
+++ b/src/pages/user-management/UserGroupsPage.tsx
@@ -0,0 +1,94 @@
+import { useState } from "react"
+import { Plus, Edit } from "lucide-react"
+import { Button } from "../../components/ui/button"
+import { Card, CardContent } from "../../components/ui/card"
+import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "../../components/ui/dialog"
+import { Input } from "../../components/ui/input"
+import { Textarea } from "../../components/ui/textarea"
+
+const mockGroups = [
+ { id: "1", name: "Big 10", userCount: 10 },
+ { id: "2", name: "Small 5", userCount: 5 },
+ { id: "3", name: "Team 8", userCount: 8 },
+]
+
+export function UserGroupsPage() {
+ const [isModalOpen, setIsModalOpen] = useState(false)
+ const [groupName, setGroupName] = useState("")
+ const [groupDescription, setGroupDescription] = useState("")
+
+ const handleAddGroup = () => {
+ console.log("Add group:", { groupName, groupDescription })
+ setIsModalOpen(false)
+ setGroupName("")
+ setGroupDescription("")
+ }
+
+ return (
+
+
+
User Groups
+
+
+
+
+ {mockGroups.map((group) => (
+
+
+
+ {group.name}
+ {group.userCount} Users
+
+
+
+ ))}
+
+
+
+
+ )
+}
+
diff --git a/src/pages/user-management/UserManagementDashboard.tsx b/src/pages/user-management/UserManagementDashboard.tsx
new file mode 100644
index 0000000..9de6e2b
--- /dev/null
+++ b/src/pages/user-management/UserManagementDashboard.tsx
@@ -0,0 +1,58 @@
+import { Link } from "react-router-dom"
+import { UserPlus, Users } from "lucide-react"
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../../components/ui/card"
+import { Button } from "../../components/ui/button"
+
+export function UserManagementDashboard() {
+ return (
+
+
User Management
+
+
+
+
+
+
+ User Register
+ Register new users to the system
+
+
+
+
+
+
+
+
+
+
+
+
+
+ User Groups
+ Manage user groups and permissions
+
+
+
+
+
+
+
+
+
+
+ User List
+ View and manage all users in the system
+
+
+
+
+
+
+
+
+
+ )
+}
+