From f02a41c3f1471bc8f321c15c4072ac4141c96e1f Mon Sep 17 00:00:00 2001 From: Rosanny <rosanny.sihombing@hft-stuttgart.de> Date: Wed, 13 Oct 2021 14:59:10 +0200 Subject: [PATCH] sort the projects --- routes/project.ts | 59 ++++++++++++++++++++++++++++++-- views/DE/project/pagesList.pug | 37 +++++++++++++++++--- views/DE/project/projectList.pug | 37 +++++++++++++++++--- 3 files changed, 121 insertions(+), 12 deletions(-) diff --git a/routes/project.ts b/routes/project.ts index 52bcb41..d7e86a4 100644 --- a/routes/project.ts +++ b/routes/project.ts @@ -76,6 +76,7 @@ module.exports = function (app:any, lang:string) { let projectArr = [] let isProject = true let firstId = 0 + let orderKeyword = req.query.sort while (isProject == true) { let projects = await gitlab.getProjects(100, firstId) @@ -100,12 +101,38 @@ module.exports = function (app:any, lang:string) { name: projectData[i].name, weburl: projectData[i].web_url, desc: projectData[i].description, - keywords: projectData[i].tag_list + keywords: projectData[i].tag_list, + createdAt: projectData[i].created_at, + lastUpdatedAt: projectData[i].last_activity_at } projectArr.push(project) } firstId = projectData[projectData.length-1].id } + + // MLAB-576 + if (orderKeyword == "created_at") { + projectArr.sort((a, b) => { + let aDate:any = new Date(a.createdAt) + let bDate:any = new Date(b.createdAt) + return bDate - aDate + }); + } else if (orderKeyword == "updated_at") { + projectArr.sort((a, b) => { + let aDate:any = new Date(a.lastUpdatedAt) + let bDate:any = new Date(b.lastUpdatedAt) + return bDate - aDate + }); + } else { // default, sorted by name + projectArr.sort((a, b) => { + let fa = a.name.toLowerCase(), + fb = b.name.toLowerCase(); + + if (fa < fb) return -1; + if (fa > fb) return 1; + return 0; + }); + } } res.render(lang+'/project/projectList', { @@ -118,6 +145,7 @@ module.exports = function (app:any, lang:string) { let pagesArr = [] let isProject = true let firstId = 0 + let orderKeyword = req.query.sort while (isProject == true) { let projects = await gitlab.getProjects(100, firstId) @@ -151,13 +179,40 @@ module.exports = function (app:any, lang:string) { name: pagesData[i].name, weburl: pagesData[i].web_url, desc: pagesData[i].description, - keywords: pagesData[i].tag_list + keywords: pagesData[i].tag_list, + createdAt: pagesData[i].created_at, + lastUpdatedAt: pagesData[i].last_activity_at } pagesArr.push(pages) } } firstId = pagesData[pagesData.length-1].id } + + // MLAB-576 + if (orderKeyword == "created_at") { + pagesArr.sort((a, b) => { + let aDate:any = new Date(a.createdAt) + let bDate:any = new Date(b.createdAt) + return bDate - aDate + }); + } else if (orderKeyword == "updated_at") { + pagesArr.sort((a, b) => { + let aDate:any = new Date(a.lastUpdatedAt) + let bDate:any = new Date(b.lastUpdatedAt) + return bDate - aDate + }); + } else { // default, sorted by name + pagesArr.sort((a, b) => { + let fa = a.name.toLowerCase(), + fb = b.name.toLowerCase(); + + if (fa < fb) return -1; + if (fa > fb) return 1; + return 0; + }); + } + } res.render(lang+'/project/pagesList', { diff --git a/views/DE/project/pagesList.pug b/views/DE/project/pagesList.pug index c615822..710308d 100644 --- a/views/DE/project/pagesList.pug +++ b/views/DE/project/pagesList.pug @@ -38,11 +38,14 @@ html(lang="de") div(class="container") p#pagesCounter #{pages.length} Projektinformationen werden angezeigt div(class="pt-4 pb-4 form-row") - div(class="form-group col-md-12") + div(class="form-group col-md-10") input(id="searchInput", class="form-control form-control-lg", type="text", placeholder="Suchen Sie hier nach Themen und Projekten", onkeyup="searchFunction()") - //div(class="form-group col-md-2") - select(class="form-control") - option uncategorized + div(class="form-group col-md-2") + select#sortingSelect(class="form-control form-control-lg") + option(value="" disabled) Sort by + option(value="name") Name + option(value="created_at") Last created + option(value="updated_at") Last updated | <div class="row"> for item in pages div(class="card-deck py-4 col-sm") @@ -97,4 +100,28 @@ html(lang="de") } document.getElementById("pagesCounter").innerHTML = counterBlock+" Projektinformationen werden angezeigt" - } \ No newline at end of file + } + + $("#sortingSelect").change(function() { + window.location.replace('/projektinformationen?sort='+$("#sortingSelect").val()) + }); + function getQueryStringParams(params, url) { + // first decode URL to get readable data + var href = decodeURIComponent(url || window.location.href); + // regular expression to get value + var regEx = new RegExp('[?&]' + params + '=([^&#]*)', 'i'); + var value = regEx.exec(href); + // return the value if exist + return value ? value[1] : null; + } + function setSortSelect() { + let sortKeyword = getQueryStringParams('sort', window.location.href) + if (sortKeyword == "created_at") { + $("#sortingSelect").val("created_at") + } else if(sortKeyword == "updated_at") { + $("#sortingSelect").val("updated_at") + } else { + $("#sortingSelect").val("name") + } + } + setSortSelect() \ No newline at end of file diff --git a/views/DE/project/projectList.pug b/views/DE/project/projectList.pug index d6fbe79..fe9323f 100644 --- a/views/DE/project/projectList.pug +++ b/views/DE/project/projectList.pug @@ -38,11 +38,14 @@ html(lang="de") div(class="container") p#projectCounter #{project.length} Projektdaten werden angezeigt div(class="pt-4 pb-4 form-row") - div(class="form-group col-md-12") + div(class="form-group col-md-10") input(id="searchInput", class="form-control form-control-lg", type="text", placeholder="Suchen Sie hier nach Themen und Projekten", onkeyup="searchFunction()") - //div(class="form-group col-md-2") - select(class="form-control") - option uncategorized + div(class="form-group col-md-2") + select#sortingSelect(class="form-control form-control-lg") + option(value="" disabled) Sort by + option(value="name") Name + option(value="created_at") Last created + option(value="updated_at") Last updated | <div class="row"> for item in project div(class="card-deck py-4 col-sm") @@ -97,4 +100,28 @@ html(lang="de") } document.getElementById("projectCounter").innerHTML = counterBlock+" Projektdaten werden angezeigt" - } \ No newline at end of file + } + + $("#sortingSelect").change(function() { + window.location.replace('/projektdaten?sort='+$("#sortingSelect").val()) + }); + function getQueryStringParams(params, url) { + // first decode URL to get readable data + var href = decodeURIComponent(url || window.location.href); + // regular expression to get value + var regEx = new RegExp('[?&]' + params + '=([^&#]*)', 'i'); + var value = regEx.exec(href); + // return the value if exist + return value ? value[1] : null; + } + function setSortSelect() { + let sortKeyword = getQueryStringParams('sort', window.location.href) + if (sortKeyword == "created_at") { + $("#sortingSelect").val("created_at") + } else if(sortKeyword == "updated_at") { + $("#sortingSelect").val("updated_at") + } else { + $("#sortingSelect").val("name") + } + } + setSortSelect() \ No newline at end of file -- GitLab