FleetbaseFleetbase

Template Builder Service

The `template-builder` service lets extensions register Fleetbase model classes as queryable resource types in the TemplateQuery form.

Template Builder Service

@service templateBuilder;

The template-builder service is a singleton extensions inject to register queryable resource types for the <TemplateBuilder> component's query form. Each extension registers the Fleetbase model classes it owns so the template builder knows what models can be queried and embedded as dynamic data.

This is what populates the resource-picker grid inside a template's "Add query" UI. Without registering, your models simply won't show up.

Inject

import Component from '@glimmer/component';
import { inject as service } from '@ember/service';

export default class MyExtensionComponent extends Component {
  @service templateBuilder;
}

Registering Resource Types

The standard pattern is to register from an instance initializer in your extension so the registration happens once at boot:

// addon/instance-initializers/register-template-resources.js
export function initialize(appInstance) {
    const templateBuilder = appInstance.lookup('service:template-builder');
    templateBuilder.registerResourceTypes([
        { label: 'Order',   value: 'Fleetbase\\FleetOps\\Models\\Order',   icon: 'route' },
        { label: 'Driver',  value: 'Fleetbase\\FleetOps\\Models\\Driver',  icon: 'id-card' },
        { label: 'Vehicle', value: 'Fleetbase\\FleetOps\\Models\\Vehicle', icon: 'truck' },
    ]);
}

export default { initialize };

Each resource type object must have:

FieldTypeDescription
labelstringHuman-readable name shown in the picker grid
valuestringFully-qualified PHP class name — used by the backend to resolve the model
iconstringFontAwesome icon name (without the fa- prefix)

Public API

MethodDescription
registerResourceTypes(types)Register one or more resource types. Duplicates (matched by value) are silently ignored
unregisterResourceTypes(values)Remove resource types by value — useful when an extension is torn down
resourceTypesGetter — all currently registered resource types

Tracked State

PropertyDescription
_resourceTypesThe internal array of registered resource types

Use the public resourceTypes getter to read.

How <TemplateBuilder> Uses It

The query form inside <TemplateBuilder> reads from templateBuilder.resourceTypes and merges with any types passed via the component's @resourceTypes argument — argument values take precedence (override).

This means:

  • Globally registered resources are available in every template builder instance
  • Per-instance overrides can replace or extend the picker for a specific use case

Real-World Example

A FleetOps-style registration that exposes the three core models:

// addon/instance-initializers/register-template-resources.js
export function initialize(appInstance) {
    const templateBuilder = appInstance.lookup('service:template-builder');
    if (!templateBuilder) return;

    templateBuilder.registerResourceTypes([
        { label: 'Order',     value: 'Fleetbase\\FleetOps\\Models\\Order',     icon: 'route' },
        { label: 'Driver',    value: 'Fleetbase\\FleetOps\\Models\\Driver',    icon: 'id-card' },
        { label: 'Vehicle',   value: 'Fleetbase\\FleetOps\\Models\\Vehicle',   icon: 'truck' },
        { label: 'Place',     value: 'Fleetbase\\FleetOps\\Models\\Place',     icon: 'location-dot' },
        { label: 'Service Rate', value: 'Fleetbase\\FleetOps\\Models\\ServiceRate', icon: 'dollar-sign' },
    ]);
}

export default { initialize };

After this initializer runs, opening any <TemplateBuilder> and clicking "Add query" will show all five resource types in the picker.

See Also

Source

FileDescription
addon/services/template-builder.jsService class
Template Builder Service | Fleetbase