@@ -13,6 +13,7 @@ import { layout, settings } from '@pie-lib/pie-toolbox/config-ui';
1313import Scale from './scale' ;
1414import { MultiTraitButton } from './common' ;
1515import { ExcludeZeroDialog , excludeZeroTypes , IncludeZeroDialog , InfoDialog } from './modals' ;
16+ import { addOrRemoveScaleColumn } from './utils' ;
1617
1718const { Panel, toggle } = settings ;
1819const MIN_WIDTH = '650px' ;
@@ -138,14 +139,20 @@ export class Main extends React.Component {
138139
139140 onScaleChanged = ( scaleIndex , params ) => {
140141 const { model, onModelChanged } = this . props ;
141- const scales = cloneDeep ( ( model || { } ) . scales ) ;
142+ let scales = cloneDeep ( ( model || { } ) . scales ) ;
142143
143144 if ( scaleIndex < 0 || scaleIndex >= scales . length || isEmpty ( params ) ) return false ;
144145
145146 Object . keys ( params ) . forEach ( ( key ) => {
146147 scales [ scaleIndex ] [ key ] = params [ key ] ;
147148 } ) ;
148149
150+ if ( model . excludeZero && params . maxPoints === 1 ) {
151+ // excludeZero should be false and disabled when maxPoints is 1 for any scale
152+ model . excludeZero = false ;
153+ scales = addOrRemoveScaleColumn ( scales , excludeZeroTypes . add0 ) ;
154+ }
155+
149156 onModelChanged ( { ...model , scales } ) ;
150157 } ;
151158
@@ -230,65 +237,7 @@ export class Main extends React.Component {
230237 if ( ! scales || ! scales . length ) return ;
231238
232239 excludeZero = ! excludeZero ;
233-
234- const newScales = scales . reduce ( ( acc , scale ) => {
235- let { scorePointsLabels, traits } = scale || { } ;
236-
237- if ( scorePointsLabels . length < 1 ) return acc ;
238-
239- switch ( excludeZeroType ) {
240- case excludeZeroTypes . remove0 : {
241- // removes column 0
242- scorePointsLabels = scorePointsLabels . slice ( 1 ) ;
243- traits = traits . map ( ( { scorePointsDescriptors, ...trait } ) => ( {
244- ...trait ,
245- scorePointsDescriptors : scorePointsDescriptors . slice ( 1 ) ,
246- } ) ) ;
247-
248- break ;
249- }
250-
251- case excludeZeroTypes . add0 : {
252- // adds empty column at start
253- scorePointsLabels = [ '' , ...scorePointsLabels ] ;
254- traits = traits . map ( ( { scorePointsDescriptors, ...trait } ) => ( {
255- ...trait ,
256- scorePointsDescriptors : [ '' , ...scorePointsDescriptors ] ,
257- } ) ) ;
258-
259- break ;
260- }
261-
262- case excludeZeroTypes . shiftLeft : {
263- // removes last column
264- scorePointsLabels = scorePointsLabels . slice ( 0 , - 1 ) ;
265- traits = traits . map ( ( { scorePointsDescriptors, ...trait } ) => ( {
266- ...trait ,
267- scorePointsDescriptors : scorePointsDescriptors . slice ( 0 , - 1 ) ,
268- } ) ) ;
269-
270- break ;
271- }
272-
273- case excludeZeroTypes . shiftRight : {
274- // adds empty column at end
275- scorePointsLabels = [ ...scorePointsLabels , '' ] ;
276- traits = traits . map ( ( { scorePointsDescriptors, ...trait } ) => ( {
277- ...trait ,
278- scorePointsDescriptors : [ ...scorePointsDescriptors , '' ] ,
279- } ) ) ;
280-
281- break ;
282- }
283-
284- default :
285- break ;
286- }
287-
288- acc . push ( { ...scale , scorePointsLabels, traits } ) ;
289-
290- return acc ;
291- } , [ ] ) ;
240+ const newScales = addOrRemoveScaleColumn ( scales , excludeZeroType ) ;
292241
293242 onModelChanged ( { ...model , scales : newScales , excludeZero } ) ;
294243
@@ -344,11 +293,14 @@ export class Main extends React.Component {
344293 } = model || { } ;
345294 const { showExcludeZeroDialog, showInfoDialog, infoDialogText, adjustedWidth } = this . state || { } ;
346295
296+ // excludeZero should be false and disabled when maxPoints is 1 for any scale
297+ const disabledExcludeZero = scales ?. some ( ( scale ) => scale . maxPoints === 1 ) ;
298+
347299 const panelSettings = {
348300 standards : showStandards . settings && toggle ( showStandards . label ) ,
349301 'showLevelTagInput.enabled' : showLevelTagInput . settings && toggle ( showLevelTagInput . label , true ) ,
350302 visibleToStudent : showVisibleToStudent . settings && toggle ( showVisibleToStudent . label ) ,
351- excludeZero : showExcludeZero . settings && toggle ( showExcludeZero . label ) ,
303+ excludeZero : showExcludeZero . settings && toggle ( showExcludeZero . label , false , disabledExcludeZero ) ,
352304 halfScoring : showHalfScoring . settings && toggle ( showHalfScoring . label ) ,
353305 'dragAndDrop.enabled' : dragAndDrop . settings && toggle ( dragAndDrop . label , true ) ,
354306 } ;
0 commit comments