@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
8 lines (7 loc) • 13 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/components/post-status/index.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tCheckboxControl,\n\tDropdown,\n\t__experimentalVStack as VStack,\n\tTextControl,\n\tRadioControl,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useState, useMemo } from '@wordpress/element';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { __experimentalInspectorPopoverHeader as InspectorPopoverHeader } from '@wordpress/block-editor';\nimport { useInstanceId } from '@wordpress/compose';\nimport {\n\tdrafts,\n\tpublished,\n\tscheduled,\n\tpending,\n\tnotAllowed,\n} from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { DESIGN_POST_TYPES } from '../../store/constants';\nimport PostPanelRow from '../post-panel-row';\nimport PostSticky from '../post-sticky';\nimport { PrivatePostSchedule } from '../post-schedule';\nimport { store as editorStore } from '../../store';\n\nconst postStatusesInfo = {\n\t'auto-draft': { label: __( 'Draft' ), icon: drafts },\n\tdraft: { label: __( 'Draft' ), icon: drafts },\n\tpending: { label: __( 'Pending' ), icon: pending },\n\tprivate: { label: __( 'Private' ), icon: notAllowed },\n\tfuture: { label: __( 'Scheduled' ), icon: scheduled },\n\tpublish: { label: __( 'Published' ), icon: published },\n};\n\nexport const STATUS_OPTIONS = [\n\t{\n\t\tlabel: __( 'Draft' ),\n\t\tvalue: 'draft',\n\t\tdescription: __( 'Not ready to publish.' ),\n\t},\n\t{\n\t\tlabel: __( 'Pending' ),\n\t\tvalue: 'pending',\n\t\tdescription: __( 'Waiting for review before publishing.' ),\n\t},\n\t{\n\t\tlabel: __( 'Private' ),\n\t\tvalue: 'private',\n\t\tdescription: __( 'Only visible to site admins and editors.' ),\n\t},\n\t{\n\t\tlabel: __( 'Scheduled' ),\n\t\tvalue: 'future',\n\t\tdescription: __( 'Publish automatically on a chosen date.' ),\n\t},\n\t{\n\t\tlabel: __( 'Published' ),\n\t\tvalue: 'publish',\n\t\tdescription: __( 'Visible to everyone.' ),\n\t},\n];\n\nexport default function PostStatus() {\n\tconst { status, date, password, postId, postType, canEdit } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetEditedPostAttribute,\n\t\t\t\tgetCurrentPostId,\n\t\t\t\tgetCurrentPostType,\n\t\t\t\tgetCurrentPost,\n\t\t\t} = select( editorStore );\n\t\t\treturn {\n\t\t\t\tstatus: getEditedPostAttribute( 'status' ),\n\t\t\t\tdate: getEditedPostAttribute( 'date' ),\n\t\t\t\tpassword: getEditedPostAttribute( 'password' ),\n\t\t\t\tpostId: getCurrentPostId(),\n\t\t\t\tpostType: getCurrentPostType(),\n\t\t\t\tcanEdit:\n\t\t\t\t\tgetCurrentPost()._links?.[ 'wp:action-publish' ] ?? false,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\tconst [ showPassword, setShowPassword ] = useState( !! password );\n\tconst passwordInputId = useInstanceId(\n\t\tPostStatus,\n\t\t'editor-change-status__password-input'\n\t);\n\tconst { editEntityRecord } = useDispatch( coreStore );\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\t// Memoize popoverProps to avoid returning a new object every time.\n\tconst popoverProps = useMemo(\n\t\t() => ( {\n\t\t\t// Anchor the popover to the middle of the entire row so that it doesn't\n\t\t\t// move around when the label changes.\n\t\t\tanchor: popoverAnchor,\n\t\t\t'aria-label': __( 'Status & visibility' ),\n\t\t\theaderTitle: __( 'Status & visibility' ),\n\t\t\tplacement: 'left-start',\n\t\t\toffset: 36,\n\t\t\tshift: true,\n\t\t} ),\n\t\t[ popoverAnchor ]\n\t);\n\n\tif ( DESIGN_POST_TYPES.includes( postType ) ) {\n\t\treturn null;\n\t}\n\n\tconst updatePost = ( {\n\t\tstatus: newStatus = status,\n\t\tpassword: newPassword = password,\n\t\tdate: newDate = date,\n\t} ) => {\n\t\teditEntityRecord( 'postType', postType, postId, {\n\t\t\tstatus: newStatus,\n\t\t\tdate: newDate,\n\t\t\tpassword: newPassword,\n\t\t} );\n\t};\n\n\tconst handleTogglePassword = ( value ) => {\n\t\tsetShowPassword( value );\n\t\tif ( ! value ) {\n\t\t\tupdatePost( { password: '' } );\n\t\t}\n\t};\n\n\tconst handleStatus = ( value ) => {\n\t\tlet newDate = date;\n\t\tlet newPassword = password;\n\t\tif ( status === 'future' && new Date( date ) > new Date() ) {\n\t\t\tnewDate = null;\n\t\t}\n\t\tif ( value === 'private' && password ) {\n\t\t\tnewPassword = '';\n\t\t}\n\t\tupdatePost( {\n\t\t\tstatus: value,\n\t\t\tdate: newDate,\n\t\t\tpassword: newPassword,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<PostPanelRow label={ __( 'Status' ) } ref={ setPopoverAnchor }>\n\t\t\t{ canEdit ? (\n\t\t\t\t<Dropdown\n\t\t\t\t\tclassName=\"editor-post-status\"\n\t\t\t\t\tcontentClassName=\"editor-change-status__content\"\n\t\t\t\t\tpopoverProps={ popoverProps }\n\t\t\t\t\tfocusOnMount\n\t\t\t\t\trenderToggle={ ( { onToggle, isOpen } ) => (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName=\"editor-post-status__toggle\"\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t\t\tonClick={ onToggle }\n\t\t\t\t\t\t\ticon={ postStatusesInfo[ status ]?.icon }\n\t\t\t\t\t\t\taria-label={ sprintf(\n\t\t\t\t\t\t\t\t// translators: %s: Current post status.\n\t\t\t\t\t\t\t\t__( 'Change status: %s' ),\n\t\t\t\t\t\t\t\tpostStatusesInfo[ status ]?.label\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\taria-expanded={ isOpen }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ postStatusesInfo[ status ]?.label }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t\trenderContent={ ( { onClose } ) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<InspectorPopoverHeader\n\t\t\t\t\t\t\t\ttitle={ __( 'Status & visibility' ) }\n\t\t\t\t\t\t\t\tonClose={ onClose }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<form\n\t\t\t\t\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<VStack spacing={ 4 }>\n\t\t\t\t\t\t\t\t\t<RadioControl\n\t\t\t\t\t\t\t\t\t\tclassName=\"editor-change-status__options\"\n\t\t\t\t\t\t\t\t\t\thideLabelFromVision\n\t\t\t\t\t\t\t\t\t\tlabel={ __( 'Status' ) }\n\t\t\t\t\t\t\t\t\t\toptions={ STATUS_OPTIONS }\n\t\t\t\t\t\t\t\t\t\tonChange={ handleStatus }\n\t\t\t\t\t\t\t\t\t\tselected={\n\t\t\t\t\t\t\t\t\t\t\tstatus === 'auto-draft'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'draft'\n\t\t\t\t\t\t\t\t\t\t\t\t: status\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{ status === 'future' && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"editor-change-status__publish-date-wrapper\">\n\t\t\t\t\t\t\t\t\t\t\t<PrivatePostSchedule\n\t\t\t\t\t\t\t\t\t\t\t\tshowPopoverHeaderActions={\n\t\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tisCompact\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t{ status !== 'private' && (\n\t\t\t\t\t\t\t\t\t\t<VStack\n\t\t\t\t\t\t\t\t\t\t\tas=\"fieldset\"\n\t\t\t\t\t\t\t\t\t\t\tspacing={ 4 }\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"editor-change-status__password-fieldset\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'Password protected'\n\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'Only visible to those who know the password.'\n\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\tchecked={ showPassword }\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={\n\t\t\t\t\t\t\t\t\t\t\t\t\thandleTogglePassword\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t{ showPassword && (\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"editor-change-status__password-input\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Password'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdatePost( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpassword: value,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={ password }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Use a secure password'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={ passwordInputId }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaxLength={ 255 }\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t<PostSticky />\n\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"editor-post-status is-read-only\">\n\t\t\t\t\t{ postStatusesInfo[ status ]?.label }\n\t\t\t\t</div>\n\t\t\t) }\n\t\t</PostPanelRow>\n\t);\n}\n"],
"mappings": ";AAGA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA,wBAAwB;AAAA,EACxB;AAAA,EACA;AAAA,OACM;AACP,SAAS,IAAI,eAAe;AAC5B,SAAS,aAAa,iBAAiB;AACvC,SAAS,UAAU,eAAe;AAClC,SAAS,SAAS,iBAAiB;AACnC,SAAS,wCAAwC,8BAA8B;AAC/E,SAAS,qBAAqB;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAKP,SAAS,yBAAyB;AAClC,OAAO,kBAAkB;AACzB,OAAO,gBAAgB;AACvB,SAAS,2BAA2B;AACpC,SAAS,SAAS,mBAAmB;AAkI/B,SAiBA,UAjBA,KAoDI,YApDJ;AAhIN,IAAM,mBAAmB;AAAA,EACxB,cAAc,EAAE,OAAO,GAAI,OAAQ,GAAG,MAAM,OAAO;AAAA,EACnD,OAAO,EAAE,OAAO,GAAI,OAAQ,GAAG,MAAM,OAAO;AAAA,EAC5C,SAAS,EAAE,OAAO,GAAI,SAAU,GAAG,MAAM,QAAQ;AAAA,EACjD,SAAS,EAAE,OAAO,GAAI,SAAU,GAAG,MAAM,WAAW;AAAA,EACpD,QAAQ,EAAE,OAAO,GAAI,WAAY,GAAG,MAAM,UAAU;AAAA,EACpD,SAAS,EAAE,OAAO,GAAI,WAAY,GAAG,MAAM,UAAU;AACtD;AAEO,IAAM,iBAAiB;AAAA,EAC7B;AAAA,IACC,OAAO,GAAI,OAAQ;AAAA,IACnB,OAAO;AAAA,IACP,aAAa,GAAI,uBAAwB;AAAA,EAC1C;AAAA,EACA;AAAA,IACC,OAAO,GAAI,SAAU;AAAA,IACrB,OAAO;AAAA,IACP,aAAa,GAAI,uCAAwC;AAAA,EAC1D;AAAA,EACA;AAAA,IACC,OAAO,GAAI,SAAU;AAAA,IACrB,OAAO;AAAA,IACP,aAAa,GAAI,0CAA2C;AAAA,EAC7D;AAAA,EACA;AAAA,IACC,OAAO,GAAI,WAAY;AAAA,IACvB,OAAO;AAAA,IACP,aAAa,GAAI,yCAA0C;AAAA,EAC5D;AAAA,EACA;AAAA,IACC,OAAO,GAAI,WAAY;AAAA,IACvB,OAAO;AAAA,IACP,aAAa,GAAI,sBAAuB;AAAA,EACzC;AACD;AAEe,SAAR,aAA8B;AACpC,QAAM,EAAE,QAAQ,MAAM,UAAU,QAAQ,UAAU,QAAQ,IAAI;AAAA,IAC7D,CAAE,WAAY;AACb,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,OAAQ,WAAY;AACxB,aAAO;AAAA,QACN,QAAQ,uBAAwB,QAAS;AAAA,QACzC,MAAM,uBAAwB,MAAO;AAAA,QACrC,UAAU,uBAAwB,UAAW;AAAA,QAC7C,QAAQ,iBAAiB;AAAA,QACzB,UAAU,mBAAmB;AAAA,QAC7B,SACC,eAAe,EAAE,SAAU,mBAAoB,KAAK;AAAA,MACtD;AAAA,IACD;AAAA,IACA,CAAC;AAAA,EACF;AACA,QAAM,CAAE,cAAc,eAAgB,IAAI,SAAU,CAAC,CAAE,QAAS;AAChE,QAAM,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,EACD;AACA,QAAM,EAAE,iBAAiB,IAAI,YAAa,SAAU;AACpD,QAAM,CAAE,eAAe,gBAAiB,IAAI,SAAU,IAAK;AAE3D,QAAM,eAAe;AAAA,IACpB,OAAQ;AAAA;AAAA;AAAA,MAGP,QAAQ;AAAA,MACR,cAAc,GAAI,qBAAsB;AAAA,MACxC,aAAa,GAAI,qBAAsB;AAAA,MACvC,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,OAAO;AAAA,IACR;AAAA,IACA,CAAE,aAAc;AAAA,EACjB;AAEA,MAAK,kBAAkB,SAAU,QAAS,GAAI;AAC7C,WAAO;AAAA,EACR;AAEA,QAAM,aAAa,CAAE;AAAA,IACpB,QAAQ,YAAY;AAAA,IACpB,UAAU,cAAc;AAAA,IACxB,MAAM,UAAU;AAAA,EACjB,MAAO;AACN,qBAAkB,YAAY,UAAU,QAAQ;AAAA,MAC/C,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACX,CAAE;AAAA,EACH;AAEA,QAAM,uBAAuB,CAAE,UAAW;AACzC,oBAAiB,KAAM;AACvB,QAAK,CAAE,OAAQ;AACd,iBAAY,EAAE,UAAU,GAAG,CAAE;AAAA,IAC9B;AAAA,EACD;AAEA,QAAM,eAAe,CAAE,UAAW;AACjC,QAAI,UAAU;AACd,QAAI,cAAc;AAClB,QAAK,WAAW,YAAY,IAAI,KAAM,IAAK,IAAI,oBAAI,KAAK,GAAI;AAC3D,gBAAU;AAAA,IACX;AACA,QAAK,UAAU,aAAa,UAAW;AACtC,oBAAc;AAAA,IACf;AACA,eAAY;AAAA,MACX,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACX,CAAE;AAAA,EACH;AAEA,SACC,oBAAC,gBAAa,OAAQ,GAAI,QAAS,GAAI,KAAM,kBAC1C,oBACD;AAAA,IAAC;AAAA;AAAA,MACA,WAAU;AAAA,MACV,kBAAiB;AAAA,MACjB;AAAA,MACA,cAAY;AAAA,MACZ,cAAe,CAAE,EAAE,UAAU,OAAO,MACnC;AAAA,QAAC;AAAA;AAAA,UACA,WAAU;AAAA,UACV,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,SAAU;AAAA,UACV,MAAO,iBAAkB,MAAO,GAAG;AAAA,UACnC,cAAa;AAAA;AAAA,YAEZ,GAAI,mBAAoB;AAAA,YACxB,iBAAkB,MAAO,GAAG;AAAA,UAC7B;AAAA,UACA,iBAAgB;AAAA,UAEd,2BAAkB,MAAO,GAAG;AAAA;AAAA,MAC/B;AAAA,MAED,eAAgB,CAAE,EAAE,QAAQ,MAC3B,iCACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,OAAQ,GAAI,qBAAsB;AAAA,YAClC;AAAA;AAAA,QACD;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,UAAW,CAAE,UAAW;AACvB,oBAAM,eAAe;AACrB,sBAAQ;AAAA,YACT;AAAA,YAEA,+BAAC,UAAO,SAAU,GACjB;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACA,WAAU;AAAA,kBACV,qBAAmB;AAAA,kBACnB,OAAQ,GAAI,QAAS;AAAA,kBACrB,SAAU;AAAA,kBACV,UAAW;AAAA,kBACX,UACC,WAAW,eACR,UACA;AAAA;AAAA,cAEL;AAAA,cACE,WAAW,YACZ,oBAAC,SAAI,WAAU,8CACd;AAAA,gBAAC;AAAA;AAAA,kBACA,0BACC;AAAA,kBAED,WAAS;AAAA;AAAA,cACV,GACD;AAAA,cAEC,WAAW,aACZ;AAAA,gBAAC;AAAA;AAAA,kBACA,IAAG;AAAA,kBACH,SAAU;AAAA,kBACV,WAAU;AAAA,kBAEV;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACA,OAAQ;AAAA,0BACP;AAAA,wBACD;AAAA,wBACA,MAAO;AAAA,0BACN;AAAA,wBACD;AAAA,wBACA,SAAU;AAAA,wBACV,UACC;AAAA;AAAA,oBAEF;AAAA,oBACE,gBACD,oBAAC,SAAI,WAAU,wCACd;AAAA,sBAAC;AAAA;AAAA,wBACA,OAAQ;AAAA,0BACP;AAAA,wBACD;AAAA,wBACA,UAAW,CAAE,UACZ,WAAY;AAAA,0BACX,UAAU;AAAA,wBACX,CAAE;AAAA,wBAEH,OAAQ;AAAA,wBACR,aAAc;AAAA,0BACb;AAAA,wBACD;AAAA,wBACA,MAAK;AAAA,wBACL,IAAK;AAAA,wBACL,uBAAqB;AAAA,wBACrB,WAAY;AAAA;AAAA,oBACb,GACD;AAAA;AAAA;AAAA,cAEF;AAAA,cAED,oBAAC,cAAW;AAAA,eACb;AAAA;AAAA,QACD;AAAA,SACD;AAAA;AAAA,EAEF,IAEA,oBAAC,SAAI,WAAU,mCACZ,2BAAkB,MAAO,GAAG,OAC/B,GAEF;AAEF;",
"names": []
}