/*!
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
import RestAPIUtil from 'nfvo-utils/RestAPIUtil.js';
import i18n from 'nfvo-utils/i18n/i18n.js';
import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
import Configuration from 'sdc-app/config/Configuration.js';
import { modalContentMapper } from 'sdc-app/common/modal/ModalContentMapper.js';
import { actionTypes as modalActionTypes } from 'nfvo-components/modal/GlobalModalConstants.js';
import { IMAGE_QUESTIONNAIRE } from './SoftwareProductComponentsImageConstants.js';
import { actionTypes } from './SoftwareProductComponentsImageConstants.js';
function baseUrl(softwareProductId, version, componentId) {
const versionId = version.id;
const restPrefix = Configuration.get('restPrefix');
return `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/components/${componentId}/images`;
}
function fetchImagesList({ softwareProductId, componentId, version }) {
return RestAPIUtil.fetch(
`${baseUrl(softwareProductId, version, componentId)}`
);
}
function fetchImage({ softwareProductId, componentId, imageId, version }) {
return RestAPIUtil.fetch(
`${baseUrl(softwareProductId, version, componentId)}/${imageId}`
);
}
function destroyImage({ softwareProductId, componentId, version, imageId }) {
return RestAPIUtil.destroy(
`${baseUrl(softwareProductId, version, componentId)}/${imageId}`
);
}
function createImage({ softwareProductId, componentId, version, data }) {
return RestAPIUtil.post(baseUrl(softwareProductId, version, componentId), {
fileName: data.fileName
});
}
function fetchImageQuestionnaire({
softwareProductId,
componentId,
imageId,
version
}) {
return RestAPIUtil.fetch(
`${baseUrl(
softwareProductId,
version,
componentId
)}/${imageId}/questionnaire`
);
}
function saveImage({
softwareProductId,
version,
componentId,
image: { id, fileName }
}) {
return RestAPIUtil.put(
`${baseUrl(softwareProductId, version, componentId)}/${id}`,
{
fileName
}
);
}
function saveImageQuestionnaire({
softwareProductId,
componentId,
version,
imageId,
qdata
}) {
return RestAPIUtil.put(
`${baseUrl(
softwareProductId,
version,
componentId
)}/${imageId}/questionnaire`,
qdata
);
}
const SoftwareProductComponentImagesActionHelper = {
fetchImagesList(dispatch, { softwareProductId, componentId, version }) {
dispatch({
type: actionTypes.IMAGES_LIST_UPDATE,
response: []
});
return fetchImagesList({
softwareProductId,
componentId,
version
}).then(response => {
dispatch({
type: actionTypes.IMAGES_LIST_UPDATE,
response: response.results,
componentId: componentId
});
});
},
deleteImage(
dispatch,
{ softwareProductId, componentId, version, imageId }
) {
return destroyImage({
softwareProductId,
componentId,
version,
imageId
}).then(() => {
return SoftwareProductComponentImagesActionHelper.fetchImagesList(
dispatch,
{ softwareProductId, componentId, version }
);
});
},
loadImageData({ softwareProductId, componentId, imageId, version }) {
return fetchImage({ softwareProductId, componentId, imageId, version });
},
openEditImageEditor(
dispatch,
{ image, softwareProductId, componentId, version, isReadOnlyMode }
) {
return SoftwareProductComponentImagesActionHelper.loadImageData({
softwareProductId,
componentId,
imageId: image.id,
version
}).then(({ data }) => {
SoftwareProductComponentImagesActionHelper.loadImageQuestionnaire(
dispatch,
{
softwareProductId,
componentId,
imageId: image.id,
version
}
).then(() => {
SoftwareProductComponentImagesActionHelper.openImageEditor(
dispatch,
{
softwareProductId,
componentId,
version,
isReadOnlyMode,
image,
data
}
);
});
});
},
openImageEditor(
dispatch,
{
image = {},
data = {},
softwareProductId,
componentId,
version,
isReadOnlyMode
}
) {
let { id } = image;
let title = id ? i18n('Edit Image') : i18n('Create New Image');
let className = id ? 'image-modal-edit' : 'image-modal-new';
dispatch({
type: actionTypes.ImageEditor.OPEN,
image: { ...data, id }
});
dispatch({
type: modalActionTypes.GLOBAL_MODAL_SHOW,
data: {
modalComponentName:
modalContentMapper.SOFTWARE_PRODUCT_COMPONENT_IMAGE_EDITOR,
title: title,
modalClassName: className,
modalComponentProps: {
softwareProductId,
componentId,
version,
isReadOnlyMode
}
}
});
},
closeImageEditor(dispatch) {
dispatch({
type: modalActionTypes.GLOBAL_MODAL_CLOSE
});
dispatch({
type: actionTypes.ImageEditor.CLOSE
});
},
loadImageQuestionnaire(
dispatch,
{ softwareProductId, componentId, imageId, version }
) {
return fetchImageQuestionnaire({
softwareProductId,
componentId,
imageId,
version
}).then(response => {
ValidationHelper.qDataLoaded(dispatch, {
qName: IMAGE_QUESTIONNAIRE,
response: {
qdata: response.data ? JSON.parse(response.data) : {},
qschema: JSON.parse(response.schema)
}
});
});
},
saveImageDataAndQuestionnaire(
dispatch,
{ softwareProductId, componentId, version, data, qdata }
) {
SoftwareProductComponentImagesActionHelper.closeImageEditor(dispatch);
if (data !== null && data.id) {
// editor in edit mode
return Promise.all([
saveImageQuestionnaire({
softwareProductId,
version,
componentId,
imageId: data.id,
qdata
}),
saveImage({
softwareProductId,
version,
componentId,
image: data
}).then(() => {
return SoftwareProductComponentImagesActionHelper.fetchImagesList(
dispatch,
{ softwareProductId, componentId, version }
);
})
]);
} else {
// editor in create mode
createImage({ softwareProductId, componentId, version, data }).then(
() => {
return SoftwareProductComponentImagesActionHelper.fetchImagesList(
dispatch,
{ softwareProductId, componentId, version }
);
}
);
}
}
};
export default SoftwareProductComponentImagesActionHelper;