mirror of
https://github.com/langgenius/dify.git
synced 2025-12-19 22:28:46 +00:00
Some checks failed
autofix.ci / autofix (push) Has been cancelled
Build and Push API & Web / build (api, DIFY_API_IMAGE_NAME, linux/amd64, build-api-amd64) (push) Has been cancelled
Build and Push API & Web / build (api, DIFY_API_IMAGE_NAME, linux/arm64, build-api-arm64) (push) Has been cancelled
Build and Push API & Web / build (web, DIFY_WEB_IMAGE_NAME, linux/amd64, build-web-amd64) (push) Has been cancelled
Build and Push API & Web / build (web, DIFY_WEB_IMAGE_NAME, linux/arm64, build-web-arm64) (push) Has been cancelled
Build and Push API & Web / create-manifest (api, DIFY_API_IMAGE_NAME, merge-api-images) (push) Has been cancelled
Build and Push API & Web / create-manifest (web, DIFY_WEB_IMAGE_NAME, merge-web-images) (push) Has been cancelled
Main CI Pipeline / Check Changed Files (push) Has been cancelled
Main CI Pipeline / API Tests (push) Has been cancelled
Main CI Pipeline / Web Tests (push) Has been cancelled
Main CI Pipeline / Style Check (push) Has been cancelled
Main CI Pipeline / VDB Tests (push) Has been cancelled
Main CI Pipeline / DB Migration Test (push) Has been cancelled
Check i18n Files and Create PR / check-and-update (push) Has been cancelled
50 lines
1.0 KiB
TypeScript
50 lines
1.0 KiB
TypeScript
import { useCallback } from 'react'
|
|
|
|
type GetUrl = () => Promise<string | null | undefined>
|
|
|
|
type AsyncWindowOpenOptions = {
|
|
immediateUrl?: string | null
|
|
target?: string
|
|
features?: string
|
|
onError?: (error: Error) => void
|
|
}
|
|
|
|
export const useAsyncWindowOpen = () => useCallback(async (getUrl: GetUrl, options?: AsyncWindowOpenOptions) => {
|
|
const {
|
|
immediateUrl,
|
|
target = '_blank',
|
|
features,
|
|
onError,
|
|
} = options ?? {}
|
|
|
|
if (immediateUrl) {
|
|
window.open(immediateUrl, target, features)
|
|
return
|
|
}
|
|
|
|
const newWindow = window.open('about:blank', target, features)
|
|
if (!newWindow) {
|
|
onError?.(new Error('Failed to open new window'))
|
|
return
|
|
}
|
|
|
|
try {
|
|
newWindow.opener = null
|
|
}
|
|
catch { /* noop */ }
|
|
|
|
try {
|
|
const url = await getUrl()
|
|
if (url) {
|
|
newWindow.location.href = url
|
|
return
|
|
}
|
|
newWindow.close()
|
|
onError?.(new Error('No url resolved for new window'))
|
|
}
|
|
catch (error) {
|
|
newWindow.close()
|
|
onError?.(error instanceof Error ? error : new Error(String(error)))
|
|
}
|
|
}, [])
|