diff --git a/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/general.tsx b/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/general.tsx
new file mode 100644
index 0000000..69ebee8
--- /dev/null
+++ b/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/general.tsx
@@ -0,0 +1,61 @@
+import { Button, Input, Select, ToggleInput } from "@imphnen-frontend-service/ui/atoms"
+import { cn } from "@imphnen-frontend-service/utils"
+import { FC } from "react"
+
+const labelClass = cn('text-neutral-800 text-[10px] font-medium mb-1.5 inline-block md:text-xs md:mb-2 xl:text-p3')
+
+export const GeneralSettings: FC = () => {
+ return (
+
+
General Settings
+
+
+
+
+
Platform Settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Legal Settings
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/notification.tsx b/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/notification.tsx
new file mode 100644
index 0000000..10f010c
--- /dev/null
+++ b/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/notification.tsx
@@ -0,0 +1,34 @@
+import { Button, Textarea, ToggleInput } from "@imphnen-frontend-service/ui/atoms"
+import { FC } from "react"
+
+export const NotificationSettings: FC = () => {
+ return (
+
+
Notification Settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/payment.tsx b/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/payment.tsx
new file mode 100644
index 0000000..a2d3099
--- /dev/null
+++ b/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/payment.tsx
@@ -0,0 +1,50 @@
+import { Button, Input, Select, Textarea } from "@imphnen-frontend-service/ui/atoms"
+import { cn } from "@imphnen-frontend-service/utils"
+import { FC } from "react"
+
+const labelClass = cn('text-neutral-800 text-[10px] font-medium mb-1.5 inline-block md:text-xs md:mb-2 xl:text-p3')
+
+export const PaymentSettings: FC = () => {
+ return (
+
+
Payment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Invoice
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/security.tsx b/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/security.tsx
new file mode 100644
index 0000000..9e6f2af
--- /dev/null
+++ b/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/security.tsx
@@ -0,0 +1,35 @@
+import { Button, Input } from "@imphnen-frontend-service/ui/atoms";
+import { cn } from "@imphnen-frontend-service/utils";
+import { FC } from "react";
+
+const labelClass = cn('text-neutral-800 text-[10px] font-medium mb-1.5 inline-block md:text-xs md:mb-2 xl:text-p3')
+
+export const SecuritySettings: FC = () => {
+ return (
+
+
Security Settings
+
+
+
+
+
+
Auto logout setelah X menit tidak aktif
+
+
+
+
+
Misal: 5 kali salah login = lock akun
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/user-roles-permission.tsx b/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/user-roles-permission.tsx
new file mode 100644
index 0000000..037cd57
--- /dev/null
+++ b/apps/backoffice/src/app/(protected)/settings-dimentorin/_components/user-roles-permission.tsx
@@ -0,0 +1,118 @@
+import { DeleteOutlined, UserSwitchOutlined } from "@ant-design/icons";
+import { Button } from "@imphnen-frontend-service/ui/atoms";
+import { DataTable } from "@imphnen-frontend-service/ui/organisms";
+import { cn } from "@imphnen-frontend-service/utils";
+import { ColumnDef, getCoreRowModel, getPaginationRowModel, PaginationState, RowSelectionState, useReactTable } from "@tanstack/react-table";
+import { FC, useState } from "react";
+
+type UserRolesPermissionType = {
+ id: number
+ role: string
+ totalUser: number
+}
+
+const mockData: UserRolesPermissionType[] = Array.from({ length: 90 }, (_, i) => ({
+ id: i + 1,
+ role: ['Admin', 'Super Admin', 'Mentee', 'Mentor'][Math.floor(Math.random() * 4)],
+ totalUser: 10
+}))
+
+export const UserRolesPermission: FC = () => {
+ const [rowSelection, setRowSelection] = useState({})
+ const [pagination, setPagination] = useState({
+ pageIndex: 0,
+ pageSize: 9,
+ });
+
+ const columns: ColumnDef[] = [
+ {
+ id: 'select',
+ meta: { cellClassName: cn("w-20") },
+ header: ({ table }) => (
+
+ ),
+ cell: ({ row }) => (
+
+ ),
+ },
+ {
+ id: 'role',
+ header: 'Role',
+ accessorKey: 'role',
+ },
+ {
+ id: 'totalUser',
+ header: 'Total User',
+ accessorKey: 'totalUser',
+ },
+ {
+ header: 'Action',
+ meta: { cellClassName: cn("w-96") },
+ cell: ({ row }) => (
+
+
+
+
+ ),
+ },
+ ]
+
+ const table = useReactTable({
+ data: mockData,
+ columns,
+ state: {
+ pagination,
+ rowSelection,
+ },
+ enableRowSelection: true,
+ onRowSelectionChange: setRowSelection,
+ getCoreRowModel: getCoreRowModel(),
+ getPaginationRowModel: getPaginationRowModel(),
+ onPaginationChange: setPagination,
+ pageCount: Math.ceil(mockData.length / pagination.pageSize),
+ manualPagination: false,
+ });
+
+ return (
+
+
+
User Roles & Permissions
+
+
+
+
+
+
+
+ )
+}
diff --git a/apps/backoffice/src/app/(protected)/settings-dimentorin/page.tsx b/apps/backoffice/src/app/(protected)/settings-dimentorin/page.tsx
new file mode 100644
index 0000000..7699fe9
--- /dev/null
+++ b/apps/backoffice/src/app/(protected)/settings-dimentorin/page.tsx
@@ -0,0 +1,53 @@
+import { BackofficeWrapper } from "@imphnen-frontend-service/ui/organisms"
+import { cn, For } from "@imphnen-frontend-service/utils"
+import { useState } from "react"
+import { GeneralSettings } from "./_components/general"
+import { UserRolesPermission } from "./_components/user-roles-permission"
+import { NotificationSettings } from "./_components/notification"
+import { SecuritySettings } from "./_components/security"
+import { PaymentSettings } from "./_components/payment"
+
+const TABS = {
+ general: "General Settings",
+ userRolePermissions: "User Roles & Permissions",
+ notification: "Notification Settings",
+ security: "Security",
+ payment: "Payment",
+} as const
+type Tabs = typeof TABS[keyof typeof TABS]
+
+export default function Components(): React.ReactElement {
+ const [activeTab, setActiveTab] = useState(TABS.general)
+
+ return (
+
+ Settings
+
+
+
+
+ {(tab) => (
+
+ )}
+
+
+
+ {activeTab === TABS.general &&
}
+ {activeTab === TABS.userRolePermissions &&
}
+ {activeTab === TABS.notification &&
}
+ {activeTab === TABS.security &&
}
+ {activeTab === TABS.payment &&
}
+
+
+
+ )
+}
diff --git a/libs/ui/src/atoms/index.ts b/libs/ui/src/atoms/index.ts
index 7e95c4a..2d67752 100644
--- a/libs/ui/src/atoms/index.ts
+++ b/libs/ui/src/atoms/index.ts
@@ -1,4 +1,5 @@
export * from './button';
export * from './input';
export * from './textarea';
-export * from './select'
\ No newline at end of file
+export * from './select'
+export * from './toggle';
\ No newline at end of file
diff --git a/libs/ui/src/atoms/toggle/index.ts b/libs/ui/src/atoms/toggle/index.ts
new file mode 100644
index 0000000..ed0fbdd
--- /dev/null
+++ b/libs/ui/src/atoms/toggle/index.ts
@@ -0,0 +1 @@
+export * from './toggle'
diff --git a/libs/ui/src/atoms/toggle/toggle.tsx b/libs/ui/src/atoms/toggle/toggle.tsx
new file mode 100644
index 0000000..c0d8f40
--- /dev/null
+++ b/libs/ui/src/atoms/toggle/toggle.tsx
@@ -0,0 +1,27 @@
+import { cn } from "@imphnen-frontend-service/utils";
+import { DetailedHTMLProps, FC, HTMLAttributes } from "react";
+
+export type ToggleInputProps = DetailedHTMLProps<
+ HTMLAttributes,
+ HTMLInputElement
+> & {
+ label?: string
+ labelClassName?: string
+}
+
+export const ToggleInput: FC = ({ label, className, labelClassName, ...rest }) => {
+ return (
+
+ );
+}
diff --git a/libs/ui/src/organisms/backoffice-sidebar/backoffice-sidebar.tsx b/libs/ui/src/organisms/backoffice-sidebar/backoffice-sidebar.tsx
index c7cec92..a23ecdd 100644
--- a/libs/ui/src/organisms/backoffice-sidebar/backoffice-sidebar.tsx
+++ b/libs/ui/src/organisms/backoffice-sidebar/backoffice-sidebar.tsx
@@ -4,6 +4,8 @@ import {
InboxOutlined,
LogoutOutlined,
ReloadOutlined,
+ ScheduleOutlined,
+ SettingOutlined,
UsergroupAddOutlined,
UserOutlined,
UserSwitchOutlined,
@@ -23,7 +25,8 @@ const MENUS = [
{ label: 'Validasi Transaksi', href: '/transactions', icon: },
{ label: 'Data Pengiriman Hadiah', href: '/prizes', icon: },
{ label: 'User - Dimentorin', href: '/users-dimentorin', icon: },
- { label: 'Session - Dimentorin', href: '/session-dimentorin', icon: },
+ { label: 'Session - Dimentorin', href: '/session-dimentorin', icon: },
+ { label: 'Settings - Dimentorin', href: '/settings-dimentorin', icon: },
]
export const BackofficeSidebar: FC = (): ReactElement => {