feat: add custom setting panel

pull/81/head
moonrailgun 3 years ago
parent f5a5b0c03d
commit 6ee8a0a9f2

@ -1,5 +1,10 @@
import { FullModal } from '@/components/FullModal'; import { FullModal } from '@/components/FullModal';
import { SidebarView, SidebarViewMenuType } from '@/components/SidebarView'; import {
SidebarView,
SidebarViewMenuItem,
SidebarViewMenuType,
} from '@/components/SidebarView';
import { pluginCustomPanel } from '@/plugin/common';
import React, { useCallback, useMemo } from 'react'; import React, { useCallback, useMemo } from 'react';
import { t } from 'tailchat-shared'; import { t } from 'tailchat-shared';
import { SettingsAbout } from './About'; import { SettingsAbout } from './About';
@ -21,9 +26,8 @@ export const SettingsView: React.FC<SettingsViewProps> = React.memo((props) => {
[props.onClose] [props.onClose]
); );
const menu: SidebarViewMenuType[] = useMemo( const menu: SidebarViewMenuType[] = useMemo(() => {
() => [ const common: SidebarViewMenuType = {
{
type: 'group', type: 'group',
title: t('通用'), title: t('通用'),
children: [ children: [
@ -53,10 +57,26 @@ export const SettingsView: React.FC<SettingsViewProps> = React.memo((props) => {
content: <SettingsAbout />, content: <SettingsAbout />,
}, },
], ],
}, };
], const more: SidebarViewMenuItem[] = pluginCustomPanel
[] .filter((p) => p.position === 'setting')
); .map((p) => ({
type: 'item',
title: p.label,
content: React.createElement(p.render),
}));
const menu: SidebarViewMenuType[] = [common];
if (more.length > 0) {
menu.push({
type: 'group',
title: t('更多'),
children: [...more],
});
}
return menu;
}, []);
return ( return (
<FullModal onChangeVisible={handleChangeVisible}> <FullModal onChangeVisible={handleChangeVisible}>

@ -14,9 +14,10 @@ export interface PluginCustomPanel {
* : * :
* *
* - personal: * - personal:
* - setting:
* - navbar: () * - navbar: ()
*/ */
position: 'personal' | 'navbar'; position: 'personal' | 'setting' | 'navbar';
/** /**
* Iconify * Iconify

Loading…
Cancel
Save