Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
a409d5b
Maybe native Proxy?
snewcomer Nov 7, 2019
5ab3b65
Some changes
snewcomer Nov 8, 2019
8e95c93
add evented decorator
snewcomer Nov 8, 2019
d01d6fa
Merge branch 'master' into sn/proxy
snewcomer Nov 11, 2019
9080648
more improvements...still not working
snewcomer Nov 11, 2019
51bbb89
add constructor
snewcomer Nov 11, 2019
ad682d2
IChangesetDef types
snewcomer Nov 11, 2019
9e2f4fa
start separating out files
snewcomer Nov 12, 2019
3d78cc7
start unwinding emberisms
snewcomer Nov 12, 2019
69ef57b
use notifyPropertyChange itself
snewcomer Nov 13, 2019
a1749d1
simplify w/o ember-isms
snewcomer Nov 13, 2019
df3d415
set resulting
snewcomer Nov 14, 2019
f718828
Merge branch 'master' into sn/proxy
snewcomer Nov 14, 2019
c772951
fix setter
snewcomer Nov 15, 2019
7ec77ce
change from getProperty to get to align with Ember APIs
snewcomer Nov 15, 2019
c85a33a
finish tests
snewcomer Nov 16, 2019
c213876
remove unused files
snewcomer Nov 16, 2019
efab568
move around and remove uneeded files
snewcomer Nov 16, 2019
a8df21b
overridable set deep
snewcomer Nov 16, 2019
cd4490f
bump deps
snewcomer Nov 16, 2019
786f95a
remove uneeded property
snewcomer Nov 16, 2019
0d93f8e
minor fixes
snewcomer Nov 16, 2019
1d1f1d7
lets start working with single key level maps
snewcomer Nov 17, 2019
75a8cf8
get most working
snewcomer Nov 18, 2019
79dfb28
remove unused inflate
snewcomer Nov 18, 2019
88131ee
merge deep on the content
snewcomer Nov 18, 2019
ca62792
cleanup on deep merge utility
snewcomer Nov 18, 2019
40ff0fd
no more set-nested
snewcomer Nov 18, 2019
1ae403a
moar comments
snewcomer Nov 18, 2019
d30d7e5
some improvements to tests and imports
snewcomer Nov 19, 2019
2cfd7c1
some improvements to merge-deep
snewcomer Nov 19, 2019
82af80b
update testing Ci
snewcomer Nov 19, 2019
d9c6a62
fix merge deep by looking for value
snewcomer Nov 22, 2019
004d77c
address keyValues map and add documentation
snewcomer Nov 22, 2019
5c509f4
address notifier feedback
snewcomer Nov 22, 2019
ae1afb7
fix merge-deep to be more recursive like
snewcomer Nov 23, 2019
42a22d2
addError overload
snewcomer Nov 23, 2019
e5ed01b
use Record for get-deep
snewcomer Nov 23, 2019
d18b6fb
add type guard
snewcomer Nov 23, 2019
ffc538a
return early if value on target
snewcomer Nov 23, 2019
9be116d
move utils to utils folder
snewcomer Nov 23, 2019
8bc34b6
add some tests around normalize obj and pure-assign
snewcomer Nov 23, 2019
ca58df3
add get deep tests
snewcomer Nov 23, 2019
75b2670
add set deep test
snewcomer Nov 23, 2019
c36b81f
fix travis
snewcomer Nov 23, 2019
20b3438
ts ignore
snewcomer Nov 23, 2019
e4750ed
ember tsc 2.0
snewcomer Nov 23, 2019
e137dda
add babel to deps
snewcomer Nov 23, 2019
6dffd76
add back experimentalDecorators
snewcomer Nov 23, 2019
94f8c75
type check spread
snewcomer Nov 23, 2019
c5bf3cd
bump dep
snewcomer Nov 23, 2019
b4f58a8
Update more deps
snewcomer Nov 23, 2019
afee3ff
add glimmer component
snewcomer Nov 23, 2019
b91aaff
strict property initialization
snewcomer Nov 23, 2019
d0f2bde
update yarn file
snewcomer Nov 23, 2019
49785c1
add glimmer/tracking and remove glimmer/component
snewcomer Nov 23, 2019
a4499dc
skipLibCheck
snewcomer Nov 24, 2019
a8feb0e
need one?
snewcomer Nov 24, 2019
a5085d2
3.13
snewcomer Nov 24, 2019
768026a
qunit codemod
snewcomer Nov 24, 2019
0f0d6cf
isobject into own property @makepanic
snewcomer Nov 24, 2019
b4fdcd4
cleanup
snewcomer Nov 24, 2019
9c08ce2
format
snewcomer Nov 24, 2019
4eac8fd
add back assertions
snewcomer Nov 24, 2019
9215679
add some mergeDeep tests
snewcomer Nov 24, 2019
f373925
remove validate nested obj utility
snewcomer Nov 24, 2019
bc55557
use Change as common way of accessing
snewcomer Nov 24, 2019
afdebd5
remove ember-deep-set
snewcomer Nov 24, 2019
6224202
Update README with v3.0 install
snewcomer Nov 24, 2019
4301bb4
notifier cleanup
snewcomer Nov 24, 2019
2f8267d
clarifications on using Ember.set
snewcomer Nov 24, 2019
f4ed5ac
clarify #set with nested keys
snewcomer Nov 24, 2019
9760ff1
add another helpful dev assert
snewcomer Nov 25, 2019
8cf6f2d
remove deepSet type
snewcomer Nov 25, 2019
54c6ba8
add tests for native setter
snewcomer Nov 26, 2019
ab62972
ensure can call nested with error and change
snewcomer Nov 27, 2019
472576f
add contributors
snewcomer Nov 27, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
module.exports = {
root: true,
parser: 'babel-eslint',
parserOptions: {
ecmaVersion: 2017,
sourceType: 'module'
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures: {
legacyDecorators: true
}
},
plugins: [
'ember'
Expand All @@ -15,13 +19,14 @@ module.exports = {
browser: true
},
rules: {
'ember/avoid-leaking-state-in-ember-objects': 0
'ember/no-jquery': 'error'
},
overrides: [
// node files
{
files: [
'.eslintrc.js',
'.template-lintrc.js',
'ember-cli-build.js',
'index.js',
'testem.js',
Expand All @@ -36,8 +41,7 @@ module.exports = {
'tests/dummy/app/**'
],
parserOptions: {
sourceType: 'script',
ecmaVersion: 2015
sourceType: 'script'
},
env: {
browser: false,
Expand Down
3 changes: 2 additions & 1 deletion .npmignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@
# misc
/.bowerrc
/.editorconfig
/.ember-cli
/.ember-cli.js
/.env*
/.eslintignore
/.eslintrc.js
/.git/
/.gitignore
/.template-lintrc.js
/.travis.yml
Expand Down
3 changes: 1 addition & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,7 @@ jobs:
# we recommend new addons test the current and previous LTS
# as well as latest stable release (bonus points to beta/canary)
- stage: "Additional Tests"
env: EMBER_TRY_SCENARIO=ember-lts-2.18
- env: EMBER_TRY_SCENARIO=ember-lts-3.4
env: EMBER_TRY_SCENARIO=ember-3.13
- env: EMBER_TRY_SCENARIO=ember-release
- env: EMBER_TRY_SCENARIO=ember-beta
- env: EMBER_TRY_SCENARIO=ember-canary
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ ember install ember-changeset

## Updates

We have released `v2.0.0`. This includes a solution for deeply nested sets with one big caveat. Some history - Post v1.3.0, there was an elegant solution proposed and implemented for deeply nested sets - e.g. `changeset.set('profile.name', 'myname')`. However, this caused many issues and was reverted in v2.0.0-beta. Since `ember-changeset` relies on [Proxy](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy) like behaviour, we are able to trap `changeset.set(...` and properly handle nested sets. This, however, is a problem in templates where `mut changeset.profile.name` is implicitly `set(changeset, 'profile.name')`, thus subverting our trap. This is the caveat with the v2.0.0 release. Although it is an improvement over v1.3.0 and should be 1-1 behaviour if you are setting at a single level - e.g. `mut changeset.name` -, nested setters don't have an ideal solution. So we are releasing v2.0.0 with this caveat and adding a `changeset-set` template helper. This is a work in progress.
We have released `v3.0.0`. This requires Ember >= 3.13 as the use of `@tracked` will help us monitor and propagate changes to the UI layer. If your app is < 3.13, the you can install the 2.0 series `ember install [email protected]`.

## Philosophy

Expand Down Expand Up @@ -440,11 +440,11 @@ get(changeset, 'momentObj.content').format('dddd'); // => "Friday"

#### `set`

Exactly the same semantics as `Ember.set`. This stores the change on the changeset.
Exactly the same semantics as `Ember.set`. This stores the change on the changeset. It is recommended to use `changeset.set(...)` instead of `Ember.set(changeset, ...)`. `Ember.set` will set the property for nested keys on the underlying model.

```js
set(changeset, 'firstName', 'Milton'); // "Milton"
set(changeset, 'address.zipCode', '10001'); // "10001"
changeset.set('firstName', 'Milton'); // "Milton"
changeset.set('address.zipCode', '10001'); // "10001"
```

You can use and bind this property in the template:
Expand Down Expand Up @@ -879,7 +879,7 @@ export default Component.extend({
let snapshot = changeset.snapshot();

// valuePath is the property on the changeset, e.g. firstName
set(changeset, valuePath, value);
changeset.set(valuePath, value);

if (!changeset.get(`error.${valuePath}`)) {
set(this, 'hasError', false);
Expand All @@ -898,7 +898,7 @@ export default Component.extend({
* @param {Object} e
*/
validateProperty(changeset, valuePath, e) {
set(changeset, valuePath, e.target.value);
changeset.set(valuePath, e.target.value);

if (changeset.get(`error.${valuePath}`)) {
set(this, 'hasError', true);
Expand Down
15 changes: 15 additions & 0 deletions addon/-private/evented.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import Notifier from './notifier';

export function notifierForEvent(object: any, eventName: string) {
if (object._eventedNotifiers === undefined) {
object._eventedNotifiers = {};
}

let notifier = object._eventedNotifiers[eventName];

if (!notifier) {
notifier = object._eventedNotifiers[eventName] = new Notifier();
}

return notifier;
}
27 changes: 27 additions & 0 deletions addon/-private/notifier.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// this statefull class holds and notifies

export default class Notifier<T extends any[]>{
listeners: ((...args: T) => void)[]

constructor() {
this.listeners = [];
}

addListener(callback: (...args: T) => void) {
this.listeners.push(callback);
return () => this.removeListener(callback);
}

removeListener(callback: (...args: T) => void) {
for (let i = 0; i < this.listeners.length; i++) {
if (this.listeners[i] === callback) {
this.listeners.splice(i, 1);
return;
}
}
}

trigger(...args: T) {
this.listeners.forEach(callback => callback(...args));
}
}
Loading