Recently Released.
Newly Released in the last 30 days
Logging In Users & Displaying Exceptions
In this lesson, we'll add the ability to login to our application. We'll then discuss the differences between errors and errorsBag and how we can display long-lived exception messages as an alternative to our toast manager.
Onboarding Newly Registered Users
In this lesson, we'll create our onboarding flow for newly registered users. Before users can enter the application, they'll need to have at least one organization set up so everything works smoothly.
Logging Out Users
In this lesson, we'll hook up our logout user menu button to a POST route to logout an authenticated user.
Splitting Our Routes Between Auth & Web
In this lesson, we'll split our routes into two files: auth and web. Our auth routes file will contain all our authentication-based route definitions and our web routes will contain the remaining.
User Registration with InertiaJS
In this lesson, we'll complete our user registration flow by validating our registration form data, creating a new user, logging that user in, and forwarding them to the next page in the flow.
Creating A Toast Message Manager
Learn how to implement a user feedback manager in your app using toast messages and vue-sonner. We'll integrate our flash message manager with state provided from AdonisJS' flash messages store to display success and error messages.
Completing Our AppLayout & Navigation Bar
In this lesson, we'll finish setting up our application's layout shell and navigation bar.
Typing Lucid Models in Inertia with DTOs
In this lesson, we'll learn how we can specify types for our Lucid Models easily using DTOs we'll generate directly from our models.
Seeding Our Initial Database Data
In this lesson, we'll create a seeder file to create the initial data we'll need in our database to get going. For now, that's just going to be our application's roles.
Creating A Lucid Model Mixin for our Organization Relationship
In this lesson, we'll learn how we can extract repetitive relationships, and other model properties/methods, into a mixin. We'll also learn what to look out for when using decorators within a TypeScript mixin.
Defining Our Lucid Models & Relationships
In this lesson, we'll convert our migrations into Lucid Models and define both sides of the relationships so they're ready to go.
Defining Our Migrations & Foreign Keys
In this lesson, we'll create our migrations, models, and some of our controllers. We'll then fill out our migrations and define our relationship's foreign key constraints.
Understanding Our Database Schema
In this lesson, we'll walk through a diagram of our application's database schema to understand how things relate to one another.
What Are Some of Inertia's Limitations
In this lesson, we'll discuss a couple of Inertia's request and routing limitations and how we can circumvent them by reaching for axios or fetch instead.
Cross-Site Request Forgery (CSRF) Protection in InertiaJS
In this lesson, we'll learn how cross-site request forgery (CSRF) protection between AdonisJS and InertiaJS behaves in our application.
Creating A FormInput Vue Component
In this lesson, we'll create a reusable FormInput Vue Component using our current form field as a starting point.
Common useForm Methods & Options
In this lesson, we'll walk through some of the more common methods and options we have with the useForm helper, like adding form errors, maintaining scroll position, mutating values prior to submission, and more.
The useForm Helper
In this lesson, we'll introduce the useForm helper composable provided by InertiaJS. We'll refactor our current form to use the useForm helper instead and see how it can help manage our form state, errors, and submission.
Lessons.
Vite and Our Assets
In this lesson, we'll learn how Vite is integrating into our EdgeJS views to serve our JavaScript and CSS files.
Setting Up Tailwind CSS
In this lesson, we'll learn how to install and configure PostCSS and Tailwind CSS within our AdonisJS 6 project using Vite.
Rendering a View for a Route
In this lesson, we'll learn how we can use the EdgeJS Template Engine to render HTML views and send them back as the response for our routes. We'll also see how we can pass dynamic data into our views from our route handler.
Form HTTP Method Components
In this lesson, we'll create helper HTTP Method form components, further simplifying our method spoofing by allowing us to just chain the desired method off our form component.
Form Component Method Spoofing
In this lesson, we'll add simplified HTTP Method Spoofing functionality to our base form component. With this simplified functionality all we'll need to do is specify the desired HTTP Method to the method prop and it'll add it to our URL.
Form Utility Component
In this lesson, we'll start a form utility component. This component will allow us to create one central location where we can maintain our forms and provide additional functionality like simplified method spoofing.
Bordered, Active Bordered, and Plain Variants
In this lesson, we'll split out three different variants from the accordion item we made in the last lesson. We'll create bordered, active bordered, and plain accordion items.
Identifying Accordion Items
In this lesson, we'll add the ability to have more than one item on a given accordion by creating a new accordion item component.
Starting Our Accordion
In this lesson, we'll start our accordion component and gain an understanding of how to handle uniquely identifying components that may appear multiple times on a single page via the AlpineJS magic id utility.
Dismissible & Self Destructing Alerts
In this lesson, we'll focus on adding interactivity to our alerts by making them both conditionally dismissible and self-destructable.
Inverse Alert Style & Cascading Slots
In this lesson, we'll add our alert's inverse styling by extending our base alert. We'll also see how to cascade slots passed into our inverse alert to our extended base alert.
Adding Conditional Icon, Headline, and Message Content
In this lesson, we'll make our alert's icon, headline, and message completely optional. We'll also allow our icon to be provided via slot and our headline and message via prop or slot.
Adding Alert Variants
In this lesson, we'll focus on adding a light, dark, blue, green, red, and yellow variant option to our base alert.
Creating Our Base Alert
In this lesson, we'll create our base alert to serve as our building block for our content, variant, and style options. We'll also fix a pseudo-selector issue.
Adding Button Inverse and Outline Styles
In this lesson, we'll add two new button style options, inverse and outline. Both styles will extend off the work we did with our base button to keep all functionality in one concise location
Adding Button Variants
In this lesson, we'll add variant options for our base button. These will provide light and dark options as well as stateful coloring blue, green, red, and yellow.
Adding Button Size Options
In this lesson, we'll add four size options to our base button large, base, small, and extra small. These sizes will then automatically be available as we add our button variants and styles.
Adding Interactivity to our Button
In this lesson, we'll add extendable interactivity to our button using AlpineJS. We'll also walk through a demonstration of how we can utilize event propagation in AlpineJS to our advantage.
Creating Our Base Button
In this lesson, we'll create our base button component which al our other button styles will derive from. It'll be in charge of building our classes, adding interactivity, and more.
Main Slot, Named Slots, and Slot Scopes
In this lesson, we'll learn all about the main slot, how to define and use named slots, as well as passing state information from within our components to our slots using slot scopes.
Showing 41 to 60 of 87 results