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]);
+};