mirror of
https://github.com/meshtastic/web.git
synced 2026-05-05 21:25:01 -04:00
Merge branch 'meshtastic:master' into enable-map-control
This commit is contained in:
@@ -16,7 +16,19 @@ import {
|
||||
import { Link } from "@components/UI/Typography/Link.js";
|
||||
import { Subtle } from "@components/UI/Typography/Subtle.js";
|
||||
|
||||
const tabs = [
|
||||
export interface TabElementProps {
|
||||
closeDialog: () => void;
|
||||
}
|
||||
|
||||
export interface TabManifest {
|
||||
label: string;
|
||||
element: React.FC<TabElementProps>;
|
||||
disabled: boolean;
|
||||
disabledMessage: string;
|
||||
disabledLink?: string;
|
||||
}
|
||||
|
||||
const tabs: TabManifest[] = [
|
||||
{
|
||||
label: "HTTP",
|
||||
element: HTTP,
|
||||
@@ -74,7 +86,7 @@ export const NewDeviceDialog = ({
|
||||
{tab.disabledMessage}
|
||||
</p>
|
||||
) : (
|
||||
<tab.element />
|
||||
<tab.element closeDialog={() => onOpenChange(false)} />
|
||||
)}
|
||||
</TabsContent>
|
||||
))}
|
||||
|
||||
@@ -11,6 +11,7 @@ export interface InputFieldProps<T> extends BaseFormBuilderProps<T> {
|
||||
properties?: {
|
||||
prefix?: string;
|
||||
suffix?: string;
|
||||
step?: number;
|
||||
action?: {
|
||||
icon: LucideIcon;
|
||||
onClick: () => void;
|
||||
@@ -30,11 +31,12 @@ export function GenericInput<T extends FieldValues>({
|
||||
render={({ field: { value, onChange, ...rest } }) => (
|
||||
<Input
|
||||
type={field.type}
|
||||
value={field.type === "number" ? parseInt(value) : value}
|
||||
step={field.properties?.step}
|
||||
value={field.type === "number" ? Number.parseInt(value) : value}
|
||||
onChange={(e) =>
|
||||
onChange(
|
||||
field.type === "number"
|
||||
? parseInt(e.target.value)
|
||||
? Number.parseInt(e.target.value)
|
||||
: e.target.value,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -48,6 +48,9 @@ export const Power = (): JSX.Element => {
|
||||
name: "adcMultiplierOverride",
|
||||
label: "ADC Multiplier Override ratio",
|
||||
description: "Used for tweaking battery voltage reading",
|
||||
properties: {
|
||||
step: 0.01,
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "number",
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { TabElementProps } from "@app/components/Dialog/NewDeviceDialog";
|
||||
import { Button } from "@components/UI/Button.js";
|
||||
import { Mono } from "@components/generic/Mono.js";
|
||||
import { useAppStore } from "@core/stores/appStore.js";
|
||||
@@ -7,7 +8,7 @@ import { randId } from "@core/utils/randId.js";
|
||||
import { BleConnection, Constants } from "@meshtastic/js";
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
|
||||
export const BLE = (): JSX.Element => {
|
||||
export const BLE = ({ closeDialog }: TabElementProps): JSX.Element => {
|
||||
const [bleDevices, setBleDevices] = useState<BluetoothDevice[]>([]);
|
||||
const { addDevice } = useDeviceStore();
|
||||
const { setSelectedDevice } = useAppStore();
|
||||
@@ -30,6 +31,8 @@ export const BLE = (): JSX.Element => {
|
||||
});
|
||||
device.addConnection(connection);
|
||||
subscribeAll(device, connection);
|
||||
|
||||
closeDialog();
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { TabElementProps } from "@app/components/Dialog/NewDeviceDialog";
|
||||
import { Button } from "@components/UI/Button.js";
|
||||
import { Input } from "@components/UI/Input.js";
|
||||
import { Label } from "@components/UI/Label.js";
|
||||
@@ -9,7 +10,7 @@ import { randId } from "@core/utils/randId.js";
|
||||
import { HttpConnection } from "@meshtastic/js";
|
||||
import { Controller, useForm, useWatch } from "react-hook-form";
|
||||
|
||||
export const HTTP = (): JSX.Element => {
|
||||
export const HTTP = ({ closeDialog }: TabElementProps): JSX.Element => {
|
||||
const { addDevice } = useDeviceStore();
|
||||
const { setSelectedDevice } = useAppStore();
|
||||
const { register, handleSubmit, control } = useForm<{
|
||||
@@ -18,7 +19,7 @@ export const HTTP = (): JSX.Element => {
|
||||
}>({
|
||||
defaultValues: {
|
||||
ip: ["client.meshtastic.org", "localhost"].includes(
|
||||
window.location.hostname,
|
||||
window.location.hostname
|
||||
)
|
||||
? "meshtastic.local"
|
||||
: window.location.hostname,
|
||||
@@ -45,6 +46,8 @@ export const HTTP = (): JSX.Element => {
|
||||
});
|
||||
device.addConnection(connection);
|
||||
subscribeAll(device, connection);
|
||||
|
||||
closeDialog();
|
||||
});
|
||||
|
||||
return (
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { TabElementProps } from "@app/components/Dialog/NewDeviceDialog";
|
||||
import { Button } from "@components/UI/Button.js";
|
||||
import { Mono } from "@components/generic/Mono.js";
|
||||
import { useAppStore } from "@core/stores/appStore.js";
|
||||
@@ -7,7 +8,7 @@ import { randId } from "@core/utils/randId.js";
|
||||
import { SerialConnection } from "@meshtastic/js";
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
|
||||
export const Serial = (): JSX.Element => {
|
||||
export const Serial = ({ closeDialog }: TabElementProps): JSX.Element => {
|
||||
const [serialPorts, setSerialPorts] = useState<SerialPort[]>([]);
|
||||
const { addDevice } = useDeviceStore();
|
||||
const { setSelectedDevice } = useAppStore();
|
||||
@@ -40,6 +41,8 @@ export const Serial = (): JSX.Element => {
|
||||
.catch((e: Error) => console.log(`Unable to Connect: ${e.message}`));
|
||||
device.addConnection(connection);
|
||||
subscribeAll(device, connection);
|
||||
|
||||
closeDialog();
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
@@ -115,7 +115,7 @@ export const MQTT = (): JSX.Element => {
|
||||
name: "proxyToClientEnabled",
|
||||
label: "Proxy to Client Enabled",
|
||||
description:
|
||||
"Whether to proxy MQTT packets to the client (for example to Home Assistant)",
|
||||
"Use the client's internet connection for MQTT (feature only active in mobile apps)",
|
||||
disabledBy: [
|
||||
{
|
||||
fieldName: "enabled",
|
||||
|
||||
Reference in New Issue
Block a user