| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | 
							- 'use client'
 
- import type { FC } from 'react'
 
- import React, { useCallback } from 'react'
 
- import { useTranslation } from 'react-i18next'
 
- import {
 
-   PortalToFollowElem,
 
-   PortalToFollowElemContent,
 
-   PortalToFollowElemTrigger,
 
- } from '@/app/components/base/portal-to-follow-elem'
 
- import Badge from '@/app/components/base/badge'
 
- import type {
 
-   OffsetOptions,
 
-   Placement,
 
- } from '@floating-ui/react'
 
- import { useVersionListOfPlugin } from '@/service/use-plugins'
 
- import useTimestamp from '@/hooks/use-timestamp'
 
- import cn from '@/utils/classnames'
 
- type Props = {
 
-   disabled?: boolean
 
-   isShow: boolean
 
-   onShowChange: (isShow: boolean) => void
 
-   pluginID: string
 
-   currentVersion: string
 
-   trigger: React.ReactNode
 
-   placement?: Placement
 
-   offset?: OffsetOptions
 
-   onSelect: ({
 
-     version,
 
-     unique_identifier,
 
-   }: {
 
-     version: string
 
-     unique_identifier: string
 
-   }) => void
 
- }
 
- const PluginVersionPicker: FC<Props> = ({
 
-   disabled = false,
 
-   isShow,
 
-   onShowChange,
 
-   pluginID,
 
-   currentVersion,
 
-   trigger,
 
-   placement = 'bottom-start',
 
-   offset = {
 
-     mainAxis: 4,
 
-     crossAxis: -16,
 
-   },
 
-   onSelect,
 
- }) => {
 
-   const { t } = useTranslation()
 
-   const format = t('appLog.dateTimeFormat').split(' ')[0]
 
-   const { formatDate } = useTimestamp()
 
-   const handleTriggerClick = () => {
 
-     if (disabled) return
 
-     onShowChange(true)
 
-   }
 
-   const { data: res } = useVersionListOfPlugin(pluginID)
 
-   const handleSelect = useCallback(({ version, unique_identifier }: {
 
-     version: string
 
-     unique_identifier: string
 
-   }) => {
 
-     if (currentVersion === version)
 
-       return
 
-     onSelect({ version, unique_identifier })
 
-     onShowChange(false)
 
-   }, [currentVersion, onSelect, onShowChange])
 
-   return (
 
-     <PortalToFollowElem
 
-       placement={placement}
 
-       offset={offset}
 
-       open={isShow}
 
-       onOpenChange={onShowChange}
 
-     >
 
-       <PortalToFollowElemTrigger
 
-         className={cn('inline-flex cursor-pointer items-center', disabled && 'cursor-default')}
 
-         onClick={handleTriggerClick}
 
-       >
 
-         {trigger}
 
-       </PortalToFollowElemTrigger>
 
-       <PortalToFollowElemContent className='z-[1000]'>
 
-         <div className="relative w-[209px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur p-1 shadow-lg">
 
-           <div className='system-xs-medium-uppercase px-3 pb-0.5 pt-1 text-text-tertiary'>
 
-             {t('plugin.detailPanel.switchVersion')}
 
-           </div>
 
-           <div className='relative'>
 
-             {res?.data.versions.map(version => (
 
-               <div
 
-                 key={version.unique_identifier}
 
-                 className={cn(
 
-                   'flex h-7 cursor-pointer items-center gap-1 rounded-lg px-3 py-1 hover:bg-state-base-hover',
 
-                   currentVersion === version.version && 'cursor-default opacity-30 hover:bg-transparent',
 
-                 )}
 
-                 onClick={() => handleSelect({
 
-                   version: version.version,
 
-                   unique_identifier: version.unique_identifier,
 
-                 })}
 
-               >
 
-                 <div className='flex grow items-center'>
 
-                   <div className='system-sm-medium text-text-secondary'>{version.version}</div>
 
-                   {currentVersion === version.version && <Badge className='ml-1' text='CURRENT'/>}
 
-                 </div>
 
-                 <div className='system-xs-regular shrink-0 text-text-tertiary'>{formatDate(version.created_at, format)}</div>
 
-               </div>
 
-             ))}
 
-           </div>
 
-         </div>
 
-       </PortalToFollowElemContent>
 
-     </PortalToFollowElem>
 
-   )
 
- }
 
- export default React.memo(PluginVersionPicker)
 
 
  |