Skip to content

Instantly share code, notes, and snippets.

View jeffskelton3's full-sized avatar
:shipit:

Jeff Skelton jeffskelton3

:shipit:
View GitHub Profile
export class ArrayHelpers {
/**
* Sorts an array of objects by a specified key in ascending or descending order.
*
* @template T - The type of objects in the array.
* @param {T[]} array - The array to be sorted.
* @param {keyof T} key - The key to sort the objects by.
* @param {'asc' | 'desc'} [order='asc'] - The order to sort the objects. Defaults to 'asc'.
* @returns {T[]} - The sorted array.
*/
import { PropsWithChildren, useState } from "react";
import "./styles.css";
interface PanelWithToggleProps {
open: boolean;
}
function PanelWithToggle({
open,
children,
}: PropsWithChildren<PanelWithToggleProps>) {
const myFnWithCallback = (cb) => {
const message = "hi"
cb(message)
}
const doSomething = () => {
myFnWithCallback((msg) => {
console.log(msg) // "hi"
@jeffskelton3
jeffskelton3 / delegate-pattern-typescript.ts
Last active January 17, 2024 11:05
Leveraging the delegate pattern in TypeScript is not as straight forward as it is in some other languages. There is no delegate keyword for instance and one is only able to extend one class at a time. Fortunately TypeScript does support mixins which give us the functionality we are looking for.
/**------------ DELEGATOR (aka MIXIN) --------------- */
const Delegate = (target: any, delegators: any[]) => {
delegators.forEach(delegator => {
Object.getOwnPropertyNames(delegator.prototype)
.filter(name => target.prototype[name] === undefined)
.forEach(name => {
target.prototype[name] = delegator.prototype[name];
});
});
};
function frg {
result=$(rg --ignore-case --color=always --line-number --no-heading "$@" |
fzf --ansi \
--color 'hl:-1:underline,hl+:-1:underline:reverse' \
--delimiter ':' \
--preview "bat --color=always {1} --theme='OneHalfDark' --highlight-line {2}" \
--preview-window 'up,60%,border-bottom,+{2}+3/3,~3')
file=${result%%:*}
linenumber=$(echo "${result}" | cut -d: -f2)
if [[ -n "$file" ]]; then
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/stylist-api',
createProxyMiddleware({
target: 'http://localhost:3000',
changeOrigin: true,
})
);
// import segment from 'segment'
const segment = {
init: () => console.log("initialized!!"),
trackEvent: (eventName: string, data: any) => console.log(data),
};
interface SegmentEvent {
name: string;
data: {};
interface HttpClient<Response, Options extends {} = {}> {
get: (url: string, options: Options) => Promise<Response>;
put: (url: string, options: Options) => Promise<Response>;
post: (url: string, options: Options) => Promise<Response>;
}
interface CurrencyFormatter {
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
if [[ -n "${TRACE-}" ]]; then
set -o xtrace
fi
if [[ "$1" =~ ^-*h(elp)?$ ]]; then
# unbind Ctrl+B as the default meta and instead use Ctrl+A
unbind C-b
set -g prefix C-a
set -g pane-border-status top
# split panes using | and -
bind \\ split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'