diff --git a/rulesdocs/refector_rules_and_tracking.md b/rulesdocs/refector_rules_and_tracking.md index 0d2d2299..bf981fb8 100644 --- a/rulesdocs/refector_rules_and_tracking.md +++ b/rulesdocs/refector_rules_and_tracking.md @@ -12,12 +12,14 @@ - Treat `npm run build` output files committed into this repo as intentional deployment artifacts; do not discard them as noise. ## Server backend +- Every service must live in its own folder, even when it remains a single-file implementation. - Convert every service into a folder-based structure. - Split very large service files into smaller focused modules. - Keep files concise and single-purpose. - Add clear title comments at top of split files. ## WebUI frontend +- Every component must live in its own folder, even when it remains a single-file implementation. - Split large JSX/components and large backing JS files into folderized modules. - Keep modules clear and focused, with title comments. - Each component must live entirely inside its own folder; do not leave wrapper/compatibility component files outside that folder. @@ -61,7 +63,7 @@ - [x] spectator app - [x] vip audio upload card - [x] admin panel -- [ ] drive dock action +- [x] drive dock action - [ ] gamepad mapping settings - [ ] mobile controls - [ ] top down map @@ -74,6 +76,7 @@ - video tile - vip audio upload card - admin panel +- drive dock action ### LARGE CHANGES - Split `webui/src/mini/MiniSummaryApp.jsx` into folderized modules under `webui/src/mini/MiniSummaryApp/` with a compatibility entrypoint preserved. @@ -81,6 +84,7 @@ - Split `webui/src/components/VideoTile.jsx` by extracting HUD, overlays, chat input, and constants into `webui/src/components/VideoTile/` while preserving the existing `VideoTile.jsx` public component API. - Split `webui/src/components/vip/VipAudioUploadCard.jsx` by extracting transport/audio helpers and UI atoms into `webui/src/components/vip/VipAudioUploadCard/` while preserving the existing `VipAudioUploadCard.jsx` import/export API. - Split `webui/src/components/AdminPanel.jsx` into `webui/src/components/AdminPanel/` and extracted monitor/health/log/LLM helper modules; updated consumers to folder entrypoint and removed external wrapper file. +- Moved `DriveDockAction` to `webui/src/components/DriveDockAction/index.jsx` and updated all consumers to folder entrypoint imports. ## Done criteria (per item) - [ ] Folderized structure created. diff --git a/webui/src/components/ControlSummary.jsx b/webui/src/components/ControlSummary.jsx index c336256b..cfd1cc4c 100644 --- a/webui/src/components/ControlSummary.jsx +++ b/webui/src/components/ControlSummary.jsx @@ -5,7 +5,7 @@ import { useControlSystem } from '../controls/index.js'; import { formatKeyLabel } from '../controls/keymapUtils.js'; import TopDownMap from './TopDownMap.jsx'; import RoverRoster from './RoverRoster.jsx'; -import DriveDockAction, { useDriveDockState } from './DriveDockAction.jsx'; +import DriveDockAction, { useDriveDockState } from './DriveDockAction/index.jsx'; import NightVisionControl from './NightVisionControl.jsx'; import HornControl from './HornControl.jsx'; import CameraTiltControl from './CameraTiltControl.jsx'; diff --git a/webui/src/components/DriveDockAction.jsx b/webui/src/components/DriveDockAction/index.jsx similarity index 98% rename from webui/src/components/DriveDockAction.jsx rename to webui/src/components/DriveDockAction/index.jsx index 62c66519..52f896cc 100644 --- a/webui/src/components/DriveDockAction.jsx +++ b/webui/src/components/DriveDockAction/index.jsx @@ -1,7 +1,7 @@ import { useMemo, useState } from 'react'; -import { useControlSystem } from '../controls/index.js'; -import { useTelemetryFrame } from '../context/TelemetryContext.jsx'; -import { formatKeyLabel } from '../controls/keymapUtils.js'; +import { useControlSystem } from '../../controls/index.js'; +import { useTelemetryFrame } from '../../context/TelemetryContext.jsx'; +import { formatKeyLabel } from '../../controls/keymapUtils.js'; export function deriveDriveDockState(frame) { const sensors = frame?.sensors || {}; diff --git a/webui/src/components/MobileControls.jsx b/webui/src/components/MobileControls.jsx index 7eba7b0e..342319c4 100644 --- a/webui/src/components/MobileControls.jsx +++ b/webui/src/components/MobileControls.jsx @@ -1,7 +1,7 @@ import { useCallback, useEffect, useRef, useState } from 'react'; import { useControlSystem } from '../controls/index.js'; import { clampUnit } from '../controls/controlMath.js'; -import DriveDockAction, { useDriveDockState } from './DriveDockAction.jsx'; +import DriveDockAction, { useDriveDockState } from './DriveDockAction/index.jsx'; import NightVisionControl from './NightVisionControl.jsx'; import HornControl from './HornControl.jsx'; import CameraTiltControl from './CameraTiltControl.jsx'; diff --git a/webui/src/components/RightPaneTabs.jsx b/webui/src/components/RightPaneTabs.jsx index 5087a3a7..6b3b045f 100644 --- a/webui/src/components/RightPaneTabs.jsx +++ b/webui/src/components/RightPaneTabs.jsx @@ -7,7 +7,7 @@ import { LinkButtonsPanel, NicknameEntryPanel } from './UserListPanel.jsx'; import ReplaySourcesPanel from './ReplaySourcesPanel.jsx'; import Tabs, { Tab, TabList, TabPanel, TabPanels } from './Tabs.jsx'; import TopDownMap from './TopDownMap.jsx'; -import DriveDockAction, { useDriveDockState } from './DriveDockAction.jsx'; +import DriveDockAction, { useDriveDockState } from './DriveDockAction/index.jsx'; import { useTelemetryFrame } from '../context/TelemetryContext.jsx'; import { useControlSystem } from '../controls/index.js'; import RoverQueuesPanel from './RoverQueuesPanel.jsx';