diff options
Diffstat (limited to 'master/client/src')
| -rw-r--r-- | master/client/src/components/G7Map.vue | 73 | 
1 files changed, 53 insertions, 20 deletions
| diff --git a/master/client/src/components/G7Map.vue b/master/client/src/components/G7Map.vue index 771756a..626c67f 100644 --- a/master/client/src/components/G7Map.vue +++ b/master/client/src/components/G7Map.vue @@ -5,16 +5,19 @@  			<span class="title">Rooms</span>  			<ul>  				<li -					:key="room" -					v-for="[index, room] in Object.entries(rooms)" +					:key="room_nr" +					v-for="[room_nr, room] in Object.entries(rooms)"  				> -					{{ index }}. {{ room }} +					<span class="room-nr">{{ room_nr }}. {{ room }}</span> +					<span +						:style="{color: get_temperature_color(minion_data_map[room_nr])}" +						v-if="minion_data_map[room_nr] !== undefined" +					> +						{{ minion_data_map[room_nr] }}°C +					</span>  				</li>  			</ul>  		</div> -		<div> -			{{ minion_data_arr }} -		</div>  	</div>  </template> @@ -35,11 +38,6 @@ type MinionTemperatureResponse = {      error: string | null  } -type MinionData = { -	temperature: number -	position: number -} -  const rooms = {  	1: "Studio / G3",  	2: "Studio 1", @@ -57,6 +55,15 @@ const rooms = {  	14: "Trapphus"  }; +const temperature_colors = { +	extremly_hot: "#d00000", +	hot: "#dc2f02", +	mildly_hot: "#e85d04", +	mild: "#52b69a", +	cold: "#0077b6", +	freezing_cold: "#168aad" +}; +  export default defineComponent(  	{  		name: "G7Map", @@ -65,8 +72,33 @@ export default defineComponent(  				rooms: rooms  			};  		}, +		methods: { +			get_temperature_color(temperature: number) { +				if(temperature < 10) { +					return temperature_colors.freezing_cold; +				} + +				if(temperature < 20) { +					return temperature_colors.cold; +				} + +				if(temperature > 27) { +					return temperature_colors.mildly_hot; +				} + +				if(temperature > 31) { +					return temperature_colors.hot; +				} + +				if(temperature > 38) { +					return temperature_colors.extremly_hot; +				} + +				return temperature_colors.mild; +			} +		},  		setup(props) { -			const minion_data_arr: Ref<MinionData[]> = ref([]); +			const minion_data_map: Ref<Record<number, number>> = ref({});  			async function fetch_minion_ip_addresses() {  				let response: Response; @@ -139,22 +171,19 @@ export default defineComponent(  			async function fetch_all_minion_data() {  				const minion_info_arr = await fetch_minion_ip_addresses(); -				const minion_data_arr_buf: MinionData[] = []; +				const minion_data_map_buf: Record<number, number> = {};  				for(const minion_info of minion_info_arr) {  					const temperature =  						await fetch_minion_temperature("lol", minion_info.ip_address); -					minion_data_arr_buf.push({ -						temperature: temperature, -						position: minion_info.position -					}); +					minion_data_map_buf[minion_info.position] = temperature;  				} -				minion_data_arr.value = minion_data_arr_buf; +				minion_data_map.value = minion_data_map_buf;  			} -			return { minion_data_arr, fetch_all_minion_data }; +			return { minion_data_map, fetch_all_minion_data };  		},  		created() {  			this.fetch_all_minion_data(); @@ -184,8 +213,12 @@ export default defineComponent(          min-width: 40%;          ul li { -			line-height: 1.75em; +			line-height: 2.25em;  			list-style: none; + +            .room-nr { +                margin-right: 1.5em; +            }          }          .title { | 
