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