Skip to content

Instantly share code, notes, and snippets.

@everdimension
everdimension / Input.tsx
Last active November 14, 2024 06:11
React Input element with support for customValidity props
/**
* Usage:
* <Input customValidity="your validation message" /> // add constraint
* or
* <Input customValidity="" /> // remove constraint
* or
* <Input defaultCustomValidity="you message" /> // initial validationMessage
*/
export function Input({
defaultCustomValidity,
@everdimension
everdimension / Dropdown.tsx
Created September 20, 2024 11:37
Draft for a button+dropdown using popover api + anchor api + react
import { useId } from 'react';
function Example() {
const id = useId();
return (
<div style={{ position: 'relative' }}>
<button
// @ts-ignore TODO: Update to [email protected] (currently tested on ^18.2.0)
popovertarget={id}
@everdimension
everdimension / .gitignore
Last active June 25, 2024 21:02
Global gitignore
# Editor files #
################
.vim
.vscode
.idea
# Compiled source #
###################
*.com
*.class
@everdimension
everdimension / python-env-setup.md
Created August 14, 2023 07:56
python3 on ubuntu 20
@everdimension
everdimension / rdns.md
Created August 8, 2023 21:10
Reverse-DNS reference

Reverse Domain Notation

The Reverse-DNS convention implies that the value should start with a reversed DNS domain name controlled by the author of the applicatoin.
The domain name should be followed by a subdomain or a product name. Example: com.example.MyProductName.

References:

@everdimension
everdimension / promiseAnyFallback.ts
Last active May 17, 2023 12:07
Implementation of Promise.any using Promise.all
/**
* As of writing, Promise.any is Stage 4 (Finished)
* This code is just a fun reminder of how Promise.any can be implemented using Promise.all
* Proposal: https://github.com/tc39/proposal-promise-any
*/
class AggregateErrorFallback extends Error {
errors: Array<Error>;
constructor(message: string, errors: Array<Error>) {
super(message);
@everdimension
everdimension / JsSpinner.tsx
Created October 7, 2022 15:22
A javascript spinner used to visually help detect freezes in the UI
function JsSpinner() {
const ref = useRef<HTMLDivElement | null>(null);
useEffect(() => {
let deg = 0;
let id = 0;
function rotate() {
id = requestAnimationFrame(() => {
ref.current.style.transform = `rotate(${(deg += 2) % 360}deg)`;
rotate();
});
// just a reminder of a nice API for a <Script /> component,
// reference: https://nextjs.org/docs/basic-features/script#executing-code-after-mounting-onready
import { useRef } from 'react'
import Script from 'next/script'
export function Home() {
const mapRef = useRef()
return (
<>
import { useEffect, useMemo } from 'react';
import debounce from 'lodash/debounce';
export function useDebouncedCallback(
callback: (...args: any) => any,
delay: number,
) {
const debouncedCallback = useMemo(
() => debounce(callback, delay),
[callback, delay],
@everdimension
everdimension / useStaleQuery.ts
Created July 20, 2022 11:52
A helper on top of useQuery hook
import { useCallback, useState } from 'react';
import { useQuery } from 'react-query';
import type {
QueryKey,
QueryFunction,
UseQueryOptions,
UseQueryResult,
} from 'react-query';
/**