Browse Source

Refactor and consolidate store imports (#774)

* Refactor  and consolitdate store imports

- Created a new index file in the core stores directory to export all stores from a single module.
- Updated imports to use consolidated store exports.

* Remove unnecessary import

* Update imports

* Use named exports

* Change store import after merge

---------

Co-authored-by: philon- <[email protected]>
pull/776/head
Jeremy Gallant 10 months ago
committed by GitHub
parent
commit
d453ff809a
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 4
      packages/web/src/App.tsx
  2. 3
      packages/web/src/DeviceWrapper.tsx
  3. 3
      packages/web/src/components/CommandPalette/index.tsx
  4. 2
      packages/web/src/components/Dialog/ClientNotificationDialog/ClientNotificationDialog.tsx
  5. 4
      packages/web/src/components/Dialog/DeleteMessagesDialog/DeleteMessagesDialog.test.tsx
  6. 2
      packages/web/src/components/Dialog/DeleteMessagesDialog/DeleteMessagesDialog.tsx
  7. 2
      packages/web/src/components/Dialog/DeviceNameDialog.tsx
  8. 2
      packages/web/src/components/Dialog/DialogManager.tsx
  9. 2
      packages/web/src/components/Dialog/ImportDialog.tsx
  10. 2
      packages/web/src/components/Dialog/LocationResponseDialog.tsx
  11. 3
      packages/web/src/components/Dialog/NodeDetailsDialog/NodeDetailsDialog.tsx
  12. 2
      packages/web/src/components/Dialog/PKIBackupDialog.tsx
  13. 4
      packages/web/src/components/Dialog/RebootDialog.test.tsx
  14. 4
      packages/web/src/components/Dialog/RebootDialog.tsx
  15. 11
      packages/web/src/components/Dialog/RefreshKeysDialog/RefreshKeysDialog.test.tsx
  16. 3
      packages/web/src/components/Dialog/RefreshKeysDialog/RefreshKeysDialog.tsx
  17. 3
      packages/web/src/components/Dialog/RefreshKeysDialog/useRefreshKeysDialog.ts
  18. 3
      packages/web/src/components/Dialog/RemoveNodeDialog.tsx
  19. 2
      packages/web/src/components/Dialog/ShutdownDialog.tsx
  20. 2
      packages/web/src/components/Dialog/TracerouteResponseDialog.tsx
  21. 2
      packages/web/src/components/Dialog/UnsafeRolesDialog/UnsafeRolesDialog.tsx
  22. 2
      packages/web/src/components/Dialog/UnsafeRolesDialog/useUnsafeRolesDialog.ts
  23. 2
      packages/web/src/components/Form/DynamicForm.tsx
  24. 2
      packages/web/src/components/KeyBackupReminder.tsx
  25. 2
      packages/web/src/components/PageComponents/Channel.tsx
  26. 2
      packages/web/src/components/PageComponents/Config/Bluetooth.tsx
  27. 2
      packages/web/src/components/PageComponents/Config/Device/index.tsx
  28. 2
      packages/web/src/components/PageComponents/Config/Display.tsx
  29. 2
      packages/web/src/components/PageComponents/Config/LoRa.tsx
  30. 2
      packages/web/src/components/PageComponents/Config/Network/index.tsx
  31. 2
      packages/web/src/components/PageComponents/Config/Position.tsx
  32. 2
      packages/web/src/components/PageComponents/Config/Power.tsx
  33. 3
      packages/web/src/components/PageComponents/Config/Security/Security.tsx
  34. 4
      packages/web/src/components/PageComponents/Connect/BLE.tsx
  35. 6
      packages/web/src/components/PageComponents/Connect/HTTP.test.tsx
  36. 4
      packages/web/src/components/PageComponents/Connect/HTTP.tsx
  37. 4
      packages/web/src/components/PageComponents/Connect/Serial.tsx
  38. 2
      packages/web/src/components/PageComponents/Messages/MessageInput.tsx
  39. 6
      packages/web/src/components/PageComponents/Messages/MessageItem.tsx
  40. 6
      packages/web/src/components/PageComponents/Messages/TraceRoute.test.tsx
  41. 2
      packages/web/src/components/PageComponents/Messages/TraceRoute.tsx
  42. 2
      packages/web/src/components/PageComponents/ModuleConfig/AmbientLighting.tsx
  43. 2
      packages/web/src/components/PageComponents/ModuleConfig/Audio.tsx
  44. 2
      packages/web/src/components/PageComponents/ModuleConfig/CannedMessage.tsx
  45. 2
      packages/web/src/components/PageComponents/ModuleConfig/DetectionSensor.tsx
  46. 2
      packages/web/src/components/PageComponents/ModuleConfig/ExternalNotification.tsx
  47. 2
      packages/web/src/components/PageComponents/ModuleConfig/MQTT.tsx
  48. 2
      packages/web/src/components/PageComponents/ModuleConfig/NeighborInfo.tsx
  49. 2
      packages/web/src/components/PageComponents/ModuleConfig/Paxcounter.tsx
  50. 2
      packages/web/src/components/PageComponents/ModuleConfig/RangeTest.tsx
  51. 2
      packages/web/src/components/PageComponents/ModuleConfig/Serial.tsx
  52. 2
      packages/web/src/components/PageComponents/ModuleConfig/StoreForward.tsx
  53. 2
      packages/web/src/components/PageComponents/ModuleConfig/Telemetry.tsx
  54. 5
      packages/web/src/components/Sidebar.tsx
  55. 2
      packages/web/src/components/UI/Sidebar/SidebarButton.tsx
  56. 2
      packages/web/src/components/UI/Sidebar/SidebarSection.tsx
  57. 2
      packages/web/src/core/dto/PacketToMessageDTO.ts
  58. 2
      packages/web/src/core/hooks/useFavoriteNode.test.ts
  59. 2
      packages/web/src/core/hooks/useFavoriteNode.ts
  60. 2
      packages/web/src/core/hooks/useIgnoreNode.test.ts
  61. 2
      packages/web/src/core/hooks/useIgnoreNode.ts
  62. 2
      packages/web/src/core/hooks/useWaitForConfig.ts
  63. 0
      packages/web/src/core/stores/appStore/index.ts
  64. 2
      packages/web/src/core/stores/deviceStore/deviceStore.mock.ts
  65. 0
      packages/web/src/core/stores/deviceStore/index.ts
  66. 22
      packages/web/src/core/stores/index.ts
  67. 2
      packages/web/src/core/stores/messageStore/messageStore.test.ts
  68. 5
      packages/web/src/core/stores/messageStore/types.ts
  69. 0
      packages/web/src/core/stores/sidebarStore/index.tsx
  70. 0
      packages/web/src/core/stores/utils/indexDB.ts
  71. 3
      packages/web/src/core/subscriptions.ts
  72. 3
      packages/web/src/index.tsx
  73. 2
      packages/web/src/pages/Channels.tsx
  74. 2
      packages/web/src/pages/Config/DeviceConfig.tsx
  75. 5
      packages/web/src/pages/Config/ModuleConfig.tsx
  76. 3
      packages/web/src/pages/Config/index.tsx
  77. 3
      packages/web/src/pages/Dashboard/index.tsx
  78. 2
      packages/web/src/pages/Map/index.tsx
  79. 6
      packages/web/src/pages/Messages.tsx
  80. 3
      packages/web/src/pages/Nodes/index.tsx
  81. 3
      packages/web/src/routes.tsx

4
packages/web/src/App.tsx

@ -6,9 +6,7 @@ import { KeyBackupReminder } from "@components/KeyBackupReminder.tsx";
import { ErrorPage } from "@components/UI/ErrorPage.tsx";
import Footer from "@components/UI/Footer.tsx";
import { useTheme } from "@core/hooks/useTheme.ts";
import { useAppStore } from "@core/stores/appStore.ts";
import { useDeviceStore } from "@core/stores/deviceStore.ts";
import { SidebarProvider } from "@core/stores/sidebarStore.tsx";
import { SidebarProvider, useAppStore, useDeviceStore } from "@core/stores";
import { Dashboard } from "@pages/Dashboard/index.tsx";
import { Outlet } from "@tanstack/react-router";
import { TanStackRouterDevtools } from "@tanstack/react-router-devtools";

3
packages/web/src/DeviceWrapper.tsx

@ -1,5 +1,4 @@
import type { Device } from "@core/stores/deviceStore.ts";
import { DeviceContext } from "@core/stores/deviceStore.ts";
import { type Device, DeviceContext } from "@core/stores";
import type { ReactNode } from "react";
export interface DeviceWrapperProps {

3
packages/web/src/components/CommandPalette/index.tsx

@ -8,8 +8,7 @@ import {
CommandList,
} from "@components/UI/Command.tsx";
import { usePinnedItems } from "@core/hooks/usePinnedItems.ts";
import { useAppStore } from "@core/stores/appStore.ts";
import { useDevice, useDeviceStore } from "@core/stores/deviceStore.ts";
import { useAppStore, useDevice, useDeviceStore } from "@core/stores";
import { cn } from "@core/utils/cn.ts";
import { useNavigate } from "@tanstack/react-router";
import { useCommandState } from "cmdk";

2
packages/web/src/components/Dialog/ClientNotificationDialog/ClientNotificationDialog.tsx

@ -6,7 +6,7 @@ import {
DialogHeader,
DialogTitle,
} from "@components/UI/Dialog.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { useTranslation } from "react-i18next";
export interface ClientNotificationDialogProps {

4
packages/web/src/components/Dialog/DeleteMessagesDialog/DeleteMessagesDialog.test.tsx

@ -2,9 +2,9 @@ import { DeleteMessagesDialog } from "@components/Dialog/DeleteMessagesDialog/De
import { fireEvent, render, screen } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
// Ensure the path is correct for import
import { useMessageStore } from "../../../core/stores/messageStore/index.ts";
import { useMessageStore } from "@core/stores";
vi.mock("@core/stores/messageStore", () => ({
vi.mock("@core/stores", () => ({
useMessageStore: vi.fn(() => ({
deleteAllMessages: vi.fn(),
})),

2
packages/web/src/components/Dialog/DeleteMessagesDialog/DeleteMessagesDialog.tsx

@ -8,9 +8,9 @@ import {
DialogHeader,
DialogTitle,
} from "@components/UI/Dialog.tsx";
import { useMessageStore } from "@core/stores";
import { AlertTriangleIcon } from "lucide-react";
import { useTranslation } from "react-i18next";
import { useMessageStore } from "../../../core/stores/messageStore/index.ts";
export interface DeleteMessagesDialogProps {
open: boolean;

2
packages/web/src/components/Dialog/DeviceNameDialog.tsx

@ -10,7 +10,7 @@ import {
DialogHeader,
DialogTitle,
} from "@components/UI/Dialog.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { zodResolver } from "@hookform/resolvers/zod";
import { Protobuf } from "@meshtastic/core";
import { useForm } from "react-hook-form";

2
packages/web/src/components/Dialog/DialogManager.tsx

@ -10,7 +10,7 @@ import { RefreshKeysDialog } from "@components/Dialog/RefreshKeysDialog/RefreshK
import { RemoveNodeDialog } from "@components/Dialog/RemoveNodeDialog.tsx";
import { ShutdownDialog } from "@components/Dialog/ShutdownDialog.tsx";
import { UnsafeRolesDialog } from "@components/Dialog/UnsafeRolesDialog/UnsafeRolesDialog.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
export const DialogManager = () => {
const { channels, config, dialog, setDialogOpen } = useDevice();

2
packages/web/src/components/Dialog/ImportDialog.tsx

@ -12,7 +12,7 @@ import {
import { Input } from "@components/UI/Input.tsx";
import { Label } from "@components/UI/Label.tsx";
import { Switch } from "@components/UI/Switch.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { Protobuf } from "@meshtastic/core";
import { toByteArray } from "base64-js";
import { useEffect, useState } from "react";

2
packages/web/src/components/Dialog/LocationResponseDialog.tsx

@ -1,4 +1,4 @@
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import type { Protobuf, Types } from "@meshtastic/core";
import { numberToHexUnpadded } from "@noble/curves/abstract/utils";
import { useTranslation } from "react-i18next";

3
packages/web/src/components/Dialog/NodeDetailsDialog/NodeDetailsDialog.tsx

@ -27,8 +27,7 @@ import {
import { useFavoriteNode } from "@core/hooks/useFavoriteNode.ts";
import { useIgnoreNode } from "@core/hooks/useIgnoreNode.ts";
import { toast } from "@core/hooks/useToast.ts";
import { useAppStore } from "@core/stores/appStore.ts";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useAppStore, useDevice } from "@core/stores";
import { cn } from "@core/utils/cn.ts";
import { Protobuf } from "@meshtastic/core";
import { numberToHexUnpadded } from "@noble/curves/abstract/utils";

2
packages/web/src/components/Dialog/PKIBackupDialog.tsx

@ -11,7 +11,7 @@ import { fromByteArray } from "base64-js";
import { DownloadIcon, PrinterIcon } from "lucide-react";
import React from "react";
import { useTranslation } from "react-i18next";
import { useDevice } from "../../core/stores/deviceStore.ts";
import { useDevice } from "../../core/stores";
import { Button } from "../UI/Button.tsx";
export interface PkiBackupDialogProps {

4
packages/web/src/components/Dialog/RebootDialog.test.tsx

@ -1,4 +1,4 @@
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
import { fireEvent, render, screen } from "@testing-library/react";
import type {
ButtonHTMLAttributes,
ClassAttributes,
@ -19,7 +19,7 @@ let mockConnection: {
rebootOta: rebootOtaMock,
};
vi.mock("@core/stores/deviceStore.ts", () => ({
vi.mock("@core/stores", () => ({
useDevice: () => ({
connection: mockConnection,
}),

4
packages/web/src/components/Dialog/RebootDialog.tsx

@ -1,4 +1,5 @@
import { Button } from "@components/UI/Button.tsx";
import { Checkbox } from "@components/UI/Checkbox/index.tsx";
import {
Dialog,
DialogClose,
@ -10,11 +11,10 @@ import {
import { Input } from "@components/UI/Input.tsx";
import { Label } from "@components/UI/Label.tsx";
import { Separator } from "@components/UI/Seperator.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { ClockIcon, OctagonXIcon, RefreshCwIcon } from "lucide-react";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { Checkbox } from "../UI/Checkbox/index.tsx";
export interface RebootDialogProps {
open: boolean;

11
packages/web/src/components/Dialog/RefreshKeysDialog/RefreshKeysDialog.test.tsx

@ -1,11 +1,16 @@
import { DeviceContext, useDeviceStore } from "@core/stores/deviceStore.ts";
import { DeviceContext, useDeviceStore, useMessageStore } from "@core/stores";
import { render } from "@testing-library/react";
import { afterEach, beforeEach, expect, test, vi } from "vitest";
import { useMessageStore } from "../../../core/stores/messageStore/index.ts";
import { RefreshKeysDialog } from "./RefreshKeysDialog.tsx";
import { useRefreshKeysDialog } from "./useRefreshKeysDialog.ts";
vi.mock("@core/stores/messageStore");
vi.mock("@core/stores", async () => {
const actual = (await vi.importActual("@core/stores")) as typeof import("@core/stores");
return {
...actual,
useMessageStore: vi.fn(),
};
});
vi.mock("./useRefreshKeysDialog");
const mockUseMessageStore = vi.mocked(useMessageStore);

3
packages/web/src/components/Dialog/RefreshKeysDialog/RefreshKeysDialog.tsx

@ -6,8 +6,7 @@ import {
DialogHeader,
DialogTitle,
} from "@components/UI/Dialog.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useMessageStore } from "@core/stores/messageStore/index.ts";
import { useDevice, useMessageStore } from "@core/stores";
import { LockKeyholeOpenIcon } from "lucide-react";
import { useTranslation } from "react-i18next";
import { useRefreshKeysDialog } from "./useRefreshKeysDialog.ts";

3
packages/web/src/components/Dialog/RefreshKeysDialog/useRefreshKeysDialog.ts

@ -1,5 +1,4 @@
import { useDevice } from "@core/stores/deviceStore.ts";
import { useMessageStore } from "@core/stores/messageStore/index.ts";
import { useDevice, useMessageStore } from "@core/stores";
import { useCallback } from "react";
export function useRefreshKeysDialog() {

3
packages/web/src/components/Dialog/RemoveNodeDialog.tsx

@ -9,9 +9,8 @@ import {
DialogTitle,
} from "@components/UI/Dialog.tsx";
import { Label } from "@components/UI/Label.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useAppStore, useDevice } from "@core/stores";
import { useTranslation } from "react-i18next";
import { useAppStore } from "../../core/stores/appStore.ts";
export interface RemoveNodeDialogProps {
open: boolean;

2
packages/web/src/components/Dialog/ShutdownDialog.tsx

@ -8,7 +8,7 @@ import {
DialogTitle,
} from "@components/UI/Dialog.tsx";
import { Input } from "@components/UI/Input.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { ClockIcon, PowerIcon } from "lucide-react";
import { useState } from "react";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/Dialog/TracerouteResponseDialog.tsx

@ -1,4 +1,4 @@
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import type { Protobuf, Types } from "@meshtastic/core";
import { numberToHexUnpadded } from "@noble/curves/abstract/utils";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/Dialog/UnsafeRolesDialog/UnsafeRolesDialog.tsx

@ -10,7 +10,7 @@ import {
DialogTitle,
} from "@components/UI/Dialog.tsx";
import { Link } from "@components/UI/Typography/Link.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { eventBus } from "@core/utils/eventBus.ts";
import { useState } from "react";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/Dialog/UnsafeRolesDialog/useUnsafeRolesDialog.ts

@ -1,4 +1,4 @@
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { eventBus } from "@core/utils/eventBus.ts";
import { useCallback } from "react";

2
packages/web/src/components/Form/DynamicForm.tsx

@ -7,7 +7,7 @@ import { FieldWrapper } from "@components/Form/FormWrapper.tsx";
import { Button } from "@components/UI/Button.tsx";
import { Heading } from "@components/UI/Typography/Heading.tsx";
import { Subtle } from "@components/UI/Typography/Subtle.tsx";
import { useAppStore } from "@core/stores/appStore.ts";
import { useAppStore } from "@core/stores";
import { dotPaths } from "@core/utils/dotPath.ts";
import { useEffect } from "react";
import {

2
packages/web/src/components/KeyBackupReminder.tsx

@ -1,5 +1,5 @@
import { useBackupReminder } from "@core/hooks/useKeyBackupReminder.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { useTranslation } from "react-i18next";
export const KeyBackupReminder = () => {

2
packages/web/src/components/PageComponents/Channel.tsx

@ -3,7 +3,7 @@ import { create } from "@bufbuild/protobuf";
import { PkiRegenerateDialog } from "@components/Dialog/PkiRegenerateDialog.tsx";
import { DynamicForm } from "@components/Form/DynamicForm.tsx";
import { useToast } from "@core/hooks/useToast.ts";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { Protobuf } from "@meshtastic/core";
import { fromByteArray, toByteArray } from "base64-js";
import cryptoRandomString from "crypto-random-string";

2
packages/web/src/components/PageComponents/Config/Bluetooth.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/Config/Device/index.tsx

@ -9,7 +9,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/Config/Display.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/Config/LoRa.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/Config/Network/index.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import {
convertIntToIpAddress,

2
packages/web/src/components/PageComponents/Config/Position.tsx

@ -12,7 +12,7 @@ import {
type FlagName,
usePositionFlags,
} from "@core/hooks/usePositionFlags.ts";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useCallback } from "react";

2
packages/web/src/components/PageComponents/Config/Power.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

3
packages/web/src/components/PageComponents/Config/Security/Security.tsx

@ -12,8 +12,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useAppStore } from "@core/stores/appStore.ts";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useAppStore, useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { getX25519PrivateKey, getX25519PublicKey } from "@core/utils/x25519.ts";
import { Protobuf } from "@meshtastic/core";

4
packages/web/src/components/PageComponents/Connect/BLE.tsx

@ -1,8 +1,6 @@
import { Mono } from "@components/generic/Mono.tsx";
import { Button } from "@components/UI/Button.tsx";
import { useAppStore } from "@core/stores/appStore.ts";
import { useDeviceStore } from "@core/stores/deviceStore.ts";
import { useMessageStore } from "@core/stores/messageStore/index.ts";
import { useAppStore, useDeviceStore, useMessageStore } from "@core/stores";
import { subscribeAll } from "@core/subscriptions.ts";
import { randId } from "@core/utils/randId.ts";
import { MeshDevice } from "@meshtastic/core";

6
packages/web/src/components/PageComponents/Connect/HTTP.test.tsx

@ -4,14 +4,12 @@ import { TransportHTTP } from "@meshtastic/transport-http";
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
vi.mock("@core/stores/appStore.ts", () => ({
vi.mock("@core/stores", () => ({
useAppStore: vi.fn(() => ({ setSelectedDevice: vi.fn() })),
}));
vi.mock("@core/stores/deviceStore.ts", () => ({
useDeviceStore: vi.fn(() => ({
addDevice: vi.fn(() => ({ addConnection: vi.fn() })),
})),
useMessageStore: vi.fn()
}));
vi.mock("@core/utils/randId.ts", () => ({

4
packages/web/src/components/PageComponents/Connect/HTTP.tsx

@ -4,9 +4,7 @@ import { Input } from "@components/UI/Input.tsx";
import { Label } from "@components/UI/Label.tsx";
import { Switch } from "@components/UI/Switch.tsx";
import { Link } from "@components/UI/Typography/Link.tsx";
import { useAppStore } from "@core/stores/appStore.ts";
import { useDeviceStore } from "@core/stores/deviceStore.ts";
import { useMessageStore } from "@core/stores/messageStore/index.ts";
import { useAppStore, useDeviceStore, useMessageStore } from "@core/stores";
import { subscribeAll } from "@core/subscriptions.ts";
import { randId } from "@core/utils/randId.ts";
import { MeshDevice } from "@meshtastic/core";

4
packages/web/src/components/PageComponents/Connect/Serial.tsx

@ -1,8 +1,6 @@
import { Mono } from "@components/generic/Mono.tsx";
import { Button } from "@components/UI/Button.tsx";
import { useAppStore } from "@core/stores/appStore.ts";
import { useDeviceStore } from "@core/stores/deviceStore.ts";
import { useMessageStore } from "@core/stores/messageStore/index.ts";
import { useAppStore, useDeviceStore, useMessageStore } from "@core/stores";
import { subscribeAll } from "@core/subscriptions.ts";
import { randId } from "@core/utils/randId.ts";
import { MeshDevice } from "@meshtastic/core";

2
packages/web/src/components/PageComponents/Messages/MessageInput.tsx

@ -1,6 +1,6 @@
import { Button } from "@components/UI/Button.tsx";
import { Input } from "@components/UI/Input.tsx";
import { useMessageStore } from "@core/stores/messageStore/index.ts";
import { useMessageStore } from "@core/stores";
import type { Types } from "@meshtastic/core";
import { SendIcon } from "lucide-react";
import { startTransition, useState } from "react";

6
packages/web/src/components/PageComponents/Messages/MessageItem.tsx

@ -6,11 +6,7 @@ import {
TooltipProvider,
TooltipTrigger,
} from "@components/UI/Tooltip.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import {
MessageState,
useMessageStore,
} from "@core/stores/messageStore/index.ts";
import { MessageState, useDevice, useMessageStore } from "@core/stores";
import type { Message } from "@core/stores/messageStore/types.ts";
import { cn } from "@core/utils/cn.ts";
import { type Protobuf, Types } from "@meshtastic/core";

6
packages/web/src/components/PageComponents/Messages/TraceRoute.test.tsx

@ -1,11 +1,11 @@
import { TraceRoute } from "@components/PageComponents/Messages/TraceRoute.tsx";
import { mockDeviceStore } from "@core/stores/deviceStore.mock.ts";
import { useDevice } from "@core/stores/deviceStore.ts";
import { mockDeviceStore } from "@core/stores/deviceStore/deviceStore.mock.ts";
import { useDevice } from "@core/stores";
import { Protobuf } from "@meshtastic/core";
import { render, screen } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
vi.mock("@core/stores/deviceStore");
vi.mock("@core/stores");
describe("TraceRoute", () => {
const fromUser = {

2
packages/web/src/components/PageComponents/Messages/TraceRoute.tsx

@ -1,4 +1,4 @@
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import type { Protobuf } from "@meshtastic/core";
import { numberToHexUnpadded } from "@noble/curves/abstract/utils";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/AmbientLighting.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/Audio.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/CannedMessage.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/DetectionSensor.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/ExternalNotification.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/MQTT.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/NeighborInfo.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/Paxcounter.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/RangeTest.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/Serial.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/StoreForward.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

2
packages/web/src/components/PageComponents/ModuleConfig/Telemetry.tsx

@ -8,7 +8,7 @@ import {
DynamicForm,
type DynamicFormFormInit,
} from "@components/Form/DynamicForm.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { deepCompareConfig } from "@core/utils/deepCompareConfig.ts";
import { Protobuf } from "@meshtastic/core";
import { useTranslation } from "react-i18next";

5
packages/web/src/components/Sidebar.tsx

@ -2,10 +2,7 @@ import { SidebarButton } from "@components/UI/Sidebar/SidebarButton.tsx";
import { SidebarSection } from "@components/UI/Sidebar/SidebarSection.tsx";
import { Spinner } from "@components/UI/Spinner.tsx";
import { Subtle } from "@components/UI/Typography/Subtle.tsx";
import { useAppStore } from "@core/stores/appStore.ts";
import type { Page } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useSidebar } from "@core/stores/sidebarStore.tsx";
import { type Page, useAppStore, useDevice, useSidebar } from "@core/stores";
import { cn } from "@core/utils/cn.ts";
import { useLocation, useNavigate } from "@tanstack/react-router";
import {

2
packages/web/src/components/UI/Sidebar/SidebarButton.tsx

@ -1,5 +1,5 @@
import { Button } from "@components/UI/Button.tsx";
import { useSidebar } from "@core/stores/sidebarStore.tsx";
import { useSidebar } from "@core/stores";
import { cn } from "@core/utils/cn.ts";
import type { LucideIcon } from "lucide-react";
import type React from "react";

2
packages/web/src/components/UI/Sidebar/SidebarSection.tsx

@ -1,5 +1,5 @@
import { Heading } from "@components/UI/Typography/Heading.tsx";
import { useSidebar } from "@core/stores/sidebarStore.tsx";
import { useSidebar } from "@core/stores";
import { cn } from "@core/utils/cn.ts";
import type React from "react";

2
packages/web/src/core/dto/PacketToMessageDTO.ts

@ -1,4 +1,4 @@
import { MessageState, MessageType } from "@core/stores/messageStore/index.ts";
import { MessageState, MessageType } from "@core/stores";
import type { Message } from "@core/stores/messageStore/types.ts";
import type { Types } from "@meshtastic/core";

2
packages/web/src/core/hooks/useFavoriteNode.test.ts

@ -15,7 +15,7 @@ const mockUpdateFavorite = vi.fn();
const mockGetNode = vi.fn(() => mockNode);
const mockToast = vi.fn();
vi.mock("@core/stores/deviceStore.ts", () => ({
vi.mock("@core/stores", () => ({
useDevice: () => ({
updateFavorite: mockUpdateFavorite,
getNode: mockGetNode,

2
packages/web/src/core/hooks/useFavoriteNode.ts

@ -1,5 +1,5 @@
import { useToast } from "@core/hooks/useToast.ts";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { useCallback } from "react";
import { useTranslation } from "react-i18next";

2
packages/web/src/core/hooks/useIgnoreNode.test.ts

@ -15,7 +15,7 @@ const mockUpdateIgnore = vi.fn();
const mockGetNode = vi.fn(() => mockNode);
const mockToast = vi.fn();
vi.mock("@core/stores/deviceStore.ts", () => ({
vi.mock("@core/stores", () => ({
useDevice: () => ({
updateIgnored: mockUpdateIgnore,
getNode: mockGetNode,

2
packages/web/src/core/hooks/useIgnoreNode.ts

@ -1,5 +1,5 @@
import { useToast } from "@core/hooks/useToast.ts";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { useCallback } from "react";
import { useTranslation } from "react-i18next";

2
packages/web/src/core/hooks/useWaitForConfig.ts

@ -2,7 +2,7 @@ import {
useDevice,
type ValidConfigType,
type ValidModuleConfigType,
} from "@core/stores/deviceStore.ts";
} from "@core/stores";
type UseWaitForConfigProps =
| { configCase: ValidConfigType; moduleConfigCase?: never }

0
packages/web/src/core/stores/appStore.ts → packages/web/src/core/stores/appStore/index.ts

2
packages/web/src/core/stores/deviceStore.mock.ts → packages/web/src/core/stores/deviceStore/deviceStore.mock.ts

@ -1,6 +1,6 @@
import type { Protobuf } from "@meshtastic/core";
import { vi } from "vitest";
import type { Device } from "./deviceStore.ts";
import type { Device } from "./index.ts";
/**
* You can spread this base mock in your tests and override only the

0
packages/web/src/core/stores/deviceStore.ts → packages/web/src/core/stores/deviceStore/index.ts

22
packages/web/src/core/stores/index.ts

@ -0,0 +1,22 @@
export { useAppStore } from "@core/stores/appStore";
export {
type Device,
DeviceContext,
useDevice,
useDeviceStore,
type ValidConfigType,
type ValidModuleConfigType,
} from "@core/stores/deviceStore";
export {
MessageState,
type MessageStore,
MessageType,
useMessageStore,
} from "@core/stores/messageStore";
export {
SidebarProvider,
useSidebar,
} from "@core/stores/sidebarStore";

2
packages/web/src/core/stores/messageStore/messageStore.test.ts

@ -13,7 +13,7 @@ import type {
MessageLogMap,
} from "./types.ts";
vi.mock("../storage/indexDB.ts", () => {
vi.mock("../utils/indexDB.ts", () => {
const memoryStorage: Record<string, string> = {};
return {
storageWithMapSupport: {

5
packages/web/src/core/stores/messageStore/types.ts

@ -1,7 +1,4 @@
import type {
MessageState,
MessageType,
} from "@core/stores/messageStore/index.ts";
import type { MessageState, MessageType } from "@core/stores";
import type { Types } from "@meshtastic/core";
type NodeNum = number;

0
packages/web/src/core/stores/sidebarStore.tsx → packages/web/src/core/stores/sidebarStore/index.tsx

0
packages/web/src/core/stores/storage/indexDB.ts → packages/web/src/core/stores/utils/indexDB.ts

3
packages/web/src/core/subscriptions.ts

@ -1,8 +1,7 @@
import { ensureDefaultUser } from "@core/dto/NodeNumToNodeInfoDTO.ts";
import PacketToMessageDTO from "@core/dto/PacketToMessageDTO.ts";
import type { Device } from "@core/stores/deviceStore.ts";
import { type Device, type MessageStore, MessageType } from "@core/stores";
import { type MeshDevice, Protobuf } from "@meshtastic/core";
import { type MessageStore, MessageType } from "./stores/messageStore/index.ts";
export const subscribeAll = (
device: Device,

3
packages/web/src/index.tsx

@ -6,8 +6,7 @@ import { Suspense } from "react";
import { createRoot } from "react-dom/client";
import "./i18n-config.ts";
import { router } from "@app/routes.tsx";
import { useAppStore } from "@core/stores/appStore.ts";
import { useMessageStore } from "@core/stores/messageStore/index.ts";
import { useAppStore, useMessageStore } from "@core/stores";
import { type createRouter, RouterProvider } from "@tanstack/react-router";
import { useTranslation } from "react-i18next";

2
packages/web/src/pages/Channels.tsx

@ -7,7 +7,7 @@ import {
TabsList,
TabsTrigger,
} from "@components/UI/Tabs.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import type { Protobuf } from "@meshtastic/core";
import { Types } from "@meshtastic/core";
import i18next from "i18next";

2
packages/web/src/pages/Config/DeviceConfig.tsx

@ -13,7 +13,7 @@ import {
TabsList,
TabsTrigger,
} from "@components/UI/Tabs.tsx";
import { useDevice, type ValidConfigType } from "@core/stores/deviceStore.ts";
import { useDevice, type ValidConfigType } from "@core/stores";
import { type ComponentType, Suspense, useMemo } from "react";
import type { UseFormReturn } from "react-hook-form";
import { useTranslation } from "react-i18next";

5
packages/web/src/pages/Config/ModuleConfig.tsx

@ -17,10 +17,7 @@ import {
TabsList,
TabsTrigger,
} from "@components/UI/Tabs.tsx";
import {
useDevice,
type ValidModuleConfigType,
} from "@core/stores/deviceStore.ts";
import { useDevice, type ValidModuleConfigType } from "@core/stores";
import { type ComponentType, Suspense, useMemo } from "react";
import type { UseFormReturn } from "react-hook-form";
import { useTranslation } from "react-i18next";

3
packages/web/src/pages/Config/index.tsx

@ -3,8 +3,7 @@ import { Sidebar } from "@components/Sidebar.tsx";
import { SidebarButton } from "@components/UI/Sidebar/SidebarButton.tsx";
import { SidebarSection } from "@components/UI/Sidebar/SidebarSection.tsx";
import { useToast } from "@core/hooks/useToast.ts";
import { useAppStore } from "@core/stores/appStore.ts";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useAppStore, useDevice } from "@core/stores";
import { cn } from "@core/utils/cn.ts";
import { DeviceConfig } from "@pages/Config/DeviceConfig.tsx";
import { ModuleConfig } from "@pages/Config/ModuleConfig.tsx";

3
packages/web/src/pages/Dashboard/index.tsx

@ -3,8 +3,7 @@ import { Button } from "@components/UI/Button.tsx";
import { Separator } from "@components/UI/Seperator.tsx";
import { Heading } from "@components/UI/Typography/Heading.tsx";
import { Subtle } from "@components/UI/Typography/Subtle.tsx";
import { useAppStore } from "@core/stores/appStore.ts";
import { useDeviceStore } from "@core/stores/deviceStore.ts";
import { useAppStore, useDeviceStore } from "@core/stores";
import { ListPlusIcon, PlusIcon, UsersIcon } from "lucide-react";
import { useMemo } from "react";
import { useTranslation } from "react-i18next";

2
packages/web/src/pages/Map/index.tsx

@ -6,7 +6,7 @@ import {
import { BaseMap } from "@components/Map.tsx";
import { PageLayout } from "@components/PageLayout.tsx";
import { Sidebar } from "@components/Sidebar.tsx";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useDevice } from "@core/stores";
import { cn } from "@core/utils/cn.ts";
import type { Protobuf } from "@meshtastic/core";
import { bbox, lineString } from "@turf/turf";

6
packages/web/src/pages/Messages.tsx

@ -8,13 +8,13 @@ import { Input } from "@components/UI/Input.tsx";
import { SidebarButton } from "@components/UI/Sidebar/SidebarButton.tsx";
import { SidebarSection } from "@components/UI/Sidebar/SidebarSection.tsx";
import { useToast } from "@core/hooks/useToast.ts";
import { useDevice } from "@core/stores/deviceStore.ts";
import {
MessageState,
MessageType,
useDevice,
useMessageStore,
} from "@core/stores/messageStore/index.ts";
import { useSidebar } from "@core/stores/sidebarStore.tsx";
useSidebar,
} from "@core/stores";
import { cn } from "@core/utils/cn.ts";
import { randId } from "@core/utils/randId.ts";
import { Protobuf, Types } from "@meshtastic/core";

3
packages/web/src/pages/Nodes/index.tsx

@ -17,8 +17,7 @@ import { Sidebar } from "@components/Sidebar.tsx";
import { Avatar } from "@components/UI/Avatar.tsx";
import { Input } from "@components/UI/Input.tsx";
import useLang from "@core/hooks/useLang.ts";
import { useAppStore } from "@core/stores/appStore.ts";
import { useDevice } from "@core/stores/deviceStore.ts";
import { useAppStore, useDevice } from "@core/stores";
import { Protobuf, type Types } from "@meshtastic/core";
import { numberToHexUnpadded } from "@noble/curves/abstract/utils";
import { LockIcon, LockOpenIcon } from "lucide-react";

3
packages/web/src/routes.tsx

@ -1,6 +1,5 @@
import { DialogManager } from "@components/Dialog/DialogManager.tsx";
import type { useAppStore } from "@core/stores/appStore.ts";
import type { useMessageStore } from "@core/stores/messageStore/index.ts";
import type { useAppStore, useMessageStore } from "@core/stores";
import ChannelsPage from "@pages/Channels.tsx";
import ConfigPage from "@pages/Config/index.tsx";
import { Dashboard } from "@pages/Dashboard/index.tsx";

Loading…
Cancel
Save