diff --git a/pbiviz.json b/pbiviz.json index 9419718..5b06289 100644 --- a/pbiviz.json +++ b/pbiviz.json @@ -4,7 +4,7 @@ "displayName":"SPC Charts", "guid":"PBISPC", "visualClassName":"Visual", - "version":"1.4.3.4", + "version":"1.4.4.0", "description":"A PowerBI custom visual for SPC charts", "supportUrl":"https://github.com/AUS-DOH-Safety-and-Quality/PowerBI-SPC", "gitHubUrl":"https://github.com/AUS-DOH-Safety-and-Quality/PowerBI-SPC" diff --git a/src/Classes/settingsClass.ts b/src/Classes/settingsClass.ts index d0d6a4a..308e62d 100644 --- a/src/Classes/settingsClass.ts +++ b/src/Classes/settingsClass.ts @@ -107,6 +107,24 @@ export default class settingsClass { }) }) + if (this.settings.nhs_icons.show_variation_icons) { + const patterns: string[] = ["astronomical", "shift", "trend", "two_in_three"]; + const anyOutlierPatterns: boolean = patterns.some(d => this.settings.outliers[d]); + if (!anyOutlierPatterns) { + this.validationStatus.status = 1; + this.validationStatus.error = "Variation icons require at least one outlier pattern to be selected"; + } + } + + if (this.settings.nhs_icons.show_assurance_icons) { + const altTargetPresent: boolean = !isNullOrUndefined(this.settings.lines.alt_target); + const improvementDirection: string = this.settings.outliers.improvement_direction; + if (!altTargetPresent || improvementDirection === "neutral") { + this.validationStatus.status = 1; + this.validationStatus.error = "Assurance icons require an alternative target and a non-neutral improvement direction"; + } + } + this.derivedSettings.update(this.settings.spc) this.derivedSettingsGrouped = new Array(); if (is_grouped) { diff --git a/src/Classes/viewModelClass.ts b/src/Classes/viewModelClass.ts index a6938cf..1fdaa36 100644 --- a/src/Classes/viewModelClass.ts +++ b/src/Classes/viewModelClass.ts @@ -228,16 +228,16 @@ export default class viewModelClass { this.initialiseGroupedLines(); } } - this.plotProperties.update( - options, - this.plotPoints, - this.controlLimits, - this.inputData, - this.inputSettings.settings, - this.inputSettings.derivedSettings, - this.colourPalette - ) } + this.plotProperties.update( + options, + this.plotPoints, + this.controlLimits, + this.inputData, + this.inputSettings.settings, + this.inputSettings.derivedSettings, + this.colourPalette + ) this.firstRun = false; } diff --git a/src/D3 Plotting Functions/drawSummaryTable.ts b/src/D3 Plotting Functions/drawSummaryTable.ts index baa0935..3789d5c 100644 --- a/src/D3 Plotting Functions/drawSummaryTable.ts +++ b/src/D3 Plotting Functions/drawSummaryTable.ts @@ -122,10 +122,10 @@ export default function drawSummaryTable(selection: divBaseType, visualObj: Visu } const tableSelect = tableRows.selectAll('td') - .data((d) => cols.map(col => { - return {column: col.name, value: d.table_row[col.name]} - })) - .join('td'); + .data((d) => cols.map(col => { + return { column: col.name, value: d.table_row[col.name] } + })) + .join('td'); const nhsIconSettings = visualObj.viewModel.inputSettings.settings.nhs_icons; const draw_icons: boolean = nhsIconSettings.show_variation_icons || nhsIconSettings.show_assurance_icons; diff --git a/src/defaultSettings.ts b/src/defaultSettings.ts index ad944df..c812ef2 100644 --- a/src/defaultSettings.ts +++ b/src/defaultSettings.ts @@ -237,7 +237,7 @@ export const settingsPaneGroupings = { summary_table: { "General": ["show_table", "table_text_overflow", "table_opacity", "table_opacity_unselected", "table_outer_border_style", "table_outer_border_width", "table_outer_border_colour", "table_outer_border_top", "table_outer_border_bottom", "table_outer_border_left", "table_outer_border_right"], - "Header": ["table_header_font", "table_header_size", "table_header_text_align",, "table_header_font_weight", "table_header_text_transform", "table_header_text_padding", "table_header_colour", "table_header_bg_colour", "table_header_border_style", "table_header_border_width", "table_header_border_colour", "table_header_border_bottom", "table_header_border_inner"], + "Header": ["table_header_font", "table_header_size", "table_header_text_align", "table_header_font_weight", "table_header_text_transform", "table_header_text_padding", "table_header_colour", "table_header_bg_colour", "table_header_border_style", "table_header_border_width", "table_header_border_colour", "table_header_border_bottom", "table_header_border_inner"], "Body": ["table_body_font", "table_body_size", "table_body_text_align", "table_body_font_weight", "table_body_text_transform", "table_body_text_padding", "table_body_colour", "table_body_bg_colour", "table_body_border_style", "table_body_border_width", "table_body_border_colour", "table_body_border_top_bottom", "table_body_border_left_right"] } diff --git a/src/visual.ts b/src/visual.ts index 4460d97..ed90f66 100644 --- a/src/visual.ts +++ b/src/visual.ts @@ -160,9 +160,10 @@ export class Visual implements powerbi.extensibility.IVisual { return currentSelectionId.includes(dot.identity); }); const currentPointHighlighted: boolean = dot.highlighted; - const newOpacity: number = (currentPointSelected || currentPointHighlighted) ? dot.aesthetics.opacity : dot.aesthetics.opacity_unselected; - d3.select(currentDotNode).style("fill-opacity", newOpacity); - d3.select(currentTableNode).style("opacity", newOpacity); + const newDotOpacity: number = (currentPointSelected || currentPointHighlighted) ? dot.aesthetics.opacity : dot.aesthetics.opacity_unselected; + const newTableOpacity: number = (currentPointSelected || currentPointHighlighted) ? dot.aesthetics["table_opacity"] : dot.aesthetics["table_opacity_unselected"]; + d3.select(currentDotNode).style("fill-opacity", newDotOpacity); + d3.select(currentTableNode).style("opacity", newTableOpacity); } } }