docbrown/app/views/notifications/index.html.erb
Suzanne Aitchison 75b6c8ed96
Use a single listener for all follow buttons on a page (#14246)
* create new pack, handle user follow buttons, use pack on article page, remove initializeUserFollowButts

* init all follow button types, add pack to tag index and podcast episode pages

* add pack to all relevant pages, listen for newly inserted follow buttons

* change to searchParams to remove follow button initializer calls

* fix bug with tag page, add pack to notifications page

* fix issue with follow back inner text

* update cypress specs

* run the followbuttons code on sponsors page

* remove extra foreach

* add test for follow from article sidebar

* add test for follow and unfollow tag

* add test for the tag index page

* add spec for organisation profile follow

* add tests for follow buttons in search results

* add tests for notification follows

* commit missed file - woops

* show login modal if user is logged out when they click

* add cypress tests for logged out state

* change tag button initialization

* remove data-button-initialized

* init follow buttons from base pack

* handle the case where multiple follow buttons exist on a page for the same user

* account for instantclick and userdata not being defined, lower coverage for jest

* use getInstantClick

* fix issue with set initialisation

* only listen for mutations in areas we know follow buttons may be added dynamically

* small refactors
2021-07-27 10:45:50 +01:00

74 lines
3.1 KiB
Text

<% title "Notifications" %>
<%= content_for :page_meta do %>
<link rel="canonical" href="<%= app_url("/notifications") %>" />
<meta name="description" content="Notifications inbox for <%= community_name %>">
<%= meta_keywords_default %>
<meta property="og:type" content="article" />
<meta property="og:url" content="<%= app_url("/notifications") %>" />
<meta property="og:title" content="Notifications - <%= community_name %>" />
<meta property="og:description" content="Notifications inbox for <%= community_name %>" />
<meta property="og:site_name" content="<%= community_name %>" />
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@<%= Settings::General.social_media_handles["twitter"] %>">
<meta name="twitter:title" content="Notifications - <%= community_name %>">
<meta name="twitter:description" content="Notifications inbox for <%= community_name %>">
<%= javascript_packs_with_chunks_tag "notificationPage", defer: true %>
<% end %>
<script>
/**
* A script that tracks clicks for welcome notifications.
* The notification must have `trackNotification` as its onclick event
* in order for this to be triggered.
*
* @param {Event} The click event on the notification.
*/
function trackNotification(event) {
const target = event.target;
const { parentElement: { id: title }, text } = target;
// TODO: [@forem/delightful]: This event doesn't appear to be firing on Honeybadger.
// We probably want to remove it eventually if we continually don't see it being triggered.
if (!title) {
Honeybadger.notify(`Could not find parentElement.id when clicking on event target text: ${text}`);
}
ahoy.track("Clicked Welcome Notification", { title, text, target: target.toString() });
}
</script>
<% if user_signed_in? %>
<main id="main-content">
<header class="crayons-layout crayons-layout--limited-l crayons-layout--1-col p-4 flex items-center justify-between">
<h1 class="crayons-title">Notifications</h1>
<a href="<%= user_settings_path(tab: :notifications) %>" class="crayons-btn crayons-btn--ghost">Settings</a>
</header>
<div class="crayons-layout crayons-layout--limited-l crayons-layout--2-cols pt-0" id="notifications-container">
<div class="crayons-layout__sidebar-left">
<%= render "notifications/nav_menu" %>
</div>
<main class="crayons-layout__content" data-follow-button-container="true">
<div id="articles-list">
<%= render "notifications_list", params: params %>
</div>
<%# new or less active users that don't have a page worth of notifications
won't be shown the "load more" button %>
<% if @notifications.size >= @initial_page_size %>
<button id="load-more-button" type="button" class="crayons-btn crayons-btn--secondary crayons-btn--l my-6 w-100">
Load More
</button>
<% end %>
</main>
</div>
<%= render "articles/fitvids" %>
</main>
<%= javascript_packs_with_chunks_tag "followButtons", defer: true %>
<% else %>
<%= render "devise/registrations/registration_form" %>
<% end %>