Skip to content

Commit f3e6bc4

Browse files
authored
Merge pull request #855 from amatsuda/consolidate_bulk_dialog_controllers
Consolidate bulk dialog controllers
2 parents 5289148 + 6e8e25a commit f3e6bc4

23 files changed

+113
-217
lines changed

app/controllers/staff/grids/bulk_time_slots_controller.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ def cancel
3131

3232
def edit
3333
@bulk = BulkTimeSlot.new(bulk_time_slot_params)
34-
respond_to do |format|
35-
format.turbo_stream
36-
end
34+
render partial: 'create_dialog', locals: {bulk: @bulk}
3735
end
3836

3937
def create

app/decorators/staff/time_slot_decorator.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,7 @@ def ts_data
104104
if ts.persisted?
105105
data.merge!({
106106
edit_path: h.edit_event_staff_schedule_grid_time_slot_path(object.event, object),
107-
update_path: h.event_staff_schedule_grid_time_slot_url(object.event, object),
108-
toggle: 'modal',
109-
target: '#grid-time-slot-edit-dialog'
107+
update_path: h.event_staff_schedule_grid_time_slot_url(object.event, object)
110108
})
111109
end
112110
data

app/helpers/schedule_helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def generate_grid_button(day)
2626
link_to('Generate Grid',
2727
new_event_staff_schedule_grid_bulk_time_slot_path(current_event, day),
2828
class: 'btn btn-primary btn-sm generate-grid',
29-
data: {turbo: true, toggle: 'modal', target: '#bulk-time-slot-create-dialog'}
29+
data: {turbo: true, turbo_frame: 'grid-modal-content'}
3030
)
3131
end
3232

app/javascript/controllers/bulk_dialog_controller.js

Lines changed: 0 additions & 27 deletions
This file was deleted.

app/javascript/controllers/bulk_dialog_show_controller.js

Lines changed: 0 additions & 33 deletions
This file was deleted.

app/javascript/controllers/draggable_sessions_controller.js

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -68,18 +68,11 @@ export default class extends Controller {
6868
const scheduled = session.dataset.scheduled
6969

7070
if (url && !scheduled) {
71-
fetch(url, {
72-
headers: {
73-
'Accept': 'text/html',
74-
'Turbo-Frame': 'program-session-show-dialog'
75-
}
76-
}).then(response => response.text())
77-
.then(html => {
78-
const frame = document.querySelector('#program-session-show-dialog turbo-frame')
79-
if (frame) {
80-
frame.innerHTML = html
81-
}
82-
})
71+
const frame = document.getElementById('grid-modal-content')
72+
if (frame) {
73+
frame.innerHTML = ''
74+
frame.src = url
75+
}
8376
}
8477
}
8578

app/javascript/controllers/grid_day_refresh_controller.js

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { Controller } from "@hotwired/stimulus"
2+
import { Modal } from "bootstrap"
3+
4+
export default class extends Controller {
5+
connect() {
6+
this.element.addEventListener('turbo:frame-load', () => this.onFrameLoad())
7+
document.addEventListener('turbo:submit-end', this.handleSubmitEnd)
8+
document.addEventListener('turbo:before-stream-render', this.handleStreamRender)
9+
}
10+
11+
disconnect() {
12+
document.removeEventListener('turbo:submit-end', this.handleSubmitEnd)
13+
document.removeEventListener('turbo:before-stream-render', this.handleStreamRender)
14+
}
15+
16+
handleStreamRender = (event) => {
17+
const stream = event.target
18+
if (stream.action === 'replace' && stream.target?.startsWith('schedule_day_')) {
19+
this.close()
20+
}
21+
}
22+
23+
onFrameLoad() {
24+
this.setupBulkFormSync()
25+
this.open()
26+
}
27+
28+
handleSubmitEnd = (event) => {
29+
const form = event.target
30+
if (!this.element.contains(form)) return
31+
32+
if (event.detail.success) {
33+
const submitter = event.detail.formSubmission?.submitter
34+
if (submitter && submitter.value === 'save_and_add') {
35+
return
36+
}
37+
this.close()
38+
}
39+
}
40+
41+
setupBulkFormSync() {
42+
const formatSelect = this.element.querySelector('select.session-format')
43+
const durationInput = this.element.querySelector('.time-slot-duration')
44+
45+
if (formatSelect && durationInput) {
46+
formatSelect.addEventListener('change', () => {
47+
durationInput.value = formatSelect.value
48+
})
49+
50+
durationInput.addEventListener('keyup', () => {
51+
if (document.activeElement === durationInput) {
52+
formatSelect.value = ''
53+
}
54+
})
55+
}
56+
}
57+
58+
open() {
59+
Modal.getOrCreateInstance(this.element).show()
60+
}
61+
62+
close() {
63+
const modal = Modal.getInstance(this.element)
64+
if (modal) modal.hide()
65+
}
66+
}

