updated contacts
This commit is contained in:
parent
26d2054be1
commit
1d14ca1a3f
|
@ -1,6 +1,7 @@
|
|||
<vn-crud-model
|
||||
vn-id="model"
|
||||
url="/client/api/ClientContacts"
|
||||
fields="['id', 'clientFk', 'name', 'phone']"
|
||||
link="{clientFk: $ctrl.$stateParams.id}"
|
||||
data="contacts" on-data-change="$ctrl.onDataChange()">
|
||||
</vn-crud-model>
|
||||
|
|
|
@ -11,8 +11,6 @@ class Controller {
|
|||
|
||||
onDataChange() {
|
||||
this.contacts = this.$scope.model.data;
|
||||
this.oldInstances = Object.assign([], this.contacts);
|
||||
this.removedContacts = [];
|
||||
}
|
||||
|
||||
add() {
|
||||
|
@ -25,41 +23,14 @@ class Controller {
|
|||
}
|
||||
|
||||
remove(index) {
|
||||
if (this.contacts[index] && this.contacts[index].id)
|
||||
this.removedContacts.push(this.contacts[index].id);
|
||||
|
||||
this.contacts.splice(index, 1);
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
let data = {
|
||||
clientFk: this.client.id,
|
||||
delete: this.removedContacts,
|
||||
create: [],
|
||||
update: []
|
||||
};
|
||||
|
||||
this.contacts.forEach(item => {
|
||||
if (typeof item.id === 'undefined')
|
||||
data.create.push(item);
|
||||
|
||||
if (typeof item.id !== 'undefined' && this.hasChanges(item))
|
||||
data.update.push(item);
|
||||
});
|
||||
|
||||
this.$scope.watcher.check();
|
||||
|
||||
this.$http.post(`/client/api/ClientContacts/crud`, data).then(() => {
|
||||
this.$scope.watcher.notifySaved();
|
||||
this.$scope.model.refresh();
|
||||
});
|
||||
}
|
||||
|
||||
hasChanges(instance) {
|
||||
let oldInstance = this.oldInstances.find(item => {
|
||||
return item.id == instance.id;
|
||||
});
|
||||
return instance.name != oldInstance.name || instance.phone != oldInstance.phone;
|
||||
this.$scope.watcher.realSubmit()
|
||||
.then(() => this.$scope.model.save(true))
|
||||
.then(() => this.$scope.watcher.notifySaved());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import './index.js';
|
||||
import {watcher} from '../helpers/watcherHelper.js';
|
||||
|
||||
describe('Client', () => {
|
||||
describe('Component vnClientContact', () => {
|
||||
|
@ -27,7 +28,7 @@ describe('Client', () => {
|
|||
{id: 3, name: 'My contact 3', phone: '123456789'}
|
||||
]
|
||||
};
|
||||
$scope.watcher = {check: () => {}, notifySaved: () => {}};
|
||||
$scope.watcher = watcher;
|
||||
controller = $componentController('vnClientContact', {$scope: $scope}, {$state: $state});
|
||||
controller.client = {
|
||||
id: 101
|
||||
|
@ -40,8 +41,6 @@ describe('Client', () => {
|
|||
|
||||
expect(controller.contacts).toBeDefined();
|
||||
expect(controller.contacts.length).toEqual(3);
|
||||
expect(controller.oldInstances).toBeDefined();
|
||||
expect(controller.oldInstances.length).toEqual(3);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -56,13 +55,7 @@ describe('Client', () => {
|
|||
|
||||
it('should remove a contact that occupies the position in the index', () => {
|
||||
let index = 2;
|
||||
controller.removedContacts = [];
|
||||
controller.contacts = [
|
||||
{id: 1, name: 'My contact 1', phone: '123456789'},
|
||||
{id: 2, name: 'My contact 2', phone: '123456789'},
|
||||
{id: 3, name: 'My contact 3', phone: '123456789'}
|
||||
];
|
||||
|
||||
controller.onDataChange();
|
||||
controller.remove(index);
|
||||
|
||||
expect(controller.contacts.length).toEqual(2);
|
||||
|
@ -70,100 +63,17 @@ describe('Client', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('hasChanges()', () => {
|
||||
it('should return true if the instance has changes', () => {
|
||||
controller.oldInstances = [{id: 1, name: 'My contact 1', phone: '123456789'}];
|
||||
let contact = {id: 1, name: 'My renamed contact', phone: '123456789'};
|
||||
let hasChanges = controller.hasChanges(contact);
|
||||
|
||||
expect(hasChanges).toBeTruthy();
|
||||
});
|
||||
|
||||
it(`should return false if the instance hasn't changes`, () => {
|
||||
controller.oldInstances = [{id: 1, name: 'My contact 1', phone: '123456789'}];
|
||||
let contact = {id: 1, name: 'My contact 1', phone: '123456789'};
|
||||
let hasChanges = controller.hasChanges(contact);
|
||||
|
||||
expect(hasChanges).toBeFalsy();
|
||||
});
|
||||
});
|
||||
|
||||
describe('onSubmit()', () => {
|
||||
xdescribe('onSubmit()', () => {
|
||||
it("should perfom a query to delete contacts", () => {
|
||||
controller.oldInstances = [
|
||||
{id: 1, clientFk: 101, name: 'My contact 1', phone: '123456789'},
|
||||
{id: 2, clientFk: 101, name: 'My contact 2', phone: '123456789'}
|
||||
];
|
||||
|
||||
controller.contacts = [
|
||||
controller.$scope.model.data = [
|
||||
{id: 1, name: 'My contact 1', phone: '123456789'},
|
||||
{id: 2, name: 'My contact 2', phone: '123456789'}
|
||||
];
|
||||
controller.removedContacts = [1];
|
||||
spyOn(controller.$scope.watcher, 'notifySaved');
|
||||
|
||||
let newData = {
|
||||
clientFk: 101,
|
||||
delete: [1],
|
||||
create: [],
|
||||
update: []
|
||||
};
|
||||
|
||||
$httpBackend.whenPOST(`/client/api/ClientContacts/crud`, newData).respond(200, true);
|
||||
$httpBackend.expectPOST(`/client/api/ClientContacts/crud`, newData);
|
||||
controller.onSubmit();
|
||||
$httpBackend.flush();
|
||||
});
|
||||
|
||||
it("should perfom a query to update contacts", () => {
|
||||
controller.oldInstances = [
|
||||
{id: 1, clientFk: 101, name: 'My contact 1', phone: '123456789'},
|
||||
{id: 2, clientFk: 101, name: 'My contact 2', phone: '123456789'}
|
||||
];
|
||||
|
||||
controller.contacts = [
|
||||
{id: 1, clientFk: 101, name: 'My contact 1', phone: '123456789'},
|
||||
{id: 2, clientFk: 101, name: 'My contact 2', phone: '111111111'}
|
||||
];
|
||||
controller.removedContacts = [];
|
||||
|
||||
let newData = {
|
||||
clientFk: 101,
|
||||
delete: [],
|
||||
create: [],
|
||||
update: [
|
||||
{id: 2, clientFk: 101, name: 'My contact 2', phone: '111111111'}
|
||||
]
|
||||
};
|
||||
|
||||
$httpBackend.whenPOST(`/client/api/ClientContacts/crud`, newData).respond(200, true);
|
||||
$httpBackend.expectPOST(`/client/api/ClientContacts/crud`, newData);
|
||||
controller.onSubmit();
|
||||
$httpBackend.flush();
|
||||
});
|
||||
|
||||
it("should perfom a query to create new contact", () => {
|
||||
controller.oldInstances = [
|
||||
{id: 1, clientFk: 101, name: 'My contact 1', phone: '123456789'},
|
||||
{id: 2, clientFk: 101, name: 'My contact 2', phone: '123456789'}
|
||||
];
|
||||
|
||||
controller.contacts = [
|
||||
{id: 1, name: 'My contact 1', phone: '123456789'},
|
||||
{id: 2, name: 'My contact 2', phone: '123456789'},
|
||||
{name: 'My contact 3', phone: '123456789'}
|
||||
];
|
||||
controller.removedContacts = [];
|
||||
|
||||
let newData = {
|
||||
clientFk: 101,
|
||||
delete: [],
|
||||
create: [{name: 'My contact 3', phone: '123456789'}],
|
||||
update: []
|
||||
};
|
||||
|
||||
$httpBackend.whenPOST(`/client/api/ClientContacts/crud`, newData).respond(200, true);
|
||||
$httpBackend.expectPOST(`/client/api/ClientContacts/crud`, newData);
|
||||
controller.onSubmit();
|
||||
$httpBackend.flush();
|
||||
expect(controller.$scope.watcher.notifySaved).toHaveBeenCalledWith();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
module.exports.watcher = {
|
||||
realSubmit: () => {
|
||||
return {
|
||||
then: () => {}
|
||||
};
|
||||
},
|
||||
check: () => {},
|
||||
save: () => {
|
||||
return {
|
||||
then: () => {}
|
||||
};
|
||||
},
|
||||
notifySaved: () => {}
|
||||
};
|
Loading…
Reference in New Issue