feat: test api key modal
This commit is contained in:
@@ -283,5 +283,7 @@ export const {
|
|||||||
useCheckLicenseMutation,
|
useCheckLicenseMutation,
|
||||||
useGetLicenseQuery,
|
useGetLicenseQuery,
|
||||||
useGetLicensePaymentUrlMutation,
|
useGetLicensePaymentUrlMutation,
|
||||||
useLazyGetGeneratedLicenseQuery
|
useLazyGetGeneratedLicenseQuery,
|
||||||
|
useLazyGetBotRelatedChannelsQuery,
|
||||||
|
useSendMessageByBotMutation
|
||||||
} = serverApi;
|
} = serverApi;
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
import { useEffect, useRef, useState } from 'react';
|
||||||
|
// import { toast } from 'react-hot-toast';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import Modal from '../../../common/component/Modal';
|
||||||
|
import Button from '../../../common/component/styled/Button';
|
||||||
|
import Textarea from '../../../common/component/styled/Textarea';
|
||||||
|
import StyledModal from '../../../common/component/styled/Modal';
|
||||||
|
import { useLazyGetBotRelatedChannelsQuery, useSendMessageByBotMutation } from '../../../app/services/server';
|
||||||
|
import clsx from 'clsx';
|
||||||
|
import { MessageTypes } from '../../../app/config';
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
closeModal: () => void
|
||||||
|
}
|
||||||
|
const TestAPIKeyModal = ({ closeModal }: Props) => {
|
||||||
|
const [currCid, setCurrCid] = useState<number | null>(null);
|
||||||
|
const [msgType, setMsgType] = useState("text");
|
||||||
|
const [getChannels, { data }] = useLazyGetBotRelatedChannelsQuery();
|
||||||
|
const [sendMessage] = useSendMessageByBotMutation();
|
||||||
|
const inputRef = useRef<HTMLTextAreaElement | undefined>();
|
||||||
|
const msgInputRef = useRef<HTMLTextAreaElement | undefined>();
|
||||||
|
const [key, setKey] = useState("");
|
||||||
|
// const { t } = useTranslation("setting", { keyPrefix: "bot" });
|
||||||
|
const { t: ct } = useTranslation();
|
||||||
|
const handleSetKey = () => {
|
||||||
|
const input = inputRef?.current;
|
||||||
|
if (input && input.value) {
|
||||||
|
setKey(input.value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const handleSetChannel = (cid: number) => {
|
||||||
|
setCurrCid(cid);
|
||||||
|
};
|
||||||
|
const handleSetMsgType = (type: string) => {
|
||||||
|
setMsgType(type);
|
||||||
|
};
|
||||||
|
const handleSend = () => {
|
||||||
|
const input = msgInputRef?.current;
|
||||||
|
if (input && input.value && currCid) {
|
||||||
|
sendMessage({ cid: currCid, api_key: key, type: msgType, content: input.value });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
useEffect(() => {
|
||||||
|
if (key) {
|
||||||
|
getChannels({ api_key: key });
|
||||||
|
}
|
||||||
|
}, [key]);
|
||||||
|
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Modal id="modal-modal">
|
||||||
|
<StyledModal
|
||||||
|
title={`Input API Key`}
|
||||||
|
buttons={
|
||||||
|
<>
|
||||||
|
<Button className="cancel" onClick={closeModal}>
|
||||||
|
{ct("action.cancel")}
|
||||||
|
</Button>
|
||||||
|
<Button onClick={handleSetKey} >{ct("action.done")}</Button>
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{key ? (data ? <ul className="divide-y-2">
|
||||||
|
{data.map(({ gid, name, is_public }) => {
|
||||||
|
return <li key={gid} className={clsx("py-1 px-2 text-gray-500 cursor-pointer hover:bg-slate-50", gid == currCid ? 'bg-slate-100' : "")} onClick={handleSetChannel.bind(null, gid)}>
|
||||||
|
# {name} {!is_public ? "🔒" : ""}
|
||||||
|
</li>;
|
||||||
|
})}
|
||||||
|
</ul> : null)
|
||||||
|
: <Textarea rows={6} ref={inputRef} placeholder='Input API Key First' />}
|
||||||
|
|
||||||
|
{currCid ? <div className='mt-4 flex flex-col items-start gap-2'>
|
||||||
|
<Textarea ref={msgInputRef} placeholder='Input Something...' />
|
||||||
|
<ul className='flex gap-1'>
|
||||||
|
{Object.entries(MessageTypes).map(([key, value]) => {
|
||||||
|
return <li onClick={handleSetMsgType.bind(null, key)} className={clsx("py-1 px-2 text-gray-500 cursor-pointer hover:bg-slate-50", msgType == key ? 'bg-slate-100' : "")} key={key}>{value}</li>;
|
||||||
|
})}
|
||||||
|
</ul>
|
||||||
|
<Button className='mini' onClick={handleSend} >Send</Button>
|
||||||
|
</div> : null}
|
||||||
|
</StyledModal>
|
||||||
|
</Modal>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default TestAPIKeyModal;
|
||||||
@@ -11,6 +11,7 @@ import IconDelete from '../../../assets/icons/delete.svg';
|
|||||||
import CreateModal from './CreateModal';
|
import CreateModal from './CreateModal';
|
||||||
import WebhookEdit from './WebhookEdit';
|
import WebhookEdit from './WebhookEdit';
|
||||||
import WebhookModal from './WebhookModal';
|
import WebhookModal from './WebhookModal';
|
||||||
|
import TestAPIKeyModal from './TestAPIKeyModal';
|
||||||
import DeleteModal from './DeleteModal';
|
import DeleteModal from './DeleteModal';
|
||||||
import BotAPIKeys from './BotAPIKeys';
|
import BotAPIKeys from './BotAPIKeys';
|
||||||
import { toast } from 'react-hot-toast';
|
import { toast } from 'react-hot-toast';
|
||||||
@@ -27,6 +28,7 @@ const tdClass = "p-6 whitespace-nowrap text-sm font-medium text-gray-900 align-t
|
|||||||
type WebhookParams = { webhook?: string, uid: number };
|
type WebhookParams = { webhook?: string, uid: number };
|
||||||
type DeleteParams = { name: string, uid: number };
|
type DeleteParams = { name: string, uid: number };
|
||||||
export default function BotConfig() {
|
export default function BotConfig() {
|
||||||
|
const [testAPIKeyModalVisible, setTestAPIKeyModalVisible] = useState(false);
|
||||||
const [updateAvatar, { isSuccess: updateAvatarSuccess }] = useUpdateAvatarByAdminMutation();
|
const [updateAvatar, { isSuccess: updateAvatarSuccess }] = useUpdateAvatarByAdminMutation();
|
||||||
const [createModalVisible, setCreateModalVisible] = useState(false);
|
const [createModalVisible, setCreateModalVisible] = useState(false);
|
||||||
const [currWebhookParams, setCurrWebhookParams] = useState<WebhookParams | undefined>(undefined);
|
const [currWebhookParams, setCurrWebhookParams] = useState<WebhookParams | undefined>(undefined);
|
||||||
@@ -35,6 +37,9 @@ export default function BotConfig() {
|
|||||||
const { t } = useTranslation("setting", { keyPrefix: "bot" });
|
const { t } = useTranslation("setting", { keyPrefix: "bot" });
|
||||||
const { t: ct } = useTranslation();
|
const { t: ct } = useTranslation();
|
||||||
|
|
||||||
|
const toggleTestAPIKeyModalVisible = () => {
|
||||||
|
setTestAPIKeyModalVisible(prev => !prev);
|
||||||
|
};
|
||||||
const toggleCreateModalVisible = () => {
|
const toggleCreateModalVisible = () => {
|
||||||
setCreateModalVisible(prev => !prev);
|
setCreateModalVisible(prev => !prev);
|
||||||
};
|
};
|
||||||
@@ -106,16 +111,17 @@ export default function BotConfig() {
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<Button onClick={toggleCreateModalVisible} className="ghost small">{ct("action.add")}</Button>
|
{/* <Button onClick={toggleCreateModalVisible} className="ghost small">{ct("action.add")}</Button> */}
|
||||||
{/* <div className="flex gap-4">
|
<div className="flex gap-4">
|
||||||
<Button onClick={toggleCreateModalVisible} className="small">{ct("action.add")}</Button>
|
<Button onClick={toggleCreateModalVisible} className="small">{ct("action.add")}</Button>
|
||||||
<Button onClick={toggleCreateModalVisible} className="ghost small stroke-slate-200 fill-gray-200"> Test API Key</Button>
|
<Button onClick={toggleTestAPIKeyModalVisible} className="ghost small stroke-slate-200 fill-gray-200"> Test API Key</Button>
|
||||||
</div> */}
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{createModalVisible && <CreateModal closeModal={toggleCreateModalVisible} />}
|
{createModalVisible && <CreateModal closeModal={toggleCreateModalVisible} />}
|
||||||
{currWebhookParams && <WebhookModal closeModal={toggleWebhookModalVisible} {...currWebhookParams} />}
|
{currWebhookParams && <WebhookModal closeModal={toggleWebhookModalVisible} {...currWebhookParams} />}
|
||||||
{currDeleteParams && <DeleteModal closeModal={toggleDeleteModalVisible} {...currDeleteParams} />}
|
{currDeleteParams && <DeleteModal closeModal={toggleDeleteModalVisible} {...currDeleteParams} />}
|
||||||
|
{testAPIKeyModalVisible && <TestAPIKeyModal closeModal={toggleTestAPIKeyModalVisible} />}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user