Skip to content

Commit 711551e

Browse files
committed
UI: detail view
Support dynamically updating context on detail view load, to support cases where certain context items are required by other elements loaded, but may not be present in the browser history.
1 parent c112088 commit 711551e

2 files changed

Lines changed: 56 additions & 0 deletions

File tree

ui/scripts/ui/widgets/detailView.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,13 @@
870870
var removedTabs = [];
871871
var tabFilter = options.tabFilter;
872872
var context = options.context ? options.context : {};
873+
var updateContext = $detailView.data('view-args').updateContext;
874+
875+
if (updateContext) {
876+
$.extend($detailView.data('view-args').context, updateContext({
877+
context: $detailView.data('view-args').context
878+
}));
879+
}
873880

874881
if(options.newData &&
875882
($detailView.data('view-args').section != null && context[$detailView.data('view-args').section] != null && context[$detailView.data('view-args').section].length > 0)) {

ui/tests/test.detailView.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,4 +743,53 @@
743743
};
744744
$detailView.find('.action.updateDataTestAsync a').click();
745745
});
746+
747+
test('Update context', function() {
748+
var detailView = {
749+
context: {
750+
listViewItemA: [
751+
{ fieldA: 'fieldAContent' }
752+
]
753+
// listViewItemB [not stored yet]
754+
},
755+
756+
tabFilter: function(args) {
757+
start();
758+
ok($.isArray(args.context.listViewItemB), 'updateContext called before tabFilter');
759+
stop();
760+
761+
return [];
762+
},
763+
764+
// updateContext is executed every time a data provider is called
765+
updateContext: function(args) {
766+
start();
767+
ok(true, 'updateContext called');
768+
equal(args.context.listViewItemA[0].fieldA, 'fieldAContent', 'updateContext: Item A present in context');
769+
stop();
770+
771+
return {
772+
listViewItemB: [
773+
{ fieldB: 'fieldBContent' }
774+
]
775+
};
776+
},
777+
778+
tabs: {
779+
test: {
780+
title: 'test',
781+
fields: { fieldA: { label: 'fieldA'}, fieldB: { label: 'fieldB' }},
782+
dataProvider: function(args) {
783+
start();
784+
equal(args.context.listViewItemA[0].fieldA, 'fieldAContent', 'dataProvider: Item A present in context');
785+
equal(args.context.listViewItemB[0].fieldB, 'fieldBContent', 'dataProvider: Item B present in context');
786+
}
787+
}
788+
}
789+
};
790+
var $detailView = $('<div></div>');
791+
792+
stop();
793+
$detailView.detailView(detailView);
794+
});
746795
}(jQuery));

0 commit comments

Comments
 (0)