File "index.js"
Full Path: /home/warrior1/public_html/wp-content/plugins/astra-sites/inc/lib/onboarding/assets/src/steps/site-list/header/sync-library/index.js
File size: 2.14 KB
MIME-type: text/x-java
Charset: utf-8
import React, { useState, useEffect } from 'react';
import { __ } from '@wordpress/i18n';
import {
Toaster,
Tooltip,
} from '@brainstormforce/starter-templates-components';
import ICONS from '../../../../../icons';
import { useStateValue } from '../../../../store/store';
import { isSyncSuccess, SyncStart } from './utils';
import './style.scss';
const SyncLibrary = () => {
const [ {}, dispatch ] = useStateValue();
const [ syncState, setSyncState ] = useState( {
isLoading: false,
updatedData: null,
syncStatus: null,
} );
const { isLoading, updatedData, syncStatus } = syncState;
if ( syncStatus === true && !! updatedData ) {
const { sites, categories, categoriesAndTags } = updatedData;
if ( !! sites && !! categories && !! categoriesAndTags ) {
dispatch( {
type: 'set',
allSitesData: sites,
allCategories: categories,
allCategoriesAndTags: categoriesAndTags,
} );
}
setSyncState( {
...syncState,
updatedData: null,
} );
}
const handleClick = async ( event ) => {
event.stopPropagation();
if ( isLoading ) {
return;
}
setSyncState( { ...syncState, isLoading: true } );
const newData = await SyncStart();
setSyncState( {
isLoading: false,
updatedData: newData,
syncStatus: isSyncSuccess(),
} );
};
useEffect( () => {
if ( isLoading ) {
window.onbeforeunload = () => {
return true;
};
return () => {
window.onbeforeunload = null;
};
}
}, [ isLoading ] );
return (
<>
<div
className={ `st-sync-library ${ isLoading ? 'loading' : '' }` }
onClick={ handleClick }
>
<Tooltip content={ __( 'Sync Library', 'astra-sites' ) }>
{ ICONS.sync }
</Tooltip>
</div>
{ ! isLoading && syncStatus === true && (
<Toaster
type="success"
message={ __(
'Library refreshed successfully',
'astra-sites'
) }
autoHideDuration={ 5 }
bottomRight={ true }
/>
) }
{ ! isLoading && syncStatus === false && (
<Toaster
type="error"
message={ __( 'Library refreshed failed!', 'astra-sites' ) }
autoHideDuration={ 5 }
bottomRight={ true }
/>
) }
</>
);
};
export default SyncLibrary;