Skip to content

Commit 1001769

Browse files
committed
Merge missing lang keys with the default
1 parent b85e3cb commit 1001769

File tree

3 files changed

+17
-14
lines changed

3 files changed

+17
-14
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
#### Properties
1414

1515
* `id`: No longer generates a random UUID when empty
16-
* `lang`: Replaced `toggle` key with `collapseNode` and `expandNode` to better reflect state (#275)
16+
* `lang`:
17+
* Replaced `toggle` key with `collapseNode` and `expandNode` to better reflect state (#275)
18+
* Will now merge any missing keys with the default language
1719
* `icons`: Setting a node icon to `null` will no longer render the wrapper element (#30)
1820

1921
#### Styling

src/js/CheckboxTree.jsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import { CHECK_MODEL, KEYS } from './constants';
1616
import { IconContext, LanguageContext } from './contexts';
1717
import NodeModel from './NodeModel';
1818

19+
const combineMemoized = memoize((newValue, defaultValue) => ({ ...defaultValue, ...newValue }));
20+
1921
const defaultIcons = {
2022
check: <span className="rct-icon rct-icon-check" />,
2123
uncheck: <span className="rct-icon rct-icon-uncheck" />,
@@ -109,8 +111,6 @@ class CheckboxTree extends React.Component {
109111
this.onNodeClick = this.onNodeClick.bind(this);
110112
this.onExpandAll = this.onExpandAll.bind(this);
111113
this.onCollapseAll = this.onCollapseAll.bind(this);
112-
113-
this.combineMemorized = memoize((icons1, icons2) => ({ ...icons1, ...icons2 })).bind(this);
114114
}
115115

116116
static getDerivedStateFromProps(newProps, prevState) {
@@ -332,7 +332,8 @@ class CheckboxTree extends React.Component {
332332
nodes,
333333
nativeCheckboxes,
334334
} = this.props;
335-
const mergedIcons = this.combineMemorized(defaultIcons, icons);
335+
const mergedLang = combineMemoized(lang, defaultLang);
336+
const mergedIcons = combineMemoized(icons, defaultIcons);
336337
const treeNodes = this.renderTreeNodes(nodes);
337338

338339
const className = classNames({
@@ -344,15 +345,15 @@ class CheckboxTree extends React.Component {
344345
});
345346

346347
return (
347-
<div className={className} id={id}>
348-
<LanguageContext.Provider value={lang}>
349-
<IconContext.Provider value={mergedIcons}>
348+
<LanguageContext.Provider value={mergedLang}>
349+
<IconContext.Provider value={mergedIcons}>
350+
<div className={className} id={id}>
350351
{this.renderGlobalOptions()}
351352
{this.renderHiddenInput()}
352353
{treeNodes}
353-
</IconContext.Provider>
354-
</LanguageContext.Provider>
355-
</div>
354+
</div>
355+
</IconContext.Provider>
356+
</LanguageContext.Provider>
356357
);
357358
}
358359
}

src/js/shapes/languageShape.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import PropTypes from 'prop-types';
22

33
export default PropTypes.shape({
4-
collapseAll: PropTypes.string.isRequired,
5-
collapseNode: PropTypes.string.isRequired,
6-
expandAll: PropTypes.string.isRequired,
7-
expandNode: PropTypes.string.isRequired,
4+
collapseAll: PropTypes.string,
5+
collapseNode: PropTypes.string,
6+
expandAll: PropTypes.string,
7+
expandNode: PropTypes.string,
88
});

0 commit comments

Comments
 (0)