diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
index a351589881..b5976b403f 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
@@ -103,6 +103,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
if (context.BuildArgs.ExtraProperties.ContainsKey("separate-identity-server"))
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds"));
+ steps.Add(new AppTemplateChangeDbMigratorPortSettingsStep("44300"));
}
else
{
@@ -123,6 +124,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds"));
steps.Add(new BlazorAppsettingsFilePortChangeForSeparatedIdentityServersStep());
+ steps.Add(new AppTemplateChangeDbMigratorPortSettingsStep("44300"));
}
else
{
@@ -140,6 +142,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests"));
steps.Add(new AppTemplateProjectRenameStep("MyCompanyName.MyProjectName.Web.Host", "MyCompanyName.MyProjectName.Web"));
+ steps.Add(new AppTemplateChangeDbMigratorPortSettingsStep("44300"));
}
else
{
@@ -162,6 +165,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds"));
steps.Add(new AngularEnvironmentFilePortChangeForSeparatedIdentityServersStep());
+ steps.Add(new AppTemplateChangeDbMigratorPortSettingsStep("44300"));
if (context.BuildArgs.MobileApp == MobileApp.ReactNative)
{
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateChangeDbMigratorPortSettingsStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateChangeDbMigratorPortSettingsStep.cs
new file mode 100644
index 0000000000..2d192f1478
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateChangeDbMigratorPortSettingsStep.cs
@@ -0,0 +1,24 @@
+using Volo.Abp.Cli.ProjectBuilding.Building;
+using Volo.Abp.Cli.ProjectBuilding.Files;
+
+namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
+{
+ public class AppTemplateChangeDbMigratorPortSettingsStep : ProjectBuildPipelineStep
+ {
+ public string IdentityServerPort { get; }
+
+ ///
+ public AppTemplateChangeDbMigratorPortSettingsStep(
+ string identityServerPort)
+ {
+ IdentityServerPort = identityServerPort;
+ }
+
+ public override void Execute(ProjectBuildContext context)
+ {
+ context
+ .GetFile("/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json")
+ .ReplaceText("44305", IdentityServerPort);
+ }
+ }
+}
diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/AbpVirtualFileExplorerWebModule.cs b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/AbpVirtualFileExplorerWebModule.cs
index f49628aa45..41c007e06d 100644
--- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/AbpVirtualFileExplorerWebModule.cs
+++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/AbpVirtualFileExplorerWebModule.cs
@@ -1,4 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.FileProviders.Physical;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages.Prismjs;
diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/Index.cshtml.cs b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/Index.cshtml.cs
index b450531cc8..14f9fc581f 100644
--- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/Index.cshtml.cs
+++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/Index.cshtml.cs
@@ -1,10 +1,9 @@
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
-using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.FileProviders;
-using NUglify.Helpers;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination;
using Volo.Abp.VirtualFileExplorer.Web.Models;
using Volo.Abp.VirtualFileSystem;
@@ -31,7 +30,6 @@ namespace Volo.Abp.VirtualFileExplorer.Web.Pages.VirtualFileExplorer
protected IVirtualFileProvider VirtualFileProvider { get; }
-
public IndexModel(IVirtualFileProvider virtualFileProvider)
{
VirtualFileProvider = virtualFileProvider;
@@ -67,16 +65,26 @@ namespace Volo.Abp.VirtualFileExplorer.Web.Pages.VirtualFileExplorer
LastUpdateTime = fileInfo.LastModified.LocalDateTime
};
+ var filePath = fileInfo.PhysicalPath ?? $"{Path.EnsureEndsWith('/')}{fileInfo.Name}";;
+
if (fileInfo.IsDirectory)
{
fileInfoViewModel.Icon = "fas fa-folder";
fileInfoViewModel.FileType = "folder";
fileInfoViewModel.Length = "/";
- fileInfoViewModel.FileName =$"{fileInfo.Name}";
+ fileInfoViewModel.FileName =$"{fileInfo.Name}";
}
else
{
- fileInfoViewModel.FilePath = ((EmbeddedResourceFileInfo) fileInfo).VirtualPath;
+ if (fileInfo is EmbeddedResourceFileInfo embeddedResourceFileInfo)
+ {
+ fileInfoViewModel.FilePath = embeddedResourceFileInfo.VirtualPath;
+ }
+ else
+ {
+ fileInfoViewModel.FilePath = filePath;
+ }
+
}
FileInfoList.Add(fileInfoViewModel);
diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/VirtualFileExplorerConsts.cs b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/VirtualFileExplorerConsts.cs
index a05020b764..08a5916a0a 100644
--- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/VirtualFileExplorerConsts.cs
+++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/VirtualFileExplorerConsts.cs
@@ -2,6 +2,6 @@
{
public static class VirtualFileExplorerConsts
{
- public static string[] AllowFileInfoTypes = new[] {"VirtualDirectoryFileInfo", "EmbeddedResourceFileInfo"};
+ public static readonly string[] AllowFileInfoTypes = {"VirtualDirectoryFileInfo", "EmbeddedResourceFileInfo", "ManifestDirectoryInfo" , "ManifestFileInfo"};
}
}
diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.csproj b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.csproj
index d41cec81c1..cfe69554ac 100644
--- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.csproj
+++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.csproj
@@ -9,6 +9,7 @@
false
false
false
+ true
true
Library
@@ -18,14 +19,12 @@
-
-
@@ -34,4 +33,8 @@
+
+
+
+
diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts
index a661012ac7..f25f8f07ac 100644
--- a/npm/ng-packs/packages/core/src/lib/core.module.ts
+++ b/npm/ng-packs/packages/core/src/lib/core.module.ts
@@ -52,6 +52,7 @@ export function storageFactory(): OAuthStorage {
FormsModule,
ReactiveFormsModule,
RouterModule,
+ LocalizationModule,
AbstractNgModelComponent,
AutofocusDirective,
@@ -76,6 +77,7 @@ export function storageFactory(): OAuthStorage {
FormsModule,
ReactiveFormsModule,
RouterModule,
+ LocalizationModule,
],
declarations: [
AbstractNgModelComponent,
@@ -94,6 +96,7 @@ export function storageFactory(): OAuthStorage {
StopPropagationDirective,
VisibilityDirective,
],
+ providers: [LocalizationPipe],
entryComponents: [
RouterOutletComponent,
DynamicLayoutComponent,
@@ -125,9 +128,8 @@ export class RootCoreModule {}
* CoreModule is the module that is publicly available
*/
@NgModule({
- exports: [BaseCoreModule, LocalizationModule],
- imports: [BaseCoreModule, LocalizationModule],
- providers: [LocalizationPipe],
+ exports: [BaseCoreModule],
+ imports: [BaseCoreModule],
})
export class CoreModule {
static forRoot(options = {} as ABP.Root): ModuleWithProviders {
diff --git a/npm/ng-packs/packages/core/src/lib/models/common.ts b/npm/ng-packs/packages/core/src/lib/models/common.ts
index 7e828c9d2a..d4d44faae0 100644
--- a/npm/ng-packs/packages/core/src/lib/models/common.ts
+++ b/npm/ng-packs/packages/core/src/lib/models/common.ts
@@ -14,6 +14,7 @@ export namespace ABP {
export interface Test extends Partial {
baseHref?: string;
+ listQueryDebounceTime?: number;
routes?: Routes;
}
diff --git a/npm/ng-packs/packages/core/src/lib/services/list.service.ts b/npm/ng-packs/packages/core/src/lib/services/list.service.ts
index 135b13a912..0bd3e927ae 100644
--- a/npm/ng-packs/packages/core/src/lib/services/list.service.ts
+++ b/npm/ng-packs/packages/core/src/lib/services/list.service.ts
@@ -1,5 +1,12 @@
-import { Inject, Injectable, OnDestroy, Optional } from '@angular/core';
-import { BehaviorSubject, Observable, of, ReplaySubject, Subject } from 'rxjs';
+import { Injectable, Injector, OnDestroy } from '@angular/core';
+import {
+ BehaviorSubject,
+ MonoTypeOperatorFunction,
+ Observable,
+ of,
+ ReplaySubject,
+ Subject,
+} from 'rxjs';
import {
catchError,
debounceTime,
@@ -68,7 +75,7 @@ export class ListService implements OnDes
get query$(): Observable {
return this._query$
.asObservable()
- .pipe(debounceTime(this.delay || 300), shareReplay({ bufferSize: 1, refCount: true }));
+ .pipe(this.delay, shareReplay({ bufferSize: 1, refCount: true }));
}
private _isLoading$ = new BehaviorSubject(false);
@@ -89,7 +96,11 @@ export class ListService implements OnDes
} as any) as QueryParamsType);
};
- constructor(@Optional() @Inject(LIST_QUERY_DEBOUNCE_TIME) private delay: number) {
+ private delay: MonoTypeOperatorFunction;
+
+ constructor(injector: Injector) {
+ const delay = injector.get(LIST_QUERY_DEBOUNCE_TIME, 300);
+ this.delay = delay ? debounceTime(delay) : tap();
this.get();
}
diff --git a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts
index 9a7fc3eec0..7fa32a1b89 100644
--- a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts
+++ b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts
@@ -3,14 +3,14 @@ import {
BaseCoreModule,
coreOptionsFactory,
CORE_OPTIONS,
- LocalizationPipe,
+ LIST_QUERY_DEBOUNCE_TIME,
RestService,
} from '@abp/ng.core';
import { APP_BASE_HREF } from '@angular/common';
import { ModuleWithProviders, NgModule } from '@angular/core';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { provideRoutes } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
-import { MockLocalizationPipe } from './pipes/mock-localization.pipe';
import { MockRestService } from './services/mock-rest.service';
/**
@@ -18,13 +18,12 @@ import { MockRestService } from './services/mock-rest.service';
* and it provides mock alternatives
*/
@NgModule({
- exports: [RouterTestingModule, BaseCoreModule, MockLocalizationPipe],
- imports: [RouterTestingModule, BaseCoreModule],
- declarations: [MockLocalizationPipe],
+ exports: [RouterTestingModule, BaseCoreModule],
+ imports: [NoopAnimationsModule, RouterTestingModule, BaseCoreModule],
})
export class CoreTestingModule {
static withConfig(
- { baseHref = '/', routes = [], ...options } = {} as ABP.Test,
+ { baseHref = '/', listQueryDebounceTime = 0, routes = [], ...options } = {} as ABP.Test,
): ModuleWithProviders {
return {
ngModule: CoreTestingModule,
@@ -40,8 +39,8 @@ export class CoreTestingModule {
deps: ['CORE_OPTIONS'],
},
{
- provide: LocalizationPipe,
- useClass: MockLocalizationPipe,
+ provide: LIST_QUERY_DEBOUNCE_TIME,
+ useValue: listQueryDebounceTime,
},
{
provide: RestService,
diff --git a/npm/ng-packs/packages/core/testing/src/lib/pipes/index.ts b/npm/ng-packs/packages/core/testing/src/lib/pipes/index.ts
deleted file mode 100644
index 60bb9b7dce..0000000000
--- a/npm/ng-packs/packages/core/testing/src/lib/pipes/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './mock-localization.pipe';
diff --git a/npm/ng-packs/packages/core/testing/src/lib/pipes/mock-localization.pipe.ts b/npm/ng-packs/packages/core/testing/src/lib/pipes/mock-localization.pipe.ts
deleted file mode 100644
index 302173cb0f..0000000000
--- a/npm/ng-packs/packages/core/testing/src/lib/pipes/mock-localization.pipe.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { Config } from '@abp/ng.core';
-import { Injectable, Pipe, PipeTransform } from '@angular/core';
-
-@Injectable()
-@Pipe({
- name: 'abpLocalization',
-})
-export class MockLocalizationPipe implements PipeTransform {
- transform(value: string | Config.LocalizationWithDefault = '', ..._: string[]) {
- return typeof value === 'string' ? value : value.defaultValue;
- }
-}
diff --git a/npm/ng-packs/packages/core/testing/src/public-api.ts b/npm/ng-packs/packages/core/testing/src/public-api.ts
index 8028a99aac..3b48853680 100644
--- a/npm/ng-packs/packages/core/testing/src/public-api.ts
+++ b/npm/ng-packs/packages/core/testing/src/public-api.ts
@@ -1,2 +1 @@
export * from './lib/core-testing.module';
-export * from './lib/pipes';
diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/ui-extensions.module.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/ui-extensions.module.ts
index 11f9ff9e4d..28456e0324 100644
--- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/ui-extensions.module.ts
+++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/ui-extensions.module.ts
@@ -47,4 +47,10 @@ import { PropDataDirective } from './directives/prop-data.directive';
NgbTypeaheadModule,
],
})
+export class BaseUiExtensionsModule {}
+
+@NgModule({
+ exports: [BaseUiExtensionsModule],
+ imports: [BaseUiExtensionsModule],
+})
export class UiExtensionsModule {}
diff --git a/npm/ng-packs/packages/theme-shared/extensions/testing/ng-package.json b/npm/ng-packs/packages/theme-shared/extensions/testing/ng-package.json
new file mode 100644
index 0000000000..10757e7f04
--- /dev/null
+++ b/npm/ng-packs/packages/theme-shared/extensions/testing/ng-package.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "../../../../node_modules/ng-packagr/ng-package.schema.json",
+ "dest": "../../dist/theme-shared/extensions/testing",
+ "lib": {
+ "entryFile": "src/public-api.ts"
+ }
+}
diff --git a/npm/ng-packs/packages/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts b/npm/ng-packs/packages/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts
new file mode 100644
index 0000000000..593cce3733
--- /dev/null
+++ b/npm/ng-packs/packages/theme-shared/extensions/testing/src/lib/ui-extensions-testing.module.ts
@@ -0,0 +1,8 @@
+import { BaseUiExtensionsModule } from '@abp/ng.theme.shared/extensions';
+import { NgModule } from '@angular/core';
+
+@NgModule({
+ exports: [BaseUiExtensionsModule],
+ imports: [BaseUiExtensionsModule],
+})
+export class UiExtensionsTestingModule {}
diff --git a/npm/ng-packs/packages/theme-shared/extensions/testing/src/public-api.ts b/npm/ng-packs/packages/theme-shared/extensions/testing/src/public-api.ts
new file mode 100644
index 0000000000..d524c9cd0c
--- /dev/null
+++ b/npm/ng-packs/packages/theme-shared/extensions/testing/src/public-api.ts
@@ -0,0 +1 @@
+export * from './lib/ui-extensions-testing.module';
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json
index 2e4a69bd49..1d9beacd54 100644
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json
+++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json
@@ -21,7 +21,7 @@
"MyProjectName_Swagger": {
"ClientId": "MyProjectName_Swagger",
"ClientSecret": "1q2w3e*",
- "RootUrl": "https://localhost:44300"
+ "RootUrl": "https://localhost:44305"
}
}
}
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs
index 39cedbb06a..ac55c87569 100644
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs
+++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs
@@ -58,7 +58,7 @@ namespace MyCompanyName.MyProjectName
ConfigureLocalization();
ConfigureVirtualFileSystem(context);
ConfigureCors(context, configuration);
- ConfigureSwaggerServices(context);
+ ConfigureSwaggerServices(context, configuration);
}
private void ConfigureBundles()
@@ -129,9 +129,14 @@ namespace MyCompanyName.MyProjectName
});
}
- private static void ConfigureSwaggerServices(ServiceConfigurationContext context)
+ private static void ConfigureSwaggerServices(ServiceConfigurationContext context, IConfiguration configuration)
{
- context.Services.AddSwaggerGen(
+ context.Services.AddAbpSwaggerGenWithOAuth(
+ configuration["AuthServer:Authority"],
+ new Dictionary
+ {
+ {"MyProjectName", "MyProjectName API"}
+ },
options =>
{
options.SwaggerDoc("v1", new OpenApiInfo {Title = "MyProjectName API", Version = "v1"});
@@ -216,6 +221,10 @@ namespace MyCompanyName.MyProjectName
app.UseAbpSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API");
+
+ var configuration = context.ServiceProvider.GetRequiredService();
+ c.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
+ c.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]);
});
app.UseAuditing();
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json
index 795753ec9d..1051a8576c 100644
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json
+++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json
@@ -9,7 +9,9 @@
},
"AuthServer": {
"Authority": "https://localhost:44305",
- "RequireHttpsMetadata": "false"
+ "RequireHttpsMetadata": "false",
+ "SwaggerClientId": "MyProjectName_Swagger",
+ "SwaggerClientSecret": "1q2w3e*"
},
"StringEncryption": {
"DefaultPassPhrase": "gsKnGZ041HLL4IM8"