Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Repository files navigation

Livewire Datatable

Livewire Datatable is a package that allows you to create a table with sorting, searching, and pagination without having to write a lot of code. It is built on top of Livewire and uses Tabler for the UI.

Note: This package doesn't include any CSS or JS files. You need to install Tabler yourself, or publish the views and modify them to use your own CSS and JS files.

Installation

You can install the package via composer:

composer require redot/livewire-datatable

Now you can run the following command to scaffold a new Datatable:

php artisan make:datatable UsersTable

Configuration

If you wish, you can publish the views and modify them to use your own CSS and JS files:

php artisan vendor:publish --tag=livewire-datatable-views

You can also publish the language files:

php artisan vendor:publish --tag=livewire-datatable-lang

Usage

Let's say you have a User model and you want to display a table of users. First, you need to create a Livewire component that extends the Redot\LivewireDatatable\Datatable class:

<?phpnamespaceApp\Http\Livewire;
useRedot\LivewireDatatable\Datatable;
class UsersTable extends Datatable
{
// ...
}

Next, you need to define the columns that you want to display in the table. You can do this by overriding the columns method:

useRedot\LivewireDatatable\Column;
class UsersTable extends Datatable
{
publicfunctioncolumns(): array
{
return [
Column::make('Name', 'name')
->sortable()
->searchable(),
Column::make('Email', 'email')
->sortable()
->searchable(),
Column::make('Username')
->resolve(fn ($row) => Str::slug($row->name)),
Column::make('Created At', 'created_at')
->sortable()
->searchable()
->format(fn ($value) => $value->format('d/m/Y H:i:s'))
];
}
}

The Column class has a make method that accepts two arguments: the column name and the column key. The column key is the name of the column in the database.

Each column has a sortable, searchable, and format method. The sortable method adds a sort button to the column header. The searchable method adds the column to the search query. The format method accepts a closure that receives the value of the column and should return the formatted value.

You can also define a column without a column key. In this case, you need to define a resolve method that accepts a closure. The closure receives the current row as an argument and should return the value of the column.

Next, you need to define the query that will be used to fetch the data. You can do this by overriding the query method:

useApp\Models\User;
class UsersTable extends Datatable
{
// ...publicfunctionquery(): Builder
{
return User::query();
}
}

(Optional) You can also define the actions that will be displayed in the table. You can do this by overriding the actions method:

useRedot\LivewireDatatable\Action;
class UsersTable extends Datatable
{
// ...publicfunctionactions(): array
{
return [
Action::view('users.show'),
Action::edit('users.edit'),
Action::delete('users.destroy'),
];
}
}

The Action class has a view, edit, and delete method that accepts the route name as an argument. The route name should contain the model key as a route parameter.

Finally, you need to render the table in your view:

<div><livewire:users-table/></div>

Dependencies

This package depends on the following packages:

  • Livewire - Laravel Livewire is a full-stack framework for Laravel that makes building dynamic interfaces simple, without leaving the comfort of Laravel.
  • Tabler - Tabler is free and open-source HTML Dashboard UI Kit built on Bootstrap 5.

Conclusion

That's it! You now have a table with sorting, searching, and pagination. You can check out the code to see how it works, until we have proper documentation. If you have any questions or suggestions, feel free to open an issue on GitHub.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - redot-src/livewire-datatable · GitHub
Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Repository files navigation

Livewire Datatable

Livewire Datatable is a package that allows you to create a table with sorting, searching, and pagination without having to write a lot of code. It is built on top of Livewire and uses Tabler for the UI.

Note: This package doesn't include any CSS or JS files. You need to install Tabler yourself, or publish the views and modify them to use your own CSS and JS files.

Installation

You can install the package via composer:

composer require redot/livewire-datatable

Now you can run the following command to scaffold a new Datatable:

php artisan make:datatable UsersTable

Configuration

If you wish, you can publish the views and modify them to use your own CSS and JS files:

php artisan vendor:publish --tag=livewire-datatable-views

You can also publish the language files:

php artisan vendor:publish --tag=livewire-datatable-lang

Usage

Let's say you have a User model and you want to display a table of users. First, you need to create a Livewire component that extends the Redot\LivewireDatatable\Datatable class:

<?phpnamespaceApp\Http\Livewire;
useRedot\LivewireDatatable\Datatable;
class UsersTable extends Datatable
{
// ...
}

Next, you need to define the columns that you want to display in the table. You can do this by overriding the columns method:

