update active status and archive - api calls

This commit is contained in:
Yisroel Baum 2024-09-23 19:49:07 +03:00
parent 460a9a06cd
commit b225349931
3 changed files with 98 additions and 21 deletions

View file

@ -1,14 +1,65 @@
const archiveButtons = document.getElementsByClassName('archive-button');
const activityButtons = document.getElementsByClassName('change-activity-btn');
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].addEventListener('change', e => {
console.log(e.target.checked, e.target.id)
})
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))
})
}
});

View file

@ -45,17 +45,25 @@
</thead>
<tbody>
{% for campaign in campaigns %}
<tr>
<tr id="{{campaign.id}}-row" >
<td>{{campaign.id}}</td>
<td>{{campaign.title}}</td>
<td>{{campaign.active}}</td>
<td id="{{campaign.id}}-active-status">{{campaign.active}}</td>
<td>
<label class="switch">
<input type="checkbox" id="{{campaign.id}}" class="change-activity-btn" {%if campaign.active%}checked{%endif%}>
<input
type="checkbox"
value="{{campaign.id}}"
id="active-checkbox-{{campaign.id}}"
class="change-activity-btn"
{%if campaign.active%}checked{%endif%}>
<span class="slider round"></span>
</label>
</td>
<td><button id="{{campaign.id}}" class="archive-button btn btn-primary">Click to archive</button></td>
<td><button
id="archive-button-{{campaign.id}}"
value="{{campaign.id}}"
class="archive-button btn btn-primary">Click to archive</button></td>
</tr>
{% endfor %}
</tbody>

View file

@ -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():
@ -18,3 +19,20 @@ def campaign_page(campaign_id):
campaign = Campaign.query.filter_by(id=campaign_id).first()
return render_template('campaign_page.html',
campaign=campaign)
@campaigns.route('update_active_status/<id>/<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/<id>', methods=['PUT'])
def archive_campaign(id):
Campaign.query.filter_by(id=id).update({'archived': True, 'active':False})
db.session.commit()
return {'status':'success'}