Skip to content

Instantly share code, notes, and snippets.

@flensrocker
flensrocker / example.component.ts
Last active March 6, 2024 19:15
Angular: example component for submitting a form declarative
import {
ChangeDetectionStrategy,
Component,
Injectable,
Signal,
inject,
viewChild,
} from '@angular/core';
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
import {
@flensrocker
flensrocker / object-keys.ts
Last active March 6, 2024 13:23
Helper types and functions for mapping state etc. to "named state" for @ngrx/signalStore extensions like "withEntities". Example "withError" extension included.
/**
* Prefix every property of the type with the given name.
* Ignores properties with non-string names.
*/
export type NamedObject<Name extends string, T> = {
[K in keyof T as `${Name}${K extends string ? Capitalize<K> : never}`]: T[K];
};
type KeySuffix = 'Key';
@flensrocker
flensrocker / Either.cs
Last active February 15, 2024 13:00
Either monad in C#
Either<Exception, string?>[] eithers =
[
new Either<Exception, string?>.Right("Text"),
new Either<Exception, string?>.Right(null),
new Either<Exception, string?>.Left(new Exception("Oops!")),
];
var TryStringLength = EitherExtensions.TryInvoke<string?, int>(LegacyFunctions.StringLength);
foreach (var either in eithers)
@flensrocker
flensrocker / flex.ts
Created June 12, 2023 07:02
Replacement for `@angular/flex-layout`
import { Directive, HostBinding, Input, NgModule } from "@angular/core";
export type BsFlexDirectionType = "row" | "row-reverse" | "column" | "column-reverse";
export type BsFlexWrapType = "nowrap" | "wrap" | "wrap-reverse";
export type BsFlexDirectionWrapType = "" | `${BsFlexDirectionType}` | `${BsFlexDirectionType} ${BsFlexWrapType}`;
export type BsFlexJustifyContentType =
| ""
@flensrocker
flensrocker / bs-redux.ts
Created January 22, 2022 13:38
Simple reactive state management
import { Observable, BehaviorSubject, Subject, Subscription, queueScheduler } from "rxjs";
import { distinctUntilChanged, map, observeOn, scan, shareReplay, takeUntil, tap } from "rxjs/operators";
export type BsStoreAction<TState> = (lastState: TState) => TState;
export type BsStoreDispatcher<TState> = (...actions: BsStoreAction<TState>[]) => void;
export type BsStoreSelector<TState> = <R>(projection: (state: TState) => R) => Observable<R>;
export type BsStoreEffect<TState> = Observable<BsStoreAction<TState>>;
using System.Threading.Channels;
var uberQueue = new UberQueue<string>(Enumerable
.Range(0, 10)
.Select(queueIndex => new RandomDelayQueue(queueIndex))
.ToArray());
var uberQueueConsumers = Enumerable
.Range(0, 3)
.Select(consumerIndex => Task.Run(async () =>