box-ui-elements 24.0.0-beta.3 → 24.0.0-beta.4
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.
- package/dist/explorer.js +1 -1
- package/dist/openwith.js +1 -1
- package/dist/picker.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sharing.js +1 -1
- package/dist/sidebar.js +1 -1
- package/dist/uploader.js +1 -1
- package/es/elements/common/withBlueprintModernization.js +16 -0
- package/es/elements/common/withBlueprintModernization.js.map +1 -0
- package/es/elements/content-explorer/ContentExplorer.js +2 -1
- package/es/elements/content-explorer/ContentExplorer.js.map +1 -1
- package/es/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js +5 -0
- package/es/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js.flow +6 -0
- package/es/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js.map +1 -1
- package/es/elements/content-picker/ContentPicker.js +4 -1
- package/es/elements/content-picker/ContentPicker.js.flow +4 -1
- package/es/elements/content-picker/ContentPicker.js.map +1 -1
- package/es/elements/content-picker/stories/tests/ContentPicker-visual.stories.js +5 -0
- package/es/elements/content-picker/stories/tests/ContentPicker-visual.stories.js.flow +6 -0
- package/es/elements/content-picker/stories/tests/ContentPicker-visual.stories.js.map +1 -1
- package/es/elements/content-preview/ContentPreview.js +3 -1
- package/es/elements/content-preview/ContentPreview.js.flow +3 -0
- package/es/elements/content-preview/ContentPreview.js.map +1 -1
- package/es/elements/content-preview/stories/tests/ContentPreview-visual.stories.js +5 -0
- package/es/elements/content-preview/stories/tests/ContentPreview-visual.stories.js.flow +7 -1
- package/es/elements/content-preview/stories/tests/ContentPreview-visual.stories.js.map +1 -1
- package/es/elements/content-sharing/ContentSharing.js +4 -1
- package/es/elements/content-sharing/ContentSharing.js.flow +4 -1
- package/es/elements/content-sharing/ContentSharing.js.map +1 -1
- package/es/elements/content-sidebar/ContentSidebar.js +3 -1
- package/es/elements/content-sidebar/ContentSidebar.js.flow +3 -0
- package/es/elements/content-sidebar/ContentSidebar.js.map +1 -1
- package/es/elements/content-sidebar/stories/tests/ContentSidebar-visual.stories.js +5 -0
- package/es/elements/content-sidebar/stories/tests/ContentSidebar-visual.stories.js.map +1 -1
- package/es/elements/content-uploader/ContentUploader.js +3 -1
- package/es/elements/content-uploader/ContentUploader.js.map +1 -1
- package/es/elements/content-uploader/stories/tests/ContentUploader-visual.stories.js +5 -0
- package/es/elements/content-uploader/stories/tests/ContentUploader-visual.stories.js.flow +6 -0
- package/es/elements/content-uploader/stories/tests/ContentUploader-visual.stories.js.map +1 -1
- package/es/features/classification/applied-by-ai-classification-reason/AppliedByAiClassificationReason.js +51 -0
- package/es/features/classification/applied-by-ai-classification-reason/AppliedByAiClassificationReason.js.map +1 -0
- package/es/features/classification/applied-by-ai-classification-reason/AppliedByAiClassificationReason.scss +29 -0
- package/es/features/classification/applied-by-ai-classification-reason/messages.js +13 -0
- package/es/features/classification/applied-by-ai-classification-reason/messages.js.map +1 -0
- package/es/features/classification/types.js +2 -0
- package/es/features/classification/types.js.map +1 -0
- package/es/src/elements/common/__tests__/withBlueprintModernization.test.d.ts +1 -0
- package/es/src/elements/common/withBlueprintModernization.d.ts +3 -0
- package/es/src/elements/content-sidebar/stories/tests/ContentSidebar-visual.stories.d.ts +5 -0
- package/es/src/features/classification/applied-by-ai-classification-reason/AppliedByAiClassificationReason.d.ts +6 -0
- package/es/src/features/classification/applied-by-ai-classification-reason/__tests__/AppliedByAiClassificationReason.test.d.ts +1 -0
- package/es/src/features/classification/applied-by-ai-classification-reason/messages.d.ts +13 -0
- package/es/src/features/classification/types.d.ts +6 -0
- package/i18n/bn-IN.js +4 -2
- package/i18n/bn-IN.properties +2 -2
- package/i18n/da-DK.js +4 -2
- package/i18n/da-DK.properties +2 -2
- package/i18n/de-DE.js +4 -2
- package/i18n/de-DE.properties +2 -2
- package/i18n/en-AU.js +2 -0
- package/i18n/en-CA.js +2 -0
- package/i18n/en-GB.js +2 -0
- package/i18n/en-US.js +2 -0
- package/i18n/en-US.properties +4 -0
- package/i18n/en-x-pseudo.js +2 -0
- package/i18n/es-419.js +4 -2
- package/i18n/es-419.properties +2 -2
- package/i18n/es-ES.js +4 -2
- package/i18n/es-ES.properties +2 -2
- package/i18n/fi-FI.js +4 -2
- package/i18n/fi-FI.properties +2 -2
- package/i18n/fr-CA.js +4 -2
- package/i18n/fr-CA.properties +2 -2
- package/i18n/fr-FR.js +4 -2
- package/i18n/fr-FR.properties +2 -2
- package/i18n/hi-IN.js +4 -2
- package/i18n/hi-IN.properties +2 -2
- package/i18n/it-IT.js +4 -2
- package/i18n/it-IT.properties +2 -2
- package/i18n/ja-JP.js +2 -0
- package/i18n/ko-KR.js +4 -2
- package/i18n/ko-KR.properties +2 -2
- package/i18n/nb-NO.js +4 -2
- package/i18n/nb-NO.properties +2 -2
- package/i18n/nl-NL.js +4 -2
- package/i18n/nl-NL.properties +2 -2
- package/i18n/pl-PL.js +4 -2
- package/i18n/pl-PL.properties +2 -2
- package/i18n/pt-BR.js +4 -2
- package/i18n/pt-BR.properties +2 -2
- package/i18n/ru-RU.js +4 -2
- package/i18n/ru-RU.properties +2 -2
- package/i18n/sv-SE.js +4 -2
- package/i18n/sv-SE.properties +2 -2
- package/i18n/tr-TR.js +4 -2
- package/i18n/tr-TR.properties +2 -2
- package/i18n/zh-CN.js +4 -2
- package/i18n/zh-CN.properties +2 -2
- package/i18n/zh-TW.js +4 -2
- package/i18n/zh-TW.properties +2 -2
- package/package.json +1 -1
- package/src/elements/common/__tests__/withBlueprintModernization.test.tsx +91 -0
- package/src/elements/common/withBlueprintModernization.tsx +24 -0
- package/src/elements/content-explorer/ContentExplorer.tsx +4 -1
- package/src/elements/content-explorer/stories/tests/ContentExplorer-visual.stories.js +6 -0
- package/src/elements/content-picker/ContentPicker.js +4 -1
- package/src/elements/content-picker/stories/tests/ContentPicker-visual.stories.js +6 -0
- package/src/elements/content-preview/ContentPreview.js +3 -0
- package/src/elements/content-preview/stories/tests/ContentPreview-visual.stories.js +7 -1
- package/src/elements/content-sharing/ContentSharing.js +4 -1
- package/src/elements/content-sidebar/ContentSidebar.js +3 -0
- package/src/elements/content-sidebar/stories/tests/ContentSidebar-visual.stories.tsx +6 -0
- package/src/elements/content-uploader/ContentUploader.tsx +3 -1
- package/src/elements/content-uploader/stories/tests/ContentUploader-visual.stories.js +6 -0
- package/src/features/classification/applied-by-ai-classification-reason/AppliedByAiClassificationReason.scss +29 -0
- package/src/features/classification/applied-by-ai-classification-reason/AppliedByAiClassificationReason.tsx +55 -0
- package/src/features/classification/applied-by-ai-classification-reason/__tests__/AppliedByAiClassificationReason.test.tsx +105 -0
- package/src/features/classification/applied-by-ai-classification-reason/messages.ts +18 -0
- package/src/features/classification/types.ts +7 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentPicker-visual.stories.js","names":["React","expect","userEvent","waitFor","within","http","HttpResponse","ContentPicker","mockRootFolder","mockEmptyRootFolder","DEFAULT_HOSTNAME_API","basic","
|
|
1
|
+
{"version":3,"file":"ContentPicker-visual.stories.js","names":["React","expect","userEvent","waitFor","within","http","HttpResponse","ContentPicker","mockRootFolder","mockEmptyRootFolder","DEFAULT_HOSTNAME_API","basic","Modernization","args","enableModernizedComponents","withPagination","initialPageSize","selectedEmptyState","play","canvasElement","canvas","getByText","toBeInTheDocument","selectedButton","getByRole","name","click","singleSelect","maxSelectable","rows","getAllByRole","not","toBeDisabled","multipleSelect","fileTypeFilter","extensions","emptyState","rootFolderId","errorEmptyState","searchEmptyState","searchBar","type","customActionButtons","renderCustomActionButtons","selectedCount","createElement","title","component","features","global","FEATURE_FLAGS","FOLDER_ID","token","TOKEN","parameters","msw","handlers","get","json","status"],"sources":["../../../../../src/elements/content-picker/stories/tests/ContentPicker-visual.stories.js"],"sourcesContent":["import React from 'react';\nimport { expect, userEvent, waitFor, within } from 'storybook/test';\nimport { http, HttpResponse } from 'msw';\nimport ContentPicker from '../../ContentPicker';\nimport { mockRootFolder, mockEmptyRootFolder } from '../../../common/__mocks__/mockRootFolder';\n\nimport { DEFAULT_HOSTNAME_API } from '../../../../constants';\n\nexport const basic = {};\n\nexport const Modernization = {\n args: {\n enableModernizedComponents: true,\n },\n};\n\nexport const withPagination = {\n args: {\n initialPageSize: 1,\n },\n};\n\nexport const selectedEmptyState = {\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n await waitFor(() => {\n expect(canvas.getByText('An Ordered Folder')).toBeInTheDocument();\n });\n\n const selectedButton = canvas.getByRole('button', { name: '0 Selected' });\n await userEvent.click(selectedButton);\n await waitFor(() => {\n expect(canvas.getByText(\"You haven't selected any items yet.\")).toBeInTheDocument();\n });\n },\n};\n\nexport const singleSelect = {\n args: {\n maxSelectable: 1,\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n await waitFor(() => {\n expect(canvas.getByText('An Ordered Folder')).toBeInTheDocument();\n });\n\n const rows = canvas.getAllByRole('row');\n await userEvent.click(rows[3]);\n await waitFor(() => {\n expect(canvas.getByRole('button', { name: 'Choose' })).not.toBeDisabled();\n });\n },\n};\n\nexport const multipleSelect = {\n args: {\n maxSelectable: 3,\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n await waitFor(() => {\n expect(canvas.getByText('An Ordered Folder')).toBeInTheDocument();\n });\n\n const rows = canvas.getAllByRole('row');\n await userEvent.click(rows[3]);\n await userEvent.click(rows[4]);\n\n await waitFor(() => {\n expect(canvas.getByText('2 Selected')).toBeInTheDocument();\n });\n },\n};\n\nexport const fileTypeFilter = {\n args: {\n extensions: ['doc', 'docx'],\n },\n};\n\nexport const emptyState = {\n args: {\n rootFolderId: '74729718131',\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n await waitFor(() => {\n expect(canvas.getByText('There are no items in this folder.')).toBeInTheDocument();\n });\n },\n};\n\nexport const errorEmptyState = {\n args: {\n rootFolderId: '191354690948',\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n await waitFor(() => {\n expect(canvas.getByText('A network error has occurred while trying to load.')).toBeInTheDocument();\n });\n },\n};\n\nexport const searchEmptyState = {\n args: {\n rootFolderId: '74729718131',\n },\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const searchBar = canvas.getByRole('searchbox', { name: 'Search files and folders' });\n await userEvent.type(searchBar, 'foo');\n\n expect(canvas.getByText(\"Sorry, we couldn't find what you're looking for.\")).toBeInTheDocument();\n },\n};\n\nexport const customActionButtons = {\n args: {\n renderCustomActionButtons: ({ selectedCount }) => (\n <button type=\"button\">Custom Action ({selectedCount} items)</button>\n ),\n },\n};\n\nexport default {\n title: 'Elements/ContentPicker/tests/visual',\n component: ContentPicker,\n args: {\n features: global.FEATURE_FLAGS,\n rootFolderId: global.FOLDER_ID,\n token: global.TOKEN,\n },\n parameters: {\n msw: {\n handlers: [\n http.get(`${DEFAULT_HOSTNAME_API}/2.0/folders/69083462919`, () => {\n return HttpResponse.json(mockRootFolder);\n }),\n http.get(`${DEFAULT_HOSTNAME_API}/2.0/folders/74729718131`, () => {\n return HttpResponse.json(mockEmptyRootFolder);\n }),\n http.get(`${DEFAULT_HOSTNAME_API}/2.0/folders/191354690948`, () => {\n return new HttpResponse('Internal Server Error', { status: 500 });\n }),\n ],\n },\n },\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ,gBAAgB;AACnE,SAASC,IAAI,EAAEC,YAAY,QAAQ,KAAK;AACxC,OAAOC,aAAa,MAAM,qBAAqB;AAC/C,SAASC,cAAc,EAAEC,mBAAmB,QAAQ,0CAA0C;AAE9F,SAASC,oBAAoB,QAAQ,uBAAuB;AAE5D,OAAO,MAAMC,KAAK,GAAG,CAAC,CAAC;AAEvB,OAAO,MAAMC,aAAa,GAAG;EACzBC,IAAI,EAAE;IACFC,0BAA0B,EAAE;EAChC;AACJ,CAAC;AAED,OAAO,MAAMC,cAAc,GAAG;EAC1BF,IAAI,EAAE;IACFG,eAAe,EAAE;EACrB;AACJ,CAAC;AAED,OAAO,MAAMC,kBAAkB,GAAG;EAC9BC,IAAI,EAAE,MAAAA,CAAO;IAAEC;EAAc,CAAC,KAAK;IAC/B,MAAMC,MAAM,GAAGhB,MAAM,CAACe,aAAa,CAAC;IACpC,MAAMhB,OAAO,CAAC,MAAM;MAChBF,MAAM,CAACmB,MAAM,CAACC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IACrE,CAAC,CAAC;IAEF,MAAMC,cAAc,GAAGH,MAAM,CAACI,SAAS,CAAC,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAa,CAAC,CAAC;IACzE,MAAMvB,SAAS,CAACwB,KAAK,CAACH,cAAc,CAAC;IACrC,MAAMpB,OAAO,CAAC,MAAM;MAChBF,MAAM,CAACmB,MAAM,CAACC,SAAS,CAAC,qCAAqC,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IACvF,CAAC,CAAC;EACN;AACJ,CAAC;AAED,OAAO,MAAMK,YAAY,GAAG;EACxBd,IAAI,EAAE;IACFe,aAAa,EAAE;EACnB,CAAC;EACDV,IAAI,EAAE,MAAAA,CAAO;IAAEC;EAAc,CAAC,KAAK;IAC/B,MAAMC,MAAM,GAAGhB,MAAM,CAACe,aAAa,CAAC;IACpC,MAAMhB,OAAO,CAAC,MAAM;MAChBF,MAAM,CAACmB,MAAM,CAACC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IACrE,CAAC,CAAC;IAEF,MAAMO,IAAI,GAAGT,MAAM,CAACU,YAAY,CAAC,KAAK,CAAC;IACvC,MAAM5B,SAAS,CAACwB,KAAK,CAACG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM1B,OAAO,CAAC,MAAM;MAChBF,MAAM,CAACmB,MAAM,CAACI,SAAS,CAAC,QAAQ,EAAE;QAAEC,IAAI,EAAE;MAAS,CAAC,CAAC,CAAC,CAACM,GAAG,CAACC,YAAY,CAAC,CAAC;IAC7E,CAAC,CAAC;EACN;AACJ,CAAC;AAED,OAAO,MAAMC,cAAc,GAAG;EAC1BpB,IAAI,EAAE;IACFe,aAAa,EAAE;EACnB,CAAC;EACDV,IAAI,EAAE,MAAAA,CAAO;IAAEC;EAAc,CAAC,KAAK;IAC/B,MAAMC,MAAM,GAAGhB,MAAM,CAACe,aAAa,CAAC;IACpC,MAAMhB,OAAO,CAAC,MAAM;MAChBF,MAAM,CAACmB,MAAM,CAACC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IACrE,CAAC,CAAC;IAEF,MAAMO,IAAI,GAAGT,MAAM,CAACU,YAAY,CAAC,KAAK,CAAC;IACvC,MAAM5B,SAAS,CAACwB,KAAK,CAACG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM3B,SAAS,CAACwB,KAAK,CAACG,IAAI,CAAC,CAAC,CAAC,CAAC;IAE9B,MAAM1B,OAAO,CAAC,MAAM;MAChBF,MAAM,CAACmB,MAAM,CAACC,SAAS,CAAC,YAAY,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IAC9D,CAAC,CAAC;EACN;AACJ,CAAC;AAED,OAAO,MAAMY,cAAc,GAAG;EAC1BrB,IAAI,EAAE;IACFsB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM;EAC9B;AACJ,CAAC;AAED,OAAO,MAAMC,UAAU,GAAG;EACtBvB,IAAI,EAAE;IACFwB,YAAY,EAAE;EAClB,CAAC;EACDnB,IAAI,EAAE,MAAAA,CAAO;IAAEC;EAAc,CAAC,KAAK;IAC/B,MAAMC,MAAM,GAAGhB,MAAM,CAACe,aAAa,CAAC;IACpC,MAAMhB,OAAO,CAAC,MAAM;MAChBF,MAAM,CAACmB,MAAM,CAACC,SAAS,CAAC,oCAAoC,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IACtF,CAAC,CAAC;EACN;AACJ,CAAC;AAED,OAAO,MAAMgB,eAAe,GAAG;EAC3BzB,IAAI,EAAE;IACFwB,YAAY,EAAE;EAClB,CAAC;EACDnB,IAAI,EAAE,MAAAA,CAAO;IAAEC;EAAc,CAAC,KAAK;IAC/B,MAAMC,MAAM,GAAGhB,MAAM,CAACe,aAAa,CAAC;IACpC,MAAMhB,OAAO,CAAC,MAAM;MAChBF,MAAM,CAACmB,MAAM,CAACC,SAAS,CAAC,oDAAoD,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IACtG,CAAC,CAAC;EACN;AACJ,CAAC;AAED,OAAO,MAAMiB,gBAAgB,GAAG;EAC5B1B,IAAI,EAAE;IACFwB,YAAY,EAAE;EAClB,CAAC;EACDnB,IAAI,EAAE,MAAAA,CAAO;IAAEC;EAAc,CAAC,KAAK;IAC/B,MAAMC,MAAM,GAAGhB,MAAM,CAACe,aAAa,CAAC;IACpC,MAAMqB,SAAS,GAAGpB,MAAM,CAACI,SAAS,CAAC,WAAW,EAAE;MAAEC,IAAI,EAAE;IAA2B,CAAC,CAAC;IACrF,MAAMvB,SAAS,CAACuC,IAAI,CAACD,SAAS,EAAE,KAAK,CAAC;IAEtCvC,MAAM,CAACmB,MAAM,CAACC,SAAS,CAAC,kDAAkD,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;EACpG;AACJ,CAAC;AAED,OAAO,MAAMoB,mBAAmB,GAAG;EAC/B7B,IAAI,EAAE;IACF8B,yBAAyB,EAAEA,CAAC;MAAEC;IAAc,CAAC,kBACzC5C,KAAA,CAAA6C,aAAA;MAAQJ,IAAI,EAAC;IAAQ,GAAC,iBAAe,EAACG,aAAa,EAAC,SAAe;EAE3E;AACJ,CAAC;AAED,eAAe;EACXE,KAAK,EAAE,qCAAqC;EAC5CC,SAAS,EAAExC,aAAa;EACxBM,IAAI,EAAE;IACFmC,QAAQ,EAAEC,MAAM,CAACC,aAAa;IAC9Bb,YAAY,EAAEY,MAAM,CAACE,SAAS;IAC9BC,KAAK,EAAEH,MAAM,CAACI;EAClB,CAAC;EACDC,UAAU,EAAE;IACRC,GAAG,EAAE;MACDC,QAAQ,EAAE,CACNnD,IAAI,CAACoD,GAAG,CAAC,GAAG/C,oBAAoB,0BAA0B,EAAE,MAAM;QAC9D,OAAOJ,YAAY,CAACoD,IAAI,CAAClD,cAAc,CAAC;MAC5C,CAAC,CAAC,EACFH,IAAI,CAACoD,GAAG,CAAC,GAAG/C,oBAAoB,0BAA0B,EAAE,MAAM;QAC9D,OAAOJ,YAAY,CAACoD,IAAI,CAACjD,mBAAmB,CAAC;MACjD,CAAC,CAAC,EACFJ,IAAI,CAACoD,GAAG,CAAC,GAAG/C,oBAAoB,2BAA2B,EAAE,MAAM;QAC/D,OAAO,IAAIJ,YAAY,CAAC,uBAAuB,EAAE;UAAEqD,MAAM,EAAE;QAAI,CAAC,CAAC;MACrE,CAAC,CAAC;IAEV;EACJ;AACJ,CAAC","ignoreList":[]}
|
|
@@ -44,6 +44,8 @@ import { withLogger } from '../common/logger';
|
|
|
44
44
|
import { PREVIEW_FIELDS_TO_FETCH } from '../../utils/fields';
|
|
45
45
|
import { mark } from '../../utils/performance';
|
|
46
46
|
import { withFeatureConsumer, withFeatureProvider } from '../common/feature-checking';
|
|
47
|
+
// $FlowFixMe
|
|
48
|
+
import { withBlueprintModernization } from '../common/withBlueprintModernization';
|
|
47
49
|
import { EVENT_JS_READY } from '../common/logger/constants';
|
|
48
50
|
import ReloadNotification from './ReloadNotification';
|
|
49
51
|
import API from '../../api';
|
|
@@ -1261,5 +1263,5 @@ _defineProperty(ContentPreview, "defaultProps", {
|
|
|
1261
1263
|
useHotkeys: true
|
|
1262
1264
|
});
|
|
1263
1265
|
export { ContentPreview as ContentPreviewComponent };
|
|
1264
|
-
export default flow([makeResponsive, withAnnotatorContext, withAnnotations, withRouter, withNavRouter, withFeatureConsumer, withFeatureProvider, withLogger(ORIGIN_CONTENT_PREVIEW), withErrorBoundary(ORIGIN_CONTENT_PREVIEW)])(ContentPreview);
|
|
1266
|
+
export default flow([makeResponsive, withAnnotatorContext, withAnnotations, withRouter, withNavRouter, withFeatureConsumer, withFeatureProvider, withBlueprintModernization, withLogger(ORIGIN_CONTENT_PREVIEW), withErrorBoundary(ORIGIN_CONTENT_PREVIEW)])(ContentPreview);
|
|
1265
1267
|
//# sourceMappingURL=ContentPreview.js.map
|
|
@@ -35,6 +35,8 @@ import { withLogger } from '../common/logger';
|
|
|
35
35
|
import { PREVIEW_FIELDS_TO_FETCH } from '../../utils/fields';
|
|
36
36
|
import { mark } from '../../utils/performance';
|
|
37
37
|
import { withFeatureConsumer, withFeatureProvider } from '../common/feature-checking';
|
|
38
|
+
// $FlowFixMe
|
|
39
|
+
import { withBlueprintModernization } from '../common/withBlueprintModernization';
|
|
38
40
|
import { EVENT_JS_READY } from '../common/logger/constants';
|
|
39
41
|
import ReloadNotification from './ReloadNotification';
|
|
40
42
|
import API from '../../api';
|
|
@@ -1418,6 +1420,7 @@ export default flow([
|
|
|
1418
1420
|
withNavRouter,
|
|
1419
1421
|
withFeatureConsumer,
|
|
1420
1422
|
withFeatureProvider,
|
|
1423
|
+
withBlueprintModernization,
|
|
1421
1424
|
withLogger(ORIGIN_CONTENT_PREVIEW),
|
|
1422
1425
|
withErrorBoundary(ORIGIN_CONTENT_PREVIEW),
|
|
1423
1426
|
])(ContentPreview);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentPreview.js","names":["React","classNames","cloneDeep","flow","getProp","isEqual","noop","omit","setProp","throttle","uniqueid","Measure","withRouter","decode","makeResponsive","withNavRouter","Internationalize","AsyncLoad","ThemingStyles","TokenService","isInputElement","focus","getTypedFileId","withAnnotations","withAnnotatorContext","withErrorBoundary","withLogger","PREVIEW_FIELDS_TO_FETCH","mark","withFeatureConsumer","withFeatureProvider","EVENT_JS_READY","ReloadNotification","API","APIContext","PreviewHeader","PreviewMask","PreviewNavigation","Providers","DEFAULT_HOSTNAME_API","DEFAULT_HOSTNAME_APP","DEFAULT_HOSTNAME_STATIC","DEFAULT_PREVIEW_VERSION","DEFAULT_LOCALE","DEFAULT_PATH_STATIC_PREVIEW","CLIENT_NAME_CONTENT_PREVIEW","ORIGIN_PREVIEW","ORIGIN_CONTENT_PREVIEW","ERROR_CODE_UNKNOWN","startAtTypes","page","InvalidIdError","Error","PREVIEW_LOAD_METRIC_EVENT","MARK_NAME_JS_READY","LoadableSidebar","loader","ContentPreview","PureComponent","constructor","props","_defineProperty","createRef","canPrint","error","undefined","isLoading","isReloadNotificationVisible","isThumbnailSidebarOpen","_ref","rest","_objectWithoutProperties","_excluded","code","onError","setState","_objectSpread","previewMetrics","logger","event_name","metrics","totalFetchFileTime","getTotalFileFetchTime","totalTime","value","file_info_time","onPreviewMetric","data","onLoad","collection","currentIndex","getFileIndex","filesToPrefetch","slice","previewTimeMetrics","loadData","totalPreviewMetrics","addFetchFileTimeToPreviewMetrics","time","focusPreview","preview","length","prefetch","handleCanPrint","_this$props","advancedContentInsights","annotatorState","activeAnnotationId","enableThumbnailsSidebar","features","fileOptions","onAnnotatorEvent","onAnnotator","onContentInsightsEventReport","previewExperiences","showAnnotationsControls","token","tokenOrTokenFunction","_excluded2","file","selectedVersion","startAt","state","isPreviewLibraryLoaded","fileId","getFileId","currentFileId","fileOpts","typedId","getReadTokens","id","previewOptions","container","header","headerElement","experiences","showAnnotations","canViewAnnotations","showDownload","canDownload","showLoading","showProgress","skipServerUpdate","useHotkeys","Preview","global","Box","addListener","onPreviewLoad","onPreviewError","updateFileCache","show","Object","keys","stagedFile","initialState","getCurrentViewer","resize","fetchFileEndTime","performance","now","currentFile","isExistingFile","isWatermarked","file_version","sha1","fileError","errorCode","message","getPreview","viewer","isLoaded","isDestroyed","newIndex","navigateToIndex","onDownload","download","print","getViewer","isPreviewing","CLASS_NAVIGATION_VISIBILITY","clearTimeout","mouseMoveTimeoutID","previewContainer","classList","remove","allowNavigationArrows","add","setTimeout","event","consumed","key","target","onKeydown","nativeEvent","navigateLeft","navigateRight","preventDefault","stopPropagation","version","additionalVersionInfo","onVersionChange","updateVersionToCurrent","location","annotationFileVersionId","currentFileVersionId","currentPreviewFileVersionId","unit","type","emit","pageNumber","getThumbnail","apiHost","cache","language","requestInterceptor","responseInterceptor","sharedLink","sharedLinkPassword","api","clientName","prevFileIdProp","onReadyMetric","endMarkName","componentWillUnmount","destroy","destroyPreview","shouldReset","onPreviewDestroy","removeAllListeners","clearCache","componentDidMount","loadStylesheet","loadScript","fetchFile","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","prevFeatures","prevPreviewExperiences","prevToken","hasFileIdChanged","hasTokenChanged","haveAdvancedContentInsightsChanged","haveExperiencesChanged","shouldLoadPreview","loadPreview","updatePreviewToken","updateExperiences","updateContentInsightsOptions","shouldReload","updateToken","prevFile","prevSelectedVersion","prevSelectedVersionId","selectedVersionId","prevFileVersionId","fileVersionId","isPreviousCurrent","isSelectedCurrent","getBasePath","asset","staticHost","staticPath","previewLibraryVersion","path","suffix","endsWith","head","document","url","querySelector","link","createElement","rel","href","appendChild","previewScript","script","src","addEventListener","autoFocus","getInnerRef","activeElement","updatePreviewCacheAndPrefetch","files","typedIds","map","cacheTokens","forEach","refreshCache","fetchFileStartTime","Math","round","rendering","conversion","preload","totalConversion","totalRendering","totalPreload","total","isFileDownloadable","canAnnotate","isFileAnnotatable","hasViewAllPermissions","hasViewSelfPermissions","successCallback","errorCallback","fetchOptions","getFileAPI","getFile","fetchFileSuccessCallback","fetchFileErrorCallback","fields","findIndex","item","index","onNavigate","fileOrId","refreshSidebar","current","contentSidebar","refresh","render","messages","className","contentAnswersProps","contentOpenWithProps","contentSidebarProps","hasHeader","hasProviders","history","isLarge","isVeryLarge","logoUrl","onClose","measureRef","theme","styleClassName","currentExtension","currentVersionId","onHeaderClose","Provider","ref","onKeyDown","tabIndex","onPrint","onMouseMove","containerRef","bounds","onResize","previewRef","extension","onNavigateLeft","onNavigateRight","_extends","getCache","isDefaultOpen","onAnnotationSelect","handleAnnotationSelect","closeReloadNotification","onClick","loadFileFromStage","appHost","ContentPreviewComponent"],"sources":["../../../src/elements/content-preview/ContentPreview.js"],"sourcesContent":["/**\n * @flow\n * @file Content Preview Component\n * @author Box\n */\n\nimport 'regenerator-runtime/runtime';\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport cloneDeep from 'lodash/cloneDeep';\nimport flow from 'lodash/flow';\nimport getProp from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport noop from 'lodash/noop';\nimport omit from 'lodash/omit';\nimport setProp from 'lodash/set';\nimport throttle from 'lodash/throttle';\nimport uniqueid from 'lodash/uniqueId';\nimport Measure from 'react-measure';\nimport { withRouter } from 'react-router-dom';\nimport type { ContextRouter } from 'react-router-dom';\nimport { decode } from '../../utils/keys';\nimport makeResponsive from '../common/makeResponsive';\nimport { withNavRouter } from '../common/nav-router';\nimport Internationalize from '../common/Internationalize';\nimport AsyncLoad from '../common/async-load';\n// $FlowFixMe TypeScript file\nimport ThemingStyles from '../common/theming';\nimport TokenService from '../../utils/TokenService';\nimport { isInputElement, focus } from '../../utils/dom';\nimport { getTypedFileId } from '../../utils/file';\nimport { withAnnotations, withAnnotatorContext } from '../common/annotator-context';\nimport { withErrorBoundary } from '../common/error-boundary';\nimport { withLogger } from '../common/logger';\nimport { PREVIEW_FIELDS_TO_FETCH } from '../../utils/fields';\nimport { mark } from '../../utils/performance';\nimport { withFeatureConsumer, withFeatureProvider } from '../common/feature-checking';\nimport { EVENT_JS_READY } from '../common/logger/constants';\nimport ReloadNotification from './ReloadNotification';\nimport API from '../../api';\nimport APIContext from '../common/api-context';\nimport PreviewHeader from './preview-header';\nimport PreviewMask from './PreviewMask';\nimport PreviewNavigation from './PreviewNavigation';\nimport Providers from '../common/Providers';\nimport {\n DEFAULT_HOSTNAME_API,\n DEFAULT_HOSTNAME_APP,\n DEFAULT_HOSTNAME_STATIC,\n DEFAULT_PREVIEW_VERSION,\n DEFAULT_LOCALE,\n DEFAULT_PATH_STATIC_PREVIEW,\n CLIENT_NAME_CONTENT_PREVIEW,\n ORIGIN_PREVIEW,\n ORIGIN_CONTENT_PREVIEW,\n ERROR_CODE_UNKNOWN,\n} from '../../constants';\nimport type { Annotation } from '../../common/types/feed';\nimport type { TargetingApi } from '../../features/targeting/types';\nimport type { ErrorType, AdditionalVersionInfo } from '../common/flowTypes';\nimport type { WithLoggerProps } from '../../common/types/logging';\nimport type { RequestOptions, ErrorContextProps, ElementsXhrError } from '../../common/types/api';\nimport type { StringMap, Token, BoxItem, BoxItemVersion } from '../../common/types/core';\nimport type { VersionChangeCallback } from '../content-sidebar/versions';\nimport type { FeatureConfig } from '../common/feature-checking';\nimport type { WithAnnotationsProps, WithAnnotatorContextProps } from '../common/annotator-context';\n// $FlowFixMe TypeScript file\nimport type { Theme } from '../common/theming';\nimport type APICache from '../../utils/Cache';\n\nimport '../common/fonts.scss';\nimport '../common/base.scss';\nimport './ContentPreview.scss';\n\ntype StartAt = {\n unit: 'pages' | 'seconds',\n value: number,\n};\n\ntype Props = {\n advancedContentInsights: {\n isActive: boolean,\n ownerEId: number,\n userId: number,\n },\n apiHost: string,\n appHost: string,\n autoFocus: boolean,\n boxAnnotations?: Object,\n cache?: APICache,\n canDownload?: boolean,\n className: string,\n collection: Array<string | BoxItem>,\n contentAnswersProps: ContentAnswersProps,\n contentOpenWithProps: ContentOpenWithProps,\n contentSidebarProps: ContentSidebarProps,\n enableThumbnailsSidebar: boolean,\n features?: FeatureConfig,\n fileId?: string,\n fileOptions?: Object,\n getInnerRef: () => ?HTMLElement,\n hasHeader?: boolean,\n hasProviders?: boolean,\n isLarge: boolean,\n isVeryLarge?: boolean,\n language: string,\n logoUrl?: string,\n measureRef: Function,\n messages?: StringMap,\n onAnnotator: Function,\n onAnnotatorEvent: Function,\n onClose?: Function,\n onContentInsightsEventReport: Function,\n onDownload: Function,\n onLoad: Function,\n onNavigate: Function,\n onVersionChange: VersionChangeCallback,\n previewExperiences?: {\n [name: string]: TargetingApi,\n },\n previewLibraryVersion: string,\n requestInterceptor?: Function,\n responseInterceptor?: Function,\n sharedLink?: string,\n sharedLinkPassword?: string,\n showAnnotations?: boolean,\n showAnnotationsControls?: boolean,\n staticHost: string,\n staticPath: string,\n theme?: Theme,\n token: Token,\n useHotkeys: boolean,\n} & ErrorContextProps &\n WithLoggerProps &\n WithAnnotationsProps &\n WithAnnotatorContextProps &\n ContextRouter;\n\ntype State = {\n canPrint?: boolean,\n currentFileId?: string,\n error?: ErrorType,\n file?: BoxItem,\n isLoading: boolean,\n isReloadNotificationVisible: boolean,\n isThumbnailSidebarOpen: boolean,\n prevFileIdProp?: string, // the previous value of the \"fileId\" prop. Needed to implement getDerivedStateFromProps\n selectedVersion?: BoxItemVersion,\n startAt?: StartAt,\n};\n\n// Emitted by preview's 'load' event\ntype PreviewTimeMetrics = {\n conversion: number,\n preload?: number,\n rendering: number,\n total: number,\n};\n\n// Emitted by preview's 'preview_metric' event\ntype PreviewMetrics = {\n browser_name: string,\n client_version: string,\n content_type: string, // Sum of all available load times.\n convert_time: number,\n download_response_time: number,\n error?: Object,\n event_name?: string,\n extension: string,\n file_id: string,\n file_info_time: number,\n file_version_id: string,\n full_document_load_time: number,\n locale: string,\n logger_session_id: string,\n rep_type: string,\n timestamp: string,\n value: number,\n};\n\ntype PreviewLibraryError = {\n error: ErrorType,\n};\n\nconst startAtTypes = {\n page: 'pages',\n};\nconst InvalidIdError = new Error('Invalid id for Preview!');\nconst PREVIEW_LOAD_METRIC_EVENT = 'load';\nconst MARK_NAME_JS_READY = `${ORIGIN_CONTENT_PREVIEW}_${EVENT_JS_READY}`;\n\nmark(MARK_NAME_JS_READY);\n\nconst LoadableSidebar = AsyncLoad({\n loader: () => import(/* webpackMode: \"lazy\", webpackChunkName: \"content-sidebar\" */ '../content-sidebar'),\n});\n\nclass ContentPreview extends React.PureComponent<Props, State> {\n id: string;\n\n props: Props;\n\n state: State;\n\n preview: any;\n\n api: API;\n\n // Defines a generic type for ContentSidebar, since an import would interfere with code splitting\n contentSidebar: { current: null | { refresh: Function } } = React.createRef();\n\n previewContainer: ?HTMLDivElement;\n\n mouseMoveTimeoutID: TimeoutID;\n\n rootElement: HTMLElement;\n\n stagedFile: ?BoxItem;\n\n updateVersionToCurrent: ?() => void;\n\n initialState: State = {\n canPrint: false,\n error: undefined,\n isLoading: true,\n isReloadNotificationVisible: false,\n isThumbnailSidebarOpen: false,\n };\n\n static defaultProps = {\n apiHost: DEFAULT_HOSTNAME_API,\n appHost: DEFAULT_HOSTNAME_APP,\n autoFocus: false,\n canDownload: true,\n className: '',\n collection: [],\n contentAnswersProps: {},\n contentOpenWithProps: {},\n contentSidebarProps: {},\n enableThumbnailsSidebar: false,\n hasHeader: false,\n language: DEFAULT_LOCALE,\n onAnnotator: noop,\n onAnnotatorEvent: noop,\n onContentInsightsEventReport: noop,\n onDownload: noop,\n onError: noop,\n onLoad: noop,\n onNavigate: noop,\n onPreviewDestroy: noop,\n onVersionChange: noop,\n previewLibraryVersion: DEFAULT_PREVIEW_VERSION,\n showAnnotations: false,\n staticHost: DEFAULT_HOSTNAME_STATIC,\n staticPath: DEFAULT_PATH_STATIC_PREVIEW,\n useHotkeys: true,\n };\n\n /**\n * @property {number}\n */\n fetchFileEndTime: ?number;\n\n /**\n * @property {number}\n */\n fetchFileStartTime: ?number;\n\n /**\n * [constructor]\n *\n * @return {ContentPreview}\n */\n constructor(props: Props) {\n super(props);\n const {\n apiHost,\n cache,\n fileId,\n language,\n requestInterceptor,\n responseInterceptor,\n sharedLink,\n sharedLinkPassword,\n token,\n } = props;\n\n this.id = uniqueid('bcpr_');\n this.api = new API({\n apiHost,\n cache,\n clientName: CLIENT_NAME_CONTENT_PREVIEW,\n language,\n requestInterceptor,\n responseInterceptor,\n sharedLink,\n sharedLinkPassword,\n token,\n });\n this.state = {\n ...this.initialState,\n currentFileId: fileId,\n // eslint-disable-next-line react/no-unused-state\n prevFileIdProp: fileId,\n };\n const { logger } = props;\n logger.onReadyMetric({\n endMarkName: MARK_NAME_JS_READY,\n });\n }\n\n /**\n * Cleanup\n *\n * @return {void}\n */\n componentWillUnmount(): void {\n // Don't destroy the cache while unmounting\n this.api.destroy(false);\n this.destroyPreview();\n }\n\n /**\n * Cleans up the preview instance\n */\n destroyPreview(shouldReset: boolean = true) {\n const { onPreviewDestroy } = this.props;\n if (this.preview) {\n this.preview.destroy();\n this.preview.removeAllListeners();\n this.preview = undefined;\n\n onPreviewDestroy(shouldReset);\n }\n }\n\n /**\n * Destroys api instances with caches\n *\n * @private\n * @return {void}\n */\n clearCache(): void {\n this.api.destroy(true);\n }\n\n /**\n * Once the component mounts, load Preview assets and fetch file info.\n *\n * @return {void}\n */\n componentDidMount(): void {\n this.loadStylesheet();\n this.loadScript();\n\n this.fetchFile(this.state.currentFileId);\n this.focusPreview();\n }\n\n static getDerivedStateFromProps(props: Props, state: State) {\n const { fileId } = props;\n\n if (fileId !== state.prevFileIdProp) {\n return {\n currentFileId: fileId,\n prevFileIdProp: fileId,\n };\n }\n\n return null;\n }\n\n /**\n * After component updates, load Preview if appropriate.\n *\n * @return {void}\n */\n componentDidUpdate(prevProps: Props, prevState: State): void {\n const { features, previewExperiences, token } = this.props;\n const { features: prevFeatures, previewExperiences: prevPreviewExperiences, token: prevToken } = prevProps;\n const { currentFileId } = this.state;\n const hasFileIdChanged = prevState.currentFileId !== currentFileId;\n const hasTokenChanged = prevToken !== token;\n const haveAdvancedContentInsightsChanged = !isEqual(\n prevFeatures?.advancedContentInsights,\n features?.advancedContentInsights,\n );\n const haveExperiencesChanged = prevPreviewExperiences !== previewExperiences;\n\n if (hasFileIdChanged) {\n this.destroyPreview();\n this.setState({ isLoading: true, selectedVersion: undefined });\n this.fetchFile(currentFileId);\n } else if (this.shouldLoadPreview(prevState)) {\n this.destroyPreview(false);\n this.setState({ isLoading: true });\n this.loadPreview();\n } else if (hasTokenChanged) {\n this.updatePreviewToken();\n }\n\n if (haveExperiencesChanged && this.preview && this.preview.updateExperiences) {\n this.preview.updateExperiences(previewExperiences);\n }\n\n if (\n this.preview?.updateContentInsightsOptions &&\n features?.advancedContentInsights &&\n haveAdvancedContentInsightsChanged\n ) {\n this.preview.updateContentInsightsOptions(features?.advancedContentInsights);\n }\n }\n\n /**\n * Updates the access token used by preview library\n *\n * @param {boolean} shouldReload - true if preview should be reloaded\n */\n updatePreviewToken(shouldReload: boolean = false) {\n if (this.preview) {\n this.preview.updateToken(this.props.token, shouldReload);\n }\n }\n\n /**\n * Returns whether or not preview should be loaded.\n *\n * @param {State} prevState - Previous state\n * @return {boolean}\n */\n shouldLoadPreview(prevState: State): boolean {\n const { file, selectedVersion }: State = this.state;\n const { file: prevFile, selectedVersion: prevSelectedVersion }: State = prevState;\n const prevSelectedVersionId = getProp(prevSelectedVersion, 'id');\n const selectedVersionId = getProp(selectedVersion, 'id');\n const prevFileVersionId = getProp(prevFile, 'file_version.id');\n const fileVersionId = getProp(file, 'file_version.id');\n let loadPreview = false;\n\n if (selectedVersionId !== prevSelectedVersionId) {\n const isPreviousCurrent = fileVersionId === prevSelectedVersionId || !prevSelectedVersionId;\n const isSelectedCurrent = fileVersionId === selectedVersionId || !selectedVersionId;\n\n // Load preview if the user has selected a non-current version of the file\n loadPreview = !isPreviousCurrent || !isSelectedCurrent;\n } else if (fileVersionId && prevFileVersionId) {\n // Load preview if the file's current version ID has changed\n loadPreview = fileVersionId !== prevFileVersionId;\n } else {\n // Load preview if file object has newly been populated in state\n loadPreview = !prevFile && !!file;\n }\n\n return loadPreview;\n }\n\n /**\n * Returns preview asset urls\n *\n * @return {string} base url\n */\n getBasePath(asset: string): string {\n const { staticHost, staticPath, language, previewLibraryVersion }: Props = this.props;\n const path: string = `${staticPath}/${previewLibraryVersion}/${language}/${asset}`;\n const suffix: string = staticHost.endsWith('/') ? path : `/${path}`;\n return `${staticHost}${suffix}`;\n }\n\n /**\n * Determines if preview assets are loaded\n *\n * @return {boolean} true if preview is loaded\n */\n isPreviewLibraryLoaded(): boolean {\n return !!global.Box && !!global.Box.Preview;\n }\n\n /**\n * Loads external css by appending a <link> element\n *\n * @return {void}\n */\n loadStylesheet(): void {\n const { head } = document;\n const url: string = this.getBasePath('preview.css');\n\n if (!head || head.querySelector(`link[rel=\"stylesheet\"][href=\"${url}\"]`)) {\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = url;\n head.appendChild(link);\n }\n\n /**\n * Loads external script by appending a <script> element\n *\n * @return {void}\n */\n loadScript(): void {\n const { head } = document;\n const url: string = this.getBasePath('preview.js');\n\n if (!head || this.isPreviewLibraryLoaded()) {\n return;\n }\n\n const previewScript = head.querySelector(`script[src=\"${url}\"]`);\n if (previewScript) {\n return;\n }\n\n const script = document.createElement('script');\n script.src = url;\n script.addEventListener('load', this.loadPreview);\n head.appendChild(script);\n }\n\n /**\n * Focuses the preview on load.\n *\n * @return {void}\n */\n focusPreview() {\n const { autoFocus, getInnerRef }: Props = this.props;\n if (autoFocus && !isInputElement(document.activeElement)) {\n focus(getInnerRef());\n }\n }\n\n /**\n * Updates preview cache and prefetches a file\n *\n * @param {BoxItem} file - file to prefetch\n * @return {void}\n */\n updatePreviewCacheAndPrefetch(file: BoxItem, token: Token): void {\n if (!this.preview || !file || !file.id) {\n return;\n }\n\n this.preview.updateFileCache([file]);\n this.preview.prefetch({ fileId: file.id, token });\n }\n\n /**\n * Gets the file id\n *\n * @param {string|BoxItem} file - box file or file id\n * @return {string} file id\n */\n getFileId(file?: string | BoxItem): string {\n if (typeof file === 'string') {\n return file;\n }\n\n if (typeof file === 'object' && !!file.id) {\n return file.id;\n }\n\n throw InvalidIdError;\n }\n\n /**\n * Prefetches the next few preview files if any\n *\n * @param {Array<string|BoxItem>} files - files to prefetch\n * @return {void}\n */\n async prefetch(files: Array<string | BoxItem>): Promise<void> {\n const { token }: Props = this.props;\n const typedIds: string[] = files.map(file => getTypedFileId(this.getFileId(file)));\n await TokenService.cacheTokens(typedIds, token);\n files.forEach(file => {\n const fileId = this.getFileId(file);\n this.fetchFile(fileId, noop, noop, {\n refreshCache: false,\n });\n });\n }\n\n /**\n * Calculates the total file fetch time\n *\n * @return {number} the total fetch time\n */\n getTotalFileFetchTime(): number {\n if (!this.fetchFileStartTime || !this.fetchFileEndTime) {\n return 0;\n }\n\n return Math.round(this.fetchFileEndTime - this.fetchFileStartTime);\n }\n\n /**\n * Handler for 'preview_error' preview event\n *\n * @param {PreviewLibraryError} previewError - the error data emitted from preview\n * @return {void}\n */\n onPreviewError = ({ error, ...rest }: PreviewLibraryError): void => {\n const { code = ERROR_CODE_UNKNOWN } = error;\n const { onError } = this.props;\n\n // In case of error, there should be no thumbnail sidebar to account for\n this.setState({ isLoading: false, isThumbnailSidebarOpen: false });\n\n onError(\n error,\n code,\n {\n ...rest,\n error,\n },\n ORIGIN_PREVIEW,\n );\n };\n\n /**\n * Event handler 'preview_metric' which also adds in the file fetch time if it's a load event\n *\n * @param {Object} previewMetrics - the object emitted by 'preview_metric'\n * @return {void}\n */\n onPreviewMetric = (previewMetrics: PreviewMetrics): void => {\n const { logger } = this.props;\n const { event_name } = previewMetrics;\n let metrics = {\n ...previewMetrics,\n };\n\n // We need to add in the total file fetch time to the file_info_time and value (total)\n // as preview does not do the files call\n if (event_name === PREVIEW_LOAD_METRIC_EVENT) {\n const totalFetchFileTime = this.getTotalFileFetchTime();\n const totalTime = (previewMetrics.value || 0) + totalFetchFileTime;\n\n // If an unnatural load time occurs or is invalid, don't log a load event\n if (!totalTime) {\n return;\n }\n\n metrics = {\n ...previewMetrics,\n file_info_time: totalFetchFileTime,\n value: totalTime,\n };\n }\n\n logger.onPreviewMetric(metrics);\n };\n\n /**\n * Adds in the file fetch time to the preview metrics\n *\n * @param {Object} previewTimeMetrics - the preview time metrics\n * @return {Object} the preview time metrics merged with the files call time\n */\n addFetchFileTimeToPreviewMetrics(previewTimeMetrics: PreviewTimeMetrics): PreviewTimeMetrics {\n const totalFetchFileTime = this.getTotalFileFetchTime();\n const { rendering, conversion, preload } = previewTimeMetrics;\n\n // We need to add in the total file fetch time to the rendering and total as preview\n // does not do the files call. In the case the file is in the process of\n // being converted, we need to add to conversion instead of the render\n let totalConversion = conversion;\n let totalRendering = rendering;\n let totalPreload = preload;\n if (conversion) {\n totalConversion += totalFetchFileTime;\n } else {\n totalRendering += totalFetchFileTime;\n }\n\n if (totalPreload) {\n // Preload is optional, depending on file type\n totalPreload += totalFetchFileTime;\n }\n\n const previewMetrics = {\n conversion: totalConversion,\n rendering: totalRendering,\n total: totalRendering + totalConversion,\n preload: totalPreload,\n };\n\n return previewMetrics;\n }\n\n /**\n * onLoad function for preview\n *\n * @return {void}\n */\n onPreviewLoad = (data: Object): void => {\n const { onLoad, collection }: Props = this.props;\n const currentIndex = this.getFileIndex();\n const filesToPrefetch = collection.slice(currentIndex + 1, currentIndex + 5);\n const previewTimeMetrics = getProp(data, 'metrics.time');\n let loadData = data;\n\n if (previewTimeMetrics) {\n const totalPreviewMetrics = this.addFetchFileTimeToPreviewMetrics(previewTimeMetrics);\n loadData = {\n ...loadData,\n metrics: {\n ...loadData.metrics,\n time: totalPreviewMetrics,\n },\n };\n }\n\n onLoad(loadData);\n\n this.setState({ isLoading: false });\n this.focusPreview();\n\n if (this.preview && filesToPrefetch.length) {\n this.prefetch(filesToPrefetch);\n }\n\n this.handleCanPrint();\n };\n\n /**\n * Returns whether file can be downloaded based on file properties, permissions, and user-defined options.\n *\n * @return {boolean}\n */\n canDownload(): boolean {\n const { canDownload }: Props = this.props;\n const { file }: State = this.state;\n const isFileDownloadable =\n getProp(file, 'permissions.can_download', false) && getProp(file, 'is_download_available', false);\n return isFileDownloadable && !!canDownload;\n }\n\n /**\n * Returns whether file can be annotated based on permissions\n *\n * @return {boolean}\n */\n canAnnotate(): boolean {\n const { showAnnotations }: Props = this.props;\n const { file }: State = this.state;\n const isFileAnnotatable = getProp(file, 'permissions.can_annotate', false);\n return !!showAnnotations && isFileAnnotatable;\n }\n\n /**\n * Returns whether a preview should render annotations based on permissions\n *\n * @return {boolean}\n */\n canViewAnnotations(): boolean {\n const { showAnnotations }: Props = this.props;\n const { file }: State = this.state;\n const hasViewAllPermissions = getProp(file, 'permissions.can_view_annotations_all', false);\n const hasViewSelfPermissions = getProp(file, 'permissions.can_view_annotations_self', false);\n return !!showAnnotations && (this.canAnnotate() || hasViewAllPermissions || hasViewSelfPermissions);\n }\n\n handleCanPrint() {\n const preview = this.getPreview();\n this.setState({ canPrint: !!preview && (!preview.canPrint || preview.canPrint()) });\n }\n\n /**\n * Loads preview in the component using the preview library.\n *\n * @return {void}\n */\n loadPreview = async (): Promise<void> => {\n const {\n advancedContentInsights, // will be removed once preview package will be updated to utilize feature flip for ACI\n annotatorState: { activeAnnotationId } = {},\n enableThumbnailsSidebar,\n features,\n fileOptions,\n onAnnotatorEvent,\n onAnnotator,\n onContentInsightsEventReport,\n previewExperiences,\n showAnnotationsControls,\n token: tokenOrTokenFunction,\n ...rest\n }: Props = this.props;\n const { file, selectedVersion, startAt }: State = this.state;\n\n if (!this.isPreviewLibraryLoaded() || !file || !tokenOrTokenFunction) {\n return;\n }\n\n const fileId = this.getFileId(file);\n\n if (fileId !== this.state.currentFileId) {\n return;\n }\n\n const fileOpts = { ...fileOptions };\n const token = typedId => TokenService.getReadTokens(typedId, tokenOrTokenFunction);\n\n if (selectedVersion) {\n setProp(fileOpts, [fileId, 'fileVersionId'], selectedVersion.id);\n setProp(fileOpts, [fileId, 'currentFileVersionId'], getProp(file, 'file_version.id'));\n }\n\n if (activeAnnotationId) {\n setProp(fileOpts, [fileId, 'annotations', 'activeId'], activeAnnotationId);\n }\n\n if (startAt) {\n setProp(fileOpts, [fileId, 'startAt'], startAt);\n }\n\n const previewOptions = {\n advancedContentInsights, // will be removed once preview package will be updated to utilize feature flip for ACI\n container: `#${this.id} .bcpr-content`,\n enableThumbnailsSidebar,\n features,\n fileOptions: fileOpts,\n header: 'none',\n headerElement: `#${this.id} .bcpr-PreviewHeader`,\n experiences: previewExperiences,\n showAnnotations: this.canViewAnnotations(),\n showAnnotationsControls,\n showDownload: this.canDownload(),\n showLoading: false,\n showProgress: false,\n skipServerUpdate: true,\n useHotkeys: false,\n };\n const { Preview } = global.Box;\n this.preview = new Preview();\n this.preview.addListener('load', this.onPreviewLoad);\n this.preview.addListener('preview_error', this.onPreviewError);\n this.preview.addListener('preview_metric', this.onPreviewMetric);\n this.preview.addListener('thumbnailsOpen', () => this.setState({ isThumbnailSidebarOpen: true }));\n this.preview.addListener('thumbnailsClose', () => this.setState({ isThumbnailSidebarOpen: false }));\n\n if (showAnnotationsControls) {\n this.preview.addListener('annotator_create', onAnnotator);\n }\n\n this.preview.updateFileCache([file]);\n this.preview.show(file.id, token, {\n ...previewOptions,\n ...omit(rest, Object.keys(previewOptions)),\n });\n if (advancedContentInsights) {\n this.preview.addListener('advanced_insights_report', onContentInsightsEventReport);\n }\n };\n\n /**\n * Updates preview file from temporary staged file.\n *\n * @return {void}\n */\n loadFileFromStage = () => {\n if (this.stagedFile) {\n this.setState({ ...this.initialState, file: this.stagedFile }, () => {\n this.stagedFile = undefined;\n });\n }\n };\n\n /**\n * Removes the reload notification\n *\n * @return {void}\n */\n closeReloadNotification = () => {\n this.setState({ isReloadNotificationVisible: false });\n };\n\n /**\n * Tells the preview to resize\n *\n * @return {void}\n */\n onResize = (): void => {\n if (this.preview && this.preview.getCurrentViewer()) {\n this.preview.resize();\n }\n };\n\n /**\n * File fetch success callback\n *\n * @param {Object} file - Box file\n * @return {void}\n */\n fetchFileSuccessCallback = (file: BoxItem): void => {\n this.fetchFileEndTime = performance.now();\n\n const { file: currentFile }: State = this.state;\n const isExistingFile = currentFile ? currentFile.id === file.id : false;\n const isWatermarked = getProp(file, 'watermark_info.is_watermarked', false);\n\n // If the file is watermarked or if its a new file, then update the state\n // In this case preview should reload without prompting the user\n if (isWatermarked || !isExistingFile) {\n this.setState({ ...this.initialState, file });\n // $FlowFixMe file version and sha1 should exist at this point\n } else if (currentFile.file_version.sha1 !== file.file_version.sha1) {\n // If we are already prevewing the file that got updated then show the\n // user a notification to reload the file only if its sha1 changed\n this.stagedFile = file;\n this.setState({\n ...this.initialState,\n isReloadNotificationVisible: true,\n });\n }\n };\n\n /**\n * File fetch error callback\n *\n * @return {void}\n */\n fetchFileErrorCallback = (fileError: ElementsXhrError, code: string): void => {\n const { onError } = this.props;\n const errorCode = fileError.code || code;\n const error = {\n code: errorCode,\n message: fileError.message,\n };\n this.setState({ error, file: undefined, isLoading: false });\n onError(fileError, errorCode, {\n error: fileError,\n });\n };\n\n /**\n * Fetches a file\n *\n * @param {string} id file id\n * @param {Function|void} [successCallback] - Callback after file is fetched\n * @param {Function|void} [errorCallback] - Callback after error\n * @param {Object|void} [fetchOptions] - Fetch options\n * @return {void}\n */\n fetchFile(\n id: ?string,\n successCallback?: Function,\n errorCallback?: Function,\n fetchOptions: RequestOptions = {},\n ): void {\n if (!id) {\n return;\n }\n\n this.fetchFileStartTime = performance.now();\n this.fetchFileEndTime = null;\n\n this.api\n .getFileAPI()\n .getFile(\n id,\n successCallback || this.fetchFileSuccessCallback,\n errorCallback || this.fetchFileErrorCallback,\n {\n ...fetchOptions,\n fields: PREVIEW_FIELDS_TO_FETCH,\n },\n );\n }\n\n /**\n * Returns the preview instance\n *\n * @return {Preview} current instance of preview\n */\n getPreview = (): any => {\n const { file }: State = this.state;\n if (!this.preview || !file) {\n return null;\n }\n\n return this.preview;\n };\n\n /**\n * Returns the viewer instance being used by preview.\n * This will let child components access the viewers.\n *\n * @return {Viewer} current instance of the preview viewer\n */\n getViewer = (): any => {\n const preview = this.getPreview();\n const viewer = preview ? preview.getCurrentViewer() : null;\n return viewer && viewer.isLoaded() && !viewer.isDestroyed() ? viewer : null;\n };\n\n /**\n * Finds the index of current file inside the collection\n *\n * @return {number} -1 if not indexed\n */\n getFileIndex() {\n const { currentFileId }: State = this.state;\n const { collection }: Props = this.props;\n if (!currentFileId || collection.length < 2) {\n return -1;\n }\n\n return collection.findIndex(item => {\n if (typeof item === 'string') {\n return item === currentFileId;\n }\n\n return item.id === currentFileId;\n });\n }\n\n /**\n * Shows a preview of a file at the specified index in the current collection.\n *\n * @public\n * @param {number} index - Index of file to preview\n * @return {void}\n */\n navigateToIndex(index: number) {\n const { collection, onNavigate }: Props = this.props;\n const { length } = collection;\n if (length < 2 || index < 0 || index > length - 1) {\n return;\n }\n\n const fileOrId = collection[index];\n const fileId = typeof fileOrId === 'object' ? fileOrId.id || '' : fileOrId;\n\n this.setState(\n {\n currentFileId: fileId,\n },\n () => {\n // Execute navigation callback\n onNavigate(fileId);\n },\n );\n }\n\n /**\n * Shows a preview of the previous file.\n *\n * @public\n * @return {void}\n */\n navigateLeft = () => {\n const currentIndex = this.getFileIndex();\n const newIndex = currentIndex === 0 ? 0 : currentIndex - 1;\n if (newIndex !== currentIndex) {\n this.navigateToIndex(newIndex);\n }\n };\n\n /**\n * Shows a preview of the next file.\n *\n * @public\n * @return {void}\n */\n navigateRight = () => {\n const { collection }: Props = this.props;\n const currentIndex = this.getFileIndex();\n const newIndex = currentIndex === collection.length - 1 ? collection.length - 1 : currentIndex + 1;\n if (newIndex !== currentIndex) {\n this.navigateToIndex(newIndex);\n }\n };\n\n /**\n * Downloads file.\n *\n * @public\n * @return {void}\n */\n download = () => {\n const { onDownload }: Props = this.props;\n const { file }: State = this.state;\n if (this.preview) {\n this.preview.download();\n onDownload(cloneDeep(file));\n }\n };\n\n /**\n * Prints file.\n *\n * @public\n * @return {void}\n */\n print = () => {\n if (this.preview) {\n this.preview.print();\n }\n };\n\n /**\n * Mouse move handler that is throttled and show\n * the navigation arrows if applicable.\n *\n * @return {void}\n */\n onMouseMove = throttle(() => {\n const viewer = this.getViewer();\n const isPreviewing = !!viewer;\n const CLASS_NAVIGATION_VISIBILITY = 'bcpr-nav-is-visible';\n\n clearTimeout(this.mouseMoveTimeoutID);\n\n if (!this.previewContainer) {\n return;\n }\n\n // Always assume that navigation arrows will be hidden\n this.previewContainer.classList.remove(CLASS_NAVIGATION_VISIBILITY);\n\n // Only show it if either we aren't previewing or if we are then the viewer\n // is not blocking the show. If we are previewing then the viewer may choose\n // to not allow navigation arrows. This is mostly useful for videos since the\n // navigation arrows may interfere with the settings menu inside video player.\n if (this.previewContainer && (!isPreviewing || viewer.allowNavigationArrows())) {\n this.previewContainer.classList.add(CLASS_NAVIGATION_VISIBILITY);\n }\n\n this.mouseMoveTimeoutID = setTimeout(() => {\n if (this.previewContainer) {\n this.previewContainer.classList.remove(CLASS_NAVIGATION_VISIBILITY);\n }\n }, 1500);\n }, 1000);\n\n /**\n * Keyboard events\n *\n * @return {void}\n */\n onKeyDown = (event: SyntheticKeyboardEvent<HTMLElement>) => {\n const { useHotkeys }: Props = this.props;\n if (!useHotkeys) {\n return;\n }\n\n let consumed = false;\n const key = decode(event);\n const viewer = this.getViewer();\n\n // If focus was on an input or if the viewer doesn't exist\n // then don't bother doing anything further\n if (!key || !viewer || isInputElement(event.target)) {\n return;\n }\n\n if (typeof viewer.onKeydown === 'function') {\n consumed = !!viewer.onKeydown(key, event.nativeEvent);\n }\n\n if (!consumed) {\n switch (key) {\n case 'ArrowLeft':\n this.navigateLeft();\n consumed = true;\n break;\n case 'ArrowRight':\n this.navigateRight();\n consumed = true;\n break;\n default:\n // no-op\n }\n }\n\n if (consumed) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n /**\n * Handles version change events\n *\n * @param {string} [version] - The version that is now previewed\n * @param {object} [additionalVersionInfo] - extra info about the version\n */\n onVersionChange = (version?: BoxItemVersion, additionalVersionInfo: AdditionalVersionInfo = {}): void => {\n const { onVersionChange }: Props = this.props;\n this.updateVersionToCurrent = additionalVersionInfo.updateVersionToCurrent;\n\n onVersionChange(version, additionalVersionInfo);\n this.setState({\n selectedVersion: version,\n });\n };\n\n handleAnnotationSelect = ({ file_version, id, target }: Annotation) => {\n const { location = {} } = target;\n const { file, selectedVersion } = this.state;\n const annotationFileVersionId = getProp(file_version, 'id');\n const currentFileVersionId = getProp(file, 'file_version.id');\n const currentPreviewFileVersionId = getProp(selectedVersion, 'id', currentFileVersionId);\n const unit = startAtTypes[location.type];\n const viewer = this.getViewer();\n\n if (unit && annotationFileVersionId && annotationFileVersionId !== currentPreviewFileVersionId) {\n this.setState({\n startAt: {\n unit,\n value: location.value,\n },\n });\n }\n\n if (viewer) {\n viewer.emit('scrolltoannotation', { id, target });\n }\n };\n\n /**\n * Holds the reference the preview container\n *\n * @return {void}\n */\n containerRef = (container: ?HTMLDivElement) => {\n this.previewContainer = container;\n };\n\n /**\n * Refreshes the content sidebar panel\n *\n * @return {void}\n */\n refreshSidebar(): void {\n const { current: contentSidebar } = this.contentSidebar;\n\n if (contentSidebar) {\n contentSidebar.refresh();\n }\n }\n\n /**\n * Fetches a thumbnail for the page given\n *\n * @return {Promise|null} - promise resolves with the image HTMLElement or null if generation is in progress\n */\n getThumbnail = (pageNumber: ?number): Promise<HTMLElement> | null => {\n const preview = this.getPreview();\n if (preview && preview.viewer) {\n return preview.viewer.getThumbnail(pageNumber);\n }\n\n return null;\n };\n\n /**\n * Renders the file preview\n *\n * @inheritdoc\n * @return {Element}\n */\n render() {\n const {\n apiHost,\n collection,\n token,\n language,\n messages,\n className,\n contentAnswersProps,\n contentOpenWithProps,\n contentSidebarProps,\n hasHeader,\n hasProviders,\n history,\n isLarge,\n isVeryLarge,\n logoUrl,\n onClose,\n measureRef,\n sharedLink,\n sharedLinkPassword,\n requestInterceptor,\n responseInterceptor,\n theme,\n }: Props = this.props;\n\n const {\n canPrint,\n currentFileId,\n error,\n file,\n isLoading,\n isReloadNotificationVisible,\n isThumbnailSidebarOpen,\n selectedVersion,\n }: State = this.state;\n\n const styleClassName = classNames(\n 'be bcpr',\n {\n 'bcpr-thumbnails-open': isThumbnailSidebarOpen,\n },\n className,\n );\n\n if (!currentFileId) {\n return null;\n }\n\n const errorCode = getProp(error, 'code');\n const currentExtension = getProp(file, 'id') === currentFileId ? getProp(file, 'extension') : '';\n const currentVersionId = getProp(file, 'file_version.id');\n const selectedVersionId = getProp(selectedVersion, 'id', currentVersionId);\n const onHeaderClose = currentVersionId === selectedVersionId ? onClose : this.updateVersionToCurrent;\n\n /* eslint-disable jsx-a11y/no-static-element-interactions */\n /* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n return (\n <Internationalize language={language} messages={messages}>\n <APIContext.Provider value={(this.api: API)}>\n <Providers hasProviders={hasProviders}>\n <div\n id={this.id}\n className={styleClassName}\n ref={measureRef}\n onKeyDown={this.onKeyDown}\n tabIndex={0}\n >\n <ThemingStyles theme={theme} />\n {hasHeader && (\n <PreviewHeader\n file={file}\n logoUrl={logoUrl}\n token={token}\n onClose={onHeaderClose}\n onPrint={this.print}\n canDownload={this.canDownload()}\n canPrint={canPrint}\n onDownload={this.download}\n contentAnswersProps={contentAnswersProps}\n contentOpenWithProps={contentOpenWithProps}\n canAnnotate={this.canAnnotate()}\n selectedVersion={selectedVersion}\n />\n )}\n <div className=\"bcpr-body\">\n <div className=\"bcpr-container\" onMouseMove={this.onMouseMove} ref={this.containerRef}>\n {file && (\n <Measure bounds onResize={this.onResize}>\n {({ measureRef: previewRef }) => (\n <div ref={previewRef} className=\"bcpr-content\" />\n )}\n </Measure>\n )}\n <PreviewMask\n errorCode={errorCode}\n extension={currentExtension}\n isLoading={isLoading}\n />\n <PreviewNavigation\n collection={collection}\n currentIndex={this.getFileIndex()}\n onNavigateLeft={this.navigateLeft}\n onNavigateRight={this.navigateRight}\n />\n </div>\n {file && (\n <LoadableSidebar\n {...contentSidebarProps}\n apiHost={apiHost}\n token={token}\n cache={this.api.getCache()}\n fileId={currentFileId}\n getPreview={this.getPreview}\n getViewer={this.getViewer}\n history={history}\n isDefaultOpen={isLarge || isVeryLarge}\n language={language}\n ref={this.contentSidebar}\n sharedLink={sharedLink}\n sharedLinkPassword={sharedLinkPassword}\n requestInterceptor={requestInterceptor}\n responseInterceptor={responseInterceptor}\n onAnnotationSelect={this.handleAnnotationSelect}\n onVersionChange={this.onVersionChange}\n />\n )}\n </div>\n {isReloadNotificationVisible && (\n <ReloadNotification\n onClose={this.closeReloadNotification}\n onClick={this.loadFileFromStage}\n />\n )}\n </div>\n </Providers>\n </APIContext.Provider>\n </Internationalize>\n );\n /* eslint-enable jsx-a11y/no-static-element-interactions */\n /* eslint-enable jsx-a11y/no-noninteractive-tabindex */\n }\n}\n\nexport type ContentPreviewProps = Props;\nexport { ContentPreview as ContentPreviewComponent };\nexport default flow([\n makeResponsive,\n withAnnotatorContext,\n withAnnotations,\n withRouter,\n withNavRouter,\n withFeatureConsumer,\n withFeatureProvider,\n withLogger(ORIGIN_CONTENT_PREVIEW),\n withErrorBoundary(ORIGIN_CONTENT_PREVIEW),\n])(ContentPreview);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ContentPreview.js","names":["React","classNames","cloneDeep","flow","getProp","isEqual","noop","omit","setProp","throttle","uniqueid","Measure","withRouter","decode","makeResponsive","withNavRouter","Internationalize","AsyncLoad","ThemingStyles","TokenService","isInputElement","focus","getTypedFileId","withAnnotations","withAnnotatorContext","withErrorBoundary","withLogger","PREVIEW_FIELDS_TO_FETCH","mark","withFeatureConsumer","withFeatureProvider","withBlueprintModernization","EVENT_JS_READY","ReloadNotification","API","APIContext","PreviewHeader","PreviewMask","PreviewNavigation","Providers","DEFAULT_HOSTNAME_API","DEFAULT_HOSTNAME_APP","DEFAULT_HOSTNAME_STATIC","DEFAULT_PREVIEW_VERSION","DEFAULT_LOCALE","DEFAULT_PATH_STATIC_PREVIEW","CLIENT_NAME_CONTENT_PREVIEW","ORIGIN_PREVIEW","ORIGIN_CONTENT_PREVIEW","ERROR_CODE_UNKNOWN","startAtTypes","page","InvalidIdError","Error","PREVIEW_LOAD_METRIC_EVENT","MARK_NAME_JS_READY","LoadableSidebar","loader","ContentPreview","PureComponent","constructor","props","_defineProperty","createRef","canPrint","error","undefined","isLoading","isReloadNotificationVisible","isThumbnailSidebarOpen","_ref","rest","_objectWithoutProperties","_excluded","code","onError","setState","_objectSpread","previewMetrics","logger","event_name","metrics","totalFetchFileTime","getTotalFileFetchTime","totalTime","value","file_info_time","onPreviewMetric","data","onLoad","collection","currentIndex","getFileIndex","filesToPrefetch","slice","previewTimeMetrics","loadData","totalPreviewMetrics","addFetchFileTimeToPreviewMetrics","time","focusPreview","preview","length","prefetch","handleCanPrint","_this$props","advancedContentInsights","annotatorState","activeAnnotationId","enableThumbnailsSidebar","features","fileOptions","onAnnotatorEvent","onAnnotator","onContentInsightsEventReport","previewExperiences","showAnnotationsControls","token","tokenOrTokenFunction","_excluded2","file","selectedVersion","startAt","state","isPreviewLibraryLoaded","fileId","getFileId","currentFileId","fileOpts","typedId","getReadTokens","id","previewOptions","container","header","headerElement","experiences","showAnnotations","canViewAnnotations","showDownload","canDownload","showLoading","showProgress","skipServerUpdate","useHotkeys","Preview","global","Box","addListener","onPreviewLoad","onPreviewError","updateFileCache","show","Object","keys","stagedFile","initialState","getCurrentViewer","resize","fetchFileEndTime","performance","now","currentFile","isExistingFile","isWatermarked","file_version","sha1","fileError","errorCode","message","getPreview","viewer","isLoaded","isDestroyed","newIndex","navigateToIndex","onDownload","download","print","getViewer","isPreviewing","CLASS_NAVIGATION_VISIBILITY","clearTimeout","mouseMoveTimeoutID","previewContainer","classList","remove","allowNavigationArrows","add","setTimeout","event","consumed","key","target","onKeydown","nativeEvent","navigateLeft","navigateRight","preventDefault","stopPropagation","version","additionalVersionInfo","onVersionChange","updateVersionToCurrent","location","annotationFileVersionId","currentFileVersionId","currentPreviewFileVersionId","unit","type","emit","pageNumber","getThumbnail","apiHost","cache","language","requestInterceptor","responseInterceptor","sharedLink","sharedLinkPassword","api","clientName","prevFileIdProp","onReadyMetric","endMarkName","componentWillUnmount","destroy","destroyPreview","shouldReset","onPreviewDestroy","removeAllListeners","clearCache","componentDidMount","loadStylesheet","loadScript","fetchFile","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","prevFeatures","prevPreviewExperiences","prevToken","hasFileIdChanged","hasTokenChanged","haveAdvancedContentInsightsChanged","haveExperiencesChanged","shouldLoadPreview","loadPreview","updatePreviewToken","updateExperiences","updateContentInsightsOptions","shouldReload","updateToken","prevFile","prevSelectedVersion","prevSelectedVersionId","selectedVersionId","prevFileVersionId","fileVersionId","isPreviousCurrent","isSelectedCurrent","getBasePath","asset","staticHost","staticPath","previewLibraryVersion","path","suffix","endsWith","head","document","url","querySelector","link","createElement","rel","href","appendChild","previewScript","script","src","addEventListener","autoFocus","getInnerRef","activeElement","updatePreviewCacheAndPrefetch","files","typedIds","map","cacheTokens","forEach","refreshCache","fetchFileStartTime","Math","round","rendering","conversion","preload","totalConversion","totalRendering","totalPreload","total","isFileDownloadable","canAnnotate","isFileAnnotatable","hasViewAllPermissions","hasViewSelfPermissions","successCallback","errorCallback","fetchOptions","getFileAPI","getFile","fetchFileSuccessCallback","fetchFileErrorCallback","fields","findIndex","item","index","onNavigate","fileOrId","refreshSidebar","current","contentSidebar","refresh","render","messages","className","contentAnswersProps","contentOpenWithProps","contentSidebarProps","hasHeader","hasProviders","history","isLarge","isVeryLarge","logoUrl","onClose","measureRef","theme","styleClassName","currentExtension","currentVersionId","onHeaderClose","Provider","ref","onKeyDown","tabIndex","onPrint","onMouseMove","containerRef","bounds","onResize","previewRef","extension","onNavigateLeft","onNavigateRight","_extends","getCache","isDefaultOpen","onAnnotationSelect","handleAnnotationSelect","closeReloadNotification","onClick","loadFileFromStage","appHost","ContentPreviewComponent"],"sources":["../../../src/elements/content-preview/ContentPreview.js"],"sourcesContent":["/**\n * @flow\n * @file Content Preview Component\n * @author Box\n */\n\nimport 'regenerator-runtime/runtime';\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport cloneDeep from 'lodash/cloneDeep';\nimport flow from 'lodash/flow';\nimport getProp from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport noop from 'lodash/noop';\nimport omit from 'lodash/omit';\nimport setProp from 'lodash/set';\nimport throttle from 'lodash/throttle';\nimport uniqueid from 'lodash/uniqueId';\nimport Measure from 'react-measure';\nimport { withRouter } from 'react-router-dom';\nimport type { ContextRouter } from 'react-router-dom';\nimport { decode } from '../../utils/keys';\nimport makeResponsive from '../common/makeResponsive';\nimport { withNavRouter } from '../common/nav-router';\nimport Internationalize from '../common/Internationalize';\nimport AsyncLoad from '../common/async-load';\n// $FlowFixMe TypeScript file\nimport ThemingStyles from '../common/theming';\nimport TokenService from '../../utils/TokenService';\nimport { isInputElement, focus } from '../../utils/dom';\nimport { getTypedFileId } from '../../utils/file';\nimport { withAnnotations, withAnnotatorContext } from '../common/annotator-context';\nimport { withErrorBoundary } from '../common/error-boundary';\nimport { withLogger } from '../common/logger';\nimport { PREVIEW_FIELDS_TO_FETCH } from '../../utils/fields';\nimport { mark } from '../../utils/performance';\nimport { withFeatureConsumer, withFeatureProvider } from '../common/feature-checking';\n// $FlowFixMe\nimport { withBlueprintModernization } from '../common/withBlueprintModernization';\nimport { EVENT_JS_READY } from '../common/logger/constants';\nimport ReloadNotification from './ReloadNotification';\nimport API from '../../api';\nimport APIContext from '../common/api-context';\nimport PreviewHeader from './preview-header';\nimport PreviewMask from './PreviewMask';\nimport PreviewNavigation from './PreviewNavigation';\nimport Providers from '../common/Providers';\nimport {\n DEFAULT_HOSTNAME_API,\n DEFAULT_HOSTNAME_APP,\n DEFAULT_HOSTNAME_STATIC,\n DEFAULT_PREVIEW_VERSION,\n DEFAULT_LOCALE,\n DEFAULT_PATH_STATIC_PREVIEW,\n CLIENT_NAME_CONTENT_PREVIEW,\n ORIGIN_PREVIEW,\n ORIGIN_CONTENT_PREVIEW,\n ERROR_CODE_UNKNOWN,\n} from '../../constants';\nimport type { Annotation } from '../../common/types/feed';\nimport type { TargetingApi } from '../../features/targeting/types';\nimport type { ErrorType, AdditionalVersionInfo } from '../common/flowTypes';\nimport type { WithLoggerProps } from '../../common/types/logging';\nimport type { RequestOptions, ErrorContextProps, ElementsXhrError } from '../../common/types/api';\nimport type { StringMap, Token, BoxItem, BoxItemVersion } from '../../common/types/core';\nimport type { VersionChangeCallback } from '../content-sidebar/versions';\nimport type { FeatureConfig } from '../common/feature-checking';\nimport type { WithAnnotationsProps, WithAnnotatorContextProps } from '../common/annotator-context';\n// $FlowFixMe TypeScript file\nimport type { Theme } from '../common/theming';\nimport type APICache from '../../utils/Cache';\n\nimport '../common/fonts.scss';\nimport '../common/base.scss';\nimport './ContentPreview.scss';\n\ntype StartAt = {\n unit: 'pages' | 'seconds',\n value: number,\n};\n\ntype Props = {\n advancedContentInsights: {\n isActive: boolean,\n ownerEId: number,\n userId: number,\n },\n apiHost: string,\n appHost: string,\n autoFocus: boolean,\n boxAnnotations?: Object,\n cache?: APICache,\n canDownload?: boolean,\n className: string,\n collection: Array<string | BoxItem>,\n contentAnswersProps: ContentAnswersProps,\n contentOpenWithProps: ContentOpenWithProps,\n contentSidebarProps: ContentSidebarProps,\n enableThumbnailsSidebar: boolean,\n features?: FeatureConfig,\n fileId?: string,\n fileOptions?: Object,\n getInnerRef: () => ?HTMLElement,\n hasHeader?: boolean,\n hasProviders?: boolean,\n isLarge: boolean,\n isVeryLarge?: boolean,\n language: string,\n logoUrl?: string,\n measureRef: Function,\n messages?: StringMap,\n onAnnotator: Function,\n onAnnotatorEvent: Function,\n onClose?: Function,\n onContentInsightsEventReport: Function,\n onDownload: Function,\n onLoad: Function,\n onNavigate: Function,\n onVersionChange: VersionChangeCallback,\n previewExperiences?: {\n [name: string]: TargetingApi,\n },\n previewLibraryVersion: string,\n requestInterceptor?: Function,\n responseInterceptor?: Function,\n sharedLink?: string,\n sharedLinkPassword?: string,\n showAnnotations?: boolean,\n showAnnotationsControls?: boolean,\n staticHost: string,\n staticPath: string,\n theme?: Theme,\n token: Token,\n useHotkeys: boolean,\n} & ErrorContextProps &\n WithLoggerProps &\n WithAnnotationsProps &\n WithAnnotatorContextProps &\n ContextRouter;\n\ntype State = {\n canPrint?: boolean,\n currentFileId?: string,\n error?: ErrorType,\n file?: BoxItem,\n isLoading: boolean,\n isReloadNotificationVisible: boolean,\n isThumbnailSidebarOpen: boolean,\n prevFileIdProp?: string, // the previous value of the \"fileId\" prop. Needed to implement getDerivedStateFromProps\n selectedVersion?: BoxItemVersion,\n startAt?: StartAt,\n};\n\n// Emitted by preview's 'load' event\ntype PreviewTimeMetrics = {\n conversion: number,\n preload?: number,\n rendering: number,\n total: number,\n};\n\n// Emitted by preview's 'preview_metric' event\ntype PreviewMetrics = {\n browser_name: string,\n client_version: string,\n content_type: string, // Sum of all available load times.\n convert_time: number,\n download_response_time: number,\n error?: Object,\n event_name?: string,\n extension: string,\n file_id: string,\n file_info_time: number,\n file_version_id: string,\n full_document_load_time: number,\n locale: string,\n logger_session_id: string,\n rep_type: string,\n timestamp: string,\n value: number,\n};\n\ntype PreviewLibraryError = {\n error: ErrorType,\n};\n\nconst startAtTypes = {\n page: 'pages',\n};\nconst InvalidIdError = new Error('Invalid id for Preview!');\nconst PREVIEW_LOAD_METRIC_EVENT = 'load';\nconst MARK_NAME_JS_READY = `${ORIGIN_CONTENT_PREVIEW}_${EVENT_JS_READY}`;\n\nmark(MARK_NAME_JS_READY);\n\nconst LoadableSidebar = AsyncLoad({\n loader: () => import(/* webpackMode: \"lazy\", webpackChunkName: \"content-sidebar\" */ '../content-sidebar'),\n});\n\nclass ContentPreview extends React.PureComponent<Props, State> {\n id: string;\n\n props: Props;\n\n state: State;\n\n preview: any;\n\n api: API;\n\n // Defines a generic type for ContentSidebar, since an import would interfere with code splitting\n contentSidebar: { current: null | { refresh: Function } } = React.createRef();\n\n previewContainer: ?HTMLDivElement;\n\n mouseMoveTimeoutID: TimeoutID;\n\n rootElement: HTMLElement;\n\n stagedFile: ?BoxItem;\n\n updateVersionToCurrent: ?() => void;\n\n initialState: State = {\n canPrint: false,\n error: undefined,\n isLoading: true,\n isReloadNotificationVisible: false,\n isThumbnailSidebarOpen: false,\n };\n\n static defaultProps = {\n apiHost: DEFAULT_HOSTNAME_API,\n appHost: DEFAULT_HOSTNAME_APP,\n autoFocus: false,\n canDownload: true,\n className: '',\n collection: [],\n contentAnswersProps: {},\n contentOpenWithProps: {},\n contentSidebarProps: {},\n enableThumbnailsSidebar: false,\n hasHeader: false,\n language: DEFAULT_LOCALE,\n onAnnotator: noop,\n onAnnotatorEvent: noop,\n onContentInsightsEventReport: noop,\n onDownload: noop,\n onError: noop,\n onLoad: noop,\n onNavigate: noop,\n onPreviewDestroy: noop,\n onVersionChange: noop,\n previewLibraryVersion: DEFAULT_PREVIEW_VERSION,\n showAnnotations: false,\n staticHost: DEFAULT_HOSTNAME_STATIC,\n staticPath: DEFAULT_PATH_STATIC_PREVIEW,\n useHotkeys: true,\n };\n\n /**\n * @property {number}\n */\n fetchFileEndTime: ?number;\n\n /**\n * @property {number}\n */\n fetchFileStartTime: ?number;\n\n /**\n * [constructor]\n *\n * @return {ContentPreview}\n */\n constructor(props: Props) {\n super(props);\n const {\n apiHost,\n cache,\n fileId,\n language,\n requestInterceptor,\n responseInterceptor,\n sharedLink,\n sharedLinkPassword,\n token,\n } = props;\n\n this.id = uniqueid('bcpr_');\n this.api = new API({\n apiHost,\n cache,\n clientName: CLIENT_NAME_CONTENT_PREVIEW,\n language,\n requestInterceptor,\n responseInterceptor,\n sharedLink,\n sharedLinkPassword,\n token,\n });\n this.state = {\n ...this.initialState,\n currentFileId: fileId,\n // eslint-disable-next-line react/no-unused-state\n prevFileIdProp: fileId,\n };\n const { logger } = props;\n logger.onReadyMetric({\n endMarkName: MARK_NAME_JS_READY,\n });\n }\n\n /**\n * Cleanup\n *\n * @return {void}\n */\n componentWillUnmount(): void {\n // Don't destroy the cache while unmounting\n this.api.destroy(false);\n this.destroyPreview();\n }\n\n /**\n * Cleans up the preview instance\n */\n destroyPreview(shouldReset: boolean = true) {\n const { onPreviewDestroy } = this.props;\n if (this.preview) {\n this.preview.destroy();\n this.preview.removeAllListeners();\n this.preview = undefined;\n\n onPreviewDestroy(shouldReset);\n }\n }\n\n /**\n * Destroys api instances with caches\n *\n * @private\n * @return {void}\n */\n clearCache(): void {\n this.api.destroy(true);\n }\n\n /**\n * Once the component mounts, load Preview assets and fetch file info.\n *\n * @return {void}\n */\n componentDidMount(): void {\n this.loadStylesheet();\n this.loadScript();\n\n this.fetchFile(this.state.currentFileId);\n this.focusPreview();\n }\n\n static getDerivedStateFromProps(props: Props, state: State) {\n const { fileId } = props;\n\n if (fileId !== state.prevFileIdProp) {\n return {\n currentFileId: fileId,\n prevFileIdProp: fileId,\n };\n }\n\n return null;\n }\n\n /**\n * After component updates, load Preview if appropriate.\n *\n * @return {void}\n */\n componentDidUpdate(prevProps: Props, prevState: State): void {\n const { features, previewExperiences, token } = this.props;\n const { features: prevFeatures, previewExperiences: prevPreviewExperiences, token: prevToken } = prevProps;\n const { currentFileId } = this.state;\n const hasFileIdChanged = prevState.currentFileId !== currentFileId;\n const hasTokenChanged = prevToken !== token;\n const haveAdvancedContentInsightsChanged = !isEqual(\n prevFeatures?.advancedContentInsights,\n features?.advancedContentInsights,\n );\n const haveExperiencesChanged = prevPreviewExperiences !== previewExperiences;\n\n if (hasFileIdChanged) {\n this.destroyPreview();\n this.setState({ isLoading: true, selectedVersion: undefined });\n this.fetchFile(currentFileId);\n } else if (this.shouldLoadPreview(prevState)) {\n this.destroyPreview(false);\n this.setState({ isLoading: true });\n this.loadPreview();\n } else if (hasTokenChanged) {\n this.updatePreviewToken();\n }\n\n if (haveExperiencesChanged && this.preview && this.preview.updateExperiences) {\n this.preview.updateExperiences(previewExperiences);\n }\n\n if (\n this.preview?.updateContentInsightsOptions &&\n features?.advancedContentInsights &&\n haveAdvancedContentInsightsChanged\n ) {\n this.preview.updateContentInsightsOptions(features?.advancedContentInsights);\n }\n }\n\n /**\n * Updates the access token used by preview library\n *\n * @param {boolean} shouldReload - true if preview should be reloaded\n */\n updatePreviewToken(shouldReload: boolean = false) {\n if (this.preview) {\n this.preview.updateToken(this.props.token, shouldReload);\n }\n }\n\n /**\n * Returns whether or not preview should be loaded.\n *\n * @param {State} prevState - Previous state\n * @return {boolean}\n */\n shouldLoadPreview(prevState: State): boolean {\n const { file, selectedVersion }: State = this.state;\n const { file: prevFile, selectedVersion: prevSelectedVersion }: State = prevState;\n const prevSelectedVersionId = getProp(prevSelectedVersion, 'id');\n const selectedVersionId = getProp(selectedVersion, 'id');\n const prevFileVersionId = getProp(prevFile, 'file_version.id');\n const fileVersionId = getProp(file, 'file_version.id');\n let loadPreview = false;\n\n if (selectedVersionId !== prevSelectedVersionId) {\n const isPreviousCurrent = fileVersionId === prevSelectedVersionId || !prevSelectedVersionId;\n const isSelectedCurrent = fileVersionId === selectedVersionId || !selectedVersionId;\n\n // Load preview if the user has selected a non-current version of the file\n loadPreview = !isPreviousCurrent || !isSelectedCurrent;\n } else if (fileVersionId && prevFileVersionId) {\n // Load preview if the file's current version ID has changed\n loadPreview = fileVersionId !== prevFileVersionId;\n } else {\n // Load preview if file object has newly been populated in state\n loadPreview = !prevFile && !!file;\n }\n\n return loadPreview;\n }\n\n /**\n * Returns preview asset urls\n *\n * @return {string} base url\n */\n getBasePath(asset: string): string {\n const { staticHost, staticPath, language, previewLibraryVersion }: Props = this.props;\n const path: string = `${staticPath}/${previewLibraryVersion}/${language}/${asset}`;\n const suffix: string = staticHost.endsWith('/') ? path : `/${path}`;\n return `${staticHost}${suffix}`;\n }\n\n /**\n * Determines if preview assets are loaded\n *\n * @return {boolean} true if preview is loaded\n */\n isPreviewLibraryLoaded(): boolean {\n return !!global.Box && !!global.Box.Preview;\n }\n\n /**\n * Loads external css by appending a <link> element\n *\n * @return {void}\n */\n loadStylesheet(): void {\n const { head } = document;\n const url: string = this.getBasePath('preview.css');\n\n if (!head || head.querySelector(`link[rel=\"stylesheet\"][href=\"${url}\"]`)) {\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = url;\n head.appendChild(link);\n }\n\n /**\n * Loads external script by appending a <script> element\n *\n * @return {void}\n */\n loadScript(): void {\n const { head } = document;\n const url: string = this.getBasePath('preview.js');\n\n if (!head || this.isPreviewLibraryLoaded()) {\n return;\n }\n\n const previewScript = head.querySelector(`script[src=\"${url}\"]`);\n if (previewScript) {\n return;\n }\n\n const script = document.createElement('script');\n script.src = url;\n script.addEventListener('load', this.loadPreview);\n head.appendChild(script);\n }\n\n /**\n * Focuses the preview on load.\n *\n * @return {void}\n */\n focusPreview() {\n const { autoFocus, getInnerRef }: Props = this.props;\n if (autoFocus && !isInputElement(document.activeElement)) {\n focus(getInnerRef());\n }\n }\n\n /**\n * Updates preview cache and prefetches a file\n *\n * @param {BoxItem} file - file to prefetch\n * @return {void}\n */\n updatePreviewCacheAndPrefetch(file: BoxItem, token: Token): void {\n if (!this.preview || !file || !file.id) {\n return;\n }\n\n this.preview.updateFileCache([file]);\n this.preview.prefetch({ fileId: file.id, token });\n }\n\n /**\n * Gets the file id\n *\n * @param {string|BoxItem} file - box file or file id\n * @return {string} file id\n */\n getFileId(file?: string | BoxItem): string {\n if (typeof file === 'string') {\n return file;\n }\n\n if (typeof file === 'object' && !!file.id) {\n return file.id;\n }\n\n throw InvalidIdError;\n }\n\n /**\n * Prefetches the next few preview files if any\n *\n * @param {Array<string|BoxItem>} files - files to prefetch\n * @return {void}\n */\n async prefetch(files: Array<string | BoxItem>): Promise<void> {\n const { token }: Props = this.props;\n const typedIds: string[] = files.map(file => getTypedFileId(this.getFileId(file)));\n await TokenService.cacheTokens(typedIds, token);\n files.forEach(file => {\n const fileId = this.getFileId(file);\n this.fetchFile(fileId, noop, noop, {\n refreshCache: false,\n });\n });\n }\n\n /**\n * Calculates the total file fetch time\n *\n * @return {number} the total fetch time\n */\n getTotalFileFetchTime(): number {\n if (!this.fetchFileStartTime || !this.fetchFileEndTime) {\n return 0;\n }\n\n return Math.round(this.fetchFileEndTime - this.fetchFileStartTime);\n }\n\n /**\n * Handler for 'preview_error' preview event\n *\n * @param {PreviewLibraryError} previewError - the error data emitted from preview\n * @return {void}\n */\n onPreviewError = ({ error, ...rest }: PreviewLibraryError): void => {\n const { code = ERROR_CODE_UNKNOWN } = error;\n const { onError } = this.props;\n\n // In case of error, there should be no thumbnail sidebar to account for\n this.setState({ isLoading: false, isThumbnailSidebarOpen: false });\n\n onError(\n error,\n code,\n {\n ...rest,\n error,\n },\n ORIGIN_PREVIEW,\n );\n };\n\n /**\n * Event handler 'preview_metric' which also adds in the file fetch time if it's a load event\n *\n * @param {Object} previewMetrics - the object emitted by 'preview_metric'\n * @return {void}\n */\n onPreviewMetric = (previewMetrics: PreviewMetrics): void => {\n const { logger } = this.props;\n const { event_name } = previewMetrics;\n let metrics = {\n ...previewMetrics,\n };\n\n // We need to add in the total file fetch time to the file_info_time and value (total)\n // as preview does not do the files call\n if (event_name === PREVIEW_LOAD_METRIC_EVENT) {\n const totalFetchFileTime = this.getTotalFileFetchTime();\n const totalTime = (previewMetrics.value || 0) + totalFetchFileTime;\n\n // If an unnatural load time occurs or is invalid, don't log a load event\n if (!totalTime) {\n return;\n }\n\n metrics = {\n ...previewMetrics,\n file_info_time: totalFetchFileTime,\n value: totalTime,\n };\n }\n\n logger.onPreviewMetric(metrics);\n };\n\n /**\n * Adds in the file fetch time to the preview metrics\n *\n * @param {Object} previewTimeMetrics - the preview time metrics\n * @return {Object} the preview time metrics merged with the files call time\n */\n addFetchFileTimeToPreviewMetrics(previewTimeMetrics: PreviewTimeMetrics): PreviewTimeMetrics {\n const totalFetchFileTime = this.getTotalFileFetchTime();\n const { rendering, conversion, preload } = previewTimeMetrics;\n\n // We need to add in the total file fetch time to the rendering and total as preview\n // does not do the files call. In the case the file is in the process of\n // being converted, we need to add to conversion instead of the render\n let totalConversion = conversion;\n let totalRendering = rendering;\n let totalPreload = preload;\n if (conversion) {\n totalConversion += totalFetchFileTime;\n } else {\n totalRendering += totalFetchFileTime;\n }\n\n if (totalPreload) {\n // Preload is optional, depending on file type\n totalPreload += totalFetchFileTime;\n }\n\n const previewMetrics = {\n conversion: totalConversion,\n rendering: totalRendering,\n total: totalRendering + totalConversion,\n preload: totalPreload,\n };\n\n return previewMetrics;\n }\n\n /**\n * onLoad function for preview\n *\n * @return {void}\n */\n onPreviewLoad = (data: Object): void => {\n const { onLoad, collection }: Props = this.props;\n const currentIndex = this.getFileIndex();\n const filesToPrefetch = collection.slice(currentIndex + 1, currentIndex + 5);\n const previewTimeMetrics = getProp(data, 'metrics.time');\n let loadData = data;\n\n if (previewTimeMetrics) {\n const totalPreviewMetrics = this.addFetchFileTimeToPreviewMetrics(previewTimeMetrics);\n loadData = {\n ...loadData,\n metrics: {\n ...loadData.metrics,\n time: totalPreviewMetrics,\n },\n };\n }\n\n onLoad(loadData);\n\n this.setState({ isLoading: false });\n this.focusPreview();\n\n if (this.preview && filesToPrefetch.length) {\n this.prefetch(filesToPrefetch);\n }\n\n this.handleCanPrint();\n };\n\n /**\n * Returns whether file can be downloaded based on file properties, permissions, and user-defined options.\n *\n * @return {boolean}\n */\n canDownload(): boolean {\n const { canDownload }: Props = this.props;\n const { file }: State = this.state;\n const isFileDownloadable =\n getProp(file, 'permissions.can_download', false) && getProp(file, 'is_download_available', false);\n return isFileDownloadable && !!canDownload;\n }\n\n /**\n * Returns whether file can be annotated based on permissions\n *\n * @return {boolean}\n */\n canAnnotate(): boolean {\n const { showAnnotations }: Props = this.props;\n const { file }: State = this.state;\n const isFileAnnotatable = getProp(file, 'permissions.can_annotate', false);\n return !!showAnnotations && isFileAnnotatable;\n }\n\n /**\n * Returns whether a preview should render annotations based on permissions\n *\n * @return {boolean}\n */\n canViewAnnotations(): boolean {\n const { showAnnotations }: Props = this.props;\n const { file }: State = this.state;\n const hasViewAllPermissions = getProp(file, 'permissions.can_view_annotations_all', false);\n const hasViewSelfPermissions = getProp(file, 'permissions.can_view_annotations_self', false);\n return !!showAnnotations && (this.canAnnotate() || hasViewAllPermissions || hasViewSelfPermissions);\n }\n\n handleCanPrint() {\n const preview = this.getPreview();\n this.setState({ canPrint: !!preview && (!preview.canPrint || preview.canPrint()) });\n }\n\n /**\n * Loads preview in the component using the preview library.\n *\n * @return {void}\n */\n loadPreview = async (): Promise<void> => {\n const {\n advancedContentInsights, // will be removed once preview package will be updated to utilize feature flip for ACI\n annotatorState: { activeAnnotationId } = {},\n enableThumbnailsSidebar,\n features,\n fileOptions,\n onAnnotatorEvent,\n onAnnotator,\n onContentInsightsEventReport,\n previewExperiences,\n showAnnotationsControls,\n token: tokenOrTokenFunction,\n ...rest\n }: Props = this.props;\n const { file, selectedVersion, startAt }: State = this.state;\n\n if (!this.isPreviewLibraryLoaded() || !file || !tokenOrTokenFunction) {\n return;\n }\n\n const fileId = this.getFileId(file);\n\n if (fileId !== this.state.currentFileId) {\n return;\n }\n\n const fileOpts = { ...fileOptions };\n const token = typedId => TokenService.getReadTokens(typedId, tokenOrTokenFunction);\n\n if (selectedVersion) {\n setProp(fileOpts, [fileId, 'fileVersionId'], selectedVersion.id);\n setProp(fileOpts, [fileId, 'currentFileVersionId'], getProp(file, 'file_version.id'));\n }\n\n if (activeAnnotationId) {\n setProp(fileOpts, [fileId, 'annotations', 'activeId'], activeAnnotationId);\n }\n\n if (startAt) {\n setProp(fileOpts, [fileId, 'startAt'], startAt);\n }\n\n const previewOptions = {\n advancedContentInsights, // will be removed once preview package will be updated to utilize feature flip for ACI\n container: `#${this.id} .bcpr-content`,\n enableThumbnailsSidebar,\n features,\n fileOptions: fileOpts,\n header: 'none',\n headerElement: `#${this.id} .bcpr-PreviewHeader`,\n experiences: previewExperiences,\n showAnnotations: this.canViewAnnotations(),\n showAnnotationsControls,\n showDownload: this.canDownload(),\n showLoading: false,\n showProgress: false,\n skipServerUpdate: true,\n useHotkeys: false,\n };\n const { Preview } = global.Box;\n this.preview = new Preview();\n this.preview.addListener('load', this.onPreviewLoad);\n this.preview.addListener('preview_error', this.onPreviewError);\n this.preview.addListener('preview_metric', this.onPreviewMetric);\n this.preview.addListener('thumbnailsOpen', () => this.setState({ isThumbnailSidebarOpen: true }));\n this.preview.addListener('thumbnailsClose', () => this.setState({ isThumbnailSidebarOpen: false }));\n\n if (showAnnotationsControls) {\n this.preview.addListener('annotator_create', onAnnotator);\n }\n\n this.preview.updateFileCache([file]);\n this.preview.show(file.id, token, {\n ...previewOptions,\n ...omit(rest, Object.keys(previewOptions)),\n });\n if (advancedContentInsights) {\n this.preview.addListener('advanced_insights_report', onContentInsightsEventReport);\n }\n };\n\n /**\n * Updates preview file from temporary staged file.\n *\n * @return {void}\n */\n loadFileFromStage = () => {\n if (this.stagedFile) {\n this.setState({ ...this.initialState, file: this.stagedFile }, () => {\n this.stagedFile = undefined;\n });\n }\n };\n\n /**\n * Removes the reload notification\n *\n * @return {void}\n */\n closeReloadNotification = () => {\n this.setState({ isReloadNotificationVisible: false });\n };\n\n /**\n * Tells the preview to resize\n *\n * @return {void}\n */\n onResize = (): void => {\n if (this.preview && this.preview.getCurrentViewer()) {\n this.preview.resize();\n }\n };\n\n /**\n * File fetch success callback\n *\n * @param {Object} file - Box file\n * @return {void}\n */\n fetchFileSuccessCallback = (file: BoxItem): void => {\n this.fetchFileEndTime = performance.now();\n\n const { file: currentFile }: State = this.state;\n const isExistingFile = currentFile ? currentFile.id === file.id : false;\n const isWatermarked = getProp(file, 'watermark_info.is_watermarked', false);\n\n // If the file is watermarked or if its a new file, then update the state\n // In this case preview should reload without prompting the user\n if (isWatermarked || !isExistingFile) {\n this.setState({ ...this.initialState, file });\n // $FlowFixMe file version and sha1 should exist at this point\n } else if (currentFile.file_version.sha1 !== file.file_version.sha1) {\n // If we are already prevewing the file that got updated then show the\n // user a notification to reload the file only if its sha1 changed\n this.stagedFile = file;\n this.setState({\n ...this.initialState,\n isReloadNotificationVisible: true,\n });\n }\n };\n\n /**\n * File fetch error callback\n *\n * @return {void}\n */\n fetchFileErrorCallback = (fileError: ElementsXhrError, code: string): void => {\n const { onError } = this.props;\n const errorCode = fileError.code || code;\n const error = {\n code: errorCode,\n message: fileError.message,\n };\n this.setState({ error, file: undefined, isLoading: false });\n onError(fileError, errorCode, {\n error: fileError,\n });\n };\n\n /**\n * Fetches a file\n *\n * @param {string} id file id\n * @param {Function|void} [successCallback] - Callback after file is fetched\n * @param {Function|void} [errorCallback] - Callback after error\n * @param {Object|void} [fetchOptions] - Fetch options\n * @return {void}\n */\n fetchFile(\n id: ?string,\n successCallback?: Function,\n errorCallback?: Function,\n fetchOptions: RequestOptions = {},\n ): void {\n if (!id) {\n return;\n }\n\n this.fetchFileStartTime = performance.now();\n this.fetchFileEndTime = null;\n\n this.api\n .getFileAPI()\n .getFile(\n id,\n successCallback || this.fetchFileSuccessCallback,\n errorCallback || this.fetchFileErrorCallback,\n {\n ...fetchOptions,\n fields: PREVIEW_FIELDS_TO_FETCH,\n },\n );\n }\n\n /**\n * Returns the preview instance\n *\n * @return {Preview} current instance of preview\n */\n getPreview = (): any => {\n const { file }: State = this.state;\n if (!this.preview || !file) {\n return null;\n }\n\n return this.preview;\n };\n\n /**\n * Returns the viewer instance being used by preview.\n * This will let child components access the viewers.\n *\n * @return {Viewer} current instance of the preview viewer\n */\n getViewer = (): any => {\n const preview = this.getPreview();\n const viewer = preview ? preview.getCurrentViewer() : null;\n return viewer && viewer.isLoaded() && !viewer.isDestroyed() ? viewer : null;\n };\n\n /**\n * Finds the index of current file inside the collection\n *\n * @return {number} -1 if not indexed\n */\n getFileIndex() {\n const { currentFileId }: State = this.state;\n const { collection }: Props = this.props;\n if (!currentFileId || collection.length < 2) {\n return -1;\n }\n\n return collection.findIndex(item => {\n if (typeof item === 'string') {\n return item === currentFileId;\n }\n\n return item.id === currentFileId;\n });\n }\n\n /**\n * Shows a preview of a file at the specified index in the current collection.\n *\n * @public\n * @param {number} index - Index of file to preview\n * @return {void}\n */\n navigateToIndex(index: number) {\n const { collection, onNavigate }: Props = this.props;\n const { length } = collection;\n if (length < 2 || index < 0 || index > length - 1) {\n return;\n }\n\n const fileOrId = collection[index];\n const fileId = typeof fileOrId === 'object' ? fileOrId.id || '' : fileOrId;\n\n this.setState(\n {\n currentFileId: fileId,\n },\n () => {\n // Execute navigation callback\n onNavigate(fileId);\n },\n );\n }\n\n /**\n * Shows a preview of the previous file.\n *\n * @public\n * @return {void}\n */\n navigateLeft = () => {\n const currentIndex = this.getFileIndex();\n const newIndex = currentIndex === 0 ? 0 : currentIndex - 1;\n if (newIndex !== currentIndex) {\n this.navigateToIndex(newIndex);\n }\n };\n\n /**\n * Shows a preview of the next file.\n *\n * @public\n * @return {void}\n */\n navigateRight = () => {\n const { collection }: Props = this.props;\n const currentIndex = this.getFileIndex();\n const newIndex = currentIndex === collection.length - 1 ? collection.length - 1 : currentIndex + 1;\n if (newIndex !== currentIndex) {\n this.navigateToIndex(newIndex);\n }\n };\n\n /**\n * Downloads file.\n *\n * @public\n * @return {void}\n */\n download = () => {\n const { onDownload }: Props = this.props;\n const { file }: State = this.state;\n if (this.preview) {\n this.preview.download();\n onDownload(cloneDeep(file));\n }\n };\n\n /**\n * Prints file.\n *\n * @public\n * @return {void}\n */\n print = () => {\n if (this.preview) {\n this.preview.print();\n }\n };\n\n /**\n * Mouse move handler that is throttled and show\n * the navigation arrows if applicable.\n *\n * @return {void}\n */\n onMouseMove = throttle(() => {\n const viewer = this.getViewer();\n const isPreviewing = !!viewer;\n const CLASS_NAVIGATION_VISIBILITY = 'bcpr-nav-is-visible';\n\n clearTimeout(this.mouseMoveTimeoutID);\n\n if (!this.previewContainer) {\n return;\n }\n\n // Always assume that navigation arrows will be hidden\n this.previewContainer.classList.remove(CLASS_NAVIGATION_VISIBILITY);\n\n // Only show it if either we aren't previewing or if we are then the viewer\n // is not blocking the show. If we are previewing then the viewer may choose\n // to not allow navigation arrows. This is mostly useful for videos since the\n // navigation arrows may interfere with the settings menu inside video player.\n if (this.previewContainer && (!isPreviewing || viewer.allowNavigationArrows())) {\n this.previewContainer.classList.add(CLASS_NAVIGATION_VISIBILITY);\n }\n\n this.mouseMoveTimeoutID = setTimeout(() => {\n if (this.previewContainer) {\n this.previewContainer.classList.remove(CLASS_NAVIGATION_VISIBILITY);\n }\n }, 1500);\n }, 1000);\n\n /**\n * Keyboard events\n *\n * @return {void}\n */\n onKeyDown = (event: SyntheticKeyboardEvent<HTMLElement>) => {\n const { useHotkeys }: Props = this.props;\n if (!useHotkeys) {\n return;\n }\n\n let consumed = false;\n const key = decode(event);\n const viewer = this.getViewer();\n\n // If focus was on an input or if the viewer doesn't exist\n // then don't bother doing anything further\n if (!key || !viewer || isInputElement(event.target)) {\n return;\n }\n\n if (typeof viewer.onKeydown === 'function') {\n consumed = !!viewer.onKeydown(key, event.nativeEvent);\n }\n\n if (!consumed) {\n switch (key) {\n case 'ArrowLeft':\n this.navigateLeft();\n consumed = true;\n break;\n case 'ArrowRight':\n this.navigateRight();\n consumed = true;\n break;\n default:\n // no-op\n }\n }\n\n if (consumed) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n /**\n * Handles version change events\n *\n * @param {string} [version] - The version that is now previewed\n * @param {object} [additionalVersionInfo] - extra info about the version\n */\n onVersionChange = (version?: BoxItemVersion, additionalVersionInfo: AdditionalVersionInfo = {}): void => {\n const { onVersionChange }: Props = this.props;\n this.updateVersionToCurrent = additionalVersionInfo.updateVersionToCurrent;\n\n onVersionChange(version, additionalVersionInfo);\n this.setState({\n selectedVersion: version,\n });\n };\n\n handleAnnotationSelect = ({ file_version, id, target }: Annotation) => {\n const { location = {} } = target;\n const { file, selectedVersion } = this.state;\n const annotationFileVersionId = getProp(file_version, 'id');\n const currentFileVersionId = getProp(file, 'file_version.id');\n const currentPreviewFileVersionId = getProp(selectedVersion, 'id', currentFileVersionId);\n const unit = startAtTypes[location.type];\n const viewer = this.getViewer();\n\n if (unit && annotationFileVersionId && annotationFileVersionId !== currentPreviewFileVersionId) {\n this.setState({\n startAt: {\n unit,\n value: location.value,\n },\n });\n }\n\n if (viewer) {\n viewer.emit('scrolltoannotation', { id, target });\n }\n };\n\n /**\n * Holds the reference the preview container\n *\n * @return {void}\n */\n containerRef = (container: ?HTMLDivElement) => {\n this.previewContainer = container;\n };\n\n /**\n * Refreshes the content sidebar panel\n *\n * @return {void}\n */\n refreshSidebar(): void {\n const { current: contentSidebar } = this.contentSidebar;\n\n if (contentSidebar) {\n contentSidebar.refresh();\n }\n }\n\n /**\n * Fetches a thumbnail for the page given\n *\n * @return {Promise|null} - promise resolves with the image HTMLElement or null if generation is in progress\n */\n getThumbnail = (pageNumber: ?number): Promise<HTMLElement> | null => {\n const preview = this.getPreview();\n if (preview && preview.viewer) {\n return preview.viewer.getThumbnail(pageNumber);\n }\n\n return null;\n };\n\n /**\n * Renders the file preview\n *\n * @inheritdoc\n * @return {Element}\n */\n render() {\n const {\n apiHost,\n collection,\n token,\n language,\n messages,\n className,\n contentAnswersProps,\n contentOpenWithProps,\n contentSidebarProps,\n hasHeader,\n hasProviders,\n history,\n isLarge,\n isVeryLarge,\n logoUrl,\n onClose,\n measureRef,\n sharedLink,\n sharedLinkPassword,\n requestInterceptor,\n responseInterceptor,\n theme,\n }: Props = this.props;\n\n const {\n canPrint,\n currentFileId,\n error,\n file,\n isLoading,\n isReloadNotificationVisible,\n isThumbnailSidebarOpen,\n selectedVersion,\n }: State = this.state;\n\n const styleClassName = classNames(\n 'be bcpr',\n {\n 'bcpr-thumbnails-open': isThumbnailSidebarOpen,\n },\n className,\n );\n\n if (!currentFileId) {\n return null;\n }\n\n const errorCode = getProp(error, 'code');\n const currentExtension = getProp(file, 'id') === currentFileId ? getProp(file, 'extension') : '';\n const currentVersionId = getProp(file, 'file_version.id');\n const selectedVersionId = getProp(selectedVersion, 'id', currentVersionId);\n const onHeaderClose = currentVersionId === selectedVersionId ? onClose : this.updateVersionToCurrent;\n\n /* eslint-disable jsx-a11y/no-static-element-interactions */\n /* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n return (\n <Internationalize language={language} messages={messages}>\n <APIContext.Provider value={(this.api: API)}>\n <Providers hasProviders={hasProviders}>\n <div\n id={this.id}\n className={styleClassName}\n ref={measureRef}\n onKeyDown={this.onKeyDown}\n tabIndex={0}\n >\n <ThemingStyles theme={theme} />\n {hasHeader && (\n <PreviewHeader\n file={file}\n logoUrl={logoUrl}\n token={token}\n onClose={onHeaderClose}\n onPrint={this.print}\n canDownload={this.canDownload()}\n canPrint={canPrint}\n onDownload={this.download}\n contentAnswersProps={contentAnswersProps}\n contentOpenWithProps={contentOpenWithProps}\n canAnnotate={this.canAnnotate()}\n selectedVersion={selectedVersion}\n />\n )}\n <div className=\"bcpr-body\">\n <div className=\"bcpr-container\" onMouseMove={this.onMouseMove} ref={this.containerRef}>\n {file && (\n <Measure bounds onResize={this.onResize}>\n {({ measureRef: previewRef }) => (\n <div ref={previewRef} className=\"bcpr-content\" />\n )}\n </Measure>\n )}\n <PreviewMask\n errorCode={errorCode}\n extension={currentExtension}\n isLoading={isLoading}\n />\n <PreviewNavigation\n collection={collection}\n currentIndex={this.getFileIndex()}\n onNavigateLeft={this.navigateLeft}\n onNavigateRight={this.navigateRight}\n />\n </div>\n {file && (\n <LoadableSidebar\n {...contentSidebarProps}\n apiHost={apiHost}\n token={token}\n cache={this.api.getCache()}\n fileId={currentFileId}\n getPreview={this.getPreview}\n getViewer={this.getViewer}\n history={history}\n isDefaultOpen={isLarge || isVeryLarge}\n language={language}\n ref={this.contentSidebar}\n sharedLink={sharedLink}\n sharedLinkPassword={sharedLinkPassword}\n requestInterceptor={requestInterceptor}\n responseInterceptor={responseInterceptor}\n onAnnotationSelect={this.handleAnnotationSelect}\n onVersionChange={this.onVersionChange}\n />\n )}\n </div>\n {isReloadNotificationVisible && (\n <ReloadNotification\n onClose={this.closeReloadNotification}\n onClick={this.loadFileFromStage}\n />\n )}\n </div>\n </Providers>\n </APIContext.Provider>\n </Internationalize>\n );\n /* eslint-enable jsx-a11y/no-static-element-interactions */\n /* eslint-enable jsx-a11y/no-noninteractive-tabindex */\n }\n}\n\nexport type ContentPreviewProps = Props;\nexport { ContentPreview as ContentPreviewComponent };\nexport default flow([\n makeResponsive,\n withAnnotatorContext,\n withAnnotations,\n withRouter,\n withNavRouter,\n withFeatureConsumer,\n withFeatureProvider,\n withBlueprintModernization,\n withLogger(ORIGIN_CONTENT_PREVIEW),\n withErrorBoundary(ORIGIN_CONTENT_PREVIEW),\n])(ContentPreview);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -29,6 +29,11 @@ export const basic = {
|
|
|
29
29
|
expect(modal.getByText('Ask Box AI')).toBeInTheDocument();
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
|
+
export const Modernization = {
|
|
33
|
+
args: {
|
|
34
|
+
enableModernizedComponents: true
|
|
35
|
+
}
|
|
36
|
+
};
|
|
32
37
|
export const closeModal = {
|
|
33
38
|
play: async ({
|
|
34
39
|
canvasElement
|
|
@@ -30,6 +30,12 @@ export const basic = {
|
|
|
30
30
|
},
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
+
export const Modernization = {
|
|
34
|
+
args: {
|
|
35
|
+
enableModernizedComponents: true,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
|
|
33
39
|
export const closeModal = {
|
|
34
40
|
play: async ({ canvasElement }) => {
|
|
35
41
|
const canvas = within(canvasElement);
|
|
@@ -92,7 +98,7 @@ export const hoverOverCitation = {
|
|
|
92
98
|
|
|
93
99
|
expect(modal.getByText('Based on:')).toBeInTheDocument();
|
|
94
100
|
|
|
95
|
-
const citations = await modal.getAllByTestId('content-answers-citation-status')
|
|
101
|
+
const citations = await modal.getAllByTestId('content-answers-citation-status');
|
|
96
102
|
const citation = citations[0];
|
|
97
103
|
expect(citation).toBeInTheDocument();
|
|
98
104
|
await userEvent.hover(citation);
|