Commit af158134 authored by Kevin Di Lallo's avatar Kevin Di Lallo
Browse files

meep-frontend fixes for external port validation

parent 66e7d106
Loading
Loading
Loading
Loading
+28 −24
Original line number Diff line number Diff line
@@ -63,30 +63,34 @@ import {
  getElemFieldVal
} from '../../util/elem-utils';

import {
  pipe,
  filter,
  log
} from '../../util/functional';

const firstElementIfPresent = (val) => Array.isArray(val) ? (val.length ? val[0] : null) : val;
const notNull = x => x;
const extractPort = svcMapEntry => firstElementIfPresent(svcMapEntry.split(':'))
const extractPort = svcMapEntry => Number(firstElementIfPresent(svcMapEntry.split(':')))

const externalPorts = elem => {
  return getElemFieldVal(elem, FIELD_SVC_MAP)
    .split(',')
    .map(extractPort)
    .filter(notNull)
    .concat([getElemFieldVal(elem, FIELD_EXT_PORT)]
    .concat([Number(getElemFieldVal(elem, FIELD_EXT_PORT))]
    .filter(notNull));
}

const intersection = (a1, a2) => {
  let inter = [];
  a1.forEach((elem) => {
    if (_.includes(a2, elem)) {
      inter.push(elem)
    }
  });

  return inter;
const hasExtPortsInCommon = elem1 => elem2 => {
  const ports1 = externalPorts(elem1);
  const ports2 = externalPorts(elem2)
  const intersection = _.intersection(ports1, ports2);
  return intersection.length
};

const hasDifferentName = elem1 => elem2 => elem1.name.val != elem2.name.val;

class CfgPageContainer extends Component {
  constructor(props) {
    super(props);
@@ -198,13 +202,11 @@ class CfgPageContainer extends Component {
    const extPorts = externalPorts(element);

    if (extPorts.length) {
      const hasPortsInCommon = elem => {
        const ports = externalPorts(elem);
        const inter = intersection(extPorts, ports);
        const intersect = _.flatten(inter).filter(notNull);
        return intersect.length
      };
      const elemsWithSameExtPort = data.filter(hasPortsInCommon);
     
      const elemsWithSameExtPort = pipe(
        filter(hasDifferentName(element)),
        filter(hasExtPortsInCommon(element)),
      )(data);

      if (elemsWithSameExtPort.length) {
        const elemNames = elemsWithSameExtPort.map(e => e.id);
@@ -611,3 +613,5 @@ const ConnectedCfgPageContainer = connect(
)(CfgPageContainer);

export default ConnectedCfgPageContainer;

+12 −10
Original line number Diff line number Diff line
@@ -419,3 +419,5 @@ const ConnectedMeepContainer = connect(
)(MeepContainer);

export default ConnectedMeepContainer;

+14 −0
Original line number Diff line number Diff line
/*
 * Copyright (c) 2019
 * InterDigital Communications, Inc.
 * All rights reserved.
 *
 * The information provided herein is the proprietary and confidential
 * information of InterDigital Communications, Inc.
 */
export const pipe = (...fns) => val => fns.reduce((acc, f) => f(acc), val)
export const filter = fn => array => array.filter(fn);
export const log = label => val => {
    console.log(`${label}: `, val);
    return val;
}