1cca7abcab
This is extracted from #8094, where I have run into some snags. Since these ESLint fixes aren’t actually connected to the Ember 3.16 update but involve changes to many files, we might as well address them separately. Where possible I fixed the problems but in cases where a fix seemed too involved, I added per-line or -file exceptions.
37 lines
1 KiB
JavaScript
37 lines
1 KiB
JavaScript
import Component from '@ember/component';
|
|
import { computed, get } from '@ember/object';
|
|
import { computed as overridable } from 'ember-overridable-computed';
|
|
|
|
export default Component.extend({
|
|
classNames: ['accordion'],
|
|
|
|
key: 'id',
|
|
source: overridable(() => []),
|
|
|
|
onToggle(/* item, isOpen */) {},
|
|
startExpanded: false,
|
|
|
|
decoratedSource: computed('source.[]', function() {
|
|
const stateCache = this.stateCache;
|
|
const key = this.key;
|
|
const deepKey = `item.${key}`;
|
|
const startExpanded = this.startExpanded;
|
|
|
|
const decoratedSource = this.source.map(item => {
|
|
const cacheItem = stateCache.findBy(deepKey, get(item, key));
|
|
return {
|
|
item,
|
|
isOpen: cacheItem ? !!cacheItem.isOpen : startExpanded,
|
|
};
|
|
});
|
|
|
|
// eslint-disable-next-line ember/no-side-effects
|
|
this.set('stateCache', decoratedSource);
|
|
return decoratedSource;
|
|
}),
|
|
|
|
// When source updates come in, the state cache is used to preserve
|
|
// open/close state.
|
|
stateCache: overridable(() => []),
|
|
});
|