https://dev.kronoz.win/r/marzneshin.git
| 1 |
68f084a |
Mardin |
2y ago |
// CommandItems.tsx |
| 2 |
68f084a |
Mardin |
2y ago |
import React, { FC } from "react"; |
| 3 |
68f084a |
Mardin |
2y ago |
import { |
| 4 |
68f084a |
Mardin |
2y ago |
CommandGroup, |
| 5 |
68f084a |
Mardin |
2y ago |
CommandItem, |
| 6 |
68f084a |
Mardin |
2y ago |
CommandSeparator, |
| 7 |
68f084a |
Mardin |
2y ago |
} from "@marzneshin/components"; |
| 8 |
68f084a |
Mardin |
2y ago |
import { useNavigate } from "@tanstack/react-router"; |
| 9 |
68f084a |
Mardin |
2y ago |
import { useTranslation } from "react-i18next"; |
| 10 |
68f084a |
Mardin |
2y ago |
import { CommandGroupConfig, CommandItemConfig } from "./commands"; |
| 11 |
68f084a |
Mardin |
2y ago |
|
| 12 |
68f084a |
Mardin |
2y ago |
interface CommandItemsProps { |
| 13 |
68f084a |
Mardin |
2y ago |
items: CommandGroupConfig[]; |
| 14 |
68f084a |
Mardin |
2y ago |
isSudo: () => boolean; |
| 15 |
68f084a |
Mardin |
2y ago |
setOpen: (open: boolean) => void; |
| 16 |
68f084a |
Mardin |
2y ago |
} |
| 17 |
68f084a |
Mardin |
2y ago |
|
| 18 |
68f084a |
Mardin |
2y ago |
export const CommandItems: FC<CommandItemsProps> = ({ items, isSudo, setOpen }) => { |
| 19 |
68f084a |
Mardin |
2y ago |
const navigate = useNavigate(); |
| 20 |
68f084a |
Mardin |
2y ago |
const { t } = useTranslation(); |
| 21 |
68f084a |
Mardin |
2y ago |
|
| 22 |
68f084a |
Mardin |
2y ago |
return ( |
| 23 |
68f084a |
Mardin |
2y ago |
<> |
| 24 |
68f084a |
Mardin |
2y ago |
{items.map((group: CommandGroupConfig, groupIndex: number) => ( |
| 25 |
68f084a |
Mardin |
2y ago |
<React.Fragment key={group.group}> |
| 26 |
68f084a |
Mardin |
2y ago |
<CommandGroup heading={group.group}> |
| 27 |
68f084a |
Mardin |
2y ago |
{group.items.map((item: CommandItemConfig) => ( |
| 28 |
68f084a |
Mardin |
2y ago |
(!item.sudo || isSudo()) && ( |
| 29 |
68f084a |
Mardin |
2y ago |
<CommandItem |
| 30 |
68f084a |
Mardin |
2y ago |
key={item.label} |
| 31 |
68f084a |
Mardin |
2y ago |
onSelect={() => { |
| 32 |
68f084a |
Mardin |
2y ago |
navigate({ to: item.path }); |
| 33 |
68f084a |
Mardin |
2y ago |
setOpen(false); |
| 34 |
68f084a |
Mardin |
2y ago |
}} |
| 35 |
68f084a |
Mardin |
2y ago |
> |
| 36 |
68f084a |
Mardin |
2y ago |
<item.icon className="mr-2 size-4" /> |
| 37 |
68f084a |
Mardin |
2y ago |
<span>{t(item.label)}</span> |
| 38 |
68f084a |
Mardin |
2y ago |
</CommandItem> |
| 39 |
68f084a |
Mardin |
2y ago |
) |
| 40 |
68f084a |
Mardin |
2y ago |
))} |
| 41 |
68f084a |
Mardin |
2y ago |
</CommandGroup> |
| 42 |
68f084a |
Mardin |
2y ago |
{groupIndex < items.length - 1 && <CommandSeparator />} |
| 43 |
68f084a |
Mardin |
2y ago |
</React.Fragment> |
| 44 |
68f084a |
Mardin |
2y ago |
))} |
| 45 |
68f084a |
Mardin |
2y ago |
</> |
| 46 |
68f084a |
Mardin |
2y ago |
); |
| 47 |
68f084a |
Mardin |
2y ago |
}; |