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 { 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 { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router';
@ -29,7 +29,7 @@ import { LocaleProvider } from './providers/locale.provider';
import { LocalizationService } from './services/localization.service';
import { oAuthStorage } from './strategies/auth-flow.strategy';
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 { noop } from './utils/common-utils';
import './utils/date-extensions';
@ -37,7 +37,6 @@ import { getInitialData, localeInitializer } from './utils/initial-utils';
import { ShortDateTimePipe } from './pipes/short-date-time.pipe';
import { ShortTimePipe } from './pipes/short-time.pipe';
import { ShortDatePipe } from './pipes/short-date.pipe';
import { PipeFunction } from "./pipes";
export function storageFactory(): OAuthStorage {
return oAuthStorage;
@ -50,63 +49,60 @@ export function storageFactory(): OAuthStorage {
* This module will be imported and exported by all others.
*/
@NgModule({
exports: [
CommonModule,
HttpClientModule,
FormsModule,
ReactiveFormsModule,
RouterModule,
LocalizationModule,
AbstractNgModelComponent,
AutofocusDirective,
DynamicLayoutComponent,
ForDirective,
FormSubmitDirective,
InitDirective,
InputEventDebounceDirective,
PermissionDirective,
ReplaceableRouteContainerComponent,
ReplaceableTemplateDirective,
RouterOutletComponent,
SortPipe,
StopPropagationDirective,
ToInjectorPipe,
ShortDateTimePipe,
ShortTimePipe,
ShortDatePipe,
PipeFunction
],
imports: [
OAuthModule,
CommonModule,
HttpClientModule,
FormsModule,
ReactiveFormsModule,
RouterModule,
LocalizationModule,
],
declarations: [
AbstractNgModelComponent,
AutofocusDirective,
DynamicLayoutComponent,
ForDirective,
FormSubmitDirective,
InitDirective,
InputEventDebounceDirective,
PermissionDirective,
ReplaceableRouteContainerComponent,
ReplaceableTemplateDirective,
RouterOutletComponent,
SortPipe,
StopPropagationDirective,
ToInjectorPipe,
ShortDateTimePipe,
ShortTimePipe,
ShortDatePipe,
PipeFunction
],
providers: [LocalizationPipe]
exports: [
CommonModule,
HttpClientModule,
FormsModule,
ReactiveFormsModule,
RouterModule,
LocalizationModule,
AbstractNgModelComponent,
AutofocusDirective,
DynamicLayoutComponent,
ForDirective,
FormSubmitDirective,
InitDirective,
InputEventDebounceDirective,
PermissionDirective,
ReplaceableRouteContainerComponent,
ReplaceableTemplateDirective,
RouterOutletComponent,
SortPipe,
StopPropagationDirective,
ToInjectorPipe,
ShortDateTimePipe,
ShortTimePipe,
ShortDatePipe,
],
imports: [
OAuthModule,
CommonModule,
HttpClientModule,
FormsModule,
ReactiveFormsModule,
RouterModule,
LocalizationModule,
],
declarations: [
AbstractNgModelComponent,
AutofocusDirective,
DynamicLayoutComponent,
ForDirective,
FormSubmitDirective,
InitDirective,
InputEventDebounceDirective,
PermissionDirective,
ReplaceableRouteContainerComponent,
ReplaceableTemplateDirective,
RouterOutletComponent,
SortPipe,
StopPropagationDirective,
ToInjectorPipe,
ShortDateTimePipe,
ShortTimePipe,
ShortDatePipe,
],
providers: [LocalizationPipe],
})
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-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 { ExtensionsService } from '../../services/extensions.service';
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
// @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;
}
}
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 *ngIf="action.component as component; else button">
<ng-container
*ngComponentOutlet="component; injector: action | pipeFunction: createInjector : this "
*ngComponentOutlet="
component;
injector: action | createInjector: data:getInjected
"
></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 {
ChangeDetectionStrategy,
Component,
InjectFlags,
InjectionToken,
Injector,
TrackByFunction,
Type,
} from '@angular/core';
import { ChangeDetectionStrategy, Component, Injector, TrackByFunction } from '@angular/core';
import { ToolbarActionList, ToolbarComponent } from '../../models/toolbar-actions';
import {
EXTENSIONS_ACTION_CALLBACK,
EXTENSIONS_ACTION_DATA,
EXTENSIONS_ACTION_TYPE,
} from '../../tokens/extensions.token';
import { EXTENSIONS_ACTION_TYPE } from '../../tokens/extensions.token';
import { AbstractActionsComponent } from '../abstract-actions/abstract-actions.component';
@Component({
@ -34,16 +22,4 @@ export class PageToolbarComponent<R = any> extends AbstractActionsComponent<Tool
constructor(private readonly injector: 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 {
Action,
ActionContributorCallback,
ActionContributorCallbacks,
ActionContributorCallbacks, ActionData,
ActionList,
Actions,
ActionsFactory,
} from './actions';
ActionsFactory
} from "./actions";
export class ToolbarActionList<R = any> extends ActionList<
R,
@ -77,3 +77,5 @@ export type ToolbarActionContributorCallback<R = any> = ActionContributorCallbac
export type ToolbarActionContributorCallbacks<R = any> = ActionContributorCallbacks<
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 { DisabledDirective } from './directives/disabled.directive';
import { PropDataDirective } from './directives/prop-data.directive';
import { CreateInjectorPipe } from './pipes';
@NgModule({
exports: [
@ -26,6 +27,7 @@ import { PropDataDirective } from './directives/prop-data.directive';
ExtensibleTableComponent,
PropDataDirective,
DisabledDirective,
CreateInjectorPipe,
],
declarations: [
DateTimePickerComponent,
@ -36,6 +38,7 @@ import { PropDataDirective } from './directives/prop-data.directive';
ExtensibleTableComponent,
PropDataDirective,
DisabledDirective,
CreateInjectorPipe,
],
imports: [
CoreModule,

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

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

Loading…
Cancel
Save