Skip to content

Commit 4d222cd

Browse files
committed
feature/Use JSON endpoint to file snippets
1 parent d236f4f commit 4d222cd

File tree

7 files changed

+67
-35
lines changed

7 files changed

+67
-35
lines changed

app/controllers/snippets_controller.rb

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,23 +52,24 @@ def unfile
5252

5353
# Does this belong on SnippetFoldersController?
5454
def file
55-
begin
56-
Snippet.transaction do
57-
if snippet_folder = current_user.snippet_folders.find_by(snippet_id: params[:id])
58-
snippet_folder.destroy!
59-
end
60-
61-
SnippetFolder.create!(snippet_id: params[:id], folder_id: params[:folder_id])
55+
respond_to do |format|
56+
format.json do
57+
begin
58+
Snippet.transaction do
59+
if snippet_folder = current_user.snippet_folders.find_by(snippet_id: params[:id])
60+
snippet_folder.destroy!
61+
end
62+
63+
SnippetFolder.create!(snippet_id: params[:id], folder_id: params[:folder_id])
64+
end
65+
rescue => error
66+
render json: { message: 'Unable to file snippet, please try again.' }, status: 400
67+
else
68+
new_folder = current_user.folders.find(params[:folder_id])
69+
render json: { message: "Snippet filed in #{new_folder.name}!" }
70+
end
6271
end
63-
rescue => error
64-
flash[:alert] = 'Unable to file snippet, please try again.'
65-
else
66-
new_folder = current_user.folders.find(params[:folder_id])
67-
68-
flash[:notice] = "Snippet filed in #{new_folder.name}!"
6972
end
70-
71-
redirect_to root_path
7273
end
7374

7475
def move_modal

app/javascript/controllers/alert_controller.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export default class extends Controller {
88
const csrfToken = document.querySelector("meta[name=csrf-token]").content
99
axios.defaults.headers.common['X-CSRF-Token'] = csrfToken
1010
}
11+
1112
present(event) {
1213
event.preventDefault()
1314

@@ -21,8 +22,6 @@ export default class extends Controller {
2122
}
2223

2324
confirm() {
24-
console.log(this.confirmPath)
25-
2625
axios.delete(this.confirmPath, { headers: { 'accept': 'application/json' } })
2726
.then(res => {
2827
if (this.listItem) {

app/javascript/controllers/modal_controller.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ import { Controller } from 'stimulus';
22
import axios from 'axios';
33

44
export default class extends Controller {
5-
static targets = ["modal"];
5+
static targets = ["modal"];
6+
7+
connect() {
8+
this.element[this.identifier] = this
9+
}
610

711
present() {
812
event.preventDefault()

app/javascript/controllers/popover_controller.js

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,8 @@ export default class extends Controller {
88
event.preventDefault();
99
event.stopPropagation()
1010

11-
if (this.hasPopoverTarget && !this.popoverTarget.classList.contains('hidden')) {
12-
this.hideAllPopovers()
13-
14-
this.popoverTarget.classList.add('hidden')
15-
} else if (this.hasPopoverTarget && this.popoverTarget.classList.contains('hidden')) {
16-
this.hideAllPopovers()
17-
18-
this.popoverTarget.classList.remove('hidden')
11+
if (this.hasPopoverTarget) {
12+
this.popoverTarget.remove()
1913
} else {
2014
this.hideAllPopovers()
2115

@@ -29,7 +23,7 @@ export default class extends Controller {
2923

3024
hide(event) {
3125
if(this.hasPopoverTarget && !this.element.contains(event.target)) {
32-
this.popoverTarget.classList.add('hidden')
26+
this.popoverTarget.remove()
3327
}
3428
}
3529

@@ -39,8 +33,6 @@ export default class extends Controller {
3933

4034
confirm(event) {
4135
event.preventDefault();
42-
43-
console.log('text', this.confirmText)
4436
}
4537

4638
disconnect() {
@@ -49,7 +41,7 @@ export default class extends Controller {
4941

5042
hideAllPopovers() {
5143
Array.from(document.getElementsByClassName('popover--container')).forEach(el => {
52-
el.classList.add('hidden')
44+
el.remove()
5345
})
5446
}
5547

app/javascript/controllers/snippets_controller.js

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import { Controller } from 'stimulus';
2+
import axios from 'axios';
23

34
export default class extends Controller {
45
static targets = ["moveButton", "listItem"];
56

67

78
initialize() {
9+
const csrfToken = document.querySelector("meta[name=csrf-token]").content
10+
axios.defaults.headers.common['X-CSRF-Token'] = csrfToken
811
}
912

1013
connect() {
@@ -59,8 +62,6 @@ export default class extends Controller {
5962

6063
this.selectedFolderId = folderId
6164

62-
63-
this.moveButtonTarget.href = this.moveButtonTarget.href.split('?')[0].concat(`?folder_id=${folderId}`)
6465
if (this.selectedFolderId === this.originalFolderId) {
6566
this.moveButtonTarget.disabled = true
6667
this.moveButtonTarget.classList.remove('button--cta-new')
@@ -72,6 +73,18 @@ export default class extends Controller {
7273
}
7374
}
7475

76+
file() {
77+
axios.post(this.confirmPath, { folder_id: this.selectedFolderId }, { headers: { 'accept': 'application/json' } })
78+
.then(res => {
79+
this.toast.display(res.data.message)
80+
this.modal.close()
81+
})
82+
.catch(error => {
83+
console.error(error)
84+
this.toast.display('Unable to file snippet')
85+
})
86+
}
87+
7588
get url() {
7689
return this.data.get('url')
7790
}
@@ -84,6 +97,22 @@ export default class extends Controller {
8497
return this.data.get('originalFolderId')
8598
}
8699

100+
get modal() {
101+
return document.getElementById('modal').modal
102+
}
103+
104+
get toast() {
105+
return document.getElementById('toast').toast
106+
}
107+
108+
get confirmPath() {
109+
return this.data.get('confirmPath')
110+
}
111+
112+
set confirmPath(newPath) {
113+
return this.data.set('confirmPath', newPath)
114+
}
115+
87116
set selectedFolderId(folderId) {
88117
return this.data.set('selectedFolderId', folderId)
89118
}

app/views/shared/_modal.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div data-controller="modal" data-target="modal.modal" class="modal-mask">
1+
<div id="modal" data-controller="modal" data-target="modal.modal" class="modal-mask">
22
<div class="modal-wrapper">
33
<div class="card--container card--container-padding modal-container">
44
<div class="modal-header">

app/views/snippets/move_modal.html.erb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
data-controller="snippets"
44
data-snippets-selected-folder-id="<%= @current_folder_id %>"
55
data-snippets-original-folder-id="<%= @current_folder_id %>"
6+
data-snippets-confirm-path="<%= file_snippet_path(@snippet) %>"
67
>
78
<input data-action="keyup->snippets#modal_search" class="move-snippet--search" type="search" placeholder="Find a folder...">
89
<div class="move-snippet--list" data-target="snippets.list">
@@ -23,8 +24,14 @@
2324
</div>
2425
<div class="move-snippet--buttons">
2526
<button data-action="click->modal#close" class="button--cta-cancel">CANCEL</button>
26-
27-
<%= link_to @header.upcase, file_snippet_path(@snippet), method: :post, disabled: true, class: "button--cta-disabled", data: { target: 'snippets.moveButton' } %>
27+
<button
28+
data-action="click->snippets#file"
29+
data-target="snippets.moveButton"
30+
class="button--cta-disabled"
31+
disabled
32+
>
33+
<%= @header.upcase %>
34+
</button>
2835
</div>
2936
</div>
3037
<% end %>

0 commit comments

Comments
 (0)