/**
* WordPress dependencies
*/
import apiFetch from '@safe-wordpress/api-fetch';
import { useState } from '@safe-wordpress/element';
/**
* Internal dependencies
*/
import './style.scss';
import { useValue } from '../hooks';
import { openConnectionAuthorizer } from './utils';
import { Connection } from './connection';
import type { ConnectionMode, GA4Property } from './config';
import type { FieldSettingProps } from '../types';
export const GoogleAnalyticsSetting = ( {
name,
}: FieldSettingProps ): JSX.Element => {
const [ properties, setProperties ] = useState<
ReadonlyArray< GA4Property >
>( [] );
const [ property, setProperty ] = useValue< GA4Property >( name );
const [ mode, setMode ] = useState< ConnectionMode >(
!! property?.id ? 'ga4-property-id' : 'init'
);
const connectAccount = () =>
openConnectionAuthorizer( {
onOpen: () => {
setMode( 'awaiting-authorization' );
},
onClose: () => {
setMode( 'property-retrieval' );
void apiFetch< GA4Property[] >( {
path: '/nelio-content/v1/analytics/ga4-properties',
} )
.then( ( foundProperties ) => {
setProperties( foundProperties );
const firstProp = foundProperties[ 0 ];
if ( firstProp ) {
setProperty( firstProp );
}
setMode( 'property-selection' );
} )
.catch( ( error ) => {
// eslint-disable-next-line no-console
console.log( error );
setProperty( { id: '', name: '' } );
setMode( 'init' );
} );
},
} );
const selectProperty = ( p: GA4Property ) => setProperty( p );
return (
<>
>
);
};