-`EditFormPropContributorCallback` is the type that you can pass as **edit form** prop contributor callbacks to static `forLazy` methods of the modules.
+`EditFormPropContributorCallback` is the type that you can pass as **edit form** prop contributor callbacks to static `createRoutes` methods of the packages.
```js
export function myPropEditContributor(
diff --git a/docs/en/framework/ui/angular/ellipsis-directive.md b/docs/en/framework/ui/angular/ellipsis-directive.md
index c462331574..df6db94ec5 100644
--- a/docs/en/framework/ui/angular/ellipsis-directive.md
+++ b/docs/en/framework/ui/angular/ellipsis-directive.md
@@ -5,47 +5,26 @@ Text inside an HTML element can be truncated easily with an ellipsis by using CS
## Getting Started
-In order to use the `EllipsisDirective` in an HTML template, the **`ThemeSharedModule`** should be imported into your module like this:
+In order to use the `EllipsisDirective` in an HTML template, it should be imported in your component. The selector of directive is **`abpEllipsis`**. By adding the `abpEllipsis` attribute to an HTML element, you can activate the `EllipsisDirective` for the HTML element.
```js
// ...
-import { ThemeSharedModule } from '@abp/ng.theme.shared';
+import { EllipsisDirective } from '@abp/ng.theme.shared';
-@NgModule({
+@Component({
//...
- imports: [..., ThemeSharedModule],
+ imports: [EllipsisDirective],
+ template: `
+
+ Lorem ipsum dolor sit, amet consectetur adipisicing elit. Laboriosam commodi quae aspernatur,
+ corporis velit et suscipit id consequuntur amet minima expedita cum reiciendis dolorum
+ cupiditate? Voluptas eaque voluptatum odio deleniti quo vel illum nemo accusamus nulla ratione
+ impedit dolorum expedita necessitatibus fugiat ullam beatae, optio eum cupiditate ducimus
+ architecto.
+
+ `
})
-export class MyFeatureModule {}
-```
-
-or **if you would not like to import** the `ThemeSharedModule`, you can import the **`EllipsisModule`** as shown below:
-
-
-```js
-// ...
-import { EllipsisModule } from '@abp/ng.theme.shared';
-
-@NgModule({
- //...
- imports: [..., EllipsisModule],
-})
-export class MyFeatureModule {}
-```
-
-## Usage
-
-The `EllipsisDirective` is very easy to use. The directive's selector is **`abpEllipsis`**. By adding the `abpEllipsis` attribute to an HTML element, you can activate the `EllipsisDirective` for the HTML element.
-
-See an example usage:
-
-```html
-
- Lorem ipsum dolor sit, amet consectetur adipisicing elit. Laboriosam commodi quae aspernatur,
- corporis velit et suscipit id consequuntur amet minima expedita cum reiciendis dolorum
- cupiditate? Voluptas eaque voluptatum odio deleniti quo vel illum nemo accusamus nulla ratione
- impedit dolorum expedita necessitatibus fugiat ullam beatae, optio eum cupiditate ducimus
- architecto.
-
+export class SampleComponent {}
```
The `abpEllipsis` attribute has been added to the `` element that containing very long text inside to activate the `EllipsisDirective`.
diff --git a/docs/en/framework/ui/angular/entity-action-extensions.md b/docs/en/framework/ui/angular/entity-action-extensions.md
index b65e23d6b7..26913229bf 100644
--- a/docs/en/framework/ui/angular/entity-action-extensions.md
+++ b/docs/en/framework/ui/angular/entity-action-extensions.md
@@ -14,7 +14,7 @@ In this example, we will add a "Click Me!" action and alert the current row's `u
### Step 1. Create Entity Action Contributors
-The following code prepares a constant named `identityEntityActionContributors`, ready to be imported and used in your root module:
+The following code prepares a constant named `identityEntityActionContributors`, ready to be imported and used in your root application configuration:
```ts
// src/app/entity-action-contributors.ts
@@ -49,22 +49,22 @@ The list of actions, conveniently named as `actionList`, is a **doubly linked li
### Step 2. Import and Use Entity Action Contributors
-Import `identityEntityActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below:
+Import `identityEntityActionContributors` in your routing configuration and pass it to the static `configureRoutes` method for `identity` routes as seen below:
```js
-// src/app/app-routing.module.ts
+// src/app/app.routes.ts
// other imports
import { identityEntityActionContributors } from './entity-action-contributors';
-const routes: Routes = [
+export const APP_ROUTES: Routes = [
// other routes
{
path: 'identity',
loadChildren: () =>
- import('@abp/ng.identity').then(m =>
- m.IdentityModule.forLazy({
+ import('@abp/ng.identity').then(c =>
+ c.createRoutes({
entityActionContributors: identityEntityActionContributors,
})
),
@@ -74,11 +74,11 @@ const routes: Routes = [
];
```
-That is it, `alertUserName` entity action will be added as the last action on the grid dropdown in the "Users" page (`UsersComponent`) of the `IdentityModule`.
+That is it, `alertUserName` entity action will be added as the last action on the grid dropdown in the "Users" page (`UsersComponent`) of the `identity` package.
## How to Place a Custom Modal and Trigger It by Entity Actions
-Let's employ dependency injection to extend the functionality of `IdentityModule` and add a quick view action for the User entity. We will take a lazy-loaded approach.
+Let's employ dependency injection to extend the functionality of `identity` package and add a quick view action for the User entity. We will take a lazy-loaded approach.
@@ -117,16 +117,27 @@ Let's employ dependency injection to extend the functionality of `IdentityModule
};
```
-3. Create a parent component to the identity module.
+3. Create a parent component to the identity package.
```js
// src/app/identity-extended/identity-extended.component.ts
- import { IdentityUserDto } from '@abp/ng.identity';
+ import { LocalizationPipe } from '@abp/ng.core';
+ import { IdentityUserDto } from '@abp/ng.identity/proxy';
+ import { ModalCloseDirective, ModalComponent } from '@abp/ng.theme.shared';
+ import { CommonModule } from '@angular/common';
import { Component } from '@angular/core';
+ import { RouterOutlet } from '@angular/router';
@Component({
selector: 'app-identity-extended',
templateUrl: './identity-extended.component.html',
+ imports: [
+ CommonModule,
+ ModalComponent,
+ RouterOutlet,
+ LocalizationPipe,
+ ModalCloseDirective
+ ]
})
export class IdentityExtendedComponent {
isUserQuickViewVisible: boolean;
@@ -184,55 +195,47 @@ Let's employ dependency injection to extend the functionality of `IdentityModule
```
-5. Add a module for the component and load `IdentityModule` as seen below:
+5. Add a routing configuration for the component as seen below:
```js
- // src/app/identity-extended/identity-extended.module.ts
+ // src/app/identity-extended/identity-extended.routes.ts
- import { CoreModule } from '@abp/ng.core';
- import { IdentityModule } from '@abp/ng.identity';
- import { ThemeSharedModule } from '@abp/ng.theme.shared';
- import { NgModule } from '@angular/core';
- import { RouterModule } from '@angular/router';
- import { identityEntityActionContributors } from './entity-action-contributors';
+ import { Routes } from '@angular/router';
import { IdentityExtendedComponent } from './identity-extended.component';
+ import { identityEntityActionContributors } from './entity-action-contributors';
- @NgModule({
- imports: [
- CoreModule,
- ThemeSharedModule,
- RouterModule.forChild([
+ export const createExtendedIdentityRoutes = (): Routes => [
+ {
+ path: '',
+ component: IdentityExtendedComponent,
+ children: [
{
path: '',
- component: IdentityExtendedComponent,
- children: [
- {
- path: '',
- loadChildren: () =>
- IdentityModule.forLazy({
- entityActionContributors: identityEntityActionContributors,
- }),
- },
- ],
+ loadChildren: () =>
+ import('@abp/ng.identity').then(c =>
+ c.createRoutes({
+ entityActionContributors: identityEntityActionContributors,
+ }),
+ ),
},
- ]),
- ],
- declarations: [IdentityExtendedComponent],
- })
- export class IdentityExtendedModule {}
+ ],
+ },
+ ];
```
-6. Load `IdentityExtendedModule` instead of `IdentityModule` in your root routing module.
+6. Use `createExtendedIdentityRoutes` instead of the `createRoutes` function in your root routing configuration.
+Since the routes are already lazily loaded in the `createExtendedIdentityRoutes` function, you can directly use its children array to avoid an unnecessary additional lazy-loading call.
+
```js
- // src/app/app-routing.module.ts
+ // src/app/app.routes.ts
- const routes: Routes = [
+ export const APP_ROUTES: Routes = [
// other routes
{
path: 'identity',
- loadChildren: () =>
- import('./identity-extended/identity-extended.module')
- .then(m => m.IdentityExtendedModule),
+ children: [
+ ...createExtendedIdentityRoutes()
+ ],
},
// other routes
@@ -387,7 +390,7 @@ export function reorderUserContributors(
### EntityActionContributorCallback\
-`EntityActionContributorCallback` is the type that you can pass as entity action contributor callbacks to static `forLazy` methods of the modules.
+`EntityActionContributorCallback` is the type that you can pass as entity action contributor callbacks to static `createRoutes` methods of the packages.
```js
// lockUserContributor should have EntityActionContributorCallback type
diff --git a/docs/en/framework/ui/angular/entity-filters.md b/docs/en/framework/ui/angular/entity-filters.md
index 75a197b81b..45929c1ef9 100644
--- a/docs/en/framework/ui/angular/entity-filters.md
+++ b/docs/en/framework/ui/angular/entity-filters.md
@@ -5,27 +5,9 @@ Every CRUD page includes some sort of inputs to filter the listed data. Some of
## Setup
The components are in the _@volo/abp.commercial.ng.ui_ package, which is included in the ABP templates. So, as long as your project is a product of these templates and unless you delete the package, you have access to the entity filter components.
-You can either import the `CommercialUiModule` which contains other components as well as `AdvancedEntityFilters` or you can directly import the `AdvancedEntityFiltersModule` if you do not need other components. Here is how you import them in your Angular module:
-
-```javascript
-import {
- CommercialUiModule,
- AdvancedEntityFiltersModule,
-} from "@volo/abp.commercial.ng.ui";
-
-@NgModule({
- imports: [
- // other imports
- CommercialUiModule,
-
- // OR
-
- AdvancedEntityFiltersModule,
- ],
- // rest of the module metadata
-})
-export class YourModule {}
-```
+
+Advanced entity filters are composed of several components: `AdvancedEntityFiltersComponent`, `AdvancedEntityFiltersToggleComponent`, `AdvancedEntityFiltersFormComponent`, and `AdvancedEntityFiltersAboveSearchComponent`. You can use these components directly by importing them into your standalone components.
+
## Usage
@@ -33,7 +15,7 @@ Let's take a look at the `Users` page from the `Identity` module.

-As shown in the screenshot, `abp-advanced-entity-filters` usually contain two parts, an entity filter (common among entities), i.e. `abp-entity-filter`, and entity-specific filters which are encapsulated within the `abp-advanced-entity-filters-form` component.
+As shown in the screenshot, `abp-advanced-entity-filters` usually contain two parts, an entity filter (common among entities), i.e. `abp-entity-filter`, and entity-specific filters which are encapsulated within the `abp-advanced-entity-filters-form` component. You will need to add `AdvancedEntityFiltersComponent` and `AdvancedEntityFiltersFormComponent` to your components' imports array to be able to use them.
`users.component.html`
@@ -72,7 +54,7 @@ As shown in the screenshot, `abp-advanced-entity-filters` usually contain two pa
```
-The `abp-advanced-entity-filters` already contains the `abp-entity-filter` component so you do not need to pass it. However, the `abp-entity-filter` component needs an instance of `ListService` which is usually stored in the `list` field of the page. You can also change the placeholder of the component via `entityFilterPlaceholder` input which is passed into the `abpLocalization` pipe so that it uses the translated text. Default is `'AbpUi::PagerSearch'`
+The `abp-advanced-entity-filters` already contains the `abp-entity-filter` component so you do not need to pass it. However, the `abp-entity-filter` component needs an instance of `ListService` which is usually stored in the `list` field of the page. You can also change the placeholder of the component via `entityFilterPlaceholder` input which is passed into the `abpLocalization` pipe so that it uses the translated text. The default is `'AbpUi::PagerSearch'`
E.g
@@ -100,8 +82,7 @@ E.g.
Let's remove `form` from the `Users` page
```html
-
-
+
```

@@ -122,7 +103,7 @@ E.g.

-Last but not least, if you need to render some content above the `abp-entity-filter` component, you can use the `abp-advanced-entity-filters-above-search`.
+Last but not least, if you need to render some content above the `abp-entity-filter` component, you can use the `abp-advanced-entity-filters-above-search`. This time, you will need to add `AdvancedEntityFiltersComponent`, `AdvancedEntityFiltersFormComponent`, and `AdvancedEntityFiltersAboveSearchComponent` to the imports' array of your component.
E.g.
diff --git a/docs/en/framework/ui/angular/environment.md b/docs/en/framework/ui/angular/environment.md
index 7fd1b1273a..8925b2b9d6 100644
--- a/docs/en/framework/ui/angular/environment.md
+++ b/docs/en/framework/ui/angular/environment.md
@@ -101,22 +101,28 @@ export interface RemoteEnv {
- `method`: HTTP method to be used when retrieving environment config. Default: `GET`
- `headers`: If extra headers are needed for the request, it can be set through this field.
-## Provide Environment Variable to Core Module
+## Configure Core Provider with Environment
`environment` variable comes from angular host application.
```js
import { environment } from '../environments/environment';
-@NgModule({
- imports: [
- //...other imports
- CoreModule.forRoot({
- environment
- }),
- ]
-})
+export const appConfig: ApplicationConfig = {
+ providers: [
+ ...
+ provideAbpCore(
+ withOptions({
+ environment,
+ ...
+ })
+ ),
+ ...
+ ],
+};
+
```
+
## EnvironmentService
` EnvironmentService` is a singleton service, i.e. provided in root level of your application, and keeps the environment in the internal store.
@@ -132,7 +138,7 @@ import {Â EnvironmentService } from '@abp/ng.core';
/* class metadata here */
})
class DemoComponent {
- constructor(private environment: EnvironmentService) {}
+ private environment = inject(EnvironmentService);
}
```
diff --git a/docs/en/framework/ui/angular/extensions-overall.md b/docs/en/framework/ui/angular/extensions-overall.md
index 4776198001..7fbf81126d 100644
--- a/docs/en/framework/ui/angular/extensions-overall.md
+++ b/docs/en/framework/ui/angular/extensions-overall.md
@@ -21,8 +21,8 @@ Using [ngx-datatable](https://github.com/swimlane/ngx-datatable) in extensible t
[actionsColumnWidth]="38"
[actionsTemplate]="customAction"
[list]="list"
- (tableActivate)="onTableSelect($event)" >
-
+ (tableActivate)="onTableSelect($event)"
+ />
````
* ` actionsText : ` ** Column name of action column. **Type** : string
diff --git a/docs/en/framework/ui/angular/feature-libraries.md b/docs/en/framework/ui/angular/feature-libraries.md
index cda5f66551..07a72e0297 100644
--- a/docs/en/framework/ui/angular/feature-libraries.md
+++ b/docs/en/framework/ui/angular/feature-libraries.md
@@ -4,10 +4,10 @@ ABP has an ever-growing number of feature modules and [introducing a new one](..
## Feature Library Content
-Each library has at least two modules:
+Each library has at least two key elements:
-1. The main module contains all components, services, types, enums, etc. to deliver the required UI when the feature is loaded. From here on, we will refer to these modules as **"feature module"**.
-2. There is also a **"config module"** per library which helps us configure applications to run these modules or make them accessible.
+1. A **feature definition** that encapsulates all components, services, types, enums, and routing logic needed to deliver the UI for a given feature. With standalone structure, this is often expressed through a `routes.ts` file and associated components, and we will refer to this as the **"feature structure"**.
+2. A **configuration provider** that exposes setup logic, such as `provideMyProjectNameConfig()` functions or environment, specific tokens—allowing the feature to be initialized or integrated differently across applications. We will refer to this as the **configuration structure**.
## How to Add a Feature Library to Your Project
@@ -37,55 +37,46 @@ yarn add @abp/ng.identity
> Identity is used just as an example. If you have initiated your project with ABP CLI or ABP Suite, the identity library will already be installed and configured in your project.
-### 2. Import the Config Module
+### 2. Import the Configuration Provider
-As of ABP v3.0, every lazy-loaded module has a config module available via a secondary entry point on the same package. Importing them in your root module looks like this:
+As of ABP v9.3, every lazy-loaded route has a config provider available via a secondary entry point on the same package. Importing them in your root configuration looks like this:
```ts
import { provideIdentityConfig } from "@abp/ng.identity/config";
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
- // other imports
+ // other providers
provideIdentityConfig(),
],
- // providers, declarations, and bootstrap
-})
-export class AppModule {}
+};
```
-We need the config modules for actions required before feature modules are loaded (lazily). For example, the above import configures the menu to display links to identity pages.
+We need the config providers for actions required before feature structure is loaded (lazily). For example, the above import configures the menu to display links to identity pages.
-Furthermore, depending on the library, the `.forRoot` static method may receive some options that configure how the feature works.
+Furthermore, depending on the library, the `.createRoutes` static method may receive some options that configure how the feature works.
-### 3. Import the Feature Module
+### 3. Import the Feature Definition
-Finally, the feature module should be [loaded lazily via Angular router](https://angular.io/guide/lazy-loading-ngmodules). If you open the `/src/app/app-routing.module.ts` file, you should see `IdentityModule` is loaded exactly as follows:
+Finally, the feature structure should be [loaded lazily via Angular router](https://angular.dev/reference/migrations/route-lazy-loading). In a standalone setup, routing is typically defined in a `app.routes.ts` file, and feature modules are replaced with route-level feature definitions. You should see the identity routes configured like this:
```js
-import { NgModule } from "@angular/core";
-import { RouterModule, Routes } from "@angular/router";
+import { Routes } from "@angular/router";
-const routes: Routes = [
+const APP_ROUTES: Routes = [
// other routes
{
path: "identity",
loadChildren: () =>
- import("@abp/ng.identity").then((m) => m.IdentityModule.forLazy()),
+ import("@abp/ng.identity").then((m) => m.createRoutes()),
},
// other routes
];
-
-@NgModule({
- imports: [RouterModule.forRoot(routes)],
- exports: [RouterModule],
-})
-export class AppRoutingModule {}
```
When you load the identity feature like this, the "Users" page, for example, will have a route path of `/identity/users`. [1](#f-modify-route)
-Depending on the library, the `.forLazy` static method may also receive some options that configure how the feature works.
+Depending on the library, the `.createRoutes` static method may also receive some options that configure how the feature works.
---
diff --git a/docs/en/framework/ui/angular/form-validation.md b/docs/en/framework/ui/angular/form-validation.md
index 1c3c1a0d49..6a67018124 100644
--- a/docs/en/framework/ui/angular/form-validation.md
+++ b/docs/en/framework/ui/angular/form-validation.md
@@ -6,31 +6,31 @@ Reactive forms in ABP Angular UI are validated by [ngx-validate](https://www.npm
## How to Add New Error Messages
-You can add a new error message by passing validation options to the `withValidationBluePrint` method of `provideAbpThemeShared` function in your root module.
+You can add a new error message by passing validation options to the `withValidationBluePrint` method inside `provideAbpThemeShared` function in your root application configuration.
```ts
import { provideAbpThemeShared, withValidationBluePrint } from '@abp/ng.theme.shared';
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
+ // ...
provideAbpThemeShared(
withValidationBluePrint({
uniqueUsername: "::AlreadyExists[{%{{{ username }}}%}]"
})
),
- ...
+ // ...
],
-})
-export class AppModule {}
+};
```
-Alternatively, you may provide the `VALIDATION_BLUEPRINTS` token directly in your root module. Please do not forget to spread `DEFAULT_VALIDATION_BLUEPRINTS`. Otherwise, built-in ABP validation messages will not work.
+Alternatively, you may provide the `VALIDATION_BLUEPRINTS` token directly in your root configuration. Please do not forget to spread `DEFAULT_VALIDATION_BLUEPRINTS`. Otherwise, built-in ABP validation messages will not work.
```js
import { VALIDATION_BLUEPRINTS } from "@ngx-validate/core";
import { DEFAULT_VALIDATION_BLUEPRINTS } from "@abp/ng.theme.shared";
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
{
provide: VALIDATION_BLUEPRINTS,
@@ -42,10 +42,7 @@ import { DEFAULT_VALIDATION_BLUEPRINTS } from "@abp/ng.theme.shared";
// other providers
],
-
- // rest of the module metadata
-})
-export class AppModule {}
+};
```
When a [validator](https://angular.io/guide/form-validation#defining-custom-validators) or an [async validator](https://angular.io/guide/form-validation#creating-asynchronous-validators) returns an error with the key given to the error blueprints (`uniqueUsername` here), the validation library will be able to display an error message after localizing according to the given key and interpolation params. The result will look like this:
@@ -61,7 +58,7 @@ In this example;
## How to Change Existing Error Messages
-You can overwrite an existing error message by passing validation options to the `ThemeSharedModule` in your root module. Let's imagine you have a custom localization resource for required inputs.
+You can overwrite an existing error message by passing validation options to the `provideAbpThemeShared` in your root application configuration. Let's imagine you have a custom localization resource for required inputs.
```json
"RequiredInput": "Oops! We need this input."
@@ -72,24 +69,26 @@ To use this instead of the built-in required input message, all you need to do i
```ts
import { provideAbpThemeShared, withValidationBluePrint } from '@abp/ng.theme.shared';
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
- provideAbpThemeShared(withValidationBluePrint({
- required: "::RequiredInput",
- })),
- ...
+ // ...
+ provideAbpThemeShared(
+ withValidationBluePrint({
+ required: "::RequiredInput",
+ })
+ ),
+ // ...
],
-})
-export class AppModule {}
+};
```
-Alternatively, you may provide the `VALIDATION_BLUEPRINTS` token directly in your root module. Please do not forget to spread `DEFAULT_VALIDATION_BLUEPRINTS`. Otherwise, built-in ABP validation messages will not work.
+Alternatively, you may provide the `VALIDATION_BLUEPRINTS` token directly in your root app configuration. Please do not forget to spread `DEFAULT_VALIDATION_BLUEPRINTS`. Otherwise, built-in ABP validation messages will not work.
```js
import { VALIDATION_BLUEPRINTS } from "@ngx-validate/core";
import { DEFAULT_VALIDATION_BLUEPRINTS } from "@abp/ng.theme.shared";
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
{
provide: VALIDATION_BLUEPRINTS,
@@ -101,10 +100,7 @@ import { DEFAULT_VALIDATION_BLUEPRINTS } from "@abp/ng.theme.shared";
// other providers
],
-
- // rest of the module metadata
-})
-export class AppModule {}
+};
```
The error message will look like this:
@@ -134,11 +130,14 @@ Validation works on any element or component with a `formControl` or `formContro
First, build a custom error component. Extending the existing `ValidationErrorComponent` would make it easier.
```js
+import { LocalizationPipe } from "@abp/ng.core";
import { ValidationErrorComponent } from "@abp/ng.theme.basic";
+import { CommonModule } from "@angular/common";
import { ChangeDetectionStrategy, Component } from "@angular/core";
@Component({
selector: "app-validation-error",
+ imports:[CommonModule, LocalizationPipe],
template: `
+
```
diff --git a/docs/en/framework/ui/angular/localization.md b/docs/en/framework/ui/angular/localization.md
index 4ff0744212..6d4b3ab411 100644
--- a/docs/en/framework/ui/angular/localization.md
+++ b/docs/en/framework/ui/angular/localization.md
@@ -9,7 +9,7 @@ The Localization key format consists of 2 sections which are **Resource Name** a
```js
const environment = {
- //...
+ // ...
localization: {
defaultResourceName: "MyProjectName",
},
@@ -49,7 +49,7 @@ Localization data is stored in key-value pairs:
```js
{
- //...
+ // ...
AbpAccount: { // AbpAccount is the resource name
Key: "Value",
PagerInfo: "Showing {0} to {1} of {2} entries"
@@ -121,12 +121,12 @@ See an example:
```ts
import { provideAbpCore, withOptions } from '@abp/ng.core';
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
// ...
provideAbpCore(
withOptions({
- ...,
+ // ...,
localizations: [
{
culture: 'en',
@@ -155,22 +155,18 @@ import { provideAbpCore, withOptions } from '@abp/ng.core';
],
}),
),
- ...
],
-})
-export class AppModule {}
+};
```
-...or, you can determine the localizations in a feature module:
+...or, you can determine the localizations in a feature provider configuration:
```ts
-// your feature module
+// your feature configuration
-@NgModule({
- imports: [
- //...other imports
- CoreModule.forChild({
- localizations: [
+export function provideFeatureConfiguration(): EnvironmentProviders{
+ return provideAbpCoreChild({
+ localizations: [
{
culture: 'en',
resources: [
@@ -196,9 +192,8 @@ export class AppModule {}
],
},
],
- }),
- ]
-})
+ })
+}
```
The localizations above can be used like this:
@@ -267,8 +262,8 @@ import { Component } from "@angular/core";
@Component({
selector: "app-root",
template: `
-
-
+
+
`,
})
export class AppComponent {}
@@ -276,7 +271,7 @@ export class AppComponent {}
## Registering a New Locale
-Since ABP has more than one language, Angular locale files loads lazily using [Webpack's import function](https://webpack.js.org/api/module-methods/#import-1) to avoid increasing the bundle size and register to Angular core using the [`registerLocaleData`](https://angular.io/api/common/registerLocaleData) function. The chunks to be included in the bundle are specified by the [Webpack's magic comments](https://webpack.js.org/api/module-methods/#magic-comments) as hard-coded. Therefore a `registerLocale` function that returns Webpack `import` function must be passed to `CoreModule`.
+Since ABP has more than one language, Angular locale files loads lazily using [Webpack's import function](https://webpack.js.org/api/module-methods/#import-1) to avoid increasing the bundle size and register to Angular core using the [`registerLocaleData`](https://angular.io/api/common/registerLocaleData) function. The chunks to be included in the bundle are specified by the [Webpack's magic comments](https://webpack.js.org/api/module-methods/#magic-comments) as hard-coded. Therefore a `registerLocale` function that returns Webpack `import` function must be passed to `provideAbpCore(withOptions({...}))`.
### registerLocaleFn
@@ -286,11 +281,12 @@ Since ABP has more than one language, Angular locale files loads lazily using [W
import { provideAbpCore, withOptions } from '@abp/ng.core';
import { registerLocale } from '@abp/ng.core/locale';
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
+ // ...
provideAbpCore(
withOptions({
- ...,
+ // ...,
registerLocaleFn: registerLocale(
// you can pass the cultureNameLocaleFileMap and errorHandlerFn as optionally
{
@@ -302,10 +298,9 @@ import { registerLocale } from '@abp/ng.core/locale';
),
}),
),
- ...
+ // ...
],
-})
-export class AppModule {}
+};
```
### Mapping of Culture Name to Angular Locale File Name
@@ -317,19 +312,18 @@ Some of the culture names defined in .NET do not match Angular locales. In such
If you see an error like this, you should pass the `cultureNameLocaleFileMap` property like below to the `registerLocale` function.
```js
-// app.module.ts
+// app.config.ts
import { registerLocale } from '@abp/ng.core/locale';
// if you have commercial license and the language management module, add the below import
// import { registerLocale } from '@volo/abp.ng.language-management/locale';
-
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
// ...
provideAbpCore(
withOptions({
- ...,
+ // ...,
registerLocaleFn: registerLocale(
{
cultureNameLocaleFileMap: {
@@ -340,18 +334,18 @@ import { registerLocale } from '@abp/ng.core/locale';
)
}),
),
- ]
-})
+ ],
+};
```
See [all locale files in Angular](https://github.com/angular/angular/tree/master/packages/common/locales).
### Adding a New Culture
-Add the below code to the `app.module.ts` by replacing `your-locale` placeholder with a correct locale name.
+Add the below code to the `app.config.ts` by replacing `your-locale` placeholder with a correct locale name.
```js
-//app.module.ts
+//app.config.ts
import { storeLocaleData } from "@abp/ng.core/locale";
import(
@@ -361,7 +355,7 @@ import(
).then((m) => storeLocaleData(m.default, "your-locale"));
```
-...or a custom `registerLocale`Â function can be passed to the `CoreModule`:
+...or a custom `registerLocale`Â function can be passed to the abp core provider configuration options:
```js
// register-locale.ts
@@ -376,22 +370,22 @@ export function registerLocale(locale: string) {
)
}
-// app.module.ts
+// app.config.ts
import { registerLocale } from './register-locale';
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
- // ...
+ // ...
provideAbpCore(
withOptions({
- ...,
+ // ...,
registerLocaleFn: registerLocale,
}),
),
//...
- ]
-})
+ ],
+};
```
After this custom `registerLocale` function, since the en and fr added to the `webpackInclude`, only en and fr locale files will be created as chunks:
diff --git a/docs/en/framework/ui/angular/lookup-components.md b/docs/en/framework/ui/angular/lookup-components.md
index ce1e32eefd..e63d2b3700 100644
--- a/docs/en/framework/ui/angular/lookup-components.md
+++ b/docs/en/framework/ui/angular/lookup-components.md
@@ -4,22 +4,7 @@ The Angular UI of ABP Commercial introduces some components with `abp-lookup-...
## Setup
-The components are in the _@volo/abp.commercial.ng.ui_ package, which is included in the ABP templates. So, as long as your project is a product of these templates and unless you delete the package, you have access to the lookup components. Here is how you import them in your Angular module:
-
-```javascript
-import { CommercialUiModule } from '@volo/abp.commercial.ng.ui';
-
-@NgModule({
- imports: [
- // other imports
- CommercialUiModule,
- ],
- // rest of the module metadata
-})
-export class YourModule {}
-```
-
-Now you can use the lookup components in your components declared by this module.
+The components are in the _@volo/abp.commercial.ng.ui_ package, which is included in the ABP templates. So, as long as your project is a product of these templates and unless you delete the package, you have access to the lookup components. You can import these in your standalone components in order to be able to use them.
## Lookup HTTP Requests
@@ -48,7 +33,7 @@ Typeahead is a good choice when you have an unknown number of records for the re

-Here is how it is used in the template.
+Do not forget to import `LookupTypeaheadComponent` in your component, and here is how it is used in the template.
```html
+/>
```
The available properties are as follows:
@@ -77,7 +62,7 @@ Select is a good choice when you have a low (and usually fixed) number of record

-Here is how it is used in the template.
+Do not forget to import `LookupSelectComponent` in your component, and here is how it is used in the template.
```html
+/>
```
The available properties are as follows:
diff --git a/docs/en/framework/ui/angular/manage-profile-page-tabs.md b/docs/en/framework/ui/angular/manage-profile-page-tabs.md
index 232575a419..fbb12c852e 100644
--- a/docs/en/framework/ui/angular/manage-profile-page-tabs.md
+++ b/docs/en/framework/ui/angular/manage-profile-page-tabs.md
@@ -9,7 +9,7 @@ See the example below, covers all features:
```ts
// manage-profile-tabs.provider.ts
-import { APP_INITIALIZER, Component } from "@angular/core";
+import { provideAppInitializer, Component } from "@angular/core";
import { TwoFactorTabComponent } from "@volo/abp.ng.account/public";
import {
eAccountManageProfileTabNames,
@@ -18,48 +18,47 @@ import {
import { MyAwesomeTabComponent } from "./my-awesome-tab/my-awesome-tab.component";
@Component({
- standalone: true,
selector: "abp-my-awesome-tab",
template: `My Awesome Tab`,
})
class MyAwesomeTabComponent {}
export const MANAGE_PROFILE_TAB_PROVIDER = {
- provide: APP_INITIALIZER,
- useFactory: configureManageProfileTabs,
- deps: [ManageProfileTabsService],
- multi: true,
+ provideAppInitializer(()=>{
+ configureManageProfileTabs();
+ }),
};
-export function configureManageProfileTabs(tabs: ManageProfileTabsService) {
- return () => {
- tabs.add([
- {
- name: "::MyAwesomeTab", // supports localization keys
- order: 5,
- component: MyAwesomeTabComponent,
- },
- ]);
-
- tabs.patch(eAccountManageProfileTabNames.TwoFactor, {
- name: "Two factor authentication",
- component: TwoFactorTabComponent,
- });
-
- tabs.remove([eAccountManageProfileTabNames.ProfilePicture]);
- };
+export function configureManageProfileTabs() {
+ tabs = inject(ManageProfileTabsService);
+ tabs.add([
+ {
+ name: "::MyAwesomeTab", // supports localization keys
+ order: 5,
+ component: MyAwesomeTabComponent,
+ },
+ ]);
+
+ tabs.patch(eAccountManageProfileTabNames.TwoFactor, {
+ name: "Two factor authentication",
+ component: TwoFactorTabComponent,
+ });
+
+ tabs.remove([eAccountManageProfileTabNames.ProfilePicture]);
}
```
```ts
-//app.module.ts
+//app.config.ts
import { MANAGE_PROFILE_TAB_PROVIDER } from "./manage-profile-tabs.provider";
-@NgModule({
- providers: [MANAGE_PROFILE_TAB_PROVIDER],
-})
-export class AppModule {}
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ MANAGE_PROFILE_TAB_PROVIDER
+ ],
+};
```
What we have done above;
@@ -70,7 +69,7 @@ What we have done above;
- Renamed the "Two factor" tab label.
- Removed the "Profile picture" tab.
- Determined the `MANAGE_PROFILE_TAB_PROVIDER` to be able to run the `configureManageProfileTabs` function on initialization.
-- Registered the `MANAGE_PROFILE_TAB_PROVIDER` to the `AppModule` providers.
+- Registered the `MANAGE_PROFILE_TAB_PROVIDER` to the `appConfig` providers.
See the result:
diff --git a/docs/en/framework/ui/angular/modal.md b/docs/en/framework/ui/angular/modal.md
index 2b8412202c..3691001c79 100644
--- a/docs/en/framework/ui/angular/modal.md
+++ b/docs/en/framework/ui/angular/modal.md
@@ -15,27 +15,33 @@ The `abp-modal` provides some additional benefits:
## Getting Started
-In order to use the `abp-modal` in an HTML template, the **`ThemeSharedModule`** should be imported into your module like this:
+In order to use the `abp-modal` in an HTML template, the **`ModalComponent`** should be imported into your component like this:
```js
+// sample.component.ts
// ...
-import { ThemeSharedModule } from '@abp/ng.theme.shared';
+import { ModalComponent, ModalCloseDirective } from '@abp/ng.theme.shared';
-@NgModule({
+@Component({
//...
- imports: [..., ThemeSharedModule],
+ ,
+ imports: [
+ // ...,
+ ModalComponent,
+ ModalCloseDirective // if you use `abpClose` directive in the html template
+ ],
})
-export class MyFeatureModule {}
+export class SampleComponent {
+ isModalOpen = false;
+}
```
-## Usage
-
-You can add the `abp-modal`Â to your component very quickly. See an example:
-
```html
-Open modal
+
+ Open modal
+
@@ -43,24 +49,17 @@ You can add the `abp-modal`Â to your component very quickly. See an example:
- Modal content
+ Modal content
- Close
+
+ Close
+
```
-```js
-// sample.component.ts
-
-@Component(/* component metadata */)
-export class SampleComponent {
- isModalOpen = false
-}
-```
-

