From 79e2ef6ce1b0d0f9e819db2e35467a72f738fd15 Mon Sep 17 00:00:00 2001 From: kirukib Date: Fri, 19 Dec 2025 18:31:48 +0300 Subject: [PATCH] changes --- package-lock.json | 93 +++ package.json | 1 + src/app/AppRoutes.tsx | 24 +- src/components/sidebar/Sidebar.tsx | 8 +- src/components/topbar/Topbar.tsx | 4 +- src/components/ui/dialog.tsx | 99 ++++ src/components/ui/file-upload.tsx | 103 ++++ src/components/ui/select.tsx | 27 + src/components/ui/stepper.tsx | 58 ++ src/components/ui/textarea.tsx | 21 + src/layouts/AppLayout.tsx | 6 +- .../content-management/AddPracticePage.tsx | 554 ++++++++++++++++++ src/pages/content-management/AddVideoPage.tsx | 172 ++++++ .../ContentManagementLayout.tsx | 1 + .../ContentOverviewPage.tsx | 66 ++- src/pages/content-management/CoursesPage.tsx | 28 +- .../PracticeDetailsPage.tsx | 286 +++++++++ .../PracticeMembersPage.tsx | 100 ++++ src/pages/content-management/SpeakingPage.tsx | 28 +- src/pages/role-management/AddRolePage.tsx | 104 ++++ .../role-management/RoleManagementLayout.tsx | 11 + src/pages/role-management/RolesListPage.tsx | 44 ++ .../user-management/RegisterUserPage.tsx | 75 +++ src/pages/user-management/UserGroupsPage.tsx | 94 +++ .../UserManagementDashboard.tsx | 58 ++ 25 files changed, 2030 insertions(+), 35 deletions(-) create mode 100644 src/components/ui/dialog.tsx create mode 100644 src/components/ui/file-upload.tsx create mode 100644 src/components/ui/select.tsx create mode 100644 src/components/ui/stepper.tsx create mode 100644 src/components/ui/textarea.tsx create mode 100644 src/pages/content-management/AddPracticePage.tsx create mode 100644 src/pages/content-management/AddVideoPage.tsx create mode 100644 src/pages/content-management/PracticeDetailsPage.tsx create mode 100644 src/pages/content-management/PracticeMembersPage.tsx create mode 100644 src/pages/role-management/AddRolePage.tsx create mode 100644 src/pages/role-management/RoleManagementLayout.tsx create mode 100644 src/pages/role-management/RolesListPage.tsx create mode 100644 src/pages/user-management/RegisterUserPage.tsx create mode 100644 src/pages/user-management/UserGroupsPage.tsx create mode 100644 src/pages/user-management/UserManagementDashboard.tsx diff --git a/package-lock.json b/package-lock.json index 820ece3..a2ab159 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@fontsource/inter": "^5.2.8", "@radix-ui/react-avatar": "^1.1.11", + "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-separator": "^1.1.8", "@radix-ui/react-slot": "^1.2.4", @@ -1332,6 +1333,98 @@ } } }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", diff --git a/package.json b/package.json index 673306f..7f8fb6e 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "dependencies": { "@fontsource/inter": "^5.2.8", "@radix-ui/react-avatar": "^1.1.11", + "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-separator": "^1.1.8", "@radix-ui/react-slot": "^1.2.4", diff --git a/src/app/AppRoutes.tsx b/src/app/AppRoutes.tsx index 0146ae0..645de4d 100644 --- a/src/app/AppRoutes.tsx +++ b/src/app/AppRoutes.tsx @@ -6,12 +6,22 @@ import { ContentManagementLayout } from "../pages/content-management/ContentMana import { ContentOverviewPage } from "../pages/content-management/ContentOverviewPage" import { CoursesPage } from "../pages/content-management/CoursesPage" import { SpeakingPage } from "../pages/content-management/SpeakingPage" +import { AddVideoPage } from "../pages/content-management/AddVideoPage" +import { AddPracticePage } from "../pages/content-management/AddPracticePage" import { NotFoundPage } from "../pages/NotFoundPage" import { NotificationsPage } from "../pages/notifications/NotificationsPage" import { PlaceholderPage } from "../pages/PlaceholderPage" import { UserDetailPage } from "../pages/user-management/UserDetailPage" import { UserManagementLayout } from "../pages/user-management/UserManagementLayout" import { UsersListPage } from "../pages/user-management/UsersListPage" +import { UserManagementDashboard } from "../pages/user-management/UserManagementDashboard" +import { UserGroupsPage } from "../pages/user-management/UserGroupsPage" +import { RegisterUserPage } from "../pages/user-management/RegisterUserPage" +import { RoleManagementLayout } from "../pages/role-management/RoleManagementLayout" +import { RolesListPage } from "../pages/role-management/RolesListPage" +import { AddRolePage } from "../pages/role-management/AddRolePage" +import { PracticeDetailsPage } from "../pages/content-management/PracticeDetailsPage" +import { PracticeMembersPage } from "../pages/content-management/PracticeMembersPage" import { UserLogPage } from "../pages/user-log/UserLogPage" export function AppRoutes() { @@ -21,14 +31,26 @@ export function AppRoutes() { } /> } /> }> - } /> + } /> + } /> + } /> + } /> } /> + }> + } /> + } /> + + }> } /> } /> + } /> } /> + } /> + } /> + } /> } /> diff --git a/src/components/sidebar/Sidebar.tsx b/src/components/sidebar/Sidebar.tsx index 42d4fcf..4c748fe 100644 --- a/src/components/sidebar/Sidebar.tsx +++ b/src/components/sidebar/Sidebar.tsx @@ -5,6 +5,7 @@ import { ClipboardList, LayoutDashboard, LogOut, + Shield, UserCircle2, Users, Users2, @@ -23,6 +24,7 @@ type NavItem = { const navItems: NavItem[] = [ { label: "Dashboard", to: "/dashboard", icon: LayoutDashboard }, { label: "User Management", to: "/users", icon: Users }, + { label: "Role Management", to: "/roles", icon: Shield }, { label: "Content Management", to: "/content", icon: BookOpen }, { label: "Notifications", to: "/notifications", icon: Bell }, { label: "User Log", to: "/user-log", icon: ClipboardList }, @@ -33,12 +35,12 @@ const navItems: NavItem[] = [ export function Sidebar() { return ( -