Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 3 additions & 2 deletions resources/js/components/publish/Values.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ function data_delete(obj, path) {
var parts = path.split('.');
while (parts.length - 1) {
var key = parts.shift();
if (obj === null || typeof obj !== 'object') return;
var shouldBeArray = parts.length ? new RegExp('^[0-9]+$').test(parts[0]) : false;
if (!(key in obj)) obj[key] = shouldBeArray ? [] : {};
obj = obj[key];
}
delete obj[parts[0]];
if (obj !== null && typeof obj === 'object') delete obj[parts[0]];
}

export default class Values {
Expand Down Expand Up @@ -82,7 +83,7 @@ export default class Values {

missingValue(dottedKey) {
var properties = Array.isArray(dottedKey) ? dottedKey : dottedKey.split('.');
var value = properties.reduce((prev, curr) => prev && prev[curr], clone(this.values));
var value = properties.reduce((prev, curr) => (prev == null ? undefined : prev[curr]), clone(this.values));

return value === undefined;
}
Expand Down
18 changes: 18 additions & 0 deletions resources/js/tests/PublishValues.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -562,3 +562,21 @@ test('it properly sets keys that javascript considers having numeric separators'

expect(newValues).toEqual(expected);
});

test('it does not throw when rejecting a value nested under a null node', () => {
let values = {
first_name: 'Han',
ship: {
crew: null,
},
};

let rejected = new Values(values).except(['ship.crew.0.name']);

expect(rejected).toEqual({
first_name: 'Han',
ship: {
crew: null,
},
});
});
Loading