[SDC] OnBoard with enabled tests and features
Change-Id: I4c1bbf6e1c854cf97a3561c736f83da44b58b7c0
Signed-off-by: az2497 <avi.ziv@amdocs.com>
[SDC] OnBoard with enabled tests and features.
Change-Id: Icd52f039aee4dd393a1404d530bb9fdd0b20e604
Signed-off-by: az2497 <avi.ziv@amdocs.com>
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js
index 186f1cb..788528f 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js
@@ -23,6 +23,7 @@
import FeatureGroupsActionHelper from './featureGroups/FeatureGroupsActionHelper.js';
import EntitlementPoolsActionHelper from './entitlementPools/EntitlementPoolsActionHelper.js';
import LicenseKeyGroupsActionHelper from './licenseKeyGroups/LicenseKeyGroupsActionHelper.js';
+import OnboardingActionHelper from 'sdc-app/onboarding/OnboardingActionHelper.js';
function baseUrl() {
const restPrefix = Configuration.get('restPrefix');
@@ -140,6 +141,8 @@
newVersionId = adjustMajorVersion(version.label, 1);
}
+ OnboardingActionHelper.updateCurrentScreenVersion(dispatch, {label: newVersionId, id: newVersionId});
+
LicenseModelActionHelper.fetchLicenseModelById(dispatch, {licenseModelId, version:{id: newVersionId, label: newVersionId}});
return Promise.resolve({id: newVersionId, label: newVersionId});
});
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsActionHelper.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsActionHelper.js
index a371d56..ce4327d 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsActionHelper.js
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsActionHelper.js
@@ -18,7 +18,7 @@
import {actionTypes as entitlementPoolsActionTypes } from './EntitlementPoolsConstants.js';
import LicenseModelActionHelper from 'sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js';
import {actionTypes as limitEditorActions} from 'sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js';
-import getValue from 'nfvo-utils/getValue.js';
+import {default as getValue, getStrValue} from 'nfvo-utils/getValue.js';
function baseUrl(licenseModelId, version) {
const restPrefix = Configuration.get('restPrefix');
@@ -26,17 +26,16 @@
return `${restPrefix}/v1.0/vendor-license-models/${licenseModelId}/versions/${versionId}/entitlement-pools`;
}
-function fetchEntitlementPoolsList(licenseModelId, version) {
+function fetchEntitlementPoolsList(licenseModelId, version) {
return RestAPIUtil.fetch(`${baseUrl(licenseModelId, version)}`);
}
-function postEntitlementPool(licenseModelId, entitlementPool, version) {
+function postEntitlementPool(licenseModelId, entitlementPool, version) {
return RestAPIUtil.post(baseUrl(licenseModelId, version), {
name: entitlementPool.name,
description: entitlementPool.description,
thresholdValue: entitlementPool.thresholdValue,
thresholdUnits: getValue(entitlementPool.thresholdUnits),
- entitlementMetric: entitlementPool.entitlementMetric,
increments: entitlementPool.increments,
operationalScope: getValue(entitlementPool.operationalScope),
time: entitlementPool.time,
@@ -47,13 +46,12 @@
function putEntitlementPool(licenseModelId, previousEntitlementPool, entitlementPool, version) {
-
+
return RestAPIUtil.put(`${baseUrl(licenseModelId, version)}/${entitlementPool.id}`, {
name: entitlementPool.name,
description: entitlementPool.description,
thresholdValue: entitlementPool.thresholdValue,
thresholdUnits: getValue(entitlementPool.thresholdUnits),
- entitlementMetric: entitlementPool.entitlementMetric,
increments: entitlementPool.increments,
operationalScope: getValue(entitlementPool.operationalScope),
time: entitlementPool.time,
@@ -66,39 +64,39 @@
return RestAPIUtil.destroy(`${baseUrl(licenseModelId, version)}/${entitlementPoolId}`);
}
-function fetchLimitsList(licenseModelId, entitlementPoolId, version) {
+function fetchLimitsList(licenseModelId, entitlementPoolId, version) {
return RestAPIUtil.fetch(`${baseUrl(licenseModelId, version)}/${entitlementPoolId}/limits`);
}
-function deleteLimit(licenseModelId, entitlementPoolId, version, limitId) {
+function deleteLimit(licenseModelId, entitlementPoolId, version, limitId) {
return RestAPIUtil.destroy(`${baseUrl(licenseModelId, version)}/${entitlementPoolId}/limits/${limitId}`);
}
-function postLimit(licenseModelId, entitlementPoolId, version, limit) {
+function postLimit(licenseModelId, entitlementPoolId, version, limit) {
return RestAPIUtil.post(`${baseUrl(licenseModelId, version)}/${entitlementPoolId}/limits`, {
name: limit.name,
type: limit.type,
description: limit.description,
- metric: limit.metric,
+ metric: getStrValue(limit.metric),
value: limit.value,
- unit: limit.unit,
+ unit: getStrValue(limit.unit),
aggregationFunction: getValue(limit.aggregationFunction),
time: getValue(limit.time)
});
}
function putLimit(licenseModelId, entitlementPoolId, version, limit) {
-
+
return RestAPIUtil.put(`${baseUrl(licenseModelId, version)}/${entitlementPoolId}/limits/${limit.id}`, {
name: limit.name,
type: limit.type,
description: limit.description,
- metric: limit.metric,
+ metric: getStrValue(limit.metric),
value: limit.value,
- unit: limit.unit,
+ unit: getStrValue(limit.unit),
aggregationFunction: getValue(limit.aggregationFunction),
time: getValue(limit.time)
- });
+ });
}
export default {
@@ -191,10 +189,10 @@
type: entitlementPoolsActionTypes.entitlementPoolsEditor.LIMITS_LIST_LOADED,
response
});
- });
+ });
},
- submitLimit(dispatch, {licenseModelId, version, entitlementPool, limit}) {
+ submitLimit(dispatch, {licenseModelId, version, entitlementPool, limit}) {
const propmise = limit.id ? putLimit(licenseModelId,entitlementPool.id, version, limit)
: postLimit(licenseModelId,entitlementPool.id, version, limit);
return propmise.then(() => {
@@ -202,12 +200,12 @@
type: limitEditorActions.CLOSE
});
this.fetchLimits(dispatch, {licenseModelId, version, entitlementPool});
- });
+ });
},
- deleteLimit(dispatch, {licenseModelId, version, entitlementPool, limit}) {
+ deleteLimit(dispatch, {licenseModelId, version, entitlementPool, limit}) {
return deleteLimit(licenseModelId,entitlementPool.id, version, limit.id).then(() => {
- this.fetchLimits(dispatch, {licenseModelId, version, entitlementPool});
- });
+ this.fetchLimits(dispatch, {licenseModelId, version, entitlementPool});
+ });
}
};
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupListEditorView.jsx b/openecomp-ui/src/sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupListEditorView.jsx
index 9844290..497c29d 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupListEditorView.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupListEditorView.jsx
@@ -97,24 +97,23 @@
<div className='text name'>{name}</div>
</div>
- <div className='list-editor-item-view-field'>
+ <div className='list-editor-item-view-field smaller-field'>
<div className='feature-groups-count-field'>
- <div className='title'>{i18n('Entitlement')}</div>
- <div className='title'>{i18n('Pools')}</div>
+ <div className='title'>{i18n('EP')}</div>
<div className='feature-groups-count-ep'>{entitlementPoolsIds.length || 0}</div>
</div>
+ </div>
+ <div className='list-editor-item-view-field smaller-field'>
<div className='feature-groups-count-field'>
- <div className='title'>{i18n('License key')}</div>
- <div className='title'>{i18n('Groups')}</div>
+ <div className='title'>{i18n('LKG')}</div>
<div className='feature-groups-count-lk'>{licenseKeyGroupsIds.length || 0}</div>
</div>
</div>
<div className='list-editor-item-view-field'>
<div className='feature-groups-count-field'>
- <div className='title'>{i18n('Manufacturer Reference')}</div>
- <div className='title'>{i18n('Number')}</div>
- <div className='feature-groups-count-ep'>{manufacturerReferenceNumber}</div>
+ <div className='title title-no-wrap'>{i18n('Manufacturer Reference Number')}</div>
+ <div className='feature-groups-mrn-ep'>{manufacturerReferenceNumber}</div>
</div>
</div>
@@ -122,8 +121,8 @@
<div className='title'>{i18n('Description')}</div>
<div className='text description'>{description}</div>
</div>
-
-
+
+
</ListEditorItemView>
);
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsActionHelper.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsActionHelper.js
index f5017f6..f22080a 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsActionHelper.js
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsActionHelper.js
@@ -18,7 +18,7 @@
import {actionTypes as licenseKeyGroupsConstants} from './LicenseKeyGroupsConstants.js';
import LicenseModelActionHelper from 'sdc-app/onboarding/licenseModel/LicenseModelActionHelper.js';
import {actionTypes as limitEditorActions} from 'sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js';
-import getValue from 'nfvo-utils/getValue.js';
+import {default as getValue, getStrValue} from 'nfvo-utils/getValue.js';
function baseUrl(licenseModelId, version) {
const restPrefix = Configuration.get('restPrefix');
@@ -75,9 +75,9 @@
name: limit.name,
type: limit.type,
description: limit.description,
- metric: limit.metric,
+ metric: getStrValue(limit.metric),
value: limit.value,
- unit: limit.unit,
+ unit: getStrValue(limit.unit),
aggregationFunction: getValue(limit.aggregationFunction),
time: getValue(limit.time)
});
@@ -89,9 +89,9 @@
name: limit.name,
type: limit.type,
description: limit.description,
- metric: limit.metric,
+ metric: getStrValue(limit.metric),
value: limit.value,
- unit: limit.unit,
+ unit: getStrValue(limit.unit),
aggregationFunction: getValue(limit.aggregationFunction),
time: getValue(limit.time)
});
@@ -181,8 +181,8 @@
dispatch({
type: licenseKeyGroupsConstants.licenseKeyGroupsEditor.LIMITS_LIST_LOADED,
response
- });
- });
+ });
+ });
},
submitLimit(dispatch, {licenseModelId, version, licenseKeyGroup, limit}) {
@@ -193,13 +193,13 @@
type: limitEditorActions.CLOSE
});
this.fetchLimits(dispatch, {licenseModelId, version, licenseKeyGroup});
- });
+ });
},
deleteLimit(dispatch, {licenseModelId, version, licenseKeyGroup, limit}) {
return deleteLimit(licenseModelId,licenseKeyGroup.id, version, limit.id).then(() => {
this.fetchLimits(dispatch, {licenseModelId, version, licenseKeyGroup});
- });
+ });
}
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditor.jsx b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditor.jsx
index f70f917..5c4e50d 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditor.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditor.jsx
@@ -7,16 +7,24 @@
import {LIMITS_FORM_NAME, selectValues} from './LimitEditorConstants.js';
import Button from 'sdc-ui/lib/react/Button.js';
import Validator from 'nfvo-utils/Validator.js';
+import {other as optionInputOther} from 'nfvo-components/input/inputOptions/InputOptions.jsx';
+import InputOptions from 'nfvo-components/input/validation/InputOptions.jsx';
const LimitPropType = React.PropTypes.shape({
id: React.PropTypes.string,
name: React.PropTypes.string,
description: React.PropTypes.string,
- metric: React.PropTypes.string,
- value: React.PropTypes.number,
+ metric: React.PropTypes.shape({
+ choice: React.PropTypes.string,
+ other: React.PropTypes.string
+ }),
+ value: React.PropTypes.string,
aggregationFunction: React.PropTypes.string,
time: React.PropTypes.string,
- unit: React.PropTypes.number
+ unit: React.PropTypes.shape({
+ choice: React.PropTypes.string,
+ other: React.PropTypes.string
+ })
});
class LimitEditor extends React.Component {
@@ -33,8 +41,8 @@
onCancel: React.PropTypes.func.isRequired
};
- componentDidUpdate(prevProps) {
- if (this.props.formReady && this.props.formReady !== prevProps.formReady) {
+ componentDidUpdate(prevProps) {
+ if (this.props.formReady && this.props.formReady !== prevProps.formReady) {
this.submit();
}
}
@@ -44,21 +52,21 @@
let {name, description, metric, value, aggregationFunction, time, unit} = data;
return (
<div className='limit-editor'>
- {!data.id &&
+ {!data.id &&
<div className='limit-editor-title'>
{data.name ? data.name : i18n('NEW LIMIT')}
</div>}
{
- genericFieldInfo &&
+ genericFieldInfo &&
<Form
ref='validationForm'
- hasButtons={false}
+ hasButtons={false}
isValid={isFormValid}
formReady={formReady}
onValidateForm={() => onValidateForm(LIMITS_FORM_NAME) }
labledButtons={false}
isReadOnlyMode={isReadOnlyMode}
- className='limit-editor-form'>
+ className='limit-editor-form'>
<GridSection className='limit-editor-form-grid-section'>
<GridItem colSpan={2}>
<Input
@@ -83,24 +91,23 @@
type='text'/>
</GridItem>
<GridItem colSpan={2}>
- <Input
- onChange={e => {
- const selectedIndex = e.target.selectedIndex;
- const val = e.target.options[selectedIndex].value;
- onDataChanged({metric: val}, LIMITS_FORM_NAME);}
- }
+ <InputOptions
+ onInputChange={()=>{}}
+ isMultiSelect={false}
isRequired={true}
- value={metric}
+ onEnumChange={metric => onDataChanged({metric:{choice: metric, other: ''}},
+ LIMITS_FORM_NAME, {metric: this.validateChoiceWithOther})}
+ onOtherChange={metric => onDataChanged({metric:{choice: optionInputOther.OTHER,
+ other: metric}}, LIMITS_FORM_NAME, {metric: this.validateChoiceWithOther})}
label={i18n('Metric')}
data-test-id='limit-editor-metric'
+ type='select'
+ required={true}
+ selectedEnum={metric && metric.choice}
+ otherValue={metric && metric.other}
+ values={selectValues.METRIC}
isValid={genericFieldInfo.metric.isValid}
- errorText={genericFieldInfo.metric.errorText}
- groupClassName='bootstrap-input-options'
- className='input-options-select'
- type='select' >
- {selectValues.METRIC.map(mtype =>
- <option key={mtype.enum} value={mtype.enum}>{`${mtype.title}`}</option>)}
- </Input>
+ errorText={genericFieldInfo.metric.errorText} />
</GridItem>
<GridItem>
<Input
@@ -111,22 +118,30 @@
isValid={genericFieldInfo.value.isValid}
errorText={genericFieldInfo.value.errorText}
isRequired={true}
- type='number'/>
+ type='text'/>
</GridItem>
<GridItem>
- <Input
- onChange={unit => onDataChanged({unit}, LIMITS_FORM_NAME)}
+ <InputOptions
+ onInputChange={()=>{}}
+ isMultiSelect={false}
+ isRequired={false}
+ onEnumChange={unit => onDataChanged({unit:{choice: unit, other: ''}},
+ LIMITS_FORM_NAME)}
+ onOtherChange={unit => onDataChanged({unit:{choice: optionInputOther.OTHER,
+ other: unit}}, LIMITS_FORM_NAME)}
label={i18n('Units')}
data-test-id='limit-editor-units'
- value={unit}
+ type='select'
+ required={false}
+ selectedEnum={unit && unit.choice}
+ otherValue={unit && unit.other}
+ values={selectValues.UNIT}
isValid={genericFieldInfo.unit.isValid}
- errorText={genericFieldInfo.unit.errorText}
- isRequired={false}
- type='number'/>
+ errorText={genericFieldInfo.unit.errorText} />
</GridItem>
<GridItem colSpan={2}>
<Input
- onChange={e => {
+ onChange={e => {
const selectedIndex = e.target.selectedIndex;
const val = e.target.options[selectedIndex].value;
onDataChanged({aggregationFunction: val}, LIMITS_FORM_NAME);}
@@ -145,7 +160,7 @@
</GridItem>
<GridItem>
<Input
- onChange={e => {
+ onChange={e => {
const selectedIndex = e.target.selectedIndex;
const val = e.target.options[selectedIndex].value;
onDataChanged({time: val}, LIMITS_FORM_NAME);}
@@ -160,15 +175,15 @@
type='select' >
{selectValues.TIME.map(mtype =>
<option key={mtype.enum} value={mtype.enum}>{`${mtype.title}`}</option>)}
- </Input>
+ </Input>
</GridItem>
</GridSection>
<GridSection className='limit-editor-buttons'>
- <Button btnType='outline' disabled={!isFormValid} onClick={() => this.submit()} type='reset'>{i18n('Save')}</Button>
+ <Button btnType='outline' disabled={!isFormValid} onClick={() => this.submit()} type='reset'>{i18n('Save')}</Button>
<Button btnType='outline' color='gray' onClick={onCancel} type='reset'>{i18n('Cancel')}</Button>
- </GridSection>
- </Form>
- }
+ </GridSection>
+ </Form>
+ }
</div>
);
}
@@ -181,6 +196,24 @@
{isValid: false, errorText: i18n('Limit by the name \'' + value + '\' already exists. Limit name must be unique')};
}
+ validateChoiceWithOther(value) {
+ let chosen = value.choice;
+ // if we have an empty multiple select we have a problem since it's required
+ if (value.choices) {
+ if (value.choices.length === 0) {
+ return Validator.validate('field', '', [{type: 'required', data: true}]);
+ } else {
+ // continuing validation with the first chosen value in case we have the 'Other' field
+ chosen = value.choices[0];
+ }
+ }
+ if (chosen !== optionInputOther.OTHER) {
+ return Validator.validate('field', chosen, [{type: 'required', data: true}]);
+ } else { // when 'Other' was chosen, validate other value
+ return Validator.validate('field', value.other, [{type: 'required', data: true}]);
+ }
+ }
+
submit() {
if (!this.props.formReady) {
this.props.onValidateForm(LIMITS_FORM_NAME);
@@ -190,4 +223,4 @@
}
}
-export default LimitEditor;
\ No newline at end of file
+export default LimitEditor;
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorActionHelper.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorActionHelper.js
index 09c64ad..8ac845a 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorActionHelper.js
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorActionHelper.js
@@ -14,17 +14,41 @@
* permissions and limitations under the License.
*/
-import {actionTypes} from './LimitEditorConstants.js';
+import {actionTypes, selectValues} from './LimitEditorConstants.js';
+import {other as optionInputOther} from 'nfvo-components/input/validation/InputOptions.jsx';
const LimitEditorActionHelper = {
openLimitsEditor(dispatch, {limit}) {
- dispatch({type: actionTypes.OPEN, limitItem: limit});
+ let modifiedLimit = {...limit};
+ if (limit && limit.metric) {
+ modifiedLimit.metric = LimitEditorActionHelper.createChoiceObject(modifiedLimit.metric, selectValues.METRIC);
+ }
+ if (limit && limit.unit) {
+ modifiedLimit.unit = LimitEditorActionHelper.createChoiceObject(modifiedLimit.unit, selectValues.UNIT);
+ }
+ dispatch({type: actionTypes.OPEN, limitItem: modifiedLimit});
},
closeLimitsEditor(dispatch) {
dispatch({type: actionTypes.CLOSE});
+ },
+
+ createChoiceObject(value, optionsList) {
+ let option = optionsList.find(function(item) { return item.enum === value; });
+ if (!option) {
+ return {
+ choice: optionInputOther.OTHER,
+ other: value
+ };
+ }
+ else {
+ return {
+ choice: value,
+ other: ''
+ };
+ }
}
};
-export default LimitEditorActionHelper;
\ No newline at end of file
+export default LimitEditorActionHelper;
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js
index 1bef286..9829e69 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorConstants.js
@@ -13,18 +13,25 @@
export const selectValues = {
METRIC: [
{enum: '', title: i18n('please select…')},
- {enum: 'Software_Instances_Count', title: 'Software Instances'},
- {enum: 'Core', title: 'Core'},
- {enum: 'CPU', title: 'CPU'},
- {enum: 'Trunks', title: 'Trunks'},
- {enum: 'User', title: 'User'},
- {enum: 'Subscribers', title: 'Subscribers'},
- {enum: 'Tenants', title: 'Tenants'},
- {enum: 'Tokens', title: 'Tokens'},
- {enum: 'Seats', title: 'Seats'},
- {enum: 'Units_TB', title: 'Units-TB'},
- {enum: 'Units_GB', title: 'Units-GB'},
- {enum: 'Units_MB', title: 'Units-MB'}
+ {enum: 'BWTH', title: 'BWTH'},
+ {enum: 'Country', title: 'Country'},
+ {enum: 'Session', title: 'Session'},
+ {enum: 'LoB', title: 'LoB'},
+ {enum: 'Site', title: 'Site'},
+ {enum: 'Usage', title: 'Usage'}
+ ],
+ UNIT: [
+ {enum: '', title: i18n('please select…')},
+ {enum: 'trunk', title: 'Trunks'},
+ {enum: 'user', title: 'Users'},
+ {enum: 'subscriber', title: 'Subscribers'},
+ {enum: 'session', title: 'Sessions'},
+ {enum: 'tenant', title: 'Tenants'},
+ {enum: 'token', title: 'Tokens'},
+ {enum: 'seats', title: 'Seats'},
+ {enum: 'TB', title: 'TB'},
+ {enum: 'GB', title: 'GB'},
+ {enum: 'MB', title: 'MB'}
],
AGGREGATION_FUNCTION: [
{enum: '', title: i18n('please select…')},
@@ -33,11 +40,14 @@
],
TIME: [
{enum: '', title: i18n('please select…')},
- {enum: 'Hour', title: 'Hour'},
{enum: 'Day', title: 'Day'},
- {enum: 'Month', title: 'Month'}
+ {enum: 'Month', title: 'Month'},
+ {enum: 'Hour', title: 'Hour'},
+ {enum: 'Minute', title: 'Minute'},
+ {enum: 'Second', title: 'Second'},
+ {enum: 'Milli-Second', title: 'Milli-Second'}
]
-
+
};
export const limitType = {
@@ -46,7 +56,9 @@
};
export const defaultState = {
- LIMITS_EDITOR_DATA: {}
+ LIMITS_EDITOR_DATA: {
+ metric: {choice: '', other: ''},
+ }
};
-export const NEW_LIMIT_TEMP_ID = 'NEW_LIMIT_TEMP_ID';
\ No newline at end of file
+export const NEW_LIMIT_TEMP_ID = 'NEW_LIMIT_TEMP_ID';
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorReducer.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorReducer.js
index 2499093..de9e7c8 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorReducer.js
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/LimitEditorReducer.js
@@ -20,7 +20,7 @@
switch (action.type) {
case actionTypes.OPEN:
return {
- ...state,
+ ...state,
data: action.limitItem ? {...action.limitItem} : defaultState.LIMITS_EDITOR_DATA,
formReady: null,
formName: LIMITS_FORM_NAME,
@@ -38,17 +38,17 @@
'metric' : {
isValid: true,
errorText: '',
- validations: [{type: 'required', data: true}]
+ validations: []
},
'value' : {
isValid: true,
errorText: '',
- validations: [{type: 'required', data: true}, {type: 'numeric', data: true}, {type: 'minimum', data: 0}]
+ validations: [{type: 'required', data: true}]
},
'unit' : {
isValid: true,
errorText: '',
- validations: [{type: 'numeric', data: true}]
+ validations: []
},
'aggregationFunction' : {
isValid: true,
@@ -67,4 +67,4 @@
default:
return state;
}
-};
\ No newline at end of file
+};
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/Limits.jsx b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/Limits.jsx
index ec5a1df..b144f63 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/Limits.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/limits/Limits.jsx
@@ -17,40 +17,43 @@
import i18n from 'nfvo-utils/i18n/i18n.js';
import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx';
import ListEditorItemView from 'nfvo-components/listEditor/ListEditorItemView.jsx';
-import LimitEditor from './LimitEditor.js';
+import LimitEditor from './LimitEditor.js';
import {NEW_LIMIT_TEMP_ID, selectValues} from './LimitEditorConstants.js';
const LimitItem = ({isReadOnlyMode, limit, onDelete, onSelect}) => {
- const {name, description, metric, value, aggregationFunction = '', time = ''} = limit;
+ const {name, description, value, metric, aggregationFunction = '', time = ''} = limit;
const timeLabel = time ? `per ${time}` : '';
+ let metricOption = selectValues.METRIC.find(item => item.enum === metric);
+ metricOption = metricOption ? metricOption.title : metric;
+
return (
- <ListEditorItemView
+ <ListEditorItemView
onDelete={onDelete}
onSelect={onSelect}
isReadOnlyMode={isReadOnlyMode}>
- <div className='list-editor-item-view-field limit-name'>
+ <div className='list-editor-item-view-field limit-name'>
<div className='text name'>{name}</div>
</div>
- <div className='list-editor-item-view-field limit-description'>
+ <div className='list-editor-item-view-field limit-description'>
<div className='text description'>{description}</div>
</div>
- <div className='list-editor-item-view-field limit-metric-details'>
- <div className='text description'>{`${selectValues.METRIC.find(item => item.enum === metric).title} ${value} ${aggregationFunction} ${timeLabel}`}</div>
- </div>
+ <div className='list-editor-item-view-field limit-metric-details'>
+ <div className='text description'>{`${metricOption} ${value} ${aggregationFunction} ${timeLabel}`}</div>
+ </div>
</ListEditorItemView>
);
};
class Limits extends React.Component {
-
+
state = {
localFilter: ''
};
- render() {
+ render() {
const {isReadOnlyMode = false, limitEditor, limitsList = [], onCloseLimitEditor, selectedLimit} = this.props;
let limitsNames = {};
for (let i = 0; i < limitsList.length; i++) {
@@ -66,26 +69,26 @@
{limitsList.length === 0 && !limitEditor.data && <div className='no-limits-text'>{i18n('There are no limits')}</div>}
{limitsList.map(limit =>
<div key={limit.id} className='limit-item-wrapper'>
- <LimitItem
- onDelete={() => this.delete(limit)}
+ <LimitItem
+ onDelete={() => this.deleteLimit(limit)}
onSelect={selectedLimit ? undefined : () => this.props.onSelectLimit(limit)}
- clickable={!selectedLimit}
- isReadOnlyMode={isReadOnlyMode}
+ clickable={!selectedLimit}
+ isReadOnlyMode={isReadOnlyMode}
limit={limit}/>
{limit.id === selectedLimit && limitEditor.data && <LimitEditor limitsNames={limitsNames} onCancel={onCloseLimitEditor} onSubmit={ () => this.submit()}/>}
</div> )}
</ListEditorView>
-
+
</div>
);
}
submit() {
- let {onSubmit, onCloseLimitEditor, parent, limitEditor, licenseModelId, version, limitType} = this.props;
+ let {onSubmit, onCloseLimitEditor, parent, limitEditor, licenseModelId, version, limitType} = this.props;
onSubmit({type: limitType, ...limitEditor.data}, parent, licenseModelId, version).then(() => onCloseLimitEditor());
}
- delete(limit) {
+ deleteLimit(limit) {
let {onDelete, parent, licenseModelId, version, onCloseLimitEditor, selectedLimit} = this.props;
onDelete({limit, parent, licenseModelId, version, onCloseLimitEditor, selectedLimit});
}
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/LicenseModelDescriptionEdit.jsx b/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/LicenseModelDescriptionEdit.jsx
index 0c0103f..9232402 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/LicenseModelDescriptionEdit.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/LicenseModelDescriptionEdit.jsx
@@ -18,6 +18,7 @@
class LicenseModelDescriptionEdit extends React.Component {
render() {
+ //TODO check if buttons
let {onDataChanged, description, genericFieldInfo} = this.props;
let saveButtonClassName = (genericFieldInfo.description.isValid) ? 'description-save' : 'description-save disabled';
return(
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/SummaryCountItem.jsx b/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/SummaryCountItem.jsx
index 66f2cc6..6ec84e1 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/SummaryCountItem.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/SummaryCountItem.jsx
@@ -14,15 +14,17 @@
* permissions and limitations under the License.
*/
import React from 'react';
+import SVGIcon from 'sdc-ui/lib/react/SVGIcon.js';
function SummaryCountItem ({name, counter, onAdd, onNavigate, isReadOnlyMode}) {
+ //TODO check for buttons
return(
<div className='summary-count-item'>
<div className='summary-name-and-count' onClick={onNavigate}>
<span className='item-name' onClick={onNavigate}>{name}</span>
<span className='item-count' onClick={onNavigate} data-test-id={'vlm-summary-vendor-counter-' + name.toLowerCase().replace(/\s/g,'-')}>({counter})</span>
</div>
- <div className={isReadOnlyMode ? 'add-button disabled' : 'add-button'} onClick={onAdd} data-test-id={'vlm-summary-vendor-add-btn-' + name.toLowerCase().replace(/\s/g,'-')}/>
+ <SVGIcon name='plusCircle' disabled={isReadOnlyMode} color='secondary' onClick={onAdd} data-test-id={'vlm-summary-vendor-add-btn-' + name.toLowerCase().replace(/\s/g,'-')}/>
</div>
);
}
diff --git a/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/VendorDataView.js b/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/VendorDataView.js
index 8755990..deb4550 100644
--- a/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/VendorDataView.js
+++ b/openecomp-ui/src/sdc-app/onboarding/licenseModel/overview/summary/VendorDataView.js
@@ -18,6 +18,7 @@
import Tooltip from 'react-bootstrap/lib/Tooltip.js';
import OverlayTrigger from 'react-bootstrap/lib/OverlayTrigger.js';
+import SVGIcon from 'sdc-ui/lib/react/SVGIcon.js';
import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
import licenseModelOverviewActionHelper from '../licenseModelOverviewActionHelper.js';
import LicenseModelActionHelper from '../../LicenseModelActionHelper.js';
@@ -70,6 +71,7 @@
{this.renderOverlay(
<div className='description-data' data-test-id='vlm-summary-vendor-description'>
{description}
+ <SVGIcon name='pencil'/>
</div>
)}
</div>