Skip to content

Instantly share code, notes, and snippets.

@dormd
Last active April 12, 2018 13:31
Show Gist options
  • Save dormd/95dea4857e4cbf6fe890d1d2b430bec6 to your computer and use it in GitHub Desktop.
Save dormd/95dea4857e4cbf6fe890d1d2b430bec6 to your computer and use it in GitHub Desktop.
import { downgradeComponent, downgradeInjectable } from '@angular/upgrade/static';
import { FactoryProvider } from '@angular/core';
export interface IComponentUpgradeOptions {
  inputs?: string[],
  outputs?: string[]
}
export interface IHybridHelper {
downgradeComponent(moduleName: string, componentSelector: string, componentClass: any, options?: IComponentUpgradeOptions): IHybridHelper,
downgradeProvider(moduleName: string, providerName: string, providerClass: any): IHybridHelper,
buildProviderForUpgrade(ng1Name: string, ng2Name?: string): FactoryProvider
}
export const HybridHelper: IHybridHelper {
downgradeComponent(moduleNamestring, componentNamestring, componentClassany, options?: IComponentUpgradeOptions)IHybridHelper => {
options = options || {};
const inputs = options.inputs || [];
const outputs = options.outputs || [];
const component = componentClass;
angular.module(moduleName).directive(componentName, downgradeComponent({ 
component, inputs, outputs 
}) as angular.IDirectiveFactory);
return HybridHelper;
},
downgradeProvider(moduleNamestring, providerNamestring, providerClassany)IHybridHelper => {
angular.module(moduleName).factory(providerName, downgradeInjectable(providerClass));
return HybridHelper;
},
buildProviderForUpgrade(ng1Namestring, ng2Name?: string)FactoryProvider => {
ng2Name = ng2Name || ng1Name;
return {
provideng2Name,
useFactorybuildFactoryForUpgradeProvider(ng1Name),
deps['$injector']
   };
}
}
function buildFactoryForUpgradeProvider(ng1Namestring)Function {
   return (injectorany) => injector.get(ng1Name);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment