/**
* WordPress dependencies
*/
import { select } from '@wordpress/data';
import { addQueryArgs } from '@wordpress/url';
import { __, sprintf } from '@wordpress/i18n';
/**
* Internal dependencies
*/
import { apiFetch, createNotice } from '../controls';
import { transformGridLayoutToApi } from '../../utils';
export function receiveDashboardQuery( queryId, dashboards ) {
return {
type: RECEIVE_DASHBOARD_QUERY,
queryId,
dashboards,
};
}
export function receiveDashboard( dashboard ) {
return {
type: RECEIVE_DASHBOARD,
dashboard,
};
}
export function receiveDashboardLayout( dashboardId, layout ) {
return {
type: RECEIVE_DASHBOARD_LAYOUT,
dashboardId,
layout,
};
}
export function savingDashboardLayout( dashboardId, layout ) {
return {
type: SAVING_DASHBOARD_LAYOUT,
dashboardId,
layout,
};
}
export function startAddDashboard( dashboard, context ) {
return {
type: START_ADD_DASHBOARD,
dashboard,
context,
};
}
export function finishAddDashboard( dashboard, created, context ) {
return {
type: FINISH_ADD_DASHBOARD,
dashboard,
created,
context,
};
}
export function failedAddDashboard( dashboard, context, error ) {
return {
type: FAILED_ADD_DASHBOARD,
dashboard,
context,
error,
};
}
export function receiveDashboardCollectionHeaders( headers ) {
return {
type: RECEIVE_DASHBOARD_COLLECTION_HEADERS,
headers,
};
}
export function startSaveDashboard( dashboardId ) {
return {
type: START_SAVE_DASHBOARD,
dashboardId,
};
}
export function finishSaveDashboard( dashboardId ) {
return {
type: FINISH_SAVE_DASHBOARD,
dashboardId,
};
}
export function failedSaveDashboard( dashboardId, error ) {
return {
type: FAILED_SAVE_DASHBOARD,
dashboardId,
error,
};
}
export function startDeleteDashboard( dashboardId ) {
return {
type: START_DELETE_DASHBOARD,
dashboardId,
};
}
export function finishDeleteDashboard( dashboardId ) {
return {
type: FINISH_DELETE_DASHBOARD,
dashboardId,
};
}
export function failedDeleteDashboard( dashboardId, error ) {
return {
type: FAILED_DELETE_DASHBOARD,
dashboardId,
error,
};
}
/**
* Action triggered to create a dashboard.
*
* Triggers additional actions as opposed to just saving the dashboard.
*
* @param {Object} dashboard Dashboard data.
* @param {*} [context] Additional context about this request for use in subsequent actions.
*/
export function* addDashboard( dashboard, context ) {
yield startAddDashboard( dashboard, context );
let created;
try {
created = yield persistDashboard( dashboard );
} catch ( e ) {
yield failedAddDashboard( dashboard, context, e );
yield createNotice(
'error',
sprintf(
/* translators: 1. Error message. */
__( 'Error when creating dashboard: %s', 'better-wp-security' ),
e.message
)
);
return;
}
yield receiveDashboard( created );
yield finishAddDashboard( dashboard, created, context );
yield createNotice( 'success', __( 'Dashboard Created', 'better-wp-security' ), {
autoDismiss: 10000,
} );
return created;
}
/**
* Action triggered to save a dashboard.
*
* @param {Object} dashboard Record to be saved.
*
* @return {Object|Error} Updated record or error.
*/
export function* saveDashboard( dashboard ) {
yield startSaveDashboard( dashboard.id );
let updatedRecord;
try {
updatedRecord = yield persistDashboard( dashboard );
} catch ( e ) {
yield failedSaveDashboard( dashboard.id, e );
yield createNotice(
'error',
sprintf(
/* translators: 1. Error message. */
__( 'Error when saving dashboard: %s', 'better-wp-security' ),
e.message
)
);
return e;
}
yield receiveDashboard( updatedRecord );
yield finishSaveDashboard( dashboard.id );
return updatedRecord;
}
function* persistDashboard( dashboard ) {
return yield apiFetch( {
path: addQueryArgs(
`/ithemes-security/v1/dashboards${
dashboard.id ? '/' + dashboard.id : ''
}`,
{ _embed: 1 }
),
method: dashboard.id ? 'PUT' : 'POST',
data: dashboard,
} );
}
export function* saveDashboardLayoutFromGrid( dashboardId, layouts ) {
const layout = transformGridLayoutToApi( dashboardId, layouts );
yield receiveDashboardLayout( dashboardId, layout );
if (
! select( 'ithemes-security/dashboard' ).canEditDashboard( dashboardId )
) {
return;
}
return yield saveDashboardLayout( dashboardId, layout, false );
}
export function* saveDashboardLayout(
dashboardId,
layout,
updateState = true
) {
yield savingDashboardLayout( dashboardId, layout );
let updated;
try {
updated = yield apiFetch( {
path: `/ithemes-security/v1/dashboards/${ dashboardId }/layout`,
method: 'PUT',
data: layout,
} );
} catch ( e ) {
return false;
}
if ( updateState ) {
yield receiveDashboardLayout( dashboardId, updated );
}
return updated;
}
export function* deleteDashboard( dashboardId ) {
yield startDeleteDashboard( dashboardId );
try {
yield apiFetch( {
path: `/ithemes-security/v1/dashboards/${ dashboardId }`,
method: 'DELETE',
} );
} catch ( e ) {
yield failedDeleteDashboard( dashboardId, e );
yield createNotice(
'error',
sprintf(
/* translators: 1. Error message. */
__( 'Error when deleting dashboard: %s', 'better-wp-security' ),
e.message
)
);
return e;
}
yield finishDeleteDashboard( dashboardId );
return true;
}
export const RECEIVE_DASHBOARD_QUERY = 'RECEIVE_DASHBOARD_QUERY';
export const RECEIVE_DASHBOARD = 'RECEIVE_DASHBOARD';
export const RECEIVE_DASHBOARD_LAYOUT = 'RECEIVE_DASHBOARD_LAYOUT';
export const SAVING_DASHBOARD_LAYOUT = 'SAVING_DASHBOARD_LAYOUT';
export const START_ADD_DASHBOARD = 'START_ADD_DASHBOARD';
export const FINISH_ADD_DASHBOARD = 'FINISH_ADD_DASHBOARD';
export const FAILED_ADD_DASHBOARD = 'FAILED_ADD_DASHBOARD';
export const START_SAVE_DASHBOARD = 'START_SAVE_DASHBOARD';
export const FINISH_SAVE_DASHBOARD = 'FINISH_SAVE_DASHBOARD';
export const FAILED_SAVE_DASHBOARD = 'FAILED_SAVE_DASHBOARD';
export const START_DELETE_DASHBOARD = 'START_DELETE_DASHBOARD';
export const FINISH_DELETE_DASHBOARD = 'FINISH_DELETE_DASHBOARD';
export const FAILED_DELETE_DASHBOARD = 'FAILED_DELETE_DASHBOARD';
export const RECEIVE_DASHBOARD_COLLECTION_HEADERS =
'RECEIVE_DASHBOARD_COLLECTION_HEADERS';