diff --git a/client/shared/model/group.ts b/client/shared/model/group.ts index 8e7260b2..98524496 100644 --- a/client/shared/model/group.ts +++ b/client/shared/model/group.ts @@ -11,7 +11,7 @@ export const groupConfigNames = [ 'hideGroupMemberDiscriminator', ] as const; -export type GroupConfigNames = typeof groupConfigNames[number]; +export type GroupConfigNames = (typeof groupConfigNames)[number]; export interface GroupMember { roles: string[]; // 角色组 @@ -468,3 +468,37 @@ export async function deleteGroupMember(groupId: string, memberId: string) { memberId, }); } + +/** + * Get Group Panel Data from group.extra service + */ +export async function getGroupPanelExtraData( + groupId: string, + panelId: string, + name: string +): Promise { + const { data } = await request.post('/api/group/extra/getPanelData', { + groupId, + panelId, + name, + }); + + return data.data ?? null; +} + +/** + * Save Group Panel Data to group.extra service + */ +export async function saveGroupPanelExtraData( + groupId: string, + panelId: string, + name: string, + data: any +): Promise { + await request.post('/api/group/extra/savePanelData', { + groupId, + panelId, + name, + data: typeof data === 'string' ? data : JSON.stringify(data), + }); +} diff --git a/client/web/plugins/com.msgbyte.mdpanel/manifest.json b/client/web/plugins/com.msgbyte.mdpanel/manifest.json new file mode 100644 index 00000000..25b058b6 --- /dev/null +++ b/client/web/plugins/com.msgbyte.mdpanel/manifest.json @@ -0,0 +1,11 @@ +{ + "label": "Markdown Panel", + "label.zh-CN": "Markdown 面板", + "name": "com.msgbyte.mdpanel", + "url": "/plugins/com.msgbyte.mdpanel/index.js", + "version": "0.0.0", + "author": "moonrailgun", + "description": "Add markdown panel support", + "description.zh-CN": "增加 Markdown 面板支持", + "requireRestart": true +} diff --git a/client/web/plugins/com.msgbyte.mdpanel/package.json b/client/web/plugins/com.msgbyte.mdpanel/package.json new file mode 100644 index 00000000..d73418b5 --- /dev/null +++ b/client/web/plugins/com.msgbyte.mdpanel/package.json @@ -0,0 +1,16 @@ +{ + "name": "@plugins/com.msgbyte.mdpanel", + "main": "src/index.tsx", + "version": "0.0.0", + "description": "Add markdown panel support", + "private": true, + "scripts": { + "sync:declaration": "tailchat declaration github" + }, + "dependencies": {}, + "devDependencies": { + "@types/styled-components": "^5.1.26", + "react": "18.2.0", + "styled-components": "^5.3.6" + } +} diff --git a/client/web/plugins/com.msgbyte.mdpanel/src/group/MarkdownPanel.tsx b/client/web/plugins/com.msgbyte.mdpanel/src/group/MarkdownPanel.tsx new file mode 100644 index 00000000..ba154d56 --- /dev/null +++ b/client/web/plugins/com.msgbyte.mdpanel/src/group/MarkdownPanel.tsx @@ -0,0 +1,53 @@ +import React from 'react'; +import { GroupExtraDataPanel, Markdown, TextArea } from '@capital/component'; +import styled from 'styled-components'; +import { Translate } from '../translate'; + +const MainContent = styled.div` + padding: 10px; +`; + +const EditModalContent = styled.div` + padding: 10px; + width: 80vw; + height: 80vh; + display: flex; + flex-direction: column; + + .ant-input { + flex: 1; + resize: none; + } +`; + +const MarkdownPanel: React.FC = React.memo(() => { + return ( + { + return ( + + + + ); + }} + renderEdit={(dataMap: Record) => { + return ( + +
{Translate.editTip}
+ +