@wordpress/media-utils 5.37.0 → 5.37.1-next.ba3aee3a2.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 +0 -2
- package/LICENSE.md +1 -1
- package/build/components/{index.js → index.cjs} +3 -3
- package/build/components/{index.js.map → index.cjs.map} +1 -1
- package/build/components/media-upload/{index.js → index.cjs} +1 -1
- package/build/components/media-upload-modal/{index.js → index.cjs} +25 -13
- package/build/components/media-upload-modal/index.cjs.map +7 -0
- package/build/{index.js → index.cjs} +9 -9
- package/build/{index.js.map → index.cjs.map} +1 -1
- package/build/{lock-unlock.js → lock-unlock.cjs} +1 -1
- package/build/{private-apis.js → private-apis.cjs} +4 -4
- package/build/utils/{flatten-form-data.js → flatten-form-data.cjs} +1 -1
- package/build/utils/{get-mime-types-array.js → get-mime-types-array.cjs} +1 -1
- package/build/utils/{sideload-media.js → sideload-media.cjs} +3 -3
- package/build/utils/{sideload-to-server.js → sideload-to-server.cjs} +3 -3
- package/build/utils/{transform-attachment.js → transform-attachment.cjs} +1 -1
- package/build/utils/{types.js → types.cjs} +1 -1
- package/build/utils/{upload-error.js → upload-error.cjs} +1 -1
- package/build/utils/{upload-media.js → upload-media.cjs} +6 -6
- package/build/utils/{upload-to-server.js → upload-to-server.cjs} +3 -3
- package/build/utils/{validate-file-size.js → validate-file-size.cjs} +2 -2
- package/build/utils/{validate-mime-type-for-user.js → validate-mime-type-for-user.cjs} +3 -3
- package/build/utils/{validate-mime-type.js → validate-mime-type.cjs} +2 -2
- package/build-module/components/index.mjs +6 -0
- package/build-module/components/{index.js.map → index.mjs.map} +1 -1
- package/build-module/components/media-upload/{index.js → index.mjs} +1 -1
- package/build-module/components/media-upload-modal/{index.js → index.mjs} +28 -13
- package/build-module/components/media-upload-modal/index.mjs.map +7 -0
- package/build-module/index.mjs +17 -0
- package/build-module/{lock-unlock.js → lock-unlock.mjs} +1 -1
- package/build-module/{private-apis.js → private-apis.mjs} +4 -4
- package/build-module/utils/{flatten-form-data.js → flatten-form-data.mjs} +1 -1
- package/build-module/utils/{get-mime-types-array.js → get-mime-types-array.mjs} +1 -1
- package/build-module/utils/{sideload-media.js → sideload-media.mjs} +3 -3
- package/build-module/utils/{sideload-to-server.js → sideload-to-server.mjs} +3 -3
- package/build-module/utils/{transform-attachment.js → transform-attachment.mjs} +1 -1
- package/build-module/utils/types.mjs +1 -0
- package/build-module/utils/{upload-error.js → upload-error.mjs} +1 -1
- package/build-module/utils/{upload-media.js → upload-media.mjs} +6 -6
- package/build-module/utils/{upload-to-server.js → upload-to-server.mjs} +3 -3
- package/build-module/utils/{validate-file-size.js → validate-file-size.mjs} +2 -2
- package/build-module/utils/{validate-mime-type-for-user.js → validate-mime-type-for-user.mjs} +3 -3
- package/build-module/utils/{validate-mime-type.js → validate-mime-type.mjs} +2 -2
- package/build-style/style-rtl.css +64 -0
- package/build-style/style.css +64 -0
- package/build-types/components/index.d.ts +1 -1
- package/build-types/components/index.d.ts.map +1 -1
- package/build-types/components/media-upload-modal/index.d.ts.map +1 -1
- package/package.json +26 -17
- package/src/components/media-upload-modal/index.tsx +25 -10
- package/src/components/media-upload-modal/style.scss +23 -0
- package/src/style.scss +1 -0
- package/build/components/media-upload-modal/index.js.map +0 -7
- package/build-module/components/index.js +0 -6
- package/build-module/components/media-upload-modal/index.js.map +0 -7
- package/build-module/index.js +0 -17
- package/build-module/utils/types.js +0 -1
- package/tsconfig.json +0 -21
- package/tsconfig.tsbuildinfo +0 -1
- /package/build/components/media-upload/{index.js.map → index.cjs.map} +0 -0
- /package/build/{lock-unlock.js.map → lock-unlock.cjs.map} +0 -0
- /package/build/{private-apis.js.map → private-apis.cjs.map} +0 -0
- /package/build/utils/{flatten-form-data.js.map → flatten-form-data.cjs.map} +0 -0
- /package/build/utils/{get-mime-types-array.js.map → get-mime-types-array.cjs.map} +0 -0
- /package/build/utils/{sideload-media.js.map → sideload-media.cjs.map} +0 -0
- /package/build/utils/{sideload-to-server.js.map → sideload-to-server.cjs.map} +0 -0
- /package/build/utils/{transform-attachment.js.map → transform-attachment.cjs.map} +0 -0
- /package/build/utils/{types.js.map → types.cjs.map} +0 -0
- /package/build/utils/{upload-error.js.map → upload-error.cjs.map} +0 -0
- /package/build/utils/{upload-media.js.map → upload-media.cjs.map} +0 -0
- /package/build/utils/{upload-to-server.js.map → upload-to-server.cjs.map} +0 -0
- /package/build/utils/{validate-file-size.js.map → validate-file-size.cjs.map} +0 -0
- /package/build/utils/{validate-mime-type-for-user.js.map → validate-mime-type-for-user.cjs.map} +0 -0
- /package/build/utils/{validate-mime-type.js.map → validate-mime-type.cjs.map} +0 -0
- /package/build-module/components/media-upload/{index.js.map → index.mjs.map} +0 -0
- /package/build-module/{index.js.map → index.mjs.map} +0 -0
- /package/build-module/{lock-unlock.js.map → lock-unlock.mjs.map} +0 -0
- /package/build-module/{private-apis.js.map → private-apis.mjs.map} +0 -0
- /package/build-module/utils/{flatten-form-data.js.map → flatten-form-data.mjs.map} +0 -0
- /package/build-module/utils/{get-mime-types-array.js.map → get-mime-types-array.mjs.map} +0 -0
- /package/build-module/utils/{sideload-media.js.map → sideload-media.mjs.map} +0 -0
- /package/build-module/utils/{sideload-to-server.js.map → sideload-to-server.mjs.map} +0 -0
- /package/build-module/utils/{transform-attachment.js.map → transform-attachment.mjs.map} +0 -0
- /package/build-module/utils/{types.js.map → types.mjs.map} +0 -0
- /package/build-module/utils/{upload-error.js.map → upload-error.mjs.map} +0 -0
- /package/build-module/utils/{upload-media.js.map → upload-media.mjs.map} +0 -0
- /package/build-module/utils/{upload-to-server.js.map → upload-to-server.mjs.map} +0 -0
- /package/build-module/utils/{validate-file-size.js.map → validate-file-size.mjs.map} +0 -0
- /package/build-module/utils/{validate-mime-type-for-user.js.map → validate-mime-type-for-user.mjs.map} +0 -0
- /package/build-module/utils/{validate-mime-type.js.map → validate-mime-type.mjs.map} +0 -0
- /package/src/components/{index.js → index.ts} +0 -0
package/CHANGELOG.md
CHANGED
package/LICENSE.md
CHANGED
|
@@ -27,15 +27,15 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
|
|
30
|
-
// packages/media-utils/src/components/index.
|
|
30
|
+
// packages/media-utils/src/components/index.ts
|
|
31
31
|
var components_exports = {};
|
|
32
32
|
__export(components_exports, {
|
|
33
33
|
MediaUpload: () => import_media_upload.default
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(components_exports);
|
|
36
|
-
var import_media_upload = __toESM(require("./media-upload"));
|
|
36
|
+
var import_media_upload = __toESM(require("./media-upload/index.cjs"));
|
|
37
37
|
// Annotate the CommonJS export names for ESM import in node:
|
|
38
38
|
0 && (module.exports = {
|
|
39
39
|
MediaUpload
|
|
40
40
|
});
|
|
41
|
-
//# sourceMappingURL=index.
|
|
41
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/index.
|
|
3
|
+
"sources": ["../../src/components/index.ts"],
|
|
4
4
|
"sourcesContent": ["export { default as MediaUpload } from './media-upload';\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAuC;",
|
|
6
6
|
"names": []
|
|
@@ -32,9 +32,9 @@ var import_components = require("@wordpress/components");
|
|
|
32
32
|
var import_icons = require("@wordpress/icons");
|
|
33
33
|
var import_dataviews = require("@wordpress/dataviews");
|
|
34
34
|
var import_media_fields = require("@wordpress/media-fields");
|
|
35
|
-
var import_transform_attachment = require("../../utils/transform-attachment");
|
|
36
|
-
var import_upload_media = require("../../utils/upload-media");
|
|
37
|
-
var import_lock_unlock = require("../../lock-unlock");
|
|
35
|
+
var import_transform_attachment = require("../../utils/transform-attachment.cjs");
|
|
36
|
+
var import_upload_media = require("../../utils/upload-media.cjs");
|
|
37
|
+
var import_lock_unlock = require("../../lock-unlock.cjs");
|
|
38
38
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
39
39
|
var { useEntityRecordsWithPermissions } = (0, import_lock_unlock.unlock)(import_core_data.privateApis);
|
|
40
40
|
var LAYOUT_PICKER_GRID = "pickerGrid";
|
|
@@ -79,9 +79,12 @@ function MediaUploadModal({
|
|
|
79
79
|
if (filter.field === "author") {
|
|
80
80
|
filters.author = filter.value;
|
|
81
81
|
}
|
|
82
|
-
if (filter.field === "date") {
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
if (filter.field === "date" || filter.field === "modified") {
|
|
83
|
+
if (filter.operator === "before") {
|
|
84
|
+
filters.before = filter.value;
|
|
85
|
+
} else if (filter.operator === "after") {
|
|
86
|
+
filters.after = filter.value;
|
|
87
|
+
}
|
|
85
88
|
}
|
|
86
89
|
if (filter.field === "mime_type") {
|
|
87
90
|
filters.mime_type = filter.value;
|
|
@@ -97,6 +100,7 @@ function MediaUploadModal({
|
|
|
97
100
|
order: view.sort?.direction,
|
|
98
101
|
orderby: view.sort?.field,
|
|
99
102
|
search: view.search,
|
|
103
|
+
_embed: "wp:attached-to",
|
|
100
104
|
...filters
|
|
101
105
|
};
|
|
102
106
|
}, [view, allowedTypes]);
|
|
@@ -108,6 +112,13 @@ function MediaUploadModal({
|
|
|
108
112
|
} = useEntityRecordsWithPermissions("postType", "attachment", queryArgs);
|
|
109
113
|
const fields = (0, import_element.useMemo)(
|
|
110
114
|
() => [
|
|
115
|
+
// Media field definitions from @wordpress/media-fields
|
|
116
|
+
// Cast is safe because RestAttachment has the same properties as Attachment
|
|
117
|
+
{
|
|
118
|
+
...import_media_fields.mediaThumbnailField,
|
|
119
|
+
enableHiding: false
|
|
120
|
+
// Within the modal, the thumbnail should always be shown.
|
|
121
|
+
},
|
|
111
122
|
{
|
|
112
123
|
id: "title",
|
|
113
124
|
type: "text",
|
|
@@ -117,16 +128,16 @@ function MediaUploadModal({
|
|
|
117
128
|
return titleValue || (0, import_i18n.__)("(no title)");
|
|
118
129
|
}
|
|
119
130
|
},
|
|
120
|
-
// Media field definitions from @wordpress/media-fields
|
|
121
|
-
// Cast is safe because RestAttachment has the same properties as Attachment
|
|
122
|
-
import_media_fields.mediaThumbnailField,
|
|
123
131
|
import_media_fields.altTextField,
|
|
124
132
|
import_media_fields.captionField,
|
|
125
133
|
import_media_fields.descriptionField,
|
|
134
|
+
import_media_fields.dateAddedField,
|
|
135
|
+
import_media_fields.dateModifiedField,
|
|
126
136
|
import_media_fields.filenameField,
|
|
127
137
|
import_media_fields.filesizeField,
|
|
128
138
|
import_media_fields.mediaDimensionsField,
|
|
129
|
-
import_media_fields.mimeTypeField
|
|
139
|
+
import_media_fields.mimeTypeField,
|
|
140
|
+
import_media_fields.attachedToField
|
|
130
141
|
],
|
|
131
142
|
[]
|
|
132
143
|
);
|
|
@@ -152,7 +163,7 @@ function MediaUploadModal({
|
|
|
152
163
|
"attachment",
|
|
153
164
|
selectedPostsQuery
|
|
154
165
|
);
|
|
155
|
-
const transformedPosts = selectedPosts
|
|
166
|
+
const transformedPosts = (selectedPosts ?? []).map(import_transform_attachment.transformAttachment).filter(Boolean);
|
|
156
167
|
const selectedItems = multiple ? transformedPosts : transformedPosts?.[0];
|
|
157
168
|
onSelect(selectedItems);
|
|
158
169
|
}
|
|
@@ -191,7 +202,7 @@ function MediaUploadModal({
|
|
|
191
202
|
showTitle: false
|
|
192
203
|
},
|
|
193
204
|
[LAYOUT_PICKER_TABLE]: {
|
|
194
|
-
fields: ["filename", "filesize", "media_dimensions"],
|
|
205
|
+
fields: ["filename", "filesize", "media_dimensions", "date"],
|
|
195
206
|
showTitle: true
|
|
196
207
|
}
|
|
197
208
|
}),
|
|
@@ -213,6 +224,7 @@ function MediaUploadModal({
|
|
|
213
224
|
onRequestClose: handleModalClose,
|
|
214
225
|
isDismissible,
|
|
215
226
|
className: modalClass,
|
|
227
|
+
overlayClassName: "media-upload-modal",
|
|
216
228
|
size: "fill",
|
|
217
229
|
headerActions: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
218
230
|
import_components.FormFileUpload,
|
|
@@ -285,4 +297,4 @@ var media_upload_modal_default = MediaUploadModal;
|
|
|
285
297
|
0 && (module.exports = {
|
|
286
298
|
MediaUploadModal
|
|
287
299
|
});
|
|
288
|
-
//# sourceMappingURL=index.
|
|
300
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/media-upload-modal/index.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useState, useCallback, useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tprivateApis as coreDataPrivateApis,\n\tstore as coreStore,\n} from '@wordpress/core-data';\nimport { resolveSelect } from '@wordpress/data';\nimport { Modal, DropZone, FormFileUpload, Button } from '@wordpress/components';\nimport { upload as uploadIcon } from '@wordpress/icons';\nimport { DataViewsPicker } from '@wordpress/dataviews';\nimport type { View, Field, ActionButton } from '@wordpress/dataviews';\nimport {\n\taltTextField,\n\tattachedToField,\n\tcaptionField,\n\tdateAddedField,\n\tdateModifiedField,\n\tdescriptionField,\n\tfilenameField,\n\tfilesizeField,\n\tmediaDimensionsField,\n\tmediaThumbnailField,\n\tmimeTypeField,\n} from '@wordpress/media-fields';\n\n/**\n * Internal dependencies\n */\nimport type { Attachment, RestAttachment } from '../../utils/types';\nimport { transformAttachment } from '../../utils/transform-attachment';\nimport { uploadMedia } from '../../utils/upload-media';\nimport { unlock } from '../../lock-unlock';\n\nconst { useEntityRecordsWithPermissions } = unlock( coreDataPrivateApis );\n\n// Layout constants - matching the picker layout types\nconst LAYOUT_PICKER_GRID = 'pickerGrid';\nconst LAYOUT_PICKER_TABLE = 'pickerTable';\n\ninterface MediaUploadModalProps {\n\t/**\n\t * Array of allowed media types.\n\t * @default ['image']\n\t */\n\tallowedTypes?: string[];\n\n\t/**\n\t * Whether multiple files can be selected.\n\t * @default false\n\t */\n\tmultiple?: boolean;\n\n\t/**\n\t * The currently selected media item(s).\n\t * Can be a single ID number or array of IDs for multiple selection.\n\t */\n\tvalue?: number | number[];\n\n\t/**\n\t * Function called when media is selected.\n\t * Receives single attachment object or array of attachments.\n\t */\n\tonSelect: ( media: Attachment | Attachment[] ) => void;\n\n\t/**\n\t * Function called when the modal is closed without selection.\n\t */\n\tonClose?: () => void;\n\n\t/**\n\t * Function to handle media uploads.\n\t * If not provided, drag and drop will be disabled.\n\t */\n\tonUpload?: ( args: {\n\t\tallowedTypes?: string[];\n\t\tfilesList: File[];\n\t\tonFileChange?: ( attachments: Partial< Attachment >[] ) => void;\n\t\tonError?: ( error: Error ) => void;\n\t\tmultiple?: boolean;\n\t} ) => void;\n\n\t/**\n\t * Title for the modal.\n\t * @default 'Select Media'\n\t */\n\ttitle?: string;\n\n\t/**\n\t * Whether the modal is open.\n\t */\n\tisOpen: boolean;\n\n\t/**\n\t * Whether the modal can be closed by clicking outside or pressing escape.\n\t * @default true\n\t */\n\tisDismissible?: boolean;\n\n\t/**\n\t * Additional CSS class for the modal.\n\t */\n\tmodalClass?: string;\n\n\t/**\n\t * Whether to show a search input.\n\t * @default true\n\t */\n\tsearch?: boolean;\n\n\t/**\n\t * Label for the search input.\n\t */\n\tsearchLabel?: string;\n}\n\n/**\n * MediaUploadModal component that uses Modal and DataViewsPicker for media selection.\n *\n * This is a modern functional component alternative to the legacy MediaUpload class component.\n * It provides a cleaner API and better integration with the WordPress block editor.\n *\n * @param props Component props\n * @param props.allowedTypes Array of allowed media types\n * @param props.multiple Whether multiple files can be selected\n * @param props.value Currently selected media item(s)\n * @param props.onSelect Function called when media is selected\n * @param props.onClose Function called when modal is closed\n * @param props.onUpload Function to handle media uploads\n * @param props.title Title for the modal\n * @param props.isOpen Whether the modal is open\n * @param props.isDismissible Whether modal can be dismissed\n * @param props.modalClass Additional CSS class for modal\n * @param props.search Whether to show search input\n * @param props.searchLabel Label for search input\n * @return JSX element or null\n */\nexport function MediaUploadModal( {\n\tallowedTypes = [ 'image' ],\n\tmultiple = false,\n\tvalue,\n\tonSelect,\n\tonClose,\n\tonUpload,\n\ttitle = __( 'Select Media' ),\n\tisOpen,\n\tisDismissible = true,\n\tmodalClass,\n\tsearch = true,\n\tsearchLabel = __( 'Search media' ),\n}: MediaUploadModalProps ) {\n\tconst [ selection, setSelection ] = useState< string[] >( () => {\n\t\tif ( ! value ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn Array.isArray( value )\n\t\t\t? value.map( String )\n\t\t\t: [ String( value ) ];\n\t} );\n\n\t// DataViews configuration - allow view updates\n\tconst [ view, setView ] = useState< View >( () => ( {\n\t\ttype: LAYOUT_PICKER_GRID,\n\t\tfields: [],\n\t\tshowTitle: false,\n\t\ttitleField: 'title',\n\t\tmediaField: 'media_thumbnail',\n\t\tsearch: '',\n\t\tpage: 1,\n\t\tperPage: 20,\n\t\tfilters: [],\n\t} ) );\n\n\t// Build query args based on view properties, similar to PostList\n\tconst queryArgs = useMemo( () => {\n\t\tconst filters: Record< string, any > = {};\n\n\t\tview.filters?.forEach( ( filter ) => {\n\t\t\t// Handle media type filters\n\t\t\tif ( filter.field === 'media_type' ) {\n\t\t\t\tfilters.media_type = filter.value;\n\t\t\t}\n\t\t\t// Handle author filters\n\t\t\tif ( filter.field === 'author' ) {\n\t\t\t\tfilters.author = filter.value;\n\t\t\t}\n\t\t\t// Handle date filters\n\t\t\tif ( filter.field === 'date' || filter.field === 'modified' ) {\n\t\t\t\tif ( filter.operator === 'before' ) {\n\t\t\t\t\tfilters.before = filter.value;\n\t\t\t\t} else if ( filter.operator === 'after' ) {\n\t\t\t\t\tfilters.after = filter.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Handle mime type filters\n\t\t\tif ( filter.field === 'mime_type' ) {\n\t\t\t\tfilters.mime_type = filter.value;\n\t\t\t}\n\t\t} );\n\n\t\t// Base media type on allowedTypes if no filter is set\n\t\tif ( ! filters.media_type ) {\n\t\t\tfilters.media_type = allowedTypes.includes( '*' )\n\t\t\t\t? undefined\n\t\t\t\t: allowedTypes;\n\t\t}\n\n\t\treturn {\n\t\t\tper_page: view.perPage || 20,\n\t\t\tpage: view.page || 1,\n\t\t\tstatus: 'inherit',\n\t\t\torder: view.sort?.direction,\n\t\t\torderby: view.sort?.field,\n\t\t\tsearch: view.search,\n\t\t\t_embed: 'wp:attached-to',\n\t\t\t...filters,\n\t\t};\n\t}, [ view, allowedTypes ] );\n\n\t// Fetch all media attachments using WordPress core data with permissions\n\tconst {\n\t\trecords: mediaRecords,\n\t\tisResolving: isLoading,\n\t\ttotalItems,\n\t\ttotalPages,\n\t} = useEntityRecordsWithPermissions( 'postType', 'attachment', queryArgs );\n\n\tconst fields: Field< RestAttachment >[] = useMemo(\n\t\t() => [\n\t\t\t// Media field definitions from @wordpress/media-fields\n\t\t\t// Cast is safe because RestAttachment has the same properties as Attachment\n\t\t\t{\n\t\t\t\t...( mediaThumbnailField as Field< RestAttachment > ),\n\t\t\t\tenableHiding: false, // Within the modal, the thumbnail should always be shown.\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'title',\n\t\t\t\ttype: 'text' as const,\n\t\t\t\tlabel: __( 'Title' ),\n\t\t\t\tgetValue: ( { item }: { item: RestAttachment } ) => {\n\t\t\t\t\tconst titleValue = item.title.raw || item.title.rendered;\n\t\t\t\t\treturn titleValue || __( '(no title)' );\n\t\t\t\t},\n\t\t\t},\n\t\t\taltTextField as Field< RestAttachment >,\n\t\t\tcaptionField as Field< RestAttachment >,\n\t\t\tdescriptionField as Field< RestAttachment >,\n\t\t\tdateAddedField as Field< RestAttachment >,\n\t\t\tdateModifiedField as Field< RestAttachment >,\n\t\t\tfilenameField as Field< RestAttachment >,\n\t\t\tfilesizeField as Field< RestAttachment >,\n\t\t\tmediaDimensionsField as Field< RestAttachment >,\n\t\t\tmimeTypeField as Field< RestAttachment >,\n\t\t\tattachedToField as Field< RestAttachment >,\n\t\t],\n\t\t[]\n\t);\n\n\tconst actions: ActionButton< RestAttachment >[] = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tid: 'select',\n\t\t\t\tlabel: multiple ? __( 'Select' ) : __( 'Select' ),\n\t\t\t\tisPrimary: true,\n\t\t\t\tsupportsBulk: multiple,\n\t\t\t\tasync callback() {\n\t\t\t\t\tif ( selection.length === 0 ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst selectedPostsQuery = {\n\t\t\t\t\t\tinclude: selection,\n\t\t\t\t\t\tper_page: -1,\n\t\t\t\t\t};\n\n\t\t\t\t\tconst selectedPosts = await resolveSelect(\n\t\t\t\t\t\tcoreStore\n\t\t\t\t\t).getEntityRecords< RestAttachment >(\n\t\t\t\t\t\t'postType',\n\t\t\t\t\t\t'attachment',\n\t\t\t\t\t\tselectedPostsQuery\n\t\t\t\t\t);\n\n\t\t\t\t\t// Transform the selected posts to the expected Attachment format\n\t\t\t\t\tconst transformedPosts = ( selectedPosts ?? [] )\n\t\t\t\t\t\t.map( transformAttachment )\n\t\t\t\t\t\t.filter( Boolean );\n\n\t\t\t\t\tconst selectedItems = multiple\n\t\t\t\t\t\t? transformedPosts\n\t\t\t\t\t\t: transformedPosts?.[ 0 ];\n\n\t\t\t\t\tonSelect( selectedItems );\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\t[ multiple, onSelect, selection ]\n\t);\n\n\tconst handleModalClose = useCallback( () => {\n\t\tonClose?.();\n\t}, [ onClose ] );\n\n\t// Use onUpload if provided, otherwise fall back to uploadMedia\n\tconst handleUpload = onUpload || uploadMedia;\n\n\tconst handleFileSelect = useCallback(\n\t\t( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\t\tconst files = event.target.files;\n\t\t\tif ( files && files.length > 0 ) {\n\t\t\t\tconst filesArray = Array.from( files );\n\t\t\t\thandleUpload( {\n\t\t\t\t\tallowedTypes,\n\t\t\t\t\tfilesList: filesArray,\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[ allowedTypes, handleUpload ]\n\t);\n\n\tconst paginationInfo = useMemo(\n\t\t() => ( {\n\t\t\ttotalItems,\n\t\t\ttotalPages,\n\t\t} ),\n\t\t[ totalItems, totalPages ]\n\t);\n\n\tconst defaultLayouts = useMemo(\n\t\t() => ( {\n\t\t\t[ LAYOUT_PICKER_GRID ]: {\n\t\t\t\tfields: [],\n\t\t\t\tshowTitle: false,\n\t\t\t},\n\t\t\t[ LAYOUT_PICKER_TABLE ]: {\n\t\t\t\tfields: [ 'filename', 'filesize', 'media_dimensions', 'date' ],\n\t\t\t\tshowTitle: true,\n\t\t\t},\n\t\t} ),\n\t\t[]\n\t);\n\n\t// Build accept attribute from allowedTypes\n\tconst acceptTypes = useMemo( () => {\n\t\tif ( allowedTypes.includes( '*' ) ) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn allowedTypes.join( ',' );\n\t}, [ allowedTypes ] );\n\n\tif ( ! isOpen ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ title }\n\t\t\tonRequestClose={ handleModalClose }\n\t\t\tisDismissible={ isDismissible }\n\t\t\tclassName={ modalClass }\n\t\t\toverlayClassName=\"media-upload-modal\"\n\t\t\tsize=\"fill\"\n\t\t\theaderActions={\n\t\t\t\t<FormFileUpload\n\t\t\t\t\taccept={ acceptTypes }\n\t\t\t\t\tmultiple\n\t\t\t\t\tonChange={ handleFileSelect }\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\trender={ ( { openFileDialog } ) => (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tonClick={ openFileDialog }\n\t\t\t\t\t\t\ticon={ uploadIcon }\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Upload media' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t}\n\t\t>\n\t\t\t<DropZone\n\t\t\t\tonFilesDrop={ ( files ) => {\n\t\t\t\t\tlet filteredFiles = files;\n\t\t\t\t\t// Filter files by allowed types if specified\n\t\t\t\t\tif ( allowedTypes && ! allowedTypes.includes( '*' ) ) {\n\t\t\t\t\t\tfilteredFiles = files.filter( ( file ) =>\n\t\t\t\t\t\t\tallowedTypes.some( ( allowedType ) => {\n\t\t\t\t\t\t\t\t// Check if the file type matches the allowed MIME type\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tfile.type === allowedType ||\n\t\t\t\t\t\t\t\t\tfile.type.startsWith(\n\t\t\t\t\t\t\t\t\t\tallowedType.replace( '*', '' )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif ( filteredFiles.length > 0 ) {\n\t\t\t\t\t\thandleUpload( {\n\t\t\t\t\t\t\tallowedTypes,\n\t\t\t\t\t\t\tfilesList: filteredFiles,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tlabel={ __( 'Drop files to upload' ) }\n\t\t\t/>\n\t\t\t<DataViewsPicker\n\t\t\t\tdata={ mediaRecords || [] }\n\t\t\t\tfields={ fields }\n\t\t\t\tview={ view }\n\t\t\t\tonChangeView={ setView }\n\t\t\t\tactions={ actions }\n\t\t\t\tselection={ selection }\n\t\t\t\tonChangeSelection={ setSelection }\n\t\t\t\tisLoading={ isLoading }\n\t\t\t\tpaginationInfo={ paginationInfo }\n\t\t\t\tdefaultLayouts={ defaultLayouts }\n\t\t\t\tgetItemId={ ( item: RestAttachment ) => String( item.id ) }\n\t\t\t\tsearch={ search }\n\t\t\t\tsearchLabel={ searchLabel }\n\t\t\t\titemListLabel={ __( 'Media items' ) }\n\t\t\t/>\n\t\t</Modal>\n\t);\n}\n\nexport default MediaUploadModal;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["coreDataPrivateApis", "coreStore", "uploadIcon"]
|
|
7
|
+
}
|
|
@@ -29,13 +29,13 @@ __export(index_exports, {
|
|
|
29
29
|
validateMimeTypeForUser: () => import_validate_mime_type_for_user.validateMimeTypeForUser
|
|
30
30
|
});
|
|
31
31
|
module.exports = __toCommonJS(index_exports);
|
|
32
|
-
__reExport(index_exports, require("./components"), module.exports);
|
|
33
|
-
var import_upload_media = require("./utils/upload-media");
|
|
34
|
-
var import_transform_attachment = require("./utils/transform-attachment");
|
|
35
|
-
var import_validate_file_size = require("./utils/validate-file-size");
|
|
36
|
-
var import_validate_mime_type = require("./utils/validate-mime-type");
|
|
37
|
-
var import_validate_mime_type_for_user = require("./utils/validate-mime-type-for-user");
|
|
38
|
-
var import_private_apis = require("./private-apis");
|
|
32
|
+
__reExport(index_exports, require("./components/index.cjs"), module.exports);
|
|
33
|
+
var import_upload_media = require("./utils/upload-media.cjs");
|
|
34
|
+
var import_transform_attachment = require("./utils/transform-attachment.cjs");
|
|
35
|
+
var import_validate_file_size = require("./utils/validate-file-size.cjs");
|
|
36
|
+
var import_validate_mime_type = require("./utils/validate-mime-type.cjs");
|
|
37
|
+
var import_validate_mime_type_for_user = require("./utils/validate-mime-type-for-user.cjs");
|
|
38
|
+
var import_private_apis = require("./private-apis.cjs");
|
|
39
39
|
// Annotate the CommonJS export names for ESM import in node:
|
|
40
40
|
0 && (module.exports = {
|
|
41
41
|
privateApis,
|
|
@@ -44,6 +44,6 @@ var import_private_apis = require("./private-apis");
|
|
|
44
44
|
validateFileSize,
|
|
45
45
|
validateMimeType,
|
|
46
46
|
validateMimeTypeForUser,
|
|
47
|
-
...require("./components")
|
|
47
|
+
...require("./components/index.cjs")
|
|
48
48
|
});
|
|
49
|
-
//# sourceMappingURL=index.
|
|
49
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
4
|
"sourcesContent": ["export * from './components';\n\nexport { uploadMedia } from './utils/upload-media';\nexport { transformAttachment } from './utils/transform-attachment';\nexport { validateFileSize } from './utils/validate-file-size';\nexport { validateMimeType } from './utils/validate-mime-type';\nexport { validateMimeTypeForUser } from './utils/validate-mime-type-for-user';\n\nexport type { Attachment, RestAttachment } from './utils/types';\n\nexport { privateApis } from './private-apis';\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAc,
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAc,mCAAd;AAEA,0BAA4B;AAC5B,kCAAoC;AACpC,gCAAiC;AACjC,gCAAiC;AACjC,yCAAwC;AAIxC,0BAA4B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -23,9 +23,9 @@ __export(private_apis_exports, {
|
|
|
23
23
|
privateApis: () => privateApis
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(private_apis_exports);
|
|
26
|
-
var import_sideload_media = require("./utils/sideload-media");
|
|
27
|
-
var import_media_upload_modal = require("./components/media-upload-modal");
|
|
28
|
-
var import_lock_unlock = require("./lock-unlock");
|
|
26
|
+
var import_sideload_media = require("./utils/sideload-media.cjs");
|
|
27
|
+
var import_media_upload_modal = require("./components/media-upload-modal/index.cjs");
|
|
28
|
+
var import_lock_unlock = require("./lock-unlock.cjs");
|
|
29
29
|
var privateApis = {};
|
|
30
30
|
(0, import_lock_unlock.lock)(privateApis, {
|
|
31
31
|
sideloadMedia: import_sideload_media.sideloadMedia,
|
|
@@ -35,4 +35,4 @@ var privateApis = {};
|
|
|
35
35
|
0 && (module.exports = {
|
|
36
36
|
privateApis
|
|
37
37
|
});
|
|
38
|
-
//# sourceMappingURL=private-apis.
|
|
38
|
+
//# sourceMappingURL=private-apis.cjs.map
|
|
@@ -24,8 +24,8 @@ __export(sideload_media_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(sideload_media_exports);
|
|
26
26
|
var import_i18n = require("@wordpress/i18n");
|
|
27
|
-
var import_sideload_to_server = require("./sideload-to-server");
|
|
28
|
-
var import_upload_error = require("./upload-error");
|
|
27
|
+
var import_sideload_to_server = require("./sideload-to-server.cjs");
|
|
28
|
+
var import_upload_error = require("./upload-error.cjs");
|
|
29
29
|
var noop = () => {
|
|
30
30
|
};
|
|
31
31
|
async function sideloadMedia({
|
|
@@ -69,4 +69,4 @@ async function sideloadMedia({
|
|
|
69
69
|
0 && (module.exports = {
|
|
70
70
|
sideloadMedia
|
|
71
71
|
});
|
|
72
|
-
//# sourceMappingURL=sideload-media.
|
|
72
|
+
//# sourceMappingURL=sideload-media.cjs.map
|
|
@@ -34,8 +34,8 @@ __export(sideload_to_server_exports, {
|
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(sideload_to_server_exports);
|
|
36
36
|
var import_api_fetch = __toESM(require("@wordpress/api-fetch"));
|
|
37
|
-
var import_flatten_form_data = require("./flatten-form-data");
|
|
38
|
-
var import_transform_attachment = require("./transform-attachment");
|
|
37
|
+
var import_flatten_form_data = require("./flatten-form-data.cjs");
|
|
38
|
+
var import_transform_attachment = require("./transform-attachment.cjs");
|
|
39
39
|
async function sideloadToServer(file, attachmentId, additionalData = {}, signal) {
|
|
40
40
|
const data = new FormData();
|
|
41
41
|
data.append("file", file, file.name || file.type.replace("/", "."));
|
|
@@ -59,4 +59,4 @@ async function sideloadToServer(file, attachmentId, additionalData = {}, signal)
|
|
|
59
59
|
0 && (module.exports = {
|
|
60
60
|
sideloadToServer
|
|
61
61
|
});
|
|
62
|
-
//# sourceMappingURL=sideload-to-server.
|
|
62
|
+
//# sourceMappingURL=sideload-to-server.cjs.map
|
|
@@ -16,4 +16,4 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
16
16
|
// packages/media-utils/src/utils/types.ts
|
|
17
17
|
var types_exports = {};
|
|
18
18
|
module.exports = __toCommonJS(types_exports);
|
|
19
|
-
//# sourceMappingURL=types.
|
|
19
|
+
//# sourceMappingURL=types.cjs.map
|
|
@@ -25,11 +25,11 @@ __export(upload_media_exports, {
|
|
|
25
25
|
module.exports = __toCommonJS(upload_media_exports);
|
|
26
26
|
var import_i18n = require("@wordpress/i18n");
|
|
27
27
|
var import_blob = require("@wordpress/blob");
|
|
28
|
-
var import_upload_to_server = require("./upload-to-server");
|
|
29
|
-
var import_validate_mime_type = require("./validate-mime-type");
|
|
30
|
-
var import_validate_mime_type_for_user = require("./validate-mime-type-for-user");
|
|
31
|
-
var import_validate_file_size = require("./validate-file-size");
|
|
32
|
-
var import_upload_error = require("./upload-error");
|
|
28
|
+
var import_upload_to_server = require("./upload-to-server.cjs");
|
|
29
|
+
var import_validate_mime_type = require("./validate-mime-type.cjs");
|
|
30
|
+
var import_validate_mime_type_for_user = require("./validate-mime-type-for-user.cjs");
|
|
31
|
+
var import_validate_file_size = require("./validate-file-size.cjs");
|
|
32
|
+
var import_upload_error = require("./upload-error.cjs");
|
|
33
33
|
function uploadMedia({
|
|
34
34
|
wpAllowedMimeTypes,
|
|
35
35
|
allowedTypes,
|
|
@@ -118,4 +118,4 @@ function uploadMedia({
|
|
|
118
118
|
0 && (module.exports = {
|
|
119
119
|
uploadMedia
|
|
120
120
|
});
|
|
121
|
-
//# sourceMappingURL=upload-media.
|
|
121
|
+
//# sourceMappingURL=upload-media.cjs.map
|
|
@@ -34,8 +34,8 @@ __export(upload_to_server_exports, {
|
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(upload_to_server_exports);
|
|
36
36
|
var import_api_fetch = __toESM(require("@wordpress/api-fetch"));
|
|
37
|
-
var import_flatten_form_data = require("./flatten-form-data");
|
|
38
|
-
var import_transform_attachment = require("./transform-attachment");
|
|
37
|
+
var import_flatten_form_data = require("./flatten-form-data.cjs");
|
|
38
|
+
var import_transform_attachment = require("./transform-attachment.cjs");
|
|
39
39
|
async function uploadToServer(file, additionalData = {}, signal) {
|
|
40
40
|
const data = new FormData();
|
|
41
41
|
data.append("file", file, file.name || file.type.replace("/", "."));
|
|
@@ -60,4 +60,4 @@ async function uploadToServer(file, additionalData = {}, signal) {
|
|
|
60
60
|
0 && (module.exports = {
|
|
61
61
|
uploadToServer
|
|
62
62
|
});
|
|
63
|
-
//# sourceMappingURL=upload-to-server.
|
|
63
|
+
//# sourceMappingURL=upload-to-server.cjs.map
|
|
@@ -24,7 +24,7 @@ __export(validate_file_size_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(validate_file_size_exports);
|
|
26
26
|
var import_i18n = require("@wordpress/i18n");
|
|
27
|
-
var import_upload_error = require("./upload-error");
|
|
27
|
+
var import_upload_error = require("./upload-error.cjs");
|
|
28
28
|
function validateFileSize(file, maxUploadFileSize) {
|
|
29
29
|
if (file.size <= 0) {
|
|
30
30
|
throw new import_upload_error.UploadError({
|
|
@@ -55,4 +55,4 @@ function validateFileSize(file, maxUploadFileSize) {
|
|
|
55
55
|
0 && (module.exports = {
|
|
56
56
|
validateFileSize
|
|
57
57
|
});
|
|
58
|
-
//# sourceMappingURL=validate-file-size.
|
|
58
|
+
//# sourceMappingURL=validate-file-size.cjs.map
|
|
@@ -24,8 +24,8 @@ __export(validate_mime_type_for_user_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(validate_mime_type_for_user_exports);
|
|
26
26
|
var import_i18n = require("@wordpress/i18n");
|
|
27
|
-
var import_upload_error = require("./upload-error");
|
|
28
|
-
var import_get_mime_types_array = require("./get-mime-types-array");
|
|
27
|
+
var import_upload_error = require("./upload-error.cjs");
|
|
28
|
+
var import_get_mime_types_array = require("./get-mime-types-array.cjs");
|
|
29
29
|
function validateMimeTypeForUser(file, wpAllowedMimeTypes) {
|
|
30
30
|
const allowedMimeTypesForUser = (0, import_get_mime_types_array.getMimeTypesArray)(wpAllowedMimeTypes);
|
|
31
31
|
if (!allowedMimeTypesForUser) {
|
|
@@ -52,4 +52,4 @@ function validateMimeTypeForUser(file, wpAllowedMimeTypes) {
|
|
|
52
52
|
0 && (module.exports = {
|
|
53
53
|
validateMimeTypeForUser
|
|
54
54
|
});
|
|
55
|
-
//# sourceMappingURL=validate-mime-type-for-user.
|
|
55
|
+
//# sourceMappingURL=validate-mime-type-for-user.cjs.map
|
|
@@ -24,7 +24,7 @@ __export(validate_mime_type_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(validate_mime_type_exports);
|
|
26
26
|
var import_i18n = require("@wordpress/i18n");
|
|
27
|
-
var import_upload_error = require("./upload-error");
|
|
27
|
+
var import_upload_error = require("./upload-error.cjs");
|
|
28
28
|
function validateMimeType(file, allowedTypes) {
|
|
29
29
|
if (!allowedTypes) {
|
|
30
30
|
return;
|
|
@@ -51,4 +51,4 @@ function validateMimeType(file, allowedTypes) {
|
|
|
51
51
|
0 && (module.exports = {
|
|
52
52
|
validateMimeType
|
|
53
53
|
});
|
|
54
|
-
//# sourceMappingURL=validate-mime-type.
|
|
54
|
+
//# sourceMappingURL=validate-mime-type.cjs.map
|
|
@@ -11,7 +11,10 @@ import { upload as uploadIcon } from "@wordpress/icons";
|
|
|
11
11
|
import { DataViewsPicker } from "@wordpress/dataviews";
|
|
12
12
|
import {
|
|
13
13
|
altTextField,
|
|
14
|
+
attachedToField,
|
|
14
15
|
captionField,
|
|
16
|
+
dateAddedField,
|
|
17
|
+
dateModifiedField,
|
|
15
18
|
descriptionField,
|
|
16
19
|
filenameField,
|
|
17
20
|
filesizeField,
|
|
@@ -19,9 +22,9 @@ import {
|
|
|
19
22
|
mediaThumbnailField,
|
|
20
23
|
mimeTypeField
|
|
21
24
|
} from "@wordpress/media-fields";
|
|
22
|
-
import { transformAttachment } from "../../utils/transform-attachment";
|
|
23
|
-
import { uploadMedia } from "../../utils/upload-media";
|
|
24
|
-
import { unlock } from "../../lock-unlock";
|
|
25
|
+
import { transformAttachment } from "../../utils/transform-attachment.mjs";
|
|
26
|
+
import { uploadMedia } from "../../utils/upload-media.mjs";
|
|
27
|
+
import { unlock } from "../../lock-unlock.mjs";
|
|
25
28
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
26
29
|
var { useEntityRecordsWithPermissions } = unlock(coreDataPrivateApis);
|
|
27
30
|
var LAYOUT_PICKER_GRID = "pickerGrid";
|
|
@@ -66,9 +69,12 @@ function MediaUploadModal({
|
|
|
66
69
|
if (filter.field === "author") {
|
|
67
70
|
filters.author = filter.value;
|
|
68
71
|
}
|
|
69
|
-
if (filter.field === "date") {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
if (filter.field === "date" || filter.field === "modified") {
|
|
73
|
+
if (filter.operator === "before") {
|
|
74
|
+
filters.before = filter.value;
|
|
75
|
+
} else if (filter.operator === "after") {
|
|
76
|
+
filters.after = filter.value;
|
|
77
|
+
}
|
|
72
78
|
}
|
|
73
79
|
if (filter.field === "mime_type") {
|
|
74
80
|
filters.mime_type = filter.value;
|
|
@@ -84,6 +90,7 @@ function MediaUploadModal({
|
|
|
84
90
|
order: view.sort?.direction,
|
|
85
91
|
orderby: view.sort?.field,
|
|
86
92
|
search: view.search,
|
|
93
|
+
_embed: "wp:attached-to",
|
|
87
94
|
...filters
|
|
88
95
|
};
|
|
89
96
|
}, [view, allowedTypes]);
|
|
@@ -95,6 +102,13 @@ function MediaUploadModal({
|
|
|
95
102
|
} = useEntityRecordsWithPermissions("postType", "attachment", queryArgs);
|
|
96
103
|
const fields = useMemo(
|
|
97
104
|
() => [
|
|
105
|
+
// Media field definitions from @wordpress/media-fields
|
|
106
|
+
// Cast is safe because RestAttachment has the same properties as Attachment
|
|
107
|
+
{
|
|
108
|
+
...mediaThumbnailField,
|
|
109
|
+
enableHiding: false
|
|
110
|
+
// Within the modal, the thumbnail should always be shown.
|
|
111
|
+
},
|
|
98
112
|
{
|
|
99
113
|
id: "title",
|
|
100
114
|
type: "text",
|
|
@@ -104,16 +118,16 @@ function MediaUploadModal({
|
|
|
104
118
|
return titleValue || __("(no title)");
|
|
105
119
|
}
|
|
106
120
|
},
|
|
107
|
-
// Media field definitions from @wordpress/media-fields
|
|
108
|
-
// Cast is safe because RestAttachment has the same properties as Attachment
|
|
109
|
-
mediaThumbnailField,
|
|
110
121
|
altTextField,
|
|
111
122
|
captionField,
|
|
112
123
|
descriptionField,
|
|
124
|
+
dateAddedField,
|
|
125
|
+
dateModifiedField,
|
|
113
126
|
filenameField,
|
|
114
127
|
filesizeField,
|
|
115
128
|
mediaDimensionsField,
|
|
116
|
-
mimeTypeField
|
|
129
|
+
mimeTypeField,
|
|
130
|
+
attachedToField
|
|
117
131
|
],
|
|
118
132
|
[]
|
|
119
133
|
);
|
|
@@ -139,7 +153,7 @@ function MediaUploadModal({
|
|
|
139
153
|
"attachment",
|
|
140
154
|
selectedPostsQuery
|
|
141
155
|
);
|
|
142
|
-
const transformedPosts = selectedPosts
|
|
156
|
+
const transformedPosts = (selectedPosts ?? []).map(transformAttachment).filter(Boolean);
|
|
143
157
|
const selectedItems = multiple ? transformedPosts : transformedPosts?.[0];
|
|
144
158
|
onSelect(selectedItems);
|
|
145
159
|
}
|
|
@@ -178,7 +192,7 @@ function MediaUploadModal({
|
|
|
178
192
|
showTitle: false
|
|
179
193
|
},
|
|
180
194
|
[LAYOUT_PICKER_TABLE]: {
|
|
181
|
-
fields: ["filename", "filesize", "media_dimensions"],
|
|
195
|
+
fields: ["filename", "filesize", "media_dimensions", "date"],
|
|
182
196
|
showTitle: true
|
|
183
197
|
}
|
|
184
198
|
}),
|
|
@@ -200,6 +214,7 @@ function MediaUploadModal({
|
|
|
200
214
|
onRequestClose: handleModalClose,
|
|
201
215
|
isDismissible,
|
|
202
216
|
className: modalClass,
|
|
217
|
+
overlayClassName: "media-upload-modal",
|
|
203
218
|
size: "fill",
|
|
204
219
|
headerActions: /* @__PURE__ */ jsx(
|
|
205
220
|
FormFileUpload,
|
|
@@ -272,4 +287,4 @@ export {
|
|
|
272
287
|
MediaUploadModal,
|
|
273
288
|
media_upload_modal_default as default
|
|
274
289
|
};
|
|
275
|
-
//# sourceMappingURL=index.
|
|
290
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/media-upload-modal/index.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useState, useCallback, useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tprivateApis as coreDataPrivateApis,\n\tstore as coreStore,\n} from '@wordpress/core-data';\nimport { resolveSelect } from '@wordpress/data';\nimport { Modal, DropZone, FormFileUpload, Button } from '@wordpress/components';\nimport { upload as uploadIcon } from '@wordpress/icons';\nimport { DataViewsPicker } from '@wordpress/dataviews';\nimport type { View, Field, ActionButton } from '@wordpress/dataviews';\nimport {\n\taltTextField,\n\tattachedToField,\n\tcaptionField,\n\tdateAddedField,\n\tdateModifiedField,\n\tdescriptionField,\n\tfilenameField,\n\tfilesizeField,\n\tmediaDimensionsField,\n\tmediaThumbnailField,\n\tmimeTypeField,\n} from '@wordpress/media-fields';\n\n/**\n * Internal dependencies\n */\nimport type { Attachment, RestAttachment } from '../../utils/types';\nimport { transformAttachment } from '../../utils/transform-attachment';\nimport { uploadMedia } from '../../utils/upload-media';\nimport { unlock } from '../../lock-unlock';\n\nconst { useEntityRecordsWithPermissions } = unlock( coreDataPrivateApis );\n\n// Layout constants - matching the picker layout types\nconst LAYOUT_PICKER_GRID = 'pickerGrid';\nconst LAYOUT_PICKER_TABLE = 'pickerTable';\n\ninterface MediaUploadModalProps {\n\t/**\n\t * Array of allowed media types.\n\t * @default ['image']\n\t */\n\tallowedTypes?: string[];\n\n\t/**\n\t * Whether multiple files can be selected.\n\t * @default false\n\t */\n\tmultiple?: boolean;\n\n\t/**\n\t * The currently selected media item(s).\n\t * Can be a single ID number or array of IDs for multiple selection.\n\t */\n\tvalue?: number | number[];\n\n\t/**\n\t * Function called when media is selected.\n\t * Receives single attachment object or array of attachments.\n\t */\n\tonSelect: ( media: Attachment | Attachment[] ) => void;\n\n\t/**\n\t * Function called when the modal is closed without selection.\n\t */\n\tonClose?: () => void;\n\n\t/**\n\t * Function to handle media uploads.\n\t * If not provided, drag and drop will be disabled.\n\t */\n\tonUpload?: ( args: {\n\t\tallowedTypes?: string[];\n\t\tfilesList: File[];\n\t\tonFileChange?: ( attachments: Partial< Attachment >[] ) => void;\n\t\tonError?: ( error: Error ) => void;\n\t\tmultiple?: boolean;\n\t} ) => void;\n\n\t/**\n\t * Title for the modal.\n\t * @default 'Select Media'\n\t */\n\ttitle?: string;\n\n\t/**\n\t * Whether the modal is open.\n\t */\n\tisOpen: boolean;\n\n\t/**\n\t * Whether the modal can be closed by clicking outside or pressing escape.\n\t * @default true\n\t */\n\tisDismissible?: boolean;\n\n\t/**\n\t * Additional CSS class for the modal.\n\t */\n\tmodalClass?: string;\n\n\t/**\n\t * Whether to show a search input.\n\t * @default true\n\t */\n\tsearch?: boolean;\n\n\t/**\n\t * Label for the search input.\n\t */\n\tsearchLabel?: string;\n}\n\n/**\n * MediaUploadModal component that uses Modal and DataViewsPicker for media selection.\n *\n * This is a modern functional component alternative to the legacy MediaUpload class component.\n * It provides a cleaner API and better integration with the WordPress block editor.\n *\n * @param props Component props\n * @param props.allowedTypes Array of allowed media types\n * @param props.multiple Whether multiple files can be selected\n * @param props.value Currently selected media item(s)\n * @param props.onSelect Function called when media is selected\n * @param props.onClose Function called when modal is closed\n * @param props.onUpload Function to handle media uploads\n * @param props.title Title for the modal\n * @param props.isOpen Whether the modal is open\n * @param props.isDismissible Whether modal can be dismissed\n * @param props.modalClass Additional CSS class for modal\n * @param props.search Whether to show search input\n * @param props.searchLabel Label for search input\n * @return JSX element or null\n */\nexport function MediaUploadModal( {\n\tallowedTypes = [ 'image' ],\n\tmultiple = false,\n\tvalue,\n\tonSelect,\n\tonClose,\n\tonUpload,\n\ttitle = __( 'Select Media' ),\n\tisOpen,\n\tisDismissible = true,\n\tmodalClass,\n\tsearch = true,\n\tsearchLabel = __( 'Search media' ),\n}: MediaUploadModalProps ) {\n\tconst [ selection, setSelection ] = useState< string[] >( () => {\n\t\tif ( ! value ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn Array.isArray( value )\n\t\t\t? value.map( String )\n\t\t\t: [ String( value ) ];\n\t} );\n\n\t// DataViews configuration - allow view updates\n\tconst [ view, setView ] = useState< View >( () => ( {\n\t\ttype: LAYOUT_PICKER_GRID,\n\t\tfields: [],\n\t\tshowTitle: false,\n\t\ttitleField: 'title',\n\t\tmediaField: 'media_thumbnail',\n\t\tsearch: '',\n\t\tpage: 1,\n\t\tperPage: 20,\n\t\tfilters: [],\n\t} ) );\n\n\t// Build query args based on view properties, similar to PostList\n\tconst queryArgs = useMemo( () => {\n\t\tconst filters: Record< string, any > = {};\n\n\t\tview.filters?.forEach( ( filter ) => {\n\t\t\t// Handle media type filters\n\t\t\tif ( filter.field === 'media_type' ) {\n\t\t\t\tfilters.media_type = filter.value;\n\t\t\t}\n\t\t\t// Handle author filters\n\t\t\tif ( filter.field === 'author' ) {\n\t\t\t\tfilters.author = filter.value;\n\t\t\t}\n\t\t\t// Handle date filters\n\t\t\tif ( filter.field === 'date' || filter.field === 'modified' ) {\n\t\t\t\tif ( filter.operator === 'before' ) {\n\t\t\t\t\tfilters.before = filter.value;\n\t\t\t\t} else if ( filter.operator === 'after' ) {\n\t\t\t\t\tfilters.after = filter.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Handle mime type filters\n\t\t\tif ( filter.field === 'mime_type' ) {\n\t\t\t\tfilters.mime_type = filter.value;\n\t\t\t}\n\t\t} );\n\n\t\t// Base media type on allowedTypes if no filter is set\n\t\tif ( ! filters.media_type ) {\n\t\t\tfilters.media_type = allowedTypes.includes( '*' )\n\t\t\t\t? undefined\n\t\t\t\t: allowedTypes;\n\t\t}\n\n\t\treturn {\n\t\t\tper_page: view.perPage || 20,\n\t\t\tpage: view.page || 1,\n\t\t\tstatus: 'inherit',\n\t\t\torder: view.sort?.direction,\n\t\t\torderby: view.sort?.field,\n\t\t\tsearch: view.search,\n\t\t\t_embed: 'wp:attached-to',\n\t\t\t...filters,\n\t\t};\n\t}, [ view, allowedTypes ] );\n\n\t// Fetch all media attachments using WordPress core data with permissions\n\tconst {\n\t\trecords: mediaRecords,\n\t\tisResolving: isLoading,\n\t\ttotalItems,\n\t\ttotalPages,\n\t} = useEntityRecordsWithPermissions( 'postType', 'attachment', queryArgs );\n\n\tconst fields: Field< RestAttachment >[] = useMemo(\n\t\t() => [\n\t\t\t// Media field definitions from @wordpress/media-fields\n\t\t\t// Cast is safe because RestAttachment has the same properties as Attachment\n\t\t\t{\n\t\t\t\t...( mediaThumbnailField as Field< RestAttachment > ),\n\t\t\t\tenableHiding: false, // Within the modal, the thumbnail should always be shown.\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'title',\n\t\t\t\ttype: 'text' as const,\n\t\t\t\tlabel: __( 'Title' ),\n\t\t\t\tgetValue: ( { item }: { item: RestAttachment } ) => {\n\t\t\t\t\tconst titleValue = item.title.raw || item.title.rendered;\n\t\t\t\t\treturn titleValue || __( '(no title)' );\n\t\t\t\t},\n\t\t\t},\n\t\t\taltTextField as Field< RestAttachment >,\n\t\t\tcaptionField as Field< RestAttachment >,\n\t\t\tdescriptionField as Field< RestAttachment >,\n\t\t\tdateAddedField as Field< RestAttachment >,\n\t\t\tdateModifiedField as Field< RestAttachment >,\n\t\t\tfilenameField as Field< RestAttachment >,\n\t\t\tfilesizeField as Field< RestAttachment >,\n\t\t\tmediaDimensionsField as Field< RestAttachment >,\n\t\t\tmimeTypeField as Field< RestAttachment >,\n\t\t\tattachedToField as Field< RestAttachment >,\n\t\t],\n\t\t[]\n\t);\n\n\tconst actions: ActionButton< RestAttachment >[] = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tid: 'select',\n\t\t\t\tlabel: multiple ? __( 'Select' ) : __( 'Select' ),\n\t\t\t\tisPrimary: true,\n\t\t\t\tsupportsBulk: multiple,\n\t\t\t\tasync callback() {\n\t\t\t\t\tif ( selection.length === 0 ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst selectedPostsQuery = {\n\t\t\t\t\t\tinclude: selection,\n\t\t\t\t\t\tper_page: -1,\n\t\t\t\t\t};\n\n\t\t\t\t\tconst selectedPosts = await resolveSelect(\n\t\t\t\t\t\tcoreStore\n\t\t\t\t\t).getEntityRecords< RestAttachment >(\n\t\t\t\t\t\t'postType',\n\t\t\t\t\t\t'attachment',\n\t\t\t\t\t\tselectedPostsQuery\n\t\t\t\t\t);\n\n\t\t\t\t\t// Transform the selected posts to the expected Attachment format\n\t\t\t\t\tconst transformedPosts = ( selectedPosts ?? [] )\n\t\t\t\t\t\t.map( transformAttachment )\n\t\t\t\t\t\t.filter( Boolean );\n\n\t\t\t\t\tconst selectedItems = multiple\n\t\t\t\t\t\t? transformedPosts\n\t\t\t\t\t\t: transformedPosts?.[ 0 ];\n\n\t\t\t\t\tonSelect( selectedItems );\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\t[ multiple, onSelect, selection ]\n\t);\n\n\tconst handleModalClose = useCallback( () => {\n\t\tonClose?.();\n\t}, [ onClose ] );\n\n\t// Use onUpload if provided, otherwise fall back to uploadMedia\n\tconst handleUpload = onUpload || uploadMedia;\n\n\tconst handleFileSelect = useCallback(\n\t\t( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\t\tconst files = event.target.files;\n\t\t\tif ( files && files.length > 0 ) {\n\t\t\t\tconst filesArray = Array.from( files );\n\t\t\t\thandleUpload( {\n\t\t\t\t\tallowedTypes,\n\t\t\t\t\tfilesList: filesArray,\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\t[ allowedTypes, handleUpload ]\n\t);\n\n\tconst paginationInfo = useMemo(\n\t\t() => ( {\n\t\t\ttotalItems,\n\t\t\ttotalPages,\n\t\t} ),\n\t\t[ totalItems, totalPages ]\n\t);\n\n\tconst defaultLayouts = useMemo(\n\t\t() => ( {\n\t\t\t[ LAYOUT_PICKER_GRID ]: {\n\t\t\t\tfields: [],\n\t\t\t\tshowTitle: false,\n\t\t\t},\n\t\t\t[ LAYOUT_PICKER_TABLE ]: {\n\t\t\t\tfields: [ 'filename', 'filesize', 'media_dimensions', 'date' ],\n\t\t\t\tshowTitle: true,\n\t\t\t},\n\t\t} ),\n\t\t[]\n\t);\n\n\t// Build accept attribute from allowedTypes\n\tconst acceptTypes = useMemo( () => {\n\t\tif ( allowedTypes.includes( '*' ) ) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn allowedTypes.join( ',' );\n\t}, [ allowedTypes ] );\n\n\tif ( ! isOpen ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ title }\n\t\t\tonRequestClose={ handleModalClose }\n\t\t\tisDismissible={ isDismissible }\n\t\t\tclassName={ modalClass }\n\t\t\toverlayClassName=\"media-upload-modal\"\n\t\t\tsize=\"fill\"\n\t\t\theaderActions={\n\t\t\t\t<FormFileUpload\n\t\t\t\t\taccept={ acceptTypes }\n\t\t\t\t\tmultiple\n\t\t\t\t\tonChange={ handleFileSelect }\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\trender={ ( { openFileDialog } ) => (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tonClick={ openFileDialog }\n\t\t\t\t\t\t\ticon={ uploadIcon }\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Upload media' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t}\n\t\t>\n\t\t\t<DropZone\n\t\t\t\tonFilesDrop={ ( files ) => {\n\t\t\t\t\tlet filteredFiles = files;\n\t\t\t\t\t// Filter files by allowed types if specified\n\t\t\t\t\tif ( allowedTypes && ! allowedTypes.includes( '*' ) ) {\n\t\t\t\t\t\tfilteredFiles = files.filter( ( file ) =>\n\t\t\t\t\t\t\tallowedTypes.some( ( allowedType ) => {\n\t\t\t\t\t\t\t\t// Check if the file type matches the allowed MIME type\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tfile.type === allowedType ||\n\t\t\t\t\t\t\t\t\tfile.type.startsWith(\n\t\t\t\t\t\t\t\t\t\tallowedType.replace( '*', '' )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif ( filteredFiles.length > 0 ) {\n\t\t\t\t\t\thandleUpload( {\n\t\t\t\t\t\t\tallowedTypes,\n\t\t\t\t\t\t\tfilesList: filteredFiles,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tlabel={ __( 'Drop files to upload' ) }\n\t\t\t/>\n\t\t\t<DataViewsPicker\n\t\t\t\tdata={ mediaRecords || [] }\n\t\t\t\tfields={ fields }\n\t\t\t\tview={ view }\n\t\t\t\tonChangeView={ setView }\n\t\t\t\tactions={ actions }\n\t\t\t\tselection={ selection }\n\t\t\t\tonChangeSelection={ setSelection }\n\t\t\t\tisLoading={ isLoading }\n\t\t\t\tpaginationInfo={ paginationInfo }\n\t\t\t\tdefaultLayouts={ defaultLayouts }\n\t\t\t\tgetItemId={ ( item: RestAttachment ) => String( item.id ) }\n\t\t\t\tsearch={ search }\n\t\t\t\tsearchLabel={ searchLabel }\n\t\t\t\titemListLabel={ __( 'Media items' ) }\n\t\t\t/>\n\t\t</Modal>\n\t);\n}\n\nexport default MediaUploadModal;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|