* feat: [AXIMST-538] Add errors handling 4xx, 5xx * fix: resolve discussions * fix: second round of review discussions refactor: fixing tests for Textbooks page Co-authored-by: ruzniaievdm <ruzniaievdm@gmail.com>
118 lines
3.9 KiB
JavaScript
118 lines
3.9 KiB
JavaScript
import { RequestStatus } from '../../data/constants';
|
|
import {
|
|
hideProcessingNotification,
|
|
showProcessingNotification,
|
|
} from '../../generic/processing-notification/data/slice';
|
|
import { handleResponseErrors } from '../../generic/saving-error-alert';
|
|
import { NOTIFICATION_MESSAGES } from '../../constants';
|
|
import {
|
|
getCertificates,
|
|
createCertificate,
|
|
updateCertificate,
|
|
deleteCertificate,
|
|
updateActiveStatus,
|
|
} from './api';
|
|
import {
|
|
fetchCertificatesSuccess,
|
|
updateLoadingStatus,
|
|
updateSavingStatus,
|
|
createCertificateSuccess,
|
|
updateCertificateSuccess,
|
|
deleteCertificateSuccess,
|
|
} from './slice';
|
|
import { ACTIVATION_MESSAGES } from './constants';
|
|
|
|
export function fetchCertificates(courseId) {
|
|
return async (dispatch) => {
|
|
dispatch(updateLoadingStatus({ status: RequestStatus.IN_PROGRESS }));
|
|
|
|
try {
|
|
const certificates = await getCertificates(courseId);
|
|
|
|
dispatch(fetchCertificatesSuccess(certificates));
|
|
dispatch(updateLoadingStatus({ status: RequestStatus.SUCCESSFUL }));
|
|
} catch (error) {
|
|
if (error.response && error.response.status === 403) {
|
|
dispatch(updateLoadingStatus({ courseId, status: RequestStatus.DENIED }));
|
|
} else {
|
|
dispatch(updateLoadingStatus({ courseId, status: RequestStatus.FAILED }));
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
export function createCourseCertificate(courseId, certificate) {
|
|
return async (dispatch) => {
|
|
dispatch(updateSavingStatus({ status: RequestStatus.PENDING }));
|
|
dispatch(showProcessingNotification(NOTIFICATION_MESSAGES.saving));
|
|
|
|
try {
|
|
const certificateValues = await createCertificate(courseId, certificate);
|
|
dispatch(createCertificateSuccess(certificateValues));
|
|
dispatch(updateSavingStatus({ status: RequestStatus.SUCCESSFUL }));
|
|
return true;
|
|
} catch (error) {
|
|
return handleResponseErrors(error, dispatch, updateSavingStatus);
|
|
} finally {
|
|
dispatch(hideProcessingNotification());
|
|
}
|
|
};
|
|
}
|
|
|
|
export function updateCourseCertificate(courseId, certificate) {
|
|
return async (dispatch) => {
|
|
dispatch(updateSavingStatus({ status: RequestStatus.PENDING }));
|
|
dispatch(showProcessingNotification(NOTIFICATION_MESSAGES.saving));
|
|
|
|
try {
|
|
const certificatesValues = await updateCertificate(courseId, certificate);
|
|
dispatch(updateSavingStatus({ status: RequestStatus.SUCCESSFUL }));
|
|
dispatch(updateCertificateSuccess(certificatesValues));
|
|
return true;
|
|
} catch (error) {
|
|
return handleResponseErrors(error, dispatch, updateSavingStatus);
|
|
} finally {
|
|
dispatch(hideProcessingNotification());
|
|
}
|
|
};
|
|
}
|
|
|
|
export function deleteCourseCertificate(courseId, certificateId) {
|
|
return async (dispatch) => {
|
|
dispatch(updateSavingStatus({ status: RequestStatus.PENDING }));
|
|
dispatch(showProcessingNotification(NOTIFICATION_MESSAGES.deleting));
|
|
|
|
try {
|
|
const certificatesValues = await deleteCertificate(courseId, certificateId);
|
|
dispatch(deleteCertificateSuccess(certificatesValues));
|
|
dispatch(updateSavingStatus({ status: RequestStatus.SUCCESSFUL }));
|
|
return true;
|
|
} catch (error) {
|
|
return handleResponseErrors(error, dispatch, updateSavingStatus);
|
|
} finally {
|
|
dispatch(hideProcessingNotification());
|
|
}
|
|
};
|
|
}
|
|
|
|
export function updateCertificateActiveStatus(courseId, path, activationStatus) {
|
|
return async (dispatch) => {
|
|
dispatch(updateSavingStatus({ status: RequestStatus.PENDING }));
|
|
|
|
dispatch(showProcessingNotification(
|
|
activationStatus ? ACTIVATION_MESSAGES.activating : ACTIVATION_MESSAGES.deactivating,
|
|
));
|
|
|
|
try {
|
|
await updateActiveStatus(path, activationStatus);
|
|
dispatch(updateSavingStatus({ status: RequestStatus.SUCCESSFUL }));
|
|
dispatch(fetchCertificates(courseId));
|
|
return true;
|
|
} catch (error) {
|
|
return handleResponseErrors(error, dispatch, updateSavingStatus);
|
|
} finally {
|
|
dispatch(hideProcessingNotification());
|
|
}
|
|
};
|
|
}
|