From c9d5faebb096da16bd111f070e4cf5a9a81d05e1 Mon Sep 17 00:00:00 2001 From: benzbarquilla Date: Thu, 19 Mar 2026 16:27:37 +0800 Subject: [PATCH] done users and roles page responsive view review nalang ang polish --- .../app/components/mobileToggleTab/Toggle.jsx | 5 +- .../mobileToggleTab/styles.module.css | 7 ++- .../components/permissions/Permissions.jsx | 22 ++++--- .../components/permissions/styles.module.css | 37 +++++------- frontend/src/app/roles/[rolesId]/page.jsx | 32 +++++++--- .../src/app/roles/[rolesId]/styles.module.css | 53 +++++++++++++++-- frontend/src/app/roles/add/page.jsx | 33 +++++++---- frontend/src/app/roles/add/styles.module.css | 51 ++++++++++++++-- frontend/src/app/users/[usersId]/page.jsx | 29 ++++++++-- .../src/app/users/[usersId]/styles.module.css | 58 +++++++++++++++++-- frontend/src/app/users/add/page.jsx | 6 +- frontend/src/app/users/add/styles.module.css | 14 +++-- 12 files changed, 262 insertions(+), 85 deletions(-) diff --git a/frontend/src/app/components/mobileToggleTab/Toggle.jsx b/frontend/src/app/components/mobileToggleTab/Toggle.jsx index e4fe140..14941b4 100644 --- a/frontend/src/app/components/mobileToggleTab/Toggle.jsx +++ b/frontend/src/app/components/mobileToggleTab/Toggle.jsx @@ -23,7 +23,10 @@ const Toggle = ({ tabs = [], activeTab, onChange }) => { {isMobile && activeTab === "permissions" && (
- +
+ +
+ diff --git a/frontend/src/app/components/mobileToggleTab/styles.module.css b/frontend/src/app/components/mobileToggleTab/styles.module.css index 5d9c2ef..77d5fd1 100644 --- a/frontend/src/app/components/mobileToggleTab/styles.module.css +++ b/frontend/src/app/components/mobileToggleTab/styles.module.css @@ -20,13 +20,18 @@ align-items: center; gap: 16px; flex: 1 0 0; + padding: 8px 0; } + .searchBar { + width: 100%; + } + .container > button { display: flex; padding: 8px; border: none; justify-content: center; - align-items: center; + align-items: end; gap: 12px; border-radius: 6px; background: #27293b; diff --git a/frontend/src/app/components/permissions/Permissions.jsx b/frontend/src/app/components/permissions/Permissions.jsx index db5c0e0..c3a2cc2 100644 --- a/frontend/src/app/components/permissions/Permissions.jsx +++ b/frontend/src/app/components/permissions/Permissions.jsx @@ -20,15 +20,13 @@ const Permissions = ({ sampleData = [] }) => {
-
- {sampleData.length === 0 ? ( - // Default Message -
-

No permission added yet

-
- ) : ( - // Sampple Data(static) - sampleData.map((perm, index) => { + {sampleData.length === 0 ? ( +
+

No permission added yet

+
+ ) : ( +
+ {sampleData.map((perm, index) => { return (
@@ -40,9 +38,9 @@ const Permissions = ({ sampleData = [] }) => {
); - }) - )} -
+ })} +
+ )} ); diff --git a/frontend/src/app/components/permissions/styles.module.css b/frontend/src/app/components/permissions/styles.module.css index 0a567bc..c83249c 100644 --- a/frontend/src/app/components/permissions/styles.module.css +++ b/frontend/src/app/components/permissions/styles.module.css @@ -22,7 +22,6 @@ align-items: flex-start; gap: 5px; flex: 1 0 0; - color: #d2d3e1; font-family: Inter; font-size: 20px; @@ -53,22 +52,13 @@ background: #27293b; } -.wrapper { - display: flex; - height: 43.813px; - padding: 8px 16px; - justify-content: center; - align-items: center; - align-self: stretch; -} - .permissionDefaultState { - display: flex; - justify-content: center; align-items: center; gap: 12px; flex: 1 0 0; align-self: stretch; + height: 43.813px; + padding: 8px 16px; } .permissionDefaultState p { display: flex; @@ -84,16 +74,19 @@ font-weight: 400; line-height: normal; } - +.permissionsList { + width: 100%; +} .permissions { display: flex; height: 43.813px; - padding: 8px 16px; + padding: 8px 8px 8px 16px; justify-content: space-between; align-items: center; align-self: stretch; border-bottom: 0.5px solid #2e3042; } + .permissions:hover { border-bottom: 1px solid rgba(129, 135, 255, 0.25); background: rgba(129, 135, 255, 0.05); @@ -153,21 +146,21 @@ font-size: 18px; align-self: stretch; } + .svgContainer { display: none; } - - .wrapper { - display: flex; - padding: 24px 16px 0 16px; - align-items: flex-start; - align-self: stretch; - } .permissionDefaultState { gap: 12px; align-self: stretch; + padding: 24px 16px 0 16px; + } + .permissionsList { + padding-top: 16px; + } + .permissions { + padding: 8px 16px; } - .permissionDefaultState > p { font-weight: 500; text-align: center; diff --git a/frontend/src/app/roles/[rolesId]/page.jsx b/frontend/src/app/roles/[rolesId]/page.jsx index 6db77a2..eb21a41 100644 --- a/frontend/src/app/roles/[rolesId]/page.jsx +++ b/frontend/src/app/roles/[rolesId]/page.jsx @@ -1,9 +1,11 @@ -import React from "react"; +"use client"; +import React, { useState } from "react"; import TopHeader from "@/app/components/topHeader/TopHeader"; import globalStyle from "../../globalStyle.module.css"; import editRoleStyle from "./styles.module.css"; import TextField from "@/app/components/fields/textfield"; import Permissions from "@/app/components/permissions/Permissions"; +import Toggle from "@/app/components/mobileToggleTab/Toggle"; const ViewRolePage = () => { const sampleData = [ @@ -22,6 +24,8 @@ const ViewRolePage = () => { { permission: "service.delete" }, { permission: "service.update" }, ]; + + const [activeTab, setActiveTab] = useState("details"); return (
@@ -32,23 +36,30 @@ const ViewRolePage = () => { state="view" requiredButtons={["back", "title", "edit", "download"]} /> -
+
+ {/* Mobile Toggle */} + {/* Input fields Container */}
{/* User Details */} -
- {/* Header */} +

Role Details

- {/* Input fields */}
- {/* Email */}
- {/* Label */}

Name

@@ -77,7 +88,12 @@ const ViewRolePage = () => {
{/* Permissions */} - +
+
+ +
diff --git a/frontend/src/app/roles/[rolesId]/styles.module.css b/frontend/src/app/roles/[rolesId]/styles.module.css index 7b9424a..91531f3 100644 --- a/frontend/src/app/roles/[rolesId]/styles.module.css +++ b/frontend/src/app/roles/[rolesId]/styles.module.css @@ -1,4 +1,4 @@ -.addRoleContainer { +.editRoleContainer { display: flex; padding: 0px 144px 0px 144px; align-items: flex-start; @@ -13,7 +13,7 @@ flex: 1 0 0; align-self: stretch; } -.userDetails { +.roleDetails { display: flex; width: 400px; padding: 20px 24px 48px 24px; @@ -23,6 +23,21 @@ border-radius: 6px; background: #1d1e2a; } +.imanginaryDiv { + padding: 18px; +} +.userPermissions { + display: flex; + flex-direction: column; + align-items: flex-start; + flex: 1 0 0; + align-self: stretch; + height: calc(100vh - 175px); + position: relative; + overflow-y: auto; + scrollbar-width: none; + padding-bottom: 60px; +} .header { display: flex; padding-bottom: 24px; @@ -93,6 +108,36 @@ align-self: stretch; } -.imanginaryDiv { - padding: 18px; +@media (max-width: 950px) { + .hiddenMobile { + display: none; + } + .editRoleContainer { + align-self: stretch; + padding: 0 16px; + flex-direction: column; + gap: 0px; + } + .imanginaryDiv { + padding: 5px; + } + .header { + display: none; + } + .roleDetails { + background: none; + padding: 0px 0px 0px 0px; + margin-top: 32x; + } + + .userPermissions { + height: calc(100vh - 295px); + } +} +@media (max-width: 768px) { + .roleDetails { + background: none; + padding: 0px 0px 0px 0px; + width: 100%; + } } diff --git a/frontend/src/app/roles/add/page.jsx b/frontend/src/app/roles/add/page.jsx index 0858539..1e5e91d 100644 --- a/frontend/src/app/roles/add/page.jsx +++ b/frontend/src/app/roles/add/page.jsx @@ -1,5 +1,5 @@ "use client"; -import React from "react"; +import React, { useState } from "react"; import TopHeader from "@/app/components/topHeader/TopHeader"; import globalStyle from "../../globalStyle.module.css"; import addRoleStyle from "./styles.module.css"; @@ -7,8 +7,11 @@ import TextField from "@/app/components/fields/textfield"; import Permissions from "@/app/components/permissions/Permissions"; import useUserForm from "@/app/hooks/useUserForm"; import Alert from "@/app/components/alerts/Alert"; +import Toggle from "@/app/components/mobileToggleTab/Toggle"; const AddRolePage = () => { + // Mobile + const [activeTab, setActiveTab] = useState("details"); const { register, handleSubmit, @@ -36,30 +39,36 @@ const AddRolePage = () => { requiredButtons={["title", "save"]} />
+ {/* Input fields Container */}
{/* User Details */} -
- {/* Header */} +

Role Details

- {/* Input fields */} + {/* Ibalhin ning form na tag */} - {/* Email */}
- {/* Label */}

Name

- {/* Input field */}
{
- {/* Full Name */}
- {/* Label */}

Organization ID

- {/* Input field */}
{
{/* Permissions */} - +
+
+ +
diff --git a/frontend/src/app/roles/add/styles.module.css b/frontend/src/app/roles/add/styles.module.css index 197be8b..485a278 100644 --- a/frontend/src/app/roles/add/styles.module.css +++ b/frontend/src/app/roles/add/styles.module.css @@ -22,7 +22,21 @@ align-items: flex-start; border-radius: 6px; background: #1d1e2a; - background: color(display-p3 0.1137 0.1176 0.1608); +} +.imanginaryDiv { + padding: 18px; +} +.userPermissions { + display: flex; + flex-direction: column; + align-items: flex-start; + flex: 1 0 0; + align-self: stretch; + height: calc(100vh - 175px); + position: relative; + overflow: auto; + scrollbar-width: none; + padding-bottom: 60px; } .header { display: flex; @@ -42,7 +56,6 @@ .header > div > p { width: 163px; color: #d2d3e1; - color: color(display-p3 0.8235 0.8275 0.8784); font-family: Inter; font-size: 20px; font-style: normal; @@ -79,7 +92,6 @@ } .label > p { color: #d2d3e1; - color: color(display-p3 0.8235 0.8275 0.8784); font-family: Inter; font-size: 16px; font-style: normal; @@ -93,6 +105,35 @@ gap: 8px; align-self: stretch; } -.imanginaryDiv { - padding: 18px; +@media (max-width: 950px) { + .hiddenMobile { + display: none; + } + .addRoleContainer { + align-self: stretch; + padding: 0 16px; + flex-direction: column; + gap: 0px; + } + .imanginaryDiv { + padding: 5px; + } + .header { + display: none; + } + .roleDetails { + background: none; + padding: 0px 0px 0px 0px; + margin-top: 32px; + } + .userPermissions { + height: calc(100vh - 295px); + } +} +@media (max-width: 768px) { + .roleDetails { + background: none; + padding: 0px 0px 0px 0px; + width: 100%; + } } diff --git a/frontend/src/app/users/[usersId]/page.jsx b/frontend/src/app/users/[usersId]/page.jsx index 7b79a2b..59bf357 100644 --- a/frontend/src/app/users/[usersId]/page.jsx +++ b/frontend/src/app/users/[usersId]/page.jsx @@ -7,6 +7,7 @@ import { useState } from "react"; import TextField from "@/app/components/fields/textfield"; import SelectField from "@/app/components/select/SelectField"; import Permissions from "@/app/components/permissions/Permissions"; +import Toggle from "@/app/components/mobileToggleTab/Toggle"; const ViewUserPage = () => { const sampleData = [ @@ -26,6 +27,9 @@ const ViewUserPage = () => { { permission: "service.update" }, ]; + // Mobile + const [activeTab, setActiveTab] = useState("details"); + return (
@@ -36,12 +40,22 @@ const ViewUserPage = () => { state="view" requiredButtons={["back", "title", "edit", "download"]} /> -
+
+ {/* Mobile Toggle */} + {/* Input fields Container */}
{/* User Details */} -
- {/* Header */} +

User Details

@@ -61,10 +75,8 @@ const ViewUserPage = () => { ]} />
- {/* Email */}
- {/* Label */}

Email

{/*

(Optional)

*/} @@ -98,7 +110,12 @@ const ViewUserPage = () => {
{/* Permissions */} - +
+
+ +
diff --git a/frontend/src/app/users/[usersId]/styles.module.css b/frontend/src/app/users/[usersId]/styles.module.css index 03a1dc2..4947edc 100644 --- a/frontend/src/app/users/[usersId]/styles.module.css +++ b/frontend/src/app/users/[usersId]/styles.module.css @@ -1,11 +1,11 @@ -.addUserContainer { +.editUserContainer { display: flex; padding: 0px 144px 0 144px; - align-items: flex-start; + /* align-items: flex-start; */ gap: 24px; flex: 1 0 0; align-self: stretch; - position: relative; + /* position: relative; */ } .inputFieldContainer { display: flex; @@ -24,6 +24,22 @@ border-radius: 6px; background: #1d1e2a; } + +.imanginaryDiv { + padding: 18px; +} +.userPermissions { + display: flex; + flex-direction: column; + align-items: flex-start; + flex: 1 0 0; + align-self: stretch; + height: calc(100vh - 175px); + position: relative; + overflow-y: auto; + scrollbar-width: none; + padding-bottom: 60px; +} .header { display: flex; padding-bottom: 24px; @@ -42,7 +58,6 @@ .header > div > p { width: 163px; color: #d2d3e1; - color: color(display-p3 0.8235 0.8275 0.8784); font-family: Inter; font-size: 20px; font-style: normal; @@ -113,6 +128,37 @@ gap: 8px; align-self: stretch; } -.imanginaryDiv { - padding: 18px; + +@media (max-width: 950px) { + .hiddenMobile { + display: none; + } + .editUserContainer { + align-self: stretch; + padding: 0 16px; + flex-direction: column; + gap: 0px; + } + .imanginaryDiv { + padding: 5px; + } + .header { + display: none; + } + .userDetails { + background: none; + padding: 0px 0px 0px 0px; + margin-top: 32x; + } + + .userPermissions { + height: calc(100vh - 295px); + } +} +@media (max-width: 768px) { + .userDetails { + background: none; + padding: 0px 0px 0px 0px; + width: 100%; + } } diff --git a/frontend/src/app/users/add/page.jsx b/frontend/src/app/users/add/page.jsx index 44cd0dc..bb40f7c 100644 --- a/frontend/src/app/users/add/page.jsx +++ b/frontend/src/app/users/add/page.jsx @@ -11,6 +11,8 @@ import Alert from "@/app/components/alerts/Alert"; import Toggle from "@/app/components/mobileToggleTab/Toggle"; const AddUserPage = () => { + // Mobile + const [activeTab, setActiveTab] = useState("details"); const { register, handleSubmit, @@ -20,9 +22,6 @@ const AddUserPage = () => { setTriggerAlert, } = useUserForm(); - // Mobile - const [activeTab, setActiveTab] = useState("details"); - return (
{triggerAlert && ( @@ -69,7 +68,6 @@ const AddUserPage = () => { id="form" onSubmit={handleSubmit(onSubmit)} > - {/* Role and Dropdown */}

Role