survey-widget.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import usePersistedState from '../../../shared/hooks/use-persisted-state'
  2. import getMeta from '../../../utils/meta'
  3. import { useCallback } from 'react'
  4. import Close from '@/shared/components/close'
  5. export default function SurveyWidget() {
  6. const survey = getMeta('ol-survey')
  7. const [dismissedSurvey, setDismissedSurvey] = usePersistedState(
  8. `dismissed-${survey?.name}`,
  9. false
  10. )
  11. const dismissSurvey = useCallback(() => {
  12. setDismissedSurvey(true)
  13. }, [setDismissedSurvey])
  14. if (!survey?.name || dismissedSurvey) {
  15. return null
  16. }
  17. return (
  18. <div className="user-notifications">
  19. <div className="notification-entry">
  20. <div role="alert" className="survey-notification">
  21. <div className="notification-body">
  22. {survey.preText}&nbsp;
  23. <a
  24. className="project-list-sidebar-survey-link"
  25. href={survey.url}
  26. target="_blank"
  27. rel="noreferrer noopener"
  28. >
  29. {survey.linkText}
  30. </a>
  31. </div>
  32. <div className="notification-close notification-close-button-style">
  33. <Close variant="dark" onDismiss={() => dismissSurvey()} />
  34. </div>
  35. </div>
  36. </div>
  37. </div>
  38. )
  39. }