Browse Source

add createInjector pipe

pull/12956/head
muhammedaltug 4 years ago
parent
commit
8b8dced2b9
  1. 116
      npm/ng-packs/packages/core/src/lib/core.module.ts
  2. 1
      npm/ng-packs/packages/core/src/lib/pipes/index.ts
  3. 14
      npm/ng-packs/packages/core/src/lib/pipes/pipe-function.pipe.ts
  4. 4
      npm/ng-packs/packages/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts
  5. 5
      npm/ng-packs/packages/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.html
  6. 28
      npm/ng-packs/packages/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.ts
  7. 8
      npm/ng-packs/packages/theme-shared/extensions/src/lib/models/toolbar-actions.ts
  8. 29
      npm/ng-packs/packages/theme-shared/extensions/src/lib/pipes/create-injector.pipe.ts
  9. 3
      npm/ng-packs/packages/theme-shared/extensions/src/lib/ui-extensions.module.ts
  10. 1
      npm/ng-packs/packages/theme-shared/extensions/src/public-api.ts

116
npm/ng-packs/packages/core/src/lib/core.module.ts

@ -1,5 +1,5 @@
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { HttpClientModule, HttpClientXsrfModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { HTTP_INTERCEPTORS, HttpClientModule, HttpClientXsrfModule } from '@angular/common/http';
import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core'; import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router'; import { RouterModule } from '@angular/router';
@ -29,7 +29,7 @@ import { LocaleProvider } from './providers/locale.provider';
import { LocalizationService } from './services/localization.service'; import { LocalizationService } from './services/localization.service';
import { oAuthStorage } from './strategies/auth-flow.strategy'; import { oAuthStorage } from './strategies/auth-flow.strategy';
import { localizationContributor, LOCALIZATIONS } from './tokens/localization.token'; import { localizationContributor, LOCALIZATIONS } from './tokens/localization.token';
import { coreOptionsFactory, CORE_OPTIONS } from './tokens/options.token'; import { CORE_OPTIONS, coreOptionsFactory } from './tokens/options.token';
import { TENANT_KEY } from './tokens/tenant-key.token'; import { TENANT_KEY } from './tokens/tenant-key.token';
import { noop } from './utils/common-utils'; import { noop } from './utils/common-utils';
import './utils/date-extensions'; import './utils/date-extensions';
@ -37,7 +37,6 @@ import { getInitialData, localeInitializer } from './utils/initial-utils';
import { ShortDateTimePipe } from './pipes/short-date-time.pipe'; import { ShortDateTimePipe } from './pipes/short-date-time.pipe';
import { ShortTimePipe } from './pipes/short-time.pipe'; import { ShortTimePipe } from './pipes/short-time.pipe';
import { ShortDatePipe } from './pipes/short-date.pipe'; import { ShortDatePipe } from './pipes/short-date.pipe';
import { PipeFunction } from "./pipes";
export function storageFactory(): OAuthStorage { export function storageFactory(): OAuthStorage {
return oAuthStorage; return oAuthStorage;
@ -50,63 +49,60 @@ export function storageFactory(): OAuthStorage {
* This module will be imported and exported by all others. * This module will be imported and exported by all others.
*/ */
@NgModule({ @NgModule({
exports: [ exports: [
CommonModule, CommonModule,
HttpClientModule, HttpClientModule,
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
RouterModule, RouterModule,
LocalizationModule, LocalizationModule,
AbstractNgModelComponent, AbstractNgModelComponent,
AutofocusDirective, AutofocusDirective,
DynamicLayoutComponent, DynamicLayoutComponent,
ForDirective, ForDirective,
FormSubmitDirective, FormSubmitDirective,
InitDirective, InitDirective,
InputEventDebounceDirective, InputEventDebounceDirective,
PermissionDirective, PermissionDirective,
ReplaceableRouteContainerComponent, ReplaceableRouteContainerComponent,
ReplaceableTemplateDirective, ReplaceableTemplateDirective,
RouterOutletComponent, RouterOutletComponent,
SortPipe, SortPipe,
StopPropagationDirective, StopPropagationDirective,
ToInjectorPipe, ToInjectorPipe,
ShortDateTimePipe, ShortDateTimePipe,
ShortTimePipe, ShortTimePipe,
ShortDatePipe, ShortDatePipe,
PipeFunction ],
], imports: [
imports: [ OAuthModule,
OAuthModule, CommonModule,
CommonModule, HttpClientModule,
HttpClientModule, FormsModule,
FormsModule, ReactiveFormsModule,
ReactiveFormsModule, RouterModule,
RouterModule, LocalizationModule,
LocalizationModule, ],
], declarations: [
declarations: [ AbstractNgModelComponent,
AbstractNgModelComponent, AutofocusDirective,
AutofocusDirective, DynamicLayoutComponent,
DynamicLayoutComponent, ForDirective,
ForDirective, FormSubmitDirective,
FormSubmitDirective, InitDirective,
InitDirective, InputEventDebounceDirective,
InputEventDebounceDirective, PermissionDirective,
PermissionDirective, ReplaceableRouteContainerComponent,
ReplaceableRouteContainerComponent, ReplaceableTemplateDirective,
ReplaceableTemplateDirective, RouterOutletComponent,
RouterOutletComponent, SortPipe,
SortPipe, StopPropagationDirective,
StopPropagationDirective, ToInjectorPipe,
ToInjectorPipe, ShortDateTimePipe,
ShortDateTimePipe, ShortTimePipe,
ShortTimePipe, ShortDatePipe,
ShortDatePipe, ],
PipeFunction providers: [LocalizationPipe],
],
providers: [LocalizationPipe]
}) })
export class BaseCoreModule {} export class BaseCoreModule {}

1
npm/ng-packs/packages/core/src/lib/pipes/index.ts

@ -4,4 +4,3 @@ export * from './to-injector.pipe';
export * from './short-date.pipe'; export * from './short-date.pipe';
export * from './short-time.pipe'; export * from './short-time.pipe';
export * from './short-date-time.pipe'; export * from './short-date-time.pipe';
export * from './pipe-function.pipe';

14
npm/ng-packs/packages/core/src/lib/pipes/pipe-function.pipe.ts

@ -1,14 +0,0 @@
import {Pipe, PipeTransform} from "@angular/core";
@Pipe({
name: 'pipeFunction'
})
export class PipeFunction implements PipeTransform {
public transform(value: any, handler: (value: any) => any, context?: any): any {
if (context) {
return handler.call(context, value);
}
return handler(value);
}
}

4
npm/ng-packs/packages/theme-shared/extensions/src/lib/components/abstract-actions/abstract-actions.component.ts

@ -2,6 +2,7 @@ import { Directive, Injector, Input } from '@angular/core';
import { ActionData, ActionList } from '../../models/actions'; import { ActionData, ActionList } from '../../models/actions';
import { ExtensionsService } from '../../services/extensions.service'; import { ExtensionsService } from '../../services/extensions.service';
import { EXTENSIONS_ACTION_TYPE, EXTENSIONS_IDENTIFIER } from '../../tokens/extensions.token'; import { EXTENSIONS_ACTION_TYPE, EXTENSIONS_IDENTIFIER } from '../../tokens/extensions.token';
import { InferredData, InferredRecord } from '../../models/toolbar-actions';
// Fix for https://github.com/angular/angular/issues/23904 // Fix for https://github.com/angular/angular/issues/23904
// @dynamic // @dynamic
@ -25,6 +26,3 @@ export abstract class AbstractActionsComponent<L extends ActionList<any>> extend
this.actionList = extensions[type].get(name).actions as unknown as L; this.actionList = extensions[type].get(name).actions as unknown as L;
} }
} }
type InferredData<L> = ActionData<InferredRecord<L>>;
type InferredRecord<L> = L extends ActionList<infer R> ? R : never;

