Compare commits

..

2 Commits

Author SHA1 Message Date
2886d2f5b8 Merge pull request 'Select stream.id in upload-status operations so the cache stays normalized' (#306) from dean/upload-stream-id-fields into master
Reviewed-on: #306
2026-07-23 02:38:07 +00:00
Dean Wenstrand
8441bb12e9 Select stream.id in upload-status operations so the cache stays normalized
All checks were successful
Tests / Tests (pull_request) Successful in 11s
UploadStreamWithDetails and the editUploadStream response selected
stream fields without id. Apollo cannot normalize an object with no id
selected, so every upload-service poll rewrote VideoGQL.stream as an
anonymous inline object — clobbering the id that feed/detail queries
select. Their cache reads went partial and useQuery silently fell back
to the last network result, rendered as the home feed collapsing to
the first page (and bouncing the viewport) whenever an upload was
polling.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 19:27:25 -07:00
5 changed files with 7 additions and 11 deletions

View File

@@ -274,7 +274,6 @@ export type CommentGql = {
id: Scalars["Int"]["output"];
message: Scalars["String"]["output"];
replies: Array<CommentGql>;
replyToCommentId?: Maybe<Scalars["Int"]["output"]>;
user: UserGql;
};
@@ -5009,7 +5008,6 @@ export type GetFeedQuery = {
__typename?: "CommentGQL";
id: number;
message: string;
replyToCommentId?: number | null;
user: {
__typename?: "UserGQL";
id: number;
@@ -5125,7 +5123,6 @@ export type VideoCardFieldsFragment = {
__typename?: "CommentGQL";
id: number;
message: string;
replyToCommentId?: number | null;
user: {
__typename?: "UserGQL";
id: number;
@@ -5274,7 +5271,6 @@ export type GetVideoFeedQuery = {
__typename?: "CommentGQL";
id: number;
message: string;
replyToCommentId?: number | null;
user: {
__typename?: "UserGQL";
id: number;
@@ -8518,7 +8514,6 @@ export type GetVideoSocialDetailsByIdQuery = {
__typename?: "CommentGQL";
id: number;
message: string;
replyToCommentId?: number | null;
user: {
__typename?: "UserGQL";
id: number;
@@ -8626,7 +8621,6 @@ export type GetVideoCardQuery = {
__typename?: "CommentGQL";
id: number;
message: string;
replyToCommentId?: number | null;
user: {
__typename?: "UserGQL";
id: number;
@@ -9204,6 +9198,7 @@ export type GetUploadLinkMutation = {
};
stream?: {
__typename?: "UploadStreamGQL";
id: string;
uploadCompletionCursor: number;
} | null;
};
@@ -9302,6 +9297,7 @@ export type UploadStreamWithDetailsFragment = {
startTime?: any | null;
stream?: {
__typename?: "UploadStreamGQL";
id: string;
isCompleted: boolean;
lastIntendedSegmentBound?: number | null;
uploadCompletionCursor: number;
@@ -9326,6 +9322,7 @@ export type GetUploadStreamsWithDetailsQuery = {
startTime?: any | null;
stream?: {
__typename?: "UploadStreamGQL";
id: string;
isCompleted: boolean;
lastIntendedSegmentBound?: number | null;
uploadCompletionCursor: number;
@@ -9427,7 +9424,6 @@ export const VideoCardFieldsFragmentDoc = gql`
replies {
id
message
replyToCommentId
user {
...UserSocialsFields
}
@@ -9903,6 +9899,7 @@ export const UploadStreamWithDetailsFragmentDoc = gql`
name
startTime
stream {
id
isCompleted
lastIntendedSegmentBound
uploadCompletionCursor
@@ -18372,7 +18369,6 @@ export const GetVideoSocialDetailsByIdDocument = gql`
replies {
id
message
replyToCommentId
user {
...UserSocialsFields
}
@@ -19680,6 +19676,7 @@ export const GetUploadLinkDocument = gql`
}
}
stream {
id
uploadCompletionCursor
}
}

View File

@@ -78,7 +78,6 @@ fragment VideoCardFields on VideoGQL {
replies {
id
message
replyToCommentId
user {
...UserSocialsFields
}

View File

@@ -131,7 +131,6 @@ query GetVideoSocialDetailsById($videoId: Int!) {
replies {
id
message
replyToCommentId
user {
...UserSocialsFields
}

View File

@@ -48,6 +48,7 @@ mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) {
}
}
stream {
id
uploadCompletionCursor
}
}
@@ -127,6 +128,7 @@ fragment UploadStreamWithDetails on VideoGQL {
name
startTime
stream {
id
isCompleted
lastIntendedSegmentBound
uploadCompletionCursor

View File

@@ -221,7 +221,6 @@ type CommentGQL {
user: UserGQL!
message: String!
replies: [CommentGQL!]!
replyToCommentId: Int
}
type CountLeaderboardGQL {