Skip to content

Instantly share code, notes, and snippets.

View keyurparalkar's full-sized avatar
💻
Focusing

Keyur Paralkar keyurparalkar

💻
Focusing
View GitHub Profile
// Generates array from 0 to N (inclusive)
type GenerateArr<N extends number, Acc extends number[] = []> = Acc['length'] extends N
? Acc
: GenerateArr<N, [...Acc, Acc['length']]>
type FlattenArr<A extends unknown[]> = A extends [infer X extends number[], ...infer R] ? [...X, ...FlattenArr<R>] : A;
type AbsoluteSquare<N extends number, Acc extends unknown[] = []> =
Acc['length'] extends N
? FlattenArr<Acc>['length']
@keyurparalkar
keyurparalkar / JSONToHTML.tsx
Created March 4, 2024 10:31
A component that converts the JSON object into html div elements
import styled from "styled-components";
import { ComponentType } from "./constants";
export type Tree = {
name: string;
id: string;
style: {
top: number;
left: number;
width: number;
@keyurparalkar
keyurparalkar / RecursiveTree.tsx
Created March 4, 2024 10:30
RecursiveTree with icons
const tree2 = {
id: "Parent 1",
name: "Parent 1",
children: [
{
id: "Child-1",
name: "Child-1",
icons: [<CiSquarePlus size={25} />, <CiSquareMinus size={25} />],
children: [
{
const tree1 = {
id: "Parent 1",
name: "Parent 1",
children: [
{
id: "Child-1",
name: "Child-1",
children: [
{
id: "Inner-Child-1",
@keyurparalkar
keyurparalkar / CustomDetails.tsx
Created March 4, 2024 10:29
Customized details component
const CustomDetails = (props: CustomDetailsProps) => {
const { icons, name, renderTree } = props;
const [isOpen, setIsOpen] = useState(false);
const hasIcons = icons && icons.length > 0;
const handleDrawerOpen = (
e: React.SyntheticEvent<HTMLDetailsElement, ToggleEvent>,
) => {
// This stops event bubbling;
tree.children.map((item) => (
<li key={`key-${item.id}`}>
<CustomDetails
icons={item.icons}
name={item.name}
renderTree={<RecursiveTree tree={item} />}
/>
</li>
))}
@keyurparalkar
keyurparalkar / StyledUnorderedList.tsx
Created March 4, 2024 10:26
Styled component for unordered list
const StyledUnorderedList = styled.ul`
ul,
li {
list-style: none;
margin: 0;
padding: 0;
}
ul {
margin-left: 0.8rem;
@keyurparalkar
keyurparalkar / RecursiveTree.tsx
Created March 4, 2024 10:26
Recursive Tree component
import styled from "styled-components";
import { ReactElement, useState } from "react";
type Tree = {
id: string;
name: string;
icons?: JSX.Element[];
children?: Tree[];
};
@keyurparalkar
keyurparalkar / Tree.js
Created March 4, 2024 10:24
Basic tree JSON component
const tree = {
id: "Parent 1",
name: "Parent 1",
children: [
{
id: "Child-1",
name: "Child-1",
children: [
{
id: "Inner-Child-1",
@keyurparalkar
keyurparalkar / fact.js
Created March 4, 2024 10:23
Factorial
function factorial(n) {
if (n == 0) {
return 1;
}
else {
return n * factorial(n - 1);
}
}