beam: pass model settings source to viewer

This commit is contained in:
DCCONSTRUCTIONS 2026-06-05 01:58:06 +03:00
parent 31dca29560
commit 15c9fb1df1
2 changed files with 24 additions and 2 deletions

View File

@ -70,6 +70,17 @@ const getUsableBeamViewerUrl = (url: string | undefined): string | undefined =>
} }
}; };
const withBeamViewerSettingsSrc = (url: string | undefined, settingsSrc: string | undefined): string | undefined => {
if (!url || !settingsSrc) return url;
try {
const parsedUrl = new URL(url, "http://localhost");
if (!parsedUrl.searchParams.has("settingsSrc")) parsedUrl.searchParams.set("settingsSrc", settingsSrc);
return parsedUrl.toString();
} catch (_error) {
return url;
}
};
const getPreviewType = (extension: string) => { const getPreviewType = (extension: string) => {
const normalizedExtension = extension.toLowerCase(); const normalizedExtension = extension.toLowerCase();
if (IMAGE_EXTENSIONS.has(normalizedExtension)) return "image"; if (IMAGE_EXTENSIONS.has(normalizedExtension)) return "image";
@ -101,6 +112,7 @@ const buildSyncedBeamViewerAttachment = (
previewAvailable: true, previewAvailable: true,
viewerUrl: buildBeamViewerUrl({ viewerUrl: buildBeamViewerUrl({
name: fullFileName, name: fullFileName,
settingsSrc: status.sourceSrc || beamViewer.conversion?.sourceSrc || beamViewer.src,
src: status.artifactUrl, src: status.artifactUrl,
type: artifactType, type: artifactType,
}), }),
@ -146,14 +158,17 @@ export const IssueAttachmentsListItem = observer(function IssueAttachmentsListIt
const attachmentService = useMemo(() => new IssueAttachmentService(issueServiceType), [issueServiceType]); const attachmentService = useMemo(() => new IssueAttachmentService(issueServiceType), [issueServiceType]);
const resolvedArtifactUrl = beamConversionStatus?.status === "ready" ? beamConversionStatus.artifactUrl : undefined; const resolvedArtifactUrl = beamConversionStatus?.status === "ready" ? beamConversionStatus.artifactUrl : undefined;
const storedModelViewerUrl = getUsableBeamViewerUrl(beamViewer?.viewerUrl); const storedModelViewerUrl = getUsableBeamViewerUrl(beamViewer?.viewerUrl);
const beamViewerSettingsSrc = beamConversionStatus?.sourceSrc || beamViewer?.conversion?.sourceSrc || beamViewer?.src;
const storedModelViewerUrlWithSettings = withBeamViewerSettingsSrc(storedModelViewerUrl, beamViewerSettingsSrc);
const modelViewerUrl = const modelViewerUrl =
(resolvedArtifactUrl (resolvedArtifactUrl
? buildBeamViewerUrl({ ? buildBeamViewerUrl({
name: fullFileName, name: fullFileName,
settingsSrc: beamViewerSettingsSrc,
src: resolvedArtifactUrl, src: resolvedArtifactUrl,
type: beamConversionStatus?.artifactType || "gltf", type: beamConversionStatus?.artifactType || "gltf",
}) })
: undefined) || storedModelViewerUrl; : undefined) || storedModelViewerUrlWithSettings;
const modelDownloadUrl = beamViewer?.downloadUrl || beamViewer?.src; const modelDownloadUrl = beamViewer?.downloadUrl || beamViewer?.src;
const previewDownloadUrl = modelDownloadUrl || fileURL; const previewDownloadUrl = modelDownloadUrl || fileURL;
const isBeamModel = isBeamModelFile(fullFileName); const isBeamModel = isBeamModelFile(fullFileName);

View File

@ -121,12 +121,18 @@ export const isBeamModelFile = (name: string | undefined): boolean => !!getBeamM
export const isBeamDirectViewerFile = (name: string | undefined): boolean => !!getBeamDirectModelTypeFromName(name); export const isBeamDirectViewerFile = (name: string | undefined): boolean => !!getBeamDirectModelTypeFromName(name);
export const buildBeamViewerUrl = (params: { name?: string; src: string; type?: string | null }): string => { export const buildBeamViewerUrl = (params: {
name?: string;
settingsSrc?: string;
src: string;
type?: string | null;
}): string => {
const viewerUrl = new URL(getBeamViewerBaseUrl()); const viewerUrl = new URL(getBeamViewerBaseUrl());
viewerUrl.searchParams.set("url", params.src); viewerUrl.searchParams.set("url", params.src);
if (params.type) viewerUrl.searchParams.set("type", params.type); if (params.type) viewerUrl.searchParams.set("type", params.type);
if (params.type === "gltf" || params.type === "glb") viewerUrl.searchParams.set("edges", "false"); if (params.type === "gltf" || params.type === "glb") viewerUrl.searchParams.set("edges", "false");
if (params.name) viewerUrl.searchParams.set("name", params.name); if (params.name) viewerUrl.searchParams.set("name", params.name);
if (params.settingsSrc) viewerUrl.searchParams.set("settingsSrc", params.settingsSrc);
return viewerUrl.toString(); return viewerUrl.toString();
}; };
@ -237,6 +243,7 @@ export const uploadBeamModelFile = (
...baseAttachment, ...baseAttachment,
viewerUrl: buildBeamViewerUrl({ viewerUrl: buildBeamViewerUrl({
name: file.name, name: file.name,
settingsSrc: downloadUrl.toString(),
src: downloadUrl.toString(), src: downloadUrl.toString(),
type: directViewerType, type: directViewerType,
}), }),