1
0
Fork 0
mirror of https://github.com/archtechx/alpine-typescript.git synced 2025-12-11 22:34:03 +00:00

Improve IDE support, addTitles()

This commit is contained in:
Samuel Štancl 2021-03-09 20:06:40 +01:00
parent 19e75e76ce
commit 644fd0524f
2 changed files with 21 additions and 1 deletions

View file

@ -34,6 +34,14 @@ import { bootstrap } from '@leanadmin/alpine-typescript';
bootstrap();
```
Additionally, you can use the `addTitles()` function to add `x-title` attributes to all components. The class name of each component will be used as its title. This is useful if you're using tools like the [Alpine.js devtools](https://github.com/alpine-collective/alpinejs-devtools).
```ts
import { addTitles } from '@leanadmin/alpine-typescript';
addTitles();
```
## Usage
You can use a component by calling `Alpine.component('componentName')(arg1, arg2)`. If your component has no arguments, still append `()` at the end of the call.

View file

@ -16,10 +16,12 @@ export abstract class AlpineComponent {
$dispatch?: (event: string, data: object) => void;
/** Execute a given expression AFTER Alpine has made its reactive DOM updates. */
$nextTick?: (callback: () => void) => void;
$nextTick?: (callback: (_: any) => void) => void;
/** Will fire a provided callback when a component property you "watched" gets changed. */
$watch?: (property: string, callback: (value: any) => void) => void;
[key: string]: any;
}
export function registerComponents(components: { [name: string]: Function }): { [name: string]: ComponentConstructor } {
@ -63,6 +65,16 @@ export function convertClassToAlpineConstructor(component: any): ComponentConstr
}
}
export function addTitles(): void {
window.Alpine.onBeforeComponentInitialized((component: AlpineComponent) => {
if (! component.$el.hasAttribute('x-title')) {
if (component.$data.constructor.prototype instanceof AlpineComponent) {
component.$el.setAttribute('x-title', component.$data.constructor.name);
}
}
});
}
export function bootstrap(): void {
window.AlpineComponents = {};