From 48c85d47bb6fcd34cc699f58f3148dbbe8725ee2 Mon Sep 17 00:00:00 2001 From: Tobias Linsefors Date: Wed, 15 Mar 2023 14:01:49 +0100 Subject: [PATCH] fix: use same text color for excluded and selectedExcluded (#1147) * fix: use same text color for excluded and selectedExcluded * test: add rendering tests * fix: lock icon on locked excluded --- .../ListBoxRowColumn/ListBoxRowColumn.jsx | 2 +- .../components/ListBoxRoot.jsx | 2 +- .../listbox/__fixtures__/locked_states.js | 79 ++++++++++++++++++ .../listbox/__fixtures__/not_locked_states.js | 79 ++++++++++++++++++ .../locked-states-js-linux.png | Bin 0 -> 12528 bytes .../not-locked-states-js-linux.png | Bin 0 -> 12935 bytes 6 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 test/rendering/listbox/__fixtures__/locked_states.js create mode 100644 test/rendering/listbox/__fixtures__/not_locked_states.js create mode 100644 test/rendering/listbox/listbox.spec.js-snapshots/locked-states-js-linux.png create mode 100644 test/rendering/listbox/listbox.spec.js-snapshots/not-locked-states-js-linux.png diff --git a/apis/nucleus/src/components/listbox/components/ListBoxRowColumn/ListBoxRowColumn.jsx b/apis/nucleus/src/components/listbox/components/ListBoxRowColumn/ListBoxRowColumn.jsx index a2a6d0a7b..fd14d7e45 100644 --- a/apis/nucleus/src/components/listbox/components/ListBoxRowColumn/ListBoxRowColumn.jsx +++ b/apis/nucleus/src/components/listbox/components/ListBoxRowColumn/ListBoxRowColumn.jsx @@ -95,7 +95,7 @@ function RowColumn({ index, rowIndex, columnIndex, style, data }) { const handleKeyDownCallback = useCallback(getFieldKeyboardNavigation({ ...actions, focusListItems }), [actions]); const cell = useMemo(() => getCellFromPages({ pages, cellIndex }), [pages, cellIndex]); - const isSelected = cell?.qState === 'S' || cell?.qState === 'XS' || cell?.qState === 'L'; + const isSelected = cell?.qState === 'S' || cell?.qState === 'XS' || cell?.qState === 'L' || cell?.qState === 'XL'; const classArr = useMemo( () => getValueStateClasses({ column, histogram, checkboxes, cell, showGray }), diff --git a/apis/nucleus/src/components/listbox/components/ListBoxRowColumn/components/ListBoxRoot.jsx b/apis/nucleus/src/components/listbox/components/ListBoxRowColumn/components/ListBoxRoot.jsx index 3496b4567..12ed07093 100644 --- a/apis/nucleus/src/components/listbox/components/ListBoxRowColumn/components/ListBoxRoot.jsx +++ b/apis/nucleus/src/components/listbox/components/ListBoxRowColumn/components/ListBoxRoot.jsx @@ -126,7 +126,7 @@ const RowColRoot = styled('div', { [`& .${classes.XS}`]: { ...getSelectedStyle({ theme }), background: theme.palette.selected.excluded, - color: theme.palette.selected.mainContrastText, + color: theme.palette.selected.excludedContrastText, border: isGridMode ? 'none' : undefined, }, diff --git a/test/rendering/listbox/__fixtures__/locked_states.js b/test/rendering/listbox/__fixtures__/locked_states.js new file mode 100644 index 000000000..d2c6c2dd6 --- /dev/null +++ b/test/rendering/listbox/__fixtures__/locked_states.js @@ -0,0 +1,79 @@ +const fixture = { + getLayout: () => ({ + title: 'Field title', + qInfo: { + qId: 'qId', + }, + visualization: 'listbox', + qListObject: { + qDimensionInfo: { + qLocked: true, + }, + qSize: { + qcy: 5, + }, + qInitialDataFetch: [{ qLeft: 0, qWidth: 0, qTop: 0, qHeight: 0 }], + }, + qSelectionInfo: { + qInSelections: false, + }, + layoutOptions: { + layoutOrder: 'row', + }, + }), + getListObjectData: () => [ + { + qMatrix: [ + [ + { + qText: 'Locked', + qNum: 'NaN', + qElemNumber: 0, + qState: 'L', + }, + ], + [ + { + qText: 'Alternative', + qNum: 'NaN', + qElemNumber: 1, + qState: 'A', + }, + ], + [ + { + qText: 'Optional', + qNum: 'NaN', + qElemNumber: 2, + qState: 'O', + }, + ], + [ + { + qText: 'Locked Excluded', + qNum: 'NaN', + qElemNumber: 3, + qState: 'XL', + }, + ], + [ + { + qText: 'Excluded', + qNum: 'NaN', + qElemNumber: 4, + qState: 'X', + }, + ], + ], + qTails: [], + qArea: { + qLeft: 0, + qTop: 0, + qWidth: 1, + qHeight: 5, + }, + }, + ], +}; + +export default fixture; diff --git a/test/rendering/listbox/__fixtures__/not_locked_states.js b/test/rendering/listbox/__fixtures__/not_locked_states.js new file mode 100644 index 000000000..187ca2c70 --- /dev/null +++ b/test/rendering/listbox/__fixtures__/not_locked_states.js @@ -0,0 +1,79 @@ +const fixture = { + getLayout: () => ({ + title: 'Field title', + qInfo: { + qId: 'qId', + }, + visualization: 'listbox', + qListObject: { + qDimensionInfo: { + qLocked: false, + }, + qSize: { + qcy: 5, + }, + qInitialDataFetch: [{ qLeft: 0, qWidth: 0, qTop: 0, qHeight: 0 }], + }, + qSelectionInfo: { + qInSelections: false, + }, + layoutOptions: { + layoutOrder: 'row', + }, + }), + getListObjectData: () => [ + { + qMatrix: [ + [ + { + qText: 'Selected', + qNum: 'NaN', + qElemNumber: 0, + qState: 'S', + }, + ], + [ + { + qText: 'Alternative', + qNum: 'NaN', + qElemNumber: 1, + qState: 'A', + }, + ], + [ + { + qText: 'Optional', + qNum: 'NaN', + qElemNumber: 2, + qState: 'O', + }, + ], + [ + { + qText: 'Selected Excluded', + qNum: 'NaN', + qElemNumber: 3, + qState: 'XS', + }, + ], + [ + { + qText: 'Excluded', + qNum: 'NaN', + qElemNumber: 4, + qState: 'X', + }, + ], + ], + qTails: [], + qArea: { + qLeft: 0, + qTop: 0, + qWidth: 1, + qHeight: 5, + }, + }, + ], +}; + +export default fixture; diff --git a/test/rendering/listbox/listbox.spec.js-snapshots/locked-states-js-linux.png b/test/rendering/listbox/listbox.spec.js-snapshots/locked-states-js-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..176f603213bf740b4ecf8ce0e4add9a322674570 GIT binary patch literal 12528 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