@wordpress/dataviews 4.11.1 → 4.13.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 (38) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +1 -1
  3. package/build/components/dataviews-selection-checkbox/index.js +6 -10
  4. package/build/components/dataviews-selection-checkbox/index.js.map +1 -1
  5. package/build/components/dataviews-view-config/index.js +115 -13
  6. package/build/components/dataviews-view-config/index.js.map +1 -1
  7. package/build/dataviews-layouts/table/index.js +2 -2
  8. package/build/dataviews-layouts/table/index.js.map +1 -1
  9. package/build/field-types/integer.js +1 -1
  10. package/build/field-types/integer.js.map +1 -1
  11. package/build/types.js.map +1 -1
  12. package/build-module/components/dataviews-selection-checkbox/index.js +6 -10
  13. package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -1
  14. package/build-module/components/dataviews-view-config/index.js +118 -15
  15. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  16. package/build-module/dataviews-layouts/table/index.js +2 -2
  17. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  18. package/build-module/field-types/integer.js +1 -1
  19. package/build-module/field-types/integer.js.map +1 -1
  20. package/build-module/types.js.map +1 -1
  21. package/build-style/style-rtl.css +25 -22
  22. package/build-style/style.css +25 -22
  23. package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
  24. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  25. package/build-types/types.d.ts +1 -1
  26. package/build-types/types.d.ts.map +1 -1
  27. package/build-wp/index.js +338 -181
  28. package/package.json +11 -11
  29. package/src/components/dataviews/style.scss +8 -4
  30. package/src/components/dataviews-footer/style.scss +5 -2
  31. package/src/components/dataviews-selection-checkbox/index.tsx +6 -15
  32. package/src/components/dataviews-view-config/index.tsx +176 -36
  33. package/src/components/dataviews-view-config/style.scss +15 -2
  34. package/src/dataviews-layouts/grid/style.scss +3 -2
  35. package/src/dataviews-layouts/table/index.tsx +2 -2
  36. package/src/field-types/integer.tsx +1 -1
  37. package/src/types.ts +1 -1
  38. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["_clsx","_interopRequireDefault","require","_i18n","_components","_element","_dataviewsSelectionCheckbox","_dataviewsItemActions","_constants","_dataviewsBulkActions","_columnHeaderMenu","_columnPrimary","_jsxRuntime","TableColumnField","item","fields","column","field","find","f","id","jsx","className","children","render","TableRow","hasBulkActions","level","actions","view","titleField","mediaField","descriptionField","selection","getItemId","isItemClickable","onClickItem","onChangeSelection","_view$fields","hasPossibleBulkAction","useHasAPossibleBulkAction","isSelected","includes","isHovered","setIsHovered","useState","showTitle","showMedia","showDescription","handleMouseEnter","handleMouseLeave","isTouchDeviceRef","useRef","columns","hasPrimaryColumn","jsxs","clsx","onMouseEnter","onMouseLeave","onTouchStart","current","onClick","document","getSelection","type","filter","itemId","style","width","default","disabled","undefined","map","_view$layout$styles$c","maxWidth","minWidth","layout","styles","length","e","stopPropagation","ViewTable","data","getItemLevel","isLoading","onChangeView","setOpenedFilter","_view$fields2","headerMenuRefs","Map","headerMenuToFocusRef","nextHeaderMenuToFocus","setNextHeaderMenuToFocus","useSomeItemHasAPossibleBulkAction","useEffect","focus","tableNoticeId","useId","onHide","hidden","get","fallback","node","hasData","headerMenuRef","index","set","delete","Fragment","density","scope","BulkSelectionCheckbox","ref","fieldId","canMove","_view$layout$styles$c2","sort","direction","sortValues","__","showLevels","toString","Spinner","_default","exports"],"sources":["@wordpress/dataviews/src/dataviews-layouts/table/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Spinner } from '@wordpress/components';\nimport { useEffect, useId, useRef, useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport DataViewsSelectionCheckbox from '../../components/dataviews-selection-checkbox';\nimport ItemActions from '../../components/dataviews-item-actions';\nimport { sortValues } from '../../constants';\nimport {\n\tuseSomeItemHasAPossibleBulkAction,\n\tuseHasAPossibleBulkAction,\n\tBulkSelectionCheckbox,\n} from '../../components/dataviews-bulk-actions';\nimport type {\n\tAction,\n\tNormalizedField,\n\tViewTable as ViewTableType,\n\tViewTableProps,\n} from '../../types';\nimport type { SetSelection } from '../../private-types';\nimport ColumnHeaderMenu from './column-header-menu';\nimport ColumnPrimary from './column-primary';\n\ninterface TableColumnFieldProps< Item > {\n\tfields: NormalizedField< Item >[];\n\tcolumn: string;\n\titem: Item;\n}\n\ninterface TableRowProps< Item > {\n\thasBulkActions: boolean;\n\titem: Item;\n\tlevel?: number;\n\tactions: Action< Item >[];\n\tfields: NormalizedField< Item >[];\n\tid: string;\n\tview: ViewTableType;\n\ttitleField?: NormalizedField< Item >;\n\tmediaField?: NormalizedField< Item >;\n\tdescriptionField?: NormalizedField< Item >;\n\tselection: string[];\n\tgetItemId: ( item: Item ) => string;\n\tonChangeSelection: SetSelection;\n\tisItemClickable: ( item: Item ) => boolean;\n\tonClickItem?: ( item: Item ) => void;\n}\n\nfunction TableColumnField< Item >( {\n\titem,\n\tfields,\n\tcolumn,\n}: TableColumnFieldProps< Item > ) {\n\tconst field = fields.find( ( f ) => f.id === column );\n\n\tif ( ! field ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"dataviews-view-table__cell-content-wrapper\">\n\t\t\t<field.render { ...{ item } } />\n\t\t</div>\n\t);\n}\n\nfunction TableRow< Item >( {\n\thasBulkActions,\n\titem,\n\tlevel,\n\tactions,\n\tfields,\n\tid,\n\tview,\n\ttitleField,\n\tmediaField,\n\tdescriptionField,\n\tselection,\n\tgetItemId,\n\tisItemClickable,\n\tonClickItem,\n\tonChangeSelection,\n}: TableRowProps< Item > ) {\n\tconst hasPossibleBulkAction = useHasAPossibleBulkAction( actions, item );\n\tconst isSelected = hasPossibleBulkAction && selection.includes( id );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst { showTitle = true, showMedia = true, showDescription = true } = view;\n\tconst handleMouseEnter = () => {\n\t\tsetIsHovered( true );\n\t};\n\tconst handleMouseLeave = () => {\n\t\tsetIsHovered( false );\n\t};\n\n\t// Will be set to true if `onTouchStart` fires. This happens before\n\t// `onClick` and can be used to exclude touchscreen devices from certain\n\t// behaviours.\n\tconst isTouchDeviceRef = useRef( false );\n\tconst columns = view.fields ?? [];\n\tconst hasPrimaryColumn =\n\t\t( titleField && showTitle ) ||\n\t\t( mediaField && showMedia ) ||\n\t\t( descriptionField && showDescription );\n\n\treturn (\n\t\t<tr\n\t\t\tclassName={ clsx( 'dataviews-view-table__row', {\n\t\t\t\t'is-selected': hasPossibleBulkAction && isSelected,\n\t\t\t\t'is-hovered': isHovered,\n\t\t\t\t'has-bulk-actions': hasPossibleBulkAction,\n\t\t\t} ) }\n\t\t\tonMouseEnter={ handleMouseEnter }\n\t\t\tonMouseLeave={ handleMouseLeave }\n\t\t\tonTouchStart={ () => {\n\t\t\t\tisTouchDeviceRef.current = true;\n\t\t\t} }\n\t\t\tonClick={ () => {\n\t\t\t\tif ( ! hasPossibleBulkAction ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t! isTouchDeviceRef.current &&\n\t\t\t\t\tdocument.getSelection()?.type !== 'Range'\n\t\t\t\t) {\n\t\t\t\t\tonChangeSelection(\n\t\t\t\t\t\tselection.includes( id )\n\t\t\t\t\t\t\t? selection.filter( ( itemId ) => id !== itemId )\n\t\t\t\t\t\t\t: [ id ]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} }\n\t\t>\n\t\t\t{ hasBulkActions && (\n\t\t\t\t<td\n\t\t\t\t\tclassName=\"dataviews-view-table__checkbox-column\"\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\twidth: '1%',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<div className=\"dataviews-view-table__cell-content-wrapper\">\n\t\t\t\t\t\t<DataViewsSelectionCheckbox\n\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\tselection={ selection }\n\t\t\t\t\t\t\tonChangeSelection={ onChangeSelection }\n\t\t\t\t\t\t\tgetItemId={ getItemId }\n\t\t\t\t\t\t\ttitleField={ titleField }\n\t\t\t\t\t\t\tdisabled={ ! hasPossibleBulkAction }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t) }\n\t\t\t{ hasPrimaryColumn && (\n\t\t\t\t<td>\n\t\t\t\t\t<ColumnPrimary\n\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\ttitleField={ showTitle ? titleField : undefined }\n\t\t\t\t\t\tmediaField={ showMedia ? mediaField : undefined }\n\t\t\t\t\t\tdescriptionField={\n\t\t\t\t\t\t\tshowDescription ? descriptionField : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisItemClickable={ isItemClickable }\n\t\t\t\t\t\tonClickItem={ onClickItem }\n\t\t\t\t\t/>\n\t\t\t\t</td>\n\t\t\t) }\n\t\t\t{ columns.map( ( column: string ) => {\n\t\t\t\t// Explicits picks the supported styles.\n\t\t\t\tconst { width, maxWidth, minWidth } =\n\t\t\t\t\tview.layout?.styles?.[ column ] ?? {};\n\n\t\t\t\treturn (\n\t\t\t\t\t<td key={ column } style={ { width, maxWidth, minWidth } }>\n\t\t\t\t\t\t<TableColumnField\n\t\t\t\t\t\t\tfields={ fields }\n\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\tcolumn={ column }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ !! actions?.length && (\n\t\t\t\t// Disable reason: we are not making the element interactive,\n\t\t\t\t// but preventing any click events from bubbling up to the\n\t\t\t\t// table row. This allows us to add a click handler to the row\n\t\t\t\t// itself (to toggle row selection) without erroneously\n\t\t\t\t// intercepting click events from ItemActions.\n\n\t\t\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t\t\t<td\n\t\t\t\t\tclassName=\"dataviews-view-table__actions-column\"\n\t\t\t\t\tonClick={ ( e ) => e.stopPropagation() }\n\t\t\t\t>\n\t\t\t\t\t<ItemActions item={ item } actions={ actions } />\n\t\t\t\t</td>\n\t\t\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t\t) }\n\t\t</tr>\n\t);\n}\n\nfunction ViewTable< Item >( {\n\tactions,\n\tdata,\n\tfields,\n\tgetItemId,\n\tgetItemLevel,\n\tisLoading = false,\n\tonChangeView,\n\tonChangeSelection,\n\tselection,\n\tsetOpenedFilter,\n\tonClickItem,\n\tisItemClickable,\n\tview,\n}: ViewTableProps< Item > ) {\n\tconst headerMenuRefs = useRef<\n\t\tMap< string, { node: HTMLButtonElement; fallback: string } >\n\t>( new Map() );\n\tconst headerMenuToFocusRef = useRef< HTMLButtonElement >();\n\tconst [ nextHeaderMenuToFocus, setNextHeaderMenuToFocus ] =\n\t\tuseState< HTMLButtonElement >();\n\tconst hasBulkActions = useSomeItemHasAPossibleBulkAction( actions, data );\n\n\tuseEffect( () => {\n\t\tif ( headerMenuToFocusRef.current ) {\n\t\t\theaderMenuToFocusRef.current.focus();\n\t\t\theaderMenuToFocusRef.current = undefined;\n\t\t}\n\t} );\n\n\tconst tableNoticeId = useId();\n\n\tif ( nextHeaderMenuToFocus ) {\n\t\t// If we need to force focus, we short-circuit rendering here\n\t\t// to prevent any additional work while we handle that.\n\t\t// Clearing out the focus directive is necessary to make sure\n\t\t// future renders don't cause unexpected focus jumps.\n\t\theaderMenuToFocusRef.current = nextHeaderMenuToFocus;\n\t\tsetNextHeaderMenuToFocus( undefined );\n\t\treturn;\n\t}\n\n\tconst onHide = ( field: NormalizedField< Item > ) => {\n\t\tconst hidden = headerMenuRefs.current.get( field.id );\n\t\tconst fallback = hidden\n\t\t\t? headerMenuRefs.current.get( hidden.fallback )\n\t\t\t: undefined;\n\t\tsetNextHeaderMenuToFocus( fallback?.node );\n\t};\n\n\tconst hasData = !! data?.length;\n\n\tconst titleField = fields.find( ( field ) => field.id === view.titleField );\n\tconst mediaField = fields.find( ( field ) => field.id === view.mediaField );\n\tconst descriptionField = fields.find(\n\t\t( field ) => field.id === view.descriptionField\n\t);\n\tconst { showTitle = true, showMedia = true, showDescription = true } = view;\n\tconst hasPrimaryColumn =\n\t\t( titleField && showTitle ) ||\n\t\t( mediaField && showMedia ) ||\n\t\t( descriptionField && showDescription );\n\tconst columns = view.fields ?? [];\n\tconst headerMenuRef =\n\t\t( column: string, index: number ) => ( node: HTMLButtonElement ) => {\n\t\t\tif ( node ) {\n\t\t\t\theaderMenuRefs.current.set( column, {\n\t\t\t\t\tnode,\n\t\t\t\t\tfallback: columns[ index > 0 ? index - 1 : 1 ],\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\theaderMenuRefs.current.delete( column );\n\t\t\t}\n\t\t};\n\n\treturn (\n\t\t<>\n\t\t\t<table\n\t\t\t\tclassName={ clsx( 'dataviews-view-table', {\n\t\t\t\t\t[ `has-${ view.layout?.density }-density` ]:\n\t\t\t\t\t\tview.layout?.density &&\n\t\t\t\t\t\t[ 'compact', 'comfortable' ].includes(\n\t\t\t\t\t\t\tview.layout.density\n\t\t\t\t\t\t),\n\t\t\t\t} ) }\n\t\t\t\taria-busy={ isLoading }\n\t\t\t\taria-describedby={ tableNoticeId }\n\t\t\t>\n\t\t\t\t<thead>\n\t\t\t\t\t<tr className=\"dataviews-view-table__row\">\n\t\t\t\t\t\t{ hasBulkActions && (\n\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\tclassName=\"dataviews-view-table__checkbox-column\"\n\t\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\t\twidth: '1%',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<BulkSelectionCheckbox\n\t\t\t\t\t\t\t\t\tselection={ selection }\n\t\t\t\t\t\t\t\t\tonChangeSelection={ onChangeSelection }\n\t\t\t\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\t\t\t\tgetItemId={ getItemId }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ hasPrimaryColumn && (\n\t\t\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t\t\t<span className=\"dataviews-view-table-header\">\n\t\t\t\t\t\t\t\t\t{ titleField && (\n\t\t\t\t\t\t\t\t\t\t<ColumnHeaderMenu\n\t\t\t\t\t\t\t\t\t\t\tref={ headerMenuRef(\n\t\t\t\t\t\t\t\t\t\t\t\ttitleField.id,\n\t\t\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\tfieldId={ titleField.id }\n\t\t\t\t\t\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\t\t\t\t\t\tfields={ fields }\n\t\t\t\t\t\t\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\t\t\t\t\t\t\tonHide={ onHide }\n\t\t\t\t\t\t\t\t\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t\t\t\t\t\t\t\t\t\tcanMove={ false }\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</span>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ columns.map( ( column, index ) => {\n\t\t\t\t\t\t\t// Explicits picks the supported styles.\n\t\t\t\t\t\t\tconst { width, maxWidth, minWidth } =\n\t\t\t\t\t\t\t\tview.layout?.styles?.[ column ] ?? {};\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\t\tkey={ column }\n\t\t\t\t\t\t\t\t\tstyle={ { width, maxWidth, minWidth } }\n\t\t\t\t\t\t\t\t\taria-sort={\n\t\t\t\t\t\t\t\t\t\tview.sort?.direction &&\n\t\t\t\t\t\t\t\t\t\tview.sort?.field === column\n\t\t\t\t\t\t\t\t\t\t\t? sortValues[ view.sort.direction ]\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ColumnHeaderMenu\n\t\t\t\t\t\t\t\t\t\tref={ headerMenuRef( column, index ) }\n\t\t\t\t\t\t\t\t\t\tfieldId={ column }\n\t\t\t\t\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\t\t\t\t\tfields={ fields }\n\t\t\t\t\t\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\t\t\t\t\t\tonHide={ onHide }\n\t\t\t\t\t\t\t\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t{ !! actions?.length && (\n\t\t\t\t\t\t\t<th className=\"dataviews-view-table__actions-column\">\n\t\t\t\t\t\t\t\t<span className=\"dataviews-view-table-header\">\n\t\t\t\t\t\t\t\t\t{ __( 'Actions' ) }\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t{ hasData &&\n\t\t\t\t\t\tdata.map( ( item, index ) => (\n\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\tkey={ getItemId( item ) }\n\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\tlevel={\n\t\t\t\t\t\t\t\t\tview.showLevels &&\n\t\t\t\t\t\t\t\t\ttypeof getItemLevel === 'function'\n\t\t\t\t\t\t\t\t\t\t? getItemLevel( item )\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\thasBulkActions={ hasBulkActions }\n\t\t\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\t\t\tfields={ fields }\n\t\t\t\t\t\t\t\tid={ getItemId( item ) || index.toString() }\n\t\t\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\t\t\ttitleField={ titleField }\n\t\t\t\t\t\t\t\tmediaField={ mediaField }\n\t\t\t\t\t\t\t\tdescriptionField={ descriptionField }\n\t\t\t\t\t\t\t\tselection={ selection }\n\t\t\t\t\t\t\t\tgetItemId={ getItemId }\n\t\t\t\t\t\t\t\tonChangeSelection={ onChangeSelection }\n\t\t\t\t\t\t\t\tonClickItem={ onClickItem }\n\t\t\t\t\t\t\t\tisItemClickable={ isItemClickable }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) ) }\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<div\n\t\t\t\tclassName={ clsx( {\n\t\t\t\t\t'dataviews-loading': isLoading,\n\t\t\t\t\t'dataviews-no-results': ! hasData && ! isLoading,\n\t\t\t\t} ) }\n\t\t\t\tid={ tableNoticeId }\n\t\t\t>\n\t\t\t\t{ ! hasData && (\n\t\t\t\t\t<p>{ isLoading ? <Spinner /> : __( 'No results' ) }</p>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default ViewTable;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_clsx","_interopRequireDefault","require","_i18n","_components","_element","_dataviewsSelectionCheckbox","_dataviewsItemActions","_constants","_dataviewsBulkActions","_columnHeaderMenu","_columnPrimary","_jsxRuntime","TableColumnField","item","fields","column","field","find","f","id","jsx","className","children","render","TableRow","hasBulkActions","level","actions","view","titleField","mediaField","descriptionField","selection","getItemId","isItemClickable","onClickItem","onChangeSelection","_view$fields","hasPossibleBulkAction","useHasAPossibleBulkAction","isSelected","includes","isHovered","setIsHovered","useState","showTitle","showMedia","showDescription","handleMouseEnter","handleMouseLeave","isTouchDeviceRef","useRef","columns","hasPrimaryColumn","jsxs","clsx","onMouseEnter","onMouseLeave","onTouchStart","current","onClick","document","getSelection","type","filter","itemId","style","width","default","disabled","undefined","map","_view$layout$styles$c","maxWidth","minWidth","layout","styles","length","e","stopPropagation","ViewTable","data","getItemLevel","isLoading","onChangeView","setOpenedFilter","_view$fields2","headerMenuRefs","Map","headerMenuToFocusRef","nextHeaderMenuToFocus","setNextHeaderMenuToFocus","useSomeItemHasAPossibleBulkAction","useEffect","focus","tableNoticeId","useId","onHide","hidden","get","fallback","node","hasData","headerMenuRef","index","set","delete","Fragment","density","scope","BulkSelectionCheckbox","ref","fieldId","canMove","_view$layout$styles$c2","sort","direction","sortValues","__","showLevels","toString","Spinner","_default","exports"],"sources":["@wordpress/dataviews/src/dataviews-layouts/table/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Spinner } from '@wordpress/components';\nimport { useEffect, useId, useRef, useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport DataViewsSelectionCheckbox from '../../components/dataviews-selection-checkbox';\nimport ItemActions from '../../components/dataviews-item-actions';\nimport { sortValues } from '../../constants';\nimport {\n\tuseSomeItemHasAPossibleBulkAction,\n\tuseHasAPossibleBulkAction,\n\tBulkSelectionCheckbox,\n} from '../../components/dataviews-bulk-actions';\nimport type {\n\tAction,\n\tNormalizedField,\n\tViewTable as ViewTableType,\n\tViewTableProps,\n} from '../../types';\nimport type { SetSelection } from '../../private-types';\nimport ColumnHeaderMenu from './column-header-menu';\nimport ColumnPrimary from './column-primary';\n\ninterface TableColumnFieldProps< Item > {\n\tfields: NormalizedField< Item >[];\n\tcolumn: string;\n\titem: Item;\n}\n\ninterface TableRowProps< Item > {\n\thasBulkActions: boolean;\n\titem: Item;\n\tlevel?: number;\n\tactions: Action< Item >[];\n\tfields: NormalizedField< Item >[];\n\tid: string;\n\tview: ViewTableType;\n\ttitleField?: NormalizedField< Item >;\n\tmediaField?: NormalizedField< Item >;\n\tdescriptionField?: NormalizedField< Item >;\n\tselection: string[];\n\tgetItemId: ( item: Item ) => string;\n\tonChangeSelection: SetSelection;\n\tisItemClickable: ( item: Item ) => boolean;\n\tonClickItem?: ( item: Item ) => void;\n}\n\nfunction TableColumnField< Item >( {\n\titem,\n\tfields,\n\tcolumn,\n}: TableColumnFieldProps< Item > ) {\n\tconst field = fields.find( ( f ) => f.id === column );\n\n\tif ( ! field ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"dataviews-view-table__cell-content-wrapper\">\n\t\t\t<field.render { ...{ item } } />\n\t\t</div>\n\t);\n}\n\nfunction TableRow< Item >( {\n\thasBulkActions,\n\titem,\n\tlevel,\n\tactions,\n\tfields,\n\tid,\n\tview,\n\ttitleField,\n\tmediaField,\n\tdescriptionField,\n\tselection,\n\tgetItemId,\n\tisItemClickable,\n\tonClickItem,\n\tonChangeSelection,\n}: TableRowProps< Item > ) {\n\tconst hasPossibleBulkAction = useHasAPossibleBulkAction( actions, item );\n\tconst isSelected = hasPossibleBulkAction && selection.includes( id );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst { showTitle = true, showMedia = true, showDescription = true } = view;\n\tconst handleMouseEnter = () => {\n\t\tsetIsHovered( true );\n\t};\n\tconst handleMouseLeave = () => {\n\t\tsetIsHovered( false );\n\t};\n\n\t// Will be set to true if `onTouchStart` fires. This happens before\n\t// `onClick` and can be used to exclude touchscreen devices from certain\n\t// behaviours.\n\tconst isTouchDeviceRef = useRef( false );\n\tconst columns = view.fields ?? [];\n\tconst hasPrimaryColumn =\n\t\t( titleField && showTitle ) ||\n\t\t( mediaField && showMedia ) ||\n\t\t( descriptionField && showDescription );\n\n\treturn (\n\t\t<tr\n\t\t\tclassName={ clsx( 'dataviews-view-table__row', {\n\t\t\t\t'is-selected': hasPossibleBulkAction && isSelected,\n\t\t\t\t'is-hovered': isHovered,\n\t\t\t\t'has-bulk-actions': hasPossibleBulkAction,\n\t\t\t} ) }\n\t\t\tonMouseEnter={ handleMouseEnter }\n\t\t\tonMouseLeave={ handleMouseLeave }\n\t\t\tonTouchStart={ () => {\n\t\t\t\tisTouchDeviceRef.current = true;\n\t\t\t} }\n\t\t\tonClick={ () => {\n\t\t\t\tif ( ! hasPossibleBulkAction ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t! isTouchDeviceRef.current &&\n\t\t\t\t\tdocument.getSelection()?.type !== 'Range'\n\t\t\t\t) {\n\t\t\t\t\tonChangeSelection(\n\t\t\t\t\t\tselection.includes( id )\n\t\t\t\t\t\t\t? selection.filter( ( itemId ) => id !== itemId )\n\t\t\t\t\t\t\t: [ id ]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} }\n\t\t>\n\t\t\t{ hasBulkActions && (\n\t\t\t\t<td\n\t\t\t\t\tclassName=\"dataviews-view-table__checkbox-column\"\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\twidth: '1%',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<div className=\"dataviews-view-table__cell-content-wrapper\">\n\t\t\t\t\t\t<DataViewsSelectionCheckbox\n\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\tselection={ selection }\n\t\t\t\t\t\t\tonChangeSelection={ onChangeSelection }\n\t\t\t\t\t\t\tgetItemId={ getItemId }\n\t\t\t\t\t\t\ttitleField={ titleField }\n\t\t\t\t\t\t\tdisabled={ ! hasPossibleBulkAction }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</td>\n\t\t\t) }\n\t\t\t{ hasPrimaryColumn && (\n\t\t\t\t<td>\n\t\t\t\t\t<ColumnPrimary\n\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\ttitleField={ showTitle ? titleField : undefined }\n\t\t\t\t\t\tmediaField={ showMedia ? mediaField : undefined }\n\t\t\t\t\t\tdescriptionField={\n\t\t\t\t\t\t\tshowDescription ? descriptionField : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\tisItemClickable={ isItemClickable }\n\t\t\t\t\t\tonClickItem={ onClickItem }\n\t\t\t\t\t/>\n\t\t\t\t</td>\n\t\t\t) }\n\t\t\t{ columns.map( ( column: string ) => {\n\t\t\t\t// Explicit picks the supported styles.\n\t\t\t\tconst { width, maxWidth, minWidth } =\n\t\t\t\t\tview.layout?.styles?.[ column ] ?? {};\n\n\t\t\t\treturn (\n\t\t\t\t\t<td key={ column } style={ { width, maxWidth, minWidth } }>\n\t\t\t\t\t\t<TableColumnField\n\t\t\t\t\t\t\tfields={ fields }\n\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\tcolumn={ column }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ !! actions?.length && (\n\t\t\t\t// Disable reason: we are not making the element interactive,\n\t\t\t\t// but preventing any click events from bubbling up to the\n\t\t\t\t// table row. This allows us to add a click handler to the row\n\t\t\t\t// itself (to toggle row selection) without erroneously\n\t\t\t\t// intercepting click events from ItemActions.\n\n\t\t\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t\t\t<td\n\t\t\t\t\tclassName=\"dataviews-view-table__actions-column\"\n\t\t\t\t\tonClick={ ( e ) => e.stopPropagation() }\n\t\t\t\t>\n\t\t\t\t\t<ItemActions item={ item } actions={ actions } />\n\t\t\t\t</td>\n\t\t\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t\t) }\n\t\t</tr>\n\t);\n}\n\nfunction ViewTable< Item >( {\n\tactions,\n\tdata,\n\tfields,\n\tgetItemId,\n\tgetItemLevel,\n\tisLoading = false,\n\tonChangeView,\n\tonChangeSelection,\n\tselection,\n\tsetOpenedFilter,\n\tonClickItem,\n\tisItemClickable,\n\tview,\n}: ViewTableProps< Item > ) {\n\tconst headerMenuRefs = useRef<\n\t\tMap< string, { node: HTMLButtonElement; fallback: string } >\n\t>( new Map() );\n\tconst headerMenuToFocusRef = useRef< HTMLButtonElement >();\n\tconst [ nextHeaderMenuToFocus, setNextHeaderMenuToFocus ] =\n\t\tuseState< HTMLButtonElement >();\n\tconst hasBulkActions = useSomeItemHasAPossibleBulkAction( actions, data );\n\n\tuseEffect( () => {\n\t\tif ( headerMenuToFocusRef.current ) {\n\t\t\theaderMenuToFocusRef.current.focus();\n\t\t\theaderMenuToFocusRef.current = undefined;\n\t\t}\n\t} );\n\n\tconst tableNoticeId = useId();\n\n\tif ( nextHeaderMenuToFocus ) {\n\t\t// If we need to force focus, we short-circuit rendering here\n\t\t// to prevent any additional work while we handle that.\n\t\t// Clearing out the focus directive is necessary to make sure\n\t\t// future renders don't cause unexpected focus jumps.\n\t\theaderMenuToFocusRef.current = nextHeaderMenuToFocus;\n\t\tsetNextHeaderMenuToFocus( undefined );\n\t\treturn;\n\t}\n\n\tconst onHide = ( field: NormalizedField< Item > ) => {\n\t\tconst hidden = headerMenuRefs.current.get( field.id );\n\t\tconst fallback = hidden\n\t\t\t? headerMenuRefs.current.get( hidden.fallback )\n\t\t\t: undefined;\n\t\tsetNextHeaderMenuToFocus( fallback?.node );\n\t};\n\n\tconst hasData = !! data?.length;\n\n\tconst titleField = fields.find( ( field ) => field.id === view.titleField );\n\tconst mediaField = fields.find( ( field ) => field.id === view.mediaField );\n\tconst descriptionField = fields.find(\n\t\t( field ) => field.id === view.descriptionField\n\t);\n\tconst { showTitle = true, showMedia = true, showDescription = true } = view;\n\tconst hasPrimaryColumn =\n\t\t( titleField && showTitle ) ||\n\t\t( mediaField && showMedia ) ||\n\t\t( descriptionField && showDescription );\n\tconst columns = view.fields ?? [];\n\tconst headerMenuRef =\n\t\t( column: string, index: number ) => ( node: HTMLButtonElement ) => {\n\t\t\tif ( node ) {\n\t\t\t\theaderMenuRefs.current.set( column, {\n\t\t\t\t\tnode,\n\t\t\t\t\tfallback: columns[ index > 0 ? index - 1 : 1 ],\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\theaderMenuRefs.current.delete( column );\n\t\t\t}\n\t\t};\n\n\treturn (\n\t\t<>\n\t\t\t<table\n\t\t\t\tclassName={ clsx( 'dataviews-view-table', {\n\t\t\t\t\t[ `has-${ view.layout?.density }-density` ]:\n\t\t\t\t\t\tview.layout?.density &&\n\t\t\t\t\t\t[ 'compact', 'comfortable' ].includes(\n\t\t\t\t\t\t\tview.layout.density\n\t\t\t\t\t\t),\n\t\t\t\t} ) }\n\t\t\t\taria-busy={ isLoading }\n\t\t\t\taria-describedby={ tableNoticeId }\n\t\t\t>\n\t\t\t\t<thead>\n\t\t\t\t\t<tr className=\"dataviews-view-table__row\">\n\t\t\t\t\t\t{ hasBulkActions && (\n\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\tclassName=\"dataviews-view-table__checkbox-column\"\n\t\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\t\twidth: '1%',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<BulkSelectionCheckbox\n\t\t\t\t\t\t\t\t\tselection={ selection }\n\t\t\t\t\t\t\t\t\tonChangeSelection={ onChangeSelection }\n\t\t\t\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\t\t\t\tgetItemId={ getItemId }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ hasPrimaryColumn && (\n\t\t\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t\t\t<span className=\"dataviews-view-table-header\">\n\t\t\t\t\t\t\t\t\t{ titleField && (\n\t\t\t\t\t\t\t\t\t\t<ColumnHeaderMenu\n\t\t\t\t\t\t\t\t\t\t\tref={ headerMenuRef(\n\t\t\t\t\t\t\t\t\t\t\t\ttitleField.id,\n\t\t\t\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\tfieldId={ titleField.id }\n\t\t\t\t\t\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\t\t\t\t\t\tfields={ fields }\n\t\t\t\t\t\t\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\t\t\t\t\t\t\tonHide={ onHide }\n\t\t\t\t\t\t\t\t\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t\t\t\t\t\t\t\t\t\tcanMove={ false }\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</span>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ columns.map( ( column, index ) => {\n\t\t\t\t\t\t\t// Explicit picks the supported styles.\n\t\t\t\t\t\t\tconst { width, maxWidth, minWidth } =\n\t\t\t\t\t\t\t\tview.layout?.styles?.[ column ] ?? {};\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\t\tkey={ column }\n\t\t\t\t\t\t\t\t\tstyle={ { width, maxWidth, minWidth } }\n\t\t\t\t\t\t\t\t\taria-sort={\n\t\t\t\t\t\t\t\t\t\tview.sort?.direction &&\n\t\t\t\t\t\t\t\t\t\tview.sort?.field === column\n\t\t\t\t\t\t\t\t\t\t\t? sortValues[ view.sort.direction ]\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ColumnHeaderMenu\n\t\t\t\t\t\t\t\t\t\tref={ headerMenuRef( column, index ) }\n\t\t\t\t\t\t\t\t\t\tfieldId={ column }\n\t\t\t\t\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\t\t\t\t\tfields={ fields }\n\t\t\t\t\t\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\t\t\t\t\t\tonHide={ onHide }\n\t\t\t\t\t\t\t\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t{ !! actions?.length && (\n\t\t\t\t\t\t\t<th className=\"dataviews-view-table__actions-column\">\n\t\t\t\t\t\t\t\t<span className=\"dataviews-view-table-header\">\n\t\t\t\t\t\t\t\t\t{ __( 'Actions' ) }\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t{ hasData &&\n\t\t\t\t\t\tdata.map( ( item, index ) => (\n\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\tkey={ getItemId( item ) }\n\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\tlevel={\n\t\t\t\t\t\t\t\t\tview.showLevels &&\n\t\t\t\t\t\t\t\t\ttypeof getItemLevel === 'function'\n\t\t\t\t\t\t\t\t\t\t? getItemLevel( item )\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\thasBulkActions={ hasBulkActions }\n\t\t\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\t\t\tfields={ fields }\n\t\t\t\t\t\t\t\tid={ getItemId( item ) || index.toString() }\n\t\t\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\t\t\ttitleField={ titleField }\n\t\t\t\t\t\t\t\tmediaField={ mediaField }\n\t\t\t\t\t\t\t\tdescriptionField={ descriptionField }\n\t\t\t\t\t\t\t\tselection={ selection }\n\t\t\t\t\t\t\t\tgetItemId={ getItemId }\n\t\t\t\t\t\t\t\tonChangeSelection={ onChangeSelection }\n\t\t\t\t\t\t\t\tonClickItem={ onClickItem }\n\t\t\t\t\t\t\t\tisItemClickable={ isItemClickable }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) ) }\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<div\n\t\t\t\tclassName={ clsx( {\n\t\t\t\t\t'dataviews-loading': isLoading,\n\t\t\t\t\t'dataviews-no-results': ! hasData && ! isLoading,\n\t\t\t\t} ) }\n\t\t\t\tid={ tableNoticeId }\n\t\t\t>\n\t\t\t\t{ ! hasData && (\n\t\t\t\t\t<p>{ isLoading ? <Spinner /> : __( 'No results' ) }</p>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default ViewTable;\n"],"mappings":"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","ignoreList":[]}
