mirror of
https://github.com/chinchang/web-maker.git
synced 2025-07-29 09:40:10 +02:00
SavedItemPane: change componentWillUpdate to getDerivedStateFromProps. fixes empty list
This commit is contained in:
@@ -10,21 +10,25 @@ export default class SavedItemPane extends Component {
|
|||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.items = [];
|
this.items = [];
|
||||||
this.state = {
|
}
|
||||||
filteredItems: []
|
|
||||||
|
static getDerivedStateFromProps({ items = {} }, state) {
|
||||||
|
const newItems = Object.values(items);
|
||||||
|
newItems.sort(function(a, b) {
|
||||||
|
return b.updatedOn - a.updatedOn;
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
items: newItems,
|
||||||
|
filteredItems: newItems
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
componentWillUpdate(nextProps) {
|
shouldComponentUpdate(nextProps) {
|
||||||
if (this.props.items !== nextProps.items) {
|
return (
|
||||||
this.items = Object.values(nextProps.items);
|
nextProps.items !== this.props.items ||
|
||||||
this.items.sort(function(a, b) {
|
nextProps.isOpen !== this.props.isOpen
|
||||||
return b.updatedOn - a.updatedOn;
|
);
|
||||||
});
|
|
||||||
this.setState({
|
|
||||||
filteredItems: this.items
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate(prevProps) {
|
componentDidUpdate(prevProps) {
|
||||||
if (this.props.isOpen && !prevProps.isOpen) {
|
if (this.props.isOpen && !prevProps.isOpen) {
|
||||||
window.searchInput.value = '';
|
window.searchInput.value = '';
|
||||||
@@ -137,11 +141,14 @@ export default class SavedItemPane extends Component {
|
|||||||
trackEvent('ui', 'searchInputType');
|
trackEvent('ui', 'searchInputType');
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render(
|
||||||
|
{ isOpen, exportBtnClickHandler },
|
||||||
|
{ filteredItems = [], items = [] }
|
||||||
|
) {
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
id="js-saved-items-pane"
|
id="js-saved-items-pane"
|
||||||
class={`saved-items-pane ${this.props.isOpen ? 'is-open' : ''}`}
|
class={`saved-items-pane ${isOpen ? 'is-open' : ''}`}
|
||||||
onKeyDown={this.keyDownHandler.bind(this)}
|
onKeyDown={this.keyDownHandler.bind(this)}
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
@@ -152,11 +159,11 @@ export default class SavedItemPane extends Component {
|
|||||||
X
|
X
|
||||||
</button>
|
</button>
|
||||||
<div class="flex flex-v-center" style="justify-content: space-between;">
|
<div class="flex flex-v-center" style="justify-content: space-between;">
|
||||||
<h3>My Library ({this.items.length})</h3>
|
<h3>My Library ({filteredItems.length})</h3>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button
|
<button
|
||||||
onClick={this.props.exportBtnClickHandler}
|
onClick={exportBtnClickHandler}
|
||||||
class="btn--dark hint--bottom-left hint--rounded hint--medium"
|
class="btn--dark hint--bottom-left hint--rounded hint--medium"
|
||||||
aria-label="Export all your creations into a single importable file."
|
aria-label="Export all your creations into a single importable file."
|
||||||
>
|
>
|
||||||
@@ -180,10 +187,10 @@ export default class SavedItemPane extends Component {
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<div id="js-saved-items-wrap" class="saved-items-pane__container">
|
<div id="js-saved-items-wrap" class="saved-items-pane__container">
|
||||||
{!this.state.filteredItems.length && this.items.length ? (
|
{!filteredItems.length && items.length ? (
|
||||||
<div class="mt-1">No match found.</div>
|
<div class="mt-1">No match found.</div>
|
||||||
) : null}
|
) : null}
|
||||||
{this.state.filteredItems.map(item => (
|
{filteredItems.map(item => (
|
||||||
<ItemTile
|
<ItemTile
|
||||||
item={item}
|
item={item}
|
||||||
onClick={this.itemClickHandler.bind(this, item)}
|
onClick={this.itemClickHandler.bind(this, item)}
|
||||||
@@ -191,7 +198,7 @@ export default class SavedItemPane extends Component {
|
|||||||
onRemoveBtnClick={this.itemRemoveBtnClickHandler.bind(this, item)}
|
onRemoveBtnClick={this.itemRemoveBtnClickHandler.bind(this, item)}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
{!this.items.length ? (
|
{!items.length ? (
|
||||||
<h2 class="opacity--30">Nothing saved here.</h2>
|
<h2 class="opacity--30">Nothing saved here.</h2>
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user