Skip to content

Commit 7c4d4be

Browse files
committed
fix/Remove snippet from folder when moved
1 parent a05fbff commit 7c4d4be

File tree

7 files changed

+53
-26
lines changed

7 files changed

+53
-26
lines changed

app/controllers/snippets_controller.rb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,12 @@ def create
183183
'snippets/snippet_preview'
184184
end
185185

186-
render partial: partial, locals: { snippet: snippet }
186+
element = render_to_string partial: partial, locals: { snippet: snippet }
187+
188+
render json: { client_id: snippet.client_id, element: element }
187189
else
188-
render partial: 'shared/errors', locals: { resource: snippet }, status: :bad_request
190+
element = render_to_string partial: 'shared/errors', locals: { resource: snippet }
191+
render json: { element: element }, status: :bad_request
189192
end
190193
end
191194

@@ -208,9 +211,12 @@ def update
208211
end
209212

210213
@display_popover = true
211-
render partial: partial, locals: { snippet: snippet }
214+
element = render_to_string partial: partial, locals: { snippet: snippet }
215+
216+
render json: { client_id: snippet.client_id, folder_id: snippet_params[:folder_id], element: element }
212217
else
213-
render partial: 'shared/errors', locals: { resource: snippet }, status: :bad_request
218+
element = render_to_string partial: 'shared/errors', locals: { resource: snippet }
219+
render json: { element: element }, status: :bad_request
214220
end
215221
end
216222

app/javascript/controllers/snippets_controller.js

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,45 +17,39 @@ export default class extends Controller {
1717
}
1818

1919
update(event) {
20-
console.log('yah')
20+
console.log('yah', event)
2121

22-
const id = new DOMParser().parseFromString(event.detail, "text/xml").firstChild.id
23-
const element = document.getElementById(id)
22+
const element = document.getElementById(event.detail.client_id)
2423

25-
if (element) { element.outerHTML = event.detail }
24+
if (element) { element.outerHTML = event.detail.element }
2625
}
2726

2827
onCreateSuccess(event) {
2928
const [data, status, xhr] = event.detail;
30-
console.log(xhr.response)
31-
const createEvent = new CustomEvent('snippet-created', { detail: xhr.response })
29+
const createEvent = new CustomEvent('snippet-created', { detail: data })
3230
window.dispatchEvent(createEvent)
3331

3432
this.toast.display('Your snippet was created!')
3533
this.modal.close()
36-
37-
// window.location.href = '/'
3834
}
3935

4036
onCreateError(event) {
4137
const [data, status, xhr] = event.detail;
42-
this.errorsTarget.innerHTML = xhr.response;
38+
this.errorsTarget.innerHTML = data.element;
4339
}
4440

4541
onUpdateSuccess(event) {
4642
const [data, status, xhr] = event.detail;
47-
const createEvent = new CustomEvent('snippet-updated', { detail: xhr.response })
48-
window.dispatchEvent(createEvent)
43+
const updateEvent = new CustomEvent('snippet-updated', { detail: data })
44+
window.dispatchEvent(updateEvent)
4945

5046
this.toast.display('Your snippet was updated!')
5147
this.modal.close()
52-
53-
// window.location.href = '/'
5448
}
5549

5650
onUpdateError(event) {
5751
const [data, status, xhr] = event.detail;
58-
this.errorsTarget.innerHTML = xhr.response;
52+
this.errorsTarget.innerHTML = data.element;
5953
}
6054

6155
presentModal(event) {
@@ -67,6 +61,7 @@ export default class extends Controller {
6761
event.stopPropagation()
6862
const snippetUrl = event.currentTarget.dataset.snippetUrl
6963

64+
// event is still propagating when using visit
7065
// Turbolinks.visit(snippetUrl)
7166
window.location.href = snippetUrl
7267
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { Controller } from 'stimulus';
2+
3+
export default class extends Controller {
4+
static targets = ['entries']
5+
6+
update(event) {
7+
const folderId = event.detail.folder_id
8+
const clientId = event.detail.client_id
9+
const element = document.getElementById(clientId)
10+
11+
if (element) {
12+
if ((this.folderId && folderId) && (this.folderId !== folderId)) {
13+
element.remove()
14+
} else {
15+
element.outerHTML = event.detail.element
16+
}
17+
}
18+
}
19+
20+
get folderId() {
21+
return this.data.get('id')
22+
}
23+
}

app/views/folders/show.html.erb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
<div data-controller="infinite-scroll" data-infinite-scroll-base-url="<%= folder_path(@folder) %>">
1+
<div
2+
data-controller="infinite-scroll snippets-list"
3+
data-infinite-scroll-base-url="<%= folder_path(@folder) %>"
4+
data-snippets-list-id="<%= @folder.id %>">
25
<div style="display: flex; align-items: center; justify-content: space-between;" class="margin-top">
36

47
<div class="searchbar">
@@ -15,8 +18,8 @@
1518
</div>
1619

1720
<div class="margin-top"
18-
data-target="infinite-scroll.entries"
19-
data-action="scroll@window->infinite-scroll#scroll"
21+
data-target="infinite-scroll.entries snippets-list.entries"
22+
data-action="scroll@window->infinite-scroll#scroll snippet-updated@window->snippets-list#update"
2023
>
2124
<%= render 'snippets/snippets' %>
2225
</div>

app/views/home/index.html.erb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
<div data-controller="infinite-scroll">
1+
<div data-controller="infinite-scroll snippets-list">
22
<div
33
id="infinite-snippets-list"
44
data-target="infinite-scroll.entries"
5-
data-action="scroll@window->infinite-scroll#scroll snippet-created@window->infinite-scroll#add snippet-updated@window->snippets#update"
5+
data-action="scroll@window->infinite-scroll#scroll snippet-created@window->infinite-scroll#add snippet-updated@window->snippets-list#update"
66
>
77
<%= render 'snippets/snippets' %>
88
</div>

app/views/snippets/_snippet_preview.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div
22
id="<%= snippet.client_id %>"
33
data-controller="snippets"
4-
data-action="click->snippets#view_snippet snippet-updated@window->snippets#update"
4+
data-action="click->snippets#view_snippet"
55
data-snippet-url="<%= snippet_path(snippet) %>"
66
class="card--container card--container-padding snippet--container-preview"
77
>

app/views/snippets/index.html.erb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div data-controller="infinite-scroll" data-infinite-scroll-base-url="<%= snippets_path %>">
1+
<div data-controller="infinite-scroll snippets-list" data-infinite-scroll-base-url="<%= snippets_path %>">
22
<div style="display: flex; align-items: center; justify-content: space-between;" class="margin-top">
33

44
<div class="searchbar">
@@ -16,7 +16,7 @@
1616

1717
<div class="margin-top"
1818
data-target="infinite-scroll.entries"
19-
data-action="scroll@window->infinite-scroll#scroll"
19+
data-action="scroll@window->infinite-scroll#scroll snippet-updated@window->snippets-list#update"
2020
>
2121
<%= render 'snippets/snippets' %>
2222
</div>

0 commit comments

Comments
 (0)