Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions app/helpers/navigation_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# frozen_string_literal: true

module NavigationHelper
def nav_helper(style: "", active_style: "block", inactive_style: "hidden")
nav_links = nav_items.map do |item|
if item[:permitted]
link_to item[:title],
item[:url],
class: "#{style} #{active?(item[:url]) ? active_style : inactive_style}",
data: item[:data]
end
end

nav_links.join("").html_safe
end

private

def nav_items
[
{
url: time_tracking_index_path,
title: I18n.t("navbar.time_tracking"),
permitted: Pundit.policy!(current_user, :timesheet_entry).index?,
data: { cy: "time-tracking-tab" }
},
{
url: team_index_path,
title: I18n.t("navbar.team"),
permitted: Pundit.policy!(current_user, :team).index?,
data: { cy: "team-tab" }
},
{
url: clients_path,
title: I18n.t("navbar.clients"),
permitted: Pundit.policy!(current_user, :client).index?,
data: { cy: "clients-tab" }
},
{
url: projects_path,
title: I18n.t("navbar.projects"),
permitted: Pundit.policy!(current_user, :project).index?,
data: { cy: "projects-tab" }
},
{
url: reports_path,
title: I18n.t("navbar.reports"),
permitted: Pundit.policy!(current_user, :report).index?,
data: { cy: "reports-tab" }
},
{
url: invoices_path,
title: I18n.t("navbar.invoices"),
permitted: Pundit.policy!(current_user, :invoice).index?,
data: { cy: "invoices-tab" }
},
# TODO:- Temprary disabling this feature (navbar payment links)
# {
# url: payments_path,
# title: I18n.t("navbar.payments"),
# permitted: Pundit.policy!(current_user, :payment).index?,
# data: { cy: "payments-tab" }
# }
]
end

def active?(path)
current_page?(path)
end
end
103 changes: 3 additions & 100 deletions app/views/partial/_navbar.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -15,31 +15,7 @@
<% if current_company %>
<!-- dashboard time_tracking team clients projects invoices report etc. Start -->
<div class="border-t border-gray-200 pt-4 pb-3 pl-3">
<%# if policy(:dashboard).index? %>
<!-- <a href="/dashboard" class="<%#= request.path == "/dashboard" ? "navbar__smaller-screen_selected" : "navbar__smaller-screen_unselected" %> navbar__smaller-screen_titles"><%#= t('navbar.dashboard') %></a>-->
<%# end %>
<% if policy(:timesheet_entry).index? %>
<a href="/time-tracking" class="<%= request.path == "/time-tracking" ? "navbar__smaller-screen_selected" : "navbar__smaller-screen_unselected" %> navbar__smaller-screen_titles"><%= t('navbar.time_tracking') %></a>
<% end %>
<% if policy(:team).index? %>
<a href="/team" class="<%= request.path == "/team" ? "navbar__smaller-screen_selected" : "navbar__smaller-screen_unselected" %> navbar__smaller-screen_titles"><%= t('navbar.team') %></a>
<% end %>
<% if policy(:client).index? %>
<a href="/clients" class="<%= request.path == "/clients" ? "navbar__smaller-screen_selected" : "navbar__smaller-screen_unselected" %> navbar__smaller-screen_titles"><%= t('navbar.clients') %></a>
<% end %>
<% if policy(:project).index? %>
<a href="/projects" class="<%= request.path == "/projects" ? "navbar__smaller-screen_selected" : "navbar__smaller-screen_unselected" %> navbar__smaller-screen_titles"><%= t('navbar.projects') %></a>
<% end %>
<% if policy(:report).index? %>
<a href="<%= reports_path %>" class="<%= request.path == "#{reports_path}" ? "navbar__smaller-screen_selected" : "navbar__smaller-screen_unselected" %> navbar__smaller-screen_titles"><%= t('navbar.reports') %></a>
<% end %>
<% if policy(:invoice).index? %>
<a href="/invoices" class="<%= request.path == "/invoices" ? "navbar__smaller-screen_selected" : "navbar__smaller-screen_unselected" %> navbar__smaller-screen_titles"><%= t('navbar.invoices') %></a>
<% end %>
<!-- # TODO: Temprary disabling this feature (navebar payment links) -->
<%# if policy(:payment).index? %>
<!-- <a href="/payments" class="<%# request.path == "/payments" ? "navbar__smaller-screen_selected" : "navbar__smaller-screen_unselected" %> navbar__smaller-screen_titles"><%# t('navbar.payments') %></a> -->
<%# end %>
<%= nav_helper(style: 'navbar__smaller-screen_titles', active_style: "navbar__smaller-screen_selected", inactive_style: "navbar__smaller-screen_unselected") %>
</div>
<!-- dashboard time_tracking team clients projects invoice report etc. end -->
<% end %>
Expand Down Expand Up @@ -105,88 +81,15 @@
<!-- title smaller screen size -->
<div class="relative z-0 flex-1 flex items-center justify-center xsm:absolute xsm:inset-0">
<div class="block lg:hidden">
<%# if policy(:dashboard).index? %>
<!-- <a href="/dashboard" class="<%#= request.path == "/dashboard" ? "block" : "hidden" %> navbar__small-screen-second_titles">-->
<%#= t('navbar.dashboard') %>
<!-- </a>-->
<%# end %>
<% if policy(:timesheet_entry).index? %>
<a href="/time-tracking" class="<%= request.path == "/time-tracking" ? "block" : "hidden" %> navbar__small-screen-second_titles">
<%= t('navbar.time_tracking') %>
</a>
<% end %>
<% if policy(:team).index? %>
<a href="/team" class="<%= request.path == "/team" ? "block" : "hidden" %> navbar__small-screen-second_titles">
<%= t('navbar.team') %>
</a>
<% end %>
<% if policy(:client).index? %>
<a href="/clients" class="<%= request.path == "/clients" ? "block" : "hidden" %> navbar__small-screen-second_titles">
<%= t('navbar.clients') %>
</a>
<% end %>
<% if policy(:project).index? %>
<a href="/projects" class="<%= request.path == "/projects" ? "block" : "hidden" %> navbar__small-screen-second_titles">
<%= t('navbar.projects') %>
</a><% end %>
<% if policy(:invoice).index? %>
<a href="/invoices" class="<%= request.path == "/invoices" ? "block" : "hidden" %> navbar__small-screen-second_titles">
<%= t('navbar.invoices') %>
</a>
<% end %>
<% if policy(:report).index? %>
<a href="<%= reports_path %>" class="<%= request.path == "#{reports_path}" ? "block" : "hidden" %> navbar__small-screen-second_titles">
<%= t('navbar.reports') %>
</a>
<% end %>
<%= nav_helper(style: 'navbar__small-screen-second_titles') %>
</div>
</div>
<!-- title smaller screen end -->

