|
1 | 1 | <template> |
2 | | - <v-container> |
3 | | - <v-row |
| 2 | + <v-expansion-panels |
| 3 | + v-model="expanded" |
| 4 | + accordion |
| 5 | + multiple |
| 6 | + > |
| 7 | + <v-expansion-panel |
4 | 8 | v-for="sensor in sensors" |
5 | 9 | :key="sensor.id" |
6 | 10 | > |
7 | | - <v-col> |
8 | | - {{ $filters.prettyCase(sensor.friendly_name) }} |
9 | | - |
10 | | - <v-chip |
11 | | - v-for="(value, key) in sensor.values" |
12 | | - :key="`${sensor.id}-${key}`" |
13 | | - small |
14 | | - class="ml-2" |
| 11 | + <v-expansion-panel-header> |
| 12 | + <template #actions> |
| 13 | + <v-icon |
| 14 | + dense |
| 15 | + class="mr-1" |
| 16 | + > |
| 17 | + $expand |
| 18 | + </v-icon> |
| 19 | + </template> |
| 20 | + <div> |
| 21 | + {{ $filters.prettyCase(sensor.friendly_name) }} |
| 22 | + |
| 23 | + <v-chip |
| 24 | + v-for="(value, key) in sensor.values" |
| 25 | + :key="`${sensor.id}-${key}`" |
| 26 | + small |
| 27 | + class="ml-2" |
| 28 | + > |
| 29 | + {{ $filters.prettyCase(key.toString()) }}: {{ getFormattedValue(sensor, key.toString(), value) }} |
| 30 | + </v-chip> |
| 31 | + </div> |
| 32 | + </v-expansion-panel-header> |
| 33 | + |
| 34 | + <v-expansion-panel-content> |
| 35 | + <v-row v-if="getChartableFields(sensor).length"> |
| 36 | + <sensor-chart |
| 37 | + v-for="field in getChartableFields(sensor)" |
| 38 | + :key="`${sensor.id}-chart-${field}`" |
| 39 | + :sensor-id="sensor.id" |
| 40 | + :field="field" |
| 41 | + :label="$filters.prettyCase(field)" |
| 42 | + :units="getUnits(sensor, field)" |
| 43 | + /> |
| 44 | + </v-row> |
| 45 | + |
| 46 | + <div |
| 47 | + v-else |
| 48 | + class="text--secondary" |
15 | 49 | > |
16 | | - {{ $filters.prettyCase(key.toString()) }}: {{ getFormattedValue(sensor, key.toString(), value) }} |
17 | | - </v-chip> |
18 | | - </v-col> |
19 | | - </v-row> |
20 | | - </v-container> |
| 50 | + {{ $t('app.general.label.no_data') }} |
| 51 | + </div> |
| 52 | + </v-expansion-panel-content> |
| 53 | + </v-expansion-panel> |
| 54 | + </v-expansion-panels> |
21 | 55 | </template> |
22 | 56 |
|
23 | 57 | <script lang="ts"> |
24 | 58 | import { Component, Vue } from 'vue-property-decorator' |
| 59 | +import SensorChart from './SensorChart.vue' |
25 | 60 |
|
26 | | -@Component({}) |
| 61 | +@Component({ |
| 62 | + components: { |
| 63 | + SensorChart |
| 64 | + } |
| 65 | +}) |
27 | 66 | export default class Sensors extends Vue { |
28 | 67 | get sensors (): Moonraker.Sensor.Entry[] { |
29 | 68 | return this.$typedGetters['sensors/getSensors'] |
30 | 69 | } |
31 | 70 |
|
| 71 | + get expanded (): number[] { |
| 72 | + const sensors = this.sensors |
| 73 | + const expandedKeys = this.$typedState.sensors.expanded |
| 74 | +
|
| 75 | + return sensors |
| 76 | + .map((sensor, index) => expandedKeys.includes(sensor.id) |
| 77 | + ? index |
| 78 | + : -1) |
| 79 | + .filter(i => i !== -1) |
| 80 | + } |
| 81 | +
|
| 82 | + set expanded (value: number[]) { |
| 83 | + const sensors = this.sensors |
| 84 | + const expandedKeys = value |
| 85 | + .map(index => sensors[index]?.id) |
| 86 | + .filter((id): id is string => id != null) |
| 87 | +
|
| 88 | + this.$typedDispatch('sensors/saveExpanded', expandedKeys) |
| 89 | + } |
| 90 | +
|
| 91 | + getChartableFields (sensor: Moonraker.Sensor.Entry): string[] { |
| 92 | + return Object.entries(sensor.values) |
| 93 | + .filter(([, value]) => typeof value === 'number') |
| 94 | + .map(([key]) => key) |
| 95 | + } |
| 96 | +
|
| 97 | + getUnits (sensor: Moonraker.Sensor.Entry, key: string): string | undefined { |
| 98 | + return sensor.parameter_info?.find(x => x.name === key)?.units |
| 99 | + } |
| 100 | +
|
32 | 101 | getFormattedValue (sensor: Moonraker.Sensor.Entry, key: string, value: unknown) { |
33 | 102 | if (value == null || value === '') { |
34 | 103 | return '--' |
35 | 104 | } |
36 | 105 |
|
37 | | - const parameterUnits = sensor.parameter_info?.find(x => x.name === key)?.units |
38 | | - const units = parameterUnits |
39 | | - ? ` ${parameterUnits}` |
| 106 | + const units = this.getUnits(sensor, key) |
| 107 | + const suffix = units |
| 108 | + ? ` ${units}` |
40 | 109 | : '' |
41 | 110 |
|
42 | 111 | if (typeof value === 'number') { |
43 | | - return `${Math.round(value * 100) / 100}${units}` |
| 112 | + return `${Math.round(value * 100) / 100}${suffix}` |
44 | 113 | } |
45 | 114 |
|
46 | | - return `${value}${units}` |
| 115 | + return `${value}${suffix}` |
47 | 116 | } |
48 | 117 | } |
49 | 118 | </script> |
0 commit comments