|
|
|
@ -38,7 +38,6 @@ const AddonScreenshots = memo(({ addon }) => {
|
|
|
|
|
|
|
|
|
|
export default memo(({ addonId, type, section }) => {
|
|
|
|
|
const { path, url } = useRouteMatch();
|
|
|
|
|
const [ hideBanner, setHideBanner ] = useState(false);
|
|
|
|
|
type = type || (/(\/plugin\/)/).test(path) ? 'plugin' : (/(\/theme\/)/).test(path) ? 'theme' : 'plugin';
|
|
|
|
|
addonId = addonId || url?.replace(`/vizality/${type}/`, '').split('/')[0];
|
|
|
|
|
section = section || url?.replace(`/vizality/${type}/${addonId}/`, '') || 'overview';
|
|
|
|
@ -50,44 +49,21 @@ export default memo(({ addonId, type, section }) => {
|
|
|
|
|
const isInstalled = vizality.manager[toPlural(type)].isInstalled(addonId);
|
|
|
|
|
const hasScreenshots = vizality.manager[toPlural(type)].hasScreenshots(addonId);
|
|
|
|
|
const AddonSettings = hasSettings && addon?.sections?.settings?.render;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
if (!addon) {
|
|
|
|
|
addon = vizality.manager.community[toPlural(type)].get(addonId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
if (!addon) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
const scroller = document.querySelector('.vz-dashboard-scroller');
|
|
|
|
|
let lastScrollTop = 0;
|
|
|
|
|
const onScroll = evt => {
|
|
|
|
|
evt?.persist?.();
|
|
|
|
|
evt?.preventDefault();
|
|
|
|
|
scroller.removeEventListener('scroll', onScroll);
|
|
|
|
|
|
|
|
|
|
const topOfElement = document.querySelector('#vz-addon-listing-top-card')?.offsetTop;
|
|
|
|
|
const down = Boolean(scroller.scrollTop > lastScrollTop);
|
|
|
|
|
/**
|
|
|
|
|
* On down scroll and above the top-card.
|
|
|
|
|
*/
|
|
|
|
|
if (scroller.scrollTop < (topOfElement - 30) && down) {
|
|
|
|
|
scroller.scroll({ top: topOfElement - 30, behavior: 'smooth' });
|
|
|
|
|
setHideBanner(true);
|
|
|
|
|
/**
|
|
|
|
|
* On down scroll and above the top-card.
|
|
|
|
|
*/
|
|
|
|
|
} else if (scroller.scrollTop <= topOfElement && !down) {
|
|
|
|
|
setHideBanner(false);
|
|
|
|
|
scroller.scroll({ top: 0, behavior: 'smooth' });
|
|
|
|
|
}
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
lastScrollTop = scroller?.scrollTop <= 0 ? 0 : scroller?.scrollTop;
|
|
|
|
|
scroller.addEventListener('scroll', onScroll);
|
|
|
|
|
}, 500);
|
|
|
|
|
};
|
|
|
|
|
scroller.addEventListener('scroll', onScroll);
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
const scrollToTop = () => {
|
|
|
|
|
const scroller = document.querySelector('.vz-dashboard-scroller');
|
|
|
|
|
if (scroller) {
|
|
|
|
@ -97,8 +73,10 @@ export default memo(({ addonId, type, section }) => {
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className='vz-addon-listing'>
|
|
|
|
|
<div className='vz-addon-listing-banner-background' vz-hidden={Boolean(hideBanner) && ''} />
|
|
|
|
|
<div className='vz-addon-listing-top-card' id="vz-addon-listing-top-card" />
|
|
|
|
|
{addon.manifest?.banner && (
|
|
|
|
|
<div className='vz-addon-listing-banner-background' style={{ '--addon-banner': addon.manifest.banner }} />
|
|
|
|
|
)}
|
|
|
|
|
<div className='vz-addon-listing-top-card' />
|
|
|
|
|
<StickyElement wrapperClassName='vz-addon-listing-sticky-bar-wrapper' className='vz-addon-listing-sticky-bar'>
|
|
|
|
|
<__TabBar type={__TabBar.Types.TOP_PILL}>
|
|
|
|
|
<__TabBar.NavItem
|
|
|
|
|