mirror of
https://github.com/nasa/openmct.git
synced 2025-02-20 17:33:23 +00:00
[New Edit Mode] #634 Removed edit concerns from MctRepresentation
This commit is contained in:
parent
d08cdfba49
commit
a11dba88b2
@ -32,7 +32,8 @@ define(
|
||||
*/
|
||||
function InspectorController($scope, policyService) {
|
||||
var domainObject = $scope.domainObject,
|
||||
typeCapability = domainObject.getCapability('type');
|
||||
typeCapability = domainObject.getCapability('type'),
|
||||
statusListener;
|
||||
|
||||
/**
|
||||
* Filters region parts to only those allowed by region policies
|
||||
@ -50,6 +51,11 @@ define(
|
||||
$scope.regions = filterRegions(typeCapability.getDefinition().inspector || new InspectorRegion());
|
||||
}
|
||||
|
||||
statusListener = domainObject.getCapability("status").listen(setRegions);
|
||||
$scope.$on("$destroy", function () {
|
||||
statusListener();
|
||||
});
|
||||
|
||||
setRegions();
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,8 @@ define(
|
||||
mockTypeCapability,
|
||||
mockTypeDefinition,
|
||||
mockPolicyService,
|
||||
mockStatusCapability,
|
||||
capabilities = {},
|
||||
controller;
|
||||
|
||||
beforeEach(function(){
|
||||
@ -47,19 +49,29 @@ define(
|
||||
'getDefinition'
|
||||
]);
|
||||
mockTypeCapability.getDefinition.andReturn(mockTypeDefinition);
|
||||
capabilities.type = mockTypeCapability;
|
||||
|
||||
mockStatusCapability = jasmine.createSpyObj('statusCapability', [
|
||||
'listen'
|
||||
]);
|
||||
capabilities.status = mockStatusCapability;
|
||||
|
||||
mockDomainObject = jasmine.createSpyObj('domainObject', [
|
||||
'getCapability'
|
||||
]);
|
||||
mockDomainObject.getCapability.andReturn(mockTypeCapability);
|
||||
mockDomainObject.getCapability.andCallFake(function (name) {
|
||||
return capabilities[name];
|
||||
});
|
||||
|
||||
mockPolicyService = jasmine.createSpyObj('policyService', [
|
||||
'allow'
|
||||
]);
|
||||
|
||||
mockScope = {
|
||||
domainObject: mockDomainObject
|
||||
};
|
||||
mockScope = jasmine.createSpyObj('$scope',
|
||||
['$on']
|
||||
);
|
||||
|
||||
mockScope.domainObject = mockDomainObject;
|
||||
});
|
||||
|
||||
it("filters out regions disallowed by region policy", function() {
|
||||
@ -73,6 +85,25 @@ define(
|
||||
controller = new InspectorController(mockScope, mockPolicyService);
|
||||
expect(mockScope.regions.length).toBe(2);
|
||||
});
|
||||
|
||||
it("Responds to status changes", function() {
|
||||
mockPolicyService.allow.andReturn(true);
|
||||
controller = new InspectorController(mockScope, mockPolicyService);
|
||||
expect(mockScope.regions.length).toBe(2);
|
||||
expect(mockStatusCapability.listen).toHaveBeenCalled();
|
||||
mockPolicyService.allow.andReturn(false);
|
||||
mockStatusCapability.listen.mostRecentCall.args[0]();
|
||||
expect(mockScope.regions.length).toBe(0);
|
||||
});
|
||||
|
||||
it("Unregisters status listener", function() {
|
||||
var mockListener = jasmine.createSpy('listener');
|
||||
mockStatusCapability.listen.andReturn(mockListener);
|
||||
controller = new InspectorController(mockScope, mockPolicyService);
|
||||
expect(mockScope.$on).toHaveBeenCalledWith("$destroy", jasmine.any(Function));
|
||||
mockScope.$on.mostRecentCall.args[1]();
|
||||
expect(mockListener).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
|
@ -88,7 +88,6 @@ define(
|
||||
toClear = [], // Properties to clear out of scope on change
|
||||
counter = 0,
|
||||
couldRepresent = false,
|
||||
couldEdit = false,
|
||||
lastIdPath = [],
|
||||
lastKey,
|
||||
statusListener,
|
||||
@ -137,14 +136,13 @@ define(
|
||||
});
|
||||
}
|
||||
|
||||
function unchanged(canRepresent, canEdit, idPath, key) {
|
||||
function unchanged(canRepresent, idPath, key) {
|
||||
return (canRepresent === couldRepresent) &&
|
||||
(key === lastKey) &&
|
||||
(idPath.length === lastIdPath.length) &&
|
||||
idPath.every(function (id, i) {
|
||||
return id === lastIdPath[i];
|
||||
}) &&
|
||||
(canEdit === couldEdit);
|
||||
});
|
||||
}
|
||||
|
||||
function getIdPath(domainObject) {
|
||||
@ -168,11 +166,10 @@ define(
|
||||
representation = lookup($scope.key, domainObject),
|
||||
uses = ((representation || {}).uses || []),
|
||||
canRepresent = !!(representation && domainObject),
|
||||
canEdit = !!(domainObject && domainObject.hasCapability('editor') && domainObject.getCapability('editor').inEditContext()),
|
||||
idPath = getIdPath(domainObject),
|
||||
key = $scope.key;
|
||||
|
||||
if (unchanged(canRepresent, canEdit, idPath, key)) {
|
||||
if (unchanged(canRepresent, idPath, key)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -201,7 +198,6 @@ define(
|
||||
// To allow simplified change detection next time around
|
||||
couldRepresent = canRepresent;
|
||||
lastIdPath = idPath;
|
||||
couldEdit = canEdit;
|
||||
lastKey = key;
|
||||
|
||||
// Populate scope with fields associated with the current
|
||||
@ -240,25 +236,6 @@ define(
|
||||
// (to a different object)
|
||||
$scope.$watch("domainObject", refresh);
|
||||
|
||||
function listenForStatusChange(object) {
|
||||
if (statusListener) {
|
||||
statusListener();
|
||||
}
|
||||
statusListener = object.getCapability("status").listen(refresh);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a listener to the object for status changes.
|
||||
*/
|
||||
$scope.$watch("domainObject", function (domainObject, oldDomainObject) {
|
||||
if (domainObject !== oldDomainObject){
|
||||
listenForStatusChange(domainObject);
|
||||
}
|
||||
});
|
||||
if ($scope.domainObject) {
|
||||
listenForStatusChange($scope.domainObject);
|
||||
}
|
||||
|
||||
// Finally, also update when there is a new version of that
|
||||
// same domain object; these changes should be tracked in the
|
||||
// model's "modified" field, by the mutation capability.
|
||||
|
@ -253,21 +253,6 @@ define(
|
||||
expect(mockScope.testCapability).toBeUndefined();
|
||||
});
|
||||
|
||||
it("registers a status change listener", function () {
|
||||
mockScope.$watch.calls[2].args[1](mockDomainObject);
|
||||
expect(mockStatusCapability.listen).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("unlistens for status change on scope destruction", function () {
|
||||
var mockUnlistener = jasmine.createSpy("unlisten");
|
||||
mockStatusCapability.listen.andReturn(mockUnlistener);
|
||||
mockScope.$watch.calls[2].args[1](mockDomainObject);
|
||||
expect(mockStatusCapability.listen).toHaveBeenCalled();
|
||||
|
||||
mockScope.$on.calls[1].args[1]();
|
||||
expect(mockUnlistener).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
describe("when a domain object has been observed", function () {
|
||||
var mockContext,
|
||||
mockContext2,
|
||||
|
Loading…
x
Reference in New Issue
Block a user