* Article query spec for scheduled articles * Added scheduled article badge on the user dashboard * Added published_at field to editor options * Accept and validate published_at from editor * Refactor published_at validation * Allow 1-minute difference in published_at * Notice on an unpublished article page * Added specs for 'Click to edit' link on scheduled article preview page * ContextNotification model * Articles::Publish worker * Added specs for articles publish worker * Schedule publish articles worker * Added tests to check for scheduled posts in feeds * Don't allow managing scheduled articles * Don't send notifications for scheduled articles * Set published_at in Articles::Updater when publishing * Published_at value in post options * Pass timezone and set published_at accordingly * Limit setting published_at to the future * Readonly published_at for articles that were already published * Chagning published_at format in editor v1 (start) * Changed published_at format in frontmatter, specs * Added specs for updating published_at from frontmatter * Fixed accepting past published_at for articles published_from_feed * Enabled published_at validation: don't allow updating published_at for already published articles * Validate published_at on create * Added a spec for updating published_at for exported articles * Fixed specs related to creating articles with past published_at * Fixed specs related to past published_at for articles * Added a hack so that admins would be able to update published_at * Switch button text schedule/publish when changin publishedAt * Fixed saving published_at with timezone * Added a feature flag for scheduling articles * Default text in markdown editor depends on feature flag * Enable article editor cache again * Fixed the default value in the markdown editor * Fix sitemaps spec * Removed tooltip * Fixed articles update specs * Added missing locales * Fixed article create specs * Fixed spec * Removed commented code * Returned enabling extensions in the schema * Returned accidentally deleted constraint * Make articles query spec more stable Co-authored-by: Jeremy Friesen <jeremy.n.friesen@gmail.com> * Removed commented code * Removed unused code * A clearer policy Co-authored-by: Jeremy Friesen <jeremy.n.friesen@gmail.com> * Use StringInquirer for article current state * Added a note and todo to articles factory past trait * Remove duplicated PropType Co-authored-by: Suzanne Aitchison <suzanne@forem.com> * Refactor query in the Articles::PublishWorker Co-authored-by: Mac Siri <krairit.siri@gmail.com> * Refactor articleForm.jsx Co-authored-by: Mac Siri <krairit.siri@gmail.com> * Removed specs that are no longer relevant * Removed useless onKeyUp on a hidden input * Refactored articleForm * Hide scheduling from post options when published_at is readonly * Run sends notifications worker every 5 minutes instead of every minute Co-authored-by: Jeremy Friesen <jeremy.n.friesen@gmail.com> Co-authored-by: Suzanne Aitchison <suzanne@forem.com> Co-authored-by: Mac Siri <krairit.siri@gmail.com>
109 lines
2.7 KiB
JavaScript
109 lines
2.7 KiB
JavaScript
import { h } from 'preact';
|
|
import PropTypes from 'prop-types';
|
|
import { Options } from './Options';
|
|
import { ButtonNew as Button } from '@crayons';
|
|
|
|
export const EditorActions = ({
|
|
onSaveDraft,
|
|
onPublish,
|
|
onClearChanges,
|
|
published,
|
|
publishedAt,
|
|
schedulingEnabled,
|
|
edited,
|
|
version,
|
|
passedData,
|
|
onConfigChange,
|
|
submitting,
|
|
previewLoading,
|
|
}) => {
|
|
const isVersion1 = version === 'v1';
|
|
const isVersion2 = version === 'v2';
|
|
|
|
if (submitting) {
|
|
return (
|
|
<div className="crayons-article-form__footer">
|
|
<Button
|
|
variant="primary"
|
|
className="mr-2 whitespace-nowrap"
|
|
onClick={onPublish}
|
|
disabled
|
|
>
|
|
{published && isVersion2
|
|
? 'Publishing...'
|
|
: `Saving ${isVersion2 ? 'draft' : ''}...`}
|
|
</Button>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
const now = new Date();
|
|
const publishedAtDate = publishedAt ? new Date(publishedAt) : now;
|
|
const schedule = publishedAtDate > now;
|
|
|
|
const saveButtonText = schedule
|
|
? 'Schedule'
|
|
: published || isVersion1
|
|
? 'Save changes'
|
|
: 'Publish';
|
|
|
|
return (
|
|
<div className="crayons-article-form__footer">
|
|
<Button
|
|
variant="primary"
|
|
className="mr-2 whitespace-nowrap"
|
|
onClick={onPublish}
|
|
disabled={previewLoading}
|
|
>
|
|
{saveButtonText}
|
|
</Button>
|
|
|
|
{!(published || isVersion1) && (
|
|
<Button
|
|
className="mr-2 whitespace-nowrap"
|
|
onClick={onSaveDraft}
|
|
disabled={previewLoading}
|
|
>
|
|
Save <span className="hidden s:inline">draft</span>
|
|
</Button>
|
|
)}
|
|
|
|
{isVersion2 && (
|
|
<Options
|
|
passedData={passedData}
|
|
schedulingEnabled={schedulingEnabled}
|
|
onConfigChange={onConfigChange}
|
|
onSaveDraft={onSaveDraft}
|
|
previewLoading={previewLoading}
|
|
/>
|
|
)}
|
|
|
|
{edited && (
|
|
<Button
|
|
onClick={onClearChanges}
|
|
className="whitespace-nowrap fw-normal fs-s"
|
|
disabled={previewLoading}
|
|
>
|
|
Revert <span className="hidden s:inline">new changes</span>
|
|
</Button>
|
|
)}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
EditorActions.propTypes = {
|
|
onSaveDraft: PropTypes.func.isRequired,
|
|
onPublish: PropTypes.func.isRequired,
|
|
published: PropTypes.bool.isRequired,
|
|
publishedAt: PropTypes.string.isRequired,
|
|
schedulingEnabled: PropTypes.bool.isRequired,
|
|
edited: PropTypes.bool.isRequired,
|
|
version: PropTypes.string.isRequired,
|
|
onClearChanges: PropTypes.func.isRequired,
|
|
passedData: PropTypes.object.isRequired,
|
|
onConfigChange: PropTypes.func.isRequired,
|
|
submitting: PropTypes.bool.isRequired,
|
|
previewLoading: PropTypes.bool.isRequired,
|
|
};
|
|
|
|
EditorActions.displayName = 'EditorActions';
|