Skip to content

Instantly share code, notes, and snippets.

View jacques-blom's full-sized avatar
📺
Making Videos

Jacques Blom jacques-blom

📺
Making Videos
View GitHub Profile
@jacques-blom
jacques-blom / AtomEffects.tsx
Created April 27, 2021 13:12
Atom Effects 3
import {Button} from '@chakra-ui/button'
import {Input} from '@chakra-ui/input'
import {Box, Divider, Heading, VStack} from '@chakra-ui/layout'
import React, {useState} from 'react'
import {
atom,
atomFamily,
DefaultValue,
useRecoilCallback,
useRecoilState,
@jacques-blom
jacques-blom / AtomEffects.tsx
Created April 20, 2021 13:05
Atom Effects 2
import {Button} from '@chakra-ui/button'
import {Input} from '@chakra-ui/input'
import {Box, Divider, Heading, VStack} from '@chakra-ui/layout'
import React, {useState} from 'react'
import {atom, atomFamily, useRecoilCallback, useRecoilState, useRecoilValue, useResetRecoilState} from 'recoil'
type ItemType = {
label: string
checked: boolean
}
@jacques-blom
jacques-blom / AtomEffects.tsx
Created April 20, 2021 12:32
Atom Effects 1
import {Button} from '@chakra-ui/button'
import {Input} from '@chakra-ui/input'
import {Box, Divider, Heading, VStack} from '@chakra-ui/layout'
import produce from 'immer'
import React, {useState} from 'react'
import {atom, useRecoilState, useResetRecoilState} from 'recoil'
type ItemType = {
label: string
checked: boolean
@jacques-blom
jacques-blom / ImageInfo.tsx
Last active April 12, 2021 07:48
Wrapping Up our Drawing Tool
import {Box, Text, VStack} from '@chakra-ui/layout'
import {Skeleton} from '@chakra-ui/skeleton'
export const ImageInfo = () => {
return (
<VStack spacing={2} alignItems="flex-start" width="100%">
<Info label="Author" value="Value goes here" />
<Info label="Image URL" value="Value goes here" />
</VStack>
)
@jacques-blom
jacques-blom / RectangleLoading.tsx
Created April 6, 2021 11:58
Data Fetching in our Drawing Tool
import {Box, Spinner} from '@chakra-ui/react'
import {getBorderColor} from '../../util'
export const RectangleLoading = ({selected}: {selected: boolean}) => {
return (
<Box
position="absolute"
border={`1px solid ${getBorderColor(selected)}`}
transition="0.1s border-color ease-in-out"
width="100%"
@jacques-blom
jacques-blom / fakeAPI.ts
Created March 30, 2021 16:56
Data Fetching - Advanced
export const getWeather = (zipCode: string) => {
return new Promise<number>((resolve) => {
setTimeout(() => {
if (!getWeatherCache[zipCode]) {
getWeatherCache[zipCode] = randomIntBetween(5, 35)
} else {
getWeatherCache[zipCode] += randomIntBetween(-1, 2)
}
resolve(getWeatherCache[zipCode])
@jacques-blom
jacques-blom / Async.tsx
Created March 9, 2021 15:11
Data Fetching 1
import {Container, Heading, Text} from '@chakra-ui/layout'
import {Select} from '@chakra-ui/select'
import {atom, useRecoilState} from 'recoil'
const userIdState = atom<number | undefined>({
key: 'userId',
default: undefined,
})
export const Async = () => {
@jacques-blom
jacques-blom / EditProperties.tsx
Created February 23, 2021 15:38
Atom Families 2
import {InputGroup, InputRightElement, NumberInput, NumberInputField, Text, VStack} from '@chakra-ui/react'
export const EditProperties = () => {
return (
<Card>
<Section heading="Position">
<Property label="Top" value={1} onChange={(top) => {}} />
<Property label="Left" value={1} onChange={(left) => {}} />
</Section>
</Card>
@jacques-blom
jacques-blom / Canvas.tsx
Last active May 4, 2023 14:37
Atom Families
import {createContext, useState} from 'react'
import {Element, Rectangle} from './components/Rectangle/Rectangle'
import {PageContainer} from './PageContainer'
import {Toolbar} from './Toolbar'
type ElementsContextType = {
elements: Element[]
addElement: () => void
setElement: SetElement
}
@jacques-blom
jacques-blom / Selectors.tsx
Last active September 14, 2023 06:50
Selectors Example - Starting Point
import {
Box,
FormControl,
FormLabel,
Heading,
HStack,
Icon,
NumberInput,
NumberInputField,
Switch,