@clickview/lite 0.48.0-rc.7 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/scripts/{170-1f815b85a1-lite.chunk.js → 170-2d124965b7-lite.chunk.js} +2 -2
- package/dist/scripts/{170-1f815b85a1-lite.chunk.js.map → 170-2d124965b7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js → 1818-72409e60a9-lite.chunk.js} +1 -1
- package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js.map → 1818-72409e60a9-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1863-cf9df40052-lite.chunk.js → 1863-e7c4a6f342-lite.chunk.js} +1 -1
- package/dist/scripts/{1863-cf9df40052-lite.chunk.js.map → 1863-e7c4a6f342-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1958-9889c1ad24-lite.chunk.js → 1958-5336189397-lite.chunk.js} +1 -1
- package/dist/scripts/{1958-9889c1ad24-lite.chunk.js.map → 1958-5336189397-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2086-a247f6e201-lite.chunk.js → 2086-f7082703d0-lite.chunk.js} +1 -1
- package/dist/scripts/{2086-a247f6e201-lite.chunk.js.map → 2086-f7082703d0-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2118-462a279c5a-lite.chunk.js → 2118-ec2a5f1e9b-lite.chunk.js} +2 -2
- package/dist/scripts/{2118-462a279c5a-lite.chunk.js.map → 2118-ec2a5f1e9b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js → 2182-8e4d603a1b-lite.chunk.js} +1 -1
- package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js.map → 2182-8e4d603a1b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2279-5e92c84310-lite.chunk.js → 2279-252e92e1d8-lite.chunk.js} +1 -1
- package/dist/scripts/{2279-5e92c84310-lite.chunk.js.map → 2279-252e92e1d8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js → 2355-c588dc3ce2-lite.chunk.js} +1 -1
- package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js.map → 2355-c588dc3ce2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js → 2469-46411b862e-lite.chunk.js} +1 -1
- package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js.map → 2469-46411b862e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js → 2672-b01985cee8-lite.chunk.js} +1 -1
- package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js.map → 2672-b01985cee8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js → 2734-6a7beb2ce2-lite.chunk.js} +1 -1
- package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js.map → 2734-6a7beb2ce2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{287-ba98be7f21-lite.chunk.js → 287-3cbed16363-lite.chunk.js} +1 -1
- package/dist/scripts/{287-ba98be7f21-lite.chunk.js.map → 287-3cbed16363-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2875-0e5f209e47-lite.chunk.js → 2875-aefd69a61f-lite.chunk.js} +1 -1
- package/dist/scripts/{2875-0e5f209e47-lite.chunk.js.map → 2875-aefd69a61f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3042-6650521d8b-lite.chunk.js → 3042-7c1b5e4ff7-lite.chunk.js} +1 -1
- package/dist/scripts/{3042-6650521d8b-lite.chunk.js.map → 3042-7c1b5e4ff7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3158-31baada6cc-lite.chunk.js → 3158-2147de456d-lite.chunk.js} +1 -1
- package/dist/scripts/{3158-31baada6cc-lite.chunk.js.map → 3158-2147de456d-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js → 3296-f3732c93d9-lite.chunk.js} +1 -1
- package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js.map → 3296-f3732c93d9-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3541-7ebd9db295-lite.chunk.js → 3541-15581012d3-lite.chunk.js} +1 -1
- package/dist/scripts/{3541-7ebd9db295-lite.chunk.js.map → 3541-15581012d3-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3841-95df66e647-lite.chunk.js → 3841-bfae79638b-lite.chunk.js} +2 -2
- package/dist/scripts/{3841-95df66e647-lite.chunk.js.map → 3841-bfae79638b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3888-0bee9a9309-lite.chunk.js → 3888-87c1075a1b-lite.chunk.js} +1 -1
- package/dist/scripts/{3888-0bee9a9309-lite.chunk.js.map → 3888-87c1075a1b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js → 4138-b9b03c9900-lite.chunk.js} +1 -1
- package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js.map → 4138-b9b03c9900-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4778-ebe369973c-lite.chunk.js → 4778-3c9f2b7f76-lite.chunk.js} +2 -2
- package/dist/scripts/{4778-ebe369973c-lite.chunk.js.map → 4778-3c9f2b7f76-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4942-a27a31e79e-lite.chunk.js → 4942-acce40b333-lite.chunk.js} +2 -2
- package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.map → 4942-acce40b333-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5075-f8719465be-lite.chunk.js → 5075-53172298fe-lite.chunk.js} +1 -1
- package/dist/scripts/{5075-f8719465be-lite.chunk.js.map → 5075-53172298fe-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5157-cd12e2e443-lite.chunk.js → 5157-47a0f5c088-lite.chunk.js} +1 -1
- package/dist/scripts/{5157-cd12e2e443-lite.chunk.js.map → 5157-47a0f5c088-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5268-f4db3933ff-lite.chunk.js → 5268-9b7560f3b1-lite.chunk.js} +2 -2
- package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.map → 5268-9b7560f3b1-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5442-01ffd95162-lite.chunk.js → 5442-5ddfa2d951-lite.chunk.js} +1 -1
- package/dist/scripts/{5442-01ffd95162-lite.chunk.js.map → 5442-5ddfa2d951-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js → 5591-119d72ede5-lite.chunk.js} +1 -1
- package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js.map → 5591-119d72ede5-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5595-3763b14d77-lite.chunk.js → 5595-628d4f252c-lite.chunk.js} +2 -2
- package/dist/scripts/5595-628d4f252c-lite.chunk.js.map +1 -0
- package/dist/scripts/{6102-4d948a5e48-lite.chunk.js → 6102-751dbbbf33-lite.chunk.js} +3 -3
- package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.map → 6102-751dbbbf33-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6158-0c5e44f800-lite.chunk.js → 6158-d123add596-lite.chunk.js} +1 -1
- package/dist/scripts/{6158-0c5e44f800-lite.chunk.js.map → 6158-d123add596-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6263-8957d50afe-lite.chunk.js → 6263-24e67b7df2-lite.chunk.js} +1 -1
- package/dist/scripts/{6263-8957d50afe-lite.chunk.js.map → 6263-24e67b7df2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6330-c66465bd6d-lite.chunk.js → 6330-9a2a5fc07e-lite.chunk.js} +1 -1
- package/dist/scripts/{6330-c66465bd6d-lite.chunk.js.map → 6330-9a2a5fc07e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{671-003843ca84-lite.chunk.js → 671-5571f33165-lite.chunk.js} +1 -1
- package/dist/scripts/{671-003843ca84-lite.chunk.js.map → 671-5571f33165-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7167-efe85af16e-lite.chunk.js → 7167-dc4c954c2b-lite.chunk.js} +1 -1
- package/dist/scripts/{7167-efe85af16e-lite.chunk.js.map → 7167-dc4c954c2b-lite.chunk.js.map} +1 -1
- package/dist/scripts/7293-58f4a7cf47-lite.chunk.js +2 -0
- package/dist/scripts/{7293-afd3349468-lite.chunk.js.map → 7293-58f4a7cf47-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js → 7301-7c9342ef0c-lite.chunk.js} +1 -1
- package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js.map → 7301-7c9342ef0c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7708-ece31b78a9-lite.chunk.js → 7708-e91903481a-lite.chunk.js} +1 -1
- package/dist/scripts/{7708-ece31b78a9-lite.chunk.js.map → 7708-e91903481a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{771-eb60e33941-lite.chunk.js → 771-5612b4ffc2-lite.chunk.js} +2 -2
- package/dist/scripts/{771-eb60e33941-lite.chunk.js.map → 771-5612b4ffc2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7855-37bcdd134e-lite.chunk.js → 7855-4b69540a71-lite.chunk.js} +1 -1
- package/dist/scripts/{7855-37bcdd134e-lite.chunk.js.map → 7855-4b69540a71-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8024-66413cc05b-lite.chunk.js → 8024-765a4170c7-lite.chunk.js} +2 -2
- package/dist/scripts/{8024-66413cc05b-lite.chunk.js.map → 8024-765a4170c7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{823-58d27c255b-lite.chunk.js → 823-33c5207c68-lite.chunk.js} +1 -1
- package/dist/scripts/{823-58d27c255b-lite.chunk.js.map → 823-33c5207c68-lite.chunk.js.map} +1 -1
- package/dist/scripts/8261-69854ff4d5-lite.chunk.js +2 -0
- package/dist/scripts/8261-69854ff4d5-lite.chunk.js.map +1 -0
- package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js → 8466-cea62163e8-lite.chunk.js} +1 -1
- package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js.map → 8466-cea62163e8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8681-41edd08b98-lite.chunk.js → 8681-49db3daae6-lite.chunk.js} +2 -2
- package/dist/scripts/{8681-41edd08b98-lite.chunk.js.map → 8681-49db3daae6-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8772-9ae4d77363-lite.chunk.js → 8772-6c11095cea-lite.chunk.js} +1 -1
- package/dist/scripts/{8772-9ae4d77363-lite.chunk.js.map → 8772-6c11095cea-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js → 8906-2f6b5e4c5c-lite.chunk.js} +2 -2
- package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.map → 8906-2f6b5e4c5c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{920-4de8efbcf1-lite.chunk.js → 920-acc6596891-lite.chunk.js} +1 -1
- package/dist/scripts/{920-4de8efbcf1-lite.chunk.js.map → 920-acc6596891-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js → 9212-cc987a13bf-lite.chunk.js} +1 -1
- package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js.map → 9212-cc987a13bf-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js → 9242-144e7728ad-lite.chunk.js} +1 -1
- package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js.map → 9242-144e7728ad-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9264-d2285d4310-lite.chunk.js → 9264-518952f13f-lite.chunk.js} +1 -1
- package/dist/scripts/{9264-d2285d4310-lite.chunk.js.map → 9264-518952f13f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js → 9478-4b3c088537-lite.chunk.js} +2 -2
- package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.map → 9478-4b3c088537-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9484-be04a34bbf-lite.chunk.js → 9484-b85011dbea-lite.chunk.js} +2 -2
- package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.map → 9484-b85011dbea-lite.chunk.js.map} +1 -1
- package/dist/scripts/{bundle-8f540a1154.min.js → bundle-c158cdd3a9.min.js} +3 -3
- package/dist/scripts/{bundle-8f540a1154.min.js.map → bundle-c158cdd3a9.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/5595-3763b14d77-lite.chunk.js.map +0 -1
- package/dist/scripts/7293-afd3349468-lite.chunk.js +0 -2
- package/dist/scripts/8261-72453f1978-lite.chunk.js +0 -2
- package/dist/scripts/8261-72453f1978-lite.chunk.js.map +0 -1
- /package/dist/scripts/{170-1f815b85a1-lite.chunk.js.LICENSE.txt → 170-2d124965b7-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2118-462a279c5a-lite.chunk.js.LICENSE.txt → 2118-ec2a5f1e9b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{3841-95df66e647-lite.chunk.js.LICENSE.txt → 3841-bfae79638b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4778-ebe369973c-lite.chunk.js.LICENSE.txt → 4778-3c9f2b7f76-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.LICENSE.txt → 4942-acce40b333-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.LICENSE.txt → 5268-9b7560f3b1-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.LICENSE.txt → 6102-751dbbbf33-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{771-eb60e33941-lite.chunk.js.LICENSE.txt → 771-5612b4ffc2-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8024-66413cc05b-lite.chunk.js.LICENSE.txt → 8024-765a4170c7-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8681-41edd08b98-lite.chunk.js.LICENSE.txt → 8681-49db3daae6-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.LICENSE.txt → 8906-2f6b5e4c5c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.LICENSE.txt → 9478-4b3c088537-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.LICENSE.txt → 9484-b85011dbea-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-8f540a1154.min.js.LICENSE.txt → bundle-c158cdd3a9.min.js.LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/170-1f815b85a1-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/caret/Caret.tsx","file:///app/packages/libs/shared/src/components/caret/caret.scss","file:///app/packages/libs/shared/src/components/drag-drop-move/DragDropMoveContext.tsx","file:///app/packages/libs/shared/src/components/library-folder/library-folder.scss","file:///app/packages/libs/shared/src/components/library-folder/LibraryFolder.tsx","file:///app/packages/libs/shared/src/components/folder-list/FolderList.tsx","file:///app/packages/libs/shared/src/components/folder-list/partial-loading/partial-folder-list.scss","file:///app/packages/libs/shared/src/components/folder-list/partial-loading/PartialFolderList.tsx","file:///app/packages/libs/shared/src/components/video-list/partial-loading/partial-video-list.scss","file:///app/packages/libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","file:///app/packages/libs/shared/src/components/video-list/video-list-actions/VideoListActions.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseGetCollectionItems.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/hooks/usePrevious.ts","file:///app/packages/libs/shared/src/utils/TreeHelper.ts","file:///app/packages/projects/lite/src/apps/libraries/hooks/UseFetchAllChildFolders.ts","file:///app/packages/projects/lite/src/apps/my-videos/flight-requests/MyVideosRequests.ts","file:///app/packages/projects/lite/src/apps/my-videos/hooks/useDragDropMove.ts","file:///app/packages/projects/lite/src/apps/my-videos/hooks/useUploadItems.ts","file:///app/packages/projects/lite/src/apps/upload/hooks/useGetUploadingItems.ts","file:///app/packages/projects/lite/src/apps/my-videos/utils/getFolderActions.tsx","file:///app/packages/libs/shared/src/utils/AnalyticsTypeHelper.ts","file:///app/packages/projects/lite/src/apps/my-videos/views/my-videos/MyVideosViewUtils.ts","file:///app/packages/projects/lite/src/apps/my-videos/hooks/useHasExchange.ts","file:///app/packages/projects/lite/src/apps/my-videos/views/my-videos/empty-state/MyVideosEmptyState.tsx","file:///app/packages/projects/lite/src/apps/upload/components/uploading-item/UploadingItem.tsx","file:///app/packages/projects/lite/src/shared/components/drag-drop-overlay/drag-drop-overlay.scss","file:///app/packages/projects/lite/src/shared/components/drag-drop-overlay/DragDropOverlay.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/node_modules/react-bootstrap/esm/ProgressBar.js","file:///app/node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["import React from 'react';\n\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './caret.scss';\n\ntype CaretDirection = 'left' | 'right' | 'up' | 'down';\n\n\nconst getDirectionClass = (direction: CaretDirection) => {\n switch (direction) {\n case 'up':\n return styles.up;\n case 'down':\n return styles.down;\n case 'right':\n return styles.right;\n case 'left':\n return styles.left;\n }\n};\n\ninterface CaretProps {\n direction?: CaretDirection;\n className?: string;\n}\n\nCaret.defaultProps = {\n direction: 'right'\n};\n\nexport function Caret(props: CaretProps): JSX.Element {\n return (\n <SvgContainer\n svgName={cvSvgLibrary.Caret}\n className={`${getDirectionClass(props.direction)} svg-container d-inline-block ${props.className}`}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"up\":\"JAT0R\",\"down\":\"ld41u\",\"left\":\"jZTRR\",\"right\":\"HHkPe\"};","import React from 'react';\nimport {\n DndContext,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n PointerSensor,\n pointerWithin,\n useSensor,\n useSensors } from '@dnd-kit/core';\nimport { snapCenterToCursor } from '@dnd-kit/modifiers';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { Folder } from 'libs/shared/interfaces';\n\ninterface DragDropMoveContextProps extends React.PropsWithChildren {\n handleDragStart?: (event: DragStartEvent) => void;\n handleDragEnd?: (event: DragEndEvent, source: Folder) => void;\n source?: Folder;\n dragOverlayComponent: (active: string | string[] | HashObject | HashObject[]) => JSX.Element\n}\n\nexport function DragDropMoveContext(props: DragDropMoveContextProps) {\n const [ activeDragData, setActiveDragData ] = React.useState<string | string[] | HashObject | HashObject[]>(null);\n const { dragOverlayComponent: DragOverlayComponent } = props;\n \n function handleDragEnd(event: DragEndEvent) {\n setActiveDragData(null);\n\n props.handleDragEnd(event, props.source);\n }\n \n function handleDragStart(event: DragStartEvent) {\n setActiveDragData(event.active.data.current);\n props.handleDragStart?.(event);\n }\n \n const mouseSensor = useSensor(PointerSensor, {\n activationConstraint: {\n distance: 10\n }\n });\n \n const sensors = useSensors(mouseSensor);\n \n return (\n <DndContext\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n sensors={sensors}\n collisionDetection={pointerWithin}\n >\n {props.children}\n\n <DragOverlay dropAnimation={null} modifiers={[snapCenterToCursor]} zIndex={1050}>\n {activeDragData ? (\n <DragOverlayComponent activeDragData={activeDragData} />\n ) : null}\n </DragOverlay>\n </DndContext>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"cN3nB\",\"actionsContainer\":\"xM37V\",\"dropStyle\":\"kvCLS\",\"dragStyle\":\"md9Na\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail\n ? UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small })\n : null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Caret } from 'libs/shared/components/caret/Caret';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Folder } from 'libs/shared/interfaces';\n\nconst namespace = 'libraries.folderList';\n\nconst EXPANDED_FOLDERS_KEY = 'has:expanded:library:folders';\n\nfunction useGetFolderLimit(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl || breakpoints.xl || breakpoints.lg)\n return 6;\n\n if (breakpoints.md)\n return 4;\n\n return 3;\n}\n\ninterface FolderListProps {\n folders: Folder[];\n getAppLink: (folder: Folder) => Core.AppLink;\n expandFolders?: boolean;\n showHeading?: boolean;\n getFolderActions?: (f: Folder) => ActionOptions[];\n drag?: boolean;\n drop?: boolean;\n extraButtons?: JSX.Element;\n}\n\nFolderList.defaultProps = {\n showHeading: true\n};\n\nexport function FolderList(props: FolderListProps): JSX.Element {\n const [ _hasExpandedFolders, setHasExpandedFolders ] = React.useState(\n LocalStorageHelper.get(EXPANDED_FOLDERS_KEY) || false\n );\n\n const hasExpandedFolders = props.expandFolders || _hasExpandedFolders;\n\n const folderLimit = useGetFolderLimit();\n\n function onToggleFolderView(): void {\n setHasExpandedFolders(!hasExpandedFolders);\n LocalStorageHelper.set(EXPANDED_FOLDERS_KEY, !hasExpandedFolders);\n }\n\n const displayableFolders = hasExpandedFolders ? props.folders : props.folders.slice(0, folderLimit);\n\n const canToggleCollapsedView = props.folders.length > folderLimit && !props.expandFolders;\n\n return (\n <>\n <div className='d-flex justify-content-between align-items-center'>\n {props.showHeading &&\n <DivButton\n className={`d-inline-flex align-items-center mb-2 px-2 ${!canToggleCollapsedView ? 'cursor-default' : ''}`}\n onClick={onToggleFolderView}\n >\n {canToggleCollapsedView && (\n <Caret direction={hasExpandedFolders ? 'down' : 'right'} />\n )}\n <h2 className='h4 mb-0'>\n <Text namespace={namespace} phrase='folders' options={{ count: props.folders.length }} />\n </h2>\n </DivButton>\n }\n\n {!!(!hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolderView} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeAll' options={{ count: props.folders.length }} />\n </DivButton>\n </div>\n )}\n {!!(hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolderView} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeLess' />\n </DivButton>\n </div>\n )}\n\n {props.extraButtons ? props.extraButtons : <></>}\n </div>\n\n <div className='row mx-1'>\n {displayableFolders.map(f => (\n <div key={f.id} className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <LibraryFolder\n folder={f}\n getAppLink={props.getAppLink}\n getFolderActions={props.getFolderActions}\n drag={props.drag}\n drop={props.drop}\n />\n </div>\n ))}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialFolderHeading\":\"dhbsL\",\"partialFolderThumbnail\":\"CI9vk\",\"partialFolderName\":\"l0Nll\"};","import React from 'react';\n\nimport styles from './partial-folder-list.scss';\n\nconst PartialFolder = () => (\n <div className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <div className={`${styles.partialFolderThumbnail} partial-loading-background rounded-top-lg`} />\n <div className={`${styles.partialFolderName} partial-loading-background border-bottom rounded-bottom-lg font-size-normal mb-0 p-2`}>\n \n </div>\n </div>\n);\n\nexport function PartialFolderList({ count = 3 }: { count?: number; }): JSX.Element {\n return (\n <>\n <div className={`${styles.partialFolderHeading} h4 mb-2 partial-loading-background`}> </div>\n <div className='row mx-n1'>\n {Array(count).fill(null).map((_, i) => <PartialFolder key={i} />)}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\n\nconst namespace = 'shared.videoListActions';\n\ninterface VideoListActionsProps {\n allowBulkAction?: boolean;\n allowFilter?: boolean;\n checkboxHelper?: BulkCheckboxManager;\n getVideosBulkAction?: (selected: string[]) => ActionOptions[]\n getAppLink: () => Core.AppLink;\n typeFilter: SearchIndices[];\n locationContext?: LocationContext;\n isVideosLoading?: boolean;\n}\n\nexport function VideoListActions(props: VideoListActionsProps) {\n const { checkboxHelper: CheckboxHelper } = props;\n\n const [ actions, setActions ] = React.useState<ActionOptions[]>([]);\n\n function getVideosBulkActions() {\n setActions(props.getVideosBulkAction?.(CheckboxHelper.getSelected()));\n }\n\n function handleVideoAction(action: ActionOptions) {\n Core.AppLinkHelper.trigger(action.appLink);\n\n AnalyticsHelper.logUserAction(action.analyticsData, action.analyticsOptions);\n }\n\n return (\n <>\n <div className='d-flex align-items-center mb-3'>\n {props.allowBulkAction && (\n <>\n <Checkbox\n id='my-videos'\n name='my-videos'\n className='me-0 me-md-2'\n checked={CheckboxHelper.bulkChecked}\n onChange={CheckboxHelper.onToggleBulk}\n indeterminate={CheckboxHelper.hasSomeSelections()}\n />\n <div className='btn-group drop-right px-2 ps-sm-0 ps-md-2'>\n <DivButton\n onClick={getVideosBulkActions}\n className={`btn btn-outline-dark dropdown-toggle ${CheckboxHelper.hasSomeSelections() ? '' : 'disabled'}`}\n id='my-videos-action'\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n >\n <Text namespace={namespace} phrase='options' />\n </DivButton>\n <div\n className='dropdown-menu dropdown-menu-end dropdown-menu-right'\n aria-labelledby='my-videos-action'\n >\n {actions.length && (\n actions.map(action => {\n return (\n <DivButton\n key={action.label as string}\n className={`dropdown-item ${action.className}`}\n onClick={() => handleVideoAction(action)}\n >\n {action.label as string}\n </DivButton>\n );\n })\n )}\n </div>\n </div>\n </>\n )}\n {props.allowFilter && (\n <div className='border-start'>\n <TypeButton type='video' typeFilter={props.typeFilter} appLink={props.getAppLink()} />\n <TypeButton type='interactive' typeFilter={props.typeFilter} appLink={props.getAppLink()} />\n <TypeButton type='clip' typeFilter={props.typeFilter} appLink={props.getAppLink()} />\n </div>\n )}\n </div>\n </>\n );\n}\n\ninterface TypeButtonProps {\n type: SearchIndices;\n typeFilter: SearchIndices[];\n appLink: Core.AppLink;\n}\n\nfunction TypeButton(props: TypeButtonProps): JSX.Element {\n const selected = props.typeFilter.includes(props.type);\n\n const currentAppLink = props.appLink;\n const currentParams = currentAppLink.params as HashObject;\n\n let newType: SearchIndices[];\n\n if (selected)\n newType = props.typeFilter.filter(t => t !== props.type);\n else\n newType = [ ...props.typeFilter, props.type ];\n\n const newAppLink = {\n ...currentAppLink,\n params: {\n ...currentParams,\n type: newType\n }\n };\n\n function getTypePhrase(): string {\n if (props.type === 'video') return 'videos';\n if (props.type === 'clip') return 'clips';\n if (props.type === 'interactive') return 'interactives';\n }\n\n return (\n <AppLink\n className={`ms-2 btn ${selected ? 'btn-dark' : 'btn-outline-dark'}`}\n appLink={newAppLink}\n >\n <Text namespace={namespace} phrase={getTypePhrase()} />\n </AppLink>\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\n/**\n * Hook used to listen to updates on a Backbone Collection\n * and trigger a re-render.\n */\nexport function useGetCollectionItems<T>(\n getCollection: () => Core.Collection,\n onRemove?: () => void,\n dependencies: React.DependencyList = []\n): T[] {\n const [ , setUpdate ] = React.useState(false);\n\n React.useEffect(() => {\n const collection = getCollection();\n\n if (!collection)\n return;\n\n collection.off('add remove change');\n collection.on('add remove change', () => {\n setUpdate(s => !s);\n });\n if (onRemove)\n collection.on('remove', onRemove);\n return () => { collection.off('add remove change'); };\n }, dependencies);\n\n return getCollection()?.toJSON();\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { BaseObject, MasterNestedObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nfunction _find<T extends BaseTree<BaseObject>>(\n node: T,\n id: string | number,\n parents: T[]\n): [ T | null, T[] ] {\n if (TextHelper.isEqual(node.id, id))\n return [ node, parents ];\n\n const children = node.children;\n\n if (!children || !children.length)\n return [ null, null ];\n\n for (let i = 0; i < children.length; i++) {\n const [ child, foundParents ] = _find(children[i] as T, id, [ ...parents, node ]);\n\n if (child)\n return [ child, foundParents ];\n }\n\n return [ null, null ];\n}\n\nexport const DEFAULT_MAX_DEPTH = 7;\n\nexport const TreeHelper = {\n find<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T | null {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [child] = _find(tree.children[j] as T, id, []);\n \n if (child)\n return child;\n }\n },\n\n getPath<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T[] {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [ , path ] = _find(tree.children[j] as T, id, []);\n \n if (path?.length)\n return path;\n }\n },\n\n getParent<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T {\n const path = TreeHelper.getPath(tree, id);\n\n if (!path?.length)\n return null;\n\n return path[path.length - 1];\n },\n\n convertNestedObjectToTree<T extends BaseObject>(nestedObject: MasterNestedObject<T>): BaseTree<T> {\n const node: BaseTree<T> = {\n ...nestedObject.data,\n children: nestedObject.children\n };\n\n if (node.children?.length)\n node.children = node.children.map(TreeHelper.convertNestedObjectToTree);\n\n return node;\n },\n\n findDepth<T extends MasterNestedObject<BaseObject>>(nodes: T[], targetId: string, currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return 0;\n }\n\n let depth = 0;\n\n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return currentDepth;\n }\n\n const childDepth = TreeHelper.findDepth(node.children, targetId, currentDepth + 1);\n\n if (childDepth > 0) {\n depth = childDepth;\n break;\n }\n }\n\n return depth;\n },\n\n findMaxChildDepth<T extends BaseObject>(nodes: MasterNestedObject<T>[], currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return currentDepth;\n }\n \n let deepestLevel = currentDepth;\n \n for (const node of nodes) {\n const childLevel = TreeHelper.findMaxChildDepth(node.children, currentDepth + 1);\n deepestLevel = Math.max(deepestLevel, childLevel);\n }\n \n return deepestLevel;\n },\n\n findTargetNode<T extends BaseObject>(nodes: MasterNestedObject<T>[], targetId: string): MasterNestedObject<T> | null {\n if (!nodes || nodes.length === 0) {\n return null;\n }\n \n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return node;\n }\n \n const result = TreeHelper.findTargetNode(node.children, targetId);\n if (result !== null) {\n return result;\n }\n }\n \n return null;\n },\n\n isMaxDepth<T extends MasterNestedObject<BaseObject>>(\n nodes: T[],\n sourceId: string,\n targetId: string,\n maxDepth: number = DEFAULT_MAX_DEPTH\n ): boolean {\n const sourceTree = TreeHelper.findTargetNode(nodes, sourceId);\n const maxChildDepth = TreeHelper.findMaxChildDepth(sourceTree.children);\n const targetDepth = TreeHelper.findDepth(nodes, targetId);\n \n return maxChildDepth + targetDepth >= maxDepth;\n },\n\n flatten<T>(\n tree: BaseTree<T>\n ): T[] {\n if (!tree)\n return [];\n\n const nodes: T[] = [];\n\n function pushNode(node: BaseTree<T>): void {\n nodes.push(ObjectHelper.omit(node, ['children']));\n node.children.forEach(pushNode);\n }\n\n tree.children.forEach(pushNode);\n\n return nodes;\n }\n};","import { Flight } from 'libs/common/flight';\n\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { SelectAllPagesResult, useSelectAllPages } from 'libs/shared/hooks/UseSelectAllPages';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport function useFetchAllChildFolders(parentId?: string): SelectAllPagesResult<Folder> {\n const fetch = Flight.useGetFetch();\n\n function getRequest(cursor?: string): Flight.Request {\n return LibraryRequests.childFolders(parentId, cursor);\n }\n \n function fetchNext(cursor?: string): void {\n fetch(getRequest(cursor));\n }\n\n useFetchAll(!!parentId && getRequest, !!parentId && fetchNext);\n\n return (useSelectAllPages<Folder>(!!parentId && ((cursor?: string) => getRequest(cursor).key)));\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\n\nimport { AddFolderRequest } from 'apps/my-videos/interfaces/requests/AddFolderRequest';\nimport { AddToExchangeRequest } from 'apps/my-videos/interfaces/requests/AddToExchangeRequest';\nimport { MoveFolderRequest } from 'apps/my-videos/interfaces/requests/MoveFolderRequest';\nimport { MoveVideoRequest } from 'apps/my-videos/interfaces/requests/MoveVideoRequest';\n\nexport const MyVideosRequests = {\n videos(id: string, cursor?: string, typeFilter?: SearchIndices | SearchIndices[]): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const videoQuery = `videos[${VIDEO_COLLECTION}]{libraries.typeid:${MasterType.WorkspaceCollection}}`;\n const clipQuery = `clips[${CLIP_COLLECTION}]{status:${CurationStatus.Published}}`;\n const interactiveQuery = `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`;\n\n const query = [];\n if (typeFilter?.length) {\n if (typeFilter.includes('video'))\n query.push(videoQuery);\n if (typeFilter.includes('clip'))\n query.push(clipQuery);\n if (typeFilter.includes('interactive'))\n query.push(interactiveQuery);\n } else {\n query.push(videoQuery, clipQuery, interactiveQuery);\n }\n\n const params: HashObject = {\n query: `(${query.join('|')}){orderbydesc:timestamp}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}/members`, params),\n key: `my:videos:${id}:${cursor}${typeFilter ? `:${Array.isArray(typeFilter) ? typeFilter.join(':') : typeFilter}` : ''}`\n };\n },\n\n workspaceWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['workspace'],\n maxCategoryDepth: 6\n }),\n key: 'workspace:folders',\n normalize: false\n };\n },\n\n exchangeWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['exchange'],\n maxCategoryDepth: 5\n }),\n key: 'exchange:folders',\n normalize: false\n };\n },\n\n addFolder(data: AddFolderRequest): Flight.Request {\n // TODO: Need to stop using domain\n let url = `/api/domain/v2/collections/${data.collectionId}/categories`;\n\n if (data.parentCategoryId)\n url = UrlHelper.urlBuilder(url, { parentCategoryId: data.parentCategoryId });\n\n return {\n url,\n key: 'add:folder',\n type: HttpVerbs.POST,\n data: { name: data.name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n deleteFolder(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'delete:folder',\n type: HttpVerbs.DELETE,\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n moveFolder(data: MoveFolderRequest): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: '/api/domain/v2/objects/move',\n key: 'move:folder',\n type: HttpVerbs.POST,\n data: {\n assocType: 'has',\n newCollectionId: data.newFolderId,\n oldCollectionId: data.oldFolderId,\n objectIds: [data.moveFolderId]\n },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n updateFolder(id: string, name: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'rename:folder',\n type: HttpVerbs.PUT,\n data: { name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n videoFolders(videoId: string, libraryId: string): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: `/api/domain/v2/objects/${videoId}/categories?query=libraries{id:${libraryId}}`,\n key: `video:folders:${videoId}`\n };\n },\n\n moveVideo(request: MoveVideoRequest): Flight.Request {\n const data: HashObject = {\n newCollectionId: request.newFolderId,\n oldCollectionId: request.oldFolderId,\n objectIds: request.videoId\n };\n\n return {\n url: '/api/domain/v3/objects/move',\n key: `move:folder:${data.objectIds.join(',')}`,\n type: HttpVerbs.POST,\n data,\n invalidationKeys: ['video']\n };\n },\n\n addToExchange(data: AddToExchangeRequest): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/videos/exchange',\n key: 'add:to:exchange',\n type: HttpVerbs.POST,\n data\n };\n }\n};","\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { BaseTree, Folder, Library, LibraryTree, VideoTypes } from 'libs/shared/interfaces';\nimport { DEFAULT_MAX_DEPTH, TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MyVideosRequests } from 'apps/my-videos/flight-requests/MyVideosRequests';\n\nconst namespace = 'myVideos.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useDragDropMove() {\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const categoriesRequest = MyVideosRequests.workspaceWithCategories();\n const workspaceFolders = Flight.useGetResponse<LibraryTree[]>(categoriesRequest.key);\n\n async function handleDragEnd(event: DragEndEvent, source: Folder) {\n const dragged = event.active?.data.current;\n const destination = event.over?.data.current;\n\n if (!destination || dragged.id === destination.id) return;\n \n if (dragged.typeId === MasterType.Category) {\n moveFolders(dragged, destination);\n return;\n }\n\n moveVideos(dragged, destination, source);\n }\n\n async function moveFolders(dragged: Folder, destination: Folder) {\n let folders = workspaceFolders.data;\n\n if (workspaceFolders.shouldFetch)\n folders = await fetchAsync(categoriesRequest);\n\n if (TreeHelper.isMaxDepth(folders, dragged.id, destination.id)) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MAX_FOLDER_DEPTH,\n args: [DEFAULT_MAX_DEPTH]\n });\n return;\n }\n\n const rootBranches: BaseTree<Library> = {\n children: folders.map(TreeHelper.convertNestedObjectToTree)\n };\n\n const parent = TreeHelper.getParent(rootBranches, dragged.id);\n\n try {\n await fetchAsync(MyVideosRequests.moveFolder({\n moveFolderId: dragged.id,\n newFolderId: destination.id,\n oldFolderId: parent?.id\n }));\n alerts.success({\n type: AlertType.Success,\n heading: getPhrase('moveFolderSuccessHeading'),\n message: getPhrase('moveFolderSuccess', { folder: dragged.name, toFolder: destination.name, escapeText: true }),\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ destination.id, destination.name ]\n },\n appLinkText: getPhrase('goToFolder', { folder: destination.name, escapeText: true }),\n appLinkClassName: 'text-blue'\n });\n } catch {\n alerts.error(getPhrase('error'));\n }\n }\n\n async function moveVideos(dragged: VideoTypes | string[], destination: Folder, source: Folder) {\n try {\n await fetchAsync(MyVideosRequests.moveVideo({\n newFolderId: destination.id,\n oldFolderId: source.id,\n videoId: Array.isArray(dragged) ? dragged : [dragged.id]\n }));\n if (Array.isArray(dragged)) {\n alerts.success({\n type: AlertType.Success,\n heading: getPhrase('moveVideosSucccessHeading'),\n message: getPhrase(\n 'moveVideosSuccess',\n { count: dragged.length, fromFolder: source.name, toFolder: destination.name, escapeText: true }\n ),\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ destination.id, destination.name ]\n },\n appLinkText: getPhrase('goToFolder', { folder: destination.name, escapeText: true }),\n appLinkClassName: 'text-blue'\n });\n } else {\n alerts.success(\n {\n type: AlertType.Success,\n heading: getPhrase('moveVideoSucccessHeading'),\n message: getPhrase('moveVideoSuccess', { video: dragged.name, fromFolder: source.name, toFolder: destination.name, escapeText: true }),\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ destination.id, destination.name ]\n },\n appLinkText: getPhrase('goToFolder', { folder: destination.name, escapeText: true }),\n appLinkClassName: 'text-blue'\n }\n );\n }\n } catch {\n alerts.error(getPhrase('error'));\n }\n }\n\n return {\n handleDragEnd\n };\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { Services } from 'shared/constants/Services';\n\nimport { useGetUploadingItems } from 'apps/upload/hooks/useGetUploadingItems';\nimport { CombinedUploadStatus } from 'apps/upload/services/CombinedUploadsStatus';\nimport { CombinedUpload, CombineUploadsService } from 'apps/upload/services/CombineUploadsService';\n\ninterface UseDisplayUploadsOptions {\n onRemove: () => void;\n categoryId?: number;\n}\n\nexport function useUploadItems(options: UseDisplayUploadsOptions) {\n const { hasPermissions } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const canUpload = hasPermissions(PermissionName.UploadVideo);\n\n /**\n * Get reference to the combined service even though useGetUploadingItems does it too\n * so that we can provide the callbacks\n */\n const combinedUploadService = useInstanceSafe<CombineUploadsService>(\n canUpload &&\n Services.CombineUploads\n );\n\n /**\n * Only allow callback to fetch if all required user data is loaded\n */\n let uploadingVideos = useGetUploadingItems(canUpload, () => {\n currentUser.data && options.onRemove();\n }, [currentUser.data]);\n\n uploadingVideos = uploadingVideos?.filter(video => {\n if (!options.categoryId)\n return !video.categoryId;\n\n return video.categoryId === options.categoryId;\n });\n\n /**\n * Using React.useCallback because this component will render\n * every time a chunk is loaded and every time the pending items\n * is fetched\n */\n const onClickDelete = React.useCallback((item: CombinedUpload) => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.UPLOAD,\n action: Actions.Upload.CANCEL_UPLOAD,\n args: [item.id],\n params: {\n name: item.name,\n status: item.status\n }\n });\n }, []);\n\n const onClickAlternate = React.useCallback((item: CombinedUpload) => {\n switch (item.status) {\n case CombinedUploadStatus.Errored:\n combinedUploadService.retryItem(item);\n return;\n case CombinedUploadStatus.Processing:\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.EDIT_VIDEO,\n args: [item.videoId]\n });\n return;\n case CombinedUploadStatus.Uploading:\n combinedUploadService.editUpload(item);\n break;\n default:\n // This should never happen\n }\n }, []);\n\n const processingIds = uploadingVideos?.reduce((prev: any, current) => {\n prev[current.videoId] = true;\n return prev;\n }, {});\n\n return {\n uploadingVideos,\n onClickAlternate,\n onClickDelete,\n processingIds\n };\n}","import React from 'react';\n\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { useGetCollectionItems } from 'libs/shared/hooks/UseGetCollectionItems';\n\nimport { CombinedUpload, CombineUploadsService } from '../services/CombineUploadsService';\n\nexport function useGetUploadingItems(\n canUpload: boolean,\n onRemove: () => void,\n dependencies: React.DependencyList\n): CombinedUpload[] {\n const combineUploadsService = useInstanceSafe<CombineUploadsService>(canUpload && 'combine:uploads:service');\n\n const getCollection = () => canUpload ? combineUploadsService?.getCollection() : null;\n\n return useGetCollectionItems(getCollection, onRemove, dependencies);\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Folder } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myVideos.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n/**\n * This is a hook, just to make modifying this function to fetch data easier in the future.\n * It also adheres to the paradigm we have with all our video actions - Sha\n */\nexport function useGetFolderActions(): (location: 'folder' | 'page', folder: Folder) => ActionOptions[] {\n return (location, folder) => {\n const analyticsData = { id: folder.id, name: folder.name };\n const analyticsOptions = {\n entity: EntityType.Folder,\n location: location === 'folder' ? LocationContext.SubFolderList : LocationContext.MyVideos,\n workflowPhase: WorkflowPhase.Start\n };\n\n return [\n {\n label: getPhrase('addSubfolder'),\n button: location === 'page',\n className: location === 'page' ? 'btn btn-outline-dark me-2' : undefined,\n svgName: location === 'page' ? cvSvgLibrary.Plus : undefined,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.ADD_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Create\n }\n },\n {\n label: getPhrase('moveFolder'),\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MOVE_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Move\n }\n },\n {\n label: getPhrase('renameFolder'),\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.RENAME_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Rename\n }\n },\n {\n label: getPhrase('removeFolder'),\n className: 'text-danger',\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.DELETE_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Delete\n }\n }\n ];\n };\n}","import { EntityType } from 'libs/analytics/interfaces';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nexport const AnalyticsTypeHelper = {\n mapTypeId(typeId: MasterType): EntityType {\n switch (typeId) {\n case MasterType.Video:\n return EntityType.Video;\n case MasterType.Clip:\n return EntityType.Clip;\n case MasterType.Interactive:\n return EntityType.Interactive;\n default:\n return null;\n }\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AddToExchangeDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { VideoActionsOptions } from 'libs/shared/context/VideoActionsContext';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { AnalyticsTypeHelper } from 'libs/shared/utils/AnalyticsTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\n\nimport { useHasExchange } from 'apps/my-videos/hooks/useHasExchange';\n\nconst namespace = 'default.myVideos';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getMovePhrase(video: VideoTypes): string {\n if (VideoHelper.isInteractive(video))\n return getPhrase('moveInteractive');\n\n if (VideoHelper.isClip(video))\n return getPhrase('moveClip');\n\n return getPhrase('moveVideo');\n}\n\nexport function useMyVideosViewBulkActions(\n libraryId: string,\n categoryId: string\n): (videoIds: string[]) => ActionOptions[] {\n return (videoIds: string[]) => {\n return [{\n label: getPhrase('moveVideo'),\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MOVE_VIDEO,\n params: { ids: videoIds }\n },\n analyticsData: {\n ids: videoIds\n },\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Move,\n location: LocationContext.VideoListItem,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n label: getPhrase('delete'),\n button: false,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.DELETE_VIDEO,\n params: { ids: videoIds, libraryId, categoryId }\n },\n className: 'btn btn-link text-danger',\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Delete,\n location: LocationContext.VideoList,\n workflowPhase: WorkflowPhase.Start\n },\n analyticsData: { ids: videoIds }\n }];\n };\n}\n\nexport function useMyVideosViewActions() {\n const { myVideosFolders } = useSettings(null);\n const hasExchange = useHasExchange();\n\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n const getVideoActions = (video: VideoTypes, options?: VideoActionsOptions) => {\n const { canConsume } = VideoHelper.getCanBeConsumed(video);\n\n /**\n * Where a user has a video they can no longer be access, we will allow them to remove it.\n */\n if (!canConsume) {\n return [{\n label: getPhrase('delete'),\n button: false,\n svgName: cvSvgLibrary.Delete,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.DELETE_VIDEO,\n params: { ids: [video.id]}\n },\n className: 'btn btn-link text-danger',\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Delete,\n location: LocationContext.VideoListItem,\n workflowPhase: WorkflowPhase.Start\n },\n analyticsData: {\n id: video.id\n }\n }];\n }\n\n const actions = videoActions.getVideoActions(video, options);\n\n if (myVideosFolders) {\n actions.push({\n order: 67,\n label: getMovePhrase(video),\n svgName: cvSvgLibrary.Move,\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MOVE_VIDEO,\n params: { ids: [video.id]}\n },\n analyticsData: {\n id: video.id\n },\n analyticsOptions: {\n entity: AnalyticsTypeHelper.mapTypeId(video.typeId),\n actionType: UserAction.Move,\n location: LocationContext.VideoListItem,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'edit'\n });\n\n if (VideoHelper.isVideo(video) && hasExchange) {\n actions.push({\n order: 63,\n label: getPhrase('contribute'),\n svgName: cvSvgLibrary.Upload,\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.ADD_TO_EXCHANGE,\n args: [video.id]\n },\n analyticsData: {\n id: video.id\n },\n analyticsOptions: {\n entity: AnalyticsTypeHelper.mapTypeId(video.typeId),\n actionType: UserAction.Create,\n location: LocationContext.VideoListItem,\n workflowPhase: WorkflowPhase.Start,\n descriptor: AddToExchangeDescriptor.AddToExchange\n },\n group: 'add'\n });\n }\n }\n\n return actions;\n };\n\n return {\n ...videoActions,\n getVideoActions\n };\n}","import { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nexport function useHasExchange(): boolean {\n const { hasProduct } = useProducts();\n const { exchangeTvProductOption } = useSettings(null);\n const { hasPermissions } = usePermissions();\n\n if (!hasProduct(ProductId.Exchange))\n return false;\n\n if (exchangeTvProductOption !== 'exchange' && exchangeTvProductOption !== 'exchange_and_tv')\n return false;\n\n if (!hasPermissions(PermissionName.Exchange))\n return false;\n\n return true;\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'default.myVideosEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MyVideosEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS} altText={getPhrase('info')} />\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function MyVideosPublicEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS_PUBLIC} altText={getPhrase('publicInfo')} />\n <EmptyState.Heading><Text phrase='publicHeading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='publicInfo' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'publicCta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.MyVideoLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import * as React from 'react';\nimport { Col, ProgressBar, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { CombinedUploadStatus } from 'apps/upload/services/CombinedUploadsStatus';\nimport { CombinedUpload } from 'apps/upload/services/CombineUploadsService';\n\nconst namespace = 'upload.uploadingItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(status: CombinedUploadStatus): string {\n switch (status) {\n case CombinedUploadStatus.Uploading:\n return 'text-success';\n case CombinedUploadStatus.Processing:\n return 'text-info';\n case CombinedUploadStatus.Errored:\n return 'text-danger';\n }\n}\n\nfunction getVariant(status: CombinedUploadStatus): 'success' | 'info' | 'danger' {\n switch (status) {\n case CombinedUploadStatus.Uploading:\n return 'success';\n case CombinedUploadStatus.Processing:\n return 'info';\n case CombinedUploadStatus.Errored:\n return 'danger';\n }\n}\n\nfunction getProgressText(status: CombinedUploadStatus, progress: number): string | JSX.Element {\n const rounded = Math.round(progress) || 0;\n\n switch (status) {\n case CombinedUploadStatus.Uploading:\n return `${getPhrase('uploading')} ${rounded}%`;\n\n case CombinedUploadStatus.Processing:\n if (rounded === 0)\n return <em>{getPhrase('waitingToBeProcessed')}</em>;\n return <em>{getPhrase('processing')} {rounded}%</em>;\n\n case CombinedUploadStatus.Errored:\n return getPhrase('error');\n }\n}\n\ninterface UploadingItemProps {\n item: CombinedUpload;\n allowBulkAction?: boolean;\n onClickDelete: (item: CombinedUpload) => void;\n onClickAlternate: (item: CombinedUpload) => void;\n}\n\nexport function UploadingItem(props: UploadingItemProps): JSX.Element {\n const { status, progress, name } = props.item;\n\n const breakpoints = useBreakpoints();\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n /**\n * We're using React.useCallback here because this view\n * will get re-rendered many times by it's parent during\n * an upload\n */\n const onClickAlternate = React.useCallback(() => {\n props.onClickAlternate(props.item);\n }, [props.item.status]);\n\n const onClickDelete = React.useCallback(() => {\n props.onClickDelete(props.item);\n }, []);\n\n let appLink: Core.AppLink = null;\n if (props.item.video?.status === CurationStatus.Published) {\n appLink = {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ props.item.videoId, TextHelper.slugify(props.item.video.name) ]\n };\n }\n \n return (\n <div className='d-flex flex-row'>\n {props.allowBulkAction && <div className='form-check pe-2 mx-2' />}\n <Row className={`${isSmall ? '' : 'py-2'} g-0 flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-2` : 'mb-1 px-2'}`}>\n <div className={`position-relative overflow-hidden ${isSmall ? 'rounded' : 'rounded-3'}`}>\n <AppLink appLink={appLink}>\n <BaseImage\n data={props.item.thumbnailUrl ?? ''}\n imageType={ImageType.Thumbnails}\n imageOptions={{ size: ImageSize.Medium }}\n >\n <ImageFallback type={ImageFallbackType.Video} />\n </BaseImage>\n </AppLink>\n </div>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <AppLink appLink={appLink}>\n <h5 className='m-0 pb-1'>{name}</h5>\n </AppLink>\n <span className={getClassName(status)}>{getProgressText(status, progress)}</span>\n <div className='d-flex'>\n <ProgressBar className='flex-grow-1 align-self-center' variant={getVariant(status)} now={progress} />\n <SvgContainer\n className='svg-container cursor-pointer ms-2'\n svgName={status === CombinedUploadStatus.Errored ? cvSvgLibrary.Retry : cvSvgLibrary.Edit}\n onClick={onClickAlternate}\n />\n <SvgContainer\n className='svg-container cursor-pointer ms-2'\n svgName={cvSvgLibrary.Delete}\n onClick={onClickDelete}\n />\n </div>\n </Col>\n </Row>\n </div>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"dragOverlay\":\"ry0mg\",\"dragThumbnail\":\"soAvD\"};","import React from 'react';\n\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Folder, VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './drag-drop-overlay.scss';\n\nconst namespace = 'shared.dragDropOverlay';\n\ninterface DragDropMoveOverlayProps {\n activeDragData: Folder | VideoTypes | string[];\n}\n\nexport function DragDropOverlay(props: DragDropMoveOverlayProps) {\n const { activeDragData } = props;\n\n return (\n <div className={`${styles.dragOverlay} position-relative`}>\n <div className='position-absolute top-0 start-50 ms-n2 bg-white shadow p-2 rounded-3 font-size-md mw-100'>\n {Array.isArray(activeDragData) ? (\n <div className='d-flex fw-semibold'>\n <div className='me-1'>\n <SvgContainer svgName={cvSvgLibrary.Video} />\n </div>\n <Text namespace={namespace} phrase='bulkVideos' options={{ length: activeDragData.length }} />\n </div>\n ) : (\n <div className='d-flex'>\n {activeDragData.typeId === MasterType.Category ? (\n <div className='me-1'>\n <SvgContainer svgName={cvSvgLibrary.Folder} />\n </div>\n ) : (\n <LazyImage\n src={VideoHelper.getThumbnail(activeDragData)?.url}\n alt={activeDragData.name}\n className={`${styles.dragThumbnail} partial-loading-background rounded me-2`}\n />\n )}\n <span className='fw-semibold text-truncate'>{activeDragData.name}</span>\n </div>\n )}\n </div>\n </div>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { cloneElement } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { map } from './ElementChildren';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst ROUND_PRECISION = 1000;\n\n/**\n * Validate that children, if any, are instances of `ProgressBar`.\n */\nfunction onlyProgressBar(props, propName, componentName) {\n const children = props[propName];\n if (!children) {\n return null;\n }\n let error = null;\n React.Children.forEach(children, child => {\n if (error) {\n return;\n }\n\n /**\n * Compare types in a way that works with libraries that patch and proxy\n * components like react-hot-loader.\n *\n * see https://github.com/gaearon/react-hot-loader#checking-element-types\n */\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const element = /*#__PURE__*/_jsx(ProgressBar, {});\n if (child.type === element.type) return;\n const childType = child.type;\n const childIdentifier = /*#__PURE__*/React.isValidElement(child) ? childType.displayName || childType.name || childType : child;\n error = new Error(`Children of ${componentName} can contain only ProgressBar ` + `components. Found ${childIdentifier}.`);\n });\n return error;\n}\nfunction getPercentage(now, min, max) {\n const percentage = (now - min) / (max - min) * 100;\n return Math.round(percentage * ROUND_PRECISION) / ROUND_PRECISION;\n}\nfunction renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n className,\n style,\n variant,\n bsPrefix,\n ...props\n}, ref) {\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...props,\n role: \"progressbar\",\n className: classNames(className, `${bsPrefix}-bar`, {\n [`bg-${variant}`]: variant,\n [`${bsPrefix}-bar-animated`]: animated,\n [`${bsPrefix}-bar-striped`]: animated || striped\n }),\n style: {\n width: `${getPercentage(now, min, max)}%`,\n ...style\n },\n \"aria-valuenow\": now,\n \"aria-valuemin\": min,\n \"aria-valuemax\": max,\n children: visuallyHidden ? /*#__PURE__*/_jsx(\"span\", {\n className: \"visually-hidden\",\n children: label\n }) : label\n });\n}\nconst ProgressBar = /*#__PURE__*/React.forwardRef(({\n isChild = false,\n ...rest\n}, ref) => {\n const props = {\n min: 0,\n max: 100,\n animated: false,\n visuallyHidden: false,\n striped: false,\n ...rest\n };\n props.bsPrefix = useBootstrapPrefix(props.bsPrefix, 'progress');\n if (isChild) {\n return renderProgressBar(props, ref);\n }\n const {\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant,\n className,\n children,\n ...wrapperProps\n } = props;\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...wrapperProps,\n className: classNames(className, bsPrefix),\n children: children ? map(children, child => /*#__PURE__*/cloneElement(child, {\n isChild: true\n })) : renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant\n }, ref)\n });\n});\nProgressBar.displayName = 'ProgressBar';\nexport default ProgressBar;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;"],"names":["getDirectionClass","direction","Caret","props","SvgContainer","svgName","className","defaultProps","DragDropMoveContext","activeDragData","setActiveDragData","DragOverlayComponent","dragOverlayComponent","mouseSensor","activationConstraint","distance","sensors","onDragEnd","event","handleDragEnd","source","onDragStart","active","data","current","handleDragStart","collisionDetection","children","dropAnimation","modifiers","zIndex","LibraryFolder","thumbnailUrl","folder","thumbnail","UrlHelper","url","size","actions","getFolderActions","DragDropMoveWrapper","draggable","drag","id","droppable","drop","dropStye","dragStyle","AppLink","appLink","getAppLink","title","name","BaseImage","imageType","imageClassName","ImageFallback","type","extraClasses","length","Actions","actionsDropdownClassName","dropdownToggleSvgSize","namespace","EXPANDED_FOLDERS_KEY","FolderList","breakpoints","LocalStorageHelper","_hasExpandedFolders","setHasExpandedFolders","hasExpandedFolders","expandFolders","folderLimit","useBreakpoints","xxl","xl","lg","md","onToggleFolderView","displayableFolders","folders","slice","canToggleCollapsedView","showHeading","DivButton","onClick","Text","phrase","options","count","extraButtons","map","f","key","PartialFolder","PartialFolderList","Array","fill","_","i","PartialVideoList","numVideos","allowBulkActions","PartialVideoItem","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","VideoListActions","CheckboxHelper","checkboxHelper","setActions","allowBulkAction","checked","bulkChecked","onChange","onToggleBulk","indeterminate","hasSomeSelections","getVideosBulkAction","getSelected","action","label","analyticsData","analyticsOptions","handleVideoAction","allowFilter","TypeButton","typeFilter","newType","selected","includes","currentAppLink","currentParams","params","filter","t","newAppLink","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","useGetCollectionItems","getCollection","onRemove","dependencies","setUpdate","collection","off","on","s","toJSON","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","isArray","useEffect","forEach","useBulkCheckboxManager","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","clear","isChecked","item","toString","get","isBulkChecked","every","setSelected","ids","set","preselectedIds","setValue","onToggleItem","nextItemState","from","keys","deselectAll","find","getSelectedCount","getMap","usePrevious","value","ref","_find","node","parents","child","foundParents","DEFAULT_MAX_DEPTH","TreeHelper","tree","j","getPath","path","getParent","convertNestedObjectToTree","nestedObject","findDepth","nodes","targetId","currentDepth","depth","childDepth","findMaxChildDepth","deepestLevel","childLevel","Math","max","findTargetNode","result","isMaxDepth","sourceId","maxDepth","sourceTree","flatten","pushNode","push","useFetchAllChildFolders","parentId","fetch","getRequest","cursor","MyVideosRequests","videos","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","videoQuery","clipQuery","interactiveQuery","query","permissionFilterOption","workspaceWithCategories","maxCategoryDepth","normalize","exchangeWithCategories","addFolder","collectionId","parentCategoryId","invalidationKeys","deleteFolder","moveFolder","assocType","newCollectionId","newFolderId","oldCollectionId","oldFolderId","objectIds","moveFolderId","updateFolder","videoFolders","videoId","libraryId","moveVideo","request","addToExchange","getPhrase","useDragDropMove","alerts","fetchAsync","categoriesRequest","workspaceFolders","moveFolders","dragged","destination","shouldFetch","application","args","rootBranches","parent","success","heading","message","toFolder","escapeText","appLinkText","appLinkClassName","error","moveVideos","fromFolder","video","over","typeId","useUploadItems","hasPermissions","usePermissions","currentUser","UserRequests","canUpload","PermissionName","combinedUploadService","Services","uploadingVideos","combineUploadsService","useGetUploadingItems","categoryId","onClickDelete","onClickAlternate","retryItem","editUpload","processingIds","reduce","prev","useGetFolderActions","location","entity","workflowPhase","button","undefined","actionType","AnalyticsTypeHelper","mapTypeId","MasterType","LanguageService","getMovePhrase","VideoHelper","useMyVideosViewBulkActions","videoIds","useMyVideosViewActions","hasProduct","exchangeTvProductOption","myVideosFolders","useSettings","hasExchange","ProductId","videoActions","useVideoActions","getVideoActions","canConsume","order","group","descriptor","AddToExchange","MyVideosEmptyState","src","altText","MyVideosPublicEmptyState","text","SignUp","getClassName","getVariant","UploadingItem","progress","imageOptions","rounded","round","getProgressText","variant","now","DragDropOverlay","LazyImage","alt","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","ROUND_PRECISION","getPercentage","min","percentage","renderProgressBar","visuallyHidden","striped","animated","style","bsPrefix","role","width","ProgressBar","isChild","rest","wrapperProps","cloneElement","displayName","as","Component","decoratedBsPrefix","minBreakpoint","sizePrefix","classes","brkPoint","propValue","cols","infix"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/170-2d124965b7-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/caret/Caret.tsx","file:///app/packages/libs/shared/src/components/caret/caret.scss","file:///app/packages/libs/shared/src/components/drag-drop-move/DragDropMoveContext.tsx","file:///app/packages/libs/shared/src/components/library-folder/library-folder.scss","file:///app/packages/libs/shared/src/components/library-folder/LibraryFolder.tsx","file:///app/packages/libs/shared/src/components/folder-list/FolderList.tsx","file:///app/packages/libs/shared/src/components/folder-list/partial-loading/partial-folder-list.scss","file:///app/packages/libs/shared/src/components/folder-list/partial-loading/PartialFolderList.tsx","file:///app/packages/libs/shared/src/components/video-list/partial-loading/partial-video-list.scss","file:///app/packages/libs/shared/src/components/video-list/partial-loading/PartialVideoList.tsx","file:///app/packages/libs/shared/src/components/video-list/video-list-actions/VideoListActions.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseGetCollectionItems.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/hooks/usePrevious.ts","file:///app/packages/libs/shared/src/utils/TreeHelper.ts","file:///app/packages/projects/lite/src/apps/libraries/hooks/UseFetchAllChildFolders.ts","file:///app/packages/projects/lite/src/apps/my-videos/flight-requests/MyVideosRequests.ts","file:///app/packages/projects/lite/src/apps/my-videos/hooks/useDragDropMove.ts","file:///app/packages/projects/lite/src/apps/my-videos/hooks/useUploadItems.ts","file:///app/packages/projects/lite/src/apps/upload/hooks/useGetUploadingItems.ts","file:///app/packages/projects/lite/src/apps/my-videos/utils/getFolderActions.tsx","file:///app/packages/libs/shared/src/utils/AnalyticsTypeHelper.ts","file:///app/packages/projects/lite/src/apps/my-videos/views/my-videos/MyVideosViewUtils.ts","file:///app/packages/projects/lite/src/apps/my-videos/hooks/useHasExchange.ts","file:///app/packages/projects/lite/src/apps/my-videos/views/my-videos/empty-state/MyVideosEmptyState.tsx","file:///app/packages/projects/lite/src/apps/upload/components/uploading-item/UploadingItem.tsx","file:///app/packages/projects/lite/src/shared/components/drag-drop-overlay/drag-drop-overlay.scss","file:///app/packages/projects/lite/src/shared/components/drag-drop-overlay/DragDropOverlay.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/node_modules/react-bootstrap/esm/ProgressBar.js","file:///app/node_modules/react-bootstrap/esm/Row.js"],"sourcesContent":["import React from 'react';\n\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './caret.scss';\n\ntype CaretDirection = 'left' | 'right' | 'up' | 'down';\n\n\nconst getDirectionClass = (direction: CaretDirection) => {\n switch (direction) {\n case 'up':\n return styles.up;\n case 'down':\n return styles.down;\n case 'right':\n return styles.right;\n case 'left':\n return styles.left;\n }\n};\n\ninterface CaretProps {\n direction?: CaretDirection;\n className?: string;\n}\n\nCaret.defaultProps = {\n direction: 'right'\n};\n\nexport function Caret(props: CaretProps): JSX.Element {\n return (\n <SvgContainer\n svgName={cvSvgLibrary.Caret}\n className={`${getDirectionClass(props.direction)} svg-container d-inline-block ${props.className}`}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"up\":\"JAT0R\",\"down\":\"ld41u\",\"left\":\"jZTRR\",\"right\":\"HHkPe\"};","import React from 'react';\nimport {\n DndContext,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n PointerSensor,\n pointerWithin,\n useSensor,\n useSensors } from '@dnd-kit/core';\nimport { snapCenterToCursor } from '@dnd-kit/modifiers';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { Folder } from 'libs/shared/interfaces';\n\ninterface DragDropMoveContextProps extends React.PropsWithChildren {\n handleDragStart?: (event: DragStartEvent) => void;\n handleDragEnd?: (event: DragEndEvent, source: Folder) => void;\n source?: Folder;\n dragOverlayComponent: (active: string | string[] | HashObject | HashObject[]) => JSX.Element\n}\n\nexport function DragDropMoveContext(props: DragDropMoveContextProps) {\n const [ activeDragData, setActiveDragData ] = React.useState<string | string[] | HashObject | HashObject[]>(null);\n const { dragOverlayComponent: DragOverlayComponent } = props;\n \n function handleDragEnd(event: DragEndEvent) {\n setActiveDragData(null);\n\n props.handleDragEnd(event, props.source);\n }\n \n function handleDragStart(event: DragStartEvent) {\n setActiveDragData(event.active.data.current);\n props.handleDragStart?.(event);\n }\n \n const mouseSensor = useSensor(PointerSensor, {\n activationConstraint: {\n distance: 10\n }\n });\n \n const sensors = useSensors(mouseSensor);\n \n return (\n <DndContext\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n sensors={sensors}\n collisionDetection={pointerWithin}\n >\n {props.children}\n\n <DragOverlay dropAnimation={null} modifiers={[snapCenterToCursor]} zIndex={1050}>\n {activeDragData ? (\n <DragOverlayComponent activeDragData={activeDragData} />\n ) : null}\n </DragOverlay>\n </DndContext>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"cN3nB\",\"actionsContainer\":\"xM37V\",\"dropStyle\":\"kvCLS\",\"dragStyle\":\"md9Na\"};","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { Folder } from 'libs/shared/interfaces';\n\nimport styles from './library-folder.scss';\n\ninterface LibraryFolderProps {\n folder: Folder;\n drag?: boolean;\n drop?: boolean;\n getAppLink: (f: Folder) => Core.AppLink;\n getFolderActions?: (f: Folder) => ActionOptions[];\n}\n\nexport function LibraryFolder(props: LibraryFolderProps): JSX.Element {\n const thumbnailUrl = props.folder.thumbnail\n ? UrlHelper.urlBuilder(props.folder.thumbnail.url, { size: ImageSize.Small })\n : null;\n\n const actions = props.getFolderActions?.(props.folder);\n\n return (\n <DragDropMoveWrapper\n draggable={props.drag && { id: props.folder.id, data: props.folder }}\n droppable={props.drop && { id: props.folder.id, data: props.folder }}\n dropStye={styles.dropStyle}\n dragStyle={styles.dragStyle}\n >\n <div className='position-relative'>\n <AppLink\n className='rounded-3 d-block text-decoration-none'\n appLink={props.getAppLink(props.folder)}\n title={props.folder.name}\n >\n <BaseImage\n data={thumbnailUrl}\n imageType={ImageType.Thumbnails}\n imageClassName='rounded-top-lg'\n >\n <ImageFallback\n name={props.folder.name}\n type={ImageFallbackType.Folder}\n extraClasses='rounded-top-lg'\n />\n </BaseImage>\n <h3 className='bg-white border-start border-end border-bottom rounded-bottom-lg font-size-normal fw-semibold mb-0 p-2'>\n <span className='text-truncate d-block'>{props.folder.name}</span>\n </h3>\n </AppLink>\n {actions?.length &&\n <Actions\n actions={actions}\n className={styles.actionsContainer}\n actionsDropdownClassName={styles.actions}\n // Intentionally setting to the default SVG size\n dropdownToggleSvgSize={null}\n />\n }\n </div>\n </DragDropMoveWrapper>\n );\n}","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Caret } from 'libs/shared/components/caret/Caret';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { LibraryFolder } from 'libs/shared/components/library-folder/LibraryFolder';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Folder } from 'libs/shared/interfaces';\n\nconst namespace = 'libraries.folderList';\n\nconst EXPANDED_FOLDERS_KEY = 'has:expanded:library:folders';\n\nfunction useGetFolderLimit(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl || breakpoints.xl || breakpoints.lg)\n return 6;\n\n if (breakpoints.md)\n return 4;\n\n return 3;\n}\n\ninterface FolderListProps {\n folders: Folder[];\n getAppLink: (folder: Folder) => Core.AppLink;\n expandFolders?: boolean;\n showHeading?: boolean;\n getFolderActions?: (f: Folder) => ActionOptions[];\n drag?: boolean;\n drop?: boolean;\n extraButtons?: JSX.Element;\n}\n\nFolderList.defaultProps = {\n showHeading: true\n};\n\nexport function FolderList(props: FolderListProps): JSX.Element {\n const [ _hasExpandedFolders, setHasExpandedFolders ] = React.useState(\n LocalStorageHelper.get(EXPANDED_FOLDERS_KEY) || false\n );\n\n const hasExpandedFolders = props.expandFolders || _hasExpandedFolders;\n\n const folderLimit = useGetFolderLimit();\n\n function onToggleFolderView(): void {\n setHasExpandedFolders(!hasExpandedFolders);\n LocalStorageHelper.set(EXPANDED_FOLDERS_KEY, !hasExpandedFolders);\n }\n\n const displayableFolders = hasExpandedFolders ? props.folders : props.folders.slice(0, folderLimit);\n\n const canToggleCollapsedView = props.folders.length > folderLimit && !props.expandFolders;\n\n return (\n <>\n <div className='d-flex justify-content-between align-items-center'>\n {props.showHeading &&\n <DivButton\n className={`d-inline-flex align-items-center mb-2 px-2 ${!canToggleCollapsedView ? 'cursor-default' : ''}`}\n onClick={onToggleFolderView}\n >\n {canToggleCollapsedView && (\n <Caret direction={hasExpandedFolders ? 'down' : 'right'} />\n )}\n <h2 className='h4 mb-0'>\n <Text namespace={namespace} phrase='folders' options={{ count: props.folders.length }} />\n </h2>\n </DivButton>\n }\n\n {!!(!hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolderView} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeAll' options={{ count: props.folders.length }} />\n </DivButton>\n </div>\n )}\n {!!(hasExpandedFolders && canToggleCollapsedView) && (\n <div className='d-flex justify-content-end justify-self-end px-2'>\n <DivButton onClick={onToggleFolderView} className='text-dark hover-text-underline d-inline-block'>\n <Text namespace={namespace} phrase='seeLess' />\n </DivButton>\n </div>\n )}\n\n {props.extraButtons ? props.extraButtons : <></>}\n </div>\n\n <div className='row mx-1'>\n {displayableFolders.map(f => (\n <div key={f.id} className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <LibraryFolder\n folder={f}\n getAppLink={props.getAppLink}\n getFolderActions={props.getFolderActions}\n drag={props.drag}\n drop={props.drop}\n />\n </div>\n ))}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialFolderHeading\":\"dhbsL\",\"partialFolderThumbnail\":\"CI9vk\",\"partialFolderName\":\"l0Nll\"};","import React from 'react';\n\nimport styles from './partial-folder-list.scss';\n\nconst PartialFolder = () => (\n <div className='col-4 col-md-3 col-lg-2 px-1 pb-3'>\n <div className={`${styles.partialFolderThumbnail} partial-loading-background rounded-top-lg`} />\n <div className={`${styles.partialFolderName} partial-loading-background border-bottom rounded-bottom-lg font-size-normal mb-0 p-2`}>\n \n </div>\n </div>\n);\n\nexport function PartialFolderList({ count = 3 }: { count?: number; }): JSX.Element {\n return (\n <>\n <div className={`${styles.partialFolderHeading} h4 mb-2 partial-loading-background`}> </div>\n <div className='row mx-n1'>\n {Array(count).fill(null).map((_, i) => <PartialFolder key={i} />)}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialOptions\":\"Gufgq\",\"partialName\":\"SicQQ\",\"partialDescription\":\"dPGMq\",\"partialThumbnail\":\"vZrnb\",\"partialDragHandle\":\"iq73R\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport styles from './partial-video-list.scss';\n\ninterface PartialVideoListProps {\n withReordering?: boolean;\n numVideos?: number;\n allowBulkActions?: boolean;\n}\n\nPartialVideoList.defaultProps = {\n numVideos: 15\n};\n\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\n return (\n <div className='mx-2'>\n {Array(props.numVideos).fill(null).map((_, i) => (\n <div className='d-flex' key={i}>\n {props.allowBulkActions && <div className='form-check pe-3 pe-sm-2 mx-0 mx-md-2' />}\n <PartialVideoItem {...props} />\n </div>\n ))}\n </div>\n );\n}\n\nexport function PartialVideoItem(props: PartialVideoListProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n const withDragHandle = props.withReordering && !breakpoints.xs;\n\n return (\n <Row className={`${isSmall ? '' : 'py-2'} flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-1` : 'mb-1 pe-3 pe-md-2'}`}>\n <Row>\n {!!withDragHandle && (\n <div className='d-flex align-items-center justify-content-center col-2'>\n <div className={`partial-loading-background ${styles.partialDragHandle}`} />\n </div>\n )}\n <Col xs={VideoListHelper.getThumbnailColSize(withDragHandle)}>\n <div className={`partial-loading-background ${isSmall ? 'rounded' : 'rounded-3'} ${styles.partialThumbnail}`} />\n </Col>\n </Row>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <div className={`partial-loading-background mb-1 ${styles.partialName}`} />\n <div className={`partial-loading-background ${styles.partialDescription}`} />\n </Col>\n </Row>\n );\n}\n\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\n\nconst namespace = 'shared.videoListActions';\n\ninterface VideoListActionsProps {\n allowBulkAction?: boolean;\n allowFilter?: boolean;\n checkboxHelper?: BulkCheckboxManager;\n getVideosBulkAction?: (selected: string[]) => ActionOptions[]\n getAppLink: () => Core.AppLink;\n typeFilter: SearchIndices[];\n locationContext?: LocationContext;\n isVideosLoading?: boolean;\n}\n\nexport function VideoListActions(props: VideoListActionsProps) {\n const { checkboxHelper: CheckboxHelper } = props;\n\n const [ actions, setActions ] = React.useState<ActionOptions[]>([]);\n\n function getVideosBulkActions() {\n setActions(props.getVideosBulkAction?.(CheckboxHelper.getSelected()));\n }\n\n function handleVideoAction(action: ActionOptions) {\n Core.AppLinkHelper.trigger(action.appLink);\n\n AnalyticsHelper.logUserAction(action.analyticsData, action.analyticsOptions);\n }\n\n return (\n <>\n <div className='d-flex align-items-center mb-3'>\n {props.allowBulkAction && (\n <>\n <Checkbox\n id='my-videos'\n name='my-videos'\n className='me-0 me-md-2'\n checked={CheckboxHelper.bulkChecked}\n onChange={CheckboxHelper.onToggleBulk}\n indeterminate={CheckboxHelper.hasSomeSelections()}\n />\n <div className='btn-group drop-right px-2 ps-sm-0 ps-md-2'>\n <DivButton\n onClick={getVideosBulkActions}\n className={`btn btn-outline-dark dropdown-toggle ${CheckboxHelper.hasSomeSelections() ? '' : 'disabled'}`}\n id='my-videos-action'\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n >\n <Text namespace={namespace} phrase='options' />\n </DivButton>\n <div\n className='dropdown-menu dropdown-menu-end dropdown-menu-right'\n aria-labelledby='my-videos-action'\n >\n {actions.length && (\n actions.map(action => {\n return (\n <DivButton\n key={action.label as string}\n className={`dropdown-item ${action.className}`}\n onClick={() => handleVideoAction(action)}\n >\n {action.label as string}\n </DivButton>\n );\n })\n )}\n </div>\n </div>\n </>\n )}\n {props.allowFilter && (\n <div className='border-start'>\n <TypeButton type='video' typeFilter={props.typeFilter} appLink={props.getAppLink()} />\n <TypeButton type='interactive' typeFilter={props.typeFilter} appLink={props.getAppLink()} />\n <TypeButton type='clip' typeFilter={props.typeFilter} appLink={props.getAppLink()} />\n </div>\n )}\n </div>\n </>\n );\n}\n\ninterface TypeButtonProps {\n type: SearchIndices;\n typeFilter: SearchIndices[];\n appLink: Core.AppLink;\n}\n\nfunction TypeButton(props: TypeButtonProps): JSX.Element {\n const selected = props.typeFilter.includes(props.type);\n\n const currentAppLink = props.appLink;\n const currentParams = currentAppLink.params as HashObject;\n\n let newType: SearchIndices[];\n\n if (selected)\n newType = props.typeFilter.filter(t => t !== props.type);\n else\n newType = [ ...props.typeFilter, props.type ];\n\n const newAppLink = {\n ...currentAppLink,\n params: {\n ...currentParams,\n type: newType\n }\n };\n\n function getTypePhrase(): string {\n if (props.type === 'video') return 'videos';\n if (props.type === 'clip') return 'clips';\n if (props.type === 'interactive') return 'interactives';\n }\n\n return (\n <AppLink\n className={`ms-2 btn ${selected ? 'btn-dark' : 'btn-outline-dark'}`}\n appLink={newAppLink}\n >\n <Text namespace={namespace} phrase={getTypePhrase()} />\n </AppLink>\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\n/**\n * Hook used to listen to updates on a Backbone Collection\n * and trigger a re-render.\n */\nexport function useGetCollectionItems<T>(\n getCollection: () => Core.Collection,\n onRemove?: () => void,\n dependencies: React.DependencyList = []\n): T[] {\n const [ , setUpdate ] = React.useState(false);\n\n React.useEffect(() => {\n const collection = getCollection();\n\n if (!collection)\n return;\n\n collection.off('add remove change');\n collection.on('add remove change', () => {\n setUpdate(s => !s);\n });\n if (onRemove)\n collection.on('remove', onRemove);\n return () => { collection.off('add remove change'); };\n }, dependencies);\n\n return getCollection()?.toJSON();\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { BaseObject, MasterNestedObject } from 'libs/shared/interfaces';\nimport { BaseTree } from 'libs/shared/interfaces';\n\nfunction _find<T extends BaseTree<BaseObject>>(\n node: T,\n id: string | number,\n parents: T[]\n): [ T | null, T[] ] {\n if (TextHelper.isEqual(node.id, id))\n return [ node, parents ];\n\n const children = node.children;\n\n if (!children || !children.length)\n return [ null, null ];\n\n for (let i = 0; i < children.length; i++) {\n const [ child, foundParents ] = _find(children[i] as T, id, [ ...parents, node ]);\n\n if (child)\n return [ child, foundParents ];\n }\n\n return [ null, null ];\n}\n\nexport const DEFAULT_MAX_DEPTH = 7;\n\nexport const TreeHelper = {\n find<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T | null {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [child] = _find(tree.children[j] as T, id, []);\n \n if (child)\n return child;\n }\n },\n\n getPath<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T[] {\n if (!tree || !tree.children || !tree.children.length)\n return;\n\n for (let j = 0; j < tree.children.length; j++) {\n const [ , path ] = _find(tree.children[j] as T, id, []);\n \n if (path?.length)\n return path;\n }\n },\n\n getParent<T extends BaseTree<BaseObject>>(tree: T, id: string | number): T {\n const path = TreeHelper.getPath(tree, id);\n\n if (!path?.length)\n return null;\n\n return path[path.length - 1];\n },\n\n convertNestedObjectToTree<T extends BaseObject>(nestedObject: MasterNestedObject<T>): BaseTree<T> {\n const node: BaseTree<T> = {\n ...nestedObject.data,\n children: nestedObject.children\n };\n\n if (node.children?.length)\n node.children = node.children.map(TreeHelper.convertNestedObjectToTree);\n\n return node;\n },\n\n findDepth<T extends MasterNestedObject<BaseObject>>(nodes: T[], targetId: string, currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return 0;\n }\n\n let depth = 0;\n\n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return currentDepth;\n }\n\n const childDepth = TreeHelper.findDepth(node.children, targetId, currentDepth + 1);\n\n if (childDepth > 0) {\n depth = childDepth;\n break;\n }\n }\n\n return depth;\n },\n\n findMaxChildDepth<T extends BaseObject>(nodes: MasterNestedObject<T>[], currentDepth: number = 0): number {\n if (!nodes || nodes.length === 0) {\n return currentDepth;\n }\n \n let deepestLevel = currentDepth;\n \n for (const node of nodes) {\n const childLevel = TreeHelper.findMaxChildDepth(node.children, currentDepth + 1);\n deepestLevel = Math.max(deepestLevel, childLevel);\n }\n \n return deepestLevel;\n },\n\n findTargetNode<T extends BaseObject>(nodes: MasterNestedObject<T>[], targetId: string): MasterNestedObject<T> | null {\n if (!nodes || nodes.length === 0) {\n return null;\n }\n \n for (const node of nodes) {\n if (node.data?.id?.toString() === targetId.toString()) {\n return node;\n }\n \n const result = TreeHelper.findTargetNode(node.children, targetId);\n if (result !== null) {\n return result;\n }\n }\n \n return null;\n },\n\n isMaxDepth<T extends MasterNestedObject<BaseObject>>(\n nodes: T[],\n sourceId: string,\n targetId: string,\n maxDepth: number = DEFAULT_MAX_DEPTH\n ): boolean {\n const sourceTree = TreeHelper.findTargetNode(nodes, sourceId);\n const maxChildDepth = TreeHelper.findMaxChildDepth(sourceTree.children);\n const targetDepth = TreeHelper.findDepth(nodes, targetId);\n \n return maxChildDepth + targetDepth >= maxDepth;\n },\n\n flatten<T>(\n tree: BaseTree<T>\n ): T[] {\n if (!tree)\n return [];\n\n const nodes: T[] = [];\n\n function pushNode(node: BaseTree<T>): void {\n nodes.push(ObjectHelper.omit(node, ['children']));\n node.children.forEach(pushNode);\n }\n\n tree.children.forEach(pushNode);\n\n return nodes;\n }\n};","import { Flight } from 'libs/common/flight';\n\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { SelectAllPagesResult, useSelectAllPages } from 'libs/shared/hooks/UseSelectAllPages';\nimport { Folder } from 'libs/shared/interfaces';\n\nexport function useFetchAllChildFolders(parentId?: string): SelectAllPagesResult<Folder> {\n const fetch = Flight.useGetFetch();\n\n function getRequest(cursor?: string): Flight.Request {\n return LibraryRequests.childFolders(parentId, cursor);\n }\n \n function fetchNext(cursor?: string): void {\n fetch(getRequest(cursor));\n }\n\n useFetchAll(!!parentId && getRequest, !!parentId && fetchNext);\n\n return (useSelectAllPages<Folder>(!!parentId && ((cursor?: string) => getRequest(cursor).key)));\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\n\nimport { AddFolderRequest } from 'apps/my-videos/interfaces/requests/AddFolderRequest';\nimport { AddToExchangeRequest } from 'apps/my-videos/interfaces/requests/AddToExchangeRequest';\nimport { MoveFolderRequest } from 'apps/my-videos/interfaces/requests/MoveFolderRequest';\nimport { MoveVideoRequest } from 'apps/my-videos/interfaces/requests/MoveVideoRequest';\n\nexport const MyVideosRequests = {\n videos(id: string, cursor?: string, typeFilter?: SearchIndices | SearchIndices[]): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const videoQuery = `videos[${VIDEO_COLLECTION}]{libraries.typeid:${MasterType.WorkspaceCollection}}`;\n const clipQuery = `clips[${CLIP_COLLECTION}]{status:${CurationStatus.Published}}`;\n const interactiveQuery = `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`;\n\n const query = [];\n if (typeFilter?.length) {\n if (typeFilter.includes('video'))\n query.push(videoQuery);\n if (typeFilter.includes('clip'))\n query.push(clipQuery);\n if (typeFilter.includes('interactive'))\n query.push(interactiveQuery);\n } else {\n query.push(videoQuery, clipQuery, interactiveQuery);\n }\n\n const params: HashObject = {\n query: `(${query.join('|')}){orderbydesc:timestamp}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}/members`, params),\n key: `my:videos:${id}:${cursor}${typeFilter ? `:${Array.isArray(typeFilter) ? typeFilter.join(':') : typeFilter}` : ''}`\n };\n },\n\n workspaceWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['workspace'],\n maxCategoryDepth: 6\n }),\n key: 'workspace:folders',\n normalize: false\n };\n },\n\n exchangeWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['exchange'],\n maxCategoryDepth: 5\n }),\n key: 'exchange:folders',\n normalize: false\n };\n },\n\n addFolder(data: AddFolderRequest): Flight.Request {\n // TODO: Need to stop using domain\n let url = `/api/domain/v2/collections/${data.collectionId}/categories`;\n\n if (data.parentCategoryId)\n url = UrlHelper.urlBuilder(url, { parentCategoryId: data.parentCategoryId });\n\n return {\n url,\n key: 'add:folder',\n type: HttpVerbs.POST,\n data: { name: data.name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n deleteFolder(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'delete:folder',\n type: HttpVerbs.DELETE,\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n moveFolder(data: MoveFolderRequest): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: '/api/domain/v2/objects/move',\n key: 'move:folder',\n type: HttpVerbs.POST,\n data: {\n assocType: 'has',\n newCollectionId: data.newFolderId,\n oldCollectionId: data.oldFolderId,\n objectIds: [data.moveFolderId]\n },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n updateFolder(id: string, name: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'rename:folder',\n type: HttpVerbs.PUT,\n data: { name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n videoFolders(videoId: string, libraryId: string): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: `/api/domain/v2/objects/${videoId}/categories?query=libraries{id:${libraryId}}`,\n key: `video:folders:${videoId}`\n };\n },\n\n moveVideo(request: MoveVideoRequest): Flight.Request {\n const data: HashObject = {\n newCollectionId: request.newFolderId,\n oldCollectionId: request.oldFolderId,\n objectIds: request.videoId\n };\n\n return {\n url: '/api/domain/v3/objects/move',\n key: `move:folder:${data.objectIds.join(',')}`,\n type: HttpVerbs.POST,\n data,\n invalidationKeys: ['video']\n };\n },\n\n addToExchange(data: AddToExchangeRequest): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/videos/exchange',\n key: 'add:to:exchange',\n type: HttpVerbs.POST,\n data\n };\n }\n};","\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { BaseTree, Folder, Library, LibraryTree, VideoTypes } from 'libs/shared/interfaces';\nimport { DEFAULT_MAX_DEPTH, TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MyVideosRequests } from 'apps/my-videos/flight-requests/MyVideosRequests';\n\nconst namespace = 'myVideos.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useDragDropMove() {\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const categoriesRequest = MyVideosRequests.workspaceWithCategories();\n const workspaceFolders = Flight.useGetResponse<LibraryTree[]>(categoriesRequest.key);\n\n async function handleDragEnd(event: DragEndEvent, source: Folder) {\n const dragged = event.active?.data.current;\n const destination = event.over?.data.current;\n\n if (!destination || dragged.id === destination.id) return;\n \n if (dragged.typeId === MasterType.Category) {\n moveFolders(dragged, destination);\n return;\n }\n\n moveVideos(dragged, destination, source);\n }\n\n async function moveFolders(dragged: Folder, destination: Folder) {\n let folders = workspaceFolders.data;\n\n if (workspaceFolders.shouldFetch)\n folders = await fetchAsync(categoriesRequest);\n\n if (TreeHelper.isMaxDepth(folders, dragged.id, destination.id)) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MAX_FOLDER_DEPTH,\n args: [DEFAULT_MAX_DEPTH]\n });\n return;\n }\n\n const rootBranches: BaseTree<Library> = {\n children: folders.map(TreeHelper.convertNestedObjectToTree)\n };\n\n const parent = TreeHelper.getParent(rootBranches, dragged.id);\n\n try {\n await fetchAsync(MyVideosRequests.moveFolder({\n moveFolderId: dragged.id,\n newFolderId: destination.id,\n oldFolderId: parent?.id\n }));\n alerts.success({\n type: AlertType.Success,\n heading: getPhrase('moveFolderSuccessHeading'),\n message: getPhrase('moveFolderSuccess', { folder: dragged.name, toFolder: destination.name, escapeText: true }),\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ destination.id, destination.name ]\n },\n appLinkText: getPhrase('goToFolder', { folder: destination.name, escapeText: true }),\n appLinkClassName: 'text-blue'\n });\n } catch {\n alerts.error(getPhrase('error'));\n }\n }\n\n async function moveVideos(dragged: VideoTypes | string[], destination: Folder, source: Folder) {\n try {\n await fetchAsync(MyVideosRequests.moveVideo({\n newFolderId: destination.id,\n oldFolderId: source.id,\n videoId: Array.isArray(dragged) ? dragged : [dragged.id]\n }));\n if (Array.isArray(dragged)) {\n alerts.success({\n type: AlertType.Success,\n heading: getPhrase('moveVideosSucccessHeading'),\n message: getPhrase(\n 'moveVideosSuccess',\n { count: dragged.length, fromFolder: source.name, toFolder: destination.name, escapeText: true }\n ),\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ destination.id, destination.name ]\n },\n appLinkText: getPhrase('goToFolder', { folder: destination.name, escapeText: true }),\n appLinkClassName: 'text-blue'\n });\n } else {\n alerts.success(\n {\n type: AlertType.Success,\n heading: getPhrase('moveVideoSucccessHeading'),\n message: getPhrase('moveVideoSuccess', { video: dragged.name, fromFolder: source.name, toFolder: destination.name, escapeText: true }),\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ destination.id, destination.name ]\n },\n appLinkText: getPhrase('goToFolder', { folder: destination.name, escapeText: true }),\n appLinkClassName: 'text-blue'\n }\n );\n }\n } catch {\n alerts.error(getPhrase('error'));\n }\n }\n\n return {\n handleDragEnd\n };\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { Services } from 'shared/constants/Services';\n\nimport { useGetUploadingItems } from 'apps/upload/hooks/useGetUploadingItems';\nimport { CombinedUploadStatus } from 'apps/upload/services/CombinedUploadsStatus';\nimport { CombinedUpload, CombineUploadsService } from 'apps/upload/services/CombineUploadsService';\n\ninterface UseDisplayUploadsOptions {\n onRemove: () => void;\n categoryId?: number;\n}\n\nexport function useUploadItems(options: UseDisplayUploadsOptions) {\n const { hasPermissions } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const canUpload = hasPermissions(PermissionName.UploadVideo);\n\n /**\n * Get reference to the combined service even though useGetUploadingItems does it too\n * so that we can provide the callbacks\n */\n const combinedUploadService = useInstanceSafe<CombineUploadsService>(\n canUpload &&\n Services.CombineUploads\n );\n\n /**\n * Only allow callback to fetch if all required user data is loaded\n */\n let uploadingVideos = useGetUploadingItems(canUpload, () => {\n currentUser.data && options.onRemove();\n }, [currentUser.data]);\n\n uploadingVideos = uploadingVideos?.filter(video => {\n if (!options.categoryId)\n return !video.categoryId;\n\n return video.categoryId === options.categoryId;\n });\n\n /**\n * Using React.useCallback because this component will render\n * every time a chunk is loaded and every time the pending items\n * is fetched\n */\n const onClickDelete = React.useCallback((item: CombinedUpload) => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.UPLOAD,\n action: Actions.Upload.CANCEL_UPLOAD,\n args: [item.id],\n params: {\n name: item.name,\n status: item.status\n }\n });\n }, []);\n\n const onClickAlternate = React.useCallback((item: CombinedUpload) => {\n switch (item.status) {\n case CombinedUploadStatus.Errored:\n combinedUploadService.retryItem(item);\n return;\n case CombinedUploadStatus.Processing:\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.EDIT_VIDEO,\n args: [item.videoId]\n });\n return;\n case CombinedUploadStatus.Uploading:\n combinedUploadService.editUpload(item);\n break;\n default:\n // This should never happen\n }\n }, []);\n\n const processingIds = uploadingVideos?.reduce((prev: any, current) => {\n prev[current.videoId] = true;\n return prev;\n }, {});\n\n return {\n uploadingVideos,\n onClickAlternate,\n onClickDelete,\n processingIds\n };\n}","import React from 'react';\n\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { useGetCollectionItems } from 'libs/shared/hooks/UseGetCollectionItems';\n\nimport { CombinedUpload, CombineUploadsService } from '../services/CombineUploadsService';\n\nexport function useGetUploadingItems(\n canUpload: boolean,\n onRemove: () => void,\n dependencies: React.DependencyList\n): CombinedUpload[] {\n const combineUploadsService = useInstanceSafe<CombineUploadsService>(canUpload && 'combine:uploads:service');\n\n const getCollection = () => canUpload ? combineUploadsService?.getCollection() : null;\n\n return useGetCollectionItems(getCollection, onRemove, dependencies);\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Folder } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myVideos.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n/**\n * This is a hook, just to make modifying this function to fetch data easier in the future.\n * It also adheres to the paradigm we have with all our video actions - Sha\n */\nexport function useGetFolderActions(): (location: 'folder' | 'page', folder: Folder) => ActionOptions[] {\n return (location, folder) => {\n const analyticsData = { id: folder.id, name: folder.name };\n const analyticsOptions = {\n entity: EntityType.Folder,\n location: location === 'folder' ? LocationContext.SubFolderList : LocationContext.MyVideos,\n workflowPhase: WorkflowPhase.Start\n };\n\n return [\n {\n label: getPhrase('addSubfolder'),\n button: location === 'page',\n className: location === 'page' ? 'btn btn-outline-dark me-2' : undefined,\n svgName: location === 'page' ? cvSvgLibrary.Plus : undefined,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.ADD_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Create\n }\n },\n {\n label: getPhrase('moveFolder'),\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MOVE_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Move\n }\n },\n {\n label: getPhrase('renameFolder'),\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.RENAME_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Rename\n }\n },\n {\n label: getPhrase('removeFolder'),\n className: 'text-danger',\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.DELETE_FOLDER,\n args: [folder.id]\n },\n analyticsData,\n analyticsOptions: {\n ...analyticsOptions,\n actionType: UserAction.Delete\n }\n }\n ];\n };\n}","import { EntityType } from 'libs/analytics/interfaces';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nexport const AnalyticsTypeHelper = {\n mapTypeId(typeId: MasterType): EntityType {\n switch (typeId) {\n case MasterType.Video:\n return EntityType.Video;\n case MasterType.Clip:\n return EntityType.Clip;\n case MasterType.Interactive:\n return EntityType.Interactive;\n default:\n return null;\n }\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AddToExchangeDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { VideoActionsOptions } from 'libs/shared/context/VideoActionsContext';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { AnalyticsTypeHelper } from 'libs/shared/utils/AnalyticsTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\n\nimport { useHasExchange } from 'apps/my-videos/hooks/useHasExchange';\n\nconst namespace = 'default.myVideos';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getMovePhrase(video: VideoTypes): string {\n if (VideoHelper.isInteractive(video))\n return getPhrase('moveInteractive');\n\n if (VideoHelper.isClip(video))\n return getPhrase('moveClip');\n\n return getPhrase('moveVideo');\n}\n\nexport function useMyVideosViewBulkActions(\n libraryId: string,\n categoryId: string\n): (videoIds: string[]) => ActionOptions[] {\n return (videoIds: string[]) => {\n return [{\n label: getPhrase('moveVideo'),\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MOVE_VIDEO,\n params: { ids: videoIds }\n },\n analyticsData: {\n ids: videoIds\n },\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Move,\n location: LocationContext.VideoListItem,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n label: getPhrase('delete'),\n button: false,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.DELETE_VIDEO,\n params: { ids: videoIds, libraryId, categoryId }\n },\n className: 'btn btn-link text-danger',\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Delete,\n location: LocationContext.VideoList,\n workflowPhase: WorkflowPhase.Start\n },\n analyticsData: { ids: videoIds }\n }];\n };\n}\n\nexport function useMyVideosViewActions() {\n const { myVideosFolders } = useSettings(null);\n const hasExchange = useHasExchange();\n\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n const getVideoActions = (video: VideoTypes, options?: VideoActionsOptions) => {\n const { canConsume } = VideoHelper.getCanBeConsumed(video);\n\n /**\n * Where a user has a video they can no longer be access, we will allow them to remove it.\n */\n if (!canConsume) {\n return [{\n label: getPhrase('delete'),\n button: false,\n svgName: cvSvgLibrary.Delete,\n appLink: {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.DELETE_VIDEO,\n params: { ids: [video.id]}\n },\n className: 'btn btn-link text-danger',\n analyticsOptions: {\n entity: EntityType.Video,\n actionType: UserAction.Delete,\n location: LocationContext.VideoListItem,\n workflowPhase: WorkflowPhase.Start\n },\n analyticsData: {\n id: video.id\n }\n }];\n }\n\n const actions = videoActions.getVideoActions(video, options);\n\n if (myVideosFolders) {\n actions.push({\n order: 67,\n label: getMovePhrase(video),\n svgName: cvSvgLibrary.Move,\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MOVE_VIDEO,\n params: { ids: [video.id]}\n },\n analyticsData: {\n id: video.id\n },\n analyticsOptions: {\n entity: AnalyticsTypeHelper.mapTypeId(video.typeId),\n actionType: UserAction.Move,\n location: LocationContext.VideoListItem,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'edit'\n });\n\n if (VideoHelper.isVideo(video) && hasExchange) {\n actions.push({\n order: 63,\n label: getPhrase('contribute'),\n svgName: cvSvgLibrary.Upload,\n button: false,\n appLink: {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.ADD_TO_EXCHANGE,\n args: [video.id]\n },\n analyticsData: {\n id: video.id\n },\n analyticsOptions: {\n entity: AnalyticsTypeHelper.mapTypeId(video.typeId),\n actionType: UserAction.Create,\n location: LocationContext.VideoListItem,\n workflowPhase: WorkflowPhase.Start,\n descriptor: AddToExchangeDescriptor.AddToExchange\n },\n group: 'add'\n });\n }\n }\n\n return actions;\n };\n\n return {\n ...videoActions,\n getVideoActions\n };\n}","import { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nexport function useHasExchange(): boolean {\n const { hasProduct } = useProducts();\n const { exchangeTvProductOption } = useSettings(null);\n const { hasPermissions } = usePermissions();\n\n if (!hasProduct(ProductId.Exchange))\n return false;\n\n if (exchangeTvProductOption !== 'exchange' && exchangeTvProductOption !== 'exchange_and_tv')\n return false;\n\n if (!hasPermissions(PermissionName.Exchange))\n return false;\n\n return true;\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'default.myVideosEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MyVideosEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS} altText={getPhrase('info')} />\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function MyVideosPublicEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS_PUBLIC} altText={getPhrase('publicInfo')} />\n <EmptyState.Heading><Text phrase='publicHeading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='publicInfo' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'publicCta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.MyVideoLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import * as React from 'react';\nimport { Col, ProgressBar, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { CombinedUploadStatus } from 'apps/upload/services/CombinedUploadsStatus';\nimport { CombinedUpload } from 'apps/upload/services/CombineUploadsService';\n\nconst namespace = 'upload.uploadingItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(status: CombinedUploadStatus): string {\n switch (status) {\n case CombinedUploadStatus.Uploading:\n return 'text-success';\n case CombinedUploadStatus.Processing:\n return 'text-info';\n case CombinedUploadStatus.Errored:\n return 'text-danger';\n }\n}\n\nfunction getVariant(status: CombinedUploadStatus): 'success' | 'info' | 'danger' {\n switch (status) {\n case CombinedUploadStatus.Uploading:\n return 'success';\n case CombinedUploadStatus.Processing:\n return 'info';\n case CombinedUploadStatus.Errored:\n return 'danger';\n }\n}\n\nfunction getProgressText(status: CombinedUploadStatus, progress: number): string | JSX.Element {\n const rounded = Math.round(progress) || 0;\n\n switch (status) {\n case CombinedUploadStatus.Uploading:\n return `${getPhrase('uploading')} ${rounded}%`;\n\n case CombinedUploadStatus.Processing:\n if (rounded === 0)\n return <em>{getPhrase('waitingToBeProcessed')}</em>;\n return <em>{getPhrase('processing')} {rounded}%</em>;\n\n case CombinedUploadStatus.Errored:\n return getPhrase('error');\n }\n}\n\ninterface UploadingItemProps {\n item: CombinedUpload;\n allowBulkAction?: boolean;\n onClickDelete: (item: CombinedUpload) => void;\n onClickAlternate: (item: CombinedUpload) => void;\n}\n\nexport function UploadingItem(props: UploadingItemProps): JSX.Element {\n const { status, progress, name } = props.item;\n\n const breakpoints = useBreakpoints();\n const size = VideoListHelper.getSize(breakpoints, 'md');\n const isSmall = size === 'sm';\n\n /**\n * We're using React.useCallback here because this view\n * will get re-rendered many times by it's parent during\n * an upload\n */\n const onClickAlternate = React.useCallback(() => {\n props.onClickAlternate(props.item);\n }, [props.item.status]);\n\n const onClickDelete = React.useCallback(() => {\n props.onClickDelete(props.item);\n }, []);\n\n let appLink: Core.AppLink = null;\n if (props.item.video?.status === CurationStatus.Published) {\n appLink = {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ props.item.videoId, TextHelper.slugify(props.item.video.name) ]\n };\n }\n \n return (\n <div className='d-flex flex-row'>\n {props.allowBulkAction && <div className='form-check pe-2 mx-2' />}\n <Row className={`${isSmall ? '' : 'py-2'} g-0 flex-grow-1`}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-2` : 'mb-1 px-2'}`}>\n <div className={`position-relative overflow-hidden ${isSmall ? 'rounded' : 'rounded-3'}`}>\n <AppLink appLink={appLink}>\n <BaseImage\n data={props.item.thumbnailUrl ?? ''}\n imageType={ImageType.Thumbnails}\n imageOptions={{ size: ImageSize.Medium }}\n >\n <ImageFallback type={ImageFallbackType.Video} />\n </BaseImage>\n </AppLink>\n </div>\n </Col>\n <Col {...VideoListHelper.getDetailsColumns()} className={isSmall ? 'pb-2' : 'px-2'}>\n <AppLink appLink={appLink}>\n <h5 className='m-0 pb-1'>{name}</h5>\n </AppLink>\n <span className={getClassName(status)}>{getProgressText(status, progress)}</span>\n <div className='d-flex'>\n <ProgressBar className='flex-grow-1 align-self-center' variant={getVariant(status)} now={progress} />\n <SvgContainer\n className='svg-container cursor-pointer ms-2'\n svgName={status === CombinedUploadStatus.Errored ? cvSvgLibrary.Retry : cvSvgLibrary.Edit}\n onClick={onClickAlternate}\n />\n <SvgContainer\n className='svg-container cursor-pointer ms-2'\n svgName={cvSvgLibrary.Delete}\n onClick={onClickDelete}\n />\n </div>\n </Col>\n </Row>\n </div>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"dragOverlay\":\"ry0mg\",\"dragThumbnail\":\"soAvD\"};","import React from 'react';\n\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Folder, VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './drag-drop-overlay.scss';\n\nconst namespace = 'shared.dragDropOverlay';\n\ninterface DragDropMoveOverlayProps {\n activeDragData: Folder | VideoTypes | string[];\n}\n\nexport function DragDropOverlay(props: DragDropMoveOverlayProps) {\n const { activeDragData } = props;\n\n return (\n <div className={`${styles.dragOverlay} position-relative`}>\n <div className='position-absolute top-0 start-50 ms-n2 bg-white shadow p-2 rounded-3 font-size-md mw-100'>\n {Array.isArray(activeDragData) ? (\n <div className='d-flex fw-semibold'>\n <div className='me-1'>\n <SvgContainer svgName={cvSvgLibrary.Video} />\n </div>\n <Text namespace={namespace} phrase='bulkVideos' options={{ length: activeDragData.length }} />\n </div>\n ) : (\n <div className='d-flex'>\n {activeDragData.typeId === MasterType.Category ? (\n <div className='me-1'>\n <SvgContainer svgName={cvSvgLibrary.Folder} />\n </div>\n ) : (\n <LazyImage\n src={VideoHelper.getThumbnail(activeDragData)?.url}\n alt={activeDragData.name}\n className={`${styles.dragThumbnail} partial-loading-background rounded me-2`}\n />\n )}\n <span className='fw-semibold text-truncate'>{activeDragData.name}</span>\n </div>\n )}\n </div>\n </div>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { cloneElement } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { map } from './ElementChildren';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst ROUND_PRECISION = 1000;\n\n/**\n * Validate that children, if any, are instances of `ProgressBar`.\n */\nfunction onlyProgressBar(props, propName, componentName) {\n const children = props[propName];\n if (!children) {\n return null;\n }\n let error = null;\n React.Children.forEach(children, child => {\n if (error) {\n return;\n }\n\n /**\n * Compare types in a way that works with libraries that patch and proxy\n * components like react-hot-loader.\n *\n * see https://github.com/gaearon/react-hot-loader#checking-element-types\n */\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const element = /*#__PURE__*/_jsx(ProgressBar, {});\n if (child.type === element.type) return;\n const childType = child.type;\n const childIdentifier = /*#__PURE__*/React.isValidElement(child) ? childType.displayName || childType.name || childType : child;\n error = new Error(`Children of ${componentName} can contain only ProgressBar ` + `components. Found ${childIdentifier}.`);\n });\n return error;\n}\nfunction getPercentage(now, min, max) {\n const percentage = (now - min) / (max - min) * 100;\n return Math.round(percentage * ROUND_PRECISION) / ROUND_PRECISION;\n}\nfunction renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n className,\n style,\n variant,\n bsPrefix,\n ...props\n}, ref) {\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...props,\n role: \"progressbar\",\n className: classNames(className, `${bsPrefix}-bar`, {\n [`bg-${variant}`]: variant,\n [`${bsPrefix}-bar-animated`]: animated,\n [`${bsPrefix}-bar-striped`]: animated || striped\n }),\n style: {\n width: `${getPercentage(now, min, max)}%`,\n ...style\n },\n \"aria-valuenow\": now,\n \"aria-valuemin\": min,\n \"aria-valuemax\": max,\n children: visuallyHidden ? /*#__PURE__*/_jsx(\"span\", {\n className: \"visually-hidden\",\n children: label\n }) : label\n });\n}\nconst ProgressBar = /*#__PURE__*/React.forwardRef(({\n isChild = false,\n ...rest\n}, ref) => {\n const props = {\n min: 0,\n max: 100,\n animated: false,\n visuallyHidden: false,\n striped: false,\n ...rest\n };\n props.bsPrefix = useBootstrapPrefix(props.bsPrefix, 'progress');\n if (isChild) {\n return renderProgressBar(props, ref);\n }\n const {\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant,\n className,\n children,\n ...wrapperProps\n } = props;\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...wrapperProps,\n className: classNames(className, bsPrefix),\n children: children ? map(children, child => /*#__PURE__*/cloneElement(child, {\n isChild: true\n })) : renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant\n }, ref)\n });\n});\nProgressBar.displayName = 'ProgressBar';\nexport default ProgressBar;","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;"],"names":["getDirectionClass","direction","Caret","props","SvgContainer","svgName","className","defaultProps","DragDropMoveContext","activeDragData","setActiveDragData","DragOverlayComponent","dragOverlayComponent","mouseSensor","activationConstraint","distance","sensors","onDragEnd","event","handleDragEnd","source","onDragStart","active","data","current","handleDragStart","collisionDetection","children","dropAnimation","modifiers","zIndex","LibraryFolder","thumbnailUrl","folder","thumbnail","UrlHelper","url","size","actions","getFolderActions","DragDropMoveWrapper","draggable","drag","id","droppable","drop","dropStye","dragStyle","AppLink","appLink","getAppLink","title","name","BaseImage","imageType","imageClassName","ImageFallback","type","extraClasses","length","Actions","actionsDropdownClassName","dropdownToggleSvgSize","namespace","EXPANDED_FOLDERS_KEY","FolderList","breakpoints","LocalStorageHelper","_hasExpandedFolders","setHasExpandedFolders","hasExpandedFolders","expandFolders","folderLimit","useBreakpoints","xxl","xl","lg","md","onToggleFolderView","displayableFolders","folders","slice","canToggleCollapsedView","showHeading","DivButton","onClick","Text","phrase","options","count","extraButtons","map","f","key","PartialFolder","PartialFolderList","Array","fill","_","i","PartialVideoList","numVideos","allowBulkActions","PartialVideoItem","isSmall","VideoListHelper","withDragHandle","withReordering","xs","Row","Col","VideoListActions","CheckboxHelper","checkboxHelper","setActions","allowBulkAction","checked","bulkChecked","onChange","onToggleBulk","indeterminate","hasSomeSelections","getVideosBulkAction","getSelected","action","label","analyticsData","analyticsOptions","handleVideoAction","allowFilter","TypeButton","typeFilter","newType","selected","includes","currentAppLink","currentParams","params","filter","t","newAppLink","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","useGetCollectionItems","getCollection","onRemove","dependencies","setUpdate","collection","off","on","s","toJSON","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","isArray","useEffect","forEach","useBulkCheckboxManager","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","clear","isChecked","item","toString","get","isBulkChecked","every","setSelected","ids","set","preselectedIds","setValue","onToggleItem","nextItemState","from","keys","deselectAll","find","getSelectedCount","getMap","usePrevious","value","ref","_find","node","parents","child","foundParents","DEFAULT_MAX_DEPTH","TreeHelper","tree","j","getPath","path","getParent","convertNestedObjectToTree","nestedObject","findDepth","nodes","targetId","currentDepth","depth","childDepth","findMaxChildDepth","deepestLevel","childLevel","Math","max","findTargetNode","result","isMaxDepth","sourceId","maxDepth","sourceTree","flatten","pushNode","push","useFetchAllChildFolders","parentId","fetch","getRequest","cursor","MyVideosRequests","videos","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","videoQuery","clipQuery","interactiveQuery","query","permissionFilterOption","workspaceWithCategories","maxCategoryDepth","normalize","exchangeWithCategories","addFolder","collectionId","parentCategoryId","invalidationKeys","deleteFolder","moveFolder","assocType","newCollectionId","newFolderId","oldCollectionId","oldFolderId","objectIds","moveFolderId","updateFolder","videoFolders","videoId","libraryId","moveVideo","request","addToExchange","getPhrase","useDragDropMove","alerts","fetchAsync","categoriesRequest","workspaceFolders","moveFolders","dragged","destination","shouldFetch","application","args","rootBranches","parent","success","heading","message","toFolder","escapeText","appLinkText","appLinkClassName","error","moveVideos","fromFolder","video","over","typeId","useUploadItems","hasPermissions","usePermissions","currentUser","UserRequests","canUpload","PermissionName","combinedUploadService","Services","uploadingVideos","combineUploadsService","useGetUploadingItems","categoryId","onClickDelete","onClickAlternate","retryItem","editUpload","processingIds","reduce","prev","useGetFolderActions","location","entity","workflowPhase","button","undefined","actionType","AnalyticsTypeHelper","mapTypeId","MasterType","LanguageService","getMovePhrase","VideoHelper","useMyVideosViewBulkActions","videoIds","useMyVideosViewActions","hasProduct","exchangeTvProductOption","myVideosFolders","useSettings","hasExchange","ProductId","videoActions","useVideoActions","getVideoActions","canConsume","order","group","descriptor","AddToExchange","MyVideosEmptyState","src","altText","MyVideosPublicEmptyState","text","SignUp","getClassName","getVariant","UploadingItem","progress","imageOptions","rounded","round","getProgressText","variant","now","DragDropOverlay","LazyImage","alt","usePresentationAudiences","redirectOnError","activePresentation","getFallbackPresentation","presentation","ROUND_PRECISION","getPercentage","min","percentage","renderProgressBar","visuallyHidden","striped","animated","style","bsPrefix","role","width","ProgressBar","isChild","rest","wrapperProps","cloneElement","displayName","as","Component","decoratedBsPrefix","minBreakpoint","sizePrefix","classes","brkPoint","propValue","cols","infix"],"sourceRoot":""}
|