@atlaskit/media-viewer 53.2.5 → 54.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/AGENTS.md +62 -0
  2. package/CHANGELOG.md +38 -0
  3. package/classnames/package.json +1 -8
  4. package/dist/cjs/analytics/index.js +1 -1
  5. package/dist/cjs/analytics/ufoExperiences.js +1 -1
  6. package/dist/cjs/components/media-viewer.js +4 -2
  7. package/dist/cjs/download.js +2 -2
  8. package/dist/cjs/header.js +27 -2
  9. package/dist/cjs/list.js +4 -2
  10. package/dist/cjs/media-viewer.js +4 -2
  11. package/dist/cjs/utils/getObjectUrlFromFileState.js +15 -16
  12. package/dist/cjs/utils/index.js +16 -17
  13. package/dist/cjs/viewers/archiveSidebar/archive-sidebar-folder-entry.js +11 -11
  14. package/dist/cjs/viewers/archiveSidebar/archive-sidebar-renderer.js +12 -12
  15. package/dist/cjs/viewers/archiveSidebar/archive-sidebar.js +28 -28
  16. package/dist/cjs/viewers/archiveSidebar/archive.js +29 -29
  17. package/dist/cjs/viewers/archiveSidebar/archiveViewerLoader.js +12 -12
  18. package/dist/cjs/viewers/audio.js +37 -37
  19. package/dist/cjs/viewers/codeViewer/codeViewerRenderer-compiled.js +2 -2
  20. package/dist/cjs/viewers/codeViewer/index.js +35 -35
  21. package/dist/cjs/viewers/doc/doc-viewer.js +29 -27
  22. package/dist/cjs/viewers/doc/index.js +2 -2
  23. package/dist/cjs/viewers/image/index.js +43 -44
  24. package/dist/cjs/viewers/video.js +20 -20
  25. package/dist/es2019/analytics/index.js +1 -1
  26. package/dist/es2019/analytics/ufoExperiences.js +1 -1
  27. package/dist/es2019/components/media-viewer.js +4 -2
  28. package/dist/es2019/header.js +24 -2
  29. package/dist/es2019/list.js +4 -2
  30. package/dist/es2019/media-viewer.js +4 -2
  31. package/dist/esm/analytics/index.js +1 -1
  32. package/dist/esm/analytics/ufoExperiences.js +1 -1
  33. package/dist/esm/components/media-viewer.js +4 -2
  34. package/dist/esm/download.js +2 -2
  35. package/dist/esm/header.js +27 -2
  36. package/dist/esm/list.js +4 -2
  37. package/dist/esm/media-viewer.js +4 -2
  38. package/dist/esm/utils/getObjectUrlFromFileState.js +15 -16
  39. package/dist/esm/utils/index.js +16 -17
  40. package/dist/esm/viewers/archiveSidebar/archive-sidebar-folder-entry.js +11 -11
  41. package/dist/esm/viewers/archiveSidebar/archive-sidebar-renderer.js +11 -11
  42. package/dist/esm/viewers/archiveSidebar/archive-sidebar.js +28 -28
  43. package/dist/esm/viewers/archiveSidebar/archive.js +29 -29
  44. package/dist/esm/viewers/archiveSidebar/archiveViewerLoader.js +11 -11
  45. package/dist/esm/viewers/audio.js +37 -37
  46. package/dist/esm/viewers/codeViewer/codeViewerRenderer-compiled.js +2 -2
  47. package/dist/esm/viewers/codeViewer/index.js +34 -34
  48. package/dist/esm/viewers/doc/doc-viewer.js +28 -26
  49. package/dist/esm/viewers/doc/index.js +2 -2
  50. package/dist/esm/viewers/image/index.js +43 -44
  51. package/dist/esm/viewers/video.js +20 -20
  52. package/dist/types/components/media-viewer.d.ts +1 -1
  53. package/dist/types/components/types.d.ts +1 -0
  54. package/dist/types/header.d.ts +2 -1
  55. package/dist/types/list.d.ts +2 -1
  56. package/dist/types/media-viewer.d.ts +1 -0
  57. package/media-viewer-loader/package.json +1 -8
  58. package/package.json +34 -42
  59. package/types/package.json +1 -8
  60. package/viewer-options/package.json +1 -8
  61. package/dist/types-ts4.5/analytics/events/index.d.ts +0 -17
  62. package/dist/types-ts4.5/analytics/events/operational/_mediaFile.d.ts +0 -3
  63. package/dist/types-ts4.5/analytics/events/operational/commenced.d.ts +0 -5
  64. package/dist/types-ts4.5/analytics/events/operational/download.d.ts +0 -9
  65. package/dist/types-ts4.5/analytics/events/operational/loadFailed.d.ts +0 -7
  66. package/dist/types-ts4.5/analytics/events/operational/loadSucceeded.d.ts +0 -11
  67. package/dist/types-ts4.5/analytics/events/operational/previewUnsupported.d.ts +0 -6
  68. package/dist/types-ts4.5/analytics/events/operational/zipEntryLoadFailed.d.ts +0 -13
  69. package/dist/types-ts4.5/analytics/events/operational/zipEntryLoadSucceeded.d.ts +0 -12
  70. package/dist/types-ts4.5/analytics/events/screen/modal.d.ts +0 -3
  71. package/dist/types-ts4.5/analytics/events/screen/passwordPdf.d.ts +0 -3
  72. package/dist/types-ts4.5/analytics/events/screen/pdfPasswordInput.d.ts +0 -3
  73. package/dist/types-ts4.5/analytics/events/ui/_clickedButton.d.ts +0 -2
  74. package/dist/types-ts4.5/analytics/events/ui/closed.d.ts +0 -8
  75. package/dist/types-ts4.5/analytics/events/ui/downloadButtonClicked.d.ts +0 -8
  76. package/dist/types-ts4.5/analytics/events/ui/failedPreviewDownloadButtonClicked.d.ts +0 -10
  77. package/dist/types-ts4.5/analytics/events/ui/navigated.d.ts +0 -12
  78. package/dist/types-ts4.5/analytics/events/ui/zoomInButtonClicked.d.ts +0 -8
  79. package/dist/types-ts4.5/analytics/events/ui/zoomOutButtonClicked.d.ts +0 -6
  80. package/dist/types-ts4.5/analytics/index.d.ts +0 -17
  81. package/dist/types-ts4.5/analytics/ufoExperiences.d.ts +0 -19
  82. package/dist/types-ts4.5/classnames.d.ts +0 -5
  83. package/dist/types-ts4.5/components/media-viewer-error-boundary.d.ts +0 -3
  84. package/dist/types-ts4.5/components/media-viewer-loader.d.ts +0 -3
  85. package/dist/types-ts4.5/components/media-viewer.d.ts +0 -5
  86. package/dist/types-ts4.5/components/portal.d.ts +0 -4
  87. package/dist/types-ts4.5/components/types.d.ts +0 -45
  88. package/dist/types-ts4.5/content.d.ts +0 -11
  89. package/dist/types-ts4.5/domain/index.d.ts +0 -1
  90. package/dist/types-ts4.5/domain/outcome.d.ts +0 -31
  91. package/dist/types-ts4.5/domain/zoomLevel.d.ts +0 -15
  92. package/dist/types-ts4.5/download.d.ts +0 -20
  93. package/dist/types-ts4.5/error-images.d.ts +0 -2
  94. package/dist/types-ts4.5/errorMessage.d.ts +0 -33
  95. package/dist/types-ts4.5/errors.d.ts +0 -23
  96. package/dist/types-ts4.5/header.d.ts +0 -19
  97. package/dist/types-ts4.5/index.d.ts +0 -3
  98. package/dist/types-ts4.5/item-viewer.d.ts +0 -32
  99. package/dist/types-ts4.5/list.d.ts +0 -24
  100. package/dist/types-ts4.5/loading.d.ts +0 -2
  101. package/dist/types-ts4.5/media-viewer.d.ts +0 -16
  102. package/dist/types-ts4.5/navigation.d.ts +0 -25
  103. package/dist/types-ts4.5/styleWrappers.d.ts +0 -122
  104. package/dist/types-ts4.5/styles.d.ts +0 -2
  105. package/dist/types-ts4.5/utils/closeOnDirectClick.d.ts +0 -2
  106. package/dist/types-ts4.5/utils/getIdentifierCollection.d.ts +0 -2
  107. package/dist/types-ts4.5/utils/getObjectUrlFromFileState.d.ts +0 -2
  108. package/dist/types-ts4.5/utils/index.d.ts +0 -10
  109. package/dist/types-ts4.5/utils/isIE.d.ts +0 -1
  110. package/dist/types-ts4.5/viewerOptions.d.ts +0 -20
  111. package/dist/types-ts4.5/viewers/archiveSidebar/archive-download-button.d.ts +0 -8
  112. package/dist/types-ts4.5/viewers/archiveSidebar/archive-sidebar-folder-entry.d.ts +0 -24
  113. package/dist/types-ts4.5/viewers/archiveSidebar/archive-sidebar-header.d.ts +0 -9
  114. package/dist/types-ts4.5/viewers/archiveSidebar/archive-sidebar-renderer.d.ts +0 -26
  115. package/dist/types-ts4.5/viewers/archiveSidebar/archive-sidebar.d.ts +0 -28
  116. package/dist/types-ts4.5/viewers/archiveSidebar/archive.d.ts +0 -37
  117. package/dist/types-ts4.5/viewers/archiveSidebar/archiveViewerLoader.d.ts +0 -12
  118. package/dist/types-ts4.5/viewers/archiveSidebar/consts.d.ts +0 -2
  119. package/dist/types-ts4.5/viewers/archiveSidebar/custom-button-item.d.ts +0 -2
  120. package/dist/types-ts4.5/viewers/archiveSidebar/nativePdfViewer.d.ts +0 -9
  121. package/dist/types-ts4.5/viewers/archiveSidebar/styleWrappers.d.ts +0 -30
  122. package/dist/types-ts4.5/viewers/archiveSidebar/styles.d.ts +0 -1
  123. package/dist/types-ts4.5/viewers/archiveSidebar/types.d.ts +0 -13
  124. package/dist/types-ts4.5/viewers/audio.d.ts +0 -33
  125. package/dist/types-ts4.5/viewers/base-viewer.d.ts +0 -32
  126. package/dist/types-ts4.5/viewers/codeViewer/CodeRendererAdvanced/CodeRendererAdvanced.d.ts +0 -11
  127. package/dist/types-ts4.5/viewers/codeViewer/CodeRendererAdvanced/theme.d.ts +0 -4
  128. package/dist/types-ts4.5/viewers/codeViewer/codeViewerRenderer-compiled.d.ts +0 -29
  129. package/dist/types-ts4.5/viewers/codeViewer/codeViewerRenderer.d.ts +0 -23
  130. package/dist/types-ts4.5/viewers/codeViewer/index.d.ts +0 -27
  131. package/dist/types-ts4.5/viewers/codeViewer/msg-parser.d.ts +0 -8
  132. package/dist/types-ts4.5/viewers/codeViewer/styles.d.ts +0 -4
  133. package/dist/types-ts4.5/viewers/codeViewer/util.d.ts +0 -4
  134. package/dist/types-ts4.5/viewers/customViewer/customViewer.d.ts +0 -13
  135. package/dist/types-ts4.5/viewers/doc/doc-viewer.d.ts +0 -13
  136. package/dist/types-ts4.5/viewers/doc/index.d.ts +0 -36
  137. package/dist/types-ts4.5/viewers/doc/passwordInput.d.ts +0 -10
  138. package/dist/types-ts4.5/viewers/image/index.d.ts +0 -35
  139. package/dist/types-ts4.5/viewers/image/interactive-img.d.ts +0 -42
  140. package/dist/types-ts4.5/viewers/modalSpinner.d.ts +0 -8
  141. package/dist/types-ts4.5/viewers/svg/ImageWrapper-compiled.d.ts +0 -7
  142. package/dist/types-ts4.5/viewers/svg/ImageWrapper.d.ts +0 -7
  143. package/dist/types-ts4.5/viewers/svg/errors.d.ts +0 -3
  144. package/dist/types-ts4.5/viewers/svg/index.d.ts +0 -14
  145. package/dist/types-ts4.5/viewers/svg/utils.d.ts +0 -5
  146. package/dist/types-ts4.5/viewers/video.d.ts +0 -32
  147. package/dist/types-ts4.5/zoomControls.d.ts +0 -15
