Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Merge pull request #19032 from sergi/Bug992120
Browse files Browse the repository at this point in the history
Bug 992120 - [Tarako][Contact] Pressing "Home" button will discard the contact info when creating new contact/editing an existed contact
  • Loading branch information
sergi committed May 7, 2014
2 parents 93e0130 + bb46f0a commit dddecf2
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 17 deletions.
32 changes: 31 additions & 1 deletion apps/communications/contacts/js/contacts.js
Expand Up @@ -105,7 +105,37 @@ var Contacts = (function() {
});
break;
default:
showApp();
asyncStorage.getItem('draft', function onDraftGot(draft) {
if (!draft) {
showApp();
return;
}
initForm(function onInitForm() {
var id = draft.id;
if (!id || id === 'undefined') {
delete draft.id;
contactsForm.render(draft, goToForm);
showApp();
} else {
cList.getContactById(id, function onSuccess(savedContact) {
currentContact = savedContact;
var readOnly = ['id', 'updated', 'published'];
for (var field in draft) {
if (readOnly.indexOf(field) == -1) {
currentContact[field] = draft[field];
}
}
contactsForm.render(currentContact, goToForm, null, false,
true);
showApp();
}, function onError() {
delete draft.id;
contactsForm.render(draft, goToForm);
showApp();
});
}
});
});
}

};
Expand Down
55 changes: 42 additions & 13 deletions apps/communications/contacts/js/views/form.js
Expand Up @@ -159,8 +159,10 @@ contacts.Form = (function() {

thumbAction.addEventListener(touchstart, function click(event) {
// Removing current photo
if (event.target.tagName == 'BUTTON')
if (event.target.tagName == 'BUTTON') {
saveButton.removeAttribute('disabled');
saveDraft();
}
});

formView.addEventListener('ValueModified', function onValueModified(event) {
Expand All @@ -170,27 +172,29 @@ contacts.Form = (function() {

if (event.detail.prevValue !== event.detail.newValue) {
saveButton.removeAttribute('disabled');
saveDraft();
}
});

// Add listeners
utils.listeners.add({
'#cancel-edit': Contacts.cancel, // Cancel edition
'#cancel-edit': cancelEdit, // Cancel edition
'#save-button': saveContact,
'#contact-form button[data-field-type]': newField
});
};

var saveContact = function saveContact() {
return contacts.Form.saveContact();
var cancelEdit = function cancelEdit() {
asyncStorage.removeItem('draft');
Contacts.cancel();
};

var newField = function newField(evt) {
return contacts.Form.onNewFieldClicked(evt);
};

var render = function cf_render(contact, callback, pFbContactData,
fromUpdateActivity) {
fromUpdateActivity, fromDraft) {
var fbContactData = pFbContactData || [];

fbContact = fbContactData[2] || {};
Expand All @@ -200,18 +204,19 @@ contacts.Form = (function() {

resetForm();
(renderedContact && renderedContact.id) ?
showEdit(renderedContact, fromUpdateActivity) : showAdd(renderedContact);
showEdit(renderedContact, fromUpdateActivity, fromDraft) :
showAdd(renderedContact);
if (callback) {
callback();
}
};

var showEdit = function showEdit(contact, fromUpdateActivity) {
var showEdit = function showEdit(contact, fromUpdateActivity, fromDraft) {
mode = 'edit';
if (!contact || !contact.id) {
return;
}
if (!fromUpdateActivity)
if (!fromUpdateActivity && !fromDraft)
saveButton.setAttribute('disabled', 'disabled');
saveButton.setAttribute('data-l10n-id', 'update');
saveButton.textContent = _('update');
Expand Down Expand Up @@ -275,6 +280,7 @@ contacts.Form = (function() {

Contacts.confirmDialog(null, msg, noObject, yesObject);
};
saveDraft();
};

var showAdd = function showAdd(params) {
Expand All @@ -293,14 +299,18 @@ contacts.Form = (function() {
params = params || {};

givenName.value = params.givenName || '';
familyName.value = params.lastName || '';
familyName.value = params.familyName || params.lastName || '';
company.value = params.company || '';

var toRender = ['tel', 'email', 'adr', 'note'];
for (var i = 0; i < toRender.length; i++) {
var current = toRender[i];
var rParams = params[current] || '';
renderTemplate(current, [{value: rParams}]);
if (Array.isArray(rParams)) {
renderTemplate(current, rParams);
} else {
renderTemplate(current, [{value: rParams}]);
}
}
checkDisableButton();
};
Expand Down Expand Up @@ -506,9 +516,19 @@ contacts.Form = (function() {
});
};

var saveDraft = function saveDraft() {
saveContactOrDraft(true);
};

var saveContact = function saveContact() {
saveButton.setAttribute('disabled', 'disabled');
showThrobber();
saveContactOrDraft(false);
};

var saveContactOrDraft = function saveContactOrDraft(draft) {
if (!draft) {
saveButton.setAttribute('disabled', 'disabled');
showThrobber();
}

currentContact = currentContact || {};
currentContact = deviceContact || currentContact;
Expand Down Expand Up @@ -547,6 +567,9 @@ contacts.Form = (function() {
var fields = ['givenName', 'familyName', 'org', 'tel',
'email', 'note', 'adr'];
if (Contacts.isEmpty(myContact, fields)) {
if (draft) {
asyncStorage.setItem('draft', myContact);
}
return;
}

Expand Down Expand Up @@ -578,13 +601,18 @@ contacts.Form = (function() {
createName(contact);
}
}

} else {
contact = utils.misc.toMozContact(myContact);
}

updateCategoryForImported(contact);

if (draft) {
asyncStorage.setItem('draft', myContact);
return;
}
asyncStorage.removeItem('draft');

var callbacks = cookMatchingCallbacks(contact);
cancelHandler = doCancel.bind(callbacks);
cancelButton.addEventListener('click', cancelHandler);
Expand Down Expand Up @@ -983,6 +1011,7 @@ contacts.Form = (function() {
} else {
saveButton.removeAttribute('disabled');
}
saveDraft();
};


Expand Down
4 changes: 2 additions & 2 deletions apps/communications/contacts/test/unit/mock_form_dom.js.html
Expand Up @@ -12,7 +12,7 @@
MockFormDom += ' <div id="add-phone-#i#" data-template class="phone-template" data-index="#i#">';
MockFormDom += ' <dl class="setbox fillflow-row">';
MockFormDom += ' <dt class="setbox-title">';
MockFormDom += ' <a class="with-arrow" data-taglist="phone-type" name="tel" value="#type#" id="tel_type_#i#" data-field="type">#type#</a>';
MockFormDom += ' <a class="with-arrow" data-taglist="phone-type" name="tel" data-value="#type#" id="tel_type_#i#" data-field="type">#type#</a>';
MockFormDom += ' <span role="button" class="icon-arrow icon-arrow-bottom setbox-icon">Expand</span>';
MockFormDom += ' </dt>';
MockFormDom += ' <dd class="setbox-body">';
Expand All @@ -32,7 +32,7 @@
MockFormDom += ' <div id="add-email-#i#" data-template class="email-template" data-index="#i#">';
MockFormDom += ' <dl class="setbox fillflow-row">';
MockFormDom += ' <dt class="setbox-title">';
MockFormDom += ' <a data-taglist="email-type" name="email" value="#type#" id="email_type_#i#" data-field="type">#type#</a>';
MockFormDom += ' <a data-taglist="email-type" name="email" data-value="#type#" id="email_type_#i#" data-field="type">#type#</a>';
MockFormDom += ' <span role="button" class="icon-arrow icon-arrow-bottom setbox-icon">Expand</span>';
MockFormDom += ' </dt>';
MockFormDom += ' <dd class="setbox-body">';
Expand Down
4 changes: 3 additions & 1 deletion apps/communications/contacts/test/unit/views/form_test.js
Expand Up @@ -9,6 +9,7 @@ requireApp('communications/contacts/js/utilities/templates.js');
requireApp('communications/contacts/js/utilities/dom.js');
requireApp('communications/contacts/js/utilities/event_listeners.js');
requireApp('communications/contacts/js/utilities/misc.js');
requireApp('communications/contacts/test/unit/mock_asyncstorage.js');
requireApp('communications/contacts/test/unit/mock_contacts.js');
requireApp('communications/contacts/test/unit/mock_mozContacts.js');
requireApp('communications/contacts/test/unit/mock_fb.js');
Expand All @@ -34,7 +35,8 @@ var subject,

var mocksForm = new MocksHelper([
'ConfirmDialog',
'ContactPhotoHelper'
'ContactPhotoHelper',
'asyncStorage'
]).init();

suite('Render contact form', function() {
Expand Down

0 comments on commit dddecf2

Please sign in to comment.