54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
import Component from '@ember/component';
|
|
import { computed } from '@ember/object';
|
|
|
|
const changeTypes = ['Added', 'Deleted', 'Edited'];
|
|
|
|
export default Component.extend({
|
|
classNames: ['job-version', 'boxed-section'],
|
|
|
|
version: null,
|
|
isOpen: false,
|
|
|
|
// Passes through to the job-diff component
|
|
verbose: true,
|
|
|
|
changeCount: computed('version.diff', function() {
|
|
const diff = this.get('version.diff');
|
|
const taskGroups = diff.TaskGroups || [];
|
|
|
|
if (!diff) {
|
|
return 0;
|
|
}
|
|
|
|
return (
|
|
fieldChanges(diff) +
|
|
taskGroups.reduce(arrayOfFieldChanges, 0) +
|
|
(taskGroups.mapBy('Tasks') || []).reduce(flatten, []).reduce(arrayOfFieldChanges, 0)
|
|
);
|
|
}),
|
|
|
|
actions: {
|
|
toggleDiff() {
|
|
this.toggleProperty('isOpen');
|
|
},
|
|
},
|
|
});
|
|
|
|
const flatten = (accumulator, array) => accumulator.concat(array);
|
|
const countChanges = (total, field) => (changeTypes.includes(field.Type) ? total + 1 : total);
|
|
|
|
function fieldChanges(diff) {
|
|
return (
|
|
(diff.Fields || []).reduce(countChanges, 0) +
|
|
(diff.Objects || []).reduce(arrayOfFieldChanges, 0)
|
|
);
|
|
}
|
|
|
|
function arrayOfFieldChanges(count, diff) {
|
|
if (!diff) {
|
|
return count;
|
|
}
|
|
|
|
return count + fieldChanges(diff);
|
|
}
|