24 lines
674 B
TypeScript
24 lines
674 B
TypeScript
// 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;
|
|
}
|