UNPKG

@wordpress/editor

Version:
8 lines (7 loc) 8.9 kB
{ "version": 3, "sources": ["../../../src/components/collab-sidebar/note.js"], "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { RawHTML, useRef, useState } from '@wordpress/element';\nimport {\n\t__experimentalConfirmDialog as ConfirmDialog,\n\tButton,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { moreVertical, published } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { NoteCard } from './note-card';\nimport { NoteForm } from './note-form';\nimport { unlock } from '../../lock-unlock';\n\nconst { Menu } = unlock( componentsPrivateApis );\n\nfunction NoteActionsMenu( { items, buttonRef } ) {\n\treturn (\n\t\t<Menu placement=\"bottom-end\">\n\t\t\t<Menu.TriggerButton\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\tref={ buttonRef }\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\tlabel={ __( 'Actions' ) }\n\t\t\t\t\t\tdisabled={ ! items.length }\n\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<Menu.Popover\n\t\t\t\t// The menu popover is rendered in a portal, which causes focus to be\n\t\t\t\t// lost and the note to be collapsed unintentionally. To prevent this,\n\t\t\t\t// the popover should be rendered as an inline.\n\t\t\t\tmodal={ false }\n\t\t\t>\n\t\t\t\t{ items.map( ( item ) => (\n\t\t\t\t\t<Menu.Item key={ item.id } onClick={ item.onClick }>\n\t\t\t\t\t\t<Menu.ItemLabel>{ item.title }</Menu.ItemLabel>\n\t\t\t\t\t</Menu.Item>\n\t\t\t\t) ) }\n\t\t\t</Menu.Popover>\n\t\t</Menu>\n\t);\n}\n\nexport function Note( {\n\tnote,\n\tparentNote,\n\tisSelected,\n\tonEditNote,\n\tonDeleteNote,\n\tonResolve,\n} ) {\n\tconst [ actionState, setActionState ] = useState( null );\n\tconst actionButtonRef = useRef( null );\n\n\tconst canResolve = note.parent === 0;\n\tconst isResolutionNote =\n\t\tnote.type === 'note' &&\n\t\tnote.meta &&\n\t\t( note.meta._wp_note_status === 'resolved' ||\n\t\t\tnote.meta._wp_note_status === 'reopen' );\n\n\tconst menuItems = [\n\t\t{\n\t\t\tid: 'edit',\n\t\t\ttitle: __( 'Edit' ),\n\t\t\tisEligible: ( { status } ) => status !== 'approved',\n\t\t\tonClick: () => setActionState( 'edit' ),\n\t\t},\n\t\t{\n\t\t\tid: 'reopen',\n\t\t\ttitle: _x( 'Reopen', 'Reopen note' ),\n\t\t\tisEligible: ( { status } ) => status === 'approved',\n\t\t\tonClick: () => onEditNote( { id: note.id, status: 'hold' } ),\n\t\t},\n\t\t{\n\t\t\tid: 'delete',\n\t\t\ttitle: __( 'Delete' ),\n\t\t\tisEligible: () => true,\n\t\t\tonClick: () => setActionState( 'delete' ),\n\t\t},\n\t];\n\tconst availableItems =\n\t\tparentNote?.status !== 'approved'\n\t\t\t? menuItems.filter( ( item ) => item.isEligible( note ) )\n\t\t\t: [];\n\n\tconst deleteConfirmMessage =\n\t\tnote.parent === 0\n\t\t\t? __(\n\t\t\t\t\t\"Are you sure you want to delete this note? This will also delete all of this note's replies.\"\n\t\t\t )\n\t\t\t: __( 'Are you sure you want to delete this reply?' );\n\n\tconst handleCancel = () => {\n\t\tsetActionState( null );\n\t\tactionButtonRef.current?.focus();\n\t};\n\n\tlet body;\n\tif ( actionState === 'edit' ) {\n\t\tbody = (\n\t\t\t<NoteForm\n\t\t\t\tonSubmit={ ( value ) => {\n\t\t\t\t\tonEditNote( { id: note.id, content: value } );\n\t\t\t\t\tsetActionState( null );\n\t\t\t\t\tactionButtonRef.current?.focus();\n\t\t\t\t} }\n\t\t\t\tonCancel={ handleCancel }\n\t\t\t\tnote={ note }\n\t\t\t\tlabels={ {\n\t\t\t\t\tsubmit: _x( 'Update', 'verb' ),\n\t\t\t\t\tinput: sprintf(\n\t\t\t\t\t\t// translators: %1$s: note identifier, %2$s: author name.\n\t\t\t\t\t\t__( 'Edit note %1$s by %2$s' ),\n\t\t\t\t\t\tnote.id,\n\t\t\t\t\t\tnote.author_name\n\t\t\t\t\t),\n\t\t\t\t} }\n\t\t\t/>\n\t\t);\n\t} else if ( isResolutionNote ) {\n\t\tconst actionText =\n\t\t\tnote.meta._wp_note_status === 'resolved'\n\t\t\t\t? __( 'Marked as resolved' )\n\t\t\t\t: __( 'Reopened' );\n\t\tconst raw = note?.content?.raw;\n\t\tconst text =\n\t\t\traw && typeof raw === 'string' && raw.trim() !== ''\n\t\t\t\t? sprintf(\n\t\t\t\t\t\t// translators: %1$s: action label (\"Marked as resolved\" or \"Reopened\"); %2$s: note text.\n\t\t\t\t\t\t__( '%1$s: %2$s' ),\n\t\t\t\t\t\tactionText,\n\t\t\t\t\t\traw\n\t\t\t\t )\n\t\t\t\t: actionText;\n\t\tbody = (\n\t\t\t<RawHTML\n\t\t\t\tclassName={ clsx(\n\t\t\t\t\t'editor-collab-sidebar-panel__note-content',\n\t\t\t\t\t'editor-collab-sidebar-panel__resolution-text'\n\t\t\t\t) }\n\t\t\t>\n\t\t\t\t{ text }\n\t\t\t</RawHTML>\n\t\t);\n\t} else {\n\t\tbody = (\n\t\t\t<RawHTML className=\"editor-collab-sidebar-panel__note-content\">\n\t\t\t\t{ note?.content?.rendered }\n\t\t\t</RawHTML>\n\t\t);\n\t}\n\n\tconst actions = isSelected ? (\n\t\t<>\n\t\t\t{ canResolve && onResolve && (\n\t\t\t\t<Button\n\t\t\t\t\tlabel={ _x( 'Resolve', 'Mark note as resolved' ) }\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\ticon={ published }\n\t\t\t\t\tdisabled={ note.status === 'approved' }\n\t\t\t\t\taccessibleWhenDisabled={ note.status === 'approved' }\n\t\t\t\t\tonClick={ onResolve }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t<NoteActionsMenu\n\t\t\t\titems={ availableItems }\n\t\t\t\tbuttonRef={ actionButtonRef }\n\t\t\t/>\n\t\t</>\n\t) : null;\n\n\treturn (\n\t\t<NoteCard\n\t\t\tnote={ note }\n\t\t\tactions={ actions }\n\t\t\trole={ note.parent !== 0 ? 'treeitem' : undefined }\n\t\t>\n\t\t\t{ body }\n\t\t\t{ actionState === 'delete' && (\n\t\t\t\t<ConfirmDialog\n\t\t\t\t\tisOpen\n\t\t\t\t\tonConfirm={ () => {\n\t\t\t\t\t\tonDeleteNote( note );\n\t\t\t\t\t\tsetActionState( null );\n\t\t\t\t\t} }\n\t\t\t\t\tonCancel={ handleCancel }\n\t\t\t\t\tconfirmButtonText={ __( 'Delete' ) }\n\t\t\t\t>\n\t\t\t\t\t{ deleteConfirmMessage }\n\t\t\t\t</ConfirmDialog>\n\t\t\t) }\n\t\t</NoteCard>\n\t);\n}\n"], "mappings": "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", "names": ["componentsPrivateApis", "clsx", "ConfirmDialog"] }