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 (
);
}
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(
);