Add routing for call page
Enable buttons to start a call.
Improve ConversationListItem context menu layout.
Move calling buttons from `Button.tsx` to `CallButtons.tsx`.
Add CallProvider
GitLab: #78
Change-Id: I921aa11383bf39fae18e59b01afb00dc66b0d5e6
diff --git a/client/src/utils/hooks.ts b/client/src/utils/hooks.ts
new file mode 100644
index 0000000..790d4ab
--- /dev/null
+++ b/client/src/utils/hooks.ts
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2022 Savoir-faire Linux Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+import { useMemo } from 'react';
+import { useLocation, useParams } from 'react-router-dom';
+
+export interface RouteParams<U = Record<string, string>, Q = Record<string, string>> {
+ urlParams: U;
+ queryParams: Q;
+}
+
+export const useUrlParams = <T extends RouteParams>() => {
+ const { search } = useLocation();
+ const urlParams = useParams() as T['urlParams'];
+
+ return useMemo(() => {
+ const queryParams = Object.fromEntries(new URLSearchParams(search)) as T['queryParams'];
+ return {
+ queryParams,
+ urlParams,
+ };
+ }, [search, urlParams]);
+};
diff --git a/client/src/utils/utils.ts b/client/src/utils/utils.ts
index 8f2f1cb..ffe37a4 100644
--- a/client/src/utils/utils.ts
+++ b/client/src/utils/utils.ts
@@ -15,8 +15,10 @@
* License along with this program. If not, see
* <https://www.gnu.org/licenses/>.
*/
-import { ReactNode } from 'react';
+import { Dispatch, ReactNode, SetStateAction } from 'react';
export type WithChildren = {
children: ReactNode;
};
+
+export type SetState<T> = Dispatch<SetStateAction<T>>;