File "page-header.js"
Full Path: /home/fresvfqn/waterdamagerestorationandrepairsmithtown.com/wp-content/plugins/surerank/src/apps/admin-components/page-header.js
File size: 1.95 KB
MIME-type: text/html
Charset: utf-8
import { Container, Text, Title } from '@bsf/force-ui';
import { useSelect } from '@wordpress/data';
import { STORE_NAME } from '@AdminStore/constants';
import { InfoTooltip } from './tooltip';
import { useCallback, useEffect } from '@wordpress/element';
const PageHeader = ( {
title = '',
description = '',
icon: Icon = null,
secondaryButton = null,
info_tooltip = null,
} ) => {
const { unsavedSettings } = useSelect( ( select ) => {
const { getUnsavedSettings } = select( STORE_NAME );
return {
unsavedSettings: getUnsavedSettings() || {},
};
}, [] );
const hasUnsavedSettings = Object.keys( unsavedSettings || {} ).length > 0;
// Handle navigation warning for unsaved changes
const handleBeforeUnload = useCallback(
( event ) => {
event.preventDefault();
event.returnValue = '';
},
[ unsavedSettings ]
);
useEffect( () => {
if ( ! hasUnsavedSettings ) {
return;
}
window.addEventListener( 'beforeunload', handleBeforeUnload );
return () => {
window.removeEventListener( 'beforeunload', handleBeforeUnload );
};
}, [ handleBeforeUnload, hasUnsavedSettings ] );
return (
<div className="flex items-center justify-between gap-3 flex-1">
<Container direction="column" className="gap-0.5">
<Container direction="row" className="gap-2">
<Title
className="[&_h2]:text-text-primary [&_h2]:leading-[1.875rem]"
title={ title }
icon={
!! Icon && (
<Icon className="size-5 text-text-primary" />
)
}
iconPosition="left"
size="md"
/>
{ /* Added the InfoTooltip next to the Title */ }
{ info_tooltip && (
<div className="mt-[7px]">
<InfoTooltip
content={ info_tooltip }
interactive={ true }
/>
</div>
) }
</Container>
<Text size={ 14 } weight={ 400 } color="secondary">
{ description }
</Text>
</Container>
{ !! secondaryButton && secondaryButton }
</div>
);
};
export default PageHeader;