blob: 572b0292d7fb437af9ab97fd0853cd6ce141dfb0 [file] [log] [blame]
/*
* Copyright © 2016-2018 European Support Limited
*
* 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 { connect } from 'react-redux';
import sortByStringProperty from 'nfvo-utils/sortByStringProperty.js';
import LicenseModelActionHelper from 'sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js';
import LicenseModelOverviewView from './LicenseModelOverviewView.jsx';
import {
overviewEditorHeaders,
selectedButton
} from './LicenseModelOverviewConstants.js';
import licenseModelOverviewActionHelper from './licenseModelOverviewActionHelper.js';
import { SORTING_PROPERTY_NAME } from 'sdc-app/onboarding/licenseModel/LicenseModelConstants.js';
export const mapStateToProps = ({
licenseModel: {
licenseModelEditor,
entitlementPool,
licenseAgreement,
featureGroup,
licenseKeyGroup,
licenseModelOverview
}
}) => {
let modalHeader, licensingDataList;
let isDisplayModal = false;
const reduceLicenseKeyGroups = (accum, licenseKeyGroupId) => {
let curLicenseKeyGroup = licenseKeyGroup.licenseKeyGroupsList.find(
item => {
return item.id === licenseKeyGroupId;
}
);
if (curLicenseKeyGroup) {
accum.push({
...curLicenseKeyGroup,
itemType: overviewEditorHeaders.LICENSE_KEY_GROUP
});
}
return accum;
};
const reduceEntitlementPools = (accum, entitlementPoolId) => {
let curEntitlementPool = entitlementPool.entitlementPoolsList.find(
item => {
return item.id === entitlementPoolId;
}
);
if (curEntitlementPool) {
accum.push({
...curEntitlementPool,
itemType: overviewEditorHeaders.ENTITLEMENT_POOL
});
}
return accum;
};
const reduceFeatureGroups = (accum, featureGroupId) => {
let curFeatureGroup = featureGroup.featureGroupsList.find(item => {
return item.id === featureGroupId;
});
if (curFeatureGroup) {
let {
entitlementPoolsIds = [],
licenseKeyGroupsIds = []
} = curFeatureGroup;
accum.push({
...curFeatureGroup,
itemType: overviewEditorHeaders.FEATURE_GROUP,
children: [
...sortByStringProperty(
entitlementPoolsIds.length
? entitlementPoolsIds.reduce(
reduceEntitlementPools,
[]
)
: [],
SORTING_PROPERTY_NAME
),
...sortByStringProperty(
licenseKeyGroupsIds.length
? licenseKeyGroupsIds.reduce(
reduceLicenseKeyGroups,
[]
)
: [],
SORTING_PROPERTY_NAME
)
]
});
}
return accum;
};
const checkEP = (accum, elem) => {
if (
!elem.referencingFeatureGroups ||
!elem.referencingFeatureGroups.length
) {
accum.push({
...elem,
itemType: overviewEditorHeaders.ENTITLEMENT_POOL
});
}
return accum;
};
const checkLG = (accum, elem) => {
if (
!elem.referencingFeatureGroups ||
!elem.referencingFeatureGroups.length
) {
accum.push({
...elem,
itemType: overviewEditorHeaders.LICENSE_KEY_GROUP
});
}
return accum;
};
const checkFG = (accum, elem) => {
if (
!elem.referencingLicenseAgreements ||
!elem.referencingLicenseAgreements.length
) {
let { entitlementPoolsIds = [], licenseKeyGroupsIds = [] } = elem;
accum.push({
...elem,
itemType: overviewEditorHeaders.FEATURE_GROUP,
children: [
...(entitlementPoolsIds.length
? entitlementPoolsIds.reduce(reduceEntitlementPools, [])
: []),
...(licenseKeyGroupsIds.length
? licenseKeyGroupsIds.reduce(reduceLicenseKeyGroups, [])
: [])
]
});
}
return accum;
};
const mapLicenseAgreementData = licenseAgreement => {
let { featureGroupsIds = [] } = licenseAgreement;
return {
...licenseAgreement,
itemType: overviewEditorHeaders.LICENSE_AGREEMENT,
children: featureGroupsIds.length
? sortByStringProperty(
featureGroupsIds.reduce(reduceFeatureGroups, []),
SORTING_PROPERTY_NAME
)
: []
};
};
if (
entitlementPool.entitlementPoolEditor &&
entitlementPool.entitlementPoolEditor.data
) {
modalHeader = overviewEditorHeaders.ENTITLEMENT_POOL;
isDisplayModal = true;
} else if (
licenseAgreement.licenseAgreementEditor &&
licenseAgreement.licenseAgreementEditor.data
) {
modalHeader = overviewEditorHeaders.LICENSE_AGREEMENT;
isDisplayModal = true;
} else if (
featureGroup.featureGroupEditor &&
featureGroup.featureGroupEditor.data
) {
modalHeader = overviewEditorHeaders.FEATURE_GROUP;
isDisplayModal = true;
} else if (
licenseKeyGroup.licenseKeyGroupsEditor &&
licenseKeyGroup.licenseKeyGroupsEditor.data
) {
modalHeader = overviewEditorHeaders.LICENSE_KEY_GROUP;
isDisplayModal = true;
}
let orphanDataList = [
...sortByStringProperty(
featureGroup.featureGroupsList.reduce(checkFG, []),
SORTING_PROPERTY_NAME
),
...sortByStringProperty(
entitlementPool.entitlementPoolsList.reduce(checkEP, []),
SORTING_PROPERTY_NAME
),
...sortByStringProperty(
licenseKeyGroup.licenseKeyGroupsList.reduce(checkLG, []),
SORTING_PROPERTY_NAME
)
];
licensingDataList =
licenseAgreement.licenseAgreementList &&
licenseAgreement.licenseAgreementList.length
? sortByStringProperty(
licenseAgreement.licenseAgreementList.map(
mapLicenseAgreementData
),
SORTING_PROPERTY_NAME
)
: [];
let selectedTab = licenseModelOverview.selectedTab;
// on first entry, we will decide what tab to open depending on data. if there are no connections, we will open the orphans
if (selectedTab === null) {
selectedTab = licensingDataList.length
? selectedButton.VLM_LIST_VIEW
: selectedButton.NOT_IN_USE;
}
return {
isDisplayModal,
modalHeader,
licenseModelId: licenseModelEditor.data.id,
version: licenseModelEditor.data.version,
licensingDataList,
orphanDataList,
selectedTab
};
};
const mapActionsToProps = (dispatch, { licenseModelId }) => {
return {
onCallVCAction: action => {
LicenseModelActionHelper.performVCAction(dispatch, {
licenseModelId,
action
});
},
onTabSelect: buttonTab =>
licenseModelOverviewActionHelper.selectVLMListView(dispatch, {
buttonTab
})
};
};
export default connect(mapStateToProps, mapActionsToProps)(
LicenseModelOverviewView
);