From edd5ff09a414ede67113922cf939dbd976003566 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Sun, 26 Jun 2022 13:30:41 +0300 Subject: [PATCH 01/76] Add missing Page-Layout to the menu of docs --- docs/en/docs-nav.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 2d1348f695..363658c530 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -825,6 +825,10 @@ "text": "Page Header", "path": "UI/Blazor/Page-Header.md" }, + { + "text": "Page Header", + "path": "UI/Blazor/Page-Layout.md" + }, { "text": "Toolbars", "path": "UI/Blazor/Toolbars.md" From e75b99c07b80fc963768013582ab5d427a5246eb Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Sun, 26 Jun 2022 13:32:47 +0300 Subject: [PATCH 02/76] Update docs-nav.json --- docs/en/docs-nav.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 363658c530..c4b06bdb78 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -826,7 +826,7 @@ "path": "UI/Blazor/Page-Header.md" }, { - "text": "Page Header", + "text": "Page Layout", "path": "UI/Blazor/Page-Layout.md" }, { From 1fd214edec4e360a473b58ef9846d9b7eb297c9c Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 29 Jul 2022 14:34:55 +0300 Subject: [PATCH 03/76] Cli: Don't allow --preview project creation with older cli version --- .../Volo/Abp/Cli/Commands/NewCommand.cs | 5 +++-- .../Abp/Cli/Commands/ProjectCreationCommandBase.cs | 14 +++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 526ae77363..4f41e83643 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -31,9 +31,10 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien ConnectionStringProvider connectionStringProvider, SolutionPackageVersionFinder solutionPackageVersionFinder, ICmdHelper cmdHelper, + CliService cliService, IInstallLibsService installLibsService, AngularPwaSupportAdder angularPwaSupportAdder) - : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper, installLibsService, angularPwaSupportAdder) + : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper, installLibsService, cliService, angularPwaSupportAdder) { TemplateProjectBuilder = templateProjectBuilder; TemplateInfoProvider = templateInfoProvider; @@ -68,7 +69,7 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien Logger.LogInformation("Tiered: yes"); } - var projectArgs = GetProjectBuildArgs(commandLineArgs, template, projectName); + var projectArgs = await GetProjectBuildArgsAsync(commandLineArgs, template, projectName); var result = await TemplateProjectBuilder.BuildAsync( projectArgs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index e672c763ae..4fdef77e8b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -25,6 +25,7 @@ public abstract class ProjectCreationCommandBase public SolutionPackageVersionFinder SolutionPackageVersionFinder { get; } public ICmdHelper CmdHelper { get; } public IInstallLibsService InstallLibsService { get; } + public CliService CliService { get; } public AngularPwaSupportAdder AngularPwaSupportAdder { get; } public ILogger Logger { get; set; } @@ -33,18 +34,20 @@ public abstract class ProjectCreationCommandBase SolutionPackageVersionFinder solutionPackageVersionFinder, ICmdHelper cmdHelper, IInstallLibsService installLibsService, + CliService cliService, AngularPwaSupportAdder angularPwaSupportAdder) { ConnectionStringProvider = connectionStringProvider; SolutionPackageVersionFinder = solutionPackageVersionFinder; CmdHelper = cmdHelper; InstallLibsService = installLibsService; + CliService = cliService; AngularPwaSupportAdder = angularPwaSupportAdder; Logger = NullLogger.Instance; } - protected ProjectBuildArgs GetProjectBuildArgs(CommandLineArgs commandLineArgs, string template, string projectName) + protected async Task GetProjectBuildArgsAsync(CommandLineArgs commandLineArgs, string template, string projectName) { var version = commandLineArgs.Options.GetOrNull(Options.Version.Short, Options.Version.Long); @@ -57,6 +60,15 @@ public abstract class ProjectCreationCommandBase if (preview) { Logger.LogInformation("Preview: yes"); + + var cliVersion = await CliService.GetCurrentCliVersionAsync(typeof(CliService).Assembly); + + if (!cliVersion.IsPrerelease) + { + throw new CliUsageException( + "You can only create a new preview solution with preview CLI version." + + " Update your ABP CLI to the preview version."); + } } var pwa = commandLineArgs.Options.ContainsKey(Options.ProgressiveWebApp.Short); From 7f93fd261e69a0998e896418856e976e784f203b Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Mon, 15 Aug 2022 17:34:53 +0300 Subject: [PATCH 04/76] Add Custom Component Feature to ExtensibleForm. --- .../account/src/lib/account-routing.module.ts | 4 +- .../account/src/lib/account.module.ts | 13 +++- ...xtensible-personal-settings.component.html | 5 ++ ...xtensible-personal-settings.component.scss | 0 ...nsible-personal-settings.component.spec.ts | 24 +++++++ .../extensible-personal-settings.component.ts | 42 +++++++++++ .../lib/components/hello/hello.component.ts | 15 ++++ .../default-personal-settings-form-props.ts | 15 ++++ .../src/lib/guards/extensions.guard.ts | 42 +++++++++++ .../packages/account/src/lib/guards/index.ts | 1 + .../account/src/lib/models/config-options.ts | 11 +++ .../src/lib/tokens/extensions.token.ts | 17 +++++ .../packages/account/src/lib/tokens/index.ts | 1 + .../extensible-form-prop.component.html | 6 ++ .../extensible-form-prop.component.ts | 71 ++++++++++++------- .../extensible-table.component.ts | 9 +-- .../extensions/src/lib/models/form-props.ts | 2 + .../extensions/src/lib/models/props.ts | 1 + .../src/lib/tokens/extensions.token.ts | 3 + 19 files changed, 250 insertions(+), 32 deletions(-) create mode 100644 npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.html create mode 100644 npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.scss create mode 100644 npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.spec.ts create mode 100644 npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.ts create mode 100644 npm/ng-packs/packages/account/src/lib/components/hello/hello.component.ts create mode 100644 npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts create mode 100644 npm/ng-packs/packages/account/src/lib/guards/extensions.guard.ts create mode 100644 npm/ng-packs/packages/account/src/lib/tokens/extensions.token.ts diff --git a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts index c09dede3cb..e4b18a717b 100644 --- a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts @@ -13,6 +13,8 @@ import { RegisterComponent } from './components/register/register.component'; import { ResetPasswordComponent } from './components/reset-password/reset-password.component'; import { eAccountComponents } from './enums/components'; import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; +import { AccountExtensionsGuard } from './guards'; + const routes: Routes = [ { path: '', pathMatch: 'full', redirectTo: 'login' }, @@ -68,7 +70,7 @@ const routes: Routes = [ { path: 'manage', component: ReplaceableRouteContainerComponent, - canActivate: [AuthGuard], + canActivate: [AuthGuard, AccountExtensionsGuard], data: { replaceableComponent: { key: eAccountComponents.ManageProfile, diff --git a/npm/ng-packs/packages/account/src/lib/account.module.ts b/npm/ng-packs/packages/account/src/lib/account.module.ts index bfa37d4bfa..26f71ef150 100644 --- a/npm/ng-packs/packages/account/src/lib/account.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account.module.ts @@ -15,6 +15,11 @@ import { accountConfigOptionsFactory } from './utils/factory-utils'; import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; import { ForgotPasswordComponent } from './components/forgot-password/forgot-password.component'; import { ResetPasswordComponent } from './components/reset-password/reset-password.component'; +import { ExtensiblePersonalSettingsComponent } from './components/extensible-personal-settings/extensible-personal-settings.component'; +import { UiExtensionsModule } from '@abp/ng.theme.shared/extensions'; +import { ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS } from './tokens/extensions.token'; +import { AccountExtensionsGuard } from './guards/extensions.guard'; +import { HelloComponent } from './components/hello/hello.component'; const declarations = [ LoginComponent, @@ -27,13 +32,14 @@ const declarations = [ ]; @NgModule({ - declarations: [...declarations], + declarations: [...declarations, ExtensiblePersonalSettingsComponent, HelloComponent], imports: [ CoreModule, AccountRoutingModule, ThemeSharedModule, NgbDropdownModule, NgxValidateCoreModule, + UiExtensionsModule, ], exports: [...declarations], }) @@ -49,6 +55,11 @@ export class AccountModule { useFactory: accountConfigOptionsFactory, deps: [ACCOUNT_CONFIG_OPTIONS], }, + { + provide: ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS, + useValue: options.editFormPropContributors, + }, + AccountExtensionsGuard, ], }; } diff --git a/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.html b/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.html new file mode 100644 index 0000000000..5b17770996 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.html @@ -0,0 +1,5 @@ +

extensible-personal-settings works!

+ +
+ +
diff --git a/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.scss b/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.spec.ts b/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.spec.ts new file mode 100644 index 0000000000..e2a2102e5a --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ExtensiblePersonalSettingsComponent } from './extensible-personal-settings.component'; + +describe('ExtensiblePersonalSettingsComponent', () => { + let component: ExtensiblePersonalSettingsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ExtensiblePersonalSettingsComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ExtensiblePersonalSettingsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.ts b/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.ts new file mode 100644 index 0000000000..0b54672cab --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.ts @@ -0,0 +1,42 @@ +import {Component, Injector, OnInit} from '@angular/core'; +import {EXTENSIONS_IDENTIFIER, FormPropData, generateFormFromProps} from "@abp/ng.theme.shared/extensions"; +import { eAccountComponents } from '../../enums/components'; +import {FormBuilder, FormGroup} from "@angular/forms"; +import {ProfileService} from "@abp/ng.account.core/proxy"; + +@Component({ + selector: 'abp-extensible-personal-settings', + templateUrl: './extensible-personal-settings.component.html', + styleUrls: ['./extensible-personal-settings.component.scss'], + providers:[ + { + provide: EXTENSIONS_IDENTIFIER, + useValue: eAccountComponents.PersonalSettings, + }, + ] +}) +export class ExtensiblePersonalSettingsComponent implements OnInit { + selected = {a: 1};// hacky for triggering 'edit' mode of extensible-form + + form: FormGroup; + + constructor( + private profileService: ProfileService, + protected fb: FormBuilder, + protected injector: Injector, + ) {} + + + buildForm() { + const data = new FormPropData(this.injector, this.selected); + this.form = generateFormFromProps(data); + } + + ngOnInit(): void { + this.buildForm() + } + + save() { + + } +} diff --git a/npm/ng-packs/packages/account/src/lib/components/hello/hello.component.ts b/npm/ng-packs/packages/account/src/lib/components/hello/hello.component.ts new file mode 100644 index 0000000000..2fc59314aa --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/components/hello/hello.component.ts @@ -0,0 +1,15 @@ +import {Component, Inject } from '@angular/core'; +import {FORM_PROP_DATA_STREAM, FormProp} from "@abp/ng.theme.shared/extensions"; + +@Component({ + selector: 'abp-hello', + template: `

hello works! {{name | abpLocalization}}

`, + styles: [], +}) +export class HelloComponent { + name:string; + constructor(@Inject(FORM_PROP_DATA_STREAM) private propData:FormProp) { + this.name = propData.displayName + } + +} diff --git a/npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts b/npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts new file mode 100644 index 0000000000..0624e074d3 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts @@ -0,0 +1,15 @@ +import {ePropType, FormProp} from "@abp/ng.theme.shared/extensions"; +import {UpdateProfileDto} from "@abp/ng.account.core/proxy"; +import {Validators} from "@angular/forms"; +import {HelloComponent} from "../components/hello/hello.component"; + +export const DEFAULT_PERSONAL_SETTINGS_UPDATE_FORM_PROPS = FormProp.createMany([ + { + type: ePropType.String, + name: 'userName', + displayName: 'Account::UserName', + id: 'user-name', + validators: () => [Validators.required, Validators.maxLength(256)], + template: HelloComponent + }, +]) diff --git a/npm/ng-packs/packages/account/src/lib/guards/extensions.guard.ts b/npm/ng-packs/packages/account/src/lib/guards/extensions.guard.ts new file mode 100644 index 0000000000..20c4269977 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/guards/extensions.guard.ts @@ -0,0 +1,42 @@ +import {Injectable, Injector} from "@angular/core"; +import {CanActivate} from "@angular/router"; +import {Observable} from "rxjs"; +import { + ExtensionsService, + getObjectExtensionEntitiesFromStore, + mapEntitiesToContributors, mergeWithDefaultProps +} from "@abp/ng.theme.shared/extensions"; + import {ConfigStateService} from "@abp/ng.core"; +import {tap, map, mapTo} from "rxjs/operators"; +import {ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS, DEFAULT_ACCOUNT_FORM_PROPS} from '../tokens/extensions.token'; +import { AccountEditFormPropContributors } from '../models/config-options'; +import { eAccountComponents } from '../enums/components'; + +@Injectable() +export class AccountExtensionsGuard implements CanActivate { + constructor(private injector: Injector) {} + + canActivate(): Observable { + const extensions: ExtensionsService = this.injector.get(ExtensionsService); + + const editFormContributors: AccountEditFormPropContributors = + this.injector.get(ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS, null) || {}; + + const configState = this.injector.get(ConfigStateService); + return getObjectExtensionEntitiesFromStore(configState, 'Account').pipe( + map(entities => ({ + [eAccountComponents.PersonalSettings]: entities.PersonalSettings, + })), + mapEntitiesToContributors(configState, 'AbpAccount'), + tap(objectExtensionContributors => { + mergeWithDefaultProps( + extensions.editFormProps, + DEFAULT_ACCOUNT_FORM_PROPS, + objectExtensionContributors.editForm, + editFormContributors, + ); + }), + mapTo(true), + ); + } +} diff --git a/npm/ng-packs/packages/account/src/lib/guards/index.ts b/npm/ng-packs/packages/account/src/lib/guards/index.ts index 382170b2b1..275cd2f8e8 100644 --- a/npm/ng-packs/packages/account/src/lib/guards/index.ts +++ b/npm/ng-packs/packages/account/src/lib/guards/index.ts @@ -1 +1,2 @@ export * from './authentication-flow.guard'; +export * from './extensions.guard'; diff --git a/npm/ng-packs/packages/account/src/lib/models/config-options.ts b/npm/ng-packs/packages/account/src/lib/models/config-options.ts index 898021b04e..f2e603ab32 100644 --- a/npm/ng-packs/packages/account/src/lib/models/config-options.ts +++ b/npm/ng-packs/packages/account/src/lib/models/config-options.ts @@ -1,3 +1,14 @@ +import {eAccountComponents} from "../enums"; +import { EditFormPropContributorCallback } from '@abp/ng.theme.shared/extensions'; +import {UpdateProfileDto} from "@abp/ng.account.core/proxy"; + export interface AccountConfigOptions { redirectUrl?: string; } +export type AccountEditFormPropContributors = Partial<{ + [eAccountComponents.PersonalSettings]: EditFormPropContributorCallback[]; +}>; + +export interface AccountConfigOptions { + editFormPropContributors?: AccountEditFormPropContributors; +} diff --git a/npm/ng-packs/packages/account/src/lib/tokens/extensions.token.ts b/npm/ng-packs/packages/account/src/lib/tokens/extensions.token.ts new file mode 100644 index 0000000000..6d95db8b6d --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/tokens/extensions.token.ts @@ -0,0 +1,17 @@ +import {eAccountComponents} from "../enums"; +import {DEFAULT_PERSONAL_SETTINGS_UPDATE_FORM_PROPS} from "../defaults/default-personal-settings-form-props"; +import {InjectionToken} from "@angular/core"; +import {EditFormPropContributorCallback} from "@abp/ng.theme.shared/extensions"; +import {UpdateProfileDto} from "@abp/ng.account.core/proxy"; + +export const DEFAULT_ACCOUNT_FORM_PROPS = { + [eAccountComponents.PersonalSettings]: DEFAULT_PERSONAL_SETTINGS_UPDATE_FORM_PROPS, +}; + +export const ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS = new InjectionToken( + 'ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS', +); + +type EditFormPropContributors = Partial<{ + [eAccountComponents.PersonalSettings]: EditFormPropContributorCallback[]; +}>; diff --git a/npm/ng-packs/packages/account/src/lib/tokens/index.ts b/npm/ng-packs/packages/account/src/lib/tokens/index.ts index 0a88318130..4381d1bc77 100644 --- a/npm/ng-packs/packages/account/src/lib/tokens/index.ts +++ b/npm/ng-packs/packages/account/src/lib/tokens/index.ts @@ -1 +1,2 @@ export * from './config-options.token'; +export * from './extensions.token'; diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html index 4367bd098a..67b0022be8 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html @@ -3,6 +3,12 @@ *abpPermission="prop.permission; runChangeDetection: false" [ngSwitch]="getComponent(prop)" > + + + + + + ; + public injectorForCustomComponent: Injector + asterisk = ''; options$: Observable[]> = of([]); @@ -62,15 +65,16 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { readonly!: boolean; - disabledFn = (data:PropData) => false; - - get disabled() { - return this.disabledFn(this.data) - } + typeaheadModel: any; private readonly form: FormGroup; - typeaheadModel: any; + disabledFn = (data: PropData) => false; + + get disabled() { + return this.disabledFn(this.data) + } + setTypeaheadValue(selectedOption: ABP.Option) { this.typeaheadModel = selectedOption || { key: null, value: null }; @@ -108,12 +112,13 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { public readonly track: TrackByService, protected configState: ConfigStateService, groupDirective: FormGroupDirective, + private injector: Injector ) { this.form = groupDirective.form; } private getTypeaheadControls() { - const { name } = this.prop; + const {name} = this.prop; const extraPropName = `${EXTRA_PROPERTIES_KEY}.${name}`; const keyControl = this.form.get(addTypeaheadTextSuffix(extraPropName)) || @@ -133,6 +138,9 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { } getComponent(prop: FormProp): string { + if (prop.template) { + return 'template' + } switch (prop.type) { case ePropType.Boolean: return 'checkbox'; @@ -173,13 +181,24 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { } } - ngOnChanges({ prop }: SimpleChanges) { - const currentProp = prop?.currentValue; - const { options, readonly, disabled, validators } = currentProp || {}; + ngOnChanges({prop}: SimpleChanges) { + const currentProp = prop?.currentValue as FormProp; + const {options, readonly, disabled, validators, template} = currentProp || {}; + if (template) { + this.injectorForCustomComponent = Injector.create({ + providers: [ + { + provide: FORM_PROP_DATA_STREAM, + useValue: currentProp + } + ], + parent: this.injector, + }); + } if (options) this.options$ = options(this.data); if (readonly) this.readonly = readonly(this.data); - + if (disabled) { this.disabledFn = disabled; } diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts index 9682188638..d3c58f0c93 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.ts @@ -158,15 +158,16 @@ export class ExtensibleTableComponent implements OnChanges { value, }; if (prop.value.component) { - const injector = Injector.create( - [ + + const injector = Injector.create({ + providers: [ { provide: PROP_DATA_STREAM, useValue: value, }, ], - this.injector, - ); + parent: this.injector, + }); record[propKey].injector = injector; record[propKey].component = prop.value.component; } diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/form-props.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/form-props.ts index 44b309d0c2..b607e4cb6e 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/form-props.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/form-props.ts @@ -38,6 +38,7 @@ export class FormProp extends Prop { readonly defaultValue: boolean | number | string | Date; readonly options: PropCallback[]>> | undefined; readonly id: string | undefined; + readonly template? : Type constructor(options: FormPropOptions) { super( @@ -47,6 +48,7 @@ export class FormProp extends Prop { options.permission, options.visible, options.isExtra, + options.template ); this.asyncValidators = options.asyncValidators || (_ => []); diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/props.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/props.ts index 66fc4f2c67..0b26512dbc 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/props.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/props.ts @@ -33,6 +33,7 @@ export abstract class Prop { public readonly permission: string, public readonly visible: PropPredicate = _ => true, public readonly isExtra = false, + public readonly template? : Type ) { this.displayName = this.displayName || this.name; } diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensions.token.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensions.token.ts index d2cbbe87bd..28f26317d8 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensions.token.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensions.token.ts @@ -3,6 +3,7 @@ import { ActionCallback, ReadonlyActionData as ActionData } from '../models/acti import { ExtensionsService } from '../services/extensions.service'; import { Observable } from 'rxjs'; import { ePropType } from '../enums/props.enum'; + import {FormProp} from "../models/form-props"; export const EXTENSIONS_IDENTIFIER = new InjectionToken('EXTENSIONS_IDENTIFIER'); export type ActionKeys = Extract<'entityActions' | 'toolbarActions', keyof ExtensionsService>; @@ -24,3 +25,5 @@ export const ENTITY_PROP_TYPE_CLASSES = new InjectionToken( factory: () => ({} as EntityPropTypeClass), }, ); + +export const FORM_PROP_DATA_STREAM = new InjectionToken('FORM_PROP_DATA_STREAM'); From 4a421e0da7dec84da25470473ad050ff840104db Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Tue, 16 Aug 2022 09:05:14 +0300 Subject: [PATCH 05/76] Move extensible form to personal settings component --- .../account/src/lib/account.module.ts | 8 +- ...xtensible-personal-settings.component.html | 5 - ...xtensible-personal-settings.component.scss | 0 ...nsible-personal-settings.component.spec.ts | 24 -- .../extensible-personal-settings.component.ts | 42 --- .../half-row/half-row.component.ts | 33 +++ .../name-surname/name-surname.component.ts | 30 +++ .../personal-settings.component.html | 50 +--- .../personal-settings.component.ts | 47 ++-- .../default-personal-settings-form-props.ts | 40 ++- .../extensible-form-prop.component.html | 241 +++++++++--------- .../extensible-form-prop.component.ts | 17 +- 12 files changed, 267 insertions(+), 270 deletions(-) delete mode 100644 npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.html delete mode 100644 npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.scss delete mode 100644 npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.spec.ts delete mode 100644 npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.ts create mode 100644 npm/ng-packs/packages/account/src/lib/components/personal-settings/half-row/half-row.component.ts create mode 100644 npm/ng-packs/packages/account/src/lib/components/personal-settings/name-surname/name-surname.component.ts diff --git a/npm/ng-packs/packages/account/src/lib/account.module.ts b/npm/ng-packs/packages/account/src/lib/account.module.ts index 26f71ef150..d8c88055d9 100644 --- a/npm/ng-packs/packages/account/src/lib/account.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account.module.ts @@ -15,11 +15,11 @@ import { accountConfigOptionsFactory } from './utils/factory-utils'; import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; import { ForgotPasswordComponent } from './components/forgot-password/forgot-password.component'; import { ResetPasswordComponent } from './components/reset-password/reset-password.component'; -import { ExtensiblePersonalSettingsComponent } from './components/extensible-personal-settings/extensible-personal-settings.component'; import { UiExtensionsModule } from '@abp/ng.theme.shared/extensions'; import { ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS } from './tokens/extensions.token'; import { AccountExtensionsGuard } from './guards/extensions.guard'; -import { HelloComponent } from './components/hello/hello.component'; +import { HalfRowComponent } from './components/personal-settings/half-row/half-row.component'; +import { NameSurnameComponent } from './components/personal-settings/name-surname/name-surname.component'; const declarations = [ LoginComponent, @@ -29,10 +29,12 @@ const declarations = [ PersonalSettingsComponent, ForgotPasswordComponent, ResetPasswordComponent, + HalfRowComponent, + NameSurnameComponent ]; @NgModule({ - declarations: [...declarations, ExtensiblePersonalSettingsComponent, HelloComponent], + declarations: [...declarations], imports: [ CoreModule, AccountRoutingModule, diff --git a/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.html b/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.html deleted file mode 100644 index 5b17770996..0000000000 --- a/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.html +++ /dev/null @@ -1,5 +0,0 @@ -

extensible-personal-settings works!

- -
- -
diff --git a/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.scss b/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.scss deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.spec.ts b/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.spec.ts deleted file mode 100644 index e2a2102e5a..0000000000 --- a/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { ExtensiblePersonalSettingsComponent } from './extensible-personal-settings.component'; - -describe('ExtensiblePersonalSettingsComponent', () => { - let component: ExtensiblePersonalSettingsComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ExtensiblePersonalSettingsComponent], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(ExtensiblePersonalSettingsComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.ts b/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.ts deleted file mode 100644 index 0b54672cab..0000000000 --- a/npm/ng-packs/packages/account/src/lib/components/extensible-personal-settings/extensible-personal-settings.component.ts +++ /dev/null @@ -1,42 +0,0 @@ -import {Component, Injector, OnInit} from '@angular/core'; -import {EXTENSIONS_IDENTIFIER, FormPropData, generateFormFromProps} from "@abp/ng.theme.shared/extensions"; -import { eAccountComponents } from '../../enums/components'; -import {FormBuilder, FormGroup} from "@angular/forms"; -import {ProfileService} from "@abp/ng.account.core/proxy"; - -@Component({ - selector: 'abp-extensible-personal-settings', - templateUrl: './extensible-personal-settings.component.html', - styleUrls: ['./extensible-personal-settings.component.scss'], - providers:[ - { - provide: EXTENSIONS_IDENTIFIER, - useValue: eAccountComponents.PersonalSettings, - }, - ] -}) -export class ExtensiblePersonalSettingsComponent implements OnInit { - selected = {a: 1};// hacky for triggering 'edit' mode of extensible-form - - form: FormGroup; - - constructor( - private profileService: ProfileService, - protected fb: FormBuilder, - protected injector: Injector, - ) {} - - - buildForm() { - const data = new FormPropData(this.injector, this.selected); - this.form = generateFormFromProps(data); - } - - ngOnInit(): void { - this.buildForm() - } - - save() { - - } -} diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/half-row/half-row.component.ts b/npm/ng-packs/packages/account/src/lib/components/personal-settings/half-row/half-row.component.ts new file mode 100644 index 0000000000..76c741459b --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/half-row/half-row.component.ts @@ -0,0 +1,33 @@ +import {Component, Inject} from '@angular/core'; +import {FORM_PROP_DATA_STREAM, FormProp} from "@abp/ng.theme.shared/extensions"; +import {ControlContainer, FormGroup, FormGroupDirective} from "@angular/forms"; + +@Component({ + selector: 'abp-half-row', + template: ` +
+
+ + +
+
`, + styles: [], + viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] + +}) +export class HalfRowComponent { + public displayName: string; + public name: string; + public id: string; + public formGroup: FormGroup + + constructor(@Inject(FORM_PROP_DATA_STREAM) private propData: FormProp) { + this.displayName = propData.displayName + this.name = propData.name + this.id = propData.id + } +} diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/name-surname/name-surname.component.ts b/npm/ng-packs/packages/account/src/lib/components/personal-settings/name-surname/name-surname.component.ts new file mode 100644 index 0000000000..7701f4567f --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/name-surname/name-surname.component.ts @@ -0,0 +1,30 @@ +import { Component } from '@angular/core'; +import {ControlContainer, FormGroupDirective} from "@angular/forms"; + +@Component({ + selector: 'abp-name-surname', + template: `
+
+
+ +
+
+
+
+ +
+
+
`, + styles: [], + viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] + +}) +export class NameSurnameComponent { + constructor() {} +} diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html index 0b70ad41e8..42a323e5ca 100644 --- a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html @@ -1,49 +1,7 @@ -
-
- * -
-
-
-
- -
-
-
-
- -
-
-
-
- * -
-
- -
+

Thor

+ + + ([ { type: ePropType.String, name: 'userName', - displayName: 'Account::UserName', - id: 'user-name', - validators: () => [Validators.required, Validators.maxLength(256)], - template: HelloComponent + displayName: 'AbpIdentity::DisplayName:UserName', + id: 'username', + validators: () => [required,maxLength(256)], + }, + { + type: ePropType.String, + name: 'name', + displayName: 'AbpIdentity::DisplayName:Name', + id: 'name', + validators: () => [maxLength(64),required], + template:NameSurnameComponent + }, + { + type: ePropType.String, + name: 'surname', + displayName: 'AbpIdentity::DisplayName:Surname', + id: 'surname', + validators: () => [maxLength(64),required], + visible:() => false + }, + { + type: ePropType.String, + name: 'email', + displayName: 'AbpIdentity::DisplayName:Email', + id: 'email-address', + validators: () => [required, email, maxLength(256)], + }, + { + type: ePropType.String, + name: 'phoneNumber', + displayName: 'AbpIdentity::DisplayName:PhoneNumber', + id: 'phone-number', + validators: () => [maxLength(16)], }, ]) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html index 67b0022be8..239882a498 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html @@ -1,148 +1,153 @@ -
+ - + - - - - - - - - +
- -
+ + - -
-
+ - - - - + + + - - - + +
+ + + + + - + + + - - -
- + + + + + + +
+ + +
+
+ + + + - -
-
+ - - - - + + + + - - - - + + + + - - - - + + + + +
- - - - - + {{ prop.displayName | abpLocalization }} {{ asterisk }} diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts index 49257f34c9..efa894cf55 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts @@ -77,8 +77,8 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { setTypeaheadValue(selectedOption: ABP.Option) { - this.typeaheadModel = selectedOption || { key: null, value: null }; - const { key, value } = this.typeaheadModel; + this.typeaheadModel = selectedOption || {key: null, value: null}; + const {key, value} = this.typeaheadModel; const [keyControl, valueControl] = this.getTypeaheadControls(); if (valueControl?.value && !value) valueControl.markAsDirty(); keyControl?.setValue(key); @@ -88,10 +88,10 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { search = (text$: Observable) => text$ ? text$.pipe( - debounceTime(300), - distinctUntilChanged(), - switchMap(text => this.prop.options(this.data, text)), - ) + debounceTime(300), + distinctUntilChanged(), + switchMap(text => this.prop.options(this.data, text)), + ) : of([]); typeaheadFormatter = (option: ABP.Option) => option.key; @@ -190,7 +190,8 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { { provide: FORM_PROP_DATA_STREAM, useValue: currentProp - } + }, + ], parent: this.injector, }); @@ -209,7 +210,7 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { const [keyControl, valueControl] = this.getTypeaheadControls(); if (keyControl && valueControl) - this.typeaheadModel = { key: keyControl.value, value: valueControl.value }; + this.typeaheadModel = {key: keyControl.value, value: valueControl.value}; } } From 30a2120cdbcba2741848306cf71a714888ec4b4b Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Tue, 16 Aug 2022 14:48:08 +0300 Subject: [PATCH 06/76] Implement update profile with Extensible-form --- .../account/src/lib/account.module.ts | 3 -- .../half-row/half-row.component.ts | 5 ++-- .../name-surname/name-surname.component.ts | 30 ------------------- .../personal-settings.component.html | 1 - .../default-personal-settings-form-props.ts | 12 ++++---- .../extensible-form-prop.component.html | 1 - .../extensible-form-prop.component.ts | 2 +- .../extensible-form.component.html | 4 +-- .../extensible-form.component.ts | 5 +++- .../extensions/src/lib/models/form-props.ts | 4 ++- .../extensions/src/lib/models/props.ts | 3 +- 11 files changed, 21 insertions(+), 49 deletions(-) delete mode 100644 npm/ng-packs/packages/account/src/lib/components/personal-settings/name-surname/name-surname.component.ts diff --git a/npm/ng-packs/packages/account/src/lib/account.module.ts b/npm/ng-packs/packages/account/src/lib/account.module.ts index d8c88055d9..3929963665 100644 --- a/npm/ng-packs/packages/account/src/lib/account.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account.module.ts @@ -19,8 +19,6 @@ import { UiExtensionsModule } from '@abp/ng.theme.shared/extensions'; import { ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS } from './tokens/extensions.token'; import { AccountExtensionsGuard } from './guards/extensions.guard'; import { HalfRowComponent } from './components/personal-settings/half-row/half-row.component'; -import { NameSurnameComponent } from './components/personal-settings/name-surname/name-surname.component'; - const declarations = [ LoginComponent, RegisterComponent, @@ -30,7 +28,6 @@ const declarations = [ ForgotPasswordComponent, ResetPasswordComponent, HalfRowComponent, - NameSurnameComponent ]; @NgModule({ diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/half-row/half-row.component.ts b/npm/ng-packs/packages/account/src/lib/components/personal-settings/half-row/half-row.component.ts index 76c741459b..a0f0ead029 100644 --- a/npm/ng-packs/packages/account/src/lib/components/personal-settings/half-row/half-row.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/half-row/half-row.component.ts @@ -5,12 +5,11 @@ import {ControlContainer, FormGroup, FormGroupDirective} from "@angular/forms"; @Component({ selector: 'abp-half-row', template: ` -
+
-
diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/name-surname/name-surname.component.ts b/npm/ng-packs/packages/account/src/lib/components/personal-settings/name-surname/name-surname.component.ts deleted file mode 100644 index 7701f4567f..0000000000 --- a/npm/ng-packs/packages/account/src/lib/components/personal-settings/name-surname/name-surname.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from '@angular/core'; -import {ControlContainer, FormGroupDirective} from "@angular/forms"; - -@Component({ - selector: 'abp-name-surname', - template: `
-
-
- -
-
-
-
- -
-
-
`, - styles: [], - viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] - -}) -export class NameSurnameComponent { - constructor() {} -} diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html index 42a323e5ca..86dd3272b3 100644 --- a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html @@ -1,4 +1,3 @@ -

Thor

diff --git a/npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts b/npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts index 6a1038e64a..d99401ecf2 100644 --- a/npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts +++ b/npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts @@ -1,7 +1,7 @@ import {ePropType, FormProp} from "@abp/ng.theme.shared/extensions"; import {UpdateProfileDto} from "@abp/ng.account.core/proxy"; import {Validators} from "@angular/forms"; - import {NameSurnameComponent} from "../components/personal-settings/name-surname/name-surname.component"; + import {HalfRowComponent} from "../components/personal-settings/half-row/half-row.component"; const { maxLength, required, email } = Validators; export const DEFAULT_PERSONAL_SETTINGS_UPDATE_FORM_PROPS = FormProp.createMany([ @@ -17,16 +17,18 @@ export const DEFAULT_PERSONAL_SETTINGS_UPDATE_FORM_PROPS = FormProp.createMany [maxLength(64),required], - template:NameSurnameComponent + validators: () => [maxLength(64)], + template:HalfRowComponent, + className:"d-inline-block w-50" }, { type: ePropType.String, name: 'surname', displayName: 'AbpIdentity::DisplayName:Surname', id: 'surname', - validators: () => [maxLength(64),required], - visible:() => false + validators: () => [maxLength(64)], + className:"d-inline-block w-50 ps-4", + template:HalfRowComponent }, { type: ePropType.String, diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html index 239882a498..dd125f5afc 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html @@ -3,7 +3,6 @@ diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts index efa894cf55..a7a7d22708 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts @@ -191,7 +191,7 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { provide: FORM_PROP_DATA_STREAM, useValue: currentProp }, - + { provide: ControlContainer, useExisting: FormGroupDirective } ], parent: this.injector, }); diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html index 259538820b..69ad86da5c 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.html @@ -6,11 +6,11 @@ [formGroupName]="extraPropertiesKey" *ngIf="extraProperties.controls[prop.name]; else tempDefault" > - + - { @Inject(EXTENSIONS_IDENTIFIER) private identifier: string, ) {} } + + +export const ExtensibleFormViewProvider = { provide: ControlContainer, useExisting: FormGroupDirective } diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/form-props.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/form-props.ts index b607e4cb6e..4e71c70e0f 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/form-props.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/form-props.ts @@ -39,6 +39,7 @@ export class FormProp extends Prop { readonly options: PropCallback[]>> | undefined; readonly id: string | undefined; readonly template? : Type + readonly className?:string; constructor(options: FormPropOptions) { super( @@ -48,7 +49,8 @@ export class FormProp extends Prop { options.permission, options.visible, options.isExtra, - options.template + options.template, + options.className ); this.asyncValidators = options.asyncValidators || (_ => []); diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/props.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/props.ts index 0b26512dbc..e8bb158cc9 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/props.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/props.ts @@ -33,7 +33,8 @@ export abstract class Prop { public readonly permission: string, public readonly visible: PropPredicate = _ => true, public readonly isExtra = false, - public readonly template? : Type + public readonly template? : Type, + public readonly className?:string ) { this.displayName = this.displayName || this.name; } From db5a3fb4bf587259244023fd42aa6cf6ff8db3f1 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Tue, 16 Aug 2022 15:43:36 +0300 Subject: [PATCH 07/76] Change HalfRowComponent name and export it --- .../account/src/lib/account.module.ts | 47 ++++++++++--------- .../account/src/lib/components/index.ts | 1 + ...> personal-settings-half-row.component.ts} | 4 +- .../default-personal-settings-form-props.ts | 6 +-- 4 files changed, 30 insertions(+), 28 deletions(-) rename npm/ng-packs/packages/account/src/lib/components/personal-settings/{half-row/half-row.component.ts => personal-settings-half-row.component.ts} (91%) diff --git a/npm/ng-packs/packages/account/src/lib/account.module.ts b/npm/ng-packs/packages/account/src/lib/account.module.ts index 3929963665..74310ce1bd 100644 --- a/npm/ng-packs/packages/account/src/lib/account.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account.module.ts @@ -1,24 +1,25 @@ -import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; -import { ThemeSharedModule } from '@abp/ng.theme.shared'; -import { ModuleWithProviders, NgModule, NgModuleFactory } from '@angular/core'; -import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; -import { NgxValidateCoreModule } from '@ngx-validate/core'; -import { AccountRoutingModule } from './account-routing.module'; -import { ChangePasswordComponent } from './components/change-password/change-password.component'; -import { LoginComponent } from './components/login/login.component'; -import { ManageProfileComponent } from './components/manage-profile/manage-profile.component'; -import { PersonalSettingsComponent } from './components/personal-settings/personal-settings.component'; -import { RegisterComponent } from './components/register/register.component'; -import { AccountConfigOptions } from './models/config-options'; -import { ACCOUNT_CONFIG_OPTIONS } from './tokens/config-options.token'; -import { accountConfigOptionsFactory } from './utils/factory-utils'; -import { AuthenticationFlowGuard } from './guards/authentication-flow.guard'; -import { ForgotPasswordComponent } from './components/forgot-password/forgot-password.component'; -import { ResetPasswordComponent } from './components/reset-password/reset-password.component'; -import { UiExtensionsModule } from '@abp/ng.theme.shared/extensions'; -import { ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS } from './tokens/extensions.token'; -import { AccountExtensionsGuard } from './guards/extensions.guard'; -import { HalfRowComponent } from './components/personal-settings/half-row/half-row.component'; +import {CoreModule, LazyModuleFactory} from '@abp/ng.core'; +import {ThemeSharedModule} from '@abp/ng.theme.shared'; +import {ModuleWithProviders, NgModule, NgModuleFactory} from '@angular/core'; +import {NgbDropdownModule} from '@ng-bootstrap/ng-bootstrap'; +import {NgxValidateCoreModule} from '@ngx-validate/core'; +import {AccountRoutingModule} from './account-routing.module'; +import {ChangePasswordComponent} from './components/change-password/change-password.component'; +import {LoginComponent} from './components/login/login.component'; +import {ManageProfileComponent} from './components/manage-profile/manage-profile.component'; +import {PersonalSettingsComponent} from './components/personal-settings/personal-settings.component'; +import {RegisterComponent} from './components/register/register.component'; +import {AccountConfigOptions} from './models/config-options'; +import {ACCOUNT_CONFIG_OPTIONS} from './tokens/config-options.token'; +import {accountConfigOptionsFactory} from './utils/factory-utils'; +import {AuthenticationFlowGuard} from './guards/authentication-flow.guard'; +import {ForgotPasswordComponent} from './components/forgot-password/forgot-password.component'; +import {ResetPasswordComponent} from './components/reset-password/reset-password.component'; +import {UiExtensionsModule} from '@abp/ng.theme.shared/extensions'; +import {ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS} from './tokens/extensions.token'; +import {AccountExtensionsGuard} from './guards/extensions.guard'; +import {PersonalSettingsHalfRowComponent} from './components/personal-settings/personal-settings-half-row.component'; + const declarations = [ LoginComponent, RegisterComponent, @@ -27,7 +28,7 @@ const declarations = [ PersonalSettingsComponent, ForgotPasswordComponent, ResetPasswordComponent, - HalfRowComponent, + PersonalSettingsHalfRowComponent, ]; @NgModule({ @@ -48,7 +49,7 @@ export class AccountModule { ngModule: AccountModule, providers: [ AuthenticationFlowGuard, - { provide: ACCOUNT_CONFIG_OPTIONS, useValue: options }, + {provide: ACCOUNT_CONFIG_OPTIONS, useValue: options}, { provide: 'ACCOUNT_OPTIONS', useFactory: accountConfigOptionsFactory, diff --git a/npm/ng-packs/packages/account/src/lib/components/index.ts b/npm/ng-packs/packages/account/src/lib/components/index.ts index 098ee8a202..d74263b052 100644 --- a/npm/ng-packs/packages/account/src/lib/components/index.ts +++ b/npm/ng-packs/packages/account/src/lib/components/index.ts @@ -4,4 +4,5 @@ export * from './login/login.component'; export * from './manage-profile/manage-profile.component'; export * from './register/register.component'; export * from './personal-settings/personal-settings.component'; +export * from './personal-settings/personal-settings-half-row.component'; export * from './reset-password/reset-password.component'; diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/half-row/half-row.component.ts b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts similarity index 91% rename from npm/ng-packs/packages/account/src/lib/components/personal-settings/half-row/half-row.component.ts rename to npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts index a0f0ead029..a1086a24a2 100644 --- a/npm/ng-packs/packages/account/src/lib/components/personal-settings/half-row/half-row.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts @@ -3,7 +3,7 @@ import {FORM_PROP_DATA_STREAM, FormProp} from "@abp/ng.theme.shared/extensions"; import {ControlContainer, FormGroup, FormGroupDirective} from "@angular/forms"; @Component({ - selector: 'abp-half-row', + selector: 'abp-personal-settings-half-row', template: `
@@ -18,7 +18,7 @@ import {ControlContainer, FormGroup, FormGroupDirective} from "@angular/forms"; viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] }) -export class HalfRowComponent { +export class PersonalSettingsHalfRowComponent { public displayName: string; public name: string; public id: string; diff --git a/npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts b/npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts index d99401ecf2..0e9e06f020 100644 --- a/npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts +++ b/npm/ng-packs/packages/account/src/lib/defaults/default-personal-settings-form-props.ts @@ -1,7 +1,7 @@ import {ePropType, FormProp} from "@abp/ng.theme.shared/extensions"; import {UpdateProfileDto} from "@abp/ng.account.core/proxy"; import {Validators} from "@angular/forms"; - import {HalfRowComponent} from "../components/personal-settings/half-row/half-row.component"; + import {PersonalSettingsHalfRowComponent} from "../components/personal-settings/personal-settings-half-row.component"; const { maxLength, required, email } = Validators; export const DEFAULT_PERSONAL_SETTINGS_UPDATE_FORM_PROPS = FormProp.createMany([ @@ -18,7 +18,7 @@ export const DEFAULT_PERSONAL_SETTINGS_UPDATE_FORM_PROPS = FormProp.createMany [maxLength(64)], - template:HalfRowComponent, + template:PersonalSettingsHalfRowComponent, className:"d-inline-block w-50" }, { @@ -28,7 +28,7 @@ export const DEFAULT_PERSONAL_SETTINGS_UPDATE_FORM_PROPS = FormProp.createMany [maxLength(64)], className:"d-inline-block w-50 ps-4", - template:HalfRowComponent + template:PersonalSettingsHalfRowComponent }, { type: ePropType.String, From 9f2ee34ae946845deead42d0ffb254e3bccd6cd7 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Tue, 16 Aug 2022 17:53:40 +0300 Subject: [PATCH 08/76] Add EXTENSIBLE_FORM_VIEW_PROVIDER Token --- .../personal-settings-half-row.component.ts | 7 +++---- .../extensible-form/extensible-form.component.ts | 1 - .../src/lib/tokens/extensible-form-view-provider.token.ts | 3 +++ .../packages/theme-shared/extensions/src/public-api.ts | 1 + 4 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensible-form-view-provider.token.ts diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts index a1086a24a2..8629433e02 100644 --- a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts @@ -1,6 +1,6 @@ import {Component, Inject} from '@angular/core'; -import {FORM_PROP_DATA_STREAM, FormProp} from "@abp/ng.theme.shared/extensions"; -import {ControlContainer, FormGroup, FormGroupDirective} from "@angular/forms"; +import {FORM_PROP_DATA_STREAM, FormProp, EXTENSIBLE_FORM_VIEW_PROVIDER} from "@abp/ng.theme.shared/extensions"; +import {FormGroup} from "@angular/forms"; @Component({ selector: 'abp-personal-settings-half-row', @@ -15,8 +15,7 @@ import {ControlContainer, FormGroup, FormGroupDirective} from "@angular/forms";
`, styles: [], - viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] - + viewProviders: [EXTENSIBLE_FORM_VIEW_PROVIDER] }) export class PersonalSettingsHalfRowComponent { public displayName: string; diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts index 83d17b9f0b..2086e3c818 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form.component.ts @@ -64,4 +64,3 @@ export class ExtensibleFormComponent { } -export const ExtensibleFormViewProvider = { provide: ControlContainer, useExisting: FormGroupDirective } diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensible-form-view-provider.token.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensible-form-view-provider.token.ts new file mode 100644 index 0000000000..9db2949731 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensible-form-view-provider.token.ts @@ -0,0 +1,3 @@ +import { ControlContainer, FormGroupDirective } from "@angular/forms"; + +export const EXTENSIBLE_FORM_VIEW_PROVIDER = { provide: ControlContainer, useExisting: FormGroupDirective } diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/public-api.ts b/npm/ng-packs/packages/theme-shared/extensions/src/public-api.ts index b19f8eb0d9..f786eb4ac8 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/public-api.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/public-api.ts @@ -64,6 +64,7 @@ export { export * from './lib/pipes/create-injector.pipe'; export * from './lib/services/extensions.service'; export * from './lib/tokens/extensions.token'; +export * from './lib/tokens/extensible-form-view-provider.token'; export * from './lib/ui-extensions.module'; export * from './lib/utils/actions.util'; export * from './lib/utils/form-props.util'; From dde4e9df46997261beadf1f61362d5806a332ec9 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Wed, 17 Aug 2022 17:22:30 +0300 Subject: [PATCH 09/76] add data record as token on Extensible-form-prop --- .../extensible-form-prop.component.ts | 12 ++++++++---- .../extensions/src/lib/tokens/extensions.token.ts | 4 +++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts index a7a7d22708..7fe8b4fb37 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts @@ -1,3 +1,4 @@ +import { FORM_PROP, FORM_PROP_DATA } from './../../tokens/extensions.token'; import {ABP, AbpValidators, ConfigStateService, TrackByService} from '@abp/ng.core'; import { AfterViewInit, @@ -30,8 +31,7 @@ import {FormProp} from '../../models/form-props'; import {PropData} from '../../models/props'; import {selfFactory} from '../../utils/factory.util'; import {addTypeaheadTextSuffix} from '../../utils/typeahead.util'; -import {FORM_PROP_DATA_STREAM} from "../../tokens/extensions.token"; - + @Component({ selector: 'abp-extensible-form-prop', templateUrl: './extensible-form-prop.component.html', @@ -181,16 +181,20 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { } } - ngOnChanges({prop}: SimpleChanges) { + ngOnChanges({prop,data}: SimpleChanges) { const currentProp = prop?.currentValue as FormProp; const {options, readonly, disabled, validators, template} = currentProp || {}; if (template) { this.injectorForCustomComponent = Injector.create({ providers: [ { - provide: FORM_PROP_DATA_STREAM, + provide: FORM_PROP, useValue: currentProp }, + { + provide: FORM_PROP_DATA, + useValue: (data?.currentValue as PropData)?.record + }, { provide: ControlContainer, useExisting: FormGroupDirective } ], parent: this.injector, diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensions.token.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensions.token.ts index 28f26317d8..0a58566fcf 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensions.token.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/tokens/extensions.token.ts @@ -4,6 +4,7 @@ import { ExtensionsService } from '../services/extensions.service'; import { Observable } from 'rxjs'; import { ePropType } from '../enums/props.enum'; import {FormProp} from "../models/form-props"; +import { PropData } from '../models/props'; export const EXTENSIONS_IDENTIFIER = new InjectionToken('EXTENSIONS_IDENTIFIER'); export type ActionKeys = Extract<'entityActions' | 'toolbarActions', keyof ExtensionsService>; @@ -26,4 +27,5 @@ export const ENTITY_PROP_TYPE_CLASSES = new InjectionToken( }, ); -export const FORM_PROP_DATA_STREAM = new InjectionToken('FORM_PROP_DATA_STREAM'); +export const EXTENSIONS_FORM_PROP = new InjectionToken('EXTENSIONS_FORM_PROP'); +export const EXTENSIONS_FORM_PROP_DATA = new InjectionToken('EXTENSIONS_FORM_PROP_DATA'); From eb0405bc76e985dcae9bec5746fff718a1b20408 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Fri, 19 Aug 2022 15:17:39 +0300 Subject: [PATCH 10/76] Add PropData on ExtensibleForm Template --- .../personal-settings-half-row.component.ts | 4 ++-- .../extensible-form/extensible-form-prop.component.ts | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts index 8629433e02..c0069ecd9e 100644 --- a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings-half-row.component.ts @@ -1,5 +1,5 @@ import {Component, Inject} from '@angular/core'; -import {FORM_PROP_DATA_STREAM, FormProp, EXTENSIBLE_FORM_VIEW_PROVIDER} from "@abp/ng.theme.shared/extensions"; +import {EXTENSIONS_FORM_PROP, FormProp, EXTENSIBLE_FORM_VIEW_PROVIDER} from "@abp/ng.theme.shared/extensions"; import {FormGroup} from "@angular/forms"; @Component({ @@ -23,7 +23,7 @@ export class PersonalSettingsHalfRowComponent { public id: string; public formGroup: FormGroup - constructor(@Inject(FORM_PROP_DATA_STREAM) private propData: FormProp) { + constructor(@Inject(EXTENSIONS_FORM_PROP) private propData: FormProp) { this.displayName = propData.displayName this.name = propData.name this.id = propData.id diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts index 7fe8b4fb37..e9aa694d1f 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts @@ -1,4 +1,4 @@ -import { FORM_PROP, FORM_PROP_DATA } from './../../tokens/extensions.token'; +import { EXTENSIONS_FORM_PROP_DATA, EXTENSIONS_FORM_PROP } from './../../tokens/extensions.token'; import {ABP, AbpValidators, ConfigStateService, TrackByService} from '@abp/ng.core'; import { AfterViewInit, @@ -31,7 +31,7 @@ import {FormProp} from '../../models/form-props'; import {PropData} from '../../models/props'; import {selfFactory} from '../../utils/factory.util'; import {addTypeaheadTextSuffix} from '../../utils/typeahead.util'; - + @Component({ selector: 'abp-extensible-form-prop', templateUrl: './extensible-form-prop.component.html', @@ -188,12 +188,12 @@ export class ExtensibleFormPropComponent implements OnChanges, AfterViewInit { this.injectorForCustomComponent = Injector.create({ providers: [ { - provide: FORM_PROP, + provide: EXTENSIONS_FORM_PROP, useValue: currentProp }, { - provide: FORM_PROP_DATA, - useValue: (data?.currentValue as PropData)?.record + provide: EXTENSIONS_FORM_PROP_DATA, + useValue: (data?.currentValue as PropData)?.record }, { provide: ControlContainer, useExisting: FormGroupDirective } ], From 8cc3ece256a775bee78c86979a46b20cc66e160a Mon Sep 17 00:00:00 2001 From: Salih Date: Fri, 19 Aug 2022 15:31:32 +0300 Subject: [PATCH 11/76] Added project column --- .../Volo/Docs/Admin/Documents/DocumentDto.cs | 2 + .../DocsAdminApplicationAutoMapperProfile.cs | 3 +- .../Pages/Docs/Admin/Documents/Index.cshtml | 1 + .../Pages/Docs/Admin/Documents/index.js | 4 ++ .../Docs/Documents/DocumentWithoutContent.cs | 2 + .../Documents/EFCoreDocumentRepository.cs | 45 +++++++++--------- .../Docs/Documents/MongoDocumentRepository.cs | 47 ++++++++++--------- 7 files changed, 59 insertions(+), 45 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/DocumentDto.cs b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/DocumentDto.cs index c415efa860..b574870fd8 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/DocumentDto.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/DocumentDto.cs @@ -8,6 +8,8 @@ namespace Volo.Docs.Admin.Documents public class DocumentDto : EntityDto { public virtual Guid ProjectId { get; set; } + + public virtual string ProjectName { get; set; } public virtual string Name { get; set; } diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/DocsAdminApplicationAutoMapperProfile.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/DocsAdminApplicationAutoMapperProfile.cs index 86e6d46e0c..eaeb59cabb 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/DocsAdminApplicationAutoMapperProfile.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/DocsAdminApplicationAutoMapperProfile.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Volo.Abp.AutoMapper; using Volo.Docs.Admin.Documents; using Volo.Docs.Admin.Projects; using Volo.Docs.Documents; @@ -11,7 +12,7 @@ namespace Volo.Docs.Admin public DocsAdminApplicationAutoMapperProfile() { CreateMap(); - CreateMap(); + CreateMap().Ignore(x => x.ProjectName); CreateMap(); } } diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml index 738327def9..776d504395 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml @@ -183,6 +183,7 @@ @L["Actions"] + @L["ProjectName"] @L["Name"] @L["Version"] @L["LanguageCode"] diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js index 5f4dc9b8d7..d85676e3f3 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js @@ -79,6 +79,10 @@ $(function () { ], }, }, + { + target: 0, + data: 'projectName', + }, { target: 1, data: 'name', diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentWithoutContent.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentWithoutContent.cs index cde44614ae..4ef9c0e232 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentWithoutContent.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentWithoutContent.cs @@ -7,6 +7,8 @@ namespace Volo.Docs.Documents public Guid Id { get; set; } public virtual Guid ProjectId { get; set; } + + public virtual string ProjectName { get; set; } public virtual string Name { get; set; } diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs index 7656975f16..1de28f537c 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs @@ -67,23 +67,21 @@ namespace Volo.Docs.Documents int skipCount = 0, CancellationToken cancellationToken = default) { - var query = ApplyFilterForGetAll( + var query =await ApplyFilterForGetAll( await GetDbSetAsync(), projectId: projectId, name: name, version: version, languageCode: languageCode, - format: format, fileName: fileName, + format: format, creationTimeMin: creationTimeMin, creationTimeMax: creationTimeMax, lastUpdatedTimeMin: lastUpdatedTimeMin, lastUpdatedTimeMax: lastUpdatedTimeMax, lastSignificantUpdateTimeMin: lastSignificantUpdateTimeMin, lastSignificantUpdateTimeMax: lastSignificantUpdateTimeMax, - lastCachedTimeMin: lastCachedTimeMin, - lastCachedTimeMax: lastCachedTimeMax - ); + lastCachedTimeMin: lastCachedTimeMin, lastCachedTimeMax: lastCachedTimeMax); query = query.OrderBy(string.IsNullOrWhiteSpace(sorting) ? nameof(Document.Name) : sorting); return await query.PageBy(skipCount, maxResultCount).ToListAsync(GetCancellationToken(cancellationToken)); @@ -109,23 +107,21 @@ namespace Volo.Docs.Documents int skipCount = 0, CancellationToken cancellationToken = default) { - var query = ApplyFilterForGetAll( + var query = await ApplyFilterForGetAll( await GetDbSetAsync(), projectId: projectId, name: name, version: version, languageCode: languageCode, - format: format, fileName: fileName, + format: format, creationTimeMin: creationTimeMin, creationTimeMax: creationTimeMax, lastUpdatedTimeMin: lastUpdatedTimeMin, lastUpdatedTimeMax: lastUpdatedTimeMax, lastSignificantUpdateTimeMin: lastSignificantUpdateTimeMin, lastSignificantUpdateTimeMax: lastSignificantUpdateTimeMax, - lastCachedTimeMin: lastCachedTimeMin, - lastCachedTimeMax: lastCachedTimeMax - ); + lastCachedTimeMin: lastCachedTimeMin, lastCachedTimeMax: lastCachedTimeMax); return await query.LongCountAsync(GetCancellationToken(cancellationToken)); } @@ -153,7 +149,7 @@ namespace Volo.Docs.Documents return await (await GetDbSetAsync()).Where(x => x.Id == id).SingleAsync(cancellationToken: GetCancellationToken(cancellationToken)); } - protected virtual IQueryable ApplyFilterForGetAll( + protected virtual async Task> ApplyFilterForGetAll( IQueryable query, Guid? projectId, string name, @@ -200,19 +196,24 @@ namespace Volo.Docs.Documents d => d.LastCachedTime.Date >= lastCachedTimeMin.Value.Date) .WhereIf(lastCachedTimeMax.HasValue, d => d.LastCachedTime.Date <= lastCachedTimeMax.Value.Date) + .Join( (await GetDbContextAsync()).Projects, + d => d.ProjectId, + p => p.Id, + (d, p) => new { d, p }) .Select(x => new DocumentWithoutContent { - Id = x.Id, - ProjectId = x.ProjectId, - Name = x.Name, - Version = x.Version, - LanguageCode = x.LanguageCode, - FileName = x.FileName, - Format = x.Format, - CreationTime = x.CreationTime, - LastUpdatedTime = x.LastUpdatedTime, - LastSignificantUpdateTime = x.LastSignificantUpdateTime, - LastCachedTime = x.LastCachedTime + Id = x.d.Id, + ProjectId = x.d.ProjectId, + ProjectName = x.p.Name, + Name = x.d.Name, + Version = x.d.Version, + LanguageCode = x.d.LanguageCode, + FileName = x.d.FileName, + Format = x.d.Format, + CreationTime = x.d.CreationTime, + LastUpdatedTime = x.d.LastUpdatedTime, + LastSignificantUpdateTime = x.d.LastSignificantUpdateTime, + LastCachedTime = x.d.LastCachedTime }); } } diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs index 0086624d43..88c7514ae4 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs @@ -88,22 +88,21 @@ namespace Volo.Docs.Documents { return await - ApplyFilterForGetAll( + (await ApplyFilterForGetAll( await GetMongoQueryableAsync(cancellationToken), projectId: projectId, name: name, version: version, languageCode: languageCode, - format: format, fileName: fileName, + format: format, creationTimeMin: creationTimeMin, creationTimeMax: creationTimeMax, lastUpdatedTimeMin: lastUpdatedTimeMin, lastUpdatedTimeMax: lastUpdatedTimeMax, lastSignificantUpdateTimeMin: lastSignificantUpdateTimeMin, lastSignificantUpdateTimeMax: lastSignificantUpdateTimeMax, - lastCachedTimeMin: lastCachedTimeMin, - lastCachedTimeMax: lastCachedTimeMax) + lastCachedTimeMin: lastCachedTimeMin, lastCachedTimeMax: lastCachedTimeMax)) .OrderBy(string.IsNullOrWhiteSpace(sorting) ? "name asc" : sorting).As>() .PageBy>(skipCount, maxResultCount) .ToListAsync(GetCancellationToken(cancellationToken)); @@ -132,22 +131,21 @@ namespace Volo.Docs.Documents return await - ApplyFilterForGetAll( + (await ApplyFilterForGetAll( await GetMongoQueryableAsync(cancellationToken), projectId: projectId, name: name, version: version, languageCode: languageCode, - format: format, fileName: fileName, + format: format, creationTimeMin: creationTimeMin, creationTimeMax: creationTimeMax, lastUpdatedTimeMin: lastUpdatedTimeMin, lastUpdatedTimeMax: lastUpdatedTimeMax, lastSignificantUpdateTimeMin: lastSignificantUpdateTimeMin, lastSignificantUpdateTimeMax: lastSignificantUpdateTimeMax, - lastCachedTimeMin: lastCachedTimeMin, - lastCachedTimeMax: lastCachedTimeMax) + lastCachedTimeMin: lastCachedTimeMin, lastCachedTimeMax: lastCachedTimeMax)) .OrderBy(string.IsNullOrWhiteSpace(sorting) ? "name asc" : sorting).As>() .PageBy>(skipCount, maxResultCount) .LongCountAsync(GetCancellationToken(cancellationToken)); @@ -158,7 +156,7 @@ namespace Volo.Docs.Documents return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id == id).SingleAsync(GetCancellationToken(cancellationToken)); } - protected virtual IMongoQueryable ApplyFilterForGetAll( + protected virtual async Task> ApplyFilterForGetAll( IMongoQueryable query, Guid? projectId, string name, @@ -240,20 +238,25 @@ namespace Volo.Docs.Documents { query = query.Where(d => d.LastCachedTime.Date <= lastCachedTimeMax.Value.Date); } - - return query.Select(x => new DocumentWithoutContent + var join = query.Join( + (await GetDbContextAsync(cancellationToken)).Projects, + d => d.ProjectId, + p => p.Id, + (d, p) => new { Document = d, Project = p }); + return join.Select(x => new DocumentWithoutContent { - Id = x.Id, - ProjectId = x.ProjectId, - Name = x.Name, - Version = x.Version, - LanguageCode = x.LanguageCode, - FileName = x.FileName, - Format = x.Format, - CreationTime = x.CreationTime, - LastUpdatedTime = x.LastUpdatedTime, - LastSignificantUpdateTime = x.LastSignificantUpdateTime, - LastCachedTime = x.LastCachedTime + Id = x.Document.Id, + ProjectId = x.Document.ProjectId, + ProjectName = x.Project.Name, + Name = x.Document.Name, + Version = x.Document.Version, + LanguageCode = x.Document.LanguageCode, + FileName = x.Document.FileName, + Format = x.Document.Format, + CreationTime = x.Document.CreationTime, + LastUpdatedTime = x.Document.LastUpdatedTime, + LastSignificantUpdateTime = x.Document.LastSignificantUpdateTime, + LastCachedTime = x.Document.LastCachedTime }); } } From 5664a988a109fc50c0d1428cc1dc33ef7b28c289 Mon Sep 17 00:00:00 2001 From: Salih Date: Fri, 19 Aug 2022 15:39:06 +0300 Subject: [PATCH 12/76] dash removed --- .../Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml index 776d504395..2fab21f615 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml @@ -111,7 +111,6 @@ name="LastUpdatedTimeMin" class="form-control datepicker" placeholder="@L["StartDate"].Value"> - - Date: Fri, 19 Aug 2022 15:59:42 +0300 Subject: [PATCH 13/76] search button moved next to language code input --- .../Pages/Docs/Admin/Documents/Index.cshtml | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml index 2fab21f615..36e0c82462 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml @@ -34,7 +34,7 @@ - +
@L["Project"].Value
@@ -45,7 +45,7 @@
- +
@L["Name"].Value
@@ -56,7 +56,7 @@
- +
@L["Version"].Value
@@ -67,17 +67,19 @@
- +
@L["LanguageCode"].Value
+ id="LanguageCode" + name="LanguageCode" + class="form-control">
- + + + @L["AdvancedFilters"] @@ -85,7 +87,7 @@
-
+