mirror of
https://github.com/langgenius/dify.git
synced 2026-05-06 02:18:08 +08:00
Signed-off-by: majiayu000 <1835304752@qq.com> Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com> Signed-off-by: -LAN- <laipz8200@outlook.com> Signed-off-by: yihong0618 <zouzou0208@gmail.com> Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com> Co-authored-by: 盐粒 Yanli <yanli@dify.ai> Co-authored-by: wangxiaolei <fatelei@gmail.com> Co-authored-by: Stephen Zhou <38493346+hyoban@users.noreply.github.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Cursx <33718736+Cursx@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: lif <1835304752@qq.com> Co-authored-by: 非法操作 <hjlarry@163.com> Co-authored-by: Asuka Minato <i@asukaminato.eu.org> Co-authored-by: fenglin <790872612@qq.com> Co-authored-by: qiaofenglin <qiaofenglin@baidu.com> Co-authored-by: -LAN- <laipz8200@outlook.com> Co-authored-by: TomoOkuyama <49631611+TomoOkuyama@users.noreply.github.com> Co-authored-by: Tomo Okuyama <tomo.okuyama@intersystems.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: zyssyz123 <916125788@qq.com> Co-authored-by: hj24 <mambahj24@gmail.com> Co-authored-by: Coding On Star <447357187@qq.com> Co-authored-by: CodingOnStar <hanxujiang@dify.ai> Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com> Co-authored-by: Xiangxuan Qu <fghpdf@outlook.com> Co-authored-by: fghpdf <fghpdf@users.noreply.github.com> Co-authored-by: coopercoder <whitetiger0127@163.com> Co-authored-by: zhaiguangpeng <zhaiguangpeng@didiglobal.com> Co-authored-by: Junyan Qin (Chin) <rockchinq@gmail.com> Co-authored-by: E.G <146701565+GlobalStar117@users.noreply.github.com> Co-authored-by: GlobalStar117 <GlobalStar117@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: CodingOnStar <hanxujiang@dify.com> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com> Co-authored-by: heyszt <270985384@qq.com> Co-authored-by: NeatGuyCoding <15627489+NeatGuyCoding@users.noreply.github.com> Co-authored-by: Yeuoly <45712896+Yeuoly@users.noreply.github.com> Co-authored-by: zxhlyh <jasonapring2015@outlook.com> Co-authored-by: moonpanda <chuanzegao@163.com> Co-authored-by: warlocgao <warlocgao@tencent.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: KVOJJJin <jzongcode@gmail.com> Co-authored-by: eux <euxx@users.noreply.github.com> Co-authored-by: bangjiehan <bangjiehan@gmail.com> Co-authored-by: FFXN <31929997+FFXN@users.noreply.github.com> Co-authored-by: Jyong <76649700+JohnJyong@users.noreply.github.com> Co-authored-by: Nie Ronghua <nieronghua@sf-express.com> Co-authored-by: JQSevenMiao <141806521+JQSevenMiao@users.noreply.github.com> Co-authored-by: jiasiqi <jiasiqi3@tal.com> Co-authored-by: Seokrin Taron Sung <sungsjade@gmail.com> Co-authored-by: CrabSAMA <40541269+CrabSAMA@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: yihong <zouzou0208@gmail.com> Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: Wu Tianwei <30284043+WTW0313@users.noreply.github.com> Co-authored-by: yessenia <yessenia.contact@gmail.com> Co-authored-by: Jax <anobaka@qq.com> Co-authored-by: niveshdandyan <155956228+niveshdandyan@users.noreply.github.com> Co-authored-by: OSS Contributor <oss-contributor@example.com> Co-authored-by: niveshdandyan <niveshdandyan@users.noreply.github.com> Co-authored-by: Sean Kenneth Doherty <Smaster7772@gmail.com>
133 lines
4.1 KiB
TypeScript
133 lines
4.1 KiB
TypeScript
'use client'
|
|
|
|
import type { PluginDetail } from '../../../types'
|
|
import { useBoolean } from 'ahooks'
|
|
import { useCallback, useMemo, useState } from 'react'
|
|
import { useGlobalPublicStore } from '@/context/global-public-context'
|
|
import useReferenceSetting from '../../../plugin-page/use-reference-setting'
|
|
import { AUTO_UPDATE_MODE } from '../../../reference-setting-modal/auto-update-setting/types'
|
|
import { PluginSource } from '../../../types'
|
|
|
|
export type VersionTarget = {
|
|
version: string | undefined
|
|
unique_identifier: string | undefined
|
|
isDowngrade?: boolean
|
|
}
|
|
|
|
export type ModalStates = {
|
|
isShowUpdateModal: boolean
|
|
showUpdateModal: () => void
|
|
hideUpdateModal: () => void
|
|
isShowPluginInfo: boolean
|
|
showPluginInfo: () => void
|
|
hidePluginInfo: () => void
|
|
isShowDeleteConfirm: boolean
|
|
showDeleteConfirm: () => void
|
|
hideDeleteConfirm: () => void
|
|
deleting: boolean
|
|
showDeleting: () => void
|
|
hideDeleting: () => void
|
|
}
|
|
|
|
export type VersionPickerState = {
|
|
isShow: boolean
|
|
setIsShow: (show: boolean) => void
|
|
targetVersion: VersionTarget
|
|
setTargetVersion: (version: VersionTarget) => void
|
|
isDowngrade: boolean
|
|
setIsDowngrade: (downgrade: boolean) => void
|
|
}
|
|
|
|
export type UseDetailHeaderStateReturn = {
|
|
modalStates: ModalStates
|
|
versionPicker: VersionPickerState
|
|
hasNewVersion: boolean
|
|
isAutoUpgradeEnabled: boolean
|
|
isFromGitHub: boolean
|
|
isFromMarketplace: boolean
|
|
}
|
|
|
|
export const useDetailHeaderState = (detail: PluginDetail): UseDetailHeaderStateReturn => {
|
|
const { enable_marketplace } = useGlobalPublicStore(s => s.systemFeatures)
|
|
const { referenceSetting } = useReferenceSetting()
|
|
|
|
const {
|
|
source,
|
|
version,
|
|
latest_version,
|
|
latest_unique_identifier,
|
|
plugin_id,
|
|
} = detail
|
|
|
|
const isFromGitHub = source === PluginSource.github
|
|
const isFromMarketplace = source === PluginSource.marketplace
|
|
const [isShow, setIsShow] = useState(false)
|
|
const [targetVersion, setTargetVersion] = useState<VersionTarget>({
|
|
version: latest_version,
|
|
unique_identifier: latest_unique_identifier,
|
|
})
|
|
const [isDowngrade, setIsDowngrade] = useState(false)
|
|
|
|
const [isShowUpdateModal, { setTrue: showUpdateModal, setFalse: hideUpdateModal }] = useBoolean(false)
|
|
const [isShowPluginInfo, { setTrue: showPluginInfo, setFalse: hidePluginInfo }] = useBoolean(false)
|
|
const [isShowDeleteConfirm, { setTrue: showDeleteConfirm, setFalse: hideDeleteConfirm }] = useBoolean(false)
|
|
const [deleting, { setTrue: showDeleting, setFalse: hideDeleting }] = useBoolean(false)
|
|
|
|
const hasNewVersion = useMemo(() => {
|
|
if (isFromMarketplace)
|
|
return !!latest_version && latest_version !== version
|
|
return false
|
|
}, [isFromMarketplace, latest_version, version])
|
|
|
|
const { auto_upgrade: autoUpgradeInfo } = referenceSetting || {}
|
|
|
|
const isAutoUpgradeEnabled = useMemo(() => {
|
|
if (!enable_marketplace || !autoUpgradeInfo || !isFromMarketplace)
|
|
return false
|
|
if (autoUpgradeInfo.strategy_setting === 'disabled')
|
|
return false
|
|
if (autoUpgradeInfo.upgrade_mode === AUTO_UPDATE_MODE.update_all)
|
|
return true
|
|
if (autoUpgradeInfo.upgrade_mode === AUTO_UPDATE_MODE.partial && autoUpgradeInfo.include_plugins.includes(plugin_id))
|
|
return true
|
|
if (autoUpgradeInfo.upgrade_mode === AUTO_UPDATE_MODE.exclude && !autoUpgradeInfo.exclude_plugins.includes(plugin_id))
|
|
return true
|
|
return false
|
|
}, [autoUpgradeInfo, plugin_id, isFromMarketplace, enable_marketplace])
|
|
|
|
const handleSetTargetVersion = useCallback((version: VersionTarget) => {
|
|
setTargetVersion(version)
|
|
if (version.isDowngrade !== undefined)
|
|
setIsDowngrade(version.isDowngrade)
|
|
}, [])
|
|
|
|
return {
|
|
modalStates: {
|
|
isShowUpdateModal,
|
|
showUpdateModal,
|
|
hideUpdateModal,
|
|
isShowPluginInfo,
|
|
showPluginInfo,
|
|
hidePluginInfo,
|
|
isShowDeleteConfirm,
|
|
showDeleteConfirm,
|
|
hideDeleteConfirm,
|
|
deleting,
|
|
showDeleting,
|
|
hideDeleting,
|
|
},
|
|
versionPicker: {
|
|
isShow,
|
|
setIsShow,
|
|
targetVersion,
|
|
setTargetVersion: handleSetTargetVersion,
|
|
isDowngrade,
|
|
setIsDowngrade,
|
|
},
|
|
hasNewVersion,
|
|
isAutoUpgradeEnabled,
|
|
isFromGitHub,
|
|
isFromMarketplace,
|
|
}
|
|
}
|