package/AGENTS.md ADDED
@@ -0,0 +1,62 @@
1
+ # media-viewer — Agent Guide
2
+
3
+ > **Parent guide:** Always read [`../AGENTS.md`](../AGENTS.md) before working in this package — it
4
+ > contains workspace-wide rules covering platform guidelines, changeset workflow, accessibility
5
+ > standards, and the knowledge index protocol that applies to every Media package.
6
+
7
+ ## Package identity
8
+
9
+ | Field | Value |
10
+ | -------- | ---------------------------------------------------------------------------------------------------------------------------- |
11
+ | NPM name | `@atlaskit/media-viewer` |
12
+ | Path | `media-viewer/` |
13
+ | Owner | Media Exif |
14
+ | Purpose | Full-screen media viewer — powerful and extendable viewer for images, video, audio, documents, SVG, archives, and code files |
15
+
16
+ ## Knowledge index
17
+
18
+ > Read, search, edit, investigate, and validate the repository knowledge index at
19
+ > `.agents/knowledge-index/`. ALWAYS use this skill before making ANY repo change, or when exploring
20
+ > the codebase. The knowledge index is the canonical starting point for every coding task in this
21
+ > repo, trigger this skill aggressively whenever the user mentions architecture, conventions,
22
+ > packages, modules, services, build, coding, writing code, APIs, feature flags, testing, or
23
+ > anything similar. Also trigger when "is the knowledge index up to date?" / "update the knowledge
24
+ > index" / "what does the knowledge index say about Y?" — even if they don't say the words
25
+ > "knowledge index". Also use it (via the `validate` subcommand) to detect drift between the
26
+ > codebase and the docs after any code change. Use the `generate` subcommand to bootstrap the index
27
+ > in a new repository.
28
+
29
+ **Entry point:** `.agents/knowledge-index/INDEX.md` **Unit doc:**
30
+ `.agents/knowledge-index/domains/media/units/atlaskit-media-viewer.md` **CLI:**
31
+ `python3 .agents/skills/knowledge-index/scripts/kg.py {find,read,edit,investigate,validate,init,explore,generate} …`
32
+ **Refresh protocol:** never silently bump `Last verified` — always re-read the listed `Sources`
33
+ first, edit, then `kg.py edit <path> --message "<reason>"`.
34
+
35
+ ## Key source files
36
+
37
+ - `src/index.ts` — public API entry point
38
+ - `src/media-viewer.tsx` — root `MediaViewer` component
39
+ - `src/viewers/` — per-format viewer implementations (image, video, doc, SVG, code, archive, custom)
40
+ - `src/components/` — shared viewer UI components
41
+ - `src/analytics/` — analytics event definitions and helpers
42
+ - `src/domain/` — domain types and state
43
+ - `src/utils/` — shared utilities
44
+ - `src/header.tsx` — viewer header bar
45
+ - `src/navigation.tsx` — multi-file navigation
46
+ - `src/content.tsx` — content area
47
+
48
+ ## Public API (key exports)
49
+
50
+ `MediaViewer` (default), `MediaViewerExtensions`, `MediaViewerExtensionsActions`,
51
+ `MediaViewerProps`, `MediaMessage`, `ViewerOptionsProps`, `CustomRendererConfig`,
52
+ `CustomRendererStateProps`, `CustomRendererProps`, `ArchiveFileItem`
53
+
54
+ ## Development notes
55
+
56
+ - React Compiler is enabled for this package
57
+ - Peer dependencies: `@emotion/react`, `react`, `react-intl`
58
+ - Export subpaths: `.`, `./classnames`, `./media-viewer-loader`, `./types`, `./viewer-options`
59
+ - Supports custom viewer via `CustomRendererConfig`
60
+ - Large test suite: 50+ test files under `src/__tests__/`
61
+ - All new behaviour changes must be behind a feature gate (`fg()` from
62
+ `@atlaskit/platform-feature-flags`)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # @atlaskit/media-viewer
2
2
 
