lampuotomatis/public/build/js/pages/team.init.js

405 lines
17 KiB
JavaScript

/*
Template Name: Grenviro Monitoring
Author: Themesbrand
Website: https://Themesbrand.com/
Contact: Themesbrand@gmail.com
File: Team Init Js File
*/
//Fiter Js
var list = document.querySelectorAll(".team-list");
if (list) {
var buttonGroups = document.querySelectorAll('.filter-button');
if (buttonGroups) {
Array.from(buttonGroups).forEach(function (btnGroup) {
btnGroup.addEventListener('click', onButtonGroupClick);
});
}
}
function onButtonGroupClick(event) {
if (event.target.id === 'list-view-button' || event.target.parentElement.id === 'list-view-button') {
document.getElementById("list-view-button").classList.add("active");
document.getElementById("grid-view-button").classList.remove("active");
Array.from(list).forEach(function (el) {
el.classList.add("list-view-filter");
el.classList.remove("grid-view-filter");
});
} else {
document.getElementById("grid-view-button").classList.add("active");
document.getElementById("list-view-button").classList.remove("active");
Array.from(list).forEach(function (el) {
el.classList.remove("list-view-filter");
el.classList.add("grid-view-filter");
});
}
}
var url="build/json/";
var allmemberlist = '';
// Reading JSON with Fetch API
fetch(url+"team-member-list.json")
.then(res => res.json())
.then((data) => {
allmemberlist = data;
loadTeamData(allmemberlist);
}).catch(err => console.error(err));
// load team data
function loadTeamData(datas) {
document.querySelector("#team-member-list").innerHTML = '';
Array.from(datas).forEach(function (teamData, index) {
var checkBookmark = teamData.bookmark ? "active" : "";
var isUserProfile = teamData.memberImg ? '<img src="'+teamData.memberImg+'" alt="" class="member-img img-fluid d-block rounded-circle" />'
: '<div class="avatar-title border bg-light text-primary rounded-circle text-uppercase">' + teamData.nickname + '</div>';
document.querySelector("#team-member-list").innerHTML +=
'<div class="col">\
<div class="card team-box">\
<div class="team-cover">\
<img src="'+teamData.coverImg+'" alt="" class="img-fluid" />\
</div>\
<div class="card-body p-4">\
<div class="row align-items-center team-row">\
<div class="col team-settings">\
<div class="row">\
<div class="col">\
<div class="flex-shrink-0 me-2">\
<button type="button" class="btn btn-light btn-icon rounded-circle btn-sm favourite-btn ' + checkBookmark + '">\
<i class="ri-star-fill fs-14"></i>\
</button>\
</div>\
</div>\
<div class="col text-end dropdown">\
<a href="javascript:void(0);" data-bs-toggle="dropdown" aria-expanded="false">\
<i class="ri-more-fill fs-17"></i>\
</a>\
<ul class="dropdown-menu dropdown-menu-end">\
<li><a class="dropdown-item edit-list" href="#addmemberModal" data-bs-toggle="modal" data-edit-id="'+teamData.id+'"><i class="ri-pencil-line me-2 align-bottom text-muted"></i>Edit</a></li>\
<li><a class="dropdown-item remove-list" href="#removeMemberModal" data-bs-toggle="modal" data-remove-id="'+teamData.id+'"><i class="ri-delete-bin-5-line me-2 align-bottom text-muted"></i>Remove</a></li>\
</ul>\
</div>\
</div>\
</div>\
<div class="col-lg-4 col">\
<div class="team-profile-img">\
<div class="avatar-lg img-thumbnail rounded-circle flex-shrink-0">'+isUserProfile+'</div>\
<div class="team-content">\
<a class="member-name" data-bs-toggle="offcanvas" href="#member-overview" aria-controls="member-overview">\
<h5 class="fs-16 mb-1">'+teamData.memberName+'</h5>\
</a>\
<p class="text-muted member-designation mb-0">'+teamData.position+'</p>\
</div>\
</div>\
</div>\
<div class="col-lg-4 col">\
<div class="row text-muted text-center">\
<div class="col-6 border-end border-end-dashed">\
<h5 class="mb-1 projects-num">'+teamData.projects+'</h5>\
<p class="text-muted mb-0">Projects</p>\
</div>\
<div class="col-6">\
<h5 class="mb-1 tasks-num">'+teamData.tasks+'</h5>\
<p class="text-muted mb-0">Tasks</p>\
</div>\
</div>\
</div>\
<div class="col-lg-2 col">\
<div class="text-end">\
<a href="pages-profile" class="btn btn-light view-btn">View Profile</a>\
</div>\
</div>\
</div>\
</div>\
</div>\
</div>';
bookmarkBtn();
editMemberList();
removeItem();
memberDetailShow();
});
}
// favourite btn
function bookmarkBtn() {
Array.from(document.querySelectorAll(".favourite-btn")).forEach(function (item) {
item.addEventListener("click", function () {
if (item.classList.contains("active")) {
item.classList.remove("active");
} else {
item.classList.add("active");
}
});
});
}
bookmarkBtn();
var editlist = false;
// member image
document.querySelector("#member-image-input").addEventListener("change", function () {
var preview = document.querySelector("#member-img");
var file = document.querySelector("#member-image-input").files[0];
var reader = new FileReader();
reader.addEventListener("load",function () {
preview.src = reader.result;
},false);
if (file) {
reader.readAsDataURL(file);
}
});
function editMemberList() {
var getEditid = 0;
Array.from(document.querySelectorAll(".edit-list")).forEach(function (elem) {
elem.addEventListener('click', function (event) {
getEditid = elem.getAttribute('data-edit-id');
allmemberlist = allmemberlist.map(function (item) {
if (item.id == getEditid) {
editlist = true;
document.getElementById("createMemberLabel").innerHTML = "Edit Member";
document.getElementById("addNewMember").innerHTML = "Save";
if(item.memberImg == ""){
document.getElementById("member-img").src = "build/images/users/user-dummy-img.jpg";
}else{
document.getElementById("member-img").src = item.memberImg;
}
document.getElementById("cover-img").src = item.coverImg;
document.getElementById("memberid-input").value = item.id;
document.getElementById('teammembersName').value = item.memberName;
document.getElementById('designation').value = item.position;
document.getElementById('project-input').value = item.projects;
document.getElementById('task-input').value = item.tasks;
document.getElementById("memberlist-form").classList.remove('was-validated');
}
return item;
});
});
});
};
// cover image
document.querySelector("#cover-image-input").addEventListener("change", function () {
var preview = document.querySelector("#cover-img");
var file = document.querySelector("#cover-image-input").files[0];
var reader = new FileReader();
reader.addEventListener("load",function () {
preview.src = reader.result;
},false);
if (file) {
reader.readAsDataURL(file);
}
});
Array.from(document.querySelectorAll(".addMembers-modal")).forEach(function (elem) {
elem.addEventListener('click', function (event) {
document.getElementById("createMemberLabel").innerHTML = "Add New Members";
document.getElementById("addNewMember").innerHTML = "Add Member";
document.getElementById("teammembersName").value = "";
document.getElementById("designation").value = "";
document.getElementById("cover-img").src = "build/images/small/img-9.jpg";
document.getElementById("member-img").src = "build/images/users/user-dummy-img.jpg";
document.getElementById("memberlist-form").classList.remove('was-validated');
});
});
// Form Event
(function () {
'use strict'
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.querySelectorAll('.needs-validation')
// Loop over them and prevent submission
Array.prototype.slice.call(forms)
.forEach(function (form) {
form.addEventListener('submit', function (event) {
if (!form.checkValidity()) {
event.preventDefault();
event.stopPropagation();
} else {
event.preventDefault();
var inputName = document.getElementById('teammembersName').value;
var inputDesignation = document.getElementById('designation').value;
var memberImg = document.getElementById("member-img").src;
var coverImg = document.getElementById("cover-img").src;
var memberImgValue = memberImg.substring(
memberImg.indexOf("/as") + 1
);
var memberImageValue
if(memberImgValue == "build/images/users/user-dummy-img.jpg"){
memberImageValue = ""
}else{
memberImageValue = memberImg
}
var str = inputName;
var matches = str.match(/\b(\w)/g);
var acronym = matches.join(''); // JSON
var nicknameValue = acronym.substring(0,2)
if (inputName !== "" && inputDesignation !== "" && !editlist) {
var newMemberId = findNextId();
var newMember = {
'id': newMemberId,
"coverImg": coverImg,
"bookmark": false,
"memberImg": memberImageValue,
"nickname": nicknameValue,
'memberName': inputName,
'position': inputDesignation,
'projects': "0",
'tasks': "0"
};
allmemberlist.push(newMember);
sortElementsById();
}else if(inputName !== "" && inputDesignation !== "" && editlist){
var getEditid = 0;
getEditid = document.getElementById("memberid-input").value;
allmemberlist = allmemberlist.map(function (item) {
if (item.id == getEditid) {
var editObj = {
'id': getEditid,
"coverImg": coverImg,
"bookmark": item.bookmark,
"memberImg": memberImg,
"nickname": nicknameValue,
'memberName': inputName,
'position': inputDesignation,
'projects': document.getElementById('project-input').value,
'tasks': document.getElementById('task-input').value
}
return editObj;
}
return item;
});
editlist = false;
}
loadTeamData(allmemberlist)
document.getElementById("createMemberBtn-close").click();
}
form.classList.add('was-validated');
}, false)
})
})()
function fetchIdFromObj(member) {
return parseInt(member.id);
}
function findNextId() {
if (allmemberlist.length === 0) {
return 0;
}
var lastElementId = fetchIdFromObj(allmemberlist[allmemberlist.length - 1]),
firstElementId = fetchIdFromObj(allmemberlist[0]);
return (firstElementId >= lastElementId) ? (firstElementId + 1) : (lastElementId + 1);
}
function sortElementsById() {
var manymember = allmemberlist.sort(function (a, b) {
var x = fetchIdFromObj(a);
var y = fetchIdFromObj(b);
if (x > y) {
return -1;
}
if (x < y) {
return 1;
}
return 0;
})
loadTeamData(manymember);
}
function removeItem() {
var getid = 0;
Array.from(document.querySelectorAll(".remove-list")).forEach(function (item) {
item.addEventListener('click', function (event) {
getid = item.getAttribute('data-remove-id');
document.getElementById("remove-item").addEventListener("click", function () {
function arrayRemove(arr, value) {
return arr.filter(function (ele) {
return ele.id != value;
});
}
var filtered = arrayRemove(allmemberlist, getid);
allmemberlist = filtered;
loadTeamData(allmemberlist);
document.getElementById("close-removeMemberModal").click();
});
});
});
}
function memberDetailShow() {
Array.from(document.querySelectorAll(".team-box")).forEach(function (item) {
item.querySelector(".member-name").addEventListener("click", function () {
var memberName = item.querySelector(".member-name h5").innerHTML;
var memberDesignation = item.querySelector(".member-designation").innerHTML;
var memberProfileImg
if(item.querySelector(".member-img")){
memberProfileImg = item.querySelector(".member-img").src;
}else{
memberProfileImg = "build/images/users/user-dummy-img.jpg"
}
var memberCoverImg = item.querySelector(".team-cover img").src;
var memberProject = item.querySelector(".projects-num").innerHTML;
var memberTask = item.querySelector(".tasks-num").innerHTML;
document.querySelector("#member-overview .profile-img").src = memberProfileImg;
document.querySelector("#member-overview .team-cover img").src = memberCoverImg;
document.querySelector("#member-overview .profile-name").innerHTML = memberName;
document.querySelector("#member-overview .profile-designation").innerHTML = memberDesignation;
document.querySelector("#member-overview .profile-project").innerHTML = memberProject;
document.querySelector("#member-overview .profile-task").innerHTML = memberTask;
});
});
}
// Search product list
var searchMemberList = document.getElementById("searchMemberList");
searchMemberList.addEventListener("keyup", function () {
var inputVal = searchMemberList.value.toLowerCase();
function filterItems(arr, query) {
return arr.filter(function (el) {
return (el.memberName.toLowerCase().indexOf(query.toLowerCase()) !== -1 || el.position.toLowerCase().indexOf(query.toLowerCase()) !== -1)
})
}
var filterData = filterItems(allmemberlist, inputVal);
if (filterData.length == 0) {
document.getElementById("noresult").style.display = "block";
document.getElementById("teamlist").style.display = "none";
} else {
document.getElementById("noresult").style.display = "none";
document.getElementById("teamlist").style.display = "block";
}
loadTeamData(filterData);
});