diff --git a/projects/js-packages/shared-extension-utils/src/external-media/sources/with-media.js b/projects/js-packages/shared-extension-utils/src/external-media/sources/with-media.js
index 819b8999f57ed..d1ee838fb3de5 100644
--- a/projects/js-packages/shared-extension-utils/src/external-media/sources/with-media.js
+++ b/projects/js-packages/shared-extension-utils/src/external-media/sources/with-media.js
@@ -412,7 +412,7 @@ export default function withMedia( mediaSource = MediaSource.Unknown ) {
}
return withSelect( select => {
- const currentPost = select( 'core/editor' ).getCurrentPost();
+ const currentPost = select( 'core/editor' )?.getCurrentPost();
// Templates and template parts' numerical ID is stored in `wp_id`.
const currentPostId =
typeof currentPost?.id === 'number' ? currentPost.id : currentPost?.wp_id;
diff --git a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.js b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.js
index 33af2ef7b8be1..197940fb07819 100644
--- a/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.js
+++ b/projects/packages/jetpack-mu-wpcom/src/features/wpcom-media/wpcom-external-media-import.js
@@ -1 +1,74 @@
-console.log( 'Hello, Import Media Page' ); // eslint-disable-line no-console
+import {
+ GooglePhotosMedia,
+ OpenverseMedia,
+ PexelsMedia,
+} from '@automattic/jetpack-shared-extension-utils';
+import { useState, useEffect } from 'react';
+import ReactDOM from 'react-dom/client';
+
+const getExternalLibrary = slug => {
+ switch ( slug ) {
+ case 'google_photos':
+ return GooglePhotosMedia;
+ case 'openverse':
+ return OpenverseMedia;
+ case 'pexels':
+ return PexelsMedia;
+ default:
+ return null;
+ }
+};
+
+const WpcomExternalMediaImport = () => {
+ const [ selectedSource, setSelectedSource ] = useState( null );
+ const ExternalLibrary = getExternalLibrary( selectedSource );
+
+ const handleSelect = media => {
+ console.log( media ); // eslint-disable-line no-console
+ };
+
+ const closeLibrary = event => {
+ if ( event ) {
+ event.stopPropagation();
+
+ // The DateTime picker is triggering a modal close when selected. We don't want this to close the modal
+ if ( event.target.closest( '.jetpack-external-media-header__dropdown' ) ) {
+ return;
+ }
+ }
+
+ setSelectedSource( null );
+ };
+
+ useEffect( () => {
+ const element = document.getElementById( 'wpcom-external-media-import' );
+ const handleClick = event => {
+ const slug = event.target.dataset.slug;
+ if ( slug ) {
+ setSelectedSource( slug );
+ }
+ };
+
+ if ( element ) {
+ element.addEventListener( 'click', handleClick );
+ }
+
+ return () => {
+ if ( element ) {
+ element.removeEventListener( 'click', handleClick );
+ }
+ };
+ }, [] );
+
+ if ( ! ExternalLibrary ) {
+ return null;
+ }
+
+ return