V8: Add infinite editing to datatype references tab (#6907)

* Add infinite editing to datatype references tab

* Use correct save button label in infinite editing mode
This commit is contained in:
Kenn Jacobsen
2020-01-16 15:36:54 +01:00
committed by Poornima Nayar
parent e85640c483
commit dbe088eedb
5 changed files with 112 additions and 13 deletions

View File

@@ -640,6 +640,23 @@ When building a custom infinite editor view you can use the same components as a
editor.view = "views/mediatypes/edit.html";
open(editor);
}
/**
* @ngdoc method
* @name umbraco.services.editorService#memberTypeEditor
* @methodOf umbraco.services.editorService
*
* @description
* Opens the member type editor in infinite editing, the submit callback returns the saved member type
* @param {Object} editor rendering options
* @param {Callback} editor.submit Submits the editor
* @param {Callback} editor.close Closes the editor
* @returns {Object} editor object
*/
function memberTypeEditor(editor) {
editor.view = "views/membertypes/edit.html";
open(editor);
}
/**
* @ngdoc method
@@ -1011,6 +1028,7 @@ When building a custom infinite editor view you can use the same components as a
iconPicker: iconPicker,
documentTypeEditor: documentTypeEditor,
mediaTypeEditor: mediaTypeEditor,
memberTypeEditor: memberTypeEditor,
queryBuilder: queryBuilder,
treePicker: treePicker,
nodePermissions: nodePermissions,

View File

@@ -6,7 +6,7 @@
* @description
* The controller for the info view of the datatype editor
*/
function DataTypeInfoController($scope, $routeParams, dataTypeResource, eventsService, $timeout) {
function DataTypeInfoController($scope, $routeParams, dataTypeResource, eventsService, $timeout, editorService) {
var vm = this;
var evts = [];
@@ -17,6 +17,9 @@ function DataTypeInfoController($scope, $routeParams, dataTypeResource, eventsSe
vm.view = {};
vm.view.loading = true;
vm.openDocumentType = openDocumentType;
vm.openMediaType = openMediaType;
vm.openMemberType = openMemberType;
/** Loads in the data type references one time */
function loadRelations() {
@@ -31,6 +34,57 @@ function DataTypeInfoController($scope, $routeParams, dataTypeResource, eventsSe
}
}
function openDocumentType(id, event) {
open(id, event, "documentType");
}
function openMediaType(id, event) {
open(id, event, "mediaType");
}
function openMemberType(id, event) {
open(id, event, "memberType");
}
function open(id, event, type) {
// targeting a new tab/window?
if (event.ctrlKey ||
event.shiftKey ||
event.metaKey || // apple
(event.button && event.button === 1) // middle click, >IE9 + everyone else
) {
// yes, let the link open itself
return;
}
event.stopPropagation();
event.preventDefault();
const editor = {
id: id,
submit: function (model) {
editorService.close();
vm.view.loading = true;
referencesLoaded = false;
loadRelations();
},
close: function () {
editorService.close();
}
};
switch (type) {
case "documentType":
editorService.documentTypeEditor(editor);
break;
case "mediaType":
editorService.mediaTypeEditor(editor);
break;
case "memberType":
editorService.memberTypeEditor(editor);
break;
}
}
// load data type references when the references tab is activated
evts.push(eventsService.on("app.tabChange", function (event, args) {
$timeout(function () {

View File

@@ -43,7 +43,7 @@
<div class="umb-table-cell umb-table__name"><span>{{::reference.name}}</span></div>
<div class="umb-table-cell"><span title="{{::reference.alias}}">{{::reference.alias}}</span></div>
<div class="umb-table-cell --noOverflow"><span>{{::reference.properties | umbCmsJoinArray:', ':'name'}}</span></div>
<div class="umb-table-cell umb-table-cell--nano"><a href="#/settings/documentTypes/edit/{{::reference.id}}"><localize key="general_open">Open</localize></a></div>
<div class="umb-table-cell umb-table-cell--nano"><a href="#/settings/documentTypes/edit/{{::reference.id}}" ng-click="vm.openDocumentType(reference.id, $event)"><localize key="general_open">Open</localize></a></div>
</div>
</div>
</div>
@@ -73,7 +73,7 @@
<div class="umb-table-cell umb-table__name"><span>{{::reference.name}}</span></div>
<div class="umb-table-cell"><span title="{{::reference.alias}}">{{::reference.alias}}</span></div>
<div class="umb-table-cell --noOverflow"><span>{{::reference.properties | umbCmsJoinArray:', ':'name'}}</span></div>
<div class="umb-table-cell umb-table-cell--nano"><a href="#/settings/mediaTypes/edit/{{::reference.id}}"><localize key="general_open">Open</localize></a></div>
<div class="umb-table-cell umb-table-cell--nano"><a href="#/settings/mediaTypes/edit/{{::reference.id}}" ng-click="vm.openMediaType(reference.id, $event)"><localize key="general_open">Open</localize></a></div>
</div>
</div>
</div>
@@ -104,7 +104,7 @@
<div class="umb-table-cell umb-table__name"><span>{{::reference.name}}</span></div>
<div class="umb-table-cell"><span title="{{::reference.alias}}">{{::reference.alias}}</span></div>
<div class="umb-table-cell --noOverflow"><span>{{::reference.properties | umbCmsJoinArray:', ':'name'}}</span></div>
<div class="umb-table-cell umb-table-cell--nano"><a href="#/settings/memberTypes/edit/{{::reference.id}}"><localize key="general_open">Open</localize></a></div>
<div class="umb-table-cell umb-table-cell--nano"><a href="#/settings/memberTypes/edit/{{::reference.id}}" ng-click="vm.openMemberType(reference.id, $event)"><localize key="general_open">Open</localize></a></div>
</div>
</div>
</div>

View File

@@ -13,8 +13,13 @@
var evts = [];
var vm = this;
var infiniteMode = $scope.model && $scope.model.infiniteMode;
var memberTypeId = infiniteMode ? $scope.model.id : $routeParams.id;
var create = infiniteMode ? $scope.model.create : $routeParams.create;
vm.save = save;
vm.close = close;
vm.editorfor = "visuallyHiddenTexts_newMember";
vm.header = {};
vm.header.editorfor = "content_membergroup";
@@ -25,6 +30,7 @@
vm.page.loading = false;
vm.page.saveButtonState = "init";
vm.labels = {};
vm.saveButtonKey = infiniteMode ? "buttons_saveAndClose" : "buttons_save";
var labelKeys = [
"general_design",
@@ -86,7 +92,7 @@
vm.page.defaultButton = {
hotKey: "ctrl+s",
hotKeyWhenHidden: true,
labelKey: "buttons_save",
labelKey: vm.saveButtonKey,
letter: "S",
type: "submit",
handler: function () { vm.save(); }
@@ -94,7 +100,7 @@
vm.page.subButtons = [{
hotKey: "ctrl+g",
hotKeyWhenHidden: true,
labelKey: "buttons_saveAndGenerateModels",
labelKey: infiniteMode ? "buttons_generateModelsAndClose" : "buttons_saveAndGenerateModels",
letter: "G",
handler: function () {
@@ -147,12 +153,12 @@
}
});
if ($routeParams.create) {
if (create) {
vm.page.loading = true;
//we are creating so get an empty data type item
memberTypeResource.getScaffold($routeParams.id)
memberTypeResource.getScaffold(memberTypeId)
.then(function (dt) {
init(dt);
@@ -163,10 +169,12 @@
vm.page.loading = true;
memberTypeResource.getById($routeParams.id).then(function (dt) {
memberTypeResource.getById(memberTypeId).then(function (dt) {
init(dt);
syncTreeNode(vm.contentType, dt.path, true);
if(!infiniteMode) {
syncTreeNode(vm.contentType, dt.path, true);
}
vm.page.loading = false;
});
@@ -219,10 +227,16 @@
}
}).then(function (data) {
//success
syncTreeNode(vm.contentType, data.path);
if(!infiniteMode) {
syncTreeNode(vm.contentType, data.path);
}
vm.page.saveButtonState = "success";
if(infiniteMode && $scope.model.submit) {
$scope.model.submit();
}
deferred.resolve(data);
}, function (err) {
//error
@@ -307,6 +321,12 @@
});
}
function close() {
if(infiniteMode && $scope.model.close) {
$scope.model.close();
}
}
evts.push(eventsService.on("editors.groupsBuilder.changed", function(name, args) {
angularHelper.getCurrentForm($scope).$setDirty();

View File

@@ -40,6 +40,14 @@
<umb-editor-footer-content-right>
<umb-button ng-if="model.infiniteMode"
type="button"
button-style="link"
label-key="general_close"
shortcut="esc"
action="vm.close()">
</umb-button>
<umb-button
ng-if="!vm.page.modelsBuilder"
type="button"
@@ -47,8 +55,7 @@
state="vm.page.saveButtonState"
button-style="success"
shortcut="ctrl+s"
label="Save"
label-key="buttons_save">
label-key="{{vm.saveButtonKey}}">
</umb-button>
<umb-button-group