diff --git a/app/components/Configurator.tsx b/app/components/Configurator.tsx index c6992a4c..5ab66da7 100644 --- a/app/components/Configurator.tsx +++ b/app/components/Configurator.tsx @@ -1,7 +1,7 @@ "use client" import { useState } from 'react' -import copy from 'copy-to-clipboard' +import { useCopy } from '@/hooks/use-copy' export const Configurator = ({ args, template, env }: { args: string[], @@ -15,6 +15,7 @@ export const Configurator = ({ args, template, env }: { })); const [values, setValues] = useState(envVariables.map(v => v.defaultVal || '')); + const { copyToClipboard } = useCopy(); const handleCopy = () => { // 处理环境变量 @@ -34,7 +35,7 @@ export const Configurator = ({ args, template, env }: { ); }); - copy(result); + copyToClipboard(result, '配置已复制到剪贴板'); }; return ( @@ -65,4 +66,4 @@ export const Configurator = ({ args, template, env }: { ); -}; \ No newline at end of file +}; \ No newline at end of file diff --git a/app/components/EnvVariableConfig.tsx b/app/components/EnvVariableConfig.tsx index ed3a0ff9..48d8a43b 100644 --- a/app/components/EnvVariableConfig.tsx +++ b/app/components/EnvVariableConfig.tsx @@ -1,23 +1,19 @@ "use client"; import { useState } from 'react'; -import copy from 'copy-to-clipboard'; +import { useCopy } from '@/hooks/use-copy'; export function EnvVariableConfig({ variableNames, format }: { variableNames: { key: string; name: string; defaultVal?: string }[]; format?: "yaml" | "env" }) { const [values, setValues] = useState(variableNames.map((name) => name.defaultVal || '')); - const [copyButtonText, setCopyButtonText] = useState('复制'); // 新增状态用于控制按钮文本 + const { copyToClipboard } = useCopy(); const handleCopy = () => { if (format === 'yaml') { const yamlContent = variableNames.map((name, index) => `- ${name.key}=${values[index]}`).join('\n'); - copy(yamlContent); + copyToClipboard(yamlContent, '环境变量配置已复制'); } else { const envContent = variableNames.map((name, index) => `${name.key}=${values[index]}`).join('\n'); - copy(envContent); + copyToClipboard(envContent, '环境变量配置已复制'); } - setCopyButtonText('复制成功'); - setTimeout(() => { - setCopyButtonText('复制'); - }, 3000); }; const handleChange = (index: number, value: string) => { @@ -68,7 +64,7 @@ export function EnvVariableConfig({ variableNames, format }: { variableNames: { className="border bg-black w-full text-white px-4 py-2 rounded-lg text-sm transform transition-all duration-300 focus:outline-none hover:bg-gray-700 dark:border-gray-700 dark:bg-gray-800" onClick={handleCopy} > - {copyButtonText} + 复制配置 diff --git a/app/layout.tsx b/app/layout.tsx index 320ed9e6..fc887234 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -3,6 +3,7 @@ import { Provider } from './components/provider'; import type { ReactNode } from 'react'; import type { Metadata } from 'next' import { env } from 'std-env' +import { ToastProvider } from '@/contexts/toast-context'; const baseUrl = env.NEXT_PUBLIC_BASE_URL || 'https://mx-space.js.org' const metaDescription = `Mix Space 是一个小型个人空间站点程序,采用前后端分离设计,适合喜欢写作的你。` const metaTitle = 'Mix Space 文档 - 现代化的个人空间解决方案' @@ -34,7 +35,9 @@ export default function RootLayout({