OldRevisionAlert.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React, { type JSX, useCallback } from 'react';
  2. import { useRouter } from 'next/router';
  3. import { returnPathForURL } from '@growi/core/dist/utils/path-utils';
  4. import { useTranslation } from 'react-i18next';
  5. import {
  6. useIsLatestRevision,
  7. useSWRMUTxCurrentPage,
  8. useSWRxCurrentPage,
  9. } from '~/stores/page';
  10. export const OldRevisionAlert = (): JSX.Element => {
  11. const router = useRouter();
  12. const { t } = useTranslation();
  13. const { data: isOldRevisionPage } = useIsLatestRevision();
  14. const { data: page } = useSWRxCurrentPage();
  15. const { trigger: mutateCurrentPage } = useSWRMUTxCurrentPage();
  16. const onClickShowLatestButton = useCallback(async () => {
  17. if (page == null) {
  18. return;
  19. }
  20. const url = returnPathForURL(page.path, page._id);
  21. await router.push(url);
  22. mutateCurrentPage();
  23. }, [mutateCurrentPage, page, router]);
  24. if (page == null || isOldRevisionPage) {
  25. return <></>;
  26. }
  27. return (
  28. <div className="alert alert-warning">
  29. <strong>{t('Warning')}: </strong> {t('page_page.notice.version')}
  30. <button
  31. type="button"
  32. className="btn btn-outline-natural-secondary"
  33. onClick={onClickShowLatestButton}
  34. >
  35. <span className="material-symbols-outlined me-1">
  36. arrow_circle_right
  37. </span>
  38. {t('Show latest')}
  39. </button>
  40. </div>
  41. );
  42. };