import "./App.css";
import {
copyToClipboard,
genUUID,
genRandomStringId,
genTimeBasedId,
// array
uniq,
flatten,
chunk,
groupBy,
shuffle,
range,
// object
deepClone,
pick,
omit,
get,
// string
camelCase,
kebabCase,
capitalize,
truncate,
escapeHtml,
// number
versionCompare,
clamp,
formatThousands,
random,
// storage
getItem,
setItem,
removeItem,
// format
formatFileSize,
formatDuration,
// function
sleep,
retry,
throttle,
memoize,
fileDownload,
// other
dayjs,
getDateObject,
qs,
setWaterMark,
} from "@fett/utils";
// @ts-ignore
import ReactLogo from "./assets/react.svg?component";
// @ts-ignore
import styles from "./index.module.css";
const logGroup = (title: string, fn: () => void) => {
console.log(`\n=== ${title} ===`);
fn();
};
// Demo card component
const Section = ({ title, items }: { title: string; items: [string, string][] }) => (
{title}
{items.map(([label, result], i) => (
{label}
{result}
))}
);
const App = () => {
// Log all new functions to console
logGroup("genId", () => {
console.log("genUUID:", genUUID());
console.log("genRandomStringId:", genRandomStringId(10));
console.log("genTimeBasedId:", genTimeBasedId(10));
});
logGroup("array", () => {
console.log("uniq:", uniq([1, 2, 2, 3]));
console.log("flatten:", flatten([1, [2, [3]]], 3));
console.log("chunk:", chunk([1, 2, 3, 4, 5], 2));
console.log("range:", range(0, 10, 2));
console.log("shuffle:", shuffle([1, 2, 3, 4, 5]));
console.log(
"groupBy:",
groupBy(
[
{ type: "fruit", name: "apple" },
{ type: "fruit", name: "banana" },
{ type: "veg", name: "carrot" },
],
"type"
)
);
});
logGroup("object", () => {
const obj = { a: 1, b: { c: 2 } };
const cloned = deepClone(obj);
console.log("deepClone (nested same ref?):", cloned.b === obj.b);
console.log("pick:", pick({ a: 1, b: 2, c: 3 }, ["a", "c"]));
console.log("omit:", omit({ a: 1, b: 2, c: 3 }, ["b"]));
console.log("get:", get({ a: { b: { c: 42 } } }, "a.b.c"));
});
logGroup("string", () => {
console.log("camelCase:", camelCase("foo-bar"));
console.log("kebabCase:", kebabCase("fooBar"));
console.log("capitalize:", capitalize("hello"));
console.log("truncate:", truncate("hello world", 5));
console.log("escapeHtml:", escapeHtml("
"));
});
logGroup("number", () => {
console.log("versionCompare:", versionCompare("2.1.0", "2.0.5"));
console.log("clamp:", clamp(15, 0, 10));
console.log("formatThousands:", formatThousands(1234567));
console.log("random:", random(1, 100));
});
logGroup("storage", () => {
setItem("demo", { msg: "hello" });
console.log("getItem:", getItem("demo"));
removeItem("demo");
console.log("after remove:", getItem("demo"));
});
logGroup("format", () => {
console.log("formatFileSize:", formatFileSize(1048576));
console.log("formatDuration:", formatDuration(3661000));
});
logGroup("date", () => {
console.log("dayjs:", dayjs().format("YYYY-MM-DD HH:mm:ss"));
console.log("getDateObject:", getDateObject());
});
logGroup("url", () => {
console.log("qs.parse:", qs.parse("https://example.com?a=1&b=2"));
console.log("qs.stringify:", qs.stringify({ x: 1, y: 2 }));
console.log("qs.join:", qs.join("https://example.com", { a: "1" }));
});
return (
@fett/utils Demo
')", escapeHtml("")],
]}
/>
);
};
export default App;