Add some toasts
This commit is contained in:
parent
84fc1d2d93
commit
934deddec4
10 changed files with 50 additions and 5 deletions
|
|
@ -28,4 +28,8 @@ module ApplicationHelper
|
||||||
def current_page_displayed(page)
|
def current_page_displayed(page)
|
||||||
@current_page&.id == page.id ? "open" : nil
|
@current_page&.id == page.id ? "open" : nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def turbo_stream_toast(content, alert)
|
||||||
|
turbo_stream.append("toasts", partial: "layouts/toast", locals: { content:, alert: })
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -43,5 +43,8 @@ application.register("sortable", SortableController)
|
||||||
import ThemeSwitcherController from "./theme_switcher_controller"
|
import ThemeSwitcherController from "./theme_switcher_controller"
|
||||||
application.register("theme-switcher", ThemeSwitcherController)
|
application.register("theme-switcher", ThemeSwitcherController)
|
||||||
|
|
||||||
|
import ToastController from "./toast_controller"
|
||||||
|
application.register("toast", ToastController)
|
||||||
|
|
||||||
import UnsavedChangesController from "./unsaved_changes_controller"
|
import UnsavedChangesController from "./unsaved_changes_controller"
|
||||||
application.register("unsaved-changes", UnsavedChangesController)
|
application.register("unsaved-changes", UnsavedChangesController)
|
||||||
|
|
|
||||||
10
app/javascript/controllers/toast_controller.js
Normal file
10
app/javascript/controllers/toast_controller.js
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
import { Controller } from "@hotwired/stimulus"
|
||||||
|
import * as bootstrap from "bootstrap"
|
||||||
|
|
||||||
|
// Connects to data-controller="toast"
|
||||||
|
export default class extends Controller {
|
||||||
|
connect() {
|
||||||
|
const toastBootstrap = bootstrap.Toast.getOrCreateInstance(this.element)
|
||||||
|
toastBootstrap.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
= turbo_stream.update "new_element_frame", partial: "pages/new_element_button", locals: { page: @element.page }
|
= turbo_stream.update "new_element_frame", partial: "pages/new_element_button", locals: { page: @element.page }
|
||||||
= turbo_stream.append "element_list", @element
|
= turbo_stream.append "element_list", @element
|
||||||
= turbo_stream.append dom_id(@element.page, :page_nav_elements), partial: "elements/page_nav_row", locals: { element: @element, current_page: true }
|
= turbo_stream.append dom_id(@element.page, :page_nav_elements), partial: "elements/page_nav_row", locals: { element: @element, current_page: true }
|
||||||
|
|
||||||
|
|
||||||
|
= turbo_stream_toast("Element hinzugefügt", false)
|
||||||
|
|
@ -2,4 +2,7 @@
|
||||||
= turbo_stream.remove dom_id(@element, :page_nav_row)
|
= turbo_stream.remove dom_id(@element, :page_nav_row)
|
||||||
- @element.page.elements.reject { _1 == @element }.each do |e|
|
- @element.page.elements.reject { _1 == @element }.each do |e|
|
||||||
= turbo_stream.update dom_id(e, :title), "#{e.page.position}.#{e.position} #{e.title}"
|
= turbo_stream.update dom_id(e, :title), "#{e.page.position}.#{e.position} #{e.title}"
|
||||||
= turbo_stream.replace dom_id(e, :page_nav_row), partial: "elements/page_nav_row", locals: { element: e, current_page: true }
|
= turbo_stream.replace dom_id(e, :page_nav_row), partial: "elements/page_nav_row", locals: { element: e, current_page: true }
|
||||||
|
|
||||||
|
|
||||||
|
= turbo_stream_toast("Element wurde gelöscht", false)
|
||||||
|
|
@ -5,4 +5,7 @@
|
||||||
/ = turbo_stream.update dom_id(sc, :title), "#{sc.page.position}.#{sc.element.position}.#{sc.position} #{sc.title}"
|
/ = turbo_stream.update dom_id(sc, :title), "#{sc.page.position}.#{sc.element.position}.#{sc.position} #{sc.title}"
|
||||||
- element.success_criteria.each do |sc|
|
- element.success_criteria.each do |sc|
|
||||||
= turbo_stream.update dom_id(sc, :position), "#{sc.page.position}.#{sc.element.position}.#{sc.position}"
|
= turbo_stream.update dom_id(sc, :position), "#{sc.page.position}.#{sc.element.position}.#{sc.position}"
|
||||||
= turbo_stream.replace dom_id(element, :frame), element
|
= turbo_stream.replace dom_id(element, :frame), element
|
||||||
|
|
||||||
|
|
||||||
|
= turbo_stream_toast("Element gespeichert", false)
|
||||||
8
app/views/layouts/_toast.html.slim
Normal file
8
app/views/layouts/_toast.html.slim
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
.toast class="#{alert ? "text-bg-danger" : ""}" role="alert" aria-live="assertive" aria-atomic="true" data={ controller: "toast" }
|
||||||
|
.toast-header
|
||||||
|
/img src="..." class="rounded me-2" alt="...">
|
||||||
|
/strong.me-auto = heading
|
||||||
|
.small.me-auto = l(Time.current.to_time)
|
||||||
|
button.btn-close type="button" data-bs-dismiss="toast" aria-label="Schliessen"
|
||||||
|
.toast-body
|
||||||
|
= content
|
||||||
|
|
@ -16,5 +16,12 @@ html data-bs-theme="#{cookies[:"modeTheme"] || "light"}" data-controller="set-th
|
||||||
main.col.ps-md-2.pt-2
|
main.col.ps-md-2.pt-2
|
||||||
#main-content[data-controller="rich-text-link-targets"]
|
#main-content[data-controller="rich-text-link-targets"]
|
||||||
= yield
|
= yield
|
||||||
|
|
||||||
|
.toast-container.position-fixed.bottom-0.start-0.p-3 id="toasts"
|
||||||
|
- if flash.alert
|
||||||
|
= render partial: "layouts/toast", locals: { content: flash.alert, alert: true }
|
||||||
|
- if flash.notice
|
||||||
|
= render partial: "layouts/toast", locals: { content: flash.notice, alert: false }
|
||||||
|
|
||||||
/footer.container-fluid.mt-auto.border-top
|
/footer.container-fluid.mt-auto.border-top
|
||||||
= Rails.configuration.build_version && "Version: #{Rails.configuration.build_version}"
|
= Rails.configuration.build_version && "Version: #{Rails.configuration.build_version}"
|
||||||
|
|
|
||||||
|
|
@ -4,4 +4,6 @@
|
||||||
= turbo_stream.update dom_id(element, :title), "#{element.page.position}.#{element.position} #{element.title}"
|
= turbo_stream.update dom_id(element, :title), "#{element.page.position}.#{element.position} #{element.title}"
|
||||||
= turbo_stream.replace dom_id(element, :page_nav_row), partial: "elements/page_nav_row", locals: { element: element, current_page: element.page == @page}
|
= turbo_stream.replace dom_id(element, :page_nav_row), partial: "elements/page_nav_row", locals: { element: element, current_page: element.page == @page}
|
||||||
- element.success_criteria.each do |sc|
|
- element.success_criteria.each do |sc|
|
||||||
= turbo_stream.update dom_id(sc, :position), "#{sc.page.position}.#{sc.element.position}.#{sc.position}"
|
= turbo_stream.update dom_id(sc, :position), "#{sc.page.position}.#{sc.element.position}.#{sc.position}"
|
||||||
|
|
||||||
|
= turbo_stream_toast("Pfad gespeichert", false)
|
||||||
|
|
@ -2,4 +2,6 @@
|
||||||
= turbo_stream.replace dom_id(@success_criterion, :body), partial: "success_criteria/body", locals: {success_criterion: @success_criterion }
|
= turbo_stream.replace dom_id(@success_criterion, :body), partial: "success_criteria/body", locals: {success_criterion: @success_criterion }
|
||||||
|
|
||||||
- @success_criterion.element.success_criteria.each do |sc|
|
- @success_criterion.element.success_criteria.each do |sc|
|
||||||
= turbo_stream.update(dom_id(sc, :position), sc.number)
|
= turbo_stream.update(dom_id(sc, :position), sc.number)
|
||||||
|
|
||||||
|
= turbo_stream_toast("Erfolgskriterium gespeichert: #{t("activerecord.attributes.success_criterion.results/#{@success_criterion.result}")}", false)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue