11import { mande } from 'mande'
22import { defineStore } from 'pinia'
33import {
4+ eventMode ,
45 vendorCobrandingTag ,
56} from '~/types/resources'
7+ import { applyEventDeviceOverrides } from '~/utils/eventDevices'
68
79import { MeshDevice } from '@meshtastic/core'
810import { TransportWebSerial } from '@meshtastic/transport-web-serial'
@@ -37,7 +39,7 @@ export const useDeviceStore = defineStore('device', {
3739 selectedDevice : < DeviceHardware | undefined > undefined ,
3840 selectedTarget : < DeviceHardware | undefined > undefined ,
3941 tag : < string | undefined > undefined ,
40- targets : < DeviceHardware [ ] > [ ] ,
42+ apiTargets : < DeviceHardware [ ] > [ ] ,
4143 isConnecting : false ,
4244 abortController : < AbortController | undefined > undefined ,
4345 readerClosed : < Promise < any > | undefined > undefined ,
@@ -46,6 +48,17 @@ export const useDeviceStore = defineStore('device', {
4648 }
4749 } ,
4850 getters : {
51+ /**
52+ * The API device list plus any devices only the active event's firmware
53+ * build ships. Derived (not baked into state) so it stays correct however
54+ * event mode and the device fetch interleave — plugins/eventMode.client.ts
55+ * can still re-resolve the edition from the live API after mount.
56+ */
57+ targets ( ) : DeviceHardware [ ] {
58+ // Co-branded builds are pinned to one vendor's devices; never widen them.
59+ if ( vendorCobrandingTag . length > 0 ) return this . apiTargets
60+ return applyEventDeviceOverrides ( this . apiTargets , eventMode . enabled ? eventMode . eventTag : undefined )
61+ } ,
4962 filteredDevices ( ) : DeviceHardware [ ] {
5063 if ( this . tag ) {
5164 return this . targets . filter ( t => t . tags ?. includes ( this . tag ?? '' ) || t . architecture === this . tag )
@@ -124,14 +137,14 @@ export const useDeviceStore = defineStore('device', {
124137 } ,
125138 setTargetsList ( targets : DeviceHardware [ ] ) {
126139 if ( vendorCobrandingTag . length > 0 ) {
127- this . targets = targets . filter (
140+ this . apiTargets = targets . filter (
128141 ( t : DeviceHardware ) => t . activelySupported
129142 && ! t . architecture . toLowerCase ( ) . startsWith ( 'portduino' )
130143 && t . tags ?. includes ( vendorCobrandingTag ) ,
131144 )
132145 }
133146 else {
134- this . targets = targets . filter (
147+ this . apiTargets = targets . filter (
135148 ( t : DeviceHardware ) => t . activelySupported
136149 && ! t . architecture . toLowerCase ( ) . startsWith ( 'portduino' ) ,
137150 )
0 commit comments