@wordpress/editor 12.19.0 → 12.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/entities-saved-states/entity-type-list.js +1 -7
  3. package/build/components/entities-saved-states/entity-type-list.js.map +1 -1
  4. package/build/components/entities-saved-states/index.js +1 -1
  5. package/build/components/entities-saved-states/index.js.map +1 -1
  6. package/build/components/index.js +18 -0
  7. package/build/components/index.js.map +1 -1
  8. package/build/components/post-format/index.js +1 -1
  9. package/build/components/post-format/index.js.map +1 -1
  10. package/build/components/post-publish-button/index.js +1 -1
  11. package/build/components/post-publish-button/index.js.map +1 -1
  12. package/build/components/post-publish-panel/maybe-category-panel.js +1 -7
  13. package/build/components/post-publish-panel/maybe-category-panel.js.map +1 -1
  14. package/build/components/post-publish-panel/maybe-post-format-panel.js +1 -1
  15. package/build/components/post-publish-panel/maybe-post-format-panel.js.map +1 -1
  16. package/build/components/post-publish-panel/maybe-tags-panel.js +1 -7
  17. package/build/components/post-publish-panel/maybe-tags-panel.js.map +1 -1
  18. package/build/components/post-schedule/index.js +13 -16
  19. package/build/components/post-schedule/index.js.map +1 -1
  20. package/build/components/post-taxonomies/check.js +1 -7
  21. package/build/components/post-taxonomies/check.js.map +1 -1
  22. package/build/components/post-taxonomies/flat-term-selector.js +3 -1
  23. package/build/components/post-taxonomies/flat-term-selector.js.map +1 -1
  24. package/build/components/post-taxonomies/hierarchical-term-selector.js +2 -2
  25. package/build/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  26. package/build/components/post-taxonomies/index.js +1 -1
  27. package/build/components/post-taxonomies/index.js.map +1 -1
  28. package/build/components/post-type-support-check/index.js +1 -7
  29. package/build/components/post-type-support-check/index.js.map +1 -1
  30. package/build/components/theme-support-check/index.js +2 -2
  31. package/build/components/theme-support-check/index.js.map +1 -1
  32. package/build/components/time-to-read/index.js +2 -6
  33. package/build/components/time-to-read/index.js.map +1 -1
  34. package/build/store/selectors.js +1 -6
  35. package/build/store/selectors.js.map +1 -1
  36. package/build/store/utils/notice-builder.js +2 -2
  37. package/build/store/utils/notice-builder.js.map +1 -1
  38. package/build-module/components/entities-saved-states/entity-type-list.js +1 -6
  39. package/build-module/components/entities-saved-states/entity-type-list.js.map +1 -1
  40. package/build-module/components/entities-saved-states/index.js +2 -2
  41. package/build-module/components/entities-saved-states/index.js.map +1 -1
  42. package/build-module/components/index.js +3 -1
  43. package/build-module/components/index.js.map +1 -1
  44. package/build-module/components/post-format/index.js +2 -2
  45. package/build-module/components/post-format/index.js.map +1 -1
  46. package/build-module/components/post-publish-button/index.js +2 -2
  47. package/build-module/components/post-publish-button/index.js.map +1 -1
  48. package/build-module/components/post-publish-panel/maybe-category-panel.js +1 -6
  49. package/build-module/components/post-publish-panel/maybe-category-panel.js.map +1 -1
  50. package/build-module/components/post-publish-panel/maybe-post-format-panel.js +2 -2
  51. package/build-module/components/post-publish-panel/maybe-post-format-panel.js.map +1 -1
  52. package/build-module/components/post-publish-panel/maybe-tags-panel.js +1 -6
  53. package/build-module/components/post-publish-panel/maybe-tags-panel.js.map +1 -1
  54. package/build-module/components/post-schedule/index.js +12 -17
  55. package/build-module/components/post-schedule/index.js.map +1 -1
  56. package/build-module/components/post-taxonomies/check.js +1 -6
  57. package/build-module/components/post-taxonomies/check.js.map +1 -1
  58. package/build-module/components/post-taxonomies/flat-term-selector.js +3 -2
  59. package/build-module/components/post-taxonomies/flat-term-selector.js.map +1 -1
  60. package/build-module/components/post-taxonomies/hierarchical-term-selector.js +3 -3
  61. package/build-module/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
  62. package/build-module/components/post-taxonomies/index.js +2 -2
  63. package/build-module/components/post-taxonomies/index.js.map +1 -1
  64. package/build-module/components/post-type-support-check/index.js +1 -6
  65. package/build-module/components/post-type-support-check/index.js.map +1 -1
  66. package/build-module/components/theme-support-check/index.js +3 -3
  67. package/build-module/components/theme-support-check/index.js.map +1 -1
  68. package/build-module/components/time-to-read/index.js +2 -6
  69. package/build-module/components/time-to-read/index.js.map +1 -1
  70. package/build-module/store/selectors.js +1 -6
  71. package/build-module/store/selectors.js.map +1 -1
  72. package/build-module/store/utils/notice-builder.js +3 -3
  73. package/build-module/store/utils/notice-builder.js.map +1 -1
  74. package/build-style/style-rtl.css +0 -4
  75. package/build-style/style.css +0 -4
  76. package/package.json +30 -28
  77. package/src/components/entities-saved-states/entity-type-list.js +1 -7
  78. package/src/components/entities-saved-states/index.js +2 -3
  79. package/src/components/index.js +2 -0
  80. package/src/components/post-format/index.js +2 -2
  81. package/src/components/post-publish-button/index.js +2 -3
  82. package/src/components/post-publish-panel/maybe-category-panel.js +1 -6
  83. package/src/components/post-publish-panel/maybe-post-format-panel.js +2 -2
  84. package/src/components/post-publish-panel/maybe-tags-panel.js +1 -6
  85. package/src/components/post-saved-state/style.scss +0 -4
  86. package/src/components/post-schedule/index.js +16 -20
  87. package/src/components/post-taxonomies/check.js +2 -7
  88. package/src/components/post-taxonomies/flat-term-selector.js +3 -2
  89. package/src/components/post-taxonomies/hierarchical-term-selector.js +3 -3
  90. package/src/components/post-taxonomies/index.js +2 -2
  91. package/src/components/post-text-editor/test/index.js +7 -3
  92. package/src/components/post-type-support-check/index.js +3 -9
  93. package/src/components/theme-support-check/index.js +5 -3
  94. package/src/components/time-to-read/index.js +2 -2
  95. package/src/store/selectors.js +1 -10
  96. package/src/store/test/selectors.js +2 -56
  97. package/src/store/utils/notice-builder.js +3 -3
@@ -72,6 +72,8 @@ export { default as TableOfContents } from './table-of-contents';
72
72
  export { default as ThemeSupportCheck } from './theme-support-check';
73
73
  export { default as UnsavedChangesWarning } from './unsaved-changes-warning';
74
74
  export { default as WordCount } from './word-count';
75
+ export { default as TimeToRead } from './time-to-read';
76
+ export { default as CharacterCount } from './character-count';
75
77
 
76
78
  // State Related Components.
77
79
  export { default as EditorProvider } from './provider';
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { find, includes } from 'lodash';
4
+ import { find } from 'lodash';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -66,7 +66,7 @@ export default function PostFormat() {
66
66
  // Ensure current format is always in the set.
67
67
  // The current format may not be a format supported by the theme.
68
68
  return (
69
- includes( supportedFormats, format.id ) || postFormat === format.id
69
+ supportedFormats?.includes( format.id ) || postFormat === format.id
70
70
  );
71
71
  } );
72
72
  const suggestion = find(
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { get, some } from 'lodash';
4
+ import { get } from 'lodash';
5
5
  import classnames from 'classnames';
6
6
 
7
7
  /**
@@ -77,8 +77,7 @@ export class PostPublishButton extends Component {
77
77
  this.setState( { entitiesSavedStatesCallback: false }, () => {
78
78
  if (
79
79
  savedEntities &&
80
- some(
81
- savedEntities,
80
+ savedEntities.some(
82
81
  ( elt ) =>
83
82
  elt.kind === 'postType' &&
84
83
  elt.name === postType &&
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { some } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -34,7 +29,7 @@ function MaybeCategoryPanel() {
34
29
  );
35
30
  const postTypeSupportsCategories =
36
31
  categoriesTaxonomy &&
37
- some( categoriesTaxonomy.types, ( type ) => type === postType );
32
+ categoriesTaxonomy.types.some( ( type ) => type === postType );
38
33
  const categories =
39
34
  categoriesTaxonomy &&
40
35
  select( editorStore ).getEditedPostAttribute(
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { find, get, includes } from 'lodash';
4
+ import { find, get } from 'lodash';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -19,7 +19,7 @@ import { store as editorStore } from '../../store';
19
19
 
20
20
  const getSuggestion = ( supportedFormats, suggestedPostFormat ) => {
21
21
  const formats = POST_FORMATS.filter( ( format ) =>
22
- includes( supportedFormats, format.id )
22
+ supportedFormats?.includes( format.id )
23
23
  );
24
24
  return find( formats, ( format ) => format.id === suggestedPostFormat );
25
25
  };
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { some } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -79,7 +74,7 @@ export default compose(
79
74
  areTagsFetched: tagsTaxonomy !== undefined,
80
75
  isPostTypeSupported:
81
76
  tagsTaxonomy &&
82
- some( tagsTaxonomy.types, ( type ) => type === postType ),
77
+ tagsTaxonomy.types.some( ( type ) => type === postType ),
83
78
  hasTags: tags && tags.length,
84
79
  };
85
80
  } ),
@@ -38,7 +38,3 @@
38
38
  .editor-post-save-draft.has-text.has-icon svg {
39
39
  margin-right: 0;
40
40
  }
41
-
42
- :root[dir="rtl"] .editor-post-saved-state.has-text.has-icon {
43
- justify-content: right;
44
- }
@@ -1,3 +1,8 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { parseISO, endOfMonth, startOfMonth } from 'date-fns';
5
+
1
6
  /**
2
7
  * WordPress dependencies
3
8
  */
@@ -12,15 +17,6 @@ import { store as coreStore } from '@wordpress/core-data';
12
17
  */
13
18
  import { store as editorStore } from '../../store';
14
19
 
15
- function getDayOfTheMonth( date = new Date(), firstDay = true ) {
16
- const d = new Date( date );
17
- return new Date(
18
- d.getFullYear(),
19
- d.getMonth() + ( firstDay ? 0 : 1 ),
20
- firstDay ? 1 : 0
21
- ).toISOString();
22
- }
23
-
24
20
  export default function PostSchedule( { onClose } ) {
25
21
  const { postDate, postType } = useSelect(
26
22
  ( select ) => ( {
@@ -34,7 +30,7 @@ export default function PostSchedule( { onClose } ) {
34
30
  const onUpdateDate = ( date ) => editPost( { date } );
35
31
 
36
32
  const [ previewedMonth, setPreviewedMonth ] = useState(
37
- getDayOfTheMonth( postDate )
33
+ startOfMonth( new Date( postDate ) )
38
34
  );
39
35
 
40
36
  // Pick up published and schduled site posts.
@@ -42,22 +38,20 @@ export default function PostSchedule( { onClose } ) {
42
38
  ( select ) =>
43
39
  select( coreStore ).getEntityRecords( 'postType', postType, {
44
40
  status: 'publish,future',
45
- after: getDayOfTheMonth( previewedMonth ),
46
- before: getDayOfTheMonth( previewedMonth, false ),
41
+ after: startOfMonth( previewedMonth ).toISOString(),
42
+ before: endOfMonth( previewedMonth ).toISOString(),
47
43
  exclude: [ select( editorStore ).getCurrentPostId() ],
44
+ per_page: 100,
45
+ _fields: 'id,date',
48
46
  } ),
49
47
  [ previewedMonth, postType ]
50
48
  );
51
49
 
52
50
  const events = useMemo(
53
51
  () =>
54
- ( eventsByPostType || [] ).map(
55
- ( { title, type, date: eventDate } ) => ( {
56
- title: title?.rendered,
57
- type,
58
- date: new Date( eventDate ),
59
- } )
60
- ),
52
+ ( eventsByPostType || [] ).map( ( { date: eventDate } ) => ( {
53
+ date: new Date( eventDate ),
54
+ } ) ),
61
55
  [ eventsByPostType ]
62
56
  );
63
57
 
@@ -80,7 +74,9 @@ export default function PostSchedule( { onClose } ) {
80
74
  onChange={ onUpdateDate }
81
75
  is12Hour={ is12HourTime }
82
76
  events={ events }
83
- onMonthPreviewed={ setPreviewedMonth }
77
+ onMonthPreviewed={ ( date ) =>
78
+ setPreviewedMonth( parseISO( date ) )
79
+ }
84
80
  onClose={ onClose }
85
81
  />
86
82
  );
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { some, includes } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -16,8 +11,8 @@ import { store as coreStore } from '@wordpress/core-data';
16
11
  import { store as editorStore } from '../../store';
17
12
 
18
13
  export function PostTaxonomiesCheck( { postType, taxonomies, children } ) {
19
- const hasTaxonomies = some( taxonomies, ( taxonomy ) =>
20
- includes( taxonomy.types, postType )
14
+ const hasTaxonomies = taxonomies?.some( ( taxonomy ) =>
15
+ taxonomy.types.includes( postType )
21
16
  );
22
17
  if ( ! hasTaxonomies ) {
23
18
  return null;
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { escape as escapeString, find, get } from 'lodash';
4
+ import { find, get } from 'lodash';
5
+ import escapeHtml from 'escape-html';
5
6
 
6
7
  /**
7
8
  * WordPress dependencies
@@ -55,7 +56,7 @@ const termNamesToIds = ( names, terms ) => {
55
56
 
56
57
  // Tries to create a term or fetch it if it already exists.
57
58
  function findOrCreateTerm( termName, restBase, namespace ) {
58
- const escapedTermName = escapeString( termName );
59
+ const escapedTermName = escapeHtml( termName );
59
60
 
60
61
  return apiFetch( {
61
62
  path: `/${ namespace }/${ restBase }`,
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { find, get, some, unescape as unescapeString, without } from 'lodash';
4
+ import { find, get, unescape as unescapeString } from 'lodash';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -258,7 +258,7 @@ export function HierarchicalTermSelector( { slug } ) {
258
258
  const onChange = ( termId ) => {
259
259
  const hasTerm = terms.includes( termId );
260
260
  const newTerms = hasTerm
261
- ? without( terms, termId )
261
+ ? terms.filter( ( id ) => id !== termId )
262
262
  : [ ...terms, termId ];
263
263
  onUpdateTerms( newTerms );
264
264
  };
@@ -290,7 +290,7 @@ export function HierarchicalTermSelector( { slug } ) {
290
290
  const existingTerm = findTerm( availableTerms, formParent, formName );
291
291
  if ( existingTerm ) {
292
292
  // If the term we are adding exists but is not selected select it.
293
- if ( ! some( terms, ( term ) => term === existingTerm.id ) ) {
293
+ if ( ! terms.some( ( term ) => term === existingTerm.id ) ) {
294
294
  onUpdateTerms( [ ...terms, existingTerm.id ] );
295
295
  }
296
296
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { filter, includes } from 'lodash';
4
+ import { filter } from 'lodash';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -26,7 +26,7 @@ export function PostTaxonomies( {
26
26
  taxonomyWrapper = identity,
27
27
  } ) {
28
28
  const availableTaxonomies = filter( taxonomies, ( taxonomy ) =>
29
- includes( taxonomy.types, postType )
29
+ taxonomy.types.includes( postType )
30
30
  );
31
31
  const visibleTaxonomies = filter(
32
32
  availableTaxonomies,
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render, screen } from '@testing-library/react';
4
+ import { act, render, screen } from '@testing-library/react';
5
5
  import userEvent from '@testing-library/user-event';
6
6
 
7
7
  /**
@@ -117,7 +117,9 @@ describe( 'PostTextEditor', () => {
117
117
  await user.clear( textarea );
118
118
 
119
119
  // Stop editing.
120
- textarea.blur();
120
+ act( () => {
121
+ textarea.blur();
122
+ } );
121
123
 
122
124
  expect( mockResetEditorBlocks ).toHaveBeenCalledWith( [] );
123
125
  } );
@@ -147,7 +149,9 @@ describe( 'PostTextEditor', () => {
147
149
 
148
150
  rerender( <PostTextEditor /> );
149
151
 
150
- textarea.blur();
152
+ act( () => {
153
+ textarea.blur();
154
+ } );
151
155
 
152
156
  expect( textarea ).toHaveValue( 'Goodbye World' );
153
157
  } );
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { some, castArray } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -30,10 +25,9 @@ import { store as editorStore } from '../../store';
30
25
  export function PostTypeSupportCheck( { postType, children, supportKeys } ) {
31
26
  let isSupported = true;
32
27
  if ( postType ) {
33
- isSupported = some(
34
- castArray( supportKeys ),
35
- ( key ) => !! postType.supports[ key ]
36
- );
28
+ isSupported = (
29
+ Array.isArray( supportKeys ) ? supportKeys : [ supportKeys ]
30
+ ).some( ( key ) => !! postType.supports[ key ] );
37
31
  }
38
32
 
39
33
  if ( ! isSupported ) {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { castArray, includes, get, some } from 'lodash';
4
+ import { get } from 'lodash';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -20,14 +20,16 @@ export function ThemeSupportCheck( {
20
20
  postType,
21
21
  supportKeys,
22
22
  } ) {
23
- const isSupported = some( castArray( supportKeys ), ( key ) => {
23
+ const isSupported = (
24
+ Array.isArray( supportKeys ) ? supportKeys : [ supportKeys ]
25
+ ).some( ( key ) => {
24
26
  const supported = get( themeSupports, [ key ], false );
25
27
  // 'post-thumbnails' can be boolean or an array of post types.
26
28
  // In the latter case, we need to verify `postType` exists
27
29
  // within `supported`. If `postType` isn't passed, then the check
28
30
  // should fail.
29
31
  if ( 'post-thumbnails' === key && Array.isArray( supported ) ) {
30
- return includes( supported, postType );
32
+ return supported.includes( postType );
31
33
  }
32
34
  return supported;
33
35
  } );
@@ -38,7 +38,7 @@ export default function TimeToRead() {
38
38
  const minutesToReadString =
39
39
  minutesToRead === 0
40
40
  ? createInterpolateElement( __( '<span>< 1</span> minute' ), {
41
- span: <span className="table-of-contents__number" />,
41
+ span: <span />,
42
42
  } )
43
43
  : createInterpolateElement(
44
44
  sprintf(
@@ -51,7 +51,7 @@ export default function TimeToRead() {
51
51
  minutesToRead
52
52
  ),
53
53
  {
54
- span: <span className="table-of-contents__number" />,
54
+ span: <span />,
55
55
  }
56
56
  );
57
57
 
@@ -95,16 +95,7 @@ export function isEditedPostNew( state ) {
95
95
  */
96
96
  export function hasChangedContent( state ) {
97
97
  const edits = getPostEdits( state );
98
-
99
- return (
100
- 'blocks' in edits ||
101
- // `edits` is intended to contain only values which are different from
102
- // the saved post, so the mere presence of a property is an indicator
103
- // that the value is different than what is known to be saved. While
104
- // content in Visual mode is represented by the blocks state, in Text
105
- // mode it is tracked by `edits.content`.
106
- 'content' in edits
107
- );
98
+ return 'content' in edits;
108
99
  }
109
100
 
110
101
  /**
@@ -148,7 +148,6 @@ const {
148
148
  hasEditorUndo,
149
149
  hasEditorRedo,
150
150
  isEditedPostNew,
151
- hasChangedContent,
152
151
  isEditedPostDirty,
153
152
  hasNonPostEntityChanges,
154
153
  isCleanNewPost,
@@ -392,57 +391,6 @@ describe( 'selectors', () => {
392
391
  } );
393
392
  } );
394
393
 
395
- describe( 'hasChangedContent', () => {
396
- it( 'should return false if no dirty blocks nor content property edit', () => {
397
- const state = {
398
- editor: {
399
- present: {
400
- blocks: {
401
- isDirty: false,
402
- },
403
- edits: {},
404
- },
405
- },
406
- };
407
-
408
- expect( hasChangedContent( state ) ).toBe( false );
409
- } );
410
-
411
- it( 'should return true if dirty blocks', () => {
412
- const state = {
413
- editor: {
414
- present: {
415
- blocks: {
416
- isDirty: true,
417
- value: [],
418
- },
419
- edits: {},
420
- },
421
- },
422
- };
423
-
424
- expect( hasChangedContent( state ) ).toBe( true );
425
- } );
426
-
427
- it( 'should return true if content property edit', () => {
428
- const state = {
429
- editor: {
430
- present: {
431
- blocks: {
432
- isDirty: false,
433
- value: [],
434
- },
435
- edits: {
436
- content: 'text mode edited',
437
- },
438
- },
439
- },
440
- };
441
-
442
- expect( hasChangedContent( state ) ).toBe( true );
443
- } );
444
- } );
445
-
446
394
  describe( 'isEditedPostDirty', () => {
447
395
  it( 'should return false when blocks state not dirty nor edits exist', () => {
448
396
  const state = {
@@ -1566,11 +1514,9 @@ describe( 'selectors', () => {
1566
1514
  const state = {
1567
1515
  editor: {
1568
1516
  present: {
1569
- blocks: {
1570
- value: [],
1571
- isDirty: true,
1517
+ edits: {
1518
+ content: () => 'new-content',
1572
1519
  },
1573
- edits: {},
1574
1520
  },
1575
1521
  },
1576
1522
  currentPost: {
@@ -11,7 +11,7 @@ import { SAVE_POST_NOTICE_ID, TRASH_POST_NOTICE_ID } from '../constants';
11
11
  /**
12
12
  * External dependencies
13
13
  */
14
- import { get, includes } from 'lodash';
14
+ import { get } from 'lodash';
15
15
 
16
16
  /**
17
17
  * Builds the arguments for a success notification dispatch.
@@ -34,8 +34,8 @@ export function getNotificationArgumentsForSaveSuccess( data ) {
34
34
  }
35
35
 
36
36
  const publishStatus = [ 'publish', 'private', 'future' ];
37
- const isPublished = includes( publishStatus, previousPost.status );
38
- const willPublish = includes( publishStatus, post.status );
37
+ const isPublished = publishStatus.includes( previousPost.status );
38
+ const willPublish = publishStatus.includes( post.status );
39
39
 
40
40
  let noticeMessage;
41
41
  let shouldShowLink = get( postType, [ 'viewable' ], false );