File "item-header.js"
Full Path: /home/warrior1/public_html/languages/wp-content/plugins/elementor/app/modules/kit-library/assets/js/components/item-header.js
File size: 5.81 KB
MIME-type: text/x-java
Charset: utf-8
import ApplyKitDialog from './apply-kit-dialog';
import ConnectDialog from './connect-dialog';
import Header from './layout/header';
import HeaderBackButton from './layout/header-back-button';
import Kit from '../models/kit';
import useDownloadLinkMutation from '../hooks/use-download-link-mutation';
import useKitCallToAction, { TYPE_PROMOTION, TYPE_CONNECT } from '../hooks/use-kit-call-to-action';
import useAddKitPromotionUTM from '../hooks/use-add-kit-promotion-utm';
import { Dialog } from '@elementor/app-ui';
import { useMemo, useState } from 'react';
import { useSettingsContext } from '../context/settings-context';
import { appsEventTrackingDispatch } from 'elementor-app/event-track/apps-event-tracking';
import './item-header.scss';
/**
* Returns the right call to action button.
*
* @param {Kit} model
* @param {Object} root0
* @param {Function} root0.apply
* @param {Function} root0.onConnect
* @param {Function} root0.onClick
* @param {boolean} root0.isApplyLoading
* @return {Object} result
*/
function useKitCallToActionButton( model, { apply, isApplyLoading, onConnect, onClick } ) {
const [ type, { subscriptionPlan } ] = useKitCallToAction( model.accessLevel );
const promotionUrl = useAddKitPromotionUTM( subscriptionPlan.promotion_url, model.id, model.title );
return useMemo( () => {
if ( type === TYPE_CONNECT ) {
return {
id: 'connect',
text: __( 'Apply Kit', 'elementor' ), // The label is Apply kit but the this is connect button
hideText: false,
variant: 'contained',
color: 'primary',
size: 'sm',
onClick: ( e ) => {
onConnect( e );
onClick?.( e );
},
includeHeaderBtnClass: false,
};
}
if ( type === TYPE_PROMOTION && subscriptionPlan ) {
return {
id: 'promotion',
// Translators: %s is the subscription plan name.
text: __( 'Go %s', 'elementor' ).replace( '%s', subscriptionPlan.label ),
hideText: false,
variant: 'contained',
color: 'cta',
size: 'sm',
url: promotionUrl,
target: '_blank',
includeHeaderBtnClass: false,
};
}
return {
id: 'apply',
text: __( 'Apply Kit', 'elementor' ),
className: 'e-kit-library__apply-button',
icon: isApplyLoading ? 'eicon-loading eicon-animation-spin' : '',
hideText: false,
variant: 'contained',
color: isApplyLoading ? 'disabled' : 'primary',
size: 'sm',
onClick: ( e ) => {
if ( ! isApplyLoading ) {
apply( e );
}
onClick?.( e );
},
includeHeaderBtnClass: false,
};
}, [ type, subscriptionPlan, isApplyLoading, apply ] );
}
export default function ItemHeader( props ) {
const { updateSettings } = useSettingsContext();
const [ isConnectDialogOpen, setIsConnectDialogOpen ] = useState( false );
const [ downloadLinkData, setDownloadLinkData ] = useState( null );
const [ error, setError ] = useState( false );
const kitData = {
kitName: props.model.title,
pageId: props.pageId,
};
const { mutate: apply, isLoading: isApplyLoading } = useDownloadLinkMutation(
props.model,
{
onSuccess: ( { data } ) => setDownloadLinkData( data ),
onError: ( errorResponse ) => {
if ( 401 === errorResponse.code ) {
elementorCommon.config.library_connect.is_connected = false;
elementorCommon.config.library_connect.current_access_level = 0;
updateSettings( {
is_library_connected: false,
access_level: 0,
} );
setIsConnectDialogOpen( true );
return;
}
setError( {
code: errorResponse.code,
message: __( 'Something went wrong.', 'elementor' ),
} );
},
},
);
const applyButton = useKitCallToActionButton( props.model, {
onConnect: () => setIsConnectDialogOpen( true ),
apply,
isApplyLoading,
onClick: () => {
return appsEventTrackingDispatch(
'kit-library/apply-kit',
{
kit_name: props.model.title,
element_position: 'app_header',
page_source: props.pageId,
event_type: 'click',
},
);
},
} );
const buttons = useMemo( () => [ applyButton, ...props.buttons ], [ props.buttons, applyButton ] );
return (
<>
{
error && (
<Dialog
title={ error.message }
text={ __( 'Nothing to worry about, just try again. If the problem continues, head over to the Help Center.', 'elementor' ) }
approveButtonText={ __( 'Learn More', 'elementor' ) }
approveButtonColor="link"
approveButtonUrl="http://go.elementor.com/app-kit-library-error/"
approveButtonOnClick={ () => setError( false ) }
dismissButtonText={ __( 'Got it', 'elementor' ) }
dismissButtonOnClick={ () => setError( false ) }
onClose={ () => setError( false ) }
/>
)
}
{
downloadLinkData && <ApplyKitDialog
downloadLink={ downloadLinkData.data.download_link }
nonce={ downloadLinkData.meta.nonce }
onClose={ () => setDownloadLinkData( null ) }
/>
}
{
isConnectDialogOpen && <ConnectDialog
pageId={ props.pageId }
onClose={ () => setIsConnectDialogOpen( false ) }
onSuccess={ ( data ) => {
const accessLevel = data.kits_access_level || data.access_level || 0;
elementorCommon.config.library_connect.is_connected = true;
elementorCommon.config.library_connect.current_access_level = accessLevel;
updateSettings( {
is_library_connected: true,
access_level: accessLevel, // BC: Check for 'access_level' prop
} );
if ( data.access_level < props.model.accessLevel ) {
return;
}
apply();
} }
onError={ ( message ) => setError( { message } ) }
/>
}
<Header
startColumn={ <HeaderBackButton { ...kitData } /> }
centerColumn={ props.centerColumn }
buttons={ buttons }
{ ...kitData }
/>
</>
);
}
ItemHeader.propTypes = {
model: PropTypes.instanceOf( Kit ).isRequired,
centerColumn: PropTypes.node,
buttons: PropTypes.arrayOf( PropTypes.object ),
pageId: PropTypes.string,
};