diff --git a/app/admin/static/admin.js b/app/admin/static/admin.js index cece628..c1647a7 100644 --- a/app/admin/static/admin.js +++ b/app/admin/static/admin.js @@ -1,14 +1,65 @@ const archiveButtons = document.getElementsByClassName('archive-button'); const activityButtons = document.getElementsByClassName('change-activity-btn'); -for(let i = 0; i < activityButtons.length; i++){ - activityButtons[i].addEventListener('change', e => { - console.log(e.target.checked, e.target.id) - }) + + + +function deactivateArchiveButtons(){ + for (let i = 0; i < archiveButtons.length; i++){ + archiveButtons[i].disabled=true; + } +} +function activateArchiveButtons(){ + for (let i = 0; i < archiveButtons.length; i++){ + archiveButtons[i].disabled=false; + } +} +function deactivateActiveStatusCheckboxes(){ + for (let i = 0; i < activityButtons.length; i++){ + activityButtons[i].disabled=true; + } +} +function activateActiveStatusCheckboxes(){ + for (let i = 0; i < activityButtons.length; i++){ + activityButtons[i].disabled=false; + } } -for(let i = 0; i < archiveButtons.length; i++){ - archiveButtons[i].addEventListener('click', e => { - console.log(e.target.id) - }) +async function updateActiveStatus(id, status) { + deactivateActiveStatusCheckboxes() + deactivateArchiveButtons() + var result = await fetch(`/campaigns/update_active_status/${id}/${status}`, {method:'PUT'}); + var data = await result.json(); + if (status === true){ + status = 'True' + } else { + status = 'False' + } + document.getElementById(`${id}-active-status`).innerText = status; + activateActiveStatusCheckboxes() + activateArchiveButtons() + } + +async function archiveCampaign(id){ + deactivateActiveStatusCheckboxes() + deactivateArchiveButtons() + var result = await fetch(`/campaigns/archive_campaign/${id}`, {method:'PUT'}); + var data = await result.json(); + document.getElementById(`${id}-row`).remove(); + activateActiveStatusCheckboxes() + activateArchiveButtons() +} + +document.addEventListener("DOMContentLoaded", (event) => { + for(let i = 0; i < activityButtons.length; i++){ + activityButtons[i].addEventListener('change', e => { + updateActiveStatus(parseInt(e.target.value), e.target.checked) + }) + } + for(let i = 0; i < archiveButtons.length; i++){ + archiveButtons[i].addEventListener('click', e => { + archiveCampaign(parseInt(e.target.value)) + }) + } + }); diff --git a/app/admin/templates/administration.html b/app/admin/templates/administration.html index 64ccbbe..9c4feb0 100644 --- a/app/admin/templates/administration.html +++ b/app/admin/templates/administration.html @@ -45,18 +45,26 @@ {% for campaign in campaigns %} - - {{campaign.id}} - {{campaign.title}} - {{campaign.active}} - - - - - + + {{campaign.id}} + {{campaign.title}} + {{campaign.active}} + + + + + {% endfor %} diff --git a/app/campaigns/routes.py b/app/campaigns/routes.py index b07c22a..3587042 100644 --- a/app/campaigns/routes.py +++ b/app/campaigns/routes.py @@ -8,6 +8,7 @@ from flask_login import login_required, login_user, current_user, logout_user from werkzeug.security import check_password_hash, generate_password_hash from datetime import datetime import os +from time import sleep @campaigns.route('add_campaign') def add_campaign(): @@ -17,4 +18,21 @@ def add_campaign(): def campaign_page(campaign_id): campaign = Campaign.query.filter_by(id=campaign_id).first() return render_template('campaign_page.html', - campaign=campaign) \ No newline at end of file + campaign=campaign) + +@campaigns.route('update_active_status//', methods=['PUT']) +def update_active_status(id, status): + if status == 'true': + status = True + else: + status = False + Campaign.query.filter_by(id=id).update({'active':status}) + db.session.commit() + sleep(1) + return {'status':'success'} + +@campaigns.route('archive_campaign/', methods=['PUT']) +def archive_campaign(id): + Campaign.query.filter_by(id=id).update({'archived': True, 'active':False}) + db.session.commit() + return {'status':'success'} \ No newline at end of file