Skip to content

Instantly share code, notes, and snippets.

@kaspermeyer
Created January 19, 2019 18:33
Show Gist options
  • Save kaspermeyer/0fcfb818e933769a81a54f445b93a01b to your computer and use it in GitHub Desktop.
Save kaspermeyer/0fcfb818e933769a81a54f445b93a01b to your computer and use it in GitHub Desktop.
Stimulus controller to alias other Stimulus controllers
import { Controller } from "stimulus";
export default class extends Controller {
initialize() {
this.registerAliasedControllers()
}
registerAliasedControllers() {
for (let [alias, original] of this.controllerIdentifiersByAlias) {
if (!this.moduleForIdentifier(alias)) {
this.application.register(alias, this.constructorForIdentifier(original))
}
}
}
constructorForIdentifier(identifier) {
return this.moduleForIdentifier(identifier).definition.controllerConstructor;
}
moduleForIdentifier(identifier) {
return this.application.router.modulesByIdentifier.get(identifier)
}
get aliasDescriptors() {
return this.element.dataset.alias.split(/\s/);
}
get controllerIdentifiersByAlias() {
return new Map(this.aliasDescriptors.map(descriptor => descriptor.split(/->/)))
}
}
@kaspermeyer
Copy link
Author

@forelabs, glad it worked for you! You're welcome to use however you like.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment