|
1 | 1 | import FloatToolkit from "@float-toolkit/core"; |
2 | | -import { useDebugValue, useMemo, useState } from "react"; |
| 2 | +import { useCallback, useDebugValue, useEffect, useMemo, useState } from "react"; |
3 | 3 |
|
4 | 4 | import versionNumbers from "./versionNumbers"; |
5 | 5 |
|
@@ -95,56 +95,85 @@ function useFloatToolkit(defaultPrecision?: ReactFT.Precision, options?: ReactFT |
95 | 95 | const [output, setOutput] = useState(0); |
96 | 96 | useDebugValue(output); |
97 | 97 |
|
98 | | - const ft = useMemo(() => new FloatToolkit(defaultPrecision, options), [defaultPrecision, options]); |
| 98 | + const ft = useMemo(() => new FloatToolkit(), []); |
99 | 99 |
|
100 | | - function add(numbers: number[], precision?: ReactFT.Precision): number { |
101 | | - const result = ft.add(numbers, precision); |
| 100 | + useEffect(() => { |
| 101 | + ft.defaultPrecision = defaultPrecision ?? ft.defaultPrecision; |
| 102 | + }, [ft, defaultPrecision]); |
102 | 103 |
|
103 | | - setOutput(result); |
104 | | - return result; |
105 | | - } |
| 104 | + useEffect(() => { |
| 105 | + ft.resetOptions(options ?? {}); |
| 106 | + }, [ft, options]); |
106 | 107 |
|
107 | | - function divide(numbers: number[], precision?: ReactFT.Precision): number { |
108 | | - const result = ft.divide(numbers, precision); |
| 108 | + const add = useCallback( |
| 109 | + (numbers: number[], precision?: ReactFT.Precision): number => { |
| 110 | + const result = ft.add(numbers, precision); |
109 | 111 |
|
110 | | - setOutput(result); |
111 | | - return result; |
112 | | - } |
| 112 | + setOutput(result); |
| 113 | + return result; |
| 114 | + }, |
| 115 | + [ft] |
| 116 | + ); |
113 | 117 |
|
114 | | - function multiply(numbers: number[], precision?: ReactFT.Precision): number { |
115 | | - const result = ft.multiply(numbers, precision); |
| 118 | + const divide = useCallback( |
| 119 | + (numbers: number[], precision?: ReactFT.Precision): number => { |
| 120 | + const result = ft.divide(numbers, precision); |
116 | 121 |
|
117 | | - setOutput(result); |
118 | | - return result; |
119 | | - } |
| 122 | + setOutput(result); |
| 123 | + return result; |
| 124 | + }, |
| 125 | + [ft] |
| 126 | + ); |
120 | 127 |
|
121 | | - function resetOptions(options?: Partial<ReactFT.Options>, resetOutput?: boolean): ReactFT.Options { |
122 | | - if (resetOutput) _methodResetOutput(); |
123 | | - return ft.resetOptions(options); |
124 | | - } |
| 128 | + const multiply = useCallback( |
| 129 | + (numbers: number[], precision?: ReactFT.Precision): number => { |
| 130 | + const result = ft.multiply(numbers, precision); |
125 | 131 |
|
126 | | - function round(n: number, precision?: ReactFT.Precision): number { |
127 | | - const result = ft.round(n, precision); |
| 132 | + setOutput(result); |
| 133 | + return result; |
| 134 | + }, |
| 135 | + [ft] |
| 136 | + ); |
128 | 137 |
|
129 | | - setOutput(result); |
130 | | - return result; |
131 | | - } |
| 138 | + const _methodResetOutput = useCallback((): void => { |
| 139 | + setOutput(0); |
| 140 | + }, []); |
132 | 141 |
|
133 | | - function setOptions(options?: Partial<ReactFT.Options>, resetOutput?: boolean): ReactFT.Options { |
134 | | - if (resetOutput) _methodResetOutput(); |
135 | | - return ft.resetOptions(options); |
136 | | - } |
| 142 | + const resetOptions = useCallback( |
| 143 | + (options?: Partial<ReactFT.Options>, resetOutput?: boolean): ReactFT.Options => { |
| 144 | + if (resetOutput) _methodResetOutput(); |
| 145 | + return ft.resetOptions(options); |
| 146 | + }, |
| 147 | + [ft, _methodResetOutput] |
| 148 | + ); |
137 | 149 |
|
138 | | - function subtract(numbers: number[], precision?: ReactFT.Precision): number { |
139 | | - const result = ft.subtract(numbers, precision); |
| 150 | + const round = useCallback( |
| 151 | + (n: number, precision?: ReactFT.Precision): number => { |
| 152 | + const result = ft.round(n, precision); |
140 | 153 |
|
141 | | - setOutput(result); |
142 | | - return result; |
143 | | - } |
| 154 | + setOutput(result); |
| 155 | + return result; |
| 156 | + }, |
| 157 | + [ft] |
| 158 | + ); |
144 | 159 |
|
145 | | - function _methodResetOutput(): void { |
146 | | - setOutput(0); |
147 | | - } |
| 160 | + const setOptions = useCallback( |
| 161 | + (options?: Partial<ReactFT.Options>, resetOutput?: boolean): ReactFT.Options => { |
| 162 | + if (resetOutput) _methodResetOutput(); |
| 163 | + return ft.resetOptions(options); |
| 164 | + }, |
| 165 | + [ft, _methodResetOutput] |
| 166 | + ); |
| 167 | + |
| 168 | + const subtract = useCallback( |
| 169 | + (numbers: number[], precision?: ReactFT.Precision): number => { |
| 170 | + const result = ft.subtract(numbers, precision); |
| 171 | + |
| 172 | + setOutput(result); |
| 173 | + return result; |
| 174 | + }, |
| 175 | + [ft] |
| 176 | + ); |
148 | 177 |
|
149 | 178 | return { |
150 | 179 | get defaultPrecision(): ReactFT.Precision { |
|
0 commit comments