| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- import React, { FC, useEffect, useState } from 'react';
- import { pagePathUtils } from '@growi/core';
- import {
- useCreatedAt, useDeleteUsername, useDeletedAt, useHasChildren, useHasDraftOnHackmd, useIsAbleToDeleteCompletely,
- useIsDeletable, useIsDeleted, useIsNotCreatable, useIsPageExist, useIsTrashPage, useIsUserPage, useLastUpdateUsername,
- usePageId, usePageIdOnHackmd, usePageUser, useCurrentPagePath, useRevisionCreatedAt, useRevisionId, useRevisionIdHackmdSynced,
- useShareLinkId, useShareLinksNumber, useTemplateTagData, useUpdatedAt, useCreator, useRevisionAuthor, useCurrentUser, useTargetAndAncestors,
- } from '../../stores/context';
- import {
- EditorMode, useEditorMode, useIsDeviceSmallerThanMd, usePreferDrawerModeByUser, usePreferDrawerModeOnEditByUser,
- } from '~/stores/ui';
- const { isTrashPage: _isTrashPage } = pagePathUtils;
- const jsonNull = 'null';
- const getInitialEditorMode = (): EditorMode => {
- switch (window.location.hash) {
- case '#edit':
- return EditorMode.Editor;
- case '#hackmd':
- return EditorMode.HackMD;
- default:
- return EditorMode.View;
- }
- };
- const ContextExtractorOnce: FC = () => {
- const mainContent = document.querySelector('#content-main');
- /*
- * App Context from DOM
- */
- const currentUser = JSON.parse(document.getElementById('growi-current-user')?.textContent || jsonNull);
- /*
- * Page Context from DOM
- */
- const revisionId = mainContent?.getAttribute('data-page-revision-id');
- const path = decodeURI(mainContent?.getAttribute('data-path') || '');
- const pageId = mainContent?.getAttribute('data-page-id') || null;
- const revisionCreatedAt = +(mainContent?.getAttribute('data-page-revision-created') || '');
- const createdAt = mainContent?.getAttribute('data-page-created-at');
- const updatedAt = mainContent?.getAttribute('data-page-updated-at');
- const deletedAt = mainContent?.getAttribute('data-page-deleted-at') || null;
- const isUserPage = JSON.parse(mainContent?.getAttribute('data-page-user') || jsonNull);
- const isTrashPage = _isTrashPage(path);
- const isDeleted = JSON.parse(mainContent?.getAttribute('data-page-is-deleted') || jsonNull);
- const isDeletable = JSON.parse(mainContent?.getAttribute('data-page-is-deletable') || jsonNull);
- const isNotCreatable = JSON.parse(mainContent?.getAttribute('data-page-is-not-creatable') || jsonNull);
- const isAbleToDeleteCompletely = JSON.parse(mainContent?.getAttribute('data-page-is-able-to-delete-completely') || jsonNull);
- const isPageExist = mainContent?.getAttribute('data-page-id') != null;
- const pageUser = JSON.parse(mainContent?.getAttribute('data-page-user') || jsonNull);
- const hasChildren = JSON.parse(mainContent?.getAttribute('data-page-has-children') || jsonNull);
- const templateTagData = mainContent?.getAttribute('data-template-tags') || null;
- const shareLinksNumber = mainContent?.getAttribute('data-share-links-number');
- const shareLinkId = JSON.parse(mainContent?.getAttribute('data-share-link-id') || jsonNull);
- const revisionIdHackmdSynced = mainContent?.getAttribute('data-page-revision-id-hackmd-synced') || null;
- const lastUpdateUsername = mainContent?.getAttribute('data-page-last-update-username') || null;
- const deleteUsername = mainContent?.getAttribute('data-page-delete-username') || null;
- const pageIdOnHackmd = mainContent?.getAttribute('data-page-id-on-hackmd') || null;
- const hasDraftOnHackmd = !!mainContent?.getAttribute('data-page-has-draft-on-hackmd');
- const creator = JSON.parse(mainContent?.getAttribute('data-page-creator') || jsonNull);
- const revisionAuthor = JSON.parse(mainContent?.getAttribute('data-page-revision-author') || jsonNull);
- const targetAndAncestors = JSON.parse(mainContent?.getAttribute('data-target-and-ancestors') || jsonNull);
- /*
- * use static swr
- */
- // App
- useCurrentUser(currentUser);
- // Navigation
- useEditorMode(getInitialEditorMode());
- usePreferDrawerModeByUser();
- usePreferDrawerModeOnEditByUser();
- useIsDeviceSmallerThanMd();
- // Page
- useCreatedAt(createdAt);
- useDeleteUsername(deleteUsername);
- useDeletedAt(deletedAt);
- useHasChildren(hasChildren);
- useHasDraftOnHackmd(hasDraftOnHackmd);
- useIsAbleToDeleteCompletely(isAbleToDeleteCompletely);
- useIsDeletable(isDeletable);
- useIsDeleted(isDeleted);
- useIsNotCreatable(isNotCreatable);
- useIsPageExist(isPageExist);
- useIsTrashPage(isTrashPage);
- useIsUserPage(isUserPage);
- useLastUpdateUsername(lastUpdateUsername);
- usePageId(pageId);
- usePageIdOnHackmd(pageIdOnHackmd);
- usePageUser(pageUser);
- useCurrentPagePath(path);
- useRevisionCreatedAt(revisionCreatedAt);
- useRevisionId(revisionId);
- useRevisionIdHackmdSynced(revisionIdHackmdSynced);
- useShareLinkId(shareLinkId);
- useShareLinksNumber(shareLinksNumber);
- useTemplateTagData(templateTagData);
- useUpdatedAt(updatedAt);
- useCreator(creator);
- useRevisionAuthor(revisionAuthor);
- useTargetAndAncestors(targetAndAncestors);
- return null;
- };
- const ContextExtractor: FC = React.memo(() => {
- const [isRunOnce, setRunOnce] = useState(false);
- useEffect(() => {
- setRunOnce(true);
- }, []);
- return isRunOnce ? null : <ContextExtractorOnce></ContextExtractorOnce>;
- });
- export default ContextExtractor;
|