/** * WordPress dependencies */ import apiFetch from '@safe-wordpress/api-fetch'; import { dispatch, select } from '@safe-wordpress/data'; /** * External dependencies */ import { omit } from 'lodash'; import { createErrorNotice } from '@nab/utils'; import type { ReusableGoal, ReusableSegment } from '@nab/types'; /** * Internal dependencies */ import { store as NAB_DATA } from '../../../store'; export async function saveReusableGoals( goals: ReadonlyArray< ReusableGoal > ): Promise< void > { const isSavingReusableEntities = select( NAB_DATA ).isSavingReusableEntities(); if ( isSavingReusableEntities ) { return; } await dispatch( NAB_DATA ).markAsSavingReusableEntities( true ); try { goals = goals.map( ( g ) => omit( g, 'id' ) ); const newGoals = await apiFetch< ReadonlyArray< ReusableGoal > >( { path: `/nab/v1/reusable-goals`, method: 'POST', data: { goals }, } ); await dispatch( NAB_DATA ).receiveReusableGoals( newGoals ); } catch ( error ) { await createErrorNotice( error ); } await dispatch( NAB_DATA ).markAsSavingReusableEntities( false ); } export async function saveReusableSegments( segments: ReadonlyArray< ReusableSegment > ): Promise< void > { const isSavingReusableEntities = select( NAB_DATA ).isSavingReusableEntities(); if ( isSavingReusableEntities ) { return; } await dispatch( NAB_DATA ).markAsSavingReusableEntities( true ); try { segments = segments.map( ( g ) => omit( g, 'id' ) ); const updatedSegments = await apiFetch< ReadonlyArray< ReusableSegment > >( { path: `/nab/v1/reusable-segments`, method: 'POST', data: { segments }, } ); await dispatch( NAB_DATA ).receiveReusableSegments( updatedSegments ); } catch ( error ) { await createErrorNotice( error ); } await dispatch( NAB_DATA ).markAsSavingReusableEntities( false ); }