<!-- dashboard time_tracking team clients projects invoices report etc. start -->
<div class="relative z-0 flex-auto flex items-center justify-center sm:absolute sm:inset-0">
<div class="ml-12 hidden lg:block lg:flex lg:space-x-10 xl:pr-80 <%= "lg:mr-86" if current_user.has_role?(:employee, current_company) %>">
<%# if policy(:dashboard).index? %>
<!-- <a href="/dashboard" data-cy="dashboard-tab" class="<%#= request.path == "/dashboard" ? "navbar__large-screen_selected" : "navbar__large-screen_unselected" %> navbar__large-screen_title">-->
<%#= t('navbar.dashboard') %>
<!-- </a>-->
<%# end %>
<% if policy(:timesheet_entry).index? %>
<a href="/time-tracking" data-cy="time-tracking-tab" class="<%= request.path == "/time-tracking" ? "navbar__large-screen_selected" : "navbar__large-screen_unselected" %> navbar__large-screen_title">
<%= t('navbar.time_tracking') %>
</a>
<% end %>
<% if policy(:team).index? %>
<a href="/team" data-cy="team-tab" class="<%= request.path == "/team" ? "navbar__large-screen_selected" : "navbar__large-screen_unselected" %> navbar__large-screen_title">
<%= t('navbar.team') %>
</a>
<% end %>
<% if policy(:client).index? %>
<a href="/clients" data-cy="clients-tab" class="<%= request.path == "/clients" ? "navbar__large-screen_selected" : "navbar__large-screen_unselected" %> navbar__large-screen_title">
<%= t('navbar.clients') %>
</a>
<% end %>
<% if policy(:project).index? %>
<a href="/projects" data-cy="projects-tab" class="<%= request.path == "/projects" ? "navbar__large-screen_selected" : "navbar__large-screen_unselected" %> navbar__large-screen_title">
<%= t('navbar.projects') %>
</a>
<% end %>
<% if policy(:invoice).index? %>
<a href="/invoices" data-cy="invoices-tab" class="<%= request.path == "/invoices" ? "navbar__large-screen_selected" : "navbar__large-screen_unselected" %> navbar__large-screen_title">
<%= t('navbar.invoices') %>
</a>
<% end %>
<% if policy(:report).index? %>
<a href="<%= reports_path %>" data-cy="reports-tab" class="<%= request.path == "#{reports_path}" ? "navbar___large-screen_selected" : "navbar__large-screen_unselected" %> navbar__large-screen_title">
<%= t('navbar.reports') %>
</a>
<% end %>
<!-- # TODO: Temprary disabling this feature (navebar payment links) -->
<%# if policy(:payment).index? %>
<!-- <a href="/payments" data-cy="invoices-tab" class="<%# request.path == "/payments" ? "navbar__large-screen_selected" : "navbar__large-screen_unselected" %> navbar__large-screen_title"> -->
<%# t('navbar.payments') %>
<!-- </a> -->
<%# end %>
<%= nav_helper(style: "navbar__large-screen_title", active_style: "navbar__large-screen_selected", inactive_style: "navbar__large-screen_unselected") %>
</div>
</div>
<!-- dashboard time_tracking team clients projects invoices report etc. end -->
Expand Down
26 changes: 26 additions & 0 deletions spec/helpers/navigation_helper_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# frozen_string_literal: true

require "rails_helper"

RSpec.describe NavigationHelper, type: :helper do
describe ".nav_helper" do
let(:user) { create(:user) }

before do
create(:company_user, user:)
user.add_role(:owner, user.current_workspace)
allow(controller).to receive(:current_user).and_return(user)
end

it "returns links with the given styles" do
nav_urls = %w[team clients projects reports invoices payments]
style = "test"
active_style = "active"
inactive_style = "inactive"

expect(helper.nav_helper(style:, active_style:, inactive_style:)).to include("test", "inactive")
expect(helper.nav_helper(style:, active_style:, inactive_style:))
.to include("team", "clients", "projects", "reports", "invoices")
end
end
end