5
npm/ng-packs/packages/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.html

@ -8,7 +8,10 @@
<ng-container *abpPermission="action.permission"> <ng-container *abpPermission="action.permission">
<ng-container *ngIf="action.component as component; else button"> <ng-container *ngIf="action.component as component; else button">
<ng-container <ng-container
*ngComponentOutlet="component; injector: action | pipeFunction: createInjector : this " *ngComponentOutlet="
component;
injector: action | createInjector: data:getInjected
"
></ng-container> ></ng-container>
</ng-container> </ng-container>

28
npm/ng-packs/packages/theme-shared/extensions/src/lib/components/page-toolbar/page-toolbar.component.ts

@ -1,18 +1,6 @@
import { import { ChangeDetectionStrategy, Component, Injector, TrackByFunction } from '@angular/core';
ChangeDetectionStrategy,
Component,
InjectFlags,
InjectionToken,
Injector,
TrackByFunction,
Type,
} from '@angular/core';
import { ToolbarActionList, ToolbarComponent } from '../../models/toolbar-actions'; import { ToolbarActionList, ToolbarComponent } from '../../models/toolbar-actions';
import { import { EXTENSIONS_ACTION_TYPE } from '../../tokens/extensions.token';
EXTENSIONS_ACTION_CALLBACK,
EXTENSIONS_ACTION_DATA,
EXTENSIONS_ACTION_TYPE,
} from '../../tokens/extensions.token';
import { AbstractActionsComponent } from '../abstract-actions/abstract-actions.component'; import { AbstractActionsComponent } from '../abstract-actions/abstract-actions.component';
@Component({ @Component({
@ -34,16 +22,4 @@ export class PageToolbarComponent<R = any> extends AbstractActionsComponent<Tool
constructor(private readonly injector: Injector) { constructor(private readonly injector: Injector) {
super(injector); super(injector);
} }
createInjector(action: ToolbarComponent<R>): Injector {
const get = <T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags) => {
return token === EXTENSIONS_ACTION_DATA
? this.data
: token === EXTENSIONS_ACTION_CALLBACK
? (data = this.data) => action.action(data)
: this.getInjected.call(this.injector, token, notFoundValue, flags);
};
return { get };
}
} }

8
npm/ng-packs/packages/theme-shared/extensions/src/lib/models/toolbar-actions.ts

@ -3,11 +3,11 @@ import { O } from 'ts-toolbelt';
import { import {
Action, Action,
ActionContributorCallback, ActionContributorCallback,
ActionContributorCallbacks, ActionContributorCallbacks, ActionData,
ActionList, ActionList,
Actions, Actions,
ActionsFactory, ActionsFactory
} from './actions'; } from "./actions";
export class ToolbarActionList<R = any> extends ActionList< export class ToolbarActionList<R = any> extends ActionList<
R, R,
@ -77,3 +77,5 @@ export type ToolbarActionContributorCallback<R = any> = ActionContributorCallbac
export type ToolbarActionContributorCallbacks<R = any> = ActionContributorCallbacks< export type ToolbarActionContributorCallbacks<R = any> = ActionContributorCallbacks<
ToolbarActionList<R> ToolbarActionList<R>
>; >;
export type InferredData<L> = ActionData<InferredRecord<L>>;
export type InferredRecord<L> = L extends ActionList<infer R> ? R : never;

29
npm/ng-packs/packages/theme-shared/extensions/src/lib/pipes/create-injector.pipe.ts

@ -0,0 +1,29 @@
import { InjectFlags, InjectionToken, Injector, Pipe, PipeTransform, Type } from '@angular/core';
import { InferredData, ToolbarComponent } from '../models/toolbar-actions';
import {
EXTENSIONS_ACTION_CALLBACK,
EXTENSIONS_ACTION_DATA,
} from '@abp/ng.theme.shared/extensions';
import { ReadonlyActionData } from '../models/actions';
@Pipe({
name: 'createInjector',
})
export class CreateInjectorPipe<R> implements PipeTransform {
constructor(private injector: Injector) {}
public transform(
action: ToolbarComponent<R>,
componentData: ReadonlyActionData<R>,
getInjectedFn: InferredData<R>['getInjected'],
): Injector {
const get = <T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags) => {
return token === EXTENSIONS_ACTION_DATA
? componentData
: token === EXTENSIONS_ACTION_CALLBACK
? (data = componentData) => action.action(data)
: getInjectedFn.call(this.injector, token, notFoundValue, flags);
};
return { get };
}
}

