import { useEffect, useRef, useState } from 'react'; import { DevTools, forceDetectWrappedElements, useDevTools, wrapChildrenClassName } from 'flex-wrap-layout'; import { createRoot } from 'react-dom/client'; import './Bootstrap.html'; import './Bootstrap.scss'; // https://en.wikipedia.org/wiki/ISO_3166-1#Current_codes // https://gist.github.com/evolkmann/740d24889c509c08484a8ff72af5dd64 enum SomeCountries { AR = 'Argentina', BE = 'Belgium', BR = 'Brazil', KH = 'Cambodia', DK = 'Denmark', FR = 'France', DE = 'Germany', GG = 'Guernsey', HK = 'Hong Kong', HU = 'Hungary', IE = 'Ireland', IT = 'Italy', JE = 'Jersey', LA = "Lao People's Democratic Republic", MY = 'Malaysia', MA = 'Morocco', MM = 'Myanmar', NL = 'Netherlands', NO = 'Norway', PT = 'Portugal', SK = 'Slovakia', ES = 'Spain', SE = 'Sweden', CH = 'Switzerland', TZ = 'Tanzania', TH = 'Thailand', TR = 'Turkey', GB = 'United Kingdom', US = 'United States' } enum Gender { Male = 'Male', Female = 'Female', Other = 'Other', Unknown = 'Unknown' } // https://developers.google.com/people/api/rest/v1/people // https://schema.org/Person interface Person { id: string; gender: Gender; firstName: string; lastName: string; birthDate: string; nationality: SomeCountries; } function People({ people }: { people: Person[] }) { const ref = useRef(null); // This example uses the dev tools: replace useDevTools() and by useDetectWrappedElements() const devToolsContext = useDevTools({ showBordersInit: false, detectWrappedElementsInit: true, flexFillInit: true }); const [showDetails, setShowDetails] = useState(true); useEffect(() => { forceDetectWrappedElements(); }, [showDetails]); return ( <>
{people.map(person => ( ))}
); } function ColumnTitle({ children }: { children?: React.ReactNode }) { return
{children ?? '\u00A0'}
; } function getSelectOptionsFromEnum(_enum: Record) { return Object.entries(_enum).map(([key, value]) => ( )); } interface PersonProps { person: Person; showDetails: boolean; flexFillClassName: string; } function Person({ person, showDetails, flexFillClassName }: PersonProps) { const { id, gender, firstName, lastName, birthDate, nationality } = person; const getId = (name: string) => `${name}-${id}`; const genderId = getId('gender'); const firstNameId = getId('firstName'); const lastNameId = getId('lastName'); const birthDateId = getId('birthDate'); const nationalityId = getId('nationality'); return (
First name
Last name
{showDetails ? ( <>
Gender
Birth date
Nationality
) : null}

); } const beatles: Person[] = [ { id: 'beatles-0', gender: Gender.Male, firstName: 'John', lastName: 'Lennon', birthDate: '1940-10-09', nationality: SomeCountries.GB }, { id: 'beatles-1', gender: Gender.Male, firstName: 'Paul', lastName: 'McCartney', birthDate: '1942-06-18', nationality: SomeCountries.GB }, { id: 'beatles-2', gender: Gender.Male, firstName: 'George', lastName: 'Harrison', birthDate: '1943-02-25', nationality: SomeCountries.GB }, { id: 'beatles-3', gender: Gender.Male, firstName: 'Ringo', lastName: 'Starr', birthDate: '1940-07-07', nationality: SomeCountries.GB } ]; function Beatles() { return ( <>

Members of the Beatles

); } // https://en.wikipedia.org/wiki/The_Velvet_Underground#Timeline const velvetUnderground: Person[] = [ { id: 'velvetunderground-0', gender: Gender.Male, firstName: 'Lou', lastName: 'Reed', birthDate: '1942-03-02', nationality: SomeCountries.US }, { id: 'velvetunderground-1', gender: Gender.Female, firstName: 'Nico', lastName: '', birthDate: '1938-10-16', nationality: SomeCountries.DE }, { id: 'velvetunderground-2', gender: Gender.Male, firstName: 'Sterling', lastName: 'Morrison', birthDate: '1942-08-29', nationality: SomeCountries.US }, { id: 'velvetunderground-3', gender: Gender.Male, firstName: 'Willie', lastName: 'Alexander', birthDate: '1943-01-13', nationality: SomeCountries.US }, { id: 'velvetunderground-4', gender: Gender.Male, firstName: 'John', lastName: 'Cale', birthDate: '1942-03-09', nationality: SomeCountries.GB }, { id: 'velvetunderground-5', gender: Gender.Male, firstName: 'Doug', lastName: 'Yule', birthDate: '1947-02-25', nationality: SomeCountries.US }, { id: 'velvetunderground-6', gender: Gender.Male, firstName: 'Walter', lastName: 'Powers', birthDate: '1946-08-04', nationality: SomeCountries.US }, { id: 'velvetunderground-7', gender: Gender.Male, firstName: 'Angus', lastName: 'MacLise', birthDate: '1938-03-14', nationality: SomeCountries.US }, { id: 'velvetunderground-8', gender: Gender.Female, firstName: 'Moe', lastName: 'Tucker', birthDate: '1944-08-26', nationality: SomeCountries.US } ]; function VelvetUnderground() { return ( <>

Members of the Velvet Underground

); } const root = createRoot(document.getElementById('app')!); root.render(
);