3
+ ## 54.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`19773530cd51c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/19773530cd51c) -
8
+ Add fallbackMediaNameFetcher support to MediaCard (FileCard) and MediaViewer (header display),
9
+ gated behind the platform_editor_media_name_fallback_viewer_card experiment
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
15
+ ## 54.0.0
16
+
17
+ ### Major Changes
18
+
19
+ - [`f2dc9097319f0`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f2dc9097319f0) - ###
20
+ Dropped support for _legacy_ Typescript 4 types. **Typescript 5 is now the new minimum**.
21
+
22
+ Removes the `typesVersions` property and `dist/types-ts4.5` directory from the dist.
23
+
24
+ Types are now exclusively via the `"types": "dist/types/index.d.ts"` property.
25
+
26
+ ```diff
27
+ - "typesVersions": {
28
+ - ">=4.5 <4.9": {
29
+ - "*": [
30
+ - "dist/types-ts4.5/*",
31
+ - "dist/types-ts4.5/index.d.ts"
32
+ - ]
33
+ - }
34
+ - },
35
+ ```
36
+
37
+ ### Patch Changes
38
+
39
+ - Updated dependencies
40
+
3
41
  ## 53.2.5
4
42
 
5
43
  ### Patch Changes
@@ -6,12 +6,5 @@
6
6
  "sideEffects": [
7
7
  "*.compiled.css"
8
8
  ],
