From 82ddf1c954c35e46003420243f56cdd46132234d Mon Sep 17 00:00:00 2001 From: Jonathan Thorpe Date: Wed, 25 Feb 2026 11:02:37 +0000 Subject: [PATCH 1/5] Initial add of MXL transport and transport parameters --- .../src/components/ParameterRegisters.js | 3 + Development/src/components/makeConnection.js | 3 + .../receivers/ReceiverTransportParams.js | 68 +++++++++++++++++++ .../pages/senders/SenderTransportParams.js | 68 +++++++++++++++++++ 4 files changed, 142 insertions(+) diff --git a/Development/src/components/ParameterRegisters.js b/Development/src/components/ParameterRegisters.js index a94c67c9..a2556833 100644 --- a/Development/src/components/ParameterRegisters.js +++ b/Development/src/components/ParameterRegisters.js @@ -175,4 +175,7 @@ export const TRANSPORTS = { 'urn:x-nmos:transport:websocket': { label: 'WebSocket', }, + 'urn:x-nmos:transport:mxl': { + label: 'MXL', + }, }; diff --git a/Development/src/components/makeConnection.js b/Development/src/components/makeConnection.js index abbc53d7..ab1f295d 100644 --- a/Development/src/components/makeConnection.js +++ b/Development/src/components/makeConnection.js @@ -26,6 +26,7 @@ const oneToOneTransportParams = { 'connection_authorization', 'connection_uri', ], + 'urn:x-nmos:transport:mxl': ['flow_id'], }; // create an array mapping receiver leg to sender leg @@ -140,6 +141,8 @@ const makePatchDataWithTransportParams = (data, options) => { break; case 'urn:x-nmos:transport:websocket': break; + case 'urn:x-nmos:transport:mxl': + break; default: break; } diff --git a/Development/src/pages/receivers/ReceiverTransportParams.js b/Development/src/pages/receivers/ReceiverTransportParams.js index ba201507..0c3c4ca0 100644 --- a/Development/src/pages/receivers/ReceiverTransportParams.js +++ b/Development/src/pages/receivers/ReceiverTransportParams.js @@ -416,6 +416,70 @@ const WebSocketReceiverEdit = ({ record }) => { ); }; +const MXLReceiver = ({ data }) => ( + + {Object.keys(data).map(i => ( + + + + ))} + +); + +const MXLReceiverLeg = ({ data }) => { + const params_ext = Object.keys(data).filter(x => x.startsWith('ext_')); + return ( + + + + {has(data, 'flow_id') && ( + + )} + {params_ext.length !== 0 && } + {params_ext.map(param => ( + + ))} + + + + ); +}; + +const MXLReceiverEdit = ({ record }) => { + const data = get(record, '$staged.transport_params'); + const uniqueKeys = Object.keys( + data.reduce((result, obj) => Object.assign(result, obj), {}) + ); + const params_ext = uniqueKeys.filter(x => x.startsWith('ext_')); + return ( + + + {uniqueKeys.includes('flow_id') && ( + + )} + {params_ext.length !== 0 && } + {params_ext.map(param => ( + + ))} + + + ); +}; + const ReceiverTransportParamsCardsGrid = ({ ids, record }) => { const type = get(record, '$transporttype'); const data = []; @@ -430,6 +494,8 @@ const ReceiverTransportParamsCardsGrid = ({ ids, record }) => { return ; case 'urn:x-nmos:transport:websocket': return ; + case 'urn:x-nmos:transport:mxl': + return ; default: return Unknown Type; } @@ -441,6 +507,8 @@ const ReceiverTransportParamsCardsGrid = ({ ids, record }) => { return ; case 'urn:x-nmos:transport:websocket': return ; + case 'urn:x-nmos:transport:mxl': + return ; default: return Unknown Type; } diff --git a/Development/src/pages/senders/SenderTransportParams.js b/Development/src/pages/senders/SenderTransportParams.js index ed329bf8..b4a05232 100644 --- a/Development/src/pages/senders/SenderTransportParams.js +++ b/Development/src/pages/senders/SenderTransportParams.js @@ -497,6 +497,70 @@ const WebSocketSenderEdit = ({ record }) => { ); }; +const MXLSender = ({ data }) => ( + + {Object.keys(data).map(i => ( + + + + ))} + +); + +const MXLSenderLeg = ({ data }) => { + const params_ext = Object.keys(data).filter(x => x.startsWith('ext_')); + return ( + + + + {has(data, 'flow_id') && ( + + )} + {params_ext.length !== 0 && } + {params_ext.map(param => ( + + ))} + + + + ); +}; + +const MXLSenderEdit = ({ record }) => { + const data = get(record, '$staged.transport_params'); + const uniqueKeys = Object.keys( + data.reduce((result, obj) => Object.assign(result, obj), {}) + ); + const params_ext = uniqueKeys.filter(x => x.startsWith('ext_')); + return ( + + + {uniqueKeys.includes('flow_id') && ( + + )} + {params_ext.length !== 0 && } + {params_ext.map(param => ( + + ))} + + + ); +}; + const SenderTransportParamsCardsGrid = ({ ids, record }) => { const type = get(record, '$transporttype'); const data = []; @@ -511,6 +575,8 @@ const SenderTransportParamsCardsGrid = ({ ids, record }) => { return ; case 'urn:x-nmos:transport:websocket': return ; + case 'urn:x-nmos:transport:mxl': + return ; default: return Unknown Type; } @@ -522,6 +588,8 @@ const SenderTransportParamsCardsGrid = ({ ids, record }) => { return ; case 'urn:x-nmos:transport:websocket': return ; + case 'urn:x-nmos:transport:mxl': + return ; default: return Unknown Type; } From 175d91ae464eb724d86f443c33acad89074814a9 Mon Sep 17 00:00:00 2001 From: Jonathan Thorpe Date: Wed, 25 Feb 2026 11:18:52 +0000 Subject: [PATCH 2/5] Prettier formatting --- Development/src/pages/receivers/ReceiverTransportParams.js | 5 +---- Development/src/pages/senders/SenderTransportParams.js | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Development/src/pages/receivers/ReceiverTransportParams.js b/Development/src/pages/receivers/ReceiverTransportParams.js index 0c3c4ca0..de309584 100644 --- a/Development/src/pages/receivers/ReceiverTransportParams.js +++ b/Development/src/pages/receivers/ReceiverTransportParams.js @@ -433,10 +433,7 @@ const MXLReceiverLeg = ({ data }) => { {has(data, 'flow_id') && ( - + )} {params_ext.length !== 0 && } {params_ext.map(param => ( diff --git a/Development/src/pages/senders/SenderTransportParams.js b/Development/src/pages/senders/SenderTransportParams.js index b4a05232..ce5401a8 100644 --- a/Development/src/pages/senders/SenderTransportParams.js +++ b/Development/src/pages/senders/SenderTransportParams.js @@ -514,10 +514,7 @@ const MXLSenderLeg = ({ data }) => { {has(data, 'flow_id') && ( - + )} {params_ext.length !== 0 && } {params_ext.map(param => ( From 4a6edcdcfef8ff11bf56aafc465be4f24b1a6b3f Mon Sep 17 00:00:00 2001 From: Jonathan Thorpe Date: Wed, 4 Mar 2026 15:27:45 +0000 Subject: [PATCH 3/5] Fix bug in dataProvider UPDATE request: handle empty strings as null for transport_params --- Development/src/dataProvider.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Development/src/dataProvider.js b/Development/src/dataProvider.js index fd525614..2470ad1f 100644 --- a/Development/src/dataProvider.js +++ b/Development/src/dataProvider.js @@ -667,8 +667,10 @@ const getConnectionResourceEndpoints = (addresses, resource, id) => { if (response.ok) { return response.text(); } + return null; }) .then(text => { + if (text === null) return null; try { return JSON.parse(text); } catch (e) { @@ -680,8 +682,10 @@ const getConnectionResourceEndpoints = (addresses, resource, id) => { [`$${endpoint.slice(0, -1)}`]: data, }); }) - .catch(error => { - throw error; + .catch(() => { + endpointData.push({ + [`$${endpoint.slice(0, -1)}`]: null, + }); }) ) ).then(() => { From f47733243a1fd6fd4bca7fd5f39d4fc7e375f7a2 Mon Sep 17 00:00:00 2001 From: Jonathan Thorpe Date: Tue, 5 May 2026 18:02:22 +0100 Subject: [PATCH 4/5] For MXL transport, flow-id -> mxl_flow_id and added mxl_domain_id --- Development/src/components/makeConnection.js | 2 +- .../pages/receivers/ReceiverTransportParams.js | 15 ++++++++++----- .../src/pages/senders/SenderTransportParams.js | 15 ++++++++++----- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/Development/src/components/makeConnection.js b/Development/src/components/makeConnection.js index ab1f295d..71a99076 100644 --- a/Development/src/components/makeConnection.js +++ b/Development/src/components/makeConnection.js @@ -26,7 +26,7 @@ const oneToOneTransportParams = { 'connection_authorization', 'connection_uri', ], - 'urn:x-nmos:transport:mxl': ['flow_id'], + 'urn:x-nmos:transport:mxl': ['mxl_domain_id', 'mxl_flow_id'], }; // create an array mapping receiver leg to sender leg diff --git a/Development/src/pages/receivers/ReceiverTransportParams.js b/Development/src/pages/receivers/ReceiverTransportParams.js index de309584..7ea3aeaa 100644 --- a/Development/src/pages/receivers/ReceiverTransportParams.js +++ b/Development/src/pages/receivers/ReceiverTransportParams.js @@ -432,8 +432,14 @@ const MXLReceiverLeg = ({ data }) => { - {has(data, 'flow_id') && ( - + {has(data, 'mxl_flow_id') && ( + + )} + {has(data, 'mxl_domain_id') && ( + )} {params_ext.length !== 0 && } {params_ext.map(param => ( @@ -461,9 +467,8 @@ const MXLReceiverEdit = ({ record }) => { source="$staged.transport_params" > - {uniqueKeys.includes('flow_id') && ( - - )} + + {params_ext.length !== 0 && } {params_ext.map(param => ( { - {has(data, 'flow_id') && ( - + {has(data, 'mxl_flow_id') && ( + + )} + {has(data, 'mxl_domain_id') && ( + )} {params_ext.length !== 0 && } {params_ext.map(param => ( @@ -542,9 +548,8 @@ const MXLSenderEdit = ({ record }) => { source="$staged.transport_params" > - {uniqueKeys.includes('flow_id') && ( - - )} + + {params_ext.length !== 0 && } {params_ext.map(param => ( Date: Wed, 6 May 2026 14:15:51 +0100 Subject: [PATCH 5/5] Domain before Flow except after... --- .../src/pages/receivers/ReceiverTransportParams.js | 8 ++++---- Development/src/pages/senders/SenderTransportParams.js | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Development/src/pages/receivers/ReceiverTransportParams.js b/Development/src/pages/receivers/ReceiverTransportParams.js index 7ea3aeaa..9fa6162b 100644 --- a/Development/src/pages/receivers/ReceiverTransportParams.js +++ b/Development/src/pages/receivers/ReceiverTransportParams.js @@ -432,15 +432,15 @@ const MXLReceiverLeg = ({ data }) => { - {has(data, 'mxl_flow_id') && ( - - )} {has(data, 'mxl_domain_id') && ( )} + {has(data, 'mxl_flow_id') && ( + + )} {params_ext.length !== 0 && } {params_ext.map(param => ( { source="$staged.transport_params" > - + {params_ext.length !== 0 && } {params_ext.map(param => ( { - {has(data, 'mxl_flow_id') && ( - - )} {has(data, 'mxl_domain_id') && ( )} + {has(data, 'mxl_flow_id') && ( + + )} {params_ext.length !== 0 && } {params_ext.map(param => ( { source="$staged.transport_params" > - + {params_ext.length !== 0 && } {params_ext.map(param => (