feat(openapi): allow edit appName, appDesc and appIcon

perf/livekit-chat-count
moonrailgun 2 years ago
parent 351641cf33
commit e0141f4bc4

@ -6,6 +6,8 @@ import {
SensitiveText,
Button,
Avatar,
AvatarUploader,
DefaultFullModalInputEditorRender,
} from '@capital/component';
import { Translate } from '../../translate';
import { useOpenAppAction } from './useOpenAppAction';
@ -26,7 +28,7 @@ const TwoColumnContainer = styled.div`
const Profile: React.FC = React.memo(() => {
const { appId, appSecret, appName, appDesc, appIcon } = useOpenAppInfo();
const { handleDeleteApp } = useOpenAppAction();
const { handleSetAppInfo, handleDeleteApp } = useOpenAppAction();
return (
<div className="plugin-openapi-app-info_profile">
@ -34,13 +36,31 @@ const Profile: React.FC = React.memo(() => {
<TwoColumnContainer>
<div>
<FullModalField title={Translate.app.appName} content={appName} />
<FullModalField
title={Translate.app.appName}
value={appName}
editable={true}
renderEditor={DefaultFullModalInputEditorRender}
onSave={(val) => handleSetAppInfo('appName', val)}
/>
<FullModalField title={Translate.app.appDesc} content={appDesc} />
<FullModalField
title={Translate.app.appDesc}
value={appDesc}
editable={true}
renderEditor={DefaultFullModalInputEditorRender}
onSave={(val) => handleSetAppInfo('appDesc', val)}
/>
</div>
<div>
<Avatar name={appName} src={appIcon} size={72} />
<AvatarUploader
onUploadSuccess={(fileInfo) => {
handleSetAppInfo('appIcon', fileInfo.url);
}}
>
<Avatar name={appName} src={appIcon} size={72} />
</AvatarUploader>
</div>
</TwoColumnContainer>

@ -18,7 +18,7 @@ const AppInfo: React.FC = React.memo(() => {
() => [
{
type: 'group',
title: appName,
title: <div>{appName}</div>,
children: [
// {
// type: 'item',

@ -3,6 +3,7 @@ import {
postRequest,
showErrorToasts,
useAsyncFn,
useAsyncRequest,
useEvent,
} from '@capital/common';
import { useOpenAppInfo } from '../context';
@ -14,7 +15,7 @@ import type { OpenAppBot, OpenAppCapability, OpenAppOAuth } from '../types';
export function useOpenAppAction() {
const { refresh, appId, capability, onSelectApp } = useOpenAppInfo();
const [{ loading }, handleChangeAppCapability] = useAsyncFn(
const [{ loading }, handleChangeAppCapability] = useAsyncRequest(
async (targetCapability: OpenAppCapability, checked: boolean) => {
const newCapability: OpenAppCapability[] = [...capability];
const findIndex = newCapability.findIndex((c) => c === targetCapability);
@ -38,7 +39,19 @@ export function useOpenAppAction() {
[appId, capability, refresh]
);
const [, handleUpdateOAuthInfo] = useAsyncFn(
const [, handleSetAppInfo] = useAsyncRequest(
async (fieldName: string, fieldValue: string) => {
await postRequest('/openapi/app/setAppInfo', {
appId,
fieldName,
fieldValue,
});
await refresh();
},
[appId, refresh]
);
const [, handleUpdateOAuthInfo] = useAsyncRequest(
async <T extends keyof OpenAppOAuth>(name: T, value: OpenAppOAuth[T]) => {
await postRequest('/openapi/app/setAppOAuthInfo', {
appId,
@ -50,7 +63,7 @@ export function useOpenAppAction() {
[]
);
const [, handleUpdateBotInfo] = useAsyncFn(
const [, handleUpdateBotInfo] = useAsyncRequest(
async <T extends keyof OpenAppBot>(name: T, value: OpenAppBot[T]) => {
await postRequest('/openapi/app/setAppBotInfo', {
appId,
@ -80,6 +93,7 @@ export function useOpenAppAction() {
return {
loading,
handleSetAppInfo,
handleDeleteApp,
handleChangeAppCapability,
handleUpdateOAuthInfo,

@ -92,7 +92,7 @@ export const GroupConfig: React.FC<{
<>
<ImageUploader
aspect={16 / 9}
onUploadSuccess={function (fileInfo: UploadFileResult): void {
onUploadSuccess={(fileInfo: UploadFileResult) => {
handleModifyConfig('groupBackgroundImage', fileInfo.url);
}}
>

@ -78,3 +78,4 @@ export {
export { NoData } from '@/components/NoData';
export { NotFound } from '@/components/NotFound';
export { withKeepAliveOverlay } from '@/components/KeepAliveOverlay/withKeepAliveOverlay';
export { AvatarUploader, ImageUploader } from '@/components/ImageUploader';

@ -67,6 +67,13 @@ class OpenAppService extends TcService {
appId: 'string',
},
});
this.registerAction('setAppInfo', this.setAppInfo, {
params: {
appId: 'string',
fieldName: 'string',
fieldValue: 'string',
},
});
this.registerAction('setAppCapability', this.setAppCapability, {
params: {
appId: 'string',
@ -222,6 +229,45 @@ class OpenAppService extends TcService {
return true;
}
/**
*
*/
async setAppInfo(
ctx: TcContext<{
appId: string;
fieldName: string;
fieldValue: string;
}>
) {
const { appId, fieldName, fieldValue } = ctx.params;
const userId = ctx.meta.userId;
const t = ctx.meta.t;
if (!['appName', 'appDesc', 'appIcon'].includes(fieldName)) {
// 只允许修改以上字段
throw new EntityError(`${t('该数据不允许修改')}: ${fieldName}`);
}
const doc = await this.adapter.model
.findOneAndUpdate(
{
appId,
owner: userId,
},
{
[fieldName]: fieldValue,
},
{
new: true,
}
)
.exec();
this.cleanAppInfoCache(appId);
return await this.transformDocuments(ctx, {}, doc);
}
/**
*
*/

Loading…
Cancel
Save