9
- "types": "../dist/types/classnames.d.ts",
10
- "typesVersions": {
11
- ">=4.5 <5.9": {
12
- "*": [
13
- "../dist/types-ts4.5/classnames.d.ts"
14
- ]
15
- }
16
- }
9
+ "types": "../dist/types/classnames.d.ts"
17
10
  }
@@ -10,7 +10,7 @@ exports.packageVersion = exports.packageName = void 0;
10
10
  var _analytics = require("@atlaskit/media-common/analytics");
11
11
  var componentName = exports.component = exports.componentName = 'mediaViewer';
12
12
  var packageName = exports.packageName = "@atlaskit/media-viewer";
13
- var packageVersion = exports.packageVersion = "53.2.4";
13
+ var packageVersion = exports.packageVersion = "54.0.0";
14
14
  function getFileAttributes(fileState) {
15
15
  if (!fileState) {
16
16
  return {
@@ -13,7 +13,7 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
13
13
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
14
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
15
  var packageName = "@atlaskit/media-viewer";
16
- var packageVersion = "53.2.4";
16
+ var packageVersion = "54.0.0";
17
17
  var ufoExperience;
18
18
  var getExperience = function getExperience() {
19
19
  if (!ufoExperience) {
@@ -48,7 +48,8 @@ var MediaViewerBase = exports.MediaViewerBase = function MediaViewerBase(_ref) {
48
48
  items = _ref.items,
49
49
  extensions = _ref.extensions,
50
50
  contextId = _ref.contextId,
51
- viewerOptions = _ref.viewerOptions;
51
+ viewerOptions = _ref.viewerOptions,
52
+ fallbackMediaNameFetcher = _ref.fallbackMediaNameFetcher;
52
53
  var _useMemo = (0, _react.useMemo)(function () {
53
54
  return normaliseItems(items, selectedItem, collectionName);
54
55
  }, [items, selectedItem, collectionName]),
@@ -82,7 +83,8 @@ var MediaViewerBase = exports.MediaViewerBase = function MediaViewerBase(_ref) {
82
83
  featureFlags: featureFlags,
83
84
  extensions: extensions,
84
85
  contextId: contextId,
85
- viewerOptions: viewerOptions
86
+ viewerOptions: viewerOptions,
87
+ fallbackMediaNameFetcher: fallbackMediaNameFetcher
86
88
  });
87
89
  };
88
90
 
@@ -57,7 +57,7 @@ function DownloadButton(_ref) {
57
57
  var createItemDownloader = function createItemDownloader(file, mediaClient, options) {
58
58
  return /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
59
59
  var collectionName, traceContext, createAnalyticsEvent, id, name;
60
- return _regenerator.default.wrap(function _callee$(_context) {
60
+ return _regenerator.default.wrap(function (_context) {
61
61
  while (1) switch (_context.prev = _context.next) {
62
62
  case 0:
63
63
  collectionName = options.collectionName, traceContext = options.traceContext, createAnalyticsEvent = options.createAnalyticsEvent;
@@ -68,7 +68,7 @@ var createItemDownloader = function createItemDownloader(file, mediaClient, opti
68
68
  }).catch(function (e) {
69
69
  (0, _analytics.fireAnalytics)((0, _download2.createDownloadFailedEventPayload)(file.id, new _errors.MediaViewerError('download', e), file, traceContext), createAnalyticsEvent);
70
70
  });
71
- case 4:
71
+ case 1:
72
72
  case "end":
73
73
  return _context.stop();
74
74
  }
@@ -19,6 +19,7 @@ var _mediaClientReact = require("@atlaskit/media-client-react");
19
19
  var _mimeTypeIcon = require("@atlaskit/media-ui/mime-type-icon");
20
20
  var _util = require("./viewers/codeViewer/util");
21
21
  var _errors = require("./errors");
22
+ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
22
23
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
23
24
  var Header = exports.Header = function Header(_ref) {
24
25
  var _extensions$headerAct;
@@ -30,12 +31,19 @@ var Header = exports.Header = function Header(_ref) {
30
31
  identifier = _ref.identifier,
31
32
  onClose = _ref.onClose,
32
33
  onSetArchiveSideBarVisible = _ref.onSetArchiveSideBarVisible,
33
- traceContext = _ref.traceContext;
34
+ traceContext = _ref.traceContext,
35
+ fallbackMediaNameFetcher = _ref.fallbackMediaNameFetcher;
34
36
  // States
35
37
  var _useState = (0, _react.useState)(_domain.Outcome.pending()),
36
38
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
37
39
  item = _useState2[0],
38
40
  setItem = _useState2[1];
41
+ var _useState3 = (0, _react.useState)(),
42
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
43
+ fallbackMediaName = _useState4[0],
44
+ setFallbackMediaName = _useState4[1];
45
+ var fallbackMediaNameFetchAttempted = (0, _react.useRef)(false);
46
+ var lastFetchedFileId = (0, _react.useRef)();
39
47
 
40
48
  // Refs and Hooks
41
49
  var mediaClient = (0, _mediaClientReact.useMediaClient)();
@@ -81,6 +89,23 @@ var Header = exports.Header = function Header(_ref) {
81
89
  setItem(_domain.Outcome.failed(new _errors.MediaViewerError('header-fetch-metadata', (0, _mediaClient.toCommonMediaClientError)(fileState))));
82
90
  }
83
91
  }, [fileState, identifier]);
92
+ (0, _react.useEffect)(function () {
93
+ // Reset fetch state when the file identity changes (e.g. navigating in viewer)
94
+ var currentId = (fileState === null || fileState === void 0 ? void 0 : fileState.status) !== 'error' ? fileState === null || fileState === void 0 ? void 0 : fileState.id : undefined;
95
+ if (currentId && currentId !== lastFetchedFileId.current && (0, _expValEquals.expValEquals)('platform_editor_media_name_fallback_viewer_card', 'isEnabled', true)) {
96
+ fallbackMediaNameFetchAttempted.current = false;
97
+ setFallbackMediaName(undefined);
98
+ lastFetchedFileId.current = currentId;
99
+ }
100
+ if (fileState && fileState.status !== 'error' && !fileState.name && fallbackMediaNameFetcher && !fallbackMediaNameFetchAttempted.current && (0, _expValEquals.expValEquals)('platform_editor_media_name_fallback_viewer_card', 'isEnabled', true)) {
101
+ fallbackMediaNameFetchAttempted.current = true;
102
+ fallbackMediaNameFetcher(fileState.id).then(function (name) {
103
+ setFallbackMediaName(name);
104
+ }, function () {
105
+ // Silently ignore fetch failures
106
+ });
107
+ }
108
+ }, [fileState, fallbackMediaNameFetcher]);
84
109
  var renderFileTypeText = function renderFileTypeText(item) {
85
110
  // render appropriate header if its a code/email item and the feature flag is enabled
86
111
  if ((0, _codeViewer.isCodeViewerItem)(item.name, item.mimeType)) {
@@ -128,7 +153,7 @@ var Header = exports.Header = function Header(_ref) {
128
153
  name: item.name
129
154
  })), /*#__PURE__*/_react.default.createElement(_styleWrappers.MedatadataTextWrapper, null, /*#__PURE__*/_react.default.createElement(_styleWrappers.MetadataFileName, {
130
155
  "data-testid": "media-viewer-file-name"
131
- }, item.name || /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, _mediaUi.messages.unknown)), /*#__PURE__*/_react.default.createElement(_styleWrappers.MetadataSubText, {
156
+ }, item.name || (0, _expValEquals.expValEquals)('platform_editor_media_name_fallback_viewer_card', 'isEnabled', true) && fallbackMediaName || /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, _mediaUi.messages.unknown)), /*#__PURE__*/_react.default.createElement(_styleWrappers.MetadataSubText, {
132
157
  "data-testid": "media-viewer-file-metadata-text"
133
158
  }, /*#__PURE__*/_react.default.createElement(_styleWrappers.FormattedMessageWrapper, null, renderFileTypeText(item)), item.size ? ' · ' + (0, _mediaUi.toHumanReadableMediaSize)(item.size) : '')));
134
159
  },
package/dist/cjs/list.js CHANGED
@@ -26,7 +26,8 @@ var List = exports.List = function List(_ref) {
26
26
  isSidebarVisible = _ref.isSidebarVisible,
27
27
  onNavigationChange = _ref.onNavigationChange,
28
28
  items = _ref.items,
29
- viewerOptions = _ref.viewerOptions;
29
+ viewerOptions = _ref.viewerOptions,
30
+ fallbackMediaNameFetcher = _ref.fallbackMediaNameFetcher;
30
31
  var _useState = (0, _react.useState)(defaultSelectedItem),
31
32
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
32
33
  selectedItem = _useState2[0],
@@ -56,7 +57,8 @@ var List = exports.List = function List(_ref) {
56
57
  isArchiveSideBarVisible: isArchiveSideBarVisible,
57
58
  featureFlags: featureFlags,
58
59
  onSetArchiveSideBarVisible: setIsArchiveSideBarVisible,
59
- traceContext: traceContext.current
60
+ traceContext: traceContext.current,
61
+ fallbackMediaNameFetcher: fallbackMediaNameFetcher
60
62
  })), /*#__PURE__*/_react.default.createElement(_itemViewer.ItemViewer, {
61
63
  identifier: selectedItem,
62
64
  showControls: showControls,
@@ -32,7 +32,8 @@ var MediaViewerComponent = function MediaViewerComponent(_ref) {
32
32
  _onClose = _ref.onClose,
33
33
  selectedItem = _ref.selectedItem,
34
34
  intl = _ref.intl,
35
- viewerOptions = _ref.viewerOptions;
35
+ viewerOptions = _ref.viewerOptions,
36
+ fallbackMediaNameFetcher = _ref.fallbackMediaNameFetcher;
36
37
  var _useState = (0, _react.useState)(false),
37
38
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
38
39
  isSidebarVisible = _useState2[0],
@@ -96,7 +97,8 @@ var MediaViewerComponent = function MediaViewerComponent(_ref) {
96
97
  isSidebarVisible: isSidebarVisible,
97
98
  contextId: contextId,
98
99
  featureFlags: featureFlags,
99
- viewerOptions: viewerOptions
100
+ viewerOptions: viewerOptions,
101
+ fallbackMediaNameFetcher: fallbackMediaNameFetcher
100
102
  })), renderSidebar()));
101
103
  return intl ? content : /*#__PURE__*/_react.default.createElement(_reactIntl.IntlProvider, {
102
104
  locale: "en"
@@ -10,37 +10,36 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
10
10
  var _mediaClient = require("@atlaskit/media-client");
11
11
  var getObjectUrlFromFileState = exports.getObjectUrlFromFileState = /*#__PURE__*/function () {
12
12
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(state) {
13
- var preview;
14
- return _regenerator.default.wrap(function _callee$(_context) {
13
+ var preview, _t, _t2;
14
+ return _regenerator.default.wrap(function (_context) {
15
15
  while (1) switch (_context.prev = _context.next) {
16
16
  case 0:
17
17
  if ((0, _mediaClient.isErrorFileState)(state)) {
18
- _context.next = 14;
18
+ _context.next = 4;
19
19
  break;
20
20
  }
21
21
  preview = state.preview;
22
22
  if (!preview) {
23
- _context.next = 14;
23
+ _context.next = 4;
24
24
  break;
25
25
  }
26
- _context.prev = 3;
27
- _context.t0 = URL;
28
- _context.next = 7;
26
+ _context.prev = 1;
27
+ _t = URL;
28
+ _context.next = 2;
29
29
  return preview;
30
- case 7:
31
- _context.t1 = _context.sent.value;
32
- return _context.abrupt("return", _context.t0.createObjectURL.call(_context.t0, _context.t1));
33
- case 11:
34
- _context.prev = 11;
35
- _context.t2 = _context["catch"](3);
30
+ case 2:
31
+ return _context.abrupt("return", _t.createObjectURL.call(_t, _context.sent.value));
32
+ case 3:
33
+ _context.prev = 3;
34
+ _t2 = _context["catch"](1);
36
35
  return _context.abrupt("return", undefined);
37
- case 14:
36
+ case 4:
38
37
  return _context.abrupt("return", undefined);
39
- case 15:
38
+ case 5:
40
39
  case "end":
41
40
  return _context.stop();
42
41
  }
43
- }, _callee, null, [[3, 11]]);
42
+ }, _callee, null, [[1, 3]]);
44
43
  }));
45
44
  return function getObjectUrlFromFileState(_x) {
46
45
  return _ref.apply(this, arguments);
@@ -74,35 +74,34 @@ var rejectAfter = exports.rejectAfter = function rejectAfter(fn) {
74
74
  var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5000;
75
75
  return new Promise( /*#__PURE__*/function () {
76
76
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(resolve, reject) {
77
- var timeoutId;
78
- return _regenerator.default.wrap(function _callee$(_context) {
77
+ var timeoutId, _t, _t2;
78
+ return _regenerator.default.wrap(function (_context) {
79
79
  while (1) switch (_context.prev = _context.next) {
80
80
  case 0:
81
81
  timeoutId = setTimeout(function () {
82
82
  return reject(new Error('timed out'));
83
83
  }, delay);
84
84
  _context.prev = 1;
85
- _context.t0 = resolve;
86
- _context.next = 5;
85
+ _t = resolve;
86
+ _context.next = 2;
87
87
  return fn();
88
- case 5:
89
- _context.t1 = _context.sent;
90
- (0, _context.t0)(_context.t1);
91
- _context.next = 12;
88
+ case 2:
89
+ _t(_context.sent);
90
+ _context.next = 4;
92
91
  break;
93
- case 9:
94
- _context.prev = 9;
95
- _context.t2 = _context["catch"](1);
96
- reject(_context.t2);
97
- case 12:
98
- _context.prev = 12;
92
+ case 3:
93
+ _context.prev = 3;
94
+ _t2 = _context["catch"](1);
95
+ reject(_t2);
96
+ case 4:
97
+ _context.prev = 4;
99
98
  clearTimeout(timeoutId);
100
- return _context.finish(12);
101
- case 15:
99
+ return _context.finish(4);
100
+ case 5:
102
101
  case "end":
103
102
  return _context.stop();
104
103
  }
105
- }, _callee, null, [[1, 9, 12, 15]]);
104
+ }, _callee, null, [[1, 3, 4, 5]]);
106
105
  }));
107
106
  return function (_x, _x2) {
108
107
  return _ref.apply(this, arguments);
@@ -82,16 +82,16 @@ var ArchiveSidebarFolderEntryBase = /*#__PURE__*/function (_React$Component) {
82
82
  });
83
83
  (0, _defineProperty2.default)(_this, "downloadZipEntry", /*#__PURE__*/function () {
84
84
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(entry, root) {
85
- var blob, name;
86
- return _regenerator.default.wrap(function _callee$(_context) {
85
+ var blob, name, _t;
86
+ return _regenerator.default.wrap(function (_context) {
87
87
  while (1) switch (_context.prev = _context.next) {
88
88
  case 0:
89
89
  _context.prev = 0;
90
- _context.next = 3;
90
+ _context.next = 1;
91
91
  return (0, _utils.rejectAfter)(function () {
92
92
  return entry.blob();
93
93
  });
94
- case 3:
94
+ case 1:
95
95
  blob = _context.sent;
96
96
  name = _this.formatName(root, entry.name); // Emit media-viewed event if feature flag is enabled
97
97
  if (_this.props.fileId && (0, _platformFeatureFlags.fg)('download_event_for_jira_attachments')) {
@@ -104,17 +104,17 @@ var ArchiveSidebarFolderEntryBase = /*#__PURE__*/function (_React$Component) {
104
104
  (0, _mediaCommon.downloadUrl)(URL.createObjectURL(blob), {
105
105
  name: name
106
106
  });
107
- _context.next = 12;
107
+ _context.next = 3;
108
108
  break;
109
- case 9:
110
- _context.prev = 9;
111
- _context.t0 = _context["catch"](0);
112
- _this.props.onError(_context.t0, entry);
113
- case 12:
109
+ case 2:
110
+ _context.prev = 2;
111
+ _t = _context["catch"](0);
112
+ _this.props.onError(_t, entry);
113
+ case 3:
114
114
  case "end":
115
115
  return _context.stop();
116
116
  }
117
- }, _callee, null, [[0, 9]]);
117
+ }, _callee, null, [[0, 2]]);
118
118
  }));
119
119
  return function (_x, _x2) {
120
120
  return _ref.apply(this, arguments);
@@ -22,7 +22,7 @@ var _archive = require("./archive");
22
22
  var _loading = require("../../loading");
23
23
  var _errors = require("../../errors");
24
24
  var _styleWrappers2 = require("./styleWrappers");
25
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
25
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
26
26
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
27
27
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
28
28
  var ArchiveSidebarRenderer = exports.default = /*#__PURE__*/function (_Component) {
@@ -44,15 +44,15 @@ var ArchiveSidebarRenderer = exports.default = /*#__PURE__*/function (_Component
44
44
  key: "componentDidMount",
45
45
  value: function () {
46
46
  var _componentDidMount = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
47
- var _this$props, selectedFileState, mediaClient, collectionName, onError, onSuccess, archive, entries;
48
- return _regenerator.default.wrap(function _callee$(_context) {
47
+ var _this$props, selectedFileState, mediaClient, collectionName, onError, onSuccess, archive, entries, _t;
48
+ return _regenerator.default.wrap(function (_context) {
49
49
  while (1) switch (_context.prev = _context.next) {
50
50
  case 0:
51
51
  _this$props = this.props, selectedFileState = _this$props.selectedFileState, mediaClient = _this$props.mediaClient, collectionName = _this$props.collectionName, onError = _this$props.onError, onSuccess = _this$props.onSuccess;
52
52
  _context.prev = 1;
53
- _context.next = 4;
53
+ _context.next = 2;
54
54
  return (0, _archive.getArchiveEntriesFromFileState)(selectedFileState, mediaClient, collectionName);
55
- case 4:
55
+ case 2:
56
56
  archive = _context.sent;
57
57
  entries = archive.entries;
58
58
  this.setState({
@@ -60,20 +60,20 @@ var ArchiveSidebarRenderer = exports.default = /*#__PURE__*/function (_Component
60
60
  status: 'loaded'
61
61
  });
62
62
  onSuccess();
63
- _context.next = 14;
63
+ _context.next = 4;
64
64
  break;
65
- case 10:
66
- _context.prev = 10;
67
- _context.t0 = _context["catch"](1);
65
+ case 3:
66
+ _context.prev = 3;
67
+ _t = _context["catch"](1);
68
68
  this.setState({
69
69
  status: 'loaded'
70
70
  });
71
- onError(new _errors.ArchiveViewerError('archiveviewer-read-binary', _context.t0 instanceof Error ? _context.t0 : undefined));
72
- case 14:
71
+ onError(new _errors.ArchiveViewerError('archiveviewer-read-binary', _t instanceof Error ? _t : undefined));
72
+ case 4:
73
73
  case "end":
74
74
  return _context.stop();
75
75
  }
76
- }, _callee, this, [[1, 10]]);
76
+ }, _callee, this, [[1, 3]]);
77
77
  }));
78
78
  function componentDidMount() {
79
79
  return _componentDidMount.apply(this, arguments);
@@ -32,27 +32,27 @@ var ArchiveSidebar = exports.ArchiveSidebar = /*#__PURE__*/function (_React$Comp
32
32
  (0, _defineProperty2.default)(_this, "getArchiveFromEntry", /*#__PURE__*/function () {
33
33
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(entry) {
34
34
  var blob, archive;
35
- return _regenerator.default.wrap(function _callee$(_context) {
35
+ return _regenerator.default.wrap(function (_context) {
36
36
  while (1) switch (_context.prev = _context.next) {
37
37
  case 0:
38
- _context.next = 2;
38
+ _context.next = 1;
39
39
  return (0, _utils.rejectAfter)(function () {
40
40
  return entry.blob();
41
41
  });
42
- case 2:
42
+ case 1:
43
43
  blob = _context.sent;
44
- _context.next = 5;
44
+ _context.next = 2;
45
45
  return (0, _utils.rejectAfter)(function () {
46
46
  return (0, _unzipit.unzip)(blob);
47
47
  });
48
- case 5:
48
+ case 2:
49
49
  archive = _context.sent;
50
50
  Object.values(archive.entries).forEach(function (zipEntry) {
51
51
  // eslint-disable-next-line no-param-reassign
52
52
  zipEntry.name = _this.state.currentArchiveSidebarFolder.name + zipEntry.name;
53
53
  });
54
54
  return _context.abrupt("return", archive);
55
- case 8:
55
+ case 3:
56
56
  case "end":
57
57
  return _context.stop();
58
58
  }
@@ -64,8 +64,8 @@ var ArchiveSidebar = exports.ArchiveSidebar = /*#__PURE__*/function (_React$Comp
64
64
  }());
65
65
  (0, _defineProperty2.default)(_this, "onEntrySelected", /*#__PURE__*/function () {
66
66
  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(entry) {
67
- var onEntrySelected, isArchive;
68
- return _regenerator.default.wrap(function _callee2$(_context2) {
67
+ var onEntrySelected, isArchive, _t;
68
+ return _regenerator.default.wrap(function (_context2) {
69
69
  while (1) switch (_context2.prev = _context2.next) {
70
70
  case 0:
71
71
  onEntrySelected = _this.props.onEntrySelected;
@@ -73,30 +73,30 @@ var ArchiveSidebar = exports.ArchiveSidebar = /*#__PURE__*/function (_React$Comp
73
73
  onEntrySelected(entry);
74
74
  }
75
75
  isArchive = !entry.isDirectory && (0, _utils.getMediaTypeFromFilename)(entry.name) === 'archive';
76
- _context2.prev = 3;
76
+ _context2.prev = 1;
77
77
  if (!(isArchive || entry.isDirectory)) {
78
- _context2.next = 9;
78
+ _context2.next = 3;
79
79
  break;
80
80
  }
81
- _context2.next = 7;
81
+ _context2.next = 2;
82
82
  return _this.onFolderEntrySelected(entry, isArchive);
83
- case 7:
84
- _context2.next = 10;
83
+ case 2:
84
+ _context2.next = 4;
85
85
  break;
86
- case 9:
86
+ case 3:
87
87
  null;
88
- case 10:
89
- _context2.next = 15;
88
+ case 4:
89
+ _context2.next = 6;
90
90
  break;
91
- case 12:
92
- _context2.prev = 12;
93
- _context2.t0 = _context2["catch"](3);
94
- return _context2.abrupt("return", _this.props.onError(_context2.t0, entry));
95
- case 15:
91
+ case 5:
92
+ _context2.prev = 5;
93
+ _t = _context2["catch"](1);
94
+ return _context2.abrupt("return", _this.props.onError(_t, entry));
95
+ case 6:
96
96
  case "end":
97
97
  return _context2.stop();
98
98
  }
99
- }, _callee2, null, [[3, 12]]);
99
+ }, _callee2, null, [[1, 5]]);
100
100
  }));
101
101
  return function (_x2) {
102
102
  return _ref2.apply(this, arguments);
@@ -105,21 +105,21 @@ var ArchiveSidebar = exports.ArchiveSidebar = /*#__PURE__*/function (_React$Comp
105
105
  (0, _defineProperty2.default)(_this, "onFolderEntrySelected", /*#__PURE__*/function () {
106
106
  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(folder, isArchive) {
107
107
  var _this$props, entries, mediaClient, folderName, archiveEntries, _this$props2, isArchiveEntryLoading, onError, shouldRenderAbuseModal, fileId, currentFolderName;
108
- return _regenerator.default.wrap(function _callee3$(_context3) {
108
+ return _regenerator.default.wrap(function (_context3) {
109
109
  while (1) switch (_context3.prev = _context3.next) {
110
110
  case 0:
111
111
  _this$props = _this.props, entries = _this$props.entries, mediaClient = _this$props.mediaClient;
112
112
  if (!isArchive) {
113
- _context3.next = 7;
113
+ _context3.next = 2;
114
114
  break;
115
115
  }
116
- _context3.next = 4;
116
+ _context3.next = 1;
117
117
  return _this.getArchiveFromEntry(folder);
118
- case 4:
118
+ case 1:
119
119
  archiveEntries = _context3.sent.entries;
120
120
  entries = _objectSpread(_objectSpread({}, entries), archiveEntries);
121
121
  folderName = (0, _utils.extractArchiveFolderName)(folder.name);
122
- case 7:
122
+ case 2:
123
123
  _this$props2 = _this.props, isArchiveEntryLoading = _this$props2.isArchiveEntryLoading, onError = _this$props2.onError, shouldRenderAbuseModal = _this$props2.shouldRenderAbuseModal, fileId = _this$props2.fileId;
124
124
  currentFolderName = folderName || folder.name;
125
125
  _this.setState({
@@ -135,7 +135,7 @@ var ArchiveSidebar = exports.ArchiveSidebar = /*#__PURE__*/function (_React$Comp
135
135
  fileId: fileId
136
136
  }
137
137
  });
138
- case 10:
138
+ case 3:
139
139
  case "end":
140
140
  return _context3.stop();
141
141
  }