feat: add regPluginGroupConfigItem

pull/90/head
moonrailgun 2 years ago
parent 4c65c1a36e
commit 41cdfb0715

@ -11,7 +11,7 @@ export const groupConfigNames = [
'hideGroupMemberDiscriminator',
] as const;
export type GroupConfigNames = (typeof groupConfigNames)[number];
export type GroupConfigNames = (typeof groupConfigNames)[number] | string; // string is plugin config
export interface GroupMember {
roles: string[]; // 角色组

@ -1,15 +1,11 @@
import React from 'react';
import {
model,
showSuccessToasts,
t,
useAsyncRequest,
useGroupInfo,
} from 'tailchat-shared';
import { model, t, useAsyncRequest, useGroupInfo } from 'tailchat-shared';
import { Loading } from '@/components/Loading';
import { FullModalField } from '@/components/FullModal/Field';
import { FullModalCommonTitle } from '@/components/FullModal/CommonTitle';
import { Switch } from 'antd';
import { pluginGroupConfigItems } from '@/plugin/common';
import { ensurePluginNamePrefix } from '@/utils/plugin-helper';
export const GroupConfig: React.FC<{
groupId: string;
@ -47,6 +43,22 @@ export const GroupConfig: React.FC<{
/>
}
/>
{pluginGroupConfigItems.map((item) => {
const name = ensurePluginNamePrefix(item.name);
return (
<FullModalField
key={name}
title={item.title}
tip={item.tip}
content={item.render({
value: config[name],
onChange: (val: any) => handleModifyConfig(name, val),
loading,
})}
/>
);
})}
</div>
);
});

@ -12,6 +12,7 @@ import {
} from 'tailchat-shared';
import type { MetaFormFieldMeta } from 'tailchat-design';
import type { FullModalFactoryConfig } from '@/components/FullModal/Factory';
import type { ReactElement } from 'react';
/**
*
@ -301,3 +302,14 @@ interface PluginInboxItem {
*/
export const [pluginInboxItemMap, regPluginInboxItemMap] =
buildRegMap<PluginInboxItem>();
export const [pluginGroupConfigItems, regPluginGroupConfigItem] = buildRegList<{
name: string;
title: string;
tip?: string;
render: (props: {
value: any;
onChange: (val: unknown) => void;
loading: boolean;
}) => ReactElement;
}>();

@ -9,3 +9,11 @@ export function findPluginPanelInfoByName(
): PluginGroupPanel | undefined {
return pluginGroupPanel.find((p) => p.name === pluginPanelName);
}
export function ensurePluginNamePrefix(name: string): string {
if (typeof name !== 'string') {
throw new Error('Plugin Name must be string');
}
return name.startsWith('plugin:') ? name : `plugin:${name}`;
}

Loading…
Cancel
Save