ContextExtractor.tsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import React, { FC } from 'react';
  2. import { pagePathUtils } from '@growi/core';
  3. import {
  4. useCreatedAt, useDeleteUsername, useDeletedAt, useHasChildren, useHasDraftOnHackmd, useIsAbleToDeleteCompletely,
  5. useIsDeletable, useIsDeleted, useIsNotCreatable, useIsPageExist, useIsTrashPage, useIsUserPage, useLastUpdateUsername,
  6. usePageId, usePageIdOnHackmd, usePageUser, useCurrentPagePath, useRevisionCreatedAt, useRevisionId, useRevisionIdHackmdSynced,
  7. useShareLinkId, useShareLinksNumber, useTemplateTagData, useUpdatedAt, useCreator, useRevisionAuthor, useCurrentUser, useTargetAndAncestors,
  8. } from '../../stores/context';
  9. import {
  10. useEditorMode, useIsDeviceSmallerThanMd, usePreferDrawerModeByUser, usePreferDrawerModeOnEditByUser,
  11. } from '~/stores/ui';
  12. const { isTrashPage: _isTrashPage } = pagePathUtils;
  13. const jsonNull = 'null';
  14. const ContextExtractor: FC = () => {
  15. const mainContent = document.querySelector('#content-main');
  16. /*
  17. * App Context from DOM
  18. */
  19. const currentUser = JSON.parse(document.getElementById('growi-current-user')?.textContent || jsonNull);
  20. /*
  21. * Page Context from DOM
  22. */
  23. const revisionId = mainContent?.getAttribute('data-page-revision-id');
  24. const path = decodeURI(mainContent?.getAttribute('data-path') || '');
  25. const pageId = mainContent?.getAttribute('data-page-id') || null;
  26. const revisionCreatedAt = +(mainContent?.getAttribute('data-page-revision-created') || '');
  27. const createdAt = mainContent?.getAttribute('data-page-created-at');
  28. const updatedAt = mainContent?.getAttribute('data-page-updated-at');
  29. const deletedAt = mainContent?.getAttribute('data-page-deleted-at') || null;
  30. const isUserPage = JSON.parse(mainContent?.getAttribute('data-page-user') || '') != null;
  31. const isTrashPage = _isTrashPage(path);
  32. const isDeleted = JSON.parse(mainContent?.getAttribute('data-page-is-deleted') || jsonNull);
  33. const isDeletable = JSON.parse(mainContent?.getAttribute('data-page-is-deletable') || jsonNull);
  34. const isNotCreatable = JSON.parse(mainContent?.getAttribute('data-page-is-not-creatable') || jsonNull);
  35. const isAbleToDeleteCompletely = JSON.parse(mainContent?.getAttribute('data-page-is-able-to-delete-completely') || jsonNull);
  36. const isPageExist = mainContent?.getAttribute('data-page-id') != null;
  37. const pageUser = JSON.parse(mainContent?.getAttribute('data-page-user') || jsonNull);
  38. const hasChildren = JSON.parse(mainContent?.getAttribute('data-page-has-children') || jsonNull);
  39. const templateTagData = mainContent?.getAttribute('data-template-tags') || null;
  40. const shareLinksNumber = mainContent?.getAttribute('data-share-links-number');
  41. const shareLinkId = JSON.parse(mainContent?.getAttribute('data-share-link-id') || jsonNull);
  42. const revisionIdHackmdSynced = mainContent?.getAttribute('data-page-revision-id-hackmd-synced') || null;
  43. const lastUpdateUsername = mainContent?.getAttribute('data-page-last-update-username') || null;
  44. const deleteUsername = mainContent?.getAttribute('data-page-delete-username') || null;
  45. const pageIdOnHackmd = mainContent?.getAttribute('data-page-id-on-hackmd') || null;
  46. const hasDraftOnHackmd = !!mainContent?.getAttribute('data-page-has-draft-on-hackmd');
  47. const creator = JSON.parse(mainContent?.getAttribute('data-page-creator') || jsonNull);
  48. const revisionAuthor = JSON.parse(mainContent?.getAttribute('data-page-revision-author') || jsonNull);
  49. const targetAndAncestors = JSON.parse(mainContent?.getAttribute('data-target-and-ancestors') || jsonNull);
  50. /*
  51. * use static swr
  52. */
  53. // App
  54. useCurrentUser(currentUser);
  55. // Navigation
  56. useEditorMode();
  57. usePreferDrawerModeByUser();
  58. usePreferDrawerModeOnEditByUser();
  59. useIsDeviceSmallerThanMd();
  60. // Page
  61. useCreatedAt(createdAt);
  62. useDeleteUsername(deleteUsername);
  63. useDeletedAt(deletedAt);
  64. useHasChildren(hasChildren);
  65. useHasDraftOnHackmd(hasDraftOnHackmd);
  66. useIsAbleToDeleteCompletely(isAbleToDeleteCompletely);
  67. useIsDeletable(isDeletable);
  68. useIsDeleted(isDeleted);
  69. useIsNotCreatable(isNotCreatable);
  70. useIsPageExist(isPageExist);
  71. useIsTrashPage(isTrashPage);
  72. useIsUserPage(isUserPage);
  73. useLastUpdateUsername(lastUpdateUsername);
  74. usePageId(pageId);
  75. usePageIdOnHackmd(pageIdOnHackmd);
  76. usePageUser(pageUser);
  77. useCurrentPagePath(path);
  78. useRevisionCreatedAt(revisionCreatedAt);
  79. useRevisionId(revisionId);
  80. useRevisionIdHackmdSynced(revisionIdHackmdSynced);
  81. useShareLinkId(shareLinkId);
  82. useShareLinksNumber(shareLinksNumber);
  83. useTemplateTagData(templateTagData);
  84. useUpdatedAt(updatedAt);
  85. useCreator(creator);
  86. useRevisionAuthor(revisionAuthor);
  87. useTargetAndAncestors(targetAndAncestors);
  88. return (
  89. <div>
  90. {/* Render nothing */}
  91. </div>
  92. );
  93. };
  94. export default ContextExtractor;