@@ -136,7 +135,10 @@ import { FormBuilder, Validators } from '@angular/forms';
@Component(/* component metadata */)
export class BookComponent {
- form = this.fb.group({
+ private fb = inject(FormBuilder);
+ private service = inject(BookService);
+
+ form = this.fb.group({
author: [null, [Validators.required]],
name: [null, [Validators.required]],
price: [null, [Validators.required, Validators.min(0)]],
@@ -148,10 +150,10 @@ export class BookComponent {
isModalOpen: boolean;
- constructor(private fb: FormBuilder, private service: BookService) {}
-
save() {
- if (this.form.invalid) return;
+ if (this.form.invalid) {
+ return;
+ }
this.inProgress = true;
@@ -257,19 +259,16 @@ export class NgbdModalOptions {
**`suppressUnsavedChangesWarning`** is a boolean input that determines whether the confirmation popup triggering active or not. It can also be set globally as shown below:
```ts
-//app.module.ts
-
-// app.module.ts
+// app.config.ts
import { SUPPRESS_UNSAVED_CHANGES_WARNING } from '@abp/ng.theme.shared';
-// ...
-
-@NgModule({
- // ...
- providers: [{provide: SUPPRESS_UNSAVED_CHANGES_WARNING, useValue: true}]
-})
-export class AppModule {}
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ { provide: SUPPRESS_UNSAVED_CHANGES_WARNING, useValue: true }
+ ],
+};
```
Note: The `suppressUnsavedChangesWarning` input of `abp-modal` value overrides the `SUPPRESS_UNSAVED_CHANGES_WARNING` injection token value.
diff --git a/docs/en/framework/ui/angular/modifying-the-menu.md b/docs/en/framework/ui/angular/modifying-the-menu.md
index ef5e12782f..ee3997b9d7 100644
--- a/docs/en/framework/ui/angular/modifying-the-menu.md
+++ b/docs/en/framework/ui/angular/modifying-the-menu.md
@@ -59,32 +59,33 @@ An alternative and probably cleaner way is to use a route provider. First create
```js
// route.provider.ts
import { RoutesService, eLayoutType } from '@abp/ng.core';
-import { APP_INITIALIZER } from '@angular/core';
+import { provideAppInitializer } from '@angular/core';
export const APP_ROUTE_PROVIDER = [
- { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true },
+ provideAppInitializer(() => {
+ configureRoutes();
+ }),
];
-function configureRoutes(routes: RoutesService) {
- return () => {
- routes.add([
- {
- path: '/your-path',
- name: 'Your navigation',
- requiredPolicy: 'permission key here',
- order: 101,
- iconClass: 'fas fa-question-circle',
- layout: eLayoutType.application,
- },
- {
- path: '/your-path/child',
- name: 'Your child navigation',
- parentName: 'Your navigation',
- requiredPolicy: 'permission key here',
- order: 1,
- },
- ]);
- };
+function configureRoutes() {
+ const routesService = inject(RoutesService);
+ routes.add([
+ {
+ path: '/your-path',
+ name: 'Your navigation',
+ requiredPolicy: 'permission key here',
+ order: 101,
+ iconClass: 'fas fa-question-circle',
+ layout: eLayoutType.application,
+ },
+ {
+ path: '/your-path/child',
+ name: 'Your child navigation',
+ parentName: 'Your navigation',
+ requiredPolicy: 'permission key here',
+ order: 1,
+ },
+ ]);
}
```
@@ -95,22 +96,21 @@ We can also define a group for navigation elements. It's an optional property
// route.provider.ts
import { RoutesService } from '@abp/ng.core';
-function configureRoutes(routes: RoutesService) {
- return () => {
- routes.add([
- {
- //etc..
- group: 'ModuleName::GroupName'
- },
- {
- path: '/your-path/child',
- name: 'Your child navigation',
- parentName: 'Your navigation',
- requiredPolicy: 'permission key here',
- order: 1,
- },
- ]);
- };
+function configureRoutes() {
+ const routesService = inject(RoutesService);
+ routes.add([
+ {
+ //etc..
+ group: 'ModuleName::GroupName'
+ },
+ {
+ path: '/your-path/child',
+ name: 'Your child navigation',
+ parentName: 'Your navigation',
+ requiredPolicy: 'permission key here',
+ order: 1,
+ },
+ ]);
}
```
@@ -131,25 +131,23 @@ export class AppComponent {
}
```
-...and then in app.module.ts...
+...and then in app.config.ts...
- The `groupedVisible` method will return the `Others` group for ungrouped items, the default key is `AbpUi::OthersGroup`, we can change this `key` via the `OTHERS_GROUP` injection token
```js
-import { NgModule } from '@angular/core';
import { OTHERS_GROUP } from '@abp/ng.core';
import { APP_ROUTE_PROVIDER } from './route.provider';
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
+ // ...
APP_ROUTE_PROVIDER,
{
provide: OTHERS_GROUP,
useValue: 'ModuleName::MyOthersGroupKey',
},
],
- // imports, declarations, and bootstrap
-})
-export class AppModule {}
+};
```
### Singularize Route Item
@@ -182,9 +180,9 @@ Here is what every property works as:
- `invisible` makes the item invisible in the menu. (default: `false`)
- `group` is an optional property that is used to group together related routes in an application. (type: `string`, default: `AbpUi::OthersGroup`)
-### Via `routes` Property in `AppRoutingModule`
+### Via `routes` Property in `APP_ROUTES`
-You can define your routes by adding `routes` as a child property to `data` property of a route configuration in the `app-routing.module`. The `@abp/ng.core` package organizes your routes and stores them in the `RoutesService`.
+You can define your routes by adding `routes` as a child property to `data` property of a route configuration in the `app.routes.ts`. The `@abp/ng.core` package organizes your routes and stores them in the `RoutesService`.
You can add the `routes` property like below:
diff --git a/docs/en/framework/ui/angular/multi-tenancy.md b/docs/en/framework/ui/angular/multi-tenancy.md
index bfb929cc68..c85ac976a3 100644
--- a/docs/en/framework/ui/angular/multi-tenancy.md
+++ b/docs/en/framework/ui/angular/multi-tenancy.md
@@ -133,12 +133,9 @@ Example:
```ts
import { TENANT_NOT_FOUND_BY_NAME } from '@abp/ng.core';
-@NgModule({
- imports: [
- // removed for clarity
- ],
+export const appConfig: ApplicationConfig = {
providers: [
- // removed for clarity
+ // removed for clarity
{
provide: TENANT_NOT_FOUND_BY_NAME,
useFactory: function () {
@@ -148,11 +145,7 @@ import { TENANT_NOT_FOUND_BY_NAME } from '@abp/ng.core';
},
},
],
- declarations: [AppComponent],
- bootstrap: [AppComponent],
-})
-export class AppModule {}
-
+};
```
## See Also
diff --git a/docs/en/framework/ui/angular/oauth-module.md b/docs/en/framework/ui/angular/oauth-module.md
index 0e67d44d07..8ec30ae4b4 100644
--- a/docs/en/framework/ui/angular/oauth-module.md
+++ b/docs/en/framework/ui/angular/oauth-module.md
@@ -2,8 +2,7 @@
The authentication functionality has been moved from @abp/ng.core to @abp/ng.ouath since v7.0.
-If your app is version 8.3 or higher, you should include "provideAbpOAuth()" in your app.module.ts as an providers after "provideAbpCore()
-".
+If your app is version 8.3 or higher, you should include "provideAbpOAuth()" after "provideAbpCore()" in the `appConfig` array of your `app.config.ts`.
Those abstractions can be found in the @abp/ng-core packages.
diff --git a/docs/en/framework/ui/angular/page-component.md b/docs/en/framework/ui/angular/page-component.md
index b9fbc0b0bc..f190597fcf 100644
--- a/docs/en/framework/ui/angular/page-component.md
+++ b/docs/en/framework/ui/angular/page-component.md
@@ -14,10 +14,10 @@ Let's look at the following example without `abp-page` component.
@@ -42,22 +42,19 @@ export enum PageParts {
## Usage
-Firstly, you need to import `PageModule` from `@abp/ng.components/page` as follows:
+Firstly, you need to import Page components from `@abp/ng.components/page` based on your usage. Here is an example:
-`dashboard.module.ts`
+`dashboard.component.ts`
```javascript
-import {Â PageModule } from '@abp/ng.components/page';
-import {Â DashboardComponent } from './dashboard.component';
-@NgModule({
- declarations: [DashboardComponent],
- imports: [PageModule]
+@Component({
+ imports: [ PageComponent, ... ]
})
-export class DashboardModule {}
+export class  DashboardComponent {}
```
-And change the template of `dashboard.component.ts` to the following:
+And change the template of `dashboard.component.html` to the following:
```html
@@ -75,35 +72,55 @@ And change the template of `dashboard.component.ts` to the following:
## Overriding template
-If you need to replace the template of any part, you can use the following sub-components.
+If you need to replace the template of any part, you can use the following sub-components. You will need to import these components and modify the html template accordingly.
-```html
-
-
- Custom Title
-
-
-
-
-
-
-
- Some Action
-
-
+```javascript
+import {
+ PageComponent,
+ PageTitleContainerComponent,
+ PageBreadcrumbContainerComponent,
+ PageToolbarContainerComponent
+} from '@abp/ng.components/page';
+
+@Component({
+ selector: 'app-sample-component',
+ template: `
+
+
+ Custom Title
+
+
+
+
+
+
+
+ Some Action
+
+
+ `
+ imports: [
+ PageComponent,
+ PageTitleContainerComponent,
+ PageBreadcrumbContainerComponent,
+ MyBreadcrumbComponent,
+ PageToolbarContainerComponent
+ ]
+})
+export class SampleCompnent {}
```
You do not have to provide them all. You can just use which one you need to replace. These components have priority over the inputs declared above. If you use these components, you can omit the inputs.
## PagePartDirective
-`PageModule` provides a structural directive that is used internally within `PageComponent` and can also be used externally.
+`Components` package provides a structural directive that is used internally within `PageComponent` and can also be used externally.
`PageComponent` employs this directive internally as follows:
```html
```
@@ -111,7 +128,7 @@ It also can take a context input as follows:
```html
```
@@ -194,17 +211,14 @@ export class MyPageRenderStrategy implements PageRenderStrategy {
})
export class DashboardComponent {}
-@NgModule({
- imports: [PageModule],
- declarations: [DashboardComponent],
+export const appConfig: ApplicationConfig = {
providers: [
{
provide: PAGE_RENDER_STRATEGY,
useClass: MyPageRenderStrategy,
}
- ]
-})
-export class DashboardModule {}
+ ],
+};
```
## See Also
diff --git a/docs/en/framework/ui/angular/page-toolbar-extensions.md b/docs/en/framework/ui/angular/page-toolbar-extensions.md
index 74f79178dd..5a741b3d2f 100644
--- a/docs/en/framework/ui/angular/page-toolbar-extensions.md
+++ b/docs/en/framework/ui/angular/page-toolbar-extensions.md
@@ -14,7 +14,7 @@ In this example, we will add a "Click Me!" action and log `userName` of all user
### Step 1. Create Toolbar Action Contributors
-The following code prepares a constant named `identityToolbarActionContributors`, ready to be imported and used in your root module:
+The following code prepares a constant named `identityToolbarActionContributors`, ready to be imported and used in your root application configuration:
```js
// src/app/toolbar-action-contributors.ts
@@ -53,22 +53,22 @@ The list of actions, conveniently named as `actionList`, is a **doubly linked li
### Step 2. Import and Use Toolbar Action Contributors
-Import `identityToolbarActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below:
+Import `identityToolbarActionContributors` in your routing configuration and pass it to the static `createRoutes` method for `identity` route as seen below:
```js
-// src/app/app-routing.module.ts
+// src/app/app.routes.ts
// other imports
import { identityToolbarActionContributors } from './toolbar-action-contributors';
-const routes: Routes = [
+export const APP_ROUTES: Routes = [
// other routes
{
path: 'identity',
loadChildren: () =>
- import('@abp/ng.identity').then(m =>
- m.IdentityModule.forLazy({
+ import('@abp/ng.identity').then(c =>
+ c.createRoutes({
toolbarActionContributors: identityToolbarActionContributors,
})
),
@@ -78,7 +78,7 @@ const routes: Routes = [
];
```
-That is it, `logUserNames` toolbar action will be added as the first action on the page toolbar in the users page (`UsersComponent`) of the `IdentityModule`.
+That is it, `logUserNames` toolbar action will be added as the first action on the page toolbar in the users page (`UsersComponent`) of the `identity` package.
## How to Add a Custom Component to Page Toolbar
@@ -93,9 +93,9 @@ We need to have a component before we can pass it to the toolbar action contribu
```js
// src/app/click-me-button.component.ts
+import { Component, Inject } from '@angular/core';
import { IdentityUserDto } from '@abp/ng.identity/proxy';
import { ActionData, EXTENSIONS_ACTION_DATA } from '@abp/ng.components/extensible';
-import { Component, Inject } from '@angular/core';
@Component({
selector: 'app-click-me-button',
@@ -120,7 +120,7 @@ Here, `EXTENSIONS_ACTION_DATA` token provides us the context from the page toolb
### Step 2. Create Toolbar Action Contributors
-The following code prepares a constant named `identityToolbarActionContributors`, ready to be imported and used in your root module. When `ToolbarComponent` is used instead of `ToolbarAction`, we can pass a component in:
+The following code prepares a constant named `identityToolbarActionContributors`, ready to be imported and used in your root application configuration. When `ToolbarComponent` is used instead of `ToolbarAction`, we can pass a component in:
```js
// src/app/toolbar-action-contributors.ts
@@ -156,22 +156,22 @@ The list of actions, conveniently named as `actionList`, is a **doubly linked li
### Step 3. Import and Use Toolbar Action Contributors
-Import `identityToolbarActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below.
+Import `identityToolbarActionContributors` in your routing configuration and pass it to the static `createRoutes` method for `identity` route as seen below.
```js
-// src/app/app-routing.module.ts
+// src/app/app.routes.ts
// other imports
import { identityToolbarActionContributors } from './toolbar-action-contributors';
-const routes: Routes = [
+export const APP_ROUTES: Routes = [
// other routes
{
path: 'identity',
loadChildren: () =>
- import('@abp/ng.identity').then(m =>
- m.IdentityModule.forLazy({
+ import('@abp/ng.identity').then(c =>
+ c.createRoutes({
toolbarActionContributors: identityToolbarActionContributors,
})
),
@@ -181,7 +181,7 @@ const routes: Routes = [
];
```
-That is it, `logUserNames` toolbar action will be added as the first action on the page toolbar in the users page (`UsersComponent`) of the `IdentityModule` and it will be triggered by a custom button, i.e. `ClickMeButtonComponent`. Please note that **component projection is not limited to buttons** and you may use other UI components.
+That is it, `logUserNames` toolbar action will be added as the first action on the page toolbar in the users page (`UsersComponent`) of the `identity` package and it will be triggered by a custom button, i.e. `ClickMeButtonComponent`. Please note that **component projection is not limited to buttons** and you may use other UI components.
## How to Place a Custom Modal and Trigger It by Toolbar Actions
@@ -380,7 +380,7 @@ export const identityEntityActionContributors = {
### ToolbarActionContributorCallback\
-`ToolbarActionContributorCallback` is the type that you can pass as toolbar action contributor callbacks to static `forLazy` methods of the modules.
+`ToolbarActionContributorCallback` is the type that you can pass as toolbar action contributor callbacks to static `createRoutes` methods of the packages.
```js
// exportUsersContributor should have ToolbarActionContributorCallback type
diff --git a/docs/en/framework/ui/angular/password-complexity-indicator-component.md b/docs/en/framework/ui/angular/password-complexity-indicator-component.md
index 806b686ece..1733f9543e 100644
--- a/docs/en/framework/ui/angular/password-complexity-indicator-component.md
+++ b/docs/en/framework/ui/angular/password-complexity-indicator-component.md
@@ -42,7 +42,7 @@ The `PasswordComplexityIndicatorService` is for calculating the password complex
It's easy, imagine you have a password input that you want to add the complexity indicator under. Put this component under the input
```ts
-
+
```
- Pass the password to the `validatePassword` method of the `PasswordComplexityIndicatorService`, and bind return the value to the `progressBar` property of the `abp-password-complexity-indicator`
diff --git a/docs/en/framework/ui/angular/permission-management.md b/docs/en/framework/ui/angular/permission-management.md
index c797402003..5d3ed64351 100644
--- a/docs/en/framework/ui/angular/permission-management.md
+++ b/docs/en/framework/ui/angular/permission-management.md
@@ -100,11 +100,10 @@ export class CustomPermissionService extends PermissionService {
}
```
-- Then, in `app.module.ts`, provide this service as follows:
+- Then, in `app.config.ts`, provide this service as follows:
```js
-@NgModule({
- // ...
+export const appConfig: ApplicationConfig = {
providers: [
// ...
{
@@ -112,9 +111,7 @@ export class CustomPermissionService extends PermissionService {
useExisting: CustomPermissionService,
},
],
- // ...
-})
-export class AppModule {}
+};
```
That's it. Now, when a directive/guard asks for `PermissionService` from angular, it will inject your service.
diff --git a/docs/en/framework/ui/angular/pwa-configuration.md b/docs/en/framework/ui/angular/pwa-configuration.md
index 918aa4970d..9825eb0a52 100644
--- a/docs/en/framework/ui/angular/pwa-configuration.md
+++ b/docs/en/framework/ui/angular/pwa-configuration.md
@@ -38,7 +38,7 @@ So, Angular CLI updates some files and add a few others:
- `serviceWorker` is `true` in production build.
- `ngswConfigPath` refers to _ngsw-config.json_.
- **package.json** has _@angular/service-worker_ as a new dependency.
-- **app.module.ts** imports `ServiceWorkerModule` and registers a service worker filename.
+- **app.config.ts** imports `ServiceWorkerModule` and registers a service worker filename.
- **index.html** has following modifications:
- A ` ` element that refers to _manifest.webmanifest_.
- A ` ` tag that sets a theme color.
diff --git a/docs/en/framework/ui/angular/quick-start.md b/docs/en/framework/ui/angular/quick-start.md
index 3dd6e2f32d..77080141ed 100644
--- a/docs/en/framework/ui/angular/quick-start.md
+++ b/docs/en/framework/ui/angular/quick-start.md
@@ -54,28 +54,27 @@ Here is what these folders and files are for:
- **.vscode** has extension recommendations in it.
- **e2e** is a separate app for possible end-to-end tests.
- **src** is where the source files for your application are placed. We will have a closer look in a minute.
-- **.browserlistrc** helps [configuring browser compatibility of your Angular app](https://angular.io/guide/build#configuring-browser-compatibility).
+- **.browserlistrc** helps [configuring browser compatibility of your Angular app](https://angular.dev/tools/cli/build#configuring-browser-compatibility).
- **.editorconfig** helps you have a shared coding style for separate editors and IDEs. Check [EditorConfig.org](https://editorconfig.org/) for details.
- **.gitignore** defined which files and folders should not be tracked by git. Check [git documentation](https://git-scm.com/docs/gitignore) for details.
- **.prettierrc** includes simple coding style choices for [Prettier](https://prettier.io/), an auto-formatter for TypeScript, HTML, CSS, and more. If you install recommended extensions to VS Code, you will never have to format your code anymore.
-- **angular.json** is where Angular workspace is defined. It holds project configurations and workspace preferences. Please refer to [Angular workspace configuration](https://angular.io/guide/workspace-config) for details.
+- **angular.json** is where Angular workspace is defined. It holds project configurations and workspace preferences. Please refer to [Angular workspace configuration](https://angular.dev/reference/configs/workspace-config) for details.
- **karma.conf.js** holds [Karma test runner](https://karma-runner.github.io/) configurations.
-- **package.json** is where your [package dependencies](https://angular.io/guide/npm-packages) are listed. It also includes some useful scripts for developing, testing, and building your application.
+- **package.json** is where your [package dependencies](https://angular.dev/reference/configs/npm-packages) are listed. It also includes some useful scripts for developing, testing, and building your application.
- **README.md** includes some of Angular CLI command examples. You either have to install Angular CLI globally or run these commands starting with `yarn` or `npx` to make them work.
-- **start.ps1** is a simple PowerShell script to install dependencies and start a [development server via Angular CLI](https://angular.io/cli/serve), but you probably will not need that after reading this document.
-- **tsconfig.json** and all other [tsconfig files](https://angular.io/guide/typescript-configuration) in general, include some TypeScript and Angular compile options.
+- **start.ps1** is a simple PowerShell script to install dependencies and start a [development server via Angular CLI](https://angular.dev/cli/serve), but you probably will not need that after reading this document.
+- **tsconfig.json** and all other [tsconfig files](https://angular.dev/reference/configs/angular-compiler-options) in general, include some TypeScript and Angular compile options.
- **yarn.lock** enables installing consistent package versions across different devices so that working application build will not break because of a package update. Please read [Yarn documentation](https://classic.yarnpkg.com/en/docs/yarn-lock/) if you are interested in more information on the topic. If you have decided to use npm, please remove this file and keep the [package-lock.json](https://docs.npmjs.com/files/package-lock.json) instead.
Now let us take a look at the contents of the source folder.
-- **app** is the main directory you put your application files in. Any module, component, directive, service, pipe, guard, interceptor, etc. should be placed here. You are free to choose any folder structure, but [organizing Angular applications based on modules](https://angular.io/guide/module-types) is generally a fine practice.
-- **home** is a predefined module and acts as a welcome page. It also demonstrates how a feature-based folder structure may look like. More complex features will probably have sub-features, thus inner folders. You may change the home folder however you like.
-- **shared** is spared for reusable code that works for several modules. Some, including yours truly, may disagree with using a single module for all shared code, so consider adding standalone sub-modules inside this folder instead of adding everything into **shared.module.ts**.
-- **app-routing.module.ts** is where your top-level routes are defined. Angular is capable of [lazy loading feature modules](https://angular.io/guide/lazy-loading-ngmodules), so not all routes will be here. You may think of Angular routing as a tree and this file is the top of the tree.
+- **app** is the main directory you put your application files in. Any component, directive, service, pipe, guard, interceptor, etc. should be placed here. You are free to choose any folder structure, but [organizing Angular applications using configuration-based structure](https://angular.dev/reference/configs/file-structure) is generally a fine practice, especially when using standalone APIs. This replaces the older convention of organizing strictly by NgModules.
+- **home** is a predefined component and acts as a welcome page. It also demonstrates how a feature-based folder structure may look like. More complex features will probably have sub-features, thus inner folders. You may change the home folder however you like.
+- **app.routes.ts** is where your top-level routes are defined. Angular is capable of [lazy loading routes now](https://angular.dev/reference/migrations/route-lazy-loading), so not all routes will be here. You may think of Angular routing as a tree and this file is the top of the tree.
- **app.component.ts** is essentially the top component that holds the dynamic application layout.
-- **app.module.ts** is the [root module](https://angular.io/guide/bootstrapping) that includes information about how parts of your application are related and what to run at the initiation of your application.
+- **app.config.ts** is the [root configuration](https://angular.dev/api/platform-browser/bootstrapApplication) that includes information about how parts of your application are related and what to run at the initiation of your application.
- **route.provider.ts** is used for [modifying the menu](../angular/modifying-the-menu.md).
- **assets** is for static files. A file (e.g. an image) placed in this folder will be available as is when the application is served.
- **environments** includes one file per environment configuration. There are two configurations by default, but you may always introduce another one. These files are directly referred to in _angular.json_ and help you have different builds and application variables. Please refer to [configuring Angular application environments](https://angular.io/guide/build#configuring-application-environments) for details.
@@ -155,7 +154,7 @@ export const environment = {
} as Config.Environment;
```
-When you run the development server, variables defined in _environment.ts_ take effect. Similarly, in production mode, the default environment is replaced by _environment.prod.ts_ and completely different variables become effective. You may even [create a new build configuration](https://angular.io/guide/workspace-config#build-configs) and set [file replacements](https://angular.io/guide/build#configure-target-specific-file-replacements) to use a completely new environment. For now, we will start a production build:
+When you run the development server, variables defined in _environment.ts_ take effect. Similarly, in production mode, the default environment is replaced by _environment.prod.ts_ and completely different variables become effective. You may even [create a new build configuration](https://angular.dev/reference/configs/workspace-config#alternate-build-configurations) and set [file replacements](https://angular.io/guide/build#configure-target-specific-file-replacements) to use a completely new environment. For now, we will start a production build:
1. Open your terminal and navigate to the root Angular folder.
2. Run `yarn` or `npm install` if you have not installed dependencies already.
diff --git a/docs/en/framework/ui/angular/show-password-directive.md b/docs/en/framework/ui/angular/show-password-directive.md
index cacb2550c5..588aa3a60b 100644
--- a/docs/en/framework/ui/angular/show-password-directive.md
+++ b/docs/en/framework/ui/angular/show-password-directive.md
@@ -4,24 +4,20 @@ In password input, text can be shown easily via changing input type attribute to
## Getting Started
-`ShowPasswordDirective` is standalone. In order to use the `ShowPasswordDirective` in an HTML template, import it to related module or your standalone component:
+`ShowPasswordDirective` is standalone. In order to use the it in an HTML template, import it to your component:
-**Importing to NgModule**
+**Importing to Component**
```ts
import { ShowPasswordDirective } from '@abp/ng.core';
-@NgModule({
+@Component({
//...
- declarations: [
- ...,
- TestComponent
- ],
imports: [
- ...,
+ // ...,
ShowPasswordDirective
],
})
-export class MyFeatureModule {}
+export class TestComponent {}
```
## Usage
@@ -30,28 +26,10 @@ The `ShowPasswordDirective` is very easy to use. The directive's selector is **`
See an example usage:
-**NgModule Component usage**
-```ts
-@Component({
- selector: 'test-component',
- template: `
-
- Password
-
- icon
-
- `
-})
-export class TestComponent{
- showPassword = false;
-}
-```
-**Standalone Component usage**
```ts
import { ShowPasswordDirective } from '@abp/ng.core';
@Component({
- selector: 'standalone-component',
- standalone: true,
+ selector: 'sample-component',
template: `
Password
@@ -61,7 +39,7 @@ import { ShowPasswordDirective } from '@abp/ng.core';
`,
imports: [ShowPasswordDirective]
})
-export class StandaloneComponent{
+export class SampleComponent{
showPassword = false;
}
```
diff --git a/docs/en/framework/ui/angular/sorting-navigation-elements.md b/docs/en/framework/ui/angular/sorting-navigation-elements.md
index 7385a1681c..a5a9b3db89 100644
--- a/docs/en/framework/ui/angular/sorting-navigation-elements.md
+++ b/docs/en/framework/ui/angular/sorting-navigation-elements.md
@@ -19,19 +19,18 @@ This documentation describes how the navigation elements are sorted and how to c
# How to Customize
-**`in app.module.ts`**
+**`in app.config.ts`**
```ts
import { SORT_COMPARE_FUNC } from "@abp/ng.core";
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
- ...{
+ // ...
+ {
provide: SORT_COMPARE_FUNC,
useFactory: yourCompareFuncFactory,
},
],
- // imports, declarations, and bootstrap
-})
-export class AppModule {}
+};
```
diff --git a/docs/en/framework/ui/angular/toaster-service.md b/docs/en/framework/ui/angular/toaster-service.md
index ad08697eeb..a6c65ccb72 100644
--- a/docs/en/framework/ui/angular/toaster-service.md
+++ b/docs/en/framework/ui/angular/toaster-service.md
@@ -4,7 +4,7 @@ You can use the `ToasterService` in @abp/ng.theme.shared package to display mess
## Getting Started
-You do not have to provide the `ToasterService` at module or component level, because it is already **provided in root**. You can inject and start using it immediately in your components, directives, or services.
+You do not have to provide the `ToasterService` at component level, because it is already **provided in root**. You can inject and start using it immediately in your components, directives, or services.
```js
import { ToasterService } from '@abp/ng.theme.shared';
@@ -170,19 +170,19 @@ export class CustomToasterService implements Toaster.Service {
```
```js
-// app.module.ts
+// app.config.ts
import { ToasterService } from '@abp/ng.theme.shared';
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
- // ...
+ // ...
{
provide: ToasterService,
useClass: CustomToasterService,
},
- ]
-})
+ ],
+};
```
## API
diff --git a/docs/en/images/angular-folder-structure.png b/docs/en/images/angular-folder-structure.png
index cfc5c6d0e2..f8b6ea656c 100644
Binary files a/docs/en/images/angular-folder-structure.png and b/docs/en/images/angular-folder-structure.png differ
diff --git a/docs/en/images/cmskit-module-page-feedback-widget-2.png b/docs/en/images/cmskit-module-page-feedback-widget-2.png
index 45510eebe0..b2702d9b69 100644
Binary files a/docs/en/images/cmskit-module-page-feedback-widget-2.png and b/docs/en/images/cmskit-module-page-feedback-widget-2.png differ
diff --git a/docs/en/images/cmskit-module-page-feedback-widget.png b/docs/en/images/cmskit-module-page-feedback-widget.png
index cd8264f7eb..b0bf6699ab 100644
Binary files a/docs/en/images/cmskit-module-page-feedback-widget.png and b/docs/en/images/cmskit-module-page-feedback-widget.png differ
diff --git a/docs/en/modules/account-pro.md b/docs/en/modules/account-pro.md
index c53a6f24ec..594d51da62 100644
--- a/docs/en/modules/account-pro.md
+++ b/docs/en/modules/account-pro.md
@@ -301,47 +301,41 @@ See the `AccountPermissions` class members for all permissions defined for this
#### Installation
-In order to configure the application to use the `AccountPublicModule` and the `AccountAdminModule`, you first need to import `AccountPublicConfigModule` from `@volo/abp.ng.account/public/config` and `AccountAdminConfigModule` from `@volo/abp.ng.account/admin/config` to root module. Config modules has a static `forRoot` method which you should call for a proper configuration.
+In order to configure the application to use the public account module and the admin account module, you first need to import `provideAccountPublicConfig` from `@volo/abp.ng.account/public/config` and `provideAccountAdminConfig` from `@volo/abp.ng.account/admin/config`. Then, you will need to append them to the `appConfig` array.
```js
-// app.module.ts
-import { AccountAdminConfigModule } from '@volo/abp.ng.account/admin/config';
-import { AccountPublicConfigModule } from '@volo/abp.ng.account/public/config';
-
-@NgModule({
- imports: [
- // other imports
- AccountPublicConfigModule.forRoot(),
- AccountAdminConfigModule.forRoot(),
- // other imports
+// app.config.ts
+import { provideAccountPublicConfig } from '@volo/abp.ng.account/public/config';
+import { provideAccountAdminConfig } from '@volo/abp.ng.account/admin/config';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideAccountAdminConfig(),
+ provideAccountPublicConfig(),
],
- // ...
-})
-export class AppModule {}
+};
```
-The `AccountPublicModule` should be imported and lazy-loaded in your routing module. It has a static `forLazy` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.account/public`.
+The account public package should be imported and lazy-loaded in your routing array. It has a static `createRoutes` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.account/public`.
```js
-// app-routing.module.ts
-const routes: Routes = [
- // other route definitions
+// app.routes.ts
+export const APP_ROUTES: Routes = [
+ // ...
{
path: 'account',
- loadChildren: () =>
- import('@volo/abp.ng.account/public').then(m => m.AccountPublicModule.forLazy(/* options here */)),
+ loadChildren: () => import('@volo/abp.ng.account/public').then(c => c.createRoutes(/* options here */)),
},
];
-@NgModule(/* AppRoutingModule metadata */)
-export class AppRoutingModule {}
```
-> If you have generated your project via the startup template, you do not have to do anything, because it already has the modules.
+> If you have generated your project via the startup template, you do not have to do anything, because it already has the necessary configurations.
Options
-You can modify the look and behavior of the module pages by passing the following options to `AccountModule.forLazy` static method:
+You can modify the look and behavior of the module pages by passing the following options to `createRoutes` static method:
- **redirectUrl**: Default redirect URL after logging in.
- **entityActionContributors:** Changes grid actions. Please check [Entity Action Extensions for Angular](../framework/ui/angular/entity-action-extensions.md) for details.
diff --git a/docs/en/modules/audit-logging-pro.md b/docs/en/modules/audit-logging-pro.md
index cb32ff52fe..607d67539c 100644
--- a/docs/en/modules/audit-logging-pro.md
+++ b/docs/en/modules/audit-logging-pro.md
@@ -131,7 +131,12 @@ To see `AbpAuditingOptions` properties, please see its [documentation](../framew
Configure
(options =>
{
options.Period = (int)TimeSpan.FromSeconds(30).TotalMilliseconds;
- options.CronExpression = "0 23 * * *"; // This Cron expression only works if Hangfire or Quartz is used for background workers.
+
+ // This Cron expression only works if Hangfire or Quartz is used for background workers.
+ // The Hangfire Cron expression is different from the Quartz Cron expression, Please refer to the following links:
+ // https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/crontriggers.html#cron-expressions
+ // https://docs.hangfire.io/en/latest/background-methods/performing-recurrent-tasks.html
+ options.ExcelFileCleanupOptions.CronExpression = "0 23 * * *"; // Quartz Cron expression is "0 23 * * * ?"
});
```
@@ -147,7 +152,12 @@ Configure(options =>
options.FileRetentionHours = 24; // How long to keep files before cleanup (default: 24 hours)
options.DownloadBaseUrl = "https://yourdomain.com"; // Base URL for download links in emails
options.ExcelFileCleanupOptions.Period = (int)TimeSpan.FromHours(24).TotalMilliseconds; // Interval of the cleanup worker (default: 24 hours)
- options.ExcelFileCleanupOptions.CronExpression = "0 23 * * *"; // This Cron expression only works if Hangfire or Quartz is used for background workers.
+
+ // This Cron expression only works if Hangfire or Quartz is used for background workers.
+ // The Hangfire Cron expression is different from the Quartz Cron expression, Please refer to the following links:
+ // https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/crontriggers.html#cron-expressions
+ // https://docs.hangfire.io/en/latest/background-methods/performing-recurrent-tasks.html
+ options.ExcelFileCleanupOptions.CronExpression = "0 23 * * *"; // Quartz Cron expression is "0 23 * * * ?"
});
```
@@ -234,45 +244,39 @@ See the `AbpAuditLoggingPermissions` class members for all permissions defined f
#### Installation
-In order to configure the application to use the `AuditLoggingModule`, you first need to import `AuditLoggingConfigModule` from `@volo/abp.ng.audit-logging/config` to root module. `AuditLoggingConfigModule` has a static `forRoot` method which you should call for a proper configuration.
+In order to configure the application to use the audit logging module, you first need to import `provideAuditLoggingConfig` from `@volo/abp.ng.audit-logging/config` to root configuration. Then, you will need to append it to the `appConfig` array.
```js
-// app.module.ts
-import { AuditLoggingConfigModule } from '@volo/abp.ng.audit-logging/config';
-
-@NgModule({
- imports: [
- // other imports
- AuditLoggingConfigModule.forRoot(),
- // other imports
+// app.config.ts
+import { provideAuditLoggingConfig } from '@volo/abp.ng.audit-logging/config';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideAuditLoggingConfig(),
],
- // ...
-})
-export class AppModule {}
+};
```
-The `AuditLoggingModule` should be imported and lazy-loaded in your routing module. It has a static `forLazy` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.audit-logging`.
+The audit logging module should be imported and lazy-loaded in your routing array. It has a static `createRoutes` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.audit-logging`.
```js
-// app-routing.module.ts
-const routes: Routes = [
- // other route definitions
+// app.routes.ts
+export const APP_ROUTES: Routes = [
+ // ...
{
path: 'audit-logs',
- loadChildren: () =>
- import('@volo/abp.ng.audit-logging').then(m => m.AuditLoggingModule.forLazy(/* options here */)),
+ loadChildren: () => import('@volo/abp.ng.audit-logging').then(c => c.createRoutes(/* options here */)),
},
];
-@NgModule(/* AppRoutingModule metadata */)
-export class AppRoutingModule {}
```
-> If you have generated your project via the startup template, you do not have to do anything, because it already has both `AuditLoggingConfigModule` and `AuditLoggingModule`.
+> If you have generated your project via the startup template, you do not have to do anything, because it already has both files configured.
Options
-You can modify the look and behavior of the module pages by passing the following options to `AuditLoggingModule.forLazy` static method:
+You can modify the look and behavior of the module pages by passing the following options to `createRoutes` static method:
- **entityActionContributors:** Changes grid actions. Please check [Entity Action Extensions for Angular](../framework/ui/angular/entity-action-extensions.md) for details.
- **toolbarActionContributors:** Changes page toolbar. Please check [Page Toolbar Extensions for Angular](../framework/ui/angular/page-toolbar-extensions.md) for details.
diff --git a/docs/en/modules/chat.md b/docs/en/modules/chat.md
index 589980ec98..42379b29bc 100644
--- a/docs/en/modules/chat.md
+++ b/docs/en/modules/chat.md
@@ -206,38 +206,33 @@ See the [connection strings](../framework/fundamentals/connection-strings.md) do
#### Installation
-In order to configure the application to use the `ChatModule`, you first need to import `ChatConfigModule` from `@volo/abp.ng.chat/config` to root module. `ChatConfigModule` has a static `forRoot` method which you should call for a proper configuration.
+In order to configure the application to use the chat module, you first need to import `provideChatConfig` from `@volo/abp.ng.chat/config` to root application confiuration. Then, you will need to append it to the `appConfig` array.
```js
-// app.module.ts
-import { ChatConfigModule } from '@volo/abp.ng.chat/config';
-
-@NgModule({
- imports: [
- // other imports
- ChatConfigModule.forRoot(),
- // other imports
+// app.config.ts
+import { provideChatConfig } from '@volo/abp.ng.chat/config';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideChatConfig(),
],
- // ...
-})
-export class AppModule {}
+};
+
```
-The `ChatModule` should be imported and lazy-loaded in your routing module. It has a static `forLazy` method for configuration. It is available for import from `@volo/abp.ng.chat`.
+The chat module should be imported and lazy-loaded in your routing array. It has a static `createRoutes` method for configuration. It is available for import from `@volo/abp.ng.chat`.
```js
-// app-routing.module.ts
-const routes: Routes = [
- // other route definitions
+// app.routes.ts
+const APP_ROUTES: Routes = [
+ // ...
{
path: 'chat',
loadChildren: () =>
- import('@volo/abp.ng.chat').then(m => m.ChatModule.forLazy(/* options here */)),
+ import('@volo/abp.ng.chat').then(c => c.createRoutes(/* options here */)),
},
];
-
-@NgModule(/* AppRoutingModule metadata */)
-export class AppRoutingModule {}
```
#### Services / Models
diff --git a/docs/en/modules/cms-kit-pro/page-feedback.md b/docs/en/modules/cms-kit-pro/page-feedback.md
index e480e024fd..dd519eb15b 100644
--- a/docs/en/modules/cms-kit-pro/page-feedback.md
+++ b/docs/en/modules/cms-kit-pro/page-feedback.md
@@ -2,10 +2,9 @@
> You must have an ABP Team or a higher license to use CMS Kit Pro module's features.
-The CMS Kit provides a **Page Feedback** system to collect feedback from users about pages.
+The CMS Kit Pro module provides a comprehensive **Page Feedback** system that enables you to collect valuable user feedback about your website pages. This system allows visitors to quickly rate their experience and provide comments, helping you understand user satisfaction and identify areas for improvement.
-|  |  |
-| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- |
+
## Enabling the Page Feedback System
diff --git a/docs/en/modules/cms-kit/index.md b/docs/en/modules/cms-kit/index.md
index 5c30806028..3744ce3590 100644
--- a/docs/en/modules/cms-kit/index.md
+++ b/docs/en/modules/cms-kit/index.md
@@ -72,6 +72,23 @@ CMS kit packages are designed for various usage scenarios. If you check the [CMS
- `Volo.CmsKit.Public.*` packages contain the functionalities used in public websites where users read blog posts or leave comments.
- `Volo.CmsKit.*` (without Admin/Public suffix) packages are called as unified packages. Unified packages are shortcuts for adding Admin & Public packages (of the related layer) separately. If you have a single application for administration and public web site, you can use these packages.
+## Integrating Public and Admin Packages in a Unified Application
+
+If you are using a single application for both admin and public web site, it's important to configure the global layout settings appropriately. By default, the layout is set for a **Public Website**, which is suitable for public-facing pages. However, when your application serves both admin and public pages, you should explicitly set the global layout for all CMS Kit pages.
+
+To do this, add a `_ViewStart.cshtml` file to your web project at `/Pages/Public/CmsKit/_ViewStart.cshtml` and configure the layout as shown below:
+
+```html
+@using Volo.Abp.AspNetCore.Mvc.UI.Theming
+@inject IThemeManager ThemeManager
+@{
+ // default: GetPublicLayout()
+ Layout = ThemeManager.CurrentTheme.GetApplicationLayout();
+}
+```
+
+> The `_ViewStart.cshtml` file is used to set the layout for all pages in the `CmsKit` folder.
+
## Internals
### Table / collection prefix & schema
diff --git a/docs/en/modules/gdpr.md b/docs/en/modules/gdpr.md
index bef763a41a..43e38eb6b2 100644
--- a/docs/en/modules/gdpr.md
+++ b/docs/en/modules/gdpr.md
@@ -177,45 +177,46 @@ See the [connection strings](../framework/fundamentals/connection-strings.md) do
### Installation
-In order to configure the application to use the `GdprModule`, you first need to import `GdprConfigModule` from `@volo/abp.ng.gdpr/config` to the root module. `GdprConfigModule` has a static `forRoot` method which you should call for a proper configuration.
+In order to configure the application to use the gdpr module, you first need to import `provideGdprConfig` from `@volo/abp.ng.gdpr/config` to the root configuration. Then, you will need to append it to the `appConfig` array.
```js
-// app.module.ts
-import { GdprConfigModule } from '@volo/abp.ng.gdpr/config';
-
-@NgModule({
- imports: [
- // other imports
- GdprConfigModule.forRoot(),
- // other imports
+// app.config.ts
+import {
+ provideGdprConfig,
+ withCookieConsentOptions,
+} from '@volo/abp.ng.gdpr/config';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ provideGdprConfig(
+ withCookieConsentOptions({
+ cookiePolicyUrl: '/gdpr-cookie-consent/cookie',
+ privacyPolicyUrl: '/gdpr-cookie-consent/privacy',
+ }),
+ ),
],
- // ...
-})
-export class AppModule {}
+};
```
-The `GdprModule` should be imported and lazy-loaded in your routing module. It has a static `forLazy` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.gdpr`.
+The gdpr module should be imported and lazy-loaded in your routing array. It has a static `createRoutes` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.gdpr`.
```js
-// app-routing.module.ts
-const routes: Routes = [
+// app.routes.ts
+const APP_ROUTES: Routes = [
// other route definitions
{
path: 'gdpr',
loadChildren: () =>
- import('@volo/abp.ng.gdpr').then(m => m.GdprModule.forLazy(/* options here */)),
+ import('@volo/abp.ng.gdpr').then(c => c.createRoutes(/* options here */)),
},
];
-
-@NgModule(/* AppRoutingModule metadata */)
-export class AppRoutingModule {}
```
-> If you have generated your project via the startup template, you do not have to do anything, because it already has both `GdprConfigModule` and `GdprModule`.
+> If you have generated your project via the startup template, you do not have to do anything, because it already has both files configured.
Options
-You can modify the look and behavior of the module pages by passing the following options to the `GdprModule.forLazy` static method:
+You can modify the look and behavior of the module pages by passing the following options to the `createRoutes` static method:
- **entityActionContributors:** Changes the grid actions. Please check [Entity Action Extensions for Angular](../framework/ui/angular/entity-action-extensions.md) for details.
- **toolbarActionContributors:** Changes the page toolbar. Please check [Page Toolbar Extensions for Angular](../framework/ui/angular/page-toolbar-extensions.md) for details.
diff --git a/docs/en/modules/identity-pro.md b/docs/en/modules/identity-pro.md
index ab25a8d5c8..6649a335e3 100644
--- a/docs/en/modules/identity-pro.md
+++ b/docs/en/modules/identity-pro.md
@@ -343,45 +343,39 @@ See the `IdentityPermissions` class members for all permissions defined for this
#### Installation
-In order to configure the application to use the `IdentityModule`, you first need to import `IdentityConfigModule` from `@volo/abp.ng.identity/config` to root module. `IdentityConfigModule` has a static `forRoot` method which you should call for a proper configuration.
+In order to configure the application to use the identity module, you first need to import `provideIdentityConfig` from `@volo/abp.ng.identity/config` to root configuration. Then, you will need to append it to the `appConfig` array.
```js
-// app.module.ts
-import { IdentityConfigModule } from '@volo/abp.ng.identity/config';
-
-@NgModule({
- imports: [
- // other imports
- IdentityConfigModule.forRoot(),
- // other imports
+// app.config.ts
+import { provideIdentityConfig } from '@volo/abp.ng.identity/config';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideIdentityConfig(),
],
- // ...
-})
-export class AppModule {}
+};
```
-The `IdentityModule` should be imported and lazy-loaded in your routing module. It has a static `forLazy` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.identity`.
+The identity module should be imported and lazy-loaded in your routing configuration. It has a static `createRoutes` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.identity`.
```js
-// app-routing.module.ts
-const routes: Routes = [
- // other route definitions
+// app.routes.ts
+const APP_ROUTES: Routes = [
+ // ...
{
path: 'identity',
loadChildren: () =>
- import('@volo/abp.ng.identity').then(m => m.IdentityModule.forLazy(/* options here */)),
+ import('@volo/abp.ng.identity').then(c => c.createRoutes(/* options here */)),
},
];
-
-@NgModule(/* AppRoutingModule metadata */)
-export class AppRoutingModule {}
```
-> If you have generated your project via the startup template, you do not have to do anything, because it already has both `IdentityConfigModule` and `IdentityModule`.
+> If you have generated your project via the startup template, you do not have to do anything, because it already has both configurations added.
Options
-You can modify the look and behavior of the module pages by passing the following options to `IdentityModule.forLazy` static method:
+You can modify the look and behavior of the module pages by passing the following options to `createRoutes` static method:
- **entityActionContributors:** Changes grid actions. Please check [Entity Action Extensions for Angular](../framework/ui/angular/entity-action-extensions.md) for details.
- **toolbarActionContributors:** Changes page toolbar. Please check [Page Toolbar Extensions for Angular](../framework/ui/angular/page-toolbar-extensions.md) for details.
diff --git a/docs/en/modules/identity-server-pro.md b/docs/en/modules/identity-server-pro.md
index ce25823ee8..ad197e8a7d 100644
--- a/docs/en/modules/identity-server-pro.md
+++ b/docs/en/modules/identity-server-pro.md
@@ -245,45 +245,39 @@ See the `AbpIdentityServerPermissions` class members for all permissions defined
#### Installation
-In order to configure the application to use the `IdentityServerModule`, you first need to import `IdentityServerConfigModule` from `@volo/abp.ng.identity-server/config` to root module. `IdentityServerConfigModule` has a static `forRoot` method which you should call for a proper configuration.
+In order to configure the application to use the identity server, you first need to import `provideIdentityServerConfig` from `@volo/abp.ng.identity-server/config` to root configuration. Then, you will need to append it to the `appConfig` array.
```js
-// app.module.ts
-import { IdentityServerConfigModule } from '@volo/abp.ng.identity-server/config';
-
-@NgModule({
- imports: [
- // other imports
- IdentityServerConfigModule.forRoot(),
- // other imports
+// app.config.ts
+import { provideIdentityServerConfig } from '@volo/abp.ng.identity-server/config';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideIdentityServerConfig()
],
- // ...
-})
-export class AppModule {}
+};
```
-The `IdentityServerModule` should be imported and lazy-loaded in your routing module. It has a static `forLazy` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.identity-server`.
+The identity server module should be imported and lazy-loaded in your routing module. It has a static `creatRoutes` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.identity-server`.
```js
-// app-routing.module.ts
-const routes: Routes = [
+// app.routes.ts
+const APP_ROUTES: Routes = [
// other route definitions
{
path: 'identity-server',
loadChildren: () =>
- import('@volo/abp.ng.identity-server').then(m => m.IdentityServerModule.forLazy(/* options here */)),
+ import('@volo/abp.ng.identity-server').then(c => c.createRoutes(/* options here */)),
},
];
-
-@NgModule(/* AppRoutingModule metadata */)
-export class AppRoutingModule {}
```
-> If you have generated your project via the startup template, you do not have to do anything, because it already has both `IdentityServerConfigModule` and `IdentityServerModule`.
+> If you have generated your project via the startup template, you do not have to do anything, because it already has both files configured.
Options
-You can modify the look and behavior of the module pages by passing the following options to `IdentityServerModule.forLazy` static method:
+You can modify the look and behavior of the module pages by passing the following options to `createRoutes` static method:
- **entityActionContributors:** Changes grid actions. Please check [Entity Action Extensions for Angular](../framework/ui/angular/entity-action-extensions.md) for details.
- **toolbarActionContributors:** Changes page toolbar. Please check [Page Toolbar Extensions for Angular](../framework/ui/angular/page-toolbar-extensions.md) for details.
diff --git a/docs/en/modules/language-management.md b/docs/en/modules/language-management.md
index 62327378a4..536abc7ab3 100644
--- a/docs/en/modules/language-management.md
+++ b/docs/en/modules/language-management.md
@@ -149,45 +149,41 @@ See the `LanguageManagementPermissions` class members for all permissions define
#### Installation
-To configure the application to use the `LanguageManagementModule`, you first need to import `LanguageManagementConfigModule` from `@volo/abp.ng.language-management/config` to root module. `LanguageManagementConfigModule` has a static `forRoot` method which you should call for a proper configuration.
+To configure the application to use the language management module, you first need to import `provideLanguageManagementConfig` from `@volo/abp.ng.language-management/config` to root configuration. Then, you will need to append it to the `appConfig` array.
```js
-// app.module.ts
-import { LanguageManagementConfigModule } from '@volo/abp.ng.language-management/config';
-
-@NgModule({
- imports: [
- // other imports
- LanguageManagementConfigModule.forRoot(),
- // other imports
+// app.config.ts
+import { provideLanguageManagementConfig } from '@volo/abp.ng.language-management/config';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideLanguageManagementConfig()
],
- // ...
-})
-export class AppModule {}
+};
+
```
-The `LanguageManagementModule` should be imported and lazy-loaded in your routing module. It has a static `forLazy` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.language-management`.
+The language management module should be imported and lazy-loaded in your routing array. It has a static `createRoutes` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.language-management`.
```js
-// app-routing.module.ts
-const routes: Routes = [
- // other route definitions
+// app.routes.ts
+
+const APP_ROUTES: Routes = [
+ // ...
{
path: 'language-management',
loadChildren: () =>
- import('@volo/abp.ng.language-management').then(m => m.LanguageManagementModule.forLazy(/* options here */)),
+ import('@volo/abp.ng.language-management').then(c => c.createRoutes(/* options here */)),
},
];
-
-@NgModule(/* AppRoutingModule metadata */)
-export class AppRoutingModule {}
```
-> If you have generated your project via the startup template, you do not have to do anything because it already has both `LanguageManagementConfigModule` and `LanguageManagementModule`.
+> If you have generated your project via the startup template, you do not have to do anything because it already has both configurations implemented.
Options
-You can modify the look and behavior of the module pages by passing the following options to `LanguageManagementModule.forLazy` static method:
+You can modify the look and behavior of the module pages by passing the following options to `createRoutes` static method:
- **entityActionContributors:** Changes grid actions. Please check [Entity Action Extensions for Angular](../framework/ui/angular/entity-action-extensions.md) for details.
- **toolbarActionContributors:** Changes page toolbar. Please check [Page Toolbar Extensions for Angular](../framework/ui/angular/page-toolbar-extensions.md) for details.
diff --git a/docs/en/modules/payment.md b/docs/en/modules/payment.md
index b3fb6de84b..6a55cc83ae 100644
--- a/docs/en/modules/payment.md
+++ b/docs/en/modules/payment.md
@@ -81,38 +81,36 @@ This page is used to send Name, Surname and Email Address of user to PayU.
#### Installation
-In order to configure the application to use the `PaymentModule`, you first need to import `PaymentAdminConfigModule` from `@volo/abp.ng.payment/admin/config` to the root module. `PaymentAdminConfigModule` has a static `forRoot` method which you should call for a proper configuration:
+In order to configure the application to use the payment module, you first need to import `PaymentAdminConfigModule` from `@volo/abp.ng.payment/admin/config` to the root configuration. `PaymentAdminConfigModule` has a static `forRoot` method which you should call for a proper configuration:
```js
-// app.module.ts
+// app.config.ts
+import { ApplicationConfig, importProvidersFrom } from '@angular/core';
import { PaymentAdminConfigModule } from '@volo/abp.ng.payment/admin/config';
-@NgModule({
- imports: [
- // other imports
- PaymentAdminConfigModule.forRoot(),
- // other imports
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ importProvidersFrom([
+ PaymentAdminConfigModule.forRoot()
+ ]),
],
- // ...
-})
-export class AppModule {}
+};
+
```
-The `PaymentAdminModule` should be imported and lazy-loaded in your routing module as below:
+The payment admin module should be imported and lazy-loaded in your routing array as below:
```js
-// app-routing.module.ts
-const routes: Routes = [
- // other route definitions
+// app.routes.ts
+const APP_ROUTES: Routes = [
+ // ...
{
path: 'payment',
loadChildren: () =>
- import('@volo/abp.ng.payment/admin').then(m => m.PaymentAdminModule.forLazy()),
+ import('@volo/abp.ng.payment/admin').then(c => c.createRoutes()),
},
];
-
-@NgModule(/* AppRoutingModule metadata */)
-export class AppRoutingModule {}
```
#### Payment plans page
diff --git a/docs/en/modules/saas.md b/docs/en/modules/saas.md
index bfd0115853..f1e85d6ceb 100644
--- a/docs/en/modules/saas.md
+++ b/docs/en/modules/saas.md
@@ -244,45 +244,39 @@ See the `SaasHostPermissions` class members for all permissions defined for this
#### Installation
-In order to configure the application to use the `SaasModule`, you first need to import `SaasConfigModule` from `@volo/abp.ng.saas/config` to root module. `SaasConfigModule` has a static `forRoot` method which you should call for a proper configuration.
+In order to configure the application to use the saas module, you first need to import `provideSaasConfig` from `@volo/abp.ng.saas/config` to root module. Then, you will need to append it to the `appConfig` array.
```js
-// app.module.ts
-import { SaasConfigModule } from '@volo/abp.ng.saas/config';
-
-@NgModule({
- imports: [
- // other imports
- SaasConfigModule.forRoot(),
- // other imports
+// app.config.ts
+import { provideSaasConfig } from '@volo/abp.ng.saas/config';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideSaasConfig(),
],
- // ...
-})
-export class AppModule {}
+};
```
-The `SaasModule` should be imported and lazy-loaded in your routing module. It has a static `forLazy` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.saas`.
+The saas module should be imported and lazy-loaded in your routing configuration. It has a static `createRoutes` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.saas`.
```js
-// app-routing.module.ts
-const routes: Routes = [
- // other route definitions
+// app.routes.ts
+const APP_ROUTES: Routes = [
+ // ...
{
path: 'saas',
loadChildren: () =>
- import('@volo/abp.ng.saas').then(m => m.SaasModule.forLazy(/* options here */)),
+ import('@volo/abp.ng.saas').then(c => c.createRoutes(/* options here */)),
},
];
-
-@NgModule(/* AppRoutingModule metadata */)
-export class AppRoutingModule {}
```
-> If you have generated your project via the startup template, you do not have to do anything, because it already has both `SaasConfigModule` and `SaasModule`.
+> If you have generated your project via the startup template, you do not have to do anything, because it already has both configurations implemented.
Options
-You can modify the look and behavior of the module pages by passing the following options to `SaasModule.forLazy` static method:
+You can modify the look and behavior of the module pages by passing the following options to `createRoutes` static method:
- **entityActionContributors:** Changes grid actions. Please check [Entity Action Extensions for Angular](../framework/ui/angular/entity-action-extensions.md) for details.
- **toolbarActionContributors:** Changes page toolbar. Please check [Page Toolbar Extensions for Angular](../framework/ui/angular/page-toolbar-extensions.md) for details.
diff --git a/docs/en/modules/text-template-management.md b/docs/en/modules/text-template-management.md
index 9b2235314f..7f045cd8e1 100644
--- a/docs/en/modules/text-template-management.md
+++ b/docs/en/modules/text-template-management.md
@@ -162,45 +162,39 @@ See the `TextTemplateManagementPermissions` class members for all permissions de
#### Installation
-In order to configure the application to use the `TextTemplateManagementModule`, you first need to import `TextTemplateManagementConfigModule` from `@volo/abp.ng.text-template-management/config` to root module. `TextTemplateManagementConfigModule` has a static `forRoot` method which you should call for a proper configuration.
+In order to configure the application to use the text template management module, you first need to import `provideTextTemplateManagementConfig` from `@volo/abp.ng.text-template-management/config` to root configuration. Then, you will need to append it to the `appConfig` array.
```js
-// app.module.ts
-import { TextTemplateManagementConfigModule } from '@volo/abp.ng.text-template-management/config';
-
-@NgModule({
- imports: [
- // other imports
- TextTemplateManagementConfigModule.forRoot(),
- // other imports
+// app.config.ts
+import { provideTextTemplateManagementConfig } from '@volo/abp.ng.text-template-management/config';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideTextTemplateManagementConfig()
],
- // ...
-})
-export class AppModule {}
+};
```
-The `TextTemplateManagementModule` should be imported and lazy-loaded in your routing module. It has a static `forLazy` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.text-template-management`.
+The text template management module should be imported and lazy-loaded in your routing array. It has a static `createRoutes` method for configuration. Available options are listed below. It is available for import from `@volo/abp.ng.text-template-management`.
```js
-// app-routing.module.ts
-const routes: Routes = [
- // other route definitions
+// app.routes.ts
+const APP_ROUTES: Routes = [
+ // ...
{
path: 'text-template-management',
loadChildren: () =>
- import('@volo/abp.ng.text-template-management').then(m => m.TextTemplateManagementModule.forLazy(/* options here */)),
+ import('@volo/abp.ng.text-template-management').then(c => c.createRoutes(/* options here */)),
},
];
-
-@NgModule(/* AppRoutingModule metadata */)
-export class AppRoutingModule {}
```
-> If you have generated your project via the startup template, you do not have to do anything, because it already has both `TextTemplateManagementConfigModule` and `TextTemplateManagementModule`.
+> If you have generated your project via the startup template, you do not have to do anything, because it already has both configurations implemented.
Options
-You can modify the look and behavior of the module pages by passing the following options to `TextTemplateManagementModule.forLazy` static method:
+You can modify the look and behavior of the module pages by passing the following options to `createRoutes` static method:
- **entityActionContributors:** Changes grid actions. Please check [Entity Action Extensions for Angular](../framework/ui/angular/entity-action-extensions.md) for details.
- **toolbarActionContributors:** Changes page toolbar. Please check [Page Toolbar Extensions for Angular](../framework/ui/angular/page-toolbar-extensions.md) for details.
diff --git a/docs/en/release-info/migration-guides/abp-9-3.md b/docs/en/release-info/migration-guides/abp-9-3.md
index 0de650501e..7da446beee 100644
--- a/docs/en/release-info/migration-guides/abp-9-3.md
+++ b/docs/en/release-info/migration-guides/abp-9-3.md
@@ -2,6 +2,14 @@
This document is a guide for upgrading ABP v9.2 solutions to ABP v9.3. There are some changes in this version that may affect your applications, please read it carefully and apply the necessary changes to your application.
+## Switched to `MySql.EntityFrameworkCore` for EF Core MySQL Provider
+
+In this version, we switched the EF Core MySQL provider from `Pomelo.EntityFrameworkCore.MySql` to `MySql.EntityFrameworkCore`.
+
+If you want to use the `Pomelo.EntityFrameworkCore.MySql` provider, then you can follow the [Use Pomelo provider documentation](https://abp.io/docs/latest/framework/data/entity-framework-core/mysql#use-pomelo-provider) to migrate your application.
+
+> See the internal changes we made in [#23392](https://github.com/abpframework/abp/pull/23392), for implementation details.
+
## Updated `RabbitMQ.Client` to `7.x`
In this version, we updated `RabbitMQ.Client` to `7.1.2`. [This is a major version update](https://github.com/rabbitmq/rabbitmq-dotnet-client/blob/main/v7-MIGRATION.md) that brings significant improvements to the library:
diff --git a/docs/en/solution-templates/application-module/index.md b/docs/en/solution-templates/application-module/index.md
index 2b6de263fc..48013d2d90 100644
--- a/docs/en/solution-templates/application-module/index.md
+++ b/docs/en/solution-templates/application-module/index.md
@@ -183,45 +183,29 @@ The issue management page is empty in the beginning. You may change the content
Now, let's have a closer look at some key elements of your project.
-### The Main Module
+### The Main Component
-`IssueManagementModule` at the _angular/projects/issue-management/src/lib/issue-management.module.ts_ path is the main module of your module project. There are a few things worth mentioning in it:
+`IssueManagementComponent` at the _angular/projects/issue-management/src/lib/issue-management.routes.ts_ path is the main component of your module project. There are a few things worth mentioning in it:
-- Essential ABP modules, i.e. `CoreModule` and `ThemeSharedModule`, are imported.
-- `IssueManagementRoutingModule` is imported.
-- `IssueManagementComponent` is declared.
-- It is prepared for configurability. The `forLazy` static method enables [a configuration to be passed to the module when it is loaded by the router](https://volosoft.com/blog/how-to-configure-angular-modules-loaded-by-the-router).
-
-
-### The Main Routing Module
-
-`IssueManagementRoutingModule` at the _angular/projects/issue-management/src/lib/issue-management-routing.module.ts_ path is the main routing module of your module project. It currently does two things:
-
-- Loads `DynamicLayoutComponent` at base path it is given.
-- Loads `IssueManagementComponent` as child to the layout, again at the given base path.
-
-You can rearrange this module to load more than one component at different routes, but you need to update the route provider at _angular/projects/issue-management/config/src/providers/route.provider.ts_ to match the new routing structure with the routes in the menu. Please check [Modifying the Menu](../../framework/ui/angular/modifying-the-menu.md) to see how route providers work.
+- `IssueManagementComponent` is declared as standalone within the latest migration.
+- `ISSUE_MANAGEMENT_ROUTES` is configured to be lazy-loaded.
### The Config Module
-There is a config module at the _angular/projects/issue-management/config/src/issue-management-config.module.ts_ path. The static `forRoot` method of this module is supposed to be called at the route level. So, you may assume the following will take place:
+There is a config module at the _angular/projects/issue-management/config/src/providers/route.provider.ts_ path. The static `provideIssueManagement` method of this module is supposed to be called at the route level. So, you may assume the following will take place:
```js
-@NgModule({
- imports: [
- /* other imports */
-
- IssueManagementConfigModule.forRoot(),
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideIssueManagement(),
+ // ...
],
-
- /* rest of the module meta data */
-})
-export class AppModule {}
+};
```
You can use this static method to configure an application that uses your module project. An example of such configuration is already implemented and the `ISSUE_MANAGEMENT_ROUTE_PROVIDERS` token is provided here. The method can take options which enables further configuration possibilities.
-The difference between the `forRoot` method of the config module and the `forLazy` method of the main module is that, for smallest bundle size, the former should only be used when you have to configure an app before your module is even loaded.
### Testing Angular UI
diff --git a/docs/en/solution-templates/layered-web-application/images/angular-folder-structure.png b/docs/en/solution-templates/layered-web-application/images/angular-folder-structure.png
index 95bfc8986f..1ee4f87081 100644
Binary files a/docs/en/solution-templates/layered-web-application/images/angular-folder-structure.png and b/docs/en/solution-templates/layered-web-application/images/angular-folder-structure.png differ
diff --git a/docs/en/solution-templates/layered-web-application/images/angular-template-structure-diagram.png b/docs/en/solution-templates/layered-web-application/images/angular-template-structure-diagram.png
index dd7a4e5cc7..10841cccd0 100644
Binary files a/docs/en/solution-templates/layered-web-application/images/angular-template-structure-diagram.png and b/docs/en/solution-templates/layered-web-application/images/angular-template-structure-diagram.png differ
diff --git a/docs/en/solution-templates/layered-web-application/web-applications.md b/docs/en/solution-templates/layered-web-application/web-applications.md
index 8a1b71fda7..ce67866815 100644
--- a/docs/en/solution-templates/layered-web-application/web-applications.md
+++ b/docs/en/solution-templates/layered-web-application/web-applications.md
@@ -49,25 +49,25 @@ The Angular application runs as a client-side SPA in the user's browser and comm

-Each of ABP modules is an NPM package. Some ABP modules are added as a dependency in `package.json`. These modules install with their dependencies. To see all ABP packages, you can run the following command in the `angular` folder:
+Each of ABP module is an NPM package. Some ABP modules are added as a dependency in `package.json`. These modules are installed with their dependencies. To see all ABP packages, you can run the following command in the `angular` folder:
```bash
yarn list --pattern abp
```
-Angular application module structure:
+Angular application structure:

-### AppModule
+### Application Config
-`AppModule` is the root module of the application. Some of the ABP modules and some essential modules are imported to `AppModule`.
+Application config is the root configuration of the application. Some of the ABP modules and some essential providers are imported to `appConfig`.
-ABP Config modules have also been imported to `AppModule`Â for initial requirements of the lazy-loadable ABP modules.
+ABP Config modules have also been provided in `appConfig`Â for initial requirements of the lazy-loadable ABP modules.
-### AppRoutingModule
+### APP_ROUTES
-There are lazy-loadable ABP modules in the `AppRoutingModule` as routes.
+There are lazy-loadable ABP modules in the `APP_ROUTES` as routes.
> Paths of ABP Modules should not be changed.
@@ -76,7 +76,7 @@ You should add `routes` property in the `data` object to add a link on the menu
```js
{
path: 'dashboard',
- loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule),
+ loadComponent: () => import('./dashboard/dashboard.component').then(c => c.DashboardComponent),
canActivate: [authGuard, permissionGuard],
data: {
routes: {
@@ -97,19 +97,13 @@ In the above example;
After the above `routes` definition, if the user is authorized, the dashboard link will appear on the menu.
-### Shared Module
-
-The modules that may be required for all modules have been imported to the `SharedModule`. You should import `SharedModule` to all modules.
-
-See the [Sharing Modules](https://angular.io/guide/sharing-ngmodules) document.
-
### Environments
The files under the `src/environments` folder have the essential configuration of the application.
-### Home Module
+### Home Component
-Home module is an example lazy-loadable module that loads on the root address of the application.
+Home component is an example lazy-loadable component that loads on the root address of the application.
### Styles
diff --git a/docs/en/solution-templates/microservice/localization-system.md b/docs/en/solution-templates/microservice/localization-system.md
index a350de6848..e11232236e 100644
--- a/docs/en/solution-templates/microservice/localization-system.md
+++ b/docs/en/solution-templates/microservice/localization-system.md
@@ -92,12 +92,12 @@ You can define new localization entries in the language files under the **Locali
Angular UI gets the localization resources from the [`application-localization`](../../framework/api-development/standard-apis/localization.md) API's response and merges these resources in the `ConfigStateService` for the localization entries/resources coming from the backend side.
-In addition, you may need to define some localization entries and only use them on the UI side. ABP already provides the related configuration for you, so you don't need to make any configurations related to that and instead you can directly define localization entries in the `app.-module.ts` file of your angular application as follows:
+In addition, you may need to define some localization entries and only use them on the UI side. ABP already provides the related configuration for you, so you don't need to make any configurations related to that and instead you can directly define localization entries in the `app.config.ts` file of your angular application as follows:
```ts
import { provideAbpCore, withOptions } from '@abp/ng.core';
-@NgModule({
+export const appConfig: ApplicationConfig = {
providers: [
// ...
provideAbpCore(
@@ -119,11 +119,8 @@ import { provideAbpCore, withOptions } from '@abp/ng.core';
]
}),
),
- ...
],
-})
-export class AppModule {}
-
+};
```
After defining the localization entries, it can be used as below:
diff --git a/docs/en/suite/solution-structure.md b/docs/en/suite/solution-structure.md
index b1949a137a..5abd50d751 100644
--- a/docs/en/suite/solution-structure.md
+++ b/docs/en/suite/solution-structure.md
@@ -226,25 +226,21 @@ Angular application folder structure looks like below:

-Each of ABP modules is an NPM package. Some ABP modules are added as a dependency in `package.json`. These modules install with their dependencies. To see all ABP packages, you can run the following command in the `angular` folder:
+Each of ABP module is an NPM package. Some ABP modules are added as a dependency in `package.json`. These modules are installed with their dependencies. To see all ABP packages, you can run the following command in the `angular` folder:
```bash
yarn list --pattern abp
```
-Angular application module structure:
+### Application Config
-
+Application config is the root module of the application. Some of ABP modules and some essential modules are imported to the `appConfig`.
-### AppModule
+ABP Config modules also have been imported to `appConfig`Â for initially requirements of lazy-loadable ABP modules.
-`AppModule` is the root module of the application. Some of ABP modules and some essential modules imported to the `AppModule`.
+### APP_ROUTES
-ABP Config modules also have imported to `AppModule`Â for initially requirements of lazy-loadable ABP modules.
-
-### AppRoutingModule
-
-There are lazy-loadable ABP modules in the `AppRoutingModule` as routes.
+There are lazy-loadable ABP modules in the `APP_ROUTES` as routes.
> Paths of ABP Modules should not be changed.
@@ -253,7 +249,7 @@ You should add `routes` property in the `data` object to add a link on the menu
```js
{
path: 'dashboard',
- loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule),
+ loadComponent: () => import('./dashboard/dashboard.component').then(c => c.DashboardComponent),
canActivate: [authGuard, permissionGuard],
data: {
routes: {
@@ -274,25 +270,19 @@ In the above example;
After the above `routes` definition, if the user is authorized, the dashboard link will appear on the menu.
-### Shared Module
-
-The modules that may be required for all modules have imported to the `SharedModule`. You should import the `SharedModule` to all modules.
-
-See the [Sharing Modules](https://angular.io/guide/sharing-ngmodules) document.
-
### Environments
The files under the `src/environments` folder has the essential configuration of the application.
-### Home Module
+### Home Component
-Home module is an example lazy-loadable module that loads on the root address of the application.
+Home component is an example lazy-loadable standalone component that loads on the root address of the application.
-### Dashboard Module
+### Dashboard Component
-Dashboard module is a lazy-loadable module. `HostDashboardComponent` and `TenantDashboardComponent` declared to this module. One of these components is shown according to the user's authorization.
+Dashboard component is a lazy-loadable component. `HostDashboardComponent` and `TenantDashboardComponent` are declared within this root component. One of these components is shown according to authorization of the user.
-There are four widgets in the `HostDashboardComponent` which declared in ABP modules.
+There are four widgets in the `HostDashboardComponent` which are declared in ABP modules.
### Styles
diff --git a/docs/en/tutorials/microservice/part-05.md b/docs/en/tutorials/microservice/part-05.md
index 3fcfc9cac8..9c037617a1 100644
--- a/docs/en/tutorials/microservice/part-05.md
+++ b/docs/en/tutorials/microservice/part-05.md
@@ -516,14 +516,6 @@ abp generate-proxy -t ng -m ordering -u http://localhost:44311 --target ordering
For more information, please refer to the [Service Proxies](https://abp.io/docs/latest/framework/ui/angular/service-proxies) documentation.
-### Create Order Module
-
-Run the following command line to create a new module, named `OrderModule` in the root folder of the angular application:
-
-```bash
-yarn ng generate module order --module ordering-service --project ordering-service --routing --route orders
-```
-
### Add Order Route
* Create `order-base.routes.ts` file under the `projects/ordering-service/config/src/providers` folder and add the following code:
@@ -565,39 +557,102 @@ function configureRoutes() {
routesService.add(routes);
}
```
+* Open the `projects/ordering-service/config/src/providers/route.provider.ts` file and add `ORDERS_ORDER_ROUTE_PROVIDER` to the `ORDER_SERVICE_PROVIDERS` array as following code:
-* Open the `projects/ordering-service/config/src/ordering-service-config.module.ts` file and add `ORDERS_ORDER_ROUTE_PROVIDER` to the `providers` array as following code:
-
-*ordering-service-config.module.ts*
+*route.provider.ts*
```typescript
-import { ModuleWithProviders, NgModule } from '@angular/core';
-import { ORDERING_SERVICE_ROUTE_PROVIDERS } from './providers/route.provider';
-import { ORDERS_ORDER_ROUTE_PROVIDER } from './providers/order-route.provider';
-
-@NgModule()
-export class OrderingServiceConfigModule {
- static forRoot(): ModuleWithProviders {
- return {
- ngModule: OrderingServiceConfigModule,
- providers: [ORDERING_SERVICE_ROUTE_PROVIDERS, ORDERS_ORDER_ROUTE_PROVIDER],
- };
- }
+import { eLayoutType, RoutesService } from '@abp/ng.core';
+import {
+ EnvironmentProviders,
+ inject,
+ makeEnvironmentProviders,
+ provideAppInitializer,
+} from '@angular/core';
+import { eOrderingServiceRouteNames } from '../enums/route-names';
+import { ORDERS_ORDER_ROUTE_PROVIDER } from './order-route.provider';
+
+
+export const ORDER_SERVICE_ROUTE_PROVIDERS = [
+ provideAppInitializer(() => {
+ configureRoutes();
+ }),
+];
+
+export function configureRoutes() {
+ const routesService = inject(RoutesService);
+ routesService.add([
+ {
+ path: '/order-service',
+ name: eOrderingServiceRouteNames.OrderService,
+ iconClass: 'fas fa-book',
+ layout: eLayoutType.application,
+ order: 3,
+ },
+ ]);
+}
+
+const ORDER_SERVICE_PROVIDERS: EnvironmentProviders[] = [
+ ...ORDER_SERVICE_ROUTE_PROVIDERS,
+ ...ORDERS_ORDER_ROUTE_PROVIDER
+];
+
+export function provideOrderService() {
+ return makeEnvironmentProviders(ORDER_SERVICE_PROVIDERS);
}
```
+* Do not forget adding `provideOrderService()` to the providers inside `app.config.ts` as follows:
+
+```typescript
+import { provideOrderService } from '@order-service/config';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideOrderService()
+ ],
+};
+```
+
+* Lastly, you need to update the `APP_ROUTES` array in `app.routes.ts` file as follows:
+
+```typescript
+// app.routes.ts
+export const APP_ROUTES: Routes = [
+ // ...
+ {
+ path: 'order-service',
+ children: ORDER_SERVICE_ROUTES,
+ },
+];
+```
+
+```typescript
+// order-service.routes.ts
+export const ORDER_SERVICE_ROUTES: Routes = [
+ {
+ path: '',
+ pathMatch: 'full',
+ component: RouterOutletComponent,
+ },
+ { path: 'orders', children: ORDER_ROUTES },
+];
+```
+
### Create Order Page
* Create `order.component.ts` file under the `projects/ordering-service/src/lib/order` folder as following code:
```typescript
import { Component } from '@angular/core';
+import { CommonModule } from '@angular/common';
import { OrderDto, OrderService } from './proxy/ordering-service/services';
@Component({
selector: 'lib-order',
- standalone: false,
templateUrl: './order.component.html',
styleUrl: './order.component.css'
+ imports: [CommonModule]
})
export class OrderComponent {
diff --git a/docs/en/ui-themes/lepton-x-lite/angular.md b/docs/en/ui-themes/lepton-x-lite/angular.md
index 430bc2ee73..2943a78524 100644
--- a/docs/en/ui-themes/lepton-x-lite/angular.md
+++ b/docs/en/ui-themes/lepton-x-lite/angular.md
@@ -31,42 +31,33 @@ yarn add bootstrap-icons
Note: You should remove the old theme styles from "angular.json" if you are switching from "ThemeBasic" or "Lepton."
Look at the [Theme Configurations](../../framework/ui/angular/theme-configurations.md) list of styles. Depending on your theme, you can alter your styles in angular.json.
-- Finally, remove `ThemeBasicModule`, `provideThemeBasicConfig` from `app.module.ts`, and import the related modules in `app.module.ts`
+- Finally, remove `provideThemeBasicConfig` from `app.config.ts`, and import the related providers in `app.config.ts`
```js
-import { ThemeLeptonXModule } from "@abp/ng.theme.lepton-x";
+import { provideThemeLeptonX } from "@abp/ng.theme.lepton-x";
+import { provideSideMenuLayout } from "@abp/ng.theme.lepton-x/layouts";
-@NgModule({
- imports: [
- // ...
- // do not forget to remove ThemeBasicModule or other old theme module
- // ThemeBasicModule
- ThemeLeptonXModule.forRoot()
- ],
+export const appConfig: ApplicationConfig = {
providers: [
- // do not forget to remove provideThemeBasicConfig or other old theme providers
- // provideThemeBasicConfig
+ // ...
+ provideSideMenuLayout(),
+ provideThemeLeptonX(),
],
- // ...
-})
-export class AppModule {}
+};
```
-Note: If you employ [Resource Owner Password Flow](../../framework/ui/angular/authorization.md#resource-owner-password-flow) for authorization, you should import the following module as well:
+Note: If you employ [Resource Owner Password Flow](../../framework/ui/angular/authorization.md#resource-owner-password-flow) for authorization, you should provide the following provider as well:
```js
-import { AccountLayoutModule } from "@abp/ng.theme.lepton-x/account";
+import { provideAccountLayout } from "@abp/ng.theme.lepton-x/account";
-@NgModule({
- // ...
- imports: [
- // ...
- AccountLayoutModule.forRoot(),
+export const appConfig: ApplicationConfig = {
+ providers: [
// ...
+ provideAccountLayout()
],
- // ...
-})
-export class AppModule {}
+};
+
```
To change the logos and brand color of `LeptonX`, simply add the following CSS to the `styles.scss`
diff --git a/docs/en/ui-themes/lepton-x/angular.md b/docs/en/ui-themes/lepton-x/angular.md
index 60ad62b5d9..af1713cec8 100644
--- a/docs/en/ui-themes/lepton-x/angular.md
+++ b/docs/en/ui-themes/lepton-x/angular.md
@@ -9,51 +9,36 @@ To add `LeptonX` into your existing projects, follow the steps below.
Add theme-specific styles into the `styles` array of the file. Check the [Theme Configurations](../../framework/ui/angular/theme-configurations.md#lepton-x-commercial) documentation for more information.
-Importing a CSS file as an ECMA module is not supported in Angular 14. Therefore, we need to add the styles in the angular.json file.
-- At last, remove `ThemeLeptonModule` from `app.module.ts` and `shared.module.ts`, and import the following modules in `app.module.ts`
+- At last, remove `provideThemeLepton` from `app.config.ts`, and add the following providers in `app.config.ts`
+
```ts
-import {
- HttpErrorComponent,
- ThemeLeptonXModule,
-} from "@volosoft/abp.ng.theme.lepton-x";
-import { SideMenuLayoutModule } from "@volosoft/abp.ng.theme.lepton-x/layouts";
-
-@NgModule({
- // ...
- imports: [
- // ...
- // ThemeLeptonModule.forRoot(), -> remove this line.
- ThemeLeptonXModule.forRoot(),
- SideMenuLayoutModule.forRoot(), // depends on which layout you choose
- // ...
+import { provideThemeLeptonX } from '@volosoft/abp.ng.theme.lepton-x';
+import { provideSideMenuLayout } from '@volosoft/abp.ng.theme.lepton-x/layouts';
+// import { provideThemeLepton } from '@volo/abp.ng.theme.lepton';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // provideThemeLepton() delete this
+ provideSideMenuLayout(), // depends on which layout you choose
+ provideThemeLeptonX(),
],
- // ...
-})
-export class AppModule {}
+};
```
-If you want to use the **`Top Menu`** instead of the **`Side Menu`**, add TopMenuLayoutModule as below,and [this style imports](https://docs.abp.io/en/abp/7.4/UI/Angular/Theme-Configurations#lepton-x-commercial)
+If you want to use the **`Top Menu`** instead of the **`Side Menu`**, add `provideTopMenuLayout` as below,and [this style imports](https://docs.abp.io/en/abp/7.4/UI/Angular/Theme-Configurations#lepton-x-commercial)
```ts
-import {
- HttpErrorComponent,
- ThemeLeptonXModule,
-} from "@volosoft/abp.ng.theme.lepton-x";
-import { TopMenuLayoutModule } from "@volosoft/abp.ng.theme.lepton-x/layouts";
-
-@NgModule({
- // ...
- imports: [
- // ...
- // ThemeLeptonModule.forRoot(), -> remove this line.
- ThemeLeptonXModule.forRoot(),
- TopMenuLayoutModule.forRoot(),
+import { provideThemeLeptonX } from '@volosoft/abp.ng.theme.lepton-x';
+import { provideTopMenuLayout } from '@volosoft/abp.ng.theme.lepton-x/layouts';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ provideTopMenuLayout(),
+ provideThemeLeptonX(),
],
- // ...
-})
-export class AppModule {}
+};
```
- At this point, `LeptonX` theme should be up and running within your application. However, you may need to overwrite some css variables based your needs for every theme available as follows:
diff --git a/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md b/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md
index afea2fd228..dc858715d0 100644
--- a/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md
+++ b/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md
@@ -37,26 +37,20 @@ export const NEW_THEME_PROVIDER = [
In this code snippet, we create a new instance of the LpxTheme class called myNewThemeDefinition. We specify the bundles that make up the theme (e.g., "bootstrap-custom" and "custom-theme"), the style name for the theme, a label to display in the UI, and an icon (using Bootstrap icons in this example).
### Step 2: Registering the New Theme Provider
-Now that we have defined the new theme appearance, we need to register it as a provider in our Angular project. Open the app.module.ts file (or the module where LeptonX is configured), and add the following code:
+Now that we have defined the new theme appearance, we need to register it as a provider in our Angular project. Open the `app.config.ts` file (or the configuration where LeptonX is configured), and add the following code:
```js
import { NEW_THEME_PROVIDER } from './new-theme.provider.ts';
-@NgModule({
- imports: [
- // ...
- ],
+export const appConfig: ApplicationConfig = {
providers: [
// ...
- NEW_THEME_PROVIDER,
+ NEW_THEME_PROVIDER
],
- // ...
-})
-export class AppModule { }
-
+};
```
-By importing the `NEW_THEME_PROVIDER` from the file where we defined our theme, we can add it to the providers array of our Angular module. This makes the new theme appearance available throughout the application.
+By importing the `NEW_THEME_PROVIDER` from the file where we defined our theme, we can add it to the providers array of our Angular application configuration. This makes the new theme appearance available throughout the application.
### Step 3: Adding the Styles Path to angular.json
diff --git a/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md b/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md
index 4b58c4b106..264091b561 100644
--- a/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md
+++ b/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md
@@ -1,26 +1,25 @@
# Configuring the Default Theme for LeptonX
-The LeptonX theme offers multiple appearances to suit your application's visual style. You can easily configure the default theme for your application using the ThemeLeptonXModule provided by LeptonX.
+The LeptonX theme offers multiple appearances to suit your application's visual style. You can easily configure the default theme for your application using the `provideThemeLeptonX` provided by LeptonX.
### Configuration Code
-To set the default theme, you need to configure the ThemeLeptonXModule using the forRoot() function in your application's main module (often referred to as AppModule). Here's an example:
+To set the default theme, you need to configure the `provideThemeLeptonX` using the `withThemeLeptonXOptions({...})` function in the main configuration of your application (often referred to as appConfig). Here's an example:
+
```js
-import { ThemeLeptonXModule } from 'leptonx'; // Import the LeptonX theme module
+import { provideThemeLeptonX, withThemeLeptonXOptions } from '@volosoft/abp.ng.theme.lepton-x';
-@NgModule({
- // ... Other module configurations
- imports: [
- // ... Other imported modules
- ThemeLeptonXModule.forRoot({
- defaultTheme: 'light', // Set the default theme to 'light'
- }),
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideThemeLeptonX(
+ withThemeLeptonXOptions({
+ defaultTheme: 'light'
+ })
+ ),
],
- bootstrap: [AppComponent],
-})
-export class AppModule {}
+};
```
-
-In the example above, we've imported the ThemeLeptonXModule and configured it using the forRoot() function. By providing the defaultTheme parameter and setting its value to 'light',
+In the example above, we've imported the `provideThemeLeptonX` and `withThemeLeptonXOptions`, then configured it using the option parameters. By providing the `defaultTheme` parameter and setting its value to 'light'.
If you delete the defaultTheme parameter in the configuration object, the LeptonX theme will use the default value of "System" as the default theme appearance.
diff --git a/docs/en/ui-themes/lepton-x/how-to-use-lepton-x-components-with-angular-custom-layout.md b/docs/en/ui-themes/lepton-x/how-to-use-lepton-x-components-with-angular-custom-layout.md
index f68f3bd90f..57cdcd0ec9 100644
--- a/docs/en/ui-themes/lepton-x/how-to-use-lepton-x-components-with-angular-custom-layout.md
+++ b/docs/en/ui-themes/lepton-x/how-to-use-lepton-x-components-with-angular-custom-layout.md
@@ -5,25 +5,22 @@ First, The custom layout component should be created and implemented for the Ang
Related content can be found in the [Component Replacement Document](../../framework/ui/angular/component-replacement.md#how-to-replace-a-layout)
-
-After creating a custom layout, these imports should be imported in the `app.module.ts` file because the modules contain definitions of the Lepton X components.
+After creating a custom layout, these imports should be imported in the `app.config.ts` file because the modules contain definitions of the Lepton X components.
```javascript
-// app.module.ts
+// app.config.ts
import { LpxSideMenuLayoutModule } from '@volosoft/ngx-lepton-x/layouts';
import { LpxResponsiveModule } from '@volo/ngx-lepton-x.core';// optional. Only, if you are using lpxResponsive directive
- @NgModule({
- //... removed for clearity
- imports: [
- //... removed for clearity
- LpxSideMenuLayoutModule,
- LpxResponsiveModule // <-- Optional
- ]
-})
-export class AppModule {}
-
+export const appConfig: ApplicationConfig = {
+ providers: [
+ importProvidersFrom([
+ LpxSideMenuLayoutModule,
+ LpxResponsiveModule // <-- Optional
+ ])
+ ],
+};
```
Here is the simplified version of the `side-menu-layout.ts` file. Only the ABP Component Replacement code has been removed.
diff --git a/docs/en/ui-themes/lepton/customizing-lepton-theme.md b/docs/en/ui-themes/lepton/customizing-lepton-theme.md
index fb88742c5b..d626fd2769 100644
--- a/docs/en/ui-themes/lepton/customizing-lepton-theme.md
+++ b/docs/en/ui-themes/lepton/customizing-lepton-theme.md
@@ -12,19 +12,28 @@ You may want to change certain aspects of your website’s appearance with a cu
## Adding Custom Style
-There is a `customStyle` boolean configuration in `ThemeLeptonModule`'s `forRoot` method. If this configuration is true, the style selection box is not included in the theme settings form and `ThemeLeptonModule` does not load its own styles. In this case, a custom style file must be added to the styles array in `angular.json` or must be imported by `style.scss`.
+There is a `customStyle` boolean configuration in `provideThemeLepton(withLeptonOptions({...}))` method. If this configuration is true, the style selection box is not included in the theme settings form and `theme-lepton` does not load its own styles. In this case, a custom style file must be added to the styles array in `angular.json` or must be imported by `style.scss`.
> Only angular project styles can be changed in this way. If the authorization flow is authorization code flow, MVC pages (login, profile, etc) are not affected by this change.
Custom style implementation can be done with the following steps
-Set `customStyle` property to `true` where is `ThemeLeptonModule` imported with `forRoot` method.
+Set `customStyle` property to `true` where `provideThemeLepton(withLeptonOptions({...}))` method is called.
```javascript
-// app.module.ts
-ThemeLeptonModule.forRoot({
- customStyle: true
-})
+// app.config.ts
+import { provideThemeLepton, withOptions as withLeptonOptions } from '@volo/abp.ng.theme.lepton';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideThemeLepton(
+ withLeptonOptions({
+ customStyle: true
+ })
+ )
+ ],
+};
```
Import your style file to `src/style.scss`
@@ -68,7 +77,7 @@ Or add your style file to the `styles` arrays which in `angular.json` file
## Inserting Custom Content To Lepton Menu
-Lepton menu can take custom content both before and after the menu items displayed. In order to achieve this, pass a component as content through the parameters of `ThemeLeptonModule.forRoot` when you import the module in your root module, i.e. `AppModule`. Let's take a look at some examples.
+Lepton menu can take custom content both before and after the menu items displayed. In order to achieve this, pass a component as content through the parameters of `provideThemeLepton(withLeptonOptions({...}))` when you import the provider in your root app configuration, i.e. `appConfig`. Let's take a look at some examples.
### Placing Custom Content Before & After Menu Items
@@ -76,7 +85,10 @@ Lepton menu can take custom content both before and after the menu items display
First step is to create a component which will serve as the custom content.
```js
+// ...
@Component({
+ // ...
+ imports: [AsyncPipe],
template: `
Support Issues
@@ -88,27 +100,23 @@ First step is to create a component which will serve as the custom content.
export class SupportLinkComponent {
issueCount$ = of(26); // dummy count, replace this with an actual service
}
-
-@NgModule({
- declarations: [SupportLinkComponent],
- imports: [CommonModule],
-})
-export class SupportLinkModule {}
```
-Now, pass this component as `contentAfterRoutes` option to `ThemeLeptonModule`.
+Now, pass this component as `contentAfterRoutes` option to `provideThemeLepton(withLeptonOptions({...}))`.
```js
-@NgModule({
- imports: [
- // other imports are removed for sake of brevity
- SupportLinkModule,
- ThemeLeptonModule.forRoot({
- contentAfterRoutes: [SupportLinkComponent],
- })
+import { provideThemeLepton, withOptions as withLeptonOptions } from '@volo/abp.ng.theme.lepton';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideThemeLepton(
+ withLeptonOptions({
+ contentAfterRoutes: [SupportLinkComponent],
+ })
+ )
],
-})
-export class AppModule {}
+};
```
If you start the dev server, you must see the inserted content as follows:
@@ -124,24 +132,25 @@ Placing the content before menu items is straightforward: Just replace `contentA
### Placing a Search Input Before Menu Items
-The Lepton package has a search component designed to work with the routes in the menu. You can simply import the module and pass the component as `contentBeforeRoutes` option to `ThemeLeptonModule`.
+The Lepton package has a search component designed to work with the routes in the menu. You can simply import the provider and pass the component as `contentBeforeRoutes` option to `provideThemeLepton(withLeptonOptions({...}))`.
```js
-import { MenuSearchComponent, MenuSearchModule } from '@volo/abp.ng.theme.lepton/extensions';
-
-@NgModule({
- imports: [
- // other imports are removed for sake of brevity
-
- MenuSearchModule.forRoot({
+import { provideThemeLepton, withOptions as withLeptonOptions } from '@volo/abp.ng.theme.lepton';
+import { MenuSearchComponent, provideMenuSearch } from '@volo/abp.ng.theme.lepton/extensions';
+
+export const appConfig: ApplicationConfig = {
+ providers: [
+ // ...
+ provideThemeLepton(
+ withLeptonOptions({
+ contentBeforeRoutes: [MenuSearchComponent],
+ })
+ ),
+ provideMenuSearch({
limit: 3 // search result limit (default: Infinity)
- }),
- ThemeLeptonModule.forRoot({
- contentBeforeRoutes: [MenuSearchComponent],
})
],
-})
-export class AppModule {}
+};
```
Here is how the search input works:
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/LIbs/InstallLibsService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/LIbs/InstallLibsService.cs
index 212e09c631..5f546717cb 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/LIbs/InstallLibsService.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/LIbs/InstallLibsService.cs
@@ -48,11 +48,6 @@ public class InstallLibsService : IInstallLibsService, ITransientDependency
return;
}
- if (!NpmHelper.IsYarnAvailable())
- {
- Logger.LogWarning("YARN is not installed, which may cause package inconsistency. ABP uses 'npx yarn ' behind the scenes to prevent possible inconsistencies.");
- }
-
Logger.LogInformation($"Found {projectPaths.Count} projects.");
foreach (var projectPath in projectPaths)
{
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs
index 8a67d20b31..0118fd9874 100644
--- a/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs
@@ -80,6 +80,37 @@ public static class TypeHelper
return false;
}
+ public static TProperty? ChangeTypePrimitiveExtended(object? value)
+ {
+ if (value == null)
+ {
+ return default;
+ }
+
+ if (IsPrimitiveExtended(typeof(TProperty), includeEnums: true))
+ {
+ var conversionType = typeof(TProperty);
+ if (IsNullable(conversionType))
+ {
+ conversionType = conversionType.GetFirstGenericArgumentIfNullable();
+ }
+
+ if (conversionType == typeof(Guid))
+ {
+ return (TProperty)TypeDescriptor.GetConverter(conversionType).ConvertFromInvariantString(value.ToString()!)!;
+ }
+
+ if (conversionType.IsEnum)
+ {
+ return (TProperty)Enum.Parse(conversionType, value.ToString()!);
+ }
+
+ return (TProperty)Convert.ChangeType(value, conversionType, CultureInfo.InvariantCulture);
+ }
+
+ throw new AbpException("ChangeTypePrimitiveExtended does not support non-primitive types. Use non-generic GetProperty method and handle type casting manually.");
+ }
+
public static bool IsNullable(Type type)
{
return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>);
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs
index cd85acce50..f85a156184 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs
@@ -43,6 +43,13 @@ public abstract class BasicRepositoryBase :
public IEntityChangeTrackingProvider EntityChangeTrackingProvider => LazyServiceProvider.LazyGetRequiredService();
public bool? IsChangeTrackingEnabled { get; protected set; }
+
+ protected string? EntityName { get; private set; }
+
+ public void SetEntityName(string? name)
+ {
+ EntityName = name;
+ }
protected BasicRepositoryBase()
{
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs
index dc39255b25..d5a66b1fe7 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs
@@ -13,6 +13,8 @@ namespace Volo.Abp.Domain.Repositories;
public interface IRepository
{
bool? IsChangeTrackingEnabled { get; }
+
+ void SetEntityName(string? name);
}
public interface IRepository : IReadOnlyRepository, IBasicRepository
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs
index 3c43798c38..9fc9c16d31 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs
@@ -250,4 +250,13 @@ public static class RepositoryExtensions
hardDeleteEntities.Add(entity);
await repository.DeleteAsync(entity, autoSave, cancellationToken);
}
+
+ public static TRepository WithEntityName(
+ this TRepository repository,
+ string name
+ ) where TRepository : class, IRepository
+ {
+ repository.SetEntityName(name);
+ return repository;
+ }
}
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs
index 0ed9a2e199..fd61e72781 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs
@@ -61,7 +61,7 @@ public class EfCoreRepository : RepositoryBase, IE
}
[Obsolete("Use GetDbSetAsync() method.")]
- public virtual DbSet DbSet => DbContext.Set();
+ public virtual DbSet DbSet => GetDbSetInternal(DbContext);
Task> IEfCoreRepository.GetDbSetAsync()
{
@@ -70,7 +70,7 @@ public class EfCoreRepository : RepositoryBase, IE
protected async Task> GetDbSetAsync()
{
- return (await GetDbContextAsync()).Set();
+ return GetDbSetInternal(await GetDbContextAsync());
}
protected async Task GetDbConnectionAsync()
@@ -110,7 +110,7 @@ public class EfCoreRepository : RepositoryBase, IE
var dbContext = await GetDbContextAsync();
- var savedEntity = (await dbContext.Set().AddAsync(entity, GetCancellationToken(cancellationToken))).Entity;
+ var savedEntity = (await GetDbSetInternal(dbContext).AddAsync(entity, GetCancellationToken(cancellationToken))).Entity;
if (autoSave)
{
@@ -120,6 +120,13 @@ public class EfCoreRepository : RepositoryBase, IE
return savedEntity;
}
+ private DbSet GetDbSetInternal(TDbContext dbContext)
+ {
+ return EntityName != null
+ ? dbContext.Set(EntityName)
+ : dbContext.Set();
+ }
+
public async override Task InsertManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default)
{
var entityArray = entities.ToArray();
@@ -147,7 +154,7 @@ public class EfCoreRepository : RepositoryBase, IE
return;
}
- await dbContext.Set().AddRangeAsync(entityArray, cancellationToken);
+ await GetDbSetInternal(dbContext).AddRangeAsync(entityArray, cancellationToken);
if (autoSave)
{
@@ -159,9 +166,10 @@ public class EfCoreRepository : RepositoryBase, IE
{
var dbContext = await GetDbContextAsync();
- if (dbContext.Set().Local.All(e => e != entity))
+ var dbSet = GetDbSetInternal(dbContext);
+ if (dbSet.Local.All(e => e != entity))
{
- dbContext.Set().Attach(entity);
+ dbSet.Attach(entity);
dbContext.Update(entity);
}
@@ -197,7 +205,7 @@ public class EfCoreRepository : RepositoryBase, IE
var dbContext = await GetDbContextAsync();
- dbContext.Set().UpdateRange(entityArray);
+ GetDbSetInternal(dbContext).UpdateRange(entityArray);
if (autoSave)
{
@@ -209,7 +217,7 @@ public class EfCoreRepository : RepositoryBase, IE
{
var dbContext = await GetDbContextAsync();
- dbContext.Set().Remove(entity);
+ GetDbSetInternal(dbContext).Remove(entity);
if (autoSave)
{
@@ -318,7 +326,7 @@ public class EfCoreRepository : RepositoryBase, IE
public async override Task DeleteAsync(Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default)
{
var dbContext = await GetDbContextAsync();
- var dbSet = dbContext.Set();
+ var dbSet = GetDbSetInternal(dbContext);
var entities = await dbSet
.Where(predicate)
@@ -335,8 +343,9 @@ public class EfCoreRepository : RepositoryBase, IE
public async override Task DeleteDirectAsync(Expression> predicate, CancellationToken cancellationToken = default)
{
var dbContext = await GetDbContextAsync();
- var dbSet = dbContext.Set();
- await dbSet.Where(predicate).ExecuteDeleteAsync(GetCancellationToken(cancellationToken));
+ await GetDbSetInternal(dbContext)
+ .Where(predicate)
+ .ExecuteDeleteAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task EnsureCollectionLoadedAsync(
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
index e91d08b8c9..fceb338051 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
@@ -37,6 +37,7 @@ using Volo.Abp.Reflection;
using Volo.Abp.Timing;
using Volo.Abp.Uow;
using Microsoft.EntityFrameworkCore.Diagnostics;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace Volo.Abp.EntityFrameworkCore;
@@ -124,19 +125,9 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
TrySetDatabaseProvider(modelBuilder);
- foreach (var entityType in modelBuilder.Model.GetEntityTypes())
+ foreach (var entityType in modelBuilder.Model.GetEntityTypes().ToArray())
{
- ConfigureBasePropertiesMethodInfo
- .MakeGenericMethod(entityType.ClrType)
- .Invoke(this, new object[] { modelBuilder, entityType });
-
- ConfigureValueConverterMethodInfo
- .MakeGenericMethod(entityType.ClrType)
- .Invoke(this, new object[] { modelBuilder, entityType });
-
- ConfigureValueGeneratedMethodInfo
- .MakeGenericMethod(entityType.ClrType)
- .Invoke(this, new object[] { modelBuilder, entityType });
+ ConfigureEntityTypeProperties(modelBuilder, entityType);
}
if (LazyServiceProvider == null || Options == null)
@@ -151,6 +142,23 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
}
}
+ protected virtual void ConfigureEntityTypeProperties(
+ ModelBuilder modelBuilder,
+ IMutableEntityType entityType)
+ {
+ ConfigureBasePropertiesMethodInfo
+ .MakeGenericMethod(entityType.ClrType)
+ .Invoke(this, new object[] { modelBuilder, entityType });
+
+ ConfigureValueConverterMethodInfo
+ .MakeGenericMethod(entityType.ClrType)
+ .Invoke(this, new object[] { modelBuilder, entityType });
+
+ ConfigureValueGeneratedMethodInfo
+ .MakeGenericMethod(entityType.ClrType)
+ .Invoke(this, new object[] { modelBuilder, entityType });
+ }
+
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
base.ConfigureConventions(configurationBuilder);
@@ -762,7 +770,9 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
AuditPropertySetter?.IncrementEntityVersionProperty(entry.Entity);
}
- protected virtual void ConfigureBaseProperties(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType)
+ protected virtual void ConfigureBaseProperties(
+ ModelBuilder modelBuilder,
+ IMutableEntityType mutableEntityType)
where TEntity : class
{
if (mutableEntityType.IsOwned())
@@ -775,54 +785,82 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
return;
}
- modelBuilder.Entity().ConfigureByConvention();
+ var entityTypeBuilder = CreateEntityTypeBuilderFromMutableEntityType(
+ modelBuilder,
+ mutableEntityType
+ );
+
+ entityTypeBuilder.ConfigureByConvention();
+
+ ConfigureGlobalFilters(modelBuilder, mutableEntityType, entityTypeBuilder);
+ }
- ConfigureGlobalFilters(modelBuilder, mutableEntityType);
+ protected virtual EntityTypeBuilder CreateEntityTypeBuilderFromMutableEntityType(
+ ModelBuilder modelBuilder,
+ IMutableEntityType mutableEntityType) where TEntity : class
+ {
+ return mutableEntityType.HasSharedClrType
+ ? modelBuilder.SharedTypeEntity(mutableEntityType.Name)
+ : modelBuilder.Entity();
}
- protected virtual void ConfigureGlobalFilters(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType)
+ protected virtual void ConfigureGlobalFilters(
+ ModelBuilder modelBuilder,
+ IMutableEntityType mutableEntityType,
+ EntityTypeBuilder entityTypeBuilder)
where TEntity : class
{
if (mutableEntityType.BaseType == null && ShouldFilterEntity(mutableEntityType))
{
- var filterExpression = CreateFilterExpression(modelBuilder);
+ var filterExpression = CreateFilterExpression(modelBuilder, entityTypeBuilder);
if (filterExpression != null)
{
- modelBuilder.Entity().HasAbpQueryFilter(filterExpression);
+ entityTypeBuilder.HasAbpQueryFilter(filterExpression);
}
}
}
- protected virtual void ConfigureValueConverter(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType)
+ protected virtual void ConfigureValueConverter(
+ ModelBuilder modelBuilder,
+ IMutableEntityType mutableEntityType)
where TEntity : class
{
- if (mutableEntityType.BaseType == null &&
- !typeof(TEntity).IsDefined(typeof(DisableDateTimeNormalizationAttribute), true) &&
- !typeof(TEntity).IsDefined(typeof(OwnedAttribute), true) &&
- !mutableEntityType.IsOwned())
+ if (mutableEntityType.BaseType != null ||
+ typeof(TEntity).IsDefined(typeof(DisableDateTimeNormalizationAttribute), true) ||
+ typeof(TEntity).IsDefined(typeof(OwnedAttribute), true) ||
+ mutableEntityType.IsOwned())
{
- if (LazyServiceProvider == null || Clock == null)
- {
- return;
- }
+ return;
+ }
- foreach (var property in mutableEntityType.GetProperties().
- Where(property => property.PropertyInfo != null &&
- (property.PropertyInfo.PropertyType == typeof(DateTime) || property.PropertyInfo.PropertyType == typeof(DateTime?)) &&
- property.PropertyInfo.CanWrite &&
- ReflectionHelper.GetSingleAttributeOfMemberOrDeclaringTypeOrDefault(property.PropertyInfo) == null))
- {
- modelBuilder
- .Entity()
- .Property(property.Name)
- .HasConversion(property.ClrType == typeof(DateTime)
- ? new AbpDateTimeValueConverter(Clock)
- : new AbpNullableDateTimeValueConverter(Clock));
- }
+ if (LazyServiceProvider == null || Clock == null)
+ {
+ return;
+ }
+
+
+ foreach (var property in mutableEntityType.GetProperties().
+ Where(property => property.PropertyInfo != null &&
+ (property.PropertyInfo.PropertyType == typeof(DateTime) || property.PropertyInfo.PropertyType == typeof(DateTime?)) &&
+ property.PropertyInfo.CanWrite &&
+ ReflectionHelper.GetSingleAttributeOfMemberOrDeclaringTypeOrDefault(property.PropertyInfo) == null))
+ {
+ var entityTypeBuilder = CreateEntityTypeBuilderFromMutableEntityType(
+ modelBuilder,
+ mutableEntityType
+ );
+
+ entityTypeBuilder
+ .Property(property.Name)
+ .HasConversion(property.ClrType == typeof(DateTime)
+ ? new AbpDateTimeValueConverter(Clock)
+ : new AbpNullableDateTimeValueConverter(Clock));
}
}
- protected virtual void ConfigureValueGenerated(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType)
+ protected virtual void ConfigureValueGenerated(
+ ModelBuilder modelBuilder,
+ IMutableEntityType mutableEntityType)
where TEntity : class
{
if (!typeof(IEntity).IsAssignableFrom(typeof(TEntity)))
@@ -830,7 +868,8 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
return;
}
- var idPropertyBuilder = modelBuilder.Entity().Property(x => ((IEntity)x).Id);
+ var entityTypeBuilder = CreateEntityTypeBuilderFromMutableEntityType(modelBuilder, mutableEntityType);
+ var idPropertyBuilder = entityTypeBuilder.Property(x => ((IEntity)x).Id);
if (idPropertyBuilder.Metadata.PropertyInfo!.IsDefined(typeof(DatabaseGeneratedAttribute), true))
{
return;
@@ -854,25 +893,30 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
return false;
}
- protected virtual Expression>? CreateFilterExpression(ModelBuilder modelBuilder)
+ protected virtual Expression>? CreateFilterExpression(
+ ModelBuilder modelBuilder,
+ EntityTypeBuilder entityTypeBuilder)
where TEntity : class
{
Expression>? expression = null;
if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity)))
{
- var softDeleteColumnName = modelBuilder.Entity().Metadata.FindProperty(nameof(ISoftDelete.IsDeleted))?.GetColumnName() ?? "IsDeleted";
+ var softDeleteColumnName = entityTypeBuilder.Metadata.FindProperty(nameof(ISoftDelete.IsDeleted))?.GetColumnName() ?? "IsDeleted";
expression = e => !IsSoftDeleteFilterEnabled || !EF.Property(e, softDeleteColumnName);
if (UseDbFunction())
{
expression = e => AbpEfCoreDataFilterDbFunctionMethods.SoftDeleteFilter(((ISoftDelete)e).IsDeleted, true);
- modelBuilder.ConfigureSoftDeleteDbFunction(AbpEfCoreDataFilterDbFunctionMethods.SoftDeleteFilterMethodInfo, this.GetService());
+ modelBuilder.ConfigureSoftDeleteDbFunction(
+ AbpEfCoreDataFilterDbFunctionMethods.SoftDeleteFilterMethodInfo,
+ this.GetService()
+ );
}
}
if (typeof(IMultiTenant).IsAssignableFrom(typeof(TEntity)))
{
- var multiTenantColumnName = modelBuilder.Entity().Metadata.FindProperty(nameof(IMultiTenant.TenantId))?.GetColumnName() ?? "TenantId";
+ var multiTenantColumnName = entityTypeBuilder.Metadata.FindProperty(nameof(IMultiTenant.TenantId))?.GetColumnName() ?? "TenantId";
Expression> multiTenantFilter = e => !IsMultiTenantFilterEnabled || EF.Property(e, multiTenantColumnName) == CurrentTenantId;
if (UseDbFunction())
{
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs
index 833163d223..3097eba9cb 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs
@@ -31,6 +31,9 @@ public interface IEfCoreDbContext : IDisposable, IInfrastructure Set()
where T : class;
+
+ DbSet Set(string name)
+ where T : class;
DatabaseFacade Database { get; }
diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs
index ad5ac9ecde..af42ea905b 100644
--- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs
+++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs
@@ -1,8 +1,10 @@
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
using Rebus.Config;
using Rebus.Handlers;
using Rebus.Pipeline;
using Rebus.Pipeline.Receive;
+using Rebus.ServiceProvider;
using Volo.Abp.Modularity;
namespace Volo.Abp.EventBus.Rebus;
@@ -16,11 +18,12 @@ public class AbpEventBusRebusModule : AbpModule
context.Services.AddTransient(typeof(IHandleMessages<>), typeof(RebusDistributedEventHandlerAdapter<>));
var preActions = context.Services.GetPreConfigureActions();
- Configure(rebusOptions =>
+ var rebusOptions = preActions.Configure();
+ Configure(options =>
{
- preActions.Configure(rebusOptions);
+ preActions.Configure(options);
});
-
+
context.Services.AddRebus(configure =>
{
configure.Options(options =>
@@ -34,9 +37,9 @@ public class AbpEventBusRebusModule : AbpModule
});
});
- preActions.Configure().Configurer?.Invoke(configure);
+ rebusOptions.Configurer?.Invoke(configure);
return configure;
- });
+ }, startAutomatically: false, key: rebusOptions.RebusInstanceName);
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
@@ -46,6 +49,9 @@ public class AbpEventBusRebusModule : AbpModule
.GetRequiredService()
.Initialize();
- context.ServiceProvider.StartRebus();
+ var rebusOptions = context.ServiceProvider.GetRequiredService>().Value;
+ context.ServiceProvider
+ .GetRequiredService()
+ .StartBus(rebusOptions.RebusInstanceName);
}
}
diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs
index 4b93082722..8f61d8dae3 100644
--- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs
+++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs
@@ -10,10 +10,10 @@ namespace Volo.Abp.EventBus.Rebus;
public class AbpRebusEventBusOptions
{
- [NotNull]
- public string InputQueueName { get; set; } = default!;
+ public string InputQueueName { get; set; } = null!;
+
+ public string RebusInstanceName { get; set; } = "default-instance";
- [NotNull]
public Action Configurer {
get => _configurer;
set => _configurer = Check.NotNull(value, nameof(value));
diff --git a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs
index 677649b79a..80f959710d 100644
--- a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs
+++ b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs
@@ -24,6 +24,9 @@ public class MapperlyAutoObjectMappingProvider : MapperlyAutoObjectMap
public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider
{
protected static readonly ConcurrentDictionary> MapCache = new();
+ protected static readonly List MapMethods = typeof(MapperlyAutoObjectMappingProvider)
+ .GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
+ .Where(x => x.Name == nameof(Map)).ToList();
protected IServiceProvider ServiceProvider { get; }
@@ -168,33 +171,9 @@ public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider
Type destinationArgumentType,
bool hasDestination)
{
- var methods = typeof(MapperlyAutoObjectMappingProvider)
- .GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
- .Where(x => x.Name == nameof(Map))
- .Where(x =>
- {
- var parameters = x.GetParameters();
- return (hasDestination || parameters.Length == 1) &&
- (!hasDestination || parameters.Length == 2);
- })
- .ToList();
-
- if (methods.Count == 0)
- {
- throw new AbpException($"Could not find a method named '{nameof(Map)}'" +
- $" with parameters({(hasDestination ? sourceArgumentType + ", " + destinationArgumentType : sourceArgumentType.ToString())})" +
- $" in the type '{mapperType}'.");
- }
-
- if (methods.Count > 1)
- {
- throw new AbpException($"Found more than one method named '{nameof(Map)}'" +
- $" with parameters({(hasDestination ? sourceArgumentType + ", " + destinationArgumentType : sourceArgumentType.ToString())})" +
- $" in the type '{mapperType}'.");
- }
-
- var method = methods[0].MakeGenericMethod(sourceArgumentType, destinationArgumentType);
-
+ var method = !hasDestination
+ ? MapMethods.First(x => x.GetParameters().Length == 1).MakeGenericMethod(sourceArgumentType, destinationArgumentType)
+ : MapMethods.First(x => x.GetParameters().Length == 2).MakeGenericMethod(sourceArgumentType, destinationArgumentType);
var instanceParam = Expression.Parameter(typeof(object), "mapper");
var sourceParam = Expression.Parameter(typeof(object), "source");
var destinationParam = Expression.Parameter(typeof(object), "destination");
diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/Data/HasExtraPropertiesExtensions.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/Data/HasExtraPropertiesExtensions.cs
index 75f5672a29..54cdc2bc94 100644
--- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/Data/HasExtraPropertiesExtensions.cs
+++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/Data/HasExtraPropertiesExtensions.cs
@@ -26,34 +26,9 @@ public static class HasExtraPropertiesExtensions
public static TProperty? GetProperty(this IHasExtraProperties source, string name, TProperty? defaultValue = default)
{
- var value = source.GetProperty(name);
- if (value == null)
- {
- return defaultValue;
- }
-
- if (TypeHelper.IsPrimitiveExtended(typeof(TProperty), includeEnums: true))
- {
- var conversionType = typeof(TProperty);
- if (TypeHelper.IsNullable(conversionType))
- {
- conversionType = conversionType.GetFirstGenericArgumentIfNullable();
- }
-
- if (conversionType == typeof(Guid))
- {
- return (TProperty)TypeDescriptor.GetConverter(conversionType).ConvertFromInvariantString(value.ToString()!)!;
- }
-
- if (conversionType.IsEnum)
- {
- return (TProperty)Enum.Parse(conversionType, value.ToString()!);
- }
-
- return (TProperty)Convert.ChangeType(value, conversionType, CultureInfo.InvariantCulture);
- }
-
- throw new AbpException("GetProperty does not support non-primitive types. Use non-generic GetProperty method and handle type casting manually.");
+ return TypeHelper.ChangeTypePrimitiveExtended(
+ source.GetProperty(name, (object?) defaultValue)
+ ) ?? defaultValue;
}
public static TSource SetProperty(
diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs
index 4a7a9fb28f..193bbaed14 100644
--- a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs
+++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs
@@ -408,6 +408,11 @@ public class RepositoryRegistration_Tests
public class MyTestAggregateRootWithDefaultPkEmptyRepository : IMyTestAggregateRootWithDefaultPkEmptyRepository
{
public bool? IsChangeTrackingEnabled { get; set; }
+
+ public void SetEntityName(string name)
+ {
+
+ }
}
public class TestDbContextRegistrationOptions : AbpCommonDbContextRegistrationOptions
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/SharedEntity_Repository_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/SharedEntity_Repository_Tests.cs
new file mode 100644
index 0000000000..869069debe
--- /dev/null
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/SharedEntity_Repository_Tests.cs
@@ -0,0 +1,177 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Shouldly;
+using Volo.Abp.Data;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.MultiTenancy;
+using Volo.Abp.TestApp.Domain;
+using Xunit;
+
+namespace Volo.Abp.EntityFrameworkCore.Repositories;
+
+public class SharedEntity_Repository_Tests : EntityFrameworkCoreTestBase
+{
+ protected readonly IRepository TestSharedTypeEntityRepository;
+ protected readonly ICurrentTenant CurrentTenant;
+ protected readonly IDataFilter DataFilter;
+
+ public SharedEntity_Repository_Tests()
+ {
+ TestSharedTypeEntityRepository = GetRequiredService>();
+ CurrentTenant = GetRequiredService();
+ DataFilter = GetRequiredService>();
+ }
+
+ [Fact]
+ public async Task SharedEntity_Test()
+ {
+ await WithUnitOfWorkAsync(async () =>
+ {
+ TestSharedTypeEntityRepository.SetEntityName("TestSharedEntity1");
+
+ var tenantId = Guid.NewGuid();
+ await TestSharedTypeEntityRepository.InsertManyAsync(new List()
+ {
+ new TestSharedEntity(Guid.NewGuid())
+ {
+ TenantId = null,
+ IsDeleted = false,
+ Name = "Test Person1",
+ Age = 10,
+ Birthday = DateTime.Now
+ }.SetProperty("testProperty", "Test Value1"),
+ new TestSharedEntity(Guid.NewGuid())
+ {
+ TenantId = tenantId,
+ IsDeleted = false,
+ Name = "Test Person2",
+ Age = 20,
+ Birthday = DateTime.Now
+ },
+ new TestSharedEntity(Guid.NewGuid())
+ {
+ TenantId = tenantId,
+ IsDeleted = true,
+ Name = "Test Person3",
+ Age = 30,
+ Birthday = DateTime.Now
+ },
+ new TestSharedEntity(Guid.NewGuid())
+ {
+ TenantId = null,
+ IsDeleted = true,
+ Name = "Test Person4",
+ Age = 40,
+ Birthday = DateTime.Now
+ }
+ }, true);
+
+ var entities = (await TestSharedTypeEntityRepository.GetListAsync()).OrderBy(x => x.Name).ToList();
+ entities.Count.ShouldBe(1);
+ entities[0].TenantId.ShouldBeNull();
+ entities[0].IsDeleted.ShouldBe(false);
+ entities[0].Name.ShouldBe("Test Person1");
+ entities[0].Age.ShouldBe(10);
+ entities[0].GetProperty("testProperty").ShouldBe("Test Value1");
+
+ using (CurrentTenant.Change(tenantId))
+ {
+ entities = (await TestSharedTypeEntityRepository.GetListAsync()).OrderBy(x => x.Name).ToList();
+ entities.Count.ShouldBe(1);
+ entities[0].TenantId.ShouldBe(tenantId);
+ entities[0].IsDeleted.ShouldBe(false);
+ entities[0].Name.ShouldBe("Test Person2");
+ entities[0].Age.ShouldBe(20);
+ }
+
+ using (DataFilter.Disable())
+ {
+ entities = (await TestSharedTypeEntityRepository.GetListAsync()).OrderBy(x => x.Name).ToList();
+ entities.Count.ShouldBe(2);
+
+ entities[0].TenantId.ShouldBeNull();
+ entities[0].IsDeleted.ShouldBe(false);
+ entities[0].Name.ShouldBe("Test Person1");
+ entities[0].Age.ShouldBe(10);
+
+ entities[1].TenantId.ShouldBeNull();
+ entities[1].IsDeleted.ShouldBe(true);
+ entities[1].Name.ShouldBe("Test Person4");
+ entities[1].Age.ShouldBe(40);
+ }
+
+ using (CurrentTenant.Change(tenantId))
+ {
+ using (DataFilter.Disable())
+ {
+ entities = (await TestSharedTypeEntityRepository.GetListAsync()).OrderBy(x => x.Name).ToList();
+ entities.Count.ShouldBe(2);
+
+ entities[0].TenantId.ShouldBe(tenantId);
+ entities[0].IsDeleted.ShouldBe(false);
+ entities[0].Name.ShouldBe("Test Person2");
+ entities[0].Age.ShouldBe(20);
+
+ entities[1].TenantId.ShouldBe(tenantId);
+ entities[1].IsDeleted.ShouldBe(true);
+ entities[1].Name.ShouldBe("Test Person3");
+ entities[1].Age.ShouldBe(30);
+ }
+ }
+
+ TestSharedTypeEntityRepository.SetEntityName("TestSharedEntity2");
+ await TestSharedTypeEntityRepository.InsertManyAsync(new List()
+ {
+ new TestSharedEntity(Guid.NewGuid())
+ {
+ Name = "Test Person1 from Second Table",
+ Age = 110,
+ Birthday = DateTime.Now
+ }
+ }, true);
+
+ var entitiesFromSecondTable = (await TestSharedTypeEntityRepository.GetListAsync()).OrderBy(x => x.Name).ToList();
+ entitiesFromSecondTable.Count.ShouldBe(1);
+ entitiesFromSecondTable[0].TenantId.ShouldBeNull();
+ entitiesFromSecondTable[0].IsDeleted.ShouldBe(false);
+ entitiesFromSecondTable[0].Name.ShouldBe("Test Person1 from Second Table");
+ entitiesFromSecondTable[0].Age.ShouldBe(110);
+ });
+ }
+
+ [Fact]
+ public async Task SharedEntity_DynamicProperty_Test()
+ {
+ await WithUnitOfWorkAsync(async () =>
+ {
+ TestSharedTypeEntityRepository.SetEntityName("TestSharedEntity1");
+
+ var entity = new TestSharedEntity(Guid.NewGuid())
+ {
+ TenantId = null,
+ IsDeleted = false,
+ Name = "Test Person1",
+ Age = 10,
+ Birthday = DateTime.Now
+ };
+
+ entity["DynamicProperty"] = "Test Value1";
+
+ await TestSharedTypeEntityRepository.InsertAsync(entity, true);
+
+ entity = await TestSharedTypeEntityRepository.FindAsync(x => x.Id == entity.Id!);
+ entity.ShouldNotBeNull();
+
+ entity.Name.ShouldBe("Test Person1");
+ entity.Age.ShouldBe(10);
+ entity.Birthday.ShouldNotBeNull();
+ entity["DynamicProperty"].ShouldBe("Test Value1");
+
+ TestSharedTypeEntityRepository.SetEntityName("TestSharedEntity2");
+ entity = await TestSharedTypeEntityRepository.FindAsync(x => x.Id == entity.Id!);
+ entity.ShouldBeNull();
+ });
+ }
+}
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs
index d05e367ff7..0efef5ba1f 100644
--- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs
@@ -1,5 +1,6 @@
using System;
using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Volo.Abp.EntityFrameworkCore.TestApp.SecondContext;
using Volo.Abp.EntityFrameworkCore.TestApp.ThirdDbContext;
@@ -33,6 +34,9 @@ public class TestMigrationsDbContext : AbpDbContext
public DbSet Blogs { get; set; }
public DbSet BlogPosts { get; set; }
+ public DbSet TestSharedEntity => Set("TestSharedEntity1");
+ public DbSet TestSharedEntity2 => Set("TestSharedEntity2");
+
public TestMigrationsDbContext(DbContextOptions options)
: base(options)
{
@@ -41,8 +45,25 @@ public class TestMigrationsDbContext : AbpDbContext
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
+ // Owned and SharedTypeEntity should be configured before the base OnModelCreating call
+
modelBuilder.Owned();
+ Action> sharedEntityBuildAction = b =>
+ {
+ b.ConfigureByConvention();
+ b.Property(x => x.Id);
+ b.Property(x => x.TenantId);
+ b.Property(x => x.IsDeleted);
+ b.Property(x => x.Name);
+ b.Property(x => x.Age);
+ b.Property(x => x.Birthday);
+
+ b.Property("DynamicProperty");
+ };
+ modelBuilder.SharedTypeEntity("TestSharedEntity1", sharedEntityBuildAction);
+ modelBuilder.SharedTypeEntity("TestSharedEntity2", sharedEntityBuildAction);
+
base.OnModelCreating(modelBuilder);
modelBuilder.Entity(b =>
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs
index 242809bf7c..b2680abdff 100644
--- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs
@@ -1,7 +1,7 @@
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.Extensions.Logging;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
@@ -40,6 +40,9 @@ public class TestAppDbContext : AbpDbContext, IThirdDbContext,
public DbSet Blogs { get; set; }
public DbSet BlogPosts { get; set; }
+ public DbSet TestSharedEntity => Set("TestSharedEntity1");
+ public DbSet TestSharedEntity2 => Set("TestSharedEntity2");
+
public TestAppDbContext(DbContextOptions options)
: base(options)
{
@@ -54,8 +57,25 @@ public class TestAppDbContext : AbpDbContext, IThirdDbContext,
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
+ // Owned and SharedTypeEntity should be configured before the base OnModelCreating call
+
modelBuilder.Owned();
+ Action> sharedEntityBuildAction = b =>
+ {
+ b.ConfigureByConvention();
+ b.Property(x => x.Id);
+ b.Property(x => x.TenantId);
+ b.Property(x => x.IsDeleted);
+ b.Property(x => x.Name);
+ b.Property(x => x.Age);
+ b.Property(x => x.Birthday);
+
+ b.Property("DynamicProperty");
+ };
+ modelBuilder.SharedTypeEntity("TestSharedEntity1", sharedEntityBuildAction);
+ modelBuilder.SharedTypeEntity("TestSharedEntity2", sharedEntityBuildAction);
+
base.OnModelCreating(modelBuilder);
modelBuilder.Entity(b =>
diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/TestSharedTypeEntity.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/TestSharedTypeEntity.cs
new file mode 100644
index 0000000000..5b1d94a316
--- /dev/null
+++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/TestSharedTypeEntity.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using Volo.Abp.Domain.Entities;
+using Volo.Abp.MultiTenancy;
+
+namespace Volo.Abp.TestApp.Domain;
+
+public class TestSharedEntity : AggregateRoot, IMultiTenant, ISoftDelete
+{
+ private readonly Dictionary _dynamicPropertites = new();
+
+ public object this[string key]
+ {
+ get => _dynamicPropertites.GetValueOrDefault(key);
+ set => _dynamicPropertites[key] = value;
+ }
+
+ public Guid? TenantId { get; set; }
+
+ public virtual string Name { get; set; }
+
+ public virtual int Age { get; set; }
+
+ public virtual DateTime? Birthday { get; set; }
+
+ public bool IsDeleted { get; set; }
+
+ public TestSharedEntity()
+ {
+
+ }
+
+ public TestSharedEntity(Guid id)
+ : base(id)
+ {
+
+ }
+}
diff --git a/latest-versions.json b/latest-versions.json
index 90c464cd3b..e1800b4312 100644
--- a/latest-versions.json
+++ b/latest-versions.json
@@ -1,4 +1,13 @@
[
+ {
+ "version": "9.3.2",
+ "releaseDate": "",
+ "type": "stable",
+ "message": "",
+ "leptonx": {
+ "version": "4.3.2"
+ }
+ },
{
"version": "9.3.1",
"releaseDate": "",
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
index 10d83d01bf..d6c0888f0a 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
@@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.shared": "~9.3.1",
- "@abp/prismjs": "~9.3.1",
- "@abp/highlight.js": "~9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared": "~9.3.2",
+ "@abp/prismjs": "~9.3.2",
+ "@abp/highlight.js": "~9.3.2"
}
}
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
index f8b8a38dde..73d5ffbb8e 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
@@ -2,203 +2,203 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.1.tgz#7b8b297c9fac61970b3f0d7e4a6d11fa89b892ea"
- integrity sha512-cc2BacHCyaDHP0xeSMyIR7asiVmTkfYtMhh+kLp8XBQ6JeqDLi5YW4TdgwJv+t8s8U0j+DwKtgUOtwHBhlOtvg==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.3.1"
- "@abp/bootstrap" "~9.3.1"
- "@abp/bootstrap-datepicker" "~9.3.1"
- "@abp/bootstrap-daterangepicker" "~9.3.1"
- "@abp/datatables.net-bs5" "~9.3.1"
- "@abp/font-awesome" "~9.3.1"
- "@abp/jquery-form" "~9.3.1"
- "@abp/jquery-validation-unobtrusive" "~9.3.1"
- "@abp/lodash" "~9.3.1"
- "@abp/luxon" "~9.3.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.3.1"
- "@abp/moment" "~9.3.1"
- "@abp/select2" "~9.3.1"
- "@abp/sweetalert2" "~9.3.1"
- "@abp/timeago" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.1.tgz#17b9e49e4a3588cb0d383f9da700c99d5974b562"
- integrity sha512-bxpsiwfDSfDHYyHc8jVBrnbIrJ7hbHGO86wWmYxd6iM/qMpgjzi1eFadt5oPVrFw99FnfNqREtMpdVbNJZ7n/Q==
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966"
+ integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~9.3.2"
+ "@abp/bootstrap" "~9.3.2"
+ "@abp/bootstrap-datepicker" "~9.3.2"
+ "@abp/bootstrap-daterangepicker" "~9.3.2"
+ "@abp/datatables.net-bs5" "~9.3.2"
+ "@abp/font-awesome" "~9.3.2"
+ "@abp/jquery-form" "~9.3.2"
+ "@abp/jquery-validation-unobtrusive" "~9.3.2"
+ "@abp/lodash" "~9.3.2"
+ "@abp/luxon" "~9.3.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.3.2"
+ "@abp/moment" "~9.3.2"
+ "@abp/select2" "~9.3.2"
+ "@abp/sweetalert2" "~9.3.2"
+ "@abp/timeago" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91"
+ integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.1.tgz#b3c6d0843d17bc22d15658d0b284f2c23811bef1"
- integrity sha512-oGwqGf2Qkq0EXzOn9r3TsNccAklwabHu3J00VyLgAAkn3vGlou1r7xG8n0H0zC3V7/EirDKoyFr9s106g7kxJA==
+"@abp/bootstrap-datepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987"
+ integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.1.tgz#3be4165954e0aa5bfec782df677ae687cc94b651"
- integrity sha512-1wdVw/JOfxwND3TQD8kOPJU3UwECi4rsrzPSQtPCAt/YGWtF5MIl9nhZ9WqSwukNie0dYmECAw5FNaoC79LOAw==
+"@abp/bootstrap-daterangepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18"
+ integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.1.tgz#917d013d257bbd035f264a324e77c6aecd4170c5"
- integrity sha512-t34nqLrMn0Wvw+3KNmVTMsdjHhMMppNITskuUdFwCCD14UIWcbQYLr9sSuYtS76nna6RUaL0MuYL4uRcqA7hiw==
+"@abp/bootstrap@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b"
+ integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
bootstrap "^5.3.3"
-"@abp/clipboard@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.1.tgz#7ec773243463fe09c1bf7cda474fde1d100bddbb"
- integrity sha512-mD/jUCo2ggMp0mBKXtdz2gtKfO0ukd4kqY141TzYq8VIjNkNUbODkXdLkNfxVPyAeYY4lzE5oGDxJHwkteTvjQ==
+"@abp/clipboard@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.2.tgz#4e0d6456e142e552ca3b4ec10159276e096c56bf"
+ integrity sha512-jorX68Yw/9pWAmt8cOuVx3Cnp7VF9xuvCD/ecvL5eZyHhXt4tDcYIFO5LkF+CaIky79gdzdF3tmYeFSPUE/HzA==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
clipboard "^2.0.11"
-"@abp/core@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.1.tgz#db01b8d8917283226e5552b1961e63c075ecae4f"
- integrity sha512-y/cvEvbxahaLygeJ6D7LSuNOWAwWRMf/ceLQLZ+J97trKKzQ58q3sth8E8FqhSAGJRYnGwGNqKLsBmFPjlKtMA==
+"@abp/core@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778"
+ integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ==
dependencies:
- "@abp/utils" "~9.3.1"
+ "@abp/utils" "~9.3.2"
-"@abp/datatables.net-bs5@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.1.tgz#488c5bdf548f637b8ef2f8109b2416f9af201f8d"
- integrity sha512-8j+fsDjYf9PgWxioZMQb/WjmW/8LHpR+E5v5m+Oxd9epDR+ugsvT7IhuMvBJ+yv96FZA19ULTgj3dhNa6ff7Og==
+"@abp/datatables.net-bs5@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780"
+ integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q==
dependencies:
- "@abp/datatables.net" "~9.3.1"
+ "@abp/datatables.net" "~9.3.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.1.tgz#41e2daca48ac0517cc53afe26e98cea9d347e03f"
- integrity sha512-oD6s0luu2wuLODCaTqujAczTVySDr+d988AMHpiNlHLTcdXGapF9q3oWrK9bvSrNdJpCtAMhAUKyZ9b28aoBWg==
+"@abp/datatables.net@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1"
+ integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.1.tgz#ec988894248ea187bb5aec72dc79b4be27034acc"
- integrity sha512-z1zwl0SZYrBVX+J961vbF0AMnyjhn00E9GfqGR6hH/mvyrN8T95xyDN+vDRwl907pTItNKBdWH78eXkv58WMdQ==
+"@abp/font-awesome@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1"
+ integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/highlight.js@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.1.tgz#bf94c188a330f29e5a1dd1094d3130231e46baf8"
- integrity sha512-gkiKNTMuUa4xh3DgXJy3Sm3Mcq0hd7g6xlhAQ/Cf+O7rIQyWh3UACjcaqoylnk5iqgaN9QnWumwz7k5H4DgtnA==
+"@abp/highlight.js@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.2.tgz#add22b40f5b412d6c86629a4d6d449d426c9b141"
+ integrity sha512-EVUCK6Hm3J+sMCuGZDTEEyWxfvAK5mxLuYGRuRrmzZvxXKsnAwqZitMddAvkZVAwN1QiV3gyXgdrz1XUBWZ2kg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
"@highlightjs/cdn-assets" "~11.10.0"
-"@abp/jquery-form@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.1.tgz#8ec1724231d4415bab47047938a6fa0c9ca1c79c"
- integrity sha512-8mN3JfZWdXAZ3y9jQpGkge4JctAt5DCZHu3lV4kafZtmhz1xdaj6vaaIpxo2TpTjx7/79XY8mymnxXefiO0U3Q==
+"@abp/jquery-form@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b"
+ integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.1.tgz#31ab753a296fa9d6838f2d97ff256a40df633bdc"
- integrity sha512-YBQu/sKItnbjXoOYqUIm8wyJnXfRTaHy4/TSVEB3JYBcpHjjXMd9KX3FwK4AzCsSgaIGJK/WkdkiO5bvPqApCg==
+"@abp/jquery-validation-unobtrusive@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce"
+ integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg==
dependencies:
- "@abp/jquery-validation" "~9.3.1"
+ "@abp/jquery-validation" "~9.3.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.1.tgz#b96a430cffdb8cce298463b975786b25dc6d655b"
- integrity sha512-041+nqCqp6ySlzocQnKJ6/FMumMcyHmkVjlguEShbttJJL27JVq3V8qmh9t/flQSa9Vv7q1qHyYBQBLZ0ISIBA==
+"@abp/jquery-validation@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76"
+ integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.1.tgz#697c59500eeb76e047a26c9176e7cd2d55e40965"
- integrity sha512-pUurE04byV0bK7O9C7pFiLECP8keE7+KodDH8K9qwBCZ0O/DBsbG9cI7EZW6xAd+WPPrcAEi6QC8y3MIn9dv2A==
+"@abp/jquery@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade"
+ integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
jquery "~3.7.1"
-"@abp/lodash@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.1.tgz#6ff141b9cad8454de30c2d0a80035054af9570e5"
- integrity sha512-9FPq/ggTRMpBJk4Qz2HhYbExXUpWoNSsIbxR3xyrxiD3CDwt7AK51X+NbYkqW7EqvccKENfqsQ6hOcwCpyPcdQ==
+"@abp/lodash@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4"
+ integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
lodash "^4.17.21"
-"@abp/luxon@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.1.tgz#ff3ad7fcb9bc56d0286f69eb665ab3137a1142e5"
- integrity sha512-r46jTdWiDp41/UEYc0hqdSHVwIQfqGpPvAysN+8csjLg5EkZhAjrahlsnJbu0BfCC+E+GhjOQ/oad1hz68bDJA==
+"@abp/luxon@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84"
+ integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.1.tgz#1071a8095197af1f98ddc06fdcc71e84ab6fd7f2"
- integrity sha512-eijQKbRJT2cXspXuPCNOtbYCp/PwPlBAQgKr9FHNPT9ujuOEA3spY71VyIOBKh/cTnH0ANaUSZzEE4G/7r9cag==
+"@abp/malihu-custom-scrollbar-plugin@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030"
+ integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.1.tgz#ac0ef40a34197efff6539effd865a014e2c10b81"
- integrity sha512-X+VoWNCcC5p0YC9betQmG+tm9C3y50vuShKCKrnOKvoILNSQJ+siVtYjIf0PQa/O8jUefUlehgWTk0yWYgKxjQ==
+"@abp/moment@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406"
+ integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg==
dependencies:
moment "^2.30.1"
-"@abp/prismjs@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.1.tgz#f2f42e962d6d759e8e016e4909a806a672328318"
- integrity sha512-OIC3pKNLv5Cf6VPDOVLwYweQ+ADw0i50fXxb0+oPYN/bkfYdEL+M4q3A0UWKvE67/nJLMUHyPXxMlqAFSbqYrw==
+"@abp/prismjs@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.2.tgz#2ea48bfa5ebcfd98962029eebeab374d63a4e242"
+ integrity sha512-q8bdUjk+IuP+nWzN8phgFjvKtOHR94OT5Sth7Rp64L68pVCJopihyth8f4mLZl7hMtwrro/5GFxjpR+KRNRpbg==
dependencies:
- "@abp/clipboard" "~9.3.1"
- "@abp/core" "~9.3.1"
+ "@abp/clipboard" "~9.3.2"
+ "@abp/core" "~9.3.2"
prismjs "^1.29.0"
-"@abp/select2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.1.tgz#f760050b3b0a51a4c3311600a5c7abc991e560fc"
- integrity sha512-KA1AMToMMfReJek0yWgviYr9vvlH1r43ObaIrfweF3sZsvo86VHtUeBEcYdGr5MtAmtHRukTfu2y0fSaK7GjYQ==
+"@abp/select2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f"
+ integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.1.tgz#279a0b070ea27d1beb9b0b472768694b0d6a7162"
- integrity sha512-bEaoM7wNrF4dkf2IoBmxRhcHWMK9LjG7hUnZWhFi/J1n10wJH+2yz7qsajbdzIF6CVvelAcMRzbxdVg7nxrnvw==
+"@abp/sweetalert2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493"
+ integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.1.tgz#ae0a7ff8867f228b464f0c7bef46466e72aa5d28"
- integrity sha512-FVAzEYl0SV07EM/W5wlE6Z25lnGC5CT4bBVzNFq8b3UjM+m0AhGNBwPrAyianyZyMYUzaF0UtL3PgTJJ+BZ8gA==
+"@abp/timeago@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52"
+ integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
timeago "^1.6.7"
-"@abp/utils@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.1.tgz#1a649f793c0a95a3a02f331bf0467908ba32fe65"
- integrity sha512-4cEl8npNp3R5cnhIjlXq8DjBLnA3U1H50E4xMtSY8Y9/nnvkn7ESqIzMlYlPDw9SUjQ4uhftVJqUyh83yq48jg==
+"@abp/utils@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795"
+ integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
index 81a1842ee7..a81470c4a5 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
@@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.1",
- "@abp/prismjs": "~9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2",
+ "@abp/prismjs": "~9.3.2"
},
"devDependencies": {}
}
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
index 46a99748ca..7018f52f8c 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
@@ -2,202 +2,202 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.1.tgz#a35e984e38773f53e0b2b25761bcf503ba613aaf"
- integrity sha512-kTN8pqfpTxOMD3nOVmwGHqtVwN4qlUjyQm7c+on98cmnXFllGXJ1QQLgnLRYT68lHJzW4nUNNN1VfET4tlMdDg==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.1.tgz#7b8b297c9fac61970b3f0d7e4a6d11fa89b892ea"
- integrity sha512-cc2BacHCyaDHP0xeSMyIR7asiVmTkfYtMhh+kLp8XBQ6JeqDLi5YW4TdgwJv+t8s8U0j+DwKtgUOtwHBhlOtvg==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.3.1"
- "@abp/bootstrap" "~9.3.1"
- "@abp/bootstrap-datepicker" "~9.3.1"
- "@abp/bootstrap-daterangepicker" "~9.3.1"
- "@abp/datatables.net-bs5" "~9.3.1"
- "@abp/font-awesome" "~9.3.1"
- "@abp/jquery-form" "~9.3.1"
- "@abp/jquery-validation-unobtrusive" "~9.3.1"
- "@abp/lodash" "~9.3.1"
- "@abp/luxon" "~9.3.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.3.1"
- "@abp/moment" "~9.3.1"
- "@abp/select2" "~9.3.1"
- "@abp/sweetalert2" "~9.3.1"
- "@abp/timeago" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.1.tgz#17b9e49e4a3588cb0d383f9da700c99d5974b562"
- integrity sha512-bxpsiwfDSfDHYyHc8jVBrnbIrJ7hbHGO86wWmYxd6iM/qMpgjzi1eFadt5oPVrFw99FnfNqREtMpdVbNJZ7n/Q==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7"
+ integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966"
+ integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~9.3.2"
+ "@abp/bootstrap" "~9.3.2"
+ "@abp/bootstrap-datepicker" "~9.3.2"
+ "@abp/bootstrap-daterangepicker" "~9.3.2"
+ "@abp/datatables.net-bs5" "~9.3.2"
+ "@abp/font-awesome" "~9.3.2"
+ "@abp/jquery-form" "~9.3.2"
+ "@abp/jquery-validation-unobtrusive" "~9.3.2"
+ "@abp/lodash" "~9.3.2"
+ "@abp/luxon" "~9.3.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.3.2"
+ "@abp/moment" "~9.3.2"
+ "@abp/select2" "~9.3.2"
+ "@abp/sweetalert2" "~9.3.2"
+ "@abp/timeago" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91"
+ integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.1.tgz#b3c6d0843d17bc22d15658d0b284f2c23811bef1"
- integrity sha512-oGwqGf2Qkq0EXzOn9r3TsNccAklwabHu3J00VyLgAAkn3vGlou1r7xG8n0H0zC3V7/EirDKoyFr9s106g7kxJA==
+"@abp/bootstrap-datepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987"
+ integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.1.tgz#3be4165954e0aa5bfec782df677ae687cc94b651"
- integrity sha512-1wdVw/JOfxwND3TQD8kOPJU3UwECi4rsrzPSQtPCAt/YGWtF5MIl9nhZ9WqSwukNie0dYmECAw5FNaoC79LOAw==
+"@abp/bootstrap-daterangepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18"
+ integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.1.tgz#917d013d257bbd035f264a324e77c6aecd4170c5"
- integrity sha512-t34nqLrMn0Wvw+3KNmVTMsdjHhMMppNITskuUdFwCCD14UIWcbQYLr9sSuYtS76nna6RUaL0MuYL4uRcqA7hiw==
+"@abp/bootstrap@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b"
+ integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
bootstrap "^5.3.3"
-"@abp/clipboard@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.1.tgz#7ec773243463fe09c1bf7cda474fde1d100bddbb"
- integrity sha512-mD/jUCo2ggMp0mBKXtdz2gtKfO0ukd4kqY141TzYq8VIjNkNUbODkXdLkNfxVPyAeYY4lzE5oGDxJHwkteTvjQ==
+"@abp/clipboard@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.2.tgz#4e0d6456e142e552ca3b4ec10159276e096c56bf"
+ integrity sha512-jorX68Yw/9pWAmt8cOuVx3Cnp7VF9xuvCD/ecvL5eZyHhXt4tDcYIFO5LkF+CaIky79gdzdF3tmYeFSPUE/HzA==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
clipboard "^2.0.11"
-"@abp/core@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.1.tgz#db01b8d8917283226e5552b1961e63c075ecae4f"
- integrity sha512-y/cvEvbxahaLygeJ6D7LSuNOWAwWRMf/ceLQLZ+J97trKKzQ58q3sth8E8FqhSAGJRYnGwGNqKLsBmFPjlKtMA==
+"@abp/core@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778"
+ integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ==
dependencies:
- "@abp/utils" "~9.3.1"
+ "@abp/utils" "~9.3.2"
-"@abp/datatables.net-bs5@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.1.tgz#488c5bdf548f637b8ef2f8109b2416f9af201f8d"
- integrity sha512-8j+fsDjYf9PgWxioZMQb/WjmW/8LHpR+E5v5m+Oxd9epDR+ugsvT7IhuMvBJ+yv96FZA19ULTgj3dhNa6ff7Og==
+"@abp/datatables.net-bs5@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780"
+ integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q==
dependencies:
- "@abp/datatables.net" "~9.3.1"
+ "@abp/datatables.net" "~9.3.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.1.tgz#41e2daca48ac0517cc53afe26e98cea9d347e03f"
- integrity sha512-oD6s0luu2wuLODCaTqujAczTVySDr+d988AMHpiNlHLTcdXGapF9q3oWrK9bvSrNdJpCtAMhAUKyZ9b28aoBWg==
+"@abp/datatables.net@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1"
+ integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.1.tgz#ec988894248ea187bb5aec72dc79b4be27034acc"
- integrity sha512-z1zwl0SZYrBVX+J961vbF0AMnyjhn00E9GfqGR6hH/mvyrN8T95xyDN+vDRwl907pTItNKBdWH78eXkv58WMdQ==
+"@abp/font-awesome@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1"
+ integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/jquery-form@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.1.tgz#8ec1724231d4415bab47047938a6fa0c9ca1c79c"
- integrity sha512-8mN3JfZWdXAZ3y9jQpGkge4JctAt5DCZHu3lV4kafZtmhz1xdaj6vaaIpxo2TpTjx7/79XY8mymnxXefiO0U3Q==
+"@abp/jquery-form@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b"
+ integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.1.tgz#31ab753a296fa9d6838f2d97ff256a40df633bdc"
- integrity sha512-YBQu/sKItnbjXoOYqUIm8wyJnXfRTaHy4/TSVEB3JYBcpHjjXMd9KX3FwK4AzCsSgaIGJK/WkdkiO5bvPqApCg==
+"@abp/jquery-validation-unobtrusive@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce"
+ integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg==
dependencies:
- "@abp/jquery-validation" "~9.3.1"
+ "@abp/jquery-validation" "~9.3.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.1.tgz#b96a430cffdb8cce298463b975786b25dc6d655b"
- integrity sha512-041+nqCqp6ySlzocQnKJ6/FMumMcyHmkVjlguEShbttJJL27JVq3V8qmh9t/flQSa9Vv7q1qHyYBQBLZ0ISIBA==
+"@abp/jquery-validation@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76"
+ integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.1.tgz#697c59500eeb76e047a26c9176e7cd2d55e40965"
- integrity sha512-pUurE04byV0bK7O9C7pFiLECP8keE7+KodDH8K9qwBCZ0O/DBsbG9cI7EZW6xAd+WPPrcAEi6QC8y3MIn9dv2A==
+"@abp/jquery@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade"
+ integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
jquery "~3.7.1"
-"@abp/lodash@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.1.tgz#6ff141b9cad8454de30c2d0a80035054af9570e5"
- integrity sha512-9FPq/ggTRMpBJk4Qz2HhYbExXUpWoNSsIbxR3xyrxiD3CDwt7AK51X+NbYkqW7EqvccKENfqsQ6hOcwCpyPcdQ==
+"@abp/lodash@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4"
+ integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
lodash "^4.17.21"
-"@abp/luxon@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.1.tgz#ff3ad7fcb9bc56d0286f69eb665ab3137a1142e5"
- integrity sha512-r46jTdWiDp41/UEYc0hqdSHVwIQfqGpPvAysN+8csjLg5EkZhAjrahlsnJbu0BfCC+E+GhjOQ/oad1hz68bDJA==
+"@abp/luxon@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84"
+ integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.1.tgz#1071a8095197af1f98ddc06fdcc71e84ab6fd7f2"
- integrity sha512-eijQKbRJT2cXspXuPCNOtbYCp/PwPlBAQgKr9FHNPT9ujuOEA3spY71VyIOBKh/cTnH0ANaUSZzEE4G/7r9cag==
+"@abp/malihu-custom-scrollbar-plugin@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030"
+ integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.1.tgz#ac0ef40a34197efff6539effd865a014e2c10b81"
- integrity sha512-X+VoWNCcC5p0YC9betQmG+tm9C3y50vuShKCKrnOKvoILNSQJ+siVtYjIf0PQa/O8jUefUlehgWTk0yWYgKxjQ==
+"@abp/moment@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406"
+ integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg==
dependencies:
moment "^2.30.1"
-"@abp/prismjs@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.1.tgz#f2f42e962d6d759e8e016e4909a806a672328318"
- integrity sha512-OIC3pKNLv5Cf6VPDOVLwYweQ+ADw0i50fXxb0+oPYN/bkfYdEL+M4q3A0UWKvE67/nJLMUHyPXxMlqAFSbqYrw==
+"@abp/prismjs@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.2.tgz#2ea48bfa5ebcfd98962029eebeab374d63a4e242"
+ integrity sha512-q8bdUjk+IuP+nWzN8phgFjvKtOHR94OT5Sth7Rp64L68pVCJopihyth8f4mLZl7hMtwrro/5GFxjpR+KRNRpbg==
dependencies:
- "@abp/clipboard" "~9.3.1"
- "@abp/core" "~9.3.1"
+ "@abp/clipboard" "~9.3.2"
+ "@abp/core" "~9.3.2"
prismjs "^1.29.0"
-"@abp/select2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.1.tgz#f760050b3b0a51a4c3311600a5c7abc991e560fc"
- integrity sha512-KA1AMToMMfReJek0yWgviYr9vvlH1r43ObaIrfweF3sZsvo86VHtUeBEcYdGr5MtAmtHRukTfu2y0fSaK7GjYQ==
+"@abp/select2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f"
+ integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.1.tgz#279a0b070ea27d1beb9b0b472768694b0d6a7162"
- integrity sha512-bEaoM7wNrF4dkf2IoBmxRhcHWMK9LjG7hUnZWhFi/J1n10wJH+2yz7qsajbdzIF6CVvelAcMRzbxdVg7nxrnvw==
+"@abp/sweetalert2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493"
+ integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.1.tgz#ae0a7ff8867f228b464f0c7bef46466e72aa5d28"
- integrity sha512-FVAzEYl0SV07EM/W5wlE6Z25lnGC5CT4bBVzNFq8b3UjM+m0AhGNBwPrAyianyZyMYUzaF0UtL3PgTJJ+BZ8gA==
+"@abp/timeago@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52"
+ integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
timeago "^1.6.7"
-"@abp/utils@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.1.tgz#1a649f793c0a95a3a02f331bf0467908ba32fe65"
- integrity sha512-4cEl8npNp3R5cnhIjlXq8DjBLnA3U1H50E4xMtSY8Y9/nnvkn7ESqIzMlYlPDw9SUjQ4uhftVJqUyh83yq48jg==
+"@abp/utils@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795"
+ integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json
index 2cb1da40ac..7f75fb85e5 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/package.json
+++ b/modules/blogging/app/Volo.BloggingTestApp/package.json
@@ -3,7 +3,7 @@
"name": "volo.blogtestapp",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.1",
- "@abp/blogging": "~9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2",
+ "@abp/blogging": "~9.3.2"
}
}
diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
index f7ae42bb76..033458c351 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
+++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
@@ -2,228 +2,228 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.1.tgz#a35e984e38773f53e0b2b25761bcf503ba613aaf"
- integrity sha512-kTN8pqfpTxOMD3nOVmwGHqtVwN4qlUjyQm7c+on98cmnXFllGXJ1QQLgnLRYT68lHJzW4nUNNN1VfET4tlMdDg==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.1.tgz#7b8b297c9fac61970b3f0d7e4a6d11fa89b892ea"
- integrity sha512-cc2BacHCyaDHP0xeSMyIR7asiVmTkfYtMhh+kLp8XBQ6JeqDLi5YW4TdgwJv+t8s8U0j+DwKtgUOtwHBhlOtvg==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.3.1"
- "@abp/bootstrap" "~9.3.1"
- "@abp/bootstrap-datepicker" "~9.3.1"
- "@abp/bootstrap-daterangepicker" "~9.3.1"
- "@abp/datatables.net-bs5" "~9.3.1"
- "@abp/font-awesome" "~9.3.1"
- "@abp/jquery-form" "~9.3.1"
- "@abp/jquery-validation-unobtrusive" "~9.3.1"
- "@abp/lodash" "~9.3.1"
- "@abp/luxon" "~9.3.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.3.1"
- "@abp/moment" "~9.3.1"
- "@abp/select2" "~9.3.1"
- "@abp/sweetalert2" "~9.3.1"
- "@abp/timeago" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.1.tgz#17b9e49e4a3588cb0d383f9da700c99d5974b562"
- integrity sha512-bxpsiwfDSfDHYyHc8jVBrnbIrJ7hbHGO86wWmYxd6iM/qMpgjzi1eFadt5oPVrFw99FnfNqREtMpdVbNJZ7n/Q==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7"
+ integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966"
+ integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~9.3.2"
+ "@abp/bootstrap" "~9.3.2"
+ "@abp/bootstrap-datepicker" "~9.3.2"
+ "@abp/bootstrap-daterangepicker" "~9.3.2"
+ "@abp/datatables.net-bs5" "~9.3.2"
+ "@abp/font-awesome" "~9.3.2"
+ "@abp/jquery-form" "~9.3.2"
+ "@abp/jquery-validation-unobtrusive" "~9.3.2"
+ "@abp/lodash" "~9.3.2"
+ "@abp/luxon" "~9.3.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.3.2"
+ "@abp/moment" "~9.3.2"
+ "@abp/select2" "~9.3.2"
+ "@abp/sweetalert2" "~9.3.2"
+ "@abp/timeago" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91"
+ integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ==
dependencies:
ansi-colors "^4.1.3"
-"@abp/blogging@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-9.3.1.tgz#f483ab13a5e261a5d868cb7ba8d38c2927a383d9"
- integrity sha512-P1D28md548j/OKbvQ2VYveGN9RfDn3HcoWuDKKZvx/dRp4SeIDopKwOgR7+fSsLJboAbhETb12yu++rW72LaPA==
+"@abp/blogging@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-9.3.2.tgz#52821170874f6d33da4f579abd3323c233abb1ba"
+ integrity sha512-P7oMpO1o/UEthlkDgYU7uZyFClNJEa5J2EcTFkLzGoQeVbZU/PF2GfVpm8wQb1Fl2EIzpHrslSkVPYiReog/Ww==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.1"
- "@abp/owl.carousel" "~9.3.1"
- "@abp/prismjs" "~9.3.1"
- "@abp/tui-editor" "~9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2"
+ "@abp/owl.carousel" "~9.3.2"
+ "@abp/prismjs" "~9.3.2"
+ "@abp/tui-editor" "~9.3.2"
-"@abp/bootstrap-datepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.1.tgz#b3c6d0843d17bc22d15658d0b284f2c23811bef1"
- integrity sha512-oGwqGf2Qkq0EXzOn9r3TsNccAklwabHu3J00VyLgAAkn3vGlou1r7xG8n0H0zC3V7/EirDKoyFr9s106g7kxJA==
+"@abp/bootstrap-datepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987"
+ integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.1.tgz#3be4165954e0aa5bfec782df677ae687cc94b651"
- integrity sha512-1wdVw/JOfxwND3TQD8kOPJU3UwECi4rsrzPSQtPCAt/YGWtF5MIl9nhZ9WqSwukNie0dYmECAw5FNaoC79LOAw==
+"@abp/bootstrap-daterangepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18"
+ integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.1.tgz#917d013d257bbd035f264a324e77c6aecd4170c5"
- integrity sha512-t34nqLrMn0Wvw+3KNmVTMsdjHhMMppNITskuUdFwCCD14UIWcbQYLr9sSuYtS76nna6RUaL0MuYL4uRcqA7hiw==
+"@abp/bootstrap@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b"
+ integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
bootstrap "^5.3.3"
-"@abp/clipboard@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.1.tgz#7ec773243463fe09c1bf7cda474fde1d100bddbb"
- integrity sha512-mD/jUCo2ggMp0mBKXtdz2gtKfO0ukd4kqY141TzYq8VIjNkNUbODkXdLkNfxVPyAeYY4lzE5oGDxJHwkteTvjQ==
+"@abp/clipboard@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.2.tgz#4e0d6456e142e552ca3b4ec10159276e096c56bf"
+ integrity sha512-jorX68Yw/9pWAmt8cOuVx3Cnp7VF9xuvCD/ecvL5eZyHhXt4tDcYIFO5LkF+CaIky79gdzdF3tmYeFSPUE/HzA==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
clipboard "^2.0.11"
-"@abp/core@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.1.tgz#db01b8d8917283226e5552b1961e63c075ecae4f"
- integrity sha512-y/cvEvbxahaLygeJ6D7LSuNOWAwWRMf/ceLQLZ+J97trKKzQ58q3sth8E8FqhSAGJRYnGwGNqKLsBmFPjlKtMA==
+"@abp/core@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778"
+ integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ==
dependencies:
- "@abp/utils" "~9.3.1"
+ "@abp/utils" "~9.3.2"
-"@abp/datatables.net-bs5@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.1.tgz#488c5bdf548f637b8ef2f8109b2416f9af201f8d"
- integrity sha512-8j+fsDjYf9PgWxioZMQb/WjmW/8LHpR+E5v5m+Oxd9epDR+ugsvT7IhuMvBJ+yv96FZA19ULTgj3dhNa6ff7Og==
+"@abp/datatables.net-bs5@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780"
+ integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q==
dependencies:
- "@abp/datatables.net" "~9.3.1"
+ "@abp/datatables.net" "~9.3.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.1.tgz#41e2daca48ac0517cc53afe26e98cea9d347e03f"
- integrity sha512-oD6s0luu2wuLODCaTqujAczTVySDr+d988AMHpiNlHLTcdXGapF9q3oWrK9bvSrNdJpCtAMhAUKyZ9b28aoBWg==
+"@abp/datatables.net@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1"
+ integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.1.tgz#ec988894248ea187bb5aec72dc79b4be27034acc"
- integrity sha512-z1zwl0SZYrBVX+J961vbF0AMnyjhn00E9GfqGR6hH/mvyrN8T95xyDN+vDRwl907pTItNKBdWH78eXkv58WMdQ==
+"@abp/font-awesome@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1"
+ integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/jquery-form@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.1.tgz#8ec1724231d4415bab47047938a6fa0c9ca1c79c"
- integrity sha512-8mN3JfZWdXAZ3y9jQpGkge4JctAt5DCZHu3lV4kafZtmhz1xdaj6vaaIpxo2TpTjx7/79XY8mymnxXefiO0U3Q==
+"@abp/jquery-form@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b"
+ integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.1.tgz#31ab753a296fa9d6838f2d97ff256a40df633bdc"
- integrity sha512-YBQu/sKItnbjXoOYqUIm8wyJnXfRTaHy4/TSVEB3JYBcpHjjXMd9KX3FwK4AzCsSgaIGJK/WkdkiO5bvPqApCg==
+"@abp/jquery-validation-unobtrusive@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce"
+ integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg==
dependencies:
- "@abp/jquery-validation" "~9.3.1"
+ "@abp/jquery-validation" "~9.3.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.1.tgz#b96a430cffdb8cce298463b975786b25dc6d655b"
- integrity sha512-041+nqCqp6ySlzocQnKJ6/FMumMcyHmkVjlguEShbttJJL27JVq3V8qmh9t/flQSa9Vv7q1qHyYBQBLZ0ISIBA==
+"@abp/jquery-validation@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76"
+ integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.1.tgz#697c59500eeb76e047a26c9176e7cd2d55e40965"
- integrity sha512-pUurE04byV0bK7O9C7pFiLECP8keE7+KodDH8K9qwBCZ0O/DBsbG9cI7EZW6xAd+WPPrcAEi6QC8y3MIn9dv2A==
+"@abp/jquery@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade"
+ integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
jquery "~3.7.1"
-"@abp/lodash@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.1.tgz#6ff141b9cad8454de30c2d0a80035054af9570e5"
- integrity sha512-9FPq/ggTRMpBJk4Qz2HhYbExXUpWoNSsIbxR3xyrxiD3CDwt7AK51X+NbYkqW7EqvccKENfqsQ6hOcwCpyPcdQ==
+"@abp/lodash@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4"
+ integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
lodash "^4.17.21"
-"@abp/luxon@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.1.tgz#ff3ad7fcb9bc56d0286f69eb665ab3137a1142e5"
- integrity sha512-r46jTdWiDp41/UEYc0hqdSHVwIQfqGpPvAysN+8csjLg5EkZhAjrahlsnJbu0BfCC+E+GhjOQ/oad1hz68bDJA==
+"@abp/luxon@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84"
+ integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.1.tgz#1071a8095197af1f98ddc06fdcc71e84ab6fd7f2"
- integrity sha512-eijQKbRJT2cXspXuPCNOtbYCp/PwPlBAQgKr9FHNPT9ujuOEA3spY71VyIOBKh/cTnH0ANaUSZzEE4G/7r9cag==
+"@abp/malihu-custom-scrollbar-plugin@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030"
+ integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.1.tgz#ac0ef40a34197efff6539effd865a014e2c10b81"
- integrity sha512-X+VoWNCcC5p0YC9betQmG+tm9C3y50vuShKCKrnOKvoILNSQJ+siVtYjIf0PQa/O8jUefUlehgWTk0yWYgKxjQ==
+"@abp/moment@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406"
+ integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg==
dependencies:
moment "^2.30.1"
-"@abp/owl.carousel@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-9.3.1.tgz#fc97b50bb9b8ef7d106556a3ed1ea99919645b4a"
- integrity sha512-ZfLE7mAk7MntBr7b5a7p+7MruknHP/9rHG5yk8QMZfIHzEjm8KN7Hm/o6FgyFDi15QU0Ht1ITxXJZcs5eU84aQ==
+"@abp/owl.carousel@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-9.3.2.tgz#79fbb5bb2dd8d18a7519b0cd7a8cd4e28814907b"
+ integrity sha512-ETDndGFbyTGWLWiuFChJP6T3rniJgka2hfK3uatg5YmneY9Oqz0X1mwXHHWgD4mBSAB2nCi+PnhSU5Oi3Fj4kQ==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
owl.carousel "^2.3.4"
-"@abp/prismjs@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.1.tgz#f2f42e962d6d759e8e016e4909a806a672328318"
- integrity sha512-OIC3pKNLv5Cf6VPDOVLwYweQ+ADw0i50fXxb0+oPYN/bkfYdEL+M4q3A0UWKvE67/nJLMUHyPXxMlqAFSbqYrw==
+"@abp/prismjs@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.2.tgz#2ea48bfa5ebcfd98962029eebeab374d63a4e242"
+ integrity sha512-q8bdUjk+IuP+nWzN8phgFjvKtOHR94OT5Sth7Rp64L68pVCJopihyth8f4mLZl7hMtwrro/5GFxjpR+KRNRpbg==
dependencies:
- "@abp/clipboard" "~9.3.1"
- "@abp/core" "~9.3.1"
+ "@abp/clipboard" "~9.3.2"
+ "@abp/core" "~9.3.2"
prismjs "^1.29.0"
-"@abp/select2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.1.tgz#f760050b3b0a51a4c3311600a5c7abc991e560fc"
- integrity sha512-KA1AMToMMfReJek0yWgviYr9vvlH1r43ObaIrfweF3sZsvo86VHtUeBEcYdGr5MtAmtHRukTfu2y0fSaK7GjYQ==
+"@abp/select2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f"
+ integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.1.tgz#279a0b070ea27d1beb9b0b472768694b0d6a7162"
- integrity sha512-bEaoM7wNrF4dkf2IoBmxRhcHWMK9LjG7hUnZWhFi/J1n10wJH+2yz7qsajbdzIF6CVvelAcMRzbxdVg7nxrnvw==
+"@abp/sweetalert2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493"
+ integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.1.tgz#ae0a7ff8867f228b464f0c7bef46466e72aa5d28"
- integrity sha512-FVAzEYl0SV07EM/W5wlE6Z25lnGC5CT4bBVzNFq8b3UjM+m0AhGNBwPrAyianyZyMYUzaF0UtL3PgTJJ+BZ8gA==
+"@abp/timeago@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52"
+ integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
timeago "^1.6.7"
-"@abp/tui-editor@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.1.tgz#3ffbbb87465114d81b890693d37cbd391492d4c0"
- integrity sha512-9aVdg4cyamuutM7A/MlDMEFTvI2TBH30DQWNvAeaabQPlBfja6uE9mReAwHmPm/bHJUAKLJGuWS7+i9kFQaIGA==
+"@abp/tui-editor@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.2.tgz#7d18d8cf1d6dae3c5072c403dcc85af5ab9792ba"
+ integrity sha512-JnYCrr4UIZskB4zwNywdk76cXKUzMCXW5v4ec4ClbHC59FTKv34iIRonl1kYC/NkjDTGO8gvmyYG/3UeXrRWmQ==
dependencies:
- "@abp/jquery" "~9.3.1"
- "@abp/prismjs" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
+ "@abp/prismjs" "~9.3.2"
-"@abp/utils@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.1.tgz#1a649f793c0a95a3a02f331bf0467908ba32fe65"
- integrity sha512-4cEl8npNp3R5cnhIjlXq8DjBLnA3U1H50E4xMtSY8Y9/nnvkn7ESqIzMlYlPDw9SUjQ4uhftVJqUyh83yq48jg==
+"@abp/utils@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795"
+ integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
index 1e7672c37d..3f75e592bf 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
@@ -3,6 +3,6 @@
"name": "client-simulation-web",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2"
}
}
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
index 734d8cf2db..13950786c8 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
@@ -2,185 +2,185 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.1.tgz#a35e984e38773f53e0b2b25761bcf503ba613aaf"
- integrity sha512-kTN8pqfpTxOMD3nOVmwGHqtVwN4qlUjyQm7c+on98cmnXFllGXJ1QQLgnLRYT68lHJzW4nUNNN1VfET4tlMdDg==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7"
+ integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2"
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.1.tgz#7b8b297c9fac61970b3f0d7e4a6d11fa89b892ea"
- integrity sha512-cc2BacHCyaDHP0xeSMyIR7asiVmTkfYtMhh+kLp8XBQ6JeqDLi5YW4TdgwJv+t8s8U0j+DwKtgUOtwHBhlOtvg==
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966"
+ integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew==
dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.3.1"
- "@abp/bootstrap" "~9.3.1"
- "@abp/bootstrap-datepicker" "~9.3.1"
- "@abp/bootstrap-daterangepicker" "~9.3.1"
- "@abp/datatables.net-bs5" "~9.3.1"
- "@abp/font-awesome" "~9.3.1"
- "@abp/jquery-form" "~9.3.1"
- "@abp/jquery-validation-unobtrusive" "~9.3.1"
- "@abp/lodash" "~9.3.1"
- "@abp/luxon" "~9.3.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.3.1"
- "@abp/moment" "~9.3.1"
- "@abp/select2" "~9.3.1"
- "@abp/sweetalert2" "~9.3.1"
- "@abp/timeago" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.1.tgz#17b9e49e4a3588cb0d383f9da700c99d5974b562"
- integrity sha512-bxpsiwfDSfDHYyHc8jVBrnbIrJ7hbHGO86wWmYxd6iM/qMpgjzi1eFadt5oPVrFw99FnfNqREtMpdVbNJZ7n/Q==
+ "@abp/aspnetcore.mvc.ui" "~9.3.2"
+ "@abp/bootstrap" "~9.3.2"
+ "@abp/bootstrap-datepicker" "~9.3.2"
+ "@abp/bootstrap-daterangepicker" "~9.3.2"
+ "@abp/datatables.net-bs5" "~9.3.2"
+ "@abp/font-awesome" "~9.3.2"
+ "@abp/jquery-form" "~9.3.2"
+ "@abp/jquery-validation-unobtrusive" "~9.3.2"
+ "@abp/lodash" "~9.3.2"
+ "@abp/luxon" "~9.3.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.3.2"
+ "@abp/moment" "~9.3.2"
+ "@abp/select2" "~9.3.2"
+ "@abp/sweetalert2" "~9.3.2"
+ "@abp/timeago" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91"
+ integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.1.tgz#b3c6d0843d17bc22d15658d0b284f2c23811bef1"
- integrity sha512-oGwqGf2Qkq0EXzOn9r3TsNccAklwabHu3J00VyLgAAkn3vGlou1r7xG8n0H0zC3V7/EirDKoyFr9s106g7kxJA==
+"@abp/bootstrap-datepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987"
+ integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.1.tgz#3be4165954e0aa5bfec782df677ae687cc94b651"
- integrity sha512-1wdVw/JOfxwND3TQD8kOPJU3UwECi4rsrzPSQtPCAt/YGWtF5MIl9nhZ9WqSwukNie0dYmECAw5FNaoC79LOAw==
+"@abp/bootstrap-daterangepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18"
+ integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.1.tgz#917d013d257bbd035f264a324e77c6aecd4170c5"
- integrity sha512-t34nqLrMn0Wvw+3KNmVTMsdjHhMMppNITskuUdFwCCD14UIWcbQYLr9sSuYtS76nna6RUaL0MuYL4uRcqA7hiw==
+"@abp/bootstrap@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b"
+ integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
bootstrap "^5.3.3"
-"@abp/core@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.1.tgz#db01b8d8917283226e5552b1961e63c075ecae4f"
- integrity sha512-y/cvEvbxahaLygeJ6D7LSuNOWAwWRMf/ceLQLZ+J97trKKzQ58q3sth8E8FqhSAGJRYnGwGNqKLsBmFPjlKtMA==
+"@abp/core@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778"
+ integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ==
dependencies:
- "@abp/utils" "~9.3.1"
+ "@abp/utils" "~9.3.2"
-"@abp/datatables.net-bs5@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.1.tgz#488c5bdf548f637b8ef2f8109b2416f9af201f8d"
- integrity sha512-8j+fsDjYf9PgWxioZMQb/WjmW/8LHpR+E5v5m+Oxd9epDR+ugsvT7IhuMvBJ+yv96FZA19ULTgj3dhNa6ff7Og==
+"@abp/datatables.net-bs5@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780"
+ integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q==
dependencies:
- "@abp/datatables.net" "~9.3.1"
+ "@abp/datatables.net" "~9.3.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.1.tgz#41e2daca48ac0517cc53afe26e98cea9d347e03f"
- integrity sha512-oD6s0luu2wuLODCaTqujAczTVySDr+d988AMHpiNlHLTcdXGapF9q3oWrK9bvSrNdJpCtAMhAUKyZ9b28aoBWg==
+"@abp/datatables.net@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1"
+ integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.1.tgz#ec988894248ea187bb5aec72dc79b4be27034acc"
- integrity sha512-z1zwl0SZYrBVX+J961vbF0AMnyjhn00E9GfqGR6hH/mvyrN8T95xyDN+vDRwl907pTItNKBdWH78eXkv58WMdQ==
+"@abp/font-awesome@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1"
+ integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/jquery-form@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.1.tgz#8ec1724231d4415bab47047938a6fa0c9ca1c79c"
- integrity sha512-8mN3JfZWdXAZ3y9jQpGkge4JctAt5DCZHu3lV4kafZtmhz1xdaj6vaaIpxo2TpTjx7/79XY8mymnxXefiO0U3Q==
+"@abp/jquery-form@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b"
+ integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.1.tgz#31ab753a296fa9d6838f2d97ff256a40df633bdc"
- integrity sha512-YBQu/sKItnbjXoOYqUIm8wyJnXfRTaHy4/TSVEB3JYBcpHjjXMd9KX3FwK4AzCsSgaIGJK/WkdkiO5bvPqApCg==
+"@abp/jquery-validation-unobtrusive@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce"
+ integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg==
dependencies:
- "@abp/jquery-validation" "~9.3.1"
+ "@abp/jquery-validation" "~9.3.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.1.tgz#b96a430cffdb8cce298463b975786b25dc6d655b"
- integrity sha512-041+nqCqp6ySlzocQnKJ6/FMumMcyHmkVjlguEShbttJJL27JVq3V8qmh9t/flQSa9Vv7q1qHyYBQBLZ0ISIBA==
+"@abp/jquery-validation@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76"
+ integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.1.tgz#697c59500eeb76e047a26c9176e7cd2d55e40965"
- integrity sha512-pUurE04byV0bK7O9C7pFiLECP8keE7+KodDH8K9qwBCZ0O/DBsbG9cI7EZW6xAd+WPPrcAEi6QC8y3MIn9dv2A==
+"@abp/jquery@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade"
+ integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
jquery "~3.7.1"
-"@abp/lodash@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.1.tgz#6ff141b9cad8454de30c2d0a80035054af9570e5"
- integrity sha512-9FPq/ggTRMpBJk4Qz2HhYbExXUpWoNSsIbxR3xyrxiD3CDwt7AK51X+NbYkqW7EqvccKENfqsQ6hOcwCpyPcdQ==
+"@abp/lodash@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4"
+ integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
lodash "^4.17.21"
-"@abp/luxon@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.1.tgz#ff3ad7fcb9bc56d0286f69eb665ab3137a1142e5"
- integrity sha512-r46jTdWiDp41/UEYc0hqdSHVwIQfqGpPvAysN+8csjLg5EkZhAjrahlsnJbu0BfCC+E+GhjOQ/oad1hz68bDJA==
+"@abp/luxon@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84"
+ integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.1.tgz#1071a8095197af1f98ddc06fdcc71e84ab6fd7f2"
- integrity sha512-eijQKbRJT2cXspXuPCNOtbYCp/PwPlBAQgKr9FHNPT9ujuOEA3spY71VyIOBKh/cTnH0ANaUSZzEE4G/7r9cag==
+"@abp/malihu-custom-scrollbar-plugin@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030"
+ integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.1.tgz#ac0ef40a34197efff6539effd865a014e2c10b81"
- integrity sha512-X+VoWNCcC5p0YC9betQmG+tm9C3y50vuShKCKrnOKvoILNSQJ+siVtYjIf0PQa/O8jUefUlehgWTk0yWYgKxjQ==
+"@abp/moment@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406"
+ integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg==
dependencies:
moment "^2.30.1"
-"@abp/select2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.1.tgz#f760050b3b0a51a4c3311600a5c7abc991e560fc"
- integrity sha512-KA1AMToMMfReJek0yWgviYr9vvlH1r43ObaIrfweF3sZsvo86VHtUeBEcYdGr5MtAmtHRukTfu2y0fSaK7GjYQ==
+"@abp/select2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f"
+ integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.1.tgz#279a0b070ea27d1beb9b0b472768694b0d6a7162"
- integrity sha512-bEaoM7wNrF4dkf2IoBmxRhcHWMK9LjG7hUnZWhFi/J1n10wJH+2yz7qsajbdzIF6CVvelAcMRzbxdVg7nxrnvw==
+"@abp/sweetalert2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493"
+ integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.1.tgz#ae0a7ff8867f228b464f0c7bef46466e72aa5d28"
- integrity sha512-FVAzEYl0SV07EM/W5wlE6Z25lnGC5CT4bBVzNFq8b3UjM+m0AhGNBwPrAyianyZyMYUzaF0UtL3PgTJJ+BZ8gA==
+"@abp/timeago@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52"
+ integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
timeago "^1.6.7"
-"@abp/utils@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.1.tgz#1a649f793c0a95a3a02f331bf0467908ba32fe65"
- integrity sha512-4cEl8npNp3R5cnhIjlXq8DjBLnA3U1H50E4xMtSY8Y9/nnvkn7ESqIzMlYlPDw9SUjQ4uhftVJqUyh83yq48jg==
+"@abp/utils@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795"
+ integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json
index 59f78ce839..b5196a58c7 100644
--- a/modules/cms-kit/angular/package.json
+++ b/modules/cms-kit/angular/package.json
@@ -15,11 +15,11 @@
},
"private": true,
"dependencies": {
- "@abp/ng.account": "~9.3.1",
- "@abp/ng.identity": "~9.3.1",
- "@abp/ng.setting-management": "~9.3.1",
- "@abp/ng.tenant-management": "~9.3.1",
- "@abp/ng.theme.basic": "~9.3.1",
+ "@abp/ng.account": "~9.3.2",
+ "@abp/ng.identity": "~9.3.2",
+ "@abp/ng.setting-management": "~9.3.2",
+ "@abp/ng.tenant-management": "~9.3.2",
+ "@abp/ng.theme.basic": "~9.3.2",
"@angular/animations": "~10.0.0",
"@angular/common": "~10.0.0",
"@angular/compiler": "~10.0.0",
diff --git a/modules/cms-kit/angular/projects/cms-kit/package.json b/modules/cms-kit/angular/projects/cms-kit/package.json
index 845a4b68ad..2c37d6bf52 100644
--- a/modules/cms-kit/angular/projects/cms-kit/package.json
+++ b/modules/cms-kit/angular/projects/cms-kit/package.json
@@ -4,8 +4,8 @@
"peerDependencies": {
"@angular/common": "^9.1.11",
"@angular/core": "^9.1.11",
- "@abp/ng.core": ">=9.3.1",
- "@abp/ng.theme.shared": ">=9.3.1"
+ "@abp/ng.core": ">=9.3.2",
+ "@abp/ng.theme.shared": ">=9.3.2"
},
"dependencies": {
"tslib": "^2.0.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
index 0a766d4944..1f34c513a9 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
@@ -3,6 +3,6 @@
"name": "my-app-identityserver",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2"
}
}
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
index 734d8cf2db..13950786c8 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
@@ -2,185 +2,185 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.1.tgz#a35e984e38773f53e0b2b25761bcf503ba613aaf"
- integrity sha512-kTN8pqfpTxOMD3nOVmwGHqtVwN4qlUjyQm7c+on98cmnXFllGXJ1QQLgnLRYT68lHJzW4nUNNN1VfET4tlMdDg==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7"
+ integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2"
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.1.tgz#7b8b297c9fac61970b3f0d7e4a6d11fa89b892ea"
- integrity sha512-cc2BacHCyaDHP0xeSMyIR7asiVmTkfYtMhh+kLp8XBQ6JeqDLi5YW4TdgwJv+t8s8U0j+DwKtgUOtwHBhlOtvg==
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966"
+ integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew==
dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.3.1"
- "@abp/bootstrap" "~9.3.1"
- "@abp/bootstrap-datepicker" "~9.3.1"
- "@abp/bootstrap-daterangepicker" "~9.3.1"
- "@abp/datatables.net-bs5" "~9.3.1"
- "@abp/font-awesome" "~9.3.1"
- "@abp/jquery-form" "~9.3.1"
- "@abp/jquery-validation-unobtrusive" "~9.3.1"
- "@abp/lodash" "~9.3.1"
- "@abp/luxon" "~9.3.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.3.1"
- "@abp/moment" "~9.3.1"
- "@abp/select2" "~9.3.1"
- "@abp/sweetalert2" "~9.3.1"
- "@abp/timeago" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.1.tgz#17b9e49e4a3588cb0d383f9da700c99d5974b562"
- integrity sha512-bxpsiwfDSfDHYyHc8jVBrnbIrJ7hbHGO86wWmYxd6iM/qMpgjzi1eFadt5oPVrFw99FnfNqREtMpdVbNJZ7n/Q==
+ "@abp/aspnetcore.mvc.ui" "~9.3.2"
+ "@abp/bootstrap" "~9.3.2"
+ "@abp/bootstrap-datepicker" "~9.3.2"
+ "@abp/bootstrap-daterangepicker" "~9.3.2"
+ "@abp/datatables.net-bs5" "~9.3.2"
+ "@abp/font-awesome" "~9.3.2"
+ "@abp/jquery-form" "~9.3.2"
+ "@abp/jquery-validation-unobtrusive" "~9.3.2"
+ "@abp/lodash" "~9.3.2"
+ "@abp/luxon" "~9.3.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.3.2"
+ "@abp/moment" "~9.3.2"
+ "@abp/select2" "~9.3.2"
+ "@abp/sweetalert2" "~9.3.2"
+ "@abp/timeago" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91"
+ integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.1.tgz#b3c6d0843d17bc22d15658d0b284f2c23811bef1"
- integrity sha512-oGwqGf2Qkq0EXzOn9r3TsNccAklwabHu3J00VyLgAAkn3vGlou1r7xG8n0H0zC3V7/EirDKoyFr9s106g7kxJA==
+"@abp/bootstrap-datepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987"
+ integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.1.tgz#3be4165954e0aa5bfec782df677ae687cc94b651"
- integrity sha512-1wdVw/JOfxwND3TQD8kOPJU3UwECi4rsrzPSQtPCAt/YGWtF5MIl9nhZ9WqSwukNie0dYmECAw5FNaoC79LOAw==
+"@abp/bootstrap-daterangepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18"
+ integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.1.tgz#917d013d257bbd035f264a324e77c6aecd4170c5"
- integrity sha512-t34nqLrMn0Wvw+3KNmVTMsdjHhMMppNITskuUdFwCCD14UIWcbQYLr9sSuYtS76nna6RUaL0MuYL4uRcqA7hiw==
+"@abp/bootstrap@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b"
+ integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
bootstrap "^5.3.3"
-"@abp/core@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.1.tgz#db01b8d8917283226e5552b1961e63c075ecae4f"
- integrity sha512-y/cvEvbxahaLygeJ6D7LSuNOWAwWRMf/ceLQLZ+J97trKKzQ58q3sth8E8FqhSAGJRYnGwGNqKLsBmFPjlKtMA==
+"@abp/core@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778"
+ integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ==
dependencies:
- "@abp/utils" "~9.3.1"
+ "@abp/utils" "~9.3.2"
-"@abp/datatables.net-bs5@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.1.tgz#488c5bdf548f637b8ef2f8109b2416f9af201f8d"
- integrity sha512-8j+fsDjYf9PgWxioZMQb/WjmW/8LHpR+E5v5m+Oxd9epDR+ugsvT7IhuMvBJ+yv96FZA19ULTgj3dhNa6ff7Og==
+"@abp/datatables.net-bs5@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780"
+ integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q==
dependencies:
- "@abp/datatables.net" "~9.3.1"
+ "@abp/datatables.net" "~9.3.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.1.tgz#41e2daca48ac0517cc53afe26e98cea9d347e03f"
- integrity sha512-oD6s0luu2wuLODCaTqujAczTVySDr+d988AMHpiNlHLTcdXGapF9q3oWrK9bvSrNdJpCtAMhAUKyZ9b28aoBWg==
+"@abp/datatables.net@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1"
+ integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.1.tgz#ec988894248ea187bb5aec72dc79b4be27034acc"
- integrity sha512-z1zwl0SZYrBVX+J961vbF0AMnyjhn00E9GfqGR6hH/mvyrN8T95xyDN+vDRwl907pTItNKBdWH78eXkv58WMdQ==
+"@abp/font-awesome@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1"
+ integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/jquery-form@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.1.tgz#8ec1724231d4415bab47047938a6fa0c9ca1c79c"
- integrity sha512-8mN3JfZWdXAZ3y9jQpGkge4JctAt5DCZHu3lV4kafZtmhz1xdaj6vaaIpxo2TpTjx7/79XY8mymnxXefiO0U3Q==
+"@abp/jquery-form@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b"
+ integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.1.tgz#31ab753a296fa9d6838f2d97ff256a40df633bdc"
- integrity sha512-YBQu/sKItnbjXoOYqUIm8wyJnXfRTaHy4/TSVEB3JYBcpHjjXMd9KX3FwK4AzCsSgaIGJK/WkdkiO5bvPqApCg==
+"@abp/jquery-validation-unobtrusive@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce"
+ integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg==
dependencies:
- "@abp/jquery-validation" "~9.3.1"
+ "@abp/jquery-validation" "~9.3.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.1.tgz#b96a430cffdb8cce298463b975786b25dc6d655b"
- integrity sha512-041+nqCqp6ySlzocQnKJ6/FMumMcyHmkVjlguEShbttJJL27JVq3V8qmh9t/flQSa9Vv7q1qHyYBQBLZ0ISIBA==
+"@abp/jquery-validation@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76"
+ integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.1.tgz#697c59500eeb76e047a26c9176e7cd2d55e40965"
- integrity sha512-pUurE04byV0bK7O9C7pFiLECP8keE7+KodDH8K9qwBCZ0O/DBsbG9cI7EZW6xAd+WPPrcAEi6QC8y3MIn9dv2A==
+"@abp/jquery@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade"
+ integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
jquery "~3.7.1"
-"@abp/lodash@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.1.tgz#6ff141b9cad8454de30c2d0a80035054af9570e5"
- integrity sha512-9FPq/ggTRMpBJk4Qz2HhYbExXUpWoNSsIbxR3xyrxiD3CDwt7AK51X+NbYkqW7EqvccKENfqsQ6hOcwCpyPcdQ==
+"@abp/lodash@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4"
+ integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
lodash "^4.17.21"
-"@abp/luxon@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.1.tgz#ff3ad7fcb9bc56d0286f69eb665ab3137a1142e5"
- integrity sha512-r46jTdWiDp41/UEYc0hqdSHVwIQfqGpPvAysN+8csjLg5EkZhAjrahlsnJbu0BfCC+E+GhjOQ/oad1hz68bDJA==
+"@abp/luxon@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84"
+ integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.1.tgz#1071a8095197af1f98ddc06fdcc71e84ab6fd7f2"
- integrity sha512-eijQKbRJT2cXspXuPCNOtbYCp/PwPlBAQgKr9FHNPT9ujuOEA3spY71VyIOBKh/cTnH0ANaUSZzEE4G/7r9cag==
+"@abp/malihu-custom-scrollbar-plugin@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030"
+ integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.1.tgz#ac0ef40a34197efff6539effd865a014e2c10b81"
- integrity sha512-X+VoWNCcC5p0YC9betQmG+tm9C3y50vuShKCKrnOKvoILNSQJ+siVtYjIf0PQa/O8jUefUlehgWTk0yWYgKxjQ==
+"@abp/moment@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406"
+ integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg==
dependencies:
moment "^2.30.1"
-"@abp/select2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.1.tgz#f760050b3b0a51a4c3311600a5c7abc991e560fc"
- integrity sha512-KA1AMToMMfReJek0yWgviYr9vvlH1r43ObaIrfweF3sZsvo86VHtUeBEcYdGr5MtAmtHRukTfu2y0fSaK7GjYQ==
+"@abp/select2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f"
+ integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.1.tgz#279a0b070ea27d1beb9b0b472768694b0d6a7162"
- integrity sha512-bEaoM7wNrF4dkf2IoBmxRhcHWMK9LjG7hUnZWhFi/J1n10wJH+2yz7qsajbdzIF6CVvelAcMRzbxdVg7nxrnvw==
+"@abp/sweetalert2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493"
+ integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.1.tgz#ae0a7ff8867f228b464f0c7bef46466e72aa5d28"
- integrity sha512-FVAzEYl0SV07EM/W5wlE6Z25lnGC5CT4bBVzNFq8b3UjM+m0AhGNBwPrAyianyZyMYUzaF0UtL3PgTJJ+BZ8gA==
+"@abp/timeago@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52"
+ integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
timeago "^1.6.7"
-"@abp/utils@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.1.tgz#1a649f793c0a95a3a02f331bf0467908ba32fe65"
- integrity sha512-4cEl8npNp3R5cnhIjlXq8DjBLnA3U1H50E4xMtSY8Y9/nnvkn7ESqIzMlYlPDw9SUjQ4uhftVJqUyh83yq48jg==
+"@abp/utils@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795"
+ integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
index e01e4f0f07..255027fa5f 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
@@ -3,6 +3,6 @@
"name": "my-app",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2"
}
}
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
index 734d8cf2db..13950786c8 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
@@ -2,185 +2,185 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.1.tgz#a35e984e38773f53e0b2b25761bcf503ba613aaf"
- integrity sha512-kTN8pqfpTxOMD3nOVmwGHqtVwN4qlUjyQm7c+on98cmnXFllGXJ1QQLgnLRYT68lHJzW4nUNNN1VfET4tlMdDg==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7"
+ integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2"
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.1.tgz#7b8b297c9fac61970b3f0d7e4a6d11fa89b892ea"
- integrity sha512-cc2BacHCyaDHP0xeSMyIR7asiVmTkfYtMhh+kLp8XBQ6JeqDLi5YW4TdgwJv+t8s8U0j+DwKtgUOtwHBhlOtvg==
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966"
+ integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew==
dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.3.1"
- "@abp/bootstrap" "~9.3.1"
- "@abp/bootstrap-datepicker" "~9.3.1"
- "@abp/bootstrap-daterangepicker" "~9.3.1"
- "@abp/datatables.net-bs5" "~9.3.1"
- "@abp/font-awesome" "~9.3.1"
- "@abp/jquery-form" "~9.3.1"
- "@abp/jquery-validation-unobtrusive" "~9.3.1"
- "@abp/lodash" "~9.3.1"
- "@abp/luxon" "~9.3.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.3.1"
- "@abp/moment" "~9.3.1"
- "@abp/select2" "~9.3.1"
- "@abp/sweetalert2" "~9.3.1"
- "@abp/timeago" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.1.tgz#17b9e49e4a3588cb0d383f9da700c99d5974b562"
- integrity sha512-bxpsiwfDSfDHYyHc8jVBrnbIrJ7hbHGO86wWmYxd6iM/qMpgjzi1eFadt5oPVrFw99FnfNqREtMpdVbNJZ7n/Q==
+ "@abp/aspnetcore.mvc.ui" "~9.3.2"
+ "@abp/bootstrap" "~9.3.2"
+ "@abp/bootstrap-datepicker" "~9.3.2"
+ "@abp/bootstrap-daterangepicker" "~9.3.2"
+ "@abp/datatables.net-bs5" "~9.3.2"
+ "@abp/font-awesome" "~9.3.2"
+ "@abp/jquery-form" "~9.3.2"
+ "@abp/jquery-validation-unobtrusive" "~9.3.2"
+ "@abp/lodash" "~9.3.2"
+ "@abp/luxon" "~9.3.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.3.2"
+ "@abp/moment" "~9.3.2"
+ "@abp/select2" "~9.3.2"
+ "@abp/sweetalert2" "~9.3.2"
+ "@abp/timeago" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91"
+ integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.1.tgz#b3c6d0843d17bc22d15658d0b284f2c23811bef1"
- integrity sha512-oGwqGf2Qkq0EXzOn9r3TsNccAklwabHu3J00VyLgAAkn3vGlou1r7xG8n0H0zC3V7/EirDKoyFr9s106g7kxJA==
+"@abp/bootstrap-datepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987"
+ integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.1.tgz#3be4165954e0aa5bfec782df677ae687cc94b651"
- integrity sha512-1wdVw/JOfxwND3TQD8kOPJU3UwECi4rsrzPSQtPCAt/YGWtF5MIl9nhZ9WqSwukNie0dYmECAw5FNaoC79LOAw==
+"@abp/bootstrap-daterangepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18"
+ integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.1.tgz#917d013d257bbd035f264a324e77c6aecd4170c5"
- integrity sha512-t34nqLrMn0Wvw+3KNmVTMsdjHhMMppNITskuUdFwCCD14UIWcbQYLr9sSuYtS76nna6RUaL0MuYL4uRcqA7hiw==
+"@abp/bootstrap@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b"
+ integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
bootstrap "^5.3.3"
-"@abp/core@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.1.tgz#db01b8d8917283226e5552b1961e63c075ecae4f"
- integrity sha512-y/cvEvbxahaLygeJ6D7LSuNOWAwWRMf/ceLQLZ+J97trKKzQ58q3sth8E8FqhSAGJRYnGwGNqKLsBmFPjlKtMA==
+"@abp/core@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778"
+ integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ==
dependencies:
- "@abp/utils" "~9.3.1"
+ "@abp/utils" "~9.3.2"
-"@abp/datatables.net-bs5@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.1.tgz#488c5bdf548f637b8ef2f8109b2416f9af201f8d"
- integrity sha512-8j+fsDjYf9PgWxioZMQb/WjmW/8LHpR+E5v5m+Oxd9epDR+ugsvT7IhuMvBJ+yv96FZA19ULTgj3dhNa6ff7Og==
+"@abp/datatables.net-bs5@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780"
+ integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q==
dependencies:
- "@abp/datatables.net" "~9.3.1"
+ "@abp/datatables.net" "~9.3.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.1.tgz#41e2daca48ac0517cc53afe26e98cea9d347e03f"
- integrity sha512-oD6s0luu2wuLODCaTqujAczTVySDr+d988AMHpiNlHLTcdXGapF9q3oWrK9bvSrNdJpCtAMhAUKyZ9b28aoBWg==
+"@abp/datatables.net@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1"
+ integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.1.tgz#ec988894248ea187bb5aec72dc79b4be27034acc"
- integrity sha512-z1zwl0SZYrBVX+J961vbF0AMnyjhn00E9GfqGR6hH/mvyrN8T95xyDN+vDRwl907pTItNKBdWH78eXkv58WMdQ==
+"@abp/font-awesome@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1"
+ integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/jquery-form@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.1.tgz#8ec1724231d4415bab47047938a6fa0c9ca1c79c"
- integrity sha512-8mN3JfZWdXAZ3y9jQpGkge4JctAt5DCZHu3lV4kafZtmhz1xdaj6vaaIpxo2TpTjx7/79XY8mymnxXefiO0U3Q==
+"@abp/jquery-form@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b"
+ integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.1.tgz#31ab753a296fa9d6838f2d97ff256a40df633bdc"
- integrity sha512-YBQu/sKItnbjXoOYqUIm8wyJnXfRTaHy4/TSVEB3JYBcpHjjXMd9KX3FwK4AzCsSgaIGJK/WkdkiO5bvPqApCg==
+"@abp/jquery-validation-unobtrusive@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce"
+ integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg==
dependencies:
- "@abp/jquery-validation" "~9.3.1"
+ "@abp/jquery-validation" "~9.3.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.1.tgz#b96a430cffdb8cce298463b975786b25dc6d655b"
- integrity sha512-041+nqCqp6ySlzocQnKJ6/FMumMcyHmkVjlguEShbttJJL27JVq3V8qmh9t/flQSa9Vv7q1qHyYBQBLZ0ISIBA==
+"@abp/jquery-validation@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76"
+ integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.1.tgz#697c59500eeb76e047a26c9176e7cd2d55e40965"
- integrity sha512-pUurE04byV0bK7O9C7pFiLECP8keE7+KodDH8K9qwBCZ0O/DBsbG9cI7EZW6xAd+WPPrcAEi6QC8y3MIn9dv2A==
+"@abp/jquery@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade"
+ integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
jquery "~3.7.1"
-"@abp/lodash@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.1.tgz#6ff141b9cad8454de30c2d0a80035054af9570e5"
- integrity sha512-9FPq/ggTRMpBJk4Qz2HhYbExXUpWoNSsIbxR3xyrxiD3CDwt7AK51X+NbYkqW7EqvccKENfqsQ6hOcwCpyPcdQ==
+"@abp/lodash@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4"
+ integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
lodash "^4.17.21"
-"@abp/luxon@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.1.tgz#ff3ad7fcb9bc56d0286f69eb665ab3137a1142e5"
- integrity sha512-r46jTdWiDp41/UEYc0hqdSHVwIQfqGpPvAysN+8csjLg5EkZhAjrahlsnJbu0BfCC+E+GhjOQ/oad1hz68bDJA==
+"@abp/luxon@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84"
+ integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.1.tgz#1071a8095197af1f98ddc06fdcc71e84ab6fd7f2"
- integrity sha512-eijQKbRJT2cXspXuPCNOtbYCp/PwPlBAQgKr9FHNPT9ujuOEA3spY71VyIOBKh/cTnH0ANaUSZzEE4G/7r9cag==
+"@abp/malihu-custom-scrollbar-plugin@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030"
+ integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.1.tgz#ac0ef40a34197efff6539effd865a014e2c10b81"
- integrity sha512-X+VoWNCcC5p0YC9betQmG+tm9C3y50vuShKCKrnOKvoILNSQJ+siVtYjIf0PQa/O8jUefUlehgWTk0yWYgKxjQ==
+"@abp/moment@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406"
+ integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg==
dependencies:
moment "^2.30.1"
-"@abp/select2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.1.tgz#f760050b3b0a51a4c3311600a5c7abc991e560fc"
- integrity sha512-KA1AMToMMfReJek0yWgviYr9vvlH1r43ObaIrfweF3sZsvo86VHtUeBEcYdGr5MtAmtHRukTfu2y0fSaK7GjYQ==
+"@abp/select2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f"
+ integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.1.tgz#279a0b070ea27d1beb9b0b472768694b0d6a7162"
- integrity sha512-bEaoM7wNrF4dkf2IoBmxRhcHWMK9LjG7hUnZWhFi/J1n10wJH+2yz7qsajbdzIF6CVvelAcMRzbxdVg7nxrnvw==
+"@abp/sweetalert2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493"
+ integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.1.tgz#ae0a7ff8867f228b464f0c7bef46466e72aa5d28"
- integrity sha512-FVAzEYl0SV07EM/W5wlE6Z25lnGC5CT4bBVzNFq8b3UjM+m0AhGNBwPrAyianyZyMYUzaF0UtL3PgTJJ+BZ8gA==
+"@abp/timeago@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52"
+ integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
timeago "^1.6.7"
-"@abp/utils@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.1.tgz#1a649f793c0a95a3a02f331bf0467908ba32fe65"
- integrity sha512-4cEl8npNp3R5cnhIjlXq8DjBLnA3U1H50E4xMtSY8Y9/nnvkn7ESqIzMlYlPDw9SUjQ4uhftVJqUyh83yq48jg==
+"@abp/utils@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795"
+ integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Program.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Program.cs
index 22ea35327e..2d47808468 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Program.cs
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Program.cs
@@ -1,7 +1,10 @@
using System;
using System.IO;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Events;
@@ -10,7 +13,7 @@ namespace Volo.CmsKit;
public class Program
{
- public static int Main(string[] args)
+ public static async Task Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
@@ -23,33 +26,34 @@ public class Program
try
{
Log.Information("Starting web host.");
- CreateHostBuilder(args).Build().Run();
- return 0;
+
+ var builder = WebApplication.CreateBuilder(args);
+
+ builder.Host
+#if MongoDB
+ .ConfigureAppConfiguration(options =>
+ {
+ options.AddJsonFile("appsettings.MongoDB.json");
+ })
+#endif
+ .UseAutofac()
+ .UseSerilog();
+
+ await builder.AddApplicationAsync();
+
+ var app = builder.Build();
+
+ await app.InitializeApplicationAsync();
+
+ await app.RunAsync();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly!");
- return 1;
}
finally
{
- Log.CloseAndFlush();
+ await Log.CloseAndFlushAsync();
}
}
-
- internal static IHostBuilder CreateHostBuilder(string[] args) =>
- Host.CreateDefaultBuilder(args)
- .AddAppSettingsSecretsJson()
-#if MongoDB
- .ConfigureAppConfiguration(options =>
- {
- options.AddJsonFile("appsettings.MongoDB.json");
- })
-#endif
- .ConfigureWebHostDefaults(webBuilder =>
- {
- webBuilder.UseStartup();
- })
- .UseAutofac()
- .UseSerilog();
-}
+}
\ No newline at end of file
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Startup.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Startup.cs
deleted file mode 100644
index 7eebea28f0..0000000000
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Startup.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-
-namespace Volo.CmsKit;
-
-public class Startup
-{
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddApplication();
- }
-
- public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
- {
- app.InitializeApplication();
- }
-}
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
index e8d3a25a3a..f103d3b08d 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
@@ -3,7 +3,7 @@
"name": "my-app",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.1",
- "@abp/cms-kit": "9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2",
+ "@abp/cms-kit": "9.3.2"
}
}
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
index 905d56ce09..c1a52914c8 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
@@ -2,293 +2,293 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.1.tgz#a35e984e38773f53e0b2b25761bcf503ba613aaf"
- integrity sha512-kTN8pqfpTxOMD3nOVmwGHqtVwN4qlUjyQm7c+on98cmnXFllGXJ1QQLgnLRYT68lHJzW4nUNNN1VfET4tlMdDg==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.1.tgz#7b8b297c9fac61970b3f0d7e4a6d11fa89b892ea"
- integrity sha512-cc2BacHCyaDHP0xeSMyIR7asiVmTkfYtMhh+kLp8XBQ6JeqDLi5YW4TdgwJv+t8s8U0j+DwKtgUOtwHBhlOtvg==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.3.1"
- "@abp/bootstrap" "~9.3.1"
- "@abp/bootstrap-datepicker" "~9.3.1"
- "@abp/bootstrap-daterangepicker" "~9.3.1"
- "@abp/datatables.net-bs5" "~9.3.1"
- "@abp/font-awesome" "~9.3.1"
- "@abp/jquery-form" "~9.3.1"
- "@abp/jquery-validation-unobtrusive" "~9.3.1"
- "@abp/lodash" "~9.3.1"
- "@abp/luxon" "~9.3.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.3.1"
- "@abp/moment" "~9.3.1"
- "@abp/select2" "~9.3.1"
- "@abp/sweetalert2" "~9.3.1"
- "@abp/timeago" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.1.tgz#17b9e49e4a3588cb0d383f9da700c99d5974b562"
- integrity sha512-bxpsiwfDSfDHYyHc8jVBrnbIrJ7hbHGO86wWmYxd6iM/qMpgjzi1eFadt5oPVrFw99FnfNqREtMpdVbNJZ7n/Q==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7"
+ integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966"
+ integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~9.3.2"
+ "@abp/bootstrap" "~9.3.2"
+ "@abp/bootstrap-datepicker" "~9.3.2"
+ "@abp/bootstrap-daterangepicker" "~9.3.2"
+ "@abp/datatables.net-bs5" "~9.3.2"
+ "@abp/font-awesome" "~9.3.2"
+ "@abp/jquery-form" "~9.3.2"
+ "@abp/jquery-validation-unobtrusive" "~9.3.2"
+ "@abp/lodash" "~9.3.2"
+ "@abp/luxon" "~9.3.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.3.2"
+ "@abp/moment" "~9.3.2"
+ "@abp/select2" "~9.3.2"
+ "@abp/sweetalert2" "~9.3.2"
+ "@abp/timeago" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91"
+ integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.1.tgz#b3c6d0843d17bc22d15658d0b284f2c23811bef1"
- integrity sha512-oGwqGf2Qkq0EXzOn9r3TsNccAklwabHu3J00VyLgAAkn3vGlou1r7xG8n0H0zC3V7/EirDKoyFr9s106g7kxJA==
+"@abp/bootstrap-datepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987"
+ integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.1.tgz#3be4165954e0aa5bfec782df677ae687cc94b651"
- integrity sha512-1wdVw/JOfxwND3TQD8kOPJU3UwECi4rsrzPSQtPCAt/YGWtF5MIl9nhZ9WqSwukNie0dYmECAw5FNaoC79LOAw==
+"@abp/bootstrap-daterangepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18"
+ integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.1.tgz#917d013d257bbd035f264a324e77c6aecd4170c5"
- integrity sha512-t34nqLrMn0Wvw+3KNmVTMsdjHhMMppNITskuUdFwCCD14UIWcbQYLr9sSuYtS76nna6RUaL0MuYL4uRcqA7hiw==
+"@abp/bootstrap@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b"
+ integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
bootstrap "^5.3.3"
-"@abp/clipboard@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.1.tgz#7ec773243463fe09c1bf7cda474fde1d100bddbb"
- integrity sha512-mD/jUCo2ggMp0mBKXtdz2gtKfO0ukd4kqY141TzYq8VIjNkNUbODkXdLkNfxVPyAeYY4lzE5oGDxJHwkteTvjQ==
+"@abp/clipboard@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.2.tgz#4e0d6456e142e552ca3b4ec10159276e096c56bf"
+ integrity sha512-jorX68Yw/9pWAmt8cOuVx3Cnp7VF9xuvCD/ecvL5eZyHhXt4tDcYIFO5LkF+CaIky79gdzdF3tmYeFSPUE/HzA==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
clipboard "^2.0.11"
-"@abp/cms-kit.admin@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-9.3.1.tgz#a31a454f1697b07fab9ae07233953c201bb143a4"
- integrity sha512-36Twu160T5GIiISUEG/R4e1zW86KxHgbhRPZOV/iOmb3i7/Bkks8XPl6rnmwC8NvXdR9cnoDH0iRV+oCgX80Kw==
+"@abp/cms-kit.admin@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-9.3.2.tgz#dd43e879bbfbdeae61fc001026bacc09279e5e7d"
+ integrity sha512-BsWb6vO+2n0s9aJ+ud1whxST7v/0cwk66CLGfUeWkdiahQGyOx3PsRHDD2k9yZA7H8okgYr+tpN/+hUPUjFw6w==
dependencies:
- "@abp/codemirror" "~9.3.1"
- "@abp/jstree" "~9.3.1"
- "@abp/markdown-it" "~9.3.1"
- "@abp/slugify" "~9.3.1"
- "@abp/tui-editor" "~9.3.1"
- "@abp/uppy" "~9.3.1"
+ "@abp/codemirror" "~9.3.2"
+ "@abp/jstree" "~9.3.2"
+ "@abp/markdown-it" "~9.3.2"
+ "@abp/slugify" "~9.3.2"
+ "@abp/tui-editor" "~9.3.2"
+ "@abp/uppy" "~9.3.2"
-"@abp/cms-kit.public@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-9.3.1.tgz#6cab353d26869a17caabf4741fc480455e3fa2e7"
- integrity sha512-13f3Qg3U7aXDcG6pN9kWdj33rR2dKWu4OKh3xeqDMcxlwVEAS5rD1HJRjzgdlH526hAsObTJE78y9vzNJ6yp7Q==
+"@abp/cms-kit.public@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-9.3.2.tgz#6eeed0407fd70b86aee148c79193403133364213"
+ integrity sha512-h5Ul5opCApy1wlwp4bARKKMkW+Q43VnPc/4BsKsPpLAB10XU3+DBr8U1vJWNnh+0h0bpRJ44norKfQ/mApscEw==
dependencies:
- "@abp/highlight.js" "~9.3.1"
- "@abp/star-rating-svg" "~9.3.1"
+ "@abp/highlight.js" "~9.3.2"
+ "@abp/star-rating-svg" "~9.3.2"
-"@abp/cms-kit@9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-9.3.1.tgz#5dbbc05b0c896e95ca5fe46e85ea40d58e62ae56"
- integrity sha512-fg47XSvym6AzNya+Oc0JkPXtu/LAI+9I2AxE8JssPb6qPvrof+n55mrGIUpR5yXwBnAr6Cr6z/F7EM6IieLUZg==
+"@abp/cms-kit@9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-9.3.2.tgz#02f135bb44165b0b687776c5d3b209810a541437"
+ integrity sha512-UHlFEJAeoKEl3KmuuHf3Hi8UQrUrciTYi4PRHInuS5JdpMT8ZOaTTPZtKxE9ZDuiN19lwc8vsrATbb43dgiX0g==
dependencies:
- "@abp/cms-kit.admin" "~9.3.1"
- "@abp/cms-kit.public" "~9.3.1"
+ "@abp/cms-kit.admin" "~9.3.2"
+ "@abp/cms-kit.public" "~9.3.2"
-"@abp/codemirror@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-9.3.1.tgz#6ce9c118a41f87ecae823f19b32714d548c63e70"
- integrity sha512-OYgdE1SuHD7efLA2pIAe28CxRjlnEHxqp+vQVxAVHn3cInnZ8eME6Gt+Chj/lq8/Qu4PwJ5kB6vnNQmhQtPWwQ==
+"@abp/codemirror@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-9.3.2.tgz#09de9ce79e6ed542292d12e288f57a58b6a84c98"
+ integrity sha512-h7yHGeOQRThHAsN1U7Viu0ifafK6m0LpyJOSWvQqAWHQJ44+iXy+gLeZJhJwIpJuwxPwZqQkuRKKjHqHTllf/Q==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
codemirror "^5.65.1"
-"@abp/core@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.1.tgz#db01b8d8917283226e5552b1961e63c075ecae4f"
- integrity sha512-y/cvEvbxahaLygeJ6D7LSuNOWAwWRMf/ceLQLZ+J97trKKzQ58q3sth8E8FqhSAGJRYnGwGNqKLsBmFPjlKtMA==
+"@abp/core@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778"
+ integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ==
dependencies:
- "@abp/utils" "~9.3.1"
+ "@abp/utils" "~9.3.2"
-"@abp/datatables.net-bs5@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.1.tgz#488c5bdf548f637b8ef2f8109b2416f9af201f8d"
- integrity sha512-8j+fsDjYf9PgWxioZMQb/WjmW/8LHpR+E5v5m+Oxd9epDR+ugsvT7IhuMvBJ+yv96FZA19ULTgj3dhNa6ff7Og==
+"@abp/datatables.net-bs5@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780"
+ integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q==
dependencies:
- "@abp/datatables.net" "~9.3.1"
+ "@abp/datatables.net" "~9.3.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.1.tgz#41e2daca48ac0517cc53afe26e98cea9d347e03f"
- integrity sha512-oD6s0luu2wuLODCaTqujAczTVySDr+d988AMHpiNlHLTcdXGapF9q3oWrK9bvSrNdJpCtAMhAUKyZ9b28aoBWg==
+"@abp/datatables.net@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1"
+ integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.1.tgz#ec988894248ea187bb5aec72dc79b4be27034acc"
- integrity sha512-z1zwl0SZYrBVX+J961vbF0AMnyjhn00E9GfqGR6hH/mvyrN8T95xyDN+vDRwl907pTItNKBdWH78eXkv58WMdQ==
+"@abp/font-awesome@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1"
+ integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/highlight.js@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.1.tgz#bf94c188a330f29e5a1dd1094d3130231e46baf8"
- integrity sha512-gkiKNTMuUa4xh3DgXJy3Sm3Mcq0hd7g6xlhAQ/Cf+O7rIQyWh3UACjcaqoylnk5iqgaN9QnWumwz7k5H4DgtnA==
+"@abp/highlight.js@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.2.tgz#add22b40f5b412d6c86629a4d6d449d426c9b141"
+ integrity sha512-EVUCK6Hm3J+sMCuGZDTEEyWxfvAK5mxLuYGRuRrmzZvxXKsnAwqZitMddAvkZVAwN1QiV3gyXgdrz1XUBWZ2kg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
"@highlightjs/cdn-assets" "~11.10.0"
-"@abp/jquery-form@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.1.tgz#8ec1724231d4415bab47047938a6fa0c9ca1c79c"
- integrity sha512-8mN3JfZWdXAZ3y9jQpGkge4JctAt5DCZHu3lV4kafZtmhz1xdaj6vaaIpxo2TpTjx7/79XY8mymnxXefiO0U3Q==
+"@abp/jquery-form@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b"
+ integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.1.tgz#31ab753a296fa9d6838f2d97ff256a40df633bdc"
- integrity sha512-YBQu/sKItnbjXoOYqUIm8wyJnXfRTaHy4/TSVEB3JYBcpHjjXMd9KX3FwK4AzCsSgaIGJK/WkdkiO5bvPqApCg==
+"@abp/jquery-validation-unobtrusive@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce"
+ integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg==
dependencies:
- "@abp/jquery-validation" "~9.3.1"
+ "@abp/jquery-validation" "~9.3.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.1.tgz#b96a430cffdb8cce298463b975786b25dc6d655b"
- integrity sha512-041+nqCqp6ySlzocQnKJ6/FMumMcyHmkVjlguEShbttJJL27JVq3V8qmh9t/flQSa9Vv7q1qHyYBQBLZ0ISIBA==
+"@abp/jquery-validation@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76"
+ integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.1.tgz#697c59500eeb76e047a26c9176e7cd2d55e40965"
- integrity sha512-pUurE04byV0bK7O9C7pFiLECP8keE7+KodDH8K9qwBCZ0O/DBsbG9cI7EZW6xAd+WPPrcAEi6QC8y3MIn9dv2A==
+"@abp/jquery@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade"
+ integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
jquery "~3.7.1"
-"@abp/jstree@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-9.3.1.tgz#122d2b1855dcd06ac1fa0395f7492409fa4fd0fe"
- integrity sha512-hHzaH9a/z2Hvw+/4qgZ3cl3vKYsfNeqmBKzXnJFy0tOOEIuSaH2p265ltnKczxbwMQUhYX5pb87SEDrW97EwKw==
+"@abp/jstree@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-9.3.2.tgz#2442e3465fe168e90ffe2d672c1dc6f086c81b4f"
+ integrity sha512-B0WeKkAmfcwuI7DmS7/V/4neWIK/2RNXnMWVYSQPOZQm89mmSe/blQra4KRMZzlQLPAV76oncIHju01Cn+MV0w==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jstree "^3.3.17"
-"@abp/lodash@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.1.tgz#6ff141b9cad8454de30c2d0a80035054af9570e5"
- integrity sha512-9FPq/ggTRMpBJk4Qz2HhYbExXUpWoNSsIbxR3xyrxiD3CDwt7AK51X+NbYkqW7EqvccKENfqsQ6hOcwCpyPcdQ==
+"@abp/lodash@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4"
+ integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
lodash "^4.17.21"
-"@abp/luxon@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.1.tgz#ff3ad7fcb9bc56d0286f69eb665ab3137a1142e5"
- integrity sha512-r46jTdWiDp41/UEYc0hqdSHVwIQfqGpPvAysN+8csjLg5EkZhAjrahlsnJbu0BfCC+E+GhjOQ/oad1hz68bDJA==
+"@abp/luxon@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84"
+ integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.1.tgz#1071a8095197af1f98ddc06fdcc71e84ab6fd7f2"
- integrity sha512-eijQKbRJT2cXspXuPCNOtbYCp/PwPlBAQgKr9FHNPT9ujuOEA3spY71VyIOBKh/cTnH0ANaUSZzEE4G/7r9cag==
+"@abp/malihu-custom-scrollbar-plugin@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030"
+ integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/markdown-it@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-9.3.1.tgz#4feb95406e14c8d0131e29cbcf6f86caca60f320"
- integrity sha512-XYQxs9Orj4Du3oNRh5dXdgLEi4S/iPhJDhLMfrKiDcMyiKbi6gec4nXSZMNScH9JOu6ZweveREt/kvIzdU4oJw==
+"@abp/markdown-it@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-9.3.2.tgz#1a673991c986eaec7cac5b035e4cbf2eed7c8d59"
+ integrity sha512-b/yTk312LZOWEF+f13zNHejdBf0dtdrjnd3LGFs9BDPyx2HMDAlDhZ9MiBM160W8ej1h3cIC06sbZBuyxns5Rg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
markdown-it "^14.1.0"
-"@abp/moment@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.1.tgz#ac0ef40a34197efff6539effd865a014e2c10b81"
- integrity sha512-X+VoWNCcC5p0YC9betQmG+tm9C3y50vuShKCKrnOKvoILNSQJ+siVtYjIf0PQa/O8jUefUlehgWTk0yWYgKxjQ==
+"@abp/moment@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406"
+ integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg==
dependencies:
moment "^2.30.1"
-"@abp/prismjs@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.1.tgz#f2f42e962d6d759e8e016e4909a806a672328318"
- integrity sha512-OIC3pKNLv5Cf6VPDOVLwYweQ+ADw0i50fXxb0+oPYN/bkfYdEL+M4q3A0UWKvE67/nJLMUHyPXxMlqAFSbqYrw==
+"@abp/prismjs@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.2.tgz#2ea48bfa5ebcfd98962029eebeab374d63a4e242"
+ integrity sha512-q8bdUjk+IuP+nWzN8phgFjvKtOHR94OT5Sth7Rp64L68pVCJopihyth8f4mLZl7hMtwrro/5GFxjpR+KRNRpbg==
dependencies:
- "@abp/clipboard" "~9.3.1"
- "@abp/core" "~9.3.1"
+ "@abp/clipboard" "~9.3.2"
+ "@abp/core" "~9.3.2"
prismjs "^1.29.0"
-"@abp/select2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.1.tgz#f760050b3b0a51a4c3311600a5c7abc991e560fc"
- integrity sha512-KA1AMToMMfReJek0yWgviYr9vvlH1r43ObaIrfweF3sZsvo86VHtUeBEcYdGr5MtAmtHRukTfu2y0fSaK7GjYQ==
+"@abp/select2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f"
+ integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
select2 "^4.0.13"
-"@abp/slugify@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-9.3.1.tgz#c55fd6e62682004052c9c79e3f0ae1e08bd6cf80"
- integrity sha512-V+G6P6t4fqVVCLZqOMFmvNwQxFCxehW6L0dVrxo/XhCVtx00qcj1Y0B/HukPQog03mVSqoPJexqmHugYo2V2hg==
+"@abp/slugify@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-9.3.2.tgz#dfca463f3750d264fd1ffcc5b14c7e15f3cf12ca"
+ integrity sha512-ux6j9ojt79g7D5AAODoBRwGeLkccynxEtQQQw+hk55YG5PZFImBL/BxRLEhkBBKBL7YrlHvnO58X2YoCUIG6Ug==
dependencies:
slugify "^1.6.6"
-"@abp/star-rating-svg@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-9.3.1.tgz#50299196564831e264cc683728399c260cd051d3"
- integrity sha512-RYRY6qnjE8U90DgRBXvPKZY3/wBSIWZUgOqJ8oKWjsAMNnf1+55yESGxCzWw+/RaLBFSiZQbkUXJGJQveaMRiw==
+"@abp/star-rating-svg@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-9.3.2.tgz#9d60ac8bc953e6dae544c2a9961c6905036253b7"
+ integrity sha512-97n81FqBxnBEQ9jUeXXOtuZ71VHW2mmbaOlroqLl+dE18PR/HIWBNUCEpKK7RCNRBUMMh1saIdv16ApBFVeBFQ==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
star-rating-svg "^3.5.0"
-"@abp/sweetalert2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.1.tgz#279a0b070ea27d1beb9b0b472768694b0d6a7162"
- integrity sha512-bEaoM7wNrF4dkf2IoBmxRhcHWMK9LjG7hUnZWhFi/J1n10wJH+2yz7qsajbdzIF6CVvelAcMRzbxdVg7nxrnvw==
+"@abp/sweetalert2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493"
+ integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.1.tgz#ae0a7ff8867f228b464f0c7bef46466e72aa5d28"
- integrity sha512-FVAzEYl0SV07EM/W5wlE6Z25lnGC5CT4bBVzNFq8b3UjM+m0AhGNBwPrAyianyZyMYUzaF0UtL3PgTJJ+BZ8gA==
+"@abp/timeago@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52"
+ integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
timeago "^1.6.7"
-"@abp/tui-editor@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.1.tgz#3ffbbb87465114d81b890693d37cbd391492d4c0"
- integrity sha512-9aVdg4cyamuutM7A/MlDMEFTvI2TBH30DQWNvAeaabQPlBfja6uE9mReAwHmPm/bHJUAKLJGuWS7+i9kFQaIGA==
+"@abp/tui-editor@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.2.tgz#7d18d8cf1d6dae3c5072c403dcc85af5ab9792ba"
+ integrity sha512-JnYCrr4UIZskB4zwNywdk76cXKUzMCXW5v4ec4ClbHC59FTKv34iIRonl1kYC/NkjDTGO8gvmyYG/3UeXrRWmQ==
dependencies:
- "@abp/jquery" "~9.3.1"
- "@abp/prismjs" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
+ "@abp/prismjs" "~9.3.2"
-"@abp/uppy@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-9.3.1.tgz#0c8549f25de91c735af4b1f1333924ad87c9bb9c"
- integrity sha512-Ys4PWSNyabvz6/z8MA9uBDDvesBjq+mnSXdBwtBqU/TvFzpkseBWM+dn+D7UuRpwznWi98ErzHTYoJtEss3Wpw==
+"@abp/uppy@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-9.3.2.tgz#9e8647bd79c92263f2e8744ec2aa5180db9923b3"
+ integrity sha512-JXK43liPBifJC/Byq4VA+xWRPyd6ScurbK9FJZQMoD7kWLg/iFVSyLn7D7U4khYmCnmz8nc96SfgE8+CEsCaBQ==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
uppy "^4.4.1"
-"@abp/utils@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.1.tgz#1a649f793c0a95a3a02f331bf0467908ba32fe65"
- integrity sha512-4cEl8npNp3R5cnhIjlXq8DjBLnA3U1H50E4xMtSY8Y9/nnvkn7ESqIzMlYlPDw9SUjQ4uhftVJqUyh83yq48jg==
+"@abp/utils@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795"
+ integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs
index f97fc69ee1..82e953132a 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs
@@ -23,4 +23,6 @@ public interface IMenuItemAdminAppService : IApplicationService
Task> GetPageLookupAsync(PageLookupInputDto input);
Task> GetPermissionLookupAsync(PermissionLookupInputDto inputDto);
+
+ Task GetAvailableMenuOrderAsync(Guid? parentId = null);
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json
index fed7298487..e2ddb41de0 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json
@@ -820,6 +820,23 @@
"isOptional": false
}
]
+ },
+ {
+ "returnType": "Int32",
+ "namespace": "Volo.CmsKit.Admin.Menus",
+ "name": "GetAvailableMenuOrderAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Nullable",
+ "name": "parentId",
+ "isOptional": true
+ }
+ ]
}
],
"contentType": "applicationService",
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs
index 13abdf9607..d35579c6cf 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs
@@ -41,7 +41,7 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin
public virtual async Task> GetListAsync()
{
- var menuItems = await MenuItemRepository.GetListAsync();
+ var menuItems = await MenuItemRepository.GetOrderedListAsync();
return new ListResultDto(
ObjectMapper.Map, List>(menuItems)
@@ -162,4 +162,10 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin
permissionLookupDtos
);
}
+
+ public virtual async Task GetAvailableMenuOrderAsync(Guid? parentId = null)
+ {
+ var highestOrder = await MenuItemRepository.GetHighestMenuOrderAsync(parentId);
+ return highestOrder + 1;
+ }
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Admin/Menus/MenuItemAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Admin/Menus/MenuItemAdminClientProxy.Generated.cs
index c707d6ad64..7f530db931 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Admin/Menus/MenuItemAdminClientProxy.Generated.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Admin/Menus/MenuItemAdminClientProxy.Generated.cs
@@ -80,4 +80,12 @@ public partial class MenuItemAdminClientProxy : ClientProxyBase GetAvailableMenuOrderAsync(Guid? parentId)
+ {
+ return await RequestAsync(nameof(GetAvailableMenuOrderAsync), new ClientProxyRequestTypeValue
+ {
+ { typeof(Guid?), parentId }
+ });
+ }
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json
index 9e5f9a843e..0b3a4ffb71 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json
@@ -2184,6 +2184,23 @@
"type": "Volo.Abp.Application.Dtos.ListResultDto",
"typeSimple": "Volo.Abp.Application.Dtos.ListResultDto"
}
+ },
+ {
+ "name": "GetAvailableMenuOrderAsync",
+ "parametersOnMethod": [
+ {
+ "name": "parentId",
+ "typeAsString": "System.Nullable`1[[System.Guid, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib",
+ "type": "System.Guid?",
+ "typeSimple": "string?",
+ "isOptional": true,
+ "defaultValue": null
+ }
+ ],
+ "returnValue": {
+ "type": "System.Int32",
+ "typeSimple": "number"
+ }
}
]
}
@@ -2538,6 +2555,43 @@
},
"allowAnonymous": false,
"implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService"
+ },
+ "GetAvailableMenuOrderAsyncByParentId": {
+ "uniqueName": "GetAvailableMenuOrderAsyncByParentId",
+ "name": "GetAvailableMenuOrderAsync",
+ "httpMethod": "GET",
+ "url": "api/cms-kit-admin/menu-items/available-order",
+ "supportedVersions": [],
+ "parametersOnMethod": [
+ {
+ "name": "parentId",
+ "typeAsString": "System.Nullable`1[[System.Guid, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib",
+ "type": "System.Guid?",
+ "typeSimple": "string?",
+ "isOptional": true,
+ "defaultValue": null
+ }
+ ],
+ "parameters": [
+ {
+ "nameOnMethod": "parentId",
+ "name": "parentId",
+ "jsonName": null,
+ "type": "System.Guid?",
+ "typeSimple": "string?",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": ""
+ }
+ ],
+ "returnValue": {
+ "type": "System.Int32",
+ "typeSimple": "number"
+ },
+ "allowAnonymous": false,
+ "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService"
}
}
},
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs
index e3cac24f54..08aacac405 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs
@@ -81,8 +81,15 @@ public class MenuItemAdminController : CmsKitAdminController, IMenuItemAdminAppS
[HttpGet]
[Route("lookup/permissions")]
- public Task> GetPermissionLookupAsync(PermissionLookupInputDto inputDto)
+ public virtual Task> GetPermissionLookupAsync(PermissionLookupInputDto inputDto)
{
return MenuItemAdminAppService.GetPermissionLookupAsync(inputDto);
}
+
+ [HttpGet]
+ [Route("available-order")]
+ public virtual Task GetAvailableMenuOrderAsync(Guid? parentId = null)
+ {
+ return MenuItemAdminAppService.GetAvailableMenuOrderAsync(parentId);
+ }
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js
index c58447b22d..0d00b7aaca 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js
@@ -25,7 +25,7 @@ $(function (){
script: scriptEditor.getValue()
}
).then(function () {
- abp.message.success(l("SavedSuccessfully"));
+ abp.notify.success(l("SavedSuccessfully"));
});
});
});
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs
index 49a1354b43..f0730d08a7 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs
@@ -39,6 +39,8 @@ public class CreateModalModel : CmsKitAdminPageModel
public virtual async Task OnPostAsync()
{
+ ViewModel.Order = await MenuAdminAppService.GetAvailableMenuOrderAsync(ViewModel.ParentId);
+
var input = ObjectMapper.Map(ViewModel);
var dto = await MenuAdminAppService.CreateAsync(input);
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js
index 42932c5973..6133788cfe 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js
@@ -263,11 +263,21 @@ $(function () {
},
sort: function (node1, node2) {
- if (this.get_node(node2).original.order < this.get_node(node1).original.order) {
- return 1;
- }
-
- return -1;
+ const node1Data = this.get_node(node1).original;
+ const node2Data = this.get_node(node2).original;
+ if (node1Data.parentId === null && node2Data.parentId !== null) {
+ return -1;
+ }
+ if (node1Data.parentId !== null && node2Data.parentId === null) {
+ return 1;
+ }
+ if (node1Data.order < node2Data.order) {
+ return -1;
+ }
+ if (node1Data.order > node2Data.order) {
+ return 1;
+ }
+ return 0;
},
plugins: [
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js
index 08dc7bf2c0..928d7c11b9 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js
@@ -49,6 +49,21 @@
}, ajaxParams));
};
+ volo.cmsKit.admin.blogs.blogAdmin.getAllList = function(ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/cms-kit-admin/blogs/all',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ volo.cmsKit.admin.blogs.blogAdmin.moveAllBlogPosts = function(blogId, assignToBlogId, id, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/cms-kit-admin/blogs/' + id + '/move-all-blog-posts' + abp.utils.buildQueryString([{ name: 'blogId', value: blogId }, { name: 'assignToBlogId', value: assignToBlogId }]) + '',
+ type: 'PUT',
+ dataType: null
+ }, ajaxParams));
+ };
+
})();
// controller volo.cmsKit.admin.blogs.blogFeatureAdmin
@@ -330,6 +345,20 @@
}, ajaxParams));
};
+ volo.cmsKit.admin.menus.menuItemAdmin.getPermissionLookup = function(inputDto, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/cms-kit-admin/menu-items/lookup/permissions' + abp.utils.buildQueryString([{ name: 'filter', value: inputDto.filter }]) + '',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
+ volo.cmsKit.admin.menus.menuItemAdmin.getAvailableMenuOrder = function(parentId, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/cms-kit-admin/menu-items/available-order' + abp.utils.buildQueryString([{ name: 'parentId', value: parentId }]) + '',
+ type: 'GET'
+ }, ajaxParams));
+ };
+
})();
// controller volo.cmsKit.admin.pages.pageAdmin
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json
index dc08dab7db..6850b5203c 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json
@@ -4577,7 +4577,52 @@
"fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository"
}
],
- "methods": [],
+ "methods": [
+ {
+ "returnType": "List",
+ "namespace": "Volo.CmsKit.Menus",
+ "name": "GetOrderedListAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Boolean",
+ "name": "includeDetails",
+ "isOptional": true
+ },
+ {
+ "type": "CancellationToken",
+ "name": "cancellationToken",
+ "isOptional": true
+ }
+ ]
+ },
+ {
+ "returnType": "Int32",
+ "namespace": "Volo.CmsKit.Menus",
+ "name": "GetHighestMenuOrderAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Nullable",
+ "name": "parentId",
+ "isOptional": true
+ },
+ {
+ "type": "CancellationToken",
+ "name": "cancellationToken",
+ "isOptional": true
+ }
+ ]
+ }
+ ],
"contentType": "repositoryInterface",
"name": "IMenuItemRepository",
"summary": null
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuItemRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuItemRepository.cs
index afee164e06..8fb0e486f6 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuItemRepository.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuItemRepository.cs
@@ -1,8 +1,14 @@
using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.CmsKit.Menus;
public interface IMenuItemRepository : IBasicRepository
{
+ Task> GetOrderedListAsync(bool includeDetails = false, CancellationToken cancellationToken = default);
+
+ Task GetHighestMenuOrderAsync(Guid? parentId = null, CancellationToken cancellationToken = default);
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuItemRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuItemRepository.cs
index 81595c9267..03deb7dfc1 100644
--- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuItemRepository.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuItemRepository.cs
@@ -1,4 +1,9 @@
using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.EntityFrameworkCore;
@@ -10,4 +15,21 @@ public class EfCoreMenuItemRepository : EfCoreRepository dbContextProvider) : base(dbContextProvider)
{
}
+
+ public virtual async Task GetHighestMenuOrderAsync(Guid? parentId = null, CancellationToken cancellationToken = default)
+ {
+ return await (await GetDbSetAsync())
+ .WhereIf(parentId.HasValue, x => x.ParentId == parentId)
+ .OrderByDescending(x => x.Order)
+ .Select(x => x.Order)
+ .FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
+ }
+
+ public virtual async Task> GetOrderedListAsync(bool includeDetails = false, CancellationToken cancellationToken = default)
+ {
+ return await (await GetDbSetAsync())
+ .OrderBy(x => x.Order)
+ .ThenBy(x => x.CreationTime)
+ .ToListAsync(GetCancellationToken(cancellationToken));
+ }
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuItemRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuItemRepository.cs
index 259ac9c92a..6525747ea9 100644
--- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuItemRepository.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuItemRepository.cs
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Driver;
@@ -17,4 +16,25 @@ public class MongoMenuItemRepository : MongoDbRepository dbContextProvider) : base(dbContextProvider)
{
}
+
+ public virtual async Task GetHighestMenuOrderAsync(Guid? parentId = null, CancellationToken cancellationToken = default)
+ {
+ cancellationToken = GetCancellationToken(cancellationToken);
+
+ return await (await GetQueryableAsync(cancellationToken))
+ .WhereIf(parentId.HasValue, x => x.ParentId == parentId)
+ .OrderByDescending(x => x.Order)
+ .Select(x => x.Order)
+ .FirstOrDefaultAsync(cancellationToken);
+ }
+
+ public virtual async Task> GetOrderedListAsync(bool includeDetails = false, CancellationToken cancellationToken = default)
+ {
+ cancellationToken = GetCancellationToken(cancellationToken);
+
+ return await (await GetQueryableAsync(cancellationToken))
+ .OrderBy(x => x.Order)
+ .ThenBy(x => x.CreationTime)
+ .ToListAsync(cancellationToken);
+ }
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs
index 571ed7749d..81a88ee955 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs
@@ -30,7 +30,7 @@ public class MenuItemPublicAppService : CmsKitPublicAppServiceBase, IMenuItemPub
MenuApplicationConsts.MainMenuCacheKey,
async () =>
{
- var menuItems = await MenuItemRepository.GetListAsync();
+ var menuItems = await MenuItemRepository.GetOrderedListAsync();
if (menuItems == null)
{
diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs
index 28e2c8b087..d029b1a6df 100644
--- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs
+++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs
@@ -48,7 +48,7 @@ public class MenuItemAdminAppService_Tests : CmsKitApplicationTestBase
result.ShouldNotBeNull();
result.Items.ShouldNotBeEmpty();
- result.Items.Count.ShouldBe(4);
+ result.Items.Count.ShouldBe(6);
}
[Fact]
@@ -118,4 +118,20 @@ public class MenuItemAdminAppService_Tests : CmsKitApplicationTestBase
menu.ShouldBeNull();
}
+
+ [Fact]
+ public async Task GetAvailableMenuOrderAsync_ShouldWorkProperly_WithParentId()
+ {
+ var order = await MenuAdminAppService.GetAvailableMenuOrderAsync(TestData.MenuItem_1_Id);
+
+ order.ShouldBe(2); //has two items with order 0 and 1, so the next available order is 2
+ }
+
+ [Fact]
+ public async Task GetAvailableMenuOrderAsync_ShouldWorkProperly_WithoutParentId()
+ {
+ var order = await MenuAdminAppService.GetAvailableMenuOrderAsync();
+
+ order.ShouldBe(TestData.HighestMenuItemOrder + 1);
+ }
}
diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs
index b516c680a1..452c221311 100644
--- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs
+++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs
@@ -442,7 +442,8 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende
new MenuItem(
_cmsKitTestData.MenuItem_1_Id,
_cmsKitTestData.MenuItem_1_Name,
- _cmsKitTestData.MenuItem_1_Url),
+ _cmsKitTestData.MenuItem_1_Url,
+ order: _cmsKitTestData.HighestMenuItemOrder),
new MenuItem(
_cmsKitTestData.MenuItem_2_Id,
_cmsKitTestData.MenuItem_2_Name,
@@ -451,7 +452,19 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende
_cmsKitTestData.MenuItem_3_Id,
_cmsKitTestData.MenuItem_3_Name,
_cmsKitTestData.MenuItem_3_Url),
- menuItem4
+ menuItem4,
+ new MenuItem(
+ _cmsKitTestData.MenuItem_5_Id,
+ _cmsKitTestData.MenuItem_5_Name,
+ _cmsKitTestData.MenuItem_5_Url,
+ order: 0,
+ parentId: _cmsKitTestData.MenuItem_1_Id),
+ new MenuItem(
+ _cmsKitTestData.MenuItem_6_Id,
+ _cmsKitTestData.MenuItem_6_Name,
+ _cmsKitTestData.MenuItem_6_Url,
+ order: 1,
+ parentId: _cmsKitTestData.MenuItem_1_Id)
});
}
diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs
index b21e7aab08..c9837f0af9 100644
--- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs
+++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs
@@ -132,6 +132,18 @@ public class CmsKitTestData : ISingletonDependency
public string MenuItem_4_With_Page_1_Name { get; } = "Products";
+ public Guid MenuItem_5_Id { get; } = Guid.NewGuid();
+
+ public string MenuItem_5_Name { get; } = "FAQ";
+ public string MenuItem_5_Url { get; } = "/faq";
+
+ public Guid MenuItem_6_Id { get; } = Guid.NewGuid();
+
+ public string MenuItem_6_Name { get; } = "Contact Us";
+ public string MenuItem_6_Url { get; } = "/contact-us";
+
+ public int HighestMenuItemOrder { get; } = 2;
+
public string PollName { get; } = "Poll";
public string WidgetName { get; } = "CmsPollByCode";
diff --git a/modules/docs/app/VoloDocs.Web/package.json b/modules/docs/app/VoloDocs.Web/package.json
index 3408d899dd..11a654b87b 100644
--- a/modules/docs/app/VoloDocs.Web/package.json
+++ b/modules/docs/app/VoloDocs.Web/package.json
@@ -3,7 +3,7 @@
"name": "volo.docstestapp",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.1",
- "@abp/docs": "~9.3.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2",
+ "@abp/docs": "~9.3.2"
}
}
diff --git a/modules/docs/app/VoloDocs.Web/yarn.lock b/modules/docs/app/VoloDocs.Web/yarn.lock
index 6e771f4b1a..8b283f6c5f 100644
--- a/modules/docs/app/VoloDocs.Web/yarn.lock
+++ b/modules/docs/app/VoloDocs.Web/yarn.lock
@@ -2,229 +2,229 @@
# yarn lockfile v1
-"@abp/anchor-js@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-9.3.1.tgz#5d8f360f76001321c092b6b6335da084e093cc4c"
- integrity sha512-dPeHKsjQe+m8U/DNZg4tOyNCUBaMBCToeJzuYL944/eV5dglvhK8uIvouOG+YDvA9MvH2un8RJw5OX3wUKNfzA==
+"@abp/anchor-js@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-9.3.2.tgz#46a7cc1482e4064a15dedc2000f3c22accc57551"
+ integrity sha512-1cEpNPnKcpRoApYyo7fDNVQLLdjpZLIAt5VU5yHdssJgdeK99ebPkWFNQNl3T72XSzBvvnGmplz63p6loe1H4A==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
anchor-js "^5.0.0"
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.1.tgz#a35e984e38773f53e0b2b25761bcf503ba613aaf"
- integrity sha512-kTN8pqfpTxOMD3nOVmwGHqtVwN4qlUjyQm7c+on98cmnXFllGXJ1QQLgnLRYT68lHJzW4nUNNN1VfET4tlMdDg==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.1.tgz#7b8b297c9fac61970b3f0d7e4a6d11fa89b892ea"
- integrity sha512-cc2BacHCyaDHP0xeSMyIR7asiVmTkfYtMhh+kLp8XBQ6JeqDLi5YW4TdgwJv+t8s8U0j+DwKtgUOtwHBhlOtvg==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.3.1"
- "@abp/bootstrap" "~9.3.1"
- "@abp/bootstrap-datepicker" "~9.3.1"
- "@abp/bootstrap-daterangepicker" "~9.3.1"
- "@abp/datatables.net-bs5" "~9.3.1"
- "@abp/font-awesome" "~9.3.1"
- "@abp/jquery-form" "~9.3.1"
- "@abp/jquery-validation-unobtrusive" "~9.3.1"
- "@abp/lodash" "~9.3.1"
- "@abp/luxon" "~9.3.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.3.1"
- "@abp/moment" "~9.3.1"
- "@abp/select2" "~9.3.1"
- "@abp/sweetalert2" "~9.3.1"
- "@abp/timeago" "~9.3.1"
-
-"@abp/aspnetcore.mvc.ui@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.1.tgz#17b9e49e4a3588cb0d383f9da700c99d5974b562"
- integrity sha512-bxpsiwfDSfDHYyHc8jVBrnbIrJ7hbHGO86wWmYxd6iM/qMpgjzi1eFadt5oPVrFw99FnfNqREtMpdVbNJZ7n/Q==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7"
+ integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966"
+ integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~9.3.2"
+ "@abp/bootstrap" "~9.3.2"
+ "@abp/bootstrap-datepicker" "~9.3.2"
+ "@abp/bootstrap-daterangepicker" "~9.3.2"
+ "@abp/datatables.net-bs5" "~9.3.2"
+ "@abp/font-awesome" "~9.3.2"
+ "@abp/jquery-form" "~9.3.2"
+ "@abp/jquery-validation-unobtrusive" "~9.3.2"
+ "@abp/lodash" "~9.3.2"
+ "@abp/luxon" "~9.3.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.3.2"
+ "@abp/moment" "~9.3.2"
+ "@abp/select2" "~9.3.2"
+ "@abp/sweetalert2" "~9.3.2"
+ "@abp/timeago" "~9.3.2"
+
+"@abp/aspnetcore.mvc.ui@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91"
+ integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.1.tgz#b3c6d0843d17bc22d15658d0b284f2c23811bef1"
- integrity sha512-oGwqGf2Qkq0EXzOn9r3TsNccAklwabHu3J00VyLgAAkn3vGlou1r7xG8n0H0zC3V7/EirDKoyFr9s106g7kxJA==
+"@abp/bootstrap-datepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987"
+ integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.1.tgz#3be4165954e0aa5bfec782df677ae687cc94b651"
- integrity sha512-1wdVw/JOfxwND3TQD8kOPJU3UwECi4rsrzPSQtPCAt/YGWtF5MIl9nhZ9WqSwukNie0dYmECAw5FNaoC79LOAw==
+"@abp/bootstrap-daterangepicker@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18"
+ integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.1.tgz#917d013d257bbd035f264a324e77c6aecd4170c5"
- integrity sha512-t34nqLrMn0Wvw+3KNmVTMsdjHhMMppNITskuUdFwCCD14UIWcbQYLr9sSuYtS76nna6RUaL0MuYL4uRcqA7hiw==
+"@abp/bootstrap@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b"
+ integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
bootstrap "^5.3.3"
-"@abp/clipboard@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.1.tgz#7ec773243463fe09c1bf7cda474fde1d100bddbb"
- integrity sha512-mD/jUCo2ggMp0mBKXtdz2gtKfO0ukd4kqY141TzYq8VIjNkNUbODkXdLkNfxVPyAeYY4lzE5oGDxJHwkteTvjQ==
+"@abp/clipboard@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.2.tgz#4e0d6456e142e552ca3b4ec10159276e096c56bf"
+ integrity sha512-jorX68Yw/9pWAmt8cOuVx3Cnp7VF9xuvCD/ecvL5eZyHhXt4tDcYIFO5LkF+CaIky79gdzdF3tmYeFSPUE/HzA==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
clipboard "^2.0.11"
-"@abp/core@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.1.tgz#db01b8d8917283226e5552b1961e63c075ecae4f"
- integrity sha512-y/cvEvbxahaLygeJ6D7LSuNOWAwWRMf/ceLQLZ+J97trKKzQ58q3sth8E8FqhSAGJRYnGwGNqKLsBmFPjlKtMA==
+"@abp/core@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778"
+ integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ==
dependencies:
- "@abp/utils" "~9.3.1"
+ "@abp/utils" "~9.3.2"
-"@abp/datatables.net-bs5@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.1.tgz#488c5bdf548f637b8ef2f8109b2416f9af201f8d"
- integrity sha512-8j+fsDjYf9PgWxioZMQb/WjmW/8LHpR+E5v5m+Oxd9epDR+ugsvT7IhuMvBJ+yv96FZA19ULTgj3dhNa6ff7Og==
+"@abp/datatables.net-bs5@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780"
+ integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q==
dependencies:
- "@abp/datatables.net" "~9.3.1"
+ "@abp/datatables.net" "~9.3.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.1.tgz#41e2daca48ac0517cc53afe26e98cea9d347e03f"
- integrity sha512-oD6s0luu2wuLODCaTqujAczTVySDr+d988AMHpiNlHLTcdXGapF9q3oWrK9bvSrNdJpCtAMhAUKyZ9b28aoBWg==
+"@abp/datatables.net@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1"
+ integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
datatables.net "^2.1.8"
-"@abp/docs@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-9.3.1.tgz#efeee43a4259af10606de5eefdfe5187cd941f9a"
- integrity sha512-+JwkuPcst70NiPkctCBBY344CWGqYs3nHQN1x9OMOB60ukOdDw/DMDMc3KW6crQrNOYrCxBAfnPYzlro/RHkzA==
+"@abp/docs@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-9.3.2.tgz#f786e589af447d9b55c1192c6f07ed494e1465ba"
+ integrity sha512-Aa8xtZMj18m23XMGWbcddzeT2R6lkp66BAlF5pshj8yKi/5SFlh+5YtIigy0UItqw6tQD2oQJAUWpuTd7jgNng==
dependencies:
- "@abp/anchor-js" "~9.3.1"
- "@abp/clipboard" "~9.3.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.3.1"
- "@abp/popper.js" "~9.3.1"
- "@abp/prismjs" "~9.3.1"
+ "@abp/anchor-js" "~9.3.2"
+ "@abp/clipboard" "~9.3.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.3.2"
+ "@abp/popper.js" "~9.3.2"
+ "@abp/prismjs" "~9.3.2"
-"@abp/font-awesome@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.1.tgz#ec988894248ea187bb5aec72dc79b4be27034acc"
- integrity sha512-z1zwl0SZYrBVX+J961vbF0AMnyjhn00E9GfqGR6hH/mvyrN8T95xyDN+vDRwl907pTItNKBdWH78eXkv58WMdQ==
+"@abp/font-awesome@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1"
+ integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/jquery-form@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.1.tgz#8ec1724231d4415bab47047938a6fa0c9ca1c79c"
- integrity sha512-8mN3JfZWdXAZ3y9jQpGkge4JctAt5DCZHu3lV4kafZtmhz1xdaj6vaaIpxo2TpTjx7/79XY8mymnxXefiO0U3Q==
+"@abp/jquery-form@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b"
+ integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.1.tgz#31ab753a296fa9d6838f2d97ff256a40df633bdc"
- integrity sha512-YBQu/sKItnbjXoOYqUIm8wyJnXfRTaHy4/TSVEB3JYBcpHjjXMd9KX3FwK4AzCsSgaIGJK/WkdkiO5bvPqApCg==
+"@abp/jquery-validation-unobtrusive@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce"
+ integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg==
dependencies:
- "@abp/jquery-validation" "~9.3.1"
+ "@abp/jquery-validation" "~9.3.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.1.tgz#b96a430cffdb8cce298463b975786b25dc6d655b"
- integrity sha512-041+nqCqp6ySlzocQnKJ6/FMumMcyHmkVjlguEShbttJJL27JVq3V8qmh9t/flQSa9Vv7q1qHyYBQBLZ0ISIBA==
+"@abp/jquery-validation@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76"
+ integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.1.tgz#697c59500eeb76e047a26c9176e7cd2d55e40965"
- integrity sha512-pUurE04byV0bK7O9C7pFiLECP8keE7+KodDH8K9qwBCZ0O/DBsbG9cI7EZW6xAd+WPPrcAEi6QC8y3MIn9dv2A==
+"@abp/jquery@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade"
+ integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
jquery "~3.7.1"
-"@abp/lodash@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.1.tgz#6ff141b9cad8454de30c2d0a80035054af9570e5"
- integrity sha512-9FPq/ggTRMpBJk4Qz2HhYbExXUpWoNSsIbxR3xyrxiD3CDwt7AK51X+NbYkqW7EqvccKENfqsQ6hOcwCpyPcdQ==
+"@abp/lodash@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4"
+ integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
lodash "^4.17.21"
-"@abp/luxon@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.1.tgz#ff3ad7fcb9bc56d0286f69eb665ab3137a1142e5"
- integrity sha512-r46jTdWiDp41/UEYc0hqdSHVwIQfqGpPvAysN+8csjLg5EkZhAjrahlsnJbu0BfCC+E+GhjOQ/oad1hz68bDJA==
+"@abp/luxon@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84"
+ integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.1.tgz#1071a8095197af1f98ddc06fdcc71e84ab6fd7f2"
- integrity sha512-eijQKbRJT2cXspXuPCNOtbYCp/PwPlBAQgKr9FHNPT9ujuOEA3spY71VyIOBKh/cTnH0ANaUSZzEE4G/7r9cag==
+"@abp/malihu-custom-scrollbar-plugin@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030"
+ integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.1.tgz#ac0ef40a34197efff6539effd865a014e2c10b81"
- integrity sha512-X+VoWNCcC5p0YC9betQmG+tm9C3y50vuShKCKrnOKvoILNSQJ+siVtYjIf0PQa/O8jUefUlehgWTk0yWYgKxjQ==
+"@abp/moment@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406"
+ integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg==
dependencies:
moment "^2.30.1"
-"@abp/popper.js@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-9.3.1.tgz#66a5455db7f90eb804b193683ecd50112b0ba8dc"
- integrity sha512-5L+109nQTYOgMxA05S2PDz2dPGDUzmjcZOTX1y52niTAdqVet3gSR+V5cJ1XihiJkyJhwkwpTdg1c7WhdTFvrw==
+"@abp/popper.js@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-9.3.2.tgz#9abfa7f635fca499836a757dca5918a85322069e"
+ integrity sha512-VkePozQx871bMpyYP3qJAXbTc5iA5feLU66zH+WBo2doqes+gq3RvQCrkJzNKT8uvb5vgHXSYMMpL5HwTxvtOQ==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
"@popperjs/core" "^2.11.8"
-"@abp/prismjs@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.1.tgz#f2f42e962d6d759e8e016e4909a806a672328318"
- integrity sha512-OIC3pKNLv5Cf6VPDOVLwYweQ+ADw0i50fXxb0+oPYN/bkfYdEL+M4q3A0UWKvE67/nJLMUHyPXxMlqAFSbqYrw==
+"@abp/prismjs@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.2.tgz#2ea48bfa5ebcfd98962029eebeab374d63a4e242"
+ integrity sha512-q8bdUjk+IuP+nWzN8phgFjvKtOHR94OT5Sth7Rp64L68pVCJopihyth8f4mLZl7hMtwrro/5GFxjpR+KRNRpbg==
dependencies:
- "@abp/clipboard" "~9.3.1"
- "@abp/core" "~9.3.1"
+ "@abp/clipboard" "~9.3.2"
+ "@abp/core" "~9.3.2"
prismjs "^1.29.0"
-"@abp/select2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.1.tgz#f760050b3b0a51a4c3311600a5c7abc991e560fc"
- integrity sha512-KA1AMToMMfReJek0yWgviYr9vvlH1r43ObaIrfweF3sZsvo86VHtUeBEcYdGr5MtAmtHRukTfu2y0fSaK7GjYQ==
+"@abp/select2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f"
+ integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.1.tgz#279a0b070ea27d1beb9b0b472768694b0d6a7162"
- integrity sha512-bEaoM7wNrF4dkf2IoBmxRhcHWMK9LjG7hUnZWhFi/J1n10wJH+2yz7qsajbdzIF6CVvelAcMRzbxdVg7nxrnvw==
+"@abp/sweetalert2@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493"
+ integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw==
dependencies:
- "@abp/core" "~9.3.1"
+ "@abp/core" "~9.3.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.1.tgz#ae0a7ff8867f228b464f0c7bef46466e72aa5d28"
- integrity sha512-FVAzEYl0SV07EM/W5wlE6Z25lnGC5CT4bBVzNFq8b3UjM+m0AhGNBwPrAyianyZyMYUzaF0UtL3PgTJJ+BZ8gA==
+"@abp/timeago@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52"
+ integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA==
dependencies:
- "@abp/jquery" "~9.3.1"
+ "@abp/jquery" "~9.3.2"
timeago "^1.6.7"
-"@abp/utils@~9.3.1":
- version "9.3.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.1.tgz#1a649f793c0a95a3a02f331bf0467908ba32fe65"
- integrity sha512-4cEl8npNp3R5cnhIjlXq8DjBLnA3U1H50E4xMtSY8Y9/nnvkn7ESqIzMlYlPDw9SUjQ4uhftVJqUyh83yq48jg==
+"@abp/utils@~9.3.2":
+ version "9.3.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795"
+ integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.abppkg.analyze.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.abppkg.analyze.json
index 096202cd42..c1f39e1aee 100644
--- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.abppkg.analyze.json
+++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.abppkg.analyze.json
@@ -11,9 +11,9 @@
"name": "AbpIdentityServerDomainSharedModule"
},
{
- "declaringAssemblyName": "Volo.Abp.AutoMapper",
- "namespace": "Volo.Abp.AutoMapper",
- "name": "AbpAutoMapperModule"
+ "declaringAssemblyName": "Volo.Abp.Mapperly",
+ "namespace": "Volo.Abp.Mapperly",
+ "name": "AbpMapperlyModule"
},
{
"declaringAssemblyName": "Volo.Abp.Identity.Domain",
diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.csproj b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.csproj
index fd856b4ca3..fb9248b9cb 100644
--- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.csproj
+++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs
index 9b9dde5c96..1fedb1cc74 100644
--- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs
+++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs
@@ -5,7 +5,7 @@ using IdentityServer4.Stores;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
-using Volo.Abp.AutoMapper;
+using Volo.Abp.Mapperly;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Entities.Events.Distributed;
@@ -28,7 +28,7 @@ namespace Volo.Abp.IdentityServer;
[DependsOn(
typeof(AbpIdentityServerDomainSharedModule),
- typeof(AbpAutoMapperModule),
+ typeof(AbpMapperlyModule),
typeof(AbpIdentityDomainModule),
typeof(AbpSecurityModule),
typeof(AbpCachingModule),
@@ -41,12 +41,7 @@ public class AbpIdentityServerDomainModule : AbpModule
public override void ConfigureServices(ServiceConfigurationContext context)
{
- context.Services.AddAutoMapperObjectMapper();
-
- Configure(options =>
- {
- options.AddProfile(validate: true);
- });
+ context.Services.AddMapperlyObjectMapper();
Configure(options =>
{
diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AllowedSigningAlgorithmsConverter.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AllowedSigningAlgorithmsConverter.cs
index 25bd38ad10..49297a3d21 100644
--- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AllowedSigningAlgorithmsConverter.cs
+++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AllowedSigningAlgorithmsConverter.cs
@@ -1,36 +1,24 @@
using System;
-using System.Collections.Generic;
using System.Linq;
-using AutoMapper;
namespace Volo.Abp.IdentityServer;
-public class AllowedSigningAlgorithmsConverter :
- IValueConverter, string>,
- IValueConverter>
+public static class AllowedSigningAlgorithmsConverter
{
- public static AllowedSigningAlgorithmsConverter Converter = new AllowedSigningAlgorithmsConverter();
-
- public string Convert(ICollection sourceMember, ResolutionContext context)
- {
- if (sourceMember == null || !sourceMember.Any())
- {
- return null;
- }
- return sourceMember.Aggregate((x, y) => $"{x},{y}");
- }
-
- public ICollection Convert(string sourceMember, ResolutionContext context)
+ private const char Separator = ',';
+
+ public static string[] SplitToArray(string algorithms)
{
- var list = new HashSet();
- if (!String.IsNullOrWhiteSpace(sourceMember))
+ if (string.IsNullOrWhiteSpace(algorithms))
{
- sourceMember = sourceMember.Trim();
- foreach (var item in sourceMember.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Distinct())
- {
- list.Add(item);
- }
+ return [];
}
- return list;
+
+ return algorithms
+ .Split([Separator], StringSplitOptions.RemoveEmptyEntries)
+ .Select(x => x.Trim())
+ .Where(x => !string.IsNullOrEmpty(x))
+ .Distinct(StringComparer.OrdinalIgnoreCase)
+ .ToArray();
}
-}
+}
\ No newline at end of file
diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs
deleted file mode 100644
index 53a7de989c..0000000000
--- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs
+++ /dev/null
@@ -1,155 +0,0 @@
-using System.Collections.Generic;
-using System.Security.Claims;
-using AutoMapper;
-using Volo.Abp.IdentityServer.ApiResources;
-using Volo.Abp.IdentityServer.ApiScopes;
-using Volo.Abp.IdentityServer.Clients;
-using Volo.Abp.IdentityServer.Devices;
-using Volo.Abp.IdentityServer.Grants;
-using Volo.Abp.IdentityServer.IdentityResources;
-
-namespace Volo.Abp.IdentityServer;
-
-public class IdentityServerAutoMapperProfile : Profile
-{
- ///
- /// TODO: Reverse maps will not used probably. Remove those will not used
- ///
- public IdentityServerAutoMapperProfile()
- {
- CreateMap()
- .ConstructUsing(src => src.Type)
- .ReverseMap()
- .ForMember(dest => dest.Type, opt => opt.MapFrom(src => src));
-
- CreateClientMap();
- CreateApiResourceMap();
- CreateApiScopeMap();
- CreateIdentityResourceMap();
- CreatePersistedGrantMap();
- CreateDeviceFlowCodesMap();
- }
-
- private void CreateClientMap()
- {
- CreateMap()
- .ConstructUsing(src => src.Origin)
- .ReverseMap()
- .ForMember(dest => dest.Origin, opt => opt.MapFrom(src => src));
-
- CreateMap>()
- .ReverseMap();
-
- CreateMap()
- .ForMember(dest => dest.ProtocolType, opt => opt.Condition(srs => srs != null))
- .ForMember(x => x.AllowedIdentityTokenSigningAlgorithms, opts => opts.ConvertUsing(AllowedSigningAlgorithmsConverter.Converter, x => x.AllowedIdentityTokenSigningAlgorithms))
- .ReverseMap()
- .ForMember(x => x.AllowedIdentityTokenSigningAlgorithms, opts => opts.ConvertUsing(AllowedSigningAlgorithmsConverter.Converter, x => x.AllowedIdentityTokenSigningAlgorithms));
-
- CreateMap()
- .ConstructUsing(src => src.Origin)
- .ReverseMap()
- .ForMember(dest => dest.Origin, opt => opt.MapFrom(src => src));
-
- CreateMap()
- .ConstructUsing(src => src.Provider)
- .ReverseMap()
- .ForMember(dest => dest.Provider, opt => opt.MapFrom(src => src));
-
- CreateMap(MemberList.None)
- .ConstructUsing(src => new Claim(src.Type, src.Value))
- .ReverseMap();
-
- CreateMap(MemberList.None)
- .ConstructUsing(src => new IdentityServer4.Models.ClientClaim(src.Type, src.Value, ClaimValueTypes.String))
- .ReverseMap();
-
- CreateMap()
- .ConstructUsing(src => src.Scope)
- .ReverseMap()
- .ForMember(dest => dest.Scope, opt => opt.MapFrom(src => src));
-
- CreateMap()
- .ConstructUsing(src => src.PostLogoutRedirectUri)
- .ReverseMap()
- .ForMember(dest => dest.PostLogoutRedirectUri, opt => opt.MapFrom(src => src));
-
- CreateMap()
- .ConstructUsing(src => src.RedirectUri)
- .ReverseMap()
- .ForMember(dest => dest.RedirectUri, opt => opt.MapFrom(src => src));
-
- CreateMap