/* * Copyright 2025 coze-dev Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { useRef } from 'react'; import { useShallow } from 'zustand/react/shallow'; import { BotMode } from '@coze-arch/bot-api/playground_api'; import { useBotSkillStore } from '@coze-studio/bot-detail-store/bot-skill'; import { useBotInfoStore } from '@coze-studio/bot-detail-store/bot-info'; import { manuallySwitchAgent } from '@coze-studio/bot-detail-store'; import { ShortcutBar, getUIModeByBizScene, type ShortCutCommand, } from '@coze-common/chat-area-plugins-chat-shortcuts'; import { useShowBackGround } from '@coze-common/chat-area/hooks/public/use-show-bgackground'; import { type ChatInputIntegrationController } from '@coze-common/chat-area'; import s from '../../index.module.less'; export const ShortcutBarRender = ({ controller, onShortcutActive, }: { controller: ChatInputIntegrationController; onShortcutActive?: (shortcut: ShortCutCommand | undefined) => void; }) => ( ); const ShortcutBarRenderImpl: React.FC<{ controller: ChatInputIntegrationController; onShortcutActive?: (shortcut: ShortCutCommand | undefined) => void; }> = ({ controller, onShortcutActive }) => { const activeShortcutRef = useRef(undefined); const showBackground = useShowBackGround(); const { mode, botName, botUrl } = useBotInfoStore( useShallow(state => ({ botUrl: state.icon_url, botName: state.name, mode: state.mode, })), ); const { chatShortcuts } = useBotSkillStore( useShallow(state => ({ chatShortcuts: state.shortcut, })), ); const chatShortcutsWithBotInfo = chatShortcuts.shortcut_list?.map( shortcut => ({ ...shortcut, bot_info: { icon_url: botUrl, name: botName, }, }), ); const singleModeShortcuts = chatShortcutsWithBotInfo?.filter( shortcut => !shortcut.agent_id, ); const showShortcuts = { [BotMode.SingleMode]: singleModeShortcuts, [BotMode.WorkflowMode]: [], [BotMode.MultiMode]: chatShortcutsWithBotInfo, }[mode]; const defaultId = showShortcuts?.at(0)?.command_id; if (mode === BotMode.WorkflowMode) { return null; } return ( { activeShortcutRef.current = shortcutInfo; // 开启template快捷指令时,隐藏输入框&快捷指令bar const chatInputSlotVisible = !isTemplateShortcutActive; controller.setChatInputSlotVisible(chatInputSlotVisible); // 当template快捷指令激活时,禁用发送多模态消息 onShortcutActive?.(shortcutInfo); // 如果指定了agent,切换到指定的agent if (mode === BotMode.MultiMode) { shortcutInfo?.agent_id && manuallySwitchAgent(shortcutInfo.agent_id); } }} /> ); };