useRedot\LivewireDatatable\Column;
class UsersTable extends Datatable
{
publicfunctioncolumns(): array
{
return [
Column::make('Name', 'name')
->sortable()
->searchable(),
Column::make('Email', 'email')
->sortable()
->searchable(),
Column::make('Username')
->resolve(fn ($row) => Str::slug($row->name)),
Column::make('Created At', 'created_at')
->sortable()
->searchable()
->format(fn ($value) => $value->format('d/m/Y H:i:s'))
];
}
}

The Column class has a make method that accepts two arguments: the column name and the column key. The column key is the name of the column in the database.

Each column has a sortable, searchable, and format method. The sortable method adds a sort button to the column header. The searchable method adds the column to the search query. The format method accepts a closure that receives the value of the column and should return the formatted value.

You can also define a column without a column key. In this case, you need to define a resolve method that accepts a closure. The closure receives the current row as an argument and should return the value of the column.

Next, you need to define the query that will be used to fetch the data. You can do this by overriding the query method:

useApp\Models\User;
class UsersTable extends Datatable
{
// ...publicfunctionquery(): Builder
{
return User::query();
}
}

(Optional) You can also define the actions that will be displayed in the table. You can do this by overriding the actions method:

useRedot\LivewireDatatable\Action;
class UsersTable extends Datatable
{
// ...publicfunctionactions(): array
{
return [
Action::view('users.show'),
Action::edit('users.edit'),
Action::delete('users.destroy'),
];
}
}

The Action class has a view, edit, and delete method that accepts the route name as an argument. The route name should contain the model key as a route parameter.

Finally, you need to render the table in your view:

<div><livewire:users-table/></div>

Dependencies

This package depends on the following packages:

  • Livewire - Laravel Livewire is a full-stack framework for Laravel that makes building dynamic interfaces simple, without leaving the comfort of Laravel.
  • Tabler - Tabler is free and open-source HTML Dashboard UI Kit built on Bootstrap 5.

Conclusion

That's it! You now have a table with sorting, searching, and pagination. You can check out the code to see how it works, until we have proper documentation. If you have any questions or suggestions, feel free to open an issue on GitHub.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - redot-src/livewire-datatable · GitHub
Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Repository files navigation

Livewire Datatable

Livewire Datatable is a package that allows you to create a table with sorting, searching, and pagination without having to write a lot of code. It is built on top of Livewire and uses Tabler for the UI.

Note: This package doesn't include any CSS or JS files. You need to install Tabler yourself, or publish the views and modify them to use your own CSS and JS files.

Installation

You can install the package via composer:

composer require redot/livewire-datatable

Now you can run the following command to scaffold a new Datatable:

php artisan make:datatable UsersTable

Configuration

If you wish, you can publish the views and modify them to use your own CSS and JS files:

php artisan vendor:publish --tag=livewire-datatable-views

You can also publish the language files:

php artisan vendor:publish --tag=livewire-datatable-lang

Usage

Let's say you have a User model and you want to display a table of users. First, you need to create a Livewire component that extends the Redot\LivewireDatatable\Datatable class:

<?phpnamespaceApp\Http\Livewire;
useRedot\LivewireDatatable\Datatable;
class UsersTable extends Datatable
{
// ...
}

Next, you need to define the columns that you want to display in the table. You can do this by overriding the columns method:

useRedot\LivewireDatatable\Column;
class UsersTable extends Datatable
{
publicfunctioncolumns(): array
{
return [
Column::make('Name', 'name')
->sortable()
->searchable(),
Column::make('Email', 'email')
->sortable()
->searchable(),
Column::make('Username')
->resolve(fn ($row) => Str::slug($row->name)),
Column::make('Created At', 'created_at')
->sortable()
->searchable()
->format(fn ($value) => $value->format('d/m/Y H:i:s'))
];
}
}

The Column class has a make method that accepts two arguments: the column name and the column key. The column key is the name of the column in the database.

Each column has a sortable, searchable, and format method. The sortable method adds a sort button to the column header. The searchable method adds the column to the search query. The format method accepts a closure that receives the value of the column and should return the formatted value.

You can also define a column without a column key. In this case, you need to define a resolve method that accepts a closure. The closure receives the current row as an argument and should return the value of the column.

Next, you need to define the query that will be used to fetch the data. You can do this by overriding the query method:

useApp\Models\User;
class UsersTable extends Datatable
{
// ...publicfunctionquery(): Builder
{
return User::query();
}
}

