mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 06:37:23 +01:00
Group tasks ui picked (#7996)
* Added initial group tasks ui * Changed group compnent directory * Added group task checklist support * Added checklist support to ui * Fixed delete tags route * Added checklist routes to support new group tasks * Added assign user tag input * Added new group members autocomplete directive * Linked assign ui to api * Added styles * Limited tag use * Fixed line endings * Updated to new file structure * Fixed failing task tests * Updatd with new checklist logic and fixed columns * Added purchased info to group and prevented non purchased group from seeing new group tasks * Updated add task function * Added userid check back to tag routes * Marked tag tests as pending * Added comments to pending tests * Added back routes accidently deleted * Added locale strings * Other clarity fixes * Moved common task function to task service * Removed files from manifest * Fixed naming collision and remove logic * Removed group get tasks until live * Fixed test to check update task. Removed extra removeTask call. Synced updated checklists. Added purchased to noset * Fixed delete group task
This commit is contained in:
committed by
Matteo Pagliazzi
parent
6a82206f81
commit
285041cdee
@@ -0,0 +1,73 @@
|
||||
'use strict';
|
||||
|
||||
(function(){
|
||||
angular
|
||||
.module('habitrpg')
|
||||
.directive('groupMembersAutocomplete', groupMembersAutocomplete);
|
||||
|
||||
groupMembersAutocomplete.$inject = [
|
||||
'$parse',
|
||||
'$rootScope',
|
||||
];
|
||||
|
||||
function groupMembersAutocomplete($parse, $rootScope) {
|
||||
|
||||
return {
|
||||
templateUrl: 'partials/groups.members.autocomplete.html',
|
||||
compile: function (element, attrs) {
|
||||
var modelAccessor = $parse(attrs.ngModel);
|
||||
|
||||
return function (scope, element, attrs, controller) {
|
||||
var availableTags = _.pluck(scope.group.members, 'profile.name');
|
||||
var memberProfileNameToIdMap = _.object(_.map(scope.group.members, function(item) {
|
||||
return [item.profile.name, item.id]
|
||||
}));
|
||||
var memberIdToProfileNameMap = _.object(_.map(scope.group.members, function(item) {
|
||||
return [item.id, item.profile.name]
|
||||
}));
|
||||
|
||||
var currentTags = [];
|
||||
_.each(scope.task.group.assignedUsers, function(userId) { currentTags.push(memberIdToProfileNameMap[userId]) })
|
||||
|
||||
var taggle = new Taggle('taggle', {
|
||||
tags: currentTags,
|
||||
allowedTags: currentTags,
|
||||
allowDuplicates: false,
|
||||
onBeforeTagAdd: function(event, tag) {
|
||||
return confirm(window.env.t('confirmAddTag', {tag: tag}));
|
||||
},
|
||||
onTagAdd: function(event, tag) {
|
||||
$rootScope.$broadcast('addedGroupMember', memberProfileNameToIdMap[tag]);
|
||||
},
|
||||
onBeforeTagRemove: function(event, tag) {
|
||||
return confirm(window.env.t('confirmRemoveTag', {tag: tag}))
|
||||
},
|
||||
onTagRemove: function(event, tag) {
|
||||
$rootScope.$broadcast('removedGroupMember', memberProfileNameToIdMap[tag]);
|
||||
}
|
||||
});
|
||||
var container = taggle.getContainer();
|
||||
var input = taggle.getInput();
|
||||
|
||||
$(input).autocomplete({
|
||||
source: availableTags, // See jQuery UI documentaton for options
|
||||
appendTo: container,
|
||||
position: { at: "left bottom", of: container },
|
||||
select: function(event, data) {
|
||||
event.preventDefault();
|
||||
//Add the tag if user clicks
|
||||
if (event.which === 1) {
|
||||
taggle.add(data.item.value);
|
||||
var taggleTags = taggle.getTags();
|
||||
scope.$apply(function (scope) {
|
||||
// Change bound variable
|
||||
modelAccessor.assign(scope, taggleTags.values);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
},
|
||||
};
|
||||
}
|
||||
}());
|
||||
Reference in New Issue
Block a user