Skip to content

Instantly share code, notes, and snippets.

View IrvingArmenta's full-sized avatar
🏠
Working from home

Irving Armenta IrvingArmenta

🏠
Working from home
  • Yokohama, Kanagawa, Japan.
View GitHub Profile
@IrvingArmenta
IrvingArmenta / pickAndReject.ts
Last active July 14, 2023 04:06
Pick and/or Reject Object data by keys
function pick<OriginalObj extends Record<string, unknown>, Keys extends Partial<keyof OriginalObj>>(
obj: Partial<OriginalObj>,
keys: Keys[]
) {
type ReturnObj = Record<Keys, OriginalObj[Keys]>;
return keys
.map(k => (k in obj ? { [k]: obj[k] } : {}))
.reduce((res, o) => Object.assign(res, o), {}) as ReturnObj;
}
@IrvingArmenta
IrvingArmenta / useObjectState.ts
Created February 13, 2023 23:45
useObjectState: simple hook for object state as it was with class based components
import { type SetStateAction, useState } from 'react'
// import deepMerge from './deepmerge'
// this would be necessary if deep merge is used
// type Subset<K> = {
// [attr in keyof K]?: K[attr] extends object
// ? Subset<K[attr]>
// : K[attr] extends object | null
// ? Subset<K[attr]> | null
// : K[attr] extends object | null | undefined
@IrvingArmenta
IrvingArmenta / useCycleState.ts
Created February 13, 2023 03:47
useCycleState: hook for handling controlled queue states
import { useState } from 'react'
function useCycleState<T>(values: readonly T[]) {
const [currentIndex, setCurrentIndex] = useState(0)
const currentValue = values[currentIndex] as T
const nextAndPrev = (isPrev: boolean) => {
const valPlus = (currentIndex + 1) % values.length
let valMinus = (currentIndex - 1) % values.length
@IrvingArmenta
IrvingArmenta / useFetchData.ts
Last active October 12, 2022 05:38
Hook for handling data fetch with loading and state, error handling and mocking data
import { useState, useEffect } from 'react';
const useFetchData = <T extends Record<string, unknown>>(
url: string,
options?: RequestInit,
mockData?: Promise<T>,
timeout = 600
) => {
const [data, setData] = useState<T | null>(null);
const [error, setError] = useState<Error | null>(null);
@IrvingArmenta
IrvingArmenta / forwardref-generics-18.ts
Created October 2, 2022 02:50
Example of a forward ref generic component in React 18
import React, { ForwardedRef, forwardRef, MouseEvent } from 'react';
type ClickableListProps<T> = {
items: T[];
onSelect: (
item: T,
event: MouseEvent<HTMLButtonElement, globalThis.MouseEvent>,
) => void;
};
@IrvingArmenta
IrvingArmenta / flat-object-typing.ts
Created April 10, 2021 02:46
Typing for "Flattened" objects for "flat" objects
import flatten from "flat";
const OriginalObj = {
key1: 'key1Value',
key2: {
key2a: 'key2a value',
key2b: 3231
}
};
@IrvingArmenta
IrvingArmenta / test.html
Last active February 22, 2018 09:19
test html
<div class="ajax">
<p>This is an external html file, fetched with ajax</p>
<ol>
<li>Info</li>
<li>Info</li>
<li>Info</li>
<li>Info</li>
</ol>
</div>