3
npm/ng-packs/packages/theme-shared/extensions/src/lib/ui-extensions.module.ts

@ -16,6 +16,7 @@ import { GridActionsComponent } from './components/grid-actions/grid-actions.com
import { PageToolbarComponent } from './components/page-toolbar/page-toolbar.component'; import { PageToolbarComponent } from './components/page-toolbar/page-toolbar.component';
import { DisabledDirective } from './directives/disabled.directive'; import { DisabledDirective } from './directives/disabled.directive';
import { PropDataDirective } from './directives/prop-data.directive'; import { PropDataDirective } from './directives/prop-data.directive';
import { CreateInjectorPipe } from './pipes';
@NgModule({ @NgModule({
exports: [ exports: [
@ -26,6 +27,7 @@ import { PropDataDirective } from './directives/prop-data.directive';
ExtensibleTableComponent, ExtensibleTableComponent,
PropDataDirective, PropDataDirective,
DisabledDirective, DisabledDirective,
CreateInjectorPipe,
], ],
declarations: [ declarations: [
DateTimePickerComponent, DateTimePickerComponent,
@ -36,6 +38,7 @@ import { PropDataDirective } from './directives/prop-data.directive';
ExtensibleTableComponent, ExtensibleTableComponent,
PropDataDirective, PropDataDirective,
DisabledDirective, DisabledDirective,
CreateInjectorPipe,
], ],
imports: [ imports: [
CoreModule, CoreModule,

1
npm/ng-packs/packages/theme-shared/extensions/src/public-api.ts

@ -61,6 +61,7 @@ export {
ToolbarComponent, ToolbarComponent,
ToolbarComponentOptions, ToolbarComponentOptions,
} from './lib/models/toolbar-actions'; } from './lib/models/toolbar-actions';
export * from './lib/pipes/create-injector.pipe';
export * from './lib/services/extensions.service'; export * from './lib/services/extensions.service';
export * from './lib/tokens/extensions.token'; export * from './lib/tokens/extensions.token';
export * from './lib/ui-extensions.module'; export * from './lib/ui-extensions.module';

Loading…
Cancel
Save