| parser.add_argument("icon_type", type=str, location="json") | parser.add_argument("icon_type", type=str, location="json") | ||||
| parser.add_argument("icon", type=str, location="json") | parser.add_argument("icon", type=str, location="json") | ||||
| parser.add_argument("icon_background", type=str, location="json") | parser.add_argument("icon_background", type=str, location="json") | ||||
| parser.add_argument("icon_url", type=str, location="json") | |||||
| args = parser.parse_args() | args = parser.parse_args() | ||||
| with Session(db.engine) as session: | with Session(db.engine) as session: | ||||
| description=args.get("description"), | description=args.get("description"), | ||||
| icon_type=args.get("icon_type"), | icon_type=args.get("icon_type"), | ||||
| icon=args.get("icon"), | icon=args.get("icon"), | ||||
| icon_url=args.get("icon_url"), | |||||
| icon_background=args.get("icon_background"), | icon_background=args.get("icon_background"), | ||||
| ) | ) | ||||
| session.commit() | session.commit() |
| description: str | None | description: str | None | ||||
| icon_type: str | None | icon_type: str | None | ||||
| icon: str | None | icon: str | None | ||||
| icon_url: str | None | |||||
| icon_background: str | None | icon_background: str | None | ||||
| app_id: str | None | app_id: str | None | ||||
| description: Optional[str] = None, | description: Optional[str] = None, | ||||
| icon_type: Optional[str] = None, | icon_type: Optional[str] = None, | ||||
| icon: Optional[str] = None, | icon: Optional[str] = None, | ||||
| icon_url: Optional[str] = None, | |||||
| icon_background: Optional[str] = None, | icon_background: Optional[str] = None, | ||||
| app_id: Optional[str] = None, | app_id: Optional[str] = None, | ||||
| ) -> Import: | ) -> Import: | ||||
| icon_type=icon_type, | icon_type=icon_type, | ||||
| icon=icon, | icon=icon, | ||||
| icon_background=icon_background, | icon_background=icon_background, | ||||
| icon_url=icon_url, | |||||
| app_id=app_id, | app_id=app_id, | ||||
| ) | ) | ||||
| redis_client.setex( | redis_client.setex( | ||||
| description=description, | description=description, | ||||
| icon_type=icon_type, | icon_type=icon_type, | ||||
| icon=icon, | icon=icon, | ||||
| icon_url=icon_url, | |||||
| icon_background=icon_background, | icon_background=icon_background, | ||||
| dependencies=check_dependencies_pending_data, | dependencies=check_dependencies_pending_data, | ||||
| ) | ) | ||||
| description: Optional[str] = None, | description: Optional[str] = None, | ||||
| icon_type: Optional[str] = None, | icon_type: Optional[str] = None, | ||||
| icon: Optional[str] = None, | icon: Optional[str] = None, | ||||
| icon_url: Optional[str] = None, | |||||
| icon_background: Optional[str] = None, | icon_background: Optional[str] = None, | ||||
| dependencies: Optional[list[PluginDependency]] = None, | dependencies: Optional[list[PluginDependency]] = None, | ||||
| ) -> App: | ) -> App: | ||||
| # Set icon type | # Set icon type | ||||
| icon_type_value = icon_type or app_data.get("icon_type") | icon_type_value = icon_type or app_data.get("icon_type") | ||||
| if icon_type_value in ["emoji", "link", "image"]: | |||||
| if icon_type_value in ["emoji", "link"]: | |||||
| icon_type = icon_type_value | icon_type = icon_type_value | ||||
| else: | else: | ||||
| icon_type = "emoji" | icon_type = "emoji" | ||||
| icon = icon or str(app_data.get("icon", "")) | icon = icon or str(app_data.get("icon", "")) | ||||
| icon_url = icon_url or str(app_data.get("icon_url", "")) | |||||
| if app: | if app: | ||||
| # Update existing app | # Update existing app | ||||
| app.name = name or app_data.get("name", app.name) | app.name = name or app_data.get("name", app.name) | ||||
| app.icon_type = icon_type | app.icon_type = icon_type | ||||
| app.icon = icon | app.icon = icon | ||||
| app.icon_background = icon_background or app_data.get("icon_background", app.icon_background) | app.icon_background = icon_background or app_data.get("icon_background", app.icon_background) | ||||
| app.icon_url = icon_url or app_data.get("icon_url", app.icon_url) | |||||
| app.updated_by = account.id | app.updated_by = account.id | ||||
| else: | else: | ||||
| if account.current_tenant_id is None: | if account.current_tenant_id is None: |
| } | } | ||||
| }, [app.id, mutateApps, notify, onRefresh, t]) | }, [app.id, mutateApps, notify, onRefresh, t]) | ||||
| const onCopy: DuplicateAppModalProps['onConfirm'] = async ({ name, icon_type, icon, icon_background, icon_url }) => { | |||||
| const onCopy: DuplicateAppModalProps['onConfirm'] = async ({ name, icon_type, icon, icon_background }) => { | |||||
| try { | try { | ||||
| console.log('icon_url', icon_url) | |||||
| const newApp = await copyApp({ | const newApp = await copyApp({ | ||||
| appID: app.id, | appID: app.id, | ||||
| name, | name, | ||||
| icon_type, | icon_type, | ||||
| icon, | icon, | ||||
| icon_background, | icon_background, | ||||
| icon_url, | |||||
| mode: app.mode, | mode: app.mode, | ||||
| }) | }) | ||||
| setShowDuplicateModal(false) | setShowDuplicateModal(false) |
| onConfirm: (info: { | onConfirm: (info: { | ||||
| name: string | name: string | ||||
| icon_type: AppIconType | icon_type: AppIconType | ||||
| icon_url?: string | null | |||||
| icon: string | icon: string | ||||
| icon_background?: string | null | icon_background?: string | null | ||||
| }) => Promise<void> | }) => Promise<void> | ||||
| name, | name, | ||||
| icon_type: appIcon.type, | icon_type: appIcon.type, | ||||
| icon: appIcon.type === 'emoji' ? appIcon.icon : appIcon.fileId, | icon: appIcon.type === 'emoji' ? appIcon.icon : appIcon.fileId, | ||||
| icon_url: appIcon.type === 'image' ? appIcon.url : undefined, | |||||
| icon_background: appIcon.type === 'emoji' ? appIcon.background : undefined, | icon_background: appIcon.type === 'emoji' ? appIcon.background : undefined, | ||||
| }) | }) | ||||
| onHide() | onHide() |
| return post<AppDetailResponse>('apps', { body: { name, icon_type, icon, icon_background, mode, description, model_config: config } }) | return post<AppDetailResponse>('apps', { body: { name, icon_type, icon, icon_background, mode, description, model_config: config } }) | ||||
| } | } | ||||
| export const updateAppInfo: Fetcher<AppDetailResponse, { appID: string; name: string; icon_type: AppIconType; icon: string; icon_background?: string; icon_url?: string; description: string; use_icon_as_answer_icon?: boolean }> = ({ appID, name, icon_type, icon, icon_background, icon_url, description, use_icon_as_answer_icon }) => { | |||||
| return put<AppDetailResponse>(`apps/${appID}`, { body: { name, icon_type, icon, icon_background, icon_url, description, use_icon_as_answer_icon } }) | |||||
| export const updateAppInfo: Fetcher<AppDetailResponse, { appID: string; name: string; icon_type: AppIconType; icon: string; icon_background?: string; description: string; use_icon_as_answer_icon?: boolean }> = ({ appID, name, icon_type, icon, icon_background, description, use_icon_as_answer_icon }) => { | |||||
| return put<AppDetailResponse>(`apps/${appID}`, { body: { name, icon_type, icon, icon_background, description, use_icon_as_answer_icon } }) | |||||
| } | } | ||||
| export const copyApp: Fetcher<AppDetailResponse, { appID: string; name: string; icon_type: AppIconType; icon: string; icon_background?: string | null; icon_url?: string | null; mode: AppMode; description?: string }> = ({ appID, name, icon_type, icon, icon_background, icon_url, mode, description }) => { | |||||
| return post<AppDetailResponse>(`apps/${appID}/copy`, { body: { name, icon_type, icon, icon_background, icon_url, mode, description } }) | |||||
| export const copyApp: Fetcher<AppDetailResponse, { appID: string; name: string; icon_type: AppIconType; icon: string; icon_background?: string | null; mode: AppMode; description?: string }> = ({ appID, name, icon_type, icon, icon_background, mode, description }) => { | |||||
| return post<AppDetailResponse>(`apps/${appID}/copy`, { body: { name, icon_type, icon, icon_background, mode, description } }) | |||||
| } | } | ||||
| export const exportAppConfig: Fetcher<{ data: string }, { appID: string; include?: boolean }> = ({ appID, include = false }) => { | export const exportAppConfig: Fetcher<{ data: string }, { appID: string; include?: boolean }> = ({ appID, include = false }) => { |