|
|
@ -25,13 +25,13 @@ export interface ImportDialogProps { |
|
|
|
|
|
|
|
|
export const ImportDialog = ({ |
|
|
export const ImportDialog = ({ |
|
|
isOpen, |
|
|
isOpen, |
|
|
close, |
|
|
close |
|
|
}: ImportDialogProps): JSX.Element => { |
|
|
}: ImportDialogProps): JSX.Element => { |
|
|
const [QRCodeURL, setQRCodeURL] = useState<string>(""); |
|
|
const [QRCodeURL, setQRCodeURL] = useState<string>(""); |
|
|
const [channelSet, setChannelSet] = useState<Protobuf.ChannelSet>(); |
|
|
const [channelSet, setChannelSet] = useState<Protobuf.ChannelSet>(); |
|
|
const [validURL, setValidURL] = useState<boolean>(false); |
|
|
const [validURL, setValidURL] = useState<boolean>(false); |
|
|
|
|
|
|
|
|
const {connection} = useDevice() |
|
|
const { connection } = useDevice(); |
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
useEffect(() => { |
|
|
const base64String = QRCodeURL.split("e/#")[1] |
|
|
const base64String = QRCodeURL.split("e/#")[1] |
|
|
@ -48,29 +48,30 @@ export const ImportDialog = ({ |
|
|
}, [QRCodeURL]); |
|
|
}, [QRCodeURL]); |
|
|
|
|
|
|
|
|
const apply = () => { |
|
|
const apply = () => { |
|
|
|
|
|
channelSet?.settings.map((ch, index) => { |
|
|
channelSet?.settings.map(((ch, index) => { |
|
|
|
|
|
connection?.setChannel({ |
|
|
connection?.setChannel({ |
|
|
channel: { |
|
|
channel: { |
|
|
index, |
|
|
index, |
|
|
role: index === 0 ? Protobuf.Channel_Role.PRIMARY: Protobuf.Channel_Role.SECONDARY, |
|
|
role: |
|
|
|
|
|
index === 0 |
|
|
|
|
|
? Protobuf.Channel_Role.PRIMARY |
|
|
|
|
|
: Protobuf.Channel_Role.SECONDARY, |
|
|
settings: ch |
|
|
settings: ch |
|
|
} |
|
|
} |
|
|
}) |
|
|
}); |
|
|
})) |
|
|
}); |
|
|
|
|
|
|
|
|
if (channelSet?.loraConfig) { |
|
|
if (channelSet?.loraConfig) { |
|
|
connection?.setConfig({ |
|
|
connection?.setConfig({ |
|
|
config: { |
|
|
config: { |
|
|
payloadVariant: { |
|
|
payloadVariant: { |
|
|
oneofKind: 'lora', |
|
|
oneofKind: "lora", |
|
|
lora: channelSet.loraConfig |
|
|
lora: channelSet.loraConfig |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}) |
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
}; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return ( |
|
|
return ( |
|
|
<Dialog |
|
|
<Dialog |
|
|
@ -87,48 +88,55 @@ export const ImportDialog = ({ |
|
|
onChange={(e) => { |
|
|
onChange={(e) => { |
|
|
setQRCodeURL(e.target.value); |
|
|
setQRCodeURL(e.target.value); |
|
|
}} |
|
|
}} |
|
|
/>{validURL && ( |
|
|
/> |
|
|
<div className="flex flex-col gap-3"> |
|
|
{validURL && ( |
|
|
|
|
|
<div className="flex flex-col gap-3"> |
|
|
<div className="flex w-full gap-2"> |
|
|
<div className="flex w-full gap-2"> |
|
|
<div className="w-36"> |
|
|
<div className="w-36"> |
|
|
<Toggle |
|
|
<Toggle |
|
|
className="flex-col gap-2" |
|
|
className="flex-col gap-2" |
|
|
label="Use Preset?" |
|
|
label="Use Preset?" |
|
|
|
|
|
disabled |
|
|
|
|
|
checked={channelSet?.loraConfig?.usePreset ?? true} |
|
|
|
|
|
/> |
|
|
|
|
|
</div> |
|
|
|
|
|
<Select |
|
|
|
|
|
label="Modem Preset" |
|
|
|
|
|
disabled |
|
|
|
|
|
value={channelSet?.loraConfig?.modemPreset} |
|
|
|
|
|
> |
|
|
|
|
|
{renderOptions(Protobuf.Config_LoRaConfig_ModemPreset)} |
|
|
|
|
|
</Select> |
|
|
|
|
|
</div> |
|
|
|
|
|
<Select |
|
|
|
|
|
label="Region" |
|
|
disabled |
|
|
disabled |
|
|
checked={channelSet?.loraConfig?.usePreset ?? true} |
|
|
value={channelSet?.loraConfig?.region} |
|
|
/> |
|
|
> |
|
|
|
|
|
{renderOptions(Protobuf.Config_LoRaConfig_RegionCode)} |
|
|
|
|
|
</Select> |
|
|
|
|
|
|
|
|
|
|
|
<span className="text-md block font-medium text-gray-700"> |
|
|
|
|
|
Channels: |
|
|
|
|
|
</span> |
|
|
|
|
|
<div className="flex w-40 flex-col gap-1"> |
|
|
|
|
|
{channelSet?.settings.map((channel, index) => ( |
|
|
|
|
|
<Checkbox |
|
|
|
|
|
key={index} |
|
|
|
|
|
label={ |
|
|
|
|
|
channel.name.length |
|
|
|
|
|
? channel.name |
|
|
|
|
|
: `Channel: ${channel.id}` |
|
|
|
|
|
} |
|
|
|
|
|
/> |
|
|
|
|
|
))} |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<Select |
|
|
)} |
|
|
label="Modem Preset" |
|
|
<Button onClick={() => apply()} disabled={!validURL}> |
|
|
disabled |
|
|
Apply |
|
|
value={channelSet?.loraConfig?.modemPreset} |
|
|
</Button> |
|
|
> |
|
|
</div> |
|
|
{renderOptions(Protobuf.Config_LoRaConfig_ModemPreset)} |
|
|
|
|
|
</Select> |
|
|
|
|
|
</div> |
|
|
|
|
|
<Select |
|
|
|
|
|
label="Region" |
|
|
|
|
|
disabled |
|
|
|
|
|
value={channelSet?.loraConfig?.region} |
|
|
|
|
|
> |
|
|
|
|
|
{renderOptions(Protobuf.Config_LoRaConfig_RegionCode)} |
|
|
|
|
|
</Select> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span className="block text-md font-medium text-gray-700">Channels:</span> |
|
|
|
|
|
<div className="flex w-40 flex-col gap-1"> |
|
|
|
|
|
{channelSet?.settings.map((channel, index) => ( |
|
|
|
|
|
<Checkbox |
|
|
|
|
|
key={index} |
|
|
|
|
|
label={ |
|
|
|
|
|
channel.name.length ? channel.name : `Channel: ${channel.id}` |
|
|
|
|
|
} |
|
|
|
|
|
/> |
|
|
|
|
|
))} |
|
|
|
|
|
</div> |
|
|
|
|
|
</div>)} |
|
|
|
|
|
<Button onClick={() => apply()} disabled={!validURL}>Apply</Button></div> |
|
|
|
|
|
</Dialog> |
|
|
</Dialog> |
|
|
); |
|
|
); |
|
|
}; |
|
|
}; |
|
|
|