@@ -4,6 +4,7 @@ import { Input } from '@/components/ui/input';
44import { Label } from '@/components/ui/label' ;
55import { Button } from '@/components/ui/button' ;
66import { Select , SelectContent , SelectItem , SelectTrigger , SelectValue } from '@/components/ui/select' ;
7+ import { Switch } from '@/components/ui/switch' ;
78import { Plus , X , Palette , ChevronDown , ChevronUp } from 'lucide-react' ;
89import type { ValueMapping } from './widgets/ValueDisplayWidget' ;
910import type { DonutSeries } from './widgets/DonutChartWidget' ;
@@ -70,14 +71,14 @@ export default function PropertiesPanel() {
7071 < div className = "space-y-2" >
7172 < Label > Data Source</ Label >
7273 < Select
73- value = { draftConfig . dataSource || ( [ 'HistoricalTrendWidget' , 'SparklineWidget' , 'GaugeWidget' ] . includes ( widget . type ) ? 'variable' : 'valuestore' ) }
74+ value = { draftConfig . dataSource || ( [ 'HistoricalTrendWidget' , 'SparklineWidget' , 'GaugeWidget' , 'MapWidget' ] . includes ( widget . type ) ? 'variable' : 'valuestore' ) }
7475 onValueChange = { ( val ) => handleConfigChange ( { dataSource : val } ) }
7576 >
7677 < SelectTrigger >
7778 < SelectValue placeholder = "Select data source" />
7879 </ SelectTrigger >
7980 < SelectContent >
80- { ! [ 'HistoricalTrendWidget' , 'SparklineWidget' , 'GaugeWidget' ] . includes ( widget . type ) && (
81+ { ! [ 'HistoricalTrendWidget' , 'SparklineWidget' , 'GaugeWidget' , 'MapWidget' ] . includes ( widget . type ) && (
8182 < SelectItem value = "valuestore" > Valuestore</ SelectItem >
8283 ) }
8384 { ! [ 'ToggleSwitchWidget' , 'SliderWidget' ] . includes ( widget . type ) && (
@@ -88,7 +89,7 @@ export default function PropertiesPanel() {
8889 </ div >
8990 < div className = "space-y-2" >
9091 < Label >
91- { ( draftConfig . dataSource === 'variable' || ( [ 'HistoricalTrendWidget' , 'SparklineWidget' , 'GaugeWidget' ] . includes ( widget . type ) && ! draftConfig . dataSource ) )
92+ { ( draftConfig . dataSource === 'variable' || ( [ 'HistoricalTrendWidget' , 'SparklineWidget' , 'GaugeWidget' , 'MapWidget' ] . includes ( widget . type ) && ! draftConfig . dataSource ) )
9293 ? 'Variable Identifier' : 'Key' }
9394 </ Label >
9495 < Input
@@ -288,6 +289,59 @@ export default function PropertiesPanel() {
288289 </ div >
289290 ) }
290291
292+ { widget . type === 'MapWidget' && (
293+ < div className = "space-y-4" >
294+ < div className = "space-y-2" >
295+ < Label title = "Maximum number of points to fetch" > Data Limit</ Label >
296+ < Input
297+ type = "number"
298+ placeholder = "1000"
299+ className = "h-8"
300+ min = { 1 }
301+ max = { 10000 }
302+ value = { draftConfig . limit || '' }
303+ onChange = { ( e ) => {
304+ const val = e . target . value ? Number ( e . target . value ) : undefined ;
305+ handleConfigChange ( { limit : val !== undefined ? Math . min ( val , 10000 ) : undefined } ) ;
306+ } }
307+ />
308+ < p className = "text-[10px] text-muted-foreground italic" >
309+ Max: 10,000 points.
310+ </ p >
311+ </ div >
312+ < div className = "space-y-2" >
313+ < Label > Path Color</ Label >
314+ < div className = "flex gap-2 items-center" >
315+ < Input
316+ type = "color"
317+ value = { draftConfig . pathColor || '#2563eb' }
318+ onChange = { ( e ) => handleConfigChange ( { pathColor : e . target . value } ) }
319+ className = "w-12 h-8 p-1 cursor-pointer"
320+ />
321+ < Input
322+ type = "text"
323+ placeholder = "#2563eb"
324+ value = { draftConfig . pathColor || '#2563eb' }
325+ onChange = { ( e ) => handleConfigChange ( { pathColor : e . target . value } ) }
326+ className = "flex-1 h-8"
327+ />
328+ </ div >
329+ </ div >
330+ < div className = "flex items-center justify-between py-2 border-t mt-2" >
331+ < div className = "space-y-0.5" >
332+ < Label className = "text-xs" > Show History Table</ Label >
333+ < p className = "text-[10px] text-muted-foreground" >
334+ Display location history table next to map.
335+ </ p >
336+ </ div >
337+ < Switch
338+ checked = { draftConfig . showTable || false }
339+ onCheckedChange = { ( checked ) => handleConfigChange ( { showTable : checked } ) }
340+ />
341+ </ div >
342+ </ div >
343+ ) }
344+
291345 { widget . type === 'ValueDisplayWidget' && (
292346 < div className = "space-y-4" >
293347 < div className = "space-y-2" >
0 commit comments