Add layout

This commit is contained in:
2025-09-17 12:17:02 +07:00
parent 291cbd5f94
commit b25aaf124c
7 changed files with 402 additions and 0 deletions

110
src/layout/LayoutMenu.jsx Normal file
View File

@@ -0,0 +1,110 @@
import React, { useState } from 'react';
import { Link } from 'react-router-dom';
import { Menu, Typography, Image } from 'antd';
import { getSessionData } from '../components/Global/Formatter';
import { HomeOutlined,
DatabaseOutlined,
SettingOutlined,
UserOutlined,
AntDesignOutlined,
ShoppingCartOutlined,
ShoppingOutlined,
HistoryOutlined,
DollarOutlined,
RollbackOutlined,
ProductOutlined
} from '@ant-design/icons';
const { Text } = Typography;
const allItems = [
{
key: 'home',
icon: <HomeOutlined style={{fontSize:'19px'}} />,
label: <Link to="/dashboard/home" className='fontMenus'>Home</Link>,
},
{
key: 'master',
icon: <DatabaseOutlined style={{fontSize:'19px'}} />,
label: 'Master',
children: [
{
key: 'master-device',
icon: <DatabaseOutlined style={{fontSize:'19px'}} />,
label: <Link to="/master/device">Device</Link>,
},
],
},
];
const LayoutMenu = () => {
const [stateOpenKeys, setStateOpenKeys] = useState(['home']);
const getLevelKeys = items1 => {
const key = {};
const func = (items2, level = 1) => {
items2.forEach(item => {
if (item.key) {
key[item.key] = level;
}
if (item.children) {
func(item.children, level + 1);
}
});
};
func(items1);
return key;
};
const levelKeys = getLevelKeys(allItems);
const onOpenChange = openKeys => {
const currentOpenKey = openKeys.find(key => stateOpenKeys.indexOf(key) === -1);
if (currentOpenKey !== undefined) {
const repeatIndex = openKeys.filter(key => key !== currentOpenKey).findIndex(key => levelKeys[key] === levelKeys[currentOpenKey]);
setStateOpenKeys(
openKeys.filter((_, index) => index !== repeatIndex).filter(key => levelKeys[key] <= levelKeys[currentOpenKey]),
);
} else {
setStateOpenKeys(openKeys);
}
};
const session = getSessionData();
const isAdmin = session?.user?.user_id;
const karyawan = ()=>{
return allItems.filter(
item => item.key !== 'setting'
// tambahkan menu jika terdapat menu yang di sembunyikan dari user karyawan
// && item.key !== 'master'
// && item.key !== 'master'
).map(item=>{
if(item.key === 'master'){
return{
...item,
// buka command dibawah jika terdapat sub menu yang di sembunyikan
// children: item.children.filter(
// child => child.key !== 'master-product'
// tambahkan menu jika terdapat menu yang di sembunyikan dari user karyawan
// && child.key !== 'master-service'
// )
}
}
return item;
});
};
const items = isAdmin === 1 ? allItems : karyawan();
return (
<Menu
theme="dark"
mode="inline"
items={items}
defaultSelectedKeys={['home']}
openKeys={stateOpenKeys}
onOpenChange={onOpenChange}
/>
);
};
export default LayoutMenu;