survey-widget.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import usePersistedState from '../../../shared/hooks/use-persisted-state'
  2. import getMeta from '../../../utils/meta'
  3. import { Survey } from '../../../../../types/project/dashboard/survey'
  4. import { useCallback } from 'react'
  5. export default function SurveyWidget() {
  6. const survey: 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="alert alert-info-alt">
  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">
  33. <button
  34. type="button"
  35. className="close pull-right"
  36. title="Dismiss Overleaf survey"
  37. onClick={dismissSurvey}
  38. >
  39. <span aria-hidden="true">&times;</span>
  40. <span className="sr-only">Dismiss Overleaf survey</span>
  41. </button>
  42. </div>
  43. </div>
  44. </div>
  45. </div>
  46. )
  47. }