diff --git a/cypress/e2e/console/gateways/create.spec.js b/cypress/e2e/console/gateways/create.spec.js
index b1fd349c80..b00762cb6c 100644
--- a/cypress/e2e/console/gateways/create.spec.js
+++ b/cypress/e2e/console/gateways/create.spec.js
@@ -190,7 +190,7 @@ describe('Gateway create', () => {
cy.findByLabelText('Gateway EUI').type(gateway.eui)
cy.findByRole('button', { name: 'Confirm' }).click()
cy.findByTestId('notification').should('be.visible')
- cy.findByLabelText('Owner token').type('12345')
+ cy.get('input[name="authenticated_identifiers.authentication_code"]').type('12345')
cy.findByLabelText('Gateway ID').type(`eui-${gateway.eui}`)
cy.findByText('Frequency plan')
.parents('div[data-test-id="form-field"]')
@@ -239,7 +239,7 @@ describe('Gateway create', () => {
cy.findByTestId('notification').should('be.visible')
cy.findByLabelText('Frequency plan').selectOption(gateway.frequency_plan)
cy.findByLabelText('Gateway ID').type(`eui-${gateway.eui}`)
- cy.findByLabelText('Owner token').type('12345')
+ cy.get('input[name="authenticated_identifiers.authentication_code"]').type('12345')
cy.findByRole('button', { name: 'Claim gateway' }).click()
cy.wait('@claim-request').its('request.body').should('deep.equal', expectedRequest)
cy.findByTestId('error-notification').should('not.exist')
diff --git a/pkg/webui/components/form/field/index.js b/pkg/webui/components/form/field/index.js
index 897449efbe..b6e920d5eb 100644
--- a/pkg/webui/components/form/field/index.js
+++ b/pkg/webui/components/form/field/index.js
@@ -77,6 +77,7 @@ const FormField = props => {
component: Component,
decode,
description,
+ descriptionValues,
disabled: inputDisabled,
encode,
fieldWidth,
@@ -92,6 +93,7 @@ const FormField = props => {
valueSetter,
onChange,
onBlur,
+ showTitle,
} = props
const {
@@ -222,7 +224,12 @@ const FormField = props => {
{lorawanVersion} does not support the {freqPlan} frequency plan. Please choose a different MAC version or frequency plan.',
@@ -507,7 +511,7 @@ export default defineMessages({
resetConfirm:
'Are you sure you want to discard QR code data? The scanned device will not be registered and the form will be reset.',
scanSuccess: 'QR code scanned successfully',
- scanGatewayQR: 'Scan gateway QR code',
+ scanGatewayQR: 'Gateway QR code',
redirecting: 'Redirecting…',
refresh: 'Refresh',
reactivateSuccess: 'Successfully reactivated',
diff --git a/pkg/webui/locales/en.json b/pkg/webui/locales/en.json
index 2479647307..1a7e43bd40 100644
--- a/pkg/webui/locales/en.json
+++ b/pkg/webui/locales/en.json
@@ -614,16 +614,21 @@
"console.containers.gateway-managed-gateway.wifi-profiles.overview.deleteSuccess": "WiFi profile deleted",
"console.containers.gateway-managed-gateway.wifi-profiles.overview.deleteFail": "There was an error and the WiFi profile could not be deleted",
"console.containers.gateway-managed-gateway.wifi-profiles.overview.deleteModalMessage": "The profile will not be applicable to gateways anymore and gateways using this profile might lose connectivity. Please make sure to update the gateway settings before deleting this profile.",
- "console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-claim-form-section.index.claimWarning": "We detected that your gateway is a Managed Gateway. To claim this gateway, please use the owner token printed on the inside of the mounting lid or scan the QR code to claim instantly.",
+ "console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-claim-form-section.index.claimWarning": "We detected a Managed gateway. To claim this gateway with a subscription, use the owner token printed on the gateway, or add it to your Gateway Fleet using your fleet owner token.",
+ "console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-claim-form-section.index.fleet": "Fleet",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-registration-form-section.index.requireAuthenticatedConnectionDescription": "Select which information can be seen by other network participants, including {packetBrokerURL}",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-registration-form-section.index.shareGatewayInfoDescription": "Choose this option eg. if your gateway is powered by {loraBasicStationURL}",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-registration-form-section.validation-schema.validateEntry": "There must be at least one selected frequency plan ID.",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.index.continue": "To continue, please confirm the Gateway EUI so we can determine onboarding options",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.index.emtyEui": "Continue without EUI",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.index.noEui": "No gateway EUI",
+ "console.containers.gateway-onboarding-form.qr-scan-section.fleets-scan.addFleet": "Add to Fleet",
+ "console.containers.gateway-onboarding-form.qr-scan-section.fleets-scan.fleetToken": "Fleet owner token",
+ "console.containers.gateway-onboarding-form.qr-scan-section.fleets-scan.addToFleetTooltip": "You are registering a Managed gateway. If you want to add it to an existing fleet, click here.",
"console.containers.gateway-onboarding-form.qr-scan-section.index.hasGatewayQR": "Does your gateway have a LoRaWAN® Gateway Identification QR Code? Scan it to speed up onboarding.",
"console.containers.gateway-onboarding-form.qr-scan-section.index.gatewayGuide": "Gateway registration help",
"console.containers.gateway-onboarding-form.qr-scan-section.index.invalidQRCode": "Invalid QR code data. Please note that only TTIGPRO1 Gateway Identification QR Code can be scanned. Some gateways have unrelated QR codes printed on them that cannot be used.",
+ "console.containers.gateway-onboarding-form.qr-scan-section.index.gatewayOwnerToken": "Gateway owner token",
"console.containers.gateway-overview-header.index.addBookmarkFail": "There was an error and the gateway could not be bookmarked",
"console.containers.gateway-overview-header.index.duplicateGateway": "Duplicate gateway",
"console.containers.gateway-overview-header.index.removeBookmarkFail": "There was an error and the gateway could not be removed from bookmarks",
@@ -1083,8 +1088,7 @@
"lib.errors.status-code-messages.503": "Service unavailable",
"lib.errors.status-code-messages.504": "Gateway timeout",
"lib.errors.utils.notFound": "Gateway doesn't exist. Please confirm that the gateway EUI is correct.",
- "lib.errors.utils.subscriptionNotActive": "There is no gateway subscription attached or active. Please get a Gateway Subscription or activate your subscription following the steps in the documentation and try again.",
- "lib.errors.utils.activationCodeExpired": "The activation code has expired. To reactivate it, extend your Gateway Subscription.",
+ "lib.errors.utils.subscriptionNotActive": "There is no gateway subscription attached or active. Please get a Gateway Subscription or activate your subscription following the steps in the documentation. If this gateway is part of a fleet, you should use a Fleet Owner Token during the registration process.",
"lib.errors.utils.permissionDenied": "The owner token is invalid.",
"lib.field-description-messages.idLocation": "Enter a value using lowercase letters, numbers, and dashes. You can choose this freely.",
"lib.field-description-messages.freqPlanDescription": "A frequency plan defines data rates that your end device or gateway is setup to use. It is important that gateways and end devices within reach use the same frequency plan to be able to communicate.",
@@ -1438,6 +1442,8 @@
"lib.shared-messages.fCnt": "FCnt",
"lib.shared-messages.fetching": "Fetching data…",
"lib.shared-messages.firmwareVersion": "Firmware version",
+ "lib.shared-messages.fleetInfo": "Adding a gateway to a Fleet will claim the gateway using an available Slot. Read docs.",
+ "lib.shared-messages.fleetTokenInfo": "Log in to your billing account. Select the fleet and copy the token.",
"lib.shared-messages.format": "Format",
"lib.shared-messages.fpNotFoundError": "The LoRaWAN version {lorawanVersion} does not support the {freqPlan} frequency plan. Please choose a different MAC version or frequency plan.",
"lib.shared-messages.fPort": "FPort",
@@ -1653,7 +1659,7 @@
"lib.shared-messages.qrCodeDataReset": "Reset QR code data",
"lib.shared-messages.resetConfirm": "Are you sure you want to discard QR code data? The scanned device will not be registered and the form will be reset.",
"lib.shared-messages.scanSuccess": "QR code scanned successfully",
- "lib.shared-messages.scanGatewayQR": "Scan gateway QR code",
+ "lib.shared-messages.scanGatewayQR": "Gateway QR code",
"lib.shared-messages.redirecting": "Redirecting…",
"lib.shared-messages.refresh": "Refresh",
"lib.shared-messages.reactivateSuccess": "Successfully reactivated",
diff --git a/pkg/webui/locales/ja.json b/pkg/webui/locales/ja.json
index 0f1b266e50..dc92705558 100644
--- a/pkg/webui/locales/ja.json
+++ b/pkg/webui/locales/ja.json
@@ -615,15 +615,20 @@
"console.containers.gateway-managed-gateway.wifi-profiles.overview.deleteFail": "",
"console.containers.gateway-managed-gateway.wifi-profiles.overview.deleteModalMessage": "",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-claim-form-section.index.claimWarning": "",
+ "console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-claim-form-section.index.fleet": "",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-registration-form-section.index.requireAuthenticatedConnectionDescription": "",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-registration-form-section.index.shareGatewayInfoDescription": "",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.gateway-registration-form-section.validation-schema.validateEntry": "",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.index.continue": "",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.index.emtyEui": "",
"console.containers.gateway-onboarding-form.gateway-provisioning-form.index.noEui": "",
+ "console.containers.gateway-onboarding-form.qr-scan-section.fleets-scan.addFleet": "",
+ "console.containers.gateway-onboarding-form.qr-scan-section.fleets-scan.fleetToken": "",
+ "console.containers.gateway-onboarding-form.qr-scan-section.fleets-scan.addToFleetTooltip": "",
"console.containers.gateway-onboarding-form.qr-scan-section.index.hasGatewayQR": "",
"console.containers.gateway-onboarding-form.qr-scan-section.index.gatewayGuide": "",
"console.containers.gateway-onboarding-form.qr-scan-section.index.invalidQRCode": "",
+ "console.containers.gateway-onboarding-form.qr-scan-section.index.gatewayOwnerToken": "",
"console.containers.gateway-overview-header.index.addBookmarkFail": "",
"console.containers.gateway-overview-header.index.duplicateGateway": "",
"console.containers.gateway-overview-header.index.removeBookmarkFail": "",
@@ -1084,7 +1089,6 @@
"lib.errors.status-code-messages.504": "",
"lib.errors.utils.notFound": "",
"lib.errors.utils.subscriptionNotActive": "",
- "lib.errors.utils.activationCodeExpired": "",
"lib.errors.utils.permissionDenied": "",
"lib.field-description-messages.idLocation": "",
"lib.field-description-messages.freqPlanDescription": "周波数プランは、エンドデバイスやゲートウェイが使用するように設定されたデータレートを定義します。ゲートウェイとエンドデバイスが通信できるようにするためには、同じ周波数プランを使用することが重要です",
@@ -1438,6 +1442,8 @@
"lib.shared-messages.fCnt": "",
"lib.shared-messages.fetching": "データの取得...",
"lib.shared-messages.firmwareVersion": "ファームウェアバージョン",
+ "lib.shared-messages.fleetInfo": "",
+ "lib.shared-messages.fleetTokenInfo": "",
"lib.shared-messages.format": "フォーマット",
"lib.shared-messages.fpNotFoundError": "指定された周波数プランは見つかりませんでした",
"lib.shared-messages.fPort": "",
diff --git a/pkg/webui/styles/utilities/general.styl b/pkg/webui/styles/utilities/general.styl
index dce6c9ff27..2f8edc5d13 100644
--- a/pkg/webui/styles/utilities/general.styl
+++ b/pkg/webui/styles/utilities/general.styl
@@ -165,6 +165,12 @@
.h-vh
height: 100vh !important
+ .h-l
+ height: $cs.l !important
+
+ .h-content
+ height: fit-content !important
+
for $num in (1..9)
$percentage = percentage($num / 10)
.w-{$num}0
@@ -474,3 +480,18 @@
.border-regular
border: 1px solid var(--c-border-neutral-light) !important
+
+ .no-wrap
+ white-space: nowrap !important
+
+ .flex-basis-1
+ flex-basis: 1rem !important
+
+ .hover-underline:hover
+ text-decoration: underline !important
+
+ // Responsive flex-basis.
+ for $name, $width in $bp
+ +media-query($width)
+ .{$name}\\:flex-basis-1
+ flex-basis: 1rem !important