fix: update api request both in explore and web app

pull/18656/head
NFish 1 year ago
parent 6d5a49196d
commit b57e10bb08

@ -18,7 +18,6 @@ import type {
import { AccessMode } from '@/models/access-control' import { AccessMode } from '@/models/access-control'
export type ChatWithHistoryContextValue = { export type ChatWithHistoryContextValue = {
isFromExplore: boolean
appInfoError?: any appInfoError?: any
appInfoLoading?: boolean appInfoLoading?: boolean
appMeta?: AppMeta appMeta?: AppMeta
@ -56,7 +55,6 @@ export type ChatWithHistoryContextValue = {
} }
export const ChatWithHistoryContext = createContext<ChatWithHistoryContextValue>({ export const ChatWithHistoryContext = createContext<ChatWithHistoryContextValue>({
isFromExplore: false,
accessMode: AccessMode.SPECIFIC_GROUPS_MEMBERS, accessMode: AccessMode.SPECIFIC_GROUPS_MEMBERS,
userCanAccess: false, userCanAccess: false,
currentConversationId: '', currentConversationId: '',

@ -73,8 +73,8 @@ function getFormattedChatList(messages: any[]) {
export const useChatWithHistory = (installedAppInfo?: InstalledApp) => { export const useChatWithHistory = (installedAppInfo?: InstalledApp) => {
const isInstalledApp = useMemo(() => !!installedAppInfo, [installedAppInfo]) const isInstalledApp = useMemo(() => !!installedAppInfo, [installedAppInfo])
const { data: appInfo, isLoading: appInfoLoading, error: appInfoError } = useSWR(installedAppInfo ? null : 'appInfo', fetchAppInfo) const { data: appInfo, isLoading: appInfoLoading, error: appInfoError } = useSWR(installedAppInfo ? null : 'appInfo', fetchAppInfo)
const { isPending: isGettingAccessMode, data: appAccessMode } = useGetAppAccessMode(installedAppInfo?.app.id || appInfo?.app_id) const { isPending: isGettingAccessMode, data: appAccessMode } = useGetAppAccessMode({ appId: installedAppInfo?.app.id || appInfo?.app_id, isInstalledApp })
const { isPending: isCheckingPermission, data: userCanAccessResult } = useGetUserCanAccessApp(installedAppInfo?.app.id || appInfo?.app_id) const { isPending: isCheckingPermission, data: userCanAccessResult } = useGetUserCanAccessApp({ appId: installedAppInfo?.app.id || appInfo?.app_id, isInstalledApp })
useAppFavicon({ useAppFavicon({
enable: !installedAppInfo, enable: !installedAppInfo,

@ -105,12 +105,10 @@ const ChatWithHistory: FC<ChatWithHistoryProps> = ({
export type ChatWithHistoryWrapProps = { export type ChatWithHistoryWrapProps = {
installedAppInfo?: InstalledApp installedAppInfo?: InstalledApp
className?: string className?: string
isFromExplore?: boolean
} }
const ChatWithHistoryWrap: FC<ChatWithHistoryWrapProps> = ({ const ChatWithHistoryWrap: FC<ChatWithHistoryWrapProps> = ({
installedAppInfo, installedAppInfo,
className, className,
isFromExplore,
}) => { }) => {
const media = useBreakpoints() const media = useBreakpoints()
const isMobile = media === MediaType.mobile const isMobile = media === MediaType.mobile
@ -153,7 +151,6 @@ const ChatWithHistoryWrap: FC<ChatWithHistoryWrapProps> = ({
return ( return (
<ChatWithHistoryContext.Provider value={{ <ChatWithHistoryContext.Provider value={{
isFromExplore: !!isFromExplore,
appInfoError, appInfoError,
appInfoLoading, appInfoLoading,
appData, appData,
@ -197,7 +194,6 @@ const ChatWithHistoryWrap: FC<ChatWithHistoryWrapProps> = ({
const ChatWithHistoryWrapWithCheckToken: FC<ChatWithHistoryWrapProps> = ({ const ChatWithHistoryWrapWithCheckToken: FC<ChatWithHistoryWrapProps> = ({
installedAppInfo, installedAppInfo,
className, className,
isFromExplore = false,
}) => { }) => {
const [initialized, setInitialized] = useState(false) const [initialized, setInitialized] = useState(false)
const [appUnavailable, setAppUnavailable] = useState<boolean>(false) const [appUnavailable, setAppUnavailable] = useState<boolean>(false)
@ -233,7 +229,6 @@ const ChatWithHistoryWrapWithCheckToken: FC<ChatWithHistoryWrapProps> = ({
<ChatWithHistoryWrap <ChatWithHistoryWrap
installedAppInfo={installedAppInfo} installedAppInfo={installedAppInfo}
className={className} className={className}
isFromExplore={isFromExplore}
/> />
) )
} }

@ -17,7 +17,7 @@ import { AccessMode } from '@/models/access-control'
const Sidebar = () => { const Sidebar = () => {
const { t } = useTranslation() const { t } = useTranslation()
const { const {
isFromExplore, isInstalledApp,
accessMode, accessMode,
appData, appData,
pinnedConversationList, pinnedConversationList,
@ -120,7 +120,7 @@ const Sidebar = () => {
} }
</div> </div>
<div className='flex items-center justify-between px-4 pb-4 '> <div className='flex items-center justify-between px-4 pb-4 '>
<MenuDropdown hideLogout={isFromExplore || accessMode === AccessMode.PUBLIC} placement='top-start' data={appData?.site} /> <MenuDropdown hideLogout={isInstalledApp || accessMode === AccessMode.PUBLIC} placement='top-start' data={appData?.site} />
{appData?.site.copyright && ( {appData?.site.copyright && (
<div className='text-xs text-gray-400 truncate'> <div className='text-xs text-gray-400 truncate'>
© {(new Date()).getFullYear()} {appData?.site.copyright} © {(new Date()).getFullYear()} {appData?.site.copyright}

@ -17,7 +17,6 @@ import type {
import { AccessMode } from '@/models/access-control' import { AccessMode } from '@/models/access-control'
export type EmbeddedChatbotContextValue = { export type EmbeddedChatbotContextValue = {
isFromExplore: boolean
accessMode?: AccessMode accessMode?: AccessMode
userCanAccess?: boolean userCanAccess?: boolean
appInfoError?: any appInfoError?: any
@ -50,7 +49,6 @@ export type EmbeddedChatbotContextValue = {
} }
export const EmbeddedChatbotContext = createContext<EmbeddedChatbotContextValue>({ export const EmbeddedChatbotContext = createContext<EmbeddedChatbotContextValue>({
isFromExplore: false,
userCanAccess: false, userCanAccess: false,
accessMode: AccessMode.SPECIFIC_GROUPS_MEMBERS, accessMode: AccessMode.SPECIFIC_GROUPS_MEMBERS,
currentConversationId: '', currentConversationId: '',

@ -66,8 +66,8 @@ function getFormattedChatList(messages: any[]) {
export const useEmbeddedChatbot = () => { export const useEmbeddedChatbot = () => {
const isInstalledApp = false const isInstalledApp = false
const { data: appInfo, isLoading: appInfoLoading, error: appInfoError } = useSWR('appInfo', fetchAppInfo) const { data: appInfo, isLoading: appInfoLoading, error: appInfoError } = useSWR('appInfo', fetchAppInfo)
const { isPending: isGettingAccessMode, data: appAccessMode } = useGetAppAccessMode(appInfo?.app_id) const { isPending: isGettingAccessMode, data: appAccessMode } = useGetAppAccessMode({ appId: appInfo?.app_id, isInstalledApp })
const { isPending: isCheckingPermission, data: userCanAccessResult } = useGetUserCanAccessApp(appInfo?.app_id) const { isPending: isCheckingPermission, data: userCanAccessResult } = useGetUserCanAccessApp({ appId: appInfo?.app_id, isInstalledApp })
const appData = useMemo(() => { const appData = useMemo(() => {
return appInfo return appInfo

@ -26,7 +26,6 @@ import Tooltip from '@/app/components/base/tooltip'
const Chatbot = () => { const Chatbot = () => {
const { t } = useTranslation() const { t } = useTranslation()
const { const {
isFromExplore,
userCanAccess, userCanAccess,
isMobile, isMobile,
appInfoError, appInfoError,
@ -110,11 +109,7 @@ const Chatbot = () => {
) )
} }
type EmbeddedChatbotProps = { const EmbeddedChatbotWrapper = () => {
isFromExplore?: boolean
}
const EmbeddedChatbotWrapper = ({ isFromExplore }: EmbeddedChatbotProps) => {
const media = useBreakpoints() const media = useBreakpoints()
const isMobile = media === MediaType.mobile const isMobile = media === MediaType.mobile
const themeBuilder = useThemeContext() const themeBuilder = useThemeContext()
@ -150,7 +145,6 @@ const EmbeddedChatbotWrapper = ({ isFromExplore }: EmbeddedChatbotProps) => {
} = useEmbeddedChatbot() } = useEmbeddedChatbot()
return <EmbeddedChatbotContext.Provider value={{ return <EmbeddedChatbotContext.Provider value={{
isFromExplore: !!isFromExplore,
userCanAccess, userCanAccess,
accessMode, accessMode,
appInfoError, appInfoError,
@ -185,7 +179,7 @@ const EmbeddedChatbotWrapper = ({ isFromExplore }: EmbeddedChatbotProps) => {
</EmbeddedChatbotContext.Provider> </EmbeddedChatbotContext.Provider>
} }
const EmbeddedChatbot = ({ isFromExplore = false }: EmbeddedChatbotProps) => { const EmbeddedChatbot = () => {
const [initialized, setInitialized] = useState(false) const [initialized, setInitialized] = useState(false)
const [appUnavailable, setAppUnavailable] = useState<boolean>(false) const [appUnavailable, setAppUnavailable] = useState<boolean>(false)
const [isUnknownReason, setIsUnknownReason] = useState<boolean>(false) const [isUnknownReason, setIsUnknownReason] = useState<boolean>(false)
@ -214,7 +208,7 @@ const EmbeddedChatbot = ({ isFromExplore = false }: EmbeddedChatbotProps) => {
if (appUnavailable) if (appUnavailable)
return <AppUnavailable isUnknownReason={isUnknownReason} /> return <AppUnavailable isUnknownReason={isUnknownReason} />
return <EmbeddedChatbotWrapper isFromExplore={isFromExplore} /> return <EmbeddedChatbotWrapper />
} }
export default EmbeddedChatbot export default EmbeddedChatbot

@ -28,13 +28,13 @@ const InstalledApp: FC<IInstalledAppProps> = ({
return ( return (
<div className='h-full py-2 pl-0 pr-2 sm:p-2 bg-background-default'> <div className='h-full py-2 pl-0 pr-2 sm:p-2 bg-background-default'>
{installedApp.app.mode !== 'completion' && installedApp.app.mode !== 'workflow' && ( {installedApp.app.mode !== 'completion' && installedApp.app.mode !== 'workflow' && (
<ChatWithHistory isFromExplore installedAppInfo={installedApp} className='rounded-2xl shadow-md overflow-hidden' /> <ChatWithHistory installedAppInfo={installedApp} className='rounded-2xl shadow-md overflow-hidden' />
)} )}
{installedApp.app.mode === 'completion' && ( {installedApp.app.mode === 'completion' && (
<TextGenerationApp isFromExplore isInstalledApp installedAppInfo={installedApp} /> <TextGenerationApp isInstalledApp installedAppInfo={installedApp} />
)} )}
{installedApp.app.mode === 'workflow' && ( {installedApp.app.mode === 'workflow' && (
<TextGenerationApp isFromExplore isWorkflow isInstalledApp installedAppInfo={installedApp} /> <TextGenerationApp isWorkflow isInstalledApp installedAppInfo={installedApp} />
)} )}
</div> </div>
) )

@ -64,14 +64,12 @@ export type IMainProps = {
isInstalledApp?: boolean isInstalledApp?: boolean
installedAppInfo?: InstalledApp installedAppInfo?: InstalledApp
isWorkflow?: boolean isWorkflow?: boolean
isFromExplore?: boolean
} }
const TextGeneration: FC<IMainProps> = ({ const TextGeneration: FC<IMainProps> = ({
isInstalledApp = false, isInstalledApp = false,
installedAppInfo, installedAppInfo,
isWorkflow = false, isWorkflow = false,
isFromExplore = false,
}) => { }) => {
const { notify } = Toast const { notify } = Toast
@ -112,8 +110,8 @@ const TextGeneration: FC<IMainProps> = ({
const [moreLikeThisConfig, setMoreLikeThisConfig] = useState<MoreLikeThisConfig | null>(null) const [moreLikeThisConfig, setMoreLikeThisConfig] = useState<MoreLikeThisConfig | null>(null)
const [textToSpeechConfig, setTextToSpeechConfig] = useState<TextToSpeechConfig | null>(null) const [textToSpeechConfig, setTextToSpeechConfig] = useState<TextToSpeechConfig | null>(null)
const { isPending: isGettingAccessMode, data: appAccessMode } = useGetAppAccessMode(appId) const { isPending: isGettingAccessMode, data: appAccessMode } = useGetAppAccessMode({ appId, isInstalledApp })
const { isPending: isCheckingPermission, data: userCanAccessResult } = useGetUserCanAccessApp(appId) const { isPending: isCheckingPermission, data: userCanAccessResult } = useGetUserCanAccessApp({ appId, isInstalledApp })
// save message // save message
const [savedMessages, setSavedMessages] = useState<SavedMessage[]>([]) const [savedMessages, setSavedMessages] = useState<SavedMessage[]>([])
@ -581,7 +579,7 @@ const TextGeneration: FC<IMainProps> = ({
/> />
<div className='text-lg font-semibold text-gray-800'>{siteInfo.title}</div> <div className='text-lg font-semibold text-gray-800'>{siteInfo.title}</div>
</div> </div>
<MenuDropdown hideLogout={isFromExplore || appAccessMode?.accessMode === AccessMode.PUBLIC} /> <MenuDropdown hideLogout={isInstalledApp || appAccessMode?.accessMode === AccessMode.PUBLIC} />
</div> </div>
{!isPC && ( {!isPC && (
<Button <Button

@ -1,5 +1,6 @@
import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { get, post } from './base' import { get, post } from './base'
import { getAppAccessMode, getUserCanAccess } from './share'
import type { AccessControlAccount, AccessControlGroup, AccessMode, Subject } from '@/models/access-control' import type { AccessControlAccount, AccessControlGroup, AccessMode, Subject } from '@/models/access-control'
import type { App } from '@/types/app' import type { App } from '@/types/app'
@ -64,18 +65,18 @@ export const useUpdateAccessMode = () => {
}) })
} }
export const useGetAppAccessMode = (appId?: string) => { export const useGetAppAccessMode = ({ appId, isInstalledApp }: { appId?: string; isInstalledApp: boolean }) => {
return useQuery({ return useQuery({
queryKey: [NAME_SPACE, 'app-access-mode', appId], queryKey: [NAME_SPACE, 'app-access-mode', appId],
queryFn: () => get<{ accessMode: AccessMode }>(`/enterprise/webapp/app/access-mode?appId=${appId}`), queryFn: () => getAppAccessMode(appId!, isInstalledApp),
enabled: !!appId, enabled: !!appId,
}) })
} }
export const useGetUserCanAccessApp = (appId?: string) => { export const useGetUserCanAccessApp = ({ appId, isInstalledApp }: { appId?: string; isInstalledApp: boolean }) => {
return useQuery({ return useQuery({
queryKey: [NAME_SPACE, 'user-can-access-app', appId], queryKey: [NAME_SPACE, 'user-can-access-app', appId],
queryFn: () => get<{ result: boolean }>(`/enterprise/webapp/permission?appId=${appId}`), queryFn: () => getUserCanAccess(appId!, isInstalledApp),
enabled: !!appId, enabled: !!appId,
}) })
} }

@ -11,6 +11,7 @@ import type {
ConversationItem, ConversationItem,
} from '@/models/share' } from '@/models/share'
import type { ChatConfig } from '@/app/components/base/chat/types' import type { ChatConfig } from '@/app/components/base/chat/types'
import type { AccessMode } from '@/models/access-control'
function getAction(action: 'get' | 'post' | 'del' | 'patch', isInstalledApp: boolean) { function getAction(action: 'get' | 'post' | 'del' | 'patch', isInstalledApp: boolean) {
switch (action) { switch (action) {
@ -220,3 +221,11 @@ export const fetchAccessToken = async (appCode: string) => {
headers.append('X-App-Code', appCode) headers.append('X-App-Code', appCode)
return get('/passport', { headers }) as Promise<{ access_token: string }> return get('/passport', { headers }) as Promise<{ access_token: string }>
} }
export const getAppAccessMode = (appId: string, isInstalledApp: boolean) => {
return (getAction('get', isInstalledApp))<{ accessMode: AccessMode }>(`/enterprise/webapp/app/access-mode?appId=${appId}`)
}
export const getUserCanAccess = (appId: string, isInstalledApp: boolean) => {
return (getAction('get', isInstalledApp))<{ result: boolean }>(`/enterprise/webapp/permission?appId=${appId}`)
}

Loading…
Cancel
Save