From 68c161ee7e46acfb66677293fef37c9299a71e27 Mon Sep 17 00:00:00 2001 From: Mathieu Virbel Date: Wed, 27 Aug 2025 23:55:59 -0600 Subject: [PATCH] fix: resolve import errors and add missing api hooks - Create constants.ts for RECORD_A_MEETING_URL - Add api-types.ts for backward compatible type exports - Update all imports from deleted api folder to new locations - Add missing React Query hooks for rooms and zulip operations - Create useApi compatibility layer for unmigrated components --- .../browse/_components/FilterSidebar.tsx | 2 +- .../browse/_components/TranscriptCards.tsx | 2 +- www/app/(app)/browse/page.tsx | 9 +- www/app/(app)/layout.tsx | 2 +- www/app/(app)/rooms/_components/RoomCards.tsx | 2 +- www/app/(app)/rooms/_components/RoomList.tsx | 2 +- www/app/(app)/rooms/_components/RoomTable.tsx | 2 +- www/app/(app)/rooms/page.tsx | 2 +- www/app/(app)/rooms/useRoomList.tsx | 2 +- .../[transcriptId]/finalSummary.tsx | 2 +- www/app/(app)/transcripts/createTranscript.ts | 2 +- www/app/(app)/transcripts/player.tsx | 2 +- www/app/(app)/transcripts/recorder.tsx | 2 +- www/app/(app)/transcripts/shareAndPrivacy.tsx | 6 +- www/app/(app)/transcripts/shareCopy.tsx | 2 +- www/app/(app)/transcripts/shareZulip.tsx | 2 +- www/app/(app)/transcripts/transcriptTitle.tsx | 2 +- www/app/(app)/transcripts/useParticipants.ts | 2 +- .../(app)/transcripts/useSearchTranscripts.ts | 2 +- .../(app)/transcripts/useTopicWithWords.ts | 2 +- www/app/(app)/transcripts/useTopics.ts | 2 +- www/app/(app)/transcripts/useTranscript.ts | 2 +- www/app/(app)/transcripts/useWaveform.ts | 2 +- www/app/(app)/transcripts/useWebRTC.ts | 2 +- www/app/(app)/transcripts/useWebSockets.ts | 2 +- www/app/(app)/transcripts/webSocketTypes.ts | 2 +- www/app/[roomName]/page.tsx | 2 +- www/app/[roomName]/useRoomMeeting.tsx | 2 +- www/app/lib/api-hooks.ts | 85 +++++++++++++++++++ www/app/lib/api-types.ts | 28 ++++++ www/app/lib/constants.ts | 2 + www/app/lib/useApi.ts | 13 +++ www/app/page.tsx | 2 +- 33 files changed, 167 insertions(+), 30 deletions(-) create mode 100644 www/app/lib/api-types.ts create mode 100644 www/app/lib/constants.ts create mode 100644 www/app/lib/useApi.ts diff --git a/www/app/(app)/browse/_components/FilterSidebar.tsx b/www/app/(app)/browse/_components/FilterSidebar.tsx index b2abe481..fd298548 100644 --- a/www/app/(app)/browse/_components/FilterSidebar.tsx +++ b/www/app/(app)/browse/_components/FilterSidebar.tsx @@ -1,7 +1,7 @@ import React from "react"; import { Box, Stack, Link, Heading } from "@chakra-ui/react"; import NextLink from "next/link"; -import { Room, SourceKind } from "../../../api"; +import { Room, SourceKind } from "../../../lib/api-types"; interface FilterSidebarProps { rooms: Room[]; diff --git a/www/app/(app)/browse/_components/TranscriptCards.tsx b/www/app/(app)/browse/_components/TranscriptCards.tsx index b67e71e7..bb1843f1 100644 --- a/www/app/(app)/browse/_components/TranscriptCards.tsx +++ b/www/app/(app)/browse/_components/TranscriptCards.tsx @@ -18,7 +18,7 @@ import { highlightMatches, generateTextFragment, } from "../../../lib/textHighlight"; -import { SearchResult } from "../../../api"; +import { SearchResult } from "../../../lib/api-types"; interface TranscriptCardsProps { results: SearchResult[]; diff --git a/www/app/(app)/browse/page.tsx b/www/app/(app)/browse/page.tsx index 78a28588..93620550 100644 --- a/www/app/(app)/browse/page.tsx +++ b/www/app/(app)/browse/page.tsx @@ -20,7 +20,12 @@ import { } from "nuqs"; import { LuX } from "react-icons/lu"; import useSessionUser from "../../lib/useSessionUser"; -import { Room, SourceKind, SearchResult, $SourceKind } from "../../api"; +import { + Room, + SourceKind, + SearchResult, + $SourceKind, +} from "../../lib/api-types"; import { useRoomsList, useTranscriptsSearch, @@ -38,7 +43,7 @@ import Pagination, { import TranscriptCards from "./_components/TranscriptCards"; import DeleteTranscriptDialog from "./_components/DeleteTranscriptDialog"; import { formatLocalDate } from "../../lib/time"; -import { RECORD_A_MEETING_URL } from "../../api/urls"; +import { RECORD_A_MEETING_URL } from "../../lib/constants"; const SEARCH_FORM_QUERY_INPUT_NAME = "query" as const; diff --git a/www/app/(app)/layout.tsx b/www/app/(app)/layout.tsx index 5760e19d..053df5a7 100644 --- a/www/app/(app)/layout.tsx +++ b/www/app/(app)/layout.tsx @@ -5,7 +5,7 @@ import Image from "next/image"; import About from "../(aboutAndPrivacy)/about"; import Privacy from "../(aboutAndPrivacy)/privacy"; import UserInfo from "../(auth)/userInfo"; -import { RECORD_A_MEETING_URL } from "../api/urls"; +import { RECORD_A_MEETING_URL } from "../lib/constants"; export default async function AppLayout({ children, diff --git a/www/app/(app)/rooms/_components/RoomCards.tsx b/www/app/(app)/rooms/_components/RoomCards.tsx index 15079a7a..dafc08da 100644 --- a/www/app/(app)/rooms/_components/RoomCards.tsx +++ b/www/app/(app)/rooms/_components/RoomCards.tsx @@ -12,7 +12,7 @@ import { HStack, } from "@chakra-ui/react"; import { LuLink } from "react-icons/lu"; -import { Room } from "../../../api"; +import { Room } from "../../../lib/api-types"; import { RoomActionsMenu } from "./RoomActionsMenu"; interface RoomCardsProps { diff --git a/www/app/(app)/rooms/_components/RoomList.tsx b/www/app/(app)/rooms/_components/RoomList.tsx index 17cd5fc5..ed0b6014 100644 --- a/www/app/(app)/rooms/_components/RoomList.tsx +++ b/www/app/(app)/rooms/_components/RoomList.tsx @@ -1,5 +1,5 @@ import { Box, Heading, Text, VStack } from "@chakra-ui/react"; -import { Room } from "../../../api"; +import { Room } from "../../../lib/api-types"; import { RoomTable } from "./RoomTable"; import { RoomCards } from "./RoomCards"; diff --git a/www/app/(app)/rooms/_components/RoomTable.tsx b/www/app/(app)/rooms/_components/RoomTable.tsx index 092fccdc..31c335a6 100644 --- a/www/app/(app)/rooms/_components/RoomTable.tsx +++ b/www/app/(app)/rooms/_components/RoomTable.tsx @@ -9,7 +9,7 @@ import { Spinner, } from "@chakra-ui/react"; import { LuLink } from "react-icons/lu"; -import { Room } from "../../../api"; +import { Room } from "../../../lib/api-types"; import { RoomActionsMenu } from "./RoomActionsMenu"; interface RoomTableProps { diff --git a/www/app/(app)/rooms/page.tsx b/www/app/(app)/rooms/page.tsx index 305087f9..979de31c 100644 --- a/www/app/(app)/rooms/page.tsx +++ b/www/app/(app)/rooms/page.tsx @@ -17,7 +17,7 @@ import { import { useEffect, useState } from "react"; import useApi from "../../lib/useApi"; import useRoomList from "./useRoomList"; -import { ApiError, Room } from "../../api"; +import { ApiError, Room } from "../../lib/api-types"; import { RoomList } from "./_components/RoomList"; import { PaginationPage } from "../browse/_components/Pagination"; diff --git a/www/app/(app)/rooms/useRoomList.tsx b/www/app/(app)/rooms/useRoomList.tsx index fcc67056..aad01939 100644 --- a/www/app/(app)/rooms/useRoomList.tsx +++ b/www/app/(app)/rooms/useRoomList.tsx @@ -1,5 +1,5 @@ import { useRoomsList } from "../../lib/api-hooks"; -import { Page_Room_ } from "../../api"; +import { Page_Room_ } from "../../lib/api-types"; import { PaginationPage } from "../browse/_components/Pagination"; type RoomList = { diff --git a/www/app/(app)/transcripts/[transcriptId]/finalSummary.tsx b/www/app/(app)/transcripts/[transcriptId]/finalSummary.tsx index 4ce4a9e1..5f8525b1 100644 --- a/www/app/(app)/transcripts/[transcriptId]/finalSummary.tsx +++ b/www/app/(app)/transcripts/[transcriptId]/finalSummary.tsx @@ -6,7 +6,7 @@ import { GetTranscript, GetTranscriptTopic, UpdateTranscript, -} from "../../../api"; +} from "../../../lib/api-types"; import useApi from "../../../lib/useApi"; import { Flex, diff --git a/www/app/(app)/transcripts/createTranscript.ts b/www/app/(app)/transcripts/createTranscript.ts index 015c82de..dac50719 100644 --- a/www/app/(app)/transcripts/createTranscript.ts +++ b/www/app/(app)/transcripts/createTranscript.ts @@ -1,7 +1,7 @@ import { useEffect, useState } from "react"; import { useError } from "../../(errors)/errorContext"; -import { CreateTranscript, GetTranscript } from "../../api"; +import { CreateTranscript, GetTranscript } from "../../lib/api-types"; import useApi from "../../lib/useApi"; type UseCreateTranscript = { diff --git a/www/app/(app)/transcripts/player.tsx b/www/app/(app)/transcripts/player.tsx index c8163ecb..b9cb1020 100644 --- a/www/app/(app)/transcripts/player.tsx +++ b/www/app/(app)/transcripts/player.tsx @@ -5,7 +5,7 @@ import RegionsPlugin from "wavesurfer.js/dist/plugins/regions.esm.js"; import { formatTime, formatTimeMs } from "../../lib/time"; import { Topic } from "./webSocketTypes"; -import { AudioWaveform } from "../../api"; +import { AudioWaveform } from "../../lib/api-types"; import { waveSurferStyles } from "../../styles/recorder"; import { Box, Flex, IconButton } from "@chakra-ui/react"; import { LuPause, LuPlay } from "react-icons/lu"; diff --git a/www/app/(app)/transcripts/recorder.tsx b/www/app/(app)/transcripts/recorder.tsx index f57540d4..a06cee8b 100644 --- a/www/app/(app)/transcripts/recorder.tsx +++ b/www/app/(app)/transcripts/recorder.tsx @@ -11,7 +11,7 @@ import useWebRTC from "./useWebRTC"; import useAudioDevice from "./useAudioDevice"; import { Box, Flex, IconButton, Menu, RadioGroup } from "@chakra-ui/react"; import { LuScreenShare, LuMic, LuPlay, LuCircleStop } from "react-icons/lu"; -import { RECORD_A_MEETING_URL } from "../../api/urls"; +import { RECORD_A_MEETING_URL } from "../../lib/constants"; type RecorderProps = { transcriptId: string; diff --git a/www/app/(app)/transcripts/shareAndPrivacy.tsx b/www/app/(app)/transcripts/shareAndPrivacy.tsx index 609793d3..37e84bb3 100644 --- a/www/app/(app)/transcripts/shareAndPrivacy.tsx +++ b/www/app/(app)/transcripts/shareAndPrivacy.tsx @@ -2,7 +2,11 @@ import { useEffect, useState } from "react"; import { featureEnabled } from "../../domainContext"; import { ShareMode, toShareMode } from "../../lib/shareMode"; -import { GetTranscript, GetTranscriptTopic, UpdateTranscript } from "../../api"; +import { + GetTranscript, + GetTranscriptTopic, + UpdateTranscript, +} from "../../lib/api-types"; import { Box, Flex, diff --git a/www/app/(app)/transcripts/shareCopy.tsx b/www/app/(app)/transcripts/shareCopy.tsx index 90e1534f..5715fcfc 100644 --- a/www/app/(app)/transcripts/shareCopy.tsx +++ b/www/app/(app)/transcripts/shareCopy.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { GetTranscript, GetTranscriptTopic } from "../../api"; +import { GetTranscript, GetTranscriptTopic } from "../../lib/api-types"; import { Button, BoxProps, Box } from "@chakra-ui/react"; type ShareCopyProps = { diff --git a/www/app/(app)/transcripts/shareZulip.tsx b/www/app/(app)/transcripts/shareZulip.tsx index b310c431..0500cd0c 100644 --- a/www/app/(app)/transcripts/shareZulip.tsx +++ b/www/app/(app)/transcripts/shareZulip.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, useMemo } from "react"; import { featureEnabled } from "../../domainContext"; -import { GetTranscript, GetTranscriptTopic } from "../../api"; +import { GetTranscript, GetTranscriptTopic } from "../../lib/api-types"; import { BoxProps, Button, diff --git a/www/app/(app)/transcripts/transcriptTitle.tsx b/www/app/(app)/transcripts/transcriptTitle.tsx index 4678818f..2413de10 100644 --- a/www/app/(app)/transcripts/transcriptTitle.tsx +++ b/www/app/(app)/transcripts/transcriptTitle.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { UpdateTranscript } from "../../api"; +import { UpdateTranscript } from "../../lib/api-types"; import useApi from "../../lib/useApi"; import { Heading, IconButton, Input, Flex, Spacer } from "@chakra-ui/react"; import { LuPen } from "react-icons/lu"; diff --git a/www/app/(app)/transcripts/useParticipants.ts b/www/app/(app)/transcripts/useParticipants.ts index 38f5aa35..7a576d7f 100644 --- a/www/app/(app)/transcripts/useParticipants.ts +++ b/www/app/(app)/transcripts/useParticipants.ts @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { Participant } from "../../api"; +import { Participant } from "../../lib/api-types"; import { useError } from "../../(errors)/errorContext"; import useApi from "../../lib/useApi"; import { shouldShowError } from "../../lib/errorUtils"; diff --git a/www/app/(app)/transcripts/useSearchTranscripts.ts b/www/app/(app)/transcripts/useSearchTranscripts.ts index 3f7da561..04784dc3 100644 --- a/www/app/(app)/transcripts/useSearchTranscripts.ts +++ b/www/app/(app)/transcripts/useSearchTranscripts.ts @@ -1,5 +1,5 @@ // Wrapper for backward compatibility -import { SearchResult, SourceKind } from "../../api"; +import { SearchResult, SourceKind } from "../../lib/api-types"; import { useTranscriptsSearch } from "../../lib/api-hooks"; import { PaginationPage, diff --git a/www/app/(app)/transcripts/useTopicWithWords.ts b/www/app/(app)/transcripts/useTopicWithWords.ts index 29d0b982..e895383b 100644 --- a/www/app/(app)/transcripts/useTopicWithWords.ts +++ b/www/app/(app)/transcripts/useTopicWithWords.ts @@ -1,6 +1,6 @@ import { useEffect, useState } from "react"; -import { GetTranscriptTopicWithWordsPerSpeaker } from "../../api"; +import { GetTranscriptTopicWithWordsPerSpeaker } from "../../lib/api-types"; import { useError } from "../../(errors)/errorContext"; import useApi from "../../lib/useApi"; import { shouldShowError } from "../../lib/errorUtils"; diff --git a/www/app/(app)/transcripts/useTopics.ts b/www/app/(app)/transcripts/useTopics.ts index ff17beaf..73d78c64 100644 --- a/www/app/(app)/transcripts/useTopics.ts +++ b/www/app/(app)/transcripts/useTopics.ts @@ -4,7 +4,7 @@ import { useError } from "../../(errors)/errorContext"; import { Topic } from "./webSocketTypes"; import useApi from "../../lib/useApi"; import { shouldShowError } from "../../lib/errorUtils"; -import { GetTranscriptTopic } from "../../api"; +import { GetTranscriptTopic } from "../../lib/api-types"; type TranscriptTopics = { topics: GetTranscriptTopic[] | null; diff --git a/www/app/(app)/transcripts/useTranscript.ts b/www/app/(app)/transcripts/useTranscript.ts index 272b827c..c26ca89c 100644 --- a/www/app/(app)/transcripts/useTranscript.ts +++ b/www/app/(app)/transcripts/useTranscript.ts @@ -1,4 +1,4 @@ -import { GetTranscript } from "../../api"; +import { GetTranscript } from "../../lib/api-types"; import { useTranscriptGet } from "../../lib/api-hooks"; type ErrorTranscript = { diff --git a/www/app/(app)/transcripts/useWaveform.ts b/www/app/(app)/transcripts/useWaveform.ts index 19b2a265..fd266657 100644 --- a/www/app/(app)/transcripts/useWaveform.ts +++ b/www/app/(app)/transcripts/useWaveform.ts @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { AudioWaveform } from "../../api"; +import { AudioWaveform } from "../../lib/api-types"; import { useError } from "../../(errors)/errorContext"; import useApi from "../../lib/useApi"; import { shouldShowError } from "../../lib/errorUtils"; diff --git a/www/app/(app)/transcripts/useWebRTC.ts b/www/app/(app)/transcripts/useWebRTC.ts index c8370aa4..07ada45c 100644 --- a/www/app/(app)/transcripts/useWebRTC.ts +++ b/www/app/(app)/transcripts/useWebRTC.ts @@ -2,7 +2,7 @@ import { useEffect, useState } from "react"; import Peer from "simple-peer"; import { useError } from "../../(errors)/errorContext"; import useApi from "../../lib/useApi"; -import { RtcOffer } from "../../api"; +import { RtcOffer } from "../../lib/api-types"; const useWebRTC = ( stream: MediaStream | null, diff --git a/www/app/(app)/transcripts/useWebSockets.ts b/www/app/(app)/transcripts/useWebSockets.ts index 6fa5edc7..863e5f5a 100644 --- a/www/app/(app)/transcripts/useWebSockets.ts +++ b/www/app/(app)/transcripts/useWebSockets.ts @@ -2,7 +2,7 @@ import { useContext, useEffect, useState } from "react"; import { Topic, FinalSummary, Status } from "./webSocketTypes"; import { useError } from "../../(errors)/errorContext"; import { DomainContext } from "../../domainContext"; -import { AudioWaveform, GetTranscriptSegmentTopic } from "../../api"; +import { AudioWaveform, GetTranscriptSegmentTopic } from "../../lib/api-types"; import useApi from "../../lib/useApi"; export type UseWebSockets = { diff --git a/www/app/(app)/transcripts/webSocketTypes.ts b/www/app/(app)/transcripts/webSocketTypes.ts index edd35eb6..4973ea2e 100644 --- a/www/app/(app)/transcripts/webSocketTypes.ts +++ b/www/app/(app)/transcripts/webSocketTypes.ts @@ -1,4 +1,4 @@ -import { GetTranscriptTopic } from "../../api"; +import { GetTranscriptTopic } from "../../lib/api-types"; export type Topic = GetTranscriptTopic; diff --git a/www/app/[roomName]/page.tsx b/www/app/[roomName]/page.tsx index b03a7e4f..3ca424b9 100644 --- a/www/app/[roomName]/page.tsx +++ b/www/app/[roomName]/page.tsx @@ -24,7 +24,7 @@ import { notFound } from "next/navigation"; import useSessionStatus from "../lib/useSessionStatus"; import { useRecordingConsent } from "../recordingConsentContext"; import useApi from "../lib/useApi"; -import { Meeting } from "../api"; +import { Meeting } from "../lib/api-types"; import { FaBars } from "react-icons/fa6"; export type RoomDetails = { diff --git a/www/app/[roomName]/useRoomMeeting.tsx b/www/app/[roomName]/useRoomMeeting.tsx index 98c2f1f2..569271d8 100644 --- a/www/app/[roomName]/useRoomMeeting.tsx +++ b/www/app/[roomName]/useRoomMeeting.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from "react"; import { useError } from "../(errors)/errorContext"; -import { Meeting } from "../api"; +import { Meeting } from "../lib/api-types"; import { shouldShowError } from "../lib/errorUtils"; import useApi from "../lib/useApi"; import { notFound } from "next/navigation"; diff --git a/www/app/lib/api-hooks.ts b/www/app/lib/api-hooks.ts index f010454c..4b67e7af 100644 --- a/www/app/lib/api-hooks.ts +++ b/www/app/lib/api-hooks.ts @@ -108,3 +108,88 @@ export function useTranscriptGet(transcriptId: string | null) { }, ); } + +// Rooms mutations +export function useRoomCreate() { + const { setError } = useError(); + const queryClient = useQueryClient(); + + return $api.useMutation("post", "/v1/rooms", { + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: $api.queryOptions("get", "/v1/rooms").queryKey, + }); + }, + onError: (error) => { + setError(error as Error, "There was an error creating the room"); + }, + }); +} + +export function useRoomUpdate() { + const { setError } = useError(); + const queryClient = useQueryClient(); + + return $api.useMutation("patch", "/v1/rooms/{room_id}", { + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: $api.queryOptions("get", "/v1/rooms").queryKey, + }); + }, + onError: (error) => { + setError(error as Error, "There was an error updating the room"); + }, + }); +} + +export function useRoomDelete() { + const { setError } = useError(); + const queryClient = useQueryClient(); + + return $api.useMutation("delete", "/v1/rooms/{room_id}", { + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: $api.queryOptions("get", "/v1/rooms").queryKey, + }); + }, + onError: (error) => { + setError(error as Error, "There was an error deleting the room"); + }, + }); +} + +// Zulip hooks +export function useZulipStreams() { + const { setError } = useError(); + + return $api.useQuery( + "get", + "/v1/zulip/get-streams", + {}, + { + onError: (error) => { + setError(error as Error, "There was an error fetching Zulip streams"); + }, + }, + ); +} + +export function useZulipTopics(streamId: number | null) { + const { setError } = useError(); + + return $api.useQuery( + "get", + "/v1/zulip/get-topics", + { + params: { + query: { stream_id: streamId || 0 }, + }, + }, + { + enabled: !!streamId, + onError: (error) => { + setError(error as Error, "There was an error fetching Zulip topics"); + }, + }, + ); +} diff --git a/www/app/lib/api-types.ts b/www/app/lib/api-types.ts new file mode 100644 index 00000000..865386c0 --- /dev/null +++ b/www/app/lib/api-types.ts @@ -0,0 +1,28 @@ +// Re-export types from generated OpenAPI schema for backward compatibility +import type { components } from "../reflector-api"; + +// Export types with their original names +export type Room = components["schemas"]["Room"]; +export type Meeting = components["schemas"]["Meeting"]; +export type SourceKind = components["schemas"]["SourceKind"]; +export type SearchResult = components["schemas"]["SearchResult"]; +export type GetTranscript = components["schemas"]["GetTranscript"]; +export type GetTranscriptTopic = components["schemas"]["GetTranscriptTopic"]; +export type UpdateTranscript = components["schemas"]["UpdateTranscript"]; +export type AudioWaveform = components["schemas"]["AudioWaveform"]; +export type Participant = components["schemas"]["Participant"]; +export type CreateTranscript = components["schemas"]["CreateTranscript"]; +export type RtcOffer = components["schemas"]["RtcOffer"]; +export type GetTranscriptSegmentTopic = + components["schemas"]["GetTranscriptSegmentTopic"]; +export type Page_Room_ = components["schemas"]["Page_Room_"]; +export type ApiError = components["schemas"]["ApiError"]; +export type GetTranscriptTopicWithWordsPerSpeaker = + components["schemas"]["GetTranscriptTopicWithWordsPerSpeaker"]; +export type GetTranscriptMinimal = + components["schemas"]["GetTranscriptMinimal"]; + +// Export any enums or constants that were in the old API +export const $SourceKind = { + values: ["SINGLE", "CALL", "WHEREBY", "UPLOAD"] as const, +} as const; diff --git a/www/app/lib/constants.ts b/www/app/lib/constants.ts new file mode 100644 index 00000000..996da64c --- /dev/null +++ b/www/app/lib/constants.ts @@ -0,0 +1,2 @@ +// Application-wide constants +export const RECORD_A_MEETING_URL = "/transcripts/new" as const; diff --git a/www/app/lib/useApi.ts b/www/app/lib/useApi.ts new file mode 100644 index 00000000..97280db7 --- /dev/null +++ b/www/app/lib/useApi.ts @@ -0,0 +1,13 @@ +// Compatibility layer for direct API client usage +// Prefer using React Query hooks from api-hooks.ts instead + +import { client } from "./apiClient"; + +// Returns the configured client for direct API calls +// This is a minimal compatibility layer for components that haven't been fully migrated +export default function useApi() { + return client; +} + +// Export the client directly for non-hook contexts +export { client }; diff --git a/www/app/page.tsx b/www/app/page.tsx index 225fe877..07da398f 100644 --- a/www/app/page.tsx +++ b/www/app/page.tsx @@ -1,6 +1,6 @@ "use client"; import { redirect } from "next/navigation"; -import { RECORD_A_MEETING_URL } from "./api/urls"; +import { RECORD_A_MEETING_URL } from "./lib/constants"; export default function Index() { redirect(RECORD_A_MEETING_URL);