Goals: Add links that are reasonable and good explanations of how stuff works. No hype and no vendor content if possible. Practical first-hand accounts of models in prod eagerly sought.
![Screenshot 2023-12-18 at 10 40 27 PM](https://private-user-images.githubusercontent.com/3837836/291468646-4c30ad72-76ee-4939-a5fb-16b570d38cf2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1ODkzOTAsIm5iZiI6MTcyMTU4OTA5MCwicGF0aCI6Ii8zODM3ODM2LzI5MTQ2ODY0Ni00YzMwYWQ3Mi03NmVlLTQ5MzktYTVmYi0xNmI1NzBkMzhjZjIucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDcyMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA3MjFUMTkxMTMwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NDg4ZDFhYWJjMTQ1ZThhMzNmYjRiMzExNGU1ZDgxOTdjMTgyYWU3YzNlN2NjMzBhZWJlNWNkNGNiNWM2NjMxMyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.V6ELDVU6dvXNFDVBwHrZXy4wQYpg6K6wUAjkBjUHRVM)
/* | |
Copyright(c) June 2024 Anderson Mancini | |
Permission is hereby granted, free of charge, to any person obtaining | |
a copy of this software and associated documentation files (the | |
"Software"), to deal in the Software without restriction, including | |
without limitation the rights to use, copy, modify, merge, publish, | |
distribute, sublicense, and/or sell copies of the Software, and to | |
permit persons to whom the Software is furnished to do so, subject to | |
the following conditions: |
// | |
// NOTE! THERE'S A BETTER METHOD NOW: | |
// https://github.com/WietseWind/xrpl-accountlib#-however-since-version-210-this-lib-bundles-xrpl-client-as-well-and-comes-with-helpers-to-prepare-transactions--submit-transactions- | |
// | |
const lib = require('xrpl-accountlib') | |
const { XrplClient } = require('xrpl-client') | |
const secret = 's...' | |
const account = 'r...' // Can be derived |
import { ReactNode, useRef } from 'react' | |
import { Button, FormControl, FormErrorMessage, FormLabel, Icon, InputGroup } from '@chakra-ui/react' | |
import { useForm, UseFormRegisterReturn } from 'react-hook-form' | |
import { FiFile } from 'react-icons/fi' | |
type FileUploadProps = { | |
register: UseFormRegisterReturn | |
accept?: string | |
multiple?: boolean | |
children?: ReactNode |
import React, { useState, useEffect } from 'react'; | |
import styled from 'styled-components' | |
const { datesGenerator } = require('dates-generator'); | |
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; | |
const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] | |
const Container = styled.div` | |
width: 300px; | |
border: 1px solid black; |
In my experience, infinite lists use two basic layout strategies. The first uses absolute positioning to control where visible items are rendered. The second uses relative positioning (with top/left padding to offset for unrendered items).
In both cases, the list abstraction caches some metadata about the size of items once they have been rendered– so that it knows where to position the items that come after them.
Both of these strategies need to handle reflow. For example, changing the width of a list often affects the height of its itesm. Generally speaking, only the "window" of rendered (visible) items are remeasured in this case (because it would be too slow to rerender and remeasure all of the items before). But once a user scrolls backwards (up/left)– the list needs to account for the reflowed sizes. If it didn't, items would appear to jump up or down (depending on the delta between the previous, cached sizes and the new/reflowed sizes).
How the list deals with new sizes
CREATE SEQUENCE country_seq; | |
CREATE TABLE IF NOT EXISTS country ( | |
id int NOT NULL DEFAULT NEXTVAL ('country_seq'), | |
iso char(2) NOT NULL, | |
name varchar(80) NOT NULL, | |
nicename varchar(80) NOT NULL, | |
iso3 char(3) DEFAULT NULL, | |
numcode smallint DEFAULT NULL, | |
phonecode int NOT NULL, |
All of the below properties or methods, when requested/called in JavaScript, will trigger the browser to synchronously calculate the style and layout*. This is also called reflow or layout thrashing, and is common performance bottleneck.
Generally, all APIs that synchronously provide layout metrics will trigger forced reflow / layout. Read on for additional cases and details.
elem.offsetLeft
, elem.offsetTop
, elem.offsetWidth
, elem.offsetHeight
, elem.offsetParent