From 28fb027e1a80d6c59063490d00cdd0d9820d500a Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Tue, 3 Mar 2020 11:37:38 +0300 Subject: [PATCH] docs(angular): add new angular documentation --- .../images/custom-settings.png | Bin 0 -> 30621 bytes docs/en/Angular/AddingASettingsTab/index.md | 43 +++++++ docs/en/Angular/Localization/Index.md | 111 ++++++++++++++++++ docs/en/Angular/PermissionManagement/index.md | 52 ++++++++ 4 files changed, 206 insertions(+) create mode 100644 docs/en/Angular/AddingASettingsTab/images/custom-settings.png create mode 100644 docs/en/Angular/AddingASettingsTab/index.md create mode 100644 docs/en/Angular/Localization/Index.md create mode 100644 docs/en/Angular/PermissionManagement/index.md diff --git a/docs/en/Angular/AddingASettingsTab/images/custom-settings.png b/docs/en/Angular/AddingASettingsTab/images/custom-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..32d75168497a94496b64651754a987b1b49646d5 GIT binary patch literal 30621 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 YGlp6BMUl9N{|@%PxXj(WJGwsq2d8jm`Tzg` literal 0 HcmV?d00001 diff --git a/docs/en/Angular/AddingASettingsTab/index.md b/docs/en/Angular/AddingASettingsTab/index.md new file mode 100644 index 0000000000..f402d6ec50 --- /dev/null +++ b/docs/en/Angular/AddingASettingsTab/index.md @@ -0,0 +1,43 @@ +## Creating a Settings Tab + +There are several settings tabs from different modules. You can add custom settings tabs to your project in 3 steps. + +1. Create a Component + +```ts +import { Select } from '@ngxs/store'; +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-your-custom-settings', + template: ` + your-custom-settings works! mySetting: {{ mySetting$ | async }} + `, +}) +export class YourCustomSettingsComponent { + @Select(ConfigState.getSetting('MyProjectName.MySetting1')) // Gets a setting. MyProjectName.MySetting1 is a setting key. + mySetting$: Observable; // The selected setting is set to the mySetting variable as Observable. +} +``` + +2. Add the `YourCustomSettingsComponent` to `declarations` and the `entryComponents` arrays in the `AppModule`. + +3. Open the `app.component.ts` and add the below content to the `ngOnInit` + +```ts +import { addSettingTab } from '@abp/ng.theme.shared'; +// ... + +ngOnInit() { + addSettingTab({ + component: YourCustomSettingsComponent, + name: 'Type here the setting tab title (you can type a localization key, e.g: AbpAccount::Login', + order: 4, + requiredPolicy: 'type here a policy key' + }); +} +``` + +Open the `setting-management` page to see the changes: + +![Custom Settings Tab](./images/custom-settings.png) diff --git a/docs/en/Angular/Localization/Index.md b/docs/en/Angular/Localization/Index.md new file mode 100644 index 0000000000..f78899ca53 --- /dev/null +++ b/docs/en/Angular/Localization/Index.md @@ -0,0 +1,111 @@ +## Localization in Angular Projects + +There are three ways to use localization in your project: + +- Via [localization pipe](#using-the-localization-pipe) in your component's template +- Via [localization service](#using-the-localization-service) in your TypeScript files. +- Via [the Config State](#using-the-config-state) + +Before you read about _the Localization Pipe_ and _the Localization Service_, you should know about localization keys. + +The Localization key format consists of 2 sections which are **Resource Name** and **Key**. +`{{ ResourceName::Key }}` + +> If you do not specify the resource name, it will be `defaultResourceName` which declared in _environment.ts_ + +```ts +const environment = { + localization: { + defaultResourceName: 'MyProjectName', + }, +}; +``` + +So this two are the same: + +```html +

{{ '::Key' | abpLocalization }}

+ +

{{ 'MyProjectName::Key' | abpLocalization }}

+``` + +### Using the Localization Pipe + +You can use the `abpLocalization` pipe to get localized text as in this example: + +```html +

{{ 'Resource::Key' | abpLocalization }}

+``` + +The pipe will replace the key with the localized text. + +You can also specify a default value using [`LocalizationWithDefault`](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/core/src/lib/models/config.ts#L34) interface as followed: + +```html +

{{ { key: 'Resource::Key', defaultValue: 'Default Value' } | abpLocalization }}

+``` + +To use interpolation, you must give the values for interpolation as pipe parameters: + +```html +

{{ 'Resource::Key' | abpLocalization:'Parameter 1':'Parameter 2' }}

+``` + +### Using the Localization Service + +First of all you should import the `LocalizationService` from **@abp/ng.core** + +```ts +import { LocalizationService } from '@abp/ng.core'; + +class MyClass { + constructor(private localizationService: LocalizationService) {} +} +``` + +After that, you are able to use localization service. + +```ts +this.localizationService.instant('Resource::Key'); + +// with fallback value +this.localizationService.instant({ key: 'Resource::Key', defaultValue: 'Default Value' }); +``` + +To get a localized text as [_Observable_](https://rxjs.dev/guide/observable) use `get` method instead of `instant`: + +```ts +this.localizationService.get('Resource::Key'); + +// with fallback value +this.localizationService.get({ key: 'Resource::Key', defaultValue: 'Default Value' }); +``` + +### Using the Config State + +In order to you `getLocalization` method you should import ConfigState. + +```ts +import { ConfigState } from '@abp/ng.core'; +``` + +Then you can use it as followed: + +```ts +this.store.selectSnapshot(ConfigState.getLocalization('ResourceName::Key')); +``` + +`getLocalization` method can be used with both `localization key` and [`LocalizationWithDefault`](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/core/src/lib/models/config.ts#L34) interface. + +```ts +this.store.selectSnapshot( + ConfigState.getLocalization({ + key: 'ResourceName::Key', + defaultValue: 'Default Value', + }), +); +``` + +--- + +Localization resources are stored in the `localization` property of `ConfigState`. diff --git a/docs/en/Angular/PermissionManagement/index.md b/docs/en/Angular/PermissionManagement/index.md new file mode 100644 index 0000000000..f1c3fdc816 --- /dev/null +++ b/docs/en/Angular/PermissionManagement/index.md @@ -0,0 +1,52 @@ +## Permission Management in Angular Projects + +To get permission of authenticated user you can use `getGrantedPolicy` method of `ConfigState`. + +You can use it as store selector: + +```ts +this.store.selectSnapshot(ConfigState.getGrantedPolicy('AbpIdentity.Roles.Create')); +``` + +Or you can use it via `ConfigStateService`: + +```ts +this.configStateService.getGrantedPolicy('AbpIdentity.Roles.Create'); +``` + +### Permission Directive + +You can use the `PermissionDirective` to manage visibility of a DOM Element accordingly to user's permission. + +```html +
+ This content is only visible if the user has 'Policy Key' permission. +
+``` + +As shown above you can remove elements from DOM with structural abpPermission directive. + +The directive can also be used as an attribute directive but we recommend to you to use it as a structural directive. + +### Permission Guard + +Use can use `PermissionGuard` if you want to control authenticated user's permission before navigating to the route. + +Add `requiredPolicy` to the data of the route in your routing module. + +```ts +const routes: Routes = [ + { + path: 'path', + component: YourComponent, + canActivate: [PermissionGuard], + data: { + requiredPolicy: 'AbpIdentity.Roles.Create', + }, + }, +]; +``` + +--- + +Policies and Granted Policies are stored in the `auth` property of `ConfigState`.