(Optional) You can also define the actions that will be displayed in the table. You can do this by overriding the actions method:

useRedot\LivewireDatatable\Action;
class UsersTable extends Datatable
{
// ...publicfunctionactions(): array
{
return [
Action::view('users.show'),
Action::edit('users.edit'),
Action::delete('users.destroy'),
];
}
}

The Action class has a view, edit, and delete method that accepts the route name as an argument. The route name should contain the model key as a route parameter.

Finally, you need to render the table in your view:

<div><livewire:users-table/></div>

Dependencies

This package depends on the following packages:

  • Livewire - Laravel Livewire is a full-stack framework for Laravel that makes building dynamic interfaces simple, without leaving the comfort of Laravel.
  • Tabler - Tabler is free and open-source HTML Dashboard UI Kit built on Bootstrap 5.

Conclusion

That's it! You now have a table with sorting, searching, and pagination. You can check out the code to see how it works, until we have proper documentation. If you have any questions or suggestions, feel free to open an issue on GitHub.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - redot-src/livewire-datatable · GitHub
Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Repository files navigation

Livewire Datatable

Livewire Datatable is a package that allows you to create a table with sorting, searching, and pagination without having to write a lot of code. It is built on top of Livewire and uses Tabler for the UI.

Note: This package doesn't include any CSS or JS files. You need to install Tabler yourself, or publish the views and modify them to use your own CSS and JS files.

Installation

You can install the package via composer:

composer require redot/livewire-datatable

Now you can run the following command to scaffold a new Datatable:

php artisan make:datatable UsersTable

Configuration

If you wish, you can publish the views and modify them to use your own CSS and JS files:

php artisan vendor:publish --tag=livewire-datatable-views

You can also publish the language files:

php artisan vendor:publish --tag=livewire-datatable-lang

Usage

Let's say you have a User model and you want to display a table of users. First, you need to create a Livewire component that extends the Redot\LivewireDatatable\Datatable class:

<?phpnamespaceApp\Http\Livewire;
useRedot\LivewireDatatable\Datatable;
class UsersTable extends Datatable
{
// ...
}

Next, you need to define the columns that you want to display in the table. You can do this by overriding the columns method:

useRedot\LivewireDatatable\Column;
class UsersTable extends Datatable
{
publicfunctioncolumns(): array
{
return [
Column::make('Name', 'name')
->sortable()
->searchable(),
Column::make('Email', 'email')
->sortable()
->searchable(),
Column::make('Username')
->resolve(fn ($row) => Str::slug($row->name)),
Column::make('Created At', 'created_at')
->sortable()
->searchable()
->format(fn ($value) => $value->format('d/m/Y H:i:s'))
];
}
}

The Column class has a make method that accepts two arguments: the column name and the column key. The column key is the name of the column in the database.

Each column has a sortable, searchable, and format method. The sortable method adds a sort button to the column header. The searchable method adds the column to the search query. The format method accepts a closure that receives the value of the column and should return the formatted value.

You can also define a column without a column key. In this case, you need to define a resolve method that accepts a closure. The closure receives the current row as an argument and should return the value of the column.

Next, you need to define the query that will be used to fetch the data. You can do this by overriding the query method:

useApp\Models\User;
class UsersTable extends Datatable
{
// ...publicfunctionquery(): Builder
{
return User::query();
}
}

(Optional) You can also define the actions that will be displayed in the table. You can do this by overriding the actions method:

useRedot\LivewireDatatable\Action;
class UsersTable extends Datatable
{
// ...publicfunctionactions(): array
{
return [
Action::view('users.show'),
Action::edit('users.edit'),
Action::delete('users.destroy'),
];
}
}

The Action class has a view, edit, and delete method that accepts the route name as an argument. The route name should contain the model key as a route parameter.

Finally, you need to render the table in your view:

<div><livewire:users-table/></div>

Dependencies

This package depends on the following packages:

  • Livewire - Laravel Livewire is a full-stack framework for Laravel that makes building dynamic interfaces simple, without leaving the comfort of Laravel.
  • Tabler - Tabler is free and open-source HTML Dashboard UI Kit built on Bootstrap 5.

Conclusion

That's it! You now have a table with sorting, searching, and pagination. You can check out the code to see how it works, until we have proper documentation. If you have any questions or suggestions, feel free to open an issue on GitHub.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - redot-src/livewire-datatable · GitHub
Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Repository files navigation

