Skip to content

Commit

Permalink
Add subscribe/unsubscribe buttons to note pages
Browse files Browse the repository at this point in the history
AntonKhorev committed Oct 27, 2024
1 parent f94c32e commit 2624faa
Showing 4 changed files with 102 additions and 22 deletions.
48 changes: 27 additions & 21 deletions app/assets/javascripts/index/note.js
Original file line number Diff line number Diff line change
@@ -37,31 +37,35 @@ OSM.Note = function (map) {
};

function initialize(path, id) {
content.find("button[type=submit]").on("click", function (e) {
content.find("button[name]").on("click", function (e) {
e.preventDefault();
var data = $(e.target).data();
var form = e.target.form;

$(form).find("button[type=submit]").prop("disabled", true);

$.ajax({
var name = $(e.target).attr("name");
var ajaxSettings = {
url: data.url,
type: data.method,
oauth: true,
data: { text: $(form.text).val() },
success: function () {
OSM.loadSidebarContent(path, function () {
success: () => {
OSM.loadSidebarContent(path, () => {
initialize(path, id);
moveToNote();
});
},
error: function (xhr) {
$(form).find("#comment-error")
error: updateButtons
};

if (name !== "subscribe" && name !== "unsubscribe") {
ajaxSettings.data = { text: $("textarea").val() };
ajaxSettings.error = (xhr) => {
content.find("#comment-error")
.text(xhr.responseText)
.prop("hidden", false);
updateButtons(form);
}
});
updateButtons();
};
}

content.find("button[name]").prop("disabled", true);
$.ajax(ajaxSettings);
});

content.find("textarea").on("input", function (e) {
@@ -82,14 +86,16 @@ OSM.Note = function (map) {
}
}

function updateButtons(form) {
$(form).find("button[type=submit]").prop("disabled", false);
if ($(form.text).val() === "") {
$(form.close).text($(form.close).data("defaultActionText"));
$(form.comment).prop("disabled", true);
function updateButtons() {
var resolveButton = content.find("button[name='close']");
var commentButton = content.find("button[name='comment']");

content.find("button[name]").prop("disabled", false);
if (content.find("textarea").val() === "") {
resolveButton.text(resolveButton.data("defaultActionText"));
commentButton.prop("disabled", true);
} else {
$(form.close).text($(form.close).data("commentActionText"));
$(form.comment).prop("disabled", false);
resolveButton.text(resolveButton.data("commentActionText"));
}
}

26 changes: 26 additions & 0 deletions app/views/notes/show.html.erb
Original file line number Diff line number Diff line change
@@ -28,6 +28,32 @@
<p class='alert alert-warning'><%= t ".anonymous_warning" %></p>
<% end -%>

<div class="row">
<div class="col">
<h4><%= t(".discussion") %></h4>
</div>

<% if current_user %>
<div class="col-auto">
<% if @note.subscribers.exists?(current_user.id) %>
<%= tag.button t(".unsubscribe"),
:type => "button",
:class => "btn btn-sm btn-primary",
:name => "unsubscribe",
:data => { :method => "DELETE",
:url => api_note_subscription_path(@note) } %>
<% else %>
<%= tag.button t(".subscribe"),
:type => "button",
:class => "btn btn-sm btn-primary",
:name => "subscribe",
:data => { :method => "POST",
:url => api_note_subscription_path(@note) } %>
<% end %>
</div>
<% end %>
</div>

<% if @note_comments.length > 1 %>
<div class='note-comments'>
<ul class="list-unstyled">
3 changes: 3 additions & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
@@ -2984,6 +2984,9 @@ en:
report: report this note
coordinates_html: "%{latitude}, %{longitude}"
anonymous_warning: This note includes comments from anonymous users which should be independently verified.
discussion: Discussion
subscribe: Subscribe
unsubscribe: Unsubscribe
hide: Hide
resolve: Resolve
reactivate: Reactivate
47 changes: 46 additions & 1 deletion test/system/note_comments_test.rb
Original file line number Diff line number Diff line change
@@ -22,7 +22,7 @@ class NoteCommentsTest < ApplicationSystemTestCase
end
end

def test_add_comment
test "can add comment" do
note = create(:note_with_comments)
user = create(:user)
sign_in_as(user)
@@ -125,4 +125,49 @@ def test_add_comment
assert_button "Reactivate", :disabled => false
end
end

test "no subscribe button when not logged in" do
note = create(:note_with_comments)
visit note_path(note)

within_sidebar do
assert_no_button "Subscribe"
assert_no_button "Unsubscribe"
end
end

test "can subscribe" do
note = create(:note_with_comments)
user = create(:user)
sign_in_as(user)
visit note_path(note)

within_sidebar do
assert_button "Subscribe"
assert_no_button "Unsubscribe"

click_on "Subscribe"

assert_no_button "Subscribe"
assert_button "Unsubscribe"
end
end

test "can unsubscribe" do
note = create(:note_with_comments)
user = create(:user)
create(:note_subscription, :note => note, :user => user)
sign_in_as(user)
visit note_path(note)

within_sidebar do
assert_no_button "Subscribe"
assert_button "Unsubscribe"

click_on "Unsubscribe"

assert_button "Subscribe"
assert_no_button "Unsubscribe"
end
end
end

0 comments on commit 2624faa

Please sign in to comment.