Skip to content

Commit

Permalink
feat: mark active menu items in side nav
Browse files Browse the repository at this point in the history
  • Loading branch information
ngurenyaga committed Jul 17, 2021
1 parent b418365 commit 09b71a0
Show file tree
Hide file tree
Showing 8 changed files with 154 additions and 19 deletions.
30 changes: 30 additions & 0 deletions pepfar_mle/common/tests/test_views.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import pytest
from django.core.exceptions import PermissionDenied
from django.urls import reverse
from model_bakery import baker
from rest_framework import status

from pepfar_mle.common.views import HomeView

Expand Down Expand Up @@ -28,3 +30,31 @@ def test_approved_mixin_non_approved_authenticated_user(rf, django_user_model):
view.dispatch(request) # no error raised

assert "PermissionDenied" in str(e)


def test_home_view(user, client):
client.force_login(user)
url = reverse("home")
response = client.get(url)
assert response.status_code == status.HTTP_200_OK


def test_about_view(user, client):
client.force_login(user)
url = reverse("about")
response = client.get(url)
assert response.status_code == status.HTTP_200_OK


def test_facility_view(user, client):
client.force_login(user)
url = reverse("common:facilities")
response = client.get(url)
assert response.status_code == status.HTTP_200_OK


def test_systems_view(user, client):
client.force_login(user)
url = reverse("common:systems")
response = client.get(url)
assert response.status_code == status.HTTP_200_OK
22 changes: 22 additions & 0 deletions pepfar_mle/common/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,36 @@ def test_func(self):
class HomeView(LoginRequiredMixin, ApprovedMixin, TemplateView):
template_name = "pages/home.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["active"] = "dashboard-nav" # id of active nav element
return context


class AboutView(LoginRequiredMixin, ApprovedMixin, TemplateView):
template_name = "pages/about.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["active"] = "dashboard-nav" # id of active nav element
return context


class FacilityView(LoginRequiredMixin, ApprovedMixin, TemplateView):
template_name = "pages/common/facilities.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["active"] = "facilities-nav" # id of active nav element
context["selected"] = "facilities" # id of selected page
return context


class SystemsView(LoginRequiredMixin, ApprovedMixin, TemplateView):
template_name = "pages/common/systems.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["active"] = "facilities-nav" # id of active nav element
context["selected"] = "systems" # id of selected page
return context
47 changes: 47 additions & 0 deletions pepfar_mle/ops/tests/test_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import pytest
from django.urls import reverse
from rest_framework import status

pytestmark = pytest.mark.django_db


def test_system_versions_view(user, client):
client.force_login(user)
url = reverse("ops:versions")
response = client.get(url)
assert response.status_code == status.HTTP_200_OK


def test_tickets_view(user, client):
client.force_login(user)
url = reverse("ops:tickets")
response = client.get(url)
assert response.status_code == status.HTTP_200_OK


def test_activity_log_view(user, client):
client.force_login(user)
url = reverse("ops:activity_log")
response = client.get(url)
assert response.status_code == status.HTTP_200_OK


def test_site_mentorship_view(user, client):
client.force_login(user)
url = reverse("ops:site_mentorship")
response = client.get(url)
assert response.status_code == status.HTTP_200_OK


def test_daily_site_updates_view(user, client):
client.force_login(user)
url = reverse("ops:daily_site_updates")
response = client.get(url)
assert response.status_code == status.HTTP_200_OK


def test_timesheets_view(user, client):
client.force_login(user)
url = reverse("ops:timesheets")
response = client.get(url)
assert response.status_code == status.HTTP_200_OK
36 changes: 36 additions & 0 deletions pepfar_mle/ops/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,58 @@
class VersionsView(LoginRequiredMixin, ApprovedMixin, TemplateView):
template_name = "pages/ops/versions.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["active"] = "facilities-nav" # id of active nav element
context["selected"] = "versions" # id of selected page
return context


class TicketsView(LoginRequiredMixin, ApprovedMixin, TemplateView):
template_name = "pages/ops/tickets.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["active"] = "facilities-nav" # id of active nav element
context["selected"] = "tickets" # id of selected page
return context


class ActivityLogView(LoginRequiredMixin, ApprovedMixin, TemplateView):
template_name = "pages/ops/activity_log.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["active"] = "program-nav" # id of active nav element
context["selected"] = "activity-log" # id of selected page
return context


class SiteMentorshipView(LoginRequiredMixin, ApprovedMixin, TemplateView):
template_name = "pages/ops/site_mentorship.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["active"] = "program-nav" # id of active nav element
context["selected"] = "site-mentorship" # id of selected page
return context


class DailySiteUpdatesView(LoginRequiredMixin, ApprovedMixin, TemplateView):
template_name = "pages/ops/daily_site_updates.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["active"] = "program-nav" # id of active nav element
context["selected"] = "daily-site-updates" # id of selected page
return context


