Skip to content

Instantly share code, notes, and snippets.

View abonello's full-sized avatar

Anthony Bonello abonello

View GitHub Profile
@abonello
abonello / cloudSettings
Created July 31, 2019 07:59
Visual Studio Code Settings Sync Gist
{"lastUpload":"2019-07-31T07:59:18.647Z","extensionVersion":"v3.4.1"}
input[type='text']
// Chrome/Opera/Safari
&::-webkit-input-placeholder
white-space: pre-line
position: relative
@abonello
abonello / useResizeObserver.tsx
Created December 30, 2021 20:02 — forked from codemile/useResizeObserver.tsx
Hook that listens for bounding box changes on a DOM element.
import {MutableRefObject, useEffect, useState} from 'react';
const toRect = (rect: DOMRect | undefined) => {
const width = rect?.width || 0,
height = rect?.height || 0,
x = rect?.x || 0,
y = rect?.y || 0;
return {width, height, x, y};
};
@abonello
abonello / useToggle.tsx
Created December 30, 2021 20:04 — forked from codemile/useToggle.tsx
Hook that toggles a boolean state.
import {useCallback, useState} from 'react';
const useToggle = (init: boolean = false): [boolean, (v: unknown) => void] => {
const [toggle, setToggle] = useState(init);
const callback = useCallback((value) => {
setToggle((prev) => (typeof value === 'boolean' ? value : !prev));
}, []);
return [toggle, callback];
};
@abonello
abonello / usePrevious.tsx
Created December 30, 2021 20:05 — forked from codemile/usePrevious.tsx
Hook that returns the previous value.
import {useEffect, useRef} from 'react';
export function usePrevious(value) {
const ref = useRef(value);
useEffect(() => {
ref.current = value;
}, [value]);
return ref.current;
@abonello
abonello / useGotQuote.tsx
Created December 30, 2021 20:10 — forked from codemile/useGotQuote.tsx
Hook that fetches a random Games Of Thrones quote.
import {useEffect, useState} from 'react';
const useGotQuote = () => {
const [quote, setQuote] = useState('');
useEffect(() => {
fetch('https://game-of-thrones-quotes.herokuapp.com/v1/random')
.then((response) => response.json())
.then((data) => setQuote(data?.sentence));
}, []);
return quote;
@abonello
abonello / useCurrency.tsx
Created December 30, 2021 20:10 — forked from codemile/useCurrency.tsx
Hook that formats a number as a currency using the browser's locale.
import {useMemo } from 'react';
const CODE: Record<string, string> = {
IN: 'INR',
SE: 'SEK',
GB: 'GBP',
IE: 'EUR',
CN: 'CNY',
JP: 'JPY',
US: 'USD',
@abonello
abonello / useGeoLocation.tsx
Created December 30, 2021 20:10 — forked from codemile/useGeoLocation.tsx
Hook for watching the users current location as geo coordinates.
import {useEffect, useState} from 'react';
const useGeoLocation = (options?: PositionOptions) => {
const [geo, setGeo] = useState<GeolocationPosition>();
const [err, setError] = useState<GeolocationPositionError>();
useEffect(() => {
const id = navigator.geolocation.watchPosition(
(pos) => {
setGeo(pos);
err && setError(undefined);
@abonello
abonello / useAudio.tsx
Created December 30, 2021 20:11 — forked from codemile/useAudio.tsx
Hook that plays an audio file from a source URL.
import {useEffect, useMemo} from 'react';
export const useAudio = (
src: string,
play: boolean,
volume: number,
loop: boolean,
onDone?: () => void
) => {
const audio = useMemo(() => {
@abonello
abonello / Button.tsx
Created December 30, 2021 20:11 — forked from codemile/Button.tsx
Basic example of a Button component in ReactJs.
import {ButtonHTMLAttributes, forwardRef} from 'react';
export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
primary?: boolean;
}
export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
({className, primary, children, ...props}, ref) => {
return (
<button