Yuki Takei 1 год назад
Родитель
Сommit
4322409369

+ 14 - 3
apps/app/src/components/Script/DrawioViewerScript/use-viewer-min-js-url.spec.ts

@@ -25,11 +25,22 @@ describe('useViewerMinJsUrl', () => {
   });
 
   it.each`
-    drawioUri  | expected
-    ${undefined}      | ${'http://localhost/js/viewer.min.js'}
-  `('should return the expected URL "$expected" when drawioUri is "$drawioUrk"', () => {
+    drawioUri                                     | expected
+    ${undefined}                                  | ${'http://localhost/js/viewer.min.js'}
+    ${'http://localhost:8080'}                    | ${'http://localhost:8080/js/viewer.min.js'}
+    ${'http://example.com'}                       | ${'http://example.com/js/viewer.min.js'}
+    ${'http://example.com/drawio'}                | ${'http://example.com/drawio/js/viewer.min.js'}
+    ${'http://example.com/?offline=1&https=0'}    | ${'http://example.com/js/viewer.min.js?offline=1&https=0'}
+  `('should return the expected URL "$expected" when drawioUri is "$drawioUrk"', ({ drawioUri, expected }: {drawioUri: string|undefined, expected: string}) => {
     // Arrange
+    mocks.useRendererConfigMock.mockImplementation(() => {
+      return { data: { drawioUri } };
+    });
+
     // Act
+    const url = useViewerMinJsUrl();
+
     // Assert
+    expect(url).toBe(expected);
   });
 });

+ 9 - 1
apps/app/src/components/Script/DrawioViewerScript/use-viewer-min-js-url.ts

@@ -1,7 +1,15 @@
+import urljoin from 'url-join';
+
 import { useRendererConfig } from '~/stores/context';
 
 export const useViewerMinJsUrl = (): string => {
   const { data: rendererConfig } = useRendererConfig();
 
-  return (new URL('/js/viewer.min.js', rendererConfig?.drawioUri ?? 'http://localhost')).toString();
+  const { drawioUri: _drawioUriStr = 'http://localhost' } = rendererConfig ?? {};
+
+  // extract search from URL
+  const drawioUri = new URL(_drawioUriStr);
+  const pathname = urljoin(drawioUri.pathname, '/js/viewer.min.js');
+
+  return `${drawioUri.origin}${pathname}${drawioUri.search}`;
 };