dify
/
web
/app
/components
/header
/account-setting
/members-page
/invited-modal
/invitation-link.tsx
| 'use client' | |
| import React, { useCallback, useEffect, useRef, useState } from 'react' | |
| import { t } from 'i18next' | |
| import copy from 'copy-to-clipboard' | |
| import s from './index.module.css' | |
| import type { SuccessInvitationResult } from '.' | |
| import Tooltip from '@/app/components/base/tooltip' | |
| import { randomString } from '@/utils' | |
| type IInvitationLinkProps = { | |
| value: SuccessInvitationResult | |
| } | |
| const InvitationLink = ({ | |
| value, | |
| }: IInvitationLinkProps) => { | |
| const [isCopied, setIsCopied] = useState(false) | |
| const selector = useRef(`invite-link-${randomString(4)}`) | |
| const copyHandle = useCallback(() => { | |
| copy(`${!value.url.startsWith('http') ? window.location.origin : ''}${value.url}`) | |
| setIsCopied(true) | |
| }, [value]) | |
| useEffect(() => { | |
| if (isCopied) { | |
| const timeout = setTimeout(() => { | |
| setIsCopied(false) | |
| }, 1000) | |
| return () => { | |
| clearTimeout(timeout) | |
| } | |
| } | |
| }, [isCopied]) | |
| return ( | |
| <div className='flex rounded-lg bg-gray-100 hover:bg-gray-100 border border-gray-200 py-2 items-center'> | |
| <div className="flex items-center flex-grow h-5"> | |
| <div className='flex-grow bg-gray-100 text-[13px] relative h-full'> | |
| <Tooltip | |
| popupContent={isCopied ? `${t('appApi.copied')}` : `${t('appApi.copy')}`} | |
| > | |
| <div className='absolute top-0 left-0 w-full pl-2 pr-2 truncate cursor-pointer r-0' onClick={copyHandle}>{value.url}</div> | |
| </Tooltip> | |
| </div> | |
| <div className="flex-shrink-0 h-4 bg-gray-200 border" /> | |
| <Tooltip | |
| popupContent={isCopied ? `${t('appApi.copied')}` : `${t('appApi.copy')}`} | |
| > | |
| <div className="px-0.5 flex-shrink-0"> | |
| <div className={`box-border w-[30px] h-[30px] flex items-center justify-center rounded-lg hover:bg-gray-100 cursor-pointer ${s.copyIcon} ${isCopied ? s.copied : ''}`} onClick={copyHandle}> | |
| </div> | |
| </div> | |
| </Tooltip> | |
| </div> | |
| </div> | |
| ) | |
| } | |
| export default InvitationLink | |