|
44 | 44 | </button> |
45 | 45 | </div> |
46 | 46 | </div> |
47 | | - <table class="table table-bordered table-striped datatable" |
48 | | - id="requests-table"> |
49 | | - <thead> |
50 | | - <tr class="table-info"> |
51 | | - <th class="text-center align-content-center no-sort" style="min-width: 60px;"> |
52 | | - <input type="checkbox" |
53 | | - id="select-all-requests" |
54 | | - data-requests-target="selectAllCheckbox" |
55 | | - data-action="change->requests#toggleSelectAll" |
56 | | - aria-label="Select all pending requests"> |
57 | | - </th> |
58 | | - <th id="assignment">Assignment</th> |
59 | | - <th class="text-center align-content-center" id="name">Name</th> |
60 | | - <th class="text-center align-content-center" id="student-id">Student ID</th> |
61 | | - <th class="text-center align-content-center" style="min-width: 198px;">Requested At</th> |
62 | | - <th class="text-center align-content-center" style="min-width: 198px;">Original Due Date</th> |
63 | | - <th class="text-center align-content-center" style="min-width: 198px;">Requested Due Date</th> |
64 | | - <th class="text-center align-content-center" style="min-width: 90px;"># of Days</th> |
65 | | - <th class="text-center align-content-center" style="min-width: 240px;">Status</th> |
66 | | - <th class="text-center align-content-center no-sort" style="min-width: 220px;">Actions</th> |
67 | | - </tr> |
68 | | - </thead> |
69 | | - <tbody> |
70 | | - <% @requests.each do |request| %> |
71 | | - <tr> |
72 | | - <td class="text-center align-content-center"> |
73 | | - <% if request.status == 'pending' %> |
74 | | - <input type="checkbox" |
75 | | - data-requests-target="rowCheckbox" |
76 | | - data-request-id="<%= request.id %>" |
77 | | - data-action="change->requests#toggleRowSelection" |
78 | | - aria-label="Select request <%= request.id %> for <%= request.user.try(:name) || 'N/A' %>"> |
79 | | - <% end %> |
80 | | - </td> |
81 | | - <td class="align-content-center"><%= request.assignment ? request.assignment.name : "N/A" %></td> |
82 | | - <td class="text-center align-content-center"><%= request.user.try(:name) || 'N/A' %></td> |
83 | | - <td class="text-center align-content-center"><%= request.user.try(:student_id) || 'N/A' %></td> |
84 | | - <td class="text-center align-content-center" data-order="<%= request.created_at.iso8601 %>"> |
85 | | - <%= request.created_at&.strftime('%a, %b %-d at %-I:%M%P') || 'N/A' %> |
86 | | - </td> |
87 | | - <td class="text-center align-content-center" data-order="<%= request.assignment&.due_date&.iso8601 %>"> |
88 | | - <%= request.assignment&.due_date&.strftime('%a, %b %-d at %-I:%M%P') || 'N/A' %> |
89 | | - </td> |
90 | | - <td class="text-center align-content-center" data-order="<%= request.requested_due_date&.iso8601 %>"> |
91 | | - <%= request.requested_due_date.present? ? request.requested_due_date.strftime('%a, %b %-d at %-I:%M%P') : 'N/A' %> |
92 | | - </td> |
93 | | - <td class="text-center align-content-center"> |
94 | | - <% if request.assignment&.due_date && request.requested_due_date.present? %> |
95 | | - <%= (request.requested_due_date.to_date - request.assignment.due_date.to_date).to_i %> |
96 | | - <% else %> |
97 | | - N/A |
98 | | - <% end %> |
99 | | - </td> |
100 | | - <td class="text-center align-content-center" data-export="<%= status_export_string(request) %>"> |
101 | | - <% case request.status %> |
102 | | - <% when 'pending' %> |
103 | | - <span class="badge text-bg-info">Pending</span> |
104 | | - <% when 'approved' %> |
105 | | - <% if request.auto_approved %> |
106 | | - <span class="badge text-bg-success">Auto Approved</span> |
107 | | - <% else %> |
108 | | - <span class="badge text-bg-success">Approved</span> |
| 47 | + <div class="table-responsive"> |
| 48 | + <table class="table table-bordered table-striped datatable" |
| 49 | + id="requests-table"> |
| 50 | + <thead> |
| 51 | + <tr class="table-info"> |
| 52 | + <th class="text-center align-content-center no-sort" style="min-width: 60px;" data-priority="1"> |
| 53 | + <input type="checkbox" |
| 54 | + id="select-all-requests" |
| 55 | + data-requests-target="selectAllCheckbox" |
| 56 | + data-action="change->requests#toggleSelectAll" |
| 57 | + aria-label="Select all pending requests"> |
| 58 | + </th> |
| 59 | + <th class="text-center align-content-center no-sort" style="min-width: 100px;" data-priority="1">Actions</th> |
| 60 | + <th class="text-center align-content-center" id="assignment" style="min-width: 120px; max-width: 200px;" data-priority="2">Assignment</th> |
| 61 | + <th class="text-center align-content-center" id="name" data-priority="5">Name</th> |
| 62 | + <th class="text-center align-content-center" id="student-id" data-priority="9">Student ID</th> |
| 63 | + <th class="text-center align-content-center" style="min-width: 198px;" data-priority="7">Requested At</th> |
| 64 | + <th class="text-center align-content-center" style="min-width: 198px;" data-priority="8">Original Due Date</th> |
| 65 | + <th class="text-center align-content-center" style="min-width: 198px;" data-priority="4">Requested Due Date</th> |
| 66 | + <th class="text-center align-content-center" style="min-width: 90px;" data-priority="6"># of Days</th> |
| 67 | + <th class="text-center align-content-center" style="min-width: 200px;" data-priority="3">Status</th> |
| 68 | + </tr> |
| 69 | + </thead> |
| 70 | + <tbody> |
| 71 | + <% @requests.each do |request| %> |
| 72 | + <tr> |
| 73 | + <td class="text-center align-content-center"> |
| 74 | + <% if request.status == 'pending' %> |
| 75 | + <input type="checkbox" |
| 76 | + data-requests-target="rowCheckbox" |
| 77 | + data-request-id="<%= request.id %>" |
| 78 | + data-action="change->requests#toggleRowSelection" |
| 79 | + aria-label="Select request <%= request.id %> for <%= request.user.try(:name) || 'N/A' %>"> |
| 80 | + <% end %> |
| 81 | + </td> |
| 82 | + <td class="text-center align-content-center"> |
| 83 | + <div class="d-flex flex-column align-items-center gap-1"> |
| 84 | + <%= link_to course_request_path(@course, request), class: "btn btn-sm btn-primary", title: "View", aria: { label: "View request" } do %> |
| 85 | + <i class="fas fa-arrow-right"></i> |
| 86 | + <% end %> |
| 87 | + <% if request.status == 'pending' %> |
| 88 | + <div class="btn-group flex-column"> |
| 89 | + <button type="button" |
| 90 | + class="btn btn-sm btn-success" |
| 91 | + data-action="click->requests#approve" |
| 92 | + data-url="<%= approve_course_request_path(@course, request, format: :json) %>" |
| 93 | + title="Approve" |
| 94 | + aria-label="Approve request"> |
| 95 | + <i class="fas fa-check"></i> |
| 96 | + </button> |
| 97 | + <button type="button" |
| 98 | + class="btn btn-sm btn-danger mt-1" |
| 99 | + data-action="click->requests#reject" |
| 100 | + data-url="<%= reject_course_request_path(@course, request, format: :json) %>" |
| 101 | + title="Reject" |
| 102 | + aria-label="Reject request"> |
| 103 | + <i class="fas fa-times"></i> |
| 104 | + </button> |
| 105 | + </div> |
109 | 106 | <% end %> |
110 | | - on <%= request.updated_at.strftime('%a, %b %-d at %-I:%M%P') || 'N/A' %> |
111 | | - by <%= request.auto_approved ? 'Auto Approval System' : request.last_processed_by_user&.name || 'Unknown' %> |
112 | | - <% when 'denied' %> |
113 | | - <span class="badge text-bg-danger me-3">Denied</span> |
114 | | - on <%= request.updated_at.strftime('%a, %b %-d at %-I:%M%P') || 'N/A' %> |
115 | | - by <%= request.last_processed_by_user&.name || 'Unknown' %> |
116 | | - <% else %> |
117 | | - <span class="badge text-bg-secondary">Unknown</span> |
118 | | - <% end %> |
119 | | - </td> |
120 | | - <td class="text-center align-content-center"> |
121 | | - <%= link_to 'View', course_request_path(@course, request), class: "btn btn-sm btn-primary" %> |
122 | | - <% if request.status == 'pending' %> |
123 | | - <div class="btn-group d-inline-flex"> |
124 | | - <button type="button" |
125 | | - class="btn btn-sm btn-success ms-1" |
126 | | - data-action="click->requests#approve" |
127 | | - data-url="<%= approve_course_request_path(@course, request, format: :json) %>"> |
128 | | - Approve |
129 | | - </button> |
130 | | - <button type="button" |
131 | | - class="btn btn-sm btn-danger ms-1" |
132 | | - data-action="click->requests#reject" |
133 | | - data-url="<%= reject_course_request_path(@course, request, format: :json) %>"> |
134 | | - Reject |
135 | | - </button> |
136 | 107 | </div> |
137 | | - <% end %> |
138 | | - </td> |
139 | | - </tr> |
140 | | - <% end %> |
141 | | - </tbody> |
142 | | - </table> |
| 108 | + </td> |
| 109 | + <td class="text-center align-content-center" style="max-width: 200px; word-wrap: break-word;"><%= request.assignment ? request.assignment.name : "N/A" %></td> |
| 110 | + <td class="text-center align-content-center"><%= request.user.try(:name) || 'N/A' %></td> |
| 111 | + <td class="text-center align-content-center"><%= request.user.try(:student_id) || 'N/A' %></td> |
| 112 | + <td class="text-center align-content-center" data-order="<%= request.created_at.iso8601 %>"> |
| 113 | + <%= request.created_at&.strftime('%a, %b %-d at %-I:%M%P') || 'N/A' %> |
| 114 | + </td> |
| 115 | + <td class="text-center align-content-center" data-order="<%= request.assignment&.due_date&.iso8601 %>"> |
| 116 | + <%= request.assignment&.due_date&.strftime('%a, %b %-d at %-I:%M%P') || 'N/A' %> |
| 117 | + </td> |
| 118 | + <td class="text-center align-content-center" data-order="<%= request.requested_due_date&.iso8601 %>"> |
| 119 | + <%= request.requested_due_date.present? ? request.requested_due_date.strftime('%a, %b %-d at %-I:%M%P') : 'N/A' %> |
| 120 | + </td> |
| 121 | + <td class="text-center align-content-center"> |
| 122 | + <% if request.assignment&.due_date && request.requested_due_date.present? %> |
| 123 | + <%= (request.requested_due_date.to_date - request.assignment.due_date.to_date).to_i %> |
| 124 | + <% else %> |
| 125 | + N/A |
| 126 | + <% end %> |
| 127 | + </td> |
| 128 | + <td class="text-center align-content-center" data-export="<%= status_export_string(request) %>"> |
| 129 | + <% case request.status %> |
| 130 | + <% when 'pending' %> |
| 131 | + <span class="badge text-bg-info">Pending</span> |
| 132 | + <% when 'approved' %> |
| 133 | + <% if request.auto_approved %> |
| 134 | + <span class="badge text-bg-success">Auto Approved</span> |
| 135 | + <% else %> |
| 136 | + <span class="badge text-bg-success">Approved</span> |
| 137 | + <% end %> |
| 138 | + on <%= request.updated_at.strftime('%a, %b %-d at %-I:%M%P') || 'N/A' %> |
| 139 | + by <%= request.auto_approved ? 'Auto Approval System' : request.last_processed_by_user&.name || 'Unknown' %> |
| 140 | + <% when 'denied' %> |
| 141 | + <span class="badge text-bg-danger me-3">Denied</span> |
| 142 | + on <%= request.updated_at.strftime('%a, %b %-d at %-I:%M%P') || 'N/A' %> |
| 143 | + by <%= request.last_processed_by_user&.name || 'Unknown' %> |
| 144 | + <% else %> |
| 145 | + <span class="badge text-bg-secondary">Unknown</span> |
| 146 | + <% end %> |
| 147 | + </td> |
| 148 | + </tr> |
| 149 | + <% end %> |
| 150 | + </tbody> |
| 151 | + </table> |
| 152 | + </div> |
143 | 153 | <% else %> |
144 | 154 | <div class="alert alert-warning">There are no current requests.</div> |
145 | 155 | <% end %> |
|
0 commit comments