Katello/katello

View on GitHub
webpack/scenes/AlternateContentSources/ACSActions.js

Summary

Maintainability
A
1 hr
Test Coverage
import { API_OPERATIONS, APIActions, get, post } from 'foremanReact/redux/API';
import { translate as __ } from 'foremanReact/common/I18n';
import api, { orgId } from '../../services/api';
import ACS_KEY, {
  acsDetailsKey,
  acsRefreshKey,
  CREATE_ACS_KEY,
  DELETE_ACS_KEY,
  EDIT_ACS_KEY,
  PRODUCTS_KEY,
  BULK_ACS_REFRESH_KEY,
  BULK_ACS_DELETE_KEY,
} from './ACSConstants';
import { getResponseErrorMsgs } from '../../utils/helpers';
import { renderTaskStartedToast } from '../Tasks/helpers';

const acsSuccessToast = (response) => {
  const { data: { name } } = response;
  return __(`Alternate content source ${name} created`);
};

export const acsErrorToast = (error) => {
  const message = getResponseErrorMsgs(error.response);
  return message;
};

export const createACSParams = (extraParams) => {
  const getParams = {
    organization_id: orgId(),
    include_permissions: true,
    ...extraParams,
  };
  return getParams;
};

const getAlternateContentSources = (extraParams, id = '') => get({
  type: API_OPERATIONS.GET,
  key: ACS_KEY + id,
  url: api.getApiUrl('/alternate_content_sources'),
  params: createACSParams(extraParams),
});

export const getACSDetails = (acsId, extraParams = {}) => get({
  type: API_OPERATIONS.GET,
  key: acsDetailsKey(acsId),
  params: { organization_id: orgId(), include_permissions: true, ...extraParams },
  url: api.getApiUrl(`/alternate_content_sources/${acsId}`),
  errorToast: error => acsErrorToast(error),
});

export const createACS = (params, name, handleSuccess) => post({
  type: API_OPERATIONS.POST,
  key: CREATE_ACS_KEY + name,
  url: api.getApiUrl('/alternate_content_sources'),
  params,
  handleSuccess,
  successToast: response => acsSuccessToast(response),
  errorToast: error => acsErrorToast(error),
});

export const deleteACS = (acsId, handleSuccess) => APIActions.delete({
  type: API_OPERATIONS.DELETE,
  key: DELETE_ACS_KEY,
  url: api.getApiUrl(`/alternate_content_sources/${acsId}`),
  handleSuccess,
  successToast: () => __('Alternate content source deleted'),
  errorToast: error => acsErrorToast(error),
});

export const refreshACS = (acsId, handleSuccess) => post({
  type: API_OPERATIONS.POST,
  key: acsRefreshKey(acsId),
  url: api.getApiUrl(`/alternate_content_sources/${acsId}/refresh`),
  params: { id: acsId },
  handleSuccess: (response) => {
    if (handleSuccess) {
      handleSuccess();
    }
    return renderTaskStartedToast(response.data);
  },
  errorToast: error => acsErrorToast(error),
});

export const bulkRefreshACS = (params, handleSuccess) => post({
  type: API_OPERATIONS.POST,
  key: BULK_ACS_REFRESH_KEY,
  url: api.getApiUrl('/alternate_content_sources/bulk/refresh'),
  params,
  handleSuccess: (response) => {
    renderTaskStartedToast(response?.data, __('Bulk alternate content source refresh has started.'));
    return handleSuccess();
  },
  errorToast: error => __('Something went wrong while refreshing alternate content sources: ') + getResponseErrorMsgs(error.response),
});

export const bulkDeleteACS = (params, handleSuccess) => APIActions.put({
  type: API_OPERATIONS.PUT,
  key: BULK_ACS_DELETE_KEY,
  url: api.getApiUrl('/alternate_content_sources/bulk/destroy'),
  params,
  handleSuccess: (response) => {
    renderTaskStartedToast(response?.data, __('Bulk alternate content source delete has started.'));
    return handleSuccess();
  },
  errorToast: error => __(`Something went wrong while deleting alternate content sources: ${getResponseErrorMsgs(error.response)}`),
});

export const getProducts = () => get({
  type: API_OPERATIONS.GET,
  key: PRODUCTS_KEY,
  url: api.getApiUrl('/products'),
  params: {
    organization_id: orgId(), full_result: true, enabled: true, non_empty: true,
  },
});

export const editACS = (acsId, params, handleSuccess, handleError) => APIActions.put({
  type: API_OPERATIONS.PUT,
  key: EDIT_ACS_KEY,
  url: api.getApiUrl(`/alternate_content_sources/${acsId}`),
  params,
  handleSuccess,
  handleError,
  successToast: () => __('Alternate content source edited'),
  errorToast: error => acsErrorToast(error),
});

export default getAlternateContentSources;