Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

imprv: Migrate editor container grant to SWR #4957

Merged
merged 15 commits into from Dec 26, 2021
9 changes: 8 additions & 1 deletion packages/app/src/client/services/ContextExtractor.tsx
Expand Up @@ -7,10 +7,11 @@ import {
usePageId, usePageIdOnHackmd, usePageUser, useCurrentPagePath, useRevisionCreatedAt, useRevisionId, useRevisionIdHackmdSynced,
useShareLinkId, useShareLinksNumber, useTemplateTagData, useCurrentUpdatedAt, useCreator, useRevisionAuthor, useCurrentUser,
useSlackChannels,
} from '../../stores/context';
} from '~/stores/context';
import {
useIsDeviceSmallerThanMd,
usePreferDrawerModeByUser, usePreferDrawerModeOnEditByUser, useSidebarCollapsed, useCurrentSidebarContents, useCurrentProductNavWidth,
useSelectedGrant, useSelectedGrantGroupId, useSelectedGrantGroupName,
} from '~/stores/ui';
import { IUserUISettings } from '~/interfaces/user-ui-settings';

Expand Down Expand Up @@ -68,6 +69,9 @@ const ContextExtractorOnce: FC = () => {
const creator = JSON.parse(mainContent?.getAttribute('data-page-creator') || jsonNull);
const revisionAuthor = JSON.parse(mainContent?.getAttribute('data-page-revision-author') || jsonNull);
const slackChannels = mainContent?.getAttribute('data-slack-channels') || '';
const grant = +(mainContent?.getAttribute('data-page-grant') || 1);
const grantGroupId = mainContent?.getAttribute('data-page-grant-group') || null;
const grantGroupName = mainContent?.getAttribute('data-page-grant-group-name') || null;
/*
* use static swr
*/
Expand Down Expand Up @@ -116,6 +120,9 @@ const ContextExtractorOnce: FC = () => {

// Editor
useSlackChannels(slackChannels);
useSelectedGrant(grant);
useSelectedGrantGroupId(grantGroupId);
useSelectedGrantGroupName(grantGroupName);

return null;
};
Expand Down
33 changes: 4 additions & 29 deletions packages/app/src/client/services/EditorContainer.js
Expand Up @@ -27,10 +27,6 @@ export default class EditorContainer extends Container {
this.state = {
tags: null,

grant: 1, // default: public
grantGroupId: null,
grantGroupName: null,

editorOptions: {},
previewOptions: {},

Expand All @@ -43,7 +39,6 @@ export default class EditorContainer extends Container {

this.isSetBeforeunloadEventHandler = false;

this.initStateGrant();
this.initDrafts();

this.initEditorOptions('editorOptions', 'editorOptions', defaultEditorOptions);
Expand All @@ -57,26 +52,6 @@ export default class EditorContainer extends Container {
return 'EditorContainer';
}

/**
* initialize state for page permission
*/
initStateGrant() {
const mainContent = document.getElementById('content-main');

if (mainContent == null) {
logger.debug('#content-main element is not exists');
return;
}

this.state.grant = +mainContent.getAttribute('data-page-grant');

const grantGroupId = mainContent.getAttribute('data-page-grant-group');
if (grantGroupId != null && grantGroupId.length > 0) {
this.state.grantGroupId = grantGroupId;
this.state.grantGroupName = mainContent.getAttribute('data-page-grant-group-name');
}
}

/**
* initialize state for drafts
*/
Expand Down Expand Up @@ -145,13 +120,13 @@ export default class EditorContainer extends Container {
const opt = {
// isSlackEnabled: this.state.isSlackEnabled,
// slackChannels: this.state.slackChannels,
grant: this.state.grant,
// grant: this.state.grant,
pageTags: this.state.tags,
};

if (this.state.grantGroupId != null) {
opt.grantUserGroupId = this.state.grantGroupId;
}
// if (this.state.grantGroupId != null) {
// opt.grantUserGroupId = this.state.grantGroupId;
// }

return opt;
}
Expand Down
21 changes: 18 additions & 3 deletions packages/app/src/client/util/editor.ts
Expand Up @@ -5,11 +5,26 @@ type OptionsToSave = {
slackChannels: string;
grant: number;
pageTags: string[];
grantUserGroupId?: string;
grantUserGroupId: string | null;
grantUserGroupName: string | null;
};

// TODO: Remove editorContainer upon migration to SWR
export const getOptionsToSave = (isSlackEnabled: boolean, slackChannels: string, editorContainer: EditorContainer): OptionsToSave => {
export const getOptionsToSave = (
isSlackEnabled: boolean,
slackChannels: string,
grant: number,
grantUserGroupId: string | null,
grantUserGroupName: string | null,
editorContainer: EditorContainer,
): OptionsToSave => {
const optionsToSave = editorContainer.getCurrentOptionsToSave();
return { ...optionsToSave, isSlackEnabled, slackChannels };
return {
...optionsToSave,
isSlackEnabled,
slackChannels,
grant,
grantUserGroupId,
grantUserGroupName,
};
};
22 changes: 17 additions & 5 deletions packages/app/src/components/Page.jsx
Expand Up @@ -20,7 +20,9 @@ import mdu from './PageEditor/MarkdownDrawioUtil';
import { getOptionsToSave } from '~/client/util/editor';

// TODO: remove this when omitting unstated is completed
import { useEditorMode } from '~/stores/ui';
import {
useEditorMode, useSelectedGrant, useSelectedGrantGroupId, useSelectedGrantGroupName,
} from '~/stores/ui';
import { useIsSlackEnabled } from '~/stores/editor';
import { useSlackChannels } from '~/stores/context';

Expand Down Expand Up @@ -78,9 +80,9 @@ class Page extends React.Component {

async saveHandlerForHandsontableModal(markdownTable) {
const {
isSlackEnabled, slackChannels, pageContainer, editorContainer,
isSlackEnabled, slackChannels, pageContainer, editorContainer, grant, grantGroupId, grantGroupName,
} = this.props;
const optionsToSave = getOptionsToSave(isSlackEnabled, slackChannels, editorContainer);
const optionsToSave = getOptionsToSave(isSlackEnabled, slackChannels, grant, grantGroupId, grantGroupName, editorContainer);

const newMarkdown = mtu.replaceMarkdownTableInMarkdown(
markdownTable,
Expand Down Expand Up @@ -110,9 +112,9 @@ class Page extends React.Component {

async saveHandlerForDrawioModal(drawioData) {
const {
isSlackEnabled, slackChannels, pageContainer, editorContainer,
isSlackEnabled, slackChannels, pageContainer, editorContainer, grant, grantGroupId, grantGroupName,
} = this.props;
const optionsToSave = getOptionsToSave(isSlackEnabled, slackChannels, editorContainer);
const optionsToSave = getOptionsToSave(isSlackEnabled, slackChannels, grant, grantGroupId, grantGroupName, editorContainer);

const newMarkdown = mdu.replaceDrawioInMarkdown(
drawioData,
Expand Down Expand Up @@ -173,12 +175,19 @@ Page.propTypes = {
editorMode: PropTypes.string.isRequired,
isSlackEnabled: PropTypes.bool.isRequired,
slackChannels: PropTypes.string.isRequired,
grant: PropTypes.number.isRequired,
grantGroupId: PropTypes.string,
grantGroupName: PropTypes.string,
};

const PageWrapper = (props) => {
const { data: editorMode } = useEditorMode();
const { data: isSlackEnabled } = useIsSlackEnabled();
const { data: slackChannels } = useSlackChannels();
const { data: grant } = useSelectedGrant();
const { data: grantGroupId } = useSelectedGrantGroupId();
const { data: grantGroupName } = useSelectedGrantGroupName();


if (editorMode == null) {
return null;
Expand All @@ -190,6 +199,9 @@ const PageWrapper = (props) => {
editorMode={editorMode}
isSlackEnabled={isSlackEnabled}
slackChannels={slackChannels}
grant={grant}
grantGroupId={grantGroupId}
grantGroupName={grantGroupName}
/>
);
};
Expand Down
25 changes: 20 additions & 5 deletions packages/app/src/components/PageEditor.jsx
Expand Up @@ -18,7 +18,9 @@ import EditorContainer from '~/client/services/EditorContainer';
import { getOptionsToSave } from '~/client/util/editor';

// TODO: remove this when omitting unstated is completed
import { useEditorMode } from '~/stores/ui';
import {
useEditorMode, useSelectedGrant, useSelectedGrantGroupId, useSelectedGrantGroupName,
} from '~/stores/ui';
import { useIsEditable, useSlackChannels } from '~/stores/context';
import { useIsSlackEnabled } from '~/stores/editor';

Expand Down Expand Up @@ -132,10 +134,10 @@ class PageEditor extends React.Component {
*/
async onSaveWithShortcut() {
const {
isSlackEnabled, slackChannels, editorContainer, pageContainer,
isSlackEnabled, slackChannels, grant, grantGroupId, grantGroupName, editorContainer, pageContainer,
} = this.props;

const optionsToSave = getOptionsToSave(isSlackEnabled, slackChannels, editorContainer);
const optionsToSave = getOptionsToSave(isSlackEnabled, slackChannels, grant, grantGroupId, grantGroupName, editorContainer);

try {
// disable unsaved warning
Expand All @@ -161,7 +163,9 @@ class PageEditor extends React.Component {
* @param {any} file
*/
async onUpload(file) {
const { appContainer, pageContainer, editorContainer } = this.props;
const {
appContainer, pageContainer, mutateGrant,
} = this.props;

try {
let res = await appContainer.apiGet('/attachments.limit', {
Expand Down Expand Up @@ -197,7 +201,7 @@ class PageEditor extends React.Component {
if (res.pageCreated) {
logger.info('Page is created', res.page._id);
pageContainer.updateStateAfterSave(res.page, res.tags, res.revision, this.props.editorMode);
editorContainer.setState({ grant: res.page.grant });
mutateGrant(res.page.grant);
}
}
catch (e) {
Expand Down Expand Up @@ -368,6 +372,9 @@ const PageEditorWrapper = (props) => {
const { data: editorMode } = useEditorMode();
const { data: isSlackEnabled } = useIsSlackEnabled();
const { data: slackChannels } = useSlackChannels();
const { data: grant, mutate: mutateGrant } = useSelectedGrant();
const { data: grantGroupId } = useSelectedGrantGroupId();
const { data: grantGroupName } = useSelectedGrantGroupName();

if (isEditable == null || editorMode == null) {
return null;
Expand All @@ -380,6 +387,10 @@ const PageEditorWrapper = (props) => {
editorMode={editorMode}
isSlackEnabled={isSlackEnabled}
slackChannels={slackChannels}
grant={grant}
grantGroupId={grantGroupId}
grantGroupName={grantGroupName}
mutateGrant={mutateGrant}
/>
);
};
Expand All @@ -395,6 +406,10 @@ PageEditor.propTypes = {
editorMode: PropTypes.string.isRequired,
isSlackEnabled: PropTypes.bool.isRequired,
slackChannels: PropTypes.string.isRequired,
grant: PropTypes.number.isRequired,
grantGroupId: PropTypes.string,
grantGroupName: PropTypes.string,
mutateGrant: PropTypes.func,
};

export default PageEditorWrapper;
17 changes: 14 additions & 3 deletions packages/app/src/components/PageEditorByHackmd.jsx
Expand Up @@ -14,7 +14,9 @@ import HackmdEditor from './PageEditorByHackmd/HackmdEditor';
import { getOptionsToSave } from '~/client/util/editor';

// TODO: remove this when omitting unstated is completed
import { useEditorMode } from '~/stores/ui';
import {
useEditorMode, useSelectedGrant, useSelectedGrantGroupId, useSelectedGrantGroupName,
} from '~/stores/ui';
import { useSlackChannels } from '~/stores/context';
import { useIsSlackEnabled } from '~/stores/editor';

Expand Down Expand Up @@ -171,9 +173,9 @@ class PageEditorByHackmd extends React.Component {
*/
async onSaveWithShortcut(markdown) {
const {
isSlackEnabled, slackChannels, pageContainer, editorContainer,
isSlackEnabled, slackChannels, pageContainer, editorContainer, grant, grantGroupId, grantGroupName,
} = this.props;
const optionsToSave = getOptionsToSave(isSlackEnabled, slackChannels, editorContainer);
const optionsToSave = getOptionsToSave(isSlackEnabled, slackChannels, grant, grantGroupId, grantGroupName, editorContainer);

try {
// disable unsaved warning
Expand Down Expand Up @@ -432,6 +434,9 @@ const PageEditorByHackmdWrapper = (props) => {
const { data: editorMode } = useEditorMode();
const { data: isSlackEnabled } = useIsSlackEnabled();
const { data: slackChannels } = useSlackChannels();
const { data: grant } = useSelectedGrant();
const { data: grantGroupId } = useSelectedGrantGroupId();
const { data: grantGroupName } = useSelectedGrantGroupName();

if (editorMode == null) {
return null;
Expand All @@ -443,6 +448,9 @@ const PageEditorByHackmdWrapper = (props) => {
editorMode={editorMode}
isSlackEnabled={isSlackEnabled}
slackChannels={slackChannels}
grant={grant}
grantGroupId={grantGroupId}
grantGroupName={grantGroupName}
/>
);
};
Expand All @@ -458,6 +466,9 @@ PageEditorByHackmd.propTypes = {
editorMode: PropTypes.string.isRequired,
isSlackEnabled: PropTypes.bool.isRequired,
slackChannels: PropTypes.string.isRequired,
grant: PropTypes.number.isRequired,
grantGroupId: PropTypes.string,
grantGroupName: PropTypes.string,
};

export default withTranslation()(PageEditorByHackmdWrapper);