Skip to content

Instantly share code, notes, and snippets.

@AvocadoVenom
AvocadoVenom / app.module.ts
Created October 3, 2019 22:13
Overlay Loading Directive > App Module
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { OverlayModule } from '@angular/cdk/overlay';
import { MatCardModule, MatButtonModule, MatProgressBarModule } from '@angular/material';
import { LoaderComponent } from './loader/loader.component';
@AvocadoVenom
AvocadoVenom / dynamic-overlay-container.service.ts
Created October 3, 2019 22:15
Overlay Loading Directive > Dynamic Overlay Container Service
import { Injectable } from '@angular/core';
import { OverlayContainer } from '@angular/cdk/overlay';
@Injectable({
providedIn: 'root'
})
export class DynamicOverlayContainer extends OverlayContainer {
public setContainerElement(containerElement: HTMLElement): void {
this._containerElement = containerElement;
}
@AvocadoVenom
AvocadoVenom / dynamic-overlay.ts
Created October 3, 2019 22:16
Overlay Loading Directive > Dynamic Overlay Service
import {
Overlay,
OverlayKeyboardDispatcher,
OverlayPositionBuilder,
ScrollStrategyOptions,
OverlayRef
} from '@angular/cdk/overlay';
import {
ComponentFactoryResolver,
Inject,
@AvocadoVenom
AvocadoVenom / table-basic-example.component.ts
Created October 3, 2019 22:17
Overlay Loading Directive > Table Basic Example Component
import { Component, ViewChild, ElementRef } from '@angular/core';
import { DynamicOverlay } from '../dynamic-overlay';
import { MatTable } from '@angular/material';
import { ComponentPortal } from '@angular/cdk/portal';
import { LoaderComponent } from '../loader/loader.component';
export interface PeriodicElement {
name: string;
position: number;
weight: number;
@AvocadoVenom
AvocadoVenom / loader.config.ts
Created October 6, 2019 20:30
Overlay Loading DIrective > Loader Config
export class LoaderData {
title: string;
loaderType: LoaderType;
}
export type LoaderType = 'Spinner' | 'ProgressBar';
@AvocadoVenom
AvocadoVenom / loader.component.ts
Created October 6, 2019 20:32
Overlay Loading Directive > Loader Component with config
import { Component } from '@angular/core';
import { LoaderData } from './loader.config';
@Component({
selector: 'app-loader',
template: `
<mat-card>
<mat-card-header>
<mat-card-title>
@AvocadoVenom
AvocadoVenom / overlay-loading.directive.ts
Created October 6, 2019 20:36
Overlay Loading Drective > Directive using injector
import { Directive, ElementRef, OnInit, Input, Injector } from '@angular/core';
import { OverlayRef } from '@angular/cdk/overlay';
import { Observable } from 'rxjs';
import { ComponentPortal, PortalInjector } from '@angular/cdk/portal';
import { DynamicOverlay } from './dynamic-overlay';
import { LoaderComponent } from './loader/loader.component';
import { LoaderData } from './loader/loader.config';
@Directive({
@AvocadoVenom
AvocadoVenom / app.component.ts
Created October 6, 2019 20:44
Overlay Loading Directive > App Component with Loader Config
import { Component } from '@angular/core';
import { Observable, interval } from 'rxjs';
import { map } from 'rxjs/operators';
import { LoaderData } from './loader/loader.config';
@Component({
selector: 'app-root',
template: `
<mat-card>
<mat-card-header>
@AvocadoVenom
AvocadoVenom / schematic.package.json
Created December 10, 2019 21:42
Angular Schematics - npm script build watch
{
// ...
"scripts": {
"build": "tsc -p tsconfig.json",
"build:local": "tsc -p tsconfig.json --watch",
"test": "npm run build && jasmine src/**/*_spec.js"
},
// ...
}
@AvocadoVenom
AvocadoVenom / initial.index.ts
Last active December 10, 2019 23:15
Angular schematic : Initial function
export function scaffoldSchematics(options: any): Rule {
return (tree: Tree, _context: SchematicContext) => {
return tree;
};
}