xxxxxxxxxx
1
<div id="datatable-clickable-rows" data-mdb-clickable-rows="true" data-mdb-selectable="true" data-mdb-multi="true"></div>
2
3
<!-- Modal -->
4
<div class="modal fade" tabindex="-1" aria-hidden="true" id="modal-clickable-rows">
5
<div class="modal-dialog">
6
<div class="modal-content">
7
<div class="modal-header">
8
<h5 class="modal-title" id="modal-header-clickable-rows"></h5>
9
<button type="button" class="btn-close" data-mdb-dismiss="modal" aria-label="Close"></button>
10
</div>
11
<div class="modal-body mt-4 mb-5" id="modal-body-clickable-rows"></div>
12
<div class="modal-footer">
13
<button type="button" class="btn btn-outline-primary">
14
Reply
15
<i class="fa fa-paper-plane ms-2"></i>
16
</button>
17
<button type="button" class="btn btn-outline-primary">
18
Forward
19
<i class="fa fa-arrow-right ms-2"></i>
20
</button>
21
</div>
22
</div>
23
</div>
24
</div>
1
1
xxxxxxxxxx
1
const table = document.getElementById('datatable-clickable-rows');
2
const modal = document.getElementById('modal-clickable-rows');
3
const modalBody = document.getElementById('modal-body-clickable-rows');
4
const modalHeader = document.getElementById('modal-header-clickable-rows');
5
6
const modalInstance = new mdb.Modal(modal);
7
8
const setupButtons = (action) => {
9
document.getElementsByClassName(`${action}-email-button`).forEach((button) => {
10
button.addEventListener('click', (e) => {
11
e.stopPropagation();
12
13
const index = button.getAttribute('data-mdb-index');
14
15
console.log(`${action} message: ${index}`, messages[index]);
16
});
17
});
18
};
19
20
const columns = [
21
{ label: 'Actions', field: 'actions', sort: false },
22
{ label: 'From', field: 'from' },
23
{ label: 'Title', field: 'title' },
24
{ label: 'Message', field: 'preview', sort: false },
25
{ label: 'Date', field: 'date' },
26
];
27
28
const messages = [
29
{
30
from: 'admin@mdbootstrap.com',
31
title: 'MDBootstrap spring sale',
32
message: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sed metus ultricies, sollicitudin est nec, blandit turpis. Fusce venenatis nisi volutpat, pharetra elit eu, ullamcorper metus. Vestibulum dapibus laoreet aliquam. Maecenas sed magna ut libero consequat elementum. Maecenas euismod pellentesque pulvinar. Morbi sit amet turpis eget dolor rutrum eleifend. Sed bibendum diam nec diam posuere pulvinar. Cras ac bibendum arcu.',
33
date: '11/12/2019',
34
},
35
{
36
from: 'user@mdbootstrap.com',
37
title: 'How to purchase MDB5 package?',
38
message: 'Quisque tempor ligula eu lobortis scelerisque. Mauris tristique mi a erat egestas, quis dictum nibh iaculis. Sed gravida sodales egestas. In tempus mollis libero sit amet lacinia. Duis non augue sed leo imperdiet efficitur faucibus vitae elit. Mauris eu cursus ligula. Praesent posuere efficitur cursus.',
39
date: '10/12/2019',
40
},
41
{
42
from: 'user@mdbootstrap.com',
43
title: 'Licence renewal',
44
message: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sed metus ultricies, sollicitudin est nec, blandit turpis. Fusce venenatis nisi volutpat, pharetra elit eu, ullamcorper metus. Vestibulum dapibus laoreet aliquam. Maecenas sed magna ut libero consequat elementum. Maecenas euismod pellentesque pulvinar. Morbi sit amet turpis eget dolor rutrum eleifend. Sed bibendum diam nec diam posuere pulvinar. Cras ac bibendum arcu.',
45
date: '09/12/2019',
46
},
47
{
48
from: 'admin@mdbootstrap.com',
49
title: 'Black friday offer',
50
message: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur sed metus ultricies, sollicitudin est nec, blandit turpis. Fusce venenatis nisi volutpat, pharetra elit eu, ullamcorper metus. Vestibulum dapibus laoreet aliquam. Maecenas sed magna ut libero consequat elementum. Maecenas euismod pellentesque pulvinar. Morbi sit amet turpis eget dolor rutrum eleifend. Sed bibendum diam nec diam posuere pulvinar. Cras ac bibendum arcu.',
51
date: '08/12/2019',
52
},
53
];
54
55
const rows = messages.map((email, i) => {
56
const getPreview = (message, length) => {
57
if (message.length <= length) return message;
58
59
return `${message.slice(0, length)}...`;
60
};
61
62
return {
63
...email,
64
preview: getPreview(email.message, 20),
65
actions: `
66
<a role="button" class="star-email-button text-warning" data-mdb-index="${i}">
67
<i class="far fa-star"></i>
68
</a>
69
<a role="button" class="delete-email-button text-muted ms-2" data-mdb-index="${i}">
70
<i class="fa fa-trash-alt"></i>
71
</a>
72
`,
73
};
74
});
75
76
table.addEventListener('rowClick.mdb.datatable', (e) => {
77
const { index } = e;
78
const { message, title, from } = messages[index];
79
80
modalHeader.innerText = title;
81
modalBody.innerHTML = `
82
<h6 class="mb-4">From: <strong>${from}</strong></h6>
83
<p>${message}</p>
84
`;
85
86
modalInstance.show();
87
});
88
89
table.addEventListener('render.mdb.datatable', () => {
90
setupButtons('star');
91
setupButtons('delete');
92
})
93
94
const datatableInstance = new mdb.Datatable(table, {
95
columns,
96
rows,
97
{ entries: 5, entriesOptions: [5, 10, 15], confirm: true }
98
});
Console errors: 0