diff --git a/.changeset/legal-cameras-lose.md b/.changeset/legal-cameras-lose.md
new file mode 100644
index 00000000..42091202
--- /dev/null
+++ b/.changeset/legal-cameras-lose.md
@@ -0,0 +1,5 @@
+---
+'@smartcontractkit/operator-ui': minor
+---
+
+New checkbox to use gRPC transport for External Adapters
diff --git a/src/components/Form/BridgeForm.test.tsx b/src/components/Form/BridgeForm.test.tsx
index 485d503d..402afcf9 100644
--- a/src/components/Form/BridgeForm.test.tsx
+++ b/src/components/Form/BridgeForm.test.tsx
@@ -15,6 +15,7 @@ describe('BridgeForm', () => {
url: '',
minimumContractPayment: '0',
confirmations: 0,
+ useConnectionManager: false,
}
render(
@@ -38,6 +39,7 @@ describe('BridgeForm', () => {
url: '',
minimumContractPayment: '0',
confirmations: 0,
+ useConnectionManager: false,
}
render(
@@ -59,6 +61,7 @@ describe('BridgeForm', () => {
url: '',
minimumContractPayment: '0',
confirmations: 0,
+ useConnectionManager: false,
}
render(
@@ -92,9 +95,45 @@ describe('BridgeForm', () => {
url: 'https://www.test.com',
minimumContractPayment: '1',
confirmations: 2,
+ useConnectionManager: false,
},
expect.anything(),
),
)
})
+
+ it('submits useConnectionManager when checked', async () => {
+ const handleSubmit = jest.fn()
+ const initialValues: FormValues = {
+ name: '',
+ url: '',
+ minimumContractPayment: '0',
+ confirmations: 0,
+ useConnectionManager: false,
+ }
+
+ render(
+ ,
+ )
+
+ userEvent.type(getByRole('textbox', { name: /name */i }), 'bridge1')
+ userEvent.type(
+ getByRole('textbox', { name: /bridge url */i }),
+ 'https://www.test.com',
+ )
+ userEvent.click(getByRole('checkbox', { name: /use grpc transport/i }))
+
+ userEvent.click(getByRole('button', { name: /submit/i }))
+
+ await waitFor(() =>
+ expect(handleSubmit).toHaveBeenCalledWith(
+ expect.objectContaining({ useConnectionManager: true }),
+ expect.anything(),
+ ),
+ )
+ })
})
diff --git a/src/components/Form/BridgeForm.tsx b/src/components/Form/BridgeForm.tsx
index 2c270252..1f9ed402 100644
--- a/src/components/Form/BridgeForm.tsx
+++ b/src/components/Form/BridgeForm.tsx
@@ -1,7 +1,10 @@
import React from 'react'
import { Field, Form, Formik, FormikHelpers } from 'formik'
-import { FormikTextField as TextField } from './FormikFields'
+import {
+ FormikTextField as TextField,
+ FormikCheckboxWithLabel as CheckboxWithLabel,
+} from './FormikFields'
import * as Yup from 'yup'
import Button from '@mui/material/Button'
@@ -12,6 +15,7 @@ export interface FormValues {
minimumContractPayment: string
confirmations: number
url: string
+ useConnectionManager: boolean
}
const ValidationSchema = Yup.object().shape({
@@ -105,6 +109,18 @@ export const BridgeForm = ({
+
+
+
+
+
+
+
+
+
)
diff --git a/src/screens/Bridge/BridgeView.tsx b/src/screens/Bridge/BridgeView.tsx
index eb82a6cb..47557df2 100644
--- a/src/screens/Bridge/BridgeView.tsx
+++ b/src/screens/Bridge/BridgeView.tsx
@@ -17,6 +17,7 @@ export const BRIDGE_PAYLOAD_FIELDS = gql`
confirmations
outgoingToken
minimumContractPayment
+ useConnectionManager
}
`
diff --git a/src/screens/Bridges/BridgeRow.test.tsx b/src/screens/Bridges/BridgeRow.test.tsx
index b4c0a6c7..67d8aa2b 100644
--- a/src/screens/Bridges/BridgeRow.test.tsx
+++ b/src/screens/Bridges/BridgeRow.test.tsx
@@ -36,6 +36,15 @@ describe('BridgeRow', () => {
expect(queryByText('http://bridge.com')).toBeInTheDocument()
expect(queryByText('1')).toBeInTheDocument()
expect(queryByText('0')).toBeInTheDocument()
+ expect(queryByText('No')).toBeInTheDocument()
+ })
+
+ it('renders gRPC transport as Yes when enabled', () => {
+ const bridge = buildBridge({ useConnectionManager: true })
+
+ renderComponent(bridge)
+
+ expect(queryByText('Yes')).toBeInTheDocument()
})
it('links to the row details', async () => {
diff --git a/src/screens/Bridges/BridgeRow.tsx b/src/screens/Bridges/BridgeRow.tsx
index 8503dc06..65db4735 100644
--- a/src/screens/Bridges/BridgeRow.tsx
+++ b/src/screens/Bridges/BridgeRow.tsx
@@ -33,6 +33,11 @@ export const BridgeRow = withStyles(tableStyles)(({
{bridge.minimumContractPayment}
+
+
+ {bridge.useConnectionManager ? 'Yes' : 'No'}
+
+
)
})
diff --git a/src/screens/Bridges/BridgesView.test.tsx b/src/screens/Bridges/BridgesView.test.tsx
index ef0042ed..445f65cd 100644
--- a/src/screens/Bridges/BridgesView.test.tsx
+++ b/src/screens/Bridges/BridgesView.test.tsx
@@ -40,6 +40,7 @@ describe('BridgesView', () => {
expect(queryByText('URL')).toBeInTheDocument()
expect(queryByText('Default Confirmations')).toBeInTheDocument()
expect(queryByText('Minimum Contract Payment')).toBeInTheDocument()
+ expect(queryByText('Use gRPC transport')).toBeInTheDocument()
expect(queryByText('bridge-api1')).toBeInTheDocument()
expect(queryByText('http://bridge1.com')).toBeInTheDocument()
diff --git a/src/screens/Bridges/BridgesView.tsx b/src/screens/Bridges/BridgesView.tsx
index 0044bbda..19b3fe29 100644
--- a/src/screens/Bridges/BridgesView.tsx
+++ b/src/screens/Bridges/BridgesView.tsx
@@ -24,6 +24,7 @@ export const BRIDGES_PAYLOAD__RESULTS_FIELDS = gql`
url
confirmations
minimumContractPayment
+ useConnectionManager
}
`
@@ -69,6 +70,7 @@ export const BridgesView: React.FC = ({
URL
Default Confirmations
Minimum Contract Payment
+ Use gRPC transport
diff --git a/src/screens/EditBridge/EditBridgeScreen.test.tsx b/src/screens/EditBridge/EditBridgeScreen.test.tsx
index e0043403..8516c593 100644
--- a/src/screens/EditBridge/EditBridgeScreen.test.tsx
+++ b/src/screens/EditBridge/EditBridgeScreen.test.tsx
@@ -58,6 +58,7 @@ describe('EditBridgeScreen', () => {
url: 'https://www.test.com',
minimumContractPayment: '1',
confirmations: 10,
+ useConnectionManager: false,
},
},
},
@@ -138,6 +139,7 @@ describe('EditBridgeScreen', () => {
url: bridge.url,
minimumContractPayment: bridge.minimumContractPayment,
confirmations: bridge.confirmations,
+ useConnectionManager: bridge.useConnectionManager,
},
},
},
@@ -177,6 +179,7 @@ describe('EditBridgeScreen', () => {
url: bridge.url,
minimumContractPayment: bridge.minimumContractPayment,
confirmations: bridge.confirmations,
+ useConnectionManager: bridge.useConnectionManager,
},
},
},
diff --git a/src/screens/EditBridge/EditBridgeView.test.tsx b/src/screens/EditBridge/EditBridgeView.test.tsx
index 640fa6f3..5db8f6fa 100644
--- a/src/screens/EditBridge/EditBridgeView.test.tsx
+++ b/src/screens/EditBridge/EditBridgeView.test.tsx
@@ -38,6 +38,7 @@ describe('EditBridgeView', () => {
url: 'http://bridge.com',
minimumContractPayment: '0',
confirmations: 1,
+ useConnectionManager: false,
})
})
diff --git a/src/screens/EditBridge/EditBridgeView.tsx b/src/screens/EditBridge/EditBridgeView.tsx
index bec8914a..2f330c4f 100644
--- a/src/screens/EditBridge/EditBridgeView.tsx
+++ b/src/screens/EditBridge/EditBridgeView.tsx
@@ -20,6 +20,7 @@ export const EditBridgeView: React.FC = ({ bridge, onSubmit }) => {
url: bridge.url,
minimumContractPayment: bridge.minimumContractPayment,
confirmations: bridge.confirmations,
+ useConnectionManager: bridge.useConnectionManager,
}
return (
diff --git a/src/screens/NewBridge/NewBridgeScreen.test.tsx b/src/screens/NewBridge/NewBridgeScreen.test.tsx
index f9f296af..8d883726 100644
--- a/src/screens/NewBridge/NewBridgeScreen.test.tsx
+++ b/src/screens/NewBridge/NewBridgeScreen.test.tsx
@@ -37,6 +37,7 @@ describe('NewBridgeScreen', () => {
url: 'https://www.test.com',
minimumContractPayment: '0',
confirmations: 0,
+ useConnectionManager: false,
},
},
},
@@ -84,6 +85,7 @@ describe('NewBridgeScreen', () => {
url: 'https://www.test.com',
minimumContractPayment: '0',
confirmations: 0,
+ useConnectionManager: false,
},
},
},
diff --git a/src/screens/NewBridge/NewBridgeView.test.tsx b/src/screens/NewBridge/NewBridgeView.test.tsx
index e06d6ac1..9f2c6aa5 100644
--- a/src/screens/NewBridge/NewBridgeView.test.tsx
+++ b/src/screens/NewBridge/NewBridgeView.test.tsx
@@ -18,6 +18,7 @@ describe('NewBridgeView', () => {
url: '',
minimumContractPayment: '0',
confirmations: 0,
+ useConnectionManager: false,
})
})
})
diff --git a/src/screens/NewBridge/NewBridgeView.tsx b/src/screens/NewBridge/NewBridgeView.tsx
index ca8fe7e6..76964239 100644
--- a/src/screens/NewBridge/NewBridgeView.tsx
+++ b/src/screens/NewBridge/NewBridgeView.tsx
@@ -13,6 +13,7 @@ const initialValues = {
url: '',
minimumContractPayment: '0',
confirmations: 0,
+ useConnectionManager: false,
}
type Props = Pick
diff --git a/support/factories/gql/fetchBridge.ts b/support/factories/gql/fetchBridge.ts
index ad5f8614..be890679 100644
--- a/support/factories/gql/fetchBridge.ts
+++ b/support/factories/gql/fetchBridge.ts
@@ -10,6 +10,7 @@ export function buildBridgePayloadFields(
confirmations: 1,
minimumContractPayment: '0',
outgoingToken: 'outgoing1',
+ useConnectionManager: false,
...overrides,
}
}
diff --git a/support/factories/gql/fetchBridges.ts b/support/factories/gql/fetchBridges.ts
index c61d6124..49c47e7c 100644
--- a/support/factories/gql/fetchBridges.ts
+++ b/support/factories/gql/fetchBridges.ts
@@ -9,6 +9,7 @@ export function buildBridge(
url: 'http://bridge.com',
confirmations: 1,
minimumContractPayment: '0',
+ useConnectionManager: false,
...overrides,
}
}