Skip to main content

Device Selector

The Device selector provides a device picker that can be filtered by integration.

⚠️ Note: This selector can provide part of the functionality of the target property (specifically device_id), but for more flexible target selection that supports multiple target types simultaneously, use the target property instead. See Target Selector for details.

Options

All device selectors accept these common metadata options:

  • default?: TDeviceId - Default selected device
  • description?: string - Human-readable description shown in the UI
  • required?: boolean - Whether the field must be provided

Device-specific options (from ServiceListSelector["device"]):

  • integration?: TPlatformId - Filter devices by integration/platform
  • manufacturer?: string - Filter devices by manufacturer
  • model?: string - Filter devices by model
  • multiple?: boolean - When true, allows selecting multiple devices (returns TDeviceId[])
  • filter?: DeviceFilterSelector | DeviceFilterSelector[] - Additional device filter selector(s)
  • entity?: EntityFilterSelector | EntityFilterSelector[] - Filter devices by their entities

Return Type

  • TDeviceId when multiple is not set or false
  • TDeviceId[] when multiple: true

Example

import { TServiceParams } from "@digital-alchemy/core";
import { ServiceField } from "@digital-alchemy/synapse";

export function SynapseServiceCreate({
synapse,
context,
logger,
}: TServiceParams) {
synapse.service.create(
{
context,
description: "Configure a device",
fields: {
// Device selector filtered by integration
device: ServiceField.Device({
integration: "synapse",
description: "Device to configure",
required: true,
}),
},
},
async data => {
// data.device is typed as: TDeviceId
logger.info(`Configuring device: ${data.device}`);
}
);
}