mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2026-02-01 19:14:11 +01:00
Merge pull request #1142 from theknut/patch-1
feat: calculate yAxisTicks based on given values
This commit is contained in:
@@ -6143,6 +6143,7 @@ function GeneratePowerPage(page: NSPanel.PagePower): NSPanel.Payload[] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const timeValueRegEx = /\~\d+:(\d+)/g;
|
||||||
function GenerateChartPage(page: NSPanel.PageChart): NSPanel.Payload[] {
|
function GenerateChartPage(page: NSPanel.PageChart): NSPanel.Payload[] {
|
||||||
try {
|
try {
|
||||||
activePage = page;
|
activePage = page;
|
||||||
@@ -6153,16 +6154,41 @@ function GenerateChartPage(page: NSPanel.PageChart): NSPanel.Payload[] {
|
|||||||
|
|
||||||
let heading = page.heading !== undefined ? page.heading : "Chart...";
|
let heading = page.heading !== undefined ? page.heading : "Chart...";
|
||||||
|
|
||||||
let txt = getState(id + '.ACTUAL').val;
|
const txt = getState(id + '.ACTUAL')?.val;
|
||||||
if (!page.items[0].yAxisTicks) {
|
if (!txt) {
|
||||||
throw new Error (`Page item ${id} yAxisTicks is undefined!`)
|
throw new Error(`Unable to get the state of ${id}.ACTUAL`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let yAxisTicks : number[] = [];
|
||||||
|
|
||||||
|
if (!page.items[0].yAxisTicks) {
|
||||||
|
const sorted = [...txt.matchAll(timeValueRegEx)].map(x => Number(x[1])).sort((x, y) => x < y ? -1 : 1);
|
||||||
|
if (sorted.length === 0) {
|
||||||
|
throw new Error (`Page item ${id} yAxisTicks is undefined and unable to be calculated!`)
|
||||||
|
}
|
||||||
|
const minValue = sorted[0];
|
||||||
|
const maxValue = sorted[sorted.length - 1];
|
||||||
|
const tick = Math.max(Number(((maxValue - minValue) / 5).toFixed()), 10);
|
||||||
|
|
||||||
|
let currentTick = minValue - tick;
|
||||||
|
while(currentTick < (maxValue + tick)) {
|
||||||
|
yAxisTicks.push(currentTick);
|
||||||
|
currentTick += tick;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Debug) {
|
||||||
|
log(`Calculated yAxisTicks for ${id} (Min: ${minValue}, Max: ${maxValue}, Tick: ${tick}): ${yAxisTicks}`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
yAxisTicks = typeof page.items[0].yAxisTicks === 'string'
|
||||||
|
? JSON.parse(getState(page.items[0].yAxisTicks).val)
|
||||||
|
: page.items[0].yAxisTicks;
|
||||||
|
}
|
||||||
|
|
||||||
if (!page.items[0].onColor) {
|
if (!page.items[0].onColor) {
|
||||||
throw new Error (`Page item ${id} onColor is undefined!`)
|
throw new Error (`Page item ${id} onColor is undefined!`)
|
||||||
}
|
}
|
||||||
|
|
||||||
let yAxisTicks = (typeof page.items[0].yAxisTicks == 'object') ? page.items[0].yAxisTicks : JSON.parse(getState(page.items[0].yAxisTicks).val);
|
|
||||||
|
|
||||||
out_msgs.push({
|
out_msgs.push({
|
||||||
payload: 'entityUpd~' + //entityUpd
|
payload: 'entityUpd~' + //entityUpd
|
||||||
heading + '~' + //heading
|
heading + '~' + //heading
|
||||||
@@ -6175,7 +6201,6 @@ function GenerateChartPage(page: NSPanel.PageChart): NSPanel.Payload[] {
|
|||||||
|
|
||||||
if (Debug) log('GenerateChartPage payload: ' + JSON.stringify(out_msgs), 'info');
|
if (Debug) log('GenerateChartPage payload: ' + JSON.stringify(out_msgs), 'info');
|
||||||
return out_msgs;
|
return out_msgs;
|
||||||
|
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
log('error at function GenerateChartPage: ' + err.message, 'warn');
|
log('error at function GenerateChartPage: ' + err.message, 'warn');
|
||||||
return [];
|
return [];
|
||||||
|
|||||||
Reference in New Issue
Block a user