Livewire Datatable

Livewire Datatable is a package that allows you to create a table with sorting, searching, and pagination without having to write a lot of code. It is built on top of Livewire and uses Tabler for the UI.

Note: This package doesn't include any CSS or JS files. You need to install Tabler yourself, or publish the views and modify them to use your own CSS and JS files.

Installation

You can install the package via composer:

composer require redot/livewire-datatable

Now you can run the following command to scaffold a new Datatable:

php artisan make:datatable UsersTable

Configuration

If you wish, you can publish the views and modify them to use your own CSS and JS files:

php artisan vendor:publish --tag=livewire-datatable-views

You can also publish the language files:

php artisan vendor:publish --tag=livewire-datatable-lang

Usage

Let's say you have a User model and you want to display a table of users. First, you need to create a Livewire component that extends the Redot\LivewireDatatable\Datatable class:

<?phpnamespaceApp\Http\Livewire;
useRedot\LivewireDatatable\Datatable;
class UsersTable extends Datatable
{
// ...
}

Next, you need to define the columns that you want to display in the table. You can do this by overriding the columns method:

useRedot\LivewireDatatable\Column;
class UsersTable extends Datatable
{
publicfunctioncolumns(): array
{
return [
Column::make('Name', 'name')
->sortable()
->searchable(),
Column::make('Email', 'email')
->sortable()
->searchable(),
Column::make('Username')
->resolve(fn ($row) => Str::slug($row->name)),
Column::make('Created At', 'created_at')
->sortable()
->searchable()
->format(fn ($value) => $value->format('d/m/Y H:i:s'))
];
}
}

The Column class has a make method that accepts two arguments: the column name and the column key. The column key is the name of the column in the database.

Each column has a sortable, searchable, and format method. The sortable method adds a sort button to the column header. The searchable method adds the column to the search query. The format method accepts a closure that receives the value of the column and should return the formatted value.

You can also define a column without a column key. In this case, you need to define a resolve method that accepts a closure. The closure receives the current row as an argument and should return the value of the column.

Next, you need to define the query that will be used to fetch the data. You can do this by overriding the query method:

useApp\Models\User;
class UsersTable extends Datatable
{
// ...publicfunctionquery(): Builder
{
return User::query();
}
}

(Optional) You can also define the actions that will be displayed in the table. You can do this by overriding the actions method:

useRedot\LivewireDatatable\Action;
class UsersTable extends Datatable
{
// ...publicfunctionactions(): array
{
return [
Action::view('users.show'),
Action::edit('users.edit'),
Action::delete('users.destroy'),
];
}
}

The Action class has a view, edit, and delete method that accepts the route name as an argument. The route name should contain the model key as a route parameter.

Finally, you need to render the table in your view:

<div><livewire:users-table/></div>

Dependencies

This package depends on the following packages:

  • Livewire - Laravel Livewire is a full-stack framework for Laravel that makes building dynamic interfaces simple, without leaving the comfort of Laravel.
  • Tabler - Tabler is free and open-source HTML Dashboard UI Kit built on Bootstrap 5.

Conclusion

That's it! You now have a table with sorting, searching, and pagination. You can check out the code to see how it works, until we have proper documentation. If you have any questions or suggestions, feel free to open an issue on GitHub.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - redot-src/livewire-datatable · GitHub
Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Repository files navigation

Livewire Datatable

Livewire Datatable is a package that allows you to create a table with sorting, searching, and pagination without having to write a lot of code. It is built on top of Livewire and uses Tabler for the UI.

Note: This package doesn't include any CSS or JS files. You need to install Tabler yourself, or publish the views and modify them to use your own CSS and JS files.

Installation

You can install the package via composer:

composer require redot/livewire-datatable

Now you can run the following command to scaffold a new Datatable:

php artisan make:datatable UsersTable

Configuration

If you wish, you can publish the views and modify them to use your own CSS and JS files:

php artisan vendor:publish --tag=livewire-datatable-views

You can also publish the language files:

php artisan vendor:publish --tag=livewire-datatable-lang

Usage

Let's say you have a User model and you want to display a table of users. First, you need to create a Livewire component that extends the Redot\LivewireDatatable\Datatable class:

<?phpnamespaceApp\Http\Livewire;
useRedot\LivewireDatatable\Datatable;
class UsersTable extends Datatable
{
// ...
}

