forked from mirrors/homebox
31 lines
911 B
TypeScript
Executable file
31 lines
911 B
TypeScript
Executable file
function slugify(text: string) {
|
|
return text
|
|
.toString()
|
|
.toLowerCase()
|
|
.replace(/\s+/g, '-') // Replace spaces with -
|
|
.replace(/[^\w\-]+/g, '') // Remove all non-word chars
|
|
.replace(/\-\-+/g, '-') // Replace multiple - with single -
|
|
.replace(/^-+/, '') // Trim - from start of text
|
|
.replace(/-+$/, ''); // Trim - from end of text
|
|
}
|
|
|
|
function idGenerator(): string {
|
|
const id =
|
|
Math.random().toString(32).substring(2, 6) +
|
|
Math.random().toString(36).substring(2, 6);
|
|
return slugify(id);
|
|
}
|
|
|
|
/**
|
|
* useFormIds uses the provided label to generate a unique id for the
|
|
* form element. If no label is provided the id is generated using a
|
|
* random string.
|
|
*/
|
|
export function useFormIds(label: string): string {
|
|
const slug = label ? slugify(label) : idGenerator();
|
|
return `${slug}-${idGenerator()}`;
|
|
}
|
|
|
|
export function useId(): string {
|
|
return idGenerator();
|
|
}
|