Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / components / hooks / useAutoGrow.ts
blobca73bbd2b51c3804afafa04c56b1ab00adcce5ad
1 import { useCallback, useState } from 'react';
3 const getTextAreaRows = ({ el, minRows, maxRows }: { el: HTMLTextAreaElement; minRows: number; maxRows: number }) => {
4     const textAreaLineHeight = +getComputedStyle(el).lineHeight.replace('px', '');
6     const previousRows = el.rows;
8     // Reset rows so we can calculate calculate currentRows correctly
9     el.rows = minRows;
11     const currentRows = Math.min(maxRows, Math.max(minRows, ~~(el.scrollHeight / textAreaLineHeight)));
13     // Set rows attribute directly because React won't update it as it stayed the same
14     if (currentRows === previousRows) {
15         el.rows = currentRows;
16     }
18     return currentRows;
21 const useAutoGrow = ({ maxRows = 5, minRows = 1, autoGrow = false }) => {
22     const [rows, setRows] = useState(minRows);
24     const updateTextArea = useCallback(
25         (el: HTMLTextAreaElement) => {
26             setRows(getTextAreaRows({ el, minRows, maxRows }));
27         },
28         [minRows, maxRows]
29     );
31     if (!autoGrow) {
32         return {
33             rows: maxRows,
34         };
35     }
37     return { rows, updateTextArea };
40 export default useAutoGrow;