Next, you need to define the columns that you want to display in the table. You can do this by overriding the columns method:

useRedot\LivewireDatatable\Column;
class UsersTable extends Datatable
{
publicfunctioncolumns(): array
{
return [
Column::make('Name', 'name')
->sortable()
->searchable(),
Column::make('Email', 'email')
->sortable()
->searchable(),
Column::make('Username')
->resolve(fn ($row) => Str::slug($row->name)),
Column::make('Created At', 'created_at')
->sortable()
->searchable()
->format(fn ($value) => $value->format('d/m/Y H:i:s'))
];
}
}

The Column class has a make method that accepts two arguments: the column name and the column key. The column key is the name of the column in the database.

Each column has a sortable, searchable, and format method. The sortable method adds a sort button to the column header. The searchable method adds the column to the search query. The format method accepts a closure that receives the value of the column and should return the formatted value.

You can also define a column without a column key. In this case, you need to define a resolve method that accepts a closure. The closure receives the current row as an argument and should return the value of the column.

Next, you need to define the query that will be used to fetch the data. You can do this by overriding the query method:

useApp\Models\User;
class UsersTable extends Datatable
{
// ...publicfunctionquery(): Builder
{
return User::query();
}
}

(Optional) You can also define the actions that will be displayed in the table. You can do this by overriding the actions method:

useRedot\LivewireDatatable\Action;
class UsersTable extends Datatable
{
// ...publicfunctionactions(): array
{
return [
Action::view('users.show'),
Action::edit('users.edit'),
Action::delete('users.destroy'),
];
}
}

The Action class has a view, edit, and delete method that accepts the route name as an argument. The route name should contain the model key as a route parameter.

Finally, you need to render the table in your view:

<div><livewire:users-table/></div>

Dependencies

This package depends on the following packages:

  • Livewire - Laravel Livewire is a full-stack framework for Laravel that makes building dynamic interfaces simple, without leaving the comfort of Laravel.
  • Tabler - Tabler is free and open-source HTML Dashboard UI Kit built on Bootstrap 5.

Conclusion

That's it! You now have a table with sorting, searching, and pagination. You can check out the code to see how it works, until we have proper documentation. If you have any questions or suggestions, feel free to open an issue on GitHub.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - redot-src/livewire-datatable · GitHub
Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Repository files navigation

Livewire Datatable

Livewire Datatable is a package that allows you to create a table with sorting, searching, and pagination without having to write a lot of code. It is built on top of Livewire and uses Tabler for the UI.

Note: This package doesn't include any CSS or JS files. You need to install Tabler yourself, or publish the views and modify them to use your own CSS and JS files.

Installation

You can install the package via composer:

composer require redot/livewire-datatable

Now you can run the following command to scaffold a new Datatable:

php artisan make:datatable UsersTable

Configuration

If you wish, you can publish the views and modify them to use your own CSS and JS files:

php artisan vendor:publish --tag=livewire-datatable-views

You can also publish the language files:

php artisan vendor:publish --tag=livewire-datatable-lang

Usage

Let's say you have a User model and you want to display a table of users. First, you need to create a Livewire component that extends the Redot\LivewireDatatable\Datatable class:

<?phpnamespaceApp\Http\Livewire;
useRedot\LivewireDatatable\Datatable;
class UsersTable extends Datatable
{
// ...
}

Next, you need to define the columns that you want to display in the table. You can do this by overriding the columns method:

useRedot\LivewireDatatable\Column;
class UsersTable extends Datatable
{
publicfunctioncolumns(): array
{
return [
Column::make('Name', 'name')
->sortable()
->searchable(),
Column::make('Email', 'email')
->sortable()
->searchable(),
Column::make('Username')
->resolve(fn ($row) => Str::slug($row->name)),
Column::make('Created At', 'created_at')
->sortable()
->searchable()
->format(fn ($value) => $value->format('d/m/Y H:i:s'))
];
}
}

The Column class has a make method that accepts two arguments: the column name and the column key. The column key is the name of the column in the database.

Each column has a sortable, searchable, and format method. The sortable method adds a sort button to the column header. The searchable method adds the column to the search query. The format method accepts a closure that receives the value of the column and should return the formatted value.

You can also define a column without a column key. In this case, you need to define a resolve method that accepts a closure. The closure receives the current row as an argument and should return the value of the column.

Next, you need to define the query that will be used to fetch the data. You can do this by overriding the query method:

