* Add tsconfig.json for common * Prefer `const` over `let` over `var` * Kill dead code * Fix some trivial Typescript issues * Turn on Typescript linting in common except for no-explicit-any * Correctly specify tsconfig dir name in functions eslintrc * Give react children explicit types * Add explicit types to removeUndefinedProps * Create StripeSession type * Give event in Dropdown an explicit type * Revert "Give event in Dropdown an explicit type" This reverts commit80604310f2. * Give bids in NewBidTable an explicit type * Cast results of removeUndefinedProps when neccessary * Fix type of JoinSpans * Revert "Cast results of removeUndefinedProps when neccessary" This reverts commit5541617bc8. * Revert "Add explicit types to removeUndefinedProps" This reverts commitccf8ffb0b5. * Give React children types everywhere * Give event a type * Give event correct type * Lint * Standardize React import Co-authored-by: Marshall Polaris <marshall@pol.rs>
		
			
				
	
	
		
			42 lines
		
	
	
		
			989 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			989 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import clsx from 'clsx'
 | 
						|
import { ReactNode } from 'react'
 | 
						|
import Link from 'next/link'
 | 
						|
 | 
						|
export const SiteLink = (props: {
 | 
						|
  href: string
 | 
						|
  children?: ReactNode
 | 
						|
  onClick?: () => void
 | 
						|
  className?: string
 | 
						|
}) => {
 | 
						|
  const { href, children, onClick, className } = props
 | 
						|
 | 
						|
  return (
 | 
						|
    <MaybeLink href={href}>
 | 
						|
      <a
 | 
						|
        className={clsx(
 | 
						|
          'z-10 break-words hover:underline hover:decoration-indigo-400 hover:decoration-2',
 | 
						|
          className
 | 
						|
        )}
 | 
						|
        href={href}
 | 
						|
        target={href.startsWith('http') ? '_blank' : undefined}
 | 
						|
        style={{ /* For iOS safari */ wordBreak: 'break-word' }}
 | 
						|
        onClick={(e) => {
 | 
						|
          e.stopPropagation()
 | 
						|
          if (onClick) onClick()
 | 
						|
        }}
 | 
						|
      >
 | 
						|
        {children}
 | 
						|
      </a>
 | 
						|
    </MaybeLink>
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
function MaybeLink(props: { href: string; children: ReactNode }) {
 | 
						|
  const { href, children } = props
 | 
						|
  return href.startsWith('http') ? (
 | 
						|
    <>{children}</>
 | 
						|
  ) : (
 | 
						|
    <Link href={href}>{children}</Link>
 | 
						|
  )
 | 
						|
}
 |