From df06de798a983cde4edaaae79c6da4bc78a4b9d7 Mon Sep 17 00:00:00 2001 From: Victoria A <52001888+adjeiv@users.noreply.github.com> Date: Sat, 28 Oct 2023 12:57:24 +0100 Subject: [PATCH 1/2] Add highlight errors toggle --- src/components/modal/modal-settings.js | 6 ++++++ src/lib/sudoku-model.js | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/components/modal/modal-settings.js b/src/components/modal/modal-settings.js index 9fbe815..a2ddb11 100644 --- a/src/components/modal/modal-settings.js +++ b/src/components/modal/modal-settings.js @@ -75,6 +75,12 @@ export default function ModalSettings({modalHandler, modalState}) { allSettings={allSettings} setSetting={setSetting} /> + { - if (!modelHelpers.getSetting(grid, SETTINGS.highlightConflicts)) { + if (!modelHelpers.getSetting(grid, SETTINGS.highlightConflicts) + && !modelHelpers.getSetting(grid, SETTINGS.highlightErrors)) { return grid; } const cells = grid.get('cells').map((c) => { @@ -1607,7 +1610,10 @@ export const modelHelpers = { checkCompletedDigits: (grid) => { const digits = grid.get('cells').map(c => c.get('digit')).join(''); - const result = modelHelpers.checkDigits(digits); + const finalDigits = grid.get('finalDigits'); + const result = modelHelpers.getSetting(grid, SETTINGS.highlightErrors) + ? modelHelpers.checkDigits(digits, finalDigits) + : modelHelpers.checkDigits(digits); grid = grid.set('completedDigits', result.completedDigits); if (result.isSolved && !grid.get('endTime')) { return modelHelpers.setGridSolved(grid); From fb55376fef41454162f636d20dae75b3434bc828 Mon Sep 17 00:00:00 2001 From: Victoria A <52001888+adjeiv@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:20:40 +0000 Subject: [PATCH 2/2] Add test case --- src/lib/sudoku-model.test.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/lib/sudoku-model.test.js b/src/lib/sudoku-model.test.js index ca77e1a..8931ab3 100644 --- a/src/lib/sudoku-model.test.js +++ b/src/lib/sudoku-model.test.js @@ -557,6 +557,39 @@ test('no highlight conflicts', () => { }); }); +test('set highlight errors', () => { + let grid = newSudokuModel({initialDigits: initialDigitsComplete}); + const settings = grid.get('settings'); + grid = grid.set('settings', { ...settings, [SETTINGS.highlightErrors]: true}); + + expect(grid.get('currentSnapshot')).toBe(''); + grid = modelHelpers.applySelectionOp(grid, 'setSelection', 8); + grid = modelHelpers.updateSelectedCells(grid, 'setDigit', '9'); + + expect(grid.get('currentSnapshot')).toBe('19D9'); + expect(grid.get('matchDigit')).toBe('9'); + + let c8 = grid.get('cells').get(8); + expect(c8.get('digit')).toBe('9'); + expect(c8.get('snapshot')).toBe('D9'); + expect(c8.get('errorMessage')).toBe('Incorrect digit'); + expect(c8.get('isGiven')).toBe(false); + expect(c8.get('isSelected')).toBe(true); + + // clear the cell and expect it should have no error + grid = modelHelpers.applySelectionOp(grid, 'setSelection', 8); + grid = modelHelpers.updateSelectedCells(grid, 'clearCell'); + + expect(grid.get('currentSnapshot')).toBe(''); + + c8 = grid.get('cells').get(8); + expect(c8.get('digit')).toBe('0'); + expect(c8.get('snapshot')).toBe(''); + expect(c8.get('errorMessage')).toBe(undefined); + expect(c8.get('isGiven')).toBe(false); + expect(c8.get('isSelected')).toBe(true); +}); + test('set cell color', () => { let grid = newSudokuModel({initialDigits: initialDigitsPartial, skipCheck: true});