mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-10 02:54:15 +00:00
76 lines
2.1 KiB
JavaScript
Executable File
76 lines
2.1 KiB
JavaScript
Executable File
import React from "react"
|
|
import { Translation } from "react-i18next"
|
|
|
|
import Items from "schemas/sidebar"
|
|
import { Icons, createIconRender } from "components/Icons"
|
|
|
|
import "./index.less"
|
|
|
|
export default class NavigationMenu extends React.Component {
|
|
onClick = (id) => {
|
|
window.app.location.push(`/${id}`)
|
|
this.props.close()
|
|
}
|
|
|
|
generateMenus = (items) => {
|
|
// group items it has children to a new array and the rest to a general array
|
|
items = items.reduce((acc, item) => {
|
|
if (item.children) {
|
|
acc.push(item)
|
|
} else {
|
|
acc[0].children.push(item)
|
|
}
|
|
|
|
return acc
|
|
}, [{
|
|
id: "general",
|
|
title: "General",
|
|
icon: "Home",
|
|
children: []
|
|
}])
|
|
|
|
return items.map((group) => {
|
|
return <div key={group.id} className="group">
|
|
<h2>
|
|
{Icons[group.icon] && createIconRender(group.icon)}
|
|
<Translation>
|
|
{(t) => t(group.title)}
|
|
</Translation>
|
|
</h2>
|
|
<div className="items">
|
|
{
|
|
group.children.map((item) => {
|
|
return this.renderItem(item)
|
|
})
|
|
}
|
|
</div>
|
|
</div>
|
|
})
|
|
}
|
|
|
|
renderItem = (item, index) => {
|
|
return <div
|
|
key={item.id}
|
|
id={item.id}
|
|
onClick={() => this.onClick(item.id)}
|
|
className="item"
|
|
>
|
|
<div className="icon">
|
|
{Icons[item.icon] && createIconRender(item.icon)}
|
|
</div>
|
|
<div className="name">
|
|
<h1>
|
|
<Translation>
|
|
{(t) => t(item.title ?? item.id)}
|
|
</Translation>
|
|
</h1>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
render() {
|
|
return <div className="navigation">
|
|
{this.generateMenus(Items)}
|
|
</div>
|
|
}
|
|
} |