|
|
@ -4,6 +4,9 @@ import { isValidJson, showToasts, t, useAsyncRequest } from 'tailchat-shared';
|
|
|
|
import { pluginManager } from '../manager';
|
|
|
|
import { pluginManager } from '../manager';
|
|
|
|
import { parsePluginManifest } from '../utils';
|
|
|
|
import { parsePluginManifest } from '../utils';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 手动安装
|
|
|
|
|
|
|
|
*/
|
|
|
|
export const ManualInstall: React.FC = React.memo(() => {
|
|
|
|
export const ManualInstall: React.FC = React.memo(() => {
|
|
|
|
const [json, setJson] = useState('');
|
|
|
|
const [json, setJson] = useState('');
|
|
|
|
|
|
|
|
|
|
|
@ -15,7 +18,7 @@ export const ManualInstall: React.FC = React.memo(() => {
|
|
|
|
const invalid = useMemo(() => !isValidJson(json), [json]);
|
|
|
|
const invalid = useMemo(() => !isValidJson(json), [json]);
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
<div>
|
|
|
|
<div className="p-2">
|
|
|
|
<Input.TextArea
|
|
|
|
<Input.TextArea
|
|
|
|
placeholder={t(
|
|
|
|
placeholder={t(
|
|
|
|
'请手动输入JSON信息,如果你不明确你在做什么请不要使用该功能'
|
|
|
|
'请手动输入JSON信息,如果你不明确你在做什么请不要使用该功能'
|
|
|
@ -23,19 +26,22 @@ export const ManualInstall: React.FC = React.memo(() => {
|
|
|
|
disabled={loading}
|
|
|
|
disabled={loading}
|
|
|
|
value={json}
|
|
|
|
value={json}
|
|
|
|
onChange={(e) => setJson(e.target.value)}
|
|
|
|
onChange={(e) => setJson(e.target.value)}
|
|
|
|
|
|
|
|
rows={18}
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
<div className="text-red-500">
|
|
|
|
<div className="text-red-500">
|
|
|
|
{invalid && json !== '' && t('不是一个合法的JSON字符串')}
|
|
|
|
{invalid && json !== '' && t('不是一个合法的JSON字符串')}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<Button
|
|
|
|
<div className="text-right">
|
|
|
|
loading={loading}
|
|
|
|
<Button
|
|
|
|
disabled={invalid}
|
|
|
|
loading={loading}
|
|
|
|
onClick={handleInstallPlugin}
|
|
|
|
disabled={invalid}
|
|
|
|
>
|
|
|
|
onClick={handleInstallPlugin}
|
|
|
|
{t('确认')}
|
|
|
|
>
|
|
|
|
</Button>
|
|
|
|
{t('确认')}
|
|
|
|
|
|
|
|
</Button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
|
|
|