File "UpdateLogoConfirm.jsx"
Full Path: /home/buyiwexj/public_html/wp-content/plugins/extendify/src/Agent/workflows/theme/components/UpdateLogoConfirm.jsx
File size: 2.07 KB
MIME-type: text/x-java
Charset: utf-8
import { ImageUploader } from '@agent/components/ImageUploader';
import { useQuickEditStore } from '@quick-edit/state/store';
import { useCallback, useEffect, useRef, useState } from '@wordpress/element';
import { __ } from '@wordpress/i18n';
const updateLogoSrcAttr = (url, cssFilter) => {
document.querySelectorAll('.wp-block-site-logo img')?.forEach((img) => {
img.srcset = '';
img.src = url;
img.style.filter = cssFilter ?? '';
});
};
export const UpdateLogoConfirm = ({ onConfirm, onCancel }) => {
const block = useQuickEditStore((s) => s.agentBlock);
const [originalLogoImgSrc, setOriginalLogoImgSrc] = useState();
useEffect(() => {
setOriginalLogoImgSrc(
document.querySelector('.wp-block-site-logo img')?.src ?? null,
);
}, [block]);
const undoLogoChange = useCallback(() => {
if (originalLogoImgSrc) {
updateLogoSrcAttr(originalLogoImgSrc);
}
}, [originalLogoImgSrc]);
const confirmed = useRef(false);
useEffect(() => {
if (!originalLogoImgSrc) return;
return () => {
if (!confirmed.current) undoLogoChange();
};
}, [originalLogoImgSrc]);
useEffect(() => {
// Put modal above the Agent
const style = document.createElement('style');
style.textContent = `.media-modal {
z-index: 999999 !important;
}`;
document.head.appendChild(style);
return () => style.remove();
}, []);
const handleConfirm = async ({ imageId }) => {
confirmed.current = true;
await onConfirm({
data: { imageId },
shouldRefreshPage: !window.extAgentData?.context?.adminPage,
});
};
const handleSelect = (image) => {
updateLogoSrcAttr(image.url, 'none');
};
return (
<Wrapper>
<div className="relative p-3">
<ImageUploader
type="site_logo"
title={__('Site logo', 'extendify-local')}
actionLabel={__('Set site logo', 'extendify-local')}
onSave={handleConfirm}
onCancel={onCancel}
onSelect={handleSelect}
/>
</div>
</Wrapper>
);
};
const Wrapper = ({ children }) => (
<div className="mb-4 ml-10 mr-2 flex flex-col rounded-lg border border-gray-300 bg-gray-50 rtl:ml-2 rtl:mr-10">
{children}
</div>
);