Skip to content

Commit

Permalink
Merge pull request #19381 from emberjs/deprecate-array-observers
Browse files Browse the repository at this point in the history
[DEPRECATION] Add Array Observers deprecation
  • Loading branch information
Chris Garrett authored Feb 5, 2021
2 parents a5e6f09 + 71f9cd0 commit 10f2f9b
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 9 deletions.
43 changes: 38 additions & 5 deletions packages/@ember/-internals/metal/lib/array.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { EmberArray } from '@ember/-internals/utils';
import { EmberArray, getDebugName } from '@ember/-internals/utils';
import { deprecate } from '@ember/debug';
import { arrayContentDidChange, arrayContentWillChange } from './array_events';
import { addListener, removeListener } from './events';
import { notifyPropertyChange } from './property_events';
Expand Down Expand Up @@ -91,16 +92,48 @@ function arrayObserversHelper(

export function addArrayObserver<T>(
array: EmberArray<T>,
target: any,
opts?: ArrayObserverOptions | undefined
target: object | Function | null,
opts?: ArrayObserverOptions | undefined,
suppress = false
): ObjectHasArrayObservers {
deprecate(
`Array observers have been deprecated. Added an array observer to ${getDebugName?.(array)}.`,
suppress,
{
id: 'array-observers',
url: 'https://deprecations.emberjs.com/v3.x#toc_array-observers',
until: '4.0.0',
for: 'ember-source',
since: {
enabled: '3.26.0-beta.1',
},
}
);

return arrayObserversHelper(array, target, opts, addListener, false);
}

export function removeArrayObserver<T>(
array: EmberArray<T>,
target: any,
opts?: ArrayObserverOptions | undefined
target: object | Function | null,
opts?: ArrayObserverOptions | undefined,
suppress = false
): ObjectHasArrayObservers {
deprecate(
`Array observers have been deprecated. Removed an array observer from ${getDebugName?.(
array
)}.`,
suppress,
{
id: 'array-observers',
url: 'https://deprecations.emberjs.com/v3.x#toc_array-observers',
until: '4.0.0',
for: 'ember-source',
since: {
enabled: '3.26.0-beta.1',
},
}
);

return arrayObserversHelper(array, target, opts, removeListener, true);
}
4 changes: 2 additions & 2 deletions packages/@ember/-internals/runtime/lib/system/array_proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -272,15 +272,15 @@ export default class ArrayProxy extends EmberObject {
isArray(arrangedContent) || arrangedContent.isDestroyed
);

addArrayObserver(arrangedContent, this, ARRAY_OBSERVER_MAPPING);
addArrayObserver(arrangedContent, this, ARRAY_OBSERVER_MAPPING, true);

this._arrangedContent = arrangedContent;
}
}

_removeArrangedContentArrayObserver() {
if (this._arrangedContent) {
removeArrayObserver(this._arrangedContent, this, ARRAY_OBSERVER_MAPPING);
removeArrayObserver(this._arrangedContent, this, ARRAY_OBSERVER_MAPPING, true);
}
}

Expand Down
2 changes: 2 additions & 0 deletions packages/@ember/-internals/runtime/tests/mixins/array_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,8 @@ moduleFor(
'notify array observers',
class extends AbstractTestCase {
beforeEach(assert) {
expectDeprecation(/Array observers have been deprecated/);

obj = DummyArray.create();

observer = EmberObject.extend({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,8 @@ class ReplaceTests extends AbstractTestCase {
}

async '@test Adding object should notify array observer'() {
expectDeprecation(/Array observers have been deprecated/);

let fixtures = newFixture(4);
let obj = this.newObject(fixtures);
let observer = this.newObserver(obj).observeArray(obj);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ moduleFor(
'ArrayProxy - array observers',
class extends AbstractTestCase {
['@test mutating content'](assert) {
assert.expect(4);
expectDeprecation(/Array observers have been deprecated/);

assert.expect(5);

let content = A(['x', 'y', 'z']);
let proxy = ArrayProxy.create({ content });
Expand All @@ -28,7 +30,9 @@ moduleFor(
}

['@test assigning content'](assert) {
assert.expect(4);
expectDeprecation(/Array observers have been deprecated/);

assert.expect(5);

let content = A(['x', 'y', 'z']);
let proxy = ArrayProxy.create({ content });
Expand Down

0 comments on commit 10f2f9b

Please sign in to comment.