Properly handle Collections that specify a custom key, rather than falling back to indexed list (#632)

This commit is contained in:
Djamil Legato
2016-06-01 16:30:23 -07:00
parent ae087668ba
commit d3b33fb648
2 changed files with 28 additions and 16 deletions

View File

@@ -68,13 +68,14 @@ export default class CollectionsField {
items.each((index, item) => { items.each((index, item) => {
item = $(item); item = $(item);
let observed = item.find('[data-key-observe]'); let observed = item.find('[data-key-observe]');
let observedValue = observed.val();
let hasCustomKey = observed.length; let hasCustomKey = observed.length;
let currentKey = item.data('collection-key-backup'); let currentKey = item.data('collection-key-backup');
item.attr('data-collection-key', hasCustomKey ? observed.val() : index); item.attr('data-collection-key', hasCustomKey ? observedValue : index);
['name', 'data-grav-field-name', 'for', 'id'].forEach((prop) => { ['name', 'data-grav-field-name', 'for', 'id'].forEach((prop) => {
item.find('[' + prop + ']').each(function() { item.find('[' + prop + '], [_' + prop + ']').each(function() {
let element = $(this); let element = $(this);
let indexes = []; let indexes = [];
let regexps = [ let regexps = [
@@ -82,6 +83,17 @@ export default class CollectionsField {
new RegExp('\\.(\\d+|\\*|' + currentKey + ')\\.', 'g') new RegExp('\\.(\\d+|\\*|' + currentKey + ')\\.', 'g')
]; ];
if (!observedValue) {
element.attr(`_${prop}`, element.attr(prop));
element.attr(prop, null);
return;
}
if (element.attr(`_${prop}`)) {
element.attr(prop, element.attr(`_${prop}`));
element.attr(`_${prop}`, null);
}
element.parents('[data-collection-key]').map((idx, parent) => indexes.push($(parent).attr('data-collection-key'))); element.parents('[data-collection-key]').map((idx, parent) => indexes.push($(parent).attr('data-collection-key')));
indexes.reverse(); indexes.reverse();

File diff suppressed because one or more lines are too long