mirror of
https://github.com/block/buzz.git
synced 2026-11-01 23:11:58 +00:00
## Summary - Makes Projects repository-aware across browsing, branch and tag selection, local and remote source management, work items, commits, and contextual repository actions. - Refines project details into consistent single-column reading surfaces with a resizable, section-aware context pod, while keeping project conversations available in the attached chat panel. - Adds persistent sidebar project navigation, direct entity links, repository discussion channels, contributor identity matching, and consistent loading and activity presentation. - Keeps branch-specific controls on code-oriented sections while Tasks, Reviews, and Channels remain repository-scoped, reducing misleading context and actions. Replacement for #5981 with an identical final tree flattened into one signed-off commit because the required DCO check suite remained stalled. ### Related issue N/A ### Testing - [x] Desktop pre-push checks, TypeScript typecheck, and unit tests - [x] E2E production build with `pnpm build:e2e` - [x] Focused Playwright smoke coverage for project workspace, task, review, commit, sidebar, and contextual-panel behavior - [ ] Attach final before/after screenshots after design review --------- Signed-off-by: Thomas Petersen <thomasp@squareup.com> Signed-off-by: Wintermute <165f0c871dd2586bb18b6aa109eeaf57bb2132ff4d27b10120f4368a0f627022@buzz.block.builderlab.xyz> Co-authored-by: Wintermute <165f0c871dd2586bb18b6aa109eeaf57bb2132ff4d27b10120f4368a0f627022@buzz.block.builderlab.xyz>
37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
import type { Repository } from "@/features/projects/hooks";
|
|
import {
|
|
type ProjectRepoHost,
|
|
projectRepoHostForRepository,
|
|
} from "@/features/projects/lib/projectRepoHost";
|
|
import { isSafeUrl } from "@/shared/lib/url";
|
|
import { useRelayOrigin } from "@/shared/lib/useRelayOrigin";
|
|
|
|
export function useProjectRepoHost(
|
|
repository: Repository | null | undefined,
|
|
): ProjectRepoHost {
|
|
return projectRepoHostForRepository(repository, useRelayOrigin());
|
|
}
|
|
|
|
export function useProjectRepoPresentation(
|
|
repository: Repository | null | undefined,
|
|
) {
|
|
const host = useProjectRepoHost(repository);
|
|
const webUrl =
|
|
repository?.webUrl && isSafeUrl(repository.webUrl)
|
|
? repository.webUrl
|
|
: null;
|
|
|
|
return {
|
|
host,
|
|
webUrl,
|
|
canCloneLocally:
|
|
host.kind === "buzz" ||
|
|
(host.kind === "external" && host.host === "github.com"),
|
|
controls: {
|
|
externalUrl: host.kind === "external" ? webUrl : null,
|
|
remoteKind: host.kind === "unresolved" ? undefined : host.kind,
|
|
remoteLabel: host.kind === "external" ? host.host : "Remote",
|
|
},
|
|
};
|
|
}
|