add filters

This commit is contained in:
Mads Rasmussen
2018-10-03 16:41:56 +02:00
parent 991d960379
commit 0bbacf46ea
2 changed files with 107 additions and 5 deletions

View File

@@ -8,6 +8,9 @@
vm.datePickerChange = datePickerChange;
vm.clearPublishDate = clearPublishDate;
vm.clearUnpublishDate = clearUnpublishDate;
vm.dirtyVariantFilter = dirtyVariantFilter;
vm.pristineVariantFilter = pristineVariantFilter;
vm.changeSelection = changeSelection;
vm.currentUser = null;
vm.datePickerConfig = {
@@ -26,6 +29,7 @@
function onInit() {
vm.variants = $scope.model.variants;
vm.hasPristineVariants = false;
if(!$scope.model.title) {
localizationService.localize("general_scheduledPublishing").then(function(value){
@@ -33,6 +37,40 @@
});
}
_.each(vm.variants,
function (variant) {
variant.compositeId = variant.language.culture + "_" + (variant.segment ? variant.segment : "");
variant.htmlId = "_content_variant_" + variant.compositeId;
//check for pristine variants
if (!vm.hasPristineVariants) {
vm.hasPristineVariants = pristineVariantFilter(variant);
}
});
if (vm.variants.length !== 0) {
//now sort it so that the current one is at the top
vm.variants = _.sortBy(vm.variants, function (v) {
return v.active ? 0 : 1;
});
var active = _.find(vm.variants, function (v) {
return v.active;
});
if (active) {
//ensure that the current one is selected
active.schedule = true;
active.save = true;
}
//$scope.model.disableSubmitButton = !canPublish();
} else {
//disable Publish button if we have nothing to publish, should not happen
//$scope.model.disableSubmitButton = true;
}
// get current backoffice user and format dates
userService.getCurrentUser().then(function (currentUser) {
@@ -117,11 +155,57 @@
}
function changeSelection(variant) {
$scope.model.disableSubmitButton = !canSchedule();
//need to set the Save state to true if publish is true
variant.save = variant.schedule;
}
function dirtyVariantFilter(variant) {
//determine a variant is 'dirty' (meaning it will show up as publish-able) if it's
// * the active one
// * it's editor is in a $dirty state
// * it has pending saves
// * it is unpublished
// * it is in NotCreated state
return (variant.active || variant.isDirty || variant.state === "Draft" || variant.state === "PublishedPendingChanges" || variant.state === "NotCreated");
}
function pristineVariantFilter(variant) {
return !(dirtyVariantFilter(variant));
}
/** Returns true if publishing is possible based on if there are un-published mandatory languages */
function canSchedule() {
var selected = [];
for (var i = 0; i < vm.variants.length; i++) {
var variant = vm.variants[i];
//if this variant will show up in the publish-able list
var publishable = dirtyVariantFilter(variant);
if ((variant.language.isMandatory && (variant.state === "NotCreated" || variant.state === "Draft"))
&& (!publishable || !variant.schedule)) {
//if a mandatory variant isn't published and it's not publishable or not selected to be published
//then we cannot publish anything
//TODO: Show a message when this occurs
return false;
}
if (variant.schedule) {
selected.push(variant.schedule);
}
}
return selected.length > 0;
}
onInit();
//when this dialog is closed, reset all 'save' flags
$scope.$on('$destroy', function () {
for (var i = 0; i < vm.variants.length; i++) {
vm.variants[i].schedule = false;
vm.variants[i].save = false;
}
});

View File

@@ -6,25 +6,25 @@
<div class="umb-list umb-list--condensed">
<div class="umb-list-item" ng-repeat="variant in vm.variants">
<div class="umb-list-item" ng-repeat="variant in vm.variants | filter:vm.dirtyVariantFilter">
<ng-form name="scheduleSelectorForm">
<div class="flex">
<input
id="{{variant.language.culture}}"
name="saveVariantSelector"
type="checkbox"
ng-model="variant.save"
ng-model="variant.schedule"
ng-change="vm.changeSelection(variant)"
style="margin-right: 8px;" />
<div>
<label for="{{variant.language.culture}}" style="margin-bottom: 2px;">
<span>{{ variant.language.name }}</span>
<strong ng-if="variant.language.isMandatory" class="umb-control-required">*</strong>
</label>
<div>
<umb-variant-state class="umb-permission__description" variant="variant"></umb-variant-state>
<div class="umb-permission__description">
<umb-variant-state variant="variant"></umb-variant-state>
<span ng-if="variant.language.isMandatory"> - <localize key="languages_mandatoryLanguage"></localize></span>
</div>
<div ng-if="variant.schedule" class="flex items-center" style="margin-top: 10px; margin-bottom: 10px;">
@@ -81,5 +81,23 @@
</div>
<br/>
</div>
<div class="umb-list umb-list--condensed" ng-if="vm.hasPristineVariants">
<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.variants | filter:vm.pristineVariantFilter track by variant.language.culture">
<div>
<div style="margin-bottom: 2px;">
<span>{{ variant.language.name }}</span>
</div>
<div class="umb-permission__description">
<umb-variant-state variant="variant"></umb-variant-state>
<span ng-if="variant.language.isMandatory"> - <localize key="languages_mandatoryLanguage"></localize></span>
</div>
</div>
</div>
</div>
</div>