// Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import { useMemo, useState } from 'react'; import { v4 as uuid } from 'uuid'; export function useUniqueId(): string { return useMemo(() => uuid(), []); } let nextElementId = 0; export function useElementId( namePrefix: string ): [id: string, selector: string] { // Prefixed to avoid starting with a number (which is invalid in CSS selectors) const [id] = useState(() => { const currentId = nextElementId; nextElementId += 1; return `${namePrefix}-${currentId}`; }); // Return the ID and a selector that can be used in CSS or JS return [id, `#${id}`] as const; }