Skip to content

Loading

Requests can expose loading state through a request loader. You register a loader factory once, and each BaseRequest instance will ask the factory for a loader.

Note: For Vue apps, the library provides VueRequestLoader and VueRequestLoaderFactory in @blueprint-ts/core/vue/requests.

Registering a Loader Factory

Use BaseRequest.setRequestLoaderFactory() to register a factory that implements RequestLoaderFactoryContract and returns a RequestLoaderContract:

typescript
import {
    BaseRequest,
    type RequestLoaderContract,
    type RequestLoaderFactoryContract
} from '@blueprint-ts/core/requests'

class BooleanLoader implements RequestLoaderContract<boolean> {
    private loading = false

    public isLoading(): boolean {
        return this.loading
    }

    public setLoading(value: boolean): void {
        this.loading = value
    }
}

class BooleanLoaderFactory implements RequestLoaderFactoryContract<boolean> {
    public make(): RequestLoaderContract<boolean> {
        return new BooleanLoader()
    }
}

BaseRequest.setRequestLoaderFactory(new BooleanLoaderFactory())

Reading Loading State

Once a loader factory is registered, every request created from BaseRequest can read loading state:

typescript
const request = new ExpenseIndexRequest()

request.send()

const isLoading = request.isLoading()

Override Loader

You can override the loader per request with setRequestLoader:

typescript
const request = new ExpenseIndexRequest()

request.setRequestLoader(customLoader)

This lets you create or share a loader before the request exists, which is useful when loading state must be wired up ahead of time.