UX Spec

Design Pattern: Device Picker

Amy TangJul 8 2026
Open Spec Changes
No dedicated OpenSpec change — spec is the design doc + prototype(search, filter, select up to 50 devices)
Prototype
device-picker-dialog-demo.html(search, filter, select up to 50 devices)

Visual basis: vortex-1.0 — verify behavior / copy / structure, not pixel style.

Context

Why we're building this

VORTEX assigns permissions per device, not per site — so granting a role access means picking the exact devices it may touch. At scale that is the hard part: an organization can hold tens of thousands of devices across many sites and seven device types, and a single grant is capped at 50. Browsing or scanning thumbnails to find them no longer works; selection has to be filter-first.

The Device Picker is one reusable dialog for exactly that — find the right devices and pick up to 50, fast and consistently. It anchors on location first: a Tree View drives the Sites filter so the huge set narrows by where devices live, and it borrows Filter Combo's cross-filter (AND) policy for a cross-site, cross-type search with a dedicated result list. It ships first for device-level permission assignment, and is reusable wherever a feature needs "select up to N devices from anywhere".

Section 01

對話框結構

Device Picker 是一個模態對話框,讓使用者跨站、跨裝置類型搜尋並挑選最多 50 台裝置。固定尺寸 1116 × 747,分三塊。

dp-default
Device Picker 預設狀態 — 左篩選面板 + 右結果清單,一進來就顯示裝置

三個區塊 Regions

區塊 內容
Header 70px 標題「Select Devices」(左)+ 關閉鈕(右上)
Content 607px 左:篩選面板(280px);右:結果清單(716px);中間間距 40px
Footer 70px 右對齊的「Select」+「Cancel」兩顆按鈕

為什麼是「左篩選 + 右結果」 Layout rationale

  • 需求是跨站搜尋,不是「先選站再看裝置」,所以不用左樹右清單(會造成心智模型衝突)。
  • 挑選器的目的是「選東西」,所以一進來就顯示結果(預設 50 筆),不強迫先設篩選才看得到。
  • 左側篩選維度(搜尋、Sites、Device types)常駐可見,不用額外點擊;右側結果區獨立、寬敞。

組裝了哪些 pattern Composition

Device Picker 不是原子元件,而是組裝

各區塊細節見後續 Section;tokens 與 chip/search 樣式沿用 filter-combo 的 VORTEX 1.0 設計。

Section 02

篩選面板

左側 280px 的篩選面板,由上到下:Filter 標題(含 Reset)、搜尋、Sites、Device types,以及條件出現的 Premium camera。

Filter 標題 Header

  • 「Filter」標題 + filter icon。
  • Reset:只要有任一篩選在作用(搜尋有字、選了 site、勾了類型、或 Premium 開啟)就出現在右側;點了一次清空所有篩選。

搜尋 Search

  • placeholder:「Filter by device name」。
  • 範圍:跨所有 site、所有類型搜尋裝置名稱。
  • 觸發:輸入 2 個字以上、停頓 300ms;命中片段以 highlight 標示。
  • 結果上限:最多顯示 50 筆;超過時顯示「Showing first 50 results」。
  • 有字時尾端出現清除「X」。
dp-search
搜尋「Cam」— 跨站跨類型過濾裝置名稱,命中片段 highlight

Sites 站點篩選

點開 Sites 會展開一個站點樹選單(沿用 Design Pattern: Tree View):頂部有搜尋框、命中自動展開祖先,採節點含入式三態勾選——

  • 勾選:此節點與其所有子孫都納入。
  • 半選:此節點本身納入(其直屬裝置算數),但有子孫被排除。
  • 未勾:此節點與子孫都不納入。

選了站點後,結果清單只顯示這些站點範圍內的裝置。

dp-sites-menu
Sites 站點樹選單 — 節點含入式三態勾選(沿用 Tree View)