class TimeSheetsView(LoginRequiredMixin, ApprovedMixin, TemplateView):
template_name = "pages/ops/timesheets.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["active"] = "program-nav" # id of active nav element
context["selected"] = "timesheets" # id of selected page
return context
2 changes: 1 addition & 1 deletion pepfar_mle/templates/fragments/atoms/dashboard_link.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{% load static i18n compress%}

<li class="nav-item active">
<li class="nav-item {% if active == "dashboard-nav" %}active{% endif %}" id="dashboard-nav">
<a class="nav-link" href="{% url 'home' %}">
<i class="fas fa-fw fa-tachometer-alt"></i>
<span>Dashboard</span></a>
Expand Down
14 changes: 7 additions & 7 deletions pepfar_mle/templates/fragments/atoms/facilities_menu.html
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
{% load static i18n compress%}

<li class="nav-item">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="true" aria-controls="collapseTwo">
<li class="nav-item {% if active == "facilities-nav" %}active{% endif %}" id="facilities-nav">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#facilities-menu" aria-expanded="true" aria-controls="facilities-menu">
<i class="fas fa-fw fa-hospital"></i>
<span>Facilities</span>
</a>
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar">
<div id="facilities-menu" class="collapse {% if active == "facilities-nav" %}show{% endif %}" aria-labelledby="headingTwo" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
<a class="collapse-item" href="{% url 'common:facilities' %}">
<a class="collapse-item {% if selected == "facilities" %}active {% endif %}" id="facilities" href="{% url 'common:facilities' %}">
Facilities
</a>
<a class="collapse-item" href="{% url 'common:systems' %}">
<a class="collapse-item {% if selected == "systems" %}active {% endif %}" id="systems" href="{% url 'common:systems' %}">
Systems
</a>
<a class="collapse-item" href="{% url 'ops:versions' %}">
<a class="collapse-item {% if selected == "versions" %}active {% endif %}" id="versions" href="{% url 'ops:versions' %}">
System Versions
</a>
<a class="collapse-item" href="{% url 'ops:tickets' %}">
<a class="collapse-item {% if selected == "tickets" %}active {% endif %}" id="tickets" href="{% url 'ops:tickets' %}">
Tickets
</a>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{% load static i18n compress%}

<li class="nav-item">
<a class="nav-link" href="#" data-toggle="collapse" data-target="#collapsePages" aria-expanded="true" aria-controls="collapsePages">
<li class="nav-item {% if active == "monitoring-and-evaluation-nav" %}active{% endif %}" id="monitoring-and-evaluation-nav">
<a class="nav-link" href="#" data-toggle="collapse" data-target="#monitoring-and-evaluation-menu" aria-expanded="true" aria-controls="monitoring-and-evaluation-menu">
<i class="fas fa-fw fa-file"></i>
<span>M & E Data Entry</span>
</a>
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div id="monitoring-and-evaluation-menu" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">DATIM</h6>
<a class="collapse-item" href="#">Prevention</a>
Expand Down
16 changes: 8 additions & 8 deletions pepfar_mle/templates/fragments/atoms/program_menu.html
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
{% load static i18n compress%}

<li class="nav-item">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseUtilities" aria-expanded="true" aria-controls="collapseUtilities">
<li class="nav-item {% if active == "program-nav" %}active {% endif %}" id="program-nav">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#program-menu" aria-expanded="true" aria-controls="program-menu">
<i class="fas fa-fw fa-tasks"></i>
<span>Program Reports</span>
</a>
<div id="collapseUtilities" class="collapse" aria-labelledby="headingUtilities" data-parent="#accordionSidebar">
<div id="program-menu" class="collapse {% if active == "program-nav" %}show{% endif %}" aria-labelledby="program-menu" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
<a class="collapse-item" href="{% url 'ops:activity_log' %}">
<a class="collapse-item {% if selected == "activity-log" %}active {% endif %}" id="activity-log" href="{% url 'ops:activity_log' %}">
Activity Log
</a>
<a class="collapse-item" href="{% url 'ops:site_mentorship' %}">
<a class="collapse-item {% if selected == "site-mentorship" %}active {% endif %}" id="site-mentorship" href="{% url 'ops:site_mentorship' %}">
Site Mentorship
</a>
<a class="collapse-item" href="{% url 'ops:daily_site_updates' %}">
Daily Updates
<a class="collapse-item {% if selected == "daily-site-updates" %}active {% endif %}" id="daily-site-updates" href="{% url 'ops:daily_site_updates' %}">
Daily Site Updates
</a>
<a class="collapse-item" href="{% url 'ops:timesheets' %}">
<a class="collapse-item {% if selected == "timesheets" %}active {% endif %}" id="timesheets" href="{% url 'ops:timesheets' %}">
Timesheets
</a>
</div>
Expand Down

0 comments on commit 09b71a0

Please sign in to comment.