{"version":3,"file":"static/js/application.async.landing~86378a44.dd9d2fc2.chunk.js","mappings":"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","sources":["../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/video-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/hollow-sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/black-sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/info-sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/squareDismiss-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/spinnerBase-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/constants.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/filter-type.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-asset-type-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-time-description.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/convert-time-duration.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-date-added-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-import-source-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-image-sorting-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-asset-source-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/edit-image-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/AI-prompt-example/sample.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/merge-task-updates.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/use-clarity-hook.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-asset-entry-card/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-asset-entry-card/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-panel-container/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-spinner/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-action-button-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-action-button.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/theme/ads-studio-theme-provider.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/theme/with-ads-studio-styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-overlay-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-overlay.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-card-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-card.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-decorative-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-decorative-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-decorative-label.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-decorative-label.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-deletion-button-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-deletion-button-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-image.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-image.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-selection-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-selection-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-loading-cell.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-icon-component/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-icon-component/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-drag-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-drag-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-drop-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-drop-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/default-grid-config.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/tiles-grid.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/multi-selection-grid.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/section-tiles-grid-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/section-tiles-grid.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/text-with-highlight/styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/text-with-highlight/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/shared-cell-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/folders-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/folders-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-assets-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-assets-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/grid-cell-factory.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/date-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/upload-asset-limit-error.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/image-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/video-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/get-error-string.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/processor-util.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/upload-asset-error.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/folder-functions.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/upload-folder-error.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/task-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/folder-reducer.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/error-handling/ads-studio-error-base.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/error-handling/service-error-processors.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-folders.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-image-repo-methods.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-video-repo-methods.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-ai-generated-images.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/asset-with-folders-data-service.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-folder-path-tree.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/asset-window.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/assets-window-manager.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/assets-reducer-base.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/use-assets-service-base.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/use-basic-assets-services.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/use-edit-image-service.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/use-video-task-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/image-cropping-task-status-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/video-task-status-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/with-asset-task-status-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/video-component/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/video-component/video.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/video-component/video-placeholder.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/video-assets-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/video-assets-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-panel-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/panel-image-grid/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/performance-editing-filter-bar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/view-all-filters-button.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/performance-readonly-filter-bar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/video-playback-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/item-placeholder-box-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-uploading-preview/styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-uploading-preview/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/file-uploading-preivew/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/video-load-preview.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/stock-image-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/invest-image-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/invest-video-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/domain-input-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/subdomain-input-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/useWebsiteImages.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-breadcrumb/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/styles/empty-view-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/empty-view/library-page-empty-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/new-dropdown.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/image-size.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/simple-date-range-picker/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/date-added.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/search-box.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/asset-type.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/sort-by.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/asset-source.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/video-duration.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/import-source.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/video-duration-scrollbar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/filter-toggle.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/date-added-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/context/filter-context.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/filter-bar-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/filter-toggle-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/asset-type-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/search-box-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/sort-by-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/asset-source-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/import-source-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/image-size-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/video-duration-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/filter-bar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/context/filter-provider.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/performance-filter-components.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-path-breadcrumb/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-path-breadcrumb/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/styles/library-page-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/hidden-div-for-announce/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/sections-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/confirm-dialog/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/generate-image/context/generate-image-context.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/generate-image/context/generate-image-context-provider.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/loading-indicator/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/example-image/example-prompt.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/example-image/example-image-list.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/example-image/example-image-cell.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/prompt-editor/prompt-editor.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/object-selection/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-upload-asset.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-validate-asset.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-customized-handler-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-upload-files.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/js-data/init-cc-js-data.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/js-data/with-cc-js-data-context-provider.js"],"sourcesContent":["export const videoIcon = \"data:image/svg+xml,%3Csvg width='14' height='12' viewBox='0 0 14 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 3C1 2.17157 1.67157 1.5 2.5 1.5H8.5C9.32843 1.5 10 2.17157 10 3V9C10 9.82843 9.32843 10.5 8.5 10.5H2.5C1.67157 10.5 1 9.82843 1 9V3ZM2.5 0.5C1.11929 0.5 0 1.61929 0 3V9C0 10.3807 1.11929 11.5 2.5 11.5H8.5C9.88071 11.5 11 10.3807 11 9V8.49943L12.7999 9.84997C13.2943 10.221 14 9.86819 14 9.25008V2.75496C14 2.13743 13.2954 1.78451 12.8009 2.15432L11 3.50093V3C11 1.61929 9.88071 0.5 8.5 0.5H2.5ZM11 4.74959L13 3.25407V8.74993L11 7.24921V4.74959Z' fill='white'/%3E%3C/svg%3E%0A\";\r\n","import React from 'react';\r\n\r\nexport const SparkeSVGIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\n\r\nexport const HollowSparkleSVGIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\n\r\nexport const BlackSparkleSVGIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\n\r\nexport const InfoSparkleSVGIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\nimport squareDismissImage from './squareDismiss.svg';\r\n\r\nexport const SquareDismissIcon = ({ i18n }) => ();\r\n","import React from 'react';\r\nimport spinnerBase from './spinnerBase.svg';\r\n\r\nexport const SpinnerIcon = ({ i18n }) => ();\r\n","import CreateSVGIcon from './ad-studio-create-icon.svg';\r\nimport UploadSVGIcon from './ad-studio-upload-icon.svg';\r\nimport StockSVGIcon from './ad-studio-stock-icon.svg';\r\nimport InvestSVGIcon from './ad-studio-invest-icon.svg';\r\nimport PdfSVGIcon from './ad-studio-pdf-icon.svg';\r\nimport WarningSVGIcon from './ad-studio-warning-icon.svg';\r\nimport CreateManualBrandKitSVGIcon from './ad-studio-create-manual-icon.svg';\r\nimport WebsiteSVGIcon from './ad-studio-website-icon.svg';\r\nimport ImageEmptyViewSVG from './image-page-empty-view-image.svg';\r\nimport LibraryEmptyViewSVG from './library-page-empty-view-image.svg';\r\nimport VideoEmptyViewSVG from './video-page-empty-view-image.svg';\r\nimport AIWarningIconSource from './AIWarningIcon.png';\r\nimport ChooseImageSVG from './choose-image-icon.svg';\r\nimport LogoAssetsSvg from './logo-assets.svg';\r\nimport BrandKitLogoIconSVG from './ad-studio-brandkit-logo-icon.svg';\r\n\r\nexport const EntryCardSVGIcons = {\r\n CreateSVGIcon,\r\n UploadSVGIcon,\r\n StockSVGIcon,\r\n InvestSVGIcon,\r\n PdfSVGIcon,\r\n WebsiteSVGIcon,\r\n WarningSVGIcon,\r\n CreateManualBrandKitSVGIcon,\r\n BrandKitLogoIconSVG,\r\n};\r\n\r\nexport { videoIcon } from './video-icon';\r\nexport { SparkeSVGIcon } from './sparkle-svg-icon';\r\nexport { HollowSparkleSVGIcon } from './hollow-sparkle-svg-icon';\r\nexport { BlackSparkleSVGIcon } from './black-sparkle-svg-icon';\r\nexport { InfoSparkleSVGIcon } from './info-sparkle-svg-icon';\r\nexport { SquareDismissIcon } from './squareDismiss-svg-icon';\r\nexport { SpinnerIcon } from './spinnerBase-svg-icon';\r\n\r\n\r\nexport const AIWarningIcon = AIWarningIconSource;\r\nexport const ChooseImageIcon = ChooseImageSVG;\r\nexport const LogoAssetsIcon = LogoAssetsSvg;\r\n\r\nexport const EmptyViewIcons = {\r\n ImageEmptyViewSVG,\r\n LibraryEmptyViewSVG,\r\n VideoEmptyViewSVG,\r\n};\r\n","export { allowedVideoFileExtensions as supportedVideoExtensions } from '@bingads-webui-campaign-react/upload-file-picker';\r\n\r\nexport const CSMLAdTypeUsage = {\r\n UsedIn: 'Used in',\r\n NotUsedIn: 'Not used in',\r\n};\r\n\r\nexport const CSMLAdType = {\r\n MMA: 'Multimedia ad',\r\n Audience: 'Microsoft Advertising Network',\r\n ImageExtension: 'Image extension',\r\n PMax: 'Performance max',\r\n};\r\n\r\nexport const CSMLSortIcon = {\r\n SortUp: 'SortUp',\r\n SortDown: 'SortDown',\r\n};\r\n\r\nexport const CSMLSortBy = {\r\n ImageName: 'Image name',\r\n ImageNameDesc: 'Image name (Z-A)',\r\n MostRecent: 'Most recent',\r\n MostRecentAsc: 'Most recent asc',\r\n LastCreated: 'Last created',\r\n LastCreatedAsc: 'Last created asc',\r\n TopRated: 'Top rated',\r\n\r\n AssetIdAsc: 'Asset Id Asc',\r\n AssetIdDesc: 'Asset Id Desc',\r\n\r\n ClickAsc: 'Click Asc',\r\n ClickDesc: 'Click Desc',\r\n ClickPeriodAsc: 'Period Click Asc',\r\n ClickPeriodDesc: 'Period Click Desc',\r\n ClickChangeAsc: 'Click Change Asc',\r\n ClickChangeDesc: 'Click Change Desc',\r\n ClickChangePercentAsc: 'Click Change Percent Asc',\r\n ClickChangePercentDesc: 'Click Change Percent Desc',\r\n\r\n CTRAsc: 'CTR Asc',\r\n CTRDesc: 'CTR Desc',\r\n CTRPeriodAsc: 'Period CTR Asc',\r\n CTRPeriodDesc: 'Period CTR Desc',\r\n CTRChangeAsc: 'CTR Change Asc',\r\n CTRChangeDesc: 'CTR Change Desc',\r\n CTRChangePercentAsc: 'CTR Change Percent Asc',\r\n CTRChangePercentDesc: 'CTR Change Percent Desc',\r\n\r\n ImpressionAsc: 'Impression Asc',\r\n ImpressionDesc: 'Impression Desc',\r\n ImpressionPeriodAsc: 'Period Impression Asc',\r\n ImpressionPeriodDesc: 'Period Impression Desc',\r\n ImpressionChangeAsc: 'Impression Change Asc',\r\n ImpressionChangeDesc: 'Impression Change Desc',\r\n ImpressionChangePercentAsc: 'Impression Change Percent Asc',\r\n ImpressionChangePercentDesc: 'Impression Change Percent Desc',\r\n\r\n SpendAsc: 'Spend Asc',\r\n SpendDesc: 'Spend Desc',\r\n SpendPeriodAsc: 'Period Spend Asc',\r\n SpendPeriodDesc: 'Period Spend Desc',\r\n SpendChangeAsc: 'Spend Change Asc',\r\n SpendChangeDesc: 'Spend Change Desc',\r\n SpendChangePercentAsc: 'Spend Change Percent Asc',\r\n SpendChangePercentDesc: 'Spend Change Percent Desc',\r\n};\r\n\r\nexport const CSMLVideoDuration = {\r\n min: 0,\r\n max: 120,\r\n unlimited: 121, // max + 1\r\n};\r\n\r\nexport const CSMLTimeFrame = {\r\n Anytime: 'Anytime',\r\n Today: 'Today',\r\n Last7Days: 'Last 7 days',\r\n Last30Days: 'Last 30 days',\r\n Custom: 'Custom range',\r\n};\r\n\r\nexport const CSMLImportSource = {\r\n Google: 'Google',\r\n Facebook: 'Facebook',\r\n};\r\n\r\nexport const CSMLAssetSource = {\r\n UserUploaded: 'UserUploaded',\r\n AIGenerated: 'AIGenerated',\r\n Website: 'WebsiteImported',\r\n Shutterstock: 'ShutterStock',\r\n Facebook: 'FacebookImported',\r\n Google: 'GoogleImported',\r\n BackgroundChangeGenerated: 'BackgroundChangeGenerated',\r\n AIGeneratedByRecraft: 'AIGeneratedByRecraft',\r\n};\r\n\r\nexport const ManualAddedImageSource = {\r\n Library: 'Library',\r\n ShutterStock: 'ShutterStock',\r\n};\r\n\r\nexport const AIModelSource = {\r\n Dalle: 'Dalle',\r\n Recraft: 'Recraft',\r\n};\r\n\r\nexport const DEFAULT_PAGE_SIZE = 20;\r\n\r\nexport const MIN_SIZE = [\r\n 703, // width\r\n 368, // height\r\n];\r\n\r\nexport const UPSCALE_MIN_SIZE = [ // half of MIN_SIZE\r\n 352, // width\r\n 184, // height\r\n];\r\n\r\nexport const ClarityTags = {\r\n LaunchedAdsStudio: 'LaunchedAdsStudio',\r\n LaunchedAddImageAssetsFromAdsStudio: 'LaunchedAddImageAssetsFromAdsStudio',\r\n DisplayTemplateHomePage: 'DisplayTemplateHomePage',\r\n EditDisplayTemplateImage: 'EditDisplayTemplateImage',\r\n CreateDisplayTemplate: 'CreateDisplayTemplate',\r\n BrandKitPage: 'BrandKitPage',\r\n EditBrandKitImage: 'EditBrandKitImage',\r\n EditBrandKitLogo: 'EditBrandKitLogo',\r\n};\r\n\r\nexport const CROP_BOX_MAX_SIZE = {\r\n width: 416,\r\n height: 300,\r\n};\r\n\r\nexport const CSMLAdTypeAbbr = {\r\n [CSMLAdType.MMA]: 'MultiMediaAd',\r\n [CSMLAdType.Audience]: 'MSAN',\r\n [CSMLAdType.ImageExtension]: 'ImageExtension',\r\n};\r\n\r\nexport const ROOT_FOLDER_ID = 'ROOT';\r\n\r\nexport const FolderAssetType = {\r\n Image: 'Image',\r\n Video: 'Video',\r\n All: 'All',\r\n Folder: 'Folder',\r\n};\r\n\r\nexport const RootFolderName = {\r\n [FolderAssetType.Image]: _TL_('Images'),\r\n [FolderAssetType.Video]: _TL_('Videos'),\r\n};\r\n\r\nexport const isRootFolderId = folderIdToTest => folderIdToTest === ROOT_FOLDER_ID;\r\n\r\nexport const supportedImageExtensions = ['.png', '.jpg', '.jpeg', '.gif'];\r\n\r\nexport const GridSectionName = {\r\n Folder: 'folderSection',\r\n Asset: 'assetsSection',\r\n};\r\n\r\nexport const MaxAddAssetJobInParell = 6;\r\n\r\n// export const AdsStudioAppNameODataHeader = {\r\n// key: 'x-ms-applicationname',\r\n// value: 'bingadsweb-assetlibrary',\r\n// };\r\n\r\nexport const CSMLSearchLocation = {\r\n Current: 'Current',\r\n Global: 'Global',\r\n};\r\n\r\nexport const VideoStatus = {\r\n Unverified: 'Unverified',\r\n Draft: 'Draft',\r\n Active: 'Active',\r\n Failed: 'Failed',\r\n};\r\n\r\nexport const AdsStudioPageName = {\r\n LibraryPage: 'LibraryPage',\r\n PerfPage: 'PerfPage',\r\n WebsiteImagePanelPage: 'WebsiteImagePanelPage',\r\n StockImagePanelPage: 'StockImagePanelPage',\r\n AddVideoPanelPage: 'AddVideoPanelPage',\r\n UploadFilesPanelPage: 'UploadFilesPanelPage',\r\n UploadFolderPanelPage: 'UploadFolderPanelPage',\r\n MixedImagePanelPage: 'MixedImagePanelPage',\r\n MixedVideoPanelPage: 'MixedVideoPanelPage',\r\n EditImagePage: 'EditImagePage',\r\n AssetDetailsPage: 'AssetDetailsPage',\r\n BackgroundRemovalModalPage: 'BackgroundRemovalModalPage',\r\n InvestImagePanelPage: 'InvestImagePanelPage',\r\n InvestVideoPanelPage: 'InvestVideoPanelPage',\r\n};\r\n\r\nconst UPLOAD = 'Upload';\r\nconst STOCK_IMAGES = 'StockImages';\r\nconst WEBSITE_IMAGES = 'WebsiteImages';\r\nconst AI_IMAGES = 'AiImages';\r\nconst SOCIAL_MEDIA = 'SocialMedia';\r\n\r\nexport const AddImagePivotKey = {\r\n UPLOAD,\r\n STOCK_IMAGES,\r\n WEBSITE_IMAGES,\r\n AI_IMAGES,\r\n SOCIAL_MEDIA,\r\n};\r\n\r\nexport const AdditionalQueries = {\r\n Query: 'query',\r\n FolderId: 'folderId',\r\n EditImageUrl: 'editImageUrl',\r\n InitialCurrentView: 'initialCurrentView',\r\n TemplateId: 'templateId',\r\n TemplateGroupId: 'templateGroupId',\r\n};\r\n\r\nexport const AdStudioSurveyTriggerFlag = {\r\n App: 'AdsStudioAppSurveyTrigger',\r\n};\r\n\r\nexport const RealUsedFlagSuffix = {\r\n App: 'AdsStudioApp',\r\n};\r\n","\r\nexport const FilterType = {\r\n SearchText: 'SearchText',\r\n AssetType: 'AssetType',\r\n ImageSize: 'ImageSize',\r\n VideoDuration: 'VideoDuration',\r\n DateAdded: 'DateAdded',\r\n ImportSource: 'ImportSource',\r\n AssetSource: 'AssetSource',\r\n};\r\n\r\nconst SearchTextFilter = {\r\n type: FilterType.SearchText,\r\n title: _TL_('Search by asset name or ID'),\r\n};\r\n\r\nconst AssetTypeFilter = {\r\n type: FilterType.AssetType,\r\n title: _TL_('Asset type'),\r\n};\r\n\r\nconst DateAddedFilter = {\r\n type: FilterType.DateAdded,\r\n title: _TL_('Date added'),\r\n};\r\n\r\nconst ImageSizeFilter = {\r\n type: FilterType.ImageSize,\r\n title: _TL_('Image size'),\r\n};\r\n\r\nconst ImportSourceFilter = {\r\n type: FilterType.ImportSource,\r\n title: _TL_('Import source'),\r\n};\r\n\r\nconst AssetSourceFilter = {\r\n type: FilterType.AssetSource,\r\n title: _TL_('Source'),\r\n};\r\n\r\n\r\nconst VideoDurationFilter = {\r\n type: FilterType.VideoDuration,\r\n title: _TL_('Video duration'),\r\n};\r\n\r\n\r\nexport const AllSupportedFilters = {\r\n [FilterType.SearchText]: SearchTextFilter,\r\n [FilterType.AssetType]: AssetTypeFilter,\r\n [FilterType.DateAdded]: DateAddedFilter,\r\n [FilterType.ImageSize]: ImageSizeFilter,\r\n [FilterType.ImportSource]: ImportSourceFilter,\r\n [FilterType.AssetSource]: AssetSourceFilter,\r\n [FilterType.VideoDuration]: VideoDurationFilter,\r\n};\r\n","import { FolderAssetType } from './constants';\r\n\r\nexport const getAssetTypeOptions = i18n => [\r\n {\r\n key: FolderAssetType.All,\r\n text: i18n.getString(_TL_('All')),\r\n title: i18n.getString(_TL_('All')),\r\n },\r\n {\r\n key: FolderAssetType.Image,\r\n text: i18n.getString(_TL_('Image')),\r\n title: i18n.getString(_TL_('Image')),\r\n },\r\n {\r\n key: FolderAssetType.Video,\r\n text: i18n.getString(_TL_('Video')),\r\n title: i18n.getString(_TL_('Video')),\r\n },\r\n];\r\n","import _ from 'underscore';\r\n\r\nconst MAX_DAYS = 7;\r\n\r\n// timestamp: Date\r\nexport function getTimeDescription(timestamp, i18n) {\r\n if (_.isDate(timestamp)) {\r\n const now = new Date();\r\n\r\n const diffInSec = Math.round((now - timestamp) / 1000);\r\n if (diffInSec < 0) {\r\n // in case something is wrong\r\n return null;\r\n } else if (diffInSec === 0) {\r\n return i18n.getString(_TL_('just now'));\r\n } else if (diffInSec === 1) {\r\n return i18n.getString(_TL_('1 second ago'));\r\n } else if (diffInSec < 60) {\r\n return i18n.getString(_TL_('{{seconds}} seconds ago'), { seconds: diffInSec });\r\n }\r\n\r\n const diffInMin = Math.round(diffInSec / 60);\r\n if (diffInMin === 1) {\r\n return i18n.getString(_TL_('1 minute ago'));\r\n } else if (diffInMin < 60) {\r\n return i18n.getString(_TL_('{{minutes}} minutes ago'), { minutes: diffInMin });\r\n }\r\n\r\n const diffInHour = Math.round(diffInMin / 60);\r\n if (diffInHour === 1) {\r\n return i18n.getString(_TL_('1 hour ago'));\r\n } else if (diffInHour < 24) {\r\n return i18n.getString(_TL_('{{hours}} hours ago'), { hours: diffInHour });\r\n }\r\n\r\n const diffInDay = Math.round(diffInHour / 24);\r\n if (diffInDay === 1) {\r\n return i18n.getString(_TL_('1 day ago'));\r\n } else if (diffInDay <= MAX_DAYS) {\r\n return i18n.getString(_TL_('{{days}} days ago'), { days: diffInDay });\r\n }\r\n }\r\n\r\n // no description for timestamp > 30 days ago\r\n return null;\r\n}\r\n","export const convertTimeDuration = (DurationInMS) => {\r\n const hours = Math.floor(DurationInMS / 3600000);\r\n const minutes = Math.floor((DurationInMS % 3600000) / 60000);\r\n const seconds = Math.floor((DurationInMS % 60000) / 1000);\r\n const timeArr = [];\r\n if (hours > 0) {\r\n timeArr.push(`${hours < 10 ? '0' : ''}${hours}`);\r\n }\r\n timeArr.push(`${minutes < 10 ? '0' : ''}${minutes}`);\r\n timeArr.push(`${seconds < 10 ? '0' : ''}${seconds}`);\r\n return timeArr.join(':');\r\n};\r\n","import { CivilDate } from 'tc39-proposal-temporal';\r\n// import { getCivilDateToday } from '@bingads-webui-universal/temporal-utitlities';\r\nimport { CSMLTimeFrame } from './constants';\r\n\r\nexport const getDateAddedChoiceOptions = (i18n, timeZone) => {\r\n // const yesterday = getCivilDateToday().plus({ days: -1 });\r\n const todayObj = i18n.getToday({ timeZone });\r\n const today = new CivilDate(todayObj.year, todayObj.month, todayObj.day);\r\n const last7day = today.plus({ days: -6 });\r\n const last30day = today.plus({ days: -29 });\r\n return [\r\n { key: CSMLTimeFrame.Today, text: i18n.getString(_TL_('Today')), range: { start: today, end: today } },\r\n { key: CSMLTimeFrame.Last7Days, text: i18n.getString(_TL_('Last 7 days')), range: { start: last7day, end: today } },\r\n { key: CSMLTimeFrame.Last30Days, text: i18n.getString(_TL_('Last 30 days')), range: { start: last30day, end: today } },\r\n { key: CSMLTimeFrame.Custom, text: i18n.getString(_TL_('Custom range')), range: null },\r\n ];\r\n};\r\n","import { CSMLImportSource } from './constants';\r\n\r\nexport const getImportSourceOptions = i18n => [\r\n {\r\n key: CSMLImportSource.Google,\r\n text: i18n.getString(_TL_('Google Ads')),\r\n title: i18n.getString(_TL_('Imported from Google Ads')),\r\n },\r\n {\r\n key: CSMLImportSource.Facebook,\r\n text: i18n.getString(_TL_('Meta Ads')),\r\n title: i18n.getString(_TL_('Imported from Meta Ads')),\r\n },\r\n];\r\n","import { CSMLSortBy, CSMLSortIcon } from './constants';\r\n\r\nexport const getSortingOptions = i18n => [\r\n { key: CSMLSortBy.MostRecent, text: i18n.getString(_TL_('Most recent')) },\r\n { key: CSMLSortBy.ImageName, text: i18n.getString(_TL_('Sort by name')), icon: CSMLSortIcon.SortUp },\r\n { key: CSMLSortBy.ImageNameDesc, text: i18n.getString(_TL_('Sort by name')), icon: CSMLSortIcon.SortDown },\r\n { key: CSMLSortBy.LastCreated, text: i18n.getString(_TL_('Last created')) },\r\n];\r\n\r\nexport const CSMLSortingRequestParams = {\r\n [CSMLSortBy.MostRecentAsc]: { sortBy: 'ModifiedTime', sortDirection: 'asc' },\r\n [CSMLSortBy.MostRecent]: { sortBy: 'ModifiedTime', sortDirection: 'desc' },\r\n\r\n [CSMLSortBy.ImageName]: { sortBy: 'Text', sortDirection: 'asc' },\r\n [CSMLSortBy.ImageNameDesc]: { sortBy: 'Text', sortDirection: 'desc' },\r\n [CSMLSortBy.LastCreated]: { sortBy: 'CreatedTime', sortDirection: 'desc' },\r\n [CSMLSortBy.LastCreatedAsc]: { sortBy: 'CreatedTime', sortDirection: 'asc' },\r\n\r\n [CSMLSortBy.AssetIdAsc]: { sortBy: 'AssetId', sortDirection: 'asc' },\r\n [CSMLSortBy.AssetIdDesc]: { sortBy: 'AssetId', sortDirection: 'desc' },\r\n\r\n [CSMLSortBy.ClickAsc]: { sortBy: 'PerformanceMetrics/Clicks', sortDirection: 'asc' },\r\n [CSMLSortBy.ClickDesc]: { sortBy: 'PerformanceMetrics/Clicks', sortDirection: 'desc' },\r\n [CSMLSortBy.ClickPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/Clicks', sortDirection: 'asc' },\r\n [CSMLSortBy.ClickPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/Clicks', sortDirection: 'desc' },\r\n [CSMLSortBy.ClickChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/Clicks', sortDirection: 'asc' },\r\n [CSMLSortBy.ClickChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/Clicks', sortDirection: 'desc' },\r\n [CSMLSortBy.ClickChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Clicks', sortDirection: 'asc' },\r\n [CSMLSortBy.ClickChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Clicks', sortDirection: 'desc' },\r\n\r\n [CSMLSortBy.CTRAsc]: { sortBy: 'PerformanceMetrics/CTR', sortDirection: 'asc' },\r\n [CSMLSortBy.CTRDesc]: { sortBy: 'PerformanceMetrics/CTR', sortDirection: 'desc' },\r\n [CSMLSortBy.CTRPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/CTR', sortDirection: 'asc' },\r\n [CSMLSortBy.CTRPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/CTR', sortDirection: 'desc' },\r\n [CSMLSortBy.CTRChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/CTR', sortDirection: 'asc' },\r\n [CSMLSortBy.CTRChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/CTR', sortDirection: 'desc' },\r\n [CSMLSortBy.CTRChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/CTR', sortDirection: 'asc' },\r\n [CSMLSortBy.CTRChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/CTR', sortDirection: 'desc' },\r\n\r\n [CSMLSortBy.ImpressionAsc]: { sortBy: 'PerformanceMetrics/Impressions', sortDirection: 'asc' },\r\n [CSMLSortBy.ImpressionDesc]: { sortBy: 'PerformanceMetrics/Impressions', sortDirection: 'desc' },\r\n [CSMLSortBy.ImpressionPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/Impressions', sortDirection: 'asc' },\r\n [CSMLSortBy.ImpressionPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/Impressions', sortDirection: 'desc' },\r\n [CSMLSortBy.ImpressionChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/Impressions', sortDirection: 'asc' },\r\n [CSMLSortBy.ImpressionChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/Impressions', sortDirection: 'desc' },\r\n [CSMLSortBy.ImpressionChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Impressions', sortDirection: 'asc' },\r\n [CSMLSortBy.ImpressionChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Impressions', sortDirection: 'desc' },\r\n\r\n [CSMLSortBy.SpendAsc]: { sortBy: 'PerformanceMetrics/Spend', sortDirection: 'asc' },\r\n [CSMLSortBy.SpendDesc]: { sortBy: 'PerformanceMetrics/Spend', sortDirection: 'desc' },\r\n [CSMLSortBy.SpendPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/Spend', sortDirection: 'asc' },\r\n [CSMLSortBy.SpendPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/Spend', sortDirection: 'desc' },\r\n [CSMLSortBy.SpendChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/Spend', sortDirection: 'asc' },\r\n [CSMLSortBy.SpendChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/Spend', sortDirection: 'desc' },\r\n [CSMLSortBy.SpendChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Spend', sortDirection: 'asc' },\r\n [CSMLSortBy.SpendChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Spend', sortDirection: 'desc' },\r\n};\r\n","import { CSMLAssetSource } from './constants';\r\n\r\nexport const getAssetSourceOptions = i18n => [\r\n {\r\n key: CSMLAssetSource.AIGenerated,\r\n text: i18n.getString(_TL_('Created')),\r\n title: i18n.getString(_TL_('Created with Microsoft Advertising')),\r\n },\r\n {\r\n key: CSMLAssetSource.UserUploaded,\r\n text: i18n.getString(_TL_('Upload')),\r\n title: i18n.getString(_TL_('Uploaded from computer')),\r\n },\r\n {\r\n key: CSMLAssetSource.Website,\r\n text: i18n.getString(_TL_('Website')),\r\n title: i18n.getString(_TL_('Advertiser website')),\r\n },\r\n {\r\n key: CSMLAssetSource.Shutterstock,\r\n text: i18n.getString(_TL_('Shutterstock')),\r\n title: i18n.getString(_TL_('Shutterstock')),\r\n },\r\n {\r\n key: CSMLAssetSource.Google,\r\n text: i18n.getString(_TL_('Imported')),\r\n title: i18n.getString(_TL_('Imported from Google Ads')),\r\n },\r\n {\r\n key: CSMLAssetSource.Facebook,\r\n text: i18n.getString(_TL_('Imported')),\r\n title: i18n.getString(_TL_('Imported from Meta Ads')),\r\n },\r\n];\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport { constants as C } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport {\r\n // UAPPlacementType as EPlacementType,\r\n UAPPlacementTypeAlias as PT,\r\n} from '@bingads-webui-campaign-react/unified-ad-preview-library-core';\r\n\r\nimport { CSMLAdTypeAbbr, CSMLAdType } from './constants';\r\n\r\n// eslint-disable-next-line prefer-destructuring\r\nconst imageAdExtSettings = C.imageAdExtSettings;\r\n\r\nexport const getPlacementConfig = () => ({\r\n // MMA\r\n [PT.MMA.LandscapeImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('Landscape image'),\r\n },\r\n [PT.MMA.WideImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '4 : 1',\r\n previewTypeString: _TL_('Wide image'),\r\n },\r\n [PT.MMA.SquareImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('Square image'),\r\n },\r\n [PT.MMA.VerticalImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 2',\r\n previewTypeString: _TL_('Vertical image'),\r\n },\r\n\r\n // MMA in MSAN (Audience Network)\r\n [PT.MSAN.WideImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.MSAN.SquareImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('MSN square image'),\r\n },\r\n [PT.MSAN.MSEdgeSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.78 : 1',\r\n previewTypeString: _TL_('Microsoft Edge single carousel'),\r\n },\r\n [PT.MSAN.MSNInArticle]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.5 : 1',\r\n previewTypeString: _TL_('MSN in-article ad'),\r\n },\r\n [PT.MSAN.MSNSmallHeadline]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.33 : 1',\r\n previewTypeString: _TL_('MSN small headline'),\r\n },\r\n\r\n // pmax\r\n [PT.PMax.AudienceSquareImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('MSN square image'),\r\n },\r\n [PT.PMax.AudienceWideImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.PMax.MMALandscapeImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('Landscape Image Multimedia Ad'),\r\n },\r\n [PT.PMax.MMAVerticalImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 2',\r\n previewTypeString: _TL_('Vertical image'),\r\n },\r\n [PT.PMax.MMAWideImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '4 : 1',\r\n previewTypeString: _TL_('Wide image'),\r\n },\r\n [PT.PMax.MSNInArticle]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.5 : 1',\r\n previewTypeString: _TL_('MSN in-article ad'),\r\n },\r\n [PT.PMax.MSNSmallHeadline]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.33 : 1',\r\n previewTypeString: _TL_('MSN small headline'),\r\n },\r\n [PT.PMax.MSEdgeSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.78 : 1',\r\n previewTypeString: _TL_('Microsoft Edge single carousel'),\r\n },\r\n [PT.PMax.MMAV2MSEdgeCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '2.01 : 1',\r\n previewTypeString: _TL_('Microsoft Edge carousel'),\r\n },\r\n [PT.PMax.MMAV2MSNSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.69 : 1',\r\n previewTypeString: _TL_('MSN carousel'),\r\n },\r\n [PT.PMax.MMAV2MSNRestoday]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.24 : 1',\r\n previewTypeString: _TL_('MSN Restoday'),\r\n },\r\n [PT.PMax.MMAV2MSNPartnerStripe]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.53 : 1',\r\n previewTypeString: _TL_('MSN partner stripe'),\r\n },\r\n [PT.PMax.MMAV2MSNRiver]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.PMax.MSEdgeMobile]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('Microsoft Edge mobile'),\r\n },\r\n\r\n // MSAN V2\r\n [PT.MSANV2.MSEdgeCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '2.01 : 1',\r\n previewTypeString: _TL_('Microsoft Edge carousel'),\r\n },\r\n [PT.MSANV2.MSANBanner]: {\r\n isRequired: false,\r\n aspectRatioUIString: '2 : 1',\r\n previewTypeString: _TL_('MSN banner'),\r\n },\r\n [PT.MSANV2.MSANRiver]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.MSANV2.MSNCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.69 : 1',\r\n previewTypeString: _TL_('MSN carousel'),\r\n },\r\n [PT.MSANV2.MSNPartnerStripe]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.53 : 1',\r\n previewTypeString: _TL_('MSN partner stripe'),\r\n },\r\n [PT.MSANV2.MSNRestoday]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.24 : 1',\r\n previewTypeString: _TL_('MSN Restoday'),\r\n },\r\n [PT.MSANV2.MSANRectangle]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.2 : 1',\r\n previewTypeString: _TL_('MSN rectangle image'),\r\n },\r\n [PT.MSANV2.MSEdgeMobile]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('Microsoft Edge mobile'),\r\n },\r\n\r\n // Image Extension\r\n [PT.ImageExt.WideImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.ImageExt.MSEdgeSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.78 : 1',\r\n previewTypeString: _TL_('Microsoft Edge single carousel'),\r\n },\r\n [PT.ImageExt.BingDesktopSingleImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.78 : 1',\r\n previewTypeString: _TL_('Bing desktop single-image extension'),\r\n },\r\n [PT.ImageExt.MSEdgeMediumHeadline]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.72 : 1',\r\n previewTypeString: _TL_('Microsoft Edge medium headline'),\r\n },\r\n [PT.ImageExt.MSNSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.69 : 1',\r\n previewTypeString: _TL_('MSN carousel'),\r\n },\r\n [PT.ImageExt.MSNMediumHeadline]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.55 : 1',\r\n previewTypeString: _TL_('MSN medium headline'),\r\n },\r\n [PT.ImageExt.MSNInArticle]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.5 : 1',\r\n previewTypeString: _TL_('MSN in-article ad'),\r\n },\r\n [PT.ImageExt.MSNSmallHeadline]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.33 : 1',\r\n previewTypeString: _TL_('MSN small headline'),\r\n },\r\n [PT.ImageExt.BingDesktopMultiImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.33 : 1',\r\n previewTypeString: _TL_('Bing desktop multi-image extension'),\r\n },\r\n [PT.ImageExt.BingMobileMultiImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.33 : 1',\r\n previewTypeString: _TL_('Bing mobile multi-image extension'),\r\n },\r\n [PT.ImageExt.SquareImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('MSN square image'),\r\n },\r\n [PT.ImageExt.MSNDoubleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '0.93 : 1',\r\n previewTypeString: _TL_('MSN double carousel'),\r\n },\r\n [PT.ImageExt.MMAV2MSNRiver]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.ImageExt.MMAV2MSNSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.69 : 1',\r\n previewTypeString: _TL_('MSN carousel'),\r\n },\r\n [PT.ImageExt.MSEdgeMobile]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('Microsoft Edge mobile'),\r\n },\r\n});\r\n\r\nexport const aspectRatioConfig = isMultimediaAd => ({\r\n Image191x100: {\r\n aspectRatio: 1.91,\r\n aspectRatioAsRatio: '1.91 : 1',\r\n aspectRatioString: '191X100',\r\n type: 'Image191x100',\r\n isRequired: true,\r\n },\r\n Image4x1: {\r\n aspectRatio: 4,\r\n aspectRatioAsRatio: '4 : 1',\r\n aspectRatioString: '400X100',\r\n type: 'Image4x1',\r\n isRequired: false,\r\n },\r\n Image1x1: {\r\n aspectRatio: 1,\r\n aspectRatioAsRatio: '1 : 1',\r\n aspectRatioString: '100X100',\r\n type: 'Image1x1',\r\n isRequired: isMultimediaAd,\r\n },\r\n Image1x2: {\r\n aspectRatio: 0.5,\r\n aspectRatioAsRatio: '1 : 2',\r\n aspectRatioString: '50X100',\r\n type: 'Image1x2',\r\n isRequired: false,\r\n },\r\n Image178x100: {\r\n aspectRatio: 1.78,\r\n aspectRatioAsRatio: '1.78 : 1',\r\n aspectRatioString: '178X100',\r\n type: 'Image178x100',\r\n isRequired: false,\r\n extraExtension: {\r\n BingSingleImage: {\r\n previewTypeString: imageAdExtSettings.BingSingleImage.previewTypeString,\r\n },\r\n },\r\n },\r\n Image172x100: {\r\n aspectRatio: 1.72,\r\n type: 'Image172x100',\r\n aspectRatioAsRatio: '1.72 : 1',\r\n aspectRatioString: '172X100',\r\n isRequired: false,\r\n },\r\n Image169x100: {\r\n aspectRatio: 1.69,\r\n type: 'Image169x100',\r\n aspectRatioAsRatio: '1.69 : 1',\r\n aspectRatioString: '169X100',\r\n isRequired: false,\r\n },\r\n Image150x100: {\r\n aspectRatio: 1.5,\r\n aspectRatioAsRatio: '1.5 : 1',\r\n aspectRatioString: '150X100',\r\n type: 'Image150x100',\r\n isRequired: false,\r\n },\r\n Image155x100: {\r\n aspectRatio: 1.55,\r\n type: 'Image155x100',\r\n aspectRatioAsRatio: '1.55 : 1',\r\n aspectRatioString: '155X100',\r\n isRequired: false,\r\n },\r\n Image133x100: {\r\n aspectRatio: 1.33,\r\n aspectRatioAsRatio: '1.33 : 1',\r\n aspectRatioString: '133X100',\r\n type: 'Image133x100',\r\n isRequired: false,\r\n extraExtension: {\r\n MobileMultiImage: {\r\n previewTypeString: imageAdExtSettings.MobileMultiImage.previewTypeString,\r\n },\r\n BingDesktopImage: {\r\n previewTypeString: imageAdExtSettings.BingDesktopImage.previewTypeString,\r\n },\r\n },\r\n },\r\n Image93x100: {\r\n aspectRatio: 0.93,\r\n aspectRatioAsRatio: '0.93 : 1',\r\n aspectRatioString: '93X100',\r\n type: 'Image93x100',\r\n isRequired: false,\r\n },\r\n Image201x100: {\r\n aspectRatio: 2.01,\r\n aspectRatioAsRatio: '2.01 : 1',\r\n aspectRatioString: '201X100',\r\n type: 'Image201x100',\r\n isRequired: false,\r\n },\r\n Image200x100: {\r\n aspectRatio: 2,\r\n aspectRatioAsRatio: '2 : 1',\r\n aspectRatioString: '200X100',\r\n type: 'Image200x100',\r\n isRequired: false,\r\n },\r\n Image153x100: {\r\n aspectRatio: 1.53,\r\n aspectRatioAsRatio: '1.53 : 1',\r\n aspectRatioString: '153X100',\r\n type: 'Image153x100',\r\n isRequired: false,\r\n },\r\n Image124x100: {\r\n aspectRatio: 1.24,\r\n aspectRatioAsRatio: '1.24 : 1',\r\n aspectRatioString: '124X100',\r\n type: 'Image124x100',\r\n isRequired: false,\r\n },\r\n Image120x100: {\r\n aspectRatio: 1.2,\r\n aspectRatioAsRatio: '1.2 : 1',\r\n aspectRatioString: '120X100',\r\n type: 'Image120x100',\r\n isRequired: false,\r\n },\r\n});\r\n\r\nexport const getAspectRatioConfig = (adType, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled) => {\r\n const aspectRatios = C.getAspectRatios({\r\n isMultimediaAd: adType === CSMLAdType.MMA,\r\n isMultimediaAdinMSANEnabled: CSMLAdType.Audience === adType,\r\n isCombinedMsanAndMmaAspectRatios: CSMLAdType.PMax === adType,\r\n isMMAV2Enabled: CSMLAdType.Audience === adType && isMMAV2Enabled,\r\n isPMaxAspectRatiosV2Enabled: CSMLAdType.PMax === adType && isPMaxAspectRatiosV2Enabled,\r\n });\r\n\r\n const allAspectRatioConfig = aspectRatioConfig(adType === CSMLAdType.MMA);\r\n\r\n const aspectRatiosExceptOriginal = _.omit(aspectRatios, 'OriginalImage');\r\n\r\n const subAspectRatioConfig = _.mapObject(aspectRatiosExceptOriginal, item => ({\r\n ...allAspectRatioConfig[item.type],\r\n minSize: item.minSize,\r\n previewTypeString: item.previewTypeString,\r\n placementType: `${CSMLAdTypeAbbr[adType]}${allAspectRatioConfig[item.type].aspectRatioString}`,\r\n }));\r\n\r\n return subAspectRatioConfig;\r\n};\r\n\r\nexport const getPreviewText = (isImageExtension, i18n) => {\r\n if (isImageExtension) {\r\n return {\r\n shortHeadline: i18n.getString(_TL_('Title part 1')),\r\n longHeadline: i18n.getString(_TL_('Title part 1 | Title part 2 | Title part 3')),\r\n description: i18n.getString(_TL_('Ad text 1. Ad text 2')),\r\n businessName: i18n.getString(_TL_('Business name')),\r\n url: 'https://example.com',\r\n finalUrl: 'https://example.com',\r\n };\r\n }\r\n\r\n return {\r\n shortHeadline: i18n.getString(_TL_('Short headline')),\r\n longHeadline: i18n.getString(_TL_('Long headline')),\r\n description: i18n.getString(_TL_('Ad text')),\r\n businessName: i18n.getString(_TL_('Business name')),\r\n url: 'https://example.com',\r\n finalUrl: 'https://example.com',\r\n callToAction: i18n.getString(_TL_('Shop Now')),\r\n };\r\n};\r\n\r\nexport const sizeValidForRatio = (minSize, cropSettings) => {\r\n if (cropSettings && minSize) {\r\n const { SourceWidth, SourceHeight } = cropSettings;\r\n if (SourceWidth < minSize[0] || SourceHeight < minSize[1]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport const getSizeErrorRatioList = (\r\n adType,\r\n cropSettings,\r\n requiredOnly = false,\r\n isMMAV2Enabled = false,\r\n isPMaxAspectRatiosV2Enabled = false\r\n) => {\r\n let ratioList = getAspectRatioConfig(adType, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n\r\n if (requiredOnly) {\r\n ratioList = _.filter(ratioList, config => config.isRequired);\r\n }\r\n\r\n const invalidRatioList = _.filter(ratioList, (item) => {\r\n const { minSize } = item;\r\n return !sizeValidForRatio(minSize, cropSettings);\r\n });\r\n\r\n return invalidRatioList;\r\n};\r\n\r\nexport const getAllSizeErrorRatioList = (cropSettings, requiredOnly = false, isMMAV2Enabled = false, isPMaxAspectRatiosV2Enabled = false) => {\r\n const errorListForMMA = getSizeErrorRatioList(CSMLAdType.MMA, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n const errorListForAudience = getSizeErrorRatioList(CSMLAdType.Audience, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n const errorListForExtension = getSizeErrorRatioList(CSMLAdType.ImageExtension, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n const errorListForPmax = getSizeErrorRatioList(CSMLAdType.Pmax, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n\r\n return _.uniq(\r\n [...errorListForAudience, ...errorListForExtension, ...errorListForMMA, ...errorListForPmax],\r\n item => item.type\r\n );\r\n};\r\n\r\nexport const getPlacementsToExpand = (adType) => {\r\n const aspectRatios = C.getAspectRatios({\r\n isMultimediaAd: adType === CSMLAdType.MMA,\r\n isMultimediaAdinMSANEnabled: CSMLAdType.Audience === adType,\r\n isMMAV2Enabled: adType === CSMLAdType.Audience,\r\n isCombinedMsanAndMmaAspectRatios: adType === CSMLAdType.PMax,\r\n });\r\n\r\n const placementsToExpand = _.chain(aspectRatios)\r\n .reject(p => CSMLAdType.Audience === adType && p.type === 'OriginalImage')\r\n .map(({ aspectRatio, minSize }) => ({ aspectRatio, minHeight: minSize[1] }))\r\n .value();\r\n\r\n return placementsToExpand;\r\n};\r\n","import image0 from './image/Designer0.png';\r\nimport image1 from './image/Designer1.png';\r\nimport image2 from './image/Designer2.jpg';\r\nimport image3 from './image/Designer3.png';\r\nimport image4 from './image/Designer4.jpg';\r\nimport image5 from './image/Designer5.jpg';\r\nimport image6 from './image/Designer6.jpg';\r\nimport image7 from './image/Designer7.png';\r\nimport image8 from './image/Designer8.jpg';\r\nimport image9 from './image/Designer9.jpg';\r\nimport image10 from './image/Designer10.jpg';\r\nimport image11 from './image/Designer11.jpg';\r\nimport image12 from './image/Designer12.jpg';\r\nimport image13 from './image/Designer13.png';\r\nimport image14 from './image/Designer14.jpg';\r\nimport image15 from './image/Designer15.jpg';\r\nimport image16 from './image/Designer16.jpg';\r\nimport image17 from './image/Designer17.jpg';\r\nimport image18 from './image/Designer18.jpg';\r\nimport image19 from './image/Designer19.png';\r\n\r\nconst samples = [\r\n {\r\n promptText: _TL_('Modern high-tech gadgets on a sleek, minimalist desk.'),\r\n imageSrc: image0,\r\n },\r\n {\r\n promptText: _TL_('A luxury car driving through scenic mountains.'),\r\n imageSrc: image1,\r\n },\r\n {\r\n promptText: _TL_('A digital timer displayed prominently on a sleek marble surface.'),\r\n imageSrc: image2,\r\n },\r\n {\r\n promptText: _TL_('An array of high-end skincare products on a marble countertop.'),\r\n imageSrc: image3,\r\n },\r\n {\r\n promptText: _TL_('An electric bicycle displayed next to an outdoor café.'),\r\n imageSrc: image4,\r\n },\r\n {\r\n promptText: _TL_('A stylish home office setup with tech gadgets.'),\r\n imageSrc: image5,\r\n },\r\n {\r\n promptText: _TL_('A picnic setup with food and decor in a park.'),\r\n imageSrc: image6,\r\n },\r\n {\r\n promptText: _TL_('A product photo of juice bottles with no label.'),\r\n imageSrc: image7,\r\n },\r\n {\r\n promptText: _TL_('A five-star hotel room with a stunning view of the city skyline.'),\r\n imageSrc: image8,\r\n },\r\n {\r\n promptText: _TL_('An all-inclusive spa treatment setting.'),\r\n imageSrc: image9,\r\n },\r\n {\r\n promptText: _TL_('A hiking backpack and gear on an adventurous trail with breathtaking views.'),\r\n imageSrc: image10,\r\n },\r\n {\r\n promptText: _TL_('A trendy cafe table with coffee cups.'),\r\n imageSrc: image11,\r\n },\r\n {\r\n promptText: _TL_('A beautifully arranged floral bouquet on a table.'),\r\n imageSrc: image12,\r\n },\r\n {\r\n promptText: _TL_('A beautifully wrapped gift in front of a fireplace.'),\r\n imageSrc: image13,\r\n },\r\n {\r\n promptText: _TL_('An elegant dining setup for a romantic evening.'),\r\n imageSrc: image14,\r\n },\r\n {\r\n promptText: _TL_('Refreshing smoothies in elegant glassware.'),\r\n imageSrc: image15,\r\n },\r\n {\r\n promptText: _TL_('A stylish urban setting with modern decor.'),\r\n imageSrc: image16,\r\n },\r\n {\r\n promptText: _TL_('A festive living room with a beautifully decorated Christmas tree, featuring branded holiday decor items and cozy products.'),\r\n imageSrc: image17,\r\n },\r\n {\r\n promptText: _TL_('A winter market stall with festive treats.'),\r\n imageSrc: image18,\r\n },\r\n {\r\n promptText: _TL_('Beautifully wrapped gift boxes placed under a decorated holiday tree with twinkling lights.'),\r\n imageSrc: image19,\r\n },\r\n];\r\n\r\nexport const AIPromptExamples = samples;\r\n","import _ from 'underscore';\r\n\r\nexport const getUpdatedAssets = ({\r\n assets,\r\n updates = {},\r\n}) => {\r\n const {\r\n imageCroppingTasks,\r\n videoUpdated,\r\n } = updates || {};\r\n\r\n if (assets &&\r\n (!_.isEmpty(imageCroppingTasks) || !_.isEmpty(videoUpdated))\r\n ) {\r\n let updatedAssets = assets;\r\n\r\n if (!_.isEmpty(imageCroppingTasks)) {\r\n updatedAssets = updatedAssets.map((asset) => {\r\n const taskStatus = imageCroppingTasks[asset.id];\r\n if (taskStatus) {\r\n return {\r\n ...asset,\r\n updating: !taskStatus.isFinished,\r\n };\r\n }\r\n\r\n return asset;\r\n });\r\n }\r\n\r\n if (!_.isEmpty(videoUpdated)) {\r\n updatedAssets = updatedAssets.map((asset) => {\r\n const newUpdates = videoUpdated[asset.id];\r\n if (newUpdates && newUpdates.status !== asset.status) {\r\n return {\r\n ...asset,\r\n ...newUpdates,\r\n };\r\n }\r\n\r\n return asset;\r\n });\r\n }\r\n\r\n return updatedAssets;\r\n }\r\n\r\n return assets;\r\n};\r\n","import { useState, useEffect } from 'react';\r\nimport { reduce } from 'underscore';\r\n\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\n\r\nexport const useClarityTags = (customTags) => {\r\n const [haveSetClarityTags, setHaveSetClarityTags] = useState(false);\r\n\r\n useEffect(() => {\r\n if (!haveSetClarityTags) {\r\n const tagsToSet = reduce(customTags, (tagsObj, currentTag) => ({\r\n ...tagsObj,\r\n [currentTag]: true,\r\n }), {});\r\n\r\n setClarityTag(tagsToSet);\r\n setHaveSetClarityTags(true);\r\n }\r\n }, [haveSetClarityTags, setHaveSetClarityTags, customTags]);\r\n};\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport { VideoStatus, AdditionalQueries } from './constants';\r\nimport { EntryCardSVGIcons } from '../../src/asset-images';\r\n\r\n// TO DO: update this when new entity type is created\r\nconst ExternalEntityType = {\r\n XandrAdvertiser: 8,\r\n};\r\n\r\nexport const checkVideosIntermediateStatus =\r\n video => video.status !== VideoStatus.Active && video.status !== VideoStatus.Failed;\r\n/* istanbul ignore next */\r\nconst getSizeLimitPerAccount = (aid, id) => {\r\n const value = localStorage.getItem(`SystemLimitData_${aid}`);\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let valObj = null;\r\n\r\n try {\r\n valObj = JSON.parse(value);\r\n } catch (e) {\r\n return null;\r\n }\r\n\r\n const limitData = _.find(valObj.data, data => data.id === id);\r\n\r\n return limitData && limitData.val;\r\n};\r\n\r\nexport const isValidXandrAccount = (account) => {\r\n if (account && account.ExternalAccountIds && account.ExternalAccountIds.length > 0) {\r\n // TO DO switch this to new enetity type when its available\r\n const externalAccountId = _.find(account.ExternalAccountIds, item => item.Type === ExternalEntityType.XandrAdvertiser);\r\n return externalAccountId !== undefined && externalAccountId.Id !== null && externalAccountId.Id !== undefined;\r\n }\r\n // TO DO switch to false\r\n return true;\r\n};\r\n\r\nexport const getEntryCardData = ({\r\n i18n,\r\n cardKeys = [],\r\n onClickCreate = _.noop,\r\n onClickUpload = _.noop,\r\n onClickStock = _.noop,\r\n onClickInvest = _.noop,\r\n onClickWebsite = _.noop,\r\n isImagePage = false,\r\n isVideoPage = false,\r\n isXandrIntegrationEnabled = false,\r\n}) => {\r\n let uploadDescription = i18n.getString(_TL_('Upload assets from your computer'));\r\n let websiteDescription = i18n.getString(_TL_('Enter your URL and we\\'ll pull assets from it'));\r\n let websiteTitle = i18n.getString(_TL_('Add from website'));\r\n let createDescription = i18n.getString(_TL_('Create AI-generated images'));\r\n let createTitle = i18n.getString(_TL_('Create'));\r\n let investDescription = i18n.getString(_TL_('Search Invest'));\r\n if (isImagePage) {\r\n createDescription = i18n.getString(_TL_('Create AI-generated images'));\r\n uploadDescription = i18n.getString(_TL_('Upload images from your computer'));\r\n websiteDescription = i18n.getString(_TL_('Enter your URL and we\\'ll pull images from it'));\r\n investDescription = i18n.getString(_TL_('Search Invest for images'));\r\n } else if (isVideoPage) {\r\n createTitle = i18n.getString(_TL_('Create'));\r\n createDescription = i18n.getString(_TL_('Create a video using a template'));\r\n uploadDescription = i18n.getString(_TL_('Upload videos from your computer'));\r\n websiteDescription = i18n.getString(_TL_('Enter your video\\'s URL'));\r\n websiteTitle = i18n.getString(_TL_('Add from URL'));\r\n investDescription = i18n.getString(_TL_('Search Invest for videos'));\r\n }\r\n\r\n let cardData = [\r\n {\r\n title: createTitle,\r\n description: createDescription,\r\n image: EntryCardSVGIcons.CreateSVGIcon,\r\n onClick: onClickCreate,\r\n key: 'Create',\r\n },\r\n {\r\n title: i18n.getString(_TL_('Upload')),\r\n description: uploadDescription,\r\n image: EntryCardSVGIcons.UploadSVGIcon,\r\n onClick: onClickUpload,\r\n key: 'Upload',\r\n },\r\n {\r\n title: i18n.getString(_TL_('Get stock images')),\r\n description: i18n.getString(_TL_('Search Shutterstock for images')),\r\n image: EntryCardSVGIcons.StockSVGIcon,\r\n onClick: onClickStock,\r\n key: 'Stock',\r\n },\r\n {\r\n title: websiteTitle,\r\n description: websiteDescription,\r\n image: EntryCardSVGIcons.WebsiteSVGIcon,\r\n onClick: onClickWebsite,\r\n key: 'Website',\r\n },\r\n ];\r\n\r\n if (isXandrIntegrationEnabled) {\r\n cardData = [\r\n ...cardData,\r\n {\r\n title: i18n.getString(_TL_('Add from Microsoft Invest')),\r\n description: investDescription,\r\n image: EntryCardSVGIcons.InvestSVGIcon,\r\n onClick: onClickInvest,\r\n key: 'Invest',\r\n },\r\n ];\r\n }\r\n\r\n\r\n if (!cardKeys.length) {\r\n return cardData;\r\n }\r\n return cardData.filter(card => cardKeys.includes(card.key));\r\n};\r\n\r\nexport const getHomePageCardData = ({\r\n i18n,\r\n cardKeys = [],\r\n onClickUpload = _.noop,\r\n onClickStock = _.noop,\r\n onClickWebsite = _.noop,\r\n onClickInvest = _.noop,\r\n isXandrIntegrationEnabled = false,\r\n}) => {\r\n let cardData = [\r\n {\r\n title: i18n.getString(_TL_('Upload')),\r\n description: i18n.getString(_TL_('Upload assets from your computer')),\r\n image: EntryCardSVGIcons.UploadSVGIcon,\r\n onClick: onClickUpload,\r\n key: 'Upload',\r\n },\r\n {\r\n title: i18n.getString(_TL_('Add from website')),\r\n description: i18n.getString(_TL_('Enter your URL and we’ll pull assets from it')),\r\n image: EntryCardSVGIcons.WebsiteSVGIcon,\r\n onClick: onClickWebsite,\r\n key: 'Website',\r\n },\r\n {\r\n title: i18n.getString(_TL_('Get stock images')),\r\n description: i18n.getString(_TL_('Search Shutterstock for images')),\r\n image: EntryCardSVGIcons.StockSVGIcon,\r\n onClick: onClickStock,\r\n key: 'Stock',\r\n },\r\n ];\r\n\r\n if (isXandrIntegrationEnabled) {\r\n cardData = [\r\n ...cardData,\r\n {\r\n title: i18n.getString(_TL_('Add from Microsoft Invest')),\r\n description: i18n.getString(_TL_('Search Invest for images')),\r\n image: EntryCardSVGIcons.InvestSVGIcon,\r\n onClick: onClickInvest,\r\n key: 'Invest',\r\n },\r\n ];\r\n }\r\n\r\n if (!cardKeys.length) {\r\n return cardData;\r\n }\r\n return cardData.filter(card => cardKeys.includes(card.key));\r\n};\r\n\r\nexport const getImageAssetLimitPerAccount = (aid, logger) => {\r\n const assetLimit = getSizeLimitPerAccount(aid, 32);\r\n /* istanbul ignore if */\r\n if (assetLimit) {\r\n return assetLimit;\r\n }\r\n\r\n logger.logError('get image asset limit data error', { aid });\r\n return 5000;\r\n};\r\n\r\nexport const getFoldersLimitPerAccount = (aid, logger) => {\r\n const foldersLimit = getSizeLimitPerAccount(aid, 97);\r\n /* istanbul ignore if */\r\n if (foldersLimit) {\r\n return foldersLimit;\r\n }\r\n logger.logError('get folders limit data error', { aid });\r\n return 1000;\r\n};\r\n\r\nexport const getVideoAssetLimitPerAccount = (aid, logger) => {\r\n const assetLimit = getSizeLimitPerAccount(aid, 86);\r\n /* istanbul ignore if */\r\n if (assetLimit) {\r\n return assetLimit;\r\n }\r\n\r\n logger.logError('get video asset limit data error', { aid });\r\n return 1000;\r\n};\r\n\r\nexport const validate = (value) => {\r\n const reg = /<|>|:|\\*|\\?|\"|\\\\|\\/|\\|/;\r\n return !reg.test(value);\r\n};\r\n\r\nexport const getSearchQuery = ({ search = '', additionalQueries = {}, removeQueries = [] }) => {\r\n let query = queryString.parse(search);\r\n query = _.omit(query, (value, key) => _.includes(_.values(AdditionalQueries), key) || _.includes(removeQueries, key));\r\n query = {\r\n ...query,\r\n ...additionalQueries,\r\n };\r\n return `?${queryString.stringify(query)}`;\r\n};\r\n\r\nexport const AIGCHandler = (isAdsStudioAIGCMVPEnabled, isAIGCRegionRestricted, notificationApi, i18n, enabledCallback) => {\r\n if (isAdsStudioAIGCMVPEnabled && !isAIGCRegionRestricted) {\r\n enabledCallback();\r\n } else if (isAIGCRegionRestricted) {\r\n notificationApi.showWarning(i18n.getString(_TL_('This feature isn\\'t available in all markets.')));\r\n } else {\r\n notificationApi.showWarning(i18n.getString(_TL_('This feature isn\\'t available yet, but it\\'s coming soon.')));\r\n }\r\n};\r\n\r\nconst getRealUsedFlagValue = (preference, flagSuffix) => {\r\n if (preference && flagSuffix) {\r\n const realUsedFlagStr = `realUsedFlagIn${flagSuffix}`;\r\n const realUsedFlagHandlerStr = `setRealUsedFlagIn${flagSuffix}`;\r\n const realUsedFlag = preference[realUsedFlagStr];\r\n const realUsedFlagHandler = preference[realUsedFlagHandlerStr];\r\n\r\n return {\r\n realUsedFlag,\r\n realUsedFlagHandler,\r\n };\r\n }\r\n\r\n return {};\r\n};\r\n\r\nexport const handleRealUsedFlag = (preference, flagSuffix) => { // flagSuffix: AssetLibraryApp or AssetLibraryPicker\r\n const { realUsedFlag, realUsedFlagHandler } = getRealUsedFlagValue(preference, flagSuffix);\r\n\r\n const {\r\n haveUsed,\r\n } = realUsedFlag || {};\r\n\r\n if (!haveUsed && realUsedFlagHandler) {\r\n realUsedFlagHandler();\r\n }\r\n};\r\n\r\nexport const addAdStudioSurveyTriggerFlag = (preference, triggerFlag, usedFlagSuffix) => {\r\n const { realUsedFlag } = getRealUsedFlagValue(preference, usedFlagSuffix);\r\n\r\n const { haveUsed, timestamp } = realUsedFlag || {};\r\n\r\n if (haveUsed) {\r\n const currentTime = new Date().getTime();\r\n const diffDay = (currentTime - timestamp) / 1000 / 60 / 60 / 24;\r\n if (diffDay > 1 && window.survey && window.survey.surveyManager) {\r\n window.survey[triggerFlag] = true;\r\n window.survey.surveyManager.trigger({\r\n checkIfSurveyIsOpen: true,\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const removeAdStudioSurveyTriggerFlag = (triggerFlag) => {\r\n if (window.survey) {\r\n window.survey[triggerFlag] = false;\r\n }\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst commonButtonStyle = {\r\n display: 'flex',\r\n ...shorthands.padding('12px'),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n ...shorthands.gap('8px'),\r\n ...shorthands.borderRadius('8px'),\r\n backgroundColor: '#FFF',\r\n boxShadow: '0 2px 4px 0 rgba(0, 0, 0, 0.14), 0 0 2px 0 rgba(0, 0, 0, 0.12)',\r\n ...shorthands.border('none'),\r\n ...shorthands.outline('none'),\r\n maxHeight: '150px',\r\n ...shorthands.overflow('hidden'),\r\n minWidth: '230px',\r\n};\r\n\r\nconst commonTextStyle = {\r\n fontFamily: 'Segoe UI',\r\n fontStyle: 'normal',\r\n textAlign: 'left',\r\n ...shorthands.flex(1, 1, '0px'),\r\n width: '100%',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n};\r\n\r\nconst commonIconStyle = {\r\n display: 'flex',\r\n ...shorthands.margin('4px'),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n width: '20px',\r\n height: '20px',\r\n};\r\n\r\nexport const useAssetsEntryCardStyle = makeStyles({\r\n fillWidth: {\r\n ...shorthands.flex(1, 0, '0px'),\r\n },\r\n assetsEntryCard: {\r\n ...commonButtonStyle,\r\n '& .title': {\r\n ...commonTextStyle,\r\n color: '#242424',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n fontWeight: 600,\r\n },\r\n '& .description': {\r\n ...commonTextStyle,\r\n color: '#616161',\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n fontWeight: '400',\r\n },\r\n '& .text': {\r\n ...shorthands.flex(1),\r\n minWidth: '110px',\r\n width: '100%',\r\n },\r\n '& .picture': {\r\n width: '52px',\r\n height: '52px',\r\n '& img': {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'contain',\r\n },\r\n },\r\n '& .icon': {\r\n ...commonIconStyle,\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses, Button } from '@fluentui/react-components';\r\nimport { Add20Regular } from '@fluentui/react-icons';\r\nimport { useAssetsEntryCardStyle } from './style';\r\n\r\nconst AssetsEntryCard = ({\r\n id, title, description, imageSrc, onClick, isFillWidth, cardClassName,\r\n}) => {\r\n const classes = useAssetsEntryCardStyle();\r\n\r\n return (\r\n \r\n
\r\n {title}\r\n
\r\n
\r\n
\r\n {title}\r\n
\r\n
\r\n {description}\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\nAssetsEntryCard.propTypes = {\r\n id: PropTypes.string,\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string.isRequired,\r\n imageSrc: PropTypes.string.isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n isFillWidth: PropTypes.bool,\r\n cardClassName: PropTypes.string,\r\n};\r\n\r\nAssetsEntryCard.defaultProps = {\r\n id: undefined,\r\n isFillWidth: false,\r\n cardClassName: '',\r\n};\r\n\r\nexport const AddAssetEntryCard = AssetsEntryCard;\r\n","import _ from 'underscore';\r\nimport React, { Children, cloneElement, forwardRef, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Overlay, Layer } from '@bingads-webui-react/fabric-control';\r\n\r\nimport { Button, makeStyles, mergeClasses } from '@fluentui/react-components';\r\nimport {\r\n DrawerHeader,\r\n DrawerHeaderTitle,\r\n DrawerBody,\r\n DrawerFooter,\r\n DrawerOverlay,\r\n} from '@fluentui/react-drawer';\r\nimport { Dismiss24Regular } from '@fluentui/react-icons';\r\n\r\nconst TOP_BANNER_HEIGHT = 60;\r\n\r\nconst useStyles = makeStyles({\r\n addMediaPanel: {\r\n height: `calc(100vh - ${TOP_BANNER_HEIGHT}px)`,\r\n top: 'auto',\r\n bottom: '0px',\r\n },\r\n panelContent: {\r\n '-ms-overflow-style': 'none',\r\n scrollbarWidth: 'none',\r\n },\r\n overlay: {\r\n zIndex: '2',\r\n },\r\n layer: {\r\n zIndex: '1000',\r\n },\r\n});\r\n\r\nexport const AdsStudioPanelContainer = forwardRef((props, ref) => {\r\n const {\r\n onRenderFooterContent,\r\n isOpen,\r\n dismiss,\r\n headerText,\r\n children,\r\n size,\r\n className,\r\n } = props;\r\n\r\n const overlayBodyRef = useRef(null);\r\n const styles = useStyles();\r\n\r\n return (\r\n <>\r\n \r\n \r\n }\r\n onClick={dismiss}\r\n />\r\n }\r\n >\r\n {headerText}\r\n \r\n \r\n \r\n {Children.map(children, child =>\r\n child && cloneElement(child, {\r\n overlayBodyRef,\r\n }))}\r\n \r\n \r\n {onRenderFooterContent}\r\n \r\n \r\n {\r\n isOpen && (\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n );\r\n});\r\n\r\nAdsStudioPanelContainer.propTypes = {\r\n onRenderFooterContent: PropTypes.func,\r\n isOpen: PropTypes.bool,\r\n dismiss: PropTypes.func,\r\n headerText: PropTypes.string,\r\n children: PropTypes.element,\r\n size: PropTypes.string,\r\n className: PropTypes.string,\r\n};\r\n\r\nAdsStudioPanelContainer.defaultProps = {\r\n onRenderFooterContent: _.noop,\r\n isOpen: false,\r\n dismiss: _.noop,\r\n headerText: '',\r\n children: null,\r\n size: 'large',\r\n className: '',\r\n};\r\n\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Spinner, SpinnerSize } from '@fluentui/react';\r\n\r\nexport const AdsStudioSpinner = ({\r\n useCustomSize,\r\n className,\r\n customStyle,\r\n}) => {\r\n const spinnerStyles = useMemo(() => ({\r\n circle: useCustomSize ? { width: 50, height: 50 } : null,\r\n root: customStyle || {\r\n width: '100%',\r\n height: '100%',\r\n margin: 'auto',\r\n },\r\n }), [customStyle, useCustomSize]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n\r\nAdsStudioSpinner.propTypes = {\r\n customStyle: PropTypes.shape({}),\r\n useCustomSize: PropTypes.bool,\r\n className: PropTypes.string,\r\n};\r\n\r\nAdsStudioSpinner.defaultProps = {\r\n useCustomSize: false,\r\n className: '',\r\n customStyle: null,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useActionButtonStyles = makeStyles({\r\n actionButton: {\r\n fontSize: '13px',\r\n fontStyle: 'normal',\r\n fontWeight: 400,\r\n backgroundColor: 'rgb(255,255,255,0.2)',\r\n ...shorthands.borderRadius('999px'),\r\n ...shorthands.border('none'),\r\n ...shorthands.margin('6px'),\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { Button } from '@fluentui/react-components';\r\n\r\nimport { useActionButtonStyles } from '../styles/tiles-grid-cell-action-button-style';\r\n\r\nconst ActionButton = ({\r\n text, icon: Icon, onClick, primary, className,\r\n}) => {\r\n const classes = useActionButtonStyles();\r\n const appearance = primary ? 'primary' : 'secondary';\r\n return (\r\n }\r\n onClick={onClick}\r\n className={classnames('cell-button', classes.actionButton, className)}\r\n appearance={appearance}\r\n >\r\n {text}\r\n \r\n );\r\n};\r\n\r\nActionButton.propTypes = {\r\n text: PropTypes.string.isRequired,\r\n icon: PropTypes.elementType.isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n primary: PropTypes.bool,\r\n // injected\r\n className: PropTypes.string.isRequired,\r\n};\r\n\r\nActionButton.defaultProps = {\r\n primary: true,\r\n};\r\n\r\nexport const TilesGridCellActionButton = ActionButton;\r\n","import React, { useCallback, useMemo } from 'react';\r\n\r\nconst AdsStudoThemeContext = React.createContext({});\r\n\r\n// theme is a black box object which could be platform specific\r\n// and is passed down to this context provider, and then\r\n// passed to getStyles functions in withAdsStudioDefaultStyles\r\nexport const AdsStudioThemeProvider = ({ theme, componentStyles, children }) => {\r\n //\r\n // get styles for a specific components by component name\r\n // the styles could be a function (theme) => styles, or an object\r\n const getComponentStyles = useCallback((componentName) => {\r\n const { components } = theme || {};\r\n if (componentStyles && componentStyles[componentName]) {\r\n return componentStyles[componentName];\r\n }\r\n if (components && components[componentName]) {\r\n return components[componentName];\r\n }\r\n return undefined;\r\n }, [componentStyles, theme]);\r\n\r\n const contextValue = useMemo(() => ({\r\n theme,\r\n getComponentStyles,\r\n }), [getComponentStyles, theme]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport const useAdsStudioTheme = () => React.useContext(AdsStudoThemeContext);\r\n","import _ from 'underscore';\r\nimport React, { useMemo } from 'react';\r\nimport { createUseStyles } from 'react-jss';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\n\r\nimport { useAdsStudioTheme } from './ads-studio-theme-provider';\r\n\r\nconst emptyAdsStudioTheme = { theme: {}, getComponentStyles: () => { } };\r\nconst getDisplayName = Component => Component.displayName || Component.name || 'Component';\r\n\r\nfunction useThemedStyles({ componentName, prefixClassName, getDefaultStyles }) {\r\n // get theme from ads studio themem context provider\r\n const { theme, getComponentStyles } = useAdsStudioTheme() || emptyAdsStudioTheme;\r\n\r\n // get themed styles\r\n const themedStyles = useMemo(() => {\r\n // check if there are any overriden styles for this component from theme provider\r\n let overridenStyles = {};\r\n if (getComponentStyles) {\r\n // it could be an function or an object\r\n const getOverridenStyles = getComponentStyles(componentName);\r\n overridenStyles = _.isFunction(getOverridenStyles) ? getOverridenStyles(theme || {}) : getOverridenStyles;\r\n }\r\n\r\n // default styles\r\n const defaultStyles = getDefaultStyles && getDefaultStyles(theme || {});\r\n\r\n // merge styles\r\n return { ...defaultStyles, ...overridenStyles };\r\n }, [componentName, getComponentStyles, getDefaultStyles, theme]);\r\n\r\n // create jss styles\r\n const useStyles = useMemo(\r\n () => createUseStyles(themedStyles, { name: prefixClassName || 'AS' }),\r\n [prefixClassName, themedStyles]\r\n );\r\n const classes = useStyles() || {};\r\n\r\n const styles = useMemo(() => ({ classes, themedStyles }), [classes, themedStyles]);\r\n return styles;\r\n}\r\n\r\n// use an external theme to decouple the wrapped components with a specific theme provider\r\n// eslint-disable-next-line valid-jsdoc\r\n/**\r\n * @deprecated this function is deprecated, and will be removed later\r\n */\r\nexport function withAdsStudioStyles(WrappedComponent, getDefaultStyles, options) {\r\n const {\r\n prefixClassName, // the prefix of the class names generated by react-jss\r\n useRawStyles, // also pass down the themed styles to the wrapped component, which may be used in Fluent UI components\r\n componentName, // the description name of WrappedComponent\r\n } = options || {};\r\n\r\n const finalComponentName = componentName || getDisplayName(WrappedComponent);\r\n\r\n const HOC = (props) => {\r\n const { classes, themedStyles } = useThemedStyles({ componentName: finalComponentName, prefixClassName, getDefaultStyles });\r\n return (\r\n \r\n );\r\n };\r\n\r\n HOC.displayName = `withAdsStudioStyles(${finalComponentName})`;\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n\r\n return HOC;\r\n}\r\n\r\n","const positionFill = {\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n};\r\n\r\nexport const getCellOverlayStyle = () => ({\r\n cellOverlayContainer: {\r\n ...positionFill,\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n background: 'linear-gradient(180deg, rgba(49, 34, 34, 0.3) 0%, rgba(49, 34, 34, 0.8) 53.12%, #312222 100%)',\r\n opacity: 0,\r\n transition: 'opacity 0.2s ease-out',\r\n borderRadius: 6,\r\n },\r\n});\r\n","\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { getCellOverlayStyle } from '../styles/tiles-grid-cell-overlay-style';\r\n\r\nconst CellOverlay = ({ children, classes }) => (\r\n
\r\n {children}\r\n
\r\n);\r\n\r\nCellOverlay.propTypes = {\r\n children: PropTypes.node,\r\n classes: PropTypes.shape({\r\n cellOverlayContainer: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nCellOverlay.defaultProps = {\r\n children: null,\r\n};\r\n\r\nexport const TilesGridCellOverlay = withAdsStudioStyles(CellOverlay, getCellOverlayStyle);\r\n","/* eslint-disable no-unused-vars */\r\nconst getCommonCellCardStyle = palette => ({\r\n position: 'relative',\r\n flexShrink: 1,\r\n flexGrow: 1,\r\n borderRadius: 6,\r\n backgroundColor: palette.neutralLight,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n});\r\n\r\nexport const getCellCardStyle = ({ components, core: { palette = {} } = {} } = {}) => ({\r\n cellCardContainer: {\r\n ...getCommonCellCardStyle(palette),\r\n },\r\n});\r\n\r\nexport const getCellCardWithOverlayStyle = ({ components, core: { palette = {} } = {} } = {}) => {\r\n const activeStyle = {\r\n '& .cell-overlay': {\r\n opacity: 1,\r\n\r\n '& .cell-overlay-actions': {\r\n opacity: 1,\r\n transform: 'translate(0px, -10px)',\r\n },\r\n },\r\n '& .cell-decorative-label-container': {\r\n '& .label-secondary-text': {\r\n opacity: 1,\r\n transform: 'translate(10px, 0px)',\r\n },\r\n },\r\n };\r\n return {\r\n cellCardContainer: getCommonCellCardStyle(palette),\r\n\r\n cellCardContainerOverflow: {\r\n overflow: 'hidden',\r\n },\r\n\r\n cellCardWithOverlayContainer: {\r\n '& .cell-overlay-actions': {\r\n display: 'flex',\r\n flex: 1,\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '100%',\r\n position: 'relative',\r\n opacity: 0.2,\r\n top: 10,\r\n transition: 'opacity 0.5s 0.1s, transform 0.3s 0.1s',\r\n },\r\n\r\n '& .static-cell-overlay-items': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n button: 0,\r\n },\r\n\r\n '&:hover, &:focus-within': activeStyle,\r\n },\r\n focused: activeStyle,\r\n };\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { TilesGridCellOverlay } from './tiles-grid-cell-overlay';\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport {\r\n getCellCardStyle,\r\n getCellCardWithOverlayStyle,\r\n} from '../styles/tiles-grid-cell-card-style';\r\n\r\nconst CellCardWithOverlay = ({\r\n children,\r\n isOverlayEnabled,\r\n isCellFocused,\r\n renderOverlayContent,\r\n renderStaticOverlayContent,\r\n onClick,\r\n customCellCardClass,\r\n classes,\r\n}) => {\r\n const onClickFunc = (event) => {\r\n if (onClick) {\r\n onClick();\r\n }\r\n if (event && event.stopPropagation) { event.stopPropagation(); }\r\n if (event && event.preventDefault) { event.preventDefault(); }\r\n };\r\n\r\n const onKeyDown = (event) => {\r\n if (event.keyCode === 13) { // Enter key\r\n onClickFunc();\r\n }\r\n };\r\n\r\n return (\r\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\r\n \r\n {children}\r\n {isOverlayEnabled && (\r\n \r\n
\r\n {renderOverlayContent ? renderOverlayContent() : null}\r\n
\r\n { renderStaticOverlayContent ?\r\n
\r\n {renderStaticOverlayContent()}\r\n
\r\n : null}\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nCellCardWithOverlay.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n renderOverlayContent: PropTypes.func,\r\n renderStaticOverlayContent: PropTypes.func,\r\n isOverlayEnabled: PropTypes.bool,\r\n isCellFocused: PropTypes.bool,\r\n onClick: PropTypes.func,\r\n customCellCardClass: PropTypes.string,\r\n classes: PropTypes.shape({\r\n containerClass: PropTypes.string,\r\n cellCardContainer: PropTypes.string,\r\n cellCardWithOverlayContainer: PropTypes.string,\r\n cellCardContainerOverflow: PropTypes.string,\r\n focused: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nCellCardWithOverlay.defaultProps = {\r\n isOverlayEnabled: true,\r\n isCellFocused: false,\r\n renderOverlayContent: null,\r\n renderStaticOverlayContent: null,\r\n customCellCardClass: undefined,\r\n onClick: undefined,\r\n};\r\n\r\nconst CellCard = ({ children, classes, customCellCardClass }) => (\r\n
\r\n {children}\r\n
\r\n);\r\n\r\nCellCard.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n customCellCardClass: PropTypes.string,\r\n classes: PropTypes.shape({\r\n containerClass: PropTypes.string,\r\n cellCardContainer: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nCellCard.defaultProps = {\r\n customCellCardClass: undefined,\r\n};\r\n\r\nexport const TilesGridCellCard = withAdsStudioStyles(CellCard, getCellCardStyle);\r\nexport const TilesGridCellCardWithOverlay = withAdsStudioStyles(CellCardWithOverlay, getCellCardWithOverlayStyle);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Icon } from '@fluentui/react';\r\n\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { getGridDecorativeIconStyle } from '../styles/tiles-grid-cell-decorative-icon';\r\n\r\nconst CellDecorativeIcon = ({\r\n iconName,\r\n classes,\r\n i18n,\r\n}) => (\r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Video'))}\r\n
\r\n
\r\n);\r\n\r\nCellDecorativeIcon.propTypes = {\r\n iconName: PropTypes.string.isRequired,\r\n classes: PropTypes.shape({\r\n centerContainer: PropTypes.string,\r\n circleContainer: PropTypes.string,\r\n iconContent: PropTypes.string,\r\n labelName: PropTypes.string,\r\n }),\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nCellDecorativeIcon.defaultProps = {\r\n classes: {},\r\n};\r\n\r\nexport const TilesGridCellDecorativeIcon\r\n = withAdsStudioStyles(CellDecorativeIcon, getGridDecorativeIconStyle);\r\n","/* eslint-disable no-unused-vars */\r\nexport const getGridDecorativeIconStyle = ({ components, core: { palette = {} } = {} } = {}) => ({\r\n centerContainer: {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n },\r\n circleContainer: {\r\n width: 80,\r\n height: 41,\r\n backgroundColor: 'rgb(50,49,48, 0.6)',\r\n borderRadius: 4,\r\n boxShadow: '0px 4px 16px rgb(0 0 0 / 14%)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n iconContent: {\r\n fontSize: 20,\r\n color: palette.white,\r\n },\r\n labelName: {\r\n fontSize: 16,\r\n color: palette.white,\r\n marginLeft: 5,\r\n },\r\n});\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useGridDecorativeLabelStyle = makeStyles({\r\n tilesGridCellDecorativeLabel: {\r\n color: tokens.colorNeutralForegroundInverted,\r\n fontWeight: 600,\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n\r\n '& .label-icon-and-text': {\r\n display: 'flex',\r\n ...shorthands.borderRadius('4px'),\r\n ...shorthands.padding('2px', '8px', '2px', '4px'),\r\n marginRight: '6px',\r\n // background: 'linear-gradient(158.29deg, #0078D4 16.69%, #4400D4 85.76%)',\r\n backgroundColor: tokens.colorNeutralBackgroundStatic,\r\n '& .label-icon': {\r\n marginRight: '4px',\r\n fontSize: '16px',\r\n },\r\n },\r\n\r\n '& .label-secondary-text': {\r\n position: 'relative',\r\n left: '-10px',\r\n opacity: 0,\r\n ...shorthands.transition('opacity', '0.5s', '0.1s', 'transform', '0.3s', '0.1s'),\r\n },\r\n\r\n '& .additional-icon-content': {\r\n width: '25px',\r\n height: '24px',\r\n backgroundColor: 'rgb(50,49,48, 0.6)',\r\n ...shorthands.borderRadius('4px'),\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n display: 'flex',\r\n marginRight: '8px',\r\n position: 'absolute',\r\n right: '50px',\r\n '& .additional-icon': {\r\n width: '17px',\r\n },\r\n },\r\n\r\n '& .label-additional-text': {\r\n position: 'absolute',\r\n right: '0px',\r\n '& .label-additional-content': {\r\n backgroundColor: tokens.colorNeutralBackgroundStatic,\r\n float: 'right',\r\n ...shorthands.padding('4px'),\r\n ...shorthands.borderRadius('4px'),\r\n },\r\n },\r\n },\r\n\r\n cellLabelDisplay: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { videoIcon } from '../../../asset-images';\r\nimport { useGridDecorativeLabelStyle } from '../styles/tiles-grid-cell-decorative-label';\r\n\r\nconst CellDecorativeLabel = ({\r\n text,\r\n icon: Icon,\r\n secondaryText,\r\n additionaIconName,\r\n additionalText,\r\n customClass,\r\n}) => {\r\n const classes = useGridDecorativeLabelStyle();\r\n\r\n return (\r\n
\r\n {\r\n (text || Icon) && (\r\n
\r\n {Icon && }\r\n {text &&
{text}
}\r\n
\r\n )\r\n }\r\n {secondaryText &&
{secondaryText}
}\r\n {\r\n additionaIconName && (\r\n
\r\n \"\"\r\n
\r\n )\r\n }\r\n {\r\n additionalText && (\r\n
\r\n
{additionalText}
\r\n
\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nCellDecorativeLabel.propTypes = {\r\n text: PropTypes.string,\r\n icon: PropTypes.elementType,\r\n additionaIconName: PropTypes.string,\r\n secondaryText: PropTypes.string,\r\n additionalText: PropTypes.string,\r\n customClass: PropTypes.shape({\r\n cellLabel: PropTypes.string,\r\n iconTextWrapper: PropTypes.string,\r\n }),\r\n};\r\n\r\nCellDecorativeLabel.defaultProps = {\r\n text: null,\r\n icon: null,\r\n secondaryText: '',\r\n additionalText: null,\r\n additionaIconName: null,\r\n customClass: {},\r\n};\r\n\r\nexport const TilesGridCellDecorativeLabel = CellDecorativeLabel;\r\n","/* eslint-disable max-len */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { IconButton } from '@fluentui/react';\r\n\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { getCellDeletionButtonDecoratorStyle } from '../styles/tiles-grid-cell-deletion-button-decorator-style';\r\n\r\nconst iconProps = { iconName: 'Clear' };\r\n\r\nconst CellDeletionButtonDecorator = ({\r\n item, onDelete, children, classes,\r\n}) => {\r\n const onClick = (event) => {\r\n if (onDelete) {\r\n onDelete(item);\r\n }\r\n if (event.stopPropagation) { event.stopPropagation(); }\r\n if (event.preventDefault) { event.preventDefault(); }\r\n };\r\n\r\n return (\r\n <>\r\n {children}\r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nCellDeletionButtonDecorator.propTypes = {\r\n item: PropTypes.shape({}).isRequired,\r\n onDelete: PropTypes.func,\r\n children: PropTypes.node.isRequired,\r\n classes: PropTypes.shape({\r\n cellDeletionButtonDecorator: PropTypes.string,\r\n deleteButton: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nCellDeletionButtonDecorator.defaultProps = {\r\n onDelete: undefined,\r\n};\r\n\r\nexport const TilesGridCellDeletionButtonDecorator = withAdsStudioStyles(\r\n CellDeletionButtonDecorator,\r\n getCellDeletionButtonDecoratorStyle\r\n);\r\n","/* eslint-disable no-unused-vars */\r\nexport const getCellDeletionButtonDecoratorStyle = ({ components, core: { palette = {} } = {} } = {}) => ({\r\n cellDeletionButtonDecorator: {\r\n position: 'absolute',\r\n bottom: 8,\r\n right: 10,\r\n },\r\n deleteButton: {\r\n backgroundColor: palette.themeLighter,\r\n opacity: 0.7,\r\n zIndex: 2,\r\n padding: 0,\r\n height: 24,\r\n width: 24,\r\n '&:hover': {\r\n opacity: 0.9,\r\n },\r\n '&:active': {\r\n opacity: 1,\r\n },\r\n '& .ms-Button-icon': {\r\n margin: 0,\r\n },\r\n },\r\n});\r\n","const positionFill = {\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n};\r\n\r\nexport const getTilesGridCellImageStyles = () => ({\r\n tilesGridCellImageContainer: {\r\n '& .cell-image-state': {\r\n ...positionFill,\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n },\r\n imageStateOverlayClass: {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n top: 0,\r\n left: 0,\r\n },\r\n stateParent: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '100%',\r\n height: '100%',\r\n },\r\n reloadBtn: {\r\n zIndex: 1,\r\n },\r\n});\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { noop } from 'underscore';\r\nimport classnames from 'classnames';\r\n\r\nimport { Image as FluentImage, ImageFit, ImageLoadState } from '@fluentui/react';\r\nimport { ArrowClockwiseRegular } from '@fluentui/react-icons';\r\n\r\nimport { AdsStudioSpinner } from '../../ads-studio-spinner';\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { TilesGridCellActionButton as ActionButton } from './tiles-grid-cell-action-button';\r\nimport { getTilesGridCellImageStyles } from '../styles/tiles-grid-cell-image';\r\n\r\nconst RETRY_COUNT = 3;\r\nconst RETRY_DEALY = 1000;\r\n\r\nconst CellImage = ({\r\n src,\r\n alt,\r\n showSpinner,\r\n onLoaded,\r\n onError,\r\n i18n,\r\n onClick,\r\n enableRetry,\r\n classes,\r\n customClasses,\r\n onCustomizedSpinner,\r\n imageFit,\r\n}) => {\r\n //\r\n const [imageLoadState, setImageLoadState] = useState(ImageLoadState.notLoaded);\r\n\r\n const onLoadingStateChange = useCallback((s, onLoadError) => {\r\n if (s === ImageLoadState.loaded) {\r\n onLoaded(true);\r\n } else if (s === ImageLoadState.error) {\r\n onLoadError();\r\n // don't set error state until all retrying are failed\r\n return;\r\n }\r\n setImageLoadState(s);\r\n }, [onLoaded]);\r\n\r\n // retry image loading by creating a HTML Image element\r\n const reloadImage = useCallback((onLoadError) => {\r\n const img = new Image();\r\n img.onerror = () => {\r\n onLoadingStateChange(ImageLoadState.error, onLoadError);\r\n };\r\n img.onload = () => {\r\n onLoadingStateChange(ImageLoadState.loaded);\r\n };\r\n onLoadingStateChange(ImageLoadState.notLoaded);\r\n img.src = src;\r\n }, [onLoadingStateChange, src]);\r\n\r\n const onErrorWithRetry = useCallback((retryCount = RETRY_COUNT) => {\r\n if (enableRetry && retryCount > 0) {\r\n setTimeout(() => reloadImage(() => onErrorWithRetry(retryCount - 1)), RETRY_DEALY);\r\n } else {\r\n setImageLoadState(ImageLoadState.error);\r\n if (onError) {\r\n onError();\r\n }\r\n }\r\n }, [enableRetry, onError, reloadImage]);\r\n\r\n const onReloadImage = useCallback((event) => {\r\n if (imageLoadState === ImageLoadState.error) {\r\n reloadImage(onErrorWithRetry);\r\n }\r\n if (event.stopPropagation) { event.stopPropagation(); }\r\n if (event.preventDefault) { event.preventDefault(); }\r\n }, [imageLoadState, onErrorWithRetry, reloadImage]);\r\n\r\n const onImageLoadingStateChange = useCallback((s) => {\r\n onLoadingStateChange(s, onErrorWithRetry);\r\n }, [onErrorWithRetry, onLoadingStateChange]);\r\n\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {imageLoadState === ImageLoadState.notLoaded && showSpinner && (onCustomizedSpinner ?\r\n onCustomizedSpinner() : ())\r\n }\r\n { imageLoadState === ImageLoadState.error && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nCellImage.propTypes = {\r\n src: PropTypes.string.isRequired,\r\n alt: PropTypes.string.isRequired,\r\n showSpinner: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onLoaded: PropTypes.func,\r\n onError: PropTypes.func,\r\n onClick: PropTypes.func,\r\n onCustomizedSpinner: PropTypes.func,\r\n enableRetry: PropTypes.bool,\r\n classes: PropTypes.shape({\r\n tilesGridCellImageContainer: PropTypes.string,\r\n imageStateOverlayClass: PropTypes.string,\r\n stateParent: PropTypes.string,\r\n reloadBtn: PropTypes.string,\r\n }).isRequired,\r\n customClasses: PropTypes.shape({\r\n containerClass: PropTypes.string,\r\n imageClass: PropTypes.string,\r\n }),\r\n imageFit: PropTypes.number,\r\n};\r\n\r\nCellImage.defaultProps = {\r\n showSpinner: true,\r\n onLoaded: noop,\r\n onError: noop,\r\n onClick: noop,\r\n enableRetry: true,\r\n customClasses: {},\r\n onCustomizedSpinner: undefined,\r\n imageFit: ImageFit.cover,\r\n};\r\n\r\nexport const TilesGridCellImage = withAdsStudioStyles(CellImage, getTilesGridCellImageStyles);\r\n","import { makeResetStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useCellSectionDecoratorStyle = makeResetStyles({\r\n width: '100%',\r\n height: '100%',\r\n '& .grid-cell-selection-decorator': {\r\n width: '100%',\r\n height: '100%',\r\n ...shorthands.overflow('hidden'),\r\n },\r\n '& .selected-checkbox': {\r\n position: 'absolute',\r\n top: '6px',\r\n right: '6px',\r\n },\r\n '& .selectedState': {\r\n outlineStyle: 'solid',\r\n outlineWidth: '4px',\r\n outlineColor: tokens.colorBrandBackground,\r\n ...shorthands.borderRadius('6px'),\r\n },\r\n '& .checkbox': {\r\n backgroundColor: tokens.colorNeutralForegroundInverted,\r\n zIndex: 2,\r\n width: '20px',\r\n height: '20px',\r\n ...shorthands.borderRadius(tokens.borderRadiusSmall),\r\n '& .fui-Checkbox__indicator': {\r\n width: '20px',\r\n height: '20px',\r\n ...shorthands.margin(0),\r\n },\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n/* eslint-disable jsx-a11y/click-events-have-key-events */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Checkbox, mergeClasses } from '@fluentui/react-components';\r\n\r\nimport { useCellSectionDecoratorStyle } from '../styles/tiles-grid-cell-selection-decorator-style';\r\n\r\nexport const TilesGridCellSelectionDecorator = ({\r\n item, selected, onClick, children, ariaLabel, isFocused, classes,\r\n}) => {\r\n const onClickFunc = (event) => {\r\n if (onClick) {\r\n onClick({ item, selected });\r\n }\r\n if (event.stopPropagation) { event.stopPropagation(); }\r\n if (event.preventDefault) { event.preventDefault(); }\r\n };\r\n\r\n const onKeyDown = (event) => {\r\n if (event.keyCode === 13) { // Enter key\r\n onClickFunc(event);\r\n }\r\n };\r\n\r\n const cellSelectionDecoratorWrapper = useCellSectionDecoratorStyle();\r\n\r\n return (\r\n
\r\n \r\n {children}\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nTilesGridCellSelectionDecorator.propTypes = {\r\n item: PropTypes.shape({}).isRequired,\r\n selected: PropTypes.bool.isRequired,\r\n onClick: PropTypes.func,\r\n children: PropTypes.node.isRequired,\r\n classes: PropTypes.shape({\r\n cellSelectionDecorator: PropTypes.string,\r\n cellSelectionDecoratorWrapper: PropTypes.string,\r\n selectedState: PropTypes.string,\r\n selectedStateWrapper: PropTypes.string,\r\n }),\r\n ariaLabel: PropTypes.string,\r\n isFocused: PropTypes.bool,\r\n};\r\n\r\nTilesGridCellSelectionDecorator.defaultProps = {\r\n onClick: undefined,\r\n ariaLabel: '',\r\n isFocused: false,\r\n classes: {},\r\n};\r\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const TilesGridLoadingCell = ({\r\n onLoading, containerClass, children,\r\n}) => {\r\n const gridCellContent = useRef(null);\r\n const [hasSetUpObserver, setHasSetUpObserver] = useState(false);\r\n const onLoadingCalled = useRef(false);\r\n\r\n const observer = useMemo(() => {\r\n onLoadingCalled.current = false;\r\n if (window.IntersectionObserver && onLoading) {\r\n return new IntersectionObserver((entries) => {\r\n const [entry] = entries || [];\r\n\r\n if (entry && entry.isIntersecting && onLoading && !onLoadingCalled.current) {\r\n onLoading();\r\n onLoadingCalled.current = true;\r\n\r\n if (entry && entry.target) {\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n }, {\r\n root: null,\r\n rootMargin: '0px',\r\n threshold: 0.0,\r\n });\r\n }\r\n return null;\r\n }, [onLoading]);\r\n\r\n useEffect(() => {\r\n if (observer && gridCellContent.current && !hasSetUpObserver) {\r\n observer.observe(gridCellContent.current);\r\n setHasSetUpObserver(true);\r\n }\r\n }, [observer, gridCellContent, hasSetUpObserver]);\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n};\r\n\r\nTilesGridLoadingCell.propTypes = {\r\n onLoading: PropTypes.func,\r\n children: PropTypes.node,\r\n containerClass: PropTypes.string,\r\n};\r\n\r\nTilesGridLoadingCell.defaultProps = {\r\n onLoading: null,\r\n children: null,\r\n containerClass: undefined,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst commonStyles = {\r\n boxShadow: '0px 1.47522px 4.42567px rgba(0, 0, 0, 0.2), inset 0.295044px -0.295044px 0.590089px rgba(0, 0, 0, 0.2), inset -0.590089px 0.590089px 1.47522px rgba(255, 255, 255, 0.3)',\r\n ...shorthands.borderRadius('2px'),\r\n};\r\n\r\nexport const useFolderIconStyle = makeStyles({\r\n folderIconContainer: {\r\n position: 'relative',\r\n height: '52px',\r\n width: '68px',\r\n\r\n '& .folder-tag': {\r\n width: '50%',\r\n height: '28.36%',\r\n ...commonStyles,\r\n },\r\n\r\n '& .folder-content': {\r\n width: '100%',\r\n height: '85.84%',\r\n ...commonStyles,\r\n\r\n position: 'absolute',\r\n left: 0,\r\n bottom: 0,\r\n ...shorthands.overflow('hidden'),\r\n },\r\n },\r\n folderTag: {\r\n backgroundColor: '#1F65F1',\r\n },\r\n emptyFolderTag: {\r\n backgroundColor: '#A0A0A0',\r\n },\r\n folderContent: {\r\n backgroundColor: '#1F65F1',\r\n },\r\n emptyFolderContent: {\r\n backgroundColor: '#C4C4C4',\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses, Image } from '@fluentui/react-components';\r\n\r\nimport { useFolderIconStyle } from './style';\r\n\r\nconst FolderIconInternal = ({\r\n thumbnailImageUrl, isEmptyFolder, folderIconRootClassName,\r\n}) => {\r\n const classes = useFolderIconStyle();\r\n return (\r\n
\r\n
\r\n
\r\n { thumbnailImageUrl && }\r\n
\r\n
\r\n );\r\n};\r\n\r\nFolderIconInternal.propTypes = {\r\n thumbnailImageUrl: PropTypes.string,\r\n folderIconRootClassName: PropTypes.string,\r\n isEmptyFolder: PropTypes.bool,\r\n};\r\n\r\nFolderIconInternal.defaultProps = {\r\n thumbnailImageUrl: undefined,\r\n folderIconRootClassName: '',\r\n isEmptyFolder: false,\r\n};\r\n\r\nexport const FolderIcon = FolderIconInternal;\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useCellSectionDecoratorStyle = makeStyles({\r\n dragPreview: {\r\n width: '100px',\r\n height: '100px',\r\n display: 'block',\r\n position: 'relative',\r\n },\r\n dragPreviewImage: {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n opacity: 0.5,\r\n },\r\n dragPreviewFolderWrapper: {\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n dragPreviewFolder: {\r\n width: '100px',\r\n height: '76px',\r\n },\r\n dragPreviewCount: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n textAlign: 'center',\r\n verticalAlign: 'middle',\r\n width: '100px',\r\n height: '100px',\r\n lineHeight: '100px',\r\n backgroundColor: 'rgba(0,0,0,0.5)',\r\n color: 'white',\r\n fontSize: '14px',\r\n },\r\n});\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { FolderIcon } from '../../folder-icon-component';\r\nimport { useCellSectionDecoratorStyle } from '../styles/tiles-grid-cell-drag-decorator-style';\r\n\r\nexport const TilesGridCellDragDecorator = ({\r\n draggable,\r\n children,\r\n item,\r\n dragItemsLength,\r\n onDrag,\r\n i18n,\r\n selected,\r\n}) => {\r\n const classes = useCellSectionDecoratorStyle();\r\n\r\n const dragPreviewDescription = useMemo(() => {\r\n let dragItemsLengthInner = dragItemsLength;\r\n if (!selected) {\r\n dragItemsLengthInner += 1;\r\n }\r\n if (dragItemsLengthInner > 1) {\r\n return i18n.getString(_TL_('{{dragItemsLength}} items'), { dragItemsLength: dragItemsLengthInner });\r\n }\r\n return i18n.getString(_TL_('1 item'));\r\n }, [dragItemsLength, i18n, selected]);\r\n\r\n const renderDragPreview = useCallback(() => (\r\n
\r\n {\r\n item.url || item.thumbnailUrl ? (\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )\r\n }\r\n
{dragPreviewDescription}
\r\n
\r\n ), [classes, dragPreviewDescription, item.thumbnailUrl, item.url]);\r\n\r\n const onDragStart = useCallback((event) => {\r\n onDrag({ item });\r\n const container = document.createElement('div');\r\n const DragPreview = renderDragPreview;\r\n ReactDOM.render(, container);\r\n const domElement = container.firstChild;\r\n document.body.appendChild(domElement);\r\n\r\n if (event && event.dataTransfer && event.dataTransfer.setDragImage) {\r\n event.dataTransfer.setDragImage(domElement, 0, 0);\r\n }\r\n }, [item, onDrag, renderDragPreview]);\r\n\r\n return (\r\n draggable ?\r\n \r\n {children}\r\n
: children\r\n );\r\n};\r\n\r\nTilesGridCellDragDecorator.propTypes = {\r\n draggable: PropTypes.bool,\r\n children: PropTypes.node.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n item: PropTypes.shape({}),\r\n onDrag: PropTypes.func,\r\n dragItemsLength: PropTypes.number,\r\n selected: PropTypes.bool,\r\n};\r\n\r\nTilesGridCellDragDecorator.defaultProps = {\r\n draggable: false,\r\n item: {},\r\n onDrag: () => null,\r\n dragItemsLength: 1,\r\n selected: false,\r\n};\r\n","import { makeResetStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const useFolderGridCellDropStyle = makeResetStyles({\r\n outlineOffset: '6px',\r\n outlineStyle: 'dashed',\r\n outlineWidth: '2px',\r\n outlineColor: tokens.colorBrandBackground,\r\n});\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport { useFolderGridCellDropStyle } from '../styles/tiles-grid-cell-drop-decorator-style';\r\n\r\nexport const TilesGridCellDropDecorator = ({\r\n children,\r\n droppable,\r\n onDrop,\r\n customClassName,\r\n}) => {\r\n const [isOver, setIsOver] = useState(false);\r\n\r\n const tilesGridCellDropOver = useFolderGridCellDropStyle();\r\n\r\n const onDragOver = useCallback((event) => {\r\n event.preventDefault();\r\n setIsOver(true);\r\n }, []);\r\n\r\n const onDragLeave = useCallback(() => {\r\n setIsOver(false);\r\n }, []);\r\n\r\n const onDropHandler = useCallback((event) => {\r\n event.preventDefault();\r\n setIsOver(false);\r\n onDrop();\r\n }, [onDrop]);\r\n\r\n return (\r\n droppable ? (\r\n \r\n {children}\r\n \r\n ) : children\r\n );\r\n};\r\n\r\nTilesGridCellDropDecorator.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n droppable: PropTypes.bool,\r\n onDrop: PropTypes.func,\r\n customClassName: PropTypes.string,\r\n};\r\n\r\nTilesGridCellDropDecorator.defaultProps = {\r\n droppable: false,\r\n onDrop: () => null,\r\n customClassName: '',\r\n};\r\n","import { DEFAULT_PAGE_SIZE } from '../../model';\r\n\r\nconst ROW_HEIGHT = 275;\r\nconst MAX_COLUMN_WIDTH = 350;\r\nconst MIN_COLUMN_WIDTH = 250;\r\nconst DEFAULT_ASPECT_RATIO = 0.9;\r\n\r\nexport const DEFAULT_CONFIG = {\r\n // if this value is set, rowHeight vallue is ignored, and\r\n // the row height is calculated by columnWidth * aspectRatio\r\n aspectRatio: DEFAULT_ASPECT_RATIO,\r\n maxColumnWidth: MAX_COLUMN_WIDTH,\r\n minColumnWidth: MIN_COLUMN_WIDTH,\r\n rowHeight: ROW_HEIGHT,\r\n preferredCellsPerPage: DEFAULT_PAGE_SIZE,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport { Grid } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { withAdsStudioStyles } from '../../theme/with-ads-studio-styles';\r\n\r\nimport { getTilesGridStyle } from './styles/tiles-grid-style';\r\nimport { DEFAULT_CONFIG } from './default-grid-config';\r\n\r\n\r\nconst TilesGridInternal = ({\r\n items,\r\n onRenderCell,\r\n config,\r\n classes,\r\n}) => {\r\n const onRenderCellImpl = useCallback((gridItem) => {\r\n const { item } = gridItem;\r\n const { _index } = item;\r\n return (\r\n
\r\n {onRenderCell({ item, index: _index })}\r\n
\r\n );\r\n }, [onRenderCell]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nTilesGridInternal.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.shape({})),\r\n onRenderCell: PropTypes.func.isRequired,\r\n config: PropTypes.shape({\r\n aspectRatio: PropTypes.number,\r\n maxColumnWidth: PropTypes.number,\r\n minColumnWidth: PropTypes.number,\r\n rowHeight: PropTypes.number,\r\n preferredCellsPerPage: PropTypes.number,\r\n columnPadding: PropTypes.number,\r\n }),\r\n // injected styles\r\n classes: PropTypes.shape({\r\n tilesGridContainer: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nTilesGridInternal.defaultProps = {\r\n items: [],\r\n config: DEFAULT_CONFIG,\r\n};\r\n\r\nexport const TilesGrid = withAdsStudioStyles(TilesGridInternal, getTilesGridStyle);\r\n","export const getTilesGridStyle = () => ({\r\n tilesGridContainer: {\r\n // grid styles\r\n '& .tiles-grid': {\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& .ms-List-page': {\r\n overflowX: 'hidden',\r\n },\r\n },\r\n\r\n '& .tiles-grid-list-cell': {\r\n float: 'left', // make the cells shown as grid style\r\n },\r\n\r\n // cell styles\r\n '& .tiles-grid-cell': {\r\n position: 'relative',\r\n boxSizing: 'border-box',\r\n width: '100%',\r\n height: '100%',\r\n },\r\n },\r\n});\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { TilesGrid } from './tiles-grid';\r\n\r\nfunction findItem(items, itemToFind, itemKey) {\r\n return _.find(items, item => item[itemKey] === itemToFind[itemKey]);\r\n}\r\n\r\nfunction addItem(items, itemToAdd, itemKey) {\r\n if (!findItem(items, itemToAdd, itemKey)) {\r\n return [[...items, itemToAdd], true];\r\n }\r\n return [items, false];\r\n}\r\n\r\nfunction removeItem(items, itemToRemove, itemKey) {\r\n if (findItem(items, itemToRemove, itemKey)) {\r\n return [_.filter(items, item => item[itemKey] !== itemToRemove[itemKey]), true];\r\n }\r\n return [items, false];\r\n}\r\n\r\nexport const MultiSelectionGrid = ({\r\n itemKey,\r\n onSelectionChange,\r\n onRenderCell,\r\n items,\r\n selectedItems: propSelectedItems,\r\n ...rest\r\n}) => {\r\n const selectedItems = useMemo(() => propSelectedItems || [], [propSelectedItems]);\r\n\r\n // force to re-render when selection changed\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const allItems = useMemo(() => ([...items || []]), [items, selectedItems]);\r\n\r\n const selectItem = useCallback((item, selected) => {\r\n const action = selected ? addItem : removeItem;\r\n const [newSelectedItems, updated] = action(selectedItems, item, itemKey);\r\n if (updated) {\r\n if (onSelectionChange) {\r\n onSelectionChange({ item, selected, selectedItems: newSelectedItems });\r\n }\r\n }\r\n }, [itemKey, onSelectionChange, selectedItems]);\r\n\r\n const onRenderCellImpl = useCallback(({ item, index }) => {\r\n const selected = !!findItem(selectedItems, item, itemKey);\r\n const fnSelectItem = _.partial(selectItem, item);\r\n return onRenderCell({\r\n item, index, selected, selectItem: fnSelectItem,\r\n });\r\n }, [itemKey, onRenderCell, selectItem, selectedItems]);\r\n\r\n return ;\r\n};\r\n\r\nMultiSelectionGrid.propTypes = {\r\n itemKey: PropTypes.string,\r\n items: PropTypes.arrayOf(PropTypes.shape({})),\r\n selectedItems: PropTypes.arrayOf(PropTypes.shape({})),\r\n onSelectionChange: PropTypes.func,\r\n onRenderCell: PropTypes.func.isRequired,\r\n};\r\n\r\nMultiSelectionGrid.defaultProps = {\r\n itemKey: 'id',\r\n items: [],\r\n selectedItems: [],\r\n onSelectionChange: undefined,\r\n};\r\n","export const getSectionTilesGridStyle = () => ({\r\n sectionTilesGridContainer: {\r\n '& .section-title': {\r\n fontSize: 12,\r\n fontWeight: 400,\r\n lineHeight: '16px',\r\n color: '#424242',\r\n marginBottom: 8,\r\n marginTop: 8,\r\n '&:first-child': {\r\n marginTop: 0,\r\n },\r\n },\r\n '& .section-loading': {\r\n margin: 'auto',\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\nimport { MultiSelectionGrid } from './multi-selection-grid';\r\nimport { getSectionTilesGridStyle } from './styles/section-tiles-grid-style';\r\nimport { TilesGrid } from './tiles-grid';\r\nimport { TilesGridLoadingCell } from './grid-cells';\r\nimport { withAdsStudioStyles } from '../../theme/with-ads-studio-styles';\r\n\r\nconst SectionTilesGridInternal = ({\r\n sectionData, onRenderCell, loadNextPage, multiSelectionEnabled, onSelectionChange, onRenderLoadingCell, classes, ...otherProps\r\n}) => {\r\n const wrappedSectionData = useMemo(() => sectionData.map(section => ({\r\n onRenderCell: (params) => {\r\n const { sectionName } = section || {};\r\n return onRenderCell({ ...params, sectionName });\r\n },\r\n // to support selectoin on grid\r\n onSelectionChange: onSelectionChange ?\r\n (params) => {\r\n const { sectionName } = section || {};\r\n onSelectionChange({ ...params, sectionName });\r\n } : undefined,\r\n onRenderLoadingCell: () => {\r\n const { items, totalItemCount } = section || {};\r\n if (onRenderLoadingCell) {\r\n return onRenderLoadingCell({ items, totalItemCount });\r\n }\r\n if (items.length > 0 && items.length < totalItemCount) {\r\n return
;\r\n }\r\n return null;\r\n },\r\n ...section,\r\n })), [loadNextPage, onRenderCell, onRenderLoadingCell, onSelectionChange, sectionData]);\r\n\r\n // don't show section title if only one section has data\r\n const countOfSectionsWithData =\r\n _.filter(sectionData, sec => sec.totalItemCount > 0).length;\r\n\r\n const GridComponent = multiSelectionEnabled ? MultiSelectionGrid : TilesGrid;\r\n\r\n return (\r\n
\r\n {wrappedSectionData.map(({\r\n sectionName,\r\n sectionTitle,\r\n sectionClassName,\r\n items,\r\n config,\r\n totalItemCount,\r\n ...rest\r\n }) => (\r\n (items && items.length >= 0) ?\r\n \r\n {countOfSectionsWithData > 1 && items.length > 0 ?
{sectionTitle}
: null}\r\n {\r\n items.length > 0 &&\r\n \r\n }\r\n {\r\n rest.onRenderLoadingCell()\r\n }\r\n
\r\n : null\r\n ))}\r\n \r\n );\r\n};\r\n\r\nSectionTilesGridInternal.propTypes = {\r\n sectionData: PropTypes.arrayOf(PropTypes.shape({\r\n sectionName: PropTypes.string,\r\n sectionTitle: PropTypes.string,\r\n sectionClassName: PropTypes.string,\r\n items: PropTypes.arrayOf(PropTypes.shape({})),\r\n selectedItems: PropTypes.arrayOf(PropTypes.shape({})), // to support multiple selection\r\n totalItemCount: PropTypes.number, // total item count, including not loaded items\r\n config: PropTypes.shape({\r\n aspectRatio: PropTypes.number,\r\n maxColumnWidth: PropTypes.number,\r\n minColumnWidth: PropTypes.number,\r\n rowHeight: PropTypes.number,\r\n preferredCellsPerPage: PropTypes.number,\r\n }),\r\n })).isRequired,\r\n onRenderCell: PropTypes.func.isRequired,\r\n loadNextPage: PropTypes.func,\r\n\r\n multiSelectionEnabled: PropTypes.bool,\r\n onSelectionChange: PropTypes.func,\r\n onRenderLoadingCell: PropTypes.func,\r\n\r\n classes: PropTypes.shape({\r\n sectionTilesGridContainer: PropTypes.string,\r\n gridConainerClass: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nSectionTilesGridInternal.defaultProps = {\r\n multiSelectionEnabled: false,\r\n onSelectionChange: undefined,\r\n loadNextPage: _.noop,\r\n onRenderLoadingCell: undefined,\r\n};\r\n\r\nexport const SectionTilesGrid = withAdsStudioStyles(SectionTilesGridInternal, getSectionTilesGridStyle);\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyle = makeStyles({\r\n overflow: {\r\n display: 'block',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n});\r\n","/* eslint-disable object-curly-newline */\r\nimport _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Tooltip, mergeClasses } from '@fluentui/react-components';\r\nimport { useStyle } from './styles';\r\n\r\nexport const splitString = (text, substr) => {\r\n //\r\n if (!text || !substr || _.isEmpty(substr)) {\r\n return [{ matched: false, text, idx: 0 }];\r\n }\r\n\r\n // case-insensitive\r\n const lowerText = text.toLowerCase();\r\n const lowerSubstr = substr.toLowerCase();\r\n\r\n let startIndex = 0;\r\n const fragments = [];\r\n\r\n while (startIndex < text.length) {\r\n const index = lowerText.indexOf(lowerSubstr, startIndex);\r\n if (index === -1) {\r\n fragments.push({ matched: false, text: text.substring(startIndex) });\r\n break;\r\n } else if (index > startIndex) {\r\n fragments.push({ matched: false, text: text.substring(startIndex, index) });\r\n fragments.push({ matched: true, text: text.substring(index, index + substr.length) });\r\n startIndex = index + substr.length;\r\n } else {\r\n fragments.push({ matched: true, text: text.substring(index, index + substr.length) });\r\n startIndex = index + substr.length;\r\n }\r\n }\r\n\r\n // add an idx field for each fragment\r\n const fragmentsWithIndex = fragments.map((f, idx) => ({ ...f, idx }));\r\n return fragmentsWithIndex;\r\n};\r\n\r\nexport const TextWithHighlightImp = ({\r\n text: txt, highlightedText, highlightedClassname, enableTooltip,\r\n}) => {\r\n const textFragments = splitString(txt, highlightedText);\r\n\r\n const content = (\r\n \r\n {\r\n textFragments.map(({ matched, text, idx }) =>\r\n {text})\r\n }\r\n \r\n );\r\n\r\n const classes = useStyle();\r\n\r\n return enableTooltip ? (\r\n {txt}}\r\n relationship=\"inaccessible\"\r\n withArrow\r\n positioning=\"above-start\"\r\n >\r\n
\r\n {content}\r\n
\r\n \r\n ) : content;\r\n};\r\n\r\nTextWithHighlightImp.propTypes = {\r\n text: PropTypes.string,\r\n highlightedText: PropTypes.string,\r\n highlightedClassname: PropTypes.string,\r\n enableTooltip: PropTypes.bool,\r\n};\r\n\r\nTextWithHighlightImp.defaultProps = {\r\n text: '',\r\n highlightedText: undefined,\r\n highlightedClassname: 'highlighted-text',\r\n enableTooltip: false,\r\n};\r\n\r\nexport const TextWithHighlight = TextWithHighlightImp;\r\n","import { shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const positionFill = {\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n};\r\n\r\nexport const getSharedAssetContainerStyle = () => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexWrap: 'nowrap',\r\n boxSizing: 'border-box',\r\n\r\n // name and ID\r\n '& .cell-description': {\r\n display: 'flex',\r\n flexShrink: 0,\r\n flexGrow: 0,\r\n justifyContent: 'space-between',\r\n fontWeight: 600,\r\n fontSize: '12px',\r\n ...shorthands.margin('12px', '4px'),\r\n\r\n '& .cell-description-name': {\r\n flexShrink: 1,\r\n flexGrow: 1,\r\n ...shorthands.overflow('hidden'),\r\n marginRight: '12px',\r\n },\r\n\r\n '& .cell-description-id': {\r\n flexShrink: 0,\r\n flexGrow: 0,\r\n },\r\n\r\n '& .highlighted-text': {\r\n backgroundColor: tokens.colorPaletteYellowBackground3,\r\n },\r\n },\r\n});\r\n\r\nexport const getSharedMultiSelectingCellStyles = () => ({\r\n // only show checkbox on overlay if it is NOT in multi-selecting mode\r\n selectableCardContainerAutoHideCheckbox: {\r\n '& .cell-image-frame': {\r\n ...shorthands.overflow('hidden'),\r\n ...shorthands.borderRadius('6px'),\r\n },\r\n\r\n '& .selected-checkbox': {\r\n visibility: 'hidden',\r\n },\r\n\r\n '&:hover': {\r\n '& .selected-checkbox': {\r\n visibility: 'visible',\r\n // '& .ms-Checkbox-checkbox': {\r\n // ...shorthands.border('2px solid white !important'),\r\n // },\r\n '& .ms-Checkbox-checkmark': {\r\n color: tokens.colorNeutralForegroundInverted,\r\n },\r\n },\r\n },\r\n\r\n '& .visible-checkbox': {\r\n visibility: 'visible',\r\n // '& .ms-Checkbox-checkbox': {\r\n // border: '2px solid white !important',\r\n // },\r\n '& .ms-Checkbox-checkmark': {\r\n color: tokens.colorNeutralForegroundInverted,\r\n },\r\n },\r\n },\r\n\r\n selectableCardContainer: {\r\n '& .cell-image-frame': {\r\n ...shorthands.overflow('hidden'),\r\n ...shorthands.borderRadius('6px'),\r\n },\r\n\r\n '& .selected-checkbox': {\r\n visibility: 'visible',\r\n // '& .ms-Checkbox-checkbox': {\r\n // border: '2px solid white !important',\r\n // },\r\n '& .ms-Checkbox-checkmark': {\r\n color: tokens.colorNeutralForegroundInverted,\r\n },\r\n },\r\n },\r\n});\r\n","import { makeResetStyles, shorthands, tokens } from '@fluentui/react-components';\r\nimport { positionFill } from './../shared-cell-style';\r\n\r\n/* eslint-disable no-unused-vars */\r\nexport const iconStyles = {\r\n root: {\r\n position: 'relative',\r\n top: '3px',\r\n marginLeft: '12px',\r\n marginRight: '5px',\r\n },\r\n};\r\n\r\nexport const videoSvgIconStyles = {\r\n ...iconStyles,\r\n root: {\r\n ...iconStyles.root,\r\n top: '5px',\r\n width: '15px',\r\n opacity: 0.8,\r\n },\r\n};\r\n\r\nexport const useFolderGridCellStyle = makeResetStyles({\r\n display: 'flex',\r\n flexWrap: 'nowrap',\r\n boxSizing: 'border-box',\r\n height: '86px',\r\n\r\n '& .folder-grid-cell-content': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n\r\n justifyContent: 'flex-start',\r\n alignItems: 'center',\r\n backgroundColor: '#fff',\r\n ...shorthands.padding('16px'),\r\n cursor: 'pointer',\r\n\r\n ...shorthands.borderRadius('6px'),\r\n ...positionFill,\r\n\r\n '& .folder-thumbnail': {\r\n display: 'flex',\r\n flexGrow: 0,\r\n flexShrink: 0,\r\n marginRight: '16px',\r\n },\r\n\r\n '& .folder-info': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n justifyContent: 'space-between',\r\n height: '100%',\r\n paddingTop: '6px',\r\n\r\n ...shorthands.overflow('hidden'),\r\n whiteSpace: 'nowrap',\r\n\r\n '& .folder-name': {\r\n fontStyle: 'normal',\r\n fontWeight: 600,\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n\r\n '& .highlighted-text': {\r\n backgroundColor: tokens.colorPaletteYellowBackground3,\r\n },\r\n },\r\n\r\n '& .folder-newlabel-counting': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n ...shorthands.padding('1px'),\r\n\r\n '& .counting-info': {\r\n display: 'block',\r\n ...shorthands.overflow('hidden'),\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n\r\n fontStyle: 'normal',\r\n fontWeight: 400,\r\n fontSize: '12px',\r\n lineHeight: '15px',\r\n textAlign: 'right',\r\n\r\n position: 'relative',\r\n top: '2px',\r\n\r\n '& .count-icon': {\r\n marginLeft: '12px',\r\n marginRight: '4px',\r\n fontSize: '14px',\r\n '&:first-child': {\r\n marginLeft: '0px',\r\n },\r\n },\r\n\r\n '& span': {\r\n verticalAlign: 'top',\r\n },\r\n },\r\n\r\n '& .empty-desc': {\r\n fontSize: '12px',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .grid-cell-with-accessory': {\r\n paddingRight: '54px',\r\n },\r\n\r\n '& .folder-cell-accessory': {\r\n position: 'absolute',\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n width: '42px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n\r\n '& .folder-grid-loading-cell-content': {\r\n height: '100%',\r\n },\r\n\r\n '& .selectable-cell-card': {\r\n backgroundColor: 'white',\r\n },\r\n});\r\n","/* eslint-disable object-curly-newline */\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { Checkbox, Tooltip } from '@fluentui/react-components';\r\nimport { FolderRegular, ImageRegular, VideoRegular } from '@fluentui/react-icons';\r\n\r\nimport {\r\n TilesGridCellCard,\r\n TilesGridCellDragDecorator,\r\n TilesGridCellDropDecorator,\r\n} from '../../ads-studio-tile-grid';\r\nimport { FolderIcon } from '../../folder-icon-component';\r\nimport { TextWithHighlight } from '../../text-with-highlight';\r\nimport { FolderAssetType } from '../../../model';\r\n\r\nimport {\r\n useFolderGridCellStyle\r\n} from './style';\r\n\r\nfunction getCountDescription({\r\n itemInfo,\r\n i18n,\r\n}) {\r\n let subFoldersCountDesc = '';\r\n let imagesCountDesc = '';\r\n let videosCountDesc = '';\r\n if (itemInfo.subfoldersCount === 1) {\r\n subFoldersCountDesc = i18n.getString(_TL_('{{count}} folder'), { count: itemInfo.subfoldersCount });\r\n } else if (!_.isUndefined(itemInfo.subfoldersCount)) {\r\n subFoldersCountDesc = i18n.getString(_TL_('{{count}} folders'), { count: itemInfo.subfoldersCount });\r\n }\r\n if (itemInfo.imageAssetsCount === 1) {\r\n imagesCountDesc = i18n.getString(_TL_('{{count}} image'), { count: itemInfo.imageAssetsCount });\r\n } else if (!_.isUndefined(itemInfo.imageAssetsCount)) {\r\n imagesCountDesc = i18n.getString(_TL_('{{count}} images'), { count: itemInfo.imageAssetsCount });\r\n }\r\n if (itemInfo.videoAssetsCount === 1) {\r\n videosCountDesc = i18n.getString(_TL_('{{count}} video'), { count: itemInfo.videoAssetsCount });\r\n } else if (!_.isUndefined(itemInfo.videoAssetsCount)) {\r\n videosCountDesc = i18n.getString(_TL_('{{count}} videos'), { count: itemInfo.videoAssetsCount });\r\n }\r\n const res = [subFoldersCountDesc, imagesCountDesc, videosCountDesc].filter(item => item !== '').join(', ');\r\n return res;\r\n}\r\n\r\nconst convertItemInfo = ({ allowedAssetType, itemInfos }) => {\r\n const result = {\r\n subfoldersCount: itemInfos.SubFoldersCount,\r\n };\r\n if (allowedAssetType === FolderAssetType.Image) {\r\n result.imageAssetsCount = itemInfos.ImageAssetsCount;\r\n } else if (allowedAssetType === FolderAssetType.Video) {\r\n result.videoAssetsCount = itemInfos.VideoAssetsCount;\r\n } else if (!allowedAssetType) {\r\n result.imageAssetsCount = itemInfos.ImageAssetsCount;\r\n result.videoAssetsCount = itemInfos.VideoAssetsCount;\r\n }\r\n\r\n return result;\r\n};\r\n\r\n// eslint-disable-next-line react/prop-types\r\nconst FolderCountInfo = ({ itemInfo, className, i18n, isEmptyFolder }) => (\r\n \r\n { !isEmptyFolder ? (\r\n
\r\n {!_.isUndefined(itemInfo.subfoldersCount) &&\r\n \r\n \r\n {itemInfo.subfoldersCount}\r\n \r\n }\r\n {!_.isUndefined(itemInfo.imageAssetsCount) &&\r\n \r\n \r\n {itemInfo.imageAssetsCount}\r\n \r\n }\r\n {!_.isUndefined(itemInfo.videoAssetsCount) &&\r\n \r\n \r\n {itemInfo.videoAssetsCount}\r\n \r\n }\r\n
\r\n ) : (\r\n {i18n.getString(_TL_('0 items'))}\r\n )}\r\n \r\n);\r\n\r\nconst getFolderThumbnail = ({ assets }) => {\r\n const firstAsset = _.first(assets) || {};\r\n\r\n // MT will ensure valid assets returned first, so UI only need to check first asset.\r\n if (firstAsset.folderAssetType === FolderAssetType.Video) {\r\n return firstAsset.status === 'Active' ? firstAsset.thumbnailUrl : '';\r\n }\r\n\r\n return firstAsset.url;\r\n};\r\n\r\nconst FoldersGridCell = ({\r\n item,\r\n highlightedText,\r\n onFolderClick,\r\n i18n,\r\n selectable,\r\n selected,\r\n onSelect,\r\n allowedAssetType,\r\n\r\n renderAccessory,\r\n\r\n draggable,\r\n onDrag,\r\n selectedItemCount,\r\n droppable,\r\n onDrop,\r\n}) => {\r\n const folderGridCellContainer = useFolderGridCellStyle();\r\n const {\r\n folderName, itemCount, assets,\r\n } = item || {};\r\n\r\n const itemInfo = useMemo(() => convertItemInfo({ allowedAssetType, itemInfos: itemCount }), [allowedAssetType, itemCount]);\r\n const isEmptyFolder = !_.isUndefined(itemCount.TotalCount) && itemCount.TotalCount === 0;\r\n\r\n const thumbnailUrl = useMemo(() => getFolderThumbnail({ assets }), [assets]);\r\n\r\n const onClick = useCallback(() => {\r\n onFolderClick(item);\r\n }, [item, onFolderClick]);\r\n\r\n const onCheckboxChange = useCallback((event, checked) => {\r\n if (onSelect) {\r\n onSelect(checked);\r\n }\r\n }, [onSelect]);\r\n\r\n const hasAccessory = renderAccessory || selectable;\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {hasAccessory ?\r\n
\r\n {selectable &&\r\n \r\n }\r\n {(renderAccessory && !selectable) && renderAccessory()}\r\n
\r\n : null}\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nFoldersGridCell.propTypes = {\r\n item: PropTypes.shape({}).isRequired,\r\n highlightedText: PropTypes.string,\r\n onFolderClick: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n\r\n // show checkbox\r\n selectable: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n onSelect: PropTypes.func,\r\n\r\n allowedAssetType: PropTypes.string,\r\n\r\n renderAccessory: PropTypes.func,\r\n};\r\n\r\nFoldersGridCell.defaultProps = {\r\n highlightedText: undefined,\r\n selectable: false,\r\n selected: false,\r\n onSelect: undefined,\r\n allowedAssetType: null,\r\n\r\n renderAccessory: undefined,\r\n};\r\n\r\nexport const AdsStudioFoldersGridCell = FoldersGridCell;\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\nimport {\r\n getSharedAssetContainerStyle,\r\n getSharedMultiSelectingCellStyles,\r\n} from './../shared-cell-style';\r\n\r\nexport const useImageAssetsGridCellStyle = makeStyles({\r\n imageAssetsGridCellContainer: {\r\n ...getSharedAssetContainerStyle(),\r\n\r\n // the 'Updating' label animation\r\n '& .updating-label-icon-and-text': {\r\n display: 'flex',\r\n backgroundColor: tokens.colorNeutralBackgroundStatic,\r\n\r\n '& .label-icon': {\r\n animationName: [{\r\n from: { transform: 'rotate(0deg)' },\r\n to: { transform: 'rotate(360deg)' },\r\n }],\r\n animationDuration: '1.5s',\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'linear',\r\n },\r\n },\r\n },\r\n\r\n imageCellLabelContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n position: 'absolute',\r\n left: '12px',\r\n bottom: '8px',\r\n zIndex: 1,\r\n\r\n '& .label-icon-and-text.created-with-ai-label': {\r\n display: 'flex',\r\n ...shorthands.padding(0),\r\n ...shorthands.margin(0),\r\n marginRight: '6px',\r\n height: '24px',\r\n backgroundColor: '#FFFFFFBB',\r\n\r\n '& .label-icon': {\r\n ...shorthands.margin(0),\r\n },\r\n },\r\n\r\n '& .label-icon-and-text.image-source-label': {\r\n ...shorthands.padding('2px', '4px'),\r\n backgroundColor: '#616161',\r\n },\r\n },\r\n\r\n // only show checkbox on overlay if it is NOT in multi-selecting mode\r\n ...getSharedMultiSelectingCellStyles(),\r\n\r\n});\r\n","/* eslint-disable react/jsx-closing-tag-location */\r\nimport _ from 'underscore';\r\nimport React, { Fragment, useCallback, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { ArrowSync16Filled } from '@fluentui/react-icons';\r\n\r\nimport {\r\n TilesGridCellImage as CellImage,\r\n TilesGridCellDecorativeLabel as CellLabel,\r\n TilesGridCellCardWithOverlay,\r\n TilesGridCellSelectionDecorator,\r\n TilesGridCellDeletionButtonDecorator,\r\n TilesGridCellDragDecorator,\r\n} from '../../ads-studio-tile-grid';\r\nimport { TextWithHighlight } from '../../text-with-highlight';\r\nimport { CSMLAssetSource, ManualAddedImageSource } from '../../../model';\r\nimport { InfoSparkleSVGIcon } from '../../../asset-images';\r\nimport { useImageAssetsGridCellStyle } from './style';\r\n\r\nexport const AdsStudioImageAssetsGridCell = ({\r\n item,\r\n highlightedText,\r\n isOverlayEnabled,\r\n isCellFocused,\r\n renderCellContent,\r\n renderOverlayContent,\r\n i18n,\r\n selectable,\r\n selected,\r\n isMultiSelecting, // is in multi-selection mode, need to show checkbox on cells\r\n onClick,\r\n deletable,\r\n onDelete,\r\n draggable,\r\n onDrag,\r\n selectedItemCount,\r\n}) => {\r\n const [isImageLoaded, setImageLoaded] = useState(false);\r\n const classes = useImageAssetsGridCellStyle();\r\n\r\n const {\r\n name,\r\n url,\r\n id,\r\n updating,\r\n sourceType,\r\n manualAddedImageSourceType,\r\n } = item || {};\r\n\r\n const cellContent = useMemo(() => {\r\n const defaultContent = (\r\n \r\n \r\n
\r\n {manualAddedImageSourceType === ManualAddedImageSource.Library && (\r\n \r\n )}\r\n {manualAddedImageSourceType === ManualAddedImageSource.ShutterStock && (\r\n \r\n )}\r\n {(sourceType === CSMLAssetSource.AIGenerated || sourceType === CSMLAssetSource.BackgroundChangeGenerated || sourceType === CSMLAssetSource.AIGeneratedByRecraft) && (\r\n \r\n )}\r\n {updating && (\r\n \r\n )}\r\n
\r\n
\r\n );\r\n if (renderCellContent) {\r\n return renderCellContent(defaultContent);\r\n }\r\n return defaultContent;\r\n }, [classes.imageCellLabelContainer, i18n, id, manualAddedImageSourceType, name, renderCellContent, sourceType, updating, url]);\r\n\r\n const funcRenderOverlayContent = useCallback(() => {\r\n if (renderOverlayContent) {\r\n return renderOverlayContent();\r\n }\r\n return null;\r\n }, [renderOverlayContent]);\r\n\r\n const onCellClick = useCallback(() => {\r\n if (selectable) {\r\n onClick({ item, selected });\r\n }\r\n }, [item, onClick, selectable, selected]);\r\n\r\n const withSelectionDecorator = useCallback(decoratedContent => (\r\n selectable ? (\r\n \r\n {decoratedContent}\r\n \r\n ) : decoratedContent\r\n ), [i18n, isCellFocused, item, name, onClick, selectable, selected]);\r\n\r\n const withDeleteButtonDecorator = useCallback(decoratedContent => (\r\n deletable ? (\r\n \r\n {decoratedContent}\r\n \r\n ) : decoratedContent\r\n ), [deletable, item, onDelete]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {_.compose(withDeleteButtonDecorator, withSelectionDecorator)(cellContent)}\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {id && (\r\n
\r\n {`${i18n.getString(_TL_('ID'))} `}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nAdsStudioImageAssetsGridCell.propTypes = {\r\n item: PropTypes.shape({\r\n id: PropTypes.string,\r\n name: PropTypes.string,\r\n url: PropTypes.string,\r\n createdTime: PropTypes.instanceOf(Date),\r\n // cropping task progress\r\n updating: PropTypes.bool,\r\n }).isRequired,\r\n highlightedText: PropTypes.string,\r\n isOverlayEnabled: PropTypes.bool,\r\n isCellFocused: PropTypes.bool,\r\n renderCellContent: PropTypes.func,\r\n renderOverlayContent: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n selectable: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n onClick: () => null,\r\n isMultiSelecting: PropTypes.bool,\r\n deletable: PropTypes.bool,\r\n onDelete: PropTypes.func,\r\n draggable: PropTypes.bool,\r\n onDrag: PropTypes.func,\r\n selectedItemCount: PropTypes.number,\r\n};\r\n\r\nAdsStudioImageAssetsGridCell.defaultProps = {\r\n highlightedText: undefined,\r\n isOverlayEnabled: false,\r\n isCellFocused: false,\r\n renderCellContent: null,\r\n renderOverlayContent: null,\r\n selectable: false,\r\n selected: false,\r\n onClick: undefined,\r\n isMultiSelecting: false,\r\n deletable: false,\r\n onDelete: undefined,\r\n draggable: false,\r\n onDrag: _.noop,\r\n selectedItemCount: 1,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { FolderAssetType } from '../../../model';\r\nimport {\r\n AdsStudioImageAssetsGridCell as DefaultImageGridCell,\r\n AdsStudioVideoAssetsGridCell as DefaultVideoGridCell,\r\n} from '..';\r\n\r\nexport const GridCellFactory = (props) => {\r\n const { item } = props;\r\n const { folderAssetType } = item || {};\r\n\r\n switch (folderAssetType) {\r\n case FolderAssetType.Image:\r\n return ;\r\n case FolderAssetType.Video:\r\n return ;\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nGridCellFactory.propTypes = {\r\n item: PropTypes.shape({\r\n folderAssetType: PropTypes.string.isRequired,\r\n }),\r\n};\r\n\r\nGridCellFactory.defaultProps = {\r\n item: null,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n container: {\r\n '& .cell-overlay-actions': {\r\n zIndex: 1,\r\n alignItems: 'end',\r\n justifyContent: 'end',\r\n },\r\n },\r\n actionButton: {\r\n ...shorthands.margin('6px'),\r\n marginLeft: '0px',\r\n\r\n '&:focus': {\r\n ...shorthands.border('1px', 'solid', '#FFFFFF'),\r\n },\r\n\r\n '&:hover': {\r\n backgroundColor: '#C4C4C4',\r\n },\r\n },\r\n});\r\n","import { CivilDate } from 'tc39-proposal-temporal';\r\nimport {\r\n getCivilDateToday,\r\n compareCivilDate,\r\n} from '@bingads-webui-universal/temporal-utitlities';\r\n\r\nexport const civilDateEqual = (d1, d2) => {\r\n if (!d1 && !d2) {\r\n return true;\r\n }\r\n if (!d1 || !d2) {\r\n return false;\r\n }\r\n return compareCivilDate(d1, d2) === 0;\r\n};\r\n\r\nexport const civilDateRangeEqual = (r1, r2) => {\r\n if ((!r1 && !r2) || (r1 === r2)) {\r\n return true;\r\n }\r\n if (!r1 || !r2) {\r\n return false;\r\n }\r\n return civilDateEqual(r1.start, r2.start) && civilDateEqual(r1.end, r2.end);\r\n};\r\n\r\nexport const civilDateToDebugString = (cd) => {\r\n if (!cd) return '';\r\n const { year, month, day } = cd || {};\r\n return `${year || ''}-${month || ''}-${day || ''}`;\r\n};\r\n\r\nexport const civilDateRangeToDebugString = (dr) => {\r\n if (!dr) {\r\n return '';\r\n }\r\n return `start:${civilDateToDebugString(dr.start)} end:${civilDateToDebugString(dr.end)}`;\r\n};\r\n\r\nexport const getDefaultDateRange = () => {\r\n const yesterday = getCivilDateToday().plus({ days: -1 });\r\n const defaultRange = { start: yesterday, end: yesterday };\r\n return defaultRange;\r\n};\r\n\r\nexport const getDefaultMetricDateRange = (i18n, dateFormat, timeZone, lcid) => {\r\n const todayObj = i18n.getToday({ timeZone });\r\n const today = new CivilDate(todayObj.year, todayObj.month, todayObj.day);\r\n const yesterday = today.plus({ days: -1 });\r\n const last30day = today.plus({ days: -30 });\r\n return {\r\n RangeStartDate: i18n.formatCivilDate(last30day, { raw: dateFormat, timeZone }),\r\n RangeEndDate: i18n.formatCivilDate(yesterday, { raw: dateFormat, timeZone }),\r\n Rangelcid: lcid,\r\n RangeId: 5, // last 30 days, RANGES.Last30Days\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport {\r\n getFoldersLimitPerAccount,\r\n getImageAssetLimitPerAccount,\r\n getVideoAssetLimitPerAccount\r\n} from '../model';\r\n\r\nconst containsErrorCodeInList = (errorList, searchErrorCode) => {\r\n const found = _.find(errorList, (err) => {\r\n const errorCodeInn = _.get(err, ['body', 'value', 0, 'Code'], '') || err;\r\n return errorCodeInn === searchErrorCode;\r\n });\r\n if (found) {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const processFolderSizeLimitError = ({ errorList, aid, logger }) => {\r\n if (errorList.length > 0 && containsErrorCodeInList(errorList, 'FolderLimitExceededPerAccount')) {\r\n const limit = getFoldersLimitPerAccount(aid, logger);\r\n\r\n return { limit };\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const processImageSizeLimitError = ({ errorList, aid, logger }) => {\r\n if (errorList.length > 0 && containsErrorCodeInList(errorList, 'ImagesLimitExceededPerAccount')) {\r\n const limit = getImageAssetLimitPerAccount(aid, logger);\r\n\r\n return { limit };\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const processVideoSizeLimitError = ({ errorList, aid, logger }) => {\r\n if (errorList.length > 0 && containsErrorCodeInList(errorList, 'VideoLimitExceededPerAccount')) {\r\n const limit = getVideoAssetLimitPerAccount(aid, logger);\r\n\r\n return { limit };\r\n }\r\n\r\n return null;\r\n};\r\n","import { Promise } from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { parseSync } from '@bingads-webui/safe-json';\r\n\r\nexport const fetchImgPromise = imgUrl => new Promise((resolve, reject) => {\r\n const image = new Image();\r\n image.onload = () => {\r\n resolve(image);\r\n };\r\n image.onerror = () => {\r\n reject(new Error('Failed to load image'));\r\n };\r\n image.crossOrigin = '';\r\n image.src = imgUrl;\r\n});\r\n\r\nexport const createOffScreenContext = (width, height) => {\r\n const canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n const context = canvas.getContext('2d');\r\n return {\r\n canvas,\r\n context,\r\n };\r\n};\r\n\r\nexport const getImagePixels = (image, imageWidth, imageHeight) => {\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n context.drawImage(image, 0, 0);\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n return pixels;\r\n};\r\n\r\nexport const parseMaskResultPromise = ({\r\n result,\r\n imageUrl,\r\n imageWidth,\r\n imageHeight,\r\n}) => new Promise((resolve, reject) => {\r\n const { rawMaskSetsBase64String } = result;\r\n const maskSetsBase64Json = parseSync(rawMaskSetsBase64String);\r\n if (_.isUndefined(maskSetsBase64Json)) {\r\n reject(new Error('Failed to parse result'));\r\n }\r\n const {\r\n shape = [],\r\n data: maskSetsBase64,\r\n } = maskSetsBase64Json;\r\n\r\n // Convert the decompressed data into a 3D array\r\n const reshapeTo3D = (array, x, y, z) => {\r\n const res = [];\r\n let index = 0;\r\n for (let i = 0; i < x; i += 1) {\r\n const temp2D = [];\r\n for (let j = 0; j < y; j += 1) {\r\n const temp1D = [];\r\n for (let k = 0; k < z; k += 1) {\r\n temp1D.push(array[index]);\r\n index += 1;\r\n }\r\n temp2D.push(temp1D);\r\n }\r\n res.push(temp2D);\r\n }\r\n return res;\r\n };\r\n\r\n async function decompressAndParse3DArray(base64String, x, y, z) {\r\n // Step 1: Decode the Base64 string to a binary Uint8Array\r\n const binaryString = atob(base64String);\r\n const byteArray = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i += 1) {\r\n byteArray[i] = binaryString.charCodeAt(i);\r\n }\r\n\r\n // Step 2: Create a readable stream from the byteArray\r\n const inputStream = new Blob([byteArray]).stream();\r\n\r\n // Step 3: Decompress the stream using DecompressionStream (assuming 'gzip')\r\n const decompressionStream = new DecompressionStream('gzip');\r\n const decompressedStream = inputStream.pipeThrough(decompressionStream);\r\n\r\n // Step 4: Collect the decompressed data\r\n const decompressedResponse = new Response(decompressedStream);\r\n const decompressedBuffer = await decompressedResponse.arrayBuffer();\r\n\r\n // Step 5: Convert the decompressed data to a Uint8Array\r\n const decompressedArray = new Uint8Array(decompressedBuffer);\r\n\r\n // Step 6: Reshape the decompressed array into the specified 3D dimensions (x, y, z)\r\n const int3DArray = reshapeTo3D(decompressedArray, x, y, z);\r\n\r\n return int3DArray;\r\n }\r\n\r\n // Execute the function and log the result\r\n decompressAndParse3DArray(maskSetsBase64, shape[1], shape[0], shape[2])\r\n .then((maskSets3Darray) => {\r\n const maskSetsArray = maskSets3Darray.map(row => row.map(a => a[0])).flat();\r\n const alphaArray = maskSets3Darray.map(row => row.map(a => a[1])).flat();\r\n const selectedMasksArray = _.filter(_.uniq(maskSetsArray), pixelMask => pixelMask > 0);\r\n fetchImgPromise(imageUrl).then((image) => {\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n context.drawImage(image, 0, 0);\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n return pixels;\r\n }).then((originalImagePixels) => {\r\n if (originalImagePixels && maskSetsArray) {\r\n // If not in mask, return empty and transparent pixel\r\n // If in mask, return the original pixel\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n for (let i = 0; i < pixels.length; i += 4) {\r\n if (maskSetsArray[i / 4] > 0) {\r\n pixels[i] = originalImagePixels[i];\r\n pixels[i + 1] = originalImagePixels[i + 1];\r\n pixels[i + 2] = originalImagePixels[i + 2];\r\n pixels[i + 3] = alphaArray[i / 4];\r\n }\r\n }\r\n // put the selected image from first canvas to second canvas\r\n const { context: secondContext, canvas: secondCanvas } = createOffScreenContext(imageWidth, imageHeight);\r\n secondContext.putImageData(imageData, 0, 0);\r\n resolve({\r\n rawMaskSetsBase64String,\r\n maskSetsArray,\r\n alphaArray,\r\n selectedMasksArray,\r\n imageUrlWithoutBackground: secondCanvas.toDataURL(),\r\n });\r\n } else {\r\n reject(new Error('Failed to parse result'));\r\n }\r\n });\r\n })\r\n .catch(() => {\r\n reject(new Error('Failed to parse result'));\r\n });\r\n});\r\n\r\nexport function hexToRgb(hex) {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n } : null;\r\n}\r\n\r\nexport function getMaskValueAtPointFunc(x, y, imageWidth, segmentationMasks) {\r\n if (x < 0 || y < 0) {\r\n return null;\r\n }\r\n // Should transform the point to the original point on the image size\r\n const width = imageWidth;\r\n\r\n // get index of the mask array\r\n const index = (parseInt(y, 10) * width) + parseInt(x, 10);\r\n // get mask value at the index\r\n return segmentationMasks[index];\r\n}\r\n\r\nexport function createColorBackground(image, imageWidth, imageHeight, color, segmentationMasks, selectedMasks, alphaArray) {\r\n // If not in mask, return empty and transparent pixel\r\n // If in mask, return the original pixel\r\n const { r, g, b } = hexToRgb(color);\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n context.drawImage(image, 0, 0);\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n for (let i = 0; i < pixels.length; i += 4) {\r\n if (!selectedMasks.includes(segmentationMasks[i / 4])) {\r\n pixels[i] = r;\r\n pixels[i + 1] = g;\r\n pixels[i + 2] = b;\r\n pixels[i + 3] = 255;\r\n } else {\r\n const alpha = alphaArray[i / 4] / 255;\r\n const newR = ((1 - alpha) * r) + ((alpha) * pixels[i]);\r\n const newG = ((1 - alpha) * g) + ((alpha) * pixels[i + 1]);\r\n const newB = ((1 - alpha) * b) + ((alpha) * pixels[i + 2]);\r\n pixels[i] = newR;\r\n pixels[i + 1] = newG;\r\n pixels[i + 2] = newB;\r\n pixels[i + 3] = 255;\r\n }\r\n }\r\n // put the selected image from first canvas to second canvas\r\n const { context: secondContext, canvas: secondCanvas } = createOffScreenContext(imageWidth, imageHeight);\r\n secondContext.putImageData(imageData, 0, 0);\r\n return secondCanvas.toDataURL();\r\n}\r\n\r\nexport function createSelectedImageSrc(image, imageWidth, imageHeight, originalImagePixels, segmentationMasks, masks, isAdd, hasSelectedImageSrc) {\r\n // If not in mask, return empty and transparent pixel\r\n // If in mask, return the original pixel\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n if (hasSelectedImageSrc) {\r\n context.drawImage(image, 0, 0);\r\n }\r\n\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n\r\n for (let i = 0; i < pixels.length; i += 4) {\r\n if (masks.includes(segmentationMasks[i / 4])) {\r\n if (isAdd) {\r\n pixels[i] = originalImagePixels[i];\r\n pixels[i + 1] = originalImagePixels[i + 1];\r\n pixels[i + 2] = originalImagePixels[i + 2];\r\n pixels[i + 3] = originalImagePixels[i + 3];\r\n } else {\r\n pixels[i] = 0;\r\n pixels[i + 1] = 0;\r\n pixels[i + 2] = 0;\r\n pixels[i + 3] = 0;\r\n }\r\n }\r\n }\r\n\r\n const { context: secondContext, canvas: secondCanvas } = createOffScreenContext(imageWidth, imageHeight);\r\n secondContext.putImageData(imageData, 0, 0);\r\n\r\n const dArr = [-1, -1, 0, -1, 1, -1, -1, 0, 1, 0, -1, 1, 0, 1, 1, 1]; // offset array\r\n const s = 6; // thickness scale\r\n\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n // draw images at offsets from the array scaled by s\r\n for (let i = 0; i < dArr.length; i += 2) {\r\n context.drawImage(secondCanvas, dArr[i] * s, dArr[i + 1] * s);\r\n }\r\n\r\n // fill with color\r\n context.globalCompositeOperation = 'source-in';\r\n context.fillStyle = '#D1ACFF';\r\n context.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n return ({\r\n borderImageSrc: canvas.toDataURL(),\r\n selectedImageSrc: secondCanvas.toDataURL(),\r\n });\r\n}\r\n\r\nexport function createHighlightedImage(imageWidth, imageHeight, originalImagePixels, segmentationMasks, workingMasks, maskValue) {\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n\r\n if (originalImagePixels) {\r\n for (let i = 0; i < pixels.length; i += 4) {\r\n if (segmentationMasks[i / 4] === maskValue) {\r\n if (workingMasks.includes(maskValue)) {\r\n pixels[i] = (originalImagePixels[i] + 1672) / 9; // X + Y * 8) / 9\r\n pixels[i + 1] = (originalImagePixels[i + 1] + 1376) / 9;\r\n pixels[i + 2] = (originalImagePixels[i + 2] + 2040) / 9;\r\n pixels[i + 3] = originalImagePixels[i + 3];\r\n } else if (maskValue > 0) {\r\n pixels[i] = originalImagePixels[i];\r\n pixels[i + 1] = originalImagePixels[i + 1];\r\n pixels[i + 2] = originalImagePixels[i + 2];\r\n pixels[i + 3] = 128;\r\n }\r\n }\r\n }\r\n }\r\n\r\n context.putImageData(imageData, 0, 0);\r\n\r\n return canvas.toDataURL();\r\n}\r\n","export const PlacementQualities = {\r\n PERFECT: 7,\r\n EXCELLENT_AND_PERFECT: 6,\r\n PERFECT_AND_GOOD: 5,\r\n ONLY_PERFECT: 4,\r\n EXCELLENT: 3,\r\n ONLY_EXCELLENT: 2,\r\n GOOD: 1,\r\n NONE: 0,\r\n};\r\n\r\n// recently changed wording for each quality label\r\n// perfect -> excellent\r\n// excellent -> good\r\n// good -> fair\r\nexport const PlacementQualityToText = {\r\n [PlacementQualities.PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.EXCELLENT]: _TL_('Good'),\r\n [PlacementQualities.GOOD]: _TL_('Fair'),\r\n [PlacementQualities.NONE]: _TL_('Poor'),\r\n [PlacementQualities.PERFECT_AND_GOOD]: _TL_('Excellent'),\r\n [PlacementQualities.EXCELLENT_AND_PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.ONLY_PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.ONLY_EXCELLENT]: _TL_('Good'),\r\n};\r\n\r\nexport const formatFileSize = fileSize => Math.round(fileSize / 1000000);\r\n\r\nexport const getClosestAspectRatio = (width, height) => {\r\n const inputRatio = width / height;\r\n const ratios = {\r\n '16:9': (16 / 9),\r\n '9:16': (9 / 16),\r\n '4:3': (4 / 3),\r\n '1:1': (1 / 1),\r\n '9:21': (9 / 21),\r\n '21:9': (21 / 9),\r\n '3:4': (3 / 4),\r\n };\r\n let closestRatio = null;\r\n let closestDiff = Math.abs(inputRatio - closestRatio);\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (const [label, ratio] of Object.entries(ratios)) {\r\n const diff = Math.abs(inputRatio - ratio);\r\n if (diff < closestDiff) {\r\n closestDiff = diff;\r\n closestRatio = label;\r\n }\r\n }\r\n /* eslint-enable no-restricted-syntax */\r\n\r\n return closestRatio;\r\n};\r\n\r\nexport const formatBrandkitForAPI = (obj) => {\r\n if (Array.isArray(obj)) {\r\n return obj.map(formatBrandkitForAPI);\r\n } else if (obj !== null && typeof obj === 'object') {\r\n const formattedObj = {};\r\n Object.keys(obj).forEach((key) => {\r\n if (key === 'Id') {\r\n formattedObj.Id = parseInt(obj[key], 10);\r\n } else if (key === 'SubType') {\r\n formattedObj.SubType = 'None';\r\n } else if (obj[key] === null) {\r\n formattedObj[key] = [];\r\n } else if (key !== 'Type') {\r\n formattedObj[key] = formatBrandkitForAPI(obj[key]);\r\n }\r\n });\r\n return formattedObj;\r\n }\r\n return obj;\r\n};\r\n\r\nexport const VideoSourceType = {\r\n AIGenerated: 'AIGenerated',\r\n};\r\n\r\n","import _ from 'underscore';\r\n\r\nconst errorObjectToString = (err) => {\r\n const { name, message, stack } = err;\r\n if (message || stack) {\r\n return `Error: ${name}, message: ${message}, stack: ${stack}`;\r\n }\r\n return JSON.stringify(err) || '(no error message)';\r\n};\r\n\r\nexport const getErrorString = (err) => {\r\n if (!err) {\r\n return '';\r\n }\r\n\r\n if (_.isString(err)) {\r\n return err;\r\n }\r\n\r\n if (_.isObject(err)) {\r\n let msg = errorObjectToString(err);\r\n if (err.originError) {\r\n msg += `,\\r\\nOrigin ${errorObjectToString(err.originError)}`;\r\n }\r\n return msg;\r\n }\r\n\r\n return JSON.stringify(err);\r\n};\r\n","import _ from 'underscore';\r\n\r\n// return first truthy result\r\nexport const fetchResultFromProcessors = ({ processors, options = {} } = {}) => {\r\n for (let i = 0; i < _.size(processors); i += 1) {\r\n const result = processors[i](options);\r\n\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n\r\n return '';\r\n};\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n processImageSizeLimitError,\r\n processVideoSizeLimitError,\r\n} from './upload-asset-limit-error';\r\nimport { fetchResultFromProcessors } from './processor-util';\r\n\r\nconst errorCodeMessageKeyMapping = {\r\n InvalidDuration: _TL_('One or more videos failed to upload because their duration is outside the valid range: 6 - 120 seconds.'),\r\n AssetDataInvalidWidth: _TL_('One or more videos failed to upload because their width is outside the valid range: 120 - 4096 pixels'),\r\n AssetDataInvalidHeight: _TL_('One or more videos failed to upload because their height is outside the valid range: 120 - 2160 pixels'),\r\n ImageAIUpScaleFailed: _TL_('One or more images are smaller than the required minimum size (703 x 368).'),\r\n};\r\n\r\nconst processAssetLimitErrors = ({\r\n codes, aid, logger, i18n,\r\n}) => {\r\n const imageSizeLimitResult = processImageSizeLimitError({ errorList: codes, aid, logger });\r\n\r\n if (imageSizeLimitResult) {\r\n const { limit: imageAssetLimit } = imageSizeLimitResult;\r\n\r\n return i18n.getString(\r\n _TL_('One or more images failed to upload because your account has exceeded the {{value}}-image asset limit. Please remove assets and try again.'),\r\n { value: imageAssetLimit }\r\n );\r\n }\r\n\r\n const videoSizeLimitResult = processVideoSizeLimitError({ errorList: codes, aid, logger });\r\n if (videoSizeLimitResult) {\r\n const { limit: videoAssetLimit } = videoSizeLimitResult;\r\n\r\n return i18n.getString(\r\n _TL_('One or more videos failed to upload because your account has exceeded the {{value}}-video asset limit. Please remove assets and try again.'),\r\n { value: videoAssetLimit }\r\n );\r\n }\r\n\r\n return '';\r\n};\r\n\r\nconst processImageErrors = ({ codes, filePickerI18n }) => filePickerI18n.getString(`ImageExperience_Error_${codes[0]}`);\r\n\r\nconst processPredefinedAssetErrors = ({ codes, i18n }) => {\r\n const mappedKey = errorCodeMessageKeyMapping[codes[0]];\r\n\r\n return mappedKey ? i18n.getString(mappedKey) : '';\r\n};\r\n\r\nexport const getAssetUploadError = ({\r\n uploadErrorCodeArr,\r\n i18n,\r\n filePickerI18n,\r\n aid,\r\n logger,\r\n disableGenericMessage = false,\r\n} = {}) => {\r\n if (_.size(uploadErrorCodeArr) > 0) {\r\n const errorMessage = fetchResultFromProcessors({\r\n processors: [\r\n processAssetLimitErrors,\r\n processImageErrors,\r\n processPredefinedAssetErrors,\r\n ],\r\n options: {\r\n codes: uploadErrorCodeArr,\r\n filePickerI18n,\r\n i18n,\r\n aid,\r\n logger,\r\n },\r\n });\r\n\r\n if (disableGenericMessage || errorMessage) {\r\n return errorMessage;\r\n }\r\n\r\n const genericMessage = (\r\n \r\n {\r\n i18n.getString(_TL_('One or more assets failed to upload. Please try again'))\r\n }\r\n {i18n.getString(_TL_('Learn more about asset guidelines and accepted file types.'))}\r\n \r\n );\r\n\r\n return genericMessage;\r\n }\r\n\r\n return '';\r\n};\r\n","/* eslint-disable arrow-body-style */\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { runJobsInParallelWithRateLimit } from '@bingads-webui-universal/parallel-job-with-rate-limit';\r\nimport { parseFileName } from '@bingads-webui-campaign-react/upload-file-picker';\r\n\r\n// if folder creation fails, continue partial upload around failed folder\r\n// mark failing folder with unique id;\r\nexport const INVALID_FOLDER_ID = -9999;\r\n\r\nconst UPLOAD_PARALLEL_RATE_LIMIT = 6;\r\n\r\n/*\r\n* Folder traversal functions\r\n* Upload folder via input button results in an array of File objects\r\n* with property webkitRelativePath that contains path of File relative\r\n* to (and including) the selected folder.\r\n* e.g. if I selected a folder A with subfolder B and file C.jpg is in B\r\n* then B's webkitRelativePath is \"A/B/C.jpg\"\r\n*\r\n* More information can be found here: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory\r\n* Some of these property names may be liable to changing as the webkit\r\n* prefix is an artifact of this folder upload feature being originally\r\n* implemented in Chrome and not having been standardized across all\r\n* browsers initially.\r\n*/\r\n\r\n// Will return an array of folders that form the relative path\r\n// e.g. for \"A/B/C.jpg\", returns [\"A\", \"B\"]\r\nconst getRelativeFoldersFromRelativePath = (relativePath) => {\r\n const pathArr = _.map(relativePath.split('/'), name => name.trim());\r\n\r\n pathArr.pop();\r\n\r\n return pathArr;\r\n};\r\n\r\n\r\n// Will return name of the parent folder directly containing the file\r\n// e.g. from file with path \"A/B/C.jpg\", returns \"B\"\r\nexport const getFileFolderName = (file) => {\r\n const { webkitRelativePath } = file;\r\n const pathArr = _.map(webkitRelativePath.split('/'), name => name.trim());\r\n\r\n pathArr.pop();\r\n\r\n return pathArr.pop();\r\n};\r\n\r\n// Filters out all files in the files array for files with supported\r\n// extension type (not handled by default by browser)\r\nexport const filterFilesByExtensions = ({ files, supportedExtensions }) => {\r\n const acceptedFiles = [];\r\n\r\n _.each(files, (file) => {\r\n const { ext } = parseFileName(file.name);\r\n if (ext && _.contains(supportedExtensions, ext)) {\r\n acceptedFiles.push(file);\r\n }\r\n });\r\n\r\n return acceptedFiles;\r\n};\r\n\r\n// For a list of files, will return a map of the folder hierarchy\r\n// where an empty object - {} - indicates that the folder is a leaf\r\n// node\r\n// e.g. for [\"A/B/C.jpg\", \"A/D/E.jpg\", \"A/F.png\"] will return\r\n// { A: { B: { C: {} }, D: { E: {} } } }\r\nexport const createFolderHierarchyMap = (files) => {\r\n const foldersToCreate = {};\r\n\r\n _.each(files, ({ webkitRelativePath }) => {\r\n const folders = getRelativeFoldersFromRelativePath(webkitRelativePath);\r\n let currFolderMap = foldersToCreate;\r\n\r\n _.each(folders, (folder) => {\r\n if (!currFolderMap[folder]) {\r\n currFolderMap[folder] = {};\r\n }\r\n currFolderMap = currFolderMap[folder];\r\n });\r\n });\r\n\r\n return foldersToCreate;\r\n};\r\n\r\nconst createFolderWithErrorHandling = ({\r\n folderCreationErrors,\r\n createFolderAsync,\r\n folderName,\r\n parentFolderId,\r\n currentFolderId,\r\n originalFolderName,\r\n numberOfAttempts = 1,\r\n}) => {\r\n return createFolderAsync({\r\n folderName,\r\n parentFolderId,\r\n })\r\n .catch((e) => {\r\n // for duplicate folder upload, rename as -1\r\n if (parentFolderId === currentFolderId) {\r\n const errorCode = _.get(e, ['body', 'value', 0, 'Code'], null);\r\n\r\n if (errorCode === 'DuplicateEntity') {\r\n return createFolderWithErrorHandling({\r\n folderCreationErrors,\r\n createFolderAsync,\r\n folderName: `${originalFolderName}-${numberOfAttempts}`,\r\n parentFolderId,\r\n currentFolderId,\r\n originalFolderName,\r\n numberOfAttempts: numberOfAttempts + 1,\r\n });\r\n }\r\n }\r\n // allow other folder creation jobs to continue as we allow partial succeed\r\n folderCreationErrors.push(e);\r\n return INVALID_FOLDER_ID;\r\n });\r\n};\r\n\r\nconst createFoldersByHierarchyInternal = ({\r\n folderMap,\r\n createFolderAsync,\r\n creationPromises,\r\n parentFolderName,\r\n folderCreationErrors,\r\n currentFolderId,\r\n}) => {\r\n const folderNames = _.keys(folderMap);\r\n if (folderNames.length > 0) {\r\n _.each(folderNames, (folderName) => {\r\n const subFoldersMap = folderMap[folderName];\r\n const parentPromise = parentFolderName ? creationPromises[parentFolderName] : Promise.resolve(currentFolderId);\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n creationPromises[folderName] = parentPromise.then((parentFolderId) => {\r\n // if parent folder failed to be created, skip trying to create child folder\r\n if (parentFolderId === INVALID_FOLDER_ID) {\r\n return INVALID_FOLDER_ID;\r\n }\r\n\r\n return createFolderWithErrorHandling({\r\n folderCreationErrors,\r\n createFolderAsync,\r\n folderName,\r\n parentFolderId,\r\n currentFolderId,\r\n originalFolderName: folderName,\r\n });\r\n });\r\n\r\n createFoldersByHierarchyInternal({\r\n folderMap: subFoldersMap,\r\n createFolderAsync,\r\n creationPromises,\r\n parentFolderName: folderName,\r\n folderCreationErrors,\r\n });\r\n });\r\n }\r\n};\r\n\r\n// For a given folderMap (in the format created by createFolderHierarchyMap)\r\n// Will create folders using the provided method in the correct sequence\r\n// e.g. if for file \"A/B/C.jpg\", createFolderHierarchyMap will generate map\r\n// { A: { B: {} } }, createFoldersByHierarchy will create folders in this order:\r\n// create folder A with parentId = null (null used for root in MT)\r\n// create folder B with parentId = folder A's Id\r\nexport const createFoldersByHierarchy = ({\r\n folderMap,\r\n createFolderAsync,\r\n folderCreationErrors = [],\r\n currentFolderId,\r\n}) => {\r\n const creationPromises = {};\r\n\r\n createFoldersByHierarchyInternal({\r\n folderMap,\r\n createFolderAsync,\r\n creationPromises,\r\n folderCreationErrors,\r\n parentFolderName: null,\r\n currentFolderId,\r\n });\r\n\r\n return Promise.all(_.values(creationPromises))\r\n .then(() => creationPromises);\r\n};\r\n\r\n// Creates a promise which will ensure all assets are uploaded\r\n// in a rate limited manner, in which we will send AddAsset requests\r\n// one by one with a maximum of 6 parallel requests at a time\r\nexport const createRateLimitedAssetUploadPromises = ({\r\n customizedFilesOptions = [],\r\n acceptedAssets,\r\n folderIdPromises,\r\n validateAssetAsync = () => Promise.resolve(true),\r\n uploadAssetAsync,\r\n assetsSkippedUpload = [],\r\n assetUploadErrors = [],\r\n readAssetAsync,\r\n}) => {\r\n const processAssetJobPromises = [];\r\n const assetUploadJobs = [];\r\n\r\n _.each(acceptedAssets, (asset, index) => {\r\n const folderName = getFileFolderName(asset);\r\n const extraOptions = customizedFilesOptions[index] || {};\r\n\r\n const processAssetJobPromise = folderIdPromises[folderName].then((folderId) => {\r\n if (folderId === INVALID_FOLDER_ID) {\r\n assetsSkippedUpload.push(asset);\r\n return Promise.resolve();\r\n }\r\n\r\n return readAssetAsync(asset, extraOptions)\r\n .then((dataURL) => {\r\n const assetUploadJob = () => {\r\n return validateAssetAsync({\r\n dataURL,\r\n ...extraOptions,\r\n })\r\n .then((validatedResult) => {\r\n const isImageUpscaled = _.get(validatedResult, 'isImageUpscaled', false);\r\n const { nameWithoutExt } = parseFileName(asset.name);\r\n\r\n return uploadAssetAsync({\r\n dataURL,\r\n fileObject: asset,\r\n nameWithoutExt,\r\n folderId,\r\n isImageUpscaled,\r\n ...extraOptions,\r\n });\r\n });\r\n };\r\n assetUploadJobs.push(assetUploadJob);\r\n })\r\n .catch((e) => {\r\n assetUploadErrors.push(e);\r\n });\r\n });\r\n\r\n processAssetJobPromises.push(processAssetJobPromise);\r\n });\r\n\r\n return Promise.all(processAssetJobPromises).then(() => {\r\n return runJobsInParallelWithRateLimit({\r\n jobsToRateLimit: assetUploadJobs,\r\n maxJobsInParallel: UPLOAD_PARALLEL_RATE_LIMIT,\r\n handleJobError: e => assetUploadErrors.push(e),\r\n });\r\n });\r\n};\r\n","import { fetchResultFromProcessors } from './processor-util';\r\nimport { processFolderSizeLimitError } from './upload-asset-limit-error';\r\nimport { getAssetUploadError } from './upload-asset-error';\r\n\r\nconst processFolderSizeLimitErrors = ({\r\n folderCreationErrors, aid, logger, i18n,\r\n}) => {\r\n const folderLimitResult = processFolderSizeLimitError({ errorList: folderCreationErrors, aid, logger });\r\n if (folderLimitResult) {\r\n const { limit: folderLimit } = folderLimitResult;\r\n const warnMessage = _TL_('Failed to create one or more folders because your account has exceeded the {{value}}-folder limit. Please remove folders and try again.');\r\n\r\n return i18n.getString(warnMessage, { value: folderLimit });\r\n }\r\n\r\n return '';\r\n};\r\n\r\nconst processAssetErrors = ({\r\n assetUploadErrors, i18n, filePickerI18n, aid, logger,\r\n}) => getAssetUploadError({\r\n uploadErrorCodeArr: assetUploadErrors,\r\n i18n,\r\n filePickerI18n,\r\n aid,\r\n logger,\r\n disableGenericMessage: true,\r\n});\r\n\r\nexport const getFolderUploadError = ({\r\n folderCreationErrors,\r\n assetUploadErrors,\r\n i18n,\r\n filePickerI18n,\r\n aid,\r\n logger,\r\n}) => {\r\n const result = fetchResultFromProcessors({\r\n processors: [\r\n processFolderSizeLimitErrors,\r\n processAssetErrors,\r\n ],\r\n options: {\r\n folderCreationErrors,\r\n assetUploadErrors,\r\n i18n,\r\n filePickerI18n,\r\n aid,\r\n logger,\r\n },\r\n });\r\n\r\n if (result) {\r\n return result;\r\n }\r\n\r\n let genericErrorMessage;\r\n if (folderCreationErrors.length > 0) {\r\n if (assetUploadErrors.length > 0) {\r\n genericErrorMessage = _TL_('One or more folders or assets within folders failed to upload.');\r\n } else {\r\n genericErrorMessage = _TL_('One or more folders failed to upload.');\r\n }\r\n } else {\r\n genericErrorMessage = _TL_('One or more assets within your folders failed to upload.');\r\n }\r\n\r\n return i18n.getString(genericErrorMessage);\r\n};\r\n","import Promise from 'bluebird';\r\n\r\nexport const getTaskPoller = ({\r\n task, // func returns a promise which resolves to a value { isFinished }\r\n interval = 30000, // in milli-seconds\r\n}) => {\r\n let timerId;\r\n let stopRunning = false;\r\n let counter = 0;\r\n let taskPromise = null;\r\n\r\n const start = () => {\r\n if (taskPromise) {\r\n return taskPromise;\r\n }\r\n\r\n taskPromise = new Promise((resolve, reject) => {\r\n // run task immediately once\r\n counter = 1;\r\n task().then((result) => {\r\n const { isFinished } = result || {};\r\n if (!isFinished && !stopRunning) {\r\n timerId = setInterval(() => {\r\n if (!stopRunning) {\r\n counter += 1;\r\n task().then(({ isFinished: isDone }) => {\r\n if (isDone) {\r\n clearInterval(timerId);\r\n timerId = undefined;\r\n resolve(counter);\r\n }\r\n }).catch((err) => {\r\n clearInterval(timerId);\r\n timerId = undefined;\r\n reject(err);\r\n });\r\n } else {\r\n if (timerId) {\r\n clearInterval(timerId);\r\n timerId = undefined;\r\n }\r\n resolve(counter);\r\n }\r\n }, interval);\r\n } else {\r\n resolve(counter);\r\n }\r\n }).catch((err) => {\r\n reject(err);\r\n });\r\n });\r\n\r\n return taskPromise;\r\n };\r\n\r\n const stop = () => {\r\n stopRunning = true;\r\n return taskPromise;\r\n };\r\n\r\n return { start, stop };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useReducer } from 'react';\r\n\r\nconst existDup = (arr, newArr, itemKey) => {\r\n const keys = _.pluck(arr, itemKey);\r\n const newKeys = _.pluck(newArr, itemKey);\r\n\r\n return _.intersection(keys, newKeys).length > 0;\r\n};\r\n\r\nconst ACTION_TYPE_SET_FOLDER_DATA = 100;\r\nconst ACTION_TYPE_SET_PERF_TIME_SERIES = 200;\r\nconst ACTION_TYPE_RESET_DATA = 300;\r\n\r\nconst AL_FOLDER_REDUCER_INIT_STATE = {\r\n folders: null,\r\n assets: null,\r\n perfTimeSeriesData: null,\r\n};\r\n\r\n/*\r\n state:{\r\n // null - not yet initialized\r\n // [] - no folders\r\n folders: [\r\n {\r\n folderId: id of folder,\r\n folderName: name of folder,\r\n parentFolderId: id of parent folder, if parent is root\r\n parentHierarchy: [],\r\n assets: [],\r\n subfolders: [],\r\n itemCount: {\r\n ImageAssetsCount,\r\n LogoAssetsCount,\r\n SubFoldersCount,\r\n TextAssetsCount,\r\n VideoAssetsCount,\r\n TotalCount,\r\n },\r\n createdTime: time folder was created\r\n modifiedTime: last time folder was modified\r\n }\r\n ],\r\n assets: [\r\n {\r\n id, // \"1234\"\r\n name,\r\n folderAssetType, // \"Image\"\r\n url,\r\n originalUrl,\r\n sourceType, // \"UserUploaded\",\r\n type, // \"GenericImage\",\r\n height,\r\n width,\r\n originalHeight,\r\n originalWidth,\r\n cropSettings,\r\n cropSettingOnOriginal,\r\n placementSettings: [\r\n ],\r\n createdTime,\r\n modifiedTime,\r\n\r\n // !! Performance metrics, new for V4\r\n usedByCount: 10, // ads count?\r\n performanceLabel, // \"Best\", \"Good\", \"Low\",\r\n // # performanceMetrics\r\n impressions,\r\n clicks,\r\n CTR,\r\n spend,\r\n // # performanceMetricsChange\r\n impressionsChange,\r\n clicksChange,\r\n CTRChange,\r\n spendChange,\r\n // # performanceMetricsChangePercentage\r\n impressionsChangePercentage,\r\n clicksChangePercentage,\r\n CTRChangePercentage,\r\n spendChangePercentage,\r\n // # periodPerformanceMetrics\r\n periodImpressions,\r\n periodClicks,\r\n periodCTR,\r\n periodSpend,\r\n }\r\n ],\r\n perfTimeSeriesData: [ // one entry for each selected metric, at most 2 selected metrics on UI chart currently\r\n {\r\n metricName: \"Impressions\",\r\n uniqueId: 'a guid',\r\n primaryDataPoints: [\r\n {\r\n datetime: \"2023-06-12T00:00:00\",\r\n value: 400,\r\n },\r\n ...\r\n ],\r\n comparisonDataPoints: [ // empty if POP is disabled\r\n {\r\n datetime: \"2023-06-12T00:00:00\",\r\n value: 600,\r\n },\r\n ...\r\n ],\r\n },\r\n ],\r\n\r\n // mark where the data are loaded\r\n pageName: AdsStudioPageName.LibraryPage/AdsStudioPageName.PerfPage/undefined\r\n }\r\n*/\r\nconst folderDataStateReducer = (state, action) => {\r\n const { type: actionType, ...actionData } = action;\r\n switch (actionType) {\r\n case ACTION_TYPE_SET_FOLDER_DATA:\r\n {\r\n const {\r\n newFolders = [], newAssets = [], newPerfTimeSeries = [], shouldFlush, logger, pageName,\r\n } = actionData;\r\n\r\n if (shouldFlush) {\r\n return {\r\n ...state, folders: newFolders, assets: newAssets, perfTimeSeriesData: newPerfTimeSeries, pageName,\r\n };\r\n }\r\n\r\n // todo: investigate why there are duliacted folders and assets\r\n const foundFolderDup = existDup(state.folders, newFolders, 'folderId');\r\n const foundAssetDup = existDup(state.assets, newAssets, 'id');\r\n if (foundFolderDup) {\r\n logger.logTrace('Unexpected duplicate folders found in folderDataStateReducer');\r\n }\r\n if (foundAssetDup) {\r\n logger.logTrace('Unexpected duplicate assets found in folderDataStateReducer');\r\n }\r\n if (foundFolderDup || foundAssetDup) {\r\n // if found duplicate, which should not happen, don't update the state\r\n return state;\r\n }\r\n\r\n // todo: don't update time series data if shouldFlush is false, is that expected? confirm with MT\r\n return {\r\n ...state,\r\n folders: [...(state.folders || []), ...newFolders],\r\n assets: [...(state.assets || []), ...newAssets],\r\n };\r\n }\r\n case ACTION_TYPE_SET_PERF_TIME_SERIES:\r\n {\r\n const { newPerfTimeSeries } = actionData;\r\n return { ...state, perfTimeSeriesData: newPerfTimeSeries };\r\n }\r\n case ACTION_TYPE_RESET_DATA:\r\n {\r\n return AL_FOLDER_REDUCER_INIT_STATE;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const useDataServiceReducer = (logger, initState = AL_FOLDER_REDUCER_INIT_STATE) => {\r\n const [folderData, dispatch] = useReducer(folderDataStateReducer, initState);\r\n\r\n const setFolderData = useCallback(({\r\n newAssets, newFolders, newPerfTimeSeries,\r\n }, pageName) => {\r\n dispatch({\r\n type: ACTION_TYPE_SET_FOLDER_DATA,\r\n newAssets,\r\n newFolders,\r\n newPerfTimeSeries,\r\n pageName,\r\n shouldFlush: true,\r\n logger,\r\n });\r\n }, [logger]);\r\n\r\n // replace assets only, and keep other data unchanged\r\n const setAssetsOnly = useCallback((newAssets) => {\r\n dispatch({\r\n type: ACTION_TYPE_SET_FOLDER_DATA,\r\n newAssets,\r\n newFolders: folderData.folders,\r\n newPerfTimeSeries: folderData.perfTimeSeriesData,\r\n pageName: folderData.pageName,\r\n shouldFlush: true,\r\n logger,\r\n });\r\n }, [folderData.pageName, folderData.folders, folderData.perfTimeSeriesData, logger]);\r\n\r\n const appendFolderData = useCallback(({ newAssets, newFolders }) => {\r\n dispatch({\r\n type: ACTION_TYPE_SET_FOLDER_DATA,\r\n newAssets,\r\n newFolders,\r\n shouldFlush: false,\r\n logger,\r\n });\r\n }, [logger]);\r\n\r\n const setPerfTimeSeriesData = useCallback(({ newPerfTimeSeries }) => {\r\n dispatch({\r\n type: ACTION_TYPE_SET_PERF_TIME_SERIES,\r\n newPerfTimeSeries,\r\n logger,\r\n });\r\n }, [logger]);\r\n\r\n const resetFolderData = useCallback(() => {\r\n dispatch({ type: ACTION_TYPE_RESET_DATA });\r\n }, []);\r\n\r\n return {\r\n folderData,\r\n setFolderData,\r\n setAssetsOnly,\r\n appendFolderData,\r\n setPerfTimeSeriesData,\r\n resetFolderData,\r\n };\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport class AdsStudioErrorBase extends Error {\r\n constructor({\r\n message,\r\n originError,\r\n errorCode,\r\n errorProcessor, // use processor to extend the error object with anything needed\r\n ...rest // additional data passed to processor\r\n }) {\r\n super(message);\r\n this.originError = originError;\r\n this.errorCode = errorCode || (originError && originError.errorCode) || 'Unknown';\r\n if (errorProcessor) {\r\n const params = { message, errorCode, ...rest };\r\n const info = errorProcessor(this.errorCode, params);\r\n _.extendOwn(this, info);\r\n }\r\n }\r\n}\r\n","import { FolderAssetType } from '../model';\r\n\r\n// use processors to append any info to AdsStudioODataError instance based on errorCode,\r\n// for example:\r\n// uxMessage: message to show on UI\r\n// actionable: if use could correct this error\r\n// getUXMessage(): function to get message shown on UI, but could pass in additiona parameters\r\n// ...\r\n\r\nexport const renameFolderApiErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n InvalidFolderId: {\r\n uxMessage: _TL_(\"This folder doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n actionable: false,\r\n },\r\n DuplicateFolderName: {\r\n uxMessage: _TL_('This folder name already exists. Please enter another one.'),\r\n actionable: true,\r\n },\r\n InvalidFolderName: {\r\n uxMessage: _TL_(\"You've entered one or more invalid characters in the fields. Please correct them and try again.\"),\r\n actionable: true,\r\n },\r\n genericError: {\r\n uxMessage: _TL_(\"Your folder couldn't be renamed. Please refresh the page and try again.\"),\r\n actionable: false,\r\n },\r\n };\r\n\r\n // actionable:\r\n // true - ask user to do correct the error\r\n // false - user can't do any action, just show notification\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const deleteFolderApiErrorProcessor = (errorCode /* {folderId, folderName} */) => {\r\n const msgs = {\r\n InvalidFolderId: {\r\n uxMessage: _TL_(\"This folder doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n ignorable: true,\r\n shortMsg: _TL_('Error'),\r\n },\r\n\r\n FolderHasAssets: {\r\n uxMessage: _TL_(\"Your folder couldn't be deleted because it contains assets or subfolders. Please remove these and try again.\"),\r\n shortMsg: _TL_(\"Folder isn't empty\"),\r\n ignorable: true,\r\n },\r\n\r\n genericError: {\r\n uxMessage: _TL_(\"Your folder couldn't be deleted. Please refresh the page and try again.\"),\r\n shortMsg: _TL_('Error'),\r\n },\r\n };\r\n msgs.InvalidId = msgs.InvalidFolderId;\r\n msgs.FolderHasSubFolders = msgs.FolderHasAssets;\r\n\r\n // actionable:\r\n // true - ask user to do correct the error\r\n // false - user can't do any action, just show notification\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const bulkMoveApiErrorProcessor = (errorCode, { folderCount, assetCount }) => {\r\n const msgs = {\r\n // DestFolderId is invalid\r\n InvalidFolderId: {\r\n getUXMessage: i18n => i18n.getString(\r\n _TL_(\"({{folderCount}} folders, {{assetCount}} assets)) couldn't be moved because you may have already deleted the folder. Please refresh the page and try a different folder.\"),\r\n { folderCount, assetCount }\r\n ),\r\n actionable: false,\r\n },\r\n\r\n genericError: {\r\n getUXMessage: i18n => i18n.getString(\r\n _TL_(\"({{folderCount}} folders, {{assetCount}} assets) couldn't be moved. Please refresh the page and try again.\"),\r\n { folderCount, assetCount }\r\n ),\r\n },\r\n };\r\n\r\n // actionable:\r\n // true - ask user to do correct the error\r\n // false - user can't do any action, just show notification\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\n// error for a specific item in the batch response\r\nexport const bulkMoveApiItemErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n InvalidFolderId: {\r\n uxMessage: _TL_(\"This folder doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n shortMsg: _TL_(\"Folder doesn't exist\"),\r\n availableActions: {},\r\n },\r\n AssetIdInvalid: {\r\n uxMessage: _TL_(\"This asset doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n shortMsg: _TL_(\"Asset doesn't exist\"),\r\n availableActions: {},\r\n },\r\n DuplicateAssetsUnderFolder: {\r\n uxMessage: _TL_('Your asset already exists in the folder. Please note that you can add the same asset to different folders, but you cannot have duplicate assets in the same folder.'),\r\n shortMsg: _TL_('Duplicate asset'),\r\n availableActions: {},\r\n },\r\n DuplicateImage: {\r\n uxMessage: _TL_('Your image already exists in the folder. Please note that you can add the same image to different folders, but you cannot have duplicate images in the same folder.'),\r\n shortMsg: _TL_('Duplicate image'),\r\n availableActions: {},\r\n },\r\n DuplicateFolderName: {\r\n uxMessage: _TL_('You cannot have duplicate subfolder names in the same folder. Please rename your subfolder and try again.'),\r\n shortMsg: _TL_('Duplicate subfolder name'),\r\n availableActions: {},\r\n },\r\n FolderCanNotMoveToTarget: {\r\n uxMessage: _TL_('You cannot move a folder into itself or one of its subfolders. Please select a different folder and try again.'),\r\n shortMsg: _TL_('Wrong target folder'),\r\n availableActions: {},\r\n },\r\n\r\n genericError: {\r\n uxMessage: _TL_(\"Your assets couldn't be moved. Please refresh the page and try again.\"),\r\n shortMsg: _TL_('Error'),\r\n availableActions: {},\r\n },\r\n };\r\n\r\n // actionable:\r\n // true - ask user to do correct the error\r\n // false - user can't do any action, just show notification\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const deleteAssetApiErrorProcessor = (errorCode, { assetType }) => {\r\n const msgs = {\r\n AssetIsUsed: {\r\n uxMessage: assetType === FolderAssetType.Video\r\n ? _TL_(\"You can't delete this video because it's being used by other campaigns, ads, or video extensions.\")\r\n : _TL_(\"You can't delete this image because it's being used by other campaigns, ads, or image extensions.\"),\r\n availableActions: {\r\n gotoAds: true,\r\n // others: true,\r\n },\r\n },\r\n // ImageAdExtensionPilotNotEnabledForCustomer\r\n // AssetDoesNotBelongToAccount\r\n // AssetIdInvalid\r\n // AssetIsAlreadyDeleted\r\n // CamAssetCannotBeDeleted --Asset of this Type ( CAM ) can not be deleted\r\n genericError: {\r\n uxMessage: _TL_('Failed to delete image. Please try again or contact support.'),\r\n availableActions: {},\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const createFolderApiErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n DuplicateEntity: {\r\n getUXMessage: i18n => i18n.getString(_TL_('This folder name already exists. Please enter another one.')),\r\n actionable: true,\r\n },\r\n InvalidFolderName: {\r\n getUXMessage: i18n => i18n.getString(_TL_(\"You've entered one or more invalid characters in the fields. Please correct them and try again.\")),\r\n actionable: true,\r\n },\r\n FolderLimitExceededPerAccount: {\r\n getUXMessage: (i18n, getFolderLimit) => (i18n.getString(_TL_('Failed to create one or more folders because your account has exceeded the {{value}}-folder limit. Please remove folders and try again.'), getFolderLimit())\r\n ),\r\n actionable: false,\r\n },\r\n genericError: {\r\n getUXMessage: i18n => i18n.getString(_TL_('Failed to create folder. Please try again.')),\r\n actionable: false,\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\n// ## rename asset\r\n// AssetIsNull\r\n// AssetDoesNotBelongToAccount\r\n// AssetIsAlreadyDeleted\r\n\r\n//\r\n// ## bulk delete asset\r\nexport const bulkDeleteAssetsApiItemErrorProcessor = (errorCode, { assetType }) => {\r\n const msgs = {\r\n // AssetIdInvalid\r\n // AssetIsAlreadyDeleted\r\n CampaignServiceMediaIdInvalid: {\r\n uxMessage: _TL_(\"This asset doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n shortMsg: _TL_(\"Asset doesn't exist\"),\r\n availableActions: {},\r\n },\r\n // // AssetDoesNotBelongToAccount\r\n // CampaignServiceMediaNotFoundInAccount: {\r\n // uxMessage: _TL_('Asset does not belong to account'),\r\n // availableActions: {},\r\n // },\r\n // // CamAssetCannotBeDeleted\r\n // CampaignServiceMediaTypeInvalidForOperation: {\r\n // uxMessage: _TL_('Asset of this Type ( CAM ) cannot be deleted'),\r\n // availableActions: {},\r\n // },\r\n // AssetIsUsed\r\n CampaignServiceMediaIsAssociated: {\r\n uxMessage: assetType === FolderAssetType.Video\r\n ? _TL_(\"You can't delete this video because it's being used by other campaigns, ads, or video extensions. Delete these associations and try again.\")\r\n : _TL_(\"You can't delete this image because it's being used by other campaigns, ads, or image extensions. Delete these associations and try again.\"),\r\n shortMsg: _TL_('Asset is currently in use '),\r\n availableActions: {\r\n gotoAds: true,\r\n // others: true,\r\n },\r\n },\r\n // // AccountIdInvalid\r\n // CampaignServiceInvalidAccountId: {\r\n // uxMessage: _TL_('account id is invalid'),\r\n // availableActions: {},\r\n // },\r\n // // DuplicateId\r\n // DuplicateId: {\r\n // uxMessage: _TL_('There are dulpicate ids from input'),\r\n // availableActions: {},\r\n // },\r\n genericError: {\r\n uxMessage: _TL_(\"Your assets couldn't be deleted. Please refresh the page and try again.\"),\r\n shortMsg: _TL_('Error'),\r\n availableActions: {},\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const bulkDeleteAssetsApiErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n genericError: {\r\n uxMessage: _TL_(\"Your assets couldn't be deleted. Please refresh the page and try again.\"),\r\n shortMsg: _TL_('Error'),\r\n availableActions: {},\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const generateImagesWithAIAPIErrorProcessor = (errorCode, params) => {\r\n const reqCountErr = _TL_(\"Sorry, our servers are busy and we're unable to process your request. We're working to resolve this issue. Please try again later.\");\r\n\r\n const msgs = {\r\n GenerateImagesPromptLengthInvalid: {\r\n uxMessage: _TL_('Your image description is either too long or too short. 256 characters maximum.'),\r\n },\r\n GenerateImagesRequestCountLimitExceededPerAccount: {\r\n uxMessage: reqCountErr,\r\n },\r\n GenerateImagesRequestCountLimitExceeded: {\r\n uxMessage: reqCountErr,\r\n },\r\n GenerateImagesPromptContentInvalid: { // when AIGC told MT the input prompt is invalid\r\n uxMessage: _TL_('Something went wrong with your request and we\\'re unable to process it at this time.'),\r\n },\r\n\r\n // use general message for this one\r\n // GenerateImagesAIGCNoRecommendation: when AIGC failed to create task, failed to generate image, but it does not specify the reason.\r\n\r\n GenerateImagesAIGCNoRecommendationWithBrand: {\r\n brandNameDetected: true,\r\n brandNames: (params && params.errorMessage) || '',\r\n },\r\n\r\n genericError: {\r\n uxMessage: _TL_('We\\'ve encountered an error and failed to generate images.'),\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const getAIGeneratedImageAPIErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n AI_Generation_Failed: {\r\n shouldRetry: false,\r\n uxMessage: _TL_('Something went wrong with your request and we\\'re unable to process it at this time. We apologize for the inconvenience. Please try again later.'),\r\n },\r\n genericError: {\r\n shouldRetry: true,\r\n uxMessage: _TL_('We\\'ve encountered an error and failed to generate images.'),\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\n// todo: handle error codes returned from MT (what error codes are returned from MT?)\r\n// todo: scrub error message text\r\nexport const getRemoveImageBackgroundAPIErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n GenerateImagesAIGCInvalidImageSize: {\r\n uxMessage: _TL_('We’re unable to generate the image because the image size does not meet the minimum required dimensions.'),\r\n },\r\n GenerateImagesAIGCInvalidImageContent: {\r\n uxMessage: _TL_('We’re unable to generate the image because the image you provided may violate our policies and guidelines. To learn more, see '),\r\n availableActions: {\r\n gotoDisallowedContent: true,\r\n },\r\n },\r\n GenerateImageAIGCInvalidUserPrompt: {\r\n uxMessage: _TL_('We’re unable to generate the image because the prompt you provided may violate our policies and guidelines. To learn more, see '),\r\n availableActions: {\r\n gotoDisallowedContent: true,\r\n },\r\n },\r\n GenerateImageAIGCInvalidGeneratedImage: {\r\n uxMessage: _TL_('We’re unable to generate the image because it may violate our policies and guidelines. To learn more, see '),\r\n availableActions: {\r\n gotoDisallowedContent: true,\r\n },\r\n },\r\n genericError: {\r\n shouldRetry: true,\r\n uxMessage: _TL_('We’ve encountered an error removing the image’s background. Please try again.'),\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n","/* istanbul ignore file */\r\n// ut tests of use-folders are covered in CMUI level\r\n/* eslint-disable arrow-body-style */\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { useCallback, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {\r\n ROOT_FOLDER_ID,\r\n RootFolderName,\r\n DEFAULT_PAGE_SIZE,\r\n CSMLSortBy,\r\n FolderAssetType,\r\n} from '../../model';\r\nimport { civilDateRangeToDebugString } from '../../utils';\r\nimport { useDataServiceReducer } from './folder-reducer';\r\nimport { AdsStudioErrorBase, deleteFolderApiErrorProcessor } from '../../error-handling';\r\n\r\nconst PATH_SEPERATOR = ' > ';\r\n\r\nconst getPathString = (i18n, folderPath) => {\r\n // remove ROOT section from the string\r\n let pathString = folderPath.slice(1).map(fp => fp.folderName).join(PATH_SEPERATOR) || '';\r\n if (pathString) {\r\n pathString = `${PATH_SEPERATOR}${pathString}`;\r\n }\r\n pathString = `${i18n.getString(_TL_('Library'))}${pathString}`;\r\n return pathString;\r\n};\r\n\r\nexport const getAssetTypeToFetch = ({ filterSettings, defaultAssetType }) => {\r\n const { assetTypeFilter } = filterSettings || {};\r\n\r\n return assetTypeFilter || defaultAssetType;\r\n};\r\n\r\nexport const useFolders = ({\r\n perfMetricDateRange,\r\n defaultPerfMetricDateRange,\r\n repository,\r\n logger,\r\n assetType: defaultAssetType,\r\n i18n,\r\n}) => {\r\n const ROOT_FOLDER = {\r\n folderId: ROOT_FOLDER_ID,\r\n folderName: i18n.getString(RootFolderName[defaultAssetType] || _TL_('Library')),\r\n };\r\n\r\n const {\r\n folderData, setFolderData, setAssetsOnly: setAssets, appendFolderData, setPerfTimeSeriesData, resetFolderData,\r\n } = useDataServiceReducer(logger);\r\n\r\n const [newFolderId, setNewFolderId] = useState('');\r\n const totalItemCount = useRef({});\r\n\r\n // set current folder navigation path\r\n // ROOT_FOLDER will always be element 0 in the paths folder state\r\n // when navigating, folders get pushed onto path\r\n // so top most folder is the current folder\r\n const [folderPath, setFolderPath] = useState([ROOT_FOLDER]);\r\n const currentFolder = useMemo(() => folderPath[folderPath.length - 1], [folderPath]);\r\n const currentFolderId = useMemo(() => currentFolder.folderId, [currentFolder]);\r\n\r\n const latestRequestTimestamp = useRef(0);\r\n\r\n /*\r\n searchTerm,\r\n minWidth,\r\n minHeight,\r\n dateAddedStart,\r\n dateAddedEnd,\r\n importSource,\r\n assetSources,\r\n assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch,\r\n hasPerfData,\r\n topRated,\r\n */\r\n const curFilterSettings = useRef(null);\r\n\r\n const curSortBy = useRef(CSMLSortBy.MostRecent);\r\n const curAssetCountToLoadForSubFolders = useRef(1);\r\n const curFolderAssetTypeToLoad = useRef(defaultAssetType);\r\n const curIncludeParentHierarchy = useRef(false);\r\n const curIncludeSubfolders = useRef(true);\r\n const curPageName = useRef(undefined);\r\n const curPerfMarker = useRef(undefined);\r\n\r\n const pendingVideoBlobUploadPromiseTokens = useRef([]);\r\n\r\n const resetData = useCallback(() => {\r\n resetFolderData();\r\n curFilterSettings.current = null;\r\n curSortBy.current = CSMLSortBy.MostRecent;\r\n curAssetCountToLoadForSubFolders.current = 1;\r\n curFolderAssetTypeToLoad.current = defaultAssetType;\r\n curIncludeParentHierarchy.current = false;\r\n curIncludeSubfolders.current = true;\r\n curPageName.current = undefined;\r\n curPerfMarker.current = undefined;\r\n }, [defaultAssetType, resetFolderData]);\r\n\r\n const logTrace = useCallback((message, ...rest) => {\r\n logger.logTrace(`DataService: ${message}`, ...rest);\r\n }, [logger]);\r\n\r\n const loadFolderArgs = useCallback(({\r\n filterSettings,\r\n sortBy,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n }) => {\r\n const folderAssetTypeToFetch = getAssetTypeToFetch({\r\n filterSettings,\r\n defaultAssetType,\r\n });\r\n\r\n return repository.getFolderArgs({\r\n perfMetricDateRange,\r\n ...filterSettings,\r\n sortBy,\r\n skip: 0,\r\n count: count || DEFAULT_PAGE_SIZE,\r\n folderId: currentFolderId,\r\n assetType: folderAssetTypeToFetch,\r\n includeAssets: true,\r\n includeSubfolders: true,\r\n includeParentHierarchy,\r\n assetsToLoadForSubfolders,\r\n isAssetPickerScenario: defaultAssetType !== null,\r\n });\r\n }, [defaultAssetType, repository, perfMetricDateRange, currentFolderId]);\r\n\r\n const loadFolderDataInternal = useCallback(({\r\n hasDateRange,\r\n filterSettings,\r\n sortBy,\r\n folderId,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders = true,\r\n pageName,\r\n perfMarker,\r\n withBIData = false,\r\n }) => {\r\n const requestTimestamp = Date.now();\r\n const folderAssetTypeToFetch = getAssetTypeToFetch({\r\n filterSettings,\r\n defaultAssetType,\r\n });\r\n const saveCurrentFilters = () => {\r\n curSortBy.current = sortBy;\r\n curFilterSettings.current = filterSettings;\r\n curFolderAssetTypeToLoad.current = folderAssetTypeToFetch;\r\n curAssetCountToLoadForSubFolders.current = assetsToLoadForSubfolders;\r\n curIncludeParentHierarchy.current = includeParentHierarchy;\r\n curIncludeSubfolders.current = includeSubfolders;\r\n curPageName.current = pageName;\r\n curPerfMarker.current = perfMarker;\r\n };\r\n return repository.getFolderData({\r\n perfMetricDateRange: hasDateRange ? perfMetricDateRange : defaultPerfMetricDateRange,\r\n ...filterSettings,\r\n sortBy,\r\n skip: 0,\r\n count: count || DEFAULT_PAGE_SIZE,\r\n folderId,\r\n assetType: folderAssetTypeToFetch,\r\n includeAssets: true,\r\n includeSubfolders,\r\n includeParentHierarchy,\r\n assetsToLoadForSubfolders,\r\n isAssetPickerScenario: defaultAssetType !== null,\r\n withBIData,\r\n perfMarker,\r\n }).then((res) => {\r\n if (requestTimestamp >= latestRequestTimestamp.current) {\r\n const { folder } = res;\r\n const newFolders = folder.subfolders || [];\r\n const newAssets = folder.assets || [];\r\n const perfTimeSeriesData = folder.perfTimeSeriesData || [];\r\n\r\n totalItemCount.current = folder.itemCount;\r\n saveCurrentFilters();\r\n\r\n setFolderData({ newAssets, newFolders, newPerfTimeSeries: perfTimeSeriesData }, pageName);\r\n\r\n latestRequestTimestamp.current = requestTimestamp;\r\n\r\n const {\r\n searchTerm: searchText, dateAddedStart, dateAddedEnd, ...otherFilters\r\n } = filterSettings || {};\r\n logTrace('FolderDataService: loaded assets, folders', {\r\n ...otherFilters,\r\n searchText,\r\n dateAddedDateRange: (dateAddedStart != null && dateAddedEnd != null) ? civilDateRangeToDebugString({ start: dateAddedStart, end: dateAddedEnd }) : undefined,\r\n sortBy: curSortBy.current,\r\n skip: 0,\r\n count: DEFAULT_PAGE_SIZE,\r\n assetType: curFolderAssetTypeToLoad.current,\r\n hasDateRange,\r\n });\r\n } else {\r\n logTrace('DataService: load folders and assets through folder service, ignore other requests');\r\n }\r\n\r\n return res;\r\n }).tapCatch(() => {\r\n if (requestTimestamp > latestRequestTimestamp.current) {\r\n saveCurrentFilters();\r\n latestRequestTimestamp.current = requestTimestamp;\r\n }\r\n });\r\n }, [defaultAssetType, repository, perfMetricDateRange, defaultPerfMetricDateRange, setFolderData, logTrace]);\r\n\r\n const loadFolderData = useCallback(({\r\n filterSettings,\r\n sortBy,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders = true,\r\n pageName,\r\n perfMarker,\r\n }) => {\r\n return loadFolderDataInternal({\r\n hasDateRange: false,\r\n filterSettings,\r\n sortBy,\r\n folderId: currentFolderId,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders,\r\n pageName,\r\n perfMarker,\r\n });\r\n }, [loadFolderDataInternal, currentFolderId]);\r\n\r\n const loadFolderDataInDateRange = useCallback(({\r\n filterSettings,\r\n sortBy,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders = true,\r\n pageName,\r\n perfMarker,\r\n }) => loadFolderDataInternal({\r\n hasDateRange: true,\r\n filterSettings,\r\n sortBy,\r\n folderId: currentFolderId,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders,\r\n pageName,\r\n perfMarker,\r\n withBIData: true,\r\n }), [loadFolderDataInternal, currentFolderId]);\r\n\r\n const loadPerfTimeSeriesData = useCallback(({ perfTimeSeriesParams, filterSettings }) => {\r\n const ret = repository.getPerfTimeSeriesData({\r\n perfMetricDateRange,\r\n perfTimeSeriesParams,\r\n ...(filterSettings || {}),\r\n folderId: currentFolderId === ROOT_FOLDER_ID ? -1 : currentFolderId,\r\n }).then((res) => {\r\n const { perfTimeSeriesData } = res || {};\r\n setPerfTimeSeriesData({ newPerfTimeSeries: perfTimeSeriesData });\r\n logTrace('FolderDataService: loaded performance timeseries data');\r\n return perfTimeSeriesData;\r\n });\r\n return ret;\r\n }, [currentFolderId, logTrace, perfMetricDateRange, repository, setPerfTimeSeriesData]);\r\n\r\n const loadMoreFolderDataImpl = useCallback(({ hasDateRange, count = DEFAULT_PAGE_SIZE, withBIData = false }) => {\r\n const requestTimestamp = Date.now();\r\n\r\n const { folders, assets } = folderData;\r\n\r\n const skip = (folders ? folders.length : 0) + (assets ? assets.length : 0);\r\n\r\n // avoid error: Invalid $top, $skip Combination. $skip should be multiple of $top\r\n // this could happen if additional loadmore request (maybe caused by grid rerender) is sent after all items are aready loaded\r\n if (totalItemCount.current && skip >= totalItemCount.current.TotalCount) {\r\n logTrace('skip this request as all items are already loaded.', {\r\n skip, top: count, totalItemCount: totalItemCount.current.TotalCount, hasDateRange,\r\n });\r\n return Promise.resolve({});\r\n }\r\n if (count && skip % count) {\r\n logTrace('$skip is not multiple of $top', {\r\n skip, top: count, totalItemCount: totalItemCount.current.TotalCount, hasDateRange,\r\n });\r\n return Promise.resolve({});\r\n }\r\n\r\n return repository.getFolderData({\r\n perfMetricDateRange: hasDateRange ? perfMetricDateRange : defaultPerfMetricDateRange,\r\n ...curFilterSettings.current,\r\n sortBy: curSortBy.current,\r\n skip,\r\n folderId: currentFolderId,\r\n count: count || DEFAULT_PAGE_SIZE,\r\n assetType: curFolderAssetTypeToLoad.current,\r\n includeAssets: true,\r\n includeSubfolders: curIncludeSubfolders.current,\r\n includeParentHierarchy: curIncludeParentHierarchy.current,\r\n assetsToLoadForSubfolders: curAssetCountToLoadForSubFolders.current,\r\n isAssetPickerScenario: defaultAssetType !== null,\r\n withBIData,\r\n perfMarker: curPerfMarker.current,\r\n }).then((res) => {\r\n if (requestTimestamp >= latestRequestTimestamp.current) {\r\n const { folder } = res;\r\n const newFolders = folder.subfolders || [];\r\n const newAssets = folder.assets || [];\r\n\r\n latestRequestTimestamp.current = requestTimestamp;\r\n\r\n logTrace('DataService: loaded more folders and assets through folder service', {\r\n sortBy: curSortBy.current,\r\n skip,\r\n count,\r\n filterSettings: curFilterSettings.current,\r\n assetType: curFolderAssetTypeToLoad.current,\r\n hasDateRange,\r\n });\r\n\r\n appendFolderData({ newFolders, newAssets });\r\n } else {\r\n logTrace('DataService: load more data, ignore other requests');\r\n }\r\n\r\n return res;\r\n }).tapCatch(() => {\r\n logger.logError('Failed to load more data');\r\n });\r\n }, [folderData, repository, perfMetricDateRange, defaultPerfMetricDateRange, currentFolderId, defaultAssetType, logTrace, appendFolderData, logger]);\r\n\r\n const loadMoreFolderData = useCallback(({ count = DEFAULT_PAGE_SIZE }) => loadMoreFolderDataImpl({ hasDateRange: false, count }), [loadMoreFolderDataImpl]);\r\n const loadMoreFolderDataInDateRange = useCallback(({ count = DEFAULT_PAGE_SIZE }) => loadMoreFolderDataImpl({ hasDateRange: true, count, withBIData: true }), [loadMoreFolderDataImpl]);\r\n\r\n const reloadFolders = useCallback(({ count } = {}) => loadFolderDataInternal({\r\n hasDateRange: false,\r\n filterSettings: curFilterSettings.current,\r\n folderId: currentFolderId,\r\n sortBy: curSortBy.current,\r\n assetsToLoadForSubfolders: curAssetCountToLoadForSubFolders.current,\r\n includeParentHierarchy: curIncludeParentHierarchy.current,\r\n includeSubfolders: curIncludeSubfolders.current,\r\n count,\r\n pageName: curPageName.current,\r\n perfMarker: curPerfMarker.current,\r\n }), [loadFolderDataInternal, currentFolderId]);\r\n\r\n const reloadFoldersInDateRange = useCallback(({ count } = {}) => loadFolderDataInternal({\r\n hasDateRange: true,\r\n filterSettings: curFilterSettings.current,\r\n folderId: currentFolderId,\r\n sortBy: curSortBy.current,\r\n assetsToLoadForSubfolders: curAssetCountToLoadForSubFolders.current,\r\n includeParentHierarchy: curIncludeParentHierarchy.current,\r\n includeSubfolders: curIncludeSubfolders.current,\r\n count,\r\n pageName: curPageName.current,\r\n perfMarker: curPerfMarker.current,\r\n }), [loadFolderDataInternal, currentFolderId]);\r\n\r\n // use method to navigate into a folder that's a child of the current folder\r\n // i.e. user clicking a folder that's displayed in the folder grid\r\n const navigateIntoFolder = useCallback(({ id = '', navigateToNewFolder = false }) => {\r\n let folderToNavigate;\r\n\r\n const { folders } = folderData;\r\n\r\n if (navigateToNewFolder && !id && newFolderId) {\r\n folderToNavigate = _.find(folders, ({ folderId }) => folderId === newFolderId);\r\n } else if (id) {\r\n folderToNavigate = _.find(folders, ({ folderId }) => folderId === id);\r\n }\r\n\r\n const { parentHierarchy } = folderToNavigate;\r\n if (parentHierarchy && parentHierarchy.length > 0) {\r\n setFolderPath([ROOT_FOLDER, ...parentHierarchy]);\r\n } else {\r\n setFolderPath(curFolderPath => [\r\n ...curFolderPath,\r\n folderToNavigate,\r\n ]);\r\n }\r\n setNewFolderId('');\r\n }, [ROOT_FOLDER, folderData, newFolderId]);\r\n\r\n // use method to navigate to a folder in current path\r\n // i.e. user clicking a parent folder that's displayed in the summary bar\r\n const navigateToFolderInPath = useCallback(({ id }) => {\r\n setFolderPath((curFolderPath) => {\r\n const indexOfFolderInPath = _.findIndex(curFolderPath, ({ folderId }) => folderId === id);\r\n return curFolderPath.slice(0, indexOfFolderInPath + 1);\r\n });\r\n setNewFolderId('');\r\n }, [setFolderPath]);\r\n\r\n // use method to navigate into a folder in navigation tree\r\n // i.e. user clicking a folder in the navigation tree or in recent of home page\r\n const navigateIntoFolderItem = useCallback(({ folder }) => {\r\n const { parentHierarchy = [] } = folder;\r\n setFolderPath([ROOT_FOLDER, ...parentHierarchy]);\r\n }, [ROOT_FOLDER]);\r\n\r\n const navigateIntoRootFolder = useCallback(() => {\r\n setFolderPath([ROOT_FOLDER]);\r\n }, [ROOT_FOLDER]);\r\n\r\n const createFolder = useCallback(({ folderName }) => {\r\n return repository.createFolder({ folderName, parentFolderId: currentFolderId });\r\n }, [repository, currentFolderId]);\r\n\r\n const createFolderBulk = useCallback(({ folderName, parentFolderId }) => {\r\n return repository.createFolder({ folderName, parentFolderId });\r\n }, [repository]);\r\n\r\n const deleteEmptyFolder = useCallback(({ folderId, folderName }) => {\r\n return repository.deleteFolder({ folderId, folderName });\r\n }, [repository]);\r\n\r\n const renameFolder = useCallback(({ folderId, newFolderName }) => {\r\n return repository.renameFolder({ folderId, newFolderName });\r\n }, [repository]);\r\n\r\n const uploadImageByUrlToFolder = useCallback(({\r\n imageUrl,\r\n folderId,\r\n sourceType,\r\n }) => {\r\n return repository.addUrlImageToFolder({\r\n imageSrc: imageUrl,\r\n folderId: folderId || currentFolderId,\r\n sourceType,\r\n });\r\n }, [repository, currentFolderId]);\r\n\r\n const addImageWithBaseIdToFolder = useCallback(({\r\n folderId,\r\n imageSrc,\r\n metaData,\r\n baseId,\r\n sourceType,\r\n }) => {\r\n return repository.addImageWithBaseIdToFolder({\r\n folderId: folderId || currentFolderId,\r\n imageSrc,\r\n metaData,\r\n baseId,\r\n sourceType,\r\n });\r\n }, [currentFolderId, repository]);\r\n\r\n const uploadVideoToAzureBlob = useCallback(({\r\n fileObject,\r\n onProgress,\r\n }) => {\r\n const promise = new Promise((resolve, reject) => {\r\n repository.uploadVideoToAzureBlobWithCancellation({\r\n fileObject,\r\n onProgress,\r\n }).then(({ token, blobName }) => {\r\n pendingVideoBlobUploadPromiseTokens.current.push(token);\r\n\r\n token.on({\r\n onSuccess: () => resolve({ token, blobName }),\r\n onError: reject,\r\n onCancel: () => {\r\n logTrace('DataService: cancel azure upload for video file');\r\n\r\n reject();\r\n },\r\n });\r\n });\r\n });\r\n\r\n return promise;\r\n }, [logTrace, repository]);\r\n\r\n const uploadVideoToFolder = useCallback(({\r\n fileObject,\r\n updateCurrentProgress,\r\n name,\r\n folderId,\r\n perfMarker,\r\n }) => {\r\n let uploadVideoPerfMarker = null;\r\n if (perfMarker) {\r\n uploadVideoPerfMarker = perfMarker.createChild('uploadSingleVideo');\r\n uploadVideoPerfMarker.willInit();\r\n }\r\n // blob upload stage: 0.9 progress\r\n // save blob to MT: 0.1 progress\r\n const scale = 0.9;\r\n const progressForBlobUpload = updateCurrentProgress ? (percentage) => {\r\n return updateCurrentProgress({\r\n loaded: percentage * scale,\r\n total: 1,\r\n });\r\n } : undefined;\r\n const progressForSavingBlobToMT = updateCurrentProgress ? (evt) => {\r\n const { loaded, total } = evt;\r\n\r\n return updateCurrentProgress({\r\n loaded: (total * scale) + (loaded * (1 - scale)),\r\n total,\r\n });\r\n } : undefined;\r\n\r\n return uploadVideoToAzureBlob({\r\n fileObject,\r\n onProgress: progressForBlobUpload,\r\n }).then(({ token, blobName }) => {\r\n pendingVideoBlobUploadPromiseTokens.current = _.without(pendingVideoBlobUploadPromiseTokens.current, token);\r\n\r\n return repository.addFolderUploadAsset({\r\n folderId: folderId || currentFolderId,\r\n asset: { blobName, name },\r\n folderAssetType: FolderAssetType.Video,\r\n inProgress: progressForSavingBlobToMT,\r\n }).finally(() => {\r\n if (uploadVideoPerfMarker) {\r\n uploadVideoPerfMarker.done();\r\n }\r\n });\r\n });\r\n }, [currentFolderId, repository, uploadVideoToAzureBlob]);\r\n\r\n const cancelPendingVideoUpload = () => {\r\n _.each(pendingVideoBlobUploadPromiseTokens.current, (token) => {\r\n token.cancel();\r\n });\r\n };\r\n\r\n const postVideoByUrl = useCallback(({\r\n videoUrl,\r\n name,\r\n folderId,\r\n }) => {\r\n return repository.postVideoByUrl({\r\n folderId: folderId || currentFolderId,\r\n videoUrl,\r\n name,\r\n });\r\n }, [currentFolderId, repository]);\r\n\r\n const uploadImageToFolder = useCallback(({\r\n imageData,\r\n updateCurrentProgress,\r\n imageName,\r\n folderId,\r\n supportUpscale,\r\n }) => {\r\n return repository.addFolderUploadAsset({\r\n folderId: folderId || currentFolderId,\r\n asset: { data: imageData, name: imageName },\r\n folderAssetType: FolderAssetType.Image,\r\n inProgress: updateCurrentProgress,\r\n supportUpscale,\r\n });\r\n }, [currentFolderId, repository]);\r\n\r\n const uploadStockImageToFolder = useCallback(({\r\n stockImageId,\r\n folderId,\r\n }) => {\r\n return repository.addStockImageToFolder({\r\n folderId: folderId || currentFolderId,\r\n stockImageId,\r\n });\r\n }, [repository, currentFolderId]);\r\n\r\n const uploadInvestImageToFolder = useCallback(({\r\n investImageId,\r\n imageSrc,\r\n folderId,\r\n }) => {\r\n return repository.addInvestImageToFolder({\r\n folderId: folderId || currentFolderId,\r\n investImageId,\r\n imageSrc,\r\n });\r\n }, [repository, currentFolderId]);\r\n\r\n const uploadInvestVideoToFolder = useCallback(({\r\n investVideoId,\r\n videoSrc,\r\n description,\r\n folderId,\r\n }) => {\r\n return repository.addInvestVideoToFolder({\r\n folderId: folderId || currentFolderId,\r\n investVideoId,\r\n videoSrc,\r\n description,\r\n });\r\n }, [repository, currentFolderId]);\r\n\r\n const renameAsset = useCallback(({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n }) => {\r\n return repository.renameAsset({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n }).then(() => {\r\n logTrace('DataService: asset is renamed', { assetId, folderAssetType, newName: name });\r\n\r\n // update the internal state\r\n const { assets } = folderData;\r\n const idx = _.findIndex(assets, asset => asset.id === assetId);\r\n if (idx >= 0 && assets[idx].name !== name) {\r\n const newAsset = { ...assets[idx], name };\r\n const newAssets = [...assets];\r\n newAssets.splice(idx, 1, newAsset);\r\n setAssets(newAssets);\r\n }\r\n });\r\n }, [folderData, logTrace, repository, setAssets]);\r\n\r\n const deleteAsset = useCallback(({\r\n assetId,\r\n folderAssetType,\r\n }) => {\r\n return repository.deleteAsset({ assetId, folderAssetType })\r\n .tap(() => {\r\n logTrace('DataService: asset is deleted', { assetId, folderAssetType });\r\n });\r\n }, [repository, logTrace]);\r\n\r\n // eslint-disable-next-line no-underscore-dangle\r\n const _batchDeleteAssetsAsync = useCallback(({ assets, parentPath, onItemDeleted }) => {\r\n return repository.bulkDeleteAssets(assets).then(({ resultSummary }) => {\r\n const ret = _.map(resultSummary, ({\r\n err, id: assetId, name: assetName, folderAssetType, url, thumbnailUrl,\r\n }) => {\r\n onItemDeleted({\r\n err, assetId, assetName, path: parentPath, assetType: folderAssetType, thumbnailUrl: thumbnailUrl || url, api: 'bulkdeleteAssetApi', errorCode: err && err.errorCode,\r\n });\r\n return {\r\n err, assetId, assetName, parentPath, folderAssetType,\r\n };\r\n });\r\n return ret;\r\n }).catch((err) => {\r\n const ret = _.map(assets, ({\r\n id: assetId, name: assetName, folderAssetType, url, thumbnailUrl,\r\n }) => {\r\n onItemDeleted({\r\n err, assetId, assetName, path: parentPath, assetType: folderAssetType, thumbnailUrl: thumbnailUrl || url, api: 'bulkdeleteAssetApi', errorCode: err && err.errorCode,\r\n });\r\n return {\r\n err, assetId, assetName, parentPath, folderAssetType,\r\n };\r\n });\r\n return ret;\r\n });\r\n }, [repository]);\r\n\r\n // eslint-disable-next-line no-underscore-dangle\r\n const _deleteEmptyFolderAsync = useCallback(({\r\n folderId, folderName, parentPath, onItemDeleted = _.noop,\r\n }) => {\r\n return deleteEmptyFolder({ folderId, folderName }).then(() => {\r\n onItemDeleted({\r\n folderId, folderName, path: parentPath, api: 'deleteFolderApi',\r\n });\r\n return {\r\n folderId, folderName, parentPath,\r\n };\r\n }).catch((err) => {\r\n onItemDeleted({\r\n err, folderId, folderName, path: parentPath, api: 'deleteFolderApi', errorCode: err && err.errorCode,\r\n });\r\n return {\r\n err, folderId, folderName, parentPath,\r\n };\r\n });\r\n }, [deleteEmptyFolder]);\r\n\r\n // MT only support delete empty folder, to delete a folder with assets & subfolders,\r\n // need to delete its subfolders one by one, and batch delete its assets\r\n // eslint-disable-next-line no-underscore-dangle\r\n const _batchDelete = useCallback(({\r\n folders = [], assets = [], path, onItemDeleted, _deleteFolder,\r\n }) => {\r\n const parentPath = path || getPathString(i18n, folderPath);\r\n const concurrencyCount = 3;\r\n\r\n return Promise.map(\r\n folders,\r\n ({ folderId, folderName, itemCount: ic }) => _deleteFolder({\r\n folderId, folderName, path: parentPath, totalItemCount: ic.TotalCount, onItemDeleted,\r\n }),\r\n { concurrency: concurrencyCount }\r\n ).then((foldersResult) => {\r\n return _batchDeleteAssetsAsync({ assets, parentPath, onItemDeleted }).then((assetsResult) => {\r\n return { folders: foldersResult, assets: assetsResult };\r\n });\r\n });\r\n }, [_batchDeleteAssetsAsync, folderPath, i18n]);\r\n\r\n const deleteFolder = useCallback(({\r\n folderId,\r\n folderName,\r\n totalItemCount: totalItmCnt, // optional param\r\n path,\r\n onItemDeleted,\r\n skip = 0,\r\n }) => {\r\n const parentPath = path || getPathString(i18n, folderPath);\r\n\r\n // query one page (without any filters) and then delete returned items.\r\n const loadOnePageAndDeleteAsync = () => {\r\n const ret = repository.getFolderData({\r\n folderId, sortBy: curSortBy.current, skip, count: DEFAULT_PAGE_SIZE, includeAssets: true, includeSubfolders: true,\r\n }).then((res) => {\r\n const { folder } = res;\r\n const { subfolders, assets, itemCount: { TotalCount: totalCount } } = folder || {};\r\n\r\n logTrace('delete folder - loaded data to delete', { folderId, folderName, totalItemCount: totalCount });\r\n\r\n // folder is empty\r\n if (totalCount <= 0) {\r\n return { hasNextPage: false };\r\n }\r\n\r\n // folder is not empty, batch deleting\r\n return _batchDelete({\r\n folders: subfolders, assets, path: `${parentPath}${PATH_SEPERATOR}${folderName}`, onItemDeleted, _deleteFolder: deleteFolder,\r\n }).then((results) => {\r\n // stop if all tasks failed\r\n let newSkip = skip;\r\n const successCount = _.filter([...results.folders, ...results.assets], ({ err }) => !err).length;\r\n if (successCount <= 0) {\r\n // all failed, skip the page\r\n newSkip = skip + DEFAULT_PAGE_SIZE;\r\n }\r\n\r\n // all items are deleted (some of them may failed)\r\n return { hasNextPage: totalCount > skip + DEFAULT_PAGE_SIZE, newSkip };\r\n });\r\n }).catch((e) => {\r\n // failed to load data, stop handling this folder\r\n const err = new AdsStudioErrorBase({ message: 'failed to load data to delete', originError: e, errorProcessor: deleteFolderApiErrorProcessor });\r\n onItemDeleted({\r\n e, folderId, folderName, path: parentPath, api: 'getFolderDataApi', errorCode: err && err.errorCode,\r\n });\r\n\r\n\r\n return { hasNextPage: undefined, loadDataError: err };\r\n });\r\n return ret;\r\n };\r\n\r\n // current folder is empty\r\n if (totalItmCnt <= 0) {\r\n return _deleteEmptyFolderAsync({\r\n folderId, folderName, parentPath: path, onItemDeleted,\r\n });\r\n }\r\n\r\n // load subfolders and assets for 'folderId' page by page and then delete them one by one\r\n return loadOnePageAndDeleteAsync().then(({ hasNextPage, newSkip, loadDataError }) => {\r\n // continue to load next page and delete it\r\n if (hasNextPage === true) {\r\n return deleteFolder({\r\n folderId, folderName, totalItemCount: totalItmCnt, parentPath, onItemDeleted, skip: newSkip,\r\n });\r\n } else if (hasNextPage === false) {\r\n // try to delete the folder itself\r\n return _deleteEmptyFolderAsync({\r\n folderId, folderName, parentPath, onItemDeleted, skip: newSkip,\r\n });\r\n }\r\n\r\n // failed to load data (!!loadDataError), stop handling this folder\r\n return {\r\n folderId, folderName, parentPath, err: loadDataError,\r\n };\r\n // }).tap((result) => {\r\n // console.log('####', result);\r\n });\r\n }, [_batchDelete, _deleteEmptyFolderAsync, folderPath, i18n, logTrace, repository]);\r\n\r\n const batchDelete = useCallback(({\r\n folders = [], assets = [], path, onItemDeleted = _.noop,\r\n }) => _batchDelete({\r\n folders, assets, path, onItemDeleted, _deleteFolder: deleteFolder,\r\n }), [_batchDelete, deleteFolder]);\r\n\r\n const batchMove = useCallback(({ destFolderId, folders = [], assets = [] }) => {\r\n return repository.batchMove({ destFolderId, folders, assets });\r\n }, [repository]);\r\n\r\n const folderContext = useMemo(() => ({\r\n folders: folderData.folders,\r\n folderPath,\r\n loadFolderData,\r\n loadMoreFolderData,\r\n loadFolderDataInDateRange,\r\n loadFolderArgs,\r\n loadMoreFolderDataInDateRange,\r\n perfTimeSeriesData: folderData.perfTimeSeriesData,\r\n loadPerfTimeSeriesData,\r\n navigateIntoFolder,\r\n navigateToFolderInPath,\r\n navigateIntoFolderItem,\r\n navigateIntoRootFolder,\r\n createFolder,\r\n deleteFolder,\r\n renameFolder,\r\n createFolderBulk,\r\n currentFolder,\r\n uploadImageByUrlToFolder,\r\n currentFolderId,\r\n uploadVideoToFolder,\r\n cancelPendingVideoUpload,\r\n postVideoByUrl,\r\n uploadImageToFolder,\r\n uploadStockImageToFolder,\r\n uploadInvestImageToFolder,\r\n uploadInvestVideoToFolder,\r\n reloadFolders,\r\n reloadFoldersInDateRange,\r\n totalItemCount,\r\n assets: folderData.assets,\r\n setAssets,\r\n renameAsset,\r\n deleteAsset,\r\n batchDelete,\r\n batchMove,\r\n addImageWithBaseIdToFolder,\r\n resetFolderData: resetData,\r\n dataOwnerPageName: folderData.pageName,\r\n }), [folderData.folders, folderData.perfTimeSeriesData, folderData.assets, folderData.pageName, folderPath, loadFolderData, loadMoreFolderData, loadFolderDataInDateRange, loadFolderArgs, loadMoreFolderDataInDateRange, loadPerfTimeSeriesData, navigateIntoFolder, navigateToFolderInPath, navigateIntoRootFolder, navigateIntoFolderItem, createFolder, deleteFolder, renameFolder, createFolderBulk, currentFolder, uploadImageByUrlToFolder, currentFolderId, uploadVideoToFolder, postVideoByUrl, uploadImageToFolder, uploadStockImageToFolder, uploadInvestImageToFolder, uploadInvestVideoToFolder, reloadFolders, reloadFoldersInDateRange, setAssets, renameAsset, deleteAsset, batchDelete, batchMove, resetData, addImageWithBaseIdToFolder]);\r\n\r\n return folderContext;\r\n};\r\n\r\nuseFolders.propTypes = {\r\n repository: PropTypes.shape({\r\n getFolders: PropTypes.func.isRequired,\r\n getImages: PropTypes.func.isRequired,\r\n createFolder: PropTypes.func.isRequired,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n","import { useCallback, useMemo, useRef, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nexport const useCommonImageRepoMethods = ({\r\n imageRepository,\r\n logger,\r\n loadedImages,\r\n setLoadedImages,\r\n}) => {\r\n const latestTimestampRef = useRef(0);\r\n const [imageCroppingTasks, setImageCroppingTasks] = useState({});\r\n // used to restart task status poller\r\n const [croppingTaskUpdated, setCroppingTaskUpdated] = useState(null);\r\n\r\n const getImageById = useCallback(({ imageId, useCache = true }) => {\r\n if (useCache) {\r\n const image = _.find(loadedImages, img => img.id === imageId);\r\n if (image) {\r\n return Promise.resolve(image);\r\n }\r\n }\r\n // no local value, request from backend\r\n return imageRepository.getImage(imageId);\r\n }, [loadedImages, imageRepository]);\r\n\r\n const getImageCroppingTaskStatus = useCallback((imageId) => {\r\n const requestTimestamp = Date.now();\r\n return imageRepository.getImageCroppingTaskStatus(imageId).then(({ tasks /* totalCount */ }) => {\r\n // if multipe requests are sent out, ensure to keep the result from the latest request\r\n if (requestTimestamp > latestTimestampRef.current) {\r\n // only update if any value is changed\r\n setImageCroppingTasks((curTasks) => {\r\n let dirty = false;\r\n const newTaks = (tasks || []).reduce((prev, tsk = {}) => {\r\n const curTsk = curTasks && curTasks[tsk.id];\r\n const newTsk = _.pick(tsk, ['id', 'stage', 'hasError', 'failureMessage', 'isFinished']) || {};\r\n if (newTsk.isFinished) {\r\n dirty = dirty || !!curTsk;\r\n // task is finsished, remove it from the list\r\n return prev;\r\n }\r\n if (!curTsk || !_.isEqual(curTsk, newTsk)) {\r\n dirty = true;\r\n }\r\n return { ...prev, [newTsk.id]: newTsk };\r\n }, {});\r\n dirty = dirty || !_.isEmpty(_.difference(_.keys(curTasks), _.keys(newTaks)));\r\n if (dirty) {\r\n return newTaks;\r\n }\r\n return curTasks;\r\n });\r\n // eslint-disable-next-line no-param-reassign\r\n latestTimestampRef.current = requestTimestamp;\r\n }\r\n const taskCount = _.filter(tasks || [], t => t && !t.isFinished).length;\r\n return { totalCount: taskCount };\r\n }).catch((ex) => {\r\n // log and ignore the error\r\n logger.logError(`Failed to get image cropping task status. ${JSON.stringify(ex)}`);\r\n });\r\n }, [logger, imageRepository, latestTimestampRef]);\r\n\r\n const renameImage = useCallback(({ assetId: imageId, name }) => {\r\n const renameLocalImage = (images, setImages) => {\r\n const idx = _.findIndex(images, img => img.id === imageId);\r\n if (idx >= 0 && images[idx].name !== name) {\r\n const newImage = { ...images[idx], name };\r\n const newImages = [...images];\r\n newImages.splice(idx, 1, newImage);\r\n setImages(newImages);\r\n }\r\n };\r\n\r\n return imageRepository.renameImage({ imageId, name })\r\n .then(() => {\r\n logger.logTrace('DataService: image is renamed', { imageId, newName: name });\r\n renameLocalImage(loadedImages, setLoadedImages);\r\n })\r\n .tapCatch(() => {\r\n // logger.logError(err);\r\n });\r\n }, [imageRepository, logger, loadedImages, setLoadedImages]);\r\n\r\n const deleteImage = useCallback(({ assetId: imageId }) => {\r\n const promise = imageRepository.deleteImage(imageId)\r\n .tap(() => {\r\n logger.logTrace('DataService: image is deleted', { imageId });\r\n })\r\n .tapCatch(() => {\r\n // logger.logError();\r\n });\r\n return promise;\r\n }, [logger, imageRepository]);\r\n\r\n const cropImage = useCallback(({ imageId, cropSettings, placementSettings }) => {\r\n const ret = imageRepository.cropImage({ imageId, cropSettings, placementSettings }).then(() => {\r\n // update state to notify the status changes\r\n setCroppingTaskUpdated({ imageId });\r\n logger.logTrace('DataService: image is cropping', { imageId });\r\n });\r\n return ret;\r\n }, [logger, imageRepository]);\r\n\r\n const addCreative = useCallback(({ creativeData, baseId }) => {\r\n const ret = imageRepository.addCreative({ creativeData, baseId });\r\n return ret;\r\n }, [imageRepository]);\r\n\r\n const returnVal = useMemo(() => ({\r\n imageCroppingTasks,\r\n croppingTaskUpdated,\r\n getImageById,\r\n getImageCroppingTaskStatus,\r\n renameImage,\r\n deleteImage,\r\n cropImage,\r\n addCreative,\r\n }), [\r\n imageCroppingTasks,\r\n croppingTaskUpdated,\r\n getImageById,\r\n getImageCroppingTaskStatus,\r\n renameImage,\r\n deleteImage,\r\n cropImage,\r\n addCreative,\r\n ]);\r\n\r\n return returnVal;\r\n};\r\n","import { useCallback, useMemo, useRef, useState } from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport { checkVideosIntermediateStatus } from '../../model';\r\n\r\n// below fields will be impacted along with status change\r\nconst VideoChangedFieldsWithStatusUpdate = [\r\n 'thumbnailUrl',\r\n 'url',\r\n 'width',\r\n 'height',\r\n 'durationInMS',\r\n 'status',\r\n];\r\n\r\nexport const useCommonVideoRepoMethods = ({\r\n repository,\r\n videoRepository,\r\n logger,\r\n}) => {\r\n const latestTimestampRef = useRef(0);\r\n const [videoUpdated, setVideoUpdated] = useState({}); // sample: { 123: { .. } }\r\n const getVideoTaskStatus = useCallback((videoTasks) => {\r\n const requestTimestamp = Date.now();\r\n const videosToCheck = _.keys(videoTasks);\r\n\r\n return repository.updateVideoStatusByIds(videosToCheck).then((response) => {\r\n // if multipe requests are sent out, ensure to keep the result from the latest request\r\n let notFinishedTaskList = {};\r\n let newVideoUpdated = {};\r\n if (requestTimestamp > latestTimestampRef.current) {\r\n const responseKeys = [];\r\n\r\n response.forEach((item) => {\r\n responseKeys.push(item.id);\r\n newVideoUpdated = {\r\n ...newVideoUpdated,\r\n [item.id]: _.pick(item, VideoChangedFieldsWithStatusUpdate),\r\n };\r\n\r\n if (item && checkVideosIntermediateStatus(item)) {\r\n notFinishedTaskList = { ...notFinishedTaskList, [item.id]: item.status };\r\n }\r\n });\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n latestTimestampRef.current = requestTimestamp;\r\n }\r\n\r\n setVideoUpdated(newVideoUpdated);\r\n\r\n const taskCount = Object.keys(notFinishedTaskList).length;\r\n\r\n return { totalCount: taskCount };\r\n }).catch(() => {\r\n // log and ignore the error\r\n logger.logError('Failed to get videos task status.');\r\n });\r\n }, [logger, repository]);\r\n\r\n const addVideoCreative = useCallback(({ videoCreative }) => {\r\n const promise = videoRepository.addVideoCreative({ videoCreative });\r\n return promise;\r\n }, [videoRepository]);\r\n\r\n const getVideo = useCallback(({ id, fetchMetadata }) => {\r\n const promise = videoRepository.getVideo({ id, fetchMetadata });\r\n return promise;\r\n }, [videoRepository]);\r\n\r\n const returnVal = useMemo(() => ({\r\n getVideoTaskStatus,\r\n videoUpdated,\r\n addVideoCreative,\r\n getVideo,\r\n }), [addVideoCreative, getVideo, getVideoTaskStatus, videoUpdated]);\r\n\r\n return returnVal;\r\n};\r\n","import Promise from 'bluebird';\r\nimport { useCallback } from 'react';\r\nimport { getTaskPoller } from '../task-poller';\r\n\r\nfunction checkError(err) {\r\n const { errorCode } = err || {};\r\n return ['GenerateImagesAIGCNoRecommendation', 'AI_Generation_Failed'].includes(errorCode);\r\n}\r\n\r\n// retry promise if it fails within timeout\r\nfunction retryPromise(getPromise, retryCount, start, logger, { timeout = 5000, shouldRetry = () => true }) {\r\n return getPromise().catch((err) => {\r\n const now = Date.now();\r\n const elapsed = now - start;\r\n\r\n if (retryCount >= 1 && elapsed < timeout && shouldRetry(err)) {\r\n return retryPromise(getPromise, retryCount - 1, start, logger, { timeout, shouldRetry });\r\n }\r\n\r\n logger.logError('Re-tried but failed to generate image by AI');\r\n return Promise.reject(err);\r\n });\r\n}\r\n\r\nexport const useAIGeneratedImages = ({\r\n repository,\r\n logger,\r\n pollInterval = 3000,\r\n maxRetryCount = 3, // max retry count for polling task status\r\n}) => {\r\n const generateImagesByAI = useCallback(({\r\n prompt, onProgress, onStartPolling, skipBrandDetection,\r\n }) => {\r\n if (!repository) {\r\n return Promise.reject(new Error());\r\n }\r\n\r\n const generateImagesByAIPromise = () => new Promise((resolve, reject) => {\r\n // start generating task\r\n repository.generateImagesWithAIAsync(prompt, skipBrandDetection).then((res) => {\r\n const { taskId } = res || {};\r\n\r\n if (!taskId && res.brandNameDetected) {\r\n resolve({\r\n brandNameDetected: true, brandNames: res.brandNames, prompt, images: [],\r\n });\r\n return;\r\n }\r\n\r\n // poll task status\r\n let retryCount = 0;\r\n const pollStatus = () => repository.getAIGeneratedImageTaskStatus(taskId).then((taskStatus) => {\r\n // status, progress, requestId, images, isTaskDone, taskId,\r\n const { isTaskDone, ...rest } = taskStatus || {};\r\n\r\n // reset retry count if there is successfull poll\r\n retryCount = 0;\r\n\r\n // report status\r\n if (onProgress) {\r\n onProgress({ ...rest, isTaskDone });\r\n }\r\n\r\n if (isTaskDone) {\r\n resolve({ ...rest, prompt });\r\n }\r\n\r\n // stop polling if it's done\r\n return { isFinished: isTaskDone };\r\n }).catch((err) => {\r\n retryCount += 1;\r\n if (err.shouldRetry === false || retryCount >= maxRetryCount) { // got continuous errors\r\n reject(err);\r\n // stop polling if failed maxRetryCount times continuously\r\n return { isFinished: true };\r\n }\r\n\r\n // ignore errors and retry\r\n logger.logError(`failed to get AI generation task status, retryCount: ${retryCount}, taskId: ${taskId}, prompt: ${prompt}, error: ${err.uxMessage}`);\r\n return { isFinished: false };\r\n });\r\n\r\n // start polling task status\r\n const taskPoller = getTaskPoller({ task: pollStatus, interval: pollInterval });\r\n taskPoller.start();\r\n if (onStartPolling) {\r\n onStartPolling(taskPoller);\r\n }\r\n }).catch((err) => {\r\n reject(err);\r\n });\r\n });\r\n\r\n const ret = retryPromise(generateImagesByAIPromise, 1, Date.now(), logger, { shouldRetry: checkError, timeout: 10000 });\r\n\r\n if (logger.monitorPromise) {\r\n return logger.monitorPromise({ promise: ret, msg: `generateImagesByAI, prompt: ${prompt}`, api: 'generateImagesByAI' });\r\n }\r\n return ret;\r\n }, [logger, maxRetryCount, pollInterval, repository]);\r\n\r\n return {\r\n generateImagesByAI,\r\n };\r\n};\r\n","/* istanbul ignore file */\r\n// ut test has been covered by other hook files\r\n/* eslint-disable arrow-body-style */\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useFolders } from './use-folders';\r\nimport { useCommonImageRepoMethods } from './use-image-repo-methods';\r\nimport { useCommonVideoRepoMethods } from './use-video-repo-methods';\r\nimport { useAIGeneratedImages } from './use-ai-generated-images';\r\nimport { useFolderPathTree } from './use-folder-path-tree';\r\n\r\nconst AssetWithFoldersDataServiceContext = React.createContext({});\r\n\r\nexport const AssetWithFoldersDataServiceProvider = ({\r\n children, imageRepository, aigcRepository, folderRepository, videoRepository, logger, allowedAssetType, i18n, perfMetricDateRange, defaultPerfMetricDateRange,\r\n}) => {\r\n const {\r\n folders,\r\n folderPath,\r\n loadFolderData,\r\n loadMoreFolderData,\r\n loadFolderDataInDateRange,\r\n loadFolderArgs,\r\n loadMoreFolderDataInDateRange,\r\n perfTimeSeriesData,\r\n loadPerfTimeSeriesData,\r\n navigateIntoFolder,\r\n navigateToFolderInPath,\r\n navigateIntoFolderItem,\r\n navigateIntoRootFolder,\r\n createFolder,\r\n createFolderBulk,\r\n deleteFolder,\r\n renameFolder,\r\n currentFolder,\r\n currentFolderId,\r\n uploadVideoToFolder,\r\n cancelPendingVideoUpload,\r\n postVideoByUrl,\r\n uploadImageByUrlToFolder,\r\n uploadImageToFolder,\r\n uploadStockImageToFolder,\r\n uploadInvestImageToFolder,\r\n uploadInvestVideoToFolder,\r\n reloadFolders,\r\n reloadFoldersInDateRange,\r\n totalItemCount,\r\n loadAssetsUnderFolder,\r\n assets,\r\n setAssets,\r\n renameAsset,\r\n deleteAsset,\r\n batchDelete,\r\n batchMove,\r\n resetFolderData,\r\n dataOwnerPageName,\r\n addImageWithBaseIdToFolder,\r\n } = useFolders({\r\n repository: folderRepository,\r\n logger,\r\n assetType: allowedAssetType,\r\n i18n,\r\n perfMetricDateRange,\r\n defaultPerfMetricDateRange,\r\n });\r\n\r\n const {\r\n imageCroppingTasks,\r\n croppingTaskUpdated,\r\n getImageById,\r\n getImageCroppingTaskStatus,\r\n cropImage,\r\n addCreative,\r\n } = useCommonImageRepoMethods({\r\n imageRepository,\r\n logger,\r\n loadedImages: assets,\r\n setLoadedImages: setAssets,\r\n });\r\n\r\n const {\r\n generateImagesByAI,\r\n } = useAIGeneratedImages({ repository: aigcRepository, logger });\r\n\r\n const {\r\n getVideoTaskStatus, videoUpdated, addVideoCreative, getVideo,\r\n } = useCommonVideoRepoMethods({\r\n repository: folderRepository,\r\n videoRepository,\r\n logger,\r\n i18n,\r\n });\r\n\r\n const {\r\n folderPathTree,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n initializeFolderPathTree,\r\n reloadFolderPathTreeItem,\r\n } = useFolderPathTree({ repository: folderRepository, defaultPerfMetricDateRange });\r\n\r\n const totalAssetCount =\r\n totalItemCount.current.ImageAssetsCount + totalItemCount.current.VideoAssetsCount;\r\n const totalSubfoldersCount = totalItemCount.current.SubFoldersCount;\r\n\r\n const loadDataArgs = useCallback(({\r\n searchText,\r\n minImageWidth,\r\n minImageHeight,\r\n dateAddedDateRange,\r\n sortBy,\r\n importSource,\r\n assetSources,\r\n assetsToLoadForSubfolders = 1,\r\n assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch = false,\r\n includeParentHierarchy = false,\r\n count,\r\n topRated,\r\n } = {}) => {\r\n return loadFolderArgs({\r\n filterSettings: {\r\n searchTerm: searchText,\r\n minWidth: minImageWidth,\r\n minHeight: minImageHeight,\r\n dateAddedStart: dateAddedDateRange && dateAddedDateRange.start,\r\n dateAddedEnd: dateAddedDateRange && dateAddedDateRange.end,\r\n importSource,\r\n assetSources,\r\n assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch,\r\n topRated,\r\n },\r\n sortBy,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n });\r\n }, [loadFolderArgs]);\r\n\r\n const loadDataImpl = useCallback(({\r\n useDateRange,\r\n searchText,\r\n minImageWidth,\r\n minImageHeight,\r\n dateAddedDateRange,\r\n sortBy,\r\n importSource,\r\n assetSources,\r\n assetsToLoadForSubfolders = 1,\r\n assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch = false,\r\n includeParentHierarchy = false,\r\n hasPerfData = false,\r\n includeSubfolders = true,\r\n count,\r\n topRated,\r\n pageName,\r\n perfMarker,\r\n } = {}) => {\r\n const loadFolderDataFunc = useDateRange ? loadFolderDataInDateRange : loadFolderData;\r\n return loadFolderDataFunc({\r\n filterSettings: {\r\n searchTerm: searchText,\r\n minWidth: minImageWidth,\r\n minHeight: minImageHeight,\r\n dateAddedStart: dateAddedDateRange && dateAddedDateRange.start,\r\n dateAddedEnd: dateAddedDateRange && dateAddedDateRange.end,\r\n importSource,\r\n assetSources,\r\n assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch,\r\n hasPerfData,\r\n topRated,\r\n },\r\n perfMarker,\r\n sortBy,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders,\r\n pageName,\r\n });\r\n }, [loadFolderData, loadFolderDataInDateRange]);\r\n\r\n const loadData = useCallback(args => loadDataImpl({ ...args, useDateRange: false }), [loadDataImpl]);\r\n const loadDataInDateRange = useCallback(args => loadDataImpl({ ...args, useDateRange: true }), [loadDataImpl]);\r\n\r\n const loadPerfTimeSeriesDataImpl = useCallback((\r\n perfTimeSeriesParams,\r\n {\r\n searchText,\r\n minImageWidth,\r\n minImageHeight,\r\n dateAddedDateRange,\r\n importSource,\r\n assetSources,\r\n // assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch = false,\r\n hasPerfData = false,\r\n topRated,\r\n } = {}\r\n ) => {\r\n return loadPerfTimeSeriesData({\r\n perfTimeSeriesParams,\r\n filterSettings: {\r\n searchTerm: searchText,\r\n minWidth: minImageWidth,\r\n minHeight: minImageHeight,\r\n dateAddedStart: dateAddedDateRange && dateAddedDateRange.start,\r\n dateAddedEnd: dateAddedDateRange && dateAddedDateRange.end,\r\n importSource,\r\n assetSources,\r\n // assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch,\r\n hasPerfData,\r\n topRated,\r\n },\r\n });\r\n }, [loadPerfTimeSeriesData]);\r\n\r\n const uploadImageByUrl = useCallback(({ imageUrl, folderId, sourceType }) => {\r\n return uploadImageByUrlToFolder({ imageUrl, folderId, sourceType }).tap(() => {\r\n logger.logTrace('DataService: image is uploaded by Url to folder', { sourceType, imageUrl, folderId });\r\n });\r\n }, [logger, uploadImageByUrlToFolder]);\r\n\r\n const uploadImage = useCallback(({\r\n imageData,\r\n updateCurrentProgress = null,\r\n name = '',\r\n folderId = null,\r\n supportUpscale,\r\n }) => {\r\n return uploadImageToFolder({\r\n imageData,\r\n updateCurrentProgress,\r\n imageName: name,\r\n folderId,\r\n supportUpscale,\r\n }).tap(() => {\r\n logger.logTrace('DataService: image is uploaded to folder');\r\n });\r\n }, [logger, uploadImageToFolder]);\r\n\r\n const uploadVideo = useCallback(({\r\n fileObject,\r\n updateCurrentProgress = null,\r\n name = '',\r\n folderId = null,\r\n perfMarker = null,\r\n }) => {\r\n return uploadVideoToFolder({\r\n fileObject,\r\n updateCurrentProgress,\r\n name,\r\n folderId,\r\n perfMarker,\r\n }).tap(() => {\r\n logger.logTrace('DataService: video is uploaded to folder');\r\n });\r\n }, [logger, uploadVideoToFolder]);\r\n\r\n const uploadVideoByUrl = useCallback(({\r\n videoUrl,\r\n name = '',\r\n folderId = null,\r\n }) => {\r\n return postVideoByUrl({\r\n videoUrl,\r\n name,\r\n folderId,\r\n }).tap(() => {\r\n logger.logTrace('DataService: video is uploaded by Url to folder');\r\n });\r\n }, [logger, postVideoByUrl]);\r\n\r\n const uploadStockImage = useCallback(({ stockImageId, folderId }) => {\r\n return uploadStockImageToFolder({ stockImageId, folderId }).tap(() => {\r\n logger.logTrace('DataService: stock image is uploaded to folder');\r\n });\r\n }, [logger, uploadStockImageToFolder]);\r\n\r\n const uploadInvestImage = useCallback(({ investImageId, imageSrc, folderId }) => {\r\n return uploadInvestImageToFolder({ investImageId, imageSrc, folderId }).tap(() => {\r\n logger.logTrace('DataService: invest image is uploaded to folder');\r\n });\r\n }, [logger, uploadInvestImageToFolder]);\r\n\r\n const uploadInvestVideo = useCallback(({\r\n investVideoId, videoSrc, description, folderId,\r\n }) => {\r\n return uploadInvestVideoToFolder({\r\n investVideoId, videoSrc, description, folderId,\r\n }).tap(() => {\r\n logger.logTrace('DataService: invest video is uploaded to folder');\r\n });\r\n }, [logger, uploadInvestVideoToFolder]);\r\n\r\n const contextVal = useMemo(\r\n () => ({\r\n assets,\r\n totalAssetCount,\r\n totalSubfoldersCount,\r\n // load first page, with filters and sortby\r\n loadData,\r\n loadDataArgs,\r\n loadDataInDateRange,\r\n // reload images with previous filters\r\n reloadData: reloadFolders,\r\n reloadDataInDataRange: reloadFoldersInDateRange,\r\n // load more, with previous filters/sort\r\n loadMoreData: loadMoreFolderData,\r\n loadMoreDataInDateRange: loadMoreFolderDataInDateRange,\r\n getImageById, // if it's not cached, send a request (deep linking)\r\n perfTimeSeriesData,\r\n loadPerfTimeSeriesData: loadPerfTimeSeriesDataImpl,\r\n\r\n // get image cropping tasks status\r\n imageCroppingTasks,\r\n getImageCroppingTaskStatus,\r\n croppingTaskUpdated,\r\n\r\n // get video tasks status\r\n getVideoTaskStatus,\r\n videoUpdated,\r\n addVideoCreative,\r\n getVideo,\r\n\r\n renameAsset,\r\n deleteAsset,\r\n cropImage,\r\n uploadVideo,\r\n cancelPendingVideoUpload,\r\n uploadVideoByUrl,\r\n uploadImage,\r\n uploadImageByUrl,\r\n addCreative,\r\n folders,\r\n folderPath,\r\n navigateIntoFolder,\r\n navigateToFolderInPath,\r\n navigateIntoFolderItem,\r\n navigateIntoRootFolder,\r\n createFolder,\r\n createFolderBulk,\r\n deleteFolder,\r\n renameFolder,\r\n currentFolder,\r\n currentFolderId,\r\n loadAssetsUnderFolder,\r\n uploadStockImage,\r\n uploadInvestImage,\r\n uploadInvestVideo,\r\n reloadFolders,\r\n batchDelete,\r\n batchMove,\r\n resetFolderData,\r\n dataOwnerPageName,\r\n generateImagesByAI,\r\n addImageWithBaseIdToFolder,\r\n\r\n folderPathTree,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n initializeFolderPathTree,\r\n reloadFolderPathTreeItem,\r\n }),\r\n [assets, totalAssetCount, totalSubfoldersCount, loadData, loadDataArgs, loadDataInDateRange, reloadFolders, reloadFoldersInDateRange, loadMoreFolderData, loadMoreFolderDataInDateRange, getImageById, perfTimeSeriesData, loadPerfTimeSeriesDataImpl, imageCroppingTasks, getImageCroppingTaskStatus, croppingTaskUpdated, getVideoTaskStatus, videoUpdated, addVideoCreative, getVideo, renameAsset, deleteAsset, cropImage, uploadVideo, cancelPendingVideoUpload, uploadVideoByUrl, uploadImage, uploadImageByUrl, addCreative, folders, folderPath, navigateIntoFolder, navigateToFolderInPath, navigateIntoFolderItem, navigateIntoRootFolder, createFolder, createFolderBulk, deleteFolder, renameFolder, currentFolder, currentFolderId, loadAssetsUnderFolder, uploadStockImage, uploadInvestImage, uploadInvestVideo, batchDelete, batchMove, resetFolderData, dataOwnerPageName, generateImagesByAI, folderPathTree, loadFolderPathTreeItem, loadMoreFolderPathTreeItem, initializeFolderPathTree, reloadFolderPathTreeItem, addImageWithBaseIdToFolder]\r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nAssetWithFoldersDataServiceProvider.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n imageRepository: PropTypes.shape({\r\n getImage: PropTypes.func,\r\n getImageCroppingTaskStatus: PropTypes.func,\r\n renameImage: PropTypes.func,\r\n deleteImage: PropTypes.func,\r\n updateCropSettings: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n logError: PropTypes.func,\r\n }).isRequired,\r\n aigcRepository: PropTypes.shape({}),\r\n folderRepository: PropTypes.shape({}).isRequired,\r\n videoRepository: PropTypes.shape({}).isRequired,\r\n allowedAssetType: PropTypes.string,\r\n i18n: PropTypes.shape({}).isRequired,\r\n perfMetricDateRange: PropTypes.shape({}),\r\n defaultPerfMetricDateRange: PropTypes.shape({}),\r\n};\r\n\r\nAssetWithFoldersDataServiceProvider.defaultProps = {\r\n aigcRepository: null,\r\n allowedAssetType: null,\r\n perfMetricDateRange: null,\r\n defaultPerfMetricDateRange: null,\r\n};\r\n\r\nexport const useAsssetWithFoldersDataService = () => useContext(AssetWithFoldersDataServiceContext);\r\n","import { useState, useCallback } from 'react';\r\nimport { Promise } from 'bluebird';\r\n\r\nimport { CSMLSortBy, DEFAULT_PAGE_SIZE, ROOT_FOLDER_ID } from '../../model';\r\n\r\n/**\r\n * floderPathTree:\r\n * [{\r\n * folderId,\r\n * folderName,\r\n * subFolders: [{}] // recursive\r\n * subFoldersCount,\r\n * }]\r\n *\r\n */\r\n\r\nexport const useFolderPathTree = ({ repository, defaultPerfMetricDateRange }) => {\r\n const [folderPathTree, setFolderPathTree] = useState([]);\r\n\r\n const updateFolderPathTree = useCallback((currentFolderPathTree, folderIdArr, subFoldersArr, totalSubfoldersCount = [], reload = false) => {\r\n const recursiveUpdate = items => items.map((item) => {\r\n if (folderIdArr.includes(item.folderId)) {\r\n const index = folderIdArr.indexOf(item.folderId);\r\n if (reload) {\r\n return {\r\n ...item,\r\n subFolders: subFoldersArr[index],\r\n subFoldersCount: totalSubfoldersCount[index],\r\n };\r\n }\r\n const newSubFloders = [...item.subFolders, ...subFoldersArr[index]];\r\n return {\r\n ...item,\r\n subFolders: newSubFloders,\r\n };\r\n }\r\n return {\r\n ...item,\r\n subFolders: item.subFolders.length > 0 ? recursiveUpdate(item.subFolders) : item.subFolders,\r\n };\r\n });\r\n\r\n return recursiveUpdate(currentFolderPathTree);\r\n }, []);\r\n\r\n const loadFolderPathTreeItemImp = useCallback(({\r\n folderId,\r\n skip,\r\n // eslint-disable-next-line arrow-body-style\r\n }) => {\r\n return repository.getFolderData({\r\n perfMetricDateRange: defaultPerfMetricDateRange,\r\n sortBy: CSMLSortBy.ImageName,\r\n skip: skip || 0,\r\n count: DEFAULT_PAGE_SIZE,\r\n folderId,\r\n includeAssets: false,\r\n includeSubfolders: true,\r\n includeParentHierarchy: true,\r\n assetsToLoadForSubfolders: false,\r\n isAssetPickerScenario: false,\r\n withBIData: false,\r\n }).then((res) => {\r\n const { folder } = res;\r\n const newFolders = (folder.subfolders || []).map(subFolder => ({\r\n folderId: subFolder.folderId,\r\n folderName: subFolder.folderName,\r\n subFolders: [],\r\n subFoldersCount: subFolder.itemCount.SubFoldersCount,\r\n parentHierarchy: subFolder.parentHierarchy,\r\n }));\r\n const totalSubfoldersCount = folder.itemCount.SubFoldersCount || 0;\r\n return {\r\n subFolders: newFolders,\r\n totalSubfoldersCount,\r\n };\r\n });\r\n }, [defaultPerfMetricDateRange, repository]);\r\n\r\n const initializeFolderPathTree = useCallback(() => loadFolderPathTreeItemImp({\r\n folderId: ROOT_FOLDER_ID,\r\n }).then(({\r\n subFolders,\r\n totalSubfoldersCount,\r\n }) => {\r\n setFolderPathTree([{\r\n folderId: ROOT_FOLDER_ID,\r\n subFolders,\r\n subFoldersCount: totalSubfoldersCount,\r\n folderName: 'Root',\r\n parentHierarchy: [],\r\n }]);\r\n }), [loadFolderPathTreeItemImp]);\r\n\r\n const loadFolderPathTreeItem = useCallback(folderId => loadFolderPathTreeItemImp({\r\n folderId,\r\n }).then(({\r\n subFolders,\r\n }) => {\r\n setFolderPathTree(currentFolderPathTree => updateFolderPathTree(currentFolderPathTree, [folderId], [subFolders]));\r\n }), [loadFolderPathTreeItemImp, updateFolderPathTree]);\r\n\r\n const loadMoreFolderPathTreeItem = useCallback((folderId, currentFolderCount) => loadFolderPathTreeItemImp({\r\n folderId,\r\n skip: currentFolderCount,\r\n }).then(({\r\n subFolders,\r\n }) => {\r\n setFolderPathTree(currentFolderPathTree => updateFolderPathTree(currentFolderPathTree, [folderId], [subFolders]));\r\n }), [loadFolderPathTreeItemImp, updateFolderPathTree]);\r\n\r\n const reloadFolderPathTreeItem = useCallback(folderIdArr => Promise.all(folderIdArr.map(folderId => loadFolderPathTreeItemImp({\r\n folderId,\r\n }).then(({\r\n subFolders,\r\n totalSubfoldersCount,\r\n }) => ({\r\n subFolders, totalSubfoldersCount,\r\n })))).then((result) => {\r\n const subFoldersArr = result.map(({ subFolders }) => subFolders);\r\n const totalSubfoldersCountArr = result.map(({ totalSubfoldersCount }) => totalSubfoldersCount);\r\n setFolderPathTree(currentFolderPathTree => updateFolderPathTree(currentFolderPathTree, folderIdArr, subFoldersArr, totalSubfoldersCountArr, true));\r\n }), [loadFolderPathTreeItemImp, updateFolderPathTree]);\r\n\r\n return {\r\n folderPathTree,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n initializeFolderPathTree,\r\n reloadFolderPathTreeItem,\r\n };\r\n};\r\n","/* istanbul ignore file */\r\n// ut test has been covered by other hook files\r\nimport React from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport _ from 'underscore';\r\n\r\nimport {\r\n AssetWithFoldersDataServiceProvider,\r\n useAsssetWithFoldersDataService,\r\n} from './asset-with-folders-data-service';\r\n\r\nexport const useAdsStudioServices = useAsssetWithFoldersDataService;\r\n\r\nexport const withAdsStudioServicesConsumer = (Comp, pickedPropNames) => {\r\n const CompWithService = (props) => {\r\n const dataService = useAdsStudioServices();\r\n // explicitly pick these props to keep pages' props clean\r\n let pickedProps = props;\r\n if (pickedPropNames) {\r\n pickedProps = _.pick(props, pickedPropNames);\r\n }\r\n return ();\r\n };\r\n\r\n hoistNonReactStatics(CompWithService, Comp);\r\n\r\n return CompWithService;\r\n};\r\n\r\nexport { AssetWithFoldersDataServiceProvider };\r\nexport { useFolders, getAssetTypeToFetch } from './use-folders';\r\nexport { useAIGeneratedImages } from './use-ai-generated-images';\r\nexport { useFolderPathTree } from './use-folder-path-tree';\r\n\r\n// todo: copilot depends on serverContext, should be move to cmui-shell package\r\n// export { withCopilotDataServiceLoaded } from './copilot-data-service';\r\n","/*\r\n // an AssetWindow is a window of assets, which is a subset of the assets in a repository\r\n // use this to keep track of the loading status of each window\r\n // usually, each call to repository.loadAssets will load a window of assets\r\n type AssetWindow = {\r\n windowIndex: number,\r\n windowSize: number,\r\n // status: string,\r\n ... // any other properties as needed, which will be passed to the repository\r\n }\r\n*/\r\n\r\n//\r\nexport const WindowStatus = {\r\n loading: 'loading',\r\n loaded: 'loaded',\r\n error: 'error',\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { WindowStatus } from './asset-window';\r\n\r\n// -1 means the total count is unknown (maybe infinite), so the windows count is unknown too\r\nconst INDETERMINATE = -1; // indeterminate\r\n// -2 means the total count is not set yet\r\nconst UNSET = -2;\r\n\r\nconst MAX_ITEM_COUNT = 0x7FFFFFFF;\r\n\r\n// the loading windows manager is used to keep track which pages are loading/loaded or not loaded yet\r\nexport class AssetsWindowManager {\r\n constructor(windowSize) {\r\n this.windowSize = windowSize;\r\n }\r\n\r\n resetWindows() {\r\n this.assetWindows = []; // array of WindowStatus\r\n this.totalAssetCount = UNSET;\r\n this.windowsCount = UNSET;\r\n }\r\n\r\n setTotalItemCount(totalAssetCount) {\r\n if (this.totalAssetCount !== UNSET) {\r\n return;\r\n }\r\n this.totalAssetCount = totalAssetCount >= 0 ? totalAssetCount : INDETERMINATE;\r\n this.windowsCount = totalAssetCount >= 0 && this.windowSize > 0 ? Math.ceil(totalAssetCount / this.windowSize) : INDETERMINATE;\r\n }\r\n\r\n // is any window loading?\r\n get isLoading() {\r\n const ret = _.some(this.assetWindows, w => w === WindowStatus.loading);\r\n return ret;\r\n }\r\n\r\n // all windows are loaded?\r\n get isCompleted() {\r\n // if the total count is not set, it means the loading is not started yet\r\n if (this.totalAssetCount === UNSET) {\r\n return false;\r\n }\r\n\r\n // if the total count is indeterminate, it will never be completed\r\n if (this.totalAssetCount === INDETERMINATE || this.windowsCount === INDETERMINATE) {\r\n return false;\r\n }\r\n\r\n // check status of all windows\r\n for (let i = 0; i < this.windowsCount; i += 1) {\r\n if (!this.assetWindows[i] || this.assetWindows[i] !== WindowStatus.loaded) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n getTotalAssetCount() {\r\n if (this.totalAssetCount === UNSET || this.totalAssetCount === INDETERMINATE) {\r\n return MAX_ITEM_COUNT;\r\n }\r\n return this.totalAssetCount || 0;\r\n }\r\n\r\n // return AssetWindow object, which contains the windowIndex of the next window to load\r\n // and if all windows are loaded, it will return -1\r\n getNextUnloadedWindow() {\r\n // the initial page load, item count is returned with the initial page data\r\n if (this.totalAssetCount === UNSET) {\r\n this.assetWindows = [WindowStatus.loading];\r\n return { windowIndex: 0, windowSize: this.windowSize };\r\n }\r\n\r\n // find the first unloaded window\r\n let windowIndex = -1;\r\n const length = this.windowsCount >= 0 ? this.windowsCount : this.assetWindows.length;\r\n for (let i = 0; i < length; i += 1) {\r\n // for error windows, retry them\r\n if (!this.assetWindows[i] || this.assetWindows[i] === WindowStatus.error) {\r\n this.assetWindows[i] = WindowStatus.loading;\r\n windowIndex = i;\r\n break;\r\n }\r\n }\r\n\r\n if (windowIndex !== -1) {\r\n return { windowIndex, windowSize: this.windowSize };\r\n }\r\n\r\n // it's maybe a infinite list\r\n if (this.totalAssetCount === INDETERMINATE) {\r\n // add a new loading window\r\n this.assetWindows.push(WindowStatus.loading);\r\n return { windowIndex: this.assetWindows.length - 1, windowSize: this.windowSize };\r\n }\r\n\r\n // no more windows to load\r\n return { windowIndex: -1, windowSize: this.windowSize };\r\n }\r\n\r\n // paremeter is the window object and status to set\r\n setWindowStatus({ windowIndex }, status) {\r\n this.assetWindows[windowIndex] = status;\r\n }\r\n}\r\n\r\n// compose multiple AssetsWindowManager for multiple sources\r\nexport class SequenceAssetsWindowManager {\r\n // sourceNames is an array of source names, like ['assetlibrary', 'stock']\r\n constructor(windowSize, sourceNames) {\r\n this.windowSize = windowSize;\r\n this.sourceNames = sourceNames;\r\n this.winMgrList = _.map(sourceNames, (sourceName) => {\r\n const mgr = new AssetsWindowManager(windowSize);\r\n mgr.sourceName = sourceName;\r\n return mgr;\r\n });\r\n }\r\n\r\n resetWindows() {\r\n _.each(this.winMgrList, (mgr) => {\r\n mgr.resetWindows();\r\n });\r\n }\r\n\r\n setTotalItemCount(totalAssetCount, winObj) {\r\n const { sourceName } = winObj;\r\n const mgr = _.find(this.winMgrList, { sourceName });\r\n if (mgr) {\r\n mgr.setTotalItemCount(totalAssetCount);\r\n }\r\n }\r\n\r\n get isLoading() {\r\n const ret = _.some(this.winMgrList, mgr => mgr.isLoading);\r\n return ret;\r\n }\r\n\r\n get isCompleted() {\r\n const ret = _.every(this.winMgrList, mgr => mgr.isCompleted);\r\n return ret;\r\n }\r\n\r\n getTotalAssetCount() {\r\n let count = 0;\r\n for (let i = 0; i < this.winMgrList.length; i += 1) {\r\n const cnt = this.winMgrList[i].totalAssetCount;\r\n if (cnt === INDETERMINATE || cnt === UNSET) {\r\n return MAX_ITEM_COUNT;\r\n }\r\n count += cnt || 0;\r\n }\r\n return count;\r\n }\r\n\r\n getNextUnloadedWindow() {\r\n // find the first incomplete window\r\n const winMgr = _.find(this.winMgrList, mgr => !mgr.isCompleted);\r\n if (winMgr) {\r\n const { windowIndex } = winMgr.getNextUnloadedWindow();\r\n //\r\n let indexOffset = 0; // sum of previous windows' totalAssetCount\r\n for (let i = 0; i < this.winMgrList.length; i += 1) {\r\n if (this.winMgrList[i] === winMgr) {\r\n break;\r\n }\r\n indexOffset += this.winMgrList[i].totalAssetCount;\r\n }\r\n // append sourceName to the window object\r\n return {\r\n windowIndex,\r\n windowSize: this.windowSize,\r\n sourceName: winMgr.sourceName,\r\n indexOffset, // sum of previous windows' totalAssetCount\r\n };\r\n }\r\n return { windowIndex: -1, windowSize: this.windowSize };\r\n }\r\n\r\n setWindowStatus(winObj, status) {\r\n const { sourceName } = winObj;\r\n const mgr = _.find(this.winMgrList, { sourceName });\r\n if (mgr) {\r\n mgr.setWindowStatus(winObj, status);\r\n }\r\n }\r\n\r\n getAssetCountBySource() {\r\n const ret = {};\r\n _.each(this.winMgrList, (mgr) => {\r\n ret[mgr.sourceName] = mgr.totalAssetCount;\r\n });\r\n return ret;\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport const AssetsReducerActionType = {\r\n SetAssetsData: 'ACTION_TYPE_SET_ASSETS_DATA',\r\n AddAssetsData: 'ACTION_TYPE_ADD_ASSETS_DATA',\r\n ResetAssetsData: 'ACTION_TYPE_RESET_ASSETS_DATA',\r\n RenameAssetData: 'ACTION_TYPE_RENAME_ASSET_DATA',\r\n};\r\n\r\nexport const AssetsReducerActions = {\r\n setAssetsData: ({\r\n assets, ...rest\r\n }) => ({\r\n actionType: AssetsReducerActionType.SetAssetsData,\r\n assets,\r\n ...rest,\r\n }),\r\n\r\n addAssetsData: ({\r\n assets, windowIndex, windowSize, ...rest\r\n }) => ({\r\n actionType: AssetsReducerActionType.AddAssetsData,\r\n assets,\r\n pageIndex: windowIndex,\r\n pageSize: windowSize,\r\n ...rest,\r\n }),\r\n\r\n resetAssetData: () => ({\r\n actionType: AssetsReducerActionType.ResetAssetsData,\r\n }),\r\n\r\n renameAssetData: ({\r\n assetId, name,\r\n }) => ({\r\n actionType: AssetsReducerActionType.RenameAssetData,\r\n assetId,\r\n name,\r\n }),\r\n};\r\n\r\nexport const InitialReducerState = {\r\n assets: [],\r\n};\r\n\r\nexport const defaultReducer = (state, action) => {\r\n const { actionType, ...actionData } = action || {};\r\n switch (actionType) {\r\n case AssetsReducerActionType.SetAssetsData:\r\n {\r\n const { assets, ...rest } = actionData;\r\n const newAssets = [...assets];\r\n return { ...state, ...rest, assets: newAssets };\r\n }\r\n\r\n case AssetsReducerActionType.AddAssetsData:\r\n {\r\n const {\r\n assets, pageIndex, pageSize, ...rest\r\n } = actionData;\r\n const newAssets = [...state.assets];\r\n const startIdx = pageIndex * pageSize;\r\n _.forEach(assets, (asset, idx) => {\r\n newAssets[startIdx + idx] = asset;\r\n });\r\n return { ...state, ...rest, assets: newAssets };\r\n }\r\n\r\n case AssetsReducerActionType.ResetAssetsData:\r\n return InitialReducerState;\r\n\r\n case AssetsReducerActionType.RenameAssetData:\r\n {\r\n const { assetId, name } = actionData;\r\n const idx = _.findIndex(state.assets, asset => asset.id === assetId);\r\n if (idx >= 0 && state.assets[idx].name !== name) {\r\n const newAsset = { ...state.assets[idx], name };\r\n const newAssets = [...state.assets];\r\n newAssets.splice(idx, 1, newAsset);\r\n return { ...state, assets: newAssets };\r\n }\r\n return state;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n// used with SequenceAssetsWindowManager, which has sourceName and indexOffset in the window object\r\nexport const sequenceWindowReducer = (state, action) => {\r\n const { actionType, ...actionData } = action || {};\r\n switch (actionType) {\r\n case AssetsReducerActionType.AddAssetsData:\r\n {\r\n const {\r\n assets, pageIndex, pageSize, indexOffset = 0, ...rest // sourceName,\r\n } = actionData;\r\n const newAssets = [...state.assets];\r\n const startIdx = indexOffset + (pageIndex * pageSize);\r\n _.forEach(assets, (asset, idx) => {\r\n newAssets[startIdx + idx] = asset;\r\n });\r\n return { ...state, ...rest, assets: newAssets };\r\n }\r\n\r\n default:\r\n return defaultReducer(state, action);\r\n }\r\n};\r\n","import Promise from 'bluebird';\r\nimport { useCallback, useReducer, useRef } from 'react';\r\n\r\nimport { WindowStatus } from './asset-window';\r\nimport { AssetsWindowManager } from './assets-window-manager';\r\nimport { AssetsReducerActions } from './assets-reducer-base';\r\n\r\n/*\r\n @reducer\r\n reducer function, support actions defined in AssetsReducerActions, and its state structure is transparent to this hook\r\n\r\n @reducerInitialArg\r\n initial state for reducer\r\n\r\n @repository\r\n repository object with following methods:\r\n - loadAssets: (...filters, ...params) => Promise<{ assets, totalItemCount }>\r\n filters : a filter object, which will be cached in this hook, and it's internal data is transparent to this hook\r\n params : additional parameters for loading assets, which will be passed to loadAssets\r\n it contains at least windowIndex and windowSize\r\n both filters and params will be passed to repository without any modification\r\n */\r\nexport const useAssetsServiceBase = ({\r\n reducer,\r\n reducerInitialArg,\r\n repository,\r\n pageSize,\r\n assetWindowManager,\r\n}) => {\r\n const filtersRef = useRef(null);\r\n const loadingWindowManagerRef = useRef(assetWindowManager || new AssetsWindowManager(pageSize));\r\n\r\n const [assetState, dispatch] = useReducer(reducer, reducerInitialArg || null);\r\n\r\n const uploadImage = useCallback(({\r\n imageData,\r\n updateCurrentProgress = null,\r\n name = '',\r\n folderId = null,\r\n supportUpscale,\r\n }) => repository.uploadImageToFolder({\r\n imageData,\r\n updateCurrentProgress,\r\n imageName: name,\r\n folderId,\r\n supportUpscale,\r\n }), [repository]);\r\n\r\n /**\r\n * Load assets\r\n * @param {Object} filters\r\n * @param {Object} params\r\n * @returns {Promise}\r\n */\r\n const loadAssets = useCallback((filters, ...params) => {\r\n // reset loading status\r\n loadingWindowManagerRef.current.resetWindows();\r\n const winObj = loadingWindowManagerRef.current.getNextUnloadedWindow();\r\n\r\n // keep filter reference to use in loadMoreAssets\r\n filtersRef.current = filters;\r\n\r\n const ret = repository.loadAssets({\r\n ...filters,\r\n ...params,\r\n ...winObj,\r\n }).then(({ assets, totalItemCount, ...rest }) => {\r\n // update loading status\r\n loadingWindowManagerRef.current.setTotalItemCount(totalItemCount, winObj);\r\n loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.loaded);\r\n // save assets to reducer state\r\n dispatch(AssetsReducerActions.setAssetsData({ assets, ...rest }));\r\n }).catch((error) => {\r\n // upload loading status\r\n loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.error);\r\n throw error;\r\n });\r\n\r\n return ret;\r\n }, [repository]);\r\n\r\n /**\r\n * Load more assets\r\n * @param {Object} params\r\n * @returns {Promise}\r\n */\r\n const loadMoreAssets = useCallback((params) => {\r\n const winObj = loadingWindowManagerRef.current.getNextUnloadedWindow();\r\n\r\n // no more window to load\r\n if (winObj.windowIndex < 0) {\r\n return Promise.resolve({ noMoreData: true });\r\n }\r\n\r\n const ret = repository.loadAssets({\r\n ...filtersRef.current,\r\n ...params,\r\n ...winObj,\r\n }).then(({ assets, totalItemCount, ...rest }) => {\r\n loadingWindowManagerRef.current.setTotalItemCount(totalItemCount, winObj);\r\n loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.loaded);\r\n // save assets to reducer state\r\n dispatch(AssetsReducerActions.addAssetsData({\r\n assets, ...winObj, ...rest,\r\n }));\r\n }).catch((error) => {\r\n // upload loading status\r\n loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.error);\r\n throw error;\r\n });\r\n\r\n return ret;\r\n }, [repository]);\r\n\r\n /**\r\n * Reload assets\r\n * @param {Object} params\r\n * @returns {Promise}\r\n */\r\n const reloadAssets = useCallback((params) => {\r\n const ret = loadAssets(filtersRef.current, params);\r\n return ret;\r\n }, [loadAssets]);\r\n\r\n /**\r\n * Reset assets data\r\n */\r\n const resetAssetsData = useCallback(() => {\r\n dispatch(AssetsReducerActions.resetAssetData());\r\n }, []);\r\n\r\n /**\r\n * Rename asset\r\n */\r\n const renameAsset = useCallback(({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n }) => {\r\n const ret = repository.renameAsset({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n }).then(() => {\r\n dispatch(AssetsReducerActions.renameAssetData({\r\n assetId,\r\n name,\r\n }));\r\n });\r\n return ret;\r\n }, [repository]);\r\n\r\n return {\r\n ...assetState,\r\n uploadImage,\r\n loadAssets,\r\n loadMoreAssets,\r\n reloadAssets,\r\n resetAssetsData,\r\n renameAsset,\r\n //\r\n totalAssetCount: loadingWindowManagerRef.current.getTotalAssetCount(),\r\n isLoading: loadingWindowManagerRef.current.isLoading,\r\n isCompleted: loadingWindowManagerRef.current.isCompleted,\r\n\r\n // for debug/logging only\r\n // loadingWindowManagerRef,\r\n // filtersRef,\r\n };\r\n};\r\n","import { useRef } from 'react';\r\n\r\nimport { DEFAULT_PAGE_SIZE } from '../../model';\r\n\r\nimport { useAssetsServiceBase } from './base/use-assets-service-base';\r\nimport { InitialReducerState, defaultReducer, sequenceWindowReducer } from './base/assets-reducer-base';\r\nimport { SequenceAssetsWindowManager } from './base/assets-window-manager';\r\n\r\nexport const useBasicAssetsService = ({ repository, pageSize = DEFAULT_PAGE_SIZE }) => {\r\n const service = useAssetsServiceBase({\r\n reducer: defaultReducer,\r\n reducerInitialArg: InitialReducerState,\r\n repository,\r\n pageSize,\r\n });\r\n\r\n return service;\r\n};\r\n\r\nexport const useMultiSourceAssetsService = ({ repository, pageSize = DEFAULT_PAGE_SIZE, dataSourceNames }) => {\r\n const assetWindowManagerRef = useRef(new SequenceAssetsWindowManager(pageSize, dataSourceNames));\r\n const service = useAssetsServiceBase({\r\n reducer: sequenceWindowReducer,\r\n reducerInitialArg: InitialReducerState,\r\n repository,\r\n pageSize,\r\n assetWindowManager: assetWindowManagerRef.current,\r\n });\r\n\r\n return {\r\n ...service,\r\n getAssetCountBySource: () => assetWindowManagerRef.current.getAssetCountBySource(),\r\n };\r\n};\r\n","/* eslint-disable arrow-body-style */\r\nimport { useCallback, useState } from 'react';\r\nimport { Promise } from 'bluebird';\r\nimport { get } from 'underscore';\r\nimport { CSMLAssetSource } from '../../model';\r\n\r\nexport const useEditImageService = ({\r\n repository,\r\n logger,\r\n}) => {\r\n const [imagesWithFilter, setImagesWithFilter] = useState([]);\r\n const [imagesWithFilterAndBlur, setImagesWithFilterAndBlur] = useState([]);\r\n\r\n const getImagesWithFilter = useCallback((imageUrl) => {\r\n return repository.generateImageWithSmartEffect({\r\n imageUrl,\r\n smartEffects: [{\r\n smartEffectName: 'design_ideas',\r\n smartEffectOptions: {},\r\n }],\r\n }).then((res = []) => {\r\n const filterRes = res.map(filter => ({\r\n filter: filter.Effect,\r\n url: filter.Resource,\r\n }));\r\n filterRes.unshift({\r\n url: imageUrl,\r\n filter: 'None',\r\n });\r\n setImagesWithFilter(filterRes);\r\n logger.logTrace('edit image services: get image filters successfully');\r\n return filterRes;\r\n }).catch((err) => {\r\n logger.logError('edit image services: get image filters failed', err);\r\n return [];\r\n });\r\n }, [logger, repository]);\r\n\r\n const getImagesWithFilterAndBlurImp = useCallback((imageUrl, blurLevel) => {\r\n return repository.generateImageWithSmartEffect({\r\n imageUrl,\r\n smartEffects: [{\r\n smartEffectName: 'bg_blur',\r\n smartEffectOptions: blurLevel ? {\r\n ManualBgBlurLevel: blurLevel,\r\n } : {},\r\n },\r\n {\r\n smartEffectName: 'design_ideas',\r\n smartEffectOptions: {},\r\n },\r\n ],\r\n }).then((assets = []) => {\r\n return assets;\r\n });\r\n }, [repository]);\r\n\r\n const getOriginalImageWithBlur = useCallback((imageUrl, blurLevel) => {\r\n return repository.generateImageWithSmartEffect({\r\n imageUrl,\r\n smartEffects: [{\r\n smartEffectName: 'bg_blur',\r\n smartEffectOptions: blurLevel ? {\r\n ManualBgBlurLevel: blurLevel,\r\n } : {},\r\n }],\r\n }).then((assets = []) => {\r\n return assets;\r\n });\r\n }, [repository]);\r\n\r\n const getImagesWithFilterAndBlur = useCallback((imageUrl, blurLevel) => {\r\n return Promise.all([getOriginalImageWithBlur(imageUrl, blurLevel), getImagesWithFilterAndBlurImp(imageUrl, blurLevel)]).then(([originalImageWithBlurRes, imagesWithFilterAndBlurRes]) => {\r\n const res = [...originalImageWithBlurRes, ...imagesWithFilterAndBlurRes];\r\n const imagesWithFilterAndBlurInner = res.map((asset) => {\r\n const filter = get(asset, 'Effect', '');\r\n const url = get(asset, 'Resource', '');\r\n return {\r\n filter,\r\n blur: blurLevel,\r\n url,\r\n };\r\n });\r\n setImagesWithFilterAndBlur(imagesWithFilterAndBlurInner);\r\n logger.logTrace('edit image services: get image filters and blur successfully');\r\n return imagesWithFilterAndBlurInner;\r\n });\r\n }, [getImagesWithFilterAndBlurImp, getOriginalImageWithBlur, logger]);\r\n\r\n const removeImageBackground = useCallback((imageUrl) => {\r\n return repository.removeImageBackground(imageUrl);\r\n }, [repository]);\r\n\r\n const generateImageBackground = useCallback(({\r\n prompt,\r\n imageUrl,\r\n maskSetsBase64,\r\n selectedMasks,\r\n outputImageWidth,\r\n outputImageHeight,\r\n }) => {\r\n return repository.generateImageBackground({\r\n prompt,\r\n imageUrl,\r\n maskSetsBase64,\r\n selectedMasks,\r\n outputImageWidth,\r\n outputImageHeight,\r\n }).then((res) => {\r\n const { imageUrl: newImageUrl } = res || {};\r\n logger.logTrace('edit image services: generate image background successfully', { generatedUrl: newImageUrl, prompt });\r\n return res;\r\n });\r\n }, [logger, repository]);\r\n\r\n const getImageSegmentations = useCallback((imageUrl) => {\r\n return repository.getImageSegmentations(imageUrl).then((res) => {\r\n logger.logTrace('edit image services: get image segmentations successfully', { originalUrl: imageUrl });\r\n return res;\r\n });\r\n }, [logger, repository]);\r\n\r\n // Save function for background change generated image\r\n const saveImageCopy = useCallback(({\r\n image,\r\n folderId = null,\r\n }) => {\r\n const imageUrl = image.url;\r\n return repository.saveImageCopy({\r\n imageUrl,\r\n folderId,\r\n sourceType: CSMLAssetSource.BackgroundChangeGenerated,\r\n }).then((res) => {\r\n logger.logTrace('edit image services: image is saved as copy', { imageUrl, folderId });\r\n return res;\r\n });\r\n }, [logger, repository]);\r\n\r\n const saveImage = useCallback(({\r\n id,\r\n type,\r\n url,\r\n }) => {\r\n return repository.saveImage({\r\n imageUrl: url,\r\n imageId: id,\r\n type,\r\n }).then((res) => {\r\n logger.logTrace('edit image services: image is saved directly', { url, id });\r\n return res;\r\n });\r\n }, [logger, repository]);\r\n\r\n const cropImage = useCallback(({ imageId, cropSettings, placementSettings }) => {\r\n return repository.cropImage({ imageId, cropSettings, placementSettings }).then(() => {\r\n logger.logTrace('edit image services: image is cropping', { imageId });\r\n });\r\n }, [logger, repository]);\r\n\r\n const getImageById = useCallback(({ imageId, isImageFittingEnabled }) => {\r\n return repository.getImageById({ imageId, isImageFittingEnabled }).then((res) => {\r\n logger.logTrace('edit image services: get image by id', { imageId });\r\n return res;\r\n });\r\n }, [logger, repository]);\r\n\r\n const uploadImageToFolder = useCallback(({\r\n imageData,\r\n folderId = null,\r\n }) => {\r\n return repository.uploadImageToFolder({\r\n imageData,\r\n folderId,\r\n });\r\n }, [repository]);\r\n\r\n const saveImageWithBaseId = useCallback(({\r\n image,\r\n baseId,\r\n folderId = null,\r\n }) => {\r\n return repository.saveImageWithBaseId({ image, baseId, folderId });\r\n }, [repository]);\r\n\r\n const uploadStockImage = useCallback(({ stockImageId, folderId }) => {\r\n return repository.uploadStockImageToFolder({ stockImageId, folderId }).tap(() => {\r\n logger.logTrace('edit image services: stock image is uploaded to folder', { stockImageId, folderId });\r\n });\r\n }, [logger, repository]);\r\n\r\n const moveImageToFolder = useCallback(({\r\n image,\r\n destFolderId,\r\n }) => {\r\n return repository.moveImageToFolder({\r\n image,\r\n destFolderId,\r\n });\r\n }, [repository]);\r\n\r\n const imageFit = useCallback(({\r\n imageUrl,\r\n placements,\r\n skipOutpainting,\r\n }) => {\r\n return repository.imageFit({\r\n imageUrl,\r\n placements,\r\n skipOutpainting,\r\n });\r\n }, [repository]);\r\n\r\n const addImageWithBaseIdToFolder = useCallback(({\r\n imageSrc, baseId, folderId, metaData,\r\n }) => {\r\n return repository.addImageWithBaseIdToFolder({\r\n imageSrc,\r\n baseId,\r\n folderId,\r\n metaData,\r\n });\r\n }, [repository]);\r\n\r\n return {\r\n getImagesWithFilter,\r\n getImagesWithFilterAndBlur,\r\n imagesWithFilter,\r\n imagesWithFilterAndBlur,\r\n removeImageBackground,\r\n generateImageBackground,\r\n getImageSegmentations,\r\n saveImage,\r\n saveImageCopy,\r\n cropImage,\r\n getImageById,\r\n uploadImageToFolder,\r\n saveImageWithBaseId,\r\n uploadStockImage,\r\n moveImageToFolder,\r\n imageFit,\r\n addImageWithBaseIdToFolder,\r\n };\r\n};\r\n","import { useCallback, useMemo, useRef, useState, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nimport { checkVideosIntermediateStatus, FolderAssetType } from '../../model';\r\nimport { getTaskPoller } from '../task-poller';\r\n\r\n// below fields will be impacted along with status change\r\nconst VideoChangedFieldsWithStatusUpdate = [\r\n 'thumbnailUrl',\r\n 'url',\r\n 'width',\r\n 'height',\r\n 'durationInMS',\r\n 'status',\r\n];\r\n\r\nexport const useVideoTaskPoller = ({\r\n repository,\r\n logger,\r\n assets,\r\n interval,\r\n}) => {\r\n const latestTimestampRef = useRef(0);\r\n const [videoUpdated, setVideoUpdated] = useState({}); // sample: { 123: { .. } }\r\n const getVideoTaskStatus = useCallback((videoTasks) => {\r\n const requestTimestamp = Date.now();\r\n const videosToCheck = _.keys(videoTasks);\r\n\r\n return repository.updateVideoStatusByIds(videosToCheck).then((response) => {\r\n // if multipe requests are sent out, ensure to keep the result from the latest request\r\n let notFinishedTaskList = {};\r\n let newVideoUpdated = {};\r\n if (requestTimestamp > latestTimestampRef.current) {\r\n const responseKeys = [];\r\n\r\n response.forEach((item) => {\r\n responseKeys.push(item.id);\r\n newVideoUpdated = {\r\n ...newVideoUpdated,\r\n [item.id]: _.pick(item, VideoChangedFieldsWithStatusUpdate),\r\n };\r\n\r\n if (item && checkVideosIntermediateStatus(item)) {\r\n notFinishedTaskList = { ...notFinishedTaskList, [item.id]: item.status };\r\n }\r\n });\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n latestTimestampRef.current = requestTimestamp;\r\n }\r\n\r\n setVideoUpdated(newVideoUpdated);\r\n\r\n const taskCount = Object.keys(notFinishedTaskList).length;\r\n\r\n return { totalCount: taskCount };\r\n }).catch(() => {\r\n // log and ignore the error\r\n logger.logError('Failed to get videos task status.');\r\n });\r\n }, [logger, repository]);\r\n\r\n const newVideoTasks = useRef({});\r\n const isPollerRunning = useRef(false);\r\n\r\n const currentTaskPoller = useRef(null);\r\n\r\n const startVideoTaskStatusPoller = useCallback(() => {\r\n const taskPoller = getTaskPoller({\r\n task: () => {\r\n isPollerRunning.current = true;\r\n\r\n const queryPromise = _.isEmpty(newVideoTasks.current)\r\n ? Promise.resolve({ totalCount: 0 })\r\n : getVideoTaskStatus(newVideoTasks.current);\r\n\r\n return queryPromise.then((res) => {\r\n const { totalCount } = res || {};\r\n\r\n const isFinished = totalCount === 0;\r\n\r\n if (isFinished) {\r\n isPollerRunning.current = false;\r\n }\r\n\r\n return { isFinished };\r\n });\r\n },\r\n interval,\r\n });\r\n taskPoller.start();\r\n const stopPoller = () => {\r\n taskPoller.stop();\r\n isPollerRunning.current = false;\r\n };\r\n return { stopPoller };\r\n }, [getVideoTaskStatus, interval]);\r\n\r\n useEffect(() => {\r\n newVideoTasks.current = assets ? assets.reduce((prev, asset) => {\r\n if (asset.folderAssetType === FolderAssetType.Video && checkVideosIntermediateStatus(asset)) {\r\n return { ...prev, [asset.id]: asset.status };\r\n }\r\n return prev;\r\n }, {}) : {};\r\n\r\n // start pollerif there are no running poller\r\n if (!isPollerRunning.current && !_.isEmpty(newVideoTasks.current)) {\r\n const { stopPoller } = startVideoTaskStatusPoller();\r\n currentTaskPoller.current = stopPoller;\r\n }\r\n\r\n // stop poller when component unmount.\r\n return () => {\r\n if (currentTaskPoller.current && isPollerRunning.current) {\r\n currentTaskPoller.current();\r\n }\r\n };\r\n }, [assets, startVideoTaskStatusPoller]);\r\n\r\n const returnVal = useMemo(() => ({\r\n videoUpdated,\r\n }), [videoUpdated]);\r\n\r\n return returnVal;\r\n};\r\n","/* istanbul ignore file */\r\nimport { useCallback, useEffect, } from 'react';\r\nimport { getSessionStorage } from '@bingads-webui/storage';\r\nimport { useAdsStudioServices, getTaskPoller } from '../services';\r\n\r\n// use session storeage to sync the in progress tasks count between\r\n// asset-library pages and summary bar\r\n\r\nconst KEY = 'ASSET_LIBRARY_STORAGE';\r\n\r\nconst updateInProgressTasksStatus = (inProgressTaskCount) => {\r\n const ss = getSessionStorage();\r\n if (ss.supportsStorage()) {\r\n if (inProgressTaskCount > 0) {\r\n ss.set(KEY, { inProgressTaskCount });\r\n } else {\r\n ss.invalidate(KEY);\r\n }\r\n }\r\n};\r\n\r\nconst clearInProgressTaskStatus = () => updateInProgressTasksStatus(0);\r\n\r\nexport const ImageCroppingTaskStatusPoller = ({ interval }) => {\r\n //\r\n const { getImageCroppingTaskStatus, croppingTaskUpdated } = useAdsStudioServices();\r\n\r\n const startImageCroppingTaskStatusPoller = useCallback(() => {\r\n const taskPoller = getTaskPoller({\r\n task: () => getImageCroppingTaskStatus().then((res) => {\r\n const { totalCount } = res || {};\r\n updateInProgressTasksStatus(totalCount || 0);\r\n return { isFinished: totalCount === 0 };\r\n }),\r\n interval,\r\n });\r\n taskPoller.start();\r\n const stopPoller = () => {\r\n taskPoller.stop();\r\n clearInProgressTaskStatus();\r\n };\r\n return { stopPoller };\r\n }, [getImageCroppingTaskStatus, interval]);\r\n\r\n // query in progress task stasus, and update summary-bar status accordingly\r\n useEffect(() => {\r\n const { stopPoller } = startImageCroppingTaskStatusPoller();\r\n return () => stopPoller();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [croppingTaskUpdated]);\r\n\r\n return null;\r\n};\r\n","/* istanbul ignore file */\r\nimport { useCallback, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\n\r\nimport { getSessionStorage } from '@bingads-webui/storage';\r\nimport { useAdsStudioServices, getTaskPoller } from '../services';\r\nimport { FolderAssetType, checkVideosIntermediateStatus } from '../model';\r\n\r\n// use session storeage to sync the in progress tasks count between\r\n// asset-library pages and summary bar\r\n\r\nconst KEY = 'ASSET_LIBRARY_STORAGE';\r\n\r\nconst updateInProgressTasksStatus = (inProgressTaskCount) => {\r\n const ss = getSessionStorage();\r\n if (ss.supportsStorage()) {\r\n if (inProgressTaskCount > 0) {\r\n ss.set(KEY, { inProgressTaskCount });\r\n } else {\r\n ss.invalidate(KEY);\r\n }\r\n }\r\n};\r\n\r\nexport const VideoTaskStatusPoller = ({ interval }) => {\r\n const {\r\n getVideoTaskStatus,\r\n assets,\r\n } = useAdsStudioServices();\r\n\r\n const newVideoTasks = useRef({});\r\n const isPollerRunning = useRef(false);\r\n\r\n const currentTaskPoller = useRef(null);\r\n\r\n const startVideoTaskStatusPoller = useCallback(() => {\r\n const taskPoller = getTaskPoller({\r\n task: () => {\r\n isPollerRunning.current = true;\r\n\r\n const queryPromise = _.isEmpty(newVideoTasks.current)\r\n ? Promise.resolve({ totalCount: 0 })\r\n : getVideoTaskStatus(newVideoTasks.current);\r\n\r\n return queryPromise.then((res) => {\r\n const { totalCount } = res || {};\r\n\r\n updateInProgressTasksStatus(totalCount || 0);\r\n\r\n const isFinished = totalCount === 0;\r\n\r\n if (isFinished) {\r\n isPollerRunning.current = false;\r\n }\r\n\r\n return { isFinished };\r\n });\r\n },\r\n interval,\r\n });\r\n taskPoller.start();\r\n const stopPoller = () => {\r\n taskPoller.stop();\r\n isPollerRunning.current = false;\r\n };\r\n return { stopPoller };\r\n }, [getVideoTaskStatus, interval]);\r\n\r\n useEffect(() => {\r\n newVideoTasks.current = assets ? assets.reduce((prev, asset) => {\r\n if (asset.folderAssetType === FolderAssetType.Video && checkVideosIntermediateStatus(asset)) {\r\n return { ...prev, [asset.id]: asset.status };\r\n }\r\n return prev;\r\n }, {}) : {};\r\n\r\n // start pollerif there are no running poller\r\n if (!isPollerRunning.current && !_.isEmpty(newVideoTasks.current)) {\r\n const { stopPoller } = startVideoTaskStatusPoller();\r\n currentTaskPoller.current = stopPoller;\r\n }\r\n\r\n // stop poller when component unmount.\r\n return () => {\r\n if (currentTaskPoller.current && isPollerRunning.current) {\r\n currentTaskPoller.current();\r\n }\r\n };\r\n }, [assets, startVideoTaskStatusPoller]);\r\n\r\n return null;\r\n};\r\n\r\nVideoTaskStatusPoller.propTypes = {\r\n interval: PropTypes.number.isRequired,\r\n};\r\n","/* istanbul ignore file */\r\nimport React from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { ImageCroppingTaskStatusPoller } from './image-cropping-task-status-poller';\r\nimport { VideoTaskStatusPoller } from './video-task-status-poller';\r\n\r\nexport const withAssetTaskStatusPoller = (Component) => {\r\n const Wrapper = props => (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n\r\n Wrapper.displayName = `withAssetTaskStatusPoller(${Component.displayName || Component.name})`;\r\n hoistNonReactStatics(Wrapper, Component);\r\n\r\n return Wrapper;\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { EditRegular, ListRegular } from '@fluentui/react-icons';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\n\r\nimport { FolderAssetType, ManualAddedImageSource } from '../../../model';\r\nimport { GridCellFactory } from './grid-cell-factory';\r\nimport { useStyles } from './style';\r\nimport { VideoSourceType } from '../../../utils';\r\n\r\nexport const AdsStudioAssetGridCell = ({\r\n item,\r\n highlightedText,\r\n onDetailsClick,\r\n onEditClick,\r\n selectable,\r\n selected,\r\n onSelect,\r\n isMultiSelecting,\r\n i18n,\r\n logger,\r\n index,\r\n draggable,\r\n onDrag,\r\n selectedItemCount,\r\n permissions,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const [focusIndex, setFocusIndex] = useState(-1);\r\n const focusCellButton = useRef();\r\n\r\n const onKeyDown = useCallback((event, i) => {\r\n const assetContainers = document.querySelectorAll('.asset-grid-cell-container');\r\n const firstButton = document.querySelector('.ads-studio-page button');\r\n switch (event.code) {\r\n case 'ArrowUp':\r\n case 'ArrowLeft':\r\n if (i > 0 && assetContainers[i - 1]) {\r\n assetContainers[i - 1].focus();\r\n setFocusIndex(-1);\r\n }\r\n break;\r\n case 'ArrowDown':\r\n case 'ArrowRight':\r\n if (i < assetContainers.length - 1 && assetContainers[i + 1]) {\r\n assetContainers[i + 1].focus();\r\n setFocusIndex(-1);\r\n }\r\n break;\r\n case 'Space':\r\n setFocusIndex(i);\r\n break;\r\n case 'Tab':\r\n if (focusIndex < 0 && firstButton) {\r\n firstButton.focus();\r\n } else if (assetContainers[i]) {\r\n const detailButton = assetContainers[i].querySelector('.detail-button');\r\n const editButton = assetContainers[i].querySelector('.edit-button');\r\n if (focusCellButton.current === 'edit') {\r\n if (detailButton) {\r\n detailButton.focus();\r\n focusCellButton.current = 'detail';\r\n }\r\n } else if (editButton) {\r\n if (editButton) {\r\n editButton.focus();\r\n focusCellButton.current = 'edit';\r\n }\r\n } else if (detailButton) {\r\n detailButton.focus();\r\n focusCellButton.current = 'detail';\r\n }\r\n }\r\n break;\r\n case 'Enter':\r\n if (focusCellButton.current === 'detail') {\r\n onDetailsClick(item);\r\n } else if (focusCellButton.current === 'edit') {\r\n onEditClick(item);\r\n } else {\r\n onSelect();\r\n }\r\n setFocusIndex(-1);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }, [focusIndex, item, onDetailsClick, onEditClick, onSelect]);\r\n\r\n const renderOverlayContent = useCallback(() => {\r\n const clickDetails = (evt) => {\r\n onDetailsClick(item);\r\n if (evt) {\r\n evt.stopPropagation();\r\n evt.preventDefault();\r\n }\r\n };\r\n const onDetailsKeyDown = (evt) => {\r\n if (evt.code === 'Enter' || evt.code === 'Space') {\r\n clickDetails(evt);\r\n }\r\n };\r\n const clickEdit = (evt) => {\r\n onEditClick(item);\r\n if (evt) {\r\n evt.stopPropagation();\r\n evt.preventDefault();\r\n }\r\n };\r\n const onEditKeyDown = (evt) => {\r\n if (evt.code === 'Enter' || evt.code === 'Space') {\r\n clickEdit(evt);\r\n }\r\n };\r\n const { folderAssetType, manualAddedImageSourceType } = item || {};\r\n const isVideoCell = folderAssetType === FolderAssetType.Video;\r\n const isStockImageCell = manualAddedImageSourceType === ManualAddedImageSource.ShutterStock;\r\n const videoTemplateUIEnabled = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n const isAIGenerated = item && item.sourceType && item.sourceType === VideoSourceType.AIGenerated;\r\n\r\n const showEditIcon = ((isAIGenerated && videoTemplateUIEnabled && isVideoCell && item && item.id && item.metaData) || !isVideoCell);\r\n\r\n return (\r\n \r\n { showEditIcon &&\r\n }\r\n onClick={clickEdit}\r\n onKeyDown={onEditKeyDown}\r\n className={classnames('edit-button', classes.actionButton)}\r\n title={i18n.getString(_TL_('Edit'))}\r\n aria-label={i18n.getString(_TL_('Edit asset'))}\r\n />\r\n }\r\n { !isStockImageCell &&\r\n }\r\n onClick={clickDetails}\r\n onKeyDown={onDetailsKeyDown}\r\n className={classnames('detail-button', classes.actionButton)}\r\n title={i18n.getString(_TL_('Details'))}\r\n aria-label={i18n.getString(_TL_('Click to view asset details'))}\r\n />\r\n }\r\n \r\n );\r\n }, [classes.actionButton, i18n, item, onDetailsClick, onEditClick]);\r\n\r\n useEffect(() => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace(`Grid cell rendered item: ${stringifySync(item)}`);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\r\n { onKeyDown(event, index); }}\r\n style={{ width: '100%', height: '100%' }}\r\n data-is-focusable\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nAdsStudioAssetGridCell.propTypes = {\r\n item: PropTypes.shape({\r\n id: PropTypes.string,\r\n name: PropTypes.string,\r\n url: PropTypes.string,\r\n createdTime: PropTypes.instanceOf(Date),\r\n // cropping task progress\r\n updating: PropTypes.bool,\r\n }).isRequired,\r\n highlightedText: PropTypes.string,\r\n onDetailsClick: PropTypes.func.isRequired,\r\n onEditClick: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n selectable: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n onSelect: PropTypes.func,\r\n isMultiSelecting: PropTypes.bool,\r\n index: PropTypes.number,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n logError: PropTypes.func,\r\n }),\r\n draggable: PropTypes.bool,\r\n onDrag: PropTypes.func,\r\n selectedItemCount: PropTypes.number,\r\n};\r\n\r\nAdsStudioAssetGridCell.defaultProps = {\r\n highlightedText: undefined,\r\n index: -1,\r\n selectable: false,\r\n selected: false,\r\n onSelect: _.noop,\r\n onEditClick: _.noop,\r\n isMultiSelecting: false,\r\n logger: undefined,\r\n draggable: false,\r\n onDrag: _.noop,\r\n selectedItemCount: 1,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useControlStyles = makeStyles({\r\n root: {\r\n position: 'relative',\r\n width: '100%',\r\n ...shorthands.overflow('hidden'),\r\n top: '-5px',\r\n backgroundColor: 'rgba(0,0,0,0.75)',\r\n\r\n '& .ms-Button svg': {\r\n width: '100%',\r\n },\r\n '& .ms-Button:focus': {\r\n ...shorthands.border('1px solid #fff'),\r\n },\r\n '& .ms-Button:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n videoContainer: {\r\n paddingBottom: '32px',\r\n },\r\n sliderContainer: {\r\n width: '100%',\r\n },\r\n previewVideo: {\r\n width: '100%',\r\n maxHeight: '100%',\r\n },\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n\r\n '& i': {\r\n width: '100%',\r\n cursor: 'pointer',\r\n },\r\n },\r\n});\r\n\r\nconst commonParentStyles = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n height: '100%',\r\n};\r\n\r\nconst iconCommonStyles = {\r\n fontSize: '36px',\r\n lineHeight: '36px',\r\n color: '#0078d4',\r\n};\r\n\r\nexport const usePlaceholderStyle = makeStyles({\r\n encoding: {\r\n ...commonParentStyles,\r\n '& .placeholder-icon': {\r\n ...iconCommonStyles,\r\n animationName: [\r\n {\r\n to: {\r\n transform: 'rotate(360deg)',\r\n },\r\n },\r\n ],\r\n animationDuration: '1.2s',\r\n animationTimingFunction: 'linear',\r\n animationIterationCount: 'infinite',\r\n },\r\n '& .add-video-content-container': {\r\n marginTop: '14px',\r\n },\r\n },\r\n unverified: {\r\n ...commonParentStyles,\r\n '& .download-icon-container': {\r\n ...shorthands.overflow('hidden'),\r\n ...shorthands.borderBottom('2px solid #0078d4'),\r\n },\r\n '& .placeholder-icon': {\r\n ...iconCommonStyles,\r\n animationName: [\r\n {\r\n from: {\r\n transform: 'translateY(-18px)',\r\n },\r\n to: {\r\n transform: 'translateY(42px)',\r\n },\r\n },\r\n ],\r\n animationDuration: '1.2s',\r\n animationTimingFunction: 'ease',\r\n animationIterationCount: 'infinite',\r\n },\r\n },\r\n failed: {\r\n ...commonParentStyles,\r\n '& .placeholder-icon': {\r\n ...iconCommonStyles,\r\n color: '#d83b01',\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\n\r\nimport { VideoPureComponent } from '@bingads-webui-campaign-react/video-pure-component';\r\n\r\nimport { useControlStyles } from './style';\r\n\r\nexport const Video = (props) => {\r\n const classes = useControlStyles();\r\n\r\n return ;\r\n};\r\n","import React from 'react';\r\n\r\nimport { EncodingPlaceholder, FailedPlaceholder, UnverifiedPlaceholder } from '@bingads-webui-campaign-react/video-status-placeholder-pure-component';\r\n\r\nimport { usePlaceholderStyle } from './style';\r\n\r\nexport const EncodingPlaceholderWithStyle = (props) => {\r\n const classes = usePlaceholderStyle();\r\n return ;\r\n};\r\n\r\nexport const FailedPlaceholderWithStyle = (props) => {\r\n const classes = usePlaceholderStyle();\r\n return ;\r\n};\r\n\r\nexport const UnverifiedPlaceholderWithStyle = (props) => {\r\n const classes = usePlaceholderStyle();\r\n return ;\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\nimport {\r\n getSharedAssetContainerStyle,\r\n getSharedMultiSelectingCellStyles,\r\n} from '../shared-cell-style';\r\n\r\nexport const useVideoAssetsGridCellStyle = makeStyles({\r\n VideoAssetsGridCellContainer: {\r\n ...getSharedAssetContainerStyle(),\r\n },\r\n\r\n videoCellLabelContainer: {\r\n display: 'flex',\r\n position: 'absolute',\r\n left: '12px',\r\n bottom: '8px',\r\n zIndex: 1,\r\n },\r\n\r\n videoCell: {\r\n // visibility: 'hidden',\r\n opacity: 0,\r\n position: 'absolute',\r\n top: '0px',\r\n left: '0px',\r\n // zIndex: -1,\r\n ...shorthands.borderRadius('6px'),\r\n '& .video-previewer-root': {\r\n backgroundColor: 'transparent',\r\n transform: 'translateY(-100%)',\r\n '& .time': {\r\n paddingLeft: '8px',\r\n paddingRight: '12px',\r\n color: '#fff',\r\n fontSize: '11px',\r\n lineHeight: '14px',\r\n whiteSpace: 'nowrap',\r\n },\r\n '& button[aria-label=\"Unmute\"], button[aria-label=\"Mute\"]': {\r\n marginRight: '8px',\r\n '& .ms-Icon': {\r\n lineHeight: '32px',\r\n fontSize: '32px',\r\n height: '32px',\r\n },\r\n },\r\n },\r\n '&.show-video': {\r\n // visibility: 'visible',\r\n opacity: 1,\r\n // zIndex: 2,\r\n },\r\n },\r\n placeholderCell: {\r\n width: '100%',\r\n height: '135px',\r\n },\r\n\r\n // only show checkbox on overlay if it is NOT in multi-selecting mode\r\n ...getSharedMultiSelectingCellStyles(),\r\n});\r\n","/* eslint-disable object-curly-newline */\r\nimport React, { useCallback, useMemo, useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { TimerRegular } from '@fluentui/react-icons';\r\nimport {\r\n TilesGridCellImage as CellImage,\r\n TilesGridCellDecorativeLabel as CellLabel,\r\n TilesGridCellCardWithOverlay,\r\n TilesGridCellSelectionDecorator,\r\n TilesGridCellDragDecorator,\r\n} from '../../ads-studio-tile-grid';\r\nimport { TextWithHighlight } from '../../text-with-highlight';\r\nimport {\r\n Video,\r\n EncodingPlaceholderWithStyle,\r\n UnverifiedPlaceholderWithStyle,\r\n FailedPlaceholderWithStyle\r\n} from '../../video-component';\r\nimport { convertTimeDuration } from '../../../model';\r\n\r\nimport { useVideoAssetsGridCellStyle } from './style';\r\n\r\nexport const AdsStudioVideoAssetsGridCell = ({\r\n item,\r\n highlightedText,\r\n isOverlayEnabled,\r\n isCellFocused,\r\n renderCellContent,\r\n renderOverlayContent,\r\n selectable,\r\n selected,\r\n isMultiSelecting,\r\n onClick,\r\n i18n,\r\n onClickVideo,\r\n draggable,\r\n onDrag,\r\n selectedItemCount,\r\n}) => {\r\n const classes = useVideoAssetsGridCellStyle();\r\n const [isVideoLoaded, setVideoLoaded] = useState(false);\r\n const [showVideo, setShowVideo] = useState(false); // control opacity of video element\r\n const [hideVideo, setHideVideo] = useState(false); // display video element or not\r\n const [thumbnailSeletable, setThumbnailSelectable] = useState(false);\r\n\r\n const { name, thumbnailUrl, id, durationInMS, status, url } = item || {};\r\n const durationDesc = useMemo(() => convertTimeDuration(durationInMS), [durationInMS]);\r\n\r\n const [cellRef, setCellRef] = useState(null);\r\n const timerRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (isVideoLoaded && cellRef && !isMultiSelecting) {\r\n cellRef.addEventListener('mouseover', () => {\r\n setShowVideo(true);\r\n timerRef.current = setTimeout(() => {\r\n setShowVideo(false);\r\n setThumbnailSelectable(true);\r\n setHideVideo(true);\r\n }, 5000);\r\n });\r\n cellRef.addEventListener('mouseout', () => {\r\n setShowVideo(false);\r\n clearTimeout(timerRef.current);\r\n setThumbnailSelectable(false);\r\n });\r\n }\r\n }, [cellRef, isMultiSelecting, isVideoLoaded]);\r\n\r\n useEffect(() => () => {\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (selected) {\r\n setShowVideo(false);\r\n setThumbnailSelectable(true);\r\n }\r\n }, [selected]);\r\n\r\n const onClickVideoCard = useCallback(() => {\r\n clearTimeout(timerRef.current);\r\n onClickVideo();\r\n }, [onClickVideo]);\r\n\r\n const playVideoObject = useMemo(() => ({ play: showVideo }), [showVideo]);\r\n\r\n const wrapperWidth = cellRef ? cellRef.offsetWidth : 0;\r\n\r\n const cellContent = useMemo(() => {\r\n let defaultContent = null;\r\n // status order: unverified => draft => active/invalid\r\n if (status === 'Active') {\r\n defaultContent = (\r\n
\r\n \r\n
\r\n {isVideoLoaded && durationDesc && !showVideo && (\r\n \r\n )}\r\n
\r\n
\r\n );\r\n } else {\r\n setVideoLoaded(true);\r\n\r\n if (status === 'Unverified') {\r\n defaultContent =
;\r\n } else if (status === 'Draft') {\r\n defaultContent =
;\r\n } else if (status === 'Failed') {\r\n defaultContent =
;\r\n }\r\n }\r\n\r\n if (renderCellContent) {\r\n return renderCellContent(defaultContent);\r\n }\r\n return defaultContent;\r\n }, [status, renderCellContent, thumbnailUrl, name, id, i18n, classes.videoCellLabelContainer, classes.placeholderCell, isVideoLoaded, showVideo, durationDesc]);\r\n\r\n const funcRenderOverlayContent = useCallback(() => {\r\n if (renderOverlayContent) {\r\n return renderOverlayContent();\r\n }\r\n return null;\r\n }, [renderOverlayContent]);\r\n\r\n const onCellClick = useCallback(() => {\r\n if (selectable && thumbnailSeletable) {\r\n onClick({ item, selected });\r\n } else if (showVideo) {\r\n onClickVideoCard();\r\n }\r\n }, [item, onClick, onClickVideoCard, selectable, selected, showVideo, thumbnailSeletable]);\r\n\r\n useEffect(() => {\r\n if (isMultiSelecting) {\r\n setThumbnailSelectable(true);\r\n }\r\n }, [isMultiSelecting]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {selectable && thumbnailSeletable ? (\r\n \r\n {cellContent}\r\n \r\n ) : cellContent}\r\n \r\n {\r\n !hideVideo && !isMultiSelecting && status === 'Active' &&\r\n
setCellRef(x)}>\r\n \r\n
\r\n }\r\n \r\n
\r\n
\r\n \r\n
\r\n {id && (\r\n
\r\n {`${i18n.getString(_TL_('ID'))} `}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nAdsStudioVideoAssetsGridCell.propTypes = {\r\n item: PropTypes.shape({\r\n id: PropTypes.string,\r\n name: PropTypes.string,\r\n url: PropTypes.string,\r\n createdTime: PropTypes.instanceOf(Date),\r\n }).isRequired,\r\n highlightedText: PropTypes.string,\r\n isOverlayEnabled: PropTypes.bool,\r\n isCellFocused: PropTypes.bool,\r\n renderCellContent: PropTypes.func,\r\n renderOverlayContent: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n selectable: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n onClick: () => null,\r\n isMultiSelecting: PropTypes.bool,\r\n onClickVideo: PropTypes.func.isRequired,\r\n};\r\n\r\nAdsStudioVideoAssetsGridCell.defaultProps = {\r\n highlightedText: undefined,\r\n isOverlayEnabled: false,\r\n isCellFocused: false,\r\n renderCellContent: null,\r\n renderOverlayContent: null,\r\n selectable: false,\r\n selected: false,\r\n onClick: undefined,\r\n isMultiSelecting: false,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles, tokens, shorthands, mergeClasses } from '@fluentui/react-components';\r\nimport classNames from 'classnames';\r\nimport { CheckmarkCircleFilled } from '@fluentui/react-icons';\r\nimport {\r\n TilesGridCellImage as CellImage,\r\n} from '../../ads-studio-tile-grid';\r\n\r\nexport const useStyles = makeStyles({\r\n imageWrapper: {\r\n position: 'relative',\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n ...shorthands.outline('2px', 'solid', '#0078d4'),\r\n },\r\n containerClass: {\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n boxShadow: '0 0 2px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.14)',\r\n },\r\n imageClass: {\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n },\r\n iconChecked: {\r\n top: '9px',\r\n right: '10px',\r\n position: 'absolute',\r\n color: '#0078d4',\r\n fontSize: '20px',\r\n backgroundColor: '#ffffff',\r\n ...shorthands.borderRadius(tokens.borderRadiusCircular),\r\n },\r\n});\r\n\r\nexport const ImagePanelGridCell = (props) => {\r\n const {\r\n item, i18n, onSelectImage, isSelected, isMultiple,\r\n } = props;\r\n const { url, id } = item || {};\r\n const classes = useStyles();\r\n\r\n const onClickCell = useCallback(() => {\r\n onSelectImage(id);\r\n }, [id, onSelectImage]);\r\n\r\n return (\r\n
\r\n \r\n {isSelected && isMultiple && }\r\n
\r\n );\r\n};\r\n\r\nImagePanelGridCell.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n item: PropTypes.shape({\r\n id: PropTypes.string,\r\n url: PropTypes.string,\r\n }).isRequired,\r\n onSelectImage: PropTypes.func.isRequired,\r\n isSelected: PropTypes.bool.isRequired,\r\n isMultiple: PropTypes.bool,\r\n};\r\n\r\nImagePanelGridCell.defaultProps = {\r\n isMultiple: true,\r\n};\r\n\r\n","import React, { useMemo, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport _ from 'underscore';\r\nimport { makeStyles, } from '@fluentui/react-components';\r\nimport { ImagePanelGridCell } from '../ads-studio-asset-grid-cell';\r\nimport { SectionTilesGrid, TilesGridLoadingCell } from '../ads-studio-tile-grid';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\nimport { GridSectionName, DEFAULT_PAGE_SIZE } from '../../model/constants';\r\n\r\nconst DEFAULT_IMAGE_WIDTH = 211;\r\nconst DEFAULT_COLUMN_PADDING = 16;\r\n\r\nconst useStyles = makeStyles({\r\n contentGridWrapper: {\r\n paddingTop: '24px',\r\n },\r\n description: {\r\n marginBottom: '8px',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n fontWeight: '600',\r\n },\r\n});\r\n\r\nexport const PanelImageGrid = ({\r\n i18n,\r\n dataService,\r\n onFailedToLoadData,\r\n onSelectImage,\r\n overlayBodyRef,\r\n imageWidth,\r\n columnPadding,\r\n isHideDescription,\r\n isMultiple = true,\r\n isLoadingMore,\r\n}) => {\r\n const {\r\n assets,\r\n totalAssetCount,\r\n loadMoreData,\r\n } = dataService;\r\n const classes = useStyles();\r\n const [selectedItemIds, setSelectedItemIds] = useState([]);\r\n\r\n const onSelectedChange = useCallback((selectedItemId) => {\r\n if (selectedItemIds.includes(selectedItemId)) {\r\n const newSelectedItems = selectedItemIds.filter(itemId => itemId !== selectedItemId);\r\n setSelectedItemIds(newSelectedItems);\r\n } else {\r\n setSelectedItemIds(isMultiple ? [...selectedItemIds, selectedItemId] : [selectedItemId]);\r\n }\r\n onSelectImage(selectedItemId);\r\n }, [isMultiple, onSelectImage, selectedItemIds]);\r\n\r\n const assetsWithAction = useMemo(() => _.map(assets, (image) => {\r\n const {\r\n id,\r\n } = image;\r\n\r\n return ({\r\n ...image,\r\n onAction: (event) => {\r\n const code = _.get(event, ['detail', 'originalEvent', 'code']);\r\n if (code === 'Enter' || code === 'Space') {\r\n onSelectedChange(id);\r\n event.preventDefault();\r\n }\r\n },\r\n });\r\n }), [assets, onSelectedChange]);\r\n\r\n const imagesGridSection = useMemo(() => ({\r\n sectionName: GridSectionName.Asset,\r\n sectionClassName: 'ads-studio-image-section',\r\n itemKey: 'id',\r\n items: assetsWithAction,\r\n totalItemCount: totalAssetCount,\r\n config: {\r\n width: imageWidth || DEFAULT_IMAGE_WIDTH,\r\n columnPadding: columnPadding || DEFAULT_COLUMN_PADDING,\r\n scrollContainer: overlayBodyRef || '.ads-studio-panel-container-drawer-overlay-body',\r\n },\r\n }), [assetsWithAction, totalAssetCount, imageWidth, columnPadding, overlayBodyRef]);\r\n\r\n const sectionGridData = useMemo(\r\n () => ([imagesGridSection]),\r\n [imagesGridSection]\r\n );\r\n\r\n const onRenderCell = useCallback(({ item }) => {\r\n const { _index, id } = item;\r\n\r\n return (\r\n \r\n );\r\n }, [i18n, onSelectedChange, selectedItemIds, isMultiple]);\r\n\r\n const loadNextPage = useCallback(() => {\r\n if (assets && assets.length >= totalAssetCount) {\r\n return;\r\n }\r\n const p$res = loadMoreData({ count: DEFAULT_PAGE_SIZE });\r\n if (p$res) {\r\n p$res.catch((err) => {\r\n if (onFailedToLoadData) {\r\n onFailedToLoadData(err);\r\n }\r\n });\r\n }\r\n }, [assets, loadMoreData, onFailedToLoadData, totalAssetCount]);\r\n\r\n const onRenderLoadingCell = useCallback(({ items, totalItemCount }) => {\r\n if ((items.length < totalItemCount) && (items.length > 0)) {\r\n return (\r\n \r\n {isLoadingMore && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n );\r\n }\r\n return null;\r\n }, [isLoadingMore, loadNextPage]);\r\n\r\n return (\r\n
\r\n {!isHideDescription &&
{i18n.getString(_TL_('Suggestions from recent searches'))}
}\r\n \r\n
\r\n );\r\n};\r\n\r\nPanelImageGrid.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isMultiple: PropTypes.bool,\r\n dataService: PropTypes.shape({}),\r\n // logger: PropTypes.shape({\r\n // logTrace: PropTypes.func,\r\n // }).isRequired,\r\n onFailedToLoadData: PropTypes.func,\r\n onSelectImage: PropTypes.func.isRequired,\r\n overlayBodyRef: PropTypes.shape({}),\r\n};\r\n\r\nPanelImageGrid.defaultProps = {\r\n dataService: {},\r\n onFailedToLoadData: _.noop,\r\n overlayBodyRef: null,\r\n isMultiple: true,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const usePerformanceFilterBarEditingStyle = makeStyles({\r\n filterBarEditingContainer: {\r\n position: 'relative',\r\n minHeight: '56px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n backgroundColor: '#f3f2f1',\r\n\r\n '& .filter-list-editing': {\r\n display: 'flex',\r\n ...shorthands.flex(1),\r\n flexWrap: 'wrap',\r\n alignItems: 'flex-start',\r\n paddingLeft: '12px',\r\n\r\n '& .filter-list-divider': {\r\n paddingRight: '12px',\r\n },\r\n },\r\n\r\n '& .filter-bar-button-group': {\r\n marginLeft: 'auto',\r\n display: 'flex',\r\n },\r\n\r\n '& button.add-filter-button .iconba-Add': {\r\n color: '#373737',\r\n },\r\n '& button.filter-bar-button': {\r\n ...shorthands.border('none'),\r\n backgroundColor: 'transparent',\r\n ...shorthands.padding('0px', '7px'),\r\n height: '56px',\r\n '& .iconba': {\r\n color: '#373737',\r\n },\r\n '&:hover': {\r\n backgroundColor: '#f3f2f1',\r\n },\r\n '&:focus': {\r\n backgroundColor: '#e1dfdd',\r\n '&:hover': {\r\n backgroundColor: '#d0d0d0',\r\n },\r\n },\r\n },\r\n '& .filter-bar-divider': {\r\n ...shorthands.borderLeft('1px', 'solid', '#eaeaea'),\r\n ...shorthands.margin('8px', '0px'),\r\n },\r\n '& button.filter-bar-cancel-button': {\r\n ...shorthands.padding('0px', '18px'),\r\n minWidth: 'auto',\r\n '& .iconba:before': {\r\n color: '#373737',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const usePerformanceFilterBarReadonlyStyle = makeStyles({\r\n filterBarReadonlyContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n\r\n '& .btn.btn-link': {\r\n marginLeft: '5px',\r\n color: '#17717a',\r\n ...shorthands.textDecoration('underline'),\r\n },\r\n\r\n '& .filter-list': {\r\n height: '56px',\r\n paddingLeft: '12px',\r\n display: 'block',\r\n alignItems: 'center',\r\n textOverflow: 'ellipsis',\r\n color: '#17717a',\r\n ...shorthands.overflow('hidden'),\r\n whiteSpace: 'nowrap',\r\n\r\n fontFamily: 'Segoe UI',\r\n fontSize: '14px',\r\n lineHeight: '19px',\r\n paddingTop: '14px',\r\n\r\n '& .asset-library-search': {\r\n top: '0px',\r\n },\r\n },\r\n '& .filter-list:focus-within': {\r\n textOverflow: 'inherit', // collpase text would invisiable issues when use tab to change focus, reference here: https://msasg.visualstudio.com/DefaultCollection/Bing_Ads/_workitems/edit/3702640/\r\n },\r\n },\r\n addFilterButton: {\r\n ...shorthands.flex(0, 0, 'auto'),\r\n ...shorthands.border('none'),\r\n height: '56px',\r\n fontSize: '14px',\r\n marginLeft: '4px',\r\n paddingLeft: '8px',\r\n paddingRight: '8px',\r\n backgroundColor: '#ffffff',\r\n fontWeight: '600',\r\n },\r\n});\r\n\r\nexport const useViewAllFiltersButtonStyle = makeStyles({\r\n viewAllButton: {\r\n ...shorthands.border('none'),\r\n color: 'rgb(23, 113, 122) !important',\r\n fontWeight: '400',\r\n width: 'auto',\r\n minWidth: '0px !important',\r\n ...shorthands.padding('0px !important', '8px !important'),\r\n backgroundColor: 'transparent !important',\r\n lineHeight: '56px !important',\r\n '&:hover': {\r\n ...shorthands.textDecoration('underline'),\r\n },\r\n },\r\n viewContentTitle: {\r\n paddingLeft: '8px',\r\n fontWeight: '600',\r\n fontSize: '20px',\r\n },\r\n viewAllFilterItem: {\r\n display: 'block',\r\n ...shorthands.border('none'),\r\n color: 'rgb(23, 113, 122) !important',\r\n fontWeight: '400',\r\n width: 'auto',\r\n minWidth: '0px !important',\r\n ...shorthands.padding('0px !important', '8px !important'),\r\n height: 'auto',\r\n backgroundColor: 'transparent !important',\r\n '&:hover': {\r\n ...shorthands.textDecoration('underline'),\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { ArrowClockwiseRegular, DismissRegular } from '@fluentui/react-icons';\r\n\r\nimport { usePerformanceFilterBarEditingStyle } from './styles';\r\n\r\nconst EditingFilterBar = ({\r\n filters,\r\n focusedFilter,\r\n onRenderNewFilterContextMenu,\r\n onRenderFilter,\r\n onCloseClick,\r\n onResetClick,\r\n i18n,\r\n}) => {\r\n const classes = usePerformanceFilterBarEditingStyle();\r\n // if no editing filter, show new filter context menu\r\n\r\n const getDivider = (index) => {\r\n if (index === filters.length - 1) {\r\n return null;\r\n }\r\n return ();\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {filters.map((filter, index) => (\r\n \r\n {onRenderFilter({\r\n filter,\r\n focused: focusedFilter && focusedFilter.id === filter.id,\r\n index,\r\n isLast: index === filters.length - 1,\r\n isFirst: index === 0,\r\n })}\r\n {getDivider(index)}\r\n \r\n ))}\r\n {onRenderNewFilterContextMenu()}\r\n
\r\n
\r\n }\r\n >\r\n {i18n.getString(_TL_('Reset'))}\r\n \r\n
\r\n }\r\n />\r\n
\r\n
\r\n );\r\n};\r\n\r\nEditingFilterBar.propTypes = {\r\n filters: PropTypes.arrayOf(PropTypes.shape({})),\r\n focusedFilter: PropTypes.shape({\r\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n }),\r\n onRenderNewFilterContextMenu: PropTypes.func,\r\n onRenderFilter: PropTypes.func.isRequired,\r\n onCloseClick: PropTypes.func,\r\n onResetClick: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nEditingFilterBar.defaultProps = {\r\n filters: [],\r\n focusedFilter: null,\r\n onRenderNewFilterContextMenu: () => null,\r\n onCloseClick: _.noop,\r\n onResetClick: _.noop,\r\n};\r\n\r\nexport const PerformanceEditingFilterBar\r\n = React.memo(EditingFilterBar);\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport classNames from 'classnames';\r\nimport { Popover, PopoverSurface, PopoverTrigger, Button, mergeClasses } from '@fluentui/react-components';\r\nimport PropTypes from 'prop-types';\r\nimport { useViewAllFiltersButtonStyle } from './styles';\r\n\r\nexport const FilterListWithPopover = ({\r\n filters, onClickFilter, i18n,\r\n}) => {\r\n const classes = useViewAllFiltersButtonStyle();\r\n\r\n return (\r\n
\r\n
{i18n.getString('Filters')}
\r\n {_.map(filters, filter =>\r\n (\r\n onClickFilter(filter)}\r\n >\r\n {`${i18n.getString(filter.title)}: ${filter.humanizedValue}`}\r\n \r\n ))}\r\n
\r\n );\r\n};\r\n\r\nFilterListWithPopover.propTypes = {\r\n filters: PropTypes.arrayOf(PropTypes.shape({\r\n humanizedValue: PropTypes.string,\r\n })).isRequired,\r\n onClickFilter: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\n\r\nconst ViewAllFiltersButtonImpl = ({\r\n filters, onClickFilter, i18n,\r\n}) => {\r\n const classes = useViewAllFiltersButtonStyle();\r\n // don't show the always visible filters on the View all popover\r\n const selectedFilters = _.filter(filters, ({ isFilterAlwaysVisible }) => !isFilterAlwaysVisible);\r\n return (_.isEmpty(selectedFilters) ? null : (\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n ));\r\n};\r\n\r\nViewAllFiltersButtonImpl.propTypes = {\r\n filters: PropTypes.arrayOf(PropTypes.shape({\r\n isFilterAlwaysVisible: PropTypes.bool,\r\n })).isRequired,\r\n onClickFilter: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nexport const ViewAllFiltersButton = React.memo(ViewAllFiltersButtonImpl);\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { AddRegular } from '@fluentui/react-icons';\r\nimport React, { Fragment, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { keyCode } from '@bingads-webui/keycode';\r\nimport { FilterType } from '../../model/filter-type';\r\nimport { ViewAllFiltersButton } from './view-all-filters-button';\r\nimport { usePerformanceFilterBarReadonlyStyle } from './styles';\r\n\r\nconst ReadonlyFilterBar = ({\r\n filters,\r\n onRenderFilter,\r\n onClickFilter,\r\n onClickAddFilterButton,\r\n i18n,\r\n}) => {\r\n const classes = usePerformanceFilterBarReadonlyStyle();\r\n const onKeyPress = (event, filter, index) => {\r\n if (event.which === keyCode.Enter || event.which === keyCode.Space) {\r\n onClickFilter(filter, index);\r\n }\r\n };\r\n\r\n const filterListRef = useRef();\r\n const onFilterBlur = () => {\r\n // reset scroll position to 0\r\n if (filterListRef.current) {\r\n filterListRef.current.scrollTo(0, 0);\r\n }\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {filters.map((filter, index) => (\r\n filter.type === FilterType.SearchText ?\r\n onRenderFilter({\r\n filter,\r\n index,\r\n isLast: index === filters.length - 1,\r\n isFirst: index === 0,\r\n }) :\r\n \r\n onClickFilter(filter, index)}\r\n tabIndex=\"0\"\r\n role=\"button\"\r\n onKeyDown={event => onKeyPress(event, filter, index)}\r\n >\r\n {onRenderFilter({\r\n filter,\r\n index,\r\n isLast: index === filters.length - 1,\r\n isFirst: index === 0,\r\n })}\r\n \r\n \r\n ))}\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nReadonlyFilterBar.propTypes = {\r\n filters: PropTypes.arrayOf(PropTypes.shape({})),\r\n onRenderFilter: PropTypes.func.isRequired,\r\n onClickFilter: PropTypes.func,\r\n onClickAddFilterButton: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nReadonlyFilterBar.defaultProps = {\r\n filters: [],\r\n onClickFilter: _.noop,\r\n onClickAddFilterButton: _.noop,\r\n};\r\n\r\nexport const PerformanceReadonlyFilterBar\r\n = React.memo(ReadonlyFilterBar);\r\n","/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classnames from 'classnames';\r\nimport { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n dynamicSizeContainer: {\r\n height: '100%',\r\n\r\n '& video': {\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n position: 'relative',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n },\r\n },\r\n videoOutlineGray: {\r\n '& video:focus': {\r\n ...shorthands.outline('2px', 'solid', 'gray'),\r\n outlineOffset: '1px',\r\n },\r\n },\r\n videoNormalContainer: {\r\n '& video::-webkit-media-controls-play-button:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-pause-button:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-volume-slider:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-timeline:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-mute-button:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-fullscreen-button:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-panel': {\r\n backgroundImage: 'linear-gradient(0deg,rgba(255, 255, 255, 0.8), transparent) !important',\r\n filter: 'brightness(1)',\r\n boxShadow: 'none !important',\r\n },\r\n },\r\n});\r\n\r\n// since the
\r\n
\r\n {isDomainInvalid && (\r\n \r\n {errorMessage ||\r\n i18n.getString(_TL_('Please enter a valid Final URL to see images from your website.'))}\r\n
\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nDomainInputView.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n isDomainInvalid: PropTypes.bool.isRequired,\r\n onDomainChange: PropTypes.func.isRequired,\r\n errorMessage: PropTypes.string,\r\n errorMessageClassName: PropTypes.string,\r\n domainInputWrapperClassName: PropTypes.string,\r\n};\r\n\r\nDomainInputView.defaultProps = {\r\n errorMessage: '',\r\n errorMessageClassName: '',\r\n domainInputWrapperClassName: '',\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Input, makeStyles } from '@fluentui/react-components';\r\nimport { SearchFilled } from '@fluentui/react-icons';\r\nimport { getUrlProtocolAndDomain, hasProtocol } from '@bingads-webui/url-util';\r\n\r\nconst useStyles = makeStyles({\r\n subdomainWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n input: {\r\n width: '260px',\r\n },\r\n divider: {\r\n marginLeft: '10px',\r\n marginRight: '10px',\r\n fontSize: '14px',\r\n },\r\n});\r\n\r\nexport const SubdomainInputView = (props) => {\r\n const {\r\n i18n, isLoading, defaultDomainUrl, onDomainUrlChange, onSubdomainUrlChange,\r\n } = props;\r\n const classes = useStyles();\r\n\r\n const onDomainBlur = useCallback((ev) => {\r\n const temporaryFinalUrl = ev && ev.target && ev.target.value;\r\n let newDomainUrl = getUrlProtocolAndDomain(temporaryFinalUrl);\r\n\r\n if (!hasProtocol(newDomainUrl)) {\r\n newDomainUrl = `https://${newDomainUrl}`;\r\n }\r\n onDomainUrlChange(newDomainUrl);\r\n }, [onDomainUrlChange]);\r\n\r\n const onDomainKeyDown = useCallback((ev) => {\r\n if (ev.key === 'Enter') {\r\n onDomainBlur(ev);\r\n }\r\n }, [onDomainBlur]);\r\n\r\n const onSubdomainBlur = useCallback((ev) => {\r\n const newSubdomainUrl = ev && ev.target && ev.target.value;\r\n onSubdomainUrlChange(newSubdomainUrl);\r\n }, [onSubdomainUrlChange]);\r\n\r\n const onSubdomainKeyDown = useCallback((ev) => {\r\n if (ev.key === 'Enter') {\r\n onSubdomainBlur(ev);\r\n }\r\n }, [onSubdomainBlur]);\r\n\r\n return (\r\n
\r\n } disabled={isLoading} onBlur={onDomainBlur} onKeyDown={onDomainKeyDown} />\r\n
\r\n /\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nSubdomainInputView.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n defaultDomainUrl: PropTypes.string.isRequired,\r\n onDomainUrlChange: PropTypes.func.isRequired,\r\n onSubdomainUrlChange: PropTypes.func.isRequired,\r\n};\r\n\r\n","import React, { useState, useCallback, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport { getUrlProtocolAndDomain, isValidUrl } from '@bingads-webui/url-util';\r\nimport { DomainInputView } from './domain-input-view';\r\nimport { SubdomainInputView } from './subdomain-input-view';\r\nimport { useWebsiteImages } from './useWebsiteImages';\r\nimport { PanelImageGrid } from '../panel-image-grid';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\n\r\nconst subdomainUrlRegex = /^https?:\\/\\/([a-z0-9-_]+\\.)*[a-z0-9-_]+\\.[a-z]{2,63}(?=$|\\/)\\//i;\r\n\r\nconst useStyles = makeStyles({\r\n contentWrapper: {\r\n paddingTop: '8px',\r\n },\r\n});\r\n\r\nconst getSubdomain = (url) => {\r\n const regexResult = url.trim().split(subdomainUrlRegex);\r\n if (regexResult && regexResult.length > 1) {\r\n return regexResult[2];\r\n }\r\n return url;\r\n};\r\n\r\nexport const WebsiteImagePanelContent = (props) => {\r\n const {\r\n aid, cid, oDataConfig, i18n, setSelectedImages, overlayBodyRef,\r\n } = props;\r\n const [domainUrl, setDomailUrl] = useState('');\r\n const [subdomain, setSubdomain] = useState('');\r\n const [isDomainInvalid, setIsdomainInvalid] = useState(false);\r\n const classes = useStyles();\r\n\r\n const {\r\n setPageNumber,\r\n loadNextPage,\r\n loadImages,\r\n images,\r\n totalCount,\r\n isLoadingFistPage,\r\n isLoading,\r\n setImages,\r\n onSelectImage,\r\n } = useWebsiteImages({\r\n aid, cid, oDataConfig, setSelectedImages,\r\n });\r\n\r\n const finalUrl = useMemo(() => `${domainUrl}/${subdomain}`, [domainUrl, subdomain]);\r\n const showDomain = useMemo(() => !finalUrl || !isValidUrl(finalUrl), [finalUrl]);\r\n\r\n const finalUrlDomain = useMemo(() => {\r\n if (finalUrl) {\r\n return getUrlProtocolAndDomain(finalUrl);\r\n }\r\n return '';\r\n }, [finalUrl]);\r\n\r\n const onDomainChange = useCallback((newDomainUrl) => {\r\n setDomailUrl(newDomainUrl);\r\n if (isValidUrl(newDomainUrl)) {\r\n setIsdomainInvalid(false);\r\n setPageNumber(1);\r\n setImages([]);\r\n loadImages({ url: `${newDomainUrl}/${subdomain}`, sDomain: subdomain });\r\n } else {\r\n setIsdomainInvalid(true);\r\n }\r\n }, [loadImages, setImages, setPageNumber, subdomain]);\r\n\r\n const onSubdomainChange = useCallback((newSubdomainUrl) => {\r\n if (!_.isNull(newSubdomainUrl) && !_.isUndefined(newSubdomainUrl)) {\r\n const newValue = getSubdomain(newSubdomainUrl);\r\n const newSearchUrl = `${finalUrlDomain}/${newValue}`;\r\n if (newSearchUrl !== finalUrl) {\r\n setSubdomain(newValue);\r\n setPageNumber(1);\r\n setImages([]);\r\n loadImages({ url: newSearchUrl, sDomain: newValue });\r\n }\r\n }\r\n }, [finalUrl, finalUrlDomain, loadImages, setImages, setPageNumber]);\r\n\r\n const loadMoreData = useCallback(() => {\r\n loadNextPage({ url: finalUrl, sDomain: subdomain });\r\n }, [finalUrl, loadNextPage, subdomain]);\r\n\r\n useEffect(() => {\r\n if (showDomain) {\r\n setDomailUrl('');\r\n setSubdomain('');\r\n }\r\n }, [showDomain]);\r\n\r\n return (\r\n
\r\n {\r\n showDomain ?\r\n :\r\n \r\n }\r\n {\r\n !showDomain && !isLoading && images.length === 0 &&\r\n
\r\n
\r\n
\r\n {i18n.getString(_TL_('No suggestion found from your site.'))}\r\n
\r\n
\r\n }\r\n {\r\n !showDomain && (\r\n <>\r\n { isLoadingFistPage && !images.length && }\r\n {!!images.length && (\r\n \r\n )}\r\n \r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nWebsiteImagePanelContent.prototype = {\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n setSelectedImages: PropTypes.func.isRequired,\r\n};\r\n","import { useMemo, useCallback, useState, useRef } from 'react';\r\nimport _ from 'underscore';\r\nimport { SuggestionPoller } from '@bingads-webui-campaign/media-repository';\r\nimport { MIN_SIZE } from '../../../src/model/constants';\r\n\r\nexport const useWebsiteImages = ({\r\n cid, aid, oDataConfig, setSelectedImages,\r\n}) => {\r\n const [images, setImages] = useState([]);\r\n const [totalCount, setTotalCount] = useState(0);\r\n const [isLoadingFistPage, setIsLoadingFirstPage] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const pageNumber = useRef(0);\r\n const selectedImages = useRef([]);\r\n\r\n const suggestionPoller = useMemo(() => new SuggestionPoller({\r\n cid,\r\n aid,\r\n oDataConfig,\r\n logger: {\r\n trace: _.noop,\r\n startSignal: _.noop,\r\n stopSignal: _.noop,\r\n },\r\n jobCompleteCallback: _.noop,\r\n }), [cid, aid, oDataConfig]);\r\n\r\n const setPageNumber = useCallback((newPageNumber) => {\r\n pageNumber.current = newPageNumber;\r\n }, []);\r\n\r\n const getLandingPageSuggestions = useCallback(({\r\n landingPageUrl,\r\n isSubdomain,\r\n pageNum,\r\n }) => {\r\n const minimumResolution = {\r\n width: MIN_SIZE[0],\r\n height: MIN_SIZE[1],\r\n };\r\n if (pageNum === 1) {\r\n // eslint-disable-next-line no-restricted-globals\r\n return new Promise((resolve) => {\r\n suggestionPoller.setJobCompleteCallback(resolve);\r\n suggestionPoller.getLandingPageSuggestions({\r\n landingPageUrl,\r\n forceInternalScrapingService: isSubdomain,\r\n minimumResolution,\r\n pageNumber: pageNum,\r\n });\r\n });\r\n }\r\n return suggestionPoller.getMoreLandingPageSuggestions({\r\n landingPageUrl,\r\n pageNumber: pageNum,\r\n forceInternalScrapingService: isSubdomain,\r\n minimumResolution,\r\n });\r\n }, [suggestionPoller]);\r\n /* istanbul ignore next */\r\n const loadImages =\r\n useCallback(({ url = '', sDomain = '' }) => {\r\n if (url) {\r\n if (pageNumber.current === 1) {\r\n selectedImages.current = [];\r\n setSelectedImages(selectedImages.current);\r\n setIsLoadingFirstPage(true);\r\n }\r\n setIsLoading(true);\r\n getLandingPageSuggestions({\r\n landingPageUrl: url,\r\n isSubdomain: !!sDomain,\r\n pageNum: pageNumber.current,\r\n }).then((data) => {\r\n const { TotalCount } = data.ImagePaging;\r\n setTotalCount(TotalCount);\r\n setImages(prevImages => [\r\n ...(pageNumber.current > 1 ? prevImages : []),\r\n ..._.map(data.Images, (item) => {\r\n const image = {\r\n url: item.ThumbnailUrl || item.ImageUrl,\r\n id: item.ImageUrl,\r\n };\r\n\r\n return image;\r\n }),\r\n ]);\r\n\r\n if (pageNumber.current === 1) {\r\n setIsLoadingFirstPage(false);\r\n }\r\n\r\n setIsLoading(false);\r\n }).catch(() => {\r\n if (pageNumber.current === 1) {\r\n setIsLoadingFirstPage(false);\r\n }\r\n\r\n setIsLoading(false);\r\n });\r\n }\r\n }, [getLandingPageSuggestions, setSelectedImages]);\r\n /* istanbul ignore else */\r\n const loadNextPage = useCallback((props) => {\r\n pageNumber.current += 1;\r\n loadImages(props);\r\n }, [loadImages]);\r\n\r\n const onSelectImage = useCallback((imageId) => {\r\n const originSelectedLength = selectedImages.current.length;\r\n const newSelectedList = selectedImages.current.filter(({ id }) => id !== imageId);\r\n /* istanbul ignore else */\r\n if (newSelectedList.length === originSelectedLength) {\r\n const selectedItem = images.find(({ id }) => id === imageId);\r\n selectedImages.current.push(selectedItem);\r\n } else {\r\n selectedImages.current = newSelectedList;\r\n }\r\n setSelectedImages([...selectedImages.current]);\r\n }, [images, setSelectedImages]);\r\n\r\n return {\r\n images,\r\n totalCount,\r\n isLoadingFistPage,\r\n isLoading,\r\n setImages,\r\n loadNextPage,\r\n loadImages,\r\n setPageNumber,\r\n onSelectImage,\r\n };\r\n};\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Tooltip,\r\n Menu,\r\n MenuTrigger,\r\n useOverflowMenu,\r\n MenuPopover,\r\n MenuList,\r\n MenuItem,\r\n Button,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Breadcrumb,\r\n BreadcrumbItem,\r\n BreadcrumbButton,\r\n BreadcrumbDivider,\r\n partitionBreadcrumbItems,\r\n truncateBreadcrumbLongName,\r\n isTruncatableBreadcrumbContent,\r\n} from '@fluentui/react-breadcrumb';\r\nimport { MoreHorizontalRegular } from '@fluentui/react-icons';\r\n\r\nconst DefaultMaxDisplayedItems = 5;\r\nconst DefaultMaxLengthOfItem = 30;\r\n\r\nconst OverflowItemsMenu = ({\r\n overflowItems,\r\n onItemClick,\r\n}) => {\r\n const { ref, isOverflowing, overflowCount } = useOverflowMenu();\r\n // const tooltipStyles = useTooltipStyles();\r\n\r\n const overflowItemsCount = useMemo(() =>\r\n (overflowItems ? overflowItems.length + overflowCount : overflowCount\r\n ), [overflowItems, overflowCount]);\r\n\r\n if (!isOverflowing && overflowItems && overflowItems.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n }\r\n aria-label={`${overflowItemsCount} more items`}\r\n role=\"button\"\r\n />\r\n \r\n \r\n \r\n {\r\n overflowItems && overflowItems.map(item => (\r\n onItemClick(item)}>{item.text}\r\n ))\r\n }\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const AdsStudioBreadcrumb = ({\r\n items,\r\n onItemClick,\r\n maxDisplayedItems,\r\n maxLengthOfItem,\r\n customItemStyle,\r\n}) => {\r\n const {\r\n startDisplayedItems,\r\n overflowItems,\r\n endDisplayedItems,\r\n } = partitionBreadcrumbItems({\r\n items,\r\n maxDisplayedItems,\r\n });\r\n\r\n const lastIndex = useMemo(() => items.length - 1, [items]);\r\n\r\n const renderItem = useCallback((entry, isLastItem, onClick) => (\r\n \r\n {isTruncatableBreadcrumbContent(entry.text, maxLengthOfItem) ? (\r\n \r\n \r\n onClick(entry)}\r\n className={mergeClasses(customItemStyle.breadcrumbButton, isLastItem && customItemStyle.breadcrumbButtonCurrent)}\r\n >\r\n {truncateBreadcrumbLongName(entry.text, maxLengthOfItem)}\r\n \r\n \r\n \r\n ) : (\r\n \r\n onClick(entry)}\r\n className={mergeClasses(customItemStyle.breadcrumbButton, isLastItem && customItemStyle.breadcrumbButtonCurrent)}\r\n >{entry.text}\r\n \r\n \r\n )}\r\n\r\n {!isLastItem && }\r\n \r\n ), [customItemStyle, maxLengthOfItem]);\r\n\r\n return (\r\n \r\n {\r\n startDisplayedItems && startDisplayedItems.map((item, index) => renderItem(item, index === lastIndex, onItemClick))\r\n }\r\n {\r\n overflowItems &&\r\n \r\n }\r\n {\r\n endDisplayedItems && endDisplayedItems.map((item, index) => {\r\n const isLastItem = index + (items.length - endDisplayedItems.length) === lastIndex;\r\n return renderItem(item, isLastItem, onItemClick);\r\n })\r\n }\r\n \r\n );\r\n};\r\n\r\nAdsStudioBreadcrumb.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.shape({\r\n key: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n text: PropTypes.string,\r\n })).isRequired,\r\n onItemClick: PropTypes.func.isRequired,\r\n maxDisplayedItems: PropTypes.number,\r\n maxLengthOfItem: PropTypes.number,\r\n customItemStyle: PropTypes.shape({\r\n breadcrumbButton: PropTypes.string,\r\n breadcrumbButtonCurrent: PropTypes.string,\r\n }),\r\n};\r\n\r\nAdsStudioBreadcrumb.defaultProps = {\r\n maxDisplayedItems: DefaultMaxDisplayedItems,\r\n maxLengthOfItem: DefaultMaxLengthOfItem,\r\n customItemStyle: {},\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\n\r\nexport const useLibraryEmptyViewStyle = makeStyles({\r\n CardContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n ...shorthands.gap('8px'),\r\n ...shorthands.padding('8px', '0', '0', '0'),\r\n width: '700px',\r\n\r\n '& >button': {\r\n width: '340px',\r\n },\r\n },\r\n emptyView: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n ...shorthands.gap('8px'),\r\n },\r\n emptyIcon: {\r\n width: '256px',\r\n height: '256px',\r\n },\r\n mainText: {\r\n fontFamily: 'Segoe UI',\r\n fontStyle: 'normal',\r\n textAlign: 'center',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n color: tokens.neutralForegroundRest,\r\n lineHeight: '22px',\r\n fontWeight: 400,\r\n\r\n },\r\n});\r\n\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { getEntryCardData } from '../../model/utils';\r\nimport { AddAssetEntryCard } from '../add-asset-entry-card';\r\n\r\nimport { EmptyViewIcons } from '../../asset-images';\r\nimport { useLibraryEmptyViewStyle } from '../ads-studio-library-page-content/styles/empty-view-style';\r\n\r\nexport const LibraryEmptyView = ({\r\n i18n,\r\n isInSubfolder,\r\n isAnyFilterSet,\r\n onClickStock,\r\n onClickCreate,\r\n onClickUpload,\r\n onClickWebsite,\r\n onClickInvest,\r\n hideAddAssetCards,\r\n isXandrIntegrationEnabled,\r\n}) => {\r\n const cardData = getEntryCardData({\r\n i18n,\r\n onClickCreate,\r\n onClickUpload,\r\n onClickStock,\r\n onClickWebsite,\r\n onClickInvest,\r\n isXandrIntegrationEnabled,\r\n });\r\n\r\n const classes = useLibraryEmptyViewStyle();\r\n\r\n let str = i18n.getString(_TL_('You haven\\'t added any assets yet. Choose from the options below to add assets.'));\r\n if (isAnyFilterSet) {\r\n str = i18n.getString(_TL_('No assets match your search. Please try again.'));\r\n } else if (isInSubfolder) {\r\n str = i18n.getString(_TL_('You haven\\'t added any assets to this folder yet. Once you add assets, you\\'ll see them here.'));\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \"Empty\r\n
\r\n
\r\n {str}\r\n
\r\n {\r\n !hideAddAssetCards &&\r\n
\r\n {cardData.map(card => (\r\n \r\n ))}\r\n
\r\n }\r\n
\r\n );\r\n};\r\n\r\nLibraryEmptyView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isInSubfolder: PropTypes.bool,\r\n isAnyFilterSet: PropTypes.bool,\r\n onClickStock: PropTypes.func.isRequired,\r\n onClickCreate: PropTypes.func.isRequired,\r\n onClickUpload: PropTypes.func.isRequired,\r\n onClickWebsite: PropTypes.func.isRequired,\r\n onClickInvest: PropTypes.func.isRequired,\r\n hideAddAssetCards: PropTypes.bool,\r\n isXandrIntegrationEnabled: PropTypes.bool,\r\n};\r\n\r\nLibraryEmptyView.defaultProps = {\r\n isInSubfolder: false,\r\n isAnyFilterSet: false,\r\n hideAddAssetCards: false,\r\n isXandrIntegrationEnabled: false,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport {\r\n Menu,\r\n MenuButton,\r\n MenuItem,\r\n MenuList,\r\n MenuDivider,\r\n MenuPopover,\r\n MenuTrigger,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Add20Regular,\r\n ArrowUpload20Regular,\r\n ImageMultiple20Regular,\r\n FolderAdd20Regular,\r\n} from '@fluentui/react-icons';\r\nimport { SparkeSVGIcon } from '../../asset-images';\r\n\r\nconst AddFromAnotherSourceSubMenu = (props) => {\r\n const {\r\n i18n,\r\n onUploadImage,\r\n onUploadVideo,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n }>\r\n {i18n.getString(_TL_('Add from another source'))}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {i18n.getString(_TL_('Add image'))}\r\n \r\n \r\n {i18n.getString(_TL_('Add video'))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst UploadFromComputerSubMenu = (props) => {\r\n const {\r\n i18n,\r\n onUploadLocalFile,\r\n onUploadLocalFolder,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n }>\r\n {i18n.getString(_TL_('Upload from computer'))}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {i18n.getString(_TL_('Upload file'))}\r\n \r\n \r\n {i18n.getString(_TL_('Upload folder'))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const NewDropDown = (props) => {\r\n const {\r\n i18n,\r\n className,\r\n logger,\r\n onUploadLocalFileClick,\r\n onUploadLocalFolderClick,\r\n onUploadImageClick,\r\n onUploadVideoClick,\r\n onAIGenerateClick,\r\n onCreateFolderClick,\r\n handleUsage,\r\n } = props;\r\n\r\n const onUploadLocalFile = useCallback(() => {\r\n logger.logTrace('Add assets - file upload is clicked');\r\n onUploadLocalFileClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onUploadLocalFileClick]);\r\n\r\n const onUploadLocalFolder = useCallback(() => {\r\n logger.logTrace('Add assets - folder upload is clicked');\r\n onUploadLocalFolderClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onUploadLocalFolderClick]);\r\n\r\n const onUploadImage = useCallback(() => {\r\n logger.logTrace('Add assets - image source is clicked');\r\n onUploadImageClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onUploadImageClick]);\r\n\r\n const onUploadVideo = useCallback(() => {\r\n logger.logTrace('Add assets - video source is clicked');\r\n onUploadVideoClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onUploadVideoClick]);\r\n\r\n const onAIGenerate = useCallback(() => {\r\n logger.logTrace('Add assets - ai generate image clicked');\r\n onAIGenerateClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onAIGenerateClick]);\r\n\r\n const onCreateFolder = useCallback(() => {\r\n logger.logTrace('Create folder is clicked');\r\n onCreateFolderClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onCreateFolderClick]);\r\n\r\n return (\r\n
\r\n \r\n \r\n }>\r\n {i18n.getString(_TL_('New'))}\r\n \r\n \r\n\r\n \r\n \r\n } onClick={onAIGenerate}>\r\n {i18n.getString(_TL_('Generate images'))}\r\n \r\n \r\n \r\n \r\n } onClick={onCreateFolder}>\r\n {i18n.getString(_TL_('Create folder'))}\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n","import React, { useState, useRef, useCallback, useMemo, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n Button,\r\n MenuButton,\r\n MenuList,\r\n MenuDivider,\r\n makeStyles,\r\n tokens,\r\n Label,\r\n Input,\r\n useId,\r\n mergeClasses,\r\n Popover,\r\n PopoverTrigger,\r\n PopoverSurface,\r\n shorthands,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '180px',\r\n ...shorthands.padding('4px'),\r\n },\r\n menuButton: {\r\n // This is a known fluent ui issue between Popover and MenuButton: https://github.com/microsoft/fluentui/issues/31804\r\n // This bug has been fixed in the latest version, but as we use legacy version, update the style as a workaround.\r\n backgroundColor: 'transparent',\r\n '&[aria-expanded=\"true\"]': {\r\n backgroundColor: '#EBEBEB',\r\n },\r\n },\r\n unselectedMenuButton: {\r\n '&[aria-expanded=\"false\"]': {\r\n fontWeight: 'unset',\r\n },\r\n },\r\n enabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n },\r\n disabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForegroundDisabled,\r\n },\r\n});\r\n\r\nconst useCustomItemStyles = makeStyles({\r\n minWidth: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n maxWidth: '124px',\r\n },\r\n minHeight: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n marginBottom: '6px',\r\n maxWidth: '124px',\r\n },\r\n input: {\r\n paddingRight: '0px',\r\n height: '32px',\r\n lineHeight: '32px',\r\n overflowX: 'hidden',\r\n overflowY: 'hidden',\r\n },\r\n contentAfter: {\r\n backgroundColor: tokens.colorNeutralBackground3,\r\n paddingRight: '6px',\r\n paddingLeft: '8px',\r\n },\r\n contentLabel: {\r\n marginBottom: '6px',\r\n marginTop: '8px',\r\n },\r\n});\r\n\r\nexport const ImageSizeFilter = (props) => {\r\n const {\r\n i18n,\r\n defaultMinWidth,\r\n defaultMinHeight,\r\n onChange,\r\n forceClear,\r\n onDismiss,\r\n defaultOpen = false,\r\n } = props;\r\n\r\n const minWidthId = useId('minWidth');\r\n const afterMinWidthId = useId('afterMinWidthId');\r\n const minHeightId = useId('minHeight');\r\n const afterMinHeightId = useId('afterMinHeightId');\r\n const customClasses = useCustomItemStyles();\r\n\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(defaultOpen);\r\n const [showInput, setShowInput] = useState(defaultOpen);\r\n const [menuList, setMenuList] = useState(null);\r\n\r\n // use ref to handle focus switching when pressing tab key\r\n const minWidthRef = useRef(null);\r\n const minHeightRef = useRef(null);\r\n\r\n const [minWidth, setMinWidth] = useState(defaultMinWidth);\r\n const [minHeight, setMinHeight] = useState(defaultMinHeight);\r\n\r\n const getOnChangeCallback = useCallback(setter => (event, newValue) => {\r\n const val = parseInt(newValue, 10);\r\n if (_.isEmpty(newValue) || _.isNaN(val)) {\r\n setter(null);\r\n return;\r\n }\r\n if (!_.isNaN(val) && val >= 0 && val <= 1000000) {\r\n setter(val);\r\n }\r\n }, []);\r\n\r\n const onMinWidthChange = useMemo(\r\n () => getOnChangeCallback(setMinWidth),\r\n [getOnChangeCallback]\r\n );\r\n\r\n const onMinHeightChange = useMemo(\r\n () => getOnChangeCallback(setMinHeight),\r\n [getOnChangeCallback]\r\n );\r\n\r\n const onClear = useCallback(() => {\r\n setMinWidth(null);\r\n setMinHeight(null);\r\n if ((defaultMinHeight || defaultMinWidth)) {\r\n // trigger onchange only when dropdown list is closed\r\n onChange({ newMinHeight: null, newMinWidth: null });\r\n }\r\n if (onDismiss) {\r\n onDismiss();\r\n }\r\n }, [defaultMinHeight, defaultMinWidth, onChange, onDismiss]);\r\n\r\n const title = useMemo(() => {\r\n if (minWidth && minHeight) {\r\n return `> ${minWidth}px x ${minHeight}px`;\r\n }\r\n if (minWidth) {\r\n return `${i18n.getString(_TL_('Width'))} > ${minWidth}px`;\r\n }\r\n if (minHeight) {\r\n return `${i18n.getString(_TL_('Height'))} > ${minHeight}px`;\r\n }\r\n return '';\r\n }, [i18n, minHeight, minWidth]);\r\n\r\n const focusTextField = useCallback(textFieldRef => (event) => {\r\n if (event.key === 'Tab') {\r\n if (textFieldRef.current) {\r\n textFieldRef.current.focus();\r\n }\r\n if (event.stopPropagation) { event.stopPropagation(); }\r\n if (event.preventDefault) { event.preventDefault(); }\r\n }\r\n }, []);\r\n\r\n const onMinWidthKeyUp = useMemo(() => focusTextField(minHeightRef), [focusTextField]);\r\n const onMinHeightKeyUp = useMemo(() => focusTextField(minWidthRef), [focusTextField]);\r\n\r\n const onDropdownDismiss = useCallback(() => {\r\n if (defaultMinHeight !== minHeight || defaultMinWidth !== minWidth) {\r\n onChange({ newMinWidth: minWidth, newMinHeight: minHeight }, title);\r\n }\r\n }, [defaultMinHeight, defaultMinWidth, minHeight, minWidth, onChange, title]);\r\n\r\n const clear = () => {\r\n setIsOpen(false);\r\n onClear();\r\n };\r\n\r\n const isSelected = useMemo(() => minWidth || minHeight, [minHeight, minWidth]);\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n useEffect(() => {\r\n if (forceClear) {\r\n clear();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [forceClear]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n onDropdownDismiss();\r\n }\r\n }, [isOpen, onDropdownDismiss]);\r\n\r\n useEffect(() => {\r\n let timeoutId;\r\n if (isOpen) {\r\n timeoutId = setTimeout(() => {\r\n if (minWidthRef.current) {\r\n minWidthRef.current.focus();\r\n }\r\n }, 300);\r\n }\r\n setShowInput(isOpen);\r\n return () => {\r\n clearTimeout(timeoutId);\r\n };\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n if (menuList) {\r\n // as we are using custom input, we need to remove menu role for accessibility\r\n menuList.removeAttribute('role');\r\n }\r\n }, [menuList]);\r\n\r\n return (\r\n \r\n \r\n \r\n {isSelected ? title : i18n.getString(_TL_('Image ratio'))}\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n \r\n {\r\n // Add a condition to check if the input should be shown or not\r\n // By this way, screen reader can read the expanded state of Menu correctly\r\n showInput &&\r\n onMinWidthChange(ev, data.value)}\r\n contentAfter={\r\n
\r\n {i18n.getString(_TL_('px'))}\r\n
\r\n }\r\n aria-labelledby={`${minWidthId} ${afterMinWidthId}`}\r\n id={minWidthId}\r\n onKeyDown={onMinWidthKeyUp}\r\n />\r\n }\r\n
\r\n
\r\n \r\n {\r\n showInput &&\r\n onMinHeightChange(ev, data.value)}\r\n contentAfter={\r\n
\r\n {i18n.getString(_TL_('px'))}\r\n
\r\n }\r\n onKeyDown={onMinHeightKeyUp}\r\n aria-labelledby={`${minHeightId} ${afterMinHeightId}`}\r\n id={minHeightId}\r\n />\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n onClick={() => clear()}\r\n >\r\n {i18n.getString(_TL_('Clear'))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n","import classnames from 'classnames';\r\nimport React, { useCallback, useMemo, useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CivilDate } from 'tc39-proposal-temporal';\r\nimport { SingleMonthCalendar } from '@bingads-webui-react/single-month-calendar';\r\n\r\nimport { civilDateRangeEqual } from '../../../utils/date-utils';\r\n\r\n// this is a simple date range picker based on the Calendar control used in\r\n// Campaign UI (NOT Fluent UI Calendar)\r\n// the 'Compare' feature is not supported, so only one date range selection\r\n// is supported\r\nconst SimpleDateRangePickerInternal = ({\r\n defaultSelectedDateRange,\r\n // to select a date range, need to select 2 days (start & end) on calendars\r\n // this value control which value is currently selecting\r\n defaultIsSelectingStartDate,\r\n onDateRangeChange,\r\n timeZone,\r\n i18n,\r\n}) => {\r\n // use ref instead of state to avoid unnecessary rending\r\n const isSelectingStartDate = useRef(defaultIsSelectingStartDate);\r\n\r\n const [selectedDateRange, setSelectedDateRange]\r\n = useState(defaultSelectedDateRange);\r\n\r\n // the navigatedDate set on the left calendar, which control which month\r\n // is shown on the calendar\r\n const [leftNavigatedDate, setLeftNavigationDate] = useState(new CivilDate(\r\n defaultSelectedDateRange.end.year,\r\n defaultSelectedDateRange.end.month - 1,\r\n 15\r\n ));\r\n\r\n // the navigatedDate set on the right calendar\r\n const rightNavigatedDate = useMemo(\r\n () => new CivilDate(leftNavigatedDate.year, leftNavigatedDate.month + 1, 15),\r\n [leftNavigatedDate]\r\n );\r\n\r\n const today = useMemo(() => {\r\n const todayObj = i18n.getToday({ timeZone });\r\n return new CivilDate(todayObj.year, todayObj.month, todayObj.day);\r\n }, [i18n, timeZone]);\r\n\r\n // for now, use the default values here\r\n const minDate = useMemo(() => today.plus({ years: -3 }), [today]);\r\n const maxDate = today;\r\n\r\n // 'Compare' is not supported, so only one range is used\r\n const selectedRanges = useMemo(() => [selectedDateRange], [selectedDateRange]);\r\n\r\n // click '<' button on the left calendar\r\n const onNavigateStartMonthDate = useCallback((date) => {\r\n setLeftNavigationDate(date);\r\n }, []);\r\n\r\n // click '>' button on the right calendar\r\n const onNavigateEndMonthDate = useCallback((date) => {\r\n setLeftNavigationDate(date.plus({ months: -1 }));\r\n }, []);\r\n\r\n const onSelectDate = useCallback((newDate) => {\r\n let { start, end } = selectedDateRange || {};\r\n if (isSelectingStartDate.current) {\r\n start = newDate;\r\n end = end > newDate ? end : newDate;\r\n } else {\r\n end = newDate;\r\n }\r\n if (start > end) {\r\n setSelectedDateRange({ start: end, end: start });\r\n } else {\r\n setSelectedDateRange({ start, end });\r\n }\r\n isSelectingStartDate.current = !isSelectingStartDate.current;\r\n }, [selectedDateRange]);\r\n\r\n useEffect(() => {\r\n if (!civilDateRangeEqual(selectedDateRange, defaultSelectedDateRange) && onDateRangeChange) {\r\n onDateRangeChange(selectedDateRange);\r\n }\r\n }, [onDateRangeChange, selectedDateRange, defaultSelectedDateRange]);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nSimpleDateRangePickerInternal.propTypes = {\r\n defaultSelectedDateRange: PropTypes.shape({\r\n start: PropTypes.instanceOf(CivilDate),\r\n end: PropTypes.instanceOf(CivilDate),\r\n }).isRequired,\r\n defaultIsSelectingStartDate: PropTypes.bool,\r\n onDateRangeChange: PropTypes.func,\r\n timeZone: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n getToday: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nSimpleDateRangePickerInternal.defaultProps = {\r\n defaultIsSelectingStartDate: true,\r\n onDateRangeChange: undefined,\r\n};\r\n\r\nexport const SimpleDateRangePicker = SimpleDateRangePickerInternal;\r\n","import React, { useState, useMemo, useCallback, useRef, useEffect } from 'react';\r\nimport {\r\n Menu,\r\n Button,\r\n MenuButton,\r\n MenuList,\r\n MenuDivider,\r\n MenuPopover,\r\n MenuTrigger,\r\n MenuItemRadio,\r\n makeStyles,\r\n tokens,\r\n shorthands,\r\n Label,\r\n Input,\r\n useId,\r\n mergeClasses,\r\n Popover,\r\n PopoverTrigger,\r\n PopoverSurface,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n ChevronRight20Filled,\r\n ChevronRight20Regular,\r\n CalendarLtr20Regular,\r\n bundleIcon,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n SimpleDateRangePicker,\r\n} from './simple-date-range-picker';\r\nimport {\r\n CSMLTimeFrame,\r\n} from '../../model';\r\nimport {\r\n civilDateRangeEqual,\r\n} from '../../utils';\r\n\r\n\r\nconst ChevronRightIcon = bundleIcon(ChevronRight20Filled, ChevronRight20Regular);\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '240px',\r\n ...shorthands.padding('4px'),\r\n },\r\n menuButton: {\r\n // This is a known fluent ui issue between Popover and MenuButton: https://github.com/microsoft/fluentui/issues/31804\r\n // This bug has been fixed in the latest version, but as we use legacy version, update the style as a workaround.\r\n backgroundColor: 'transparent',\r\n '&[aria-expanded=\"true\"]': {\r\n backgroundColor: '#EBEBEB',\r\n },\r\n },\r\n unselectedMenuButton: {\r\n '&[aria-expanded=\"false\"]': {\r\n fontWeight: 'unset',\r\n },\r\n },\r\n enabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n },\r\n disabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForegroundDisabled,\r\n },\r\n});\r\n\r\nconst useCustomItemStyles = makeStyles({\r\n menuPopover: {\r\n maxWidth: 'unset',\r\n '& .compared-date-range-picker-dialog': {\r\n top: 'auto !important',\r\n left: 'auto !important',\r\n right: 'auto !important',\r\n width: 'auto !important',\r\n height: 'auto !important',\r\n paddingLeft: '14px',\r\n paddingRight: '14px',\r\n paddingTop: '14px',\r\n position: 'relative',\r\n boxShadow: 'none',\r\n ...shorthands.border('0px', 'none'),\r\n },\r\n },\r\n item: {\r\n '& .fui-MenuItem__content': {\r\n display: 'flex',\r\n paddingRight: '0px',\r\n },\r\n },\r\n text: {\r\n flexGrow: '1',\r\n },\r\n icon: {\r\n },\r\n startDate: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n maxWidth: '160px',\r\n },\r\n endDate: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n marginBottom: '6px',\r\n maxWidth: '160px',\r\n },\r\n input: {\r\n paddingRight: '0px',\r\n height: '32px',\r\n lineHeight: '32px',\r\n overflowX: 'hidden',\r\n overflowY: 'hidden',\r\n },\r\n contentAfter: {\r\n paddingRight: '6px',\r\n paddingLeft: '8px',\r\n '& svg': {\r\n display: 'block',\r\n },\r\n },\r\n contentLabel: {\r\n marginBottom: '6px',\r\n marginTop: '8px',\r\n },\r\n});\r\n\r\nconst CustomItem = (props) => {\r\n const {\r\n i18n,\r\n isCustomSelected,\r\n timeZone,\r\n customDateRange,\r\n setCustomDateRange,\r\n customRangeStartStr,\r\n customRangeEndStr,\r\n name,\r\n customOption,\r\n } = props;\r\n\r\n const classes = useCustomItemStyles();\r\n const menuItemRef = useRef(null);\r\n const startDateId = useId('startDate');\r\n const afterStartDateId = useId('afterStartDateId');\r\n const startDateRef = useRef(null);\r\n const endDateId = useId('endDate');\r\n const afterEndDateId = useId('afterEndDateId');\r\n const [isDatePickerOpen, setIsDatePickerOpen] = useState(false);\r\n const isOpen = useMemo(() => isDatePickerOpen && isCustomSelected, [isDatePickerOpen, isCustomSelected]);\r\n const onOpenChange = (e, data) => {\r\n setIsDatePickerOpen(data.open);\r\n };\r\n\r\n // date range picker related handling\r\n // selecting 'start' or 'end' on date range picker\r\n const isSelectingStartDate = useRef(true);\r\n\r\n const onSelectedDateRangeChange = useCallback((newRange) => {\r\n setCustomDateRange(newRange);\r\n }, [setCustomDateRange]);\r\n\r\n const openDatePickerForStart = useCallback(() => {\r\n setIsDatePickerOpen(true);\r\n isSelectingStartDate.current = true;\r\n }, []);\r\n\r\n const openDatePickerForEnd = useCallback(() => {\r\n setIsDatePickerOpen(true);\r\n isSelectingStartDate.current = false;\r\n }, []);\r\n\r\n const onStartKeyDown = useCallback((event) => {\r\n if (event.code === 'Enter') {\r\n openDatePickerForStart();\r\n event.preventDefault();\r\n } else if (event.code === 'ArrowUp') {\r\n if (menuItemRef.current) {\r\n menuItemRef.current.focus();\r\n event.preventDefault();\r\n }\r\n }\r\n }, [openDatePickerForStart]);\r\n\r\n const onEndKeyDown = useCallback((event) => {\r\n if (event.code === 'Enter') {\r\n openDatePickerForEnd();\r\n event.preventDefault();\r\n } else if (event.code === 'ArrowUp') {\r\n if (startDateRef.current) {\r\n startDateRef.current.focus();\r\n event.preventDefault();\r\n }\r\n }\r\n }, [openDatePickerForEnd]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {customOption.text}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {isCustomSelected && (\r\n
\r\n
\r\n \r\n openDatePickerForStart()}\r\n onKeyDown={onStartKeyDown}\r\n readOnly\r\n contentAfter={\r\n
\r\n \r\n
\r\n }\r\n value={customRangeStartStr}\r\n aria-labelledby={`${startDateId} ${afterStartDateId}`}\r\n id={startDateId}\r\n />\r\n
\r\n
\r\n \r\n openDatePickerForEnd()}\r\n onKeyDown={onEndKeyDown}\r\n readOnly\r\n contentAfter={\r\n
\r\n \r\n
\r\n }\r\n value={customRangeEndStr}\r\n aria-labelledby={`${endDateId} ${afterEndDateId}`}\r\n id={endDateId}\r\n />\r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport const DateAddedFilter = (props) => {\r\n const {\r\n i18n,\r\n dateFormat,\r\n timeZone,\r\n defaultTimeFrame,\r\n defaultCustomDateRange,\r\n options,\r\n onChange,\r\n forceClear,\r\n onDismiss,\r\n defaultOpen = false,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n const name = 'date';\r\n const [checkedValues, setCheckedValues] = useState({\r\n [name]: [defaultTimeFrame],\r\n });\r\n const isCustomSelected = useMemo(() => checkedValues[name].includes(CSMLTimeFrame.Custom), [checkedValues]);\r\n const customOption = useMemo(() => options.find(option => option.key === CSMLTimeFrame.Custom), [options]);\r\n const optionsWithoutCustom = useMemo(() => options.filter(option => option.key !== CSMLTimeFrame.Custom), [options]);\r\n // date range user selected for 'Custom'\r\n const [customDateRange, setCustomDateRange] = useState(defaultCustomDateRange);\r\n\r\n // dropdown related handling\r\n const formatDate = useCallback(\r\n date => i18n.formatCivilDate(date, { raw: dateFormat, timeZone }),\r\n [dateFormat, i18n, timeZone]\r\n );\r\n\r\n const customRangeStartStr = useMemo(\r\n () => formatDate(customDateRange.start),\r\n [formatDate, customDateRange.start]\r\n );\r\n\r\n const customRangeEndStr = useMemo(\r\n () => formatDate(customDateRange.end),\r\n [formatDate, customDateRange.end]\r\n );\r\n\r\n const selectedChoice = useMemo(\r\n () => options.find(r => r.key === checkedValues[name][0]),\r\n [checkedValues, options]\r\n );\r\n\r\n // the string shown on dropdown title\r\n const dropdownTitle = useMemo(() => {\r\n if (!selectedChoice) {\r\n return null;\r\n }\r\n if (selectedChoice.key === CSMLTimeFrame.Custom) {\r\n return `${customRangeStartStr} - ${customRangeEndStr}`;\r\n }\r\n return selectedChoice.text;\r\n }, [customRangeEndStr, customRangeStartStr, selectedChoice]);\r\n\r\n // when the X button on dropdown title is clicked\r\n const onDropdownClear = useCallback(() => {\r\n if (onChange && defaultTimeFrame !== CSMLTimeFrame.Anytime) {\r\n onChange({ timeframe: CSMLTimeFrame.Anytime, customDateRange });\r\n }\r\n if (onDismiss) {\r\n onDismiss();\r\n }\r\n }, [customDateRange, defaultTimeFrame, onChange, onDismiss]);\r\n\r\n // when dropdown list is dismissed\r\n const onDropdownDismiss = useCallback(() => {\r\n const timeframe = checkedValues[name][0];\r\n if (timeframe && onChange) {\r\n if (defaultTimeFrame !== timeframe\r\n || !civilDateRangeEqual(defaultCustomDateRange, customDateRange)) {\r\n onChange({ timeframe, customDateRange }, dropdownTitle);\r\n }\r\n }\r\n }, [checkedValues, customDateRange, defaultCustomDateRange, defaultTimeFrame, dropdownTitle, onChange]);\r\n\r\n const [isOpen, setIsOpen] = useState(defaultOpen);\r\n const clear = useCallback(() => {\r\n setIsOpen(false);\r\n setCheckedValues(() => ({\r\n [name]: [],\r\n }));\r\n onDropdownClear();\r\n }, [onDropdownClear]);\r\n\r\n const onCheckedValueChange = (e, data) => {\r\n const {\r\n checkedItems,\r\n } = data;\r\n setCheckedValues(s => ({\r\n ...s,\r\n [name]: checkedItems,\r\n }));\r\n if (checkedItems && checkedItems.length > 0 && checkedItems[0] !== CSMLTimeFrame.Custom) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n const isSelected = useMemo(() => checkedValues[name].length > 0 && checkedValues[name][0] !== CSMLTimeFrame.Anytime, [checkedValues]);\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n useEffect(() => {\r\n if (forceClear) {\r\n clear();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [forceClear]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n onDropdownDismiss();\r\n }\r\n }, [isOpen, onDropdownDismiss]);\r\n\r\n return (\r\n \r\n \r\n \r\n {isSelected ? dropdownTitle : i18n.getString(_TL_('Date added'))}\r\n \r\n \r\n\r\n \r\n \r\n {optionsWithoutCustom.map(option => (\r\n \r\n {option.text}\r\n \r\n ))}\r\n {customOption &&\r\n }\r\n \r\n \r\n
\r\n }\r\n onClick={() => clear()}\r\n >\r\n {i18n.getString(_TL_('Clear'))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n","import React from 'react';\r\nimport { SearchBox } from '@fluentui/react-search';\r\nimport {\r\n makeStyles,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n searchBox: {\r\n minWidth: '300px',\r\n '& input[type=\"search\"]': {\r\n backgroundImage: 'none',\r\n backgroundSize: 'unset',\r\n paddingLeft: '4px',\r\n },\r\n '& input[type=\"search\"]::placeholder ': {\r\n color: '#707070',\r\n },\r\n },\r\n});\r\n\r\nexport const SearchBoxFilter = (props) => {\r\n const {\r\n i18n,\r\n className,\r\n onSearchTextChanging,\r\n onSearchTextChange,\r\n onSearchTextBlur,\r\n onSearchTextClear,\r\n defaultSearchText,\r\n searchboxPlaceHolder,\r\n autoFocus,\r\n ariaLabel,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n {\r\n if (data.value === '' && e.type === 'click') {\r\n onSearchTextClear(data);\r\n } else {\r\n onSearchTextChanging(e, data.value);\r\n }\r\n }}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n onSearchTextChange(e.target.value);\r\n }\r\n }}\r\n onBlur={() => {\r\n onSearchTextBlur();\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport {\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n} from '@fluentui/react-components';\r\nimport { ToggleButtons } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\n\r\nconst useStyles = makeStyles({\r\n toggleButton: {\r\n minWidth: 'unset',\r\n fontWeight: 'unset',\r\n },\r\n toggleButtons: {\r\n display: 'flex',\r\n columnGap: '8px',\r\n },\r\n selectedButton: {\r\n minWidth: 'unset',\r\n backgroundColor: '#EBF3FC',\r\n ...shorthands.border('1px', 'solid', '#B4D6FA'),\r\n color: '#115EA3',\r\n },\r\n});\r\n\r\nexport const AssetTypeToggleButtonsFilter = (props) => {\r\n const {\r\n className,\r\n options,\r\n optionsState,\r\n toggleSelectedOption,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n","import React, { useState, useMemo, useEffect } from 'react';\r\nimport {\r\n Menu,\r\n MenuButton,\r\n MenuList,\r\n MenuPopover,\r\n MenuTrigger,\r\n MenuItemRadio,\r\n makeStyles,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n ArrowSort20Regular,\r\n ArrowSortUp20Regular,\r\n ArrowSortDown20Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n CSMLSortIcon,\r\n CSMLSortBy,\r\n} from '../../model';\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '180px',\r\n },\r\n item: {\r\n '& .fui-MenuItem__content': {\r\n display: 'flex',\r\n },\r\n },\r\n});\r\n\r\nexport const SortByFilter = (props) => {\r\n const {\r\n className,\r\n options,\r\n sortBy,\r\n onChange,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n const name = 'sortBy';\r\n const [checkedValues, setCheckedValues] = useState({\r\n [name]: [sortBy || CSMLSortBy.MostRecent],\r\n });\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const onCheckedValueChange = (e, data) => {\r\n const {\r\n checkedItems,\r\n } = data;\r\n setCheckedValues(s => ({\r\n ...s,\r\n [name]: checkedItems,\r\n }));\r\n onChange(e, {\r\n key: checkedItems[0],\r\n });\r\n };\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n const selectedOptionMemo = useMemo(() => {\r\n const selectedOption = options.find(option => option.key === checkedValues[name][0]);\r\n return selectedOption ?\r\n <>\r\n {selectedOption.text}\r\n {selectedOption.icon && selectedOption.icon === CSMLSortIcon.SortUp && }\r\n {selectedOption.icon && selectedOption.icon === CSMLSortIcon.SortDown && }\r\n : '';\r\n }, [checkedValues, options]);\r\n\r\n // As, this could be modified by the parent component, we need to update the checkedValues\r\n useEffect(() => {\r\n if (sortBy === checkedValues[name][0]) {\r\n return;\r\n }\r\n if (sortBy == null) {\r\n return;\r\n }\r\n setCheckedValues({\r\n [name]: [sortBy],\r\n });\r\n }, [checkedValues, sortBy]);\r\n\r\n return (\r\n
\r\n \r\n \r\n }>\r\n {selectedOptionMemo}\r\n \r\n \r\n\r\n \r\n \r\n {\r\n options.map((option, index) => (\r\n \r\n {option.text}\r\n {option.icon && option.icon === CSMLSortIcon.SortUp && }\r\n {option.icon && option.icon === CSMLSortIcon.SortDown && }\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\n","import React, { useState, useCallback, useMemo, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n Menu,\r\n Button,\r\n MenuButton,\r\n MenuList,\r\n MenuDivider,\r\n MenuPopover,\r\n MenuTrigger,\r\n makeStyles,\r\n tokens,\r\n Checkbox,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '180px',\r\n },\r\n unselectedMenuButton: {\r\n '&[aria-expanded=\"false\"]': {\r\n fontWeight: 'unset',\r\n },\r\n },\r\n enabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n },\r\n disabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForegroundDisabled,\r\n },\r\n checkbox: {\r\n '& label': {\r\n paddingLeft: '0px',\r\n fontWeight: 'unset',\r\n },\r\n },\r\n});\r\n\r\nexport const AssetSourceFilter = (props) => {\r\n const {\r\n i18n,\r\n defaultSelectedAssetSources,\r\n options,\r\n onChange,\r\n forceClear,\r\n onDismiss,\r\n defaultOpen = false,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n const [selectedAssetSources, setSelectedAssetSources] = useState(defaultSelectedAssetSources);\r\n const [isOpen, setIsOpen] = useState(defaultOpen);\r\n\r\n const selectedOptions = useMemo(\r\n () => _.filter(options, ({ key }) => _.contains(selectedAssetSources, key)) || [],\r\n [selectedAssetSources, options]\r\n );\r\n\r\n const onChangeCallback = useCallback((key, checked) => {\r\n const selectedSources = checked ? _.sortBy([...selectedAssetSources, key]) : _.without(selectedAssetSources, key);\r\n setSelectedAssetSources(selectedSources || []);\r\n }, [selectedAssetSources]);\r\n\r\n // the string shown on dropdown title\r\n const dropdownTitle = useMemo(() => {\r\n if (_.isEmpty(selectedOptions)) return null;\r\n const title = _.uniq(selectedOptions.map(({ text }) => text)).join('; ');\r\n return title;\r\n }, [selectedOptions]);\r\n\r\n const isSelected = useMemo(() => !_.isEmpty(selectedAssetSources), [selectedAssetSources]);\r\n\r\n // when the X button on dropdown title is clicked\r\n const onDropdownClear = useCallback(() => {\r\n setSelectedAssetSources([]);\r\n if (onChange && !_.isEmpty(defaultSelectedAssetSources)) {\r\n onChange([]);\r\n }\r\n if (onDismiss) {\r\n onDismiss();\r\n }\r\n }, [defaultSelectedAssetSources, onChange, onDismiss]);\r\n\r\n // when dropdown list is dismissed\r\n const onDropdownDismiss = useCallback(() => {\r\n if (onChange && !_.isEqual(defaultSelectedAssetSources, selectedAssetSources)) {\r\n onChange(selectedAssetSources, dropdownTitle);\r\n }\r\n }, [defaultSelectedAssetSources, dropdownTitle, selectedAssetSources, onChange]);\r\n\r\n const clear = () => {\r\n setIsOpen(false);\r\n onDropdownClear();\r\n };\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n useEffect(() => {\r\n if (forceClear) {\r\n clear();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [forceClear]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n onDropdownDismiss();\r\n }\r\n }, [isOpen, onDropdownDismiss]);\r\n\r\n return (\r\n \r\n \r\n \r\n {dropdownTitle || i18n.getString(_TL_('Source'))}\r\n \r\n \r\n\r\n \r\n \r\n
\r\n {options.map(option => (\r\n
\r\n onChangeCallback(option.key, data.checked)}\r\n />\r\n
\r\n ))}\r\n
\r\n \r\n
\r\n }\r\n onClick={() => clear()}\r\n >\r\n {i18n.getString(_TL_('Clear'))}\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n","import React, { useMemo, useEffect, useState, useRef, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n Button,\r\n MenuButton,\r\n MenuList,\r\n MenuDivider,\r\n Popover,\r\n PopoverSurface,\r\n PopoverTrigger,\r\n makeStyles,\r\n shorthands,\r\n tokens,\r\n Label,\r\n Input,\r\n useId,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '180px',\r\n ...shorthands.padding('4px'),\r\n },\r\n menuButton: {\r\n // This is a known fluent ui issue between Popover and MenuButton: https://github.com/microsoft/fluentui/issues/31804\r\n // This bug has been fixed in the latest version, but as we use legacy version, update the style as a workaround.\r\n backgroundColor: 'transparent',\r\n '&[aria-expanded=\"true\"]': {\r\n backgroundColor: '#EBEBEB',\r\n },\r\n },\r\n unselectedMenuButton: {\r\n '&[aria-expanded=\"false\"]': {\r\n fontWeight: 'unset',\r\n },\r\n },\r\n enabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n },\r\n disabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForegroundDisabled,\r\n },\r\n});\r\n\r\nconst useCustomItemStyles = makeStyles({\r\n minDuration: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n maxWidth: '124px',\r\n },\r\n customDuration: {\r\n '& .invalidInput': {\r\n '&:focus-within': {\r\n '::after': {\r\n ...shorthands.borderBottom('2px', 'solid', 'rgb(164, 38, 44)'),\r\n },\r\n },\r\n ...shorthands.borderBottom('1px', 'solid', 'rgb(164, 38, 44)'),\r\n },\r\n },\r\n maxDuration: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n marginBottom: '6px',\r\n maxWidth: '124px',\r\n },\r\n input: {\r\n paddingRight: '0px',\r\n height: '32px',\r\n lineHeight: '32px',\r\n overflowX: 'hidden',\r\n overflowY: 'hidden',\r\n },\r\n contentAfter: {\r\n backgroundColor: tokens.colorNeutralBackground3,\r\n paddingRight: '6px',\r\n paddingLeft: '8px',\r\n },\r\n contentLabel: {\r\n marginBottom: '6px',\r\n marginTop: '8px',\r\n },\r\n});\r\n\r\nexport const VideoDurationFilter = (props) => {\r\n const {\r\n i18n,\r\n defaultMaxDuration,\r\n defaultMinDuration,\r\n onChange,\r\n forceClear,\r\n } = props;\r\n\r\n const minDurationId = useId('minDuration');\r\n const afterMinDurationId = useId('afterMinDurationId');\r\n const maxDurationId = useId('maxDuration');\r\n const afterMaxDurationId = useId('afterMaxDurationId');\r\n const customClasses = useCustomItemStyles();\r\n const classes = useStyles();\r\n\r\n // use ref to handle focus switching when pressing tab key\r\n const minDurationRef = useRef(null);\r\n const maxDurationRef = useRef(null);\r\n\r\n const [minDuration, setMinDuration] = useState(defaultMinDuration);\r\n const [maxDuration, setMaxDuration] = useState(defaultMaxDuration);\r\n\r\n const [minDurationInvalid, setMinDurationInvalid] = useState(false);\r\n const [maxDurationInvalid, setMaxDurationInvalid] = useState(false);\r\n\r\n const onChangeCallback = useCallback((setter, newValue) => {\r\n const val = parseInt(newValue, 10);\r\n if (_.isEmpty(newValue) || _.isNaN(val)) {\r\n setter(null);\r\n return;\r\n }\r\n if (!_.isNaN(val) && val >= 0 && val <= 1000000) {\r\n setter(val);\r\n }\r\n }, []);\r\n\r\n const onMinDurationChange = useCallback((event, newValue) => {\r\n onChangeCallback(setMinDuration, newValue);\r\n if (_.isEmpty(newValue) || maxDuration > newValue) {\r\n setMinDurationInvalid(false);\r\n setMaxDurationInvalid(false);\r\n } else if ((maxDuration && newValue >= maxDuration)) {\r\n setMinDurationInvalid(true);\r\n } else {\r\n setMinDurationInvalid(false);\r\n }\r\n }, [maxDuration, onChangeCallback]);\r\n\r\n const onMaxDurationChange = useCallback((event, newValue) => {\r\n onChangeCallback(setMaxDuration, newValue);\r\n if (_.isEmpty(newValue) || newValue > minDuration) {\r\n setMinDurationInvalid(false);\r\n setMaxDurationInvalid(false);\r\n } else if (newValue <= minDuration) {\r\n setMaxDurationInvalid(true);\r\n } else {\r\n setMaxDurationInvalid(false);\r\n }\r\n }, [onChangeCallback, minDuration]);\r\n\r\n const onClear = useCallback(() => {\r\n setMinDuration(null);\r\n setMaxDuration(null);\r\n if (!(defaultMinDuration || defaultMaxDuration)) {\r\n // trigger onchange only when dropdown list is closed\r\n onChange({ newMinDuration: null, newMaxDuration: null });\r\n }\r\n if (minDurationRef.current) {\r\n minDurationRef.current.focus();\r\n }\r\n }, [defaultMinDuration, defaultMaxDuration, onChange]);\r\n\r\n const title = useMemo(() => {\r\n if (minDuration && maxDuration && !minDurationInvalid && !maxDurationInvalid) {\r\n return `${minDuration}s < ${i18n.getString(_TL_('Duration'))} < ${maxDuration}s`;\r\n }\r\n if (minDuration && !minDurationInvalid) {\r\n return `${i18n.getString(_TL_('Duration'))} > ${minDuration}s`;\r\n }\r\n if (maxDuration && !maxDurationInvalid) {\r\n return `${i18n.getString(_TL_('Duration'))} < ${maxDuration}s`;\r\n }\r\n return '';\r\n }, [minDuration, maxDuration, minDurationInvalid, maxDurationInvalid, i18n]);\r\n\r\n const focusTextField = useCallback(textFieldRef => (event) => {\r\n if (event.key === 'Tab') {\r\n if (textFieldRef.current) {\r\n textFieldRef.current.focus();\r\n }\r\n if (event.stopPropagation) { event.stopPropagation(); }\r\n if (event.preventDefault) { event.preventDefault(); }\r\n }\r\n }, []);\r\n\r\n const onMinDurationKeyUp = useMemo(() => focusTextField(maxDurationRef), [focusTextField]);\r\n const onMaxDurationKeyUp = useMemo(() => focusTextField(minDurationRef), [focusTextField]);\r\n\r\n const onDropdownDismiss = useCallback(() => {\r\n if (defaultMinDuration !== minDuration || defaultMaxDuration !== maxDuration) {\r\n onChange({ newMinDuration: minDurationInvalid ? null : minDuration, newMaxDuration: maxDurationInvalid ? null : maxDuration });\r\n }\r\n }, [defaultMinDuration, minDuration, defaultMaxDuration, maxDuration, onChange, minDurationInvalid, maxDurationInvalid]);\r\n\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [menuList, setMenuList] = useState(null);\r\n\r\n const isSelected = useMemo(() => minDuration || maxDuration, [minDuration, maxDuration]);\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n const clear = () => {\r\n setIsOpen(false);\r\n onClear();\r\n };\r\n\r\n useEffect(() => {\r\n if (forceClear) {\r\n clear();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [forceClear]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n onDropdownDismiss();\r\n }\r\n }, [isOpen, onDropdownDismiss]);\r\n\r\n useEffect(() => {\r\n if (menuList) {\r\n // as we are using custom input, we need to remove menu role for accessibility\r\n menuList.removeAttribute('role');\r\n }\r\n }, [menuList]);\r\n\r\n return (\r\n \r\n \r\n \r\n {isSelected ? title : i18n.getString(_TL_('Video duration'))}\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n \r\n onMinDurationChange(ev, data.value)}\r\n contentAfter={\r\n
\r\n {i18n.getString(_TL_('s'))}\r\n
\r\n }\r\n aria-labelledby={`${minDurationId} ${afterMinDurationId}`}\r\n id={minDurationId}\r\n onKeyDown={onMinDurationKeyUp}\r\n />\r\n
\r\n
\r\n \r\n onMaxDurationChange(ev, data.value)}\r\n contentAfter={\r\n
\r\n {i18n.getString(_TL_('s'))}\r\n
\r\n }\r\n aria-labelledby={`${maxDurationId} ${afterMaxDurationId}`}\r\n id={maxDurationId}\r\n onKeyDown={onMaxDurationKeyUp}\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n onClick={() => clear()}\r\n >\r\n {i18n.getString(_TL_('Clear'))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n","import React, { useState, useMemo, useCallback, useEffect } from 'react';\r\nimport {\r\n Menu,\r\n MenuButton,\r\n MenuList,\r\n MenuPopover,\r\n Button,\r\n MenuTrigger,\r\n MenuItemRadio,\r\n makeStyles,\r\n MenuDivider,\r\n tokens,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '180px',\r\n },\r\n unselectedMenuButton: {\r\n '&[aria-expanded=\"false\"]': {\r\n fontWeight: 'unset',\r\n },\r\n },\r\n enabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n },\r\n disabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForegroundDisabled,\r\n },\r\n});\r\n\r\nexport const ImportSourceFilter = (props) => {\r\n const {\r\n className,\r\n options,\r\n defaultImportSource,\r\n onChange,\r\n forceClear,\r\n i18n,\r\n onDismiss,\r\n defaultOpen = false,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n const name = 'importSource';\r\n const [checkedValues, setCheckedValues] = useState({\r\n [name]: [defaultImportSource],\r\n });\r\n const [isOpen, setIsOpen] = useState(defaultOpen);\r\n\r\n const onCheckedValueChange = (e, data) => {\r\n const {\r\n checkedItems,\r\n } = data;\r\n setCheckedValues(s => ({\r\n ...s,\r\n [name]: checkedItems,\r\n }));\r\n };\r\n\r\n const selectedChoice = useMemo(\r\n () => options.find(r => r.key === checkedValues[name][0]),\r\n [checkedValues, options]\r\n );\r\n\r\n // the string shown on dropdown title\r\n const dropdownTitle = selectedChoice ? selectedChoice.title : null;\r\n\r\n // when the X button on dropdown title is clicked\r\n const onDropdownClear = useCallback(() => {\r\n if (onChange && defaultImportSource !== null) {\r\n onChange(null);\r\n }\r\n }, [defaultImportSource, onChange]);\r\n\r\n // when dropdown list is dismissed\r\n const onDropdownDismiss = useCallback(() => {\r\n const importSource = checkedValues[name][0];\r\n if (importSource && onChange && defaultImportSource !== importSource) {\r\n onChange(importSource);\r\n }\r\n }, [checkedValues, defaultImportSource, onChange]);\r\n\r\n const isSelected = checkedValues[name][0] != null;\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n const clear = useCallback(() => {\r\n setIsOpen(false);\r\n setCheckedValues(() => ({\r\n [name]: [],\r\n }));\r\n onDropdownClear();\r\n if (onDismiss) {\r\n onDismiss();\r\n }\r\n }, [onDropdownClear, onDismiss]);\r\n\r\n useEffect(() => {\r\n if (forceClear) {\r\n clear();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [forceClear]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n onDropdownDismiss();\r\n }\r\n }, [isOpen, onDropdownDismiss]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {isSelected ? dropdownTitle : i18n.getString(_TL_('Import source'))}\r\n \r\n \r\n\r\n \r\n \r\n {\r\n options.map(option => (\r\n \r\n {option.text}\r\n \r\n ))\r\n }\r\n \r\n
\r\n }\r\n onClick={() => clear()}\r\n >\r\n {i18n.getString(_TL_('Clear'))}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n","/* eslint-disable jsx-a11y/click-events-have-key-events */\r\n/* eslint-disable jsx-a11y/interactive-supports-focus */\r\nimport React, { useRef, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useId, makeStyles, mergeClasses, tokens, shorthands } from '@fluentui/react-components';\r\n\r\n\r\nconst thumbSizeVar = '--thumb-size';\r\nconst railSizeVar = '--rail-size';\r\nconst railColorVar = '--rail-color';\r\nconst progressColorVar = '--progress-color';\r\nconst thumbColorVar = '--thumb-color';\r\n\r\nexport const sliderCSSVars = {\r\n sliderMinProgressVar: '--slider-min-progress',\r\n sliderMaxProgressVar: '--slider-max-progress',\r\n};\r\n\r\nconst {\r\n sliderMinProgressVar,\r\n sliderMaxProgressVar,\r\n} = sliderCSSVars;\r\n\r\nconst useStyles = makeStyles({\r\n videoDuration: {\r\n position: 'relative',\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'left',\r\n },\r\n videoDurationScrollbar: {\r\n position: 'relative',\r\n display: 'inline-grid',\r\n touchAction: 'none',\r\n alignItems: 'center',\r\n justifyItems: 'center',\r\n minWidth: '240px',\r\n // 3x3 grid with the rail and thumb in the center cell [2,2] and the hidden input stretching across all cells\r\n gridTemplateRows: `1fr var(${thumbSizeVar}) 1fr`,\r\n gridTemplateColumns: `1fr calc(100% - var(${thumbSizeVar})) 1fr`,\r\n [thumbSizeVar]: '20px',\r\n [railSizeVar]: '4px',\r\n minHeight: '32px',\r\n marginRight: '8px',\r\n },\r\n colors: {\r\n [railColorVar]: tokens.colorNeutralStrokeAccessible,\r\n [progressColorVar]: tokens.colorCompoundBrandBackground,\r\n [thumbColorVar]: tokens.colorCompoundBrandBackground,\r\n ':hover': {\r\n [thumbColorVar]: tokens.colorCompoundBrandBackgroundHover,\r\n [progressColorVar]: tokens.colorCompoundBrandBackgroundHover,\r\n },\r\n ':active': {\r\n [thumbColorVar]: tokens.colorCompoundBrandBackgroundPressed,\r\n [progressColorVar]: tokens.colorCompoundBrandBackgroundPressed,\r\n },\r\n '@media (forced-colors: active)': {\r\n [railColorVar]: 'CanvasText',\r\n [thumbColorVar]: 'Highlight',\r\n [progressColorVar]: 'Highlight',\r\n ':hover': {\r\n [thumbColorVar]: 'Highlight',\r\n [progressColorVar]: 'Highlight',\r\n },\r\n },\r\n },\r\n rail: {\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n gridRowStart: '2',\r\n gridRowEnd: '2',\r\n gridColumnStart: '2',\r\n gridColumnEnd: '2',\r\n position: 'relative',\r\n forcedColorAdjust: 'none',\r\n // Background gradient represents the progress of the slider\r\n backgroundImage: `linear-gradient(90deg,\r\n var(${railColorVar}) 0%,\r\n var(${railColorVar}) var(${sliderMinProgressVar}),\r\n var(${progressColorVar}) var(${sliderMinProgressVar}),\r\n var(${progressColorVar}) var(${sliderMaxProgressVar}),\r\n var(${railColorVar}) var(${sliderMaxProgressVar})\r\n )`,\r\n outlineWidth: '1px',\r\n outlineStyle: 'solid',\r\n outlineColor: tokens.colorTransparentStroke,\r\n width: '100%',\r\n height: `var(${railSizeVar})`,\r\n },\r\n thumb: {\r\n gridRowStart: '2',\r\n gridRowEnd: '2',\r\n gridColumnStart: '2',\r\n gridColumnEnd: '2',\r\n position: 'absolute',\r\n width: `var(${thumbSizeVar})`,\r\n height: `var(${thumbSizeVar})`,\r\n cursor: 'pointer',\r\n outlineStyle: 'none',\r\n forcedColorAdjust: 'none',\r\n ...shorthands.borderRadius(tokens.borderRadiusCircular),\r\n boxShadow: `0 0 0 calc(var(${thumbSizeVar}) * .2) ${tokens.colorNeutralBackground1} inset`,\r\n backgroundColor: `var(${thumbColorVar})`,\r\n '::before': {\r\n position: 'absolute',\r\n top: '0px',\r\n left: '0px',\r\n bottom: '0px',\r\n right: '0px',\r\n ...shorthands.borderRadius(tokens.borderRadiusCircular),\r\n boxSizing: 'border-box',\r\n content: \"''\",\r\n ...shorthands.border(`calc(var(${thumbSizeVar}) * .05)`, 'solid', tokens.colorNeutralStroke1),\r\n },\r\n transform: 'translateX(-50%)',\r\n },\r\n rangeInput: {\r\n gridRowStart: '2',\r\n gridRowEnd: '-2',\r\n gridColumnStart: '2',\r\n gridColumnEnd: '-2',\r\n pointerEvents: 'none',\r\n opacity: '0',\r\n ...shorthands.margin(0),\r\n ...shorthands.padding(0),\r\n },\r\n minRangeInput: {\r\n '&:focus ~ .video-duration-scrollbar__minThumb::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n zIndex: 1,\r\n\r\n ...shorthands.border('2px', 'solid', tokens.colorStrokeFocus2),\r\n ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n\r\n top: '-4px',\r\n right: '-4px',\r\n bottom: '-4px',\r\n left: '-4px',\r\n },\r\n },\r\n maxRangeInput: {\r\n '&:focus ~ .video-duration-scrollbar__maxThumb::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n zIndex: 1,\r\n\r\n ...shorthands.border('2px', 'solid', tokens.colorStrokeFocus2),\r\n ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n\r\n top: '-4px',\r\n right: '-4px',\r\n bottom: '-4px',\r\n left: '-4px',\r\n },\r\n },\r\n minThumb: {\r\n left: `var(${sliderMinProgressVar})`,\r\n },\r\n maxThumb: {\r\n left: `var(${sliderMaxProgressVar})`,\r\n },\r\n});\r\n\r\nconst getPercent = (value, min, max) => (max === min ? 0 : ((value - min) / (max - min)) * 100);\r\n\r\nconst Slider = (props) => {\r\n const {\r\n setValue,\r\n getRelatedValue,\r\n className,\r\n } = props;\r\n\r\n const [isDragging, setIsDragging] = useState(false);\r\n\r\n const onMouseDown = (e) => {\r\n if (e.button !== 0) {\r\n return;\r\n }\r\n setIsDragging(true);\r\n const newValue = getRelatedValue(e);\r\n setValue(newValue);\r\n e.stopPropagation();\r\n e.preventDefault();\r\n };\r\n\r\n useEffect(() => {\r\n if (isDragging) {\r\n const onMouseMove = (e) => {\r\n const newValue = getRelatedValue(e);\r\n setValue(newValue);\r\n };\r\n const onMouseUp = (e) => {\r\n setIsDragging(false);\r\n const newValue = getRelatedValue(e);\r\n setValue(newValue, true);\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n };\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n return () => {\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n };\r\n }\r\n return () => {};\r\n }, [getRelatedValue, isDragging, setValue]);\r\n\r\n return (\r\n {\r\n console.log(e);\r\n onMouseDown(e);\r\n }}\r\n />\r\n );\r\n};\r\n\r\n// input slider for video duration\r\n// two thumbs for min and max duration\r\n// one rail for the range\r\nexport const VideoDurationScrollbarFilter = (props) => {\r\n const minInputId = useId('min-input');\r\n const maxInputId = useId('max-input');\r\n const {\r\n min,\r\n max,\r\n unlimited,\r\n i18n,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onChange,\r\n } = props;\r\n\r\n const [minValue, setMinValue] = useState(minDurationFilter);\r\n const [maxValue, setMaxValue] = useState(maxDurationFilter);\r\n const classes = useStyles();\r\n const scrollbarRef = useRef();\r\n\r\n const styleVariables = {\r\n [sliderMinProgressVar]: (minValue == null ? '0%' : `${getPercent(minValue, min, unlimited)}%`),\r\n [sliderMaxProgressVar]: (maxValue == null ? '100%' : `${getPercent(maxValue, min, unlimited)}%`),\r\n };\r\n\r\n const wrappedSetMinValue = (value, shouldCallOnChange) => {\r\n const newValue = Math.min(Math.min(maxValue || unlimited, max), Math.max(min, value));\r\n setMinValue(newValue);\r\n if (shouldCallOnChange) {\r\n onChange({ newMinDuration: newValue, newMaxDuration: maxValue });\r\n }\r\n };\r\n\r\n const wrappedSetMaxValue = (value, shouldCallOnChange) => {\r\n const newValue = Math.min(unlimited, Math.max(minValue || 0, value));\r\n setMaxValue(newValue);\r\n if (shouldCallOnChange) {\r\n onChange({ newMinDuration: minValue, newMaxDuration: newValue });\r\n }\r\n };\r\n\r\n const getRelatedValue = ({\r\n clientX,\r\n }) => {\r\n if (!scrollbarRef.current) {\r\n return null;\r\n }\r\n const scrollbarBox = scrollbarRef.current.getBoundingClientRect();\r\n const {\r\n left,\r\n width,\r\n } = scrollbarBox;\r\n\r\n const x = clientX - left;\r\n return parseInt(Math.min(unlimited, Math.max(min, ((x / width) * (unlimited - min)) + min)), 10);\r\n };\r\n\r\n const onClickRail = (e) => {\r\n const value = getRelatedValue(e);\r\n if (value != null) {\r\n // set the min value if the click is closer to the min thumb\r\n // set the max value if the click is closer to the max thumb\r\n const minDistance = Math.abs((minValue || 0) - value);\r\n const maxDistance = Math.abs((maxValue || unlimited) - value);\r\n if (minDistance < maxDistance) {\r\n wrappedSetMinValue(value, true);\r\n } else {\r\n wrappedSetMaxValue(value, true);\r\n }\r\n }\r\n };\r\n\r\n\r\n return (\r\n
\r\n
\r\n {\r\n wrappedSetMinValue(parseInt(e.target.value, 10), true);\r\n }}\r\n aria-label={i18n.getString(_TL_('Min value: {{ value }}'), { value: minValue })}\r\n />\r\n {\r\n wrappedSetMaxValue(parseInt(e.target.value, 10), true);\r\n }}\r\n aria-label={i18n.getString(_TL_('Max value: {{ value }}'), { value: maxValue > max ? 'unlimited' : maxValue })}\r\n />\r\n {\r\n onClickRail(e);\r\n }}\r\n />\r\n \r\n \r\n
\r\n
\r\n {maxValue > max || maxValue == null ? `≥${i18n.getString(_TL_('{{ min }} seconds'), {\r\n min: minValue,\r\n })}` : i18n.getString(_TL_('{{ min }}-{{ max }} seconds'), {\r\n min: minValue,\r\n max: maxValue,\r\n })}\r\n
\r\n
\r\n );\r\n};\r\n\r\n\r\nVideoDurationScrollbarFilter.propTypes = {\r\n min: PropTypes.number,\r\n max: PropTypes.number,\r\n unlimited: PropTypes.number,\r\n i18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nVideoDurationScrollbarFilter.defaultProps = {\r\n min: 0,\r\n max: 120,\r\n unlimited: 121,\r\n};\r\n","import React from 'react';\r\nimport {\r\n ToggleButton,\r\n makeStyles,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Filter20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n toggleButton: {\r\n minWidth: 'unset',\r\n },\r\n});\r\n\r\nexport const FilterToggleButton = (props) => {\r\n const {\r\n i18n,\r\n className,\r\n onClick,\r\n checked,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n const text = i18n.getString(_TL_('Filter'));\r\n\r\n return (\r\n
\r\n }\r\n onClick={() => {\r\n onClick();\r\n }}\r\n >\r\n {text}\r\n \r\n
\r\n );\r\n};\r\n","import { useCallback, useState, useMemo } from 'react';\r\nimport { getCivilDateToday } from '@bingads-webui-universal/temporal-utitlities';\r\nimport {\r\n getDateAddedChoiceOptions,\r\n CSMLTimeFrame,\r\n} from '../../../model';\r\nimport {\r\n civilDateRangeEqual,\r\n civilDateRangeToDebugString,\r\n} from '../../../utils';\r\n\r\nconst yesterday = getCivilDateToday().plus({ days: -1 });\r\nconst DEFAULT_RANGE = { start: yesterday, end: yesterday };\r\n\r\nexport const useDateAddedState = ({\r\n logger,\r\n i18n,\r\n ianaTimeZone,\r\n handleUsage,\r\n}) => {\r\n const [dateAddedFilter, setDateAddedFilter] = useState(CSMLTimeFrame.Anytime);\r\n // date range user selected for 'Custom'\r\n const [dateAddedFilterCustomDateRange, setDateAddedFilterCustomDateRange] = useState(DEFAULT_RANGE);\r\n\r\n const dateAddedChoiceOptions = useMemo(\r\n () => getDateAddedChoiceOptions(i18n, ianaTimeZone),\r\n [i18n, ianaTimeZone]\r\n );\r\n\r\n const onDateAddedFilterChange = useCallback(({ timeframe: tf, customDateRange: cdr }) => {\r\n if (tf !== dateAddedFilter) {\r\n logger.logTrace('onDateAddedFilterChange', { dateAddedFilter: tf });\r\n setDateAddedFilter(tf);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n if (!civilDateRangeEqual(cdr, dateAddedFilterCustomDateRange)) {\r\n logger.logTrace('onDateAddedFilterChange', { customDateRange: civilDateRangeToDebugString(cdr) });\r\n setDateAddedFilterCustomDateRange(cdr);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n }, [dateAddedFilter, dateAddedFilterCustomDateRange, handleUsage, logger]);\r\n\r\n return {\r\n dateAddedChoiceOptions,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n onDateAddedFilterChange,\r\n };\r\n};\r\n","import React from 'react';\r\n\r\nexport const FilterContext = React.createContext({});\r\n\r\n","import { useMemo, useContext, useEffect } from 'react';\r\nimport {\r\n useAdditionalFilterBarState,\r\n useAssetTypeState,\r\n useSearchBoxState,\r\n useSortByState,\r\n useDateAddedState,\r\n useImportSourceState,\r\n useAssetSourcesState,\r\n useImageSizeState,\r\n useVideoDurationState,\r\n} from './components/state';\r\nimport {\r\n FilterContext,\r\n} from './context/filter-context';\r\nimport {\r\n CSMLTimeFrame,\r\n} from '../model';\r\n\r\nexport const useFilterBarState = ({\r\n logger,\r\n i18n,\r\n userPreference,\r\n defaultSearchText,\r\n defaultMinVideoDuration,\r\n defaultMaxVideoDuration,\r\n}) => {\r\n const {\r\n setFilterBar,\r\n } = useContext(FilterContext);\r\n\r\n const {\r\n toggleFilterBar,\r\n showAdditionalFilterBar,\r\n } = useAdditionalFilterBarState({ logger });\r\n\r\n const {\r\n toggleAssetType,\r\n assetTypesState,\r\n assetTypes,\r\n isImageSelected,\r\n isVideoSelected,\r\n } = useAssetTypeState({ logger, i18n });\r\n\r\n const {\r\n searchText,\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n } = useSearchBoxState({ logger, defaultSearchText });\r\n\r\n const {\r\n sortBy,\r\n sortingOptions,\r\n setSortBy,\r\n onSortByChange,\r\n } = useSortByState({ logger, i18n, userPreference });\r\n\r\n const {\r\n dateAddedChoiceOptions,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n onDateAddedFilterChange,\r\n } = useDateAddedState({ logger, i18n });\r\n\r\n const {\r\n assetSources,\r\n assetSourceOptions,\r\n onAssetSourceFilterChange,\r\n } = useAssetSourcesState({ logger, i18n });\r\n\r\n const {\r\n importSource,\r\n importSourceOptions,\r\n onImportSourceFilterChange,\r\n } = useImportSourceState({ logger, i18n });\r\n\r\n const {\r\n minWidthFilter,\r\n minHeightFilter,\r\n onImageSizeFilterChange,\r\n } = useImageSizeState({ logger, i18n });\r\n\r\n const {\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n } = useVideoDurationState({\r\n logger,\r\n i18n,\r\n defaultMinVideoDuration,\r\n defaultMaxVideoDuration,\r\n });\r\n\r\n const isDateAddedFilterActive = dateAddedFilter !== CSMLTimeFrame.Anytime;\r\n const isImportSourceFilterActive = importSource !== null;\r\n const isAssetSourceFilterActive = assetSources.length > 0;\r\n\r\n const isAdditionalFilterActive = useMemo(\r\n () => {\r\n if (isImageSelected) {\r\n if (minWidthFilter || minHeightFilter) {\r\n return true;\r\n }\r\n }\r\n if (isVideoSelected) {\r\n if (minDurationFilter || maxDurationFilter) {\r\n return true;\r\n }\r\n }\r\n return isDateAddedFilterActive || isImportSourceFilterActive || isAssetSourceFilterActive;\r\n },\r\n [isAssetSourceFilterActive,\r\n isDateAddedFilterActive,\r\n isImageSelected,\r\n isImportSourceFilterActive, isVideoSelected, maxDurationFilter, minDurationFilter, minHeightFilter, minWidthFilter]\r\n );\r\n\r\n useEffect(() => {\r\n setFilterBar({\r\n getFilters: () =>\r\n ({\r\n isImageSelected,\r\n isVideoSelected,\r\n assetTypesState,\r\n searchText,\r\n sortBy,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n importSource,\r\n assetSources,\r\n minWidthFilter,\r\n minHeightFilter,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n }),\r\n });\r\n }, [assetSources, assetTypesState, dateAddedFilter, dateAddedFilterCustomDateRange, importSource,\r\n isImageSelected, isVideoSelected, maxDurationFilter, minDurationFilter, minHeightFilter, minWidthFilter, searchText, setFilterBar, sortBy]);\r\n\r\n return {\r\n toggleFilterBar,\r\n showAdditionalFilterBar,\r\n isAdditionalFilterActive,\r\n toggleAssetType,\r\n isImageSelected,\r\n isVideoSelected,\r\n assetTypesState,\r\n assetTypes,\r\n // Search box state\r\n searchText,\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n // Sort by state\r\n sortBy,\r\n sortingOptions,\r\n setSortBy,\r\n onSortByChange,\r\n // Date added state\r\n dateAddedChoiceOptions,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n onDateAddedFilterChange,\r\n // Import source state\r\n importSource,\r\n importSourceOptions,\r\n onImportSourceFilterChange,\r\n // Asset source state\r\n assetSources,\r\n assetSourceOptions,\r\n onAssetSourceFilterChange,\r\n // Image size state\r\n minWidthFilter,\r\n minHeightFilter,\r\n onImageSizeFilterChange,\r\n // Video duration state\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n };\r\n};\r\n","import { useState } from 'react';\r\n\r\nexport const useAdditionalFilterBarState = ({ logger, handleUsage }) => {\r\n const [showAdditionalFilterBar, setShowAdditionalFilterBar] = useState(false);\r\n const toggleFilterBar = () => {\r\n logger.logTrace('toggle the filter bar', { showAdditionalFilterBar: !showAdditionalFilterBar });\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n setShowAdditionalFilterBar(!showAdditionalFilterBar);\r\n };\r\n\r\n return {\r\n toggleFilterBar,\r\n showAdditionalFilterBar,\r\n };\r\n};\r\n","import { useState, } from 'react';\r\nimport { getAssetTypeOptions } from '../../../model/get-asset-type-options';\r\nimport { FolderAssetType } from '../../../model/constants';\r\n\r\nexport const useAssetTypeState = ({ i18n, logger, handleUsage }) => {\r\n const assetTypes = getAssetTypeOptions(i18n);\r\n\r\n const [assetTypesState, setAssetTypesState] = useState(() => {\r\n const initialState = {};\r\n assetTypes.forEach((option) => {\r\n initialState[option.key] = false;\r\n });\r\n initialState[FolderAssetType.All] = true;\r\n return initialState;\r\n });\r\n\r\n const toggleAssetType = (key) => {\r\n const newAssetTypesState = {};\r\n assetTypes.forEach((option) => {\r\n const { key: optionKey } = option;\r\n if (optionKey === key) {\r\n newAssetTypesState[optionKey] = !assetTypesState[optionKey];\r\n } else {\r\n newAssetTypesState[optionKey] = false;\r\n }\r\n });\r\n if (newAssetTypesState[key] === false) {\r\n newAssetTypesState[FolderAssetType.All] = true;\r\n }\r\n logger.logTrace('toggle the media type assetTypes', { assetTypesState: newAssetTypesState });\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n setAssetTypesState(newAssetTypesState);\r\n };\r\n\r\n const isImageSelected = assetTypesState[FolderAssetType.Image];\r\n const isVideoSelected = assetTypesState[FolderAssetType.Video];\r\n\r\n return {\r\n toggleAssetType,\r\n assetTypesState,\r\n assetTypes,\r\n isImageSelected,\r\n isVideoSelected,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState, useRef, } from 'react';\r\n\r\nexport const useSearchBoxState = ({ logger, handleUsage, defaultSearchText = '' }) => {\r\n const [searchText, setSearchText] = useState(defaultSearchText);\r\n const searchTextValueRef = useRef('');\r\n const onSearchTextChanging = useCallback((evt, newValue) => {\r\n searchTextValueRef.current = newValue || '';\r\n }, []);\r\n\r\n const onSearchTextBlur = useCallback(() => {\r\n setSearchText(searchTextValueRef.current);\r\n }, []);\r\n\r\n const onSearchTextChange = useCallback((newValue) => {\r\n if (newValue !== searchText) {\r\n logger.logTrace('start searching text', { searchText: newValue });\r\n setSearchText(newValue);\r\n }\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [logger, searchText, handleUsage]);\r\n\r\n const onSearchTextClear = useCallback(() => {\r\n if (!_.isEmpty(searchText)) {\r\n logger.logTrace('start searching text', { searchText: '' });\r\n setSearchText('');\r\n searchTextValueRef.current = '';\r\n }\r\n }, [logger, searchText]);\r\n\r\n return {\r\n searchText,\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState, useMemo, useEffect } from 'react';\r\nimport {\r\n CSMLSortBy, getSortingOptions,\r\n} from '../../../model';\r\n\r\nexport const useSortByState = ({\r\n logger,\r\n i18n,\r\n handleUsage,\r\n userPreference,\r\n}) => {\r\n const [sortBy, setSortBy] = useState(() => {\r\n if (userPreference && userPreference.sortBy) {\r\n return userPreference.sortBy;\r\n }\r\n return CSMLSortBy.MostRecent;\r\n });\r\n\r\n useEffect(() => {\r\n if (userPreference && userPreference.sortBy) {\r\n setSortBy(userPreference.sortBy);\r\n }\r\n }, [setSortBy, userPreference]);\r\n\r\n const sortingOptions = useMemo(\r\n () => getSortingOptions(i18n),\r\n [i18n]\r\n );\r\n\r\n const safeSetSortBy = useCallback((newVal) => {\r\n const allSortByOptions = Object.values(CSMLSortBy);\r\n let safeNewValue = CSMLSortBy.MostRecent; // default value\r\n if (_.contains(allSortByOptions, newVal)) {\r\n safeNewValue = newVal;\r\n }\r\n setSortBy(safeNewValue);\r\n return safeNewValue;\r\n }, []);\r\n\r\n const onSortByChange = useCallback((_evt, item) => {\r\n if (item) {\r\n const newVal = safeSetSortBy(item.key);\r\n logger.logTrace('onSortByChange', { sortby: newVal });\r\n if (userPreference) {\r\n // save preferences\r\n userPreference.setSortBy(newVal);\r\n }\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n } else {\r\n // shouldn't happen\r\n logger.logError('onSortByChange, invalid key');\r\n }\r\n }, [safeSetSortBy, logger, userPreference, handleUsage]);\r\n\r\n return {\r\n sortBy,\r\n sortingOptions,\r\n setSortBy: safeSetSortBy,\r\n onSortByChange,\r\n };\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport { useCallback, useState, useMemo } from 'react';\r\nimport {\r\n getAssetSourceOptions,\r\n} from '../../../model';\r\n\r\nexport const useAssetSourcesState = ({\r\n logger,\r\n i18n,\r\n handleUsage,\r\n disabledAssetSources = [],\r\n}) => {\r\n const [assetSources, setAssetSources] = useState([]);\r\n\r\n const assetSourceOptions = useMemo(() => {\r\n const options = getAssetSourceOptions(i18n);\r\n if (!_.isEmpty(disabledAssetSources)) {\r\n return options.filter(({ key }) => !disabledAssetSources.includes(key));\r\n }\r\n\r\n return options;\r\n }, [disabledAssetSources, i18n]);\r\n\r\n const onAssetSourceFilterChange = useCallback((newAssetSources) => {\r\n if (!_.isEqual(assetSources, newAssetSources)) {\r\n setAssetSources(newAssetSources);\r\n logger.logTrace('onAssetSourceFilterChange', { assetSources: (assetSources || []).join(',') });\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n }, [assetSources, handleUsage, logger]);\r\n\r\n return {\r\n assetSources,\r\n assetSourceOptions,\r\n onAssetSourceFilterChange,\r\n };\r\n};\r\n","import { useCallback, useState, useMemo } from 'react';\r\nimport {\r\n getImportSourceOptions,\r\n} from '../../../model';\r\n\r\nexport const useImportSourceState = ({\r\n logger,\r\n i18n,\r\n handleUsage,\r\n}) => {\r\n const [importSource, setImportSource] = useState(null);\r\n\r\n const importSourceOptions = useMemo(() => getImportSourceOptions(i18n), [i18n]);\r\n\r\n const onImportSourceFilterChange = useCallback((newImportSource) => {\r\n if (importSource !== newImportSource) {\r\n setImportSource(newImportSource);\r\n logger.logTrace('onImportSourceFilterChange', { importSource: newImportSource });\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n }, [handleUsage, importSource, logger]);\r\n\r\n return {\r\n importSource,\r\n importSourceOptions,\r\n onImportSourceFilterChange,\r\n };\r\n};\r\n","import { useCallback, useState } from 'react';\r\n\r\nexport const useImageSizeState = ({\r\n logger, handleUsage,\r\n}) => {\r\n const [minWidthFilter, setMinWidthFilter] = useState(null);\r\n const [minHeightFilter, setMinHeightFilter] = useState(null);\r\n\r\n const onImageSizeFilterChange = useCallback(({ newMinWidth, newMinHeight }) => {\r\n if (newMinWidth !== minWidthFilter) {\r\n logger.logTrace('onImageSizeFilterChange', { minWidth: newMinWidth });\r\n setMinWidthFilter(newMinWidth);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n if (newMinHeight !== minHeightFilter) {\r\n logger.logTrace('onImageSizeFilterChange', { minHeight: newMinHeight });\r\n setMinHeightFilter(newMinHeight);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n }, [handleUsage, logger, minHeightFilter, minWidthFilter]);\r\n\r\n return {\r\n minWidthFilter,\r\n minHeightFilter,\r\n onImageSizeFilterChange,\r\n };\r\n};\r\n","import { useCallback, useState } from 'react';\r\n\r\nexport const useVideoDurationState = ({\r\n logger,\r\n handleUsage,\r\n defaultMinVideoDuration = null,\r\n defaultMaxVideoDuration = null,\r\n}) => {\r\n const [minDurationFilter, setMinDurationFilter] = useState(defaultMinVideoDuration);\r\n const [maxDurationFilter, setMaxDurationFilter] = useState(defaultMaxVideoDuration);\r\n\r\n const onVideoDurationFilterChange = useCallback(({ newMinDuration, newMaxDuration }) => {\r\n if (newMinDuration !== minDurationFilter) {\r\n logger.logTrace('onVideoDurationFilterChange', { minDuration: newMinDuration });\r\n setMinDurationFilter(newMinDuration);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n if (newMaxDuration !== maxDurationFilter) {\r\n logger.logTrace('onVideoDurationFilterChange', { maxDuration: newMaxDuration });\r\n setMaxDurationFilter(newMaxDuration);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n }, [handleUsage, logger, maxDurationFilter, minDurationFilter]);\r\n\r\n return {\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n };\r\n};\r\n","// Two level of filter bars\r\nimport React, { useState } from 'react';\r\nimport {\r\n FluentProvider,\r\n Label,\r\n webLightTheme,\r\n makeResetStyles,\r\n makeStyles,\r\n shorthands,\r\n useId,\r\n tokens,\r\n Button,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n CSMLVideoDuration,\r\n} from '../model';\r\nimport {\r\n NewDropDown,\r\n AssetTypeToggleButtonsFilter,\r\n SearchBoxFilter,\r\n FilterToggleButton,\r\n ImageSizeFilter,\r\n VideoDurationFilter,\r\n AssetSourceFilter,\r\n ImportSourceFilter,\r\n DateAddedFilter,\r\n SortByFilter,\r\n VideoDurationScrollbarFilter,\r\n} from './components';\r\nimport {\r\n useFilterBarState,\r\n} from './filter-bar-state';\r\n\r\nconst useFilterBarStyles = makeStyles({\r\n filterBar: {\r\n display: 'flex',\r\n columnGap: '8px',\r\n rowGap: '8px',\r\n flexWrap: 'wrap',\r\n '& button': {\r\n whiteSpace: 'nowrap',\r\n },\r\n },\r\n remaining: {\r\n flexGrow: 1,\r\n },\r\n});\r\n\r\nconst useBaseAdditionalFilterBarStyles = makeResetStyles({\r\n marginTop: '12px',\r\n display: 'flex',\r\n columnGap: '8px',\r\n rowGap: '8px',\r\n flexWrap: 'wrap',\r\n '& button': {\r\n whiteSpace: 'nowrap',\r\n color: tokens.colorNeutralForeground2,\r\n },\r\n ...shorthands.borderRadius('4px'),\r\n ...shorthands.border('1px', 'solid', '#F1F1F1'),\r\n ...shorthands.padding('8px', '16px'),\r\n boxShadow: '0px 1px 4px 0px rgba(0, 0, 0, 0.15)',\r\n alignItems: 'center',\r\n '& button.clearButton': {\r\n '&:hover': {\r\n fontWeight: tokens.fontWeightSemibold,\r\n },\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n fontWeight: 'unset',\r\n },\r\n});\r\n\r\nconst useAdditionalFilterBarStyles = makeStyles({\r\n hide: {\r\n display: 'none',\r\n },\r\n remaining: {\r\n flexGrow: 1,\r\n },\r\n filterText: {\r\n width: '60px',\r\n },\r\n});\r\n\r\nconst AdditionalFilterBar = (props) => {\r\n const {\r\n i18n,\r\n isSelected,\r\n isImageSelected,\r\n isVideoSelected,\r\n logger,\r\n timeZone,\r\n dateFormat,\r\n dateAddedChoiceOptions,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n onDateAddedFilterChange,\r\n showAdditionalFilterBar,\r\n isAdsStudioAIGCMVPEnabled,\r\n importSource,\r\n importSourceOptions,\r\n onImportSourceFilterChange,\r\n assetSources,\r\n assetSourceOptions,\r\n onAssetSourceFilterChange,\r\n minWidthFilter,\r\n minHeightFilter,\r\n onImageSizeFilterChange,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n } = props;\r\n\r\n const baseClasses = useBaseAdditionalFilterBarStyles();\r\n const classes = useAdditionalFilterBarStyles();\r\n const filterId = useId('filter');\r\n const [forceClear, setForceClear] = useState(0);\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n {isAdsStudioAIGCMVPEnabled &&\r\n }\r\n {!isAdsStudioAIGCMVPEnabled &&\r\n }\r\n {isSelected &&\r\n }\r\n onClick={() => {\r\n setForceClear(forceClear + 1);\r\n }}\r\n >\r\n {i18n.getString(_TL_('Clear all'))}\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport const VideosFilterBar = (props) => {\r\n const {\r\n i18n,\r\n logger,\r\n defaultSearchText,\r\n searchboxPlaceHolder,\r\n userPreference,\r\n defaultMinVideoDuration,\r\n defaultMaxVideoDuration,\r\n } = props;\r\n\r\n const classes = useFilterBarStyles();\r\n const {\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n sortBy,\r\n sortingOptions,\r\n onSortByChange,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n } = useFilterBarState({\r\n logger,\r\n i18n,\r\n userPreference,\r\n defaultSearchText,\r\n defaultMinVideoDuration,\r\n defaultMaxVideoDuration,\r\n });\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport const ImagesFilterBar = (props) => {\r\n const {\r\n i18n,\r\n logger,\r\n defaultSearchText,\r\n userPreference,\r\n searchboxPlaceHolder,\r\n } = props;\r\n\r\n const classes = useFilterBarStyles();\r\n const {\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n sortBy,\r\n sortingOptions,\r\n onSortByChange,\r\n } = useFilterBarState({\r\n logger,\r\n i18n,\r\n userPreference,\r\n defaultSearchText,\r\n });\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport const LibraryFilterBar = (props) => {\r\n const {\r\n i18n,\r\n logger,\r\n ianaTimeZone,\r\n dateFormat,\r\n defaultSearchText,\r\n searchboxPlaceHolder,\r\n isAdsStudioAIGCMVPEnabled,\r\n onUploadLocalFileClick,\r\n onUploadLocalFolderClick,\r\n onUploadImageClick,\r\n onUploadVideoClick,\r\n onAIGenerateClick,\r\n onCreateFolderClick,\r\n userPreference,\r\n } = props;\r\n\r\n const classes = useFilterBarStyles();\r\n // Filter state change will trigger useEffect reload\r\n const {\r\n assetTypes,\r\n assetTypesState,\r\n toggleAssetType,\r\n toggleFilterBar,\r\n showAdditionalFilterBar,\r\n isAdditionalFilterActive,\r\n isImageSelected,\r\n isVideoSelected,\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n sortBy,\r\n sortingOptions,\r\n onSortByChange,\r\n dateAddedChoiceOptions,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n onDateAddedFilterChange,\r\n importSource,\r\n importSourceOptions,\r\n onImportSourceFilterChange,\r\n assetSources,\r\n assetSourceOptions,\r\n onAssetSourceFilterChange,\r\n minWidthFilter,\r\n minHeightFilter,\r\n onImageSizeFilterChange,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n } = useFilterBarState({\r\n logger,\r\n i18n,\r\n userPreference,\r\n defaultSearchText,\r\n });\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n toggleFilterBar()}\r\n checked={showAdditionalFilterBar}\r\n logger={logger}\r\n />\r\n \r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport const SearchResultFilterBar = (props) => {\r\n const {\r\n i18n,\r\n logger,\r\n defaultSearchText,\r\n searchboxPlaceHolder,\r\n } = props;\r\n\r\n const classes = useFilterBarStyles();\r\n const {\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n } = useFilterBarState({ logger, i18n, defaultSearchText });\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { FilterContext } from './filter-context';\r\n\r\nexport const FilterContextProvider = (props) => {\r\n const [filterBar, setFilterBar] = useState({\r\n getFilters: () => ({}),\r\n });\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport const withFilterContext = Component => props => ();\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { useCallback, useRef, useMemo } from 'react';\r\n// import { SearchBox } from '@bingads-webui-react/fabric-control';\r\n\r\nimport {\r\n // AssetTypeToggleButtonsFilter,\r\n ImportSourceFilter,\r\n AssetSourceFilter,\r\n ImageSizeFilter,\r\n // VideoDurationFilter,\r\n DateAddedFilter,\r\n SearchBoxFilter,\r\n} from './components';\r\nimport {\r\n CSMLTimeFrame,\r\n FilterType,\r\n // getAssetTypeOptions,\r\n getImportSourceOptions,\r\n getAssetSourceOptions,\r\n getDateAddedChoiceOptions,\r\n} from '../model';\r\nimport { civilDateRangeEqual, getDefaultDateRange } from '../utils';\r\n\r\n// export const AssetTypeFilterComponent = React.memo(({\r\n// filter, focused, onValueChange, onDropdownDismiss, i18n,\r\n// }) => {\r\n// const { value } = filter || {};\r\n// const { assetTypeFilter } = value || {};\r\n// const dropdownOptions = useMemo(() => getAssetTypeOptions(i18n), [i18n]);\r\n\r\n// const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n// if (newValue !== assetTypeFilter) {\r\n// onValueChange(filter, { assetTypeFilter: newValue }, newHumanizedVaue);\r\n// }\r\n// }, [assetTypeFilter, filter, onValueChange]);\r\n\r\n// return (\r\n//
\r\n// onDropdownDismiss(filter, { assetTypeFilter: newValue }, newHumanizedValue)}\r\n// focused={focused}\r\n// i18n={i18n}\r\n// />\r\n//
\r\n// );\r\n// });\r\n\r\nexport const ImportSourceFilterComponent = React.memo(({\r\n filter, i18n, onValueChange, onDropdownDismiss, defaultOpen,\r\n}) => {\r\n const { value } = filter || {};\r\n const { importSource } = value || {};\r\n const dropdownOptions = useMemo(() => getImportSourceOptions(i18n), [i18n]);\r\n\r\n const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n const option = _.find(dropdownOptions, { key: newValue }) || {};\r\n if (newValue !== importSource) {\r\n onValueChange(filter, { importSource: newValue }, option.text || newHumanizedVaue);\r\n }\r\n }, [dropdownOptions, filter, importSource, onValueChange]);\r\n\r\n const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n const option = _.find(dropdownOptions, { key: newValue }) || {};\r\n onDropdownDismiss(filter, { importSource: newValue }, option.text || newHumanizedValue);\r\n }, [dropdownOptions, filter, onDropdownDismiss]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\nexport const AssetSourceFilterComponent = React.memo(({\r\n filter, i18n, onValueChange, onDropdownDismiss, defaultOpen,\r\n}) => {\r\n const { value } = filter || {};\r\n const { assetSources } = value || {};\r\n const assetSourceOptions = useMemo(() => getAssetSourceOptions(i18n), [i18n]);\r\n const onChange = useCallback((newAssetSources, newHumanizedVaue) => {\r\n if (!_.isEqual(assetSources, newAssetSources)) {\r\n onValueChange(filter, { assetSources: newAssetSources }, newHumanizedVaue);\r\n }\r\n }, [assetSources, filter, onValueChange]);\r\n\r\n const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n onDropdownDismiss(filter, { assetSources: newValue }, newHumanizedValue);\r\n }, [filter, onDropdownDismiss]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\nexport const ImageSizeFilterComponent = React.memo(({\r\n filter, i18n, onValueChange, onDropdownDismiss, defaultOpen,\r\n}) => {\r\n const { value } = filter || {};\r\n const { minImageWidth, minImageHeight } = value || {};\r\n\r\n const onImageSizeChange = useCallback((newValue, newHumanizedVaue) => {\r\n const { newMinWidth, newMinHeight } = newValue || {};\r\n if (minImageWidth !== newMinWidth || minImageHeight !== newMinHeight) {\r\n onValueChange(filter, { minImageWidth: newMinWidth, minImageHeight: newMinHeight }, newHumanizedVaue);\r\n }\r\n }, [filter, minImageHeight, minImageWidth, onValueChange]);\r\n\r\n const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n const { newMinWidth, newMinHeight } = newValue || {};\r\n onDropdownDismiss(filter, { minImageWidth: newMinWidth, minImageHeight: newMinHeight }, newHumanizedValue);\r\n }, [filter, onDropdownDismiss]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\n// export const VideoDurationFilterComponent = React.memo(({\r\n// filter, focused, i18n, onValueChange, onDropdownDismiss,\r\n// }) => {\r\n// const { value } = filter || {};\r\n// const { minVideoDuration, maxVideoDuration } = value || {};\r\n\r\n// const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n// const { newMinDuration, newMaxDuration } = newValue || {};\r\n// if (minVideoDuration !== newMinDuration || maxVideoDuration !== newMaxDuration) {\r\n// onValueChange(filter, { minVideoDuration: newMinDuration, maxVideoDuration: newMaxDuration }, newHumanizedVaue);\r\n// }\r\n// }, [filter, maxVideoDuration, minVideoDuration, onValueChange]);\r\n\r\n// const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n// const { newMinDuration, newMaxDuration } = newValue || {};\r\n// onDropdownDismiss(filter, { minVideoDuration: newMinDuration, maxVideoDuration: newMaxDuration }, newHumanizedValue);\r\n// }, [filter, onDropdownDismiss]);\r\n\r\n// return (\r\n//
\r\n// \r\n//
\r\n// );\r\n// });\r\n\r\nexport const AL_DATE_ADDED_FILTER_DEFAULT_RANGE = getDefaultDateRange();\r\nexport const DateAddedFilterComponent = React.memo(({\r\n filter, i18n, onValueChange, onDropdownDismiss, ianaTimeZone, dateFormat, defaultOpen,\r\n}) => {\r\n const { value } = filter || {};\r\n const { dateAddedFilter, dateAddedFilterCustomDateRange = AL_DATE_ADDED_FILTER_DEFAULT_RANGE } = value || {};\r\n const dateAddedChoiceOptions = useMemo(() => getDateAddedChoiceOptions(i18n, ianaTimeZone), [i18n, ianaTimeZone]);\r\n\r\n const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n const { timeframe: tf, customDateRange: cdr } = newValue || {};\r\n if (tf !== dateAddedFilter || !civilDateRangeEqual(cdr, dateAddedFilterCustomDateRange)) {\r\n onValueChange(filter, { dateAddedFilter: tf, dateAddedFilterCustomDateRange: cdr }, newHumanizedVaue);\r\n }\r\n }, [dateAddedFilter, dateAddedFilterCustomDateRange, filter, onValueChange]);\r\n\r\n const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n const { timeframe: tf, customDateRange: cdr } = newValue || {};\r\n onDropdownDismiss(filter, { dateAddedFilter: tf, dateAddedFilterCustomDateRange: cdr }, newHumanizedValue);\r\n }, [filter, onDropdownDismiss]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\nexport const PerformanceSearchTextFilterComponent = React.memo(({ i18n, filter, onValueChange }) => {\r\n const { value, title } = filter || {};\r\n const { searchText } = value || {};\r\n\r\n const searchTextValueRef = useRef('');\r\n const onSearchTextChanging = useCallback((evt, newValue) => {\r\n searchTextValueRef.current = newValue || '';\r\n }, []);\r\n\r\n const onSearchTextChange = useCallback((newValue) => {\r\n if (newValue !== searchText) {\r\n onValueChange(filter, { searchText: newValue }, newValue);\r\n }\r\n }, [filter, onValueChange, searchText]);\r\n\r\n const onSearchTextBlur = useCallback(() => {\r\n onSearchTextChange(searchTextValueRef.current);\r\n }, [onSearchTextChange]);\r\n\r\n\r\n const onSearchTextClear = useCallback(() => {\r\n onSearchTextChange('');\r\n }, [onSearchTextChange]);\r\n\r\n return (\r\n
\r\n \r\n {/* */}\r\n
\r\n );\r\n});\r\n\r\nexport const getPerformanceFilterComponents = ({ isAdsStudioAIGCMVPEnabled }) => {\r\n const ComponentMap = {\r\n // [FilterType.AssetType]: AssetTypeFilterComponent,\r\n [FilterType.ImportSource]: !isAdsStudioAIGCMVPEnabled ? ImportSourceFilterComponent : undefined,\r\n [FilterType.AssetSource]: isAdsStudioAIGCMVPEnabled ? AssetSourceFilterComponent : undefined,\r\n [FilterType.ImageSize]: ImageSizeFilterComponent,\r\n // [FilterType.VideoDuration]: VideoDurationFilterComponent,\r\n [FilterType.DateAdded]: DateAddedFilterComponent,\r\n [FilterType.SearchText]: PerformanceSearchTextFilterComponent,\r\n };\r\n return ComponentMap;\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useBreadcrumbStyles = makeStyles({\r\n breadcrumbButton: {\r\n '&.fui-BreadcrumbButton': {\r\n color: '#0F6CBD',\r\n },\r\n },\r\n breadcrumbButtonCurrent: {\r\n '&.fui-BreadcrumbButton': {\r\n color: '#424242',\r\n fontWeight: 400,\r\n },\r\n },\r\n breadcrumbContainer: {\r\n marginBottom: '24px',\r\n },\r\n});\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { AdsStudioBreadcrumb } from '../ads-studio-breadcrumb';\r\n\r\nimport { useBreadcrumbStyles } from './style';\r\n\r\nexport const FolderPathBreadcrumb = ({\r\n folderPath,\r\n onItemClick,\r\n visibleForRootFolder,\r\n}) => {\r\n const items = useMemo(() => folderPath.map(item => ({\r\n key: item.folderId,\r\n text: item.folderName,\r\n })), [folderPath]);\r\n\r\n const classes = useBreadcrumbStyles();\r\n\r\n return (\r\n items.length > 1 || visibleForRootFolder ? (\r\n
\r\n \r\n
\r\n ) : null\r\n );\r\n};\r\n\r\nFolderPathBreadcrumb.propTypes = {\r\n folderPath: PropTypes.arrayOf(PropTypes.shape({\r\n folderId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n folderName: PropTypes.string,\r\n })),\r\n onItemClick: PropTypes.func.isRequired,\r\n visibleForRootFolder: PropTypes.bool,\r\n};\r\n\r\nFolderPathBreadcrumb.defaultProps = {\r\n folderPath: [],\r\n visibleForRootFolder: false,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useAdsStudioLibraryPageContentStyle = makeStyles({\r\n container: {\r\n '& .ads-studio-grid-container': {\r\n marginTop: '12px',\r\n position: 'relative',\r\n ...shorthands.overflow('hidden'),\r\n // to show the shadow\r\n paddingLeft: '15px',\r\n paddingRight: '15px',\r\n },\r\n '& .library-page-header': {\r\n position: 'sticky',\r\n paddingBottom: '12px',\r\n paddingTop: '24px',\r\n paddingLeft: '36px',\r\n paddingRight: '36px',\r\n marginLeft: '-21px',\r\n marginRight: '-21px',\r\n top: 0,\r\n zIndex: 10,\r\n backgroundColor: 'white',\r\n height: 'auto',\r\n '& .library-page-header-top-wrapper': {\r\n visibility: 'visible',\r\n },\r\n '&.show-bulk-toolbar': {\r\n paddingTop: '12px',\r\n height: '80px',\r\n '& .library-page-header-top-wrapper': {\r\n visibility: 'hidden',\r\n },\r\n },\r\n },\r\n '& .library-page-header-toolbar': {\r\n position: 'absolute',\r\n top: '12px',\r\n left: '36px',\r\n right: '36px',\r\n zIndex: 11,\r\n backgroundColor: 'white',\r\n },\r\n },\r\n});\r\n\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nexport const HiddenDivForAnnounce = ({\r\n toAnnounce,\r\n}) => {\r\n const [announce, setAnnounce] = useState('');\r\n\r\n useEffect(() => {\r\n if (toAnnounce && announce !== toAnnounce) {\r\n setAnnounce(toAnnounce);\r\n }\r\n }, [announce, toAnnounce]);\r\n\r\n return (\r\n \r\n {announce}\r\n
\r\n );\r\n};\r\n","import _ from 'underscore';\r\nimport { DEFAULT_CONFIG as DEFAULT_GRID_CONFIG } from '../ads-studio-tile-grid';\r\n\r\nexport const FOLDER_GRID_CONFIG = { ...DEFAULT_GRID_CONFIG, aspectRatio: undefined, rowHeight: 100 };\r\n\r\n// null means loading\r\nexport const isSectionDataLoadingStatus =\r\n sectionData => _.every(sectionData, ({ items }) => items == null);\r\n\r\n// [] means loaded, but no data\r\nexport const isSectionDataEmptyStatus =\r\n (sectionData) => {\r\n const anySectionLoaded = _.any(sectionData, ({ items }) => !!items);\r\n\r\n return anySectionLoaded && _.every(sectionData, ({ items }) => _.isEmpty(items));\r\n };\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo, useState, useContext, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { useJsData } from '@bingads-webui-cc-react/js-data-rest';\r\n\r\nimport { LibraryEmptyView } from '../empty-view/library-page-empty-view';\r\nimport { LibraryFilterBar, FilterContext } from '../../filter-bar';\r\n\r\nimport { SectionTilesGrid, DEFAULT_CONFIG as DEFAULT_GRID_CONFIG } from '../ads-studio-tile-grid';\r\n\r\nimport {\r\n GridSectionName,\r\n DEFAULT_PAGE_SIZE,\r\n AdsStudioPageName,\r\n FolderAssetType,\r\n CSMLTimeFrame,\r\n getDateAddedChoiceOptions,\r\n getUpdatedAssets,\r\n AIGCHandler,\r\n isValidXandrAccount,\r\n} from '../../model';\r\n\r\nimport { FolderPathBreadcrumb } from '../folder-path-breadcrumb';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\n\r\nimport { useAdsStudioLibraryPageContentStyle } from './styles/library-page-style';\r\nimport {\r\n isSectionDataLoadingStatus,\r\n isSectionDataEmptyStatus,\r\n} from './sections-utils';\r\nimport { HiddenDivForAnnounce } from '../hidden-div-for-announce';\r\n\r\nconst overlaySpinnerStyles = { margin: 200 };\r\n// const bottomSpinnerStyles = { marginTop: 20, marginBottom: 100 };\r\n\r\nconst FOLDER_GRID_CONFIG = {\r\n ...DEFAULT_GRID_CONFIG,\r\n aspectRatio: undefined,\r\n rowHeight: 110,\r\n // width: 320,\r\n};\r\n\r\nconst AdsStudioLibraryPageContentInternal = ({\r\n dataService,\r\n renderHeader,\r\n renderGridCell,\r\n onFailedToLoadData,\r\n dateFormat,\r\n ianaTimeZone,\r\n // assetLibraryUserPreferences,\r\n // assetLibraryAccountPreferences,\r\n adsStudioUserPreferences,\r\n reload,\r\n logger,\r\n i18n,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n dataLoaded,\r\n perfMarker,\r\n displayFolderPath,\r\n reloadingFolders,\r\n assetsToLoadForSubfolders,\r\n renderToolbar,\r\n renderEmptyView,\r\n\r\n // multi-selection props\r\n multiSelectionEnabled,\r\n onSelectionChange,\r\n // onFolderNavigationChange,\r\n sectionSelectedItems,\r\n //\r\n // searchLocationFilterState,\r\n // setSearchLocationFilterState,\r\n\r\n // realUsedFlagSuffix,\r\n isAssetLibraryAIGCMVPEnabled,\r\n isAdsStudioAIGCMVPEnabled,\r\n isAIGCRegionRestricted,\r\n notificationApi,\r\n // isClickableOutsideFocusTrap,\r\n\r\n preDefinedAssetSources,\r\n // disabledAssetSources,\r\n onCreateFolderClick,\r\n navigation,\r\n\r\n gridScrollContainer,\r\n permissions,\r\n}) => {\r\n const isXandrIntEnabled = useMemo(() => permissions.dynamic.XandrIntegrationEnabled, [permissions]);\r\n // eslint-disable-next-line no-restricted-globals\r\n const { data: account } = useJsData(jsData => (isXandrIntEnabled ? jsData.Account.find(aid) : Promise.resolve()), [aid, isXandrIntEnabled]);\r\n const isXandrIntegrationEnabled = useMemo(() => (isXandrIntEnabled ? isValidXandrAccount(account) : false), [account, isXandrIntEnabled]);\r\n\r\n const classes = useAdsStudioLibraryPageContentStyle();\r\n const [announcedText, setAnnouncedText] = useState('');\r\n\r\n const { filterBar } = useContext(FilterContext);\r\n const {\r\n isImageSelected,\r\n isVideoSelected,\r\n searchText: searchBoxText,\r\n sortBy,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n importSource,\r\n assetSources,\r\n minWidthFilter,\r\n minHeightFilter,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n } = useMemo(() => filterBar.getFilters(), [filterBar]);\r\n\r\n const isAnyFilterSet = searchBoxText || importSource || isImageSelected || isVideoSelected\r\n || minWidthFilter || minHeightFilter || minDurationFilter || maxDurationFilter\r\n || (dateAddedFilter && dateAddedFilter !== CSMLTimeFrame.Anytime) || !_.isEmpty(assetSources);\r\n\r\n const {\r\n assets,\r\n totalAssetCount,\r\n totalSubfoldersCount,\r\n imageCroppingTasks,\r\n loadData,\r\n loadMoreData,\r\n folderPath,\r\n navigateToFolderInPath,\r\n folders,\r\n currentFolderId,\r\n videoUpdated,\r\n dataOwnerPageName,\r\n } = dataService || {};\r\n\r\n const openSystemUploadRef = useRef(null);\r\n\r\n const onUploadLocalFileClick = useCallback(() => {\r\n openSystemUploadRef.current = {};\r\n navigation.gotoUploadFilesPanelPage({\r\n aid, cid, oDataConfig, i18n, openSystemUpload: openSystemUploadRef.current,\r\n });\r\n }, [aid, cid, i18n, navigation, oDataConfig]);\r\n\r\n const onStockButtonClick = useCallback((props) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from shutterstock');\r\n }\r\n navigation.gotoStockImagePanelPage(props);\r\n }, [logger, navigation]);\r\n\r\n const onInvestButtonClick = useCallback((props) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from invest');\r\n }\r\n navigation.gotoInvestImagePanelPage(props);\r\n }, [logger, navigation]);\r\n\r\n const onWebsiteButtonClick = useCallback((props) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from website');\r\n }\r\n navigation.gotoWebsiteImagePanelPage(props);\r\n }, [logger, navigation]);\r\n\r\n const onUploadLocalFolderClick = useCallback(() => {\r\n openSystemUploadRef.current = {};\r\n navigation.gotoUploadFolderPanelPage({\r\n aid, cid, oDataConfig, i18n, openSystemUpload: openSystemUploadRef.current,\r\n });\r\n }, [aid, cid, i18n, navigation, oDataConfig]);\r\n\r\n const onUploadVideoClick = useCallback(() => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add video from URl');\r\n }\r\n\r\n if (isXandrIntegrationEnabled) {\r\n navigation.gotoMixedVideoPanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n } else {\r\n navigation.gotoAddVideoPanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n }\r\n }, [aid, cid, i18n, logger, navigation, oDataConfig, isXandrIntegrationEnabled]);\r\n\r\n const onUploadImageClick = useCallback(() => {\r\n navigation.gotoMixedImagePanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n }, [aid, cid, i18n, navigation, oDataConfig]);\r\n\r\n // // load assets for initial page load, or after any filters are changed\r\n const loadedAssetList = useMemo(() => getUpdatedAssets({\r\n assets,\r\n updates: {\r\n imageCroppingTasks,\r\n videoUpdated,\r\n },\r\n }), [assets, imageCroppingTasks, videoUpdated]);\r\n\r\n const onRenderCell = useCallback(({ item, sectionName, ...others }) => {\r\n if (renderGridCell) {\r\n const cell = renderGridCell({\r\n item, searchText: searchBoxText, sectionName, ...others,\r\n });\r\n if (cell) return cell;\r\n }\r\n return null;\r\n }, [renderGridCell, searchBoxText]);\r\n\r\n const [isPageInited, setPageInited] = useState(false);\r\n // const [isGridInited, setGridInited] = useState(false);\r\n const [loadingData, setLoadingData] = useState(false);\r\n\r\n const loadDataAsync = useCallback(() => {\r\n // get selected date range for date added filter\r\n let dateAddedDateRange;\r\n if (dateAddedFilter === CSMLTimeFrame.Custom) {\r\n dateAddedDateRange = dateAddedFilterCustomDateRange;\r\n } else {\r\n const dateAddedChoiceOptions = getDateAddedChoiceOptions(i18n, ianaTimeZone);\r\n const { range } = _.find(dateAddedChoiceOptions, o => o.key === dateAddedFilter) || {};\r\n dateAddedDateRange = range;\r\n }\r\n\r\n const usePreDefinedAssetSources = preDefinedAssetSources.length > 0 && assetSources.length === 0;\r\n let assetTypeFilter = null;\r\n if (isImageSelected || isVideoSelected) {\r\n assetTypeFilter = isImageSelected ? FolderAssetType.Image : FolderAssetType.Video;\r\n }\r\n let libraryPageLoadDataPerfMarker;\r\n if (perfMarker) {\r\n libraryPageLoadDataPerfMarker = perfMarker.createChild('libraryPageLoadData');\r\n }\r\n return loadData({\r\n searchText: searchBoxText,\r\n minImageWidth: minWidthFilter,\r\n minImageHeight: minHeightFilter,\r\n minVideoDuration: minDurationFilter,\r\n maxVideoDuration: maxDurationFilter,\r\n dateAddedDateRange,\r\n sortBy,\r\n importSource,\r\n assetSources: usePreDefinedAssetSources ? preDefinedAssetSources : assetSources,\r\n assetsToLoadForSubfolders,\r\n assetTypeFilter,\r\n isGlobalSearch: false,\r\n includeParentHierarchy: false, // include parent hierarchy when global searching\r\n pageName: AdsStudioPageName.LibraryPage,\r\n perfMarker: libraryPageLoadDataPerfMarker,\r\n });\r\n }, [assetSources, assetsToLoadForSubfolders, dateAddedFilter, dateAddedFilterCustomDateRange, i18n, ianaTimeZone, importSource, isImageSelected, isVideoSelected, loadData, maxDurationFilter, minDurationFilter, minHeightFilter, minWidthFilter, preDefinedAssetSources, searchBoxText, sortBy]);\r\n\r\n const bulkTookbar = useMemo(() => (renderToolbar ? renderToolbar() : null), [renderToolbar]);\r\n\r\n const onFolderPathClicked = useCallback((item) => {\r\n logger.logTrace('Navigate to folder in path', { folderId: item.key });\r\n navigateToFolderInPath({ id: item.key });\r\n }, [navigateToFolderInPath, logger]);\r\n\r\n const onRenderHeader = useCallback(() => (\r\n !renderHeader ? (\r\n
\r\n
\r\n {/* display folder path */}\r\n {displayFolderPath &&\r\n \r\n }\r\n {\r\n AIGCHandler(isAdsStudioAIGCMVPEnabled, isAIGCRegionRestricted, notificationApi, i18n, () => {\r\n navigation.gotoAIGenerationPanelPage({ folderId: currentFolderId });\r\n });\r\n }}\r\n onCreateFolderClick={onCreateFolderClick}\r\n userPreference={adsStudioUserPreferences}\r\n />\r\n
\r\n
\r\n {bulkTookbar}\r\n
\r\n
\r\n\r\n ) : (\r\n renderHeader()\r\n )\r\n ), [adsStudioUserPreferences, bulkTookbar, currentFolderId, dateFormat, displayFolderPath, folderPath, i18n, ianaTimeZone, isAIGCRegionRestricted, isAdsStudioAIGCMVPEnabled, logger, navigation, notificationApi, onCreateFolderClick, onFolderPathClicked, onUploadImageClick, onUploadLocalFileClick, onUploadLocalFolderClick, onUploadVideoClick, renderHeader]);\r\n\r\n const foldersGridSection = useMemo(() => ({\r\n sectionName: GridSectionName.Folder,\r\n sectionTitle: i18n.getString(_TL_('Folders')),\r\n sectionClassName: 'ads-studio-folders-section',\r\n itemKey: 'folderId',\r\n items: folders,\r\n totalItemCount: totalSubfoldersCount,\r\n config: {\r\n ...FOLDER_GRID_CONFIG,\r\n scrollContainer: gridScrollContainer,\r\n },\r\n selectedItems: sectionSelectedItems && sectionSelectedItems[GridSectionName.Folder],\r\n }), [folders, gridScrollContainer, i18n, sectionSelectedItems, totalSubfoldersCount]);\r\n\r\n const assetsGridSection = useMemo(() => ({\r\n sectionName: GridSectionName.Asset,\r\n sectionTitle: i18n.getString(_TL_('Assets')),\r\n sectionClassName: 'ads-studio-assets-section',\r\n itemKey: 'id',\r\n items: loadedAssetList,\r\n totalItemCount: totalAssetCount,\r\n selectedItems: sectionSelectedItems && sectionSelectedItems[GridSectionName.Asset],\r\n config: {\r\n scrollContainer: gridScrollContainer,\r\n minItemHeight: 42,\r\n },\r\n }), [gridScrollContainer, i18n, loadedAssetList, sectionSelectedItems, totalAssetCount]);\r\n\r\n const sectionGridData = useMemo(\r\n () => ([foldersGridSection, assetsGridSection]),\r\n [assetsGridSection, foldersGridSection]\r\n );\r\n\r\n // init page\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n setPageInited(true);\r\n }\r\n }, [isPageInited]);\r\n\r\n useEffect(() => {\r\n if (isAssetLibraryAIGCMVPEnabled) {\r\n setClarityTag({ AssetLibraryCopilot: 'true' });\r\n }\r\n }, [isAssetLibraryAIGCMVPEnabled]);\r\n\r\n // load data for initial page load\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n // wait until page is initialized\r\n return;\r\n }\r\n\r\n if (reload) { // Important! Add a trivial log so that reload will be an explicit dep.\r\n logger.logTrace('force to reload');\r\n }\r\n if (perfMarker) {\r\n perfMarker.willFetchData();\r\n }\r\n setLoadingData(true);\r\n loadDataAsync()\r\n .tapCatch((err) => { // throw out so that this error will be shown in console for easy debugging\r\n onFailedToLoadData(err);\r\n }).finally(() => {\r\n setLoadingData(false);\r\n if (perfMarker) {\r\n perfMarker.willRender();\r\n }\r\n dataLoaded();\r\n // setGridInited(true);\r\n });\r\n }, [isPageInited, loadDataAsync, onFailedToLoadData, reload, logger]);\r\n\r\n const loadNextPage = useCallback(() => {\r\n loadMoreData({ count: DEFAULT_PAGE_SIZE }).catch((err) => {\r\n onFailedToLoadData(err);\r\n });\r\n }, [loadMoreData, onFailedToLoadData]);\r\n\r\n const isPageLoading = !isPageInited\r\n || loadingData || isSectionDataLoadingStatus(sectionGridData) || reloadingFolders;\r\n\r\n const hadNoData = isSectionDataEmptyStatus(sectionGridData);\r\n\r\n useEffect(() => {\r\n if (!isPageLoading && hadNoData && !_.isFunction(renderEmptyView) && isAnyFilterSet) {\r\n setAnnouncedText(i18n.getString(_TL_('No assets match your search. Please try again.')));\r\n } else {\r\n setAnnouncedText('');\r\n }\r\n }, [hadNoData, i18n, isAnyFilterSet, isPageLoading, renderEmptyView]);\r\n\r\n return (\r\n
\r\n {/* grid header or toolbar */}\r\n {onRenderHeader()}\r\n\r\n {/* grid content */}\r\n
\r\n {(!dataOwnerPageName || dataOwnerPageName === AdsStudioPageName.LibraryPage) && (\r\n \r\n )}\r\n
\r\n {/* show loading indicator */}\r\n {isPageLoading && (\r\n \r\n \r\n \r\n )}\r\n\r\n {/* no content */}\r\n {(!isPageLoading && hadNoData) && (\r\n
\r\n {\r\n renderEmptyView ? renderEmptyView() : (\r\n 1)}\r\n isAnyFilterSet={isAnyFilterSet}\r\n onClickCreate={() => {\r\n AIGCHandler(isAdsStudioAIGCMVPEnabled, isAIGCRegionRestricted, notificationApi, i18n, () => {\r\n navigation.gotoAIGenerationPanelPage({ folderId: currentFolderId });\r\n });\r\n }}\r\n onClickUpload={onUploadLocalFileClick}\r\n onClickStock={onStockButtonClick}\r\n onClickWebsite={onWebsiteButtonClick}\r\n onClickInvest={onInvestButtonClick}\r\n isXandrIntegrationEnabled={isXandrIntegrationEnabled}\r\n />\r\n )\r\n }\r\n
\r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nAdsStudioLibraryPageContentInternal.propTypes = {\r\n dataService: PropTypes.shape({\r\n assets: PropTypes.arrayOf(PropTypes.shape({})),\r\n totalAssetCount: PropTypes.number,\r\n imageCroppingTasks: PropTypes.shape({}),\r\n loadData: PropTypes.func,\r\n loadMoreData: PropTypes.func,\r\n }).isRequired,\r\n onFailedToLoadData: PropTypes.func,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n logError: PropTypes.func,\r\n }).isRequired,\r\n ianaTimeZone: PropTypes.string.isRequired,\r\n dateFormat: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n getToday: PropTypes.func,\r\n formatCivilDate: PropTypes.func,\r\n }).isRequired,\r\n assetLibraryUserPreferences: PropTypes.shape({\r\n sortBy: PropTypes.string,\r\n setSortBy: PropTypes.func,\r\n }),\r\n assetLibraryAccountPreferences: PropTypes.shape({}),\r\n reload: PropTypes.shape({}), // if changed, force to reload\r\n renderHeader: PropTypes.func,\r\n renderGridCell: PropTypes.func,\r\n renderToolbar: PropTypes.func,\r\n\r\n dataLoaded: PropTypes.func,\r\n displayFolderPath: PropTypes.bool,\r\n reloadingFolders: PropTypes.bool,\r\n assetsToLoadForSubfolders: PropTypes.number,\r\n\r\n // multi selection\r\n multiSelectionEnabled: PropTypes.bool,\r\n onSelectionChange: PropTypes.func,\r\n // onFolderNavigationChange: PropTypes.func,\r\n sectionSelectedItems: PropTypes.shape({}),\r\n\r\n // searchLocationFilterState: PropTypes.string,\r\n // setSearchLocationFilterState: PropTypes.func,\r\n\r\n // realUsedFlagSuffix: PropTypes.string,\r\n isAssetLibraryAIGCMVPEnabled: PropTypes.bool,\r\n isAdsStudioAIGCMVPEnabled: PropTypes.bool,\r\n // isClickableOutsideFocusTrap: PropTypes.bool,\r\n\r\n // custom filter\r\n preDefinedAssetSources: PropTypes.arrayOf(PropTypes.shape({})),\r\n // disabledAssetSources: PropTypes.arrayOf(PropTypes.string),\r\n onCreateFolderClick: PropTypes.func,\r\n navigation: PropTypes.shape({\r\n gotoUploadFilesPanelPage: PropTypes.func,\r\n gotoUploadFolderPanelPage: PropTypes.func,\r\n gotoWebsiteImagePanelPage: PropTypes.func,\r\n gotoStockImagePanelPage: PropTypes.func,\r\n gotoAddVideoPanelPage: PropTypes.func,\r\n gotoAIGenerationPanelPage: PropTypes.func,\r\n gotoMixedImagePanelPage: PropTypes.func,\r\n gotoMixedVideoPanelPage: PropTypes.func,\r\n gotoInvestImagePanelPage: PropTypes.func,\r\n }),\r\n gridScrollContainer: PropTypes.string,\r\n isAIGCRegionRestricted: PropTypes.bool,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n\r\n};\r\n\r\nAdsStudioLibraryPageContentInternal.defaultProps = {\r\n assetLibraryUserPreferences: null,\r\n assetLibraryAccountPreferences: null,\r\n reload: null,\r\n renderHeader: null,\r\n renderGridCell: null,\r\n renderToolbar: null,\r\n onFailedToLoadData: () => null,\r\n dataLoaded: () => null,\r\n displayFolderPath: false,\r\n reloadingFolders: false,\r\n\r\n multiSelectionEnabled: false,\r\n onSelectionChange: undefined,\r\n // onFolderNavigationChange: _.noop,\r\n sectionSelectedItems: undefined,\r\n\r\n assetsToLoadForSubfolders: 1,\r\n\r\n // searchLocationFilterState: undefined,\r\n // setSearchLocationFilterState: undefined,\r\n\r\n // realUsedFlagSuffix: '',\r\n isAssetLibraryAIGCMVPEnabled: false,\r\n isAdsStudioAIGCMVPEnabled: false,\r\n // isClickableOutsideFocusTrap: false,\r\n\r\n preDefinedAssetSources: [],\r\n // disabledAssetSources: [],\r\n onCreateFolderClick: undefined,\r\n navigation: {},\r\n gridScrollContainer: '[role=\"main\"]',\r\n isAIGCRegionRestricted: false,\r\n permissions: { dynamic: {} },\r\n};\r\n\r\nexport const AdsStudioLibraryPageContent = AdsStudioLibraryPageContentInternal;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n DialogBody,\r\n DialogSurface,\r\n Button,\r\n makeStyles,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss20Regular } from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n dialog: {\r\n '&.fui-DialogSurface': {\r\n width: '450px',\r\n },\r\n },\r\n title: {\r\n wordBreak: 'break-word',\r\n },\r\n});\r\n\r\nexport const ConfirmDialog = (props) => {\r\n const {\r\n isDisplayed,\r\n title,\r\n errorText,\r\n confirmString,\r\n cancelString,\r\n onClickConfirm,\r\n onClickCancel,\r\n isUiBlocked,\r\n warningMsg,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n\r\n const DismissIcon = useMemo(() => , [onClickCancel]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n {\r\n warningMsg &&\r\n
\r\n {warningMsg}\r\n
\r\n }\r\n {\r\n errorText &&\r\n
\r\n {errorText}\r\n
\r\n }\r\n
\r\n \r\n 0 || isUiBlocked}\r\n className=\"dialog-confirm-button\"\r\n onClick={onClickConfirm}\r\n appearance=\"primary\"\r\n >\r\n {confirmString}\r\n \r\n \r\n {cancelString}\r\n \r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nConfirmDialog.propTypes = {\r\n isDisplayed: PropTypes.bool.isRequired,\r\n isUiBlocked: PropTypes.bool,\r\n title: PropTypes.string.isRequired,\r\n errorText: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n warningMsg: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n confirmString: PropTypes.string.isRequired,\r\n cancelString: PropTypes.string.isRequired,\r\n onClickConfirm: PropTypes.func.isRequired,\r\n onClickCancel: PropTypes.func.isRequired,\r\n customStyle: PropTypes.shape({}),\r\n};\r\n\r\nConfirmDialog.defaultProps = {\r\n errorText: '',\r\n warningMsg: '',\r\n isUiBlocked: false,\r\n customStyle: null,\r\n};\r\n","import React from 'react';\r\n\r\nexport const GenerateImageContext = React.createContext({});\r\n\r\n","import React, { useState } from 'react';\r\nimport { GenerateImageContext } from './generate-image-context';\r\n\r\nexport const GenerateImageContextProvider = (props) => {\r\n const [generateImageExample, setGenerateImageExample] = useState({\r\n prompt: undefined,\r\n imageUrl: undefined,\r\n });\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport const withGenerateImageContext = Component => props => (\r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\nimport {\r\n makeResetStyles,\r\n shorthands,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\n\r\nconst useLoadingViewStyles = makeResetStyles({\r\n width: '100%',\r\n ...shorthands.borderRadius('2px'),\r\n height: '4px',\r\n background: 'linear-gradient(to right, rgba(0, 120, 212, 0) 0%, #213AD5 50%, rgba(0, 120, 212, 0) 100%)',\r\n backgroundSize: '33%',\r\n backgroundRepeat: 'no-repeat',\r\n animation: 'loading_indicator 3s linear infinite',\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'linear',\r\n animationDuration: '3s',\r\n animationName: [{\r\n from: { backgroundPosition: '-50%' },\r\n to: { backgroundPosition: '150%' },\r\n }],\r\n backgroundColor: '#E6E6E6',\r\n forcedColorAdjust: 'none',\r\n});\r\n\r\nexport const LoadingIndicator = () => {\r\n const loadingViewStyles = useLoadingViewStyles();\r\n return (\r\n
\r\n );\r\n};\r\n","import ExampleBackground1 from './media/background1.jpg';\r\nimport ExampleBackground2 from './media/background2.jpg';\r\nimport ExampleBackground3 from './media/background3.jpg';\r\nimport ExampleBackground4 from './media/background4.jpg';\r\n\r\nexport const ExamplePromptList = [\r\n {\r\n backgroundImageUrl: ExampleBackground1,\r\n promptText: _TL_(' behind subtle floral patterns, having a fresh and vibrant summer garden atmosphere. Surrounded by soft greenery and natural sunlight.'),\r\n },\r\n {\r\n backgroundImageUrl: ExampleBackground2,\r\n promptText: _TL_(' on a sleek marble surface, having a clean and refreshing atmosphere. Surrounded by eucalyptus leaves and soft natural light filtering through a window.'),\r\n },\r\n {\r\n backgroundImageUrl: ExampleBackground3,\r\n promptText: _TL_(' is placed under a Christmas tree, with lots of gift boxes besides it, having Christmas atmosphere.'),\r\n },\r\n {\r\n backgroundImageUrl: ExampleBackground4,\r\n promptText: _TL_(' on a stone platform, having a serene and coastal atmosphere. Surrounded by beach reflections.'),\r\n },\r\n];\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { useMemo, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { HiddenDivForAnnounce } from '../hidden-div-for-announce';\r\nimport { ExamplePromptList } from './example-prompt';\r\n\r\nexport const ExampleImageListWithoutStyle = ({\r\n onSelectImage,\r\n classes,\r\n MultiLineEllipsisText,\r\n ExampleImageCell,\r\n i18n,\r\n labelId,\r\n}) => {\r\n const [announcedText, setAnnouncedText] = useState('');\r\n const promptList = useMemo(() => ExamplePromptList.map(x => ({\r\n ...x,\r\n promptText: i18n.getString(x.promptText),\r\n })), [i18n]);\r\n\r\n const wrappedOnSelectImage = useCallback((promptText, index) => {\r\n onSelectImage(promptText, index);\r\n setAnnouncedText(i18n.getString(_TL_('Set the prompt to {{promptText}}'), { promptText }));\r\n }, [onSelectImage, i18n]);\r\n\r\n return (\r\n
\r\n {_.map(promptList, (template, index) => (\r\n \r\n ))}\r\n \r\n
);\r\n};\r\n\r\nExampleImageListWithoutStyle.propTypes = {\r\n onSelectImage: PropTypes.func.isRequired,\r\n classes: PropTypes.shape({\r\n exampleImageList: PropTypes.string,\r\n }),\r\n labelId: PropTypes.string,\r\n};\r\n\r\nExampleImageListWithoutStyle.defaultProps = {\r\n classes: {},\r\n labelId: '',\r\n};\r\n\r\n","import classNames from 'classnames';\r\nimport React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const ExampleImageCellWithoutStyle = ({\r\n backgroundImageUrl,\r\n promptText,\r\n onSelectImage,\r\n index,\r\n classes,\r\n MultiLineEllipsisText,\r\n}) => {\r\n // when press Enter key, trigger the click event\r\n const onKeyDown = useCallback((event) => {\r\n if (event.key === 'Enter') {\r\n onSelectImage(promptText, index);\r\n }\r\n }, [index, onSelectImage, promptText]);\r\n\r\n const onClick = useCallback(() => {\r\n onSelectImage(promptText, index);\r\n }, [index, onSelectImage, promptText]);\r\n\r\n return (\r\n \r\n {`Example\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nExampleImageCellWithoutStyle.propTypes = {\r\n backgroundImageUrl: PropTypes.string.isRequired,\r\n promptText: PropTypes.string.isRequired,\r\n onSelectImage: PropTypes.func.isRequired,\r\n index: PropTypes.number.isRequired,\r\n classes: PropTypes.shape({\r\n exampleImageCell: PropTypes.string,\r\n }),\r\n};\r\n\r\nExampleImageCellWithoutStyle.defaultProps = {\r\n classes: {},\r\n};\r\n","import React from 'react';\r\nimport { Button, Textarea, mergeClasses, useId } from '@fluentui/react-components';\r\nimport {\r\n SendRegular,\r\n} from '@fluentui/react-icons';\r\n\r\nexport const MAX_PROMPT_LENGTH = 200;\r\n\r\nexport const PromptEditor = (props) => {\r\n const {\r\n i18n,\r\n prompt,\r\n setPrompt,\r\n disabledText,\r\n disabledButton,\r\n onKeyDownInTextArea,\r\n onClickGenerateButton,\r\n placeholder,\r\n } = props;\r\n\r\n const textAreaId = useId('prompt-editor-textarea');\r\n\r\n return (\r\n <>\r\n
{i18n.getString(_TL_('What background do you want to create?'))}
\r\n
\r\n setPrompt(data.value)}\r\n onKeyDown={onKeyDownInTextArea}\r\n className=\"prompt-textarea\"\r\n aria-label={i18n.getString(_TL_('Prompt Editor'))}\r\n aria-describedby={textAreaId}\r\n placeholder={placeholder}\r\n disabled={disabledText}\r\n />\r\n
{i18n.getString(_TL_('{{prompt}}'), { prompt })}
\r\n
\r\n }\r\n appearance=\"transparent\"\r\n onClick={onClickGenerateButton}\r\n disabled={disabledButton}\r\n className={mergeClasses('generate-button', disabledButton ? 'disabled' : 'enabled')}\r\n aria-label={i18n.getString(_TL_('Expand background'))}\r\n />\r\n
\r\n
\r\n \r\n );\r\n};\r\n","import React, { useRef, useEffect, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const ObjectSelectionImageView = ({\r\n i18n,\r\n originalImageUrl,\r\n originalImageHeight,\r\n originalImageWidth,\r\n getMaskValueAtPoint,\r\n updateHighlightedImage,\r\n isFetchingSegmentations,\r\n toggleSelectedMask,\r\n borderImageSrc,\r\n workingSelectedImageSrc,\r\n highlightedImageSrc,\r\n maskValues,\r\n logger,\r\n}) => {\r\n // get image from offscreen canvas\r\n // draw the canvas in the front\r\n const imageContainer = useRef(null);\r\n const [maskIndex, setMaskIndex] = useState(undefined);\r\n\r\n const windowToImgPosition = useCallback((x, y) => {\r\n if (imageContainer.current) {\r\n const imageBox = imageContainer.current.getBoundingClientRect();\r\n const targetWidth = imageBox.width;\r\n const targetHeight = imageBox.height;\r\n // calculate the ratio of the original image and the target image for object-fit: contain\r\n const wr = targetWidth / originalImageWidth;\r\n const hr = targetHeight / originalImageHeight;\r\n const ratio = Math.min(wr, hr);\r\n const width = originalImageWidth * ratio;\r\n const height = originalImageHeight * ratio;\r\n const leftToImage = (targetWidth - width) / 2.0;\r\n const topToImage = (targetHeight - height) / 2.0;\r\n const { top, left } = imageBox;\r\n return {\r\n x: ((x - left) - leftToImage) * (originalImageWidth / width),\r\n y: ((y - top) - topToImage) * (originalImageHeight / height),\r\n };\r\n }\r\n return { x: -1, y: -1 };\r\n }, [originalImageHeight, originalImageWidth]);\r\n\r\n const mousemoveHandler = useCallback((e) => {\r\n const { x, y } = windowToImgPosition(e.clientX, e.clientY);\r\n const maskValue = getMaskValueAtPoint(x, y, originalImageWidth);\r\n updateHighlightedImage(maskValue);\r\n }, [getMaskValueAtPoint, originalImageWidth, updateHighlightedImage, windowToImgPosition]);\r\n\r\n const mouseleaveHandler = useCallback(() => {\r\n updateHighlightedImage(undefined);\r\n }, [updateHighlightedImage]);\r\n\r\n const mousedownHandler = useCallback((e) => {\r\n const { x, y } = windowToImgPosition(e.clientX, e.clientY);\r\n const maskValue = getMaskValueAtPoint(x, y, originalImageWidth);\r\n if (maskValue > 0) {\r\n toggleSelectedMask(maskValue);\r\n logger.logTrace('Copilot change image background - object selection view - object selection');\r\n }\r\n }, [getMaskValueAtPoint, logger, originalImageWidth, toggleSelectedMask, windowToImgPosition]);\r\n\r\n const keyHandler = useCallback((e) => {\r\n if (maskValues && maskValues.length > 0) {\r\n if (e.key === 'Tab') {\r\n if (e.shiftKey === true) {\r\n if (maskIndex === undefined) {\r\n setMaskIndex(maskValues.length - 1);\r\n updateHighlightedImage(maskValues[maskValues.length - 1]);\r\n e.preventDefault();\r\n } else if (maskIndex - 1 >= 0) {\r\n setMaskIndex((maskIndex - 1));\r\n updateHighlightedImage(maskValues[(maskIndex - 1)]);\r\n e.preventDefault();\r\n }\r\n } else if (e.shiftKey === false) {\r\n if (maskIndex === undefined) {\r\n setMaskIndex(0);\r\n updateHighlightedImage(maskValues[0]);\r\n e.preventDefault();\r\n } else if ((maskIndex + 1) < maskValues.length - 1) {\r\n setMaskIndex((maskIndex + 1));\r\n updateHighlightedImage(maskValues[(maskIndex + 1)]);\r\n e.preventDefault();\r\n }\r\n }\r\n } else if (e.key === 'Enter' && maskIndex !== undefined) {\r\n toggleSelectedMask(maskValues[maskIndex]);\r\n logger.logTrace('Copilot change image background - object selection view - object selection');\r\n e.preventDefault();\r\n }\r\n }\r\n }, [logger, maskIndex, maskValues, toggleSelectedMask, updateHighlightedImage]);\r\n\r\n const resetMaskHandler = useCallback(() => {\r\n setMaskIndex(undefined);\r\n updateHighlightedImage(undefined);\r\n }, [updateHighlightedImage]);\r\n\r\n useEffect(() => {\r\n const imageBox = imageContainer.current;\r\n if (imageBox) {\r\n imageBox.addEventListener('mousemove', mousemoveHandler);\r\n imageBox.addEventListener('mouseleave', mouseleaveHandler);\r\n imageBox.addEventListener('mousedown', mousedownHandler);\r\n imageBox.addEventListener('keydown', keyHandler);\r\n imageBox.addEventListener('blur', resetMaskHandler);\r\n imageBox.addEventListener('focus', resetMaskHandler);\r\n }\r\n return () => {\r\n if (imageBox) {\r\n imageBox.removeEventListener('mousemove', mousemoveHandler);\r\n imageBox.removeEventListener('mouseleave', mouseleaveHandler);\r\n imageBox.removeEventListener('mousedown', mousedownHandler);\r\n imageBox.removeEventListener('keydown', keyHandler);\r\n imageBox.removeEventListener('blur', resetMaskHandler);\r\n imageBox.addEventListener('focus', resetMaskHandler);\r\n }\r\n };\r\n }, [windowToImgPosition, mousemoveHandler, mouseleaveHandler, mousedownHandler, keyHandler, resetMaskHandler]);\r\n\r\n return (\r\n \r\n {originalImageUrl && (\r\n <>\r\n {i18n.getString(_TL_('Original\r\n
\r\n {isFetchingSegmentations && (
)}\r\n {!isFetchingSegmentations && (\r\n <>\r\n {(borderImageSrc && {i18n.getString(_TL_('Border)}\r\n {(workingSelectedImageSrc && {i18n.getString(_TL_('Selected)}\r\n {(highlightedImageSrc && {i18n.getString(_TL_('Highlighted)}\r\n \r\n )}\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\n\r\nObjectSelectionImageView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n originalImageUrl: PropTypes.string.isRequired,\r\n originalImageHeight: PropTypes.number.isRequired,\r\n originalImageWidth: PropTypes.number.isRequired,\r\n getMaskValueAtPoint: PropTypes.func.isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n maskValues: PropTypes.arrayOf(PropTypes.number),\r\n isFetchingSegmentations: PropTypes.bool.isRequired,\r\n};\r\n\r\nObjectSelectionImageView.defaultProps = {\r\n maskValues: [],\r\n};\r\n","import { useCallback } from 'react';\r\n\r\nexport const useUploadAsset = ({ dataService, perfMarker, isUploadImageUpscaleEnabled }) => {\r\n let videoUploadPerfMarker;\r\n\r\n const uploadFileAsync = useCallback(({\r\n dataURL,\r\n fileObject,\r\n nameWithoutExt,\r\n updateCurrentProgress,\r\n isVideo,\r\n folderId,\r\n uploadCallback,\r\n }) => {\r\n if (perfMarker) {\r\n videoUploadPerfMarker = perfMarker.createChild('videoUpload');\r\n videoUploadPerfMarker.willInit();\r\n }\r\n\r\n const commonOptions = {\r\n updateCurrentProgress,\r\n name: nameWithoutExt,\r\n folderId,\r\n };\r\n\r\n if (isVideo) {\r\n return dataService.uploadVideo({\r\n ...commonOptions,\r\n fileObject,\r\n perfMarker: videoUploadPerfMarker,\r\n }).then((res) => {\r\n if (uploadCallback) {\r\n uploadCallback(res);\r\n }\r\n });\r\n }\r\n\r\n return dataService.uploadImage({\r\n ...commonOptions,\r\n imageData: dataURL,\r\n supportUpscale: isUploadImageUpscaleEnabled ? true : undefined,\r\n }).then((res) => {\r\n if (uploadCallback) {\r\n uploadCallback(res);\r\n }\r\n });\r\n }, [dataService, isUploadImageUpscaleEnabled, videoUploadPerfMarker]);\r\n\r\n return {\r\n uploadFileAsync,\r\n };\r\n};\r\n","import { useCallback, useRef } from 'react';\r\nimport {\r\n validateImageAsync as validateImageAsyncInternal,\r\n validateVideoAsync,\r\n readFileAsDataURLAsync,\r\n} from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { getImageDetailAsync } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { MIN_SIZE, UPSCALE_MIN_SIZE } from '../model';\r\n\r\nconst READ_VIDEO_MAX_TIME = 10000; // 10s\r\n\r\nexport const useReadAsset = () => {\r\n const readFileAsync = useCallback((fileObject, { isVideo } = {}) => {\r\n if (isVideo) {\r\n // for video, data URl is optional to MT request, so here swallow the error to unblock next.\r\n return readFileAsDataURLAsync(fileObject).timeout(READ_VIDEO_MAX_TIME).catch(() => {});\r\n }\r\n\r\n return readFileAsDataURLAsync(fileObject);\r\n }, []);\r\n\r\n return {\r\n readFileAsync,\r\n };\r\n};\r\n\r\nexport const useValidateAsset = () => {\r\n const isImageUpscaledRef = useRef(false);\r\n\r\n const validateImageAsync = useCallback(\r\n ({ dataURL, isUploadImageUpscaleEnabled }) => validateImageAsyncInternal({\r\n imageSource: dataURL,\r\n minimumHeight: isUploadImageUpscaleEnabled ? UPSCALE_MIN_SIZE[1] : MIN_SIZE[1],\r\n minimumWidth: isUploadImageUpscaleEnabled ? UPSCALE_MIN_SIZE[0] : MIN_SIZE[0],\r\n })\r\n .then(() => getImageDetailAsync(dataURL))\r\n .then((img) => {\r\n if (isUploadImageUpscaleEnabled && img &&\r\n ((img.naturalWidth >= UPSCALE_MIN_SIZE[0] && img.naturalWidth < MIN_SIZE[0]) ||\r\n (img.naturalHeight >= UPSCALE_MIN_SIZE[1] && img.naturalHeight < MIN_SIZE[1]))\r\n ) {\r\n isImageUpscaledRef.current = true;\r\n } else {\r\n isImageUpscaledRef.current = false;\r\n }\r\n return {\r\n isImageUpscaled: isImageUpscaledRef.current,\r\n };\r\n })\r\n , []\r\n );\r\n\r\n const validateFileAsync = useCallback(({ dataURL, isVideo, isUploadImageUpscaleEnabled }) => {\r\n if (isVideo) {\r\n return validateVideoAsync();\r\n }\r\n\r\n return validateImageAsync({ dataURL, isUploadImageUpscaleEnabled });\r\n }, [validateImageAsync]);\r\n\r\n return {\r\n validateImageAsync,\r\n validateFileAsync,\r\n };\r\n};\r\n","import { useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n supportedVideoExtensions,\r\n} from '../model/constants';\r\n\r\nconst checkExtension = (supportedList, ext) => {\r\n if (ext && !_.isEmpty(supportedList)) {\r\n const extToCheck = ext.toLowerCase();\r\n\r\n return _.chain(supportedList)\r\n .map(item => item.toLowerCase())\r\n .contains(extToCheck)\r\n .value();\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const useCustomizedHandlerOptions = () => {\r\n const getCustomizedHandlerOptions = useCallback(({ ext } = {}) => ({\r\n isVideo: checkExtension(supportedVideoExtensions, ext),\r\n }), []);\r\n\r\n return {\r\n getCustomizedHandlerOptions,\r\n };\r\n};\r\n","import React, { useCallback, useState } from 'react';\r\nimport classNames from 'classnames';\r\nimport { map, each, get, contains, filter } from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { makeStyles, shorthands, } from '@fluentui/react-components';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\nimport { parseFileName, generatePreviewArray, updateFilePreviewArrayUploadProgress, updateProgress, MaximumImageFileSizeMB, MaximumVideoFileSizeMB, } from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { runJobsInParallelWithRateLimit } from '@bingads-webui-universal/parallel-job-with-rate-limit';\r\nimport {\r\n getImageValidationErrorMessage,\r\n} from '@bingads-webui-campaign/image-experience-utils';\r\nimport { MaxAddAssetJobInParell, supportedImageExtensions, supportedVideoExtensions } from '../model';\r\nimport { getAssetUploadError } from '../utils';\r\nimport { useUploadAsset } from './use-upload-asset';\r\nimport { useReadAsset, useValidateAsset } from './use-validate-asset';\r\nimport { useCustomizedHandlerOptions } from './use-customized-handler-options';\r\n\r\nconst MAX_UPSCALED_SIZE = 4;\r\n\r\nconst useStyles = makeStyles({\r\n linkButton: {\r\n color: '#337ab7',\r\n fontWeight: 'normal',\r\n backgroundColor: 'transparent',\r\n ...shorthands.borderRadius('0px', '0px', '0px', '0px'),\r\n ...shorthands.border('none'),\r\n },\r\n});\r\n\r\nexport const useUploadFiles = ({\r\n logger, dataService, perfMarker, notificationApi, i18n, onFilesAddedCallback, aid, setErrors, filePickerI18n, uploadCallback, isUploadImageUpscaleEnabled,\r\n}) => {\r\n const [previewArr, setPreviewArr] = useState([]);\r\n const { readFileAsync } = useReadAsset();\r\n const { validateFileAsync } = useValidateAsset();\r\n const { uploadFileAsync } = useUploadAsset({ dataService, perfMarker, isUploadImageUpscaleEnabled });\r\n const { getCustomizedHandlerOptions } = useCustomizedHandlerOptions();\r\n const classes = useStyles();\r\n\r\n const onFileRead = useCallback((selectedFiles, callback) => {\r\n setErrors([]);\r\n\r\n const isMultipleFiles = selectedFiles.length > 1;\r\n const customizedOptions = map(selectedFiles, (file) => {\r\n const { nameWithoutExt, ext } = parseFileName(file.name);\r\n\r\n const passedOptions = getCustomizedHandlerOptions({\r\n nameWithoutExt,\r\n ext,\r\n });\r\n\r\n return {\r\n ...passedOptions,\r\n nameWithoutExt,\r\n };\r\n });\r\n\r\n // there is a perf concern for large video file\r\n // previous design is reading files first and then process\r\n // for video, may need different handling, will address it later\r\n return Promise.map(\r\n selectedFiles,\r\n (fileObj, index) => readFileAsync(fileObj, customizedOptions[index])\r\n ).then((fileSources) => {\r\n const fileAdditionalInfoArr = [];\r\n const validateFilePromise = Promise.map(\r\n fileSources,\r\n (fileSource, index) =>\r\n validateFileAsync({\r\n isUploadImageUpscaleEnabled,\r\n dataURL: fileSource,\r\n ...customizedOptions[index],\r\n }).then((validatedResult) => {\r\n const isImageUpscaled = get(validatedResult, 'isImageUpscaled', false);\r\n const { nameWithoutExt } = customizedOptions[index];\r\n fileAdditionalInfoArr[index] = {\r\n isImageUpscaled,\r\n text: nameWithoutExt,\r\n };\r\n }).catch((e) => {\r\n if (e && e.message === 'SizeValidationError' && logger && logger.logTrace) {\r\n logger.logTrace(`Add Media Panel per file - SizeValidationError: ${stringifySync(e)}`);\r\n logger.logTrace(`Add Media Panel per file - SizeValidationError - ImageSource: ${stringifySync(fileSource)}`);\r\n }\r\n throw e;\r\n })\r\n );\r\n\r\n const doubleValidateFilePromise = validateFilePromise\r\n .then(() => {\r\n const needUpscaledImage = filter(fileAdditionalInfoArr, item => item && item.isImageUpscaled);\r\n if (needUpscaledImage.length > MAX_UPSCALED_SIZE) {\r\n // When the need upscaled image count over the max size, should skip the upscale feature and use original threshold to validate again.\r\n return Promise.map(fileSources, (fileSource, index) => {\r\n if (fileAdditionalInfoArr[index].isImageUpscaled === true) {\r\n return validateFileAsync({\r\n isUploadImageUpscaleEnabled: false,\r\n dataURL: fileSource,\r\n ...customizedOptions[index],\r\n }).catch((e) => {\r\n if (e && e.message === 'SizeValidationError' && logger && logger.logTrace) {\r\n logger.logTrace(`Add Media Panel per file - SizeValidationError: ${stringifySync(e)}`);\r\n logger.logTrace(`Add Media Panel per file - SizeValidationError - ImageSource: ${stringifySync(fileSource)}`);\r\n }\r\n throw e;\r\n });\r\n }\r\n return Promise.resolve();\r\n });\r\n }\r\n return Promise.resolve();\r\n });\r\n\r\n return doubleValidateFilePromise.then(() => {\r\n const sourcesForPreview = generatePreviewArray({\r\n files: selectedFiles,\r\n fileSources,\r\n customizedOptions,\r\n });\r\n\r\n setPreviewArr(sourcesForPreview);\r\n\r\n const setProgress = (index, progress) => {\r\n setPreviewArr((prevArr) => {\r\n const newState =\r\n updateFilePreviewArrayUploadProgress(index, progress)({ previewArr: prevArr });\r\n\r\n return newState.previewArr;\r\n });\r\n };\r\n\r\n const uploadBatchs = [];\r\n\r\n each(fileSources, (fileSource, index) => {\r\n const { nameWithoutExt } = customizedOptions[index];\r\n\r\n uploadBatchs.push(() => uploadFileAsync({\r\n dataURL: fileSource,\r\n fileObject: selectedFiles[index],\r\n updateCurrentProgress: updateProgress({\r\n setProgress,\r\n index,\r\n uploadProgressBoundary: 1,\r\n }),\r\n uploadCallback,\r\n nameWithoutExt,\r\n ...customizedOptions[index],\r\n }));\r\n });\r\n\r\n const uploadErrorCodeArr = [];\r\n const handleJobError = (err) => {\r\n const errorCode = get(err, ['body', 'value', 0, 'Code'], '');\r\n\r\n // when errorCode is empty, it means some server error, e.g. 500 response\r\n uploadErrorCodeArr.push(errorCode);\r\n };\r\n return runJobsInParallelWithRateLimit({\r\n jobsToRateLimit: uploadBatchs,\r\n maxJobsInParallel: MaxAddAssetJobInParell,\r\n handleJobError,\r\n })\r\n .then((uploadResult) => {\r\n const errorMsg = getAssetUploadError({\r\n uploadErrorCodeArr,\r\n filePickerI18n,\r\n aid,\r\n logger,\r\n i18n,\r\n });\r\n\r\n if (errorMsg) {\r\n onFilesAddedCallback();\r\n setPreviewArr([]);\r\n notificationApi.showWarning(errorMsg);\r\n logger.logTrace(`Add Media Panel: failed to upload assets to folder, error: ${errorMsg}`);\r\n } else {\r\n const assetIds = uploadResult && uploadResult.join(',');\r\n logger.logTrace('Add Media Panel: saved uploaded assets to folder', { assetIds });\r\n\r\n const upscaledImagesArr = filter(fileAdditionalInfoArr, item => item && item.isImageUpscaled);\r\n const upscaledImagesArrCount = upscaledImagesArr.length;\r\n\r\n if (upscaledImagesArrCount > 0) {\r\n notificationApi.showInfo(i18n.getString(_TL_('Your assets were uploaded and we upscaled {{fileCount}} image(s) to meet the minimum required file size. You can always upload higher quality images if needed.'), { fileCount: upscaledImagesArrCount }));\r\n } else {\r\n notificationApi.showInfo((\r\n \r\n {i18n.getString(_TL_('Your assets were successfully uploaded.'))}\r\n \r\n \r\n ));\r\n }\r\n onFilesAddedCallback();\r\n setPreviewArr([]);\r\n }\r\n });\r\n });\r\n }).catch((e) => {\r\n const genericErrorMsg = i18n.getString(_TL_('We\\'ve encountered an error and can\\'t continue.'));\r\n const newErrors = [\r\n getImageValidationErrorMessage(e, filePickerI18n, isMultipleFiles, isUploadImageUpscaleEnabled /* skipDimension */) || genericErrorMsg,\r\n ];\r\n setPreviewArr([]);\r\n setErrors(newErrors);\r\n\r\n logger.logTrace(`Add Media Panel: failed to upload assets to folder, error: ${newErrors[0]}`);\r\n if (e && e.message === 'SizeValidationError' && logger && logger.logTrace) {\r\n logger.logTrace(`Add Media Panel - SizeValidationError: ${stringifySync(e)}`);\r\n }\r\n }).finally(() => {\r\n callback();\r\n });\r\n }, [setErrors, getCustomizedHandlerOptions, readFileAsync, validateFileAsync, logger, uploadFileAsync, uploadCallback, filePickerI18n, aid, onFilesAddedCallback, notificationApi, i18n, classes.linkButton, isUploadImageUpscaleEnabled]);\r\n\r\n return {\r\n onFileRead,\r\n previewArr,\r\n };\r\n};\r\n\r\nexport const isReachFileSizeLimit = ({ ext, fileSizeMB }) => {\r\n let limitMB;\r\n\r\n if (contains(supportedImageExtensions, ext)) {\r\n limitMB = MaximumImageFileSizeMB;\r\n } else if (contains(supportedVideoExtensions, ext)) {\r\n limitMB = MaximumVideoFileSizeMB;\r\n }\r\n\r\n return limitMB > 0 && fileSizeMB > limitMB;\r\n};\r\n\r\nexport const getReachFileSizeLimitErrorMessage = ({ i18n }) =>\r\n i18n.getString(\r\n _TL_('One or more assets exceed the maximum file size. Please upload images that are smaller than {{maximumImageFileSize}} MB and videos that are smaller than {{maximumVideoFileSize}} MB.'),\r\n {\r\n maximumImageFileSize: MaximumImageFileSizeMB,\r\n maximumVideoFileSize: MaximumVideoFileSizeMB,\r\n }\r\n );\r\n","import _ from 'underscore';\r\nimport { GetJsDataInfo } from '@bingads-webui-clientcenter/js-data-cc-rest-base';\r\n\r\nconst ccJSData = {\r\n jsDataCcRest: null,\r\n};\r\n\r\nexport const initCcJsData = ({ serverContext }) => {\r\n if (!ccJSData.jsDataCcRest) {\r\n const options = {\r\n cidFetcher: () => serverContext.CurrentCustomer.Id,\r\n uidFetcher: () => serverContext.CurrentUser.Id,\r\n appendErrorSummary: _.noop,\r\n handleAjaxAuthFailure: _.noop,\r\n willSupportCors: true,\r\n };\r\n\r\n ccJSData.jsDataCcRest = GetJsDataInfo(options, serverContext.ServicesEndpoints.ClientCenterUIAPI, []).jsDataCcRest;\r\n }\r\n\r\n return ccJSData;\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CcJsDataContextProvider } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { initCcJsData } from './init-cc-js-data';\r\n\r\nexport const withCcJsDataContextProvider = (WrappedComponent) => {\r\n const HOC = (props) => {\r\n const { serverContext } = props;\r\n const { jsDataCcRest } = initCcJsData({ serverContext });\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n serverContext: PropTypes.shape({\r\n CurrentUser: PropTypes.shape({ Id: PropTypes.number }).isRequired,\r\n CurrentCustomer: PropTypes.shape({ Id: PropTypes.number }).isRequired,\r\n ServicesEndpoints: PropTypes.shape({\r\n ClientCenterUIAPI: PropTypes.string.isRequired,\r\n }),\r\n }).isRequired,\r\n };\r\n\r\n return withServerContext(HOC);\r\n};\r\n"],"names":["videoIcon","SparkeSVGIcon","_jsxs","xmlns","width","height","viewBox","fill","children","_jsx","d","id","x1","y1","x2","y2","gradientUnits","stopColor","offset","HollowSparkleSVGIcon","BlackSparkleSVGIcon","InfoSparkleSVGIcon","SquareDismissIcon","_ref","i18n","src","squareDismissImage","alt","getString","_TL_","SpinnerIcon","spinnerBase","className","EntryCardSVGIcons","CreateSVGIcon","UploadSVGIcon","StockSVGIcon","InvestSVGIcon","PdfSVGIcon","WebsiteSVGIcon","WarningSVGIcon","CreateManualBrandKitSVGIcon","BrandKitLogoIconSVG","AIWarningIcon","AIWarningIconSource","ChooseImageIcon","ChooseImageSVG","EmptyViewIcons","ImageEmptyViewSVG","LibraryEmptyViewSVG","VideoEmptyViewSVG","CSMLAdType","MMA","Audience","ImageExtension","PMax","CSMLSortIcon","SortUp","SortDown","CSMLSortBy","ImageName","ImageNameDesc","MostRecent","MostRecentAsc","LastCreated","LastCreatedAsc","TopRated","AssetIdAsc","AssetIdDesc","ClickAsc","ClickDesc","ClickPeriodAsc","ClickPeriodDesc","ClickChangeAsc","ClickChangeDesc","ClickChangePercentAsc","ClickChangePercentDesc","CTRAsc","CTRDesc","CTRPeriodAsc","CTRPeriodDesc","CTRChangeAsc","CTRChangeDesc","CTRChangePercentAsc","CTRChangePercentDesc","ImpressionAsc","ImpressionDesc","ImpressionPeriodAsc","ImpressionPeriodDesc","ImpressionChangeAsc","ImpressionChangeDesc","ImpressionChangePercentAsc","ImpressionChangePercentDesc","SpendAsc","SpendDesc","SpendPeriodAsc","SpendPeriodDesc","SpendChangeAsc","SpendChangeDesc","SpendChangePercentAsc","SpendChangePercentDesc","CSMLVideoDuration","min","max","unlimited","CSMLTimeFrame","Anytime","Today","Last7Days","Last30Days","Custom","CSMLImportSource","Google","Facebook","CSMLAssetSource","UserUploaded","AIGenerated","Website","Shutterstock","BackgroundChangeGenerated","AIGeneratedByRecraft","ManualAddedImageSource","Library","ShutterStock","AIModelSource","Dalle","Recraft","DEFAULT_PAGE_SIZE","MIN_SIZE","UPSCALE_MIN_SIZE","ClarityTags","LaunchedAdsStudio","LaunchedAddImageAssetsFromAdsStudio","DisplayTemplateHomePage","EditDisplayTemplateImage","CreateDisplayTemplate","BrandKitPage","EditBrandKitImage","EditBrandKitLogo","CSMLAdTypeAbbr","_defineProperty","ROOT_FOLDER_ID","FolderAssetType","Image","Video","All","Folder","RootFolderName","isRootFolderId","folderIdToTest","supportedImageExtensions","GridSectionName","Asset","MaxAddAssetJobInParell","VideoStatus","Unverified","Draft","Active","Failed","AdsStudioPageName","LibraryPage","PerfPage","WebsiteImagePanelPage","StockImagePanelPage","AddVideoPanelPage","UploadFilesPanelPage","UploadFolderPanelPage","MixedImagePanelPage","MixedVideoPanelPage","EditImagePage","AssetDetailsPage","BackgroundRemovalModalPage","InvestImagePanelPage","InvestVideoPanelPage","AdditionalQueries","Query","FolderId","EditImageUrl","InitialCurrentView","TemplateId","TemplateGroupId","AdStudioSurveyTriggerFlag","App","RealUsedFlagSuffix","FilterType","SearchText","AssetType","ImageSize","VideoDuration","DateAdded","ImportSource","AssetSource","SearchTextFilter","type","title","AssetTypeFilter","DateAddedFilter","ImageSizeFilter","ImportSourceFilter","AssetSourceFilter","VideoDurationFilter","AllSupportedFilters","getAssetTypeOptions","key","text","MAX_DAYS","getTimeDescription","timestamp","_","now","Date","diffInSec","Math","round","seconds","diffInMin","minutes","diffInHour","hours","diffInDay","days","convertTimeDuration","DurationInMS","floor","timeArr","push","concat","join","getDateAddedChoiceOptions","timeZone","todayObj","getToday","today","CivilDate","year","month","day","last7day","plus","last30day","range","start","end","getImportSourceOptions","getSortingOptions","icon","getAssetSourceOptions","_CSMLSortingRequestPa","sortBy","sortDirection","imageAdExtSettings","C","getPlacementConfig","PT","LandscapeImage","isRequired","aspectRatioUIString","previewTypeString","WideImage","SquareImage","VerticalImage","MSAN","MSEdgeSingleCarousel","MSNInArticle","MSNSmallHeadline","AudienceSquareImage","AudienceWideImage","MMALandscapeImage","MMAVerticalImage","MMAWideImage","MMAV2MSEdgeCarousel","MMAV2MSNSingleCarousel","MMAV2MSNRestoday","MMAV2MSNPartnerStripe","MMAV2MSNRiver","MSEdgeMobile","MSANV2","MSEdgeCarousel","MSANBanner","MSANRiver","MSNCarousel","MSNPartnerStripe","MSNRestoday","MSANRectangle","ImageExt","BingDesktopSingleImage","MSEdgeMediumHeadline","MSNSingleCarousel","MSNMediumHeadline","BingDesktopMultiImage","BingMobileMultiImage","MSNDoubleCarousel","getAspectRatioConfig","adType","isMMAV2Enabled","isPMaxAspectRatiosV2Enabled","aspectRatios","getAspectRatios","isMultimediaAd","isMultimediaAdinMSANEnabled","isCombinedMsanAndMmaAspectRatios","allAspectRatioConfig","Image191x100","aspectRatio","aspectRatioAsRatio","aspectRatioString","Image4x1","Image1x1","Image1x2","Image178x100","extraExtension","BingSingleImage","Image172x100","Image169x100","Image150x100","Image155x100","Image133x100","MobileMultiImage","BingDesktopImage","Image93x100","Image201x100","Image200x100","Image153x100","Image124x100","Image120x100","aspectRatiosExceptOriginal","item","_objectSpread","minSize","placementType","getPreviewText","isImageExtension","shortHeadline","longHeadline","description","businessName","url","finalUrl","callToAction","sizeValidForRatio","cropSettings","SourceWidth","SourceHeight","getSizeErrorRatioList","requiredOnly","arguments","length","undefined","ratioList","config","getAllSizeErrorRatioList","errorListForMMA","errorListForAudience","errorListForExtension","errorListForPmax","Pmax","_toConsumableArray","getPlacementsToExpand","reject","p","map","_ref2","minHeight","value","AIPromptExamples","promptText","imageSrc","getUpdatedAssets","assets","_ref$updates","updates","imageCroppingTasks","videoUpdated","updatedAssets","asset","taskStatus","updating","isFinished","newUpdates","status","useClarityTags","customTags","_useState","useState","_useState2","_slicedToArray","haveSetClarityTags","setHaveSetClarityTags","useEffect","tagsToSet","reduce","tagsObj","currentTag","setClarityTag","ExternalEntityType","checkVideosIntermediateStatus","video","getSizeLimitPerAccount","aid","localStorage","getItem","valObj","JSON","parse","e","limitData","data","val","isValidXandrAccount","account","ExternalAccountIds","externalAccountId","Type","Id","getEntryCardData","_ref$cardKeys","cardKeys","_ref$onClickCreate","onClickCreate","_ref$onClickUpload","onClickUpload","_ref$onClickStock","onClickStock","_ref$onClickInvest","onClickInvest","_ref$onClickWebsite","onClickWebsite","_ref$isImagePage","isImagePage","_ref$isVideoPage","isVideoPage","_ref$isXandrIntegrati","isXandrIntegrationEnabled","uploadDescription","websiteDescription","websiteTitle","createDescription","createTitle","investDescription","cardData","image","onClick","filter","card","includes","getHomePageCardData","_ref2$cardKeys","_ref2$onClickUpload","_ref2$onClickStock","_ref2$onClickWebsite","_ref2$onClickInvest","_ref2$isXandrIntegrat","getImageAssetLimitPerAccount","logger","assetLimit","logError","getFoldersLimitPerAccount","foldersLimit","getVideoAssetLimitPerAccount","validate","test","getSearchQuery","_ref3","_ref3$search","search","_ref3$additionalQueri","additionalQueries","_ref3$removeQueries","removeQueries","query","queryString","AIGCHandler","isAdsStudioAIGCMVPEnabled","isAIGCRegionRestricted","notificationApi","enabledCallback","showWarning","getRealUsedFlagValue","preference","flagSuffix","realUsedFlagStr","realUsedFlagHandlerStr","realUsedFlag","realUsedFlagHandler","handleRealUsedFlag","_getRealUsedFlagValue","haveUsed","addAdStudioSurveyTriggerFlag","triggerFlag","usedFlagSuffix","_ref5","getTime","window","survey","surveyManager","trigger","checkIfSurveyIsOpen","removeAdStudioSurveyTriggerFlag","commonButtonStyle","display","shorthands","padding","justifyContent","alignItems","gap","borderRadius","backgroundColor","boxShadow","border","outline","maxHeight","overflow","minWidth","commonTextStyle","fontFamily","fontStyle","textAlign","flex","textOverflow","whiteSpace","commonIconStyle","margin","useAssetsEntryCardStyle","makeStyles","fillWidth","assetsEntryCard","color","fontSize","lineHeight","fontWeight","objectFit","AssetsEntryCard","isFillWidth","cardClassName","classes","Button","mergeClasses","Add20Regular","defaultProps","AddAssetEntryCard","useStyles","addMediaPanel","top","bottom","panelContent","scrollbarWidth","overlay","zIndex","layer","AdsStudioPanelContainer","forwardRef","props","ref","onRenderFooterContent","isOpen","dismiss","headerText","size","overlayBodyRef","useRef","styles","_Fragment","DrawerOverlay","open","modalType","position","tabIndex","DrawerHeader","DrawerHeaderTitle","action","appearance","Dismiss24Regular","DrawerBody","Children","child","cloneElement","DrawerFooter","Layer","Overlay","isDarkThemed","AdsStudioSpinner","useCustomSize","customStyle","spinnerStyles","useMemo","circle","root","Spinner","SpinnerSize","large","useActionButtonStyles","actionButton","ActionButton","Icon","primary","classnames","TilesGridCellActionButton","AdsStudoThemeContext","React","AdsStudioThemeProvider","theme","componentStyles","getComponentStyles","useCallback","componentName","components","contextValue","Provider","emptyAdsStudioTheme","useThemedStyles","prefixClassName","getDefaultStyles","themedStyles","overridenStyles","getOverridenStyles","defaultStyles","createUseStyles","name","withAdsStudioStyles","WrappedComponent","options","Component","useRawStyles","finalComponentName","displayName","HOC","_useThemedStyles","hoistNonReactStatics","positionFill","left","right","CellOverlay","cellOverlayContainer","TilesGridCellOverlay","background","opacity","transition","getCommonCellCardStyle","palette","flexShrink","flexGrow","neutralLight","CellCardWithOverlay","isOverlayEnabled","isCellFocused","renderOverlayContent","renderStaticOverlayContent","customCellCardClass","onClickFunc","event","stopPropagation","preventDefault","containerClass","cellCardContainer","cellCardContainerOverflow","cellCardWithOverlayContainer","focused","onKeyDown","keyCode","CellCard","TilesGridCellCard","_ref$core","core","_ref$core2$palette","TilesGridCellCardWithOverlay","_ref2$core","_ref2$core2$palette","activeStyle","transform","flexDirection","button","CellDecorativeIcon","iconName","centerContainer","circleContainer","iconContent","labelName","white","marginLeft","useGridDecorativeLabelStyle","tilesGridCellDecorativeLabel","tokens","colorNeutralForegroundInverted","marginRight","colorNeutralBackgroundStatic","float","cellLabelDisplay","CellDecorativeLabel","secondaryText","additionaIconName","additionalText","customClass","cellLabel","iconTextWrapper","role","TilesGridCellDecorativeLabel","iconProps","CellDeletionButtonDecorator","onDelete","cellDeletionButtonDecorator","IconButton","ariaLabel","disabled","deleteButton","TilesGridCellDeletionButtonDecorator","themeLighter","CellImage","showSpinner","onLoaded","onError","enableRetry","customClasses","onCustomizedSpinner","imageFit","ImageLoadState","notLoaded","imageLoadState","setImageLoadState","onLoadingStateChange","s","onLoadError","loaded","error","reloadImage","img","onerror","onload","onErrorWithRetry","retryCount","setTimeout","onReloadImage","onImageLoadingStateChange","tilesGridCellImageContainer","imageStateOverlayClass","stateParent","ArrowClockwiseRegular","reloadBtn","FluentImage","imageClass","maximizeFrame","noop","ImageFit","cover","TilesGridCellImage","useCellSectionDecoratorStyle","makeResetStyles","outlineStyle","outlineWidth","outlineColor","colorBrandBackground","borderRadiusSmall","TilesGridCellSelectionDecorator","selected","isFocused","cellSelectionDecoratorWrapper","selectedStateWrapper","cellSelectionDecorator","selectedState","Checkbox","checked","TilesGridLoadingCell","onLoading","gridCellContent","hasSetUpObserver","setHasSetUpObserver","onLoadingCalled","observer","current","IntersectionObserver","entries","entry","isIntersecting","target","unobserve","rootMargin","threshold","observe","commonStyles","useFolderIconStyle","folderIconContainer","folderTag","emptyFolderTag","folderContent","emptyFolderContent","FolderIconInternal","thumbnailImageUrl","isEmptyFolder","folderIconRootClassName","fit","FolderIcon","dragPreview","dragPreviewImage","dragPreviewFolderWrapper","dragPreviewFolder","dragPreviewCount","verticalAlign","TilesGridCellDragDecorator","draggable","dragItemsLength","onDrag","dragPreviewDescription","dragItemsLengthInner","renderDragPreview","thumbnailUrl","onDragStart","container","document","createElement","DragPreview","ReactDOM","domElement","firstChild","body","appendChild","dataTransfer","setDragImage","useFolderGridCellDropStyle","outlineOffset","TilesGridCellDropDecorator","droppable","onDrop","customClassName","isOver","setIsOver","tilesGridCellDropOver","onDragOver","onDragLeave","onDropHandler","classNames","DEFAULT_CONFIG","maxColumnWidth","minColumnWidth","rowHeight","preferredCellsPerPage","TilesGridInternal","items","onRenderCell","onRenderCellImpl","gridItem","_index","index","tilesGridContainer","Grid","renderItem","columnWidth","gridMode","columnPadding","rowPadding","scrollContainer","maxColumns","minItemHeight","TilesGrid","overflowX","boxSizing","findItem","itemToFind","itemKey","addItem","itemToAdd","removeItem","itemToRemove","MultiSelectionGrid","onSelectionChange","propSelectedItems","selectedItems","rest","_objectWithoutProperties","_excluded","allItems","selectItem","_action","_action2","newSelectedItems","fnSelectItem","SectionTilesGridInternal","sectionData","loadNextPage","multiSelectionEnabled","onRenderLoadingCell","otherProps","wrappedSectionData","section","params","sectionName","_ref4","totalItemCount","countOfSectionsWithData","sec","GridComponent","sectionTilesGridContainer","gridConainerClass","sectionTitle","sectionClassName","_excluded2","SectionTilesGrid","marginBottom","marginTop","useStyle","TextWithHighlightImp","txt","highlightedText","highlightedClassname","enableTooltip","textFragments","substr","matched","idx","lowerText","toLowerCase","lowerSubstr","startIndex","fragments","indexOf","substring","f","splitString","content","Tooltip","relationship","withArrow","positioning","TextWithHighlight","getSharedAssetContainerStyle","flexWrap","colorPaletteYellowBackground3","getSharedMultiSelectingCellStyles","selectableCardContainerAutoHideCheckbox","visibility","selectableCardContainer","iconStyles","useFolderGridCellStyle","cursor","paddingTop","paddingRight","getCountDescription","itemInfo","subFoldersCountDesc","imagesCountDesc","videosCountDesc","subfoldersCount","count","imageAssetsCount","videoAssetsCount","FolderCountInfo","FolderRegular","ImageRegular","VideoRegular","FoldersGridCell","onFolderClick","selectable","onSelect","allowedAssetType","renderAccessory","selectedItemCount","folderGridCellContainer","_ref6","folderName","itemCount","itemInfos","result","SubFoldersCount","ImageAssetsCount","VideoAssetsCount","convertItemInfo","TotalCount","firstAsset","folderAssetType","getFolderThumbnail","onCheckboxChange","hasAccessory","onChange","AdsStudioFoldersGridCell","useImageAssetsGridCellStyle","imageAssetsGridCellContainer","animationName","from","to","animationDuration","animationIterationCount","animationTimingFunction","imageCellLabelContainer","AdsStudioImageAssetsGridCell","renderCellContent","isMultiSelecting","deletable","isImageLoaded","setImageLoaded","sourceType","manualAddedImageSourceType","cellContent","defaultContent","Fragment","CellLabel","ArrowSync16Filled","funcRenderOverlayContent","onCellClick","withSelectionDecorator","decoratedContent","withDeleteButtonDecorator","GridCellFactory","DefaultImageGridCell","DefaultVideoGridCell","civilDateEqual","d1","d2","compareCivilDate","civilDateRangeEqual","r1","r2","civilDateToDebugString","cd","civilDateRangeToDebugString","dr","getDefaultMetricDateRange","dateFormat","lcid","yesterday","RangeStartDate","formatCivilDate","raw","RangeEndDate","Rangelcid","RangeId","containsErrorCodeInList","errorList","searchErrorCode","err","processVideoSizeLimitError","limit","fetchImgPromise","imgUrl","Promise","resolve","Error","crossOrigin","createOffScreenContext","canvas","context","getContext","getImagePixels","imageWidth","imageHeight","_createOffScreenConte","drawImage","getImageData","parseMaskResultPromise","imageUrl","rawMaskSetsBase64String","maskSetsBase64Json","parseSync","_maskSetsBase64Json$s","shape","maskSetsBase64","reshapeTo3D","array","x","y","z","res","i","temp2D","j","temp1D","k","_decompressAndParse3DArray","_asyncToGenerator","_regeneratorRuntime","mark","_callee","base64String","binaryString","byteArray","inputStream","decompressionStream","decompressedStream","decompressedResponse","decompressedBuffer","decompressedArray","int3DArray","wrap","_context","prev","next","atob","Uint8Array","charCodeAt","Blob","stream","DecompressionStream","pipeThrough","Response","arrayBuffer","sent","abrupt","stop","apply","_x","_x2","_x3","_x4","decompressAndParse3DArray","then","maskSets3Darray","maskSetsArray","row","a","flat","alphaArray","selectedMasksArray","pixelMask","_createOffScreenConte2","originalImagePixels","_createOffScreenConte3","imageData","pixels","_createOffScreenConte4","secondContext","secondCanvas","putImageData","imageUrlWithoutBackground","toDataURL","catch","getMaskValueAtPointFunc","segmentationMasks","parseInt","createColorBackground","selectedMasks","_hexToRgb","hex","exec","r","g","b","hexToRgb","_createOffScreenConte5","alpha","newR","newG","newB","_createOffScreenConte6","createSelectedImageSrc","masks","isAdd","hasSelectedImageSrc","_createOffScreenConte7","_createOffScreenConte8","dArr","clearRect","globalCompositeOperation","fillStyle","fillRect","borderImageSrc","selectedImageSrc","createHighlightedImage","workingMasks","maskValue","_createOffScreenConte9","PlacementQualities","PlacementQualityToText","formatFileSize","fileSize","getClosestAspectRatio","inputRatio","closestRatio","closestDiff","abs","_i","_Object$entries","Object","_Object$entries$_i","label","ratio","diff","formatBrandkitForAPI","obj","Array","isArray","formattedObj","keys","forEach","SubType","VideoSourceType","errorObjectToString","message","stack","stringify","getErrorString","msg","originError","fetchResultFromProcessors","processors","_ref$options","errorCodeMessageKeyMapping","InvalidDuration","AssetDataInvalidWidth","AssetDataInvalidHeight","ImageAIUpScaleFailed","processAssetLimitErrors","codes","imageSizeLimitResult","processImageSizeLimitError","imageAssetLimit","videoSizeLimitResult","videoAssetLimit","processImageErrors","filePickerI18n","processPredefinedAssetErrors","mappedKey","getAssetUploadError","uploadErrorCodeArr","_ref4$disableGenericM","disableGenericMessage","errorMessage","style","href","INVALID_FOLDER_ID","filterFilesByExtensions","files","supportedExtensions","acceptedFiles","file","ext","parseFileName","createFolderHierarchyMap","foldersToCreate","folders","relativePath","pathArr","split","trim","pop","getRelativeFoldersFromRelativePath","webkitRelativePath","currFolderMap","folder","createFolderWithErrorHandling","folderCreationErrors","createFolderAsync","parentFolderId","currentFolderId","originalFolderName","_ref3$numberOfAttempt","numberOfAttempts","createFoldersByHierarchyInternal","folderMap","creationPromises","parentFolderName","folderNames","subFoldersMap","parentPromise","createFoldersByHierarchy","_ref5$folderCreationE","createRateLimitedAssetUploadPromises","_ref6$customizedFiles","customizedFilesOptions","acceptedAssets","folderIdPromises","_ref6$validateAssetAs","validateAssetAsync","uploadAssetAsync","_ref6$assetsSkippedUp","assetsSkippedUpload","_ref6$assetUploadErro","assetUploadErrors","readAssetAsync","processAssetJobPromises","assetUploadJobs","getFileFolderName","extraOptions","processAssetJobPromise","folderId","dataURL","validatedResult","isImageUpscaled","nameWithoutExt","fileObject","runJobsInParallelWithRateLimit","jobsToRateLimit","maxJobsInParallel","handleJobError","processFolderSizeLimitErrors","folderLimitResult","processFolderSizeLimitError","folderLimit","processAssetErrors","getFolderUploadError","genericErrorMessage","getTaskPoller","timerId","task","_ref$interval","interval","stopRunning","counter","taskPromise","setInterval","clearInterval","existDup","arr","newArr","newKeys","ACTION_TYPE_SET_FOLDER_DATA","AL_FOLDER_REDUCER_INIT_STATE","perfTimeSeriesData","folderDataStateReducer","state","actionType","actionData","_actionData$newFolder","newFolders","_actionData$newAssets","newAssets","_actionData$newPerfTi","newPerfTimeSeries","shouldFlush","pageName","foundFolderDup","foundAssetDup","logTrace","AdsStudioErrorBase","_Error","_this","errorCode","errorProcessor","_classCallCheck","_callSuper","info","_inherits","_createClass","_wrapNativeSuper","renameFolderApiErrorProcessor","msgs","InvalidFolderId","uxMessage","actionable","DuplicateFolderName","InvalidFolderName","genericError","deleteFolderApiErrorProcessor","ignorable","shortMsg","FolderHasAssets","InvalidId","FolderHasSubFolders","bulkMoveApiErrorProcessor","folderCount","assetCount","getUXMessage","bulkMoveApiItemErrorProcessor","availableActions","AssetIdInvalid","DuplicateAssetsUnderFolder","DuplicateImage","FolderCanNotMoveToTarget","createFolderApiErrorProcessor","DuplicateEntity","FolderLimitExceededPerAccount","getFolderLimit","bulkDeleteAssetsApiItemErrorProcessor","CampaignServiceMediaIdInvalid","CampaignServiceMediaIsAssociated","assetType","gotoAds","bulkDeleteAssetsApiErrorProcessor","generateImagesWithAIAPIErrorProcessor","reqCountErr","GenerateImagesPromptLengthInvalid","GenerateImagesRequestCountLimitExceededPerAccount","GenerateImagesRequestCountLimitExceeded","GenerateImagesPromptContentInvalid","GenerateImagesAIGCNoRecommendationWithBrand","brandNameDetected","brandNames","getAIGeneratedImageAPIErrorProcessor","AI_Generation_Failed","shouldRetry","getRemoveImageBackgroundAPIErrorProcessor","GenerateImagesAIGCInvalidImageSize","GenerateImagesAIGCInvalidImageContent","gotoDisallowedContent","GenerateImageAIGCInvalidUserPrompt","GenerateImageAIGCInvalidGeneratedImage","PATH_SEPERATOR","getPathString","folderPath","pathString","slice","fp","getAssetTypeToFetch","filterSettings","defaultAssetType","assetTypeFilter","useFolders","perfMetricDateRange","defaultPerfMetricDateRange","repository","ROOT_FOLDER","_useDataServiceReduce","initState","_useReducer","useReducer","_useReducer2","folderData","dispatch","setFolderData","setAssetsOnly","appendFolderData","setPerfTimeSeriesData","resetFolderData","useDataServiceReducer","setAssets","newFolderId","setNewFolderId","_useState3","_useState4","setFolderPath","currentFolder","latestRequestTimestamp","curFilterSettings","curSortBy","curAssetCountToLoadForSubFolders","curFolderAssetTypeToLoad","curIncludeParentHierarchy","curIncludeSubfolders","curPageName","curPerfMarker","pendingVideoBlobUploadPromiseTokens","resetData","_len","_key","loadFolderArgs","assetsToLoadForSubfolders","includeParentHierarchy","folderAssetTypeToFetch","getFolderArgs","skip","includeAssets","includeSubfolders","isAssetPickerScenario","loadFolderDataInternal","hasDateRange","_ref5$includeSubfolde","perfMarker","_ref5$withBIData","withBIData","requestTimestamp","saveCurrentFilters","getFolderData","subfolders","searchText","searchTerm","dateAddedStart","dateAddedEnd","otherFilters","dateAddedDateRange","tapCatch","loadFolderData","_ref7","_ref7$includeSubfolde","loadFolderDataInDateRange","_ref8","_ref8$includeSubfolde","loadPerfTimeSeriesData","_ref9","perfTimeSeriesParams","getPerfTimeSeriesData","loadMoreFolderDataImpl","_ref11","_ref11$count","_ref11$withBIData","loadMoreFolderData","_ref12","_ref12$count","loadMoreFolderDataInDateRange","_ref13","_ref13$count","reloadFolders","reloadFoldersInDateRange","navigateIntoFolder","_ref16","folderToNavigate","_ref16$id","_ref16$navigateToNewF","navigateToNewFolder","_ref17","_ref18","parentHierarchy","curFolderPath","navigateToFolderInPath","_ref19","indexOfFolderInPath","_ref20","navigateIntoFolderItem","_ref21","_folder$parentHierarc","navigateIntoRootFolder","createFolder","_ref22","createFolderBulk","_ref23","deleteEmptyFolder","_ref24","deleteFolder","renameFolder","_ref25","newFolderName","uploadImageByUrlToFolder","_ref26","addUrlImageToFolder","addImageWithBaseIdToFolder","_ref27","metaData","baseId","uploadVideoToAzureBlob","_ref28","onProgress","uploadVideoToAzureBlobWithCancellation","_ref29","token","blobName","on","onSuccess","onCancel","uploadVideoToFolder","_ref30","updateCurrentProgress","uploadVideoPerfMarker","createChild","willInit","progressForBlobUpload","percentage","total","progressForSavingBlobToMT","evt","_ref31","addFolderUploadAsset","inProgress","finally","done","cancelPendingVideoUpload","cancel","postVideoByUrl","_ref32","videoUrl","uploadImageToFolder","_ref33","imageName","supportUpscale","uploadStockImageToFolder","_ref34","stockImageId","addStockImageToFolder","uploadInvestImageToFolder","_ref35","investImageId","addInvestImageToFolder","uploadInvestVideoToFolder","_ref36","investVideoId","videoSrc","addInvestVideoToFolder","renameAsset","_ref37","assetId","newName","newAsset","splice","deleteAsset","_ref38","tap","_batchDeleteAssetsAsync","_ref39","parentPath","onItemDeleted","bulkDeleteAssets","_ref40","resultSummary","_ref41","assetName","path","api","_ref42","_deleteEmptyFolderAsync","_ref43","_ref43$onItemDeleted","_batchDelete","_ref44","_ref44$folders","_ref44$assets","_deleteFolder","_ref45","ic","concurrency","foldersResult","assetsResult","_ref46","totalItmCnt","_ref46$skip","_ref47","totalCount","hasNextPage","results","newSkip","_ref48","loadDataError","_ref49","batchDelete","_ref50","_ref50$folders","_ref50$assets","_ref50$onItemDeleted","batchMove","_ref51","destFolderId","_ref51$folders","_ref51$assets","dataOwnerPageName","propTypes","PropTypes","getFolders","getImages","useCommonImageRepoMethods","imageRepository","loadedImages","setLoadedImages","latestTimestampRef","setImageCroppingTasks","croppingTaskUpdated","setCroppingTaskUpdated","getImageById","imageId","_ref2$useCache","useCache","getImage","getImageCroppingTaskStatus","tasks","curTasks","dirty","newTaks","tsk","curTsk","newTsk","t","ex","renameImage","images","setImages","newImage","newImages","renameLocalImage","deleteImage","cropImage","placementSettings","addCreative","creativeData","VideoChangedFieldsWithStatusUpdate","checkError","retryPromise","getPromise","_ref2$timeout","timeout","_ref2$shouldRetry","useAIGeneratedImages","_ref3$pollInterval","pollInterval","_ref3$maxRetryCount","maxRetryCount","generateImagesByAI","prompt","onStartPolling","skipBrandDetection","ret","generateImagesWithAIAsync","taskId","taskPoller","getAIGeneratedImageTaskStatus","isTaskDone","monitorPromise","promise","AssetWithFoldersDataServiceContext","AssetWithFoldersDataServiceProvider","aigcRepository","folderRepository","videoRepository","_useFolders","loadAssetsUnderFolder","_useCommonImageRepoMe","_useCommonVideoRepoMe","setVideoUpdated","getVideoTaskStatus","videoTasks","videosToCheck","updateVideoStatusByIds","response","notFinishedTaskList","newVideoUpdated","responseKeys","addVideoCreative","videoCreative","getVideo","fetchMetadata","useCommonVideoRepoMethods","_useFolderPathTree","folderPathTree","setFolderPathTree","updateFolderPathTree","currentFolderPathTree","folderIdArr","subFoldersArr","totalSubfoldersCount","reload","recursiveUpdate","subFolders","subFoldersCount","newSubFloders","loadFolderPathTreeItemImp","subFolder","initializeFolderPathTree","loadFolderPathTreeItem","loadMoreFolderPathTreeItem","currentFolderCount","reloadFolderPathTreeItem","all","totalSubfoldersCountArr","useFolderPathTree","totalAssetCount","loadDataArgs","minImageWidth","minImageHeight","importSource","assetSources","_ref2$assetsToLoadFor","minVideoDuration","maxVideoDuration","_ref2$isGlobalSearch","isGlobalSearch","_ref2$includeParentHi","topRated","loadDataImpl","useDateRange","_ref3$assetsToLoadFor","_ref3$isGlobalSearch","_ref3$includeParentHi","_ref3$hasPerfData","hasPerfData","_ref3$includeSubfolde","loadData","args","loadDataInDateRange","loadPerfTimeSeriesDataImpl","_ref4$isGlobalSearch","_ref4$hasPerfData","uploadImageByUrl","uploadImage","_ref6$updateCurrentPr","_ref6$name","_ref6$folderId","uploadVideo","_ref7$updateCurrentPr","_ref7$name","_ref7$folderId","_ref7$perfMarker","uploadVideoByUrl","_ref8$name","_ref8$folderId","uploadStockImage","uploadInvestImage","_ref10","uploadInvestVideo","contextVal","reloadData","reloadDataInDataRange","loadMoreData","loadMoreDataInDateRange","useAdsStudioServices","useContext","withAdsStudioServicesConsumer","Comp","pickedPropNames","CompWithService","dataService","pickedProps","WindowStatus","INDETERMINATE","UNSET","MAX_ITEM_COUNT","AssetsWindowManager","windowSize","this","assetWindows","windowsCount","ceil","get","w","windowIndex","SequenceAssetsWindowManager","sourceNames","winMgrList","sourceName","mgr","resetWindows","winObj","setTotalItemCount","isLoading","isCompleted","cnt","winMgr","getNextUnloadedWindow","indexOffset","setWindowStatus","AssetsReducerActionType","AssetsReducerActions","pageIndex","pageSize","InitialReducerState","defaultReducer","_excluded3","_excluded4","_excluded5","startIdx","sequenceWindowReducer","_excluded6","_actionData$indexOffs","_excluded7","useAssetsServiceBase","reducer","reducerInitialArg","assetWindowManager","filtersRef","loadingWindowManagerRef","assetState","_ref2$updateCurrentPr","_ref2$name","_ref2$folderId","loadAssets","filters","loadMoreAssets","noMoreData","reloadAssets","resetAssetsData","getTotalAssetCount","useBasicAssetsService","_ref$pageSize","useMultiSourceAssetsService","_ref2$pageSize","dataSourceNames","assetWindowManagerRef","service","getAssetCountBySource","useEditImageService","imagesWithFilter","setImagesWithFilter","imagesWithFilterAndBlur","setImagesWithFilterAndBlur","getImagesWithFilter","generateImageWithSmartEffect","smartEffects","smartEffectName","smartEffectOptions","filterRes","Effect","Resource","unshift","getImagesWithFilterAndBlurImp","blurLevel","ManualBgBlurLevel","getOriginalImageWithBlur","getImagesWithFilterAndBlur","originalImageWithBlurRes","imagesWithFilterAndBlurRes","imagesWithFilterAndBlurInner","blur","removeImageBackground","generateImageBackground","outputImageWidth","outputImageHeight","newImageUrl","generatedUrl","getImageSegmentations","originalUrl","saveImageCopy","saveImage","isImageFittingEnabled","_ref10$folderId","saveImageWithBaseId","_ref11$folderId","moveImageToFolder","_ref14","placements","skipOutpainting","_ref15","useVideoTaskPoller","newVideoTasks","isPollerRunning","currentTaskPoller","startVideoTaskStatusPoller","stopPoller","KEY","updateInProgressTasksStatus","inProgressTaskCount","ss","getSessionStorage","supportsStorage","set","invalidate","ImageCroppingTaskStatusPoller","_useAdsStudioServices","startImageCroppingTaskStatusPoller","VideoTaskStatusPoller","withAssetTaskStatusPoller","Wrapper","AdsStudioAssetGridCell","onDetailsClick","onEditClick","permissions","focusIndex","setFocusIndex","focusCellButton","assetContainers","querySelectorAll","firstButton","querySelector","code","focus","detailButton","editButton","clickDetails","clickEdit","isVideoCell","isStockImageCell","videoTemplateUIEnabled","dynamic","VideoTemplateUI","showEditIcon","EditRegular","ListRegular","stringifySync","onClickVideo","useControlStyles","videoContainer","paddingBottom","sliderContainer","previewVideo","commonParentStyles","iconCommonStyles","usePlaceholderStyle","encoding","unverified","borderBottom","failed","VideoPureComponent","EncodingPlaceholderWithStyle","EncodingPlaceholder","FailedPlaceholderWithStyle","FailedPlaceholder","UnverifiedPlaceholderWithStyle","UnverifiedPlaceholder","useVideoAssetsGridCellStyle","VideoAssetsGridCellContainer","videoCellLabelContainer","videoCell","paddingLeft","placeholderCell","AdsStudioVideoAssetsGridCell","isVideoLoaded","setVideoLoaded","showVideo","setShowVideo","_useState5","_useState6","hideVideo","setHideVideo","_useState7","_useState8","thumbnailSeletable","setThumbnailSelectable","durationInMS","durationDesc","_useState9","_useState10","cellRef","setCellRef","timerRef","addEventListener","clearTimeout","onClickVideoCard","playVideoObject","play","wrapperWidth","offsetWidth","TimerRegular","placeholderContent","videoWrapper","autoPlay","muteByDefault","maxWidth","showTime","showPlay","customPlayObject","imageWrapper","borderRadiusXLarge","iconChecked","borderRadiusCircular","ImagePanelGridCell","onSelectImage","isSelected","isMultiple","onClickCell","CheckmarkCircleFilled","contentGridWrapper","PanelImageGrid","onFailedToLoadData","isHideDescription","_ref$isMultiple","isLoadingMore","selectedItemIds","setSelectedItemIds","onSelectedChange","selectedItemId","itemId","assetsWithAction","onAction","imagesGridSection","sectionGridData","p$res","usePerformanceFilterBarEditingStyle","filterBarEditingContainer","borderLeft","usePerformanceFilterBarReadonlyStyle","filterBarReadonlyContainer","textDecoration","addFilterButton","useViewAllFiltersButtonStyle","viewAllButton","viewContentTitle","viewAllFilterItem","EditingFilterBar","focusedFilter","onRenderNewFilterContextMenu","onRenderFilter","onCloseClick","onResetClick","getDivider","isLast","isFirst","DismissRegular","PerformanceEditingFilterBar","FilterListWithPopover","onClickFilter","humanizedValue","ViewAllFiltersButtonImpl","selectedFilters","isFilterAlwaysVisible","Popover","align","PopoverTrigger","as","PopoverSurface","ViewAllFiltersButton","ReadonlyFilterBar","onClickAddFilterButton","filterListRef","onBlur","scrollTo","which","Enter","Space","onKeyPress","AddRegular","PerformanceReadonlyFilterBar","dynamicSizeContainer","videoOutlineGray","videoNormalContainer","backgroundImage","VideoPlaybackView","hideControls","onLoadedMetadata","onErrorHanler","isOutlineGray","useDynamicVideoSize","ev","poster","controls","controlsList","disablePictureInPicture","mainViewContainer","mainViewContentContainer","mainViewIconLabelContainer","contentIcon","footerContainer","footerInvalid","footerContent","helpLink","ItemPlaceholderBoxViewFooterType","warning","ItemPlaceholderBoxView","mainViewIcon","mainViewIconLabel","footerProps","summary","tip","learnMoreLinkText","learnMoreLinkTopic","renderFooter","footContentStatus","getFolderProgressPreviewStyles","imageContent","baseItemBoxProgressStyles","imageContentText","folderSize","folderIconRoot","createFolderPreviewComponent","numberOfAssets","FileUploadingPreview","isVideo","SimpleImagePreview","VideoLoadState","placeholderView","hidden","shown","PlaceHolderBoxViewFooterConfig","VideoLoadPreview","onErrorHandler","videoLoadState","setVideoLoadState","cachedUrl","setCachedUrl","localizedTextFields","onLoadedMetadataInternal","onErrorHandlerInternal","addUrlInput","placeHolderImage","errorMesBelowUrlInput","videoPlaybackView","messageContainer","AddVideoPanelContent","videoLoaded","processedUrl","setProcessedUrl","messageBarText","setMessageBarText","urlInputErrors","setUrlInputErrors","_useState11","_useState12","videoLoadStarted","setVideoLoadStarted","handleInput","isEmpty","onUrlInputChange","errors","isValidUrl","Input","placeholder","contentBefore","SearchFilled","MessageBar","intent","contentWrapper","searchArea","input","messageBar","dropdown","listbox","StockImagePanelContent","cid","oDataConfig","setSelectedImages","setIsLoadingMore","isLoadingFirstPage","setIsLoadingFirstPage","setTotalCount","selectedImages","searchQuery","hasMore","filterQueryJSON","onInputChange","_ref$value","stockImageService","StockImageDataService","controller","getStockImages","loadImages","_ref2$$search","$search","_ref2$$skip","$skip","_ref2$$query","$query","customQueries","extend","appName","$top","language","includevertical","prevImages","Preview","Url","originSelectedLength","newSelectedList","selectedItem","find","prototype","InvestImagePanelContent","investImageService","InvestImageDataService","getInvestImages","getInvestAssets","_ref2$creativeId","creativeId","queryParams","assetTypeId","XandrAssetId","videoNameWrapper","videoName","emptyButtonStyle","borderImage","borderColor","borderStyle","InvestVideoPanelContent","setSelectedVideos","videos","setVideos","selectedVideos","getInvestVideos","loadVideos","prevVideos","Description","onSelectVideo","videoId","videosGridSection","loop","urlPrefixOptions","domainInputWrapper","columnGap","prefixSelect","domainInput","suggestionErrorInvalid","DomainInputView","onDomainChange","isDomainInvalid","errorMessageClassName","domainInputWrapperClassName","urlPrefix","setUrlPrefix","selectId","useId","onSelectChange","onBlurUrl","newUrl","prefix","newDomain","Select","option","subdomainWrapper","divider","SubdomainInputView","defaultDomainUrl","onDomainUrlChange","onSubdomainUrlChange","onDomainBlur","temporaryFinalUrl","newDomainUrl","getUrlProtocolAndDomain","hasProtocol","onDomainKeyDown","onSubdomainBlur","newSubdomainUrl","onSubdomainKeyDown","defaultValue","subdomainUrlRegex","WebsiteImagePanelContent","domainUrl","setDomailUrl","subdomain","setSubdomain","setIsdomainInvalid","_useWebsiteImages","isLoadingFistPage","setIsLoading","pageNumber","suggestionPoller","SuggestionPoller","trace","startSignal","stopSignal","jobCompleteCallback","setPageNumber","newPageNumber","getLandingPageSuggestions","landingPageUrl","isSubdomain","pageNum","minimumResolution","setJobCompleteCallback","forceInternalScrapingService","getMoreLandingPageSuggestions","_ref3$url","_ref3$sDomain","sDomain","ImagePaging","Images","ThumbnailUrl","ImageUrl","useWebsiteImages","showDomain","finalUrlDomain","onSubdomainChange","newValue","regexResult","getSubdomain","newSearchUrl","OverflowItemsMenu","overflowItems","onItemClick","_useOverflowMenu","useOverflowMenu","isOverflowing","overflowCount","overflowItemsCount","Menu","MenuTrigger","disableButtonEnhancement","MoreHorizontalRegular","MenuPopover","MenuList","MenuItem","AdsStudioBreadcrumb","maxDisplayedItems","maxLengthOfItem","customItemStyle","_partitionBreadcrumbI","partitionBreadcrumbItems","startDisplayedItems","endDisplayedItems","lastIndex","isLastItem","isTruncatableBreadcrumbContent","BreadcrumbItem","BreadcrumbButton","breadcrumbButton","breadcrumbButtonCurrent","truncateBreadcrumbLongName","BreadcrumbDivider","Breadcrumb","useLibraryEmptyViewStyle","CardContainer","emptyView","emptyIcon","mainText","neutralForegroundRest","LibraryEmptyView","isInSubfolder","isAnyFilterSet","hideAddAssetCards","str","AddFromAnotherSourceSubMenu","onUploadImage","onUploadVideo","ImageMultiple20Regular","UploadFromComputerSubMenu","onUploadLocalFile","onUploadLocalFolder","ArrowUpload20Regular","NewDropDown","onUploadLocalFileClick","onUploadLocalFolderClick","onUploadImageClick","onUploadVideoClick","onAIGenerateClick","onCreateFolderClick","handleUsage","onAIGenerate","onCreateFolder","MenuButton","MenuDivider","FolderAdd20Regular","menuPopover","menuButton","unselectedMenuButton","enabledClearButton","colorNeutralForeground2BrandHover","disabledClearButton","colorNeutralForegroundDisabled","useCustomItemStyles","overflowY","contentAfter","colorNeutralBackground3","contentLabel","defaultMinWidth","defaultMinHeight","forceClear","onDismiss","_props$defaultOpen","defaultOpen","minWidthId","afterMinWidthId","minHeightId","afterMinHeightId","setIsOpen","showInput","setShowInput","menuList","setMenuList","minWidthRef","minHeightRef","setMinWidth","setMinHeight","getOnChangeCallback","setter","onMinWidthChange","onMinHeightChange","onClear","newMinHeight","newMinWidth","focusTextField","textFieldRef","onMinWidthKeyUp","onMinHeightKeyUp","onDropdownDismiss","clear","timeoutId","removeAttribute","trapFocus","onOpenChange","Label","htmlFor","toString","Dismiss20Regular","SimpleDateRangePickerInternal","defaultSelectedDateRange","defaultIsSelectingStartDate","onDateRangeChange","isSelectingStartDate","selectedDateRange","setSelectedDateRange","leftNavigatedDate","setLeftNavigationDate","rightNavigatedDate","minDate","years","maxDate","selectedRanges","onNavigateStartMonthDate","date","onNavigateEndMonthDate","months","onSelectDate","newDate","SingleMonthCalendar","navigatedDate","onNavigateDate","isRightNavigateVisible","isLeftNavigateVisible","SimpleDateRangePicker","ChevronRightIcon","bundleIcon","ChevronRight20Filled","ChevronRight20Regular","startDate","endDate","CustomItem","isCustomSelected","customDateRange","setCustomDateRange","customRangeStartStr","customRangeEndStr","customOption","menuItemRef","startDateId","afterStartDateId","startDateRef","endDateId","afterEndDateId","isDatePickerOpen","setIsDatePickerOpen","onSelectedDateRangeChange","newRange","openDatePickerForStart","openDatePickerForEnd","onStartKeyDown","onEndKeyDown","MenuItemRadio","hasSubmenu","readOnly","CalendarLtr20Regular","defaultTimeFrame","defaultCustomDateRange","checkedValues","setCheckedValues","optionsWithoutCustom","formatDate","selectedChoice","dropdownTitle","onDropdownClear","timeframe","onCheckedValueChange","checkedItems","hasCheckmarks","searchBox","backgroundSize","SearchBoxFilter","onSearchTextChanging","onSearchTextChange","onSearchTextBlur","onSearchTextClear","defaultSearchText","searchboxPlaceHolder","autoFocus","SearchBox","toggleButton","toggleButtons","selectedButton","AssetTypeToggleButtonsFilter","optionsState","toggleSelectedOption","ToggleButtons","SortByFilter","selectedOptionMemo","selectedOption","ArrowSortUp20Regular","ArrowSortDown20Regular","ArrowSort20Regular","checkbox","defaultSelectedAssetSources","selectedAssetSources","setSelectedAssetSources","selectedOptions","onChangeCallback","selectedSources","minDuration","customDuration","maxDuration","defaultMaxDuration","defaultMinDuration","minDurationId","afterMinDurationId","maxDurationId","afterMaxDurationId","minDurationRef","maxDurationRef","setMinDuration","setMaxDuration","minDurationInvalid","setMinDurationInvalid","maxDurationInvalid","setMaxDurationInvalid","onMinDurationChange","onMaxDurationChange","newMinDuration","newMaxDuration","onMinDurationKeyUp","onMaxDurationKeyUp","defaultImportSource","thumbSizeVar","railSizeVar","railColorVar","progressColorVar","thumbColorVar","sliderMinProgressVar","sliderMaxProgressVar","videoDuration","videoDurationScrollbar","touchAction","justifyItems","gridTemplateRows","gridTemplateColumns","colors","colorNeutralStrokeAccessible","colorCompoundBrandBackground","colorCompoundBrandBackgroundHover","colorCompoundBrandBackgroundPressed","rail","gridRowStart","gridRowEnd","gridColumnStart","gridColumnEnd","forcedColorAdjust","colorTransparentStroke","thumb","colorNeutralBackground1","colorNeutralStroke1","rangeInput","pointerEvents","minRangeInput","colorStrokeFocus2","borderRadiusMedium","maxRangeInput","minThumb","maxThumb","getPercent","Slider","setValue","getRelatedValue","isDragging","setIsDragging","onMouseMove","onMouseUp","removeEventListener","onMouseDown","console","log","VideoDurationScrollbarFilter","minInputId","maxInputId","minDurationFilter","maxDurationFilter","minValue","setMinValue","maxValue","setMaxValue","scrollbarRef","styleVariables","wrappedSetMinValue","shouldCallOnChange","wrappedSetMaxValue","clientX","scrollbarBox","getBoundingClientRect","onClickRail","FilterToggleButton","ToggleButton","Filter20Regular","getCivilDateToday","DEFAULT_RANGE","FilterContext","useFilterBarState","userPreference","defaultMinVideoDuration","defaultMaxVideoDuration","setFilterBar","_useAdditionalFilterB","showAdditionalFilterBar","setShowAdditionalFilterBar","toggleFilterBar","useAdditionalFilterBarState","_useAssetTypeState","assetTypes","initialState","assetTypesState","setAssetTypesState","isImageSelected","isVideoSelected","toggleAssetType","newAssetTypesState","optionKey","useAssetTypeState","_useSearchBoxState","_ref$defaultSearchTex","setSearchText","searchTextValueRef","useSearchBoxState","_useSortByState","setSortBy","sortingOptions","safeSetSortBy","newVal","allSortByOptions","values","safeNewValue","onSortByChange","_evt","sortby","useSortByState","_useDateAddedState","ianaTimeZone","dateAddedFilter","setDateAddedFilter","dateAddedFilterCustomDateRange","setDateAddedFilterCustomDateRange","dateAddedChoiceOptions","onDateAddedFilterChange","tf","cdr","useDateAddedState","_useAssetSourcesState","_ref$disabledAssetSou","disabledAssetSources","setAssetSources","assetSourceOptions","onAssetSourceFilterChange","newAssetSources","useAssetSourcesState","_useImportSourceState","setImportSource","importSourceOptions","onImportSourceFilterChange","newImportSource","useImportSourceState","_useImageSizeState","minWidthFilter","setMinWidthFilter","minHeightFilter","setMinHeightFilter","onImageSizeFilterChange","useImageSizeState","_useVideoDurationStat","_ref$defaultMinVideoD","_ref$defaultMaxVideoD","setMinDurationFilter","setMaxDurationFilter","onVideoDurationFilterChange","useVideoDurationState","isDateAddedFilterActive","isImportSourceFilterActive","isAssetSourceFilterActive","isAdditionalFilterActive","getFilters","useFilterBarStyles","filterBar","rowGap","remaining","useBaseAdditionalFilterBarStyles","colorNeutralForeground2","fontWeightSemibold","useAdditionalFilterBarStyles","hide","filterText","AdditionalFilterBar","baseClasses","filterId","setForceClear","VideosFilterBar","_useFilterBarState","FluentProvider","webLightTheme","ImagesFilterBar","_useFilterBarState2","LibraryFilterBar","_useFilterBarState3","assetTypeToggleButtons","SearchResultFilterBar","_useFilterBarState4","FilterContextProvider","withFilterContext","ImportSourceFilterComponent","onValueChange","dropdownOptions","newHumanizedVaue","newHumanizedValue","AssetSourceFilterComponent","ImageSizeFilterComponent","onImageSizeChange","AL_DATE_ADDED_FILTER_DEFAULT_RANGE","getDefaultDateRange","DateAddedFilterComponent","_ref14$dateAddedFilte","PerformanceSearchTextFilterComponent","getPerformanceFilterComponents","useBreadcrumbStyles","breadcrumbContainer","FolderPathBreadcrumb","visibleForRootFolder","useAdsStudioLibraryPageContentStyle","HiddenDivForAnnounce","DEFAULT_GRID_CONFIG","toAnnounce","announce","setAnnounce","clip","overlaySpinnerStyles","FOLDER_GRID_CONFIG","AdsStudioLibraryPageContentInternal","renderHeader","renderGridCell","adsStudioUserPreferences","dataLoaded","displayFolderPath","reloadingFolders","renderToolbar","renderEmptyView","sectionSelectedItems","isAssetLibraryAIGCMVPEnabled","preDefinedAssetSources","navigation","gridScrollContainer","isXandrIntEnabled","XandrIntegrationEnabled","useJsData","jsData","Account","announcedText","setAnnouncedText","_useMemo","searchBoxText","openSystemUploadRef","gotoUploadFilesPanelPage","openSystemUpload","onStockButtonClick","gotoStockImagePanelPage","onInvestButtonClick","gotoInvestImagePanelPage","onWebsiteButtonClick","gotoWebsiteImagePanelPage","gotoUploadFolderPanelPage","gotoMixedVideoPanelPage","gotoAddVideoPanelPage","gotoMixedImagePanelPage","loadedAssetList","others","cell","isPageInited","setPageInited","loadingData","setLoadingData","loadDataAsync","o","libraryPageLoadDataPerfMarker","usePreDefinedAssetSources","bulkTookbar","onFolderPathClicked","onRenderHeader","gotoAIGenerationPanelPage","foldersGridSection","assetsGridSection","AssetLibraryCopilot","willFetchData","willRender","isPageLoading","hadNoData","isSectionDataEmptyStatus","injectedContentContainer","emptyViewContainer","assetLibraryUserPreferences","assetLibraryAccountPreferences","AdsStudioLibraryPageContent","dialog","wordBreak","ConfirmDialog","isDisplayed","errorText","confirmString","cancelString","onClickConfirm","onClickCancel","isUiBlocked","warningMsg","DismissIcon","Dialog","DialogSurface","DialogBody","DialogTitle","DialogContent","DialogActions","GenerateImageContext","GenerateImageContextProvider","generateImageExample","setGenerateImageExample","withGenerateImageContext","useLoadingViewStyles","backgroundRepeat","animation","backgroundPosition","LoadingIndicator","loadingViewStyles","ExamplePromptList","backgroundImageUrl","ExampleImageListWithoutStyle","MultiLineEllipsisText","ExampleImageCell","labelId","promptList","wrappedOnSelectImage","exampleImageList","template","ExampleImageCellWithoutStyle","exampleImageCell","MAX_PROMPT_LENGTH","PromptEditor","setPrompt","disabledText","disabledButton","onKeyDownInTextArea","onClickGenerateButton","textAreaId","Textarea","SendRegular","ObjectSelectionImageView","originalImageUrl","originalImageHeight","originalImageWidth","getMaskValueAtPoint","updateHighlightedImage","isFetchingSegmentations","toggleSelectedMask","workingSelectedImageSrc","highlightedImageSrc","maskValues","imageContainer","maskIndex","setMaskIndex","windowToImgPosition","imageBox","targetWidth","targetHeight","wr","hr","leftToImage","topToImage","mousemoveHandler","_windowToImgPosition","clientY","mouseleaveHandler","mousedownHandler","_windowToImgPosition2","keyHandler","shiftKey","resetMaskHandler","useUploadAsset","videoUploadPerfMarker","isUploadImageUpscaleEnabled","uploadFileAsync","uploadCallback","commonOptions","useReadAsset","readFileAsync","readFileAsDataURLAsync","useValidateAsset","isImageUpscaledRef","validateImageAsync","validateImageAsyncInternal","imageSource","minimumHeight","minimumWidth","getImageDetailAsync","naturalWidth","naturalHeight","validateFileAsync","validateVideoAsync","checkExtension","supportedList","extToCheck","contains","useCustomizedHandlerOptions","getCustomizedHandlerOptions","supportedVideoExtensions","linkButton","useUploadFiles","onFilesAddedCallback","setErrors","previewArr","setPreviewArr","onFileRead","selectedFiles","callback","isMultipleFiles","customizedOptions","_parseFileName","passedOptions","fileObj","fileSources","fileAdditionalInfoArr","fileSource","sourcesForPreview","generatePreviewArray","setProgress","progress","prevArr","updateFilePreviewArrayUploadProgress","uploadBatchs","each","updateProgress","uploadProgressBoundary","uploadResult","errorMsg","assetIds","upscaledImagesArrCount","showInfo","fileCount","genericErrorMsg","newErrors","getImageValidationErrorMessage","isReachFileSizeLimit","limitMB","fileSizeMB","MaximumImageFileSizeMB","MaximumVideoFileSizeMB","getReachFileSizeLimitErrorMessage","maximumImageFileSize","maximumVideoFileSize","ccJSData","jsDataCcRest","withCcJsDataContextProvider","withServerContext","_initCcJsData","serverContext","cidFetcher","CurrentCustomer","uidFetcher","CurrentUser","appendErrorSummary","handleAjaxAuthFailure","willSupportCors","GetJsDataInfo","ServicesEndpoints","ClientCenterUIAPI","initCcJsData","CcJsDataContextProvider","initialJsData"],"sourceRoot":""}