Save workspace changes
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
* Entry point for the MasonryGallery React component.
|
||||
*
|
||||
* Looks for every element with [data-react-masonry-gallery] on the page and
|
||||
* mounts a MasonryGallery instance into it. All configuration is passed via
|
||||
* data attributes so the Blade view does not need to know anything about React.
|
||||
*
|
||||
* Expected data attributes on the mount element:
|
||||
* data-artworks JSON array of artwork objects (required)
|
||||
* data-gallery-type e.g. "trending", "for-you" (default: "discover")
|
||||
* data-cursor-endpoint URL for cursor-based feeds (optional)
|
||||
* data-next-cursor Initial cursor token (optional)
|
||||
* data-next-page-url Initial "next page" URL (optional)
|
||||
* data-limit Items per page (default: 40)
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import { createRoot } from 'react-dom/client';
|
||||
import MasonryGallery from './components/gallery/MasonryGallery';
|
||||
|
||||
function mountAll() {
|
||||
document
|
||||
.querySelectorAll('[data-react-masonry-gallery]')
|
||||
.forEach((container) => {
|
||||
// Already mounted by a previous call (e.g. HMR)
|
||||
if (container.dataset.reactMounted) return;
|
||||
container.dataset.reactMounted = '1';
|
||||
|
||||
let artworks = [];
|
||||
try {
|
||||
artworks = JSON.parse(container.dataset.artworks || '[]');
|
||||
} catch {
|
||||
console.warn('[MasonryGallery] Could not parse data-artworks JSON');
|
||||
}
|
||||
|
||||
const props = {
|
||||
artworks,
|
||||
galleryType: container.dataset.galleryType || 'discover',
|
||||
cursorEndpoint: container.dataset.cursorEndpoint || null,
|
||||
initialNextCursor: container.dataset.nextCursor || null,
|
||||
initialNextPageUrl: container.dataset.nextPageUrl || null,
|
||||
limit: parseInt(container.dataset.limit || '40', 10),
|
||||
rankApiEndpoint: container.dataset.rankApiEndpoint || null,
|
||||
rankType: container.dataset.rankType || null,
|
||||
discoveryEndpoint: container.dataset.discoveryEndpoint || null,
|
||||
algoVersion: container.dataset.algoVersion || null,
|
||||
};
|
||||
|
||||
createRoot(container).render(<MasonryGallery {...props} />);
|
||||
});
|
||||
}
|
||||
|
||||
// Expose for late/async hydration (e.g. AJAX-loaded galleries)
|
||||
window.__hydrateMasonryGalleries = mountAll;
|
||||
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', mountAll);
|
||||
} else {
|
||||
mountAll();
|
||||
}
|
||||
Reference in New Issue
Block a user