mirror of
https://github.com/moodle/moodle.git
synced 2025-02-12 11:32:04 +01:00
MDL-75837 gradereport_user: User search widget within a dropdown
Modifications that will enable the user search widget to be rendered within a dropdown element.
This commit is contained in:
parent
09d0a20d45
commit
64d746ec13
6
grade/report/user/amd/build/user.min.js
vendored
6
grade/report/user/amd/build/user.min.js
vendored
@ -1,10 +1,10 @@
|
||||
define("gradereport_user/user",["exports","core/pending","core/templates","core/custom_interaction_events","core_grades/searchwidget/repository","core_grades/searchwidget/basewidget","core/str","core/url"],(function(_exports,_pending,Templates,_custom_interaction_events,Repository,WidgetBase,_str,_url){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&&cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}
|
||||
define("gradereport_user/user",["exports","core/pending","core/templates","core_grades/searchwidget/repository","core_grades/searchwidget/basewidget","core/str","core/url","jquery","core_grades/searchwidget/selectors"],(function(_exports,_pending,Templates,Repository,WidgetBase,_str,_url,_jquery,Selectors){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}return newObj.default=obj,cache&&cache.set(obj,newObj),newObj}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}
|
||||
/**
|
||||
* A small modal to search users within the gradebook.
|
||||
* A widget to search users within the gradebook.
|
||||
*
|
||||
* @module gradereport_user/user
|
||||
* @copyright 2022 Mathew May <mathew.solutions>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=_interopRequireDefault(_pending),Templates=_interopRequireWildcard(Templates),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),Repository=_interopRequireWildcard(Repository),WidgetBase=_interopRequireWildcard(WidgetBase),_url=_interopRequireDefault(_url);_exports.init=()=>{const pendingPromise=new _pending.default;registerListenerEvents(),pendingPromise.resolve()};const registerListenerEvents=()=>{const events=["click",_custom_interaction_events.default.events.activate,_custom_interaction_events.default.events.keyboardActivate];_custom_interaction_events.default.define(document,events);let{bodyPromiseResolver:bodyPromiseResolver,bodyPromise:bodyPromise}=WidgetBase.promisesAndResolvers();events.forEach((event=>{document.addEventListener(event,(async e=>{const trigger=e.target.closest(".userwidget");if(trigger){const courseID=trigger.dataset.courseid,groupId=trigger.dataset.groupid;e.preventDefault();const actionBaseUrl=_url.default.relativeUrl("/grade/report/user/index.php",{},!1),data=await Repository.userFetch(courseID,actionBaseUrl,groupId).catch((async e=>{const errorTemplateData={errormessage:e.message};bodyPromiseResolver(await Templates.render("core_grades/searchwidget/error",errorTemplateData))}));if(data===[])return;const allUsersOptionName=await(0,_str.get_string)("allusersnum","gradereport_user",data.users.length),allUsersOption=await Templates.render("core_grades/searchwidget/searchitem",{id:0,name:allUsersOptionName,url:_url.default.relativeUrl("/grade/report/user/index.php",{id:courseID,userid:0},!1)});WidgetBase.init(bodyPromise,data.users,searchUsers(),(0,_str.get_string)("selectauser","grades"),allUsersOption)}}))})),bodyPromiseResolver(Templates.render("core_grades/searchwidget/user/usersearch_body",{displayunsearchablecontent:!0}))},searchUsers=()=>()=>(users,searchTerm)=>{if(""===searchTerm)return users;searchTerm=searchTerm.toLowerCase();const searchResults=[];return users.forEach((user=>{user.fullname.toLowerCase().includes(searchTerm)&&searchResults.push(user)})),searchResults}}));
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=_interopRequireDefault(_pending),Templates=_interopRequireWildcard(Templates),Repository=_interopRequireWildcard(Repository),WidgetBase=_interopRequireWildcard(WidgetBase),_url=_interopRequireDefault(_url),_jquery=_interopRequireDefault(_jquery),Selectors=_interopRequireWildcard(Selectors);_exports.init=()=>{const pendingPromise=new _pending.default;registerListenerEvents(),pendingPromise.resolve()};const registerListenerEvents=()=>{let{bodyPromiseResolver:bodyPromiseResolver,bodyPromise:bodyPromise}=WidgetBase.promisesAndResolvers();const dropdownMenuContainer=document.querySelector(Selectors.elements.getSearchWidgetDropdownSelector("user"));(0,_jquery.default)(Selectors.elements.getSearchWidgetSelector("user")).on("show.bs.dropdown",(async e=>{const courseID=e.relatedTarget.dataset.courseid,groupId=e.relatedTarget.dataset.groupid,actionBaseUrl=_url.default.relativeUrl("/grade/report/user/index.php",{},!1);await WidgetBase.showLoader(dropdownMenuContainer);const data=await Repository.userFetch(courseID,actionBaseUrl,groupId).catch((async e=>{const errorTemplateData={errormessage:e.message};bodyPromiseResolver(await Templates.render("core_grades/searchwidget/error",errorTemplateData))}));if(data===[])return;const allUsersOptionName=await(0,_str.get_string)("allusersnum","gradereport_user",data.users.length),allUsersOption=await Templates.render("core_grades/searchwidget/searchitem",{id:0,name:allUsersOptionName,url:_url.default.relativeUrl("/grade/report/user/index.php",{id:courseID,userid:0},!1)});await WidgetBase.init(dropdownMenuContainer,bodyPromise,data.users,searchUsers(),allUsersOption),bodyPromiseResolver(Templates.render("core_grades/searchwidget/user/usersearch_body",{displayunsearchablecontent:!0}))})),(0,_jquery.default)(Selectors.elements.getSearchWidgetSelector("user")).on("hide.bs.dropdown",(()=>{dropdownMenuContainer.innerHTML=""}))},searchUsers=()=>()=>(users,searchTerm)=>{if(""===searchTerm)return users;searchTerm=searchTerm.toLowerCase();const searchResults=[];return users.forEach((user=>{user.fullname.toLowerCase().includes(searchTerm)&&searchResults.push(user)})),searchResults}}));
|
||||
|
||||
//# sourceMappingURL=user.min.js.map
|
File diff suppressed because one or more lines are too long
@ -14,7 +14,7 @@
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* A small modal to search users within the gradebook.
|
||||
* A widget to search users within the gradebook.
|
||||
*
|
||||
* @module gradereport_user/user
|
||||
* @copyright 2022 Mathew May <mathew.solutions>
|
||||
@ -23,11 +23,12 @@
|
||||
|
||||
import Pending from 'core/pending';
|
||||
import * as Templates from 'core/templates';
|
||||
import CustomEvents from "core/custom_interaction_events";
|
||||
import * as Repository from 'core_grades/searchwidget/repository';
|
||||
import * as WidgetBase from 'core_grades/searchwidget/basewidget';
|
||||
import {get_string as getString} from 'core/str';
|
||||
import Url from 'core/url';
|
||||
import $ from 'jquery';
|
||||
import * as Selectors from 'core_grades/searchwidget/selectors';
|
||||
|
||||
/**
|
||||
* Our entry point into starting to build the search widget.
|
||||
@ -47,26 +48,18 @@ export const init = () => {
|
||||
* @method registerListenerEvents
|
||||
*/
|
||||
const registerListenerEvents = () => {
|
||||
const events = [
|
||||
'click',
|
||||
CustomEvents.events.activate,
|
||||
CustomEvents.events.keyboardActivate
|
||||
];
|
||||
CustomEvents.define(document, events);
|
||||
|
||||
let {bodyPromiseResolver, bodyPromise} = WidgetBase.promisesAndResolvers();
|
||||
const dropdownMenuContainer = document.querySelector(Selectors.elements.getSearchWidgetDropdownSelector('user'));
|
||||
|
||||
// Register events.
|
||||
events.forEach((event) => {
|
||||
document.addEventListener(event, async(e) => {
|
||||
const trigger = e.target.closest('.userwidget');
|
||||
if (trigger) {
|
||||
const courseID = trigger.dataset.courseid;
|
||||
const groupId = trigger.dataset.groupid;
|
||||
e.preventDefault();
|
||||
|
||||
// Handle the 'shown.bs.dropdown' event (Fired when the dropdown menu is fully displayed).
|
||||
$(Selectors.elements.getSearchWidgetSelector('user')).on('show.bs.dropdown', async(e) => {
|
||||
const courseID = e.relatedTarget.dataset.courseid;
|
||||
const groupId = e.relatedTarget.dataset.groupid;
|
||||
const actionBaseUrl = Url.relativeUrl('/grade/report/user/index.php', {}, false);
|
||||
// If an error occurs while fetching the data, display the error within the modal.
|
||||
// Display a loading icon in the dropdown menu container until the body promise is resolved.
|
||||
await WidgetBase.showLoader(dropdownMenuContainer);
|
||||
|
||||
// If an error occurs while fetching the data, display the error within the dropdown menu.
|
||||
const data = await Repository.userFetch(courseID, actionBaseUrl, groupId).catch(async(e) => {
|
||||
const errorTemplateData = {
|
||||
'errormessage': e.message
|
||||
@ -89,20 +82,25 @@ const registerListenerEvents = () => {
|
||||
url: Url.relativeUrl('/grade/report/user/index.php', {id: courseID, userid: 0}, false),
|
||||
});
|
||||
|
||||
WidgetBase.init(
|
||||
await WidgetBase.init(
|
||||
dropdownMenuContainer,
|
||||
bodyPromise,
|
||||
data.users,
|
||||
searchUsers(),
|
||||
getString('selectauser', 'grades'),
|
||||
allUsersOption
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
// Resolvers for passed functions in the modal creation.
|
||||
|
||||
// Resolvers for passed functions in the dropdown menu creation.
|
||||
bodyPromiseResolver(Templates.render(
|
||||
'core_grades/searchwidget/user/usersearch_body', {displayunsearchablecontent: true}
|
||||
));
|
||||
});
|
||||
|
||||
// Handle the 'hide.bs.dropdown' event (Fired when the dropdown menu is being closed).
|
||||
$(Selectors.elements.getSearchWidgetSelector('user')).on('hide.bs.dropdown', () => {
|
||||
// Reset the state once the user menu dropdown is closed.
|
||||
dropdownMenuContainer.innerHTML = '';
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -148,7 +148,7 @@
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.path-grade-report-user .user-selector .userinitials {
|
||||
.path-grade-report-user .search-widget[data-searchtype="user"] .userinitials {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
@ -38,8 +38,8 @@
|
||||
}
|
||||
}
|
||||
}}
|
||||
<div class="user-selector d-flex">
|
||||
<div role="button" class="userwidget btn dropdown-toggle d-flex text-left align-items-center p-0" data-courseid="{{courseid}}" data-groupid="{{groupid}}" data-searchtype="user" tabindex="0" aria-label="{{#str}} selectauser, core_grades {{/str}}">
|
||||
<div class="search-widget dropdown d-flex" data-searchtype="user">
|
||||
<button aria-expanded="false" data-toggle="dropdown" class="btn dropdown-toggle d-flex text-left align-items-center p-0" data-courseid="{{courseid}}" data-groupid="{{groupid}}" aria-label="{{#str}} selectauser, core_grades {{/str}}">
|
||||
<div class="align-items-center d-flex">
|
||||
{{#selectedoption}}
|
||||
<div class="selected-option-img d-block pr-2">
|
||||
@ -70,5 +70,7 @@
|
||||
</div>
|
||||
{{/selectedoption}}
|
||||
</div>
|
||||
</button>
|
||||
<div class="dropdown-menu wide">
|
||||
</div>
|
||||
</div>
|
||||
|
Loading…
x
Reference in New Issue
Block a user