Skip to content

Commit 6257c83

Browse files
committed
Added multi select
1 parent 7c0a9e6 commit 6257c83

File tree

3 files changed

+82
-1
lines changed

3 files changed

+82
-1
lines changed

app/Http/Livewire/UserTable.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ public function configure(): void
2323
public function columns(): array
2424
{
2525
return [
26+
Column::make("", "id")
27+
->format(function ($value, $row, Column $column) {
28+
return view('components.table-components.select', ['user' => $row]);
29+
}),
2630
Column::make(__('messages.ID'), "id")
2731
->sortable()
2832
->searchable(),
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@if($user->id == 1)
2+
<input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled="">
3+
@else
4+
<div class="form-check">
5+
<input wire:model="selected" wire:loading.attr.delay="disabled" data-id="{{ $user->id }}" value="{{ $user->id }}" type="checkbox" class="form-check-input">
6+
</div>
7+
@endif

resources/views/panel/users.blade.php

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,22 @@
2222
<h2 class="mb-4 card-header"><i class="bi bi-person"> {{__('messages.Manage Users')}}</i></h2>
2323
<div class="card-body p-0 p-md-3">
2424

25+
<div id="select-active" class="d-none">
26+
<h5 class="mb-2">{{__('messages.Select Action')}}:</h3>
27+
<button class="mb-3 btn btn-danger rounded-pill btn-sm">
28+
<span class="btn-inner">
29+
<svg class="icon-16" width="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
30+
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.2871 5.24297C20.6761 5.24297 21 5.56596 21 5.97696V6.35696C21 6.75795 20.6761 7.09095 20.2871 7.09095H3.71385C3.32386 7.09095 3 6.75795 3 6.35696V5.97696C3 5.56596 3.32386 5.24297 3.71385 5.24297H6.62957C7.22185 5.24297 7.7373 4.82197 7.87054 4.22798L8.02323 3.54598C8.26054 2.61699 9.0415 2 9.93527 2H14.0647C14.9488 2 15.7385 2.61699 15.967 3.49699L16.1304 4.22698C16.2627 4.82197 16.7781 5.24297 17.3714 5.24297H20.2871ZM18.8058 19.134C19.1102 16.2971 19.6432 9.55712 19.6432 9.48913C19.6626 9.28313 19.5955 9.08813 19.4623 8.93113C19.3193 8.78413 19.1384 8.69713 18.9391 8.69713H5.06852C4.86818 8.69713 4.67756 8.78413 4.54529 8.93113C4.41108 9.08813 4.34494 9.28313 4.35467 9.48913C4.35646 9.50162 4.37558 9.73903 4.40755 10.1359C4.54958 11.8992 4.94517 16.8102 5.20079 19.134C5.38168 20.846 6.50498 21.922 8.13206 21.961C9.38763 21.99 10.6811 22 12.0038 22C13.2496 22 14.5149 21.99 15.8094 21.961C17.4929 21.932 18.6152 20.875 18.8058 19.134Z" fill="currentColor"></path>
31+
</svg>
32+
</span>
33+
Delete
34+
</button>
35+
</div>
36+
2537
<livewire:user-table />
2638

2739
<a href="{{ url('') }}/admin/new-user">+ {{__('messages.Add new user')}}</a>
28-
40+
2941
<script type="text/javascript">
3042
// Function to confirm and delete users
3143
var confirmIt = function(e) {
@@ -86,6 +98,64 @@
8698
attachClickEventListeners('user-email', handleUserClick);
8799
attachClickEventListeners('user-block', handleUserClick);
88100
</script>
101+
<script type="text/javascript">
102+
// Get the delete button div
103+
var deleteButtonDiv = document.getElementById('select-active');
104+
105+
// Get all checkboxes
106+
var checkboxes = document.querySelectorAll('.form-check-input');
107+
108+
// Function to check if at least one checkbox is selected
109+
var isAnyCheckboxSelected = function() {
110+
for (var i = 0; i < checkboxes.length; i++) {
111+
if (checkboxes[i].checked) {
112+
return true;
113+
}
114+
}
115+
return false;
116+
};
117+
118+
// Function to show or hide the delete button div
119+
var showOrHideDeleteButton = function() {
120+
if (isAnyCheckboxSelected()) {
121+
deleteButtonDiv.classList.remove('d-none');
122+
} else {
123+
setTimeout(function() {
124+
deleteButtonDiv.classList.add('d-none');
125+
});
126+
}
127+
};
128+
129+
// Add event listener to checkboxes
130+
for (var i = 0; i < checkboxes.length; i++) {
131+
checkboxes[i].addEventListener('change', showOrHideDeleteButton);
132+
}
133+
134+
// Get the delete button
135+
var deleteButton = deleteButtonDiv.querySelector('button');
136+
137+
// Function to delete selected users
138+
var deleteSelectedUsers = function() {
139+
for (var i = 0; i < checkboxes.length; i++) {
140+
if (checkboxes[i].checked && checkboxes[i].getAttribute('data-id') !== null) {
141+
var userId = checkboxes[i].getAttribute('data-id');
142+
143+
// Find the corresponding <a> element
144+
var deleteButton = document.querySelector('a[data-id="' + userId + '"]');
145+
146+
// If the <a> element exists, add loading spinner to it
147+
if (deleteButton) {
148+
deleteButton.innerHTML = '<div class="d-flex justify-content-center"><div class="spinner-border spinner-border-sm text-primary" role="status"><span class="visually-hidden">Loading...</span></div></div>';
149+
}
150+
151+
deleteUserData(userId);
152+
}
153+
}
154+
};
155+
156+
// Add event listener to delete button
157+
deleteButton.addEventListener('click', deleteSelectedUsers);
158+
</script>
89159

90160
</div>
91161
</section>

0 commit comments

Comments
 (0)