Replace GetRecordedStreams/GetLiveStreams with video-first GetShotLabVideos
All checks were successful
Tests / Tests (pull_request) Successful in 44s
All checks were successful
Tests / Tests (pull_request) Successful in 44s
Shot Lab's source picker becomes video-first: one query for recent videos regardless of stream completion (an in-progress recording with no shots yet still appears), carrying stream recency fields so the client can hint "actively updating" without gating on it. Operation-only change; schema is untouched (the stream fields already exist). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
220
src/index.tsx
220
src/index.tsx
@@ -5344,43 +5344,6 @@ export type GetMyDrillRunsQuery = {
|
||||
}>;
|
||||
};
|
||||
|
||||
export type GetLiveStreamsQueryVariables = Exact<{
|
||||
limit?: Scalars["Int"]["input"];
|
||||
}>;
|
||||
|
||||
export type GetLiveStreamsQuery = {
|
||||
__typename?: "Query";
|
||||
getFeedVideos: {
|
||||
__typename?: "VideoHistoryGQL";
|
||||
videos: Array<{
|
||||
__typename?: "VideoGQL";
|
||||
id: number;
|
||||
name?: string | null;
|
||||
startTime?: any | null;
|
||||
createdAt?: any | null;
|
||||
screenshotUri?: string | null;
|
||||
elapsedTime?: number | null;
|
||||
owner?: {
|
||||
__typename?: "UserGQL";
|
||||
id: number;
|
||||
username: string;
|
||||
profileImageUri?: string | null;
|
||||
} | null;
|
||||
stream?: {
|
||||
__typename?: "UploadStreamGQL";
|
||||
id: string;
|
||||
isCompleted: boolean;
|
||||
lastSegmentUploadedAt?: any | null;
|
||||
} | null;
|
||||
}>;
|
||||
pageInfo: {
|
||||
__typename?: "PageInfoGQL";
|
||||
hasNextPage: boolean;
|
||||
endCursor?: string | null;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
export type GetVideoMakePercentageIntervalsQueryVariables = Exact<{
|
||||
videoId: Scalars["ID"]["input"];
|
||||
intervalDuration: Scalars["Int"]["input"];
|
||||
@@ -6722,11 +6685,11 @@ export type ReactToVideoMutation = {
|
||||
reactToVideo: boolean;
|
||||
};
|
||||
|
||||
export type GetRecordedStreamsQueryVariables = Exact<{
|
||||
export type GetShotLabVideosQueryVariables = Exact<{
|
||||
limit?: Scalars["Int"]["input"];
|
||||
}>;
|
||||
|
||||
export type GetRecordedStreamsQuery = {
|
||||
export type GetShotLabVideosQuery = {
|
||||
__typename?: "Query";
|
||||
getFeedVideos: {
|
||||
__typename?: "VideoHistoryGQL";
|
||||
@@ -6744,6 +6707,12 @@ export type GetRecordedStreamsQuery = {
|
||||
username: string;
|
||||
profileImageUri?: string | null;
|
||||
} | null;
|
||||
stream?: {
|
||||
__typename?: "UploadStreamGQL";
|
||||
id: string;
|
||||
isCompleted: boolean;
|
||||
lastSegmentUploadedAt?: any | null;
|
||||
} | null;
|
||||
}>;
|
||||
};
|
||||
};
|
||||
@@ -12148,105 +12117,6 @@ export type GetMyDrillRunsQueryResult = Apollo.QueryResult<
|
||||
GetMyDrillRunsQuery,
|
||||
GetMyDrillRunsQueryVariables
|
||||
>;
|
||||
export const GetLiveStreamsDocument = gql`
|
||||
query GetLiveStreams($limit: Int! = 25) {
|
||||
getFeedVideos(
|
||||
limit: $limit
|
||||
filters: { isStreamCompleted: false, requireCursorCompletion: false }
|
||||
includePrivate: MINE
|
||||
feedInput: { allUsers: true }
|
||||
) {
|
||||
videos {
|
||||
id
|
||||
name
|
||||
startTime
|
||||
createdAt
|
||||
screenshotUri
|
||||
elapsedTime
|
||||
owner {
|
||||
id
|
||||
username
|
||||
profileImageUri
|
||||
}
|
||||
stream {
|
||||
id
|
||||
isCompleted
|
||||
lastSegmentUploadedAt
|
||||
}
|
||||
}
|
||||
pageInfo {
|
||||
hasNextPage
|
||||
endCursor
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
/**
|
||||
* __useGetLiveStreamsQuery__
|
||||
*
|
||||
* To run a query within a React component, call `useGetLiveStreamsQuery` and pass it any options that fit your needs.
|
||||
* When your component renders, `useGetLiveStreamsQuery` returns an object from Apollo Client that contains loading, error, and data properties
|
||||
* you can use to render your UI.
|
||||
*
|
||||
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
|
||||
*
|
||||
* @example
|
||||
* const { data, loading, error } = useGetLiveStreamsQuery({
|
||||
* variables: {
|
||||
* limit: // value for 'limit'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
export function useGetLiveStreamsQuery(
|
||||
baseOptions?: Apollo.QueryHookOptions<
|
||||
GetLiveStreamsQuery,
|
||||
GetLiveStreamsQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useQuery<GetLiveStreamsQuery, GetLiveStreamsQueryVariables>(
|
||||
GetLiveStreamsDocument,
|
||||
options,
|
||||
);
|
||||
}
|
||||
export function useGetLiveStreamsLazyQuery(
|
||||
baseOptions?: Apollo.LazyQueryHookOptions<
|
||||
GetLiveStreamsQuery,
|
||||
GetLiveStreamsQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useLazyQuery<GetLiveStreamsQuery, GetLiveStreamsQueryVariables>(
|
||||
GetLiveStreamsDocument,
|
||||
options,
|
||||
);
|
||||
}
|
||||
export function useGetLiveStreamsSuspenseQuery(
|
||||
baseOptions?: Apollo.SuspenseQueryHookOptions<
|
||||
GetLiveStreamsQuery,
|
||||
GetLiveStreamsQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useSuspenseQuery<
|
||||
GetLiveStreamsQuery,
|
||||
GetLiveStreamsQueryVariables
|
||||
>(GetLiveStreamsDocument, options);
|
||||
}
|
||||
export type GetLiveStreamsQueryHookResult = ReturnType<
|
||||
typeof useGetLiveStreamsQuery
|
||||
>;
|
||||
export type GetLiveStreamsLazyQueryHookResult = ReturnType<
|
||||
typeof useGetLiveStreamsLazyQuery
|
||||
>;
|
||||
export type GetLiveStreamsSuspenseQueryHookResult = ReturnType<
|
||||
typeof useGetLiveStreamsSuspenseQuery
|
||||
>;
|
||||
export type GetLiveStreamsQueryResult = Apollo.QueryResult<
|
||||
GetLiveStreamsQuery,
|
||||
GetLiveStreamsQueryVariables
|
||||
>;
|
||||
export const GetVideoMakePercentageIntervalsDocument = gql`
|
||||
query GetVideoMakePercentageIntervals(
|
||||
$videoId: ID!
|
||||
@@ -14545,11 +14415,10 @@ export type ReactToVideoMutationOptions = Apollo.BaseMutationOptions<
|
||||
ReactToVideoMutation,
|
||||
ReactToVideoMutationVariables
|
||||
>;
|
||||
export const GetRecordedStreamsDocument = gql`
|
||||
query GetRecordedStreams($limit: Int! = 25) {
|
||||
export const GetShotLabVideosDocument = gql`
|
||||
query GetShotLabVideos($limit: Int! = 25) {
|
||||
getFeedVideos(
|
||||
limit: $limit
|
||||
filters: { isStreamCompleted: true, excludeVideosWithNoShots: true }
|
||||
includePrivate: MINE
|
||||
feedInput: { allUsers: true }
|
||||
) {
|
||||
@@ -14565,75 +14434,80 @@ export const GetRecordedStreamsDocument = gql`
|
||||
username
|
||||
profileImageUri
|
||||
}
|
||||
stream {
|
||||
id
|
||||
isCompleted
|
||||
lastSegmentUploadedAt
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
/**
|
||||
* __useGetRecordedStreamsQuery__
|
||||
* __useGetShotLabVideosQuery__
|
||||
*
|
||||
* To run a query within a React component, call `useGetRecordedStreamsQuery` and pass it any options that fit your needs.
|
||||
* When your component renders, `useGetRecordedStreamsQuery` returns an object from Apollo Client that contains loading, error, and data properties
|
||||
* To run a query within a React component, call `useGetShotLabVideosQuery` and pass it any options that fit your needs.
|
||||
* When your component renders, `useGetShotLabVideosQuery` returns an object from Apollo Client that contains loading, error, and data properties
|
||||
* you can use to render your UI.
|
||||
*
|
||||
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
|
||||
*
|
||||
* @example
|
||||
* const { data, loading, error } = useGetRecordedStreamsQuery({
|
||||
* const { data, loading, error } = useGetShotLabVideosQuery({
|
||||
* variables: {
|
||||
* limit: // value for 'limit'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
export function useGetRecordedStreamsQuery(
|
||||
export function useGetShotLabVideosQuery(
|
||||
baseOptions?: Apollo.QueryHookOptions<
|
||||
GetRecordedStreamsQuery,
|
||||
GetRecordedStreamsQueryVariables
|
||||
GetShotLabVideosQuery,
|
||||
GetShotLabVideosQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useQuery<
|
||||
GetRecordedStreamsQuery,
|
||||
GetRecordedStreamsQueryVariables
|
||||
>(GetRecordedStreamsDocument, options);
|
||||
return Apollo.useQuery<GetShotLabVideosQuery, GetShotLabVideosQueryVariables>(
|
||||
GetShotLabVideosDocument,
|
||||
options,
|
||||
);
|
||||
}
|
||||
export function useGetRecordedStreamsLazyQuery(
|
||||
export function useGetShotLabVideosLazyQuery(
|
||||
baseOptions?: Apollo.LazyQueryHookOptions<
|
||||
GetRecordedStreamsQuery,
|
||||
GetRecordedStreamsQueryVariables
|
||||
GetShotLabVideosQuery,
|
||||
GetShotLabVideosQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useLazyQuery<
|
||||
GetRecordedStreamsQuery,
|
||||
GetRecordedStreamsQueryVariables
|
||||
>(GetRecordedStreamsDocument, options);
|
||||
GetShotLabVideosQuery,
|
||||
GetShotLabVideosQueryVariables
|
||||
>(GetShotLabVideosDocument, options);
|
||||
}
|
||||
export function useGetRecordedStreamsSuspenseQuery(
|
||||
export function useGetShotLabVideosSuspenseQuery(
|
||||
baseOptions?: Apollo.SuspenseQueryHookOptions<
|
||||
GetRecordedStreamsQuery,
|
||||
GetRecordedStreamsQueryVariables
|
||||
GetShotLabVideosQuery,
|
||||
GetShotLabVideosQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useSuspenseQuery<
|
||||
GetRecordedStreamsQuery,
|
||||
GetRecordedStreamsQueryVariables
|
||||
>(GetRecordedStreamsDocument, options);
|
||||
GetShotLabVideosQuery,
|
||||
GetShotLabVideosQueryVariables
|
||||
>(GetShotLabVideosDocument, options);
|
||||
}
|
||||
export type GetRecordedStreamsQueryHookResult = ReturnType<
|
||||
typeof useGetRecordedStreamsQuery
|
||||
export type GetShotLabVideosQueryHookResult = ReturnType<
|
||||
typeof useGetShotLabVideosQuery
|
||||
>;
|
||||
export type GetRecordedStreamsLazyQueryHookResult = ReturnType<
|
||||
typeof useGetRecordedStreamsLazyQuery
|
||||
export type GetShotLabVideosLazyQueryHookResult = ReturnType<
|
||||
typeof useGetShotLabVideosLazyQuery
|
||||
>;
|
||||
export type GetRecordedStreamsSuspenseQueryHookResult = ReturnType<
|
||||
typeof useGetRecordedStreamsSuspenseQuery
|
||||
export type GetShotLabVideosSuspenseQueryHookResult = ReturnType<
|
||||
typeof useGetShotLabVideosSuspenseQuery
|
||||
>;
|
||||
export type GetRecordedStreamsQueryResult = Apollo.QueryResult<
|
||||
GetRecordedStreamsQuery,
|
||||
GetRecordedStreamsQueryVariables
|
||||
export type GetShotLabVideosQueryResult = Apollo.QueryResult<
|
||||
GetShotLabVideosQuery,
|
||||
GetShotLabVideosQueryVariables
|
||||
>;
|
||||
export const GetRecordedStreamShotsDocument = gql`
|
||||
query GetRecordedStreamShots($videoId: Int!, $limit: Int! = 200) {
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
# Lightweight listing of live (in-progress) streams for pickers like the
|
||||
# Shot Lab "follow a live stream" flow. Selects only what a picker card
|
||||
# needs; intentionally avoids the heavy VideoCardFields fragment.
|
||||
query GetLiveStreams($limit: Int! = 25) {
|
||||
getFeedVideos(
|
||||
limit: $limit
|
||||
filters: { isStreamCompleted: false, requireCursorCompletion: false }
|
||||
includePrivate: MINE
|
||||
feedInput: { allUsers: true }
|
||||
) {
|
||||
videos {
|
||||
id
|
||||
name
|
||||
startTime
|
||||
createdAt
|
||||
screenshotUri
|
||||
elapsedTime
|
||||
owner {
|
||||
id
|
||||
username
|
||||
profileImageUri
|
||||
}
|
||||
stream {
|
||||
id
|
||||
isCompleted
|
||||
lastSegmentUploadedAt
|
||||
}
|
||||
}
|
||||
pageInfo {
|
||||
hasNextPage
|
||||
endCursor
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,10 @@
|
||||
# Lightweight two-step picker data for loading a recorded shot into Shot Lab.
|
||||
query GetRecordedStreams($limit: Int! = 25) {
|
||||
# Lightweight two-step picker data for Shot Lab's video-first source: recent
|
||||
# videos (completed or still uploading — no completion gate, so an in-progress
|
||||
# recording with no shots yet still appears), then that video's shots. The
|
||||
# stream fields let the client hint at "actively updating" without gating.
|
||||
query GetShotLabVideos($limit: Int! = 25) {
|
||||
getFeedVideos(
|
||||
limit: $limit
|
||||
filters: { isStreamCompleted: true, excludeVideosWithNoShots: true }
|
||||
includePrivate: MINE
|
||||
feedInput: { allUsers: true }
|
||||
) {
|
||||
@@ -18,6 +20,11 @@ query GetRecordedStreams($limit: Int! = 25) {
|
||||
username
|
||||
profileImageUri
|
||||
}
|
||||
stream {
|
||||
id
|
||||
isCompleted
|
||||
lastSegmentUploadedAt
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user