Device types 裝置類型

  • 七種:Camera / NVR / Bridge / Speaker / PoE Switch / VSS / Unknown。
  • 多選;全不勾=顯示所有類型;勾選任意組合則只留那些類型。
  • 版面自然換行(不強制三欄),依標籤寬度排成三列。

Premium camera 條件出現

  • 只有當「Camera」被勾選時才出現(在篩選群組下方獨立一行)。
  • 開啟:結果只顯示 premium 攝影機;關閉(預設):顯示所有攝影機。
  • Camera 取消勾選時,這一行消失。
dp-types-premium
勾選 Camera — 結果只留攝影機,篩選面板下方出現 Premium camera 開關

驗收條件 QA · Given-When-Then

  • Given 有任一篩選在作用,Then 右上出現 Reset;點 Reset 清空全部篩選。
  • Given 搜尋輸入 2 字以上並停頓,Then 跨站跨類型過濾、命中 highlight;超過 50 筆顯示「Showing first 50 results」。
  • Given 在 Sites 選單勾選站點,Then 結果只顯示這些站點範圍內的裝置。
  • Given 勾選 Camera,Then 出現 Premium camera 開關;取消 Camera,Then 該開關消失。
Section 03

結果清單

右側 716px 的結果區:上方是 N/50 計數列(見 Section 04),下方是可捲動的裝置清單。裝置依所屬 site 分組,每組上方有一條 breadcrumb 標頭。

分組與 breadcrumb Grouping & breadcrumb

  • 每個 site 一段:40px 標頭(該 site 的階層路徑)+ 該 site 底下的裝置列。
  • breadcrumb:根層在左(灰色),一路用「>」接到最末層;最末層(葉)以白色、粗體顯示、永不截斷
  • 截斷規則:空間不夠時,優先保留「葉」與「根」,中間層先用 ellipsis 縮短、再折成「⋯」;「⋯」不可點,hover 顯示完整路徑。

兩種列模式 Row modes

模式 觸發 列高 縮圖
混合類型(預設) 未特別只選 Camera 60px 攝影機列 hover 時浮現預覽縮圖(128×80,游標上方)
只有攝影機 Device type 只勾 Camera 100px 每列直接內嵌縮圖,不需 hover
dp-camera-only
只有攝影機模式 — 100px 列、內嵌預覽縮圖(Figma frame)

載入與排序 Loading & sort

  • 初始:一進來就顯示前 50 筆(不是空的)。
  • 捲動載入:捲到底自動載入下一批 50 筆,載入時在清單末端顯示一顆置中 spinner(沒有獨立的「Load more」按鈕)。
  • 預設排序:使用者上次選過裝置的 site 排前面(記在 localStorage),其次依 site 名稱字母序;同一 site 內依裝置名稱字母序。

空狀態 Empty state

無任何符合時,清單中央顯示插圖 +「No Matches Found」+「Please try adjusting filters or use different keywords.」(picker 情境下不放 CTA 按鈕)。

dp-empty
空狀態 — No Matches Found(整個對話框,比例與其他截圖一致)

驗收條件 QA · Given-When-Then

  • Given 開啟對話框,Then 立即顯示前 50 筆(非空),依預設排序分組。
  • Given 捲到清單底部且還有更多,Then 顯示 spinner 並載入下一批 50 筆。
  • Given 只勾選 Camera,Then 列切換為 100px 內嵌縮圖模式;混合類型時攝影機列改為 hover 才出現縮圖。
  • Given 篩選/搜尋無任何結果,Then 顯示「No Matches Found」空狀態。
Section 04

選取與 50 上限

多選勾選,一次最多 50 台。計數列(N/50 selected)在結果區的最上方、右對齊。

N/50 計數的三種狀態 Counter states

狀態 樣式 可點
0 selected 一般灰字(@color-text-03
1–49 selected 藍色連結字(@color-primary-default、semibold) 是 → 開啟「已選檢視」(見 Section 05)
50/50 selected 紅色@color-danger-default),提示已達上限 是 → 開啟已選檢視
dp-selected-some
選取 3 台 — 計數列轉為藍色連結「3/50 selected」,可點開已選檢視

達到上限 At limit

  • 選滿 50 台後,未勾選的列變為停用、不能再勾;提示「Maximum 50 devices reached」。
  • 已勾選的仍可取消。

選取跨篩選保留 Persistence

  • 改變篩選或搜尋不會取消已選的裝置。
  • 已選的裝置即使目前不在過濾結果中,仍保持勾選狀態(要檢視/移除可用 Section 05 的已選檢視)。

條件之間取交集 Cross-filter (AND)

搜尋、Sites、Device types、Premium 之間彼此獨立、取 AND 交集——條件全部成立的裝置才留在結果中;篩選之間不互相縮限彼此的選項(與 Filter Combo 的 cross-filter 政策一致)。

驗收條件 QA · Given-When-Then

  • Given 0 選取,Then 計數為灰字、不可點。
  • Given 選了 1–49 台,Then 計數變藍色連結、可點開已選檢視。
  • Given 選滿 50 台,Then 計數轉紅色,未勾選的列停用並提示上限。
  • Given 改變篩選或搜尋,Then 已選裝置維持勾選、不被清掉。
  • Given 同時套用多個條件,Then 結果為各條件的 AND 交集。
Section 05

已選檢視

點計數列(有選取時)會切換到已選檢視:把「篩選 + 結果」的版面換成一份全寬的已選裝置清單,讓使用者不離開對話框就能逐筆確認、移除。

版面 Layout

  • 篩選面板隱藏,清單橫跨整個內容區(1036px 寬)。
  • 頂部:返回鈕 + 標題「N/50 selected」。
  • 清單同樣依 site 分組、用相同的 breadcrumb 標頭。
dp-selected-view
已選檢視 — 全寬已選清單,逐筆 hover 移除

移除 Remove

  • 每一列hover 時右端才出現移除「X」(紅色);點了就從已選中移除。
  • 移到 0 台時,自動返回原本的「篩選 + 結果」版面。
  • 返回鈕可隨時回到主畫面(已選狀態保留)。

驗收條件 QA · Given-When-Then

  • Given 有選取並點計數,Then 進入已選檢視、清單全寬、篩選面板隱藏。
  • Given 在某列 hover,Then 右端出現移除鈕;點擊後該裝置從已選移除。
  • Given 移除到 0 台,Then 自動返回主畫面。
  • Given 點返回鈕,Then 回到主畫面且已選狀態保留。
Section 06

使用場景

目前用在哪 Where it's used

  • 裝置層級權限指派:VORTEX 目前沒有 Site Permissions,權限是逐台裝置指派的,所以需要一個能跨站、跨類型挑出正確裝置的挑選器。Device Picker 就是為這個情境而生。
  • 未來 adopter:待撰寫的 Manage Device Access by Site 會用到它;任何需要「從全庫挑最多 N 台裝置」的功能也可重用。

它組裝了哪些 pattern Composition

Device Picker 是複合對話框,把既有 pattern 組起來:

借用 來源
Sites 篩選(節點含入式三態站點樹) Design Pattern: Tree View
多條件取交集(AND)、chip / search 樣式與 tokens Design Pattern: Filter Combo
部分資料載入(清單分批、樹逐層、搜尋上限 50) 平台共通原則

未來延伸 Future extensibility

  • Site Permissions 上線後:可在 Sites 篩選旁加「Select all devices in [site]」,版面不用改。
  • 新篩選維度(如 status、firmware):在左側面板 Device types 下方加新區塊即可。
  • Grid view:只有攝影機模式未來可加 list / grid 切換。

邊界 Boundaries

面向 說明
選取上限 一次最多 50 台(見 Section 04)
權限層級 目前只到裝置層級;Site Permissions 尚未實作
資料量 單一 org 可達上萬台裝置,靠搜尋 + 篩選收斂,不預期瀏覽整包

這份是複合 dialog pattern;它的下游功能規格(如 Manage Device Access by Site)屬 feature,不在本 pattern deck 範圍。