@wordpress/dataviews 4.9.1-next.cd6172eb0.0 → 4.11.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.
- package/CHANGELOG.md +28 -1
- package/LICENSE.md +1 -1
- package/README.md +337 -228
- package/build/components/dataviews/index.js +13 -1
- package/build/components/dataviews/index.js.map +1 -1
- package/build/components/dataviews-bulk-actions/index.js +30 -2
- package/build/components/dataviews-bulk-actions/index.js.map +1 -1
- package/build/components/dataviews-context/index.js +2 -1
- package/build/components/dataviews-context/index.js.map +1 -1
- package/build/components/dataviews-filters/add-filter.js +36 -30
- package/build/components/dataviews-filters/add-filter.js.map +1 -1
- package/build/components/dataviews-filters/filter-summary.js +1 -0
- package/build/components/dataviews-filters/filter-summary.js.map +1 -1
- package/build/components/dataviews-filters/index.js +4 -1
- package/build/components/dataviews-filters/index.js.map +1 -1
- package/build/components/dataviews-filters/reset-filters.js +1 -0
- package/build/components/dataviews-filters/reset-filters.js.map +1 -1
- package/build/components/dataviews-filters/search-widget.js +1 -0
- package/build/components/dataviews-filters/search-widget.js.map +1 -1
- package/build/components/dataviews-item-actions/index.js +68 -79
- package/build/components/dataviews-item-actions/index.js.map +1 -1
- package/build/components/dataviews-layout/index.js +3 -0
- package/build/components/dataviews-layout/index.js.map +1 -1
- package/build/components/dataviews-pagination/index.js +1 -0
- package/build/components/dataviews-pagination/index.js.map +1 -1
- package/build/components/dataviews-selection-checkbox/index.js +4 -3
- package/build/components/dataviews-selection-checkbox/index.js.map +1 -1
- package/build/components/dataviews-view-config/index.js +235 -161
- package/build/components/dataviews-view-config/index.js.map +1 -1
- package/build/dataforms-layouts/data-form-layout.js +1 -0
- package/build/dataforms-layouts/data-form-layout.js.map +1 -1
- package/build/dataforms-layouts/index.js +1 -0
- package/build/dataforms-layouts/index.js.map +1 -1
- package/build/dataforms-layouts/panel/index.js +1 -0
- package/build/dataforms-layouts/panel/index.js.map +1 -1
- package/build/dataforms-layouts/regular/index.js +1 -0
- package/build/dataforms-layouts/regular/index.js.map +1 -1
- package/build/dataviews-layouts/grid/index.js +108 -65
- package/build/dataviews-layouts/grid/index.js.map +1 -1
- package/build/dataviews-layouts/grid/preview-size-picker.js +22 -25
- package/build/dataviews-layouts/grid/preview-size-picker.js.map +1 -1
- package/build/dataviews-layouts/index.js +0 -60
- package/build/dataviews-layouts/index.js.map +1 -1
- package/build/dataviews-layouts/list/index.js +67 -33
- package/build/dataviews-layouts/list/index.js.map +1 -1
- package/build/dataviews-layouts/table/column-header-menu.js +119 -120
- package/build/dataviews-layouts/table/column-header-menu.js.map +1 -1
- package/build/dataviews-layouts/table/column-primary.js +59 -0
- package/build/dataviews-layouts/table/column-primary.js.map +1 -0
- package/build/dataviews-layouts/table/index.js +78 -88
- package/build/dataviews-layouts/table/index.js.map +1 -1
- package/build/dataviews-layouts/utils/get-clickable-item-props.js +2 -2
- package/build/dataviews-layouts/utils/get-clickable-item-props.js.map +1 -1
- package/build/filter-and-sort-data-view.js +1 -0
- package/build/filter-and-sort-data-view.js.map +1 -1
- package/build/normalize-fields.js +1 -0
- package/build/normalize-fields.js.map +1 -1
- package/build/normalize-form-fields.js +1 -0
- package/build/normalize-form-fields.js.map +1 -1
- package/build/types.js.map +1 -1
- package/build/utils.js +1 -0
- package/build/utils.js.map +1 -1
- package/build/validation.js +1 -0
- package/build/validation.js.map +1 -1
- package/build-module/components/dataviews/index.js +13 -1
- package/build-module/components/dataviews/index.js.map +1 -1
- package/build-module/components/dataviews-bulk-actions/index.js +31 -3
- package/build-module/components/dataviews-bulk-actions/index.js.map +1 -1
- package/build-module/components/dataviews-context/index.js +2 -1
- package/build-module/components/dataviews-context/index.js.map +1 -1
- package/build-module/components/dataviews-filters/add-filter.js +37 -31
- package/build-module/components/dataviews-filters/add-filter.js.map +1 -1
- package/build-module/components/dataviews-filters/filter-summary.js +1 -0
- package/build-module/components/dataviews-filters/filter-summary.js.map +1 -1
- package/build-module/components/dataviews-filters/index.js +4 -1
- package/build-module/components/dataviews-filters/index.js.map +1 -1
- package/build-module/components/dataviews-filters/reset-filters.js +1 -0
- package/build-module/components/dataviews-filters/reset-filters.js.map +1 -1
- package/build-module/components/dataviews-filters/search-widget.js +1 -0
- package/build-module/components/dataviews-filters/search-widget.js.map +1 -1
- package/build-module/components/dataviews-item-actions/index.js +69 -79
- package/build-module/components/dataviews-item-actions/index.js.map +1 -1
- package/build-module/components/dataviews-layout/index.js +3 -0
- package/build-module/components/dataviews-layout/index.js.map +1 -1
- package/build-module/components/dataviews-pagination/index.js +1 -0
- package/build-module/components/dataviews-pagination/index.js.map +1 -1
- package/build-module/components/dataviews-selection-checkbox/index.js +4 -3
- package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -1
- package/build-module/components/dataviews-view-config/index.js +240 -166
- package/build-module/components/dataviews-view-config/index.js.map +1 -1
- package/build-module/dataforms-layouts/data-form-layout.js +1 -0
- package/build-module/dataforms-layouts/data-form-layout.js.map +1 -1
- package/build-module/dataforms-layouts/index.js +1 -0
- package/build-module/dataforms-layouts/index.js.map +1 -1
- package/build-module/dataforms-layouts/panel/index.js +1 -0
- package/build-module/dataforms-layouts/panel/index.js.map +1 -1
- package/build-module/dataforms-layouts/regular/index.js +1 -0
- package/build-module/dataforms-layouts/regular/index.js.map +1 -1
- package/build-module/dataviews-layouts/grid/index.js +111 -68
- package/build-module/dataviews-layouts/grid/index.js.map +1 -1
- package/build-module/dataviews-layouts/grid/preview-size-picker.js +22 -25
- package/build-module/dataviews-layouts/grid/preview-size-picker.js.map +1 -1
- package/build-module/dataviews-layouts/index.js +0 -57
- package/build-module/dataviews-layouts/index.js.map +1 -1
- package/build-module/dataviews-layouts/list/index.js +67 -33
- package/build-module/dataviews-layouts/list/index.js.map +1 -1
- package/build-module/dataviews-layouts/table/column-header-menu.js +119 -120
- package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
- package/build-module/dataviews-layouts/table/column-primary.js +52 -0
- package/build-module/dataviews-layouts/table/column-primary.js.map +1 -0
- package/build-module/dataviews-layouts/table/index.js +81 -91
- package/build-module/dataviews-layouts/table/index.js.map +1 -1
- package/build-module/dataviews-layouts/utils/get-clickable-item-props.js +2 -2
- package/build-module/dataviews-layouts/utils/get-clickable-item-props.js.map +1 -1
- package/build-module/filter-and-sort-data-view.js +1 -0
- package/build-module/filter-and-sort-data-view.js.map +1 -1
- package/build-module/normalize-fields.js +1 -0
- package/build-module/normalize-fields.js.map +1 -1
- package/build-module/normalize-form-fields.js +1 -0
- package/build-module/normalize-form-fields.js.map +1 -1
- package/build-module/types.js.map +1 -1
- package/build-module/utils.js +1 -0
- package/build-module/utils.js.map +1 -1
- package/build-module/validation.js +1 -0
- package/build-module/validation.js.map +1 -1
- package/build-style/style-rtl.css +123 -121
- package/build-style/style.css +123 -121
- package/build-types/components/dataviews/index.d.ts +2 -1
- package/build-types/components/dataviews/index.d.ts.map +1 -1
- package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
- package/build-types/components/dataviews/stories/index.story.d.ts +0 -1
- package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -1
- package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -1
- package/build-types/components/dataviews-context/index.d.ts +2 -0
- package/build-types/components/dataviews-context/index.d.ts.map +1 -1
- package/build-types/components/dataviews-filters/add-filter.d.ts +3 -2
- package/build-types/components/dataviews-filters/add-filter.d.ts.map +1 -1
- package/build-types/components/dataviews-item-actions/index.d.ts +7 -9
- package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layout/index.d.ts.map +1 -1
- package/build-types/components/dataviews-selection-checkbox/index.d.ts +2 -2
- package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/grid/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/grid/preview-size-picker.d.ts.map +1 -1
- package/build-types/dataviews-layouts/index.d.ts +0 -4
- package/build-types/dataviews-layouts/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/table/column-header-menu.d.ts +1 -0
- package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
- package/build-types/dataviews-layouts/table/column-primary.d.ts +15 -0
- package/build-types/dataviews-layouts/table/column-primary.d.ts.map +1 -0
- package/build-types/dataviews-layouts/table/index.d.ts +1 -1
- package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/utils/get-clickable-item-props.d.ts +3 -3
- package/build-types/dataviews-layouts/utils/get-clickable-item-props.d.ts.map +1 -1
- package/build-types/test/dataform.d.ts +2 -0
- package/build-types/test/dataform.d.ts.map +1 -0
- package/build-types/test/dataviews.d.ts +2 -0
- package/build-types/test/dataviews.d.ts.map +1 -0
- package/build-types/test/normalize-fields.d.ts +2 -0
- package/build-types/test/normalize-fields.d.ts.map +1 -0
- package/build-types/test/validation.d.ts +2 -0
- package/build-types/test/validation.d.ts.map +1 -0
- package/build-types/types.d.ts +25 -39
- package/build-types/types.d.ts.map +1 -1
- package/build-wp/index.js +1892 -1814
- package/build.js +1 -1
- package/package.json +13 -12
- package/src/components/dataviews/index.tsx +15 -1
- package/src/components/dataviews/stories/fixtures.tsx +0 -3
- package/src/components/dataviews/stories/index.story.tsx +14 -106
- package/src/components/dataviews/style.scss +32 -33
- package/src/components/dataviews-bulk-actions/index.tsx +43 -3
- package/src/components/dataviews-context/index.ts +3 -0
- package/src/components/dataviews-filters/add-filter.tsx +43 -39
- package/src/components/dataviews-filters/index.tsx +1 -1
- package/src/components/dataviews-footer/style.scss +0 -3
- package/src/components/dataviews-item-actions/index.tsx +90 -107
- package/src/components/dataviews-layout/index.tsx +2 -0
- package/src/components/dataviews-selection-checkbox/index.tsx +4 -4
- package/src/components/dataviews-view-config/index.tsx +347 -232
- package/src/components/dataviews-view-config/style.scss +17 -1
- package/src/dataviews-layouts/grid/index.tsx +150 -103
- package/src/dataviews-layouts/grid/preview-size-picker.tsx +25 -30
- package/src/dataviews-layouts/grid/style.scss +38 -56
- package/src/dataviews-layouts/index.ts +0 -88
- package/src/dataviews-layouts/list/index.tsx +95 -57
- package/src/dataviews-layouts/list/style.scss +10 -9
- package/src/dataviews-layouts/table/column-header-menu.tsx +183 -171
- package/src/dataviews-layouts/table/column-primary.tsx +65 -0
- package/src/dataviews-layouts/table/index.tsx +98 -133
- package/src/dataviews-layouts/table/style.scss +4 -1
- package/src/dataviews-layouts/utils/get-clickable-item-props.ts +9 -3
- package/src/test/dataform.tsx +348 -0
- package/src/test/dataviews.tsx +380 -0
- package/src/types.ts +27 -46
- package/tsconfig.json +14 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/build/components/form-field-visibility/index.js +0 -32
- package/build/components/form-field-visibility/index.js.map +0 -1
- package/build-module/components/form-field-visibility/index.js +0 -26
- package/build-module/components/form-field-visibility/index.js.map +0 -1
- package/build-types/components/form-field-visibility/index.d.ts +0 -11
- package/build-types/components/form-field-visibility/index.d.ts.map +0 -1
- package/src/components/form-field-visibility/index.tsx +0 -32
|
@@ -16,7 +16,6 @@ import ViewTable from './table';
|
|
|
16
16
|
import ViewGrid from './grid';
|
|
17
17
|
import ViewList from './list';
|
|
18
18
|
import { LAYOUT_GRID, LAYOUT_LIST, LAYOUT_TABLE } from '../constants';
|
|
19
|
-
import type { View, Field } from '../types';
|
|
20
19
|
import PreviewSizePicker from './grid/preview-size-picker';
|
|
21
20
|
import DensityPicker from './table/density-picker';
|
|
22
21
|
|
|
@@ -42,90 +41,3 @@ export const VIEW_LAYOUTS = [
|
|
|
42
41
|
icon: isRTL() ? formatListBulletsRTL : formatListBullets,
|
|
43
42
|
},
|
|
44
43
|
];
|
|
45
|
-
|
|
46
|
-
export function getNotHidableFieldIds( view: View ): string[] {
|
|
47
|
-
if ( view.type === 'table' ) {
|
|
48
|
-
return [ view.layout?.primaryField ]
|
|
49
|
-
.concat(
|
|
50
|
-
view.layout?.combinedFields?.flatMap(
|
|
51
|
-
( field ) => field.children
|
|
52
|
-
) ?? []
|
|
53
|
-
)
|
|
54
|
-
.filter( ( item ): item is string => !! item );
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if ( view.type === 'grid' ) {
|
|
58
|
-
return [ view.layout?.primaryField, view.layout?.mediaField ].filter(
|
|
59
|
-
( item ): item is string => !! item
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if ( view.type === 'list' ) {
|
|
64
|
-
return [ view.layout?.primaryField, view.layout?.mediaField ].filter(
|
|
65
|
-
( item ): item is string => !! item
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return [];
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function getCombinedFieldIds( view: View ): string[] {
|
|
73
|
-
const combinedFields: string[] = [];
|
|
74
|
-
if ( view.type === LAYOUT_TABLE && view.layout?.combinedFields ) {
|
|
75
|
-
view.layout.combinedFields.forEach( ( combination ) => {
|
|
76
|
-
combinedFields.push( ...combination.children );
|
|
77
|
-
} );
|
|
78
|
-
}
|
|
79
|
-
return combinedFields;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export function getVisibleFieldIds(
|
|
83
|
-
view: View,
|
|
84
|
-
fields: Field< any >[]
|
|
85
|
-
): string[] {
|
|
86
|
-
const fieldsToExclude = getCombinedFieldIds( view );
|
|
87
|
-
|
|
88
|
-
if ( view.fields ) {
|
|
89
|
-
return view.fields.filter( ( id ) => ! fieldsToExclude.includes( id ) );
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const visibleFields = [];
|
|
93
|
-
if ( view.type === LAYOUT_TABLE && view.layout?.combinedFields ) {
|
|
94
|
-
visibleFields.push(
|
|
95
|
-
...view.layout.combinedFields.map( ( { id } ) => id )
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
visibleFields.push(
|
|
99
|
-
...fields
|
|
100
|
-
.filter( ( { id } ) => ! fieldsToExclude.includes( id ) )
|
|
101
|
-
.map( ( { id } ) => id )
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
return visibleFields;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export function getHiddenFieldIds(
|
|
108
|
-
view: View,
|
|
109
|
-
fields: Field< any >[]
|
|
110
|
-
): string[] {
|
|
111
|
-
const fieldsToExclude = [
|
|
112
|
-
...getCombinedFieldIds( view ),
|
|
113
|
-
...getVisibleFieldIds( view, fields ),
|
|
114
|
-
];
|
|
115
|
-
|
|
116
|
-
// The media field does not need to be in the view.fields to be displayed.
|
|
117
|
-
if ( view.type === LAYOUT_GRID && view.layout?.mediaField ) {
|
|
118
|
-
fieldsToExclude.push( view.layout?.mediaField );
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if ( view.type === LAYOUT_LIST && view.layout?.mediaField ) {
|
|
122
|
-
fieldsToExclude.push( view.layout?.mediaField );
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return fields
|
|
126
|
-
.filter(
|
|
127
|
-
( { id, enableHiding } ) =>
|
|
128
|
-
! fieldsToExclude.includes( id ) && enableHiding
|
|
129
|
-
)
|
|
130
|
-
.map( ( { id } ) => id );
|
|
131
|
-
}
|
|
@@ -35,17 +35,25 @@ import {
|
|
|
35
35
|
ActionsMenuGroup,
|
|
36
36
|
ActionModal,
|
|
37
37
|
} from '../../components/dataviews-item-actions';
|
|
38
|
-
import type {
|
|
38
|
+
import type {
|
|
39
|
+
Action,
|
|
40
|
+
NormalizedField,
|
|
41
|
+
ViewList as ViewListType,
|
|
42
|
+
ViewListProps,
|
|
43
|
+
ActionModal as ActionModalType,
|
|
44
|
+
} from '../../types';
|
|
39
45
|
|
|
40
46
|
interface ListViewItemProps< Item > {
|
|
47
|
+
view: ViewListType;
|
|
41
48
|
actions: Action< Item >[];
|
|
42
49
|
idPrefix: string;
|
|
43
50
|
isSelected: boolean;
|
|
44
51
|
item: Item;
|
|
52
|
+
titleField?: NormalizedField< Item >;
|
|
45
53
|
mediaField?: NormalizedField< Item >;
|
|
54
|
+
descriptionField?: NormalizedField< Item >;
|
|
46
55
|
onSelect: ( item: Item ) => void;
|
|
47
|
-
|
|
48
|
-
visibleFields: NormalizedField< Item >[];
|
|
56
|
+
otherFields: NormalizedField< Item >[];
|
|
49
57
|
onDropdownTriggerKeyDown: React.KeyboardEventHandler< HTMLButtonElement >;
|
|
50
58
|
}
|
|
51
59
|
|
|
@@ -93,6 +101,8 @@ function PrimaryActionGridCell< Item >( {
|
|
|
93
101
|
render={
|
|
94
102
|
<Button
|
|
95
103
|
label={ label }
|
|
104
|
+
disabled={ !! primaryAction.disabled }
|
|
105
|
+
accessibleWhenDisabled
|
|
96
106
|
icon={ primaryAction.icon }
|
|
97
107
|
isDestructive={ primaryAction.isDestructive }
|
|
98
108
|
size="small"
|
|
@@ -116,6 +126,8 @@ function PrimaryActionGridCell< Item >( {
|
|
|
116
126
|
render={
|
|
117
127
|
<Button
|
|
118
128
|
label={ label }
|
|
129
|
+
disabled={ !! primaryAction.disabled }
|
|
130
|
+
accessibleWhenDisabled
|
|
119
131
|
icon={ primaryAction.icon }
|
|
120
132
|
isDestructive={ primaryAction.isDestructive }
|
|
121
133
|
size="small"
|
|
@@ -130,21 +142,28 @@ function PrimaryActionGridCell< Item >( {
|
|
|
130
142
|
}
|
|
131
143
|
|
|
132
144
|
function ListItem< Item >( {
|
|
145
|
+
view,
|
|
133
146
|
actions,
|
|
134
147
|
idPrefix,
|
|
135
148
|
isSelected,
|
|
136
149
|
item,
|
|
150
|
+
titleField,
|
|
137
151
|
mediaField,
|
|
152
|
+
descriptionField,
|
|
138
153
|
onSelect,
|
|
139
|
-
|
|
140
|
-
visibleFields,
|
|
154
|
+
otherFields,
|
|
141
155
|
onDropdownTriggerKeyDown,
|
|
142
156
|
}: ListViewItemProps< Item > ) {
|
|
157
|
+
const { showTitle = true, showMedia = true, showDescription = true } = view;
|
|
143
158
|
const itemRef = useRef< HTMLDivElement >( null );
|
|
144
159
|
const labelId = `${ idPrefix }-label`;
|
|
145
160
|
const descriptionId = `${ idPrefix }-description`;
|
|
146
161
|
|
|
162
|
+
const registry = useRegistry();
|
|
147
163
|
const [ isHovered, setIsHovered ] = useState( false );
|
|
164
|
+
const [ activeModalAction, setActiveModalAction ] = useState(
|
|
165
|
+
null as ActionModalType< Item > | null
|
|
166
|
+
);
|
|
148
167
|
const handleHover: React.MouseEventHandler = ( { type } ) => {
|
|
149
168
|
const isHover = type === 'mouseenter';
|
|
150
169
|
setIsHovered( isHover );
|
|
@@ -177,15 +196,17 @@ function ListItem< Item >( {
|
|
|
177
196
|
|
|
178
197
|
const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1;
|
|
179
198
|
|
|
180
|
-
const renderedMediaField =
|
|
181
|
-
|
|
182
|
-
<
|
|
183
|
-
|
|
184
|
-
|
|
199
|
+
const renderedMediaField =
|
|
200
|
+
showMedia && mediaField?.render ? (
|
|
201
|
+
<div className="dataviews-view-list__media-wrapper">
|
|
202
|
+
<mediaField.render item={ item } />
|
|
203
|
+
</div>
|
|
204
|
+
) : null;
|
|
185
205
|
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
206
|
+
const renderedTitleField =
|
|
207
|
+
showTitle && titleField?.render ? (
|
|
208
|
+
<titleField.render item={ item } />
|
|
209
|
+
) : null;
|
|
189
210
|
|
|
190
211
|
const usedActions = eligibleActions?.length > 0 && (
|
|
191
212
|
<HStack spacing={ 3 } className="dataviews-view-list__item-actions">
|
|
@@ -198,31 +219,44 @@ function ListItem< Item >( {
|
|
|
198
219
|
) }
|
|
199
220
|
{ ! hasOnlyOnePrimaryAction && (
|
|
200
221
|
<div role="gridcell">
|
|
201
|
-
<Menu
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
actions={ eligibleActions }
|
|
223
|
-
item={ item }
|
|
222
|
+
<Menu placement="bottom-end">
|
|
223
|
+
<Menu.TriggerButton
|
|
224
|
+
render={
|
|
225
|
+
<Composite.Item
|
|
226
|
+
id={ generateDropdownTriggerCompositeId(
|
|
227
|
+
idPrefix
|
|
228
|
+
) }
|
|
229
|
+
render={
|
|
230
|
+
<Button
|
|
231
|
+
size="small"
|
|
232
|
+
icon={ moreVertical }
|
|
233
|
+
label={ __( 'Actions' ) }
|
|
234
|
+
accessibleWhenDisabled
|
|
235
|
+
disabled={ ! actions.length }
|
|
236
|
+
onKeyDown={
|
|
237
|
+
onDropdownTriggerKeyDown
|
|
238
|
+
}
|
|
239
|
+
/>
|
|
240
|
+
}
|
|
241
|
+
/>
|
|
242
|
+
}
|
|
224
243
|
/>
|
|
244
|
+
<Menu.Popover>
|
|
245
|
+
<ActionsMenuGroup
|
|
246
|
+
actions={ eligibleActions }
|
|
247
|
+
item={ item }
|
|
248
|
+
registry={ registry }
|
|
249
|
+
setActiveModalAction={ setActiveModalAction }
|
|
250
|
+
/>
|
|
251
|
+
</Menu.Popover>
|
|
225
252
|
</Menu>
|
|
253
|
+
{ !! activeModalAction && (
|
|
254
|
+
<ActionModal
|
|
255
|
+
action={ activeModalAction }
|
|
256
|
+
items={ [ item ] }
|
|
257
|
+
closeModal={ () => setActiveModalAction( null ) }
|
|
258
|
+
/>
|
|
259
|
+
) }
|
|
226
260
|
</div>
|
|
227
261
|
) }
|
|
228
262
|
</HStack>
|
|
@@ -231,7 +265,7 @@ function ListItem< Item >( {
|
|
|
231
265
|
return (
|
|
232
266
|
<Composite.Row
|
|
233
267
|
ref={ itemRef }
|
|
234
|
-
render={ <
|
|
268
|
+
render={ <div /> }
|
|
235
269
|
role="row"
|
|
236
270
|
className={ clsx( {
|
|
237
271
|
'is-selected': isSelected,
|
|
@@ -259,18 +293,23 @@ function ListItem< Item >( {
|
|
|
259
293
|
>
|
|
260
294
|
<HStack spacing={ 0 }>
|
|
261
295
|
<div
|
|
262
|
-
className="dataviews-
|
|
296
|
+
className="dataviews-title-field"
|
|
263
297
|
id={ labelId }
|
|
264
298
|
>
|
|
265
|
-
{
|
|
299
|
+
{ renderedTitleField }
|
|
266
300
|
</div>
|
|
267
301
|
{ usedActions }
|
|
268
302
|
</HStack>
|
|
303
|
+
{ showDescription && descriptionField?.render && (
|
|
304
|
+
<div className="dataviews-view-list__field">
|
|
305
|
+
<descriptionField.render item={ item } />
|
|
306
|
+
</div>
|
|
307
|
+
) }
|
|
269
308
|
<div
|
|
270
309
|
className="dataviews-view-list__fields"
|
|
271
310
|
id={ descriptionId }
|
|
272
311
|
>
|
|
273
|
-
{
|
|
312
|
+
{ otherFields.map( ( field ) => (
|
|
274
313
|
<div
|
|
275
314
|
key={ field.id }
|
|
276
315
|
className="dataviews-view-list__field"
|
|
@@ -294,6 +333,10 @@ function ListItem< Item >( {
|
|
|
294
333
|
);
|
|
295
334
|
}
|
|
296
335
|
|
|
336
|
+
function isDefined< T >( item: T | undefined ): item is T {
|
|
337
|
+
return !! item;
|
|
338
|
+
}
|
|
339
|
+
|
|
297
340
|
export default function ViewList< Item >( props: ViewListProps< Item > ) {
|
|
298
341
|
const {
|
|
299
342
|
actions,
|
|
@@ -310,21 +353,14 @@ export default function ViewList< Item >( props: ViewListProps< Item > ) {
|
|
|
310
353
|
const selectedItem = data?.findLast( ( item ) =>
|
|
311
354
|
selection.includes( getItemId( item ) )
|
|
312
355
|
);
|
|
313
|
-
|
|
314
|
-
const mediaField = fields.find(
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
const primaryField = fields.find(
|
|
318
|
-
( field ) => field.id === view.layout?.primaryField
|
|
319
|
-
);
|
|
320
|
-
const viewFields = view.fields || fields.map( ( field ) => field.id );
|
|
321
|
-
const visibleFields = fields.filter(
|
|
322
|
-
( field ) =>
|
|
323
|
-
viewFields.includes( field.id ) &&
|
|
324
|
-
! [ view.layout?.primaryField, view.layout?.mediaField ].includes(
|
|
325
|
-
field.id
|
|
326
|
-
)
|
|
356
|
+
const titleField = fields.find( ( field ) => field.id === view.titleField );
|
|
357
|
+
const mediaField = fields.find( ( field ) => field.id === view.mediaField );
|
|
358
|
+
const descriptionField = fields.find(
|
|
359
|
+
( field ) => field.id === view.descriptionField
|
|
327
360
|
);
|
|
361
|
+
const otherFields = ( view?.fields ?? [] )
|
|
362
|
+
.map( ( fieldId ) => fields.find( ( f ) => fieldId === f.id ) )
|
|
363
|
+
.filter( isDefined );
|
|
328
364
|
|
|
329
365
|
const onSelect = ( item: Item ) =>
|
|
330
366
|
onChangeSelection( [ getItemId( item ) ] );
|
|
@@ -454,7 +490,7 @@ export default function ViewList< Item >( props: ViewListProps< Item > ) {
|
|
|
454
490
|
return (
|
|
455
491
|
<Composite
|
|
456
492
|
id={ baseId }
|
|
457
|
-
render={ <
|
|
493
|
+
render={ <div /> }
|
|
458
494
|
className="dataviews-view-list"
|
|
459
495
|
role="grid"
|
|
460
496
|
activeId={ activeCompositeId }
|
|
@@ -465,14 +501,16 @@ export default function ViewList< Item >( props: ViewListProps< Item > ) {
|
|
|
465
501
|
return (
|
|
466
502
|
<ListItem
|
|
467
503
|
key={ id }
|
|
504
|
+
view={ view }
|
|
468
505
|
idPrefix={ id }
|
|
469
506
|
actions={ actions }
|
|
470
507
|
item={ item }
|
|
471
508
|
isSelected={ item === selectedItem }
|
|
472
509
|
onSelect={ onSelect }
|
|
473
510
|
mediaField={ mediaField }
|
|
474
|
-
|
|
475
|
-
|
|
511
|
+
titleField={ titleField }
|
|
512
|
+
descriptionField={ descriptionField }
|
|
513
|
+
otherFields={ otherFields }
|
|
476
514
|
onDropdownTriggerKeyDown={ onDropdownTriggerKeyDown }
|
|
477
515
|
/>
|
|
478
516
|
);
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
div.dataviews-view-list {
|
|
2
2
|
list-style-type: none;
|
|
3
3
|
}
|
|
4
4
|
|
|
5
5
|
.dataviews-view-list {
|
|
6
6
|
margin: 0 0 auto;
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
div[role="row"] {
|
|
9
9
|
margin: 0;
|
|
10
10
|
border-top: 1px solid $gray-100;
|
|
11
11
|
|
|
12
12
|
.dataviews-view-list__item-wrapper {
|
|
13
13
|
position: relative;
|
|
14
14
|
padding: $grid-unit-20 $grid-unit-30;
|
|
15
|
+
box-sizing: border-box;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
.dataviews-view-list__item-actions {
|
|
@@ -44,13 +45,13 @@ ul.dataviews-view-list {
|
|
|
44
45
|
&.is-selected.is-selected {
|
|
45
46
|
border-top: 1px solid rgba(var(--wp-admin-theme-color--rgb), 0.12);
|
|
46
47
|
|
|
47
|
-
& +
|
|
48
|
+
& + div[role="row"] {
|
|
48
49
|
border-top: 1px solid rgba(var(--wp-admin-theme-color--rgb), 0.12);
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
&:not(.is-selected) {
|
|
53
|
-
.dataviews-view-
|
|
54
|
+
.dataviews-view-list__title-field {
|
|
54
55
|
color: $gray-900;
|
|
55
56
|
}
|
|
56
57
|
&:hover,
|
|
@@ -59,7 +60,7 @@ ul.dataviews-view-list {
|
|
|
59
60
|
color: var(--wp-admin-theme-color);
|
|
60
61
|
background-color: #f8f8f8;
|
|
61
62
|
|
|
62
|
-
.dataviews-view-
|
|
63
|
+
.dataviews-view-list__title-field,
|
|
63
64
|
.dataviews-view-list__fields {
|
|
64
65
|
color: var(--wp-admin-theme-color);
|
|
65
66
|
}
|
|
@@ -68,13 +69,13 @@ ul.dataviews-view-list {
|
|
|
68
69
|
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
|
|
72
|
+
div[role="row"].is-selected,
|
|
73
|
+
div[role="row"].is-selected:focus-within {
|
|
73
74
|
.dataviews-view-list__item-wrapper {
|
|
74
75
|
background-color: rgba(var(--wp-admin-theme-color--rgb), 0.04);
|
|
75
76
|
color: $gray-900;
|
|
76
77
|
|
|
77
|
-
.dataviews-view-
|
|
78
|
+
.dataviews-view-list__title-field,
|
|
78
79
|
.dataviews-view-list__fields {
|
|
79
80
|
color: var(--wp-admin-theme-color);
|
|
80
81
|
}
|
|
@@ -106,7 +107,7 @@ ul.dataviews-view-list {
|
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
109
|
}
|
|
109
|
-
.dataviews-view-
|
|
110
|
+
.dataviews-view-list__title-field {
|
|
110
111
|
flex: 1;
|
|
111
112
|
min-height: $grid-unit-30;
|
|
112
113
|
line-height: $grid-unit-30;
|