ldc-groupe/resources/ts/hooks/use-string.tsx

60 lines
1.5 KiB
TypeScript

import slugify from "slugify";
import pluralize, { singular } from "pluralize";
interface Stringable {
ucFirst: () => Stringable;
trim: () => Stringable;
slug: () => Stringable;
camelCase: () => Stringable;
plural: () => Stringable;
singular: () => Stringable;
value: () => string;
}
const str = (initialValue: string): Stringable => {
let value = initialValue;
return {
ucFirst: (): Stringable => {
value = value.charAt(0).toUpperCase() + value.slice(1);
return str(value);
},
trim: (): Stringable => {
value = value.trim();
return str(value);
},
slug: (): Stringable => {
value = slugify(value, { lower: true, strict: true, trim: true });
return str(value);
},
camelCase: (): Stringable => {
value = value
.replace(
/(?:^\w|[A-Z]|\b\w)/g,
(letter: string, index: number) =>
index === 0
? letter.toLowerCase()
: letter.toUpperCase(),
)
.replace(/\s+/g, "");
return str(value);
},
plural: (): Stringable => {
value = pluralize(value);
return str(value);
},
singular: (): Stringable => {
value = singular(value);
return str(value);
},
value: (): string => value,
};
};
export default str;