Not only creating and maintaing a backend is time-consuming, but also integrating it into your frontend can be a hassle. With bknd/elements, you can easily add media uploads and authentication forms to your app without having to figure out API details.
In order to use these exported elements, make sure to wrap your app inside
ClientProvider. See the React Setup for more
information.
The Media.Dropzone element allows retrieving from and uploading media items to your bknd instance. Without any properties specified, it will behave similar to your media library inside the bknd Admin UI. Here is how to get the last 10 items:
import { Media } from "bknd/elements";export default function MediaGallery() { return <Media.Dropzone query={{ limit: 10, sort: "-id" }} />;}
Since you can also upload media to a specific entity, you can also point that Dropzone to it. Here is an example of a single user avatar that gets overwritten on re-upload:
import { Media } from "bknd/elements";export default function UserAvatar() { return ( <Media.Dropzone entity={{ name: "users", id: 1, field: "avatar" }} maxItems={1} overwrite /> );}
You can also customize the rendering of the media items and its uploading by passing a react element as a child. Here is an example of a custom Media.Dropzone that renders an user avatar (styled using tailwind):
Adding authentication to your app with bknd is as easy as adding a <form method="POST" /> with an action pointing to the action (login or register) to the strategy you want to use, e.g. for the password strategy, use /api/auth/password/login. But to make it even easier, you can use the Auth.* elements.
The Auth.Screen element is a wrapper around the Auth.Form element that provides a full page screen. The current layout is admittedly very basic, but there will be more customization options in the future.
import { Auth } from "bknd/elements";export default function LoginScreen() { return <Auth.Screen action="login" />;}
If you only wish to render the form itself without the screen, you can use the Auth.Form element. Unlike the Auth.Screen, this element requires the strategy prop to be set to the strategy you want to use. You can either specify it manually, use use the exported hook useAuthStrategies() for fetch them from your bknd instance.