Skip to content

Instantly share code, notes, and snippets.

View FFKL's full-sized avatar
🦔
This is The Hedgehog!

Dmitrii Korostelev FFKL

🦔
This is The Hedgehog!
View GitHub Profile
import { Directive, ElementRef, HostListener, Input, Renderer2 } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
export function valueAccessor<T extends new (...args: any[]) => any>(component: T) {
return {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => component),
multi: true
};
}
@FFKL
FFKL / step.components.ts
Created September 11, 2021 09:39
Stepper component
import { ChangeDetectionStrategy, Component, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';
@Component({
selector: 'app-step',
template: '<ng-template><ng-content></ng-content></ng-template>',
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class StepComponent {
@ViewChild(TemplateRef, { static: true }) content!: TemplateRef<any>;
@FFKL
FFKL / machine.js
Last active April 4, 2021 21:32
Generated by XState Viz: https://xstate.js.org/viz
const inputMachine = Machine(
{
id: 'input',
initial: 'pristine',
context: {
message: '',
},
states: {
pristine: {},
editing: {},
// T and E extends checking should be array for primitives support
// See https://mariusschulz.com/blog/conditional-types-in-typescript#distributive-conditional-types
type Exact<T, E> = T[] extends E[]
? E[] extends T[]
? T
: never
: never;
// Primitives
declare function exactStringOrBoolean<T>(input: Exact<T, string | boolean>): void;
@FFKL
FFKL / sorted-array.ts
Created February 27, 2021 22:08
Implementation of SortedArray wrapper. Thanks to @JSMonk
class SortedArray<T> {
static of<T>(array: Array<T>): SortedArray<T> {
return new SortedArray(array);
}
private readonly array: Array<T>;
private constructor(array: Array<T>, sortingWith?: (a: T, b: T) => number) {
this.array = Array.from(array).sort(sortingWith);
}
export interface MultiLanguage {}
export type Constructor<T> = new(...args: any[]) => T;
export type MultiLanguageCtor = Constructor<MultiLanguage>;
export interface TranslationAvailable extends PipeTransform, OnDestroy {
translate: TranslateService;
cd: ChangeDetectorRef;
}
@FFKL
FFKL / file-to-base64.ts
Created February 8, 2021 13:13
Wrap FileReader to Promise
export function convertFileToBase64(file: File): Promise<string> {
return new Promise((resolve, reject) => {
const reader: FileReader = new FileReader();
reader.onload = () => {
if (typeof reader.result === 'string') {
resolve(reader.result);
} else {
reject(new Error(`Reading file result should be base64 string. Result: ${reader.result}`));
}
};
@FFKL
FFKL / color-overlay.scss
Last active August 24, 2020 16:05
Color overlay with background image. `scale-color` - scss function. `$color` - predefined scss variable
div {
background: linear-gradient(0deg, scale-color($color, $alpha: -15%), scale-color($color, $alpha: -15%)), url(/assets/images/example.jpg) center / cover;
}
// or
div {
box-shadow: inset 0 0 0 200vw scale-color($accent-blue-color, $alpha: -15%);
background: url(/assets/images/example.jpg) center / cover;
}
class Cancelable extends Promise {
// Symbol.species specifies a function-valued property that the constructor function uses to create derived objects.
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species
static get [Symbol.species]() {
return Promise;
}
constructor(executor) {
let _reject;
super((resolve, reject) => {
class Item {
constructor() {
return new Promise((resolve) => setTimeout(() => resolve(this), 1000));
}
}
(async () => {
const test = await new Item();
console.log(test);
})();