{
  "version": 3,
  "sources": ["../../../src/components/post-revisions-timeline/index.js"],
  "sourcesContent": ["import { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { DataViewsPicker, filterSortAndPaginate } from '@wordpress/dataviews';\nimport { dateI18n, getDate, humanTimeDiff, getSettings } from '@wordpress/date';\nimport { useCallback, useEffect, useMemo, useState } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { authorField } from '@wordpress/fields';\nimport { Badge, Stack, Text } from '@wordpress/ui';\nimport { store as editorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport { PostContentInformationUI } from '../post-content-information';\n\nconst PAGE_SIZE = 10;\nconst EMPTY_ARRAY = [];\nconst defaultLayouts = { pickerActivity: true };\nconst baseView = {\n\ttype: 'pickerActivity',\n\ttitleField: 'date',\n\tdescriptionField: 'details',\n\tfields: [ 'author' ],\n\tlayout: { density: 'compact' },\n\tpage: 1,\n\tperPage: PAGE_SIZE,\n};\n\nconst DAY_IN_MILLISECONDS = 86400000;\n\nfunction getDisplayDate( value ) {\n\tconst dateNowInMs = getDate( null ).getTime();\n\tconst date = getDate( value ?? null );\n\treturn dateNowInMs - date.getTime() > DAY_IN_MILLISECONDS\n\t\t? dateI18n( getSettings().formats.datetimeAbbreviated, date )\n\t\t: humanTimeDiff( date );\n}\n\nfunction isAutosaveRevision( item ) {\n\t// Autosaves use the `{parent_id}-autosave-v1` slug, like Core's `wp_is_post_autosave()`.\n\treturn item.slug?.endsWith( '-autosave-v1' ) ?? false;\n}\n\nfunction RevisionBadges( { item } ) {\n\tif ( ! isAutosaveRevision( item ) ) {\n\t\treturn null;\n\t}\n\n\treturn <Badge intent=\"none\">{ __( 'Autosave' ) }</Badge>;\n}\n\nexport default function PostRevisionsTimeline() {\n\tconst { setCurrentRevisionId } = unlock( useDispatch( editorStore ) );\n\tconst [ view, setView ] = useState( baseView );\n\n\tconst { revisions, revisionKey, currentRevisionId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getCurrentPostType } = select( editorStore );\n\t\t\tconst {\n\t\t\t\tgetCurrentRevisionId: _getCurrentRevisionId,\n\t\t\t\tgetRevisionPage,\n\t\t\t\tgetPageRevisions,\n\t\t\t} = unlock( select( editorStore ) );\n\t\t\tconst { getEntityConfig } = select( coreStore );\n\n\t\t\tconst _postType = getCurrentPostType();\n\t\t\tconst entityConfig = getEntityConfig( 'postType', _postType );\n\t\t\tconst _revisionKey = entityConfig?.revisionKey || 'id';\n\t\t\tconst _currentRevisionId = _getCurrentRevisionId();\n\n\t\t\treturn {\n\t\t\t\t// Same desc-ordered window the header slider renders (warm cache).\n\t\t\t\trevisions: getPageRevisions( getRevisionPage() ),\n\t\t\t\trevisionKey: _revisionKey,\n\t\t\t\tcurrentRevisionId: _currentRevisionId,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst isLoading = ! revisions;\n\n\tconst fields = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tid: 'date',\n\t\t\t\tlabel: __( 'Date' ),\n\t\t\t\t// Return the humanized label the row renders so the picker\n\t\t\t\t// option's accessible name announces e.g. \"5 minutes ago\"\n\t\t\t\t// instead of the raw ISO timestamp.\n\t\t\t\tgetValue: ( { item } ) => {\n\t\t\t\t\tconst displayDate = getDisplayDate( item.date );\n\n\t\t\t\t\tif ( ! isAutosaveRevision( item ) ) {\n\t\t\t\t\t\treturn displayDate;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn sprintf(\n\t\t\t\t\t\t/* translators: 1: revision date, 2: revision type. */\n\t\t\t\t\t\t__( '%1$s, %2$s' ),\n\t\t\t\t\t\tdisplayDate,\n\t\t\t\t\t\t__( 'Autosave' )\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\trender: ( { item } ) => (\n\t\t\t\t\t<Stack direction=\"row\" align=\"center\" gap=\"sm\">\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tvariant=\"heading-sm\"\n\t\t\t\t\t\t\trender={ <time dateTime={ item.date } /> }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ getDisplayDate( item.date ) }\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t<RevisionBadges item={ item } />\n\t\t\t\t\t</Stack>\n\t\t\t\t),\n\t\t\t\tenableSorting: false,\n\t\t\t\tenableHiding: false,\n\t\t\t},\n\t\t\tauthorField,\n\t\t\t{\n\t\t\t\tid: 'details',\n\t\t\t\tlabel: __( 'Details' ),\n\t\t\t\trender: ( { item } ) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tString( item[ revisionKey ] ) !==\n\t\t\t\t\t\tString( currentRevisionId )\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<PostContentInformationUI\n\t\t\t\t\t\t\tpostContent={ item.content?.raw }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tenableSorting: false,\n\t\t\t\tenableHiding: false,\n\t\t\t},\n\t\t],\n\t\t[ revisionKey, currentRevisionId ]\n\t);\n\n\tconst { data: shownRevisions, paginationInfo } = useMemo(\n\t\t() => filterSortAndPaginate( revisions || EMPTY_ARRAY, view, fields ),\n\t\t[ revisions, view, fields ]\n\t);\n\n\t// Keep the selected revision visible: when it changes (e.g. the slider\n\t// scrubs), jump to the client-side page that contains it. Keyed on the\n\t// selection/data, not view.page, so manual paging stays free browsing.\n\tuseEffect( () => {\n\t\tif ( ! currentRevisionId || ! revisions ) {\n\t\t\treturn;\n\t\t}\n\t\tconst index = revisions.findIndex(\n\t\t\t( r ) => String( r[ revisionKey ] ) === String( currentRevisionId )\n\t\t);\n\t\tif ( index < 0 ) {\n\t\t\treturn;\n\t\t}\n\t\tconst page = Math.floor( index / view.perPage ) + 1;\n\t\tsetView( ( v ) => ( v.page === page ? v : { ...v, page } ) );\n\t}, [ currentRevisionId, revisions, revisionKey, view.perPage ] );\n\n\tconst selection = useMemo(\n\t\t() =>\n\t\t\tcurrentRevisionId ? [ String( currentRevisionId ) ] : EMPTY_ARRAY,\n\t\t[ currentRevisionId ]\n\t);\n\n\tconst onChangeSelection = useCallback(\n\t\t( newSelection ) => {\n\t\t\t// Revisions mode always keeps one revision selected. Clicking the\n\t\t\t// active revision yields an empty selection, which we ignore so the\n\t\t\t// timeline never ends up with nothing selected.\n\t\t\tif ( newSelection.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst selectedId = newSelection[ newSelection.length - 1 ];\n\t\t\tsetCurrentRevisionId( Number( selectedId ) );\n\t\t},\n\t\t[ setCurrentRevisionId ]\n\t);\n\n\tconst getItemId = useCallback(\n\t\t( item ) => String( item[ revisionKey ] ),\n\t\t[ revisionKey ]\n\t);\n\n\treturn (\n\t\t<div className=\"editor-post-revisions-timeline\">\n\t\t\t<DataViewsPicker\n\t\t\t\tview={ view }\n\t\t\t\tonChangeView={ setView }\n\t\t\t\tfields={ fields }\n\t\t\t\tdata={ shownRevisions }\n\t\t\t\tisLoading={ isLoading }\n\t\t\t\tpaginationInfo={ paginationInfo }\n\t\t\t\tdefaultLayouts={ defaultLayouts }\n\t\t\t\tgetItemId={ getItemId }\n\t\t\t\tselection={ selection }\n\t\t\t\tonChangeSelection={ onChangeSelection }\n\t\t\t>\n\t\t\t\t<DataViewsPicker.Layout />\n\t\t\t\t<DataViewsPicker.Footer />\n\t\t\t</DataViewsPicker>\n\t\t</div>\n\t);\n}\n"],
  "mappings": "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",
  "names": ["editorStore", "coreStore"]
}