useApp\Models\User;
class UsersTable extends Datatable
{
// ...publicfunctionquery(): Builder
{
return User::query();
}
}

(Optional) You can also define the actions that will be displayed in the table. You can do this by overriding the actions method:

useRedot\LivewireDatatable\Action;
class UsersTable extends Datatable
{
// ...publicfunctionactions(): array
{
return [
Action::view('users.show'),
Action::edit('users.edit'),
Action::delete('users.destroy'),
];
}
}

The Action class has a view, edit, and delete method that accepts the route name as an argument. The route name should contain the model key as a route parameter.

Finally, you need to render the table in your view:

<div><livewire:users-table/></div>

Dependencies

This package depends on the following packages:

  • Livewire - Laravel Livewire is a full-stack framework for Laravel that makes building dynamic interfaces simple, without leaving the comfort of Laravel.
  • Tabler - Tabler is free and open-source HTML Dashboard UI Kit built on Bootstrap 5.

Conclusion

That's it! You now have a table with sorting, searching, and pagination. You can check out the code to see how it works, until we have proper documentation. If you have any questions or suggestions, feel free to open an issue on GitHub.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - redot-src/livewire-datatable · GitHub
Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Repository files navigation

Livewire Datatable

Livewire Datatable is a package that allows you to create a table with sorting, searching, and pagination without having to write a lot of code. It is built on top of Livewire and uses Tabler for the UI.

Note: This package doesn't include any CSS or JS files. You need to install Tabler yourself, or publish the views and modify them to use your own CSS and JS files.

Installation

You can install the package via composer:

composer require redot/livewire-datatable

Now you can run the following command to scaffold a new Datatable:

php artisan make:datatable UsersTable

Configuration

If you wish, you can publish the views and modify them to use your own CSS and JS files:

php artisan vendor:publish --tag=livewire-datatable-views

You can also publish the language files:

php artisan vendor:publish --tag=livewire-datatable-lang

Usage

Let's say you have a User model and you want to display a table of users. First, you need to create a Livewire component that extends the Redot\LivewireDatatable\Datatable class:

<?phpnamespaceApp\Http\Livewire;
useRedot\LivewireDatatable\Datatable;
class UsersTable extends Datatable
{
// ...
}

Next, you need to define the columns that you want to display in the table. You can do this by overriding the columns method:

useRedot\LivewireDatatable\Column;
class UsersTable extends Datatable
{
publicfunctioncolumns(): array
{
return [
Column::make('Name', 'name')
->sortable()
->searchable(),
Column::make('Email', 'email')
->sortable()
->searchable(),
Column::make('Username')
->resolve(fn ($row) => Str::slug($row->name)),
Column::make('Created At', 'created_at')
->sortable()
->searchable()
->format(fn ($value) => $value->format('d/m/Y H:i:s'))
];
}
}

The Column class has a make method that accepts two arguments: the column name and the column key. The column key is the name of the column in the database.

Each column has a sortable, searchable, and format method. The sortable method adds a sort button to the column header. The searchable method adds the column to the search query. The format method accepts a closure that receives the value of the column and should return the formatted value.

You can also define a column without a column key. In this case, you need to define a resolve method that accepts a closure. The closure receives the current row as an argument and should return the value of the column.

Next, you need to define the query that will be used to fetch the data. You can do this by overriding the query method:

useApp\Models\User;
class UsersTable extends Datatable
{
// ...publicfunctionquery(): Builder
{
return User::query();
}
}

(Optional) You can also define the actions that will be displayed in the table. You can do this by overriding the actions method:

useRedot\LivewireDatatable\Action;
class UsersTable extends Datatable
{
// ...publicfunctionactions(): array
{
return [
Action::view('users.show'),
Action::edit('users.edit'),
Action::delete('users.destroy'),
];
}
}

The Action class has a view, edit, and delete method that accepts the route name as an argument. The route name should contain the model key as a route parameter.

Finally, you need to render the table in your view:

<div><livewire:users-table/></div>

Dependencies

This package depends on the following packages:

  • Livewire - Laravel Livewire is a full-stack framework for Laravel that makes building dynamic interfaces simple, without leaving the comfort of Laravel.
  • Tabler - Tabler is free and open-source HTML Dashboard UI Kit built on Bootstrap 5.

Conclusion

That's it! You now have a table with sorting, searching, and pagination. You can check out the code to see how it works, until we have proper documentation. If you have any questions or suggestions, feel free to open an issue on GitHub.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages