Merge pull request #2609 from umbraco/temp8-U4-11173

Fixes - U4-11173 Update the publish dialog list to only show languages that have pending changes
This commit is contained in:
Warren Buckley
2018-05-02 09:39:08 +01:00
committed by GitHub
7 changed files with 90 additions and 38 deletions

View File

@@ -218,6 +218,7 @@ Use this directive to construct a header inside the main editor window.
}
function setCurrentVariant(variants) {
angular.forEach(variants, function (variant) {
if(variant.current) {
scope.vm.currentVariant = variant;
@@ -245,8 +246,8 @@ Use this directive to construct a header inside the main editor window.
});
}
scope.goBack = function() {
if(scope.onBack) {
scope.goBack = function () {
if (scope.onBack) {
scope.onBack();
}
};

View File

@@ -1,23 +1,27 @@
(function () {
"use strict";
function PublishController($scope, $timeout) {
function PublishController($scope) {
var vm = this;
vm.variants = $scope.model.variants;
var variants = $scope.model.variants;
vm.changeSelection = changeSelection;
vm.loading = true;
vm.dirtyVariants = [];
vm.pristineVariants = [];
//watch this model, if it's reset, then re init
$scope.$watch(function() {
return $scope.model.variants;
},
function(newVal, oldVal) {
$scope.$watch(function () {
return $scope.model.variants;
},
function (newVal, oldVal) {
vm.variants = newVal;
if (oldVal && oldVal.length) {
//re-bind the selections
for (var i = 0; i < oldVal.length; i++) {
var found = _.find(vm.variants, function(v) {
return v.language.id == oldVal[i].language.id;
var found = _.find(variants, function (v) {
return v.language.id === oldVal[i].language.id;
});
if (found) {
found.publish = oldVal[i].publish;
@@ -28,24 +32,42 @@
});
function changeSelection(variant) {
var firstSelected = _.find(vm.variants, function(v) {
var firstSelected = _.find(variants, function (v) {
return v.publish;
});
$scope.model.disableSubmitButton = !firstSelected; //disable submit button if there is none selected
}
function onInit() {
_.each(vm.variants,
function (v) {
v.compositeId = v.language.id + "_" + (v.segment ? v.segment : "");
v.htmlId = "publish_variant_" + v.compositeId;
_.each(variants,
function (variant) {
variant.compositeId = variant.language.id + "_" + (variant.segment ? variant.segment : "");
variant.htmlId = "publish_variant_" + variant.compositeId;
//separate "pristine" and "dirty" variants
if (variant.isEdited === true) {
vm.dirtyVariants.push(variant);
} else if (variant.isEdited === true ||
variant.isEdited === false && variant.state === "Unpublished") {
vm.dirtyVariants.push(variant);
} else {
vm.pristineVariants.push(variant);
}
});
//now sort it so that the current one is at the top
vm.variants = _.sortBy(vm.variants, function(v) {
return v.current ? 0 : 1;
});
//ensure that the current one is selected
vm.variants[0].publish = true;
if (vm.dirtyVariants.length !== 0) {
//now sort it so that the current one is at the top
vm.dirtyVariants = _.sortBy(vm.dirtyVariants, function (v) {
return v.current ? 0 : 1;
});
//ensure that the current one is selected
vm.dirtyVariants[0].publish = true;
} else {
//disable Publish button if we have nothing to publish
$scope.model.disableSubmitButton = true;
}
vm.loading = false;
}
}

View File

@@ -1,34 +1,52 @@
<div ng-controller="Umbraco.Overlays.PublishController as vm" >
<div ng-controller="Umbraco.Overlays.PublishController as vm">
<div style="margin-bottom: 15px;">
<p>What languages would you like to publish?</p>
<p ng-if="vm.dirtyVariants.length > 0"><localize key="content_languagesToPublish"></localize></p>
<p ng-if="vm.dirtyVariants.length === 0"><localize key="content_noLanguagesToPublish"></localize></p>
</div>
<div ng-if="vm.loading" style="min-height: 50px; position: relative;">
<umb-load-indicator></umb-load-indicator>
</div>
<div class="umb-list umb-list--condensed" ng-if="!vm.loading">
<div class="umb-list-item" ng-repeat="variant in vm.variants">
<div class="umb-list umb-list--condensed" ng-if="!vm.loading && vm.dirtyVariants">
<div class="umb-list-item" ng-repeat="variant in vm.dirtyVariants">
<ng-form name="publishVariantSelectorForm">
<label class="flex" for="{{variant.htmlId}}">
<input
id="{{variant.htmlId}}"
name="publishVariantSelector"
type="checkbox"
ng-model="variant.publish"
ng-change="vm.changeSelection(variant)"
ng-disabled="variant.validationError"
style="margin-right: 8px;"
val-server-field="{{variant.htmlId}}"/>
<input id="{{variant.htmlId}}"
name="publishVariantSelector"
type="checkbox"
ng-model="variant.publish"
ng-change="vm.changeSelection(variant)"
ng-disabled="variant.validationError"
style="margin-right: 8px;"
val-server-field="{{variant.htmlId}}" />
<div>
<div ng-class="{'bold': variant.published}" style="margin-bottom: 2px;">{{ variant.language.name }}</div>
<div class="umb-permission__description" ng-if="!variant.validationError">{{ variant.state }}</div>
<div class="umb-permission__description" ng-if="!variant.validationError && variant.isEdited && variant.state === 'Published'"><localize key="content_publishedPendingChanges"></localize></div>
<div class="umb-permission__description" ng-if="!variant.validationError && variant.isEdited && variant.state === 'Unpublished'"><localize key="content_unpublishedPendingChanges"></localize></div>
<div class="umb-permission__description" ng-if="!variant.validationError && variant.isEdited === false">{{ variant.state }}</div>
<div class="umb-permission__description" style="color: #F02E28;" val-msg-for="publishVariantSelector" val-toggle-msg="valServerField"></div>
</div>
</label>
</ng-form>
</div>
<br/>
</div>
<div class="umb-list umb-list--condensed" ng-if="!vm.loading && vm.pristineVariants">
<div style="margin-bottom: 15px; font-weight: bold;">
<p><localize key="content_publishedLanguages"></localize></p>
</div>
<div class="umb-list-item" ng-repeat="variant in vm.pristineVariants">
<div>
<div ng-class="{'bold': variant.published}" style="margin-bottom: 2px;">{{ variant.language.name }}</div>
<div class="umb-permission__description" ng-if="!variant.validationError">{{ variant.state }}</div>
</div>
</div>
</div>
</div>

View File

@@ -59,7 +59,9 @@
<umb-dropdown-item class="umb-variant-switcher__item" ng-class="{'umb-variant-switcher_item--current': variant.current}" ng-repeat="variant in variants">
<a href="" class="umb-variant-switcher__name-wrapper" ng-click="selectVariant($event, variant)" prevent-default>
<span class="umb-variant-switcher__name">{{variant.language.name}}</span>
<span class="umb-variant-switcher__state">{{variant.state}}</span>
<span class="umb-variant-switcher__state" ng-if="!variant.validationError && variant.isEdited && variant.state === 'Published'"><localize key="content_publishedPendingChanges"></localize></span>
<span class="umb-variant-switcher__state" ng-if="!variant.validationError && variant.isEdited && variant.state === 'Unpublished'"><localize key="content_unpublishedPendingChanges"></localize></span>
<span class="umb-variant-switcher__state" ng-if="variant.isEdited === false">{{variant.state}}</span>
</a>
<!-- Commented out as opposed to removed until we fully support split view (U4-11290) -->
<!--

View File

@@ -201,6 +201,7 @@
<key alias="publish">Publish</key>
<key alias="published">Published</key>
<key alias="publishedPendingChanges">Published (pending changes)</key>
<key alias="unpublishedPendingChanges">Unpublished (pending changes)</key>
<key alias="publishStatus">Publication Status</key>
<key alias="releaseDate">Publish at</key>
<key alias="unpublishDate">Unpublish at</key>
@@ -231,6 +232,10 @@
<key alias="contentRoot">Content root</key>
<key alias="isSensitiveValue">This value is hidden. If you need access to view this value please contact your website administrator.</key>
<key alias="isSensitiveValue_short">This value is hidden.</key>
<key alias="languagesToPublish">What languages would you like to publish?</key>
<key alias="noLanguagesToPublish">No languages available to be published.</key>
<key alias="publishedLanguages">Published Languages.</key>
</area>
<area alias="blueprints">
<key alias="createBlueprintFrom">Create a new Content Template from '%0%'</key>

View File

@@ -23,7 +23,7 @@ namespace Umbraco.Web.Models.ContentEditing
/// </summary>
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "state")]
public string PublishedState { get; set; }
@@ -33,6 +33,9 @@ namespace Umbraco.Web.Models.ContentEditing
[DataMember(Name = "exists")]
public bool Exists { get; set; }
[DataMember(Name = "isEdited")]
public bool IsEdited { get; set; }
/// <summary>
/// Determines if this is the variant currently being edited
/// </summary>

View File

@@ -36,6 +36,7 @@ namespace Umbraco.Web.Models.Mapping
Name = source.GetName(x.IsoCode),
Exists = source.IsCultureAvailable(x.IsoCode), // segments ??
PublishedState = source.PublishedState.ToString(),
IsEdited = source.IsCultureEdited(x.IsoCode)
//Segment = ?? We'll need to populate this one day when we support segments
}).ToList();