Skip to content

Instantly share code, notes, and snippets.

View frivolta's full-sized avatar

Filippo Rivolta frivolta

View GitHub Profile
@frivolta
frivolta / index.tsx
Last active September 4, 2020 07:51
index.tsx - typing-react-context-v2
import * as React from "react";
import { render } from "react-dom";
import { SidebarProvider, useSidebarContext } from "./useSidebarContext";
import { ChildComponent } from "./childComponent";
export const App = () => {
const [isOpen] = useSidebarContext();
return (
<div>
@frivolta
frivolta / useSidebar.tsx
Created September 4, 2020 07:50
useSidebar.tsx - typing-react-context-v2
import { useState, useEffect } from "react";
export type UseSidebar = [
boolean,
React.Dispatch<React.SetStateAction<boolean>>
];
export const useSidebar = (newOpenValue: boolean): UseSidebar => {
const [isOpen, setIsOpen] = useState(true);
@frivolta
frivolta / useSidebarContext.tsx
Created September 4, 2020 07:51
useSidebarContext.tsx - typing-react-context-v2
import * as React from "react";
import { useSidebar, UseSidebar } from "./useSidebar";
import { createGenericContext } from "./createGenericContext";
interface Props {
children: React.ReactNode;
}
// Generate context
const [useSidebarContext, SidebarContextProvider] = createGenericContext<
UseSidebar
@frivolta
frivolta / ChildComponent.tsx
Created September 4, 2020 09:26
useSidebarContext.tsx - typing-react-context-v1-v2
import React from "react";
import { useSidebarContext } from "./useSidebarContext";
export const ChildComponent: React.FC = () => {
const [isOpen, setIsOpen] = useSidebarContext();
return (
<>
<p>Sidebar is: {isOpen ? "Open" : "Closed"}</p>
<button onClick={() => setIsOpen(!isOpen)}>Toggle sidebar</button>
@frivolta
frivolta / createGenericContext.tsx
Created September 4, 2020 10:30
createGenericContext.tsx - typing-react-context-v2
import React from "react";
export const createGenericContext = <T extends unknown>() => {
// Create a context with a generic parameter or undefined
const genericContext = React.createContext<T | undefined>(undefined);
// Check if the value provided to the context is defined or throw an error
const useGenericContext = () => {
const contextIsDefined = React.useContext(genericContext);
if (!contextIsDefined) {
@frivolta
frivolta / initial.js
Created April 12, 2021 08:03
jmawd - initial
const firstArr = new Array(200).fill(undefined).map((val, i) => `item${i}`)
const secondArr = new Array(250).fill(undefined).map((val, i) => `item${i}`)
const result = secondArr.reduce(
(acc, item) => {
return acc.includes(item) ? acc : [...acc, item]
},
[...firstArr]
)
const firstArr = new Array(200).fill(undefined).map((val, i) => `item${i}`)
const secondArr = new Array(250).fill(undefined).map((val, i) => `item${i}`)
@frivolta
frivolta / firstSolution.js
Created April 12, 2021 08:08
jmawd - first solution
const result = []
for (let i = 0; i < firstArr.length; i++) {
if (result.indexOf(firstArr[i]) == -1) result.push(firstArr[i])
}
for (let i = 0; i < secondArr.length; i++) {
if (result.indexOf(secondArr[i]) == -1) result.push(secondArr[i])
}
@frivolta
frivolta / secondSolution.js
Created April 12, 2021 08:16
jmawd - second solution
const concatArr = firstArr.concat(secondArr)
const result = concatArr.filter((item, idx) => concatArr.indexOf(item) === idx)
@frivolta
frivolta / thirdSolution.js
Created April 12, 2021 08:17
jmawd - lastSolution
const result = [...new Set([...firstArr, ...secondArr])]