Merge pull request #656 from Retrospring/feature/request-js-settings
Refactor settings TS functionality to use `@rails/request.js`
This commit is contained in:
commit
eb0271210b
|
@ -12,7 +12,7 @@ class Ajax::MuteRuleController < AjaxController
|
|||
@response[:status] = :okay
|
||||
@response[:success] = true
|
||||
@response[:message] = t(".success")
|
||||
@response[:id] = rule.id
|
||||
@response[:id] = rule.id.to_s # Returning this as a string as JavaScript defines all numbers as floats
|
||||
end
|
||||
|
||||
def update
|
||||
|
|
|
@ -1,27 +1,21 @@
|
|||
import Rails from '@rails/ujs';
|
||||
import { destroy } from '@rails/request.js';
|
||||
import { showNotification, showErrorNotification } from 'utilities/notifications';
|
||||
import I18n from 'retrospring/i18n';
|
||||
|
||||
export function unblockAnonymousHandler(event: Event): void {
|
||||
const button: HTMLButtonElement = event.currentTarget as HTMLButtonElement;
|
||||
const targetId = button.dataset.target;
|
||||
let success = false;
|
||||
|
||||
Rails.ajax({
|
||||
url: `/ajax/block_anon/${targetId}`,
|
||||
type: 'DELETE',
|
||||
success: (data) => {
|
||||
success = data.success;
|
||||
destroy(`/ajax/block_anon/${targetId}`)
|
||||
.then(async response => {
|
||||
if (!response.ok) return;
|
||||
|
||||
const data = await response.json;
|
||||
showNotification(data.message, data.success);
|
||||
},
|
||||
error: (data, status, xhr) => {
|
||||
console.log(data, status, xhr);
|
||||
showErrorNotification(I18n.translate('frontend.error.message'));
|
||||
},
|
||||
complete: () => {
|
||||
if (!success) return;
|
||||
|
||||
button.closest('.list-group-item').remove();
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.log(err);
|
||||
showErrorNotification(I18n.translate('frontend.error.message'));
|
||||
});
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
import Rails from '@rails/ujs';
|
||||
import { destroy, post } from '@rails/request.js';
|
||||
|
||||
function createSubmitEvent(
|
||||
submit: HTMLButtonElement,
|
||||
|
@ -10,28 +11,30 @@ function createSubmitEvent(
|
|||
event.preventDefault();
|
||||
submit.disabled = true;
|
||||
|
||||
Rails.ajax({
|
||||
url: '/ajax/mute',
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
data: new URLSearchParams({muted_phrase: textEntry.value}).toString(),
|
||||
success: (data) => {
|
||||
post('/ajax/mute', {
|
||||
body: {
|
||||
muted_phrase: textEntry.value
|
||||
},
|
||||
contentType: 'application/json'
|
||||
})
|
||||
.then(async response => {
|
||||
const data = await response.json;
|
||||
|
||||
submit.disabled = false;
|
||||
if (!data.success) return;
|
||||
|
||||
const newEntryFragment = template.content.cloneNode(true) as Element;
|
||||
newEntryFragment.querySelector<HTMLInputElement>('input').value = textEntry.value;
|
||||
const newDeleteButton = newEntryFragment.querySelector<HTMLButtonElement>('button')
|
||||
|
||||
const newDeleteButton = newEntryFragment.querySelector<HTMLButtonElement>('button');
|
||||
newDeleteButton.dataset.id = String(data.id);
|
||||
newDeleteButton.onclick = createDeleteEvent(
|
||||
newEntryFragment.querySelector('.form-group'),
|
||||
newDeleteButton
|
||||
)
|
||||
);
|
||||
|
||||
rulesList.appendChild(newEntryFragment)
|
||||
|
||||
textEntry.value = ''
|
||||
}
|
||||
rulesList.appendChild(newEntryFragment);
|
||||
textEntry.value = '';
|
||||
});
|
||||
};
|
||||
}
|
||||
|
@ -43,18 +46,16 @@ function createDeleteEvent(
|
|||
return () => {
|
||||
deleteButton.disabled = true;
|
||||
|
||||
Rails.ajax({
|
||||
url: '/ajax/mute/' + deleteButton.dataset.id,
|
||||
type: 'DELETE',
|
||||
dataType: 'json',
|
||||
success: (data) => {
|
||||
destroy(`/ajax/mute/${deleteButton.dataset.id}`)
|
||||
.then(async response => {
|
||||
const data = await response.json;
|
||||
|
||||
if (data.success) {
|
||||
entry.parentElement.removeChild(entry)
|
||||
} else {
|
||||
deleteButton.disabled = false;
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"dependencies": {
|
||||
"@babel/preset-typescript": "^7.18.6",
|
||||
"@melloware/coloris": "^0.16.0",
|
||||
"@rails/request.js": "^0.0.6",
|
||||
"@rails/ujs": "^6.1.6",
|
||||
"bootstrap": "^4.6.2",
|
||||
"cheet.js": "^0.3.3",
|
||||
|
|
|
@ -1,20 +1,21 @@
|
|||
require 'rails_helper'
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "rails_helper"
|
||||
|
||||
describe Ajax::MuteRuleController, :ajax_controller, type: :controller do
|
||||
|
||||
describe "#create" do
|
||||
subject { post(:create, params: params) }
|
||||
subject { post(:create, params:) }
|
||||
|
||||
context "when user is signed in" do
|
||||
before(:each) { sign_in(user) }
|
||||
|
||||
let(:params) { { muted_phrase: 'test' } }
|
||||
let(:params) { { muted_phrase: "test" } }
|
||||
let(:expected_response) do
|
||||
{
|
||||
"success" => true,
|
||||
"status" => "okay",
|
||||
"id" => MuteRule.last.id,
|
||||
"message" => "Rule added successfully.",
|
||||
"id" => MuteRule.last.id.to_s,
|
||||
"message" => "Rule added successfully."
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -24,7 +25,7 @@ describe Ajax::MuteRuleController, :ajax_controller, type: :controller do
|
|||
|
||||
rule = MuteRule.first
|
||||
expect(rule.user_id).to eq(user.id)
|
||||
expect(rule.muted_phrase).to eq('test')
|
||||
expect(rule.muted_phrase).to eq("test")
|
||||
end
|
||||
|
||||
include_examples "returns the expected response"
|
||||
|
@ -32,13 +33,13 @@ describe Ajax::MuteRuleController, :ajax_controller, type: :controller do
|
|||
end
|
||||
|
||||
describe "#update" do
|
||||
subject { post(:update, params: params) }
|
||||
subject { post(:update, params:) }
|
||||
|
||||
context "when user is signed in" do
|
||||
before(:each) { sign_in(user) }
|
||||
|
||||
let(:rule) { MuteRule.create(user: user, muted_phrase: 'test') }
|
||||
let(:params) { { id: rule.id, muted_phrase: 'dogs' } }
|
||||
let(:rule) { MuteRule.create(user:, muted_phrase: "test") }
|
||||
let(:params) { { id: rule.id, muted_phrase: "dogs" } }
|
||||
let(:expected_response) do
|
||||
{
|
||||
"success" => true,
|
||||
|
@ -51,7 +52,7 @@ describe Ajax::MuteRuleController, :ajax_controller, type: :controller do
|
|||
subject
|
||||
expect(response).to have_http_status(:success)
|
||||
|
||||
expect(rule.reload.muted_phrase).to eq('dogs')
|
||||
expect(rule.reload.muted_phrase).to eq("dogs")
|
||||
end
|
||||
|
||||
include_examples "returns the expected response"
|
||||
|
@ -59,12 +60,12 @@ describe Ajax::MuteRuleController, :ajax_controller, type: :controller do
|
|||
end
|
||||
|
||||
describe "#destroy" do
|
||||
subject { delete(:destroy, params: params) }
|
||||
subject { delete(:destroy, params:) }
|
||||
|
||||
context "when user is signed in" do
|
||||
before(:each) { sign_in(user) }
|
||||
|
||||
let(:rule) { MuteRule.create(user: user, muted_phrase: 'test') }
|
||||
let(:rule) { MuteRule.create(user:, muted_phrase: "test") }
|
||||
let(:params) { { id: rule.id } }
|
||||
let(:expected_response) do
|
||||
{
|
||||
|
@ -79,11 +80,9 @@ describe Ajax::MuteRuleController, :ajax_controller, type: :controller do
|
|||
expect(response).to have_http_status(:success)
|
||||
|
||||
expect(MuteRule.exists?(rule.id)).to eq(false)
|
||||
|
||||
end
|
||||
|
||||
include_examples "returns the expected response"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -1193,6 +1193,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.0.3.tgz#71f08e958883af64f6a20489318b5e95d2c6dc5b"
|
||||
integrity sha512-Iefl21FZD+ck1di6xSHMYzSzRiNJTHV4NrAzCfDfqc/wPz4xncrP8f2/fJ+2jzwKIaDn76UVMsALh7R5OzsF8Q==
|
||||
|
||||
"@rails/request.js@^0.0.6":
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@rails/request.js/-/request.js-0.0.6.tgz#5f0347a9f363e50ec45118c7134080490cda81d8"
|
||||
integrity sha512-dfFWaQXitYJ4kxrgGJNhDNXX54/v10YgoJqBMVe6lhqs6a4N9WD7goZJEvwin82TtK8MqUNhwfyisgKwM6dMdg==
|
||||
|
||||
"@rails/ujs@^6.1.4-1", "@rails/ujs@^6.1.6":
|
||||
version "6.1.6"
|
||||
resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.6.tgz#de486ae0a663e1bed637a012cbb2739bfcfa2031"
|
||||
|
|
Loading…
Reference in New Issue