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});