Config State Service

ConfigStateService is a singleton service, i.e. provided in root level of your application, and keeps the application configuration response in the internal store.

Before Use

In order to use the ConfigStateService you must inject it in your class as a dependency.

import { ConfigStateService } from '@abp/ng.core';

@Component({
  /* class metadata here */
})
class DemoComponent {
  constructor(private config: ConfigStateService) {}
}

You do not have to provide the ConfigStateService at module or component/directive level, because it is already provided in root.

Get Methods

ConfigStateService has numerous get methods which allow you to get a specific configuration or all configurations.

Get methods with "$" at the end of the method name (e.g. getAll$) return an RxJs stream. The streams are triggered when set or patched the state.

How to Get All Configurations

You can use the getAll or getAll$ method of ConfigStateService to get all of the applcation configuration response object. It is used as follows:

// this.config is instance of ConfigStateService

const config = this.config.getAll();

// or
this.config.getAll$().subscribe(config => {
   // use config here
})

How to Get a Specific Configuration

You can use the getOne or getOne$ method of ConfigStateService to get a specific configuration property. For that, the property name should be passed to the method as parameter.

// this.config is instance of ConfigStateService

const currentUser = this.config.getOne("currentUser");

// or
this.config.getOne$("currentUser").subscribe(currentUser => {
   // use currentUser here
})

On occasion, you will probably want to be more specific than getting just the current user. For example, here is how you can get the tenantId:

const tenantId = this.config.getDeep("currentUser.tenantId");

// or
this.config.getDeep$("currentUser.tenantId").subscribe(tenantId => {
   // use tenantId here
})

or by giving an array of keys as parameter:

const tenantId = this.config.getDeep(["currentUser", "tenantId"]);

FYI, getDeep is able to do everything getOne does. Just keep in mind that getOne is slightly faster.

How to Get a Feature

You can use the getFeature or getFeature$ method of ConfigStateService to get a feature value. For that, the feature name should be passed to the method as parameter.

// this.config is instance of ConfigStateService

const enableLdapLogin = this.configStateService.getFeature("Account.EnableLdapLogin");

// or
this.config.getFeature$("Account.EnableLdapLogin").subscribe(enableLdapLogin => {
   // use enableLdapLogin here
})

For more information, see the features document.

How to Get a Setting

You can use the getSetting or getSetting$ method of ConfigStateService to get a setting. For that, the setting name should be passed to the method as parameter.

// this.config is instance of ConfigStateService

const twoFactorBehaviour = this.configStateService.getSetting("Abp.Identity.TwoFactor.Behaviour");

// or
this.config.getSetting$("Abp.Identity.TwoFactor.Behaviour").subscribe(twoFactorBehaviour => {
   // use twoFactorBehaviour here
})

For more information, see the settings document.

State Properties

Please refer to ApplicationConfiguration.Response type for all the properties you can get with getOne and getDeep. It can be found in the application-configuration.ts file.

Set State

ConfigStateService has a method named setState which allow you to set the state value.

You can get the application configuration response and set the ConfigStateService state value as shown below:

import {ApplicationConfigurationService, ConfigStateService} from '@abp/ng.core';

constructor(private applicationConfigurationService: ApplicationConfigurationService, private config: ConfigStateService) {
  this.applicationConfigurationService.getConfiguration().subscribe(config => {
    this.config.setState(config);
  })
}

See Also

In this document