@@ -12,7 +12,7 @@ function sort(a, b, direction) {
12
12
  return direction === 'asc' ? a - b : b - a;
13
13
  }
14
14
  function isValid(value, context) {
15
- // TODO: this implicitely means the value is required.
15
+ // TODO: this implicitly means the value is required.
16
16
  if (value === '') {
17
17
  return false;
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"names":["sort","a","b","direction","isValid","value","context","Number","isInteger","elements","validValues","map","f","includes","_default","exports","default","Edit"],"sources":["@wordpress/dataviews/src/field-types/integer.tsx"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport type { SortDirection, ValidationContext } from '../types';\n\nfunction sort( a: any, b: any, direction: SortDirection ) {\n\treturn direction === 'asc' ? a - b : b - a;\n}\n\nfunction isValid( value: any, context?: ValidationContext ) {\n\t// TODO: this implicitely means the value is required.\n\tif ( value === '' ) {\n\t\treturn false;\n\t}\n\n\tif ( ! Number.isInteger( Number( value ) ) ) {\n\t\treturn false;\n\t}\n\n\tif ( context?.elements ) {\n\t\tconst validValues = context?.elements.map( ( f ) => f.value );\n\t\tif ( ! validValues.includes( Number( value ) ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport default {\n\tsort,\n\tisValid,\n\tEdit: 'integer',\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;;AAGA,SAASA,IAAIA,CAAEC,CAAM,EAAEC,CAAM,EAAEC,SAAwB,EAAG;EACzD,OAAOA,SAAS,KAAK,KAAK,GAAGF,CAAC,GAAGC,CAAC,GAAGA,CAAC,GAAGD,CAAC;AAC3C;AAEA,SAASG,OAAOA,CAAEC,KAAU,EAAEC,OAA2B,EAAG;EAC3D;EACA,IAAKD,KAAK,KAAK,EAAE,EAAG;IACnB,OAAO,KAAK;EACb;EAEA,IAAK,CAAEE,MAAM,CAACC,SAAS,CAAED,MAAM,CAAEF,KAAM,CAAE,CAAC,EAAG;IAC5C,OAAO,KAAK;EACb;EAEA,IAAKC,OAAO,EAAEG,QAAQ,EAAG;IACxB,MAAMC,WAAW,GAAGJ,OAAO,EAAEG,QAAQ,CAACE,GAAG,CAAIC,CAAC,IAAMA,CAAC,CAACP,KAAM,CAAC;IAC7D,IAAK,CAAEK,WAAW,CAACG,QAAQ,CAAEN,MAAM,CAAEF,KAAM,CAAE,CAAC,EAAG;MAChD,OAAO,KAAK;IACb;EACD;EAEA,OAAO,IAAI;AACZ;AAAC,IAAAS,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc;EACdhB,IAAI;EACJI,OAAO;EACPa,IAAI,EAAE;AACP,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["sort","a","b","direction","isValid","value","context","Number","isInteger","elements","validValues","map","f","includes","_default","exports","default","Edit"],"sources":["@wordpress/dataviews/src/field-types/integer.tsx"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport type { SortDirection, ValidationContext } from '../types';\n\nfunction sort( a: any, b: any, direction: SortDirection ) {\n\treturn direction === 'asc' ? a - b : b - a;\n}\n\nfunction isValid( value: any, context?: ValidationContext ) {\n\t// TODO: this implicitly means the value is required.\n\tif ( value === '' ) {\n\t\treturn false;\n\t}\n\n\tif ( ! Number.isInteger( Number( value ) ) ) {\n\t\treturn false;\n\t}\n\n\tif ( context?.elements ) {\n\t\tconst validValues = context?.elements.map( ( f ) => f.value );\n\t\tif ( ! validValues.includes( Number( value ) ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport default {\n\tsort,\n\tisValid,\n\tEdit: 'integer',\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;;AAGA,SAASA,IAAIA,CAAEC,CAAM,EAAEC,CAAM,EAAEC,SAAwB,EAAG;EACzD,OAAOA,SAAS,KAAK,KAAK,GAAGF,CAAC,GAAGC,CAAC,GAAGA,CAAC,GAAGD,CAAC;AAC3C;AAEA,SAASG,OAAOA,CAAEC,KAAU,EAAEC,OAA2B,EAAG;EAC3D;EACA,IAAKD,KAAK,KAAK,EAAE,EAAG;IACnB,OAAO,KAAK;EACb;EAEA,IAAK,CAAEE,MAAM,CAACC,SAAS,CAAED,MAAM,CAAEF,KAAM,CAAE,CAAC,EAAG;IAC5C,OAAO,KAAK;EACb;EAEA,IAAKC,OAAO,EAAEG,QAAQ,EAAG;IACxB,MAAMC,WAAW,GAAGJ,OAAO,EAAEG,QAAQ,CAACE,GAAG,CAAIC,CAAC,IAAMA,CAAC,CAACP,KAAM,CAAC;IAC7D,IAAK,CAAEK,WAAW,CAACG,QAAQ,CAAEN,MAAM,CAAEF,KAAM,CAAE,CAAC,EAAG;MAChD,OAAO,KAAK;IACb;EACD;EAEA,OAAO,IAAI;AACZ;AAAC,IAAAS,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc;EACdhB,IAAI;EACJI,OAAO;EACPa,IAAI,EAAE;AACP,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["@wordpress/dataviews/src/types.ts"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ReactElement, ComponentType } from 'react';\n\n/**\n * Internal dependencies\n */\nimport type { SetSelection } from './private-types';\n\nexport type SortDirection = 'asc' | 'desc';\n\n/**\n * Generic option type.\n */\nexport interface Option< Value extends any = any > {\n\tvalue: Value;\n\tlabel: string;\n\tdescription?: string;\n}\n\ninterface FilterByConfig {\n\t/**\n\t * The list of operators supported by the field.\n\t */\n\toperators?: Operator[];\n\n\t/**\n\t * Whether it is a primary filter.\n\t *\n\t * A primary filter is always visible and is not listed in the \"Add filter\" component,\n\t * except for the list layout where it behaves like a secondary filter.\n\t */\n\tisPrimary?: boolean;\n}\n\nexport type Operator =\n\t| 'is'\n\t| 'isNot'\n\t| 'isAny'\n\t| 'isNone'\n\t| 'isAll'\n\t| 'isNotAll';\n\nexport type FieldType = 'text' | 'integer' | 'datetime';\n\nexport type ValidationContext = {\n\telements?: Option[];\n};\n\n/**\n * An abstract interface for Field based on the field type.\n */\nexport type FieldTypeDefinition< Item > = {\n\t/**\n\t * Callback used to sort the field.\n\t */\n\tsort: ( a: Item, b: Item, direction: SortDirection ) => number;\n\n\t/**\n\t * Callback used to validate the field.\n\t */\n\tisValid: ( item: Item, context?: ValidationContext ) => boolean;\n\n\t/**\n\t * Callback used to render an edit control for the field or control name.\n\t */\n\tEdit: ComponentType< DataFormControlProps< Item > > | string;\n};\n\n/**\n * A dataview field for a specific property of a data type.\n */\nexport type Field< Item > = {\n\t/**\n\t * Type of the fields.\n\t */\n\ttype?: FieldType;\n\n\t/**\n\t * The unique identifier of the field.\n\t */\n\tid: string;\n\n\t/**\n\t * The label of the field. Defaults to the id.\n\t */\n\tlabel?: string;\n\n\t/**\n\t * The header of the field. Defaults to the label.\n\t * It allows the usage of a React Element to render the field labels.\n\t */\n\theader?: string | ReactElement;\n\n\t/**\n\t * A description of the field.\n\t */\n\tdescription?: string;\n\n\t/**\n\t * Placeholder for the field.\n\t */\n\tplaceholder?: string;\n\n\t/**\n\t * Callback used to render the field. Defaults to `field.getValue`.\n\t */\n\trender?: ComponentType< DataViewRenderFieldProps< Item > >;\n\n\t/**\n\t * Callback used to render an edit control for the field.\n\t */\n\tEdit?: ComponentType< DataFormControlProps< Item > > | string;\n\n\t/**\n\t * Callback used to sort the field.\n\t */\n\tsort?: ( a: Item, b: Item, direction: SortDirection ) => number;\n\n\t/**\n\t * Callback used to validate the field.\n\t */\n\tisValid?: ( item: Item, context?: ValidationContext ) => boolean;\n\n\t/**\n\t * Callback used to decide if a field should be displayed.\n\t */\n\tisVisible?: ( item: Item ) => boolean;\n\n\t/**\n\t * Whether the field is sortable.\n\t */\n\tenableSorting?: boolean;\n\n\t/**\n\t * Whether the field is searchable.\n\t */\n\tenableGlobalSearch?: boolean;\n\n\t/**\n\t * Whether the field is filterable.\n\t */\n\tenableHiding?: boolean;\n\n\t/**\n\t * The list of options to pick from when using the field as a filter.\n\t */\n\telements?: Option[];\n\n\t/**\n\t * Filter config for the field.\n\t */\n\tfilterBy?: FilterByConfig | undefined;\n\n\t/**\n\t * Callback used to retrieve the value of the field from the item.\n\t * Defaults to `item[ field.id ]`.\n\t */\n\tgetValue?: ( args: { item: Item } ) => any;\n};\n\nexport type NormalizedField< Item > = Field< Item > & {\n\tlabel: string;\n\theader: string | ReactElement;\n\tgetValue: ( args: { item: Item } ) => any;\n\trender: ComponentType< DataViewRenderFieldProps< Item > >;\n\tEdit: ComponentType< DataFormControlProps< Item > >;\n\tsort: ( a: Item, b: Item, direction: SortDirection ) => number;\n\tisValid: ( item: Item, context?: ValidationContext ) => boolean;\n\tenableHiding: boolean;\n\tenableSorting: boolean;\n};\n\n/**\n * A collection of dataview fields for a data type.\n */\nexport type Fields< Item > = Field< Item >[];\n\nexport type Data< Item > = Item[];\n\nexport type DataFormControlProps< Item > = {\n\tdata: Item;\n\tfield: NormalizedField< Item >;\n\tonChange: ( value: Record< string, any > ) => void;\n\thideLabelFromVision?: boolean;\n};\n\nexport type DataViewRenderFieldProps< Item > = {\n\titem: Item;\n};\n\n/**\n * The filters applied to the dataset.\n */\nexport interface Filter {\n\t/**\n\t * The field to filter by.\n\t */\n\tfield: string;\n\n\t/**\n\t * The operator to use.\n\t */\n\toperator: Operator;\n\n\t/**\n\t * The value to filter by.\n\t */\n\tvalue: any;\n}\n\nexport interface NormalizedFilter {\n\t/**\n\t * The field to filter by.\n\t */\n\tfield: string;\n\n\t/**\n\t * The field name.\n\t */\n\tname: string;\n\n\t/**\n\t * The list of options to pick from when using the field as a filter.\n\t */\n\telements: Option[];\n\n\t/**\n\t * Is a single selection filter.\n\t */\n\tsingleSelection: boolean;\n\n\t/**\n\t * The list of operators supported by the field.\n\t */\n\toperators: Operator[];\n\n\t/**\n\t * Whether the filter is visible.\n\t */\n\tisVisible: boolean;\n\n\t/**\n\t * Whether it is a primary filter.\n\t */\n\tisPrimary: boolean;\n}\n\ninterface ViewBase {\n\t/**\n\t * The layout of the view.\n\t */\n\ttype: string;\n\n\t/**\n\t * The global search term.\n\t */\n\tsearch?: string;\n\n\t/**\n\t * The filters to apply.\n\t */\n\tfilters?: Filter[];\n\n\t/**\n\t * The sorting configuration.\n\t */\n\tsort?: {\n\t\t/**\n\t\t * The field to sort by.\n\t\t */\n\t\tfield: string;\n\n\t\t/**\n\t\t * The direction to sort by.\n\t\t */\n\t\tdirection: SortDirection;\n\t};\n\n\t/**\n\t * The active page\n\t */\n\tpage?: number;\n\n\t/**\n\t * The number of items per page\n\t */\n\tperPage?: number;\n\n\t/**\n\t * The fields to render\n\t */\n\tfields?: string[];\n\n\t/**\n\t * Title field\n\t */\n\ttitleField?: string;\n\n\t/**\n\t * Media field\n\t */\n\tmediaField?: string;\n\n\t/**\n\t * Description field\n\t */\n\tdescriptionField?: string;\n\n\t/**\n\t * Whether to show the title\n\t */\n\tshowTitle?: boolean;\n\n\t/**\n\t * Whether to show the media\n\t */\n\tshowMedia?: boolean;\n\n\t/**\n\t * Whether to show the description\n\t */\n\tshowDescription?: boolean;\n\n\t/**\n\t * Whether to show the hierarchical levels.\n\t */\n\tshowLevels?: boolean;\n}\n\nexport interface ColumnStyle {\n\t/**\n\t * The width of the field column.\n\t */\n\twidth?: string | number;\n\n\t/**\n\t * The minimum width of the field column.\n\t */\n\tmaxWidth?: string | number;\n\n\t/**\n\t * The maximum width of the field column.\n\t */\n\tminWidth?: string | number;\n}\n\nexport type Density = 'compact' | 'balanced' | 'comfortable';\n\nexport interface ViewTable extends ViewBase {\n\ttype: 'table';\n\n\tlayout?: {\n\t\t/**\n\t\t * The styles for the columns.\n\t\t */\n\t\tstyles?: Record< string, ColumnStyle >;\n\n\t\t/**\n\t\t * The density of the view.\n\t\t */\n\t\tdensity?: Density;\n\t};\n}\n\nexport interface ViewList extends ViewBase {\n\ttype: 'list';\n}\n\nexport interface ViewGrid extends ViewBase {\n\ttype: 'grid';\n\n\tlayout?: {\n\t\t/**\n\t\t * The fields to use as badge fields.\n\t\t */\n\t\tbadgeFields?: string[];\n\n\t\t/**\n\t\t * The preview size of the grid.\n\t\t */\n\t\tpreviewSize?: number;\n\t};\n}\n\nexport type View = ViewList | ViewGrid | ViewTable;\n\ninterface ActionBase< Item > {\n\t/**\n\t * The unique identifier of the action.\n\t */\n\tid: string;\n\n\t/**\n\t * The label of the action.\n\t * In case we want to adjust the label based on the selected items,\n\t * a function can be provided.\n\t */\n\tlabel: string | ( ( items: Item[] ) => string );\n\n\t/**\n\t * The icon of the action. (Either a string or an SVG element)\n\t * This should be IconType from the components package\n\t * but that import is breaking typescript build for the moment.\n\t */\n\ticon?: any;\n\n\t/**\n\t * Whether the action is disabled.\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Whether the action is destructive.\n\t */\n\tisDestructive?: boolean;\n\n\t/**\n\t * Whether the action is a primary action.\n\t */\n\tisPrimary?: boolean;\n\n\t/**\n\t * Whether the item passed as an argument supports the current action.\n\t */\n\tisEligible?: ( item: Item ) => boolean;\n\n\t/**\n\t * Whether the action can be used as a bulk action.\n\t */\n\tsupportsBulk?: boolean;\n\n\t/**\n\t * The context in which the action is visible.\n\t * This is only a \"meta\" information for now.\n\t */\n\tcontext?: 'list' | 'single';\n}\n\nexport interface RenderModalProps< Item > {\n\titems: Item[];\n\tcloseModal?: () => void;\n\tonActionPerformed?: ( items: Item[] ) => void;\n}\n\nexport interface ActionModal< Item > extends ActionBase< Item > {\n\t/**\n\t * Modal to render when the action is triggered.\n\t */\n\tRenderModal: ( {\n\t\titems,\n\t\tcloseModal,\n\t\tonActionPerformed,\n\t}: RenderModalProps< Item > ) => ReactElement;\n\n\t/**\n\t * Whether to hide the modal header.\n\t */\n\thideModalHeader?: boolean;\n\n\t/**\n\t * The header of the modal.\n\t */\n\tmodalHeader?: string;\n}\n\nexport interface ActionButton< Item > extends ActionBase< Item > {\n\t/**\n\t * The callback to execute when the action is triggered.\n\t */\n\tcallback: (\n\t\titems: Item[],\n\t\tcontext: {\n\t\t\tregistry: any;\n\t\t\tonActionPerformed?: ( items: Item[] ) => void;\n\t\t}\n\t) => void;\n}\n\nexport type Action< Item > = ActionModal< Item > | ActionButton< Item >;\n\nexport interface ViewBaseProps< Item > {\n\tactions: Action< Item >[];\n\tdata: Item[];\n\tfields: NormalizedField< Item >[];\n\tgetItemId: ( item: Item ) => string;\n\tgetItemLevel?: ( item: Item ) => number;\n\tisLoading?: boolean;\n\tonChangeView: ( view: View ) => void;\n\tonChangeSelection: SetSelection;\n\tselection: string[];\n\tsetOpenedFilter: ( fieldId: string ) => void;\n\tonClickItem?: ( item: Item ) => void;\n\tisItemClickable: ( item: Item ) => boolean;\n\tview: View;\n}\n\nexport interface ViewTableProps< Item > extends ViewBaseProps< Item > {\n\tview: ViewTable;\n}\n\nexport interface ViewListProps< Item > extends ViewBaseProps< Item > {\n\tview: ViewList;\n}\n\nexport interface ViewGridProps< Item > extends ViewBaseProps< Item > {\n\tview: ViewGrid;\n}\n\nexport type ViewProps< Item > =\n\t| ViewTableProps< Item >\n\t| ViewGridProps< Item >\n\t| ViewListProps< Item >;\n\nexport interface SupportedLayouts {\n\tlist?: Omit< ViewList, 'type' >;\n\tgrid?: Omit< ViewGrid, 'type' >;\n\ttable?: Omit< ViewTable, 'type' >;\n}\n\nexport type SimpleFormField = {\n\tid: string;\n\tlayout?: 'regular' | 'panel';\n\tlabelPosition?: 'side' | 'top' | 'none';\n};\n\nexport type CombinedFormField = {\n\tid: string;\n\tlabel?: string;\n\tlayout?: 'regular' | 'panel';\n\tlabelPosition?: 'side' | 'top' | 'none';\n\tchildren: Array< FormField | string >;\n};\n\nexport type FormField = SimpleFormField | CombinedFormField;\n\n/**\n * The form configuration.\n */\nexport type Form = {\n\ttype?: 'regular' | 'panel';\n\tfields?: Array< FormField | string >;\n\tlabelPosition?: 'side' | 'top' | 'none';\n};\n\nexport interface DataFormProps< Item > {\n\tdata: Item;\n\tfields: Field< Item >[];\n\tform: Form;\n\tonChange: ( value: Record< string, any > ) => void;\n}\n\nexport interface FieldLayoutProps< Item > {\n\tdata: Item;\n\tfield: FormField;\n\tonChange: ( value: any ) => void;\n\thideLabelFromVision?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["@wordpress/dataviews/src/types.ts"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ReactElement, ComponentType } from 'react';\n\n/**\n * Internal dependencies\n */\nimport type { SetSelection } from './private-types';\n\nexport type SortDirection = 'asc' | 'desc';\n\n/**\n * Generic option type.\n */\nexport interface Option< Value extends any = any > {\n\tvalue: Value;\n\tlabel: string;\n\tdescription?: string;\n}\n\ninterface FilterByConfig {\n\t/**\n\t * The list of operators supported by the field.\n\t */\n\toperators?: Operator[];\n\n\t/**\n\t * Whether it is a primary filter.\n\t *\n\t * A primary filter is always visible and is not listed in the \"Add filter\" component,\n\t * except for the list layout where it behaves like a secondary filter.\n\t */\n\tisPrimary?: boolean;\n}\n\nexport type Operator =\n\t| 'is'\n\t| 'isNot'\n\t| 'isAny'\n\t| 'isNone'\n\t| 'isAll'\n\t| 'isNotAll';\n\nexport type FieldType = 'text' | 'integer' | 'datetime' | 'media';\n\nexport type ValidationContext = {\n\telements?: Option[];\n};\n\n/**\n * An abstract interface for Field based on the field type.\n */\nexport type FieldTypeDefinition< Item > = {\n\t/**\n\t * Callback used to sort the field.\n\t */\n\tsort: ( a: Item, b: Item, direction: SortDirection ) => number;\n\n\t/**\n\t * Callback used to validate the field.\n\t */\n\tisValid: ( item: Item, context?: ValidationContext ) => boolean;\n\n\t/**\n\t * Callback used to render an edit control for the field or control name.\n\t */\n\tEdit: ComponentType< DataFormControlProps< Item > > | string;\n};\n\n/**\n * A dataview field for a specific property of a data type.\n */\nexport type Field< Item > = {\n\t/**\n\t * Type of the fields.\n\t */\n\ttype?: FieldType;\n\n\t/**\n\t * The unique identifier of the field.\n\t */\n\tid: string;\n\n\t/**\n\t * The label of the field. Defaults to the id.\n\t */\n\tlabel?: string;\n\n\t/**\n\t * The header of the field. Defaults to the label.\n\t * It allows the usage of a React Element to render the field labels.\n\t */\n\theader?: string | ReactElement;\n\n\t/**\n\t * A description of the field.\n\t */\n\tdescription?: string;\n\n\t/**\n\t * Placeholder for the field.\n\t */\n\tplaceholder?: string;\n\n\t/**\n\t * Callback used to render the field. Defaults to `field.getValue`.\n\t */\n\trender?: ComponentType< DataViewRenderFieldProps< Item > >;\n\n\t/**\n\t * Callback used to render an edit control for the field.\n\t */\n\tEdit?: ComponentType< DataFormControlProps< Item > > | string;\n\n\t/**\n\t * Callback used to sort the field.\n\t */\n\tsort?: ( a: Item, b: Item, direction: SortDirection ) => number;\n\n\t/**\n\t * Callback used to validate the field.\n\t */\n\tisValid?: ( item: Item, context?: ValidationContext ) => boolean;\n\n\t/**\n\t * Callback used to decide if a field should be displayed.\n\t */\n\tisVisible?: ( item: Item ) => boolean;\n\n\t/**\n\t * Whether the field is sortable.\n\t */\n\tenableSorting?: boolean;\n\n\t/**\n\t * Whether the field is searchable.\n\t */\n\tenableGlobalSearch?: boolean;\n\n\t/**\n\t * Whether the field is filterable.\n\t */\n\tenableHiding?: boolean;\n\n\t/**\n\t * The list of options to pick from when using the field as a filter.\n\t */\n\telements?: Option[];\n\n\t/**\n\t * Filter config for the field.\n\t */\n\tfilterBy?: FilterByConfig | undefined;\n\n\t/**\n\t * Callback used to retrieve the value of the field from the item.\n\t * Defaults to `item[ field.id ]`.\n\t */\n\tgetValue?: ( args: { item: Item } ) => any;\n};\n\nexport type NormalizedField< Item > = Field< Item > & {\n\tlabel: string;\n\theader: string | ReactElement;\n\tgetValue: ( args: { item: Item } ) => any;\n\trender: ComponentType< DataViewRenderFieldProps< Item > >;\n\tEdit: ComponentType< DataFormControlProps< Item > >;\n\tsort: ( a: Item, b: Item, direction: SortDirection ) => number;\n\tisValid: ( item: Item, context?: ValidationContext ) => boolean;\n\tenableHiding: boolean;\n\tenableSorting: boolean;\n};\n\n/**\n * A collection of dataview fields for a data type.\n */\nexport type Fields< Item > = Field< Item >[];\n\nexport type Data< Item > = Item[];\n\nexport type DataFormControlProps< Item > = {\n\tdata: Item;\n\tfield: NormalizedField< Item >;\n\tonChange: ( value: Record< string, any > ) => void;\n\thideLabelFromVision?: boolean;\n};\n\nexport type DataViewRenderFieldProps< Item > = {\n\titem: Item;\n};\n\n/**\n * The filters applied to the dataset.\n */\nexport interface Filter {\n\t/**\n\t * The field to filter by.\n\t */\n\tfield: string;\n\n\t/**\n\t * The operator to use.\n\t */\n\toperator: Operator;\n\n\t/**\n\t * The value to filter by.\n\t */\n\tvalue: any;\n}\n\nexport interface NormalizedFilter {\n\t/**\n\t * The field to filter by.\n\t */\n\tfield: string;\n\n\t/**\n\t * The field name.\n\t */\n\tname: string;\n\n\t/**\n\t * The list of options to pick from when using the field as a filter.\n\t */\n\telements: Option[];\n\n\t/**\n\t * Is a single selection filter.\n\t */\n\tsingleSelection: boolean;\n\n\t/**\n\t * The list of operators supported by the field.\n\t */\n\toperators: Operator[];\n\n\t/**\n\t * Whether the filter is visible.\n\t */\n\tisVisible: boolean;\n\n\t/**\n\t * Whether it is a primary filter.\n\t */\n\tisPrimary: boolean;\n}\n\ninterface ViewBase {\n\t/**\n\t * The layout of the view.\n\t */\n\ttype: string;\n\n\t/**\n\t * The global search term.\n\t */\n\tsearch?: string;\n\n\t/**\n\t * The filters to apply.\n\t */\n\tfilters?: Filter[];\n\n\t/**\n\t * The sorting configuration.\n\t */\n\tsort?: {\n\t\t/**\n\t\t * The field to sort by.\n\t\t */\n\t\tfield: string;\n\n\t\t/**\n\t\t * The direction to sort by.\n\t\t */\n\t\tdirection: SortDirection;\n\t};\n\n\t/**\n\t * The active page\n\t */\n\tpage?: number;\n\n\t/**\n\t * The number of items per page\n\t */\n\tperPage?: number;\n\n\t/**\n\t * The fields to render\n\t */\n\tfields?: string[];\n\n\t/**\n\t * Title field\n\t */\n\ttitleField?: string;\n\n\t/**\n\t * Media field\n\t */\n\tmediaField?: string;\n\n\t/**\n\t * Description field\n\t */\n\tdescriptionField?: string;\n\n\t/**\n\t * Whether to show the title\n\t */\n\tshowTitle?: boolean;\n\n\t/**\n\t * Whether to show the media\n\t */\n\tshowMedia?: boolean;\n\n\t/**\n\t * Whether to show the description\n\t */\n\tshowDescription?: boolean;\n\n\t/**\n\t * Whether to show the hierarchical levels.\n\t */\n\tshowLevels?: boolean;\n}\n\nexport interface ColumnStyle {\n\t/**\n\t * The width of the field column.\n\t */\n\twidth?: string | number;\n\n\t/**\n\t * The minimum width of the field column.\n\t */\n\tmaxWidth?: string | number;\n\n\t/**\n\t * The maximum width of the field column.\n\t */\n\tminWidth?: string | number;\n}\n\nexport type Density = 'compact' | 'balanced' | 'comfortable';\n\nexport interface ViewTable extends ViewBase {\n\ttype: 'table';\n\n\tlayout?: {\n\t\t/**\n\t\t * The styles for the columns.\n\t\t */\n\t\tstyles?: Record< string, ColumnStyle >;\n\n\t\t/**\n\t\t * The density of the view.\n\t\t */\n\t\tdensity?: Density;\n\t};\n}\n\nexport interface ViewList extends ViewBase {\n\ttype: 'list';\n}\n\nexport interface ViewGrid extends ViewBase {\n\ttype: 'grid';\n\n\tlayout?: {\n\t\t/**\n\t\t * The fields to use as badge fields.\n\t\t */\n\t\tbadgeFields?: string[];\n\n\t\t/**\n\t\t * The preview size of the grid.\n\t\t */\n\t\tpreviewSize?: number;\n\t};\n}\n\nexport type View = ViewList | ViewGrid | ViewTable;\n\ninterface ActionBase< Item > {\n\t/**\n\t * The unique identifier of the action.\n\t */\n\tid: string;\n\n\t/**\n\t * The label of the action.\n\t * In case we want to adjust the label based on the selected items,\n\t * a function can be provided.\n\t */\n\tlabel: string | ( ( items: Item[] ) => string );\n\n\t/**\n\t * The icon of the action. (Either a string or an SVG element)\n\t * This should be IconType from the components package\n\t * but that import is breaking typescript build for the moment.\n\t */\n\ticon?: any;\n\n\t/**\n\t * Whether the action is disabled.\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Whether the action is destructive.\n\t */\n\tisDestructive?: boolean;\n\n\t/**\n\t * Whether the action is a primary action.\n\t */\n\tisPrimary?: boolean;\n\n\t/**\n\t * Whether the item passed as an argument supports the current action.\n\t */\n\tisEligible?: ( item: Item ) => boolean;\n\n\t/**\n\t * Whether the action can be used as a bulk action.\n\t */\n\tsupportsBulk?: boolean;\n\n\t/**\n\t * The context in which the action is visible.\n\t * This is only a \"meta\" information for now.\n\t */\n\tcontext?: 'list' | 'single';\n}\n\nexport interface RenderModalProps< Item > {\n\titems: Item[];\n\tcloseModal?: () => void;\n\tonActionPerformed?: ( items: Item[] ) => void;\n}\n\nexport interface ActionModal< Item > extends ActionBase< Item > {\n\t/**\n\t * Modal to render when the action is triggered.\n\t */\n\tRenderModal: ( {\n\t\titems,\n\t\tcloseModal,\n\t\tonActionPerformed,\n\t}: RenderModalProps< Item > ) => ReactElement;\n\n\t/**\n\t * Whether to hide the modal header.\n\t */\n\thideModalHeader?: boolean;\n\n\t/**\n\t * The header of the modal.\n\t */\n\tmodalHeader?: string;\n}\n\nexport interface ActionButton< Item > extends ActionBase< Item > {\n\t/**\n\t * The callback to execute when the action is triggered.\n\t */\n\tcallback: (\n\t\titems: Item[],\n\t\tcontext: {\n\t\t\tregistry: any;\n\t\t\tonActionPerformed?: ( items: Item[] ) => void;\n\t\t}\n\t) => void;\n}\n\nexport type Action< Item > = ActionModal< Item > | ActionButton< Item >;\n\nexport interface ViewBaseProps< Item > {\n\tactions: Action< Item >[];\n\tdata: Item[];\n\tfields: NormalizedField< Item >[];\n\tgetItemId: ( item: Item ) => string;\n\tgetItemLevel?: ( item: Item ) => number;\n\tisLoading?: boolean;\n\tonChangeView: ( view: View ) => void;\n\tonChangeSelection: SetSelection;\n\tselection: string[];\n\tsetOpenedFilter: ( fieldId: string ) => void;\n\tonClickItem?: ( item: Item ) => void;\n\tisItemClickable: ( item: Item ) => boolean;\n\tview: View;\n}\n\nexport interface ViewTableProps< Item > extends ViewBaseProps< Item > {\n\tview: ViewTable;\n}\n\nexport interface ViewListProps< Item > extends ViewBaseProps< Item > {\n\tview: ViewList;\n}\n\nexport interface ViewGridProps< Item > extends ViewBaseProps< Item > {\n\tview: ViewGrid;\n}\n\nexport type ViewProps< Item > =\n\t| ViewTableProps< Item >\n\t| ViewGridProps< Item >\n\t| ViewListProps< Item >;\n\nexport interface SupportedLayouts {\n\tlist?: Omit< ViewList, 'type' >;\n\tgrid?: Omit< ViewGrid, 'type' >;\n\ttable?: Omit< ViewTable, 'type' >;\n}\n\nexport type SimpleFormField = {\n\tid: string;\n\tlayout?: 'regular' | 'panel';\n\tlabelPosition?: 'side' | 'top' | 'none';\n};\n\nexport type CombinedFormField = {\n\tid: string;\n\tlabel?: string;\n\tlayout?: 'regular' | 'panel';\n\tlabelPosition?: 'side' | 'top' | 'none';\n\tchildren: Array< FormField | string >;\n};\n\nexport type FormField = SimpleFormField | CombinedFormField;\n\n/**\n * The form configuration.\n */\nexport type Form = {\n\ttype?: 'regular' | 'panel';\n\tfields?: Array< FormField | string >;\n\tlabelPosition?: 'side' | 'top' | 'none';\n};\n\nexport interface DataFormProps< Item > {\n\tdata: Item;\n\tfields: Field< Item >[];\n\tform: Form;\n\tonChange: ( value: Record< string, any > ) => void;\n}\n\nexport interface FieldLayoutProps< Item > {\n\tdata: Item;\n\tfield: FormField;\n\tonChange: ( value: any ) => void;\n\thideLabelFromVision?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
@@ -2,8 +2,8 @@
2
2
  /**
3
3
  * WordPress dependencies
4
4
  */
5
- import { __, sprintf } from '@wordpress/i18n';
6
5
  import { CheckboxControl } from '@wordpress/components';
6
+ import { __ } from '@wordpress/i18n';
7
7
 
8
8
  /**
9
9
  * Internal dependencies
@@ -19,15 +19,11 @@ export default function DataViewsSelectionCheckbox({
19
19
  }) {
20
20
  const id = getItemId(item);
21
21
  const checked = !disabled && selection.includes(id);
22
- let selectionLabel;
23
- if (titleField?.getValue && item) {
24
- // eslint-disable-next-line @wordpress/valid-sprintf
25
- selectionLabel = sprintf(checked ? /* translators: %s: item title. */__('Deselect item: %s') : /* translators: %s: item title. */__('Select item: %s'), titleField.getValue({
26
- item
27
- }));
28
- } else {
29
- selectionLabel = checked ? __('Select a new item') : __('Deselect item');
30
- }
22
+
23
+ // Fallback label to ensure accessibility
24
+ const selectionLabel = titleField?.getValue?.({
25
+ item
26
+ }) || __('(no title)');
31
27
  return /*#__PURE__*/_jsx(CheckboxControl, {
32
28
  className: "dataviews-selection-checkbox",
33
29
  __nextHasNoMarginBottom: true,
@@ -1 +1 @@
1
- {"version":3,"names":["__","sprintf","CheckboxControl","jsx","_jsx","DataViewsSelectionCheckbox","selection","onChangeSelection","item","getItemId","titleField","disabled","id","checked","includes","selectionLabel","getValue","className","__nextHasNoMarginBottom","onChange","filter","itemId"],"sources":["@wordpress/dataviews/src/components/dataviews-selection-checkbox/index.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { CheckboxControl } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport type { Field } from '../../types';\nimport type { SetSelection } from '../../private-types';\n\ninterface DataViewsSelectionCheckboxProps< Item > {\n\tselection: string[];\n\tonChangeSelection: SetSelection;\n\titem: Item;\n\tgetItemId: ( item: Item ) => string;\n\ttitleField?: Field< Item >;\n\tdisabled: boolean;\n}\n\nexport default function DataViewsSelectionCheckbox< Item >( {\n\tselection,\n\tonChangeSelection,\n\titem,\n\tgetItemId,\n\ttitleField,\n\tdisabled,\n}: DataViewsSelectionCheckboxProps< Item > ) {\n\tconst id = getItemId( item );\n\tconst checked = ! disabled && selection.includes( id );\n\tlet selectionLabel;\n\tif ( titleField?.getValue && item ) {\n\t\t// eslint-disable-next-line @wordpress/valid-sprintf\n\t\tselectionLabel = sprintf(\n\t\t\tchecked\n\t\t\t\t? /* translators: %s: item title. */ __( 'Deselect item: %s' )\n\t\t\t\t: /* translators: %s: item title. */ __( 'Select item: %s' ),\n\t\t\ttitleField.getValue( { item } )\n\t\t);\n\t} else {\n\t\tselectionLabel = checked\n\t\t\t? __( 'Select a new item' )\n\t\t\t: __( 'Deselect item' );\n\t}\n\treturn (\n\t\t<CheckboxControl\n\t\t\tclassName=\"dataviews-selection-checkbox\"\n\t\t\t__nextHasNoMarginBottom\n\t\t\taria-label={ selectionLabel }\n\t\t\taria-disabled={ disabled }\n\t\t\tchecked={ checked }\n\t\t\tonChange={ () => {\n\t\t\t\tif ( disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tonChangeSelection(\n\t\t\t\t\tselection.includes( id )\n\t\t\t\t\t\t? selection.filter( ( itemId ) => id !== itemId )\n\t\t\t\t\t\t: [ ...selection, id ]\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;AAC7C,SAASC,eAAe,QAAQ,uBAAuB;;AAEvD;AACA;AACA;AAFA,SAAAC,GAAA,IAAAC,IAAA;AAeA,eAAe,SAASC,0BAA0BA,CAAU;EAC3DC,SAAS;EACTC,iBAAiB;EACjBC,IAAI;EACJC,SAAS;EACTC,UAAU;EACVC;AACwC,CAAC,EAAG;EAC5C,MAAMC,EAAE,GAAGH,SAAS,CAAED,IAAK,CAAC;EAC5B,MAAMK,OAAO,GAAG,CAAEF,QAAQ,IAAIL,SAAS,CAACQ,QAAQ,CAAEF,EAAG,CAAC;EACtD,IAAIG,cAAc;EAClB,IAAKL,UAAU,EAAEM,QAAQ,IAAIR,IAAI,EAAG;IACnC;IACAO,cAAc,GAAGd,OAAO,CACvBY,OAAO,GACJ,kCAAmCb,EAAE,CAAE,mBAAoB,CAAC,GAC5D,kCAAmCA,EAAE,CAAE,iBAAkB,CAAC,EAC7DU,UAAU,CAACM,QAAQ,CAAE;MAAER;IAAK,CAAE,CAC/B,CAAC;EACF,CAAC,MAAM;IACNO,cAAc,GAAGF,OAAO,GACrBb,EAAE,CAAE,mBAAoB,CAAC,GACzBA,EAAE,CAAE,eAAgB,CAAC;EACzB;EACA,oBACCI,IAAA,CAACF,eAAe;IACfe,SAAS,EAAC,8BAA8B;IACxCC,uBAAuB;IACvB,cAAaH,cAAgB;IAC7B,iBAAgBJ,QAAU;IAC1BE,OAAO,EAAGA,OAAS;IACnBM,QAAQ,EAAGA,CAAA,KAAM;MAChB,IAAKR,QAAQ,EAAG;QACf;MACD;MAEAJ,iBAAiB,CAChBD,SAAS,CAACQ,QAAQ,CAAEF,EAAG,CAAC,GACrBN,SAAS,CAACc,MAAM,CAAIC,MAAM,IAAMT,EAAE,KAAKS,MAAO,CAAC,GAC/C,CAAE,GAAGf,SAAS,EAAEM,EAAE,CACtB,CAAC;IACF;EAAG,CACH,CAAC;AAEJ","ignoreList":[]}
1
+ {"version":3,"names":["CheckboxControl","__","jsx","_jsx","DataViewsSelectionCheckbox","selection","onChangeSelection","item","getItemId","titleField","disabled","id","checked","includes","selectionLabel","getValue","className","__nextHasNoMarginBottom","onChange","filter","itemId"],"sources":["@wordpress/dataviews/src/components/dataviews-selection-checkbox/index.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { CheckboxControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport type { Field } from '../../types';\nimport type { SetSelection } from '../../private-types';\n\ninterface DataViewsSelectionCheckboxProps< Item > {\n\tselection: string[];\n\tonChangeSelection: SetSelection;\n\titem: Item;\n\tgetItemId: ( item: Item ) => string;\n\ttitleField?: Field< Item >;\n\tdisabled: boolean;\n}\n\nexport default function DataViewsSelectionCheckbox< Item >( {\n\tselection,\n\tonChangeSelection,\n\titem,\n\tgetItemId,\n\ttitleField,\n\tdisabled,\n}: DataViewsSelectionCheckboxProps< Item > ) {\n\tconst id = getItemId( item );\n\tconst checked = ! disabled && selection.includes( id );\n\n\t// Fallback label to ensure accessibility\n\tconst selectionLabel =\n\t\ttitleField?.getValue?.( { item } ) || __( '(no title)' );\n\n\treturn (\n\t\t<CheckboxControl\n\t\t\tclassName=\"dataviews-selection-checkbox\"\n\t\t\t__nextHasNoMarginBottom\n\t\t\taria-label={ selectionLabel }\n\t\t\taria-disabled={ disabled }\n\t\t\tchecked={ checked }\n\t\t\tonChange={ () => {\n\t\t\t\tif ( disabled ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tonChangeSelection(\n\t\t\t\t\tselection.includes( id )\n\t\t\t\t\t\t? selection.filter( ( itemId ) => id !== itemId )\n\t\t\t\t\t\t: [ ...selection, id ]\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n}\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,eAAe,QAAQ,uBAAuB;AACvD,SAASC,EAAE,QAAQ,iBAAiB;;AAEpC;AACA;AACA;AAFA,SAAAC,GAAA,IAAAC,IAAA;AAeA,eAAe,SAASC,0BAA0BA,CAAU;EAC3DC,SAAS;EACTC,iBAAiB;EACjBC,IAAI;EACJC,SAAS;EACTC,UAAU;EACVC;AACwC,CAAC,EAAG;EAC5C,MAAMC,EAAE,GAAGH,SAAS,CAAED,IAAK,CAAC;EAC5B,MAAMK,OAAO,GAAG,CAAEF,QAAQ,IAAIL,SAAS,CAACQ,QAAQ,CAAEF,EAAG,CAAC;;EAEtD;EACA,MAAMG,cAAc,GACnBL,UAAU,EAAEM,QAAQ,GAAI;IAAER;EAAK,CAAE,CAAC,IAAIN,EAAE,CAAE,YAAa,CAAC;EAEzD,oBACCE,IAAA,CAACH,eAAe;IACfgB,SAAS,EAAC,8BAA8B;IACxCC,uBAAuB;IACvB,cAAaH,cAAgB;IAC7B,iBAAgBJ,QAAU;IAC1BE,OAAO,EAAGA,OAAS;IACnBM,QAAQ,EAAGA,CAAA,KAAM;MAChB,IAAKR,QAAQ,EAAG;QACf;MACD;MAEAJ,iBAAiB,CAChBD,SAAS,CAACQ,QAAQ,CAAEF,EAAG,CAAC,GACrBN,SAAS,CAACc,MAAM,CAAIC,MAAM,IAAMT,EAAE,KAAKS,MAAO,CAAC,GAC/C,CAAE,GAAGf,SAAS,EAAEM,EAAE,CACtB,CAAC;IACF;EAAG,CACH,CAAC;AAEJ","ignoreList":[]}
@@ -3,13 +3,15 @@
3
3
  * External dependencies
4
4
  */
5
5
 
6
+ import clsx from 'clsx';
7
+
6
8
  /**
7
9
  * WordPress dependencies
8
10
  */
9
11
  import { Button, __experimentalDropdownContentWrapper as DropdownContentWrapper, Dropdown, __experimentalToggleGroupControl as ToggleGroupControl, __experimentalToggleGroupControlOption as ToggleGroupControlOption, __experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon, SelectControl, __experimentalItemGroup as ItemGroup, __experimentalItem as Item, __experimentalGrid as Grid, __experimentalVStack as VStack, __experimentalHStack as HStack, __experimentalHeading as Heading, __experimentalText as Text, privateApis as componentsPrivateApis, BaseControl, Icon } from '@wordpress/components';
10
12
  import { __, _x, sprintf } from '@wordpress/i18n';
11
- import { memo, useContext, useMemo } from '@wordpress/element';
12
- import { chevronDown, chevronUp, cog, seen, unseen, lock } from '@wordpress/icons';
13
+ import { memo, useContext, useMemo, useState } from '@wordpress/element';
14
+ import { chevronDown, chevronUp, cog, seen, unseen, lock, moreVertical } from '@wordpress/icons';
13
15
  import warning from '@wordpress/warning';
14
16
  import { useInstanceId } from '@wordpress/compose';
15
17
 
@@ -199,16 +201,67 @@ function ItemsPerPageControl() {
199
201
  })
200
202
  });
201
203
  }
204
+ function PreviewOptions({
205
+ previewOptions,
206
+ onChangePreviewOption,
207
+ onMenuOpenChange,
208
+ activeOption
209
+ }) {
210
+ const focusPreviewOptionsField = id => {
211
+ // Focus the visibility button to avoid focus loss.
212
+ // Our code is safe against the component being unmounted, so we don't need to worry about cleaning the timeout.
213
+ // eslint-disable-next-line @wordpress/react-no-unsafe-timeout
214
+ setTimeout(() => {
215
+ const element = document.querySelector(`.dataviews-field-control__field-${id} .dataviews-field-control__field-preview-options-button`);
216
+ if (element instanceof HTMLElement) {
217
+ element.focus();
218
+ }
219
+ }, 50);
220
+ };
221
+ return /*#__PURE__*/_jsxs(Menu, {
222
+ onOpenChange: onMenuOpenChange,
223
+ children: [/*#__PURE__*/_jsx(Menu.TriggerButton, {
224
+ render: /*#__PURE__*/_jsx(Button, {
225
+ className: "dataviews-field-control__field-preview-options-button",
226
+ size: "compact",
227
+ icon: moreVertical,
228
+ label: __('Preview')
229
+ })
230
+ }), /*#__PURE__*/_jsx(Menu.Popover, {
231
+ children: previewOptions?.map(({
232
+ id,
233
+ label
234
+ }) => {
235
+ return /*#__PURE__*/_jsx(Menu.RadioItem, {
236
+ value: id,
237
+ checked: id === activeOption,
238
+ onChange: () => {
239
+ onChangePreviewOption?.(id);
240
+ focusPreviewOptionsField(id);
241
+ },
242
+ children: /*#__PURE__*/_jsx(Menu.ItemLabel, {
243
+ children: label
244
+ })
245
+ }, id);
246
+ })
247
+ })]
248
+ });
249
+ }
202
250
  function FieldItem({
203
251
  field,
252
+ label,
253
+ description,
204
254
  isVisible,
205
255
  isFirst,
206
256
  isLast,
207
257
  canMove = true,
208
258
  onToggleVisibility,
209
259
  onMoveUp,
210
- onMoveDown
260
+ onMoveDown,
261
+ previewOptions,
262
+ onChangePreviewOption
211
263
  }) {
264
+ const [isChangingPreviewOption, setIsChangingPreviewOption] = useState(false);
212
265
  const focusVisibilityField = () => {
213
266
  // Focus the visibility button to avoid focus loss.
214
267
  // Our code is safe against the component being unmounted, so we don't need to worry about cleaning the timeout.
@@ -223,16 +276,31 @@ function FieldItem({
223
276
  return /*#__PURE__*/_jsx(Item, {
224
277
  children: /*#__PURE__*/_jsxs(HStack, {
225
278
  expanded: true,
226
- className: `dataviews-field-control__field dataviews-field-control__field-${field.id}`,
279
+ className: clsx('dataviews-field-control__field', `dataviews-field-control__field-${field.id}`,
280
+ // The actions are hidden when the mouse is not hovering the item, or focus
281
+ // is outside the item.
282
+ // For actions that require a popover, a menu etc, that would mean that when the interactive element
283
+ // opens and the focus goes there the actions would be hidden.
284
+ // To avoid that we add a class to the item, that makes sure actions are visible while there is some
285
+ // interaction with the item.
286
+ {
287
+ 'is-interacting': isChangingPreviewOption
288
+ }),
227
289
  justify: "flex-start",
228
290
  children: [/*#__PURE__*/_jsx("span", {
229
291
  className: "dataviews-field-control__icon",
230
292
  children: !canMove && !field.enableHiding && /*#__PURE__*/_jsx(Icon, {
231
293
  icon: lock
232
294
  })
233
- }), /*#__PURE__*/_jsx("span", {
234
- className: "dataviews-field-control__label",
235
- children: field.label
295
+ }), /*#__PURE__*/_jsxs("span", {
296
+ className: "dataviews-field-control__label-sub-label-container",
297
+ children: [/*#__PURE__*/_jsx("span", {
298
+ className: "dataviews-field-control__label",
299
+ children: label || field.label
300
+ }), description && /*#__PURE__*/_jsx("span", {
301
+ className: "dataviews-field-control__sub-label",
302
+ children: description
303
+ })]
236
304
  }), /*#__PURE__*/_jsxs(HStack, {
237
305
  justify: "flex-end",
238
306
  expanded: false,
@@ -268,6 +336,11 @@ function FieldItem({
268
336
  label: isVisible ? sprintf(/* translators: %s: field label */
269
337
  _x('Hide %s', 'field'), field.label) : sprintf(/* translators: %s: field label */
270
338
  _x('Show %s', 'field'), field.label)
339
+ }), previewOptions && /*#__PURE__*/_jsx(PreviewOptions, {
340
+ previewOptions: previewOptions,
341
+ onChangePreviewOption: onChangePreviewOption,
342
+ onMenuOpenChange: setIsChangingPreviewOption,
343
+ activeOption: field.id
271
344
  })]
272
345
  })]
273
346
  })
@@ -321,20 +394,48 @@ function FieldControl() {
321
394
  } = useContext(DataViewsContext);
322
395
  const togglableFields = [view?.titleField, view?.mediaField, view?.descriptionField].filter(Boolean);
323
396
  const visibleFieldIds = (_view$fields2 = view.fields) !== null && _view$fields2 !== void 0 ? _view$fields2 : [];
324
- const hiddenFields = fields.filter(f => !visibleFieldIds.includes(f.id) && !togglableFields.includes(f.id));
397
+ const hiddenFields = fields.filter(f => !visibleFieldIds.includes(f.id) && !togglableFields.includes(f.id) && f.type !== 'media');
325
398
  const visibleFields = visibleFieldIds.map(fieldId => fields.find(f => f.id === fieldId)).filter(isDefined);
326
399
  if (!visibleFields?.length && !hiddenFields?.length) {
327
400
  return null;
328
401
  }
329
402
  const titleField = fields.find(f => f.id === view.titleField);
330
- const mediaField = fields.find(f => f.id === view.mediaField);
403
+ const previewField = fields.find(f => f.id === view.mediaField);
331
404
  const descriptionField = fields.find(f => f.id === view.descriptionField);
405
+ const previewFields = fields.filter(f => f.type === 'media');
406
+ let previewFieldUI;
407
+ if (previewFields.length > 1) {
408
+ var _view$showMedia;
409
+ const isPreviewFieldVisible = isDefined(previewField) && ((_view$showMedia = view.showMedia) !== null && _view$showMedia !== void 0 ? _view$showMedia : true);
410
+ previewFieldUI = isDefined(previewField) && /*#__PURE__*/_jsx(FieldItem, {
411
+ field: previewField,
412
+ label: __('Preview'),
413
+ description: previewField.label,
414
+ isVisible: isPreviewFieldVisible,
415
+ onToggleVisibility: () => {
416
+ onChangeView({
417
+ ...view,
418
+ showMedia: !isPreviewFieldVisible
419
+ });
420
+ },
421
+ canMove: false,
422
+ previewOptions: previewFields.map(field => ({
423
+ label: field.label,
424
+ id: field.id
425
+ })),
426
+ onChangePreviewOption: newPreviewId => onChangeView({
427
+ ...view,
428
+ mediaField: newPreviewId
429
+ })
430
+ }, previewField.id);
431
+ }
332
432
  const lockedFields = [{
333
433
  field: titleField,
334
434
  isVisibleFlag: 'showTitle'
335
435
  }, {
336
- field: mediaField,
337
- isVisibleFlag: 'showMedia'
436
+ field: previewField,
437
+ isVisibleFlag: 'showMedia',
438
+ ui: previewFieldUI
338
439
  }, {
339
440
  field: descriptionField,
340
441
  isVisibleFlag: 'showDescription'
@@ -372,9 +473,10 @@ function FieldControl() {
372
473
  isSeparated: true,
373
474
  children: [visibleLockedFields.map(({
374
475
  field,
375
- isVisibleFlag
476
+ isVisibleFlag,
477
+ ui
376
478
  }) => {
377
- return /*#__PURE__*/_jsx(FieldItem, {
479
+ return ui !== null && ui !== void 0 ? ui : /*#__PURE__*/_jsx(FieldItem, {
378
480
  field: field,
379
481
  isVisible: true,
380
482
  onToggleVisibility: () => {
@@ -407,9 +509,10 @@ function FieldControl() {
407
509
  isSeparated: true,
408
510
  children: [hiddenLockedFields.length > 0 && hiddenLockedFields.map(({
409
511
  field,
410
- isVisibleFlag
512
+ isVisibleFlag,
513
+ ui
411
514
  }) => {
412
- return /*#__PURE__*/_jsx(FieldItem, {
515
+ return ui !== null && ui !== void 0 ? ui : /*#__PURE__*/_jsx(FieldItem, {
413
516
  field: field,
414
517
  isVisible: false,
415
518
  onToggleVisibility: () => {