app/javascript/controllers/grid_show_modal_controller.js

Lines changed: 0 additions & 12 deletions
This file was deleted.

app/javascript/controllers/index.js

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ window.Stimulus = application
1212
import AlertAutodismissController from "./alert_autodismiss_controller"
1313
import AlertController from "./alert_controller"
1414
import BannerAdsController from "./banner_ads_controller"
15-
import BulkDialogController from "./bulk_dialog_controller"
16-
import BulkDialogShowController from "./bulk_dialog_show_controller"
15+
import GridModalController from "./grid_modal_controller"
1716
import CfpDatatableController from "./cfp_datatable_controller"
1817
import ContentController from "./content_controller"
1918
import CopySpeakerEmailsController from "./copy_speaker_emails_controller"
@@ -23,15 +22,12 @@ import EditorController from "./editor_controller"
2322
import FilterController from "./filter_controller"
2423
import FixedSubnavController from "./fixed_subnav_controller"
2524
import FlyOutController from "./fly_out_controller"
26-
import GridDayRefreshController from "./grid_day_refresh_controller"
27-
import GridShowModalController from "./grid_show_modal_controller"
2825
import GridTimeSlotRefreshController from "./grid_time_slot_refresh_controller"
2926
import HighlightController from "./highlight_controller"
3027
import InlineEditController from "./inline_edit_controller"
3128
import MaxlengthAlertController from "./maxlength_alert_controller"
3229
import MentionController from "./mention_controller"
3330
import ModalAutofocusController from "./modal_autofocus_controller"
34-
import ModalFormController from "./modal_form_controller"
3531
import NestedFormController from "./nested_form_controller"
3632
import NextProposalController from "./next_proposal_controller"
3733
import NotificationsChannelController from "./notifications_channel_controller"
@@ -59,8 +55,7 @@ import TrackFilterController from "./track_filter_controller"
5955
application.register("alert-autodismiss", AlertAutodismissController)
6056
application.register("alert", AlertController)
6157
application.register("banner-ads", BannerAdsController)
62-
application.register("bulk-dialog", BulkDialogController)
63-
application.register("bulk-dialog-show", BulkDialogShowController)
58+
application.register("grid-modal", GridModalController)
6459
application.register("cfp-datatable", CfpDatatableController)
6560
application.register("content", ContentController)
6661
application.register("copy-speaker-emails", CopySpeakerEmailsController)
@@ -70,15 +65,12 @@ application.register("editor", EditorController)
7065
application.register("filter", FilterController)
7166
application.register("fixed-subnav", FixedSubnavController)
7267
application.register("fly-out", FlyOutController)
73-
application.register("grid-day-refresh", GridDayRefreshController)
74-
application.register("grid-show-modal", GridShowModalController)
7568
application.register("grid-time-slot-refresh", GridTimeSlotRefreshController)
7669
application.register("highlight", HighlightController)
7770
application.register("inline-edit", InlineEditController)
7871
application.register("maxlength-alert", MaxlengthAlertController)
7972
application.register("mention", MentionController)
8073
application.register("modal-autofocus", ModalAutofocusController)
81-
application.register("modal-form", ModalFormController)
8274
application.register("nested-form", NestedFormController)
8375
application.register("next-proposal", NextProposalController)
8476
application.register("notifications-channel", NotificationsChannelController)

0 commit comments

Comments
 (0)