OldRevisionAlert.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { 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. useCurrentPageData,
  7. useFetchCurrentPage,
  8. useLatestRevision,
  9. } from '~/states/page';
  10. export const OldRevisionAlert = (): JSX.Element => {
  11. const router = useRouter();
  12. const { t } = useTranslation();
  13. const isOldRevisionPage = useLatestRevision();
  14. const page = useCurrentPageData();
  15. const { fetchCurrentPage } = useFetchCurrentPage();
  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. fetchCurrentPage();
  23. }, [fetchCurrentPage, page, router]);
  24. if (page == null || isOldRevisionPage) {
  25. // biome-ignore lint/complexity/noUselessFragments: ignore
  26. return <></>;
  27. }
  28. return (
  29. <div className="alert alert-warning">
  30. <strong>{t('Warning')}: </strong> {t('page_page.notice.version')}
  31. <button
  32. type="button"
  33. className="btn btn-outline-natural-secondary"
  34. onClick={onClickShowLatestButton}
  35. >
  36. <span className="material-symbols-outlined me-1">
  37. arrow_circle_right
  38. </span>
  39. {t('Show latest')}
  40. </button>
  41. </div>
  42. );
  43. };