From ed4a4272877432f8574a444b05848c8e05e78688 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 4 Aug 2020 22:00:05 +0100 Subject: [PATCH] Convert hooks to Typescript --- src/hooks/{useAsyncMemo.js => useAsyncMemo.ts} | 6 ++++-- src/hooks/{useEventEmitter.js => useEventEmitter.ts} | 7 +++++-- src/hooks/{useSettings.js => useSettings.ts} | 4 ++-- src/hooks/{useStateToggle.js => useStateToggle.ts} | 6 +++--- 4 files changed, 14 insertions(+), 9 deletions(-) rename src/hooks/{useAsyncMemo.js => useAsyncMemo.ts} (81%) rename src/hooks/{useEventEmitter.js => useEventEmitter.ts} (86%) rename src/hooks/{useSettings.js => useSettings.ts} (90%) rename src/hooks/{useStateToggle.js => useStateToggle.ts} (85%) diff --git a/src/hooks/useAsyncMemo.js b/src/hooks/useAsyncMemo.ts similarity index 81% rename from src/hooks/useAsyncMemo.js rename to src/hooks/useAsyncMemo.ts index ef7d256b04..11c7aca7f1 100644 --- a/src/hooks/useAsyncMemo.js +++ b/src/hooks/useAsyncMemo.ts @@ -14,9 +14,11 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { useState, useEffect } from 'react'; +import {useState, useEffect, DependencyList} from 'react'; -export const useAsyncMemo = (fn, deps, initialValue) => { +type Fn = () => Promise; + +export const useAsyncMemo = (fn: Fn, deps: DependencyList, initialValue?: T) => { const [value, setValue] = useState(initialValue); useEffect(() => { fn().then(setValue); diff --git a/src/hooks/useEventEmitter.js b/src/hooks/useEventEmitter.ts similarity index 86% rename from src/hooks/useEventEmitter.js rename to src/hooks/useEventEmitter.ts index 6a758fb108..6b5693ef95 100644 --- a/src/hooks/useEventEmitter.js +++ b/src/hooks/useEventEmitter.ts @@ -15,11 +15,14 @@ limitations under the License. */ import {useRef, useEffect} from "react"; +import type {EventEmitter} from "events"; + +type Handler = (...args: any[]) => void; // Hook to wrap event emitter on and removeListener in hook lifecycle -export const useEventEmitter = (emitter, eventName, handler) => { +export const useEventEmitter = (emitter: EventEmitter, eventName: string | symbol, handler: Handler) => { // Create a ref that stores handler - const savedHandler = useRef(); + const savedHandler = useRef(handler); // Update ref.current value if handler changes. useEffect(() => { diff --git a/src/hooks/useSettings.js b/src/hooks/useSettings.ts similarity index 90% rename from src/hooks/useSettings.js rename to src/hooks/useSettings.ts index 151a6369de..4d1e1d5bad 100644 --- a/src/hooks/useSettings.js +++ b/src/hooks/useSettings.ts @@ -18,7 +18,7 @@ import {useEffect, useState} from "react"; import SettingsStore from '../settings/SettingsStore'; // Hook to fetch the value of a setting and dynamically update when it changes -export const useSettingValue = (settingName, roomId = null, excludeDefault = false) => { +export const useSettingValue = (settingName: string, roomId: string = null, excludeDefault = false) => { const [value, setValue] = useState(SettingsStore.getValue(settingName, roomId, excludeDefault)); useEffect(() => { @@ -35,7 +35,7 @@ export const useSettingValue = (settingName, roomId = null, excludeDefault = fal }; // Hook to fetch whether a feature is enabled and dynamically update when that changes -export const useFeatureEnabled = (featureName, roomId = null) => { +export const useFeatureEnabled = (featureName: string, roomId: string = null) => { const [enabled, setEnabled] = useState(SettingsStore.isFeatureEnabled(featureName, roomId)); useEffect(() => { diff --git a/src/hooks/useStateToggle.js b/src/hooks/useStateToggle.ts similarity index 85% rename from src/hooks/useStateToggle.js rename to src/hooks/useStateToggle.ts index 58cf123bfb..85441df328 100644 --- a/src/hooks/useStateToggle.js +++ b/src/hooks/useStateToggle.ts @@ -14,12 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {useState} from 'react'; +import {useState} from "react"; // Hook to simplify toggling of a boolean state value // Returns value, method to toggle boolean value and method to set the boolean value -export const useStateToggle = (initialValue) => { - const [value, setValue] = useState(Boolean(initialValue)); +export const useStateToggle = (initialValue: boolean) => { + const [value, setValue] = useState(initialValue); const toggleValue = () => { setValue(!value); };