{"version":3,"file":"static/js/application.async.landing~52142909.42282c8e.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/asset-images/video-icon.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/asset-images/sparkle-svg-icon.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/asset-images/hollow-sparkle-svg-icon.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/asset-images/black-sparkle-svg-icon.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/asset-images/info-sparkle-svg-icon.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/asset-images/squareDismiss-svg-icon.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/asset-images/spinnerBase-svg-icon.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/asset-images/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/constants.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/filter-type.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/get-asset-type-options.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/get-time-description.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/convert-time-duration.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/get-date-added-options.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/get-import-source-options.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/get-image-sorting-options.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/get-asset-source-options.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/edit-image-utils.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/AI-prompt-example/sample.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/merge-task-updates.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/use-clarity-hook.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/model/utils.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/styles/custom-landing-page-styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/adapters/get-i18n.ts","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/adapters/get-server-context.ts","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/inline-chart-wrapper/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/hooks/use-inline-chart.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/inline-download-wrapper/use-date-default.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/inline-download-wrapper/styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/inline-download-wrapper/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/hooks/use-inline-download.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/date-picker/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/hooks/use-toolbar-container.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/adapters/get-notification.ts","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/service-utils.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/create-display-template-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/edit-display-template-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/adapters/get-logger.ts","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/logger/custom-logger.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/constants.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/preferences/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/odata-service/folder-odata-service.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/odata-service/image-bulk-edit-odata-service.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/odata-service/aigc-odata-service.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/odata-service/video-odata-service.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/odata-service/background-change-odata-service.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/asset-response-transformers/image-response-transformer.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/image-repository.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/asset-response-transformers/video-response-transformer.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/asset-response-transformers/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/request-transformers/request-transformer-util.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/request-transformers/add-asset-request-transformer.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/request-transformers/delete-asset-request-transformer.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/request-transformers/update-asset-request-transformer.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/error-handling/odata-error/ads-studio-odata-error.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/folder-repository.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/aigc-repository.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/background-change-repository.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/stock-image-repository.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/basic-assets-repository.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/with-ads-studio-services-provider.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/video-creative-repository.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/odata-config.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/with-assets-service.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/with-edit-image-service.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/edit-image-respository.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/with-brand-kit-service.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/with-display-templates-service.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/perf-marker/with-page-perf-marker.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/library-page/target-folder-picker/target-folder-picker-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/library-page/target-folder-picker/target-folder-picker-view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/library-page/target-folder-picker/target-folder-picker-modal.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/library-page/target-folder-picker/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/edit-video-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/upload-files-panel-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/upload-folder-panel-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/asset-details-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/background-removal-modal-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/hooks/use-ad-filter.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/hooks/use-date-picker.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/hooks/use-common-columns.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/performance-page/hooks/use-detail-list.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/basic-folders-repository.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/home-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/images-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/display-templates-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/video-templates-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/videos-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/brand-kit-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/library-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/website-panel-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/stock-panel-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/invest-panel-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/invest-video-panel-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/add-video-panel-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/services/repository/library-and-stock-image-repository.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/search-result-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/edit-image-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/generate-image-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/mixed-image-panel-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/pages/mixed-video-panel-page/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/routes/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/routes/use-navigation.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/adapters/index.ts","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shell-cmui/src/styles/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/add-asset-entry-card/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/add-asset-entry-card/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-panel-container/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-spinner/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-action-button-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-action-button.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/theme/ads-studio-theme-provider.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/theme/with-ads-studio-styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-overlay-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-overlay.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-card-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-card.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-decorative-icon.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-decorative-icon.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-decorative-label.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-decorative-label.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-deletion-button-decorator.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-deletion-button-decorator-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-image.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-image.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-selection-decorator-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-selection-decorator.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-loading-cell.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/folder-icon-component/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/folder-icon-component/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-drag-decorator-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-drag-decorator.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-drop-decorator-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-drop-decorator.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/default-grid-config.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/tiles-grid.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/multi-selection-grid.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/section-tiles-grid-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/section-tiles-grid.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/text-with-highlight/styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/text-with-highlight/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/shared-cell-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/folders-grid-cell/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/folders-grid-cell/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-assets-grid-cell/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-assets-grid-cell/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/grid-cell-factory.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/video-component/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/video-component/video.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/video-component/video-placeholder.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/video-assets-grid-cell/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/video-assets-grid-cell/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-panel-grid-cell/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/panel-image-grid/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/performance-filter-bar/styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/performance-filter-bar/performance-editing-filter-bar.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/performance-filter-bar/view-all-filters-button.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/performance-filter-bar/performance-readonly-filter-bar.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/add-video-panel-content/video-playback-view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/add-video-panel-content/item-placeholder-box-view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/folder-uploading-preview/styles.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/folder-uploading-preview/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/file-uploading-preivew/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/add-video-panel-content/video-load-preview.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/add-video-panel-content/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/stock-image-panel-content/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/invest-image-panel-content/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/invest-video-panel-content/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/website-image-panel-content/domain-input-view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/website-image-panel-content/subdomain-input-view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/website-image-panel-content/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/website-image-panel-content/useWebsiteImages.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-breadcrumb/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/styles/empty-view-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/empty-view/library-page-empty-view.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/new-dropdown.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/image-size.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/date-utils.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/simple-date-range-picker/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/upload-asset-limit-error.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/image-utils.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/video-utils.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/get-error-string.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/processor-util.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/upload-asset-error.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/folder-functions.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/upload-folder-error.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/task-poller.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service/folder-reducer.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/error-handling/ads-studio-error-base.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/error-handling/service-error-processors.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service/use-folders.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service/use-image-repo-methods.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service/use-video-repo-methods.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service/use-ai-generated-images.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service/asset-with-folders-data-service.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service/use-folder-path-tree.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service-ex/base/asset-window.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service-ex/base/assets-window-manager.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service-ex/base/assets-reducer-base.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service-ex/base/use-assets-service-base.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service-ex/use-basic-assets-services.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service-ex/use-edit-image-service.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/services/data-service-ex/use-video-task-poller.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/image-cropping-task-status-poller.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/video-task-status-poller.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/utils/with-asset-task-status-poller.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/date-added.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/search-box.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/asset-type.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/sort-by.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/asset-source.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/video-duration.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/import-source.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/video-duration-scrollbar.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/filter-toggle.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/state/date-added-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/context/filter-context.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/filter-bar-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/state/filter-toggle-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/state/asset-type-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/state/search-box-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/state/sort-by-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/state/asset-source-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/state/import-source-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/state/image-size-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/components/state/video-duration-state.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/filter-bar.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/context/filter-provider.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/filter-bar/performance-filter-components.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/folder-path-breadcrumb/style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/folder-path-breadcrumb/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/styles/library-page-style.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/hidden-div-for-announce/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/sections-utils.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/confirm-dialog/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/generate-image/context/generate-image-context.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/generate-image/context/generate-image-context-provider.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/loading-indicator/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/example-image/example-prompt.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/example-image/example-image-list.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/example-image/example-image-cell.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/prompt-editor/prompt-editor.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/components/object-selection/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/hooks/use-upload-asset.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/hooks/use-validate-asset.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/hooks/use-customized-handler-options.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/hooks/use-upload-files.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/js-data/init-cc-js-data.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-app-shared-components/src/js-data/with-cc-js-data-context-provider.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-shared-components/src/grid/itemLayout.ts","../../../node_modules/@bingads-webui-campaign-react/ads-studio-shared-components/src/grid/itemBox.ts","../../../node_modules/@bingads-webui-campaign-react/ads-studio-shared-components/src/grid/view.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-shared-components/src/component-styles-provider/component-styles-provider.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-shared-components/src/component-styles-provider/with-component-styles.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-shared-components/src/local-navigation/local-navigation-provider.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-shared-components/src/toggle-buttons/toggle-buttons.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-shared-components/src/inline-chart/index.tsx","../../../node_modules/@bingads-webui-campaign-react/ads-studio-shared-components/src/history-list-images/index.js","../../../node_modules/@bingads-webui-campaign-react/ads-studio-shared-components/src/data-provider/data-provider.tsx"],"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: false,\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: false,\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: false,\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 {\r\n // tokens,\r\n makeStyles,\r\n // makeResetStyles,\r\n shorthands,\r\n} from '@fluentui/react-components';\r\n\r\n// override default styles for landing pages\r\nexport const useCustomLandingPageStyles = makeStyles({\r\n landingPageComponentRoot: {\r\n backgroundColor: 'darkred',\r\n width: '100%',\r\n height: '200px',\r\n ...shorthands.margin('50px'),\r\n },\r\n landingPageComponentTitle: {\r\n backgroundColor: 'lightyellow',\r\n },\r\n});\r\n","import { II18n } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport function getI18n(i18n: II18n): II18n {\r\n return {\r\n p$data: i18n.p$data,\r\n getLocale: () => i18n.getLocale(),\r\n getString: (name: string, param?: any) => i18n.getString(name, param),\r\n getToday: (param: { timeZone?: string }) => i18n.getToday(param),\r\n getFirstDayOfWeek: () => i18n.getFirstDayOfWeek(),\r\n getDayOfWeek: (value: number, param?: any) => i18n.getDayOfWeek(value, param),\r\n formatCivilDate: (date: string, param: { timeZone: string | null, raw: string }) => i18n.formatCivilDate(date, param),\r\n formatDate: (date: string, param: { timeZone: string | null, raw: string }) => i18n.formatDate(date, param),\r\n formatDecimal: (value: number, param?: any) => i18n.formatDecimal(value, param),\r\n formatPercentToFixed: (value: number, param: any) => i18n.formatPercentToFixed(value, param),\r\n parseCivilDate: (date: string, param: { timeZone: string | null, raw: string }) => i18n.parseCivilDate(date, param),\r\n parseDate: (date: string, param: { timeZone: string | null, raw: string }) => i18n.parseDate(date, param),\r\n formatDecimalToFixed: (value: number, param?: any) => i18n.formatDecimalToFixed(value, param),\r\n };\r\n}\r\n","import { IServerContext } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport function getServerContext(serverContext: IServerContext): IServerContext {\r\n return {\r\n CurrentCustomer: {\r\n Id: serverContext.CurrentCustomer?.Id,\r\n },\r\n CurrentAccount: {\r\n Id: serverContext.CurrentAccount?.Id,\r\n TimeZone: serverContext.CurrentAccount?.TimeZone,\r\n Name: serverContext.CurrentAccount?.Name,\r\n },\r\n CurrentUser: {\r\n LocaleID: serverContext.CurrentUser?.LocaleID,\r\n CultureDateTimeFormat: {\r\n ShortDatePattern: serverContext.CurrentUser?.CultureDateTimeFormat?.ShortDatePattern,\r\n },\r\n },\r\n CurrentAccountInActive: serverContext.CurrentAccountInActive,\r\n ServicesEndpoints: serverContext.ServicesEndpoints,\r\n Token: serverContext.Token,\r\n IsAADUser: serverContext.IsAADUser,\r\n };\r\n}\r\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { InlineChart } from '@bingads-webui-campaign-react/inline-chart';\r\nimport { waterfallDateFilterProcessor } from '@bingads-webui-campaign/filter-storage';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport Constants from '@bingads-webui-static-legacy/constants';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { ThemeFluent } from '@bingads-webui-theme-2018/theme-fluent';\r\n\r\nconst AdStudioInlineChartWrapperInner = ({\r\n loadPerfTimeSeriesData,\r\n isShowChart,\r\n dateFilter,\r\n perfMarker,\r\n serverContext,\r\n instrumentation,\r\n chartPreference,\r\n i18nInlineChart,\r\n filters,\r\n appState,\r\n pageContext,\r\n forceToResizeChart,\r\n}) => {\r\n const { palette } = ThemeFluent;\r\n\r\n const resizeWidth = useCallback(() => {\r\n const chartContainer = document.getElementsByClassName('asset-library-performance-inline-chart');\r\n\r\n if (chartContainer.length > 0) {\r\n const chartWidth = chartContainer[0].offsetWidth;\r\n\r\n return chartWidth;\r\n }\r\n return 0;\r\n }, []);\r\n\r\n const resizeChart = useRef();\r\n\r\n const [dateRange, setDateRange] = useState({});\r\n\r\n const onWindowResize = useCallback(_.debounce(() => {\r\n const resizeChartHandler = resizeChart.current;\r\n resizeChartHandler(resizeWidth());\r\n }, 50), []);\r\n\r\n const resizeChartListener = useCallback((handler) => {\r\n resizeChart.current = handler;\r\n }, []);\r\n\r\n useEffect(() => {\r\n window.addEventListener('resize', onWindowResize, false);\r\n\r\n onWindowResize();\r\n\r\n return () => {\r\n window.removeEventListener('resize', onWindowResize);\r\n };\r\n }, [onWindowResize]);\r\n\r\n const getDataSource = useCallback(() => {\r\n const dataSourceInner = {\r\n findAll: timeSeriesParams => loadPerfTimeSeriesData(timeSeriesParams, filters),\r\n };\r\n\r\n return dataSourceInner;\r\n }, [filters, loadPerfTimeSeriesData]);\r\n\r\n const getOptions = useCallback(() => {\r\n const optionsInner = {\r\n entityType: 'Asset',\r\n token: appConfig.get('odata.token'),\r\n imagePath: Constants.imagePath, // can be removed?\r\n instrumentation,\r\n pageContext,\r\n pageState: appState,\r\n preference: chartPreference,\r\n hideChartPanel: !isShowChart,\r\n customMetricNameList: ['Clicks', 'ClickThruRate', 'Impressions', 'Spent'],\r\n seriesColors: {\r\n primary: {\r\n original: palette.themePrimary,\r\n comparative: palette.themePrimary,\r\n },\r\n secondary: {\r\n original: '#022F22',\r\n comparative: '#022F22',\r\n },\r\n },\r\n lowestSupportedGranularity: 'Day',\r\n disableMovingAverage: true,\r\n addDateChangeListener: () => { },\r\n resizeChartListener,\r\n resizeEventHandler: () => { },\r\n };\r\n\r\n return optionsInner;\r\n }, [appState, chartPreference, instrumentation, isShowChart, pageContext, palette.themePrimary, resizeChartListener]);\r\n\r\n const dataSource = useMemo(() => getDataSource(), [getDataSource]);\r\n\r\n const options = useMemo(() => getOptions(), [getOptions]);\r\n\r\n const getNewDateRange = useCallback(() => {\r\n const newDateRange = waterfallDateFilterProcessor(\r\n [\r\n {\r\n filter: dateFilter,\r\n },\r\n ],\r\n serverContext\r\n );\r\n\r\n return newDateRange;\r\n }, [dateFilter, serverContext]);\r\n\r\n useEffect(() => {\r\n const newDateRange = getNewDateRange();\r\n if (!_.isEqual(dateRange, newDateRange)) {\r\n setDateRange(newDateRange);\r\n }\r\n }, [dateFilter, dateRange, getNewDateRange]);\r\n\r\n useEffect(() => {\r\n const resizeChartHandler = resizeChart.current;\r\n if (resizeChartHandler && isShowChart && forceToResizeChart) {\r\n const newWidth = resizeWidth();\r\n if (newWidth > 0) {\r\n resizeChartHandler(newWidth);\r\n }\r\n }\r\n }, [resizeWidth, isShowChart, forceToResizeChart]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nAdStudioInlineChartWrapperInner.propTypes = {\r\n isShowChart: PropTypes.bool.isRequired,\r\n loadPerfTimeSeriesData: PropTypes.func.isRequired,\r\n dateFilter: PropTypes.shape({}),\r\n perfMarker: PropTypes.shape({}),\r\n serverContext: PropTypes.shape({\r\n DynamicPermissions: PropTypes.shape({\r\n InlineChartColumnMerticsEnabled: PropTypes.bool,\r\n CampaignsCombineGridAndChartOdataCallEnabled: PropTypes.bool,\r\n }),\r\n }),\r\n instrumentation: PropTypes.shape({}),\r\n chartPreference: PropTypes.shape({}),\r\n pageContext: PropTypes.shape({}),\r\n i18nInlineChart: PropTypes.shape({}).isRequired,\r\n filters: PropTypes.shape({}),\r\n appState: PropTypes.shape({}),\r\n forceToResizeChart: PropTypes.string,\r\n};\r\n\r\nAdStudioInlineChartWrapperInner.defaultProps = {\r\n dateFilter: null,\r\n perfMarker: null,\r\n serverContext: null,\r\n instrumentation: null,\r\n chartPreference: undefined,\r\n pageContext: null,\r\n filters: {},\r\n appState: null,\r\n forceToResizeChart: null,\r\n};\r\n\r\nexport const AdStudioInlineChartWrapper = withInstrumentation(AdStudioInlineChartWrapperInner);\r\n\r\n","import Promise from 'bluebird';\r\nimport React, { useCallback, useMemo } from 'react';\r\n\r\nimport { ChartDataAdapter } from '@bingads-webui-campaign-react/inline-chart';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport { InlineChartPreferences } from '@bingads-webui-campaign/inline-chart-preferences';\r\nimport { store, adapter } from '@bingads-webui-component-legacy/bingads-grid/service/grid-preferences';\r\nimport preferenceServiceLegacy from '@bingads-webui-component-legacy/preference/service/index';\r\nimport globalPageContext from '@bingads-webui-static-legacy/page-context';\r\nimport appState from '@bingads-webui-component-legacy/state/index';\r\nimport { AdStudioInlineChartWrapper } from '../inline-chart-wrapper';\r\n\r\nexport const useAdStudioInlineChart = ({\r\n serverContext, globalLegacyI18n, getPageContext, forceToResizeChart,\r\n}) => {\r\n const pageContext = useMemo(() => (getPageContext ? getPageContext() : globalPageContext), [getPageContext]);\r\n const i18nInlineChart = useMemo(() => globalLegacyI18n && globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!@bingads-webui-campaign-react/inline-chart'), [globalLegacyI18n]);\r\n\r\n const chartPreference = useMemo(() => {\r\n const preferencePromise = preferenceServiceLegacy.initialize().then(() => Promise.promisifyAll(preferenceServiceLegacy));\r\n return new InlineChartPreferences(\r\n store,\r\n appConfig,\r\n adapter,\r\n preferencePromise\r\n );\r\n }, []);\r\n\r\n const chartDataAdapter = useMemo(() => new ChartDataAdapter({\r\n i18n: i18nInlineChart,\r\n permissions: pageContext.Permissions,\r\n gridName: pageContext.CurrentGridName,\r\n lowestSupportedGranularity: 'Day',\r\n }), [i18nInlineChart, pageContext]);\r\n\r\n const getChartPreference = useCallback(() => chartDataAdapter.getPreferencesAndDefaults(\r\n chartPreference,\r\n pageContext\r\n ), [chartDataAdapter, chartPreference, pageContext]);\r\n pageContext.CurrentTabId = 'Asset';\r\n\r\n const renderInlineChart = ({\r\n isChartShown, filters, loadPerfTimeSeriesData, perfMetricDateRange, perfMarker,\r\n }) => (\r\n \r\n );\r\n\r\n const getGranularityEnum = useCallback(perfMetricDateRange => getChartPreference().then(({ granularityId }) => {\r\n const dateRange = { ...perfMetricDateRange, start: new Date(perfMetricDateRange.RangeStartDate), end: new Date(perfMetricDateRange.RangeEndDate) };\r\n if (chartDataAdapter.reevaluateGranularity && chartDataAdapter.getGranularityEnum) {\r\n const newGranularityId = chartDataAdapter.reevaluateGranularity(dateRange, granularityId);\r\n return chartDataAdapter.getGranularityEnum(newGranularityId);\r\n }\r\n return 'Day';\r\n }), [chartDataAdapter, getChartPreference]);\r\n\r\n return { renderInlineChart, getChartPreference, getGranularityEnum };\r\n};\r\n","// copied from @bingads-webui-campaign-react/wizard-shared-components/utils/p$dadeRange to avoid depending on bing-maps\r\nimport Promise from 'bluebird';\r\nimport { WaterfallFilterStorage, WaterfallFilterType, waterfallDateFilterProcessor } from '@bingads-webui-campaign/filter-storage';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { PreferenceContext } from '@bingads-webui-react/preference-context';\r\nimport { useContext } from 'react';\r\n\r\nfunction useDateRangeDefault() {\r\n const preferenceService = useContext(PreferenceContext);\r\n const serverContext = useContext(ServerContext);\r\n const waterfallFilterStorage = new WaterfallFilterStorage({\r\n preferenceService,\r\n });\r\n const waterFallDateFilters = waterfallFilterStorage.getFilters([WaterfallFilterType.DateFilter]);\r\n const dateFilter = waterfallDateFilterProcessor(waterFallDateFilters, serverContext);\r\n return dateFilter;\r\n}\r\n\r\nexport function useP$DaterangeDefault() {\r\n const dateFilter = useDateRangeDefault();\r\n return Promise.resolve(dateFilter);\r\n}\r\n","import { shorthands } from '@fluentui/react-components';\r\nimport { getInlineDownloadStyle, helpbuttonStyle, datePickerStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const inlineDownloadStyle = (_, theme) => ({\r\n '@global': {\r\n ...datePickerStyle(theme),\r\n },\r\n InlineDownloadWrapper: {\r\n marginTop: '24px',\r\n position: 'relative',\r\n zIndex: '11',\r\n ...getInlineDownloadStyle({}),\r\n '& button.btn': {\r\n marginRight: '8px',\r\n },\r\n \"& input[type='checkbox']\": {\r\n bottom: '0',\r\n },\r\n '& .helpbutton': helpbuttonStyle({})['.helpbutton'],\r\n '& .helpbutton::before': {\r\n ...helpbuttonStyle({})['.helpbutton::before'],\r\n position: 'static',\r\n top: 'unset',\r\n },\r\n '& .helpbutton:after': {\r\n content: 'none',\r\n },\r\n '& .glyphicon-remove': {\r\n // color: `${theme.palette.themePrimary}`,\r\n },\r\n '& .form-horizontal .form-group': {\r\n marginLeft: '0',\r\n marginRight: '0',\r\n },\r\n '& .panel': {\r\n boxShadow: 'none',\r\n '& .panel-heading ': {\r\n ...shorthands.padding('0px'),\r\n fontWeight: '600',\r\n '& .panel-title': {\r\n fontSize: '20px',\r\n fontWeight: '600',\r\n lineHeight: '27px',\r\n },\r\n },\r\n '& .panel-body': {\r\n lineHeight: '19px',\r\n paddingLeft: '0px',\r\n marginBottom: '18px',\r\n paddingBottom: '0px',\r\n\r\n '& .helpbutton': {\r\n marginLeft: '7px',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import React, { useContext, useMemo, useRef, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport Promise from 'bluebird';\r\nimport $ from 'jquery';\r\nimport { withServerContext, ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getTabbableNodes } from '@bingads-webui-react/focus-lock';\r\nimport { useP$DaterangeDefault } from './use-date-default';\r\nimport { inlineDownloadStyle } from './styles';\r\n\r\n// TODO: support segments for inline download\r\nexport function useInlineDownload({\r\n processReportRule = _.identity,\r\n customDownloadService = undefined,\r\n downloadFormats = undefined,\r\n entity,\r\n totalRecordCount,\r\n validateSegmentType = () => true,\r\n isFeedbackEnabled = undefined,\r\n data = { SegmentationTypes: [] },\r\n InlineDownloadCampaignODataRepository,\r\n isForVNext = true,\r\n p$daterange = undefined,\r\n localizedHeaders,\r\n odataColumnNames,\r\n serverContext,\r\n filterUrlParam,\r\n serializedFilter,\r\n}) {\r\n const p$daterangeDefaultValue = useP$DaterangeDefault();\r\n\r\n const p$daterangeDefault = () => p$daterangeDefaultValue;\r\n\r\n const segmentationTypes = [];\r\n\r\n if (serverContext && serverContext.Permissions && serverContext.Permissions.IsCustomerHierarchyEnabled) {\r\n _.extend(data, { IsCustomerHierachyRequest: true });\r\n }\r\n\r\n const repository = _.isFunction(customDownloadService) ? {\r\n download({\r\n Format,\r\n SegmentationTypes,\r\n }) {\r\n customDownloadService(Format, SegmentationTypes[0]);\r\n return Promise.resolve();\r\n },\r\n } : new InlineDownloadCampaignODataRepository({\r\n odataColumnNames,\r\n localizedHeaders,\r\n entity,\r\n filterUrlParam,\r\n serializedFilter,\r\n processReportRule,\r\n isForVNext,\r\n p$daterange: p$daterange || p$daterangeDefault,\r\n });\r\n\r\n return {\r\n isForVNext,\r\n totalRecordCount,\r\n repository,\r\n downloadFormats,\r\n segmentationTypes,\r\n validateSegmentType,\r\n isFeedbackEnabled,\r\n data,\r\n allUsersType: entity === 'Account' ? 'Customer' : 'Account',\r\n };\r\n}\r\n\r\n// Generate a inline download react from with default props and propTypes\r\nconst InlineDownloadWrapperInternal = React.memo((props) => {\r\n const serverContext = useContext(ServerContext);\r\n const classes = useDefaultStyles(inlineDownloadStyle);\r\n const inlineDownloadRef = useRef();\r\n const {\r\n setDownloadShown,\r\n getInlineDownloadColumns,\r\n getInlineDownloadFilter,\r\n ReportEmailRule,\r\n InlineDownloadReactForm,\r\n InlineDownloadCampaignODataRepository,\r\n totalAssetCount,\r\n } = props;\r\n\r\n const {\r\n localizedHeaders,\r\n odataColumnNames,\r\n } = useMemo(getInlineDownloadColumns, []);\r\n\r\n const {\r\n filterUrlParam,\r\n serializedFilter,\r\n } = useMemo(getInlineDownloadFilter, []);\r\n\r\n const inlineDownloadConfigs = useInlineDownload({\r\n serverContext,\r\n entity: 'Folder',\r\n totalRecordCount: totalAssetCount,\r\n downloadFormats: [\r\n 'Csv',\r\n 'Tsv',\r\n 'Xlsx',\r\n 'Csvzip',\r\n ],\r\n InlineDownloadCampaignODataRepository,\r\n validateSegmentType: () => true,\r\n isFeedbackEnabled: false,\r\n data: ReportEmailRule || ({ SegmentationTypes: [] }),\r\n isForVNext: true,\r\n p$daterange: undefined,\r\n localizedHeaders,\r\n odataColumnNames,\r\n filterUrlParam,\r\n serializedFilter,\r\n });\r\n\r\n useEffect(() => {\r\n if (inlineDownloadRef && inlineDownloadRef.current) {\r\n // filter the not visible element out which may due to parent display property\r\n const tabbableNode = _.filter(getTabbableNodes(inlineDownloadRef.current), item => $(item).is(':visible'));\r\n if (tabbableNode && tabbableNode.length > 0) {\r\n tabbableNode[0].focus({\r\n preventScroll: true,\r\n });\r\n }\r\n }\r\n });\r\n\r\n useEffect(() => () => {\r\n // focus on the download button after the inline download form closed\r\n const downloadButton = document.querySelector('#button-download');\r\n // wait for the download button rendered\r\n if (downloadButton && downloadButton.focus) {\r\n setTimeout(() => {\r\n downloadButton.focus();\r\n });\r\n }\r\n }, []);\r\n\r\n return (\r\n
\r\n setDownloadShown(false)}\r\n totalRecordCount={totalAssetCount}\r\n downloadFormats={inlineDownloadConfigs.downloadFormats}\r\n segmentationTypes={[]}\r\n validateSegmentType={() => true} // if we don't have segment type, we don't need to validate it\r\n isFeedbackEnabled={false}\r\n data={inlineDownloadConfigs.data}\r\n allUsersType={inlineDownloadConfigs.allUsersType}\r\n repository={inlineDownloadConfigs.repository}\r\n clearAfterDownloadCall={false}\r\n isForVNext\r\n downloadBoxRole=\"listbox\"\r\n downloadFormatsRole=\"option\"\r\n />\r\n
\r\n );\r\n});\r\n\r\nInlineDownloadWrapperInternal.propTypes = {\r\n setDownloadShown: PropTypes.func,\r\n totalAssetCount: PropTypes.number.isRequired,\r\n ReportEmailRule: PropTypes.shape({}),\r\n getInlineDownloadColumns: PropTypes.func.isRequired,\r\n getInlineDownloadFilter: PropTypes.func.isRequired,\r\n InlineDownloadReactForm: PropTypes.element.isRequired,\r\n InlineDownloadCampaignODataRepository: PropTypes.func.isRequired,\r\n};\r\n\r\nInlineDownloadWrapperInternal.defaultProps = {\r\n setDownloadShown: () => {},\r\n ReportEmailRule: undefined,\r\n};\r\n\r\nconst DelayedInlineDownloadWrapperInternal = React.lazy(() =>\r\n import(/* webpackMode: 'eager' */ '@bingads-webui-campaign-legacy/griddownload/view/loader')\r\n .then(({ InlineDownloadReactForm, InlineDownloadCampaignODataRepository }) => ({\r\n default: React.memo(props => ()),\r\n })));\r\n\r\nexport const InlineDownloadWrapper = withServerContext(DelayedInlineDownloadWrapperInternal);\r\n","import React, { useMemo, useState, useEffect } from 'react';\r\nimport appState from '@bingads-webui-component-legacy/state/index';\r\nimport { parseSync } from '@bingads-webui/safe-json';\r\nimport { InlineDownloadWrapper } from '../inline-download-wrapper';\r\n\r\nconst getReportEmailRule = () => {\r\n const rule = appState.get('$ReportEmailRule');\r\n appState.unset('$ReportEmailRule');\r\n return rule;\r\n};\r\n\r\nexport const useInlineDownload = ({ overwriteFilters }) => {\r\n // ReportEmailRule state from appState is for the filter, columns and date range from the task\r\n // items of the report grid. We need to get it from appState and then remove it from appState\r\n // so that it doesn't get used in next show of the inline download.\r\n const ReportEmailRule = getReportEmailRule();\r\n const [isDownloadShown, setDownloadShown] = useState(!!ReportEmailRule);\r\n const ReportEmailRuleSnapshot = useMemo(() => ReportEmailRule, [isDownloadShown]);\r\n\r\n // Ensure not rerendering root after mount\r\n const renderInlineDownload = useMemo(\r\n () => props => (),\r\n [ReportEmailRuleSnapshot]\r\n );\r\n\r\n useEffect(() => {\r\n if (ReportEmailRuleSnapshot && ReportEmailRuleSnapshot.Filter && overwriteFilters) {\r\n // Filter is a stringified JSON object in the serializedFilter of the inline download API call.\r\n // We need to parse it and then overwrite the filters in the grid with the parsed filters.\r\n const filters = parseSync(ReportEmailRuleSnapshot.Filter);\r\n overwriteFilters(filters);\r\n }\r\n }, [overwriteFilters]);\r\n\r\n return {\r\n renderInlineDownload,\r\n ReportEmailRule,\r\n isDownloadShown,\r\n setDownloadShown,\r\n };\r\n};\r\n","/* eslint-disable react-hooks/rules-of-hooks */\r\nimport React from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { CivilDate } from 'tc39-proposal-temporal';\r\nimport { ComparedDateRangePicker, RANGES } from '@bingads-webui-react/compared-date-range-picker';\r\nimport { withScope } from '@bingads-webui-react/scope-service';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { generateDateData, getRangesFromData, translateLegacyToIANATimezone } from '@bingads-webui-universal/temporal-utitlities';\r\n\r\nconst updateToWaterfallFilter = (props, dateFromDatePicker) => {\r\n const data = generateDateData(\r\n props.i18n,\r\n dateFromDatePicker,\r\n props.dateFormat,\r\n props.lcid,\r\n translateLegacyToIANATimezone(props.timeZone)\r\n );\r\n const isDateRangeChange = data.RangeId !== props.dateFilter.RangeId || data.RangeId === RANGES.Custom;\r\n let isComparedDateChange = false;\r\n if ((data.compared && !props.dateFilter.compared) || (props.dateFilter.compared && !data.compared)) {\r\n isComparedDateChange = true;\r\n } else if (data.compared && props.dateFilter.compared) {\r\n if (data.compared.key !== props.dateFilter.compared.key) {\r\n isComparedDateChange = true;\r\n } else if (data.compared.formattedEnd !== props.dateFilter.compared.formattedEnd || data.compared.formattedStart !== props.dateFilter.compared.formattedStart) {\r\n isComparedDateChange = true;\r\n }\r\n }\r\n if (isDateRangeChange || isComparedDateChange) {\r\n console.log('updated data:', data, 'original data:', props.dateFilter);\r\n props.updateWaterfallFilter(data);\r\n }\r\n};\r\n\r\nconst DatePicker = React.memo((props) => {\r\n const {\r\n i18n,\r\n dateFilter,\r\n dateFormat,\r\n lcid,\r\n timeZone,\r\n onSwitchCompare,\r\n instrumentation,\r\n disableCompare,\r\n minDate,\r\n serverContext,\r\n rangeIds,\r\n } = props;\r\n const { selectedRange, selectedComparedRange } =\r\n getRangesFromData(i18n, dateFilter, dateFormat, lcid);\r\n\r\n const dateRangePickedLogger = React.useMemo(() => {\r\n if (instrumentation.datePicker && instrumentation.datePicker.create) {\r\n return instrumentation.datePicker.create().dateRangePicked.create();\r\n }\r\n return null;\r\n }, [instrumentation]);\r\n\r\n const dateRangeLogger = (dateRange) => {\r\n if (dateRangePickedLogger) {\r\n dateRangePickedLogger.trace({\r\n dateRange,\r\n });\r\n }\r\n if (dateRange != null && dateRange.method === 'onApply') {\r\n setClarityTag({ DatePickerOnApply: 'true' });\r\n }\r\n if (dateRange != null && dateRange.method === 'onQuickApply') {\r\n setClarityTag({ DatePickerOnQuickApply: 'true' });\r\n }\r\n };\r\n\r\n const isImprovedDateRangePickerEnabled = serverContext.DynamicPermissions && serverContext.DynamicPermissions.ImprovedDateFilter;\r\n\r\n return (\r\n updateToWaterfallFilter(props, dateFromDatePicker)}\r\n onSwitchCompare={onSwitchCompare}\r\n dateRangeLogger={dateRangeLogger}\r\n disableCompare={disableCompare}\r\n rangeIds={rangeIds}\r\n minDate={minDate}\r\n />);\r\n});\r\n\r\nDatePicker.propTypes = {\r\n dateFilter: PropTypes.shape({\r\n RangeStartDate: PropTypes.string,\r\n RangeEndDate: PropTypes.string,\r\n RangeId: PropTypes.number,\r\n Rangelcid: PropTypes.number,\r\n RangeIndex: PropTypes.number,\r\n RangeDays: PropTypes.number,\r\n compared: PropTypes.shape({\r\n start: PropTypes.instanceOf(Date),\r\n end: PropTypes.instanceOf(Date),\r\n formattedStart: PropTypes.string,\r\n formattedEnd: PropTypes.string,\r\n key: PropTypes.string,\r\n text: PropTypes.string,\r\n }),\r\n }),\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n // eslint-disable-next-line\r\n lcid: PropTypes.number.isRequired,\r\n timeZone: PropTypes.number.isRequired,\r\n dateFormat: PropTypes.string.isRequired,\r\n onSwitchCompare: PropTypes.func,\r\n // eslint-disable-next-line react/forbid-prop-types\r\n instrumentation: PropTypes.object.isRequired,\r\n disableCompare: PropTypes.bool,\r\n serverContext: PropTypes.shape({\r\n DynamicPermissions: PropTypes.shape({\r\n ImprovedDateFilter: PropTypes.bool,\r\n }),\r\n }),\r\n minDate: PropTypes.instanceOf(CivilDate),\r\n};\r\n\r\nDatePicker.defaultProps = {\r\n dateFilter: {},\r\n disableCompare: false,\r\n minDate: null,\r\n serverContext: {},\r\n onSwitchCompare: _.noop,\r\n};\r\n\r\nexport const DatePickerWithScope = withInstrumentation(withScope(DatePicker));\r\n","import React, { useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport { makeStyles, shorthands } from '@fluentui/react-components';\r\nimport { ToolbarContainer } from '@bingads-webui-campaign-react/toolbar-container';\r\n\r\nconst usePerfPageToolbarStyle = makeStyles({\r\n toolbarFilterContainer: {\r\n flexGrow: '1 !important',\r\n ...shorthands.padding('hidden'),\r\n\r\n '& .filter-list': {\r\n paddingTop: '10px',\r\n '& .asset-library-search': {\r\n display: 'inline-block',\r\n position: 'relative',\r\n top: '2px',\r\n },\r\n },\r\n\r\n '& .filter-list-editing': {\r\n '& .dropdown-filter-container': {\r\n display: 'inline-block',\r\n paddingTop: '12px',\r\n },\r\n\r\n '& .asset-library-search': {\r\n display: 'inline-block',\r\n paddingTop: '12px',\r\n },\r\n\r\n '& .top-rated-performance-filter': {\r\n alignSelf: 'center',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const useToolbarContainer = ({ isHideShowGraphButton }) => {\r\n const classes = usePerfPageToolbarStyle();\r\n\r\n const toolbarSelectedConfig = useMemo(() => new Map(), []);\r\n\r\n const renderToolbarContainer = ({\r\n i18n, filterBar, setDownloadShown, isChartShown, setChartShown, isEditingFilter,\r\n }) => {\r\n const toolbarUnselectedConfigList = [\r\n ['filter-bar', {\r\n id: 'filter-bar',\r\n type: 'custom',\r\n classes: classes.toolbarFilterContainer,\r\n content: filterBar,\r\n }],\r\n ['button-download', {\r\n type: 'nav-item',\r\n text: i18n.getString(_TL_('Download')),\r\n description: i18n.getString(_TL_('The download form is currently hidden. Select \"Download\" to display it')),\r\n id: 'button-download',\r\n iconLeftGlyphName: 'ba-Download',\r\n onClick: () => {\r\n setDownloadShown(true);\r\n },\r\n classes: 'button-download-form',\r\n }],\r\n ['expand-table', { type: 'expand-table' }],\r\n ];\r\n\r\n if (!isHideShowGraphButton) {\r\n toolbarUnselectedConfigList.push(['button-chart-toggle', {\r\n type: 'nav-item',\r\n text: isChartShown ? i18n.getString(_TL_('Hide graph')) : i18n.getString(_TL_('Show graph')),\r\n description: isChartShown\r\n ? i18n.getString(_TL_('The performance graph is currently displayed. Select \"Hide graph\" to hide it.'))\r\n : i18n.getString(_TL_('The performance graph is currently hidden. Select \"Show graph\" to display it.')),\r\n id: 'button-chart-toggle',\r\n iconLeftGlyphName: isChartShown ? 'ba-Hide3' : 'ba-View',\r\n expanded: isChartShown,\r\n onClick: () => {\r\n setChartShown(!isChartShown);\r\n },\r\n classes: isChartShown ? 'button-hide-graph' : 'button-show-graph',\r\n }]);\r\n }\r\n\r\n const toolbarUnselectedConfig = new Map(toolbarUnselectedConfigList);\r\n\r\n const toolbarConfigInEditingFilterMode = new Map([\r\n ['filter-bar', {\r\n id: 'filter-bar',\r\n type: 'custom',\r\n classes: classes.toolbarFilterContainer,\r\n content: filterBar,\r\n }],\r\n ]);\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n return { renderToolbarContainer };\r\n};\r\n","import { notificationApi as originNotificationApi } from '@bingads-webui-campaign/notification-center';\r\nimport { INotificationApi, INotificationExtraOptions } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const notificationApi: INotificationApi = {\r\n showWarning: (message: string, extraOptions?: INotificationExtraOptions): void | string => originNotificationApi.showWarning(message, extraOptions),\r\n showInfo: (message: string, extraOptions?: INotificationExtraOptions): void | string => originNotificationApi.showInfo(message, extraOptions),\r\n dismiss: (id: string): void => {\r\n originNotificationApi.dismiss(id);\r\n },\r\n};\r\n","import _ from 'underscore';\r\nimport { getRangesFromData } from '@bingads-webui-universal/temporal-utitlities';\r\nimport { odataErrorCodes } from '@bingads-webui-campaign/instrumentation';\r\nimport { CSMLSortBy, getErrorString } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const createFolderFilterQuery = ({\r\n searchTerm,\r\n minWidth,\r\n minHeight,\r\n isVideoDurationBoundaryIncluded = false,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n dateAddedStart,\r\n dateAddedEnd,\r\n assetType,\r\n sourceType,\r\n assetSources,\r\n folderId,\r\n hasPerfData,\r\n topRated,\r\n}) => {\r\n const filterPredicates = [];\r\n\r\n if (assetType) {\r\n filterPredicates.push(`FolderAssetType eq '${assetType}'`);\r\n }\r\n if (minWidth) {\r\n filterPredicates.push(`Width gt ${minWidth}`);\r\n }\r\n if (minHeight) {\r\n filterPredicates.push(`Height gt ${minHeight}`);\r\n }\r\n\r\n if (minVideoDuration) {\r\n if (isVideoDurationBoundaryIncluded) {\r\n filterPredicates.push(`VideoDuration ge ${minVideoDuration}`);\r\n } else {\r\n filterPredicates.push(`VideoDuration gt ${minVideoDuration}`);\r\n }\r\n }\r\n if (maxVideoDuration) {\r\n if (isVideoDurationBoundaryIncluded) {\r\n filterPredicates.push(`VideoDuration le ${maxVideoDuration}`);\r\n } else {\r\n filterPredicates.push(`VideoDuration lt ${maxVideoDuration}`);\r\n }\r\n }\r\n\r\n if (dateAddedStart && dateAddedEnd && dateAddedStart === dateAddedEnd) {\r\n filterPredicates.push(`CreatedTime eq ${dateAddedStart}`);\r\n } else {\r\n if (dateAddedStart) {\r\n filterPredicates.push(`CreatedTime ge ${dateAddedStart}`);\r\n }\r\n if (dateAddedEnd) {\r\n filterPredicates.push(`CreatedTime le ${dateAddedEnd}`);\r\n }\r\n }\r\n if (sourceType) {\r\n filterPredicates.push(`SourceType eq '${sourceType}'`);\r\n }\r\n if (!_.isEmpty(assetSources)) {\r\n filterPredicates.push(`AssetSourceType in (${assetSources.map(s => `'${s}'`).join(',')})`);\r\n }\r\n if (searchTerm) {\r\n filterPredicates.push(`contains(BroadSearchFields, '${searchTerm}')`);\r\n }\r\n\r\n if (folderId) {\r\n filterPredicates.push(`FolderId eq ${folderId}`);\r\n }\r\n\r\n if (hasPerfData) {\r\n filterPredicates.push('PerformanceMetrics/Impressions gt 0');\r\n }\r\n\r\n if (topRated) {\r\n filterPredicates.push(\"AssetPerformanceRating eq 'Best'\");\r\n }\r\n\r\n const filterQuery = filterPredicates.length > 0 ?\r\n `${filterPredicates.join(' and ')}` : '';\r\n\r\n return filterQuery ? `$filter=${filterQuery}` : '';\r\n};\r\n\r\nconst formatCivilDateString = (civilDate) => {\r\n if (!civilDate) return '';\r\n\r\n const { year, month, day } = civilDate;\r\n if (!year || !month || !day) return '';\r\n\r\n return `${year}-${month < 10 ? '0' : ''}${month}-${day < 10 ? '0' : ''}${day}`;\r\n};\r\n\r\nexport const getDateRangeParams = (i18n, dateData, dateFormat, lcid) => {\r\n const { selectedRange, selectedComparedRange } = getRangesFromData(i18n, dateData, dateFormat, lcid) || {};\r\n if (selectedRange) {\r\n const startParamStr = formatCivilDateString(selectedRange.start);\r\n const endParamStr = formatCivilDateString(selectedRange.end);\r\n const comparisonStartDateStr = selectedComparedRange ? formatCivilDateString(selectedComparedRange.start) : null;\r\n const comparisonEndDateStr = selectedComparedRange ? formatCivilDateString(selectedComparedRange.end) : null;\r\n\r\n return {\r\n startDate: startParamStr,\r\n endDate: endParamStr,\r\n comparisonStartDate: comparisonStartDateStr,\r\n comparisonEndDate: comparisonEndDateStr,\r\n };\r\n }\r\n return {};\r\n};\r\n\r\n// dateStr: string in format like 2022-06-21T08:55:59.807-07:00\r\nexport const parseMTDateString = (i18n, dateStr) => {\r\n if (!dateStr) {\r\n return null;\r\n }\r\n // remove the millisecs part to avoid parsing fail (the length of millisecs part is variable)\r\n const str = dateStr.replace(/\\.\\d+/, '');\r\n const options = {\r\n raw: 'yyyy-MM-ddTHH:mm:ssZZZZZ',\r\n timeZone: null,\r\n };\r\n const date = i18n.parseDate(str, options);\r\n return date;\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\r\n// get date string with offset, such as: '2022-01-01+08:00'\r\nexport const formatCivilDate = (i18n, civilDate, timeZone, utcOffset, timeStr) => {\r\n const rawFormat = timeStr ? `yyyy-MM-ddT${timeStr}` : 'yyyy-MM-dd';\r\n const dateStr = i18n.formatCivilDate(civilDate, { raw: rawFormat, timeZone });\r\n // encode '+' char\r\n const offset = utcOffset ? utcOffset.replace('+', '%2B') : '';\r\n return `${dateStr}${offset}`;\r\n};\r\n\r\nexport const isErrorWhitelisted = (error = {}) => {\r\n if (error.errors && error.errors.length === 1) {\r\n const errorCode = error.errors[0].Code;\r\n\r\n if (_.isString(errorCode)) {\r\n return _.contains(odataErrorCodes, errorCode.toUpperCase());\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nexport const handleErrorLogging = (err, api, logger) => {\r\n if (isErrorWhitelisted(err)) {\r\n logger.logTrace(`[IgnoredDataServiceError] ${getErrorString(err)}`, { api });\r\n } else {\r\n logger.logError(err, null, api);\r\n }\r\n};\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nexport const removeNullUndefined = (obj) => {\r\n const newObj = {};\r\n _.keys(obj).forEach((key) => {\r\n if (_.isObject(obj[key])) {\r\n newObj[key] = removeNullUndefined(obj[key]);\r\n } else if (obj[key] !== null && obj[key] !== undefined) {\r\n newObj[key] = obj[key];\r\n }\r\n });\r\n return newObj;\r\n};\r\n","import React from 'react';\r\nimport { PerformancePageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { useAdStudioInlineChart } from './hooks/use-inline-chart';\r\nimport { useInlineDownload } from './hooks/use-inline-download';\r\nimport { useDatePicker } from './hooks/use-date-picker';\r\nimport { useCommonColumn } from './hooks/use-common-columns';\r\nimport { useDetailList } from './hooks/use-detail-list';\r\nimport { useToolbarContainer } from './hooks/use-toolbar-container';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\nimport { createFolderFilterQuery } from '../../services/service-utils';\r\n\r\nconst globalLegacyI18n = window && window.globalLegacyI18n;\r\n\r\nexport const PerformancePage = (props) => {\r\n const {\r\n serverContext, navigation, minDate, i18n, disableCompare, perfMetricDateRange, updateGlobalWaterfallFilter, outRenderInlineChart, isHideShowGraphButton,\r\n } = props;\r\n\r\n const { renderDatePicker } = useDatePicker({\r\n serverContext, minDate, i18n, disableCompare, perfMetricDateRange, updateWaterfallFilter: updateGlobalWaterfallFilter,\r\n });\r\n\r\n const { renderInlineChart, getChartPreference } = useAdStudioInlineChart({\r\n serverContext,\r\n globalLegacyI18n,\r\n // forceToResizeChart,\r\n });\r\n\r\n const { renderHeaderWithPopup } = useCommonColumn();\r\n const { renderDetailsList } = useDetailList();\r\n const { renderToolbarContainer } = useToolbarContainer({ isHideShowGraphButton });\r\n\r\n const onClick = () => {\r\n navigation.gotoHomePage();\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { CreateDisplayTemplatePageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { withFullScreenWithSummaryBar } from '@bingads-webui-react/app-layout-container';\r\n\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nconst CreateDisplayTemplatePage = props => ();\r\n\r\nconst CreateDisplayTemplatePageWithLayout = withFullScreenWithSummaryBar(withInstrumentation(CreateDisplayTemplatePage));\r\n\r\nexport { CreateDisplayTemplatePageWithLayout as CreateDisplayTemplatePage };\r\n","import React from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { withInstrumentation } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { EditDisplayTemplatePageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { withFullScreenWithSummaryBar } from '@bingads-webui-react/app-layout-container';\r\n\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nconst EditDisplayTemplatePage = (props) => {\r\n const { displayTemplateId: imageId } = useParams();\r\n\r\n return ();\r\n};\r\n\r\nconst PageWithInstrumentation = withFullScreenWithSummaryBar(withInstrumentation(EditDisplayTemplatePage));\r\n\r\nexport { PageWithInstrumentation as EditDisplayTemplatePage };\r\n","import Promise from 'bluebird';\r\nimport { ILogger, getErrorString } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport const getLogger = (activity, page = '', version = '', tag = 'Asset Library') : ILogger => {\r\n const {\r\n trace, error, withSignalAsync, // perf, ajax,\r\n } = activity || {};\r\n\r\n const pageName = page;\r\n\r\n const logTrace = (...args) => {\r\n const [msg, params, ...rest] = args;\r\n if (trace) {\r\n const paramsJson = params ? ` $params: ${JSON.stringify(params)}` : '';\r\n trace(`[${tag}]${version ? `[${version}]` : ''}${page ? `[${page}]` : ''} ${msg}${paramsJson}`, ...rest);\r\n }\r\n };\r\n\r\n const logError = (...args) => {\r\n const [err, params, ...rest] = args;\r\n if (error) {\r\n const paramsJson = params ? ` $params: ${JSON.stringify(params)}` : '';\r\n const errMsg = getErrorString(err);\r\n error(`[${tag}] ${errMsg}${paramsJson}`, ...rest);\r\n }\r\n };\r\n\r\n const traceWithoutParams = (...args) => {\r\n const [msg, ...rest] = args;\r\n if (trace) {\r\n trace(`[${tag}] ${msg}`, ...rest);\r\n }\r\n };\r\n\r\n const monitorPromise = ({\r\n promise = undefined,\r\n msg = '',\r\n api = '',\r\n } = {}) => {\r\n if (withSignalAsync && promise) {\r\n withSignalAsync(new Promise((resolve) => {\r\n promise.then(() => { // we only record the success case\r\n resolve({\r\n message: `[${tag}] ${msg}`,\r\n api,\r\n });\r\n }).catch(() => { // tag the failed case with failed\r\n resolve({\r\n message: `[${tag}] ${msg}`,\r\n api: `${api}_failed`,\r\n });\r\n });\r\n }));\r\n }\r\n return promise;\r\n };\r\n\r\n return {\r\n pageName,\r\n logTrace,\r\n logError,\r\n traceWithoutParams,\r\n monitorPromise,\r\n };\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { getLogger } from '../../adapters/get-logger';\r\n\r\n// important! do not change the name for each page since they are used in our report\r\nexport const PageNameForLog = {\r\n Landing: 'LandingPage',\r\n Performance: 'PerformancePage',\r\n Images: 'ImagesPage',\r\n DisplayTemplates: 'DisplayTemplatesPage',\r\n Videos: 'VideosPage',\r\n EditVideoPage: 'EditVideosPage',\r\n VideoTemplates: 'VideoTemplatesPage',\r\n BrandKit: 'BrandKitPage',\r\n Library: 'LibraryPage',\r\n CreateDisplayTemplate: 'CreateDisplayTemplatePage',\r\n EditDisplayTemplate: 'EditDisplayTemplatePage',\r\n WebsiteImagePanel: 'WebsiteImagePanel',\r\n StockImagePanel: 'StockImagePanel',\r\n InvestImagePanel: 'InvestImagePanel',\r\n InvestVideoPanel: 'InvestVideoPanel',\r\n AddVideoPanel: 'AddVideoPanel',\r\n SearchResultPage: 'SearchResultPage',\r\n GenerateImagePage: 'GenerateImagePage',\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};\r\n\r\nexport const VersionForLog = {\r\n AdsStudioMVP: 'ads-studio-mvp',\r\n};\r\n\r\nexport function withCustomLogForPage(WrappedComponent, { pageName, tag = 'Ads studio' }) {\r\n const Wrapper = (props) => {\r\n const { activity } = props || {};\r\n const version = VersionForLog.AdsStudioMVP; // todo: get version from permissions\r\n\r\n const logger = useMemo(() => getLogger(activity, pageName, version, tag), [activity, version]);\r\n\r\n return ;\r\n };\r\n\r\n Wrapper.displayName = `withCustomLog(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n}\r\n\r\nexport const getLoggerWithoutPageInfo = (activity, version, tag = 'Ads studio') => getLogger(activity, '', version, tag);\r\n\r\n// need update this function before starting new pilot\r\nexport const getLogVersion = () => VersionForLog.AdsStudioMVP;\r\n","export const AdsStudioAppNameODataHeader = {\r\n key: 'x-ms-applicationname',\r\n value: 'bingadsweb-assetlibrary',\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { useEffect, useMemo, useState, useCallback } from 'react';\r\n\r\nconst PREFERENCE_NAME = 'AdsStudioPreference';\r\n\r\nconst usePerference = ({ preferenceService, getterName, setterName }) => {\r\n const [preferenceValue, setPreferenceValue] = useState(null);\r\n\r\n useEffect(() => {\r\n // wait until preferenceService is initialized\r\n if (preferenceService && _.isFunction(preferenceService[getterName])) {\r\n const pref = preferenceService[getterName](PREFERENCE_NAME);\r\n const curValue = pref && !_.isUndefined(pref.Data) ? pref.Data : null;\r\n setPreferenceValue(curValue || {});\r\n }\r\n }, [getterName, preferenceService]);\r\n\r\n const updatePreference = useCallback((newPreferenceValue) => {\r\n if (preferenceService && _.isFunction(preferenceService[setterName])) {\r\n if (!_.isMatch(preferenceValue, newPreferenceValue)) {\r\n const data = { ...preferenceValue || {}, ...newPreferenceValue };\r\n setPreferenceValue(data);\r\n return preferenceService[setterName]({\r\n Name: PREFERENCE_NAME,\r\n Data: data,\r\n });\r\n }\r\n return Promise.resolve(preferenceValue);\r\n }\r\n return Promise.reject(new Error('preference service is not ready.'));\r\n }, [preferenceService, setterName, preferenceValue]);\r\n\r\n const preferences = useMemo(() => {\r\n if (!preferenceValue) {\r\n return null;\r\n }\r\n\r\n // sort by\r\n const { sortBy } = preferenceValue || {};\r\n const setSortBy = (newSortBy) => {\r\n updatePreference({ sortBy: newSortBy });\r\n };\r\n\r\n // add assets teaching bubble\r\n // show at most 3 times, if users clicked any button, only shown once\r\n let { addFoldersTeachingBubbleAllowedShowCount } = preferenceValue || {};\r\n if (!_.isNumber(addFoldersTeachingBubbleAllowedShowCount)) {\r\n addFoldersTeachingBubbleAllowedShowCount = 3;\r\n }\r\n const hideAddFoldersTeachingBubble = () => {\r\n if (addFoldersTeachingBubbleAllowedShowCount > 0) {\r\n addFoldersTeachingBubbleAllowedShowCount -= 1;\r\n updatePreference({ addFoldersTeachingBubbleAllowedShowCount });\r\n }\r\n };\r\n const dismissAddFoldersTeachingBubble = () => {\r\n updatePreference({ addFoldersTeachingBubbleAllowedShowCount: 0 });\r\n };\r\n\r\n // real user for asset library app\r\n const { realUsedFlagInAdsStudioApp } = preferenceValue || {};\r\n const setRealUsedFlagInAdsStudioApp = () => {\r\n const realUsedFlag = {\r\n haveUsed: true,\r\n timestamp: new Date().getTime(),\r\n };\r\n updatePreference({ realUsedFlagInAdsStudioApp: realUsedFlag });\r\n };\r\n\r\n // real user for asset library picker\r\n const { realUsedFlagInAdsStudioPicker } = preferenceValue || {};\r\n const setRealUsedFlagInAdsStudioPicker = () => {\r\n const realUsedFlag = {\r\n haveUsed: true,\r\n timestamp: new Date().getTime(),\r\n };\r\n updatePreference({ realUsedFlagInAdsStudioPicker: realUsedFlag });\r\n };\r\n\r\n // real user for asset library picker\r\n const { realUsedFlagInAdsStudioAIGCMVPView } = preferenceValue || {};\r\n const setRealUsedFlagInAdsStudioAIGCMVPView = () => {\r\n const realUsedFlag = {\r\n haveUsed: true,\r\n timestamp: new Date().getTime(),\r\n };\r\n updatePreference({ realUsedFlagInAdsStudioAIGCMVPView: realUsedFlag });\r\n };\r\n\r\n // performance table view preferences\r\n const { perfTablePageSize } = preferenceValue || {};\r\n const setPerfTablePageSize = (newValue) => {\r\n updatePreference({ perfTablePageSize: newValue });\r\n };\r\n\r\n const { perfTableSortBy } = preferenceValue || {};\r\n const setPerfTableSortBy = (newValue) => {\r\n updatePreference({ perfTableSortBy: newValue });\r\n };\r\n\r\n // left navigation collapsed/expanded\r\n const { pageMenuMode } = preferenceValue || {};\r\n const setPageMenuMode = (newValue) => {\r\n updatePreference({ pageMenuMode: newValue });\r\n };\r\n\r\n return ({\r\n sortBy,\r\n setSortBy,\r\n // add folder teaching bubble\r\n addFoldersTeachingBubbleAllowedShowCount,\r\n dismissAddFoldersTeachingBubble,\r\n hideAddFoldersTeachingBubble,\r\n // real user for asset library\r\n realUsedFlagInAdsStudioApp,\r\n setRealUsedFlagInAdsStudioApp,\r\n realUsedFlagInAdsStudioPicker,\r\n setRealUsedFlagInAdsStudioPicker,\r\n realUsedFlagInAdsStudioAIGCMVPView,\r\n setRealUsedFlagInAdsStudioAIGCMVPView,\r\n perfTablePageSize,\r\n setPerfTablePageSize,\r\n perfTableSortBy,\r\n setPerfTableSortBy,\r\n pageMenuMode,\r\n setPageMenuMode,\r\n });\r\n }, [preferenceValue, updatePreference]);\r\n\r\n return preferences;\r\n};\r\n\r\nexport const useAdsStudioAccountPreference = ({ preferenceService }) => usePerference({\r\n preferenceService,\r\n getterName: 'findByNameAtAccountLevel',\r\n setterName: 'setAtAccountLevel',\r\n});\r\n\r\nexport const useAdsStudioUserPreference = ({ preferenceService }) => usePerference({\r\n preferenceService,\r\n getterName: 'findByNameAtUserLevel',\r\n setterName: 'setAtUserLevel',\r\n});\r\n\r\nexport const useAdsStudioPreference = ({ preferenceService }) => {\r\n const userPreference = useAdsStudioUserPreference({ preferenceService });\r\n const accountPreference = useAdsStudioAccountPreference({ preferenceService });\r\n return {\r\n user: userPreference,\r\n account: accountPreference,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { getDateRangeParams, createFolderFilterQuery } from '../service-utils';\r\n\r\nexport const createFolderExpandQuery = ({\r\n includeAssets,\r\n includeSubfolders,\r\n includeParentHierarchy,\r\n}) => {\r\n const expandItems = [];\r\n const expandItemsInSubfolders = [];\r\n\r\n if (includeAssets) {\r\n expandItems.push('Assets');\r\n expandItemsInSubfolders.push('Assets');\r\n }\r\n\r\n if (includeParentHierarchy) {\r\n expandItems.push('ParentHierarchy');\r\n expandItemsInSubfolders.push('ParentHierarchy');\r\n }\r\n\r\n if (includeSubfolders) {\r\n expandItems.push(`SubFolders${expandItemsInSubfolders.length > 0 ? `($expand=${expandItemsInSubfolders.join(',')})` : ''}`);\r\n }\r\n\r\n const expandQuery = expandItems.length > 0 ? `$expand=${expandItems.join(',')}` : '';\r\n\r\n return expandQuery;\r\n};\r\n\r\nconst createDateRangeQuery = ({\r\n startDate, endDate, comparisonStartDate, comparisonEndDate,\r\n}) => {\r\n if (startDate && endDate) {\r\n const startDateParam = `startDate=${startDate}`;\r\n const endDateParam = `endDate=${endDate}`;\r\n const comparisonStartDateParam = `comparisonStartDate=${comparisonStartDate || null}`;\r\n const comparisonEndDateParam = `comparisonEndDate=${comparisonEndDate || null}`;\r\n return [startDateParam, endDateParam, comparisonStartDateParam, comparisonEndDateParam];\r\n }\r\n return [];\r\n};\r\n\r\nexport const createFolderQuery = ({\r\n filterArgs,\r\n expandArgs,\r\n sortBy,\r\n sortDirection,\r\n assetsToLoadForSubfolders,\r\n isGlobalSearch = false,\r\n isAssetPickerScenario = false,\r\n folderId, // used for TimeSeries API, not for GetFolder API\r\n isSemanticSearch = false,\r\n isRecentSorting = false,\r\n}) => {\r\n let sortQuery = sortBy ? `$orderby=${sortBy}` : '';\r\n if (sortQuery && sortDirection) {\r\n sortQuery += ` ${sortDirection}`;\r\n }\r\n\r\n const filterQuery = createFolderFilterQuery({ ...filterArgs, folderId });\r\n\r\n const selectQuery = '$select=Id,ParentFolderId,Name,ItemsCount';\r\n\r\n const expandQuery = createFolderExpandQuery(expandArgs);\r\n\r\n let assetSubfolderQuery = '';\r\n if (assetsToLoadForSubfolders) {\r\n assetSubfolderQuery = `maxsubfolderassetscount=${assetsToLoadForSubfolders}`;\r\n }\r\n\r\n let globalSearchQuery = '';\r\n if (isGlobalSearch) {\r\n globalSearchQuery = 'isglobalsearch=true';\r\n }\r\n\r\n let assetPickerQuery = '';\r\n if (isAssetPickerScenario) {\r\n assetPickerQuery = 'isassetpickerscenario=true';\r\n }\r\n\r\n let semanticSearchQuery = '';\r\n if (isSemanticSearch) {\r\n semanticSearchQuery = 'issemanticsearch=true';\r\n }\r\n\r\n let recentSortingQuery = '';\r\n if (isRecentSorting) {\r\n recentSortingQuery = 'isrecentsorting=true';\r\n }\r\n\r\n const params = _.compact([sortQuery, filterQuery, selectQuery, expandQuery, assetSubfolderQuery, globalSearchQuery, assetPickerQuery, semanticSearchQuery, recentSortingQuery]);\r\n\r\n return params.join('&');\r\n};\r\n\r\nexport const getFolderODataService = ({\r\n odata, legacyOdata, oDataConfig, aid, cid, i18n, dateFormat,\r\n}) => {\r\n const getRequestUrl = ({ folderId, funcPath, query } = {}) => {\r\n let resourceRootUrl = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Folders`;\r\n\r\n if (folderId) {\r\n resourceRootUrl += `(${folderId})`;\r\n }\r\n\r\n if (funcPath) {\r\n resourceRootUrl += `/${funcPath}`;\r\n }\r\n\r\n return query ? `${resourceRootUrl}?${query}` : resourceRootUrl;\r\n };\r\n\r\n const getFolderData = ({\r\n skip,\r\n count,\r\n folderId,\r\n expandArgs,\r\n filterArgs,\r\n sortBy,\r\n sortDirection,\r\n assetsToLoadForSubfolders,\r\n isGlobalSearch = false,\r\n isAssetPickerScenario = false,\r\n isSemanticSearch = false,\r\n isRecentSorting = false,\r\n }) => {\r\n const folderQuery = createFolderQuery({\r\n filterArgs,\r\n expandArgs,\r\n sortBy,\r\n sortDirection,\r\n assetsToLoadForSubfolders,\r\n isGlobalSearch,\r\n isAssetPickerScenario,\r\n isSemanticSearch,\r\n isRecentSorting,\r\n });\r\n\r\n const url = getRequestUrl({\r\n folderId,\r\n funcPath: folderId ? '' : 'Default.GetRootFolder',\r\n query: folderQuery,\r\n });\r\n\r\n return odata.get(url, _.extend({\r\n data: {\r\n $top: count,\r\n $skip: skip,\r\n count: true,\r\n },\r\n }, oDataConfig));\r\n };\r\n\r\n const getFolderDataWithBIData = ({\r\n perfMetricDateRange,\r\n skip,\r\n count,\r\n folderId,\r\n expandArgs,\r\n filterArgs,\r\n sortBy,\r\n sortDirection,\r\n assetsToLoadForSubfolders,\r\n isGlobalSearch = false,\r\n isAssetPickerScenario = false,\r\n isSemanticSearch = false,\r\n isRecentSorting = false,\r\n }) => {\r\n const folderQuery = createFolderQuery({\r\n filterArgs,\r\n expandArgs,\r\n sortBy,\r\n sortDirection,\r\n assetsToLoadForSubfolders,\r\n isGlobalSearch,\r\n isAssetPickerScenario,\r\n isSemanticSearch,\r\n isRecentSorting,\r\n });\r\n\r\n const url = getRequestUrl({\r\n folderId,\r\n funcPath: folderId ? 'Default.GetFolderWithBIData' : 'Default.GetRootFolderWithBIData',\r\n query: folderQuery,\r\n });\r\n\r\n const {\r\n startDate, endDate, comparisonStartDate, comparisonEndDate,\r\n } = getDateRangeParams(i18n, perfMetricDateRange, dateFormat, perfMetricDateRange && perfMetricDateRange.Rangelcid);\r\n // compose request body\r\n // const { Granularity, Metrics, MovingAverage } = perfTimeSeriesParams || {};\r\n const requestBody = {\r\n gridDataParameters: {\r\n DateRange: { StartDate: startDate || null, EndDate: endDate || null },\r\n ComparisonDateRange: comparisonStartDate ? { StartDate: comparisonStartDate, EndDate: comparisonEndDate } : undefined,\r\n CurrentCustomerId: cid,\r\n },\r\n // performanceTimeSeriesParameters: {\r\n // Granularity, // 'Hour',\r\n // Metrics, // \"Impressions,Clicks\",\r\n // MovingAverage, // true\r\n // },\r\n };\r\n\r\n return odata.post(url, _.extend({\r\n data: requestBody,\r\n urlParameters: {\r\n $top: count,\r\n $skip: skip,\r\n count: true,\r\n },\r\n }, oDataConfig));\r\n };\r\n\r\n const getPerfTimeSeriesData = ({\r\n perfMetricDateRange,\r\n perfTimeSeriesParams,\r\n folderId,\r\n filterArgs,\r\n isGlobalSearch = false,\r\n }) => {\r\n const {\r\n granularity, metric: metrics, isMovingAverageOn: movingAverage,\r\n } = perfTimeSeriesParams || {};\r\n const funcParams = [\r\n ...createDateRangeQuery(getDateRangeParams(i18n, perfMetricDateRange, dateFormat, perfMetricDateRange && perfMetricDateRange.Rangelcid)),\r\n `granularity=Enum.Granularity'${granularity}'`,\r\n `metrics='${metrics}'`,\r\n `movingAverage=${movingAverage || false}`,\r\n ].join(',');\r\n\r\n // no filter id means global search\r\n let filterQuery = createFolderFilterQuery(isGlobalSearch ? filterArgs : { ...filterArgs, folderId });\r\n if (filterQuery) {\r\n filterQuery = `?${filterQuery}`;\r\n }\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Images/Default.PerformanceTimeSeries(${funcParams})${filterQuery}`;\r\n\r\n return odata.get(url, _.extend({\r\n data: {\r\n $top: 20, // top is required in the API call\r\n count: true,\r\n },\r\n }, oDataConfig));\r\n };\r\n\r\n const createFolder = ({ folderName, parentFolderId, folderType }) => {\r\n const url = getRequestUrl();\r\n const requestBody = {\r\n Name: folderName,\r\n ParentFolderId: parentFolderId,\r\n FolderType: folderType,\r\n };\r\n\r\n return odata.post(url, _.extend({ data: requestBody }, oDataConfig))\r\n .then(res => res.value);\r\n };\r\n\r\n const renameFolder = ({ folderId, newFolderName }) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Folders(${folderId})`;\r\n const requestBody = {\r\n Name: newFolderName,\r\n Id: folderId,\r\n };\r\n return odata.patch(url, _.extend({ data: requestBody }, oDataConfig))\r\n .then(res => res && res.value);\r\n };\r\n\r\n const deleteFolder = ({ folderId }) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Folders(${folderId})`;\r\n return odata.delete(url, _.extend({}, oDataConfig))\r\n .then(res => res && res.value);\r\n };\r\n\r\n const batchMove = ({\r\n destFolderId, assets, folders,\r\n }) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Folders/Default.PutResources`;\r\n const requestBody = {\r\n DestFolderId: destFolderId || null,\r\n Assets: assets,\r\n FolderIds: folders,\r\n };\r\n const dataJson = JSON.stringifyWithBigInt(requestBody);\r\n return odata.post(url, _.extend({ data: dataJson }, oDataConfig));\r\n };\r\n\r\n const addAssets = ({\r\n folderId,\r\n asset,\r\n inProgress = null,\r\n supportUpscale,\r\n }) => {\r\n const url = getRequestUrl({ funcPath: 'Default.AddAsset' });\r\n const requestBody = {\r\n FolderId: folderId,\r\n Asset: asset,\r\n SupportUpscale: supportUpscale,\r\n };\r\n\r\n return odata.post(url, _.extend({ data: requestBody, progress: inProgress }, oDataConfig))\r\n .then(res => res.value);\r\n };\r\n\r\n const deleteAsset = (asset) => {\r\n const url = getRequestUrl({ funcPath: 'Default.DeleteAsset' });\r\n const dataJson = JSON.stringifyWithBigInt(asset);\r\n return odata.post(url, _.extend({ data: dataJson }, oDataConfig))\r\n .then(res => res.value);\r\n };\r\n\r\n const bulkDeleteAssets = (assets) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Default.BulkUpsert`;\r\n const csvHeader = 'Type,Name,Id,Parent Id,Status';\r\n const csvForamt = 'Format Version,6,,,';\r\n const csvRows = _.map(assets, ({ assetId, folderAssetType }) => `${folderAssetType},,${assetId},${aid},Deleted`);\r\n return odata.post(url, _.extend({\r\n data: {\r\n CsvRows: [\r\n csvHeader, csvForamt, ...csvRows,\r\n ],\r\n },\r\n }, oDataConfig)).then((res) => {\r\n if (_.isEmpty(res)) {\r\n return [];\r\n }\r\n // skip header and format rows, and only keep error rows\r\n const errors = _.chain(res.slice(2))\r\n .filter(([type]) => type.indexOf('Error') >= 0)\r\n // eslint-disable-next-line no-unused-vars\r\n .map(([type, colStatus, Id, colAID, colName, ErrorCode, ErrorNumber]) => ({ Id, Code: ErrorCode, ErrorNumber }))\r\n .value();\r\n return errors;\r\n });\r\n };\r\n\r\n const updateAsset = (asset) => {\r\n const url = getRequestUrl({ funcPath: 'Default.UpdateAsset' });\r\n const dataJson = JSON.stringifyWithBigInt(asset);\r\n return odata.post(url, _.extend({ data: dataJson }, oDataConfig))\r\n .then(res => res.value);\r\n };\r\n\r\n // fileExtension: e.g. .mp4\r\n const getBlobUploadUrl = ({ fileExtension }) => {\r\n const url = getRequestUrl({ funcPath: `Default.GetVideoUploadUrl(fileExtension='${fileExtension}')` });\r\n\r\n return odata.get(url, oDataConfig);\r\n };\r\n\r\n const getVideo = ({ id }) => {\r\n const baseURL = `${oDataConfig.odataPath}/Customers(${cid})/Accounts(${aid})`;\r\n return odata.get(`${baseURL}/Videos/${id}`, oDataConfig);\r\n };\r\n\r\n const getVideosByIdsAsync = (videoTasks) => {\r\n const reqs = _.map(videoTasks, (id) => {\r\n const baseURL = `/Customers(${cid})/Accounts(${aid})`;\r\n return {\r\n type: 'GET',\r\n url: `${baseURL}/Videos/${id}`,\r\n };\r\n });\r\n // use batch function of legacyOdata instead of odata to avoid some hard code\r\n return legacyOdata.batch({\r\n reqs,\r\n needContentType: true,\r\n }).then(response => response.map(item => item.data));\r\n };\r\n\r\n return {\r\n getFolderData,\r\n getFolderDataWithBIData,\r\n getPerfTimeSeriesData,\r\n createFolder,\r\n renameFolder,\r\n deleteFolder,\r\n addAssets,\r\n deleteAsset,\r\n bulkDeleteAssets,\r\n updateAsset,\r\n getBlobUploadUrl,\r\n batchMove,\r\n getVideosByIdsAsync,\r\n getVideo,\r\n };\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const getImageBulkEditODataService = ({\r\n odata, oDataConfig, aid, cid, // logger,\r\n}) => {\r\n //\r\n const getImageCroppingTaskStatus = (imageId) => {\r\n let url;\r\n if (imageId) {\r\n url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Images(${imageId})/Default.ImageCroppingTaskStatus`;\r\n } else {\r\n url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Images/Default.ImageCroppingTaskStatus`;\r\n }\r\n return odata.get(url, oDataConfig);\r\n };\r\n\r\n // crop an image and related placements\r\n const cropImage = ({ imageId, cropSettings = null, placementSettings = [] }) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Images(${imageId})/Default.Crop`;\r\n\r\n const cropData = {\r\n CropSettingOnOriginal: cropSettings,\r\n PlacementSettings: placementSettings,\r\n };\r\n\r\n const requestBody = _.extend({\r\n data: cropData,\r\n }, oDataConfig);\r\n\r\n return odata.post(url, requestBody);\r\n };\r\n\r\n const generateImageWithSmartEffect = ({ options }) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Default.MediaGeneration`;\r\n const requestBody = _.extend({\r\n data: options,\r\n }, oDataConfig);\r\n\r\n return odata.post(url, requestBody);\r\n };\r\n\r\n return {\r\n getImageCroppingTaskStatus,\r\n cropImage,\r\n generateImageWithSmartEffect,\r\n };\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const getAIGCODataService = ({\r\n odata, oDataConfig, aid, cid,\r\n}) => {\r\n const generateImagesWithAIAsync = (userPrompt, skipBrandDetection = true) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Images/Default.GenerateImagesWithAI`;\r\n const requestBody = {\r\n UserPrompt: userPrompt,\r\n SkipBrandDetection: skipBrandDetection,\r\n };\r\n return odata.post(url, _.extend({ data: requestBody }, oDataConfig));\r\n };\r\n\r\n const getAIGeneratedImageTaskStatus = (taskId) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Images/Default.AIGenerateImagesTaskStatus(TaskId='${taskId}')`;\r\n return odata.get(url, oDataConfig);\r\n };\r\n\r\n return {\r\n generateImagesWithAIAsync,\r\n getAIGeneratedImageTaskStatus,\r\n };\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\n\r\nexport const getVideoODataService = ({\r\n odata, oDataConfig, aid, cid,\r\n}) => {\r\n const addVideoCreative = ({ videoCreative }) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Videos/Default.CreateVideo`;\r\n\r\n const requestBody = {\r\n videoUrl: videoCreative.url,\r\n description: '',\r\n metadata: stringifySync(videoCreative),\r\n };\r\n\r\n return odata.post(url, _.extend({ data: requestBody }, oDataConfig));\r\n };\r\n\r\n const getVideo = ({ id, fetchMetadata = false }) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Videos(${id})?fetchMetadata=${fetchMetadata}`;\r\n\r\n return odata.get(url, oDataConfig);\r\n };\r\n\r\n return {\r\n addVideoCreative,\r\n getVideo,\r\n };\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const getBackgroundChangeODataService = ({\r\n odata, oDataConfig, aid, cid,\r\n}) => {\r\n const removeImageBackground = (imageUrl) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Images/Default.RemoveBackground`;\r\n const requestBody = {\r\n Url: imageUrl,\r\n };\r\n return odata.post(url, _.extend({ data: requestBody }, oDataConfig));\r\n };\r\n\r\n const getImageSegmentations = (imageUrl) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Images/Default.GetImageSegmentation`;\r\n const requestBody = {\r\n ImageUrl: imageUrl,\r\n };\r\n return odata.post(url, _.extend({ data: requestBody }, oDataConfig));\r\n };\r\n\r\n const generateImageBackground = ({\r\n prompt,\r\n // it could be original image url, in such case, the selectedMasks contains the mask ids user selected\r\n // if it's the url returned from 'removeImageBackground', the selectedMasks should be null\r\n imageUrl,\r\n // array of mask ids, if it's empty [], it means no mask is selected\r\n // if it's null, it means no masks are applied\r\n maskSetsBase64,\r\n selectedMasks,\r\n outputImageWidth,\r\n outputImageHeight,\r\n }) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})/Images/Default.GenerateImageBackground`;\r\n const requestBody = {\r\n ImageUrl: imageUrl,\r\n Prompt: prompt,\r\n MaskSets: maskSetsBase64,\r\n SelectedMasks: selectedMasks,\r\n Width: outputImageWidth,\r\n Height: outputImageHeight,\r\n };\r\n return odata.post(url, _.extend({ data: requestBody }, oDataConfig));\r\n };\r\n\r\n return {\r\n removeImageBackground,\r\n getImageSegmentations,\r\n generateImageBackground,\r\n };\r\n};\r\n\r\n","import { parseSync } from '@bingads-webui/safe-json';\r\nimport { parseMTDateString } from '../../service-utils';\r\n\r\n// perf related fields\r\nconst transformPerfMetricsResponse = (img, i18n) => {\r\n const res = {\r\n usedByCount: img.UsedByCount,\r\n };\r\n\r\n if (i18n.formatDecimal && i18n.formatDecimalToFixed && i18n.formatPercentToFixed) {\r\n // # performance rating\r\n const performanceRating = img.PerformanceRating || {};\r\n res.performanceLabel = '-';\r\n if (performanceRating.Rating === 'Best' || performanceRating.Rating === 'Good' || performanceRating.Rating === 'Low') {\r\n res.performanceLabel = performanceRating.Rating;\r\n }\r\n res.performanceLabelBestPercentage = i18n.formatPercentToFixed((performanceRating.PerformanceLabelBestPercentage || 0) / 100, { digits: 2 });\r\n res.performanceLabelGoodPercentage = i18n.formatPercentToFixed((performanceRating.PerformanceLabelGoodPercentage || 0) / 100, { digits: 2 });\r\n res.performanceLabelLowPercentage = i18n.formatPercentToFixed((performanceRating.PerformanceLabelLowPercentage || 0) / 100, { digits: 2 });\r\n res.performanceLabelLearningPercentage = i18n.formatPercentToFixed((performanceRating.PerformanceLabelLearningPercentage || 0) / 100, { digits: 2 });\r\n res.performanceLabelUnratedPercentage = i18n.formatPercentToFixed((performanceRating.PerformanceLabelUnratedPercentage || 0) / 100, { digits: 2 });\r\n\r\n // # performanceMetrics\r\n const performanceMetrics = img.PerformanceMetrics || {};\r\n res.impressions = i18n.formatDecimal(performanceMetrics.Impressions || 0);\r\n res.clicks = i18n.formatDecimal(performanceMetrics.Clicks || 0);\r\n res.CTR = i18n.formatPercentToFixed((performanceMetrics.CTR || 0) / 100, { digits: 2 });\r\n res.spend = i18n.formatDecimalToFixed(performanceMetrics.Spend || 0);\r\n\r\n // # periodPerformanceMetrics\r\n const periodPerformanceMetrics = img.PeriodPerformanceMetrics || {};\r\n res.periodImpressions = i18n.formatDecimal(periodPerformanceMetrics.Impressions || 0);\r\n res.periodClicks = i18n.formatDecimal(periodPerformanceMetrics.Clicks || 0);\r\n res.periodCTR = i18n.formatPercentToFixed((periodPerformanceMetrics.CTR || 0) / 100, { digits: 2 });\r\n res.periodSpend = i18n.formatDecimalToFixed(periodPerformanceMetrics.Spend || 0);\r\n\r\n // # performanceMetricsChange\r\n const performanceMetricsChange = img.PerformanceMetricsChange || {};\r\n res.impressionsChange = i18n.formatDecimal(performanceMetricsChange.Impressions || 0);\r\n res.clicksChange = i18n.formatDecimal(performanceMetricsChange.Clicks || 0);\r\n res.CTRChange = i18n.formatPercentToFixed((performanceMetricsChange.CTR || 0) / 100, { digits: 2 });\r\n res.spendChange = i18n.formatDecimalToFixed(performanceMetricsChange.Spend || 0);\r\n\r\n // # performanceMetricsChangePercentage\r\n const performanceMetricsChangePercentage = img.PerformanceMetricsChangePercentage || {};\r\n res.impressionsChangePercentage = i18n.formatPercentToFixed((performanceMetricsChangePercentage.Impressions || 0) / 100, { digits: 2 });\r\n res.clicksChangePercentage = i18n.formatPercentToFixed((performanceMetricsChangePercentage.Clicks || 0) / 100, { digits: 2 });\r\n res.CTRChangePercentage = i18n.formatPercentToFixed((performanceMetricsChangePercentage.CTR || 0) / 100, { digits: 2 });\r\n res.spendChangePercentage = i18n.formatPercentToFixed((performanceMetricsChangePercentage.Spend || 0) / 100, { digits: 2 });\r\n }\r\n\r\n return res;\r\n};\r\n\r\nexport const transformImageResponse = (img, i18n) => {\r\n const asset = {\r\n folderAssetType: img.FolderAssetType,\r\n\r\n id: img.IdString,\r\n name: img.Text,\r\n url: img.Url,\r\n width: img.Width,\r\n height: img.Height,\r\n createdTime: parseMTDateString(i18n, img.UploadedTime),\r\n modifiedTime: parseMTDateString(i18n, img.ModifiedTime),\r\n originalHeight: img.OriginalHeight,\r\n originalWidth: img.OriginalWidth,\r\n originalUrl: img.OriginalUrl,\r\n\r\n cropSettings: img.CropSettings,\r\n cropSettingOnOriginal: img.CropSettingOnOriginal,\r\n placementSettings: img.PlacementSettings,\r\n\r\n type: img.Type,\r\n sourceType: img.SourceType,\r\n metadata: parseSync((img.Metadata || '').replaceAll(encodeURIComponent(','), ',')),\r\n baseId: img.BaseIdString,\r\n roiInfo: img.ROIInfo,\r\n };\r\n\r\n const metrics = transformPerfMetricsResponse(img, i18n);\r\n\r\n const isSceneKeyFrame = asset.metadata && asset.metadata.keyFrame;\r\n\r\n return { ...asset, ...metrics, isSceneKeyFrame };\r\n};\r\n","\r\nimport {\r\n CSMLSortBy,\r\n CSMLImportSource,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\nimport { Promise } from 'bluebird';\r\nimport _ from 'underscore';\r\n\r\nimport { formatCivilDate, removeNullUndefined } from '../service-utils';\r\nimport { transformImageResponse } from './asset-response-transformers/image-response-transformer';\r\n\r\nconst MAX_TIMEOUT = 5 * 60 * 1000; // set timeout to be 5 minutes\r\nconst POLL_INTERVAL = 1000; // set to 1000ms for now\r\nconst MediaRepositoryTimeoutError = 'MediaRepositoryTimeoutError';\r\n\r\nexport const getRepository = ({\r\n imageBulkEditODataService,\r\n imageODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n}) => {\r\n const getImages = ({\r\n searchTerm,\r\n minWidth,\r\n minHeight,\r\n dateAddedStart,\r\n dateAddedEnd,\r\n importSource,\r\n sortBy,\r\n skip,\r\n count,\r\n }) => {\r\n //\r\n const args = {\r\n searchTerm: encodeURIComponent(searchTerm),\r\n minWidth,\r\n minHeight,\r\n dateAddedStart: dateAddedStart && formatCivilDate(i18n, dateAddedStart, ianaTimeZone, timezoneUTCOffset, '00:00:00'),\r\n dateAddedEnd: dateAddedEnd && formatCivilDate(i18n, dateAddedEnd, ianaTimeZone, timezoneUTCOffset, '23:59:59'),\r\n skip,\r\n count,\r\n };\r\n\r\n if (importSource === CSMLImportSource.Google) {\r\n args.sourceType = 'GoogleImported';\r\n } else if (importSource === CSMLImportSource.Facebook) {\r\n args.sourceType = 'FacebookImported';\r\n }\r\n\r\n if (sortBy === CSMLSortBy.ImageName) {\r\n args.sortBy = 'Text';\r\n args.sortDirection = 'asc';\r\n } else if (sortBy === CSMLSortBy.MostRecent) {\r\n args.sortBy = 'ModifiedTime';\r\n args.sortDirection = 'desc';\r\n }\r\n return imageODataService.getImages(args).then((res) => {\r\n const totalCount = res['@odata.count'] || 0;\r\n const images = (res.value || []).map(img => transformImageResponse(img, i18n));\r\n\r\n return { images, totalCount };\r\n });\r\n };\r\n\r\n const getImage = (imageId, isImageFittingEnabled) =>\r\n imageODataService.getImageByIdAsync(imageId, isImageFittingEnabled).then(res => transformImageResponse(res, i18n));\r\n\r\n const getImageCroppingTaskStatus = (imageId) => {\r\n const promise = imageBulkEditODataService.getImageCroppingTaskStatus(imageId).then((res) => {\r\n const totalCount = res['@odata.count'] || 0;\r\n const tasks = (res.value || []).map(tsk => ({\r\n id: `${tsk.AssetId}`,\r\n name: tsk.ImageText,\r\n url: tsk.ImageUrl,\r\n createdTime: tsk.CreatedTime,\r\n modifiedTime: tsk.ModifiedTime,\r\n stage: tsk.Stage,\r\n hasError: tsk.HasError,\r\n failureMessage: tsk.Checkpoint && tsk.Checkpoint.FailureMessage,\r\n percentComplete: tsk.Checkpoint && tsk.Checkpoint.PercentComplete,\r\n imageCroppingTaskStatusId: tsk.ImageCroppingTaskStatusId,\r\n isFinished: tsk.Stage === 'Completed' || tsk.Stage === 'CompletedWithErrors' || tsk.Stage === 'Failed',\r\n }));\r\n return { tasks, totalCount };\r\n });\r\n return promise;\r\n };\r\n\r\n const updateImageData = ({ imageId, imageData, type }) => {\r\n const promise = imageODataService.updateImageAsync({\r\n Id: imageId,\r\n Data: imageData,\r\n Type: type,\r\n });\r\n return promise;\r\n };\r\n\r\n const renameImage = ({ imageId, name }) => {\r\n const promise = imageODataService.updateImageAsync({ Id: imageId, Text: name });\r\n return promise;\r\n };\r\n\r\n const deleteImage = (imageId) => {\r\n const promise = imageODataService.deleteImageAsync({ IdString: `${imageId}` });\r\n return promise;\r\n };\r\n\r\n const cropImage = ({ imageId, cropSettings, placementSettings }) => {\r\n const promise = imageBulkEditODataService.cropImage({ imageId, cropSettings, placementSettings })\r\n .then(res => res.value);\r\n return promise;\r\n };\r\n\r\n const uploadImagesByUrl = ({ imageUrls }) => {\r\n const promise = imageODataService.bulkSaveImagesByUrl(imageUrls);\r\n return promise;\r\n };\r\n\r\n const uploadImage = ({\r\n imageData,\r\n activityLogger = null,\r\n updateCurrentProgress = null,\r\n imageOption = 'Image',\r\n name = '',\r\n }) => {\r\n const isLogo = imageOption === 'Logo';\r\n\r\n const promise = imageODataService.uploadImageAsync(imageData, activityLogger, updateCurrentProgress, isLogo, name);\r\n return promise;\r\n };\r\n\r\n const addCreative = ({ creativeData, baseId }) => {\r\n const serialized = stringifySync(removeNullUndefined(creativeData));\r\n // todo: save original image and save original image url inside metadata\r\n const args = [{\r\n url: creativeData.url,\r\n metadata: serialized.replace(/,/g, encodeURIComponent(',')),\r\n baseId,\r\n }];\r\n const promise = imageODataService.bulkSaveImagesByUrl(args);\r\n return promise;\r\n };\r\n\r\n const saveImageWithBaseId = ({ image, baseId, folderId }) => {\r\n const { url, metaData } = image;\r\n const serialized = stringifySync(removeNullUndefined(metaData));\r\n const args = [{\r\n url,\r\n metadata: serialized.replace(/,/g, encodeURIComponent(',')),\r\n baseId,\r\n folderId,\r\n }];\r\n const promise = imageODataService.bulkSaveImagesByUrl(args);\r\n return promise;\r\n };\r\n\r\n const createGenerateRequestWithPolling = ({ effectOptions }) => {\r\n const timerIds = {};\r\n const resetTimers = () => {\r\n if (timerIds.intervalId) {\r\n clearInterval(timerIds.intervalId);\r\n }\r\n if (timerIds.timeoutId) {\r\n clearTimeout(timerIds.timeoutId);\r\n }\r\n };\r\n\r\n return imageBulkEditODataService.generateImageWithSmartEffect({ options: effectOptions }).then((response = {}) => {\r\n if (!response.wip) {\r\n return response.Assets;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n timerIds.intervalId = setInterval(() => {\r\n imageBulkEditODataService.generateImageWithSmartEffect({ options: { JobId: response.JobId } })\r\n .then((newResponse = {}) => {\r\n if (!newResponse.wip) {\r\n resetTimers();\r\n resolve(newResponse.Assets);\r\n }\r\n }).catch((error) => {\r\n resetTimers();\r\n reject(error);\r\n });\r\n }, POLL_INTERVAL);\r\n\r\n timerIds.timeoutId = setTimeout(() => {\r\n resetTimers();\r\n reject(new Error(MediaRepositoryTimeoutError));\r\n }, MAX_TIMEOUT);\r\n });\r\n });\r\n };\r\n\r\n const generateImageWithSmartEffect = ({ imageUrl, smartEffects }) => {\r\n const effectOptions = {\r\n Image: {\r\n BaseImageUrl: imageUrl,\r\n Filters: _.map(smartEffects, ({ smartEffectName, smartEffectOptions }) => ({\r\n Name: smartEffectName,\r\n Param: smartEffectOptions,\r\n })),\r\n },\r\n Output: {\r\n MediaType: 'image',\r\n Image: {\r\n Type: 'jpg',\r\n },\r\n },\r\n };\r\n return createGenerateRequestWithPolling({ effectOptions });\r\n };\r\n\r\n const imageFit = ({ imageUrl, placements, skipOutpainting }) => {\r\n const ret = imageODataService.imageFit({ imageUrl, placements, skipOutpainting });\r\n return ret;\r\n };\r\n\r\n return {\r\n getImages,\r\n getImage,\r\n getImageCroppingTaskStatus,\r\n updateImageData,\r\n renameImage,\r\n deleteImage,\r\n cropImage,\r\n uploadImagesByUrl,\r\n uploadImage,\r\n addCreative,\r\n generateImageWithSmartEffect,\r\n saveImageWithBaseId,\r\n imageFit,\r\n };\r\n};\r\n","import { parseMTDateString } from '../../service-utils';\r\n\r\nexport const getVideoPlaySrc = (serializedResolutions) => {\r\n if (serializedResolutions) {\r\n const resolutionConfig = JSON.parse(serializedResolutions);\r\n const resolutions = Object.keys(resolutionConfig).map(h => parseInt(h, 10));\r\n const largestResolution = Math.max(...resolutions);\r\n\r\n return resolutionConfig[largestResolution];\r\n }\r\n\r\n return null;\r\n};\r\n\r\n// for now, we don't support play stream URL yet, so here use DownloadUrl instead of Url.\r\nexport const transformVideoResponse = (video, i18n) => ({\r\n folderAssetType: video.FolderAssetType,\r\n\r\n id: video.IdString,\r\n createdTime: parseMTDateString(i18n, video.UploadedTime),\r\n modifiedTime: parseMTDateString(i18n, video.ModifiedTime),\r\n name: video.Description,\r\n thumbnailUrl: video.ThumbnailUrl,\r\n url: getVideoPlaySrc(video.DownloadUrl),\r\n width: video.Width,\r\n height: video.Height,\r\n durationInMS: video.DurationInMS,\r\n status: video.Status,\r\n metaData: video.Metadata,\r\n fileSize: video.SourceVideoLength,\r\n quality: video.Quality,\r\n});\r\n","import {\r\n FolderAssetType,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { transformImageResponse } from './image-response-transformer';\r\nimport { transformVideoResponse } from './video-response-transformer';\r\n\r\nexport const getAssetTransformer = (folderAssetType) => {\r\n if (folderAssetType === FolderAssetType.Video) {\r\n return transformVideoResponse;\r\n }\r\n\r\n if (folderAssetType === FolderAssetType.Image) {\r\n return transformImageResponse;\r\n }\r\n\r\n if (folderAssetType) {\r\n throw new Error(`No transfomers configed for FolderAssetType - ${folderAssetType}`);\r\n }\r\n\r\n return transformImageResponse;\r\n};\r\n\r\nexport const transformAssetResponse = (asset, folderAssetType, i18n) => {\r\n const transformerFunc = getAssetTransformer(folderAssetType);\r\n\r\n return transformerFunc(asset, i18n);\r\n};\r\n\r\nexport * from './video-response-transformer';\r\n","import _ from 'underscore';\r\nimport { FolderAssetType } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nJSON.stringifyWithBigInt = (data) => {\r\n // add markers to BigInt values in the string\r\n let str = JSON.stringify(data, (key, value) => (typeof value === 'bigint' ? `BIGINT<<${value}>>TNIGIB` : value));\r\n // serialize a BigInt as number instead of string\r\n str = str.replace(/\"BIGINT<<[0-9]+>>TNIGIB\"/g, s => s.slice(9, -9));\r\n return str;\r\n};\r\n\r\nexport const oDataTypeConfig = {\r\n [FolderAssetType.Image]: '#Model.Image',\r\n [FolderAssetType.Video]: '#Model.Video',\r\n};\r\n\r\nexport const namePropertyConfig = {\r\n [FolderAssetType.Image]: 'Text',\r\n [FolderAssetType.Video]: 'Description',\r\n};\r\n\r\n// UI is using IdString internally\r\n// When passing to MT, need to convert to int type\r\n// Theoretically there should not be overflow issue, but here we still do a guard.\r\n// If overflow happens, pass a string so MT will fail and then will be caught\r\nexport const transformAssetId = (value) => {\r\n if (_.isNumber(value)) {\r\n return value;\r\n }\r\n\r\n const pattern = /^[0-9]+$/g;\r\n const SAFE_INTEGER = Number.MAX_SAFE_INTEGER;\r\n if (value.match(pattern)) {\r\n const intValue = parseInt(value, 10);\r\n if (intValue.toString() === value && intValue <= SAFE_INTEGER) {\r\n return intValue;\r\n }\r\n\r\n // use BigInt if the value is bigger than SAFE_INTEGER\r\n // eslint-disable-next-line no-undef\r\n const bigIntValue = BigInt(value);\r\n if (bigIntValue.toString() === value) {\r\n return bigIntValue;\r\n }\r\n }\r\n\r\n return value;\r\n};\r\n","import { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { FolderAssetType } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport {\r\n oDataTypeConfig,\r\n namePropertyConfig,\r\n} from './request-transformer-util';\r\n\r\nconst removeEncodingPrefix = (fileData) => {\r\n const base64 = 'base64,';\r\n const base64Index = fileData.indexOf(base64);\r\n\r\n return base64Index > -1\r\n ? fileData.substr(base64Index + base64.length)\r\n : fileData;\r\n};\r\n\r\nexport const transformAddUploadAssetRequest = ({\r\n blobName, // for video\r\n data, // for image\r\n name,\r\n}, folderAssetType) => {\r\n const model = {\r\n '@odata.type': oDataTypeConfig[folderAssetType],\r\n [namePropertyConfig[folderAssetType]]: name,\r\n SourceType: constants.sourceTypes.UserUploaded,\r\n };\r\n\r\n if (folderAssetType === FolderAssetType.Video) {\r\n model.OriginalIdentifier = blobName;\r\n } else {\r\n model.Data = removeEncodingPrefix(data);\r\n model.Type = 'GenericImage';\r\n }\r\n\r\n return model;\r\n};\r\n\r\nexport const transformAddStockImageRequest = ({ stockImageId, imageType = 'GenericImage' }) => ({\r\n '@odata.type': oDataTypeConfig[FolderAssetType.Image],\r\n StockImageId: stockImageId,\r\n StockImageVendor: 'ShutterStock',\r\n Type: imageType,\r\n});\r\n\r\nexport const transformAddInvestImageRequest = ({ investImageId, imageSrc, imageType = 'GenericImage' }) => ({\r\n '@odata.type': oDataTypeConfig[FolderAssetType.Image],\r\n XandrAssetId: investImageId,\r\n Url: imageSrc,\r\n SourceType: 'XandrImported',\r\n Type: imageType,\r\n});\r\n\r\nexport const transformAddInvestVideoRequest = ({\r\n investVideoId, videoSrc, description,\r\n}) => ({\r\n '@odata.type': oDataTypeConfig[FolderAssetType.Video],\r\n XandrAssetId: investVideoId,\r\n Url: videoSrc,\r\n Description: description,\r\n SourceType: 'XandrImported',\r\n});\r\n\r\nexport const transformAddUrlImageRequest = ({ imageSrc, imageType = 'GenericImage', sourceType }) => ({\r\n '@odata.type': oDataTypeConfig[FolderAssetType.Image],\r\n Url: imageSrc,\r\n Type: imageType,\r\n SourceType: sourceType,\r\n});\r\n\r\nexport const transformAddImageWithBaseIdRequest = ({\r\n imageSrc, metaData, baseId, sourceType,\r\n}) => ({\r\n '@odata.type': oDataTypeConfig[FolderAssetType.Image],\r\n Url: imageSrc,\r\n Type: 'GenericImage',\r\n BaseId: baseId,\r\n Metadata: metaData,\r\n ...(sourceType ? { sourceType } : {}),\r\n});\r\n\r\nexport const transformAddUrlVideoRequest = ({ videoUrl, name }) => ({\r\n '@odata.type': oDataTypeConfig[FolderAssetType.Video],\r\n Url: videoUrl,\r\n Description: name,\r\n SourceType: constants.sourceTypes.WebsiteImported,\r\n});\r\n","import {\r\n oDataTypeConfig,\r\n transformAssetId,\r\n} from './request-transformer-util';\r\n\r\nexport const transformDeleteAssetRequest = ({ folderAssetType, assetId }) => ({\r\n Asset: {\r\n '@odata.type': oDataTypeConfig[folderAssetType],\r\n Id: transformAssetId(assetId),\r\n },\r\n});\r\n","import Promise from 'bluebird';\r\nimport {\r\n oDataTypeConfig,\r\n transformAssetId,\r\n namePropertyConfig,\r\n} from './request-transformer-util';\r\n\r\nexport const transformRenameRequest = ({ assetId, folderAssetType, name }) => ({\r\n Asset: {\r\n '@odata.type': oDataTypeConfig[folderAssetType],\r\n Id: transformAssetId(assetId),\r\n [namePropertyConfig[folderAssetType]]: name,\r\n },\r\n});\r\n\r\nexport const transformAltTextRequest = ({ assetId, folderAssetType, text }) => ({\r\n Asset: {\r\n '@odata.type': oDataTypeConfig[folderAssetType],\r\n Id: transformAssetId(assetId),\r\n AltText: text,\r\n },\r\n});\r\n\r\nconst readAsDataUrlAsync = url => (\r\n fetch(url)\r\n .then(response => response.blob()) // Convert response to Blob\r\n .then(blob => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onload = e => resolve(e.target.result);\r\n reader.onerror = e => reject(reader.error, e);\r\n\r\n // Scheduling the reading of the blob\r\n reader.readAsDataURL(blob);\r\n }))\r\n);\r\n\r\nconst removeEncodingPrefix = (data) => {\r\n const base64 = 'base64,';\r\n const base64Index = data.indexOf(base64);\r\n\r\n return base64Index > -1\r\n ? data.substr(base64Index + base64.length)\r\n : data;\r\n};\r\n\r\nexport const transformImageUrlToImageDataAsync = (imageUrl) => {\r\n const promise = readAsDataUrlAsync(imageUrl)\r\n .then(data => removeEncodingPrefix(data));\r\n return promise;\r\n};\r\n","import _ from 'underscore';\r\nimport { AdsStudioErrorBase } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nexport class AdsStudioODataError extends AdsStudioErrorBase {\r\n constructor({\r\n message, originError, originErrors, bulkupsertErrors,\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 let errors = [];\r\n let status = '';\r\n if (originError) {\r\n errors = originError.errors || [];\r\n status = originError.status || '';\r\n } else if (originErrors) {\r\n errors = originErrors;\r\n } else if (bulkupsertErrors) {\r\n errors = bulkupsertErrors;\r\n }\r\n\r\n const { Code, Message, Property } = _.first(errors) || {};\r\n const errorCode = Code || 'Unknown';\r\n\r\n const params = { ...rest, errorMessage: Message || undefined, errorProperty: Property || undefined };\r\n super({\r\n message, originError, errorCode, errorProcessor, ...params,\r\n });\r\n\r\n this.errors = errors;\r\n this.status = status;\r\n }\r\n}\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nimport { parseFileName } from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { FilePayload } from '@bingads-webui/azure-upload';\r\n\r\nimport {\r\n CSMLImportSource,\r\n isRootFolderId,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { CSMLSortingRequestParams, parseMTDateString, formatCivilDate } from '../service-utils';\r\nimport { transformAssetResponse, transformVideoResponse } from './asset-response-transformers';\r\n\r\nimport {\r\n transformAddUploadAssetRequest,\r\n transformAddStockImageRequest,\r\n transformAddInvestImageRequest,\r\n transformAddInvestVideoRequest,\r\n transformAddUrlImageRequest,\r\n transformAddImageWithBaseIdRequest,\r\n transformDeleteAssetRequest,\r\n transformRenameRequest,\r\n transformAddUrlVideoRequest,\r\n} from './request-transformers';\r\n\r\nimport {\r\n AdsStudioODataError,\r\n renameFolderApiErrorProcessor,\r\n bulkMoveApiErrorProcessor,\r\n bulkMoveApiItemErrorProcessor,\r\n deleteFolderApiErrorProcessor,\r\n createFolderApiErrorProcessor,\r\n bulkDeleteAssetsApiItemErrorProcessor,\r\n bulkDeleteAssetsApiErrorProcessor\r\n} from '../../error-handling';\r\n\r\nconst transformParentHierarchy = folder => ({\r\n folderId: folder.Id,\r\n folderName: folder.Name,\r\n parentFolderId: folder.ParentFolderId,\r\n});\r\n\r\nconst transformFolderResponse = (folder, i18n) => {\r\n const response = {\r\n folderId: folder.Id,\r\n folderName: folder.Name,\r\n itemCount: folder.ItemsCount,\r\n createdTime: parseMTDateString(i18n, folder.CreatedTime),\r\n modifiedTime: parseMTDateString(i18n, folder.ModifiedTime),\r\n parentFolderId: folder.ParentFolderId,\r\n assets: _.map(folder.Assets || [], asset => transformAssetResponse(asset, asset.FolderAssetType, i18n)),\r\n subfolders: _.map(folder.SubFolders || [], subfolder => transformFolderResponse(subfolder, i18n)),\r\n parentHierarchy: _.map(folder.ParentHierarchy || [], parent => transformParentHierarchy(parent)),\r\n };\r\n const perfTimeSeriesData = folder['@ns.performancetimeseries'];\r\n if (!_.isEmpty(perfTimeSeriesData)) {\r\n response.perfTimeSeriesData = perfTimeSeriesData;\r\n }\r\n return response;\r\n};\r\n\r\nconst IMPORT_SOURCE_MAP = {\r\n [CSMLImportSource.Google]: 'GoogleImported',\r\n [CSMLImportSource.Facebook]: 'FacebookImported',\r\n};\r\n\r\nexport const getFolderRepository = ({\r\n folderODataService,\r\n azureUploader,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n logger,\r\n}) => {\r\n const getFolderArgs = ({\r\n perfMetricDateRange,\r\n searchTerm,\r\n minWidth,\r\n minHeight,\r\n isVideoDurationBoundaryIncluded = false,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n dateAddedStart,\r\n dateAddedEnd,\r\n importSource,\r\n assetSources,\r\n sortBy,\r\n skip,\r\n count,\r\n folderId,\r\n assetType,\r\n includeAssets,\r\n includeSubfolders,\r\n includeParentHierarchy,\r\n assetsToLoadForSubfolders = 1,\r\n isGlobalSearch = false,\r\n isAssetPickerScenario = false,\r\n hasPerfData = false,\r\n topRated,\r\n isSemanticSearch = false,\r\n isRecentSorting = false,\r\n }) => {\r\n //\r\n const filterArgs = {\r\n searchTerm: searchTerm ? encodeURIComponent(searchTerm.replace(/'/g, \"''\")) : '',\r\n minWidth,\r\n minHeight,\r\n isVideoDurationBoundaryIncluded,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n dateAddedStart: dateAddedStart && formatCivilDate(i18n, dateAddedStart, ianaTimeZone, timezoneUTCOffset, '00:00:00'),\r\n dateAddedEnd: dateAddedEnd && formatCivilDate(i18n, dateAddedEnd, ianaTimeZone, timezoneUTCOffset, '23:59:59'),\r\n assetType,\r\n sourceType: IMPORT_SOURCE_MAP[importSource],\r\n hasPerfData,\r\n topRated,\r\n assetSources,\r\n };\r\n\r\n const expandArgs = {\r\n includeAssets,\r\n includeSubfolders,\r\n includeParentHierarchy,\r\n };\r\n\r\n const args = {\r\n skip,\r\n count,\r\n folderId: isRootFolderId(folderId) ? null : folderId,\r\n expandArgs,\r\n filterArgs,\r\n assetsToLoadForSubfolders,\r\n isGlobalSearch,\r\n isAssetPickerScenario,\r\n perfMetricDateRange,\r\n isSemanticSearch,\r\n isRecentSorting,\r\n ...CSMLSortingRequestParams[sortBy],\r\n };\r\n return args;\r\n };\r\n\r\n const getFolderData = ({\r\n perfMetricDateRange,\r\n searchTerm,\r\n minWidth,\r\n minHeight,\r\n isVideoDurationBoundaryIncluded = false,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n dateAddedStart,\r\n dateAddedEnd,\r\n importSource,\r\n assetSources,\r\n sortBy,\r\n skip,\r\n count,\r\n folderId,\r\n assetType,\r\n includeAssets,\r\n includeSubfolders,\r\n includeParentHierarchy,\r\n assetsToLoadForSubfolders = 1,\r\n isGlobalSearch = false,\r\n isAssetPickerScenario = false,\r\n withBIData = false,\r\n hasPerfData = false,\r\n topRated = false,\r\n isSemanticSearch = false,\r\n isRecentSorting = false,\r\n perfMarker,\r\n }) => {\r\n //\r\n\r\n const args = getFolderArgs({\r\n perfMetricDateRange,\r\n searchTerm,\r\n minWidth,\r\n minHeight,\r\n isVideoDurationBoundaryIncluded,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n dateAddedStart,\r\n dateAddedEnd,\r\n importSource,\r\n assetSources,\r\n sortBy,\r\n skip,\r\n count,\r\n folderId,\r\n assetType,\r\n includeAssets,\r\n includeSubfolders,\r\n includeParentHierarchy,\r\n assetsToLoadForSubfolders,\r\n isGlobalSearch,\r\n isAssetPickerScenario,\r\n hasPerfData,\r\n topRated,\r\n isSemanticSearch,\r\n isRecentSorting,\r\n });\r\n if (perfMarker) {\r\n perfMarker.willInit();\r\n }\r\n if (withBIData) {\r\n return folderODataService.getFolderDataWithBIData(args).then((res) => {\r\n const folder = transformFolderResponse(res || {}, i18n);\r\n if (perfMarker) {\r\n perfMarker.done();\r\n }\r\n return { folder };\r\n });\r\n }\r\n\r\n return folderODataService.getFolderData(args).then((res) => {\r\n const folder = transformFolderResponse(res || {}, i18n);\r\n if (perfMarker) {\r\n perfMarker.done();\r\n }\r\n return { folder };\r\n });\r\n };\r\n\r\n const getPerfTimeSeriesData = ({\r\n perfMetricDateRange,\r\n perfTimeSeriesParams,\r\n searchTerm,\r\n minWidth,\r\n minHeight,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n dateAddedStart,\r\n dateAddedEnd,\r\n importSource,\r\n assetSources,\r\n assetType,\r\n isGlobalSearch,\r\n hasPerfData,\r\n folderId,\r\n topRated,\r\n }) => {\r\n const filterArgs = {\r\n searchTerm: searchTerm ? encodeURIComponent(searchTerm.replace(/'/g, \"''\")) : '',\r\n minWidth,\r\n minHeight,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n dateAddedStart: dateAddedStart && formatCivilDate(i18n, dateAddedStart, ianaTimeZone, timezoneUTCOffset, '00:00:00'),\r\n dateAddedEnd: dateAddedEnd && formatCivilDate(i18n, dateAddedEnd, ianaTimeZone, timezoneUTCOffset, '23:59:59'),\r\n assetType,\r\n sourceType: IMPORT_SOURCE_MAP[importSource],\r\n hasPerfData,\r\n topRated,\r\n assetSources,\r\n };\r\n\r\n return folderODataService.getPerfTimeSeriesData({\r\n perfMetricDateRange, perfTimeSeriesParams, filterArgs, folderId, isGlobalSearch,\r\n }).then((res) => {\r\n const { value } = res || {};\r\n const perfTimeSeriesData = value || [];\r\n return { perfTimeSeriesData };\r\n });\r\n };\r\n\r\n const createFolder = ({\r\n folderName,\r\n parentFolderId,\r\n }) => {\r\n const args = {\r\n folderName,\r\n folderType: 'Image',\r\n parentFolderId: isRootFolderId(parentFolderId) ? null : parentFolderId,\r\n };\r\n\r\n const promise = folderODataService.createFolder(args)\r\n .catch((err) => {\r\n throw new AdsStudioODataError({\r\n message: `create folder api failed, status: ${err.status}`,\r\n originError: err,\r\n errorProcessor: createFolderApiErrorProcessor,\r\n });\r\n });\r\n\r\n return promise;\r\n };\r\n\r\n const uploadVideoToAzureBlobWithCancellation = ({\r\n fileObject,\r\n onProgress,\r\n }) => {\r\n const promise = new Promise((resolve, reject) => {\r\n const { ext: fileExtension } = parseFileName(fileObject.name);\r\n\r\n folderODataService.getBlobUploadUrl({ fileExtension })\r\n .then((blob) => {\r\n const { BlobName } = blob;\r\n const token = azureUploader.uploadPayloadToBlobWithCancellation({\r\n blob,\r\n payload: new FilePayload({ file: fileObject }),\r\n onProgress,\r\n });\r\n\r\n resolve({ token, blobName: BlobName });\r\n })\r\n .catch(reject);\r\n });\r\n return promise;\r\n };\r\n\r\n const deleteFolder = ({ folderId, folderName }) => {\r\n const promise = folderODataService.deleteFolder({ folderId }).catch((err) => {\r\n throw new AdsStudioODataError({\r\n message: `delete folder api failed, status: ${err.status}`,\r\n originError: err,\r\n errorProcessor: deleteFolderApiErrorProcessor,\r\n folderId,\r\n folderName,\r\n });\r\n });\r\n return promise;\r\n };\r\n\r\n const renameFolder = ({ folderId, newFolderName }) => {\r\n const promise = folderODataService.renameFolder({ folderId, newFolderName })\r\n .catch((err) => {\r\n throw new AdsStudioODataError({\r\n message: `rename folder api failed, status: ${err.status}`,\r\n originError: err,\r\n errorProcessor: renameFolderApiErrorProcessor,\r\n });\r\n });\r\n return promise;\r\n };\r\n\r\n const addFolderUploadAsset = ({\r\n folderId,\r\n asset,\r\n folderAssetType,\r\n inProgress,\r\n supportUpscale,\r\n }) => {\r\n const args = {\r\n asset: transformAddUploadAssetRequest(asset, folderAssetType),\r\n folderId: isRootFolderId(folderId) ? null : folderId,\r\n inProgress,\r\n supportUpscale,\r\n };\r\n\r\n const promise = folderODataService.addAssets(args);\r\n\r\n return promise;\r\n };\r\n\r\n const addStockImageToFolder = ({\r\n folderId,\r\n stockImageId,\r\n }) => {\r\n const args = {\r\n asset: transformAddStockImageRequest({ stockImageId }),\r\n folderId: isRootFolderId(folderId) ? null : folderId,\r\n };\r\n\r\n const promise = folderODataService.addAssets(args);\r\n\r\n return promise;\r\n };\r\n\r\n const addInvestImageToFolder = ({\r\n folderId,\r\n investImageId,\r\n imageSrc,\r\n }) => {\r\n const args = {\r\n asset: transformAddInvestImageRequest({ investImageId, imageSrc }),\r\n folderId: isRootFolderId(folderId) ? null : folderId,\r\n };\r\n\r\n const promise = folderODataService.addAssets(args);\r\n\r\n return promise;\r\n };\r\n\r\n const addInvestVideoToFolder = ({\r\n folderId,\r\n investVideoId,\r\n videoSrc,\r\n description,\r\n }) => {\r\n const args = {\r\n asset: transformAddInvestVideoRequest({ investVideoId, videoSrc, description }),\r\n folderId: isRootFolderId(folderId) ? null : folderId,\r\n };\r\n\r\n const promise = folderODataService.addAssets(args);\r\n\r\n return promise;\r\n };\r\n\r\n const addUrlImageToFolder = ({\r\n folderId,\r\n imageSrc,\r\n sourceType,\r\n }) => {\r\n const args = {\r\n asset: transformAddUrlImageRequest({ imageSrc, sourceType }),\r\n folderId: isRootFolderId(folderId) ? null : folderId,\r\n };\r\n\r\n const promise = folderODataService.addAssets(args);\r\n\r\n return promise;\r\n };\r\n\r\n const addImageWithBaseIdToFolder = ({\r\n folderId,\r\n imageSrc,\r\n metaData,\r\n baseId,\r\n sourceType,\r\n }) => {\r\n const args = {\r\n asset: transformAddImageWithBaseIdRequest({\r\n imageSrc, metaData, baseId, sourceType,\r\n }),\r\n folderId: isRootFolderId(folderId) ? null : folderId,\r\n };\r\n\r\n const promise = folderODataService.addAssets(args);\r\n\r\n return promise;\r\n };\r\n\r\n const postVideoByUrl = ({\r\n videoUrl,\r\n name,\r\n folderId,\r\n }) => {\r\n const args = {\r\n asset: transformAddUrlVideoRequest({ videoUrl, name }),\r\n folderId: isRootFolderId(folderId) ? null : folderId,\r\n };\r\n\r\n const promise = folderODataService.addAssets(args);\r\n\r\n return promise;\r\n };\r\n\r\n const updateVideoStatusByIds = (videoTasks) => {\r\n logger.logTrace('Update video status task length', { taskLength: videoTasks.length });\r\n return folderODataService.getVideosByIdsAsync(videoTasks).then((response) => {\r\n if (response && response.length > 0) {\r\n const transformedRes = response.map(item => transformVideoResponse(item, i18n));\r\n return transformedRes;\r\n }\r\n return [];\r\n });\r\n };\r\n\r\n const deleteAsset = ({\r\n assetId,\r\n folderAssetType,\r\n }) => {\r\n const asset = transformDeleteAssetRequest({ assetId, folderAssetType });\r\n const promise = folderODataService.deleteAsset(asset);\r\n\r\n return promise;\r\n };\r\n\r\n const renameAsset = ({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n }) => {\r\n const asset = transformRenameRequest({ assetId, folderAssetType, name });\r\n const promise = folderODataService.updateAsset(asset);\r\n\r\n return promise;\r\n };\r\n\r\n const batchMove = ({\r\n destFolderId, assets, folders,\r\n }) => {\r\n const assetIds = _.map(assets, ({ folderAssetType, id: assetId }) => transformDeleteAssetRequest({ folderAssetType, assetId }).Asset);\r\n const folderIds = _.map(folders, ({ folderId }) => folderId);\r\n const promise = folderODataService.batchMove({\r\n destFolderId: isRootFolderId(destFolderId) ? null : destFolderId,\r\n assets: assetIds,\r\n folders: folderIds,\r\n }).then((res) => {\r\n // res only contains items with errors\r\n const assetsSummary = _.map(assets, (ast) => {\r\n // eslint-disable-next-line eqeqeq\r\n const { Success, Errors } = _.find(res.assets, ({ Id }) => Id == ast.id) || { Success: true };\r\n const ret = { ...ast };\r\n if (!Success) {\r\n ret.err = new AdsStudioODataError({ originErrors: Errors, errorProcessor: bulkMoveApiItemErrorProcessor });\r\n }\r\n return ret;\r\n }) || [];\r\n const foldersSummary = _.map(folders, (fdr) => {\r\n const { Success, Errors } = _.find(res.folders, ({ Id }) => Id === fdr.folderId) || { Success: true };\r\n const ret = { ...fdr };\r\n if (!Success) {\r\n ret.err = new AdsStudioODataError({ originErrors: Errors, errorProcessor: bulkMoveApiItemErrorProcessor });\r\n }\r\n return ret;\r\n }) || [];\r\n return { assetsSummary, foldersSummary, hasError: !_.isEmpty(res.assets) || !_.isEmpty(res.folders) };\r\n }).catch((err) => {\r\n throw new AdsStudioODataError({\r\n message: `batch move api failed, status: ${err.status}`,\r\n originError: err,\r\n errorProcessor: bulkMoveApiErrorProcessor,\r\n folderCount: folders ? folders.length : 0,\r\n assetCount: assets ? assets.length : 0,\r\n });\r\n });\r\n return promise;\r\n };\r\n\r\n const bulkDeleteAssets = (assets) => {\r\n const assetsToDelete = _.map(assets, ({ folderAssetType, id: assetId }) => {\r\n const id = transformDeleteAssetRequest({ folderAssetType, assetId }).Asset.Id;\r\n return { assetId: id, folderAssetType };\r\n });\r\n const promise = folderODataService.bulkDeleteAssets(assetsToDelete).then((res) => {\r\n // res only contains itmes with errors\r\n const resultSummary = _.map(assets, (ast) => {\r\n const bulkupsertErrors = _.filter(res, ({ Id }) => Id === ast.id);\r\n const ret = { ...ast };\r\n if (!_.isEmpty(bulkupsertErrors)) {\r\n ret.err = new AdsStudioODataError({ bulkupsertErrors, errorProcessor: bulkDeleteAssetsApiItemErrorProcessor, assetType: ast.folderAssetType });\r\n }\r\n return ret;\r\n });\r\n return { resultSummary, hasError: !_.isEmpty(res) };\r\n }).catch((err) => {\r\n throw new AdsStudioODataError({\r\n message: `batch delete api failed, status: ${err.status}`,\r\n originError: err,\r\n errorProcessor: bulkDeleteAssetsApiErrorProcessor,\r\n });\r\n });\r\n return promise;\r\n };\r\n\r\n return {\r\n getFolderData,\r\n getFolderArgs,\r\n getPerfTimeSeriesData,\r\n createFolder,\r\n uploadVideoToAzureBlobWithCancellation,\r\n deleteFolder,\r\n renameFolder,\r\n addFolderUploadAsset,\r\n addStockImageToFolder,\r\n addInvestImageToFolder,\r\n addInvestVideoToFolder,\r\n addUrlImageToFolder,\r\n addImageWithBaseIdToFolder,\r\n deleteAsset,\r\n bulkDeleteAssets,\r\n renameAsset,\r\n batchMove,\r\n postVideoByUrl,\r\n updateVideoStatusByIds,\r\n };\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport {\r\n AdsStudioODataError,\r\n generateImagesWithAIAPIErrorProcessor,\r\n getAIGeneratedImageAPIErrorProcessor,\r\n} from '../../error-handling';\r\n\r\nexport const getAIGCRepository = ({ aigcODataService }) => {\r\n const generateImagesWithAIAsync = (userPrompt, skipBrandDetection = true) => {\r\n const promise = aigcODataService.generateImagesWithAIAsync(userPrompt, skipBrandDetection).then((res) => {\r\n const { TaskId } = res || {};\r\n return { taskId: TaskId };\r\n }).catch((err) => {\r\n const alError = new AdsStudioODataError({\r\n message: `GenerateImagesWithAI api failed, status: ${err.status}, prompt: ${userPrompt}`,\r\n originError: err,\r\n errorProcessor: generateImagesWithAIAPIErrorProcessor,\r\n });\r\n // brand name detected, return the brand names\r\n if (alError.brandNameDetected) {\r\n return { taskId: null, brandNameDetected: true, brandNames: alError.brandNames };\r\n }\r\n throw alError;\r\n });\r\n return promise;\r\n };\r\n\r\n const getAIGeneratedImageTaskStatus = (taskId) => {\r\n const promise = aigcODataService.getAIGeneratedImageTaskStatus(taskId).then((res) => {\r\n const {\r\n Status: status, // InProgress, Failed, Completed\r\n Progress: progress,\r\n // TaskId: tid,\r\n RecommendedImages,\r\n } = res || {};\r\n const images = _.map(RecommendedImages, ({\r\n Id, Source, Url, Theme, ModelSource,\r\n }) => ({\r\n id: Id, source: Source, url: Url, theme: Theme, modelSource: ModelSource,\r\n }));\r\n\r\n if (status === 'Failed') {\r\n // throw an error with a UI predefined error code\r\n const error = new Error(`AIGenerateImagesTaskStatus api failed, taskId: ${taskId}`);\r\n error.errors = [{\r\n Code: 'AI_Generation_Failed',\r\n }];\r\n throw error;\r\n }\r\n\r\n const isTaskDone = progress >= 100 || status === 'Completed';\r\n\r\n return {\r\n taskId, status, progress, images, isTaskDone,\r\n };\r\n }).catch((err) => {\r\n throw new AdsStudioODataError({\r\n message: `AIGenerateImagesTaskStatus api failed, status: ${err.status}, taskId: ${taskId}`,\r\n originError: err,\r\n errorProcessor: getAIGeneratedImageAPIErrorProcessor,\r\n });\r\n });\r\n return promise;\r\n };\r\n\r\n return {\r\n generateImagesWithAIAsync,\r\n getAIGeneratedImageTaskStatus,\r\n };\r\n};\r\n","import {\r\n AdsStudioODataError,\r\n getRemoveImageBackgroundAPIErrorProcessor,\r\n} from '../../error-handling';\r\n\r\nexport const getBackgroundChangeRepository = (oDataService) => {\r\n const removeImageBackground = (imageUrl) => {\r\n const promise = oDataService.removeImageBackground(imageUrl).then((res) => {\r\n const { imageUrl: returnedImageUrl, roi } = res || {};\r\n return { imageUrl: returnedImageUrl, roi };\r\n }).catch((err) => {\r\n throw new AdsStudioODataError({\r\n message: `RemoveImageBackground api failed, status: ${err.status}, imageUrl: ${imageUrl}`,\r\n originError: err,\r\n errorProcessor: getRemoveImageBackgroundAPIErrorProcessor,\r\n });\r\n });\r\n return promise;\r\n };\r\n\r\n const getImageSegmentations = (imageUrl) => {\r\n const promise = oDataService.getImageSegmentations(imageUrl).then((res) => {\r\n // base64 encoded mask\r\n const { MaskSets: rawMaskSetsBase64String, SelectedMasks: selectedMasksArray } = res || {};\r\n return { rawMaskSetsBase64String, selectedMasksArray };\r\n }).catch((err) => {\r\n throw new AdsStudioODataError({\r\n message: `GetImageSegmentation api failed, status: ${err.status}, imageUrl: ${imageUrl}`,\r\n originError: err,\r\n errorProcessor: getRemoveImageBackgroundAPIErrorProcessor,\r\n });\r\n });\r\n return promise;\r\n };\r\n\r\n const generateImageBackground = ({\r\n prompt,\r\n // it could be original image url, in such case, the selectedMasks contains the mask ids user selected\r\n // if it's the url returned from 'removeImageBackground', the selectedMasks should be null\r\n imageUrl,\r\n // array of mask ids, if it's empty [], it means no mask is selected\r\n // if it's null, it means no masks are applied\r\n maskSetsBase64,\r\n selectedMasks,\r\n outputImageWidth,\r\n outputImageHeight,\r\n }) => {\r\n const promise = oDataService.generateImageBackground({\r\n prompt, imageUrl, selectedMasks, outputImageWidth, outputImageHeight, maskSetsBase64,\r\n }).then((res) => {\r\n const { ImageUrl } = res || {};\r\n return { imageUrl: ImageUrl };\r\n }).catch((err) => {\r\n throw new AdsStudioODataError({\r\n message: `GenerateImageBackground api failed, status: ${err.status}, imageUrl: ${imageUrl}, selectedMasks: ${JSON.stringify(selectedMasks)}, outputImageWidth: ${outputImageWidth}, outputImageHeight: ${outputImageHeight}`,\r\n originError: err,\r\n errorProcessor: getRemoveImageBackgroundAPIErrorProcessor,\r\n });\r\n });\r\n return promise;\r\n };\r\n\r\n const repository = {\r\n removeImageBackground,\r\n getImageSegmentations,\r\n generateImageBackground,\r\n };\r\n return repository;\r\n};\r\n","import { StockImageDataService } from '@bingads-webui-campaign/stock-image-data-service';\r\n\r\nexport const getStockImageRepository = ({\r\n aid, cid, oDataConfig, // logger,\r\n}) => {\r\n //\r\n const stockImageService = new StockImageDataService({\r\n cid, aid, oDataConfig, controller: 'StockImages',\r\n });\r\n\r\n const loadAssets = ({\r\n windowIndex, windowSize, searchText, filter, perfMarker,\r\n }) => {\r\n const customQueries = {\r\n appName: 'CampaignUI',\r\n $search: searchText,\r\n $skip: windowIndex * windowSize,\r\n $top: windowSize,\r\n language: 'en',\r\n includevertical: true,\r\n $query: filter, // stock filters\r\n };\r\n if (perfMarker) {\r\n perfMarker.willInit();\r\n }\r\n const $ret = stockImageService.getStockImages({ customQueries }).then((data) => {\r\n if (perfMarker) {\r\n perfMarker.done();\r\n }\r\n const totalItemCount = data && data['@odata.count'];\r\n const assets = data && data.value;\r\n return { assets, totalItemCount };\r\n });\r\n return $ret;\r\n };\r\n\r\n return {\r\n loadAssets,\r\n };\r\n};\r\n","import { FolderAssetType } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ROOT_FOLDER_ID } from '../../../../ads-studio-app-shared-components/src/model';\r\nimport { getFolderRepository } from './folder-repository';\r\n\r\n// simplified version of asset library image repository\r\nexport const getBasicAssetsRepository = ({\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n assetType,\r\n logger,\r\n}) => {\r\n const folderRepository = getFolderRepository({\r\n logger,\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n });\r\n\r\n const uploadImageToFolder = ({\r\n imageData,\r\n updateCurrentProgress,\r\n imageName,\r\n supportUpscale,\r\n }) => folderRepository.addFolderUploadAsset({\r\n folderId: ROOT_FOLDER_ID,\r\n asset: { data: imageData, name: imageName },\r\n folderAssetType: FolderAssetType.Image,\r\n inProgress: updateCurrentProgress,\r\n supportUpscale,\r\n });\r\n\r\n const loadAssets = ({\r\n windowIndex, windowSize, searchText, sortBy, minVideoDuration, maxVideoDuration, isSemanticSearch = false, isVideoDurationBoundaryIncluded = false, perfMarker,\r\n }) => {\r\n const top = windowSize;\r\n const skip = windowIndex * windowSize;\r\n if (perfMarker) {\r\n perfMarker.willInit();\r\n }\r\n const $ret = folderRepository.getFolderData({\r\n searchTerm: searchText,\r\n sortBy,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isVideoDurationBoundaryIncluded,\r\n skip,\r\n count: top,\r\n assetType,\r\n includeAssets: true,\r\n includeSubfolder: false,\r\n includeParentHierarchy: true,\r\n isGlobalSearch: true,\r\n withBIData: false,\r\n isSemanticSearch,\r\n }).then((response) => {\r\n if (perfMarker) {\r\n perfMarker.done();\r\n }\r\n const { folder } = response || {};\r\n const {\r\n assets,\r\n itemCount,\r\n // folderId,\r\n // folderName,\r\n // parentFolderId,\r\n // subfolders,\r\n // parentHierarchy,\r\n } = folder || {};\r\n\r\n if (isSemanticSearch && searchText && searchText.length > 0) {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Embedded Search in Basic Assets Repository: load assets', {\r\n searchText,\r\n assets,\r\n totalItemCount: (itemCount && itemCount.TotalCount) || 0,\r\n });\r\n }\r\n }\r\n\r\n return {\r\n assets,\r\n totalItemCount: (itemCount && itemCount.TotalCount) || 0,\r\n };\r\n });\r\n return $ret;\r\n };\r\n\r\n const renameAsset = ({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n }) => {\r\n const $ret = folderRepository.renameAsset({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n });\r\n return $ret;\r\n };\r\n\r\n return {\r\n loadAssets,\r\n renameAsset,\r\n uploadImageToFolder,\r\n updateVideoStatusByIds: folderRepository.updateVideoStatusByIds,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\n\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport legacyOdata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { ImageOData } from '@bingads-webui-campaign/image-odata';\r\nimport { AzureUploader } from '@bingads-webui/azure-upload';\r\nimport { fromLegacyTimeZone, getUTCOffsetWithoutDST } from '@bingads-webui-universal/time-zone-converter';\r\nimport { translateLegacyToIANATimezone } from '@bingads-webui-universal/temporal-utitlities';\r\nimport { getODataErrors as getODataErrorsImpl } from '@bingads-webui-campaign/api-errors';\r\n\r\nimport {\r\n getDefaultMetricDateRange,\r\n AssetWithFoldersDataServiceProvider,\r\n withAdsStudioServicesConsumer\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { AdsStudioAppNameODataHeader } from '../constants';\r\nimport { getLoggerWithoutPageInfo, getLogVersion } from './logger/custom-logger';\r\n\r\nimport { useAdsStudioUserPreference, useAdsStudioAccountPreference } from './preferences';\r\n\r\nimport {\r\n getFolderODataService,\r\n getImageBulkEditODataService,\r\n getAIGCODataService,\r\n getVideoODataService,\r\n} from './odata-service';\r\nimport {\r\n getRepository,\r\n getFolderRepository,\r\n getAIGCRepository,\r\n getVideoRepository,\r\n} from './repository';\r\n\r\nexport const prepareODataConfig = (accountTimeZone, oDataConfig) => {\r\n const tz = fromLegacyTimeZone(accountTimeZone);\r\n const timezoneUTCOffset = getUTCOffsetWithoutDST(tz);\r\n const ianaTimeZone = translateLegacyToIANATimezone(accountTimeZone);\r\n\r\n const oDataConfigObj = {\r\n odataToken: oDataConfig.odataToken || oDataConfig.oDataToken,\r\n oDataToken: oDataConfig.odataToken || oDataConfig.oDataToken,\r\n odataPath: oDataConfig.odataPath || oDataConfig.oDataPath,\r\n oDataPath: oDataConfig.odataPath || oDataConfig.oDataPath,\r\n odataTokenType: oDataConfig.oDataTokenType || oDataConfig.odataTokenType,\r\n oDataTokenType: oDataConfig.oDataTokenType || oDataConfig.odataTokenType,\r\n applicationName: AdsStudioAppNameODataHeader.value,\r\n beforeSend: xhr => ({\r\n onBeforeSendDone: () => {\r\n xhr.setRequestHeader(AdsStudioAppNameODataHeader.key, AdsStudioAppNameODataHeader.value);\r\n },\r\n }),\r\n };\r\n\r\n return {\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n oDataConfig: oDataConfigObj,\r\n };\r\n};\r\n\r\nexport function withAdsStudioServicesProvider(WrappedComponent, { loggerTag } = {}) {\r\n const Wrapper = (props) => {\r\n const {\r\n aid,\r\n cid,\r\n accountTimeZone,\r\n oDataConfig,\r\n preferenceService,\r\n activity,\r\n i18n,\r\n allowedAssetType,\r\n permissions,\r\n perfMetricDateRange,\r\n dateFormat,\r\n } = props;\r\n\r\n const {\r\n timezoneUTCOffset,\r\n ianaTimeZone,\r\n oDataConfig: oDataConfigObj,\r\n } = useMemo(() => prepareODataConfig(accountTimeZone, oDataConfig), [accountTimeZone, oDataConfig]);\r\n\r\n // get preference service\r\n const adsStudioUserPreferences = useAdsStudioUserPreference({ preferenceService });\r\n const adsStudioAccountPreferences = useAdsStudioAccountPreference({ preferenceService });\r\n\r\n const versionForLog = useMemo(() => (getLogVersion(permissions)), [permissions]);\r\n const logger = useMemo(() => getLoggerWithoutPageInfo(activity, versionForLog, loggerTag), [activity, versionForLog]);\r\n\r\n const imageODataService = useMemo(\r\n () => new ImageOData(cid, aid, oDataConfigObj),\r\n [oDataConfigObj, aid, cid]\r\n );\r\n\r\n const imageBulkEditODataService = useMemo(\r\n () => getImageBulkEditODataService({\r\n odata, oDataConfig: oDataConfigObj, aid, cid, logger,\r\n }),\r\n [logger, oDataConfigObj, aid, cid]\r\n );\r\n\r\n const folderODataService = useMemo(\r\n () => getFolderODataService({\r\n odata,\r\n legacyOdata,\r\n oDataConfig: oDataConfigObj,\r\n aid,\r\n cid,\r\n i18n,\r\n dateFormat,\r\n }),\r\n [aid, cid, dateFormat, i18n, oDataConfigObj]\r\n );\r\n\r\n const aigcODataService = useMemo(() => getAIGCODataService({\r\n odata, oDataConfig: oDataConfigObj, aid, cid,\r\n }), [aid, cid, oDataConfigObj]);\r\n\r\n const videoODataService = useMemo(() => getVideoODataService({\r\n odata, oDataConfig: oDataConfigObj, aid, cid,\r\n }), [aid, cid, oDataConfigObj]);\r\n\r\n const getODataErrors = useCallback((errs, defaultMessage) => {\r\n const errors = getODataErrorsImpl(errs, i18n, activity);\r\n if (!errors || _.isEmpty(errors)) {\r\n return defaultMessage;\r\n }\r\n return errors;\r\n }, [activity, i18n]);\r\n\r\n const repository = useMemo(\r\n () => getRepository({\r\n imageBulkEditODataService,\r\n imageODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n getODataErrors,\r\n }),\r\n [\r\n imageBulkEditODataService,\r\n imageODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n getODataErrors,\r\n ]\r\n );\r\n\r\n const azureUploader = useMemo(() => new AzureUploader({\r\n logger: {\r\n trace: logger.traceWithoutParams,\r\n },\r\n }), [logger]);\r\n\r\n const folderRepository = useMemo(\r\n () => getFolderRepository({\r\n azureUploader,\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n logger,\r\n }),\r\n [azureUploader, folderODataService, i18n, ianaTimeZone, timezoneUTCOffset, logger]\r\n );\r\n\r\n const aigcRepository = useMemo(\r\n () => getAIGCRepository({ aigcODataService }),\r\n [aigcODataService]\r\n );\r\n\r\n const videoRepository = useMemo(\r\n () => getVideoRepository({\r\n videoODataService,\r\n }),\r\n [videoODataService]\r\n );\r\n\r\n const defaultPerfMetricDateRange = useMemo(() => getDefaultMetricDateRange(\r\n i18n, dateFormat,\r\n ianaTimeZone,\r\n perfMetricDateRange && perfMetricDateRange.Rangelcid\r\n ), [dateFormat, i18n, ianaTimeZone, perfMetricDateRange]);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n Wrapper.displayName = `withAdsStudioServicesProvider(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n}\r\n\r\nexport function withAdsStudioServicesLoaded(WrappedComponent, options) {\r\n const Wrapper = withAdsStudioServicesProvider(withAdsStudioServicesConsumer(WrappedComponent), options);\r\n\r\n Wrapper.displayName = `withAdsStudioServicesLoaded(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n}\r\n","export const getVideoRepository = ({\r\n videoODataService,\r\n}) => {\r\n const addVideoCreative = ({ videoCreative }) => {\r\n const res = videoODataService.addVideoCreative({ videoCreative }).then(result => result.value);\r\n return res;\r\n };\r\n\r\n const getVideo = ({ id, fetchMetadata }) => videoODataService.getVideo({ id, fetchMetadata });\r\n\r\n return {\r\n addVideoCreative,\r\n getVideo,\r\n };\r\n};\r\n","import { AdsStudioAppNameODataHeader } from '../constants';\r\n\r\n//\r\nexport const getODataConfig = (serverContext) => {\r\n // todo: [4183527] move this odataPath value to serverContext and remove dup code from app init\r\n const isLocal = () => {\r\n const hostname = document.location.hostname.toLowerCase();\r\n return hostname.indexOf('ads.microsoft.com') === -1 &&\r\n hostname.indexOf('ads-int.microsoft.com') === -1;\r\n };\r\n\r\n const odataPath = isLocal() ? 'Advertiser/V2' : 'Campaign/V2';\r\n\r\n const oDataConfig = {\r\n odataToken: serverContext.Token,\r\n oDataToken: serverContext.Token,\r\n odataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n oDataPath: `${serverContext.ServicesEndpoints.CampaignAPI}${odataPath}`,\r\n applicationName: AdsStudioAppNameODataHeader.value,\r\n beforeSend: xhr => ({\r\n onBeforeSendDone: () => {\r\n xhr.setRequestHeader(AdsStudioAppNameODataHeader.key, AdsStudioAppNameODataHeader.value);\r\n },\r\n }),\r\n };\r\n return oDataConfig;\r\n};\r\n","import React, { useMemo, useCallback, useRef } from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport _ from 'underscore';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\n\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport legacyOdata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { AzureUploader } from '@bingads-webui/azure-upload';\r\n\r\nimport {\r\n useBasicAssetsService,\r\n useAIGeneratedImages,\r\n useMultiSourceAssetsService,\r\n useVideoTaskPoller,\r\n FolderAssetType,\r\n ROOT_FOLDER_ID,\r\n AIModelSource,\r\n CSMLAssetSource,\r\n getDefaultMetricDateRange,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport {\r\n getStockImageRepository,\r\n} from './repository/stock-image-repository';\r\n\r\nimport {\r\n getAIGCODataService,\r\n getVideoODataService,\r\n getFolderODataService,\r\n} from './odata-service';\r\n\r\nimport {\r\n getBasicAssetsRepository,\r\n getBasicFoldersRepository,\r\n getLibraryAndStockImageRepository,\r\n getAIGCRepository,\r\n getFolderRepository,\r\n} from './repository';\r\n\r\nimport { prepareODataConfig } from './with-ads-studio-services-provider';\r\n\r\nexport const withLibraryAndStockImagesService = (WrappedComponent) => {\r\n const Wrapper = (props) => {\r\n const {\r\n aid, cid, accountTimeZone, oDataConfig, dateFormat, i18n, logger,\r\n } = props;\r\n\r\n const {\r\n timezoneUTCOffset,\r\n ianaTimeZone,\r\n oDataConfig: oDataConfigObj,\r\n } = useMemo(() => prepareODataConfig(accountTimeZone, oDataConfig), [accountTimeZone, oDataConfig]);\r\n\r\n const folderODataService = useMemo(\r\n () => getFolderODataService({\r\n odata,\r\n legacyOdata,\r\n oDataConfig: oDataConfigObj,\r\n aid,\r\n cid,\r\n i18n,\r\n dateFormat,\r\n }),\r\n [aid, cid, dateFormat, i18n, oDataConfigObj]\r\n );\r\n\r\n const repository = useMemo(() => getLibraryAndStockImageRepository({\r\n aid,\r\n cid,\r\n oDataConfig,\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n assetType: FolderAssetType.Image,\r\n logger,\r\n }), [aid, cid, folderODataService, i18n, ianaTimeZone, oDataConfig, timezoneUTCOffset, logger]);\r\n\r\n const {\r\n assets,\r\n loadAssets: loadData,\r\n loadMoreAssets: loadMoreData,\r\n renameAsset,\r\n totalAssetCount,\r\n getAssetCountBySource,\r\n // reloadAssets,\r\n // isLoading,\r\n // isCompleted,\r\n } = useMultiSourceAssetsService({ repository, dataSourceNames: repository.sourceNames });\r\n\r\n const totalAssetCountBySource = getAssetCountBySource();\r\n\r\n const dataService = useMemo(() => ({\r\n assets,\r\n loadData,\r\n loadMoreData,\r\n renameAsset,\r\n totalAssetCount,\r\n totalLibraryAssetCount: totalAssetCountBySource[repository.sourceNames[0]],\r\n totalStockAssetCount: totalAssetCountBySource[repository.sourceNames[1]],\r\n }), [assets, loadData, loadMoreData, renameAsset, repository.sourceNames, totalAssetCount, totalAssetCountBySource]);\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n Wrapper.displayName = `withLibraryAndStockImagesService(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n};\r\n\r\nexport const withLibraryFoldersService = (WrappedComponent) => {\r\n const Wrapper = (props) => {\r\n const {\r\n aid, cid, accountTimeZone, oDataConfig, dateFormat, i18n, perfMetricDateRange, dataService: libraryDataService, logger,\r\n } = props;\r\n\r\n const {\r\n timezoneUTCOffset,\r\n ianaTimeZone,\r\n oDataConfig: oDataConfigObj,\r\n } = useMemo(() => prepareODataConfig(accountTimeZone, oDataConfig), [accountTimeZone, oDataConfig]);\r\n\r\n const defaultPerfMetricDateRange = useMemo(() => getDefaultMetricDateRange(\r\n i18n, dateFormat,\r\n ianaTimeZone,\r\n perfMetricDateRange && perfMetricDateRange.Rangelcid\r\n ), [dateFormat, i18n, ianaTimeZone, perfMetricDateRange]);\r\n\r\n const folderODataService = useMemo(\r\n () => getFolderODataService({\r\n odata,\r\n legacyOdata,\r\n oDataConfig: oDataConfigObj,\r\n aid,\r\n cid,\r\n i18n,\r\n dateFormat,\r\n }),\r\n [aid, cid, dateFormat, i18n, oDataConfigObj]\r\n );\r\n\r\n const repository = useMemo(() => getBasicFoldersRepository({\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n perfMetricDateRange: defaultPerfMetricDateRange,\r\n logger,\r\n }), [defaultPerfMetricDateRange, folderODataService, i18n, ianaTimeZone, logger, timezoneUTCOffset]);\r\n\r\n const {\r\n assets,\r\n loadAssets: loadData,\r\n loadMoreAssets: loadMoreData,\r\n renameAsset,\r\n totalAssetCount,\r\n uploadImage,\r\n // reloadAssets,\r\n // isLoading,\r\n // isCompleted,\r\n } = useBasicAssetsService({ repository });\r\n\r\n const {\r\n videoUpdated,\r\n } = useVideoTaskPoller({\r\n assets, repository, logger, interval: 10000,\r\n });\r\n\r\n const mergedAssets = useMemo(() => {\r\n if (!_.isEmpty(videoUpdated)) {\r\n return assets.map((asset) => {\r\n const newUpdates = videoUpdated[asset.id];\r\n if (asset.folderAssetType === FolderAssetType.Video && 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 return assets;\r\n }, [assets, videoUpdated]);\r\n\r\n const dataService = useMemo(() => ({\r\n assets: mergedAssets,\r\n loadData,\r\n loadMoreData,\r\n renameAsset,\r\n totalAssetCount,\r\n uploadImage,\r\n }), [loadData, loadMoreData, mergedAssets, renameAsset, totalAssetCount, uploadImage]);\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n Wrapper.displayName = `withLibraryFoldersService(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n};\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nconst noOpHook = (i18n, logger) => null;\r\n\r\nexport const withLibraryAssetsService = (WrappedComponent, { assetType, useVideoNotify = noOpHook }) => {\r\n const Wrapper = (props) => {\r\n const {\r\n aid, cid, accountTimeZone, oDataConfig, dateFormat, i18n, logger,\r\n } = props;\r\n\r\n const {\r\n timezoneUTCOffset,\r\n ianaTimeZone,\r\n oDataConfig: oDataConfigObj,\r\n } = useMemo(() => prepareODataConfig(accountTimeZone, oDataConfig), [accountTimeZone, oDataConfig]);\r\n\r\n const folderODataService = useMemo(\r\n () => getFolderODataService({\r\n odata,\r\n legacyOdata,\r\n oDataConfig: oDataConfigObj,\r\n aid,\r\n cid,\r\n i18n,\r\n dateFormat,\r\n }),\r\n [aid, cid, dateFormat, i18n, oDataConfigObj]\r\n );\r\n\r\n const videoODataService = useMemo(() => getVideoODataService({\r\n odata, oDataConfig: oDataConfigObj, aid, cid,\r\n }), [aid, cid, oDataConfigObj]);\r\n\r\n const { getVideo } = videoODataService;\r\n\r\n const repository = useMemo(() => getBasicAssetsRepository({\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n assetType,\r\n logger,\r\n }), [folderODataService, i18n, ianaTimeZone, logger, timezoneUTCOffset]);\r\n\r\n\r\n const {\r\n assets,\r\n loadAssets: loadData,\r\n loadMoreAssets: loadMoreData,\r\n renameAsset,\r\n totalAssetCount,\r\n uploadImage,\r\n // reloadAssets,\r\n // isLoading,\r\n // isCompleted,\r\n } = useBasicAssetsService({ repository });\r\n\r\n const {\r\n videoUpdated,\r\n } = useVideoTaskPoller({\r\n assets, repository, logger, interval: 10000,\r\n });\r\n\r\n const notify = useVideoNotify({ i18n, logger });\r\n const updatedAssetsRef = useRef({});\r\n\r\n const mergedAssets = useMemo(() => {\r\n if (!_.isEmpty(videoUpdated) && assetType === FolderAssetType.Video) {\r\n return assets.map((asset) => {\r\n const newUpdates = videoUpdated[asset.id];\r\n if (newUpdates && newUpdates.status !== asset.status) {\r\n if (newUpdates.status === 'Failed' && notify && updatedAssetsRef.current[asset.id] !== newUpdates.status) {\r\n updatedAssetsRef.current[asset.id] = newUpdates.status;\r\n notify(false);\r\n }\r\n if (newUpdates.status === 'Active' && notify && updatedAssetsRef.current[asset.id] !== newUpdates.status) {\r\n updatedAssetsRef.current[asset.id] = newUpdates.status;\r\n notify(true);\r\n }\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 return assets;\r\n }, [assets, videoUpdated]);\r\n\r\n const dataService = useMemo(() => ({\r\n assets: mergedAssets,\r\n loadData,\r\n loadMoreData,\r\n renameAsset,\r\n totalAssetCount,\r\n uploadImage,\r\n getVideo,\r\n }), [loadData, loadMoreData, mergedAssets, renameAsset, totalAssetCount, uploadImage, getVideo]);\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n Wrapper.displayName = `withLibraryAssetsService(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n};\r\n\r\nexport const withAIGCStockService = (WrappedComponent) => {\r\n const Wrapper = (props) => {\r\n const {\r\n aid, cid, accountTimeZone, oDataConfig, logger, i18n, dateFormat,\r\n } = props;\r\n\r\n const {\r\n timezoneUTCOffset,\r\n ianaTimeZone,\r\n oDataConfig: oDataConfigObj,\r\n } = useMemo(() => prepareODataConfig(accountTimeZone, oDataConfig), [accountTimeZone, oDataConfig]);\r\n\r\n const aigcODataService = useMemo(() => getAIGCODataService({\r\n odata, oDataConfig: oDataConfigObj, aid, cid,\r\n }), [aid, cid, oDataConfigObj]);\r\n\r\n const aigcRepository = useMemo(\r\n () => getAIGCRepository({ aigcODataService }),\r\n [aigcODataService]\r\n );\r\n\r\n const stockImageRepository = getStockImageRepository({\r\n aid, cid, oDataConfig: oDataConfigObj,\r\n });\r\n\r\n const {\r\n assets,\r\n loadAssets: loadData,\r\n loadMoreAssets: loadMoreData,\r\n totalAssetCount,\r\n // reloadAssets,\r\n // isLoading,\r\n // isCompleted,\r\n } = useBasicAssetsService({ repository: stockImageRepository });\r\n\r\n const {\r\n generateImagesByAI,\r\n } = useAIGeneratedImages({ repository: aigcRepository, logger });\r\n\r\n const folderODataService = useMemo(\r\n () => getFolderODataService({\r\n odata,\r\n legacyOdata,\r\n oDataConfig: oDataConfigObj,\r\n aid,\r\n cid,\r\n i18n,\r\n dateFormat,\r\n }),\r\n [aid, cid, dateFormat, i18n, oDataConfigObj]\r\n );\r\n\r\n const azureUploader = useMemo(() => new AzureUploader({\r\n logger: {\r\n trace: logger.traceWithoutParams,\r\n },\r\n }), [logger]);\r\n\r\n const folderRepository = useMemo(\r\n () => getFolderRepository({\r\n azureUploader,\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n logger,\r\n }),\r\n [azureUploader, folderODataService, i18n, ianaTimeZone, timezoneUTCOffset, logger]\r\n );\r\n\r\n const addStockImage = useCallback((stockImageId, folderId = ROOT_FOLDER_ID) => folderRepository.addStockImageToFolder({\r\n stockImageId,\r\n folderId,\r\n }), [folderRepository]);\r\n\r\n const addAIGCImage = useCallback((imageSrc, folderId = ROOT_FOLDER_ID, modelSource) => folderRepository.addUrlImageToFolder({\r\n imageSrc,\r\n folderId,\r\n sourceType: modelSource === AIModelSource.Recraft ? CSMLAssetSource.AIGeneratedByRecraft : CSMLAssetSource.AIGenerated,\r\n }), [folderRepository]);\r\n\r\n const dataService = useMemo(() => ({\r\n assets,\r\n loadData,\r\n loadMoreData,\r\n totalAssetCount,\r\n generateImagesByAI,\r\n addAIGCImage,\r\n addStockImage,\r\n }), [assets, loadData, loadMoreData, totalAssetCount, generateImagesByAI, addAIGCImage, addStockImage]);\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n Wrapper.displayName = `withLibraryAssetsService(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\n\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport legacyOdata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { ImageOData } from '@bingads-webui-campaign/image-odata';\r\nimport { useEditImageService } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { getAssetEnhancementSettings } from '@bingads-webui-campaign/image-experience-utils';\r\n\r\nimport { getImageBulkEditODataService, getFolderODataService, getBackgroundChangeODataService } from './odata-service';\r\nimport { getEditImageRepository } from './repository';\r\nimport { prepareODataConfig } from './with-ads-studio-services-provider';\r\nimport { getLoggerWithoutPageInfo, getLogVersion } from './logger/custom-logger';\r\n\r\nexport const withEditImageService = (WrappedComponent, propName = 'dataService') => {\r\n const Wrapper = (props) => {\r\n const {\r\n aid, cid, accountTimeZone, oDataConfig, i18n, dateFormat, permissions, activity,\r\n } = props;\r\n\r\n const {\r\n timezoneUTCOffset,\r\n ianaTimeZone,\r\n oDataConfig: oDataConfigObj,\r\n } = useMemo(() => prepareODataConfig(accountTimeZone, oDataConfig), [accountTimeZone, oDataConfig]);\r\n\r\n const versionForLog = useMemo(() => (getLogVersion(permissions)), [permissions]);\r\n const logger = useMemo(() => getLoggerWithoutPageInfo(activity, versionForLog), [activity, versionForLog]);\r\n\r\n const imageODataService = useMemo(\r\n () => new ImageOData(cid, aid, oDataConfigObj),\r\n [oDataConfigObj, aid, cid]\r\n );\r\n\r\n const imageBulkEditODataService = useMemo(\r\n () => getImageBulkEditODataService({\r\n odata,\r\n oDataConfig: oDataConfigObj,\r\n aid,\r\n cid,\r\n }),\r\n [oDataConfigObj, aid, cid]\r\n );\r\n\r\n const folderODataService = useMemo(\r\n () => getFolderODataService({\r\n odata,\r\n legacyOdata,\r\n oDataConfig: oDataConfigObj,\r\n aid,\r\n cid,\r\n i18n,\r\n dateFormat,\r\n }),\r\n [oDataConfigObj, aid, cid, i18n, dateFormat]\r\n );\r\n\r\n const backgroundChangeODataService = useMemo(\r\n () => getBackgroundChangeODataService({\r\n odata,\r\n oDataConfig: oDataConfigObj,\r\n aid,\r\n cid,\r\n }),\r\n [oDataConfigObj, aid, cid]\r\n );\r\n\r\n const repository = useMemo(() => getEditImageRepository({\r\n imageODataService,\r\n imageBulkEditODataService,\r\n backgroundChangeODataService,\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n }), [imageODataService, imageBulkEditODataService, backgroundChangeODataService, folderODataService, i18n, ianaTimeZone, timezoneUTCOffset]);\r\n\r\n const {\r\n getImagesWithFilter,\r\n getImagesWithBlur,\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 } = useEditImageService({\r\n repository,\r\n logger,\r\n });\r\n\r\n const dataService = useMemo(() => ({\r\n getImagesWithFilter,\r\n getImagesWithBlur,\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 uploadStockImage,\r\n uploadImageToFolder,\r\n saveImageWithBaseId,\r\n moveImageToFolder,\r\n imageFit,\r\n addImageWithBaseIdToFolder,\r\n }), [getImagesWithFilter, getImagesWithBlur, getImagesWithFilterAndBlur, imagesWithFilter, imagesWithFilterAndBlur, removeImageBackground, generateImageBackground, getImageSegmentations, saveImage, saveImageCopy, cropImage, getImageById, uploadStockImage, uploadImageToFolder, saveImageWithBaseId, moveImageToFolder, imageFit, addImageWithBaseIdToFolder]);\r\n\r\n const getAssetEnhancementSettingsService = useMemo(() => () => getAssetEnhancementSettings({\r\n aid,\r\n cid,\r\n oDataConfig: oDataConfigObj,\r\n }), [aid, cid, oDataConfigObj]);\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n Wrapper.displayName = `withEditImageService(${getDisplayName(WrappedComponent)})`;\r\n\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n};\r\n","import { ROOT_FOLDER_ID, FolderAssetType } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { getRepository } from './image-repository';\r\nimport { getFolderRepository } from './folder-repository';\r\nimport { getBackgroundChangeRepository } from './background-change-repository';\r\nimport { transformImageUrlToImageDataAsync } from './request-transformers';\r\n\r\nexport const getEditImageRepository = ({\r\n imageODataService,\r\n imageBulkEditODataService,\r\n backgroundChangeODataService,\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n}) => {\r\n const repository = getRepository({\r\n imageODataService,\r\n imageBulkEditODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n });\r\n\r\n const folderRepository = getFolderRepository({\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n });\r\n\r\n const backgroundChangeRepository = getBackgroundChangeRepository(backgroundChangeODataService);\r\n\r\n const cropImage = ({ imageId, cropSettings, placementSettings }) => {\r\n const promise = repository.cropImage({ imageId, cropSettings, placementSettings });\r\n return promise;\r\n };\r\n\r\n const generateImageWithSmartEffect = ({ imageUrl, smartEffects }) => {\r\n const promise = repository.generateImageWithSmartEffect({ imageUrl, smartEffects });\r\n return promise;\r\n };\r\n\r\n const saveImageCopy = ({ imageUrl, folderId, sourceType }) => {\r\n const promise = folderRepository.addUrlImageToFolder({\r\n imageSrc: imageUrl,\r\n folderId,\r\n sourceType,\r\n });\r\n return promise;\r\n };\r\n\r\n const saveImage = ({ imageUrl, imageId, type }) => {\r\n const promise = transformImageUrlToImageDataAsync(imageUrl)\r\n .then(imageData => repository.updateImageData({\r\n imageId,\r\n imageData,\r\n type,\r\n }));\r\n return promise;\r\n };\r\n\r\n const getImageById = ({ imageId, isImageFittingEnabled }) => {\r\n const promise = repository.getImage(imageId, isImageFittingEnabled);\r\n return promise;\r\n };\r\n\r\n const uploadImageToFolder = ({\r\n imageData,\r\n folderId,\r\n }) => {\r\n const promise = folderRepository.addFolderUploadAsset({\r\n folderId,\r\n asset: { data: imageData },\r\n folderAssetType: FolderAssetType.Image,\r\n });\r\n return promise;\r\n };\r\n\r\n const saveImageWithBaseId = ({ image, baseId, folderId }) => {\r\n const promise = repository.saveImageWithBaseId({ image, baseId, folderId });\r\n return promise;\r\n };\r\n\r\n const removeImageBackground = (imageUrl) => {\r\n const promise = backgroundChangeRepository.removeImageBackground(imageUrl);\r\n return promise;\r\n };\r\n\r\n const getImageSegmentations = (imageUrl) => {\r\n const promise = backgroundChangeRepository.getImageSegmentations(imageUrl);\r\n return promise;\r\n };\r\n\r\n const generateImageBackground = ({\r\n prompt,\r\n // it could be original image url, in such case, the selectedMasks contains the mask ids user selected\r\n // if it's the url returned from 'removeImageBackground', the selectedMasks should be null\r\n imageUrl,\r\n // array of mask ids, if it's empty [], it means no mask is selected\r\n // if it's null, it means no masks are applied\r\n maskSetsBase64,\r\n selectedMasks,\r\n outputImageWidth,\r\n outputImageHeight,\r\n }) => {\r\n const promise = backgroundChangeRepository.generateImageBackground({\r\n prompt,\r\n imageUrl,\r\n maskSetsBase64,\r\n selectedMasks,\r\n outputImageWidth,\r\n outputImageHeight,\r\n });\r\n return promise;\r\n };\r\n\r\n const uploadStockImageToFolder = ({\r\n stockImageId,\r\n folderId = ROOT_FOLDER_ID,\r\n }) => {\r\n const promise = folderRepository.addStockImageToFolder({\r\n folderId,\r\n stockImageId,\r\n });\r\n return promise;\r\n };\r\n\r\n const moveImageToFolder = ({ image, destFolderId }) => {\r\n const promise = folderRepository.batchMove({\r\n assets: [image],\r\n destFolderId,\r\n });\r\n return promise;\r\n };\r\n\r\n const imageFit = ({ imageUrl, placements, skipOutpainting }) => {\r\n const promise = repository.imageFit({\r\n imageUrl,\r\n placements,\r\n skipOutpainting,\r\n });\r\n return promise;\r\n };\r\n\r\n const addImageWithBaseIdToFolder = ({\r\n imageSrc, baseId, folderId, metaData,\r\n }) => {\r\n const promise = folderRepository.addImageWithBaseIdToFolder({\r\n imageSrc,\r\n baseId,\r\n folderId,\r\n metaData,\r\n });\r\n return promise;\r\n };\r\n\r\n return {\r\n cropImage,\r\n generateImageWithSmartEffect,\r\n saveImage,\r\n saveImageCopy,\r\n getImageById,\r\n uploadImageToFolder,\r\n saveImageWithBaseId,\r\n removeImageBackground,\r\n getImageSegmentations,\r\n generateImageBackground,\r\n uploadStockImageToFolder,\r\n moveImageToFolder,\r\n imageFit,\r\n addImageWithBaseIdToFolder,\r\n };\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\nimport { useBrandKitRepository } from '@bingads-webui-campaign-react/brandkit-data-service';\r\n// TODO: MOVE THIS FILE TO BRANDKIT-DATA-SERVICE PACKAGE\r\nexport const withBrandKitService = (WrappedComponent) => {\r\n const Wrapper = (props) => {\r\n const dataService = useBrandKitRepository();\r\n const {\r\n getBrandKits,\r\n updateBrandKit,\r\n createBrandKits,\r\n brandkitResp,\r\n brandkitError,\r\n cache,\r\n brandkitLoading,\r\n } = dataService;\r\n const brandKitDataService = useMemo(() => ({\r\n getBrandKits,\r\n updateBrandKit,\r\n createBrandKits,\r\n }), [createBrandKits, getBrandKits, updateBrandKit]);\r\n const brandkitApiState = useMemo(() => ({\r\n brandkitResp,\r\n brandkitError,\r\n cache,\r\n brandkitLoading,\r\n }), [brandkitError, brandkitLoading, brandkitResp, cache]);\r\n return (\r\n \r\n );\r\n };\r\n\r\n Wrapper.displayName = `withBrandKitService(${getDisplayName(WrappedComponent)})`;\r\n\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n};\r\n","import React from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { CopilotRepositoryProvider, useCopilotRepositoryContext } from '@bingads-webui/inline-copilot';\r\n\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\n\r\nconst witDataService = (WrappedComponent) => {\r\n const Wrapper = (props) => {\r\n const repository = useCopilotRepositoryContext();\r\n const {\r\n fetchDisplayAdsTemplateGroups,\r\n fetchDisplayAdsTemplateGroupDetails,\r\n editDisplayAdsAssetRecommendations,\r\n fetchDisplayAdsTemplateDefinition,\r\n } = repository;\r\n\r\n return (\r\n );\r\n };\r\n\r\n Wrapper.displayName = `withCopilotDataService(${getDisplayName(WrappedComponent)})`;\r\n\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n};\r\n\r\nconst withCopilotDataServiceProvider = (WrappedComponent) => {\r\n const Wrapper = (props) => {\r\n const {\r\n perfMarker,\r\n serverContext,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n Wrapper.displayName = `withCopilotRepositoryProvider(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n};\r\n\r\nexport const withDisplayTemplatesService = (WrappedComponent) => {\r\n const WithDataService = witDataService(WrappedComponent);\r\n const WithCopilotProvider = withCopilotDataServiceProvider(WithDataService);\r\n\r\n return WithCopilotProvider;\r\n};\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { getDisplayName } from '@bingads-webui-react/hoc-utils';\r\n\r\nexport function withPagePerfMarker(WrappedComponent, perfMarkerName) {\r\n const Wrapper = (props) => {\r\n const { perfMarker } = props || {};\r\n const [dataLoadedOnce, setDataLoadedOnce] = useState(false);\r\n const [pagePerfMarker] = useState(() => {\r\n const marker = perfMarker.createChild(perfMarkerName);\r\n marker.willInit();\r\n return marker;\r\n });\r\n\r\n const setDataLoaded = useCallback(() => {\r\n setDataLoadedOnce(true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (dataLoadedOnce && pagePerfMarker) {\r\n pagePerfMarker.done();\r\n }\r\n }, [dataLoadedOnce]);\r\n\r\n return ;\r\n };\r\n\r\n Wrapper.displayName = `withPagePerfMarker(${getDisplayName(WrappedComponent)})`;\r\n hoistNonReactStatics(Wrapper, WrappedComponent);\r\n\r\n return Wrapper;\r\n}\r\n","import { makeStyles, makeResetStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useBaseTargetFolderPickerStyles = makeResetStyles({\r\n marginLeft: '0px',\r\n marginRight: '0px',\r\n});\r\n\r\nexport const useTargetFolderPickerStyle = makeStyles({\r\n targetFolderPickerViewContainer: {\r\n '& .target-folder-picker-asset-cell': {\r\n opacity: 0.5,\r\n },\r\n },\r\n dialog: {\r\n '&.fui-DialogSurface': {\r\n ...shorthands.overflow('hidden'),\r\n maxWidth: '890px',\r\n },\r\n '& .fui-DialogContent': {\r\n maxHeight: '500px',\r\n minHeight: '500px',\r\n overflowX: 'hidden',\r\n overflowY: 'auto',\r\n },\r\n '& .fui-DialogActions': {\r\n marginTop: '16px',\r\n },\r\n },\r\n filterContainer: {\r\n ...shorthands.padding('8px', '0'),\r\n },\r\n folderPathContainer: {\r\n marginLeft: '-4px',\r\n marginBottom: '-8px',\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport {\r\n AdsStudioLibraryPageContent,\r\n AdsStudioFoldersGridCell,\r\n GridSectionName,\r\n ImagesFilterBar,\r\n FolderPathBreadcrumb,\r\n GridCellFactory,\r\n LibraryEmptyView,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useBaseTargetFolderPickerStyles, useTargetFolderPickerStyle } from './target-folder-picker-style';\r\n\r\nexport const AdsStudioTargetFolderPicker = ({\r\n selectedFolder,\r\n setSelectedFolder,\r\n dataService,\r\n i18n,\r\n dateFormat,\r\n ianaTimeZone,\r\n assetLibraryUserPreferences,\r\n logger,\r\n notificationApi,\r\n permissions,\r\n}) => {\r\n const classes = useTargetFolderPickerStyle();\r\n const baseClassName = useBaseTargetFolderPickerStyles();\r\n const resetSelectionState = useCallback(() => {\r\n setSelectedFolder(null);\r\n }, [setSelectedFolder]);\r\n\r\n const {\r\n folders, navigateIntoFolder, folderPath, navigateToFolderInPath,\r\n } = dataService;\r\n\r\n useEffect(() => {\r\n if (selectedFolder && !_.find(folders, f => f === selectedFolder)) {\r\n resetSelectionState();\r\n }\r\n }, [folders, resetSelectionState, selectedFolder]);\r\n\r\n const renderTilesGridCell = useCallback(({\r\n item, index, searchText, sectionName,\r\n }) => {\r\n const onFolderClick = () => {\r\n const { folderId } = item || {};\r\n if (folderId) {\r\n navigateIntoFolder({ id: folderId });\r\n resetSelectionState();\r\n logger.logTrace('Navigate into folder in target folder picker', { folderId });\r\n }\r\n };\r\n\r\n // folder cell\r\n if (sectionName === GridSectionName.Folder) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n // image cell\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }, [navigateIntoFolder, resetSelectionState, logger, classes.targetFolderPickerFolderCell, i18n]);\r\n\r\n const onFailedToLoadData = useCallback(() => {\r\n notificationApi.showWarning(i18n.getString(_TL_('Failed to load assets. Please refresh the page and try again.')));\r\n }, [i18n, notificationApi]);\r\n\r\n const onFolderPathClicked = useCallback((item) => {\r\n navigateToFolderInPath({ id: item.key });\r\n }, [navigateToFolderInPath]);\r\n\r\n const onRenderHeader = useCallback(() => (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n ), [classes, folderPath, i18n, onFolderPathClicked]);\r\n\r\n const onRenderEmptyView = useCallback(() => (\r\n \r\n ), [i18n]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nAdsStudioTargetFolderPicker.propTypes = {\r\n selectedFolder: PropTypes.shape({}),\r\n setSelectedFolder: PropTypes.func.isRequired,\r\n dataService: PropTypes.shape({\r\n folders: PropTypes.arrayOf(PropTypes.shape({})),\r\n navigateIntoFolder: PropTypes.func,\r\n folderPath: PropTypes.arrayOf(PropTypes.shape({})),\r\n navigateToFolderInPath: 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 ianaTimeZone: PropTypes.string.isRequired,\r\n dateFormat: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n assetLibraryUserPreferences: PropTypes.shape({}),\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n};\r\n\r\nAdsStudioTargetFolderPicker.defaultProps = {\r\n selectedFolder: null,\r\n assetLibraryUserPreferences: null,\r\n permissions: { dynamic: {} },\r\n};\r\n\r\n","import React, { useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogBody,\r\n DialogSurface,\r\n DialogTitle,\r\n Button,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss20Regular } from '@fluentui/react-icons';\r\n\r\nimport { AdsStudioTargetFolderPicker } from './target-folder-picker-view';\r\nimport { useTargetFolderPickerStyle } from './target-folder-picker-style';\r\n\r\n// const modalWidth = 940;\r\n\r\nexport const TargetFolderPickerModal = ({\r\n dataService, isGlobalSearch, sourceFolderId, show, onMoveHereClick, onCancel, i18n, ...rest\r\n}) => {\r\n const [selectedFolder, setSelectedFolder] = useState(null);\r\n\r\n const { currentFolderId } = dataService;\r\n\r\n const onMoveClickButtonClick = () => {\r\n onMoveHereClick(currentFolderId);\r\n };\r\n\r\n const moveHereButtonDisabled = !isGlobalSearch && (currentFolderId === sourceFolderId);\r\n\r\n const DismissIcon = useMemo(() => , [onCancel]);\r\n\r\n const classes = useTargetFolderPickerStyle();\r\n\r\n return (\r\n \r\n \r\n \r\n {i18n.getString(_TL_('Select folder'))}\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\nTargetFolderPickerModal.propTypes = {\r\n dataService: PropTypes.shape({\r\n currentFolderId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n }).isRequired,\r\n isGlobalSearch: PropTypes.bool.isRequired,\r\n sourceFolderId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n show: PropTypes.bool.isRequired,\r\n onMoveHereClick: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n};\r\n","import React, { useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport {\r\n withFilterContext,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { withAdsStudioServicesLoaded } from '../../../services';\r\nimport { TargetFolderPickerModal } from './target-folder-picker-modal';\r\n\r\nconst Modal = ({\r\n isGlobalSearch,\r\n sourceFolderId,\r\n isModalVisible,\r\n setModalVisible,\r\n batchMoveAsync,\r\n onSuccess,\r\n onError,\r\n i18n,\r\n logger,\r\n ...rest\r\n}) => {\r\n const onCancel = useCallback(() => {\r\n setModalVisible(false);\r\n logger.logTrace('Cancel to batch move');\r\n }, [logger, setModalVisible]);\r\n\r\n const onMoveHereClick = useCallback((selectedFolderId) => {\r\n logger.logTrace('Confirm to batch move');\r\n batchMoveAsync({\r\n destFolderId: selectedFolderId,\r\n }).then((result) => {\r\n setModalVisible(false);\r\n onSuccess(result);\r\n\r\n const { hasError } = result || {};\r\n if (hasError) {\r\n logger.logTrace('Batch move is done with some errors');\r\n } else {\r\n logger.logTrace('Batch move successfully');\r\n }\r\n }).catch((alODataErr) => {\r\n const { getUXMessage } = alODataErr;\r\n // close modal, and show message to user\r\n setModalVisible(false);\r\n logger.logError(alODataErr);\r\n onError(getUXMessage(i18n));\r\n });\r\n }, [logger, batchMoveAsync, setModalVisible, onSuccess, onError, i18n]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nModal.propTypes = {\r\n isGlobalSearch: PropTypes.bool.isRequired,\r\n sourceFolderId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\r\n isModalVisible: PropTypes.bool.isRequired,\r\n setModalVisible: PropTypes.func.isRequired,\r\n batchMoveAsync: PropTypes.func.isRequired,\r\n onSuccess: PropTypes.func.isRequired,\r\n onError: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: 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 notificationApi: PropTypes.shape({\r\n showWarning: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nconst ModalWithActivityAndDataService = withFilterContext(withActivityContext(withAdsStudioServicesLoaded(Modal)));\r\n\r\n// rest:\r\n// aid, cid, dateFormat, accountTimeZone, oDataConfig, preferenceService, activity, allowedAssetType\r\nconst getUseBatchMoveModalHook = ModalComponent => ({ i18n, logger, ...rest }) => {\r\n const [isModalVisible, setModalVisible] = useState(false);\r\n\r\n const openModal = () => {\r\n setModalVisible(true);\r\n };\r\n\r\n const render = useCallback((isGlobalSearch, sourceFolderId, batchMoveAsync, onSuccess, onError) => (\r\n isModalVisible ?\r\n : null\r\n ), [i18n, isModalVisible, logger, rest]);\r\n\r\n return {\r\n open: openModal,\r\n render,\r\n };\r\n};\r\n\r\nexport const useBatchMoveModal = getUseBatchMoveModalHook(ModalWithActivityAndDataService);\r\n\r\n// for test\r\nexport const useBatchMoveModalWithoutServices = getUseBatchMoveModalHook(Modal);\r\n","import React from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { withFullScreenWithSummaryBar } from '@bingads-webui-react/app-layout-container';\r\nimport { EditVideoPageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\n\r\nexport const EditVideoPageImpl = (props) => {\r\n const { videoId } = useParams();\r\n\r\n return ();\r\n};\r\n\r\nexport const EditVideoPage = withFullScreenWithSummaryBar(EditVideoPageImpl);\r\n","import React from 'react';\r\n\r\nimport { UploadFilesPanel } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nconst globalLegacyI18n = window && window.globalLegacyI18n;\r\n\r\nexport const UploadFilesPanelPage = props => (\r\n \r\n);\r\n","import React from 'react';\r\n\r\nimport { UploadFolderPanel } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nconst globalLegacyI18n = window && window.globalLegacyI18n;\r\n\r\nexport const UploadFolderPanelPage = props => (\r\n \r\n);\r\n","import React from 'react';\r\n\r\nimport { AssetDetailsPage as AssetDetailsPageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\nimport { useAdStudioInlineChart } from '../performance-page/hooks/use-inline-chart';\r\n\r\nconst globalLegacyI18n = window && window.globalLegacyI18n;\r\n\r\nexport const AssetDetailsPage = (props) => {\r\n const { getGranularityEnum } = useAdStudioInlineChart({\r\n serverContext: props.serverContext,\r\n globalLegacyI18n,\r\n // forceToResizeChart,\r\n });\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import React from 'react';\r\n\r\nimport { BackgroundRemovalModalComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nconst globalLegacyI18n = window && window.globalLegacyI18n;\r\n\r\nexport const BackgroundRemovalModalPage = props => (\r\n \r\n);\r\n","import Promise from 'bluebird';\r\nimport { useMemo, useCallback } from 'react';\r\nimport { FilterStorageFactory } from '@bingads-webui-campaign/filter-storage';\r\nimport { useGlobalFilterContext } from '@bingads-webui-react/global-filter-context';\r\n\r\nfunction getAdFilterStore(preferenceService) {\r\n const adFilterFactory = new FilterStorageFactory({\r\n preferenceService,\r\n featureName: 'AdGrid',\r\n entityName: 'Ad',\r\n });\r\n const adFilterStore = adFilterFactory.create('editableFilter', {\r\n filterEntityOptions: {\r\n entitySchema: { name: 'Ad' },\r\n },\r\n });\r\n return adFilterStore;\r\n}\r\n\r\nexport const useAdFilter = ({ preferenceService }) => {\r\n const { updateWaterfallFilter } = useGlobalFilterContext();\r\n\r\n const adFilterStore = useMemo(\r\n () => (preferenceService ? getAdFilterStore(preferenceService) : null),\r\n [preferenceService]\r\n );\r\n\r\n // wrap save method to wait remote preference updating done\r\n const saveFilter = useCallback((filter, waitRemote) => {\r\n // delete first and then create\r\n let deletePromise = adFilterStore.clean() || Promise.resolve();\r\n if (waitRemote) {\r\n const remoteSyncTasks = preferenceService.onRemoteSyncDone(1);\r\n // eslint-disable-next-line no-unused-vars\r\n deletePromise = deletePromise.then(() => remoteSyncTasks).catch((err) => { /* ignore */ });\r\n }\r\n\r\n let savePromise = adFilterStore.save(filter);\r\n if (waitRemote) {\r\n const remoteSyncTasks = preferenceService.onRemoteSyncDone(1);\r\n savePromise = savePromise.then(() => remoteSyncTasks);\r\n }\r\n\r\n return deletePromise.then(() => savePromise);\r\n }, [adFilterStore, preferenceService]);\r\n\r\n const adFilterStoreWrapper = useMemo(() => ({ ...adFilterStore, save: saveFilter }), [adFilterStore, saveFilter]);\r\n\r\n return {\r\n updateWaterfallFilter,\r\n adFilterStore: adFilterStoreWrapper,\r\n };\r\n};\r\n","/* eslint-disable no-param-reassign */\r\n/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\nimport { CampaignFetchProvider } from '@bingads-webui-campaign-react/campaign-http';\r\nimport PropTypes from 'prop-types';\r\nimport { useRouteMatch } from 'react-router-dom';\r\nimport { useTheme } from 'react-jss';\r\n\r\nimport { QueryParam } from '@bingads-webui-react/scope-service';\r\nimport { Scenario, Activity, withActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { WaterfallFilterType } from '@bingads-webui-campaign/filter-storage';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\n\r\nimport {\r\n ComponentStylesProvider,\r\n LocalNavigationProvider,\r\n DataProvider,\r\n} from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport {\r\n AdsStudioThemeProvider,\r\n withFilterContext,\r\n FolderAssetType,\r\n withGenerateImageContext,\r\n withAssetTaskStatusPoller,\r\n removeAdStudioSurveyTriggerFlag,\r\n AdStudioSurveyTriggerFlag,\r\n withCcJsDataContextProvider,\r\n} from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\n\r\nimport { useVideoNotify, withAdStudioNavigation } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { useCustomStyles } from './styles';\r\nimport { getAppRoutes } from './routes';\r\nimport { propsAdapter } from './adapters';\r\nimport {\r\n PerformancePage,\r\n HomePage,\r\n ImagesPage,\r\n VideosPage,\r\n VideoTemplatesPage,\r\n EditVideoPage,\r\n DisplayTemplatesPage,\r\n CreateDisplayTemplatePage,\r\n EditDisplayTemplatePage,\r\n BrandKitPage,\r\n LibraryPage,\r\n WebsiteImagePanelPage,\r\n StockImagePanelPage,\r\n InvestImagePanelPage,\r\n InvestVideoPanelPage,\r\n AddVideoPanelPage,\r\n SearchResultPage,\r\n GenerateImagePage,\r\n UploadFilesPanelPage,\r\n UploadFolderPanelPage,\r\n MixedImagePanelPage,\r\n MixedVideoPanelPage,\r\n EditImagePage,\r\n AssetDetailsPage,\r\n BackgroundRemovalModalPage,\r\n} from './pages';\r\nimport {\r\n withCustomLogForPage,\r\n PageNameForLog,\r\n getLoggerWithoutPageInfo,\r\n getLogVersion,\r\n withAdsStudioServicesConsumer,\r\n withAdsStudioServicesProvider,\r\n withLibraryAssetsService,\r\n withLibraryFoldersService,\r\n getODataConfig,\r\n withLibraryAndStockImagesService,\r\n withEditImageService,\r\n withDisplayTemplatesService,\r\n withBrandKitService,\r\n withAIGCStockService,\r\n withCopilotDomainDataService,\r\n withPagePerfMarker\r\n} from './services';\r\nimport { useAdFilter } from './hooks/use-ad-filter';\r\n\r\nconst pages = {\r\n PerformancePage: withPagePerfMarker(withCustomLogForPage(withAdsStudioServicesConsumer(\r\n PerformancePage,\r\n [\r\n 'navigation', 'logger', 'i18n', 'dateFormat', 'ianaTimeZone',\r\n 'adsStudioUserPreferences', 'reload', 'isReadonly', 'pagePerfMarker',\r\n 'cid', 'aid', 'oDataConfig', 'preferenceService', 'accountTimeZone',\r\n 'changeLayout', 'perfMetricDateRange', 'getPerfTimeSeriesParams',\r\n 'isAdsStudioAIGCMVPEnabled', 'layoutConfig', 'serverContext', 'useInlineDownload',\r\n 'renderDatePicker', 'updateGlobalWaterfallFilter', 'renderDetailsList', 'renderToolbarContainer', 'renderHeaderWithPopup', 'createFolderFilterQuery', 'isAIGCRegionRestricted', 'setDataLoaded',\r\n ]\r\n ), { pageName: PageNameForLog.Performance }), 'performancePage'),\r\n HomePage: withPagePerfMarker(withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withLibraryFoldersService(withFilterContext(HomePage)),\r\n ['perfMetricDateRange', 'isAdsStudioAIGCMVPEnabled', 'navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'reload', 'globalLegacyI18n', 'dateFormat', 'pagePerfMarker', 'isAIGCRegionRestricted', 'permissions', 'adsStudioUserPreferences', 'adsStudioAccountPreferences', 'setDataLoaded']\r\n ), { pageName: PageNameForLog.Home }), 'homePage'),\r\n ImagesPage: withPagePerfMarker(withCustomLogForPage(withLibraryAssetsService(\r\n withFilterContext(ImagesPage),\r\n { assetType: FolderAssetType.Image }\r\n ), { pageName: PageNameForLog.Images }), 'imagePage'),\r\n DisplayTemplatesPage: withPagePerfMarker(withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withDisplayTemplatesService(DisplayTemplatesPage),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'pagePerfMarker', 'permissions', 'preferenceService', 'serverContext', 'setDataLoaded']\r\n ), { pageName: PageNameForLog.DisplayTemplates }), 'displayTemplatePage'),\r\n CreateVideoPage: withPagePerfMarker(withCustomLogForPage(withAdsStudioServicesConsumer(\r\n EditVideoPage,\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker', 'permissions', 'preferenceService', 'serverContext', 'loadClipchampPlayer', 'pagePerfMarker', 'setDataLoaded']\r\n ), { pageName: PageNameForLog.EditVideoPage }), 'videoCreatePage'),\r\n EditVideoPage: withPagePerfMarker(withCustomLogForPage(withAdsStudioServicesConsumer(\r\n EditVideoPage,\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker', 'permissions', 'preferenceService', 'serverContext', 'loadClipchampPlayer', 'pagePerfMarker', 'setDataLoaded']\r\n ), { pageName: PageNameForLog.EditVideoPage }), 'videoEditPage'),\r\n VideoTemplatesPage: withPagePerfMarker(withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withCopilotDomainDataService(VideoTemplatesPage),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker', 'permissions', 'preferenceService', 'serverContext', 'pagePerfMarker', 'setDataLoaded', 'loadClipchampPlayer']\r\n ), { pageName: PageNameForLog.VideoTemplates }), 'videoTemplatePage'),\r\n VideosPage: withPagePerfMarker(withCustomLogForPage(withLibraryAssetsService(\r\n withFilterContext(VideosPage),\r\n { assetType: FolderAssetType.Video, useVideoNotify }\r\n ), { pageName: PageNameForLog.Videos }), 'videoPage'),\r\n BrandKitPage: withPagePerfMarker(withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withBrandKitService(withEditImageService(BrandKitPage, 'imageEditService')),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker', 'serverContext', 'preferenceService', 'permissions', 'pagePerfMarker', 'setDataLoaded']\r\n ), { pageName: PageNameForLog.BrandKit }), 'brandKitPage'),\r\n LibraryPage: withPagePerfMarker(withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withFilterContext(LibraryPage),\r\n ['navigation', 'logger', 'i18n', 'dateFormat', 'ianaTimeZone', 'cid', 'aid', 'oDataConfig', 'notificationApi', 'isAdsStudioAIGCMVPEnabled', 'adsStudioUserPreferences', 'reload', 'targetDropFolder', 'resetTargetDropFolder', 'pagePerfMarker', 'isAIGCRegionRestricted', 'setDataLoaded', 'permissions']\r\n ), { pageName: PageNameForLog.Library }), 'libraryPage'),\r\n WebsiteImagePanelPage: withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withFilterContext(WebsiteImagePanelPage),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker']\r\n ), { pageName: PageNameForLog.WebsiteImagePanel }),\r\n StockImagePanelPage: withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withFilterContext(StockImagePanelPage),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker']\r\n ), { pageName: PageNameForLog.StockImagePanel }),\r\n InvestImagePanelPage: withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withFilterContext(InvestImagePanelPage),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker']\r\n ), { pageName: PageNameForLog.InvestImagePanel }),\r\n InvestVideoPanelPage: withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withFilterContext(InvestVideoPanelPage),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker']\r\n ), { pageName: PageNameForLog.InvestVideoPanel }),\r\n AddVideoPanelPage: withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withFilterContext(AddVideoPanelPage),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open']\r\n ), { pageName: PageNameForLog.AddVideoPanel }),\r\n SearchResultPage: withPagePerfMarker(withCustomLogForPage(withLibraryAndStockImagesService(withFilterContext(SearchResultPage)), { pageName: PageNameForLog.SearchResultPage }), 'searchResultPage'),\r\n // SearchResultPage: withCustomLogForPage(withAdsStudioServicesConsumer(\r\n // withFilterContext(SearchResultPage),\r\n // ['navigation', 'logger', 'i18n', 'notificationApi', 'search']\r\n // ), { pageName: PageNameForLog.SearchResultPage }),\r\n EditImagePage: withPagePerfMarker(withCustomLogForPage(\r\n withEditImageService(EditImagePage),\r\n { pageName: PageNameForLog.EditImagePage }\r\n ), 'editPage'),\r\n EditDisplayTemplatePage: withPagePerfMarker(withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withDisplayTemplatesService(withBrandKitService(EditDisplayTemplatePage)),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker', 'pagePerfMarker', 'permissions', 'preferenceService', 'serverContext', 'search', 'setDataLoaded']\r\n ), { pageName: PageNameForLog.EditDisplayTemplate }), 'displayTemplateEditPage'),\r\n CreateDisplayTemplatePage: withPagePerfMarker(withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withDisplayTemplatesService(withBrandKitService(CreateDisplayTemplatePage)),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker', 'pagePerfMarker', 'permissions', 'preferenceService', 'serverContext', 'search', 'setDataLoaded']\r\n ), { pageName: PageNameForLog.DisplayTemplates }), 'displayTemplateCreatePage'),\r\n GenerateImagePage: withPagePerfMarker(withCustomLogForPage(withAIGCStockService(GenerateImagePage), { pageName: PageNameForLog.GenerateImagePage }), 'generateImagePage'),\r\n UploadFilesPanelPage: withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withFilterContext(UploadFilesPanelPage),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'mode', 'openSystemUpload', 'globalLegacyI18n', 'perfMarker', 'isUploadImageUpscaleEnabled']\r\n ), { pageName: PageNameForLog.UploadFilesPanelPage }),\r\n UploadFolderPanelPage: withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withFilterContext(UploadFolderPanelPage),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'mode', 'openSystemUpload', 'globalLegacyI18n', 'perfMarker', 'isUploadImageUpscaleEnabled']\r\n ), { pageName: PageNameForLog.UploadFolderPanelPage }),\r\n MixedImagePanelPage: withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withFilterContext(MixedImagePanelPage),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker', 'permissions']\r\n ), { pageName: PageNameForLog.UploadFolderPanelPage }),\r\n MixedVideoPanelPage: withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withFilterContext(MixedVideoPanelPage),\r\n ['navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'perfMarker', 'permissions']\r\n ), { pageName: PageNameForLog.UploadFolderPanelPage }),\r\n AssetDetailsPage: withCustomLogForPage(withAdsStudioServicesConsumer(\r\n withFilterContext(AssetDetailsPage),\r\n ['serverContext', 'navigation', 'logger', 'i18n', 'notificationApi', 'cid', 'aid', 'oDataConfig', 'open', 'assetId', 'assets', 'totalAssetCount', 'folderAssetType', 'loadMoreData', 'renameAsset', 'getGranularityEnum', 'perfMetricDateRange', 'onClose', 'permissions']\r\n ), { pageName: PageNameForLog.AssetDetailsPage }),\r\n BackgroundRemovalModalPage: withCustomLogForPage(withLibraryAssetsService(\r\n withFilterContext(BackgroundRemovalModalPage),\r\n { assetType: FolderAssetType.Image }\r\n ), { pageName: PageNameForLog.BackgroundRemovalModalPage }),\r\n};\r\n\r\nconst AppRoutes = _.compose(\r\n // withLayoutContext,\r\n withActivityContext,\r\n withGenerateImageContext,\r\n withCcJsDataContextProvider,\r\n withAdsStudioServicesProvider,\r\n withAdStudioNavigation,\r\n withAssetTaskStatusPoller\r\n)(getAppRoutes(pages));\r\n\r\nexport const AdsStudioAppShellCMUI = (props) => {\r\n const adsstudioAppShellCMUIProps = _.extend({}, props); // clone the props\r\n props = _.extend(adsstudioAppShellCMUIProps, propsAdapter(adsstudioAppShellCMUIProps)); // adapt props to the expected format\r\n\r\n const { path: ROOT_ROUTE } = useRouteMatch();\r\n const {\r\n serverContext, scope, permissions, activity, preferenceService, updateWaterfallFilter: updateGlobalWaterfallFilter,\r\n } = props;\r\n\r\n const { aid, cid } = scope.values || {};\r\n\r\n const [isAIGCRegionRestricted, setIsAIGCRegionRestricted] = useState(false);\r\n\r\n useEffect(() => {\r\n isCopilotRegionRestricted({\r\n feature: 'AdsStudio',\r\n permissions,\r\n serverContext,\r\n }).then((isRestricted) => {\r\n setIsAIGCRegionRestricted(isRestricted);\r\n });\r\n }, [permissions, serverContext]);\r\n\r\n useEffect(() => () => {\r\n removeAdStudioSurveyTriggerFlag(AdStudioSurveyTriggerFlag.App);\r\n }, []);\r\n\r\n const isAllUploadFlowImageUpscaleEnabled = useMemo(() => (\r\n _.get(permissions, ['dynamic', 'AllUploadFlowImageUpscale']) && !isAIGCRegionRestricted\r\n ), [isAIGCRegionRestricted, permissions]);\r\n\r\n // readonly users\r\n const isReadonly = useMemo(\r\n () => (permissions && permissions.IsReadOnlyUser)\r\n || (serverContext && serverContext.CurrentAccountInActive),\r\n [permissions, serverContext]\r\n );\r\n\r\n const {\r\n updateWaterfallFilter,\r\n adFilterStore,\r\n } = useAdFilter({ preferenceService });\r\n\r\n const perfMetricDateRange = props[WaterfallFilterType.DateFilter];\r\n\r\n const oDataConfig = useMemo(() => getODataConfig(serverContext), [serverContext]);\r\n\r\n const { CurrentAccount, CurrentUser, IsAADUser } = serverContext || {};\r\n const {\r\n LocaleID: lcid,\r\n CultureDateTimeFormat: { ShortDatePattern: dateFormat },\r\n } = CurrentUser || {};\r\n const { TimeZone: accountTimeZone } = CurrentAccount;\r\n\r\n // todo: don't pilot AAD uers for now, remove the AAD check when the feature is GAed\r\n const isAdsStudioAIGCMVPEnabled = !IsAADUser;\r\n\r\n const loggerWithoutPageInfo = useMemo(() => getLoggerWithoutPageInfo(activity, getLogVersion()), [activity]);\r\n\r\n const moreProps = useMemo(() => ({\r\n ROOT_ROUTE,\r\n // adFilterStore={adFilterStore}\r\n // updateWaterfallFilter={updateWaterfallFilter}\r\n // allowedAssetType={null}\r\n aid,\r\n cid,\r\n accountTimeZone,\r\n oDataConfig,\r\n isReadonly,\r\n lcid,\r\n dateFormat,\r\n perfMetricDateRange,\r\n isAdsStudioAIGCMVPEnabled,\r\n isAIGCRegionRestricted,\r\n isUploadImageUpscaleEnabled: isAllUploadFlowImageUpscaleEnabled,\r\n logger: loggerWithoutPageInfo,\r\n adFilterStore,\r\n updateWaterfallFilter,\r\n updateGlobalWaterfallFilter,\r\n }), [ROOT_ROUTE, accountTimeZone, adFilterStore, aid, cid, dateFormat, isAIGCRegionRestricted, isAdsStudioAIGCMVPEnabled, isAllUploadFlowImageUpscaleEnabled, isReadonly, lcid, loggerWithoutPageInfo, oDataConfig, perfMetricDateRange, updateGlobalWaterfallFilter, updateWaterfallFilter]);\r\n\r\n // get cmui theme\r\n const theme = useTheme();\r\n\r\n // customm styles will override the default styles\r\n const customComponentStyles = useCustomStyles();\r\n\r\n // only show it in account level\r\n if (!aid) {\r\n // todo: redirect to somewhere else?\r\n return null;\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\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nAdsStudioAppShellCMUI.propTypes = {\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 permissions: PropTypes.shape({\r\n IsMediaLibraryDetailGridEnabled: PropTypes.bool,\r\n IsReadOnlyUser: PropTypes.bool,\r\n dynamic: PropTypes.shape({\r\n CreativeStudioMediaLibrary: PropTypes.bool,\r\n AdsStudioVideo: PropTypes.bool,\r\n AdsStudioAIGCMVP: PropTypes.bool,\r\n }).isRequired,\r\n }).isRequired,\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentAccountInActive: PropTypes.bool.isRequired,\r\n CurrentAccount: PropTypes.shape({}).isRequired,\r\n CurrentUser: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n scope: PropTypes.oneOfType([PropTypes.instanceOf(QueryParam), PropTypes.shape({})]).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n changeLayout: PropTypes.func,\r\n};\r\n\r\nAdsStudioAppShellCMUI.defaultProps = {\r\n changeLayout: undefined,\r\n};\r\n","import React from 'react';\r\nimport { CivilDate } from 'tc39-proposal-temporal';\r\nimport { WaterfallFilterType } from '@bingads-webui-campaign/filter-storage';\r\nimport { DatePickerWithScope } from '../date-picker/index';\r\n\r\nexport const useDatePicker = (props) => {\r\n const {\r\n minDate, i18n, serverContext, disableCompare, perfMetricDateRange, updateWaterfallFilter,\r\n } = props;\r\n const renderDatePicker = () => {\r\n const civilMinDate = minDate ? new CivilDate(minDate.year, minDate.month, minDate.day) : minDate;\r\n const DatePickerWithPageReady = () => (\r\n
\r\n updateWaterfallFilter({\r\n filterType: WaterfallFilterType.DateFilter,\r\n filter: data,\r\n })}\r\n serverContext={serverContext}\r\n minDate={civilMinDate}\r\n />\r\n
\r\n );\r\n\r\n return ();\r\n };\r\n\r\n return { renderDatePicker };\r\n};\r\n","/* eslint-disable object-curly-newline */\r\nimport React from 'react';\r\nimport { CommonColumn } from '@bingads-webui-grid/campaign-details-list';\r\n\r\nexport const useCommonColumn = () => {\r\n const renderHeaderWithPopup = (props) => {\r\n // for the elements which are sortable and have help-icon, they can cause the a11y bug \"Ensures interactive controls are not nested\"\r\n // to solve this bug, we should remove the \"role = button\" attribute for the header elements\r\n const { column, columnIndex } = props;\r\n const { helpId, sortable } = column;\r\n if (sortable && helpId) {\r\n const headerCell = document.querySelectorAll('.ms-DetailsHeader-cellTitle')[columnIndex - 1];\r\n if (headerCell) {\r\n headerCell.removeAttribute('role');\r\n headerCell.style.cursor = 'pointer';\r\n }\r\n }\r\n return (\r\n \r\n );\r\n };\r\n\r\n return {\r\n renderHeaderWithPopup,\r\n };\r\n};\r\n","import React from 'react';\r\nimport { CampaignDetailsList, ParentColumnPlacement } from '@bingads-webui-grid/campaign-details-list';\r\n\r\nexport const useDetailList = () => {\r\n const renderDetailsList = ({\r\n pagedItems, onSort, toolbar, pager, columns, sortByColumn, expandColumns,\r\n }) => (\r\n {\r\n expandColumns(newColumns);\r\n }}\r\n />\r\n );\r\n\r\n return { renderDetailsList };\r\n};\r\n","import { FolderAssetType } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { ROOT_FOLDER_ID } from '../../../../ads-studio-app-shared-components/src/model';\r\nimport { getFolderRepository } from './folder-repository';\r\n\r\n// simplified version of asset library folder repository for home page\r\nexport const getBasicFoldersRepository = ({\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n perfMetricDateRange,\r\n logger,\r\n}) => {\r\n const folderRepository = getFolderRepository({\r\n logger,\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n });\r\n\r\n const uploadImageToFolder = ({\r\n imageData,\r\n updateCurrentProgress,\r\n imageName,\r\n }) => folderRepository.addFolderUploadAsset({\r\n folderId: ROOT_FOLDER_ID,\r\n asset: { data: imageData, name: imageName },\r\n folderAssetType: FolderAssetType.Image,\r\n inProgress: updateCurrentProgress,\r\n });\r\n\r\n const loadAssets = ({\r\n windowIndex, windowSize,\r\n withBIData = false,\r\n assetsToLoadForSubfolders,\r\n searchTerm,\r\n minWidth,\r\n minHeight,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n dateAddedStart,\r\n dateAddedEnd,\r\n importSource,\r\n assetSources,\r\n sortBy,\r\n folderId = ROOT_FOLDER_ID,\r\n assetType = null,\r\n includeAssets = true,\r\n includeSubfolders = true,\r\n includeParentHierarchy = false,\r\n isGlobalSearch = false,\r\n isAssetPickerScenario = false,\r\n hasPerfData = false,\r\n topRated = false,\r\n isSemanticSearch = false,\r\n isRecentSorting = false,\r\n }) => {\r\n const top = windowSize;\r\n const skip = windowIndex * windowSize;\r\n const $ret = folderRepository.getFolderData({\r\n skip,\r\n count: top,\r\n withBIData,\r\n assetsToLoadForSubfolders,\r\n perfMetricDateRange,\r\n sortBy,\r\n folderId,\r\n assetType,\r\n includeAssets,\r\n includeSubfolders,\r\n includeParentHierarchy,\r\n isAssetPickerScenario,\r\n // filter settings\r\n assetSources,\r\n dateAddedStart,\r\n dateAddedEnd,\r\n hasPerfData,\r\n importSource,\r\n isGlobalSearch,\r\n minWidth,\r\n minHeight,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n searchTerm,\r\n topRated,\r\n isSemanticSearch,\r\n isRecentSorting,\r\n }).then((response) => {\r\n const { folder } = response || {};\r\n const {\r\n assets,\r\n itemCount,\r\n // folderId,\r\n // folderName,\r\n // parentFolderId,\r\n subfolders,\r\n // parentHierarchy,\r\n } = folder || {};\r\n\r\n const folders = subfolders.map(subfolder =>\r\n ({\r\n folderAssetType: 'Folder',\r\n ...subfolder,\r\n }));\r\n\r\n return {\r\n assets: [...assets, ...folders],\r\n totalItemCount: (itemCount && itemCount.TotalCount) || 0,\r\n };\r\n });\r\n return $ret;\r\n };\r\n\r\n const renameAsset = ({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n }) => {\r\n const $ret = folderRepository.renameAsset({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n });\r\n return $ret;\r\n };\r\n\r\n return {\r\n loadAssets,\r\n renameAsset,\r\n uploadImageToFolder,\r\n updateVideoStatusByIds: folderRepository.updateVideoStatusByIds,\r\n };\r\n};\r\n","import React from 'react';\r\n\r\nimport { HomePageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const HomePage = props => (\r\n \r\n);\r\n","import React from 'react';\r\n\r\nimport { ImagesPageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const ImagesPage = props => (\r\n \r\n);\r\n","import React from 'react';\r\nimport { DisplayTemplatesPageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const DisplayTemplatesPage = props => ;\r\n","import React from 'react';\r\nimport { VideoTemplatesPageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\n\r\nexport const VideoTemplatesPage = props => ;\r\n","import React from 'react';\r\n\r\nimport { VideosPageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\n\r\nexport const VideosPage = props => (\r\n \r\n);\r\n","import React from 'react';\r\nimport { BrandKitPageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\n\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const BrandKitPage = props => ;\r\n","import React, { useCallback } from 'react';\r\n\r\nimport { LibraryPageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\nimport { useBatchMoveModal } from './target-folder-picker';\r\n\r\nexport const LibraryPage = (props) => {\r\n const renderHelpPopup = useCallback(popupId => (\r\n \r\n ), []);\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import React from 'react';\r\n\r\nimport { WebsiteImagePanel } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const WebsiteImagePanelPage = props => (\r\n \r\n);\r\n","import React from 'react';\r\n\r\nimport { StockImagePanel } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const StockImagePanelPage = props => (\r\n \r\n);\r\n","import React from 'react';\r\n\r\nimport { InvestImagePanel } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const InvestImagePanelPage = props => (\r\n \r\n);\r\n","import React from 'react';\r\n\r\nimport { InvestVideoPanel } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const InvestVideoPanelPage = props => (\r\n \r\n);\r\n","import React from 'react';\r\n\r\nimport { AddVideoPanel } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const AddVideoPanelPage = props => (\r\n \r\n);\r\n","import { getStockImageRepository } from './stock-image-repository';\r\nimport { getBasicAssetsRepository } from './basic-assets-repository';\r\n\r\nexport const getLibraryAndStockImageRepository = ({\r\n aid,\r\n cid,\r\n oDataConfig,\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n assetType,\r\n logger,\r\n}) => {\r\n const sourceNames = ['library', 'stockImage'];\r\n //\r\n const libraryRepository = getBasicAssetsRepository({\r\n folderODataService,\r\n i18n,\r\n ianaTimeZone,\r\n timezoneUTCOffset,\r\n assetType,\r\n logger,\r\n });\r\n\r\n const stockImageRepository = getStockImageRepository({\r\n aid, cid, oDataConfig,\r\n });\r\n\r\n const loadAssets = ({\r\n windowIndex, windowSize, sourceName, ...rest\r\n }) => {\r\n let $ret = null;\r\n if (sourceName === 'stockImage') {\r\n $ret = stockImageRepository.loadAssets({ windowIndex, windowSize, ...rest });\r\n } else {\r\n $ret = libraryRepository.loadAssets({\r\n windowIndex,\r\n windowSize,\r\n isSemanticSearch: true,\r\n ...rest,\r\n });\r\n }\r\n return $ret;\r\n };\r\n\r\n return {\r\n loadAssets,\r\n renameAsset: libraryRepository.renameAsset,\r\n sourceNames,\r\n };\r\n};\r\n","import React from 'react';\r\n\r\nimport { SearchResultView } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const SearchResultPage = props => (\r\n \r\n);\r\n","import React, { useMemo } from 'react';\r\nimport _ from 'underscore';\r\nimport { useParams } from 'react-router-dom';\r\n\r\nimport { EditImagePageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { MediaRepository } from '@bingads-webui-campaign/media-repository';\r\nimport { getSmartCropSettingsFactory } from '@bingads-webui-campaign-react/unified-ad-preview-library-cmui';\r\nimport { MultiLineEllipsisText } from '@bingads-webui-react/multiline-ellipsis';\r\n\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const EditImagePage = (props) => {\r\n const {\r\n aid, cid, oDataConfig, logger,\r\n } = props;\r\n const { imageId } = useParams();\r\n const mediaRepository = useMemo(() => new MediaRepository({\r\n cid, aid, oDataConfig,\r\n }), [aid, cid, oDataConfig]);\r\n\r\n const getSmartCroppings = useMemo(\r\n () => getSmartCropSettingsFactory(mediaRepository, { trace: logger ? logger.traceWithoutParams : _.noop }),\r\n [logger, mediaRepository]\r\n );\r\n return ;\r\n};\r\n","import React, { useCallback } from 'react';\r\n\r\nimport { GenerateImagePageComponent } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { HelpButton } from '@bingads-webui-react/help-popup';\r\nimport { MultiLineEllipsisText } from '@bingads-webui-react/multiline-ellipsis';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const GenerateImagePage = (props) => {\r\n const renderHelpButton = useCallback(popupId => (\r\n \r\n ), []);\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import React from 'react';\r\n\r\nimport { MixedImagePanel } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const MixedImagePanelPage = props => (\r\n \r\n);\r\n","import React from 'react';\r\n\r\nimport { MixedVideoPanel } from '@bingads-webui-campaign-react/ads-studio-app-components';\r\nimport { notificationApi } from '../../adapters/get-notification';\r\n\r\nexport const MixedVideoPanelPage = props => (\r\n \r\n);\r\n","import React, { useCallback, useMemo, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport { useJsData } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { LocalNavigationRoute } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { AdsStudioPageName, isValidXandrAccount } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useNavigation } from './use-navigation';\r\n\r\nexport const getAppRoutes = ({\r\n // decouple with pages to make it easy to UT\r\n PerformancePage,\r\n HomePage,\r\n ImagesPage,\r\n VideosPage,\r\n VideoTemplatesPage,\r\n CreateVideoPage,\r\n EditVideoPage,\r\n BrandKitPage,\r\n CreateDisplayTemplatePage,\r\n DisplayTemplatesPage,\r\n EditDisplayTemplatePage,\r\n LibraryPage,\r\n WebsiteImagePanelPage,\r\n StockImagePanelPage,\r\n InvestImagePanelPage,\r\n InvestVideoPanelPage,\r\n AddVideoPanelPage,\r\n SearchResultPage,\r\n GenerateImagePage,\r\n UploadFilesPanelPage,\r\n UploadFolderPanelPage,\r\n MixedImagePanelPage,\r\n MixedVideoPanelPage,\r\n EditImagePage,\r\n AssetDetailsPage,\r\n BackgroundRemovalModalPage,\r\n}) => {\r\n const Routes = ({\r\n ROOT_ROUTE,\r\n history,\r\n location,\r\n adFilterStore,\r\n updateWaterfallFilter,\r\n permissions,\r\n ...rest\r\n }) => {\r\n const { search } = location || {};\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 && rest.aid ? jsData.Account.find(rest.aid) : Promise.resolve()), [rest.aid, isXandrIntEnabled]);\r\n const isXandrIntegrationEnabled = useMemo(() => (isXandrIntEnabled ? isValidXandrAccount(account) : false), [account, isXandrIntEnabled]);\r\n\r\n // use this value as prop to pages and when it's changed it will trigger pages re-rendering\r\n const forceToReloadRef = useRef(null);\r\n const forceToReload = useCallback(() => {\r\n forceToReloadRef.current = {};\r\n }, []);\r\n\r\n //\r\n const navigation = useNavigation({\r\n rootRoute: ROOT_ROUTE,\r\n history,\r\n search,\r\n forceToReload,\r\n // goBack: historyStackRef.current.goBack,\r\n adFilterStore,\r\n updateWaterfallFilter,\r\n });\r\n\r\n // add additional props to pages related to navigation\r\n const pageProps = useMemo(() => ({\r\n navigation, // provide methods navigate among different pages\r\n reload: forceToReloadRef.current, // used to trigger pages re-rendering\r\n permissions,\r\n ...rest,\r\n }), [navigation, rest, permissions]);\r\n\r\n const renderSearchResultPage = useCallback(() => , [pageProps, search]);\r\n\r\n const renderPerformancePage = useCallback(() => , [pageProps]);\r\n\r\n const renderHomePage = useCallback(() => , [pageProps]);\r\n\r\n const renderImagesPage = useCallback(() => , [pageProps]);\r\n\r\n const renderDisplayTemplatesPage = useCallback(() => , [pageProps]);\r\n\r\n const renderVideosPage = useCallback(() => , [pageProps]);\r\n\r\n const renderVideoTemplatesPage = useCallback(() => , [pageProps]);\r\n\r\n const renderEditVideoPage = useCallback(() => , [pageProps]);\r\n\r\n const renderCreateVideoPage = useCallback(() => , [pageProps]);\r\n\r\n const renderBrandKitPage = useCallback(() => , [pageProps]);\r\n\r\n const renderLibraryPage = useCallback(() => , [pageProps]);\r\n\r\n const renderGenerateImagePage = useCallback(() => , [pageProps, search]);\r\n\r\n const renderEditImagePage = useCallback(() => , [pageProps, search]);\r\n\r\n const renderCreateDisplayTemplatePage = useCallback(() => , [pageProps, search]);\r\n\r\n const renderEditDisplayTemplatePage = useCallback(() => , [pageProps, search]);\r\n\r\n return (\r\n <>\r\n \r\n {/* performance page */}\r\n \r\n {/* edit image page */}\r\n \r\n {/* images page */}\r\n \r\n {/* create display template page */}\r\n \r\n {/* edit display template page */}\r\n \r\n {/* display templates page */}\r\n \r\n {/* videos page */}\r\n \r\n {/* video templates page */}\r\n \r\n {/* create video page */}\r\n \r\n {/* edit video page */}\r\n \r\n {/* brand kit page */}\r\n \r\n {/* library page */}\r\n \r\n {/* search result page */}\r\n \r\n {/* render generate image page */}\r\n {rest.isAdsStudioAIGCMVPEnabled && !rest.isAIGCRegionRestricted && }\r\n {/* landing page */}\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 {isXandrIntegrationEnabled && } />}\r\n {isXandrIntegrationEnabled && } />}\r\n \r\n );\r\n };\r\n\r\n Routes.propTypes = {\r\n history: PropTypes.shape({\r\n push: PropTypes.func.isRequired,\r\n goBack: PropTypes.func.isRequired,\r\n }).isRequired,\r\n location: PropTypes.shape({\r\n search: PropTypes.string,\r\n }).isRequired,\r\n ROOT_ROUTE: PropTypes.string.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n };\r\n\r\n Routes.defaultProps = {\r\n permissions: { dynamic: {} },\r\n };\r\n\r\n return Routes;\r\n};\r\n","import { useCallback, useEffect } from 'react';\r\nimport Promise from 'bluebird';\r\n\r\nimport { WaterfallFilterType } from '@bingads-webui-campaign/filter-storage';\r\nimport { FolderAssetType, AdsStudioPageName, getSearchQuery, AdditionalQueries } from '@bingads-webui-campaign-react/ads-studio-app-shared-components';\r\nimport { useLocalNavigation } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\n\r\n// this hook is used to navigate between different pages in the app\r\nexport const useNavigation = ({\r\n rootRoute,\r\n history,\r\n search,\r\n forceToReload,\r\n adFilterStore,\r\n updateWaterfallFilter,\r\n}) => {\r\n const localNavigation = useLocalNavigation();\r\n\r\n const gotoCampaignUIPage = useCallback(({ subpath }, openInNewTab) => {\r\n const url = `/campaign/vnext/${subpath}${search}`;\r\n if (openInNewTab && window && window.open) {\r\n window.open(url, '_blank');\r\n } else {\r\n history.push(url);\r\n }\r\n }, [history, search]);\r\n\r\n // home page\r\n const gotoHomePage = useCallback(({ redirect = true, reload = false, removeSearchQuery = [] } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n const currentSearch = getSearchQuery({ search, removeSearchQuery });\r\n if (redirect) {\r\n history.replace(`${rootRoute}/home${currentSearch}`);\r\n } else {\r\n history.push(`${rootRoute}/home${currentSearch}`);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n const gotoSearchResultPage = useCallback(({ redirect = false, reload = false, query = '' } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n const additionalQueries = {\r\n [AdditionalQueries.Query]: query,\r\n };\r\n const currentSearch = getSearchQuery({ search, additionalQueries });\r\n if (redirect) {\r\n history.replace(`${rootRoute}/home/search${currentSearch}`);\r\n } else {\r\n history.push(`${rootRoute}/home/search${currentSearch}`);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n // performance page\r\n const gotoPerformancePage = useCallback(({ redirect = false, reload = false } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n const currentSearch = getSearchQuery({ search });\r\n if (redirect) {\r\n history.replace(`${rootRoute}/performance${currentSearch}`);\r\n } else {\r\n history.push(`${rootRoute}/performance${currentSearch}`);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n const gotoImagesPage = useCallback(({ redirect = false, reload = false, removeSearchQuery = [] } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n const currentSearch = getSearchQuery({ search, removeSearchQuery });\r\n if (redirect) {\r\n history.replace(`${rootRoute}/images${currentSearch}`);\r\n } else {\r\n history.push(`${rootRoute}/images${currentSearch}`);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n const gotoVideosPage = useCallback(({ redirect = false, reload = false } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n const currentSearch = getSearchQuery({ search });\r\n if (redirect) {\r\n history.replace(`${rootRoute}/videos${currentSearch}`);\r\n } else {\r\n history.push(`${rootRoute}/videos${currentSearch}`);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n const gotoLibraryPage = useCallback(({ redirect = false, reload = false } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n const currentSearch = getSearchQuery({ search });\r\n if (redirect) {\r\n history.replace(`${rootRoute}/library${currentSearch}`);\r\n } else {\r\n history.push(`${rootRoute}/library${currentSearch}`);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n const gotoEditImagePage = useCallback(({\r\n imageId, folderId, editImageUrl, redirect = false, reload = false, initialCurrentView = '', query,\r\n } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n const additionalQueries = {\r\n [AdditionalQueries.FolderId]: folderId,\r\n [AdditionalQueries.EditImageUrl]: editImageUrl,\r\n };\r\n if (initialCurrentView) {\r\n additionalQueries[AdditionalQueries.InitialCurrentView] = initialCurrentView;\r\n }\r\n if (query) {\r\n additionalQueries[AdditionalQueries.Query] = query;\r\n }\r\n const currentSearch = getSearchQuery({ search, additionalQueries });\r\n const url = `${rootRoute}/images/${imageId}/edit${currentSearch}`;\r\n if (redirect) {\r\n history.replace(url);\r\n } else {\r\n history.push(url);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n const gotoEditDisplayImagePage = useCallback(({\r\n imageId, folderId, templateId, redirect = true, reload = false, query,\r\n } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n\r\n const additionalQueries = {\r\n [AdditionalQueries.FolderId]: folderId,\r\n [AdditionalQueries.TemplateId]: templateId,\r\n };\r\n if (query) {\r\n additionalQueries[AdditionalQueries.Query] = query;\r\n }\r\n const currentSearch = getSearchQuery({ search, additionalQueries });\r\n const url = `${rootRoute}/displaytemplates/${imageId}/edit${currentSearch}`;\r\n if (redirect) {\r\n history.replace(url);\r\n } else {\r\n history.push(url);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n // goback\r\n const goBack = useCallback(({ reload } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n // pop up local views first\r\n if (localNavigation.getTopView()) {\r\n localNavigation.popLocalView();\r\n return;\r\n }\r\n history.goBack();\r\n }, [forceToReload, history, localNavigation]);\r\n\r\n const gotoWebsiteImagePanelPage = useCallback((params) => {\r\n localNavigation.pushLocalView(AdsStudioPageName.WebsiteImagePanelPage, params);\r\n }, [localNavigation]);\r\n\r\n const gotoStockImagePanelPage = useCallback((params) => {\r\n localNavigation.pushLocalView(AdsStudioPageName.StockImagePanelPage, params);\r\n }, [localNavigation]);\r\n\r\n const gotoInvestImagePanelPage = useCallback((params) => {\r\n localNavigation.pushLocalView(AdsStudioPageName.InvestImagePanelPage, params);\r\n }, [localNavigation]);\r\n\r\n const gotoInvestVideoPanelPage = useCallback((params) => {\r\n localNavigation.pushLocalView(AdsStudioPageName.InvestVideoPanelPage, params);\r\n }, [localNavigation]);\r\n\r\n const gotoAIGenerationPanelPage = useCallback(({ folderId, redirect = false, reload = false } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n const additionalQueries = {\r\n [AdditionalQueries.FolderId]: folderId,\r\n };\r\n const currentSearch = getSearchQuery({ search, additionalQueries });\r\n if (redirect) {\r\n history.replace(`${rootRoute}/generateimage${currentSearch}`);\r\n } else {\r\n history.push(`${rootRoute}/generateimage${currentSearch}`);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n const gotoDisplayTemplatesCreationPage = useCallback(({ redirect, templateGroupId } = {}) => {\r\n const additionalQueries = {\r\n [AdditionalQueries.TemplateGroupId]: templateGroupId,\r\n };\r\n const currentSearch = getSearchQuery({ search, additionalQueries });\r\n\r\n if (redirect) {\r\n history.replace(`${rootRoute}/displaytemplates/create${currentSearch}`);\r\n } else {\r\n history.push(`${rootRoute}/displaytemplates/create${currentSearch}`);\r\n }\r\n }, [history, rootRoute, search]);\r\n\r\n const gotoDisplayTemplatesPage = useCallback(({ redirect, removeSearchQuery = [] } = {}) => {\r\n const currentSearch = getSearchQuery({ search, removeSearchQuery });\r\n\r\n if (redirect) {\r\n history.replace(`${rootRoute}/displaytemplates${currentSearch}`);\r\n } else {\r\n history.push(`${rootRoute}/displaytemplates${currentSearch}`);\r\n }\r\n }, [history, rootRoute, search]);\r\n\r\n const gotoVideoTemplatePage = useCallback(({ redirect = false, reload = false } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n const currentSearch = getSearchQuery({ search });\r\n if (redirect) {\r\n history.replace(`${rootRoute}/videotemplates${currentSearch}`);\r\n } else {\r\n history.push(`${rootRoute}/videotemplates${currentSearch}`);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n const gotoCreateVideoPage = useCallback(({ redirect = false, reload = false } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n const currentSearch = getSearchQuery({ search });\r\n const url = `${rootRoute}/video/create${currentSearch}`;\r\n if (redirect) {\r\n history.replace(url);\r\n } else {\r\n history.push(url);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n const gotoEditVideoPage = useCallback(({ videoId, redirect = false, reload = false } = {}) => {\r\n if (reload) {\r\n forceToReload();\r\n }\r\n const currentSearch = getSearchQuery({ search });\r\n const url = `${rootRoute}/video/${videoId}/edit${currentSearch}`;\r\n if (redirect) {\r\n history.replace(url);\r\n } else {\r\n history.push(url);\r\n }\r\n }, [forceToReload, history, rootRoute, search]);\r\n\r\n const gotoAddVideoPanelPage = useCallback((params) => {\r\n localNavigation.pushLocalView(AdsStudioPageName.AddVideoPanelPage, params);\r\n }, [localNavigation]);\r\n\r\n const gotoUploadFilesPanelPage = useCallback((params) => {\r\n localNavigation.pushLocalView(AdsStudioPageName.UploadFilesPanelPage, params);\r\n }, [localNavigation]);\r\n\r\n const gotoUploadFolderPanelPage = useCallback((params) => {\r\n localNavigation.pushLocalView(AdsStudioPageName.UploadFolderPanelPage, params);\r\n }, [localNavigation]);\r\n\r\n const gotoMixedImagePanelPage = useCallback((params) => {\r\n localNavigation.pushLocalView(AdsStudioPageName.MixedImagePanelPage, params);\r\n }, [localNavigation]);\r\n\r\n const gotoMixedVideoPanelPage = useCallback((params) => {\r\n localNavigation.pushLocalView(AdsStudioPageName.MixedVideoPanelPage, params);\r\n }, [localNavigation]);\r\n\r\n const gotoAssetDetails = useCallback((params) => {\r\n localNavigation.pushLocalView(AdsStudioPageName.AssetDetailsPage, params);\r\n }, [localNavigation]);\r\n\r\n const gotoBackgroundRemovalModal = useCallback((params) => {\r\n localNavigation.pushLocalView(AdsStudioPageName.BackgroundRemovalModalPage, params);\r\n }, [localNavigation]);\r\n\r\n const updateAssetDetailsParams = useCallback((params) => {\r\n const oldParams = localNavigation.getViewParams(AdsStudioPageName.AssetDetailsPage);\r\n const newParams = { ...oldParams, ...params };\r\n const oldParamsStr = JSON.stringify(oldParams);\r\n const newParamsStr = JSON.stringify(newParams);\r\n if (newParams && oldParamsStr !== newParamsStr) {\r\n localNavigation.setViewParams(AdsStudioPageName.AssetDetailsPage, newParams);\r\n }\r\n }, [localNavigation]);\r\n\r\n const gotoAdsPageWithFilter = useCallback(({ filterProperty, filterValue }, openInNewTab) => {\r\n // set ad grid filter\r\n const filter = {\r\n [filterProperty]: { $contains: filterValue },\r\n };\r\n const savingPromise = adFilterStore.save({ query: filter }, true);\r\n\r\n // set campaign type filter to All Campaigns\r\n updateWaterfallFilter({\r\n filterType: WaterfallFilterType.CampaignType,\r\n filter: { key: WaterfallFilterType.CampaignType, value: { query: null } },\r\n });\r\n\r\n // navigate to ads page once filter is saved\r\n const timeoutPromise = Promise.delay(3000);\r\n return Promise.any([savingPromise, timeoutPromise]).then(() => {\r\n gotoCampaignUIPage({ subpath: 'ads' }, openInNewTab);\r\n });\r\n }, [adFilterStore, gotoCampaignUIPage, updateWaterfallFilter]);\r\n\r\n const gotoAdsPageWithAssetIdFilter = useCallback(({ folderAssetType, assetId }, openInNewTab) => {\r\n const AssetIdFilterPropertyConfig = {\r\n [FolderAssetType.Image]: 'ResponsiveAdImageId',\r\n [FolderAssetType.Video]: 'ResponsiveAdVideoId',\r\n };\r\n const filterProperty = AssetIdFilterPropertyConfig[folderAssetType];\r\n const filterValue = assetId;\r\n return gotoAdsPageWithFilter({ filterProperty, filterValue }, openInNewTab);\r\n }, [gotoAdsPageWithFilter]);\r\n\r\n useEffect(() => {\r\n // pop up local views first when switch page\r\n if (localNavigation && localNavigation.getTopView && localNavigation.getTopView()) {\r\n localNavigation.popLocalView();\r\n }\r\n // localNavigation can not be included in the dependencies\r\n }, [history.location.pathname]);\r\n\r\n return {\r\n gotoHomePage,\r\n gotoPerformancePage,\r\n gotoImagesPage,\r\n gotoVideosPage,\r\n gotoLibraryPage,\r\n gotoEditImagePage,\r\n gotoEditDisplayImagePage,\r\n goBack,\r\n gotoCampaignUIPage,\r\n gotoAdsPageWithAssetIdFilter,\r\n gotoWebsiteImagePanelPage,\r\n gotoStockImagePanelPage,\r\n gotoInvestImagePanelPage,\r\n gotoInvestVideoPanelPage,\r\n gotoAIGenerationPanelPage,\r\n gotoDisplayTemplatesCreationPage,\r\n gotoDisplayTemplatesPage,\r\n gotoAddVideoPanelPage,\r\n gotoSearchResultPage,\r\n gotoUploadFilesPanelPage,\r\n gotoUploadFolderPanelPage,\r\n gotoMixedImagePanelPage,\r\n gotoMixedVideoPanelPage,\r\n gotoAssetDetails,\r\n updateAssetDetailsParams,\r\n gotoBackgroundRemovalModal,\r\n gotoVideoTemplatePage,\r\n gotoCreateVideoPage,\r\n gotoEditVideoPage,\r\n };\r\n};\r\n","import { getI18n } from './get-i18n';\r\nimport { getServerContext } from './get-server-context';\r\n\r\n\r\nexport const propsAdapter = (props) => {\r\n const { i18n, serverContext } = props;\r\n return {\r\n i18n: getI18n(i18n),\r\n serverContext: getServerContext(serverContext),\r\n };\r\n};\r\n","import { useCustomLandingPageStyles } from './custom-landing-page-styles';\r\n\r\n// define custom styles for specific components in a specific platform\r\nexport const useCustomStyles = () => {\r\n const customLandingPageStyles = useCustomLandingPageStyles();\r\n return {\r\n AdsStudioLandingPageComponent: customLandingPageStyles,\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 _ 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\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 showEditIcon = ((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 { 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 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 _ 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","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 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","import { ItemBox } from './itemBox';\r\n\r\n// with the top, left information, we could place the item with absolute position\r\ninterface ItemPosition {\r\n top: number;\r\n left: number;\r\n}\r\n\r\nexport class ItemLayout {\r\n columnCount: number;\r\n columnWidth: number;\r\n columnPadding: number;\r\n rowPadding: number;\r\n itemCount: number;\r\n columnHeights: number [][];\r\n itemPositions: ItemPosition | null [];\r\n itemBox: ItemBox;\r\n maxHeight: number | null;\r\n\r\n constructor({\r\n columnCount,\r\n columnWidth,\r\n columnPadding,\r\n rowPadding,\r\n itemBox,\r\n itemCount,\r\n }) {\r\n this.columnCount = columnCount;\r\n this.columnWidth = columnWidth;\r\n this.columnPadding = columnPadding;\r\n this.rowPadding = rowPadding;\r\n\r\n this.columnHeights = [];\r\n this.itemPositions = [];\r\n this.columnHeights[0] = Array.from({ length: columnCount }).map(x => 0);\r\n this.itemBox = itemBox;\r\n this.itemCount = itemCount;\r\n }\r\n\r\n getItemPosition(index) {\r\n const { positionChecked } = this.itemBox.getBox(index);\r\n // if we are too slow to get the position, recalculate all the items at this time\r\n if (positionChecked === false) {\r\n for (let i = 0; i < index; i++) {\r\n this.setItemPosition(i);\r\n }\r\n }\r\n if (this.itemPositions[index]) {\r\n return this.itemPositions[index];\r\n }\r\n return null;\r\n }\r\n\r\n setItemPosition(index) {\r\n const { height: itemHeight, width: itemWidth } = this.itemBox.getBox(index);\r\n\r\n if (this.columnHeights[index] == null || itemHeight == null) {\r\n this.itemPositions[index] = null;\r\n return;\r\n }\r\n\r\n const columnHeights = this.columnHeights[index];\r\n\r\n const minIndex = this.minHeightColumn(columnHeights);\r\n\r\n const top = columnHeights[minIndex];\r\n\r\n const left = minIndex * (this.columnWidth + this.columnPadding);\r\n\r\n const nextColumnHeights = [...columnHeights];\r\n\r\n const targetItemHeight = itemWidth > 0 ? this.columnWidth * (itemHeight / itemWidth) : itemHeight;\r\n\r\n nextColumnHeights[minIndex] = top + targetItemHeight + this.rowPadding;\r\n\r\n this.columnHeights[index + 1] = [...nextColumnHeights];\r\n\r\n this.itemPositions[index] = {\r\n top,\r\n left,\r\n };\r\n\r\n this.itemBox.checked(index);\r\n }\r\n\r\n updateLayout({\r\n columnCount,\r\n columnWidth,\r\n columnPadding,\r\n rowPadding,\r\n itemBox,\r\n itemCount,\r\n }) {\r\n this.columnCount = columnCount;\r\n this.columnWidth = columnWidth;\r\n this.columnPadding = columnPadding;\r\n this.rowPadding = rowPadding;\r\n\r\n this.columnHeights = [];\r\n this.itemPositions = [];\r\n this.columnHeights[0] = Array.from({ length: columnCount }).map(x => 0);\r\n this.itemBox = itemBox;\r\n this.itemCount = itemCount;\r\n this.maxHeight = null;\r\n\r\n // recalculate all the items\r\n for (let i = 0; i < this.itemCount; i++) {\r\n this.setItemPosition(i);\r\n }\r\n }\r\n\r\n placeItems() {\r\n if (this.itemBox.lastUpdateIndex == null) {\r\n return;\r\n }\r\n\r\n // recalculate all the items after the one updated\r\n let i = this.itemBox.lastUpdateIndex;\r\n while (i < this.itemCount) {\r\n this.setItemPosition(i);\r\n i += 1;\r\n }\r\n\r\n this.itemBox.lastUpdateIndex = null;\r\n }\r\n\r\n getMaxHeight() {\r\n if (this.columnHeights[this.itemCount]) {\r\n const heights = this.columnHeights[this.itemCount];\r\n let maxHeight = heights[0];\r\n for (let i = 1; i < heights.length; i++) {\r\n if (heights[i] > maxHeight) {\r\n maxHeight = heights[i];\r\n }\r\n }\r\n return maxHeight;\r\n }\r\n // guessed height\r\n return (this.itemCount / this.columnCount) * 240;\r\n }\r\n\r\n setItemCount(count) {\r\n this.itemCount = count;\r\n }\r\n\r\n minHeightColumn(columnHeights) : number {\r\n let smallest = 0;\r\n for (let i = 1; i < columnHeights.length; i++) {\r\n if (columnHeights[i] < columnHeights[smallest]) {\r\n smallest = i;\r\n }\r\n }\r\n return smallest;\r\n }\r\n}\r\n","interface Box {\r\n height: number,\r\n width: number,\r\n positionChecked: boolean,\r\n}\r\n\r\nexport class ItemBox {\r\n itemBoxes: Box [];\r\n lastUpdateIndex: number | undefined | null;\r\n\r\n constructor() {\r\n this.itemBoxes = [];\r\n }\r\n\r\n setBox(index, height, width) {\r\n this.itemBoxes[index] = { height, width, positionChecked: false };\r\n if (this.lastUpdateIndex == null || index <= this.lastUpdateIndex) {\r\n this.lastUpdateIndex = index;\r\n }\r\n }\r\n\r\n checked(index) {\r\n this.itemBoxes[index].positionChecked = true;\r\n }\r\n\r\n getBox(index) {\r\n if (this.itemBoxes[index]) return this.itemBoxes[index];\r\n return ({ height: null, width: null, positionChecked: false });\r\n }\r\n}\r\n","/*\r\n 1. To layout the items, we need to know the height of items => Use ItemMeasurer with ResizeObserver to track the height of items\r\n 2. With the height of items, itemLayout will calculate the positions of items with the height, width and columns\r\n 3. With the positions of items, we could place the items with absolute style\r\n 4. With the absolute positions, we could do the virtualization by showing only the visible item via the scrollTop and offset.\r\n*/\r\n\r\nimport React, { useState, useRef, useCallback, useLayoutEffect, useMemo, useEffect } from 'react';\r\nimport { List, ListItem } from '@fluentui/react-list-preview';\r\nimport { ResizeObserver as ResizeObserverPollyFill } from '@juggle/resize-observer';\r\nimport { debounce } from 'underscore';\r\n\r\nimport { ItemLayout } from './itemLayout';\r\nimport { ItemBox } from './itemBox';\r\n\r\n\r\nconst COLUMN_WIDTH = 240.5;\r\nconst ROW_HEIGHT = 200;\r\nconst PADDING = 24;\r\n\r\n/*\r\nThe Masonry or Pinterest layout\r\n*/\r\n\r\nconst layouts = {\r\n Mansory: 'Mansory',\r\n Grid: 'Grid',\r\n};\r\n\r\ninterface itemProps {\r\n item: any,\r\n}\r\n\r\ninterface GridProps {\r\n items: any,\r\n // layout?: string, // TODO: support GRID\r\n rowPadding?: number,\r\n columnPadding?: number,\r\n renderItem: () => JSX.Element,\r\n columnWidth?: number,\r\n rowHeight?: number,\r\n scrollContainer?: any,\r\n minItemHeight?: number,\r\n gridMode?: boolean,\r\n maxColumns?: number,\r\n}\r\n\r\ninterface GridInternalProps {\r\n items: any [],\r\n columnWidth: number,\r\n rowHeight?: number,\r\n renderItem: (props: itemProps) => JSX.Element,\r\n itemLayout: ItemLayout,\r\n itemBox: ItemBox,\r\n itemBoxChanged: (cancel: any) => void,\r\n isItemBoxChanged: any,\r\n offset: any,\r\n scrollTop: any,\r\n windowRect: any,\r\n minItemHeight?: number,\r\n gridMode: boolean,\r\n}\r\n\r\ninterface WrappedItemProps {\r\n item: any,\r\n columnWidth: number,\r\n rowHeight?: number,\r\n renderItem: (props: itemProps) => JSX.Element,\r\n itemLayout: ItemLayout,\r\n itemBox: ItemBox,\r\n itemBoxChanged: (cancel: any) => void,\r\n minItemHeight?: number,\r\n gridMode: boolean,\r\n}\r\n\r\ninterface ItemMeasurerProps {\r\n item: any,\r\n itemBoxChanged: (cancel: any) => void,\r\n itemBox: ItemBox,\r\n renderItem: (props: itemProps) => JSX.Element,\r\n gridMode: boolean,\r\n}\r\n\r\nconst ItemMeasurer = (props: ItemMeasurerProps) => {\r\n const {\r\n item,\r\n itemBoxChanged,\r\n itemBox,\r\n renderItem,\r\n gridMode,\r\n } = props;\r\n\r\n const [itemRef, setItemRef] = useState(null);\r\n const {\r\n _index: index,\r\n } = item;\r\n\r\n useEffect(() => {\r\n if (itemRef) {\r\n const cancel = { canceled: false };\r\n const box = itemRef.getBoundingClientRect();\r\n const { height: oldHeight, width: oldWidth } = itemBox.getBox(index);\r\n if (oldHeight !== box.height || oldWidth !== box.width) {\r\n if (box.height > 0 && box.width > 0) {\r\n itemBox.setBox(index, box.height, box.width);\r\n itemBoxChanged(cancel);\r\n }\r\n }\r\n return () => {\r\n cancel.canceled = true;\r\n };\r\n }\r\n return () => {};\r\n }, [itemBoxChanged, index, itemBox, itemRef]);\r\n\r\n useEffect(() => {\r\n if (itemRef) {\r\n // TODO: Batch the updates\r\n // TODO: Add a stop callback when the image is loaded\r\n // Use the Resize Observer to track the height changes of elements\r\n const cancel = { canceled: false };\r\n const updateViewPort = debounce((entries) => {\r\n if (cancel.canceled) { return; }\r\n if (entries[0] && entries[0].target === itemRef) {\r\n const {\r\n borderBoxSize,\r\n } = entries[0];\r\n\r\n const {\r\n blockSize,\r\n inlineSize,\r\n } = borderBoxSize[0];\r\n\r\n const { height: oldHeight, width: oldWidth } = itemBox.getBox(index);\r\n if (oldHeight !== blockSize || oldWidth !== inlineSize) {\r\n if (blockSize > 0 && inlineSize > 0) {\r\n itemBox.setBox(index, blockSize, inlineSize);\r\n itemBoxChanged(cancel);\r\n }\r\n }\r\n }\r\n }, 250);\r\n const resizeObserver = window.ResizeObserver ? new ResizeObserver(updateViewPort) : new ResizeObserverPollyFill(updateViewPort);\r\n resizeObserver.observe(itemRef);\r\n return () => {\r\n cancel.canceled = true;\r\n resizeObserver.unobserve(itemRef);\r\n resizeObserver.disconnect();\r\n };\r\n }\r\n return () => {};\r\n }, [itemBoxChanged, index, itemRef, itemBox]);\r\n\r\n return (\r\n setItemRef(ref)}\r\n style={{ width: '100%', height: (gridMode ? '100%' : undefined) }}\r\n >\r\n {renderItem({\r\n item,\r\n })}\r\n
);\r\n};\r\n\r\nconst WrappedItem = (props: WrappedItemProps) => {\r\n // Get the positions and render the element absolutely\r\n // To get the positions, we need the height of the rendered elements\r\n const {\r\n item,\r\n columnWidth,\r\n rowHeight,\r\n gridMode,\r\n renderItem,\r\n itemBox,\r\n itemLayout,\r\n minItemHeight,\r\n itemBoxChanged,\r\n } = props;\r\n\r\n const { _index: index, tabIndex, ariaLabel } = item;\r\n const itemPosition = itemLayout.getItemPosition(index);\r\n const { height, width } = itemBox.getBox(index);\r\n const largerThanMinItemHeight = minItemHeight && height ? height > minItemHeight : true;\r\n\r\n // First, we will hide the element and get the height of rendered element.\r\n // After that, we could calculate the positions of all the elements\r\n return (\r\n (item.onAction ? item.onAction(event) : null)}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nWrappedItem.defaultProps = {\r\n minItemHeight: undefined,\r\n rowHeight: undefined,\r\n};\r\n\r\nconst GridInternal = (props: GridInternalProps) => {\r\n const {\r\n items,\r\n renderItem,\r\n columnWidth,\r\n rowHeight,\r\n gridMode,\r\n itemBoxChanged,\r\n itemBox,\r\n itemLayout,\r\n scrollTop,\r\n offset,\r\n windowRect,\r\n isItemBoxChanged,\r\n minItemHeight,\r\n } = props;\r\n\r\n // Filter out the elements that is not visible\r\n // TODO: use interval tree, if the performance is not acceptable, from now O(N) to O(logN)\r\n // TODO: use more specific height of the container but the windowHeight\r\n const visibleItems = items.filter((item) => {\r\n const { _index: index } = item;\r\n const itemPosition = itemLayout.getItemPosition(index);\r\n let isVisible = true;\r\n if (itemPosition) {\r\n const { height } = itemBox.getBox(index);\r\n if (height) {\r\n const { top: itemTop } = itemPosition;\r\n const itemBottom = itemPosition.top + height;\r\n const {\r\n height: windowHeight,\r\n } = windowRect;\r\n const bufferHeight = windowHeight / 2;\r\n const topBorder = Math.max(0, scrollTop - offset - bufferHeight);\r\n const bottomBorder = (scrollTop - offset) + windowHeight + windowHeight;\r\n\r\n isVisible = !(itemTop > bottomBorder || itemBottom < topBorder);\r\n }\r\n }\r\n return isVisible;\r\n });\r\n\r\n const [render, forceRender] = useState(isItemBoxChanged);\r\n\r\n useEffect(() => {\r\n forceRender(isItemBoxChanged);\r\n }, [isItemBoxChanged]);\r\n\r\n return (\r\n
\r\n \r\n {\r\n visibleItems.map((item) => {\r\n const {\r\n _index: index,\r\n } = item;\r\n\r\n return (\r\n );\r\n })\r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\nGridInternal.defaultProps = {\r\n minItemHeight: undefined,\r\n rowHeight: undefined,\r\n};\r\n\r\n\r\nconst useWindow = () => {\r\n const getSize = useCallback(() => {\r\n const {\r\n clientWidth,\r\n clientHeight,\r\n } = document.documentElement;\r\n\r\n return {\r\n width: clientWidth,\r\n height: clientHeight,\r\n };\r\n }, []);\r\n\r\n const [windowRect, setWindowRect] = useState(getSize());\r\n\r\n const [update, setUpdate] = useState({\r\n ...windowRect,\r\n });\r\n\r\n useLayoutEffect(() => {\r\n const updateSize = () => {\r\n setUpdate(getSize());\r\n };\r\n window.addEventListener('resize', updateSize);\r\n return () => window.removeEventListener('resize', updateSize);\r\n }, [getSize]);\r\n\r\n useLayoutEffect(() => {\r\n // TODO_opt: if this updates are too frequently, we could do optimization\r\n // TODO: debounce\r\n setWindowRect(update);\r\n }, [update]);\r\n\r\n return [windowRect];\r\n};\r\n\r\nconst useTopDivMetaData = (topDiv, topDivRect) => {\r\n const [offset, setOffset] =\r\n useState(0);\r\n\r\n useLayoutEffect(() => {\r\n if (topDiv) {\r\n let target = topDiv;\r\n let newOffset = 0;\r\n do {\r\n newOffset += target.offsetTop;\r\n target = target.offsetParent;\r\n } while (target);\r\n\r\n if (newOffset !== offset) {\r\n setOffset(newOffset);\r\n }\r\n }\r\n }, [offset, topDiv, topDivRect]);\r\n\r\n return [offset];\r\n};\r\n\r\nconst useScroll = (scrollContainer) => {\r\n const [scrollTop, setScrollTop] = useState(0);\r\n const [update, setUpdate] = useState({\r\n scrollY: scrollTop,\r\n });\r\n\r\n useLayoutEffect(() => {\r\n const scrollHandler = (e) => {\r\n const scrollTop = e && e.target.scrollTop;\r\n setUpdate({\r\n scrollY: scrollTop,\r\n });\r\n };\r\n const windowScrollHandler = () => {\r\n const {\r\n scrollY,\r\n } = window;\r\n setUpdate({\r\n scrollY,\r\n });\r\n };\r\n if (scrollContainer) {\r\n const element = (typeof (scrollContainer)) === 'string' ? document.querySelector(scrollContainer) : scrollContainer;\r\n if (element) {\r\n element.addEventListener('scroll', scrollHandler);\r\n }\r\n } else {\r\n window.addEventListener('scroll', windowScrollHandler);\r\n }\r\n return () => {\r\n if (scrollContainer) {\r\n const element = (typeof (scrollContainer)) === 'string' ? document.querySelector(scrollContainer) : scrollContainer;\r\n if (element) {\r\n element.removeEventListener('scroll', scrollHandler);\r\n }\r\n } else {\r\n window.removeEventListener('scroll', windowScrollHandler);\r\n }\r\n };\r\n }, [scrollContainer]);\r\n\r\n useLayoutEffect(() => {\r\n // TODO_opt: if this updates are too frequently, we could do optimization\r\n const {\r\n scrollY,\r\n } = update;\r\n setScrollTop(scrollY);\r\n }, [update]);\r\n\r\n return [scrollTop];\r\n};\r\n\r\nexport const Grid = (props: GridProps) => {\r\n const {\r\n items,\r\n renderItem,\r\n rowPadding,\r\n columnPadding,\r\n columnWidth: columnWidthProp,\r\n rowHeight: rowHeightProp,\r\n scrollContainer,\r\n minItemHeight,\r\n gridMode,\r\n maxColumns,\r\n } = props;\r\n\r\n const [topDiv, setTopDiv] = useState(null);\r\n const [topDivRect, setTopDivRect] = useState({\r\n clientHeight: 0,\r\n clientWidth: 0,\r\n });\r\n const [columnWidth] = useState(columnWidthProp || COLUMN_WIDTH);\r\n const [rowHeight] = useState(rowHeightProp || ROW_HEIGHT);\r\n const [columnCount, setColumnCount] = useState(1);\r\n const [isItemBoxChanged, setItemBoxChanged] = useState(0);\r\n const [isItemLengthChanged, setItemLengthChanged] = useState(0);\r\n const count = useRef(0);\r\n\r\n // Two components, itemBox and itemLayout.\r\n // The itemBox track the height, width of each item\r\n // With the heights of each item, the itemLayout computes the positions of the items\r\n const itemBox = useRef(new ItemBox());\r\n const itemLayout = useRef(new ItemLayout({\r\n columnCount,\r\n columnWidth,\r\n columnPadding,\r\n rowPadding,\r\n itemBox: itemBox.current,\r\n itemCount: items.length,\r\n }));\r\n\r\n // The distance of the top offset\r\n const [offset] = useTopDivMetaData(topDiv, topDivRect);\r\n\r\n const wrappedScrollContainer = useMemo(() => {\r\n if ((typeof (scrollContainer)) === 'string') {\r\n return scrollContainer;\r\n }\r\n if (scrollContainer && scrollContainer.current) {\r\n return scrollContainer.current;\r\n }\r\n return null;\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [scrollContainer, scrollContainer.current]);\r\n\r\n // The distance of the global scroll top\r\n const [scrollTop] = useScroll(wrappedScrollContainer);\r\n // The window view\r\n const [windowRect] = useWindow();\r\n\r\n const itemBoxChanged = useCallback(debounce((cancel) => {\r\n // React will accumulate the update\r\n if (cancel && cancel.canceled) {\r\n return;\r\n }\r\n\r\n setItemBoxChanged(isItemBoxChanged => isItemBoxChanged + 1);\r\n }, 250), [setItemBoxChanged]);\r\n\r\n const itemLengthChanged = useCallback(() => {\r\n // React will accumulate the update\r\n setItemLengthChanged(isItemLengthChanged => isItemLengthChanged + 1);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (topDiv) {\r\n const {\r\n clientHeight,\r\n clientWidth,\r\n } = topDiv;\r\n\r\n setTopDivRect({\r\n clientHeight,\r\n clientWidth,\r\n });\r\n }\r\n }, [topDiv]);\r\n\r\n useEffect(() => {\r\n if (topDiv) {\r\n const cancel = { canceled: false };\r\n const updateTopDivRect = debounce((entries) => {\r\n if (entries[0] && cancel.canceled === false) {\r\n const {\r\n clientHeight,\r\n clientWidth,\r\n } = entries[0].target;\r\n\r\n setTopDivRect({\r\n clientHeight,\r\n clientWidth,\r\n });\r\n }\r\n }, 250);\r\n const resizeObserver = window.ResizeObserver ? new ResizeObserver(updateTopDivRect) : new ResizeObserverPollyFill(updateTopDivRect);\r\n resizeObserver.observe(topDiv);\r\n return () => {\r\n cancel.canceled = true;\r\n resizeObserver.unobserve(topDiv);\r\n resizeObserver.disconnect();\r\n };\r\n }\r\n return () => {};\r\n }, [topDiv]);\r\n\r\n const calculatedColumnWidth = useCallback((availableColumn, items) => {\r\n const {\r\n clientWidth,\r\n } = topDivRect;\r\n const extendedColumnWidth = (clientWidth - ((columnPadding || PADDING) * (availableColumn - 1))) / availableColumn;\r\n return (items.length >= availableColumn ? extendedColumnWidth : columnWidth);\r\n }, [columnPadding, columnWidth, topDivRect]);\r\n\r\n const calculatedRowHeight = useCallback((availableColumn, items) => {\r\n const targetColumnWidth = calculatedColumnWidth(availableColumn, items);\r\n const targetRowHeight = (targetColumnWidth / columnWidth) * rowHeight;\r\n return targetRowHeight;\r\n }, [calculatedColumnWidth, columnWidth, rowHeight]);\r\n\r\n useEffect(() => {\r\n if (topDivRect) {\r\n const {\r\n clientWidth,\r\n } = topDivRect;\r\n const columnWithPadding = columnWidth + (columnPadding || PADDING);\r\n let availableColumn;\r\n if (clientWidth > 0) {\r\n if (clientWidth <= columnWidth) {\r\n availableColumn = 1;\r\n } else {\r\n availableColumn = 1 + Math.floor((clientWidth - columnWidth) / columnWithPadding);\r\n }\r\n if (maxColumns) {\r\n availableColumn = Math.min(availableColumn, maxColumns);\r\n }\r\n const targetColumnWidth = calculatedColumnWidth(availableColumn, items);\r\n if (availableColumn !== columnCount) {\r\n setColumnCount(availableColumn);\r\n }\r\n if (availableColumn !== columnCount\r\n || targetColumnWidth !== itemLayout.current.columnWidth) {\r\n // for new layout, we would need to place all the items\r\n itemLayout.current.updateLayout({\r\n columnCount: availableColumn,\r\n columnWidth: targetColumnWidth,\r\n columnPadding,\r\n rowPadding,\r\n itemBox: itemBox.current,\r\n itemCount: items.length,\r\n });\r\n }\r\n }\r\n }\r\n }, [calculatedColumnWidth, columnCount, columnPadding, columnWidth, items, items.length, maxColumns, rowPadding, topDivRect]);\r\n\r\n useEffect(() => {\r\n itemLayout.current.setItemCount(items.length);\r\n itemLengthChanged();\r\n }, [itemLengthChanged, items.length]);\r\n\r\n useEffect(() => {\r\n // for force update, we would only need to update the changed items\r\n count.current += 1;\r\n itemLayout.current.placeItems();\r\n }, [isItemBoxChanged]);\r\n\r\n const indexedItems = useMemo(() => items.map((item, index) => ({\r\n ...item,\r\n _index: index,\r\n })), [items]);\r\n\r\n return (\r\n setTopDiv(ref)}\r\n >\r\n \r\n
\r\n );\r\n};\r\n\r\nGrid.defaultProps = {\r\n columnPadding: 24,\r\n rowPadding: 16,\r\n columnWidth: COLUMN_WIDTH,\r\n rowHeight: ROW_HEIGHT,\r\n scrollContainer: {},\r\n minItemHeight: undefined,\r\n gridMode: false,\r\n maxColumns: undefined,\r\n};\r\n","import React from 'react';\r\n\r\nconst ComponentStylesContext = React.createContext({});\r\n\r\n// componentStyles is an object, keys are component names, values are functions that return styles\r\n// the functions are passed the theme as its only argument\r\nexport const ComponentStylesProvider = ({ children, componentStyles }) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\n// get the getStyles function for a component by name\r\n// returns null if the component has no styles\r\nexport const useComponentStylesContext = (componentName) => {\r\n const componentStyles = React.useContext(ComponentStylesContext);\r\n if (componentStyles && componentStyles[componentName]) {\r\n return componentStyles[componentName];\r\n }\r\n return null;\r\n};\r\n","import _ from 'underscore';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport React from 'react';\r\n\r\nimport { useComponentStylesContext } from './component-styles-provider';\r\n\r\nconst useNoBaseStyles = () => null;\r\n\r\nexport function withOverridableStyles(WrappedComponent, useDefaultStyles, useBaseStyles = useNoBaseStyles, options) {\r\n const {\r\n componentName,\r\n baseClassName,\r\n } = options || {};\r\n\r\n const HOC = (props) => {\r\n // get the custom styles for the component, which are provided by setting up the ComponentStylesProvider\r\n const overridenClasses = useComponentStylesContext(componentName);\r\n\r\n const defaultClasses = useDefaultStyles();\r\n const baseClass = useBaseStyles();\r\n\r\n // shallow merge the default classes with the overriden classes\r\n const finalBaseClassName = baseClassName || 'baseClassName';\r\n const finalClasses = { ...defaultClasses, [finalBaseClassName]: baseClass, ...overridenClasses };\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n const componentDisplayName = componentName || WrappedComponent.displayName || WrappedComponent.name || 'Component';\r\n\r\n HOC.displayName = `withComponentStyles(${componentDisplayName})`;\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n\r\n return HOC;\r\n}\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useContext, useMemo, useRef, useState } from 'react';\r\n\r\ntype NavigationViewType = {\r\n name: string,\r\n params: any,\r\n};\r\n\r\ntype NavigationContextType = {\r\n getTopView: () => NavigationViewType | undefined,\r\n getViewParams: (viewName: string) => any,\r\n setViewParams: (viewName: string, params: any) => void,\r\n pushLocalView: (viewName: string, params: any) => void,\r\n popLocalView: () => NavigationViewType | undefined,\r\n // replaceLocalView: (viewName: string, params: any) => void,\r\n updated: any,\r\n};\r\n\r\nconst LocalNavigationContext = React.createContext(null);\r\n\r\nexport const LocalNavigationProvider = ({ children }) => {\r\n // use a ref to store the vew stack to eunsure for all context value instances (even\r\n // for the ones captured in closures) can access the latest view stack\r\n // and to trigger re-render when the view stack is updated, we use a state to store a dummy object\r\n const localViewStackRef = useRef>([]);\r\n const activeElementRef = useRef();\r\n const [updated, setUpdated] = useState({});\r\n // const [localViewStack, setLocalViewStack] = useState>([]);\r\n\r\n const getTopView = useCallback(() => _.last(localViewStackRef.current), []);\r\n\r\n const pushLocalView = useCallback((viewName, params) => {\r\n const { name } = _.last(localViewStackRef.current) || {};\r\n if (name !== viewName) {\r\n activeElementRef.current = document.activeElement;\r\n localViewStackRef.current.push({ name: viewName, params });\r\n } else {\r\n localViewStackRef.current = localViewStackRef.current.slice(0, -1).concat({ name: viewName, params });\r\n }\r\n setUpdated({}); // force re-render\r\n }, []);\r\n\r\n const popLocalView = useCallback(() => {\r\n if (activeElementRef.current && activeElementRef.current instanceof HTMLElement) {\r\n activeElementRef.current.focus();\r\n }\r\n const topView = _.last(localViewStackRef.current);\r\n localViewStackRef.current = localViewStackRef.current.slice(0, -1);\r\n setUpdated({}); // force re-render\r\n return topView;\r\n }, []);\r\n\r\n // const replaceLocalView = useCallback((viewName, params) => {\r\n // }, []);\r\n\r\n const getViewParams = useCallback((viewName) => {\r\n const viewIndex = _.findLastIndex(localViewStackRef.current, { name: viewName });\r\n if (viewIndex >= 0) {\r\n return localViewStackRef.current[viewIndex].params || {};\r\n }\r\n return null;\r\n }, []);\r\n\r\n const setViewParams = useCallback((viewName, params) => {\r\n const viewIndex = _.findLastIndex(localViewStackRef.current, { name: viewName });\r\n if (viewIndex >= 0) {\r\n localViewStackRef.current[viewIndex].params = params;\r\n setUpdated({}); // force re-render\r\n }\r\n }, []);\r\n\r\n const value: NavigationContextType = {\r\n getTopView,\r\n getViewParams,\r\n setViewParams,\r\n pushLocalView,\r\n popLocalView,\r\n // replaceLocalView,\r\n updated,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport const useLocalNavigation = () => {\r\n const navigation = useContext(LocalNavigationContext);\r\n return navigation;\r\n};\r\n/* istanbul ignore next */\r\n// has not been used in ads studio so skipped\r\n// TODO: add test for withLocalNavigation\r\nexport const withLocalNavigation = (Component, viewName) => {\r\n const HOC = (props) => {\r\n const { getTopView, getViewParams, updated } = useContext(LocalNavigationContext) || {};\r\n const topView = getTopView && getTopView();\r\n const params = getViewParams && getViewParams(viewName);\r\n return (\r\n \r\n );\r\n };\r\n return HOC;\r\n};\r\n\r\nexport const LocalNavigationRoute = ({ viewName, render, ...rest }) => {\r\n const { getTopView, getViewParams, updated } = useContext(LocalNavigationContext) || {};\r\n const topView = getTopView && getTopView();\r\n const params = getViewParams && getViewParams(viewName);\r\n const Comp = useMemo(() => {\r\n const ret = render({\r\n open: !!params,\r\n isTopView: topView && topView.name === viewName,\r\n localRouteUpdated: updated, // force re-render\r\n ...params,\r\n ...rest,\r\n });\r\n return ret;\r\n }, [render, params, topView, viewName, updated, rest]);\r\n return Comp;\r\n};\r\n","import React, { useMemo } from 'react';\r\nimport {\r\n mergeClasses,\r\n ToggleButton,\r\n} from '@fluentui/react-components';\r\n\r\nexport const ToggleButtons = ({\r\n options,\r\n optionsState,\r\n toggleSelectedOption,\r\n classes,\r\n}) => {\r\n const selectedButtonClasses = classes && classes.selectedButton ? classes.selectedButton : '';\r\n const initialClasses = classes && classes.toggleButton ? classes.toggleButton : '';\r\n\r\n const buttons = useMemo(() => options.map(option => (\r\n {\r\n if (toggleSelectedOption) {\r\n toggleSelectedOption(option.key);\r\n }\r\n }}\r\n >\r\n {option.text}\r\n \r\n )), [initialClasses, options, optionsState, selectedButtonClasses, toggleSelectedOption]);\r\n\r\n return (buttons);\r\n};\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport { makeStyles, mergeClasses } from '@fluentui/react-components';\r\nimport { LineChart, IChartProps } from '@fluentui/react-charting';\r\n\r\nconst useStyles = makeStyles({\r\n inlineChart: {\r\n height: '290px',\r\n },\r\n});\r\n\r\nexport const InlineChart = (props) => {\r\n const { data } = props;\r\n const classes = useStyles();\r\n const getColor = useCallback((metricName) => {\r\n if (metricName === 'Clicks') {\r\n return 'rgba(227, 0, 140, 1)';\r\n } else if (metricName === 'CTR') {\r\n return 'rgba(99, 124, 239, 1)';\r\n } else if (metricName === 'Impressions') {\r\n return 'rgba(42, 160, 164, 1)';\r\n }\r\n return 'gray';\r\n }, []);\r\n\r\n const lineChartData = useMemo(() => {\r\n if (!data || !Array.isArray(data)) {\r\n return [];\r\n }\r\n const result: { legend: string; data: { x: Date; y: number; }[]; color: string }[] = [];\r\n data.forEach(({ MetricName, PrimaryDataPoints, ComparisonDataPoints }) => {\r\n const lineData = {\r\n legend: MetricName,\r\n data: Array.isArray(PrimaryDataPoints) ? PrimaryDataPoints.map(({ DateTime, Value }) => ({ x: new Date(DateTime), y: Value })) : [],\r\n color: getColor(MetricName),\r\n lineOptions: {\r\n strokeWidth: '2px',\r\n },\r\n };\r\n const comparisonData = {\r\n legend: `Average ${MetricName} in your library`,\r\n legendShape: 'dottedLine',\r\n data: Array.isArray(ComparisonDataPoints) ? ComparisonDataPoints.map(({ DateTime, Value }) => ({ x: new Date(DateTime), y: Value })) : [],\r\n color: 'gray',\r\n lineOptions: {\r\n strokeDasharray: '2px',\r\n strokeDashoffset: '-1',\r\n strokeLinecap: 'butt',\r\n strokeWidth: '2px',\r\n },\r\n };\r\n if (lineData.data.length) {\r\n result.push(lineData);\r\n }\r\n if (comparisonData.data.length) {\r\n result.push(comparisonData);\r\n }\r\n });\r\n return result;\r\n }, [data, getColor]);\r\n\r\n const chartData: IChartProps = useMemo(() => ({\r\n chartTitle: '',\r\n lineChartData,\r\n }), [lineChartData]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport {\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\n\r\nexport const HistoryListImages = (props) => {\r\n const {\r\n onClick,\r\n onKeyDown,\r\n historyList,\r\n selectedIndex,\r\n listStyle,\r\n } = props;\r\n\r\n return (\r\n
\r\n {_.map(historyList, ({ imageUrl }, index) => (\r\n onClick(index)}\r\n role=\"button\"\r\n tabIndex={0}\r\n onKeyDown={e => onKeyDown(index, e)}\r\n >\r\n
\r\n \"generation\r\n
\r\n
\r\n ))}\r\n
\r\n );\r\n};\r\n\r\n","import React, { useState } from 'react';\r\n\r\nexport const DataContext = React.createContext({});\r\n\r\nexport const DataProvider = ({ children }) => {\r\n const [dataPromise, setDataPromise] = useState(null);\r\n const [data, setData] = useState(null);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\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","useCustomLandingPageStyles","makeStyles","landingPageComponentRoot","backgroundColor","shorthands","margin","landingPageComponentTitle","getI18n","p$data","getLocale","name","param","getFirstDayOfWeek","getDayOfWeek","formatCivilDate","date","formatDate","formatDecimal","formatPercentToFixed","parseCivilDate","parseDate","formatDecimalToFixed","getServerContext","serverContext","CurrentCustomer","CurrentAccount","TimeZone","Name","CurrentUser","LocaleID","CultureDateTimeFormat","ShortDatePattern","CurrentAccountInActive","ServicesEndpoints","Token","IsAADUser","AdStudioInlineChartWrapperInner","loadPerfTimeSeriesData","isShowChart","dateFilter","perfMarker","instrumentation","chartPreference","i18nInlineChart","filters","appState","pageContext","forceToResizeChart","palette","ThemeFluent","resizeWidth","useCallback","chartContainer","document","getElementsByClassName","offsetWidth","resizeChart","useRef","dateRange","setDateRange","onWindowResize","resizeChartHandler","current","resizeChartListener","handler","addEventListener","removeEventListener","getDataSource","findAll","timeSeriesParams","getOptions","entityType","token","appConfig","get","imagePath","Constants","pageState","hideChartPanel","customMetricNameList","seriesColors","primary","original","themePrimary","comparative","secondary","lowestSupportedGranularity","disableMovingAverage","addDateChangeListener","resizeEventHandler","dataSource","useMemo","options","getNewDateRange","waterfallDateFilterProcessor","newDateRange","newWidth","InlineChart","customFilter","defaultProps","AdStudioInlineChartWrapper","withInstrumentation","useAdStudioInlineChart","globalLegacyI18n","getPageContext","globalPageContext","preferencePromise","preferenceServiceLegacy","then","Promise","InlineChartPreferences","store","adapter","chartDataAdapter","ChartDataAdapter","permissions","Permissions","gridName","CurrentGridName","getChartPreference","getPreferencesAndDefaults","CurrentTabId","getGranularityEnum","perfMetricDateRange","granularityId","RangeStartDate","RangeEndDate","reevaluateGranularity","newGranularityId","renderInlineChart","isChartShown","useP$DaterangeDefault","preferenceService","useContext","PreferenceContext","ServerContext","waterFallDateFilters","WaterfallFilterStorage","getFilters","WaterfallFilterType","DateFilter","useDateRangeDefault","inlineDownloadStyle","theme","datePickerStyle","InlineDownloadWrapper","marginTop","position","zIndex","getInlineDownloadStyle","marginRight","bottom","helpbuttonStyle","top","content","marginLeft","boxShadow","padding","fontWeight","fontSize","lineHeight","paddingLeft","marginBottom","paddingBottom","InlineDownloadWrapperInternal","React","props","classes","useDefaultStyles","inlineDownloadRef","setDownloadShown","getInlineDownloadColumns","getInlineDownloadFilter","ReportEmailRule","InlineDownloadReactForm","InlineDownloadCampaignODataRepository","totalAssetCount","_useMemo","localizedHeaders","odataColumnNames","_useMemo2","inlineDownloadConfigs","_ref$processReportRul","processReportRule","_ref$customDownloadSe","customDownloadService","_ref$downloadFormats","downloadFormats","entity","totalRecordCount","_ref$validateSegmentT","validateSegmentType","_ref$isFeedbackEnable","isFeedbackEnabled","_ref$data","SegmentationTypes","_ref$isForVNext","isForVNext","_ref$p$daterange","p$daterange","filterUrlParam","serializedFilter","p$daterangeDefaultValue","IsCustomerHierarchyEnabled","IsCustomerHierachyRequest","repository","download","Format","segmentationTypes","allUsersType","useInlineDownload","tabbableNode","getTabbableNodes","$","is","focus","preventScroll","downloadButton","querySelector","setTimeout","classNames","ref","gridId","toggleToolbarVisibility","clearAfterDownloadCall","downloadBoxRole","downloadFormatsRole","DelayedInlineDownloadWrapperInternal","default","withServerContext","overwriteFilters","rule","unset","getReportEmailRule","isDownloadShown","ReportEmailRuleSnapshot","renderInlineDownload","Filter","parseSync","DatePicker","dateFormat","lcid","onSwitchCompare","disableCompare","minDate","rangeIds","_getRangesFromData","getRangesFromData","selectedRange","selectedComparedRange","dateRangePickedLogger","datePicker","create","dateRangePicked","isImprovedDateRangePickerEnabled","DynamicPermissions","ImprovedDateFilter","ComparedDateRangePicker","isMainDatePicker","shouldShowQuickLeftRightPicker","translateLegacyToIANATimezone","rangeId","RangeId","rangeIndex","RangeIndex","rangeDays","RangeDays","comparedTypeKey","compared","onPickDateRanges","dateFromDatePicker","generateDateData","isDateRangeChange","RANGES","isComparedDateChange","formattedEnd","formattedStart","console","log","updateWaterfallFilter","updateToWaterfallFilter","dateRangeLogger","trace","method","DatePickerOnApply","DatePickerOnQuickApply","DatePickerWithScope","withScope","usePerfPageToolbarStyle","toolbarFilterContainer","flexGrow","paddingTop","display","alignSelf","message","extraOptions","showInfo","dismiss","createFolderFilterQuery","searchTerm","minWidth","_ref$isVideoDurationB","isVideoDurationBoundaryIncluded","minVideoDuration","maxVideoDuration","dateAddedStart","dateAddedEnd","assetType","sourceType","assetSources","folderId","hasPerfData","topRated","filterPredicates","s","filterQuery","formatCivilDateString","civilDate","getDateRangeParams","dateData","startDate","endDate","comparisonStartDate","comparisonEndDate","parseMTDateString","dateStr","str","replace","raw","CSMLSortingRequestParams","utcOffset","timeStr","rawFormat","removeNullUndefined","obj","newObj","forEach","CreateDisplayTemplatePageWithLayout","withFullScreenWithSummaryBar","CreateDisplayTemplatePageComponent","PageWithInstrumentation","imageId","useParams","displayTemplateId","EditDisplayTemplatePageComponent","getLogger","activity","page","version","tag","error","withSignalAsync","pageName","logTrace","args","msg","params","rest","paramsJson","stringify","err","errMsg","traceWithoutParams","monitorPromise","promise","api","resolve","catch","PageNameForLog","Landing","Performance","Images","DisplayTemplates","Videos","EditVideoPage","VideoTemplates","BrandKit","EditDisplayTemplate","WebsiteImagePanel","StockImagePanel","InvestImagePanel","InvestVideoPanel","AddVideoPanel","SearchResultPage","GenerateImagePage","VersionForLog","withCustomLogForPage","WrappedComponent","_ref$tag","Wrapper","displayName","getDisplayName","hoistNonReactStatics","getLoggerWithoutPageInfo","getLogVersion","AdsStudioAppNameODataHeader","PREFERENCE_NAME","usePerference","getterName","setterName","preferenceValue","setPreferenceValue","pref","curValue","Data","updatePreference","newPreferenceValue","Error","addFoldersTeachingBubbleAllowedShowCount","realUsedFlagInAdsStudioApp","realUsedFlagInAdsStudioPicker","realUsedFlagInAdsStudioAIGCMVPView","perfTablePageSize","perfTableSortBy","pageMenuMode","setSortBy","newSortBy","dismissAddFoldersTeachingBubble","hideAddFoldersTeachingBubble","setRealUsedFlagInAdsStudioApp","setRealUsedFlagInAdsStudioPicker","setRealUsedFlagInAdsStudioAIGCMVPView","setPerfTablePageSize","newValue","setPerfTableSortBy","setPageMenuMode","useAdsStudioAccountPreference","_ref10","useAdsStudioUserPreference","_ref11","createFolderQuery","filterArgs","expandArgs","assetsToLoadForSubfolders","_ref3$isGlobalSearch","isGlobalSearch","_ref3$isAssetPickerSc","isAssetPickerScenario","_ref3$isSemanticSearc","isSemanticSearch","_ref3$isRecentSorting","isRecentSorting","sortQuery","expandQuery","includeAssets","includeSubfolders","includeParentHierarchy","expandItems","expandItemsInSubfolders","createFolderExpandQuery","assetSubfolderQuery","globalSearchQuery","assetPickerQuery","semanticSearchQuery","recentSortingQuery","getFolderODataService","_ref4","odata","legacyOdata","oDataConfig","cid","getRequestUrl","funcPath","resourceRootUrl","oDataPath","getFolderData","_ref6","skip","count","_ref6$isGlobalSearch","_ref6$isAssetPickerSc","_ref6$isSemanticSearc","_ref6$isRecentSorting","folderQuery","$top","$skip","getFolderDataWithBIData","_ref7","_ref7$isGlobalSearch","_ref7$isAssetPickerSc","_ref7$isSemanticSearc","_ref7$isRecentSorting","_getDateRangeParams","Rangelcid","requestBody","gridDataParameters","DateRange","StartDate","EndDate","ComparisonDateRange","CurrentCustomerId","post","urlParameters","getPerfTimeSeriesData","_ref8","perfTimeSeriesParams","_ref8$isGlobalSearch","_ref9","granularity","metrics","metric","movingAverage","isMovingAverageOn","funcParams","createDateRangeQuery","createFolder","folderName","parentFolderId","folderType","ParentFolderId","FolderType","res","renameFolder","newFolderName","patch","deleteFolder","_ref12","delete","addAssets","_ref14","_ref14$inProgress","inProgress","supportUpscale","SupportUpscale","progress","deleteAsset","dataJson","stringifyWithBigInt","bulkDeleteAssets","csvRows","_ref15","assetId","folderAssetType","CsvRows","slice","_ref16","indexOf","_ref18","_ref19","Code","ErrorNumber","updateAsset","getBlobUploadUrl","_ref20","fileExtension","batchMove","_ref13","destFolderId","folders","DestFolderId","Assets","FolderIds","getVideosByIdsAsync","videoTasks","reqs","baseURL","batch","needContentType","response","getVideo","_ref21","odataPath","getImageBulkEditODataService","getImageCroppingTaskStatus","cropImage","_ref2$cropSettings","_ref2$placementSettin","placementSettings","cropData","CropSettingOnOriginal","PlacementSettings","generateImageWithSmartEffect","getAIGCODataService","generateImagesWithAIAsync","userPrompt","skipBrandDetection","UserPrompt","SkipBrandDetection","getAIGeneratedImageTaskStatus","taskId","getVideoODataService","addVideoCreative","videoCreative","videoUrl","metadata","stringifySync","_ref3$fetchMetadata","fetchMetadata","getBackgroundChangeODataService","removeImageBackground","imageUrl","Url","getImageSegmentations","ImageUrl","generateImageBackground","prompt","maskSetsBase64","selectedMasks","outputImageWidth","outputImageHeight","Prompt","MaskSets","SelectedMasks","Width","Height","transformImageResponse","img","IdString","Text","createdTime","UploadedTime","modifiedTime","ModifiedTime","originalHeight","OriginalHeight","originalWidth","OriginalWidth","originalUrl","OriginalUrl","CropSettings","cropSettingOnOriginal","SourceType","Metadata","replaceAll","encodeURIComponent","baseId","BaseIdString","roiInfo","ROIInfo","usedByCount","UsedByCount","performanceRating","PerformanceRating","performanceLabel","Rating","performanceLabelBestPercentage","PerformanceLabelBestPercentage","digits","performanceLabelGoodPercentage","PerformanceLabelGoodPercentage","performanceLabelLowPercentage","PerformanceLabelLowPercentage","performanceLabelLearningPercentage","PerformanceLabelLearningPercentage","performanceLabelUnratedPercentage","PerformanceLabelUnratedPercentage","performanceMetrics","PerformanceMetrics","impressions","Impressions","clicks","Clicks","CTR","spend","Spend","periodPerformanceMetrics","PeriodPerformanceMetrics","periodImpressions","periodClicks","periodCTR","periodSpend","performanceMetricsChange","PerformanceMetricsChange","impressionsChange","clicksChange","CTRChange","spendChange","performanceMetricsChangePercentage","PerformanceMetricsChangePercentage","impressionsChangePercentage","clicksChangePercentage","CTRChangePercentage","spendChangePercentage","transformPerfMetricsResponse","isSceneKeyFrame","keyFrame","getRepository","imageBulkEditODataService","imageODataService","ianaTimeZone","timezoneUTCOffset","getImages","importSource","totalCount","images","getImage","isImageFittingEnabled","getImageByIdAsync","tasks","tsk","AssetId","ImageText","CreatedTime","stage","Stage","hasError","HasError","failureMessage","Checkpoint","FailureMessage","percentComplete","PercentComplete","imageCroppingTaskStatusId","ImageCroppingTaskStatusId","updateImageData","imageData","updateImageAsync","renameImage","deleteImage","deleteImageAsync","uploadImagesByUrl","imageUrls","bulkSaveImagesByUrl","uploadImage","_ref7$activityLogger","activityLogger","_ref7$updateCurrentPr","updateCurrentProgress","_ref7$imageOption","imageOption","_ref7$name","isLogo","uploadImageAsync","addCreative","creativeData","serialized","smartEffects","effectOptions","timerIds","resetTimers","intervalId","clearInterval","timeoutId","clearTimeout","wip","setInterval","JobId","newResponse","createGenerateRequestWithPolling","BaseImageUrl","Filters","smartEffectName","Param","smartEffectOptions","Output","MediaType","saveImageWithBaseId","metaData","imageFit","placements","skipOutpainting","getVideoPlaySrc","serializedResolutions","resolutionConfig","resolutions","Object","keys","h","parseInt","apply","transformVideoResponse","Description","thumbnailUrl","ThumbnailUrl","DownloadUrl","durationInMS","Status","fileSize","SourceVideoLength","quality","Quality","transformAssetResponse","transformerFunc","getAssetTransformer","oDataTypeConfig","namePropertyConfig","transformAssetId","SAFE_INTEGER","Number","MAX_SAFE_INTEGER","match","intValue","toString","bigIntValue","BigInt","transformAddUploadAssetRequest","blobName","model","constants","sourceTypes","OriginalIdentifier","fileData","base64","base64Index","substr","removeEncodingPrefix","transformAddStockImageRequest","stockImageId","_ref2$imageType","imageType","StockImageId","StockImageVendor","transformAddInvestImageRequest","investImageId","_ref3$imageType","XandrAssetId","transformAddInvestVideoRequest","investVideoId","videoSrc","transformAddUrlImageRequest","_ref5$imageType","transformAddImageWithBaseIdRequest","BaseId","transformAddUrlVideoRequest","WebsiteImported","transformDeleteAssetRequest","transformImageUrlToImageDataAsync","fetch","blob","reader","FileReader","onload","target","result","onerror","readAsDataURL","AdsStudioODataError","_AdsStudioErrorBase","_this","originError","originErrors","bulkupsertErrors","errorProcessor","_objectWithoutProperties","_excluded","_classCallCheck","errors","Message","Property","errorCode","errorMessage","errorProperty","_callSuper","_inherits","_createClass","AdsStudioErrorBase","transformFolderResponse","folder","itemCount","ItemsCount","subfolders","SubFolders","subfolder","parentHierarchy","ParentHierarchy","parent","transformParentHierarchy","perfTimeSeriesData","IMPORT_SOURCE_MAP","getFolderRepository","folderODataService","azureUploader","getFolderArgs","_ref2$isVideoDuration","_ref2$assetsToLoadFor","_ref2$isGlobalSearch","_ref2$isAssetPickerSc","_ref2$hasPerfData","_ref2$isSemanticSearc","_ref2$isRecentSorting","_ref3$isVideoDuration","_ref3$assetsToLoadFor","_ref3$withBIData","withBIData","_ref3$hasPerfData","_ref3$topRated","willInit","done","createFolderApiErrorProcessor","uploadVideoToAzureBlobWithCancellation","fileObject","onProgress","parseFileName","ext","BlobName","uploadPayloadToBlobWithCancellation","payload","FilePayload","file","deleteFolderApiErrorProcessor","renameFolderApiErrorProcessor","addFolderUploadAsset","addStockImageToFolder","addInvestImageToFolder","addInvestVideoToFolder","addUrlImageToFolder","addImageWithBaseIdToFolder","_ref17","assetsToDelete","_ref26","resultSummary","ast","_ref27","ret","bulkDeleteAssetsApiItemErrorProcessor","bulkDeleteAssetsApiErrorProcessor","renameAsset","transformRenameRequest","assetIds","folderIds","assetsSummary","_ref22","_ref23","Success","Errors","bulkMoveApiItemErrorProcessor","foldersSummary","fdr","_ref24","_ref25","bulkMoveApiErrorProcessor","folderCount","assetCount","postVideoByUrl","updateVideoStatusByIds","taskLength","getAIGCRepository","aigcODataService","TaskId","alError","generateImagesWithAIAPIErrorProcessor","brandNameDetected","brandNames","Progress","RecommendedImages","source","Source","Theme","modelSource","ModelSource","isTaskDone","getAIGeneratedImageAPIErrorProcessor","getBackgroundChangeRepository","oDataService","roi","getRemoveImageBackgroundAPIErrorProcessor","rawMaskSetsBase64String","selectedMasksArray","getStockImageRepository","stockImageService","StockImageDataService","controller","loadAssets","windowIndex","windowSize","searchText","customQueries","appName","$search","language","includevertical","$query","getStockImages","totalItemCount","getBasicAssetsRepository","folderRepository","includeSubfolder","TotalCount","uploadImageToFolder","imageName","prepareODataConfig","accountTimeZone","tz","fromLegacyTimeZone","getUTCOffsetWithoutDST","odataToken","oDataToken","odataTokenType","oDataTokenType","applicationName","beforeSend","xhr","onBeforeSendDone","setRequestHeader","withAdsStudioServicesProvider","loggerTag","allowedAssetType","oDataConfigObj","adsStudioUserPreferences","adsStudioAccountPreferences","versionForLog","ImageOData","videoODataService","getODataErrors","errs","defaultMessage","getODataErrorsImpl","AzureUploader","aigcRepository","videoRepository","getVideoRepository","defaultPerfMetricDateRange","getDefaultMetricDateRange","AssetWithFoldersDataServiceProvider","imageRepository","getODataConfig","hostname","location","toLowerCase","isLocal","CampaignAPI","noOpHook","withLibraryAssetsService","_ref$useVideoNotify","useVideoNotify","_useMemo3","_useBasicAssetsServic2","useBasicAssetsService","loadData","loadMoreData","loadMoreAssets","useVideoTaskPoller","interval","notify","updatedAssetsRef","mergedAssets","dataService","withEditImageService","propName","backgroundChangeODataService","backgroundChangeRepository","saveImage","saveImageCopy","getImageById","uploadStockImageToFolder","_ref10$folderId","moveImageToFolder","getEditImageRepository","_useEditImageService","useEditImageService","getImagesWithFilter","getImagesWithBlur","getImagesWithFilterAndBlur","imagesWithFilter","imagesWithFilterAndBlur","uploadStockImage","getAssetEnhancementSettingsService","getAssetEnhancementSettings","withBrandKitService","useBrandKitRepository","getBrandKits","updateBrandKit","createBrandKits","brandkitResp","brandkitError","cache","brandkitLoading","brandKitDataService","brandkitApiState","withDisplayTemplatesService","WithDataService","useCopilotRepositoryContext","fetchDisplayAdsTemplateGroups","fetchDisplayAdsTemplateGroupDetails","editDisplayAdsAssetRecommendations","fetchDisplayAdsTemplateDefinition","displayTemplatesDataService","witDataService","WithCopilotProvider","CopilotRepositoryProvider","campaignId","locale","CurrentLocale","recommendationType","withCopilotDataServiceProvider","withPagePerfMarker","perfMarkerName","dataLoadedOnce","setDataLoadedOnce","_useState3","marker","createChild","pagePerfMarker","setDataLoaded","useBaseTargetFolderPickerStyles","makeResetStyles","useTargetFolderPickerStyle","targetFolderPickerViewContainer","opacity","dialog","overflow","maxWidth","maxHeight","overflowX","overflowY","filterContainer","folderPathContainer","AdsStudioTargetFolderPicker","selectedFolder","setSelectedFolder","assetLibraryUserPreferences","baseClassName","resetSelectionState","navigateIntoFolder","folderPath","navigateToFolderInPath","f","renderTilesGridCell","index","sectionName","targetFolderPickerFolderCell","AdsStudioFoldersGridCell","highlightedText","onFolderClick","GridCellFactory","onFailedToLoadData","onFolderPathClicked","onRenderHeader","ImagesFilterBar","FolderPathBreadcrumb","onItemClick","visibleForRootFolder","onRenderEmptyView","LibraryEmptyView","hideAddAssetCards","mergeClasses","AdsStudioLibraryPageContent","renderGridCell","displayFolderPath","onFolderNavigationChange","renderHeader","gridScrollContainer","renderEmptyView","dynamic","TargetFolderPickerModal","sourceFolderId","show","onMoveHereClick","onCancel","currentFolderId","moveHereButtonDisabled","DismissIcon","Dismiss20Regular","Dialog","open","onDismiss","DialogSurface","DialogBody","DialogTitle","action","DialogContent","DialogActions","Button","disabled","appearance","Modal","isModalVisible","setModalVisible","batchMoveAsync","onSuccess","onError","selectedFolderId","alODataErr","getUXMessage","getUseBatchMoveModalHook","ModalComponent","_excluded2","render","isFoldersEnabled","useBatchMoveModal","withFilterContext","withActivityContext","withAdsStudioServicesConsumer","withAdsStudioServicesLoaded","videoId","EditVideoPageComponent","useAdFilter","useGlobalFilterContext","adFilterStore","FilterStorageFactory","featureName","entityName","filterEntityOptions","entitySchema","getAdFilterStore","saveFilter","waitRemote","deletePromise","clean","remoteSyncTasks","onRemoteSyncDone","savePromise","save","pages","PerformancePage","navigation","updateGlobalWaterfallFilter","outRenderInlineChart","isHideShowGraphButton","_useDatePicker","renderDatePicker","civilMinDate","DatePickerWithPageReady","filterType","useDatePicker","_useAdStudioInlineCha","_useCommonColumn","renderHeaderWithPopup","column","columnIndex","helpId","sortable","headerCell","querySelectorAll","removeAttribute","style","cursor","CommonColumn","alignWithCampaignUI","withCustomizedSortIcon","renderDetailsList","pagedItems","onSort","toolbar","pager","columns","sortByColumn","expandColumns","CampaignDetailsList","skipViewportMeasures","items","sortedColumn","stickyHeader","subColumnProps","showSubColumns","parentColumnPlacement","ParentColumnPlacement","Left","expandIconName","collapseIconName","role","onUpdateColumns","newColumns","_useToolbarContainer","toolbarSelectedConfig","Map","renderToolbarContainer","filterBar","setChartShown","isEditingFilter","toolbarUnselectedConfigList","iconLeftGlyphName","expanded","toolbarUnselectedConfig","toolbarConfigInEditingFilterMode","ToolbarContainer","forceHideToolbar","showToolbarSelected","showToolbarUnselected","onClear","useToolbarContainer","PerformancePageComponent","onGotoLandingPage","gotoHomePage","onGoBack","goBack","HomePage","libraryDataService","_ref3$folderId","_ref3$assetType","_ref3$includeAssets","_ref3$includeSubfolde","_ref3$includeParentHi","getBasicFoldersRepository","_useBasicAssetsServic","withLibraryFoldersService","HomePageComponent","Home","ImagesPage","ImagesPageComponent","DisplayTemplatesPage","DisplayTemplatesPageComponent","CreateVideoPage","VideoTemplatesPage","withCopilotDomainDataService","VideoTemplatesPageComponent","VideosPage","VideosPageComponent","BrandKitPageComponent","renderHelpPopup","popupId","HelpPopupInline","topic","LibraryPageComponent","useBatchMoveModalHook","libraryRepository","stockImageRepository","sourceName","sourceNames","getLibraryAndStockImageRepository","_useMultiSourceAssets","useMultiSourceAssetsService","dataSourceNames","totalAssetCountBySource","getAssetCountBySource","totalLibraryAssetCount","totalStockAssetCount","withLibraryAndStockImagesService","SearchResultView","mediaRepository","MediaRepository","getSmartCroppings","getSmartCropSettingsFactory","EditImagePageComponent","MultiLineEllipsisText","EditDisplayTemplatePage","CreateDisplayTemplatePage","_useMemo4","_useBasicAssetsServic3","generateImagesByAI","useAIGeneratedImages","addStockImage","addAIGCImage","withAIGCStockService","renderHelpButton","HelpButton","GenerateImagePageComponent","UploadFilesPanel","UploadFolderPanel","MixedImagePanel","MixedVideoPanel","AssetDetailsPageComponent","BackgroundRemovalModalComponent","AppRoutes","withGenerateImageContext","withCcJsDataContextProvider","withAdStudioNavigation","withAssetTaskStatusPoller","Routes","ROOT_ROUTE","history","isXandrIntEnabled","XandrIntegrationEnabled","useJsData","jsData","Account","find","forceToReloadRef","forceToReload","rootRoute","localNavigation","useLocalNavigation","gotoCampaignUIPage","openInNewTab","subpath","_ref3$redirect","redirect","_ref3$reload","reload","_ref3$removeSearchQue","removeSearchQuery","currentSearch","gotoSearchResultPage","_ref4$redirect","_ref4$reload","_ref4$query","gotoPerformancePage","_ref5$redirect","_ref5$reload","gotoImagesPage","_ref6$redirect","_ref6$reload","_ref6$removeSearchQue","gotoVideosPage","_ref7$redirect","_ref7$reload","gotoLibraryPage","_ref8$redirect","_ref8$reload","gotoEditImagePage","editImageUrl","_ref9$redirect","_ref9$reload","_ref9$initialCurrentV","initialCurrentView","gotoEditDisplayImagePage","templateId","_ref10$redirect","_ref10$reload","getTopView","popLocalView","gotoWebsiteImagePanelPage","pushLocalView","gotoStockImagePanelPage","gotoInvestImagePanelPage","gotoInvestVideoPanelPage","gotoAIGenerationPanelPage","_ref12$redirect","_ref12$reload","gotoDisplayTemplatesCreationPage","templateGroupId","gotoDisplayTemplatesPage","_ref14$removeSearchQu","gotoVideoTemplatePage","_ref15$redirect","_ref15$reload","gotoCreateVideoPage","_ref16$redirect","_ref16$reload","gotoEditVideoPage","_ref17$redirect","_ref17$reload","gotoAddVideoPanelPage","gotoUploadFilesPanelPage","gotoUploadFolderPanelPage","gotoMixedImagePanelPage","gotoMixedVideoPanelPage","gotoAssetDetails","gotoBackgroundRemovalModal","updateAssetDetailsParams","oldParams","getViewParams","newParams","oldParamsStr","newParamsStr","setViewParams","gotoAdsPageWithFilter","filterProperty","filterValue","$contains","savingPromise","CampaignType","timeoutPromise","gotoAdsPageWithAssetIdFilter","pathname","useNavigation","pageProps","renderSearchResultPage","renderPerformancePage","renderHomePage","renderImagesPage","renderDisplayTemplatesPage","renderVideosPage","renderVideoTemplatesPage","renderEditVideoPage","renderCreateVideoPage","renderBrandKitPage","renderLibraryPage","renderGenerateImagePage","renderEditImagePage","renderCreateDisplayTemplatePage","renderEditDisplayTemplatePage","_Fragment","Switch","Route","path","LocalNavigationRoute","viewName","getAppRoutes","AdsStudioAppShellCMUI","adsstudioAppShellCMUIProps","propsAdapter","useRouteMatch","_props","scope","values","setIsAIGCRegionRestricted","isCopilotRegionRestricted","feature","isRestricted","isAllUploadFlowImageUpscaleEnabled","isReadonly","IsReadOnlyUser","_useAdFilter","loggerWithoutPageInfo","moreProps","isUploadImageUpscaleEnabled","useTheme","customComponentStyles","AdsStudioLandingPageComponent","Scenario","Activity","LocalNavigationProvider","AdsStudioThemeProvider","ComponentStylesProvider","componentStyles","CampaignFetchProvider","DataProvider","changeLayout","commonButtonStyle","justifyContent","alignItems","gap","borderRadius","border","outline","commonTextStyle","fontFamily","fontStyle","textAlign","flex","textOverflow","whiteSpace","commonIconStyle","useAssetsEntryCardStyle","fillWidth","assetsEntryCard","color","objectFit","AssetsEntryCard","isFillWidth","cardClassName","Add20Regular","AddAssetEntryCard","useStyles","addMediaPanel","panelContent","scrollbarWidth","overlay","layer","AdsStudioPanelContainer","forwardRef","onRenderFooterContent","isOpen","headerText","size","overlayBodyRef","styles","DrawerOverlay","modalType","tabIndex","DrawerHeader","DrawerHeaderTitle","Dismiss24Regular","DrawerBody","Children","child","cloneElement","DrawerFooter","Layer","Overlay","isDarkThemed","AdsStudioSpinner","useCustomSize","customStyle","spinnerStyles","circle","root","Spinner","SpinnerSize","large","useActionButtonStyles","actionButton","ActionButton","Icon","classnames","TilesGridCellActionButton","AdsStudoThemeContext","getComponentStyles","componentName","components","contextValue","Provider","emptyAdsStudioTheme","useThemedStyles","prefixClassName","getDefaultStyles","themedStyles","overridenStyles","getOverridenStyles","defaultStyles","createUseStyles","withAdsStudioStyles","Component","useRawStyles","finalComponentName","HOC","_useThemedStyles","positionFill","left","right","CellOverlay","cellOverlayContainer","TilesGridCellOverlay","background","transition","getCommonCellCardStyle","flexShrink","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","useGridDecorativeLabelStyle","tilesGridCellDecorativeLabel","tokens","colorNeutralForegroundInverted","colorNeutralBackgroundStatic","float","cellLabelDisplay","CellDecorativeLabel","secondaryText","additionaIconName","additionalText","customClass","cellLabel","iconTextWrapper","TilesGridCellDecorativeLabel","iconProps","CellDeletionButtonDecorator","onDelete","cellDeletionButtonDecorator","IconButton","ariaLabel","deleteButton","TilesGridCellDeletionButtonDecorator","themeLighter","CellImage","showSpinner","onLoaded","enableRetry","customClasses","onCustomizedSpinner","ImageLoadState","notLoaded","imageLoadState","setImageLoadState","onLoadingStateChange","onLoadError","loaded","reloadImage","onErrorWithRetry","retryCount","onReloadImage","onImageLoadingStateChange","tilesGridCellImageContainer","imageStateOverlayClass","stateParent","ArrowClockwiseRegular","reloadBtn","FluentImage","imageClass","maximizeFrame","noop","ImageFit","cover","TilesGridCellImage","useCellSectionDecoratorStyle","outlineStyle","outlineWidth","outlineColor","colorBrandBackground","borderRadiusSmall","TilesGridCellSelectionDecorator","selected","isFocused","cellSelectionDecoratorWrapper","selectedStateWrapper","cellSelectionDecorator","selectedState","Checkbox","checked","TilesGridLoadingCell","onLoading","gridCellContent","hasSetUpObserver","setHasSetUpObserver","onLoadingCalled","observer","IntersectionObserver","entries","entry","isIntersecting","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","onDragStart","container","createElement","DragPreview","ReactDOM","domElement","firstChild","body","appendChild","dataTransfer","setDragImage","useFolderGridCellDropStyle","outlineOffset","TilesGridCellDropDecorator","droppable","onDrop","customClassName","isOver","setIsOver","tilesGridCellDropOver","onDragOver","onDragLeave","onDropHandler","DEFAULT_CONFIG","maxColumnWidth","minColumnWidth","rowHeight","preferredCellsPerPage","TilesGridInternal","onRenderCell","onRenderCellImpl","gridItem","_index","tilesGridContainer","Grid","renderItem","columnWidth","gridMode","columnPadding","rowPadding","scrollContainer","maxColumns","minItemHeight","TilesGrid","boxSizing","findItem","itemToFind","itemKey","addItem","itemToAdd","removeItem","itemToRemove","MultiSelectionGrid","onSelectionChange","propSelectedItems","selectedItems","allItems","selectItem","_action","_action2","newSelectedItems","fnSelectItem","SectionTilesGridInternal","sectionData","loadNextPage","multiSelectionEnabled","onRenderLoadingCell","otherProps","wrappedSectionData","section","countOfSectionsWithData","sec","GridComponent","sectionTilesGridContainer","gridConainerClass","sectionTitle","sectionClassName","SectionTilesGrid","useStyle","TextWithHighlightImp","txt","highlightedClassname","enableTooltip","textFragments","matched","idx","lowerText","lowerSubstr","startIndex","fragments","substring","splitString","Tooltip","relationship","withArrow","positioning","TextWithHighlight","getSharedAssetContainerStyle","flexWrap","colorPaletteYellowBackground3","getSharedMultiSelectingCellStyles","selectableCardContainerAutoHideCheckbox","visibility","selectableCardContainer","iconStyles","useFolderGridCellStyle","paddingRight","getCountDescription","itemInfo","subFoldersCountDesc","imagesCountDesc","videosCountDesc","subfoldersCount","imageAssetsCount","videoAssetsCount","FolderCountInfo","FolderRegular","ImageRegular","VideoRegular","FoldersGridCell","selectable","onSelect","renderAccessory","selectedItemCount","folderGridCellContainer","itemInfos","SubFoldersCount","ImageAssetsCount","VideoAssetsCount","convertItemInfo","firstAsset","getFolderThumbnail","onCheckboxChange","hasAccessory","onChange","useImageAssetsGridCellStyle","imageAssetsGridCellContainer","animationName","from","to","animationDuration","animationIterationCount","animationTimingFunction","imageCellLabelContainer","AdsStudioImageAssetsGridCell","renderCellContent","isMultiSelecting","deletable","isImageLoaded","setImageLoaded","manualAddedImageSourceType","cellContent","defaultContent","Fragment","CellLabel","ArrowSync16Filled","funcRenderOverlayContent","onCellClick","withSelectionDecorator","decoratedContent","withDeleteButtonDecorator","DefaultImageGridCell","DefaultVideoGridCell","AdsStudioAssetGridCell","onDetailsClick","onEditClick","focusIndex","setFocusIndex","focusCellButton","i","assetContainers","firstButton","code","detailButton","editButton","clickDetails","evt","clickEdit","isVideoCell","isStockImageCell","showEditIcon","VideoTemplateUI","EditRegular","ListRegular","onClickVideo","useControlStyles","videoContainer","sliderContainer","previewVideo","commonParentStyles","iconCommonStyles","usePlaceholderStyle","encoding","unverified","borderBottom","failed","VideoPureComponent","EncodingPlaceholderWithStyle","EncodingPlaceholder","FailedPlaceholderWithStyle","FailedPlaceholder","UnverifiedPlaceholderWithStyle","UnverifiedPlaceholder","useVideoAssetsGridCellStyle","VideoAssetsGridCellContainer","videoCellLabelContainer","videoCell","placeholderCell","AdsStudioVideoAssetsGridCell","isVideoLoaded","setVideoLoaded","_useState4","showVideo","setShowVideo","_useState5","_useState6","hideVideo","setHideVideo","_useState7","_useState8","thumbnailSeletable","setThumbnailSelectable","durationDesc","_useState9","_useState10","cellRef","setCellRef","timerRef","onClickVideoCard","playVideoObject","play","wrapperWidth","TimerRegular","placeholderContent","videoWrapper","x","autoPlay","muteByDefault","showTime","showPlay","customPlayObject","imageWrapper","borderRadiusXLarge","iconChecked","borderRadiusCircular","ImagePanelGridCell","onSelectImage","isSelected","isMultiple","onClickCell","CheckmarkCircleFilled","contentGridWrapper","PanelImageGrid","imageWidth","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","info","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","isValidUrl","Input","placeholder","contentBefore","SearchFilled","MessageBar","intent","contentWrapper","searchArea","input","messageBar","dropdown","listbox","StockImagePanelContent","setSelectedImages","setIsLoadingMore","isLoadingFirstPage","setIsLoadingFirstPage","setImages","setTotalCount","selectedImages","searchQuery","hasMore","filterQueryJSON","onInputChange","_ref$value","loadImages","_ref2$$search","_ref2$$skip","_ref2$$query","extend","prevImages","Preview","newSkip","originSelectedLength","newSelectedList","selectedItem","prototype","PropTypes","InvestImagePanelContent","investImageService","InvestImageDataService","getInvestImages","getInvestAssets","_ref2$creativeId","creativeId","queryParams","assetTypeId","videoNameWrapper","videoName","emptyButtonStyle","borderImage","borderColor","borderStyle","InvestVideoPanelContent","setSelectedVideos","videos","setVideos","selectedVideos","getInvestVideos","loadVideos","prevVideos","onSelectVideo","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","isLoading","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","startSignal","stopSignal","jobCompleteCallback","setPageNumber","newPageNumber","getLandingPageSuggestions","landingPageUrl","isSubdomain","pageNum","minimumResolution","setJobCompleteCallback","forceInternalScrapingService","getMoreLandingPageSuggestions","_ref3$url","_ref3$sDomain","sDomain","ImagePaging","useWebsiteImages","showDomain","finalUrlDomain","onSubdomainChange","regexResult","trim","split","getSubdomain","newSearchUrl","OverflowItemsMenu","overflowItems","_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","isInSubfolder","isAnyFilterSet","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","contentAfter","colorNeutralBackground3","contentLabel","defaultMinWidth","defaultMinHeight","forceClear","_props$defaultOpen","defaultOpen","minWidthId","afterMinWidthId","minHeightId","afterMinHeightId","setIsOpen","showInput","setShowInput","menuList","setMenuList","minWidthRef","minHeightRef","setMinWidth","setMinHeight","getOnChangeCallback","setter","onMinWidthChange","onMinHeightChange","newMinHeight","newMinWidth","focusTextField","textFieldRef","onMinWidthKeyUp","onMinHeightKeyUp","onDropdownDismiss","clear","trapFocus","onOpenChange","Label","htmlFor","civilDateEqual","d1","d2","compareCivilDate","civilDateRangeEqual","r1","r2","civilDateToDebugString","cd","civilDateRangeToDebugString","dr","yesterday","SimpleDateRangePickerInternal","defaultSelectedDateRange","defaultIsSelectingStartDate","onDateRangeChange","isSelectingStartDate","selectedDateRange","setSelectedDateRange","leftNavigatedDate","setLeftNavigationDate","rightNavigatedDate","years","maxDate","selectedRanges","onNavigateStartMonthDate","onNavigateEndMonthDate","months","onSelectDate","newDate","SingleMonthCalendar","navigatedDate","onNavigateDate","isRightNavigateVisible","isLeftNavigateVisible","SimpleDateRangePicker","containsErrorCodeInList","errorList","searchErrorCode","processVideoSizeLimitError","limit","fetchImgPromise","imgUrl","crossOrigin","createOffScreenContext","canvas","context","getContext","getImagePixels","imageHeight","_createOffScreenConte","drawImage","getImageData","parseMaskResultPromise","maskSetsBase64Json","_maskSetsBase64Json$s","shape","reshapeTo3D","array","y","z","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","_x","_x2","_x3","_x4","decompressAndParse3DArray","maskSets3Darray","maskSetsArray","row","a","flat","alphaArray","pixelMask","_createOffScreenConte2","originalImagePixels","_createOffScreenConte3","pixels","_createOffScreenConte4","secondContext","secondCanvas","putImageData","imageUrlWithoutBackground","toDataURL","getMaskValueAtPointFunc","segmentationMasks","createColorBackground","_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","getClosestAspectRatio","inputRatio","closestRatio","closestDiff","abs","_i","_Object$entries","_Object$entries$_i","label","ratio","diff","formatBrandkitForAPI","Array","isArray","formattedObj","SubType","errorObjectToString","stack","getErrorString","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","href","INVALID_FOLDER_ID","filterFilesByExtensions","files","supportedExtensions","acceptedFiles","createFolderHierarchyMap","foldersToCreate","relativePath","pathArr","pop","getRelativeFoldersFromRelativePath","webkitRelativePath","currFolderMap","createFolderWithErrorHandling","folderCreationErrors","createFolderAsync","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","processAssetJobPromise","dataURL","validatedResult","isImageUpscaled","nameWithoutExt","runJobsInParallelWithRateLimit","jobsToRateLimit","maxJobsInParallel","handleJobError","processFolderSizeLimitErrors","folderLimitResult","processFolderSizeLimitError","folderLimit","processAssetErrors","getFolderUploadError","genericErrorMessage","getTaskPoller","timerId","task","_ref$interval","stopRunning","counter","taskPromise","existDup","arr","newArr","newKeys","ACTION_TYPE_SET_FOLDER_DATA","AL_FOLDER_REDUCER_INIT_STATE","folderDataStateReducer","state","actionType","actionData","_actionData$newFolder","newFolders","_actionData$newAssets","newAssets","_actionData$newPerfTi","newPerfTimeSeries","shouldFlush","foundFolderDup","foundAssetDup","_Error","_wrapNativeSuper","msgs","InvalidFolderId","uxMessage","actionable","DuplicateFolderName","InvalidFolderName","genericError","ignorable","shortMsg","FolderHasAssets","InvalidId","FolderHasSubFolders","availableActions","AssetIdInvalid","DuplicateAssetsUnderFolder","DuplicateImage","FolderCanNotMoveToTarget","DuplicateEntity","FolderLimitExceededPerAccount","getFolderLimit","CampaignServiceMediaIdInvalid","CampaignServiceMediaIsAssociated","gotoAds","reqCountErr","GenerateImagesPromptLengthInvalid","GenerateImagesRequestCountLimitExceededPerAccount","GenerateImagesRequestCountLimitExceeded","GenerateImagesPromptContentInvalid","GenerateImagesAIGCNoRecommendationWithBrand","AI_Generation_Failed","shouldRetry","GenerateImagesAIGCInvalidImageSize","GenerateImagesAIGCInvalidImageContent","gotoDisallowedContent","GenerateImageAIGCInvalidUserPrompt","GenerateImageAIGCInvalidGeneratedImage","PATH_SEPERATOR","getPathString","pathString","fp","getAssetTypeToFetch","filterSettings","defaultAssetType","assetTypeFilter","useFolders","ROOT_FOLDER","_useDataServiceReduce","initState","_useReducer","useReducer","_useReducer2","folderData","dispatch","setFolderData","setAssetsOnly","appendFolderData","setPerfTimeSeriesData","resetFolderData","useDataServiceReducer","setAssets","newFolderId","setNewFolderId","setFolderPath","currentFolder","latestRequestTimestamp","curFilterSettings","curSortBy","curAssetCountToLoadForSubFolders","curFolderAssetTypeToLoad","curIncludeParentHierarchy","curIncludeSubfolders","curPageName","curPerfMarker","pendingVideoBlobUploadPromiseTokens","resetData","_len","_key","loadFolderArgs","folderAssetTypeToFetch","loadFolderDataInternal","hasDateRange","_ref5$includeSubfolde","_ref5$withBIData","requestTimestamp","saveCurrentFilters","otherFilters","dateAddedDateRange","tapCatch","loadFolderData","_ref7$includeSubfolde","loadFolderDataInDateRange","_ref8$includeSubfolde","loadMoreFolderDataImpl","_ref11$count","_ref11$withBIData","loadMoreFolderData","_ref12$count","loadMoreFolderDataInDateRange","_ref13$count","reloadFolders","reloadFoldersInDateRange","folderToNavigate","_ref16$id","_ref16$navigateToNewF","navigateToNewFolder","curFolderPath","indexOfFolderInPath","navigateIntoFolderItem","_folder$parentHierarc","navigateIntoRootFolder","createFolderBulk","deleteEmptyFolder","uploadImageByUrlToFolder","uploadVideoToAzureBlob","_ref28","_ref29","on","uploadVideoToFolder","_ref30","uploadVideoPerfMarker","progressForBlobUpload","percentage","total","progressForSavingBlobToMT","_ref31","finally","cancelPendingVideoUpload","cancel","_ref32","_ref33","_ref34","uploadInvestImageToFolder","_ref35","uploadInvestVideoToFolder","_ref36","_ref37","newName","newAsset","splice","_ref38","tap","_batchDeleteAssetsAsync","_ref39","parentPath","onItemDeleted","_ref40","_ref41","assetName","_ref42","_deleteEmptyFolderAsync","_ref43","_ref43$onItemDeleted","_batchDelete","_ref44","_ref44$folders","_ref44$assets","_deleteFolder","_ref45","ic","concurrency","foldersResult","assetsResult","_ref46","totalItmCnt","_ref46$skip","_ref47","hasNextPage","results","_ref48","loadDataError","_ref49","batchDelete","_ref50","_ref50$folders","_ref50$assets","_ref50$onItemDeleted","_ref51","_ref51$folders","_ref51$assets","dataOwnerPageName","propTypes","getFolders","useCommonImageRepoMethods","loadedImages","setLoadedImages","latestTimestampRef","setImageCroppingTasks","croppingTaskUpdated","setCroppingTaskUpdated","_ref2$useCache","useCache","curTasks","dirty","newTaks","curTsk","newTsk","t","ex","newImage","newImages","renameLocalImage","VideoChangedFieldsWithStatusUpdate","checkError","retryPromise","getPromise","_ref2$timeout","timeout","_ref2$shouldRetry","_ref3$pollInterval","pollInterval","_ref3$maxRetryCount","maxRetryCount","onStartPolling","taskPoller","AssetWithFoldersDataServiceContext","_useFolders","loadAssetsUnderFolder","_useCommonImageRepoMe","_useCommonVideoRepoMe","setVideoUpdated","getVideoTaskStatus","videosToCheck","notFinishedTaskList","newVideoUpdated","responseKeys","useCommonVideoRepoMethods","_useFolderPathTree","folderPathTree","setFolderPathTree","updateFolderPathTree","currentFolderPathTree","folderIdArr","subFoldersArr","totalSubfoldersCount","recursiveUpdate","subFolders","subFoldersCount","newSubFloders","loadFolderPathTreeItemImp","subFolder","initializeFolderPathTree","loadFolderPathTreeItem","loadMoreFolderPathTreeItem","currentFolderCount","reloadFolderPathTreeItem","all","totalSubfoldersCountArr","useFolderPathTree","loadDataArgs","minImageWidth","minImageHeight","_ref2$includeParentHi","loadDataImpl","useDateRange","loadDataInDateRange","loadPerfTimeSeriesDataImpl","_ref4$isGlobalSearch","_ref4$hasPerfData","uploadImageByUrl","_ref6$updateCurrentPr","_ref6$name","_ref6$folderId","uploadVideo","_ref7$folderId","_ref7$perfMarker","uploadVideoByUrl","_ref8$name","_ref8$folderId","uploadInvestImage","uploadInvestVideo","contextVal","reloadData","reloadDataInDataRange","loadMoreDataInDateRange","useAdsStudioServices","Comp","pickedPropNames","CompWithService","pickedProps","WindowStatus","INDETERMINATE","UNSET","MAX_ITEM_COUNT","AssetsWindowManager","this","assetWindows","windowsCount","ceil","w","SequenceAssetsWindowManager","winMgrList","mgr","resetWindows","winObj","setTotalItemCount","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","noMoreData","reloadAssets","resetAssetsData","getTotalAssetCount","_ref$pageSize","_ref2$pageSize","assetWindowManagerRef","service","setImagesWithFilter","setImagesWithFilterAndBlur","filterRes","Effect","Resource","unshift","getImagesWithFilterAndBlurImp","blurLevel","ManualBgBlurLevel","getOriginalImageWithBlur","originalImageWithBlurRes","imagesWithFilterAndBlurRes","imagesWithFilterAndBlurInner","blur","newImageUrl","generatedUrl","_ref11$folderId","newVideoTasks","isPollerRunning","currentTaskPoller","startVideoTaskStatusPoller","stopPoller","KEY","updateInProgressTasksStatus","inProgressTaskCount","ss","getSessionStorage","supportsStorage","set","invalidate","ImageCroppingTaskStatusPoller","_useAdsStudioServices","startImageCroppingTaskStatusPoller","VideoTaskStatusPoller","ChevronRightIcon","bundleIcon","ChevronRight20Filled","ChevronRight20Regular","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","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","onMouseDown","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","sortingOptions","safeSetSortBy","newVal","allSortByOptions","safeNewValue","onSortByChange","_evt","sortby","useSortByState","_useDateAddedState","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","useFilterBarStyles","rowGap","remaining","useBaseAdditionalFilterBarStyles","colorNeutralForeground2","fontWeightSemibold","useAdditionalFilterBarStyles","hide","filterText","AdditionalFilterBar","baseClasses","filterId","setForceClear","VideosFilterBar","_useFilterBarState","FluentProvider","webLightTheme","_useFilterBarState2","LibraryFilterBar","_useFilterBarState3","assetTypeToggleButtons","SearchResultFilterBar","_useFilterBarState4","FilterContextProvider","ImportSourceFilterComponent","onValueChange","dropdownOptions","newHumanizedVaue","newHumanizedValue","AssetSourceFilterComponent","ImageSizeFilterComponent","onImageSizeChange","AL_DATE_ADDED_FILTER_DEFAULT_RANGE","getDefaultDateRange","DateAddedFilterComponent","_ref14$dateAddedFilte","PerformanceSearchTextFilterComponent","getPerformanceFilterComponents","useBreadcrumbStyles","breadcrumbContainer","useAdsStudioLibraryPageContentStyle","HiddenDivForAnnounce","DEFAULT_GRID_CONFIG","toAnnounce","announce","setAnnounce","clip","overlaySpinnerStyles","FOLDER_GRID_CONFIG","AdsStudioLibraryPageContentInternal","dataLoaded","reloadingFolders","renderToolbar","sectionSelectedItems","isAssetLibraryAIGCMVPEnabled","preDefinedAssetSources","announcedText","setAnnouncedText","searchBoxText","openSystemUploadRef","openSystemUpload","onStockButtonClick","onInvestButtonClick","onWebsiteButtonClick","loadedAssetList","others","cell","isPageInited","setPageInited","loadingData","setLoadingData","loadDataAsync","o","libraryPageLoadDataPerfMarker","usePreDefinedAssetSources","bulkTookbar","foldersGridSection","assetsGridSection","AssetLibraryCopilot","willFetchData","willRender","isPageLoading","hadNoData","isSectionDataEmptyStatus","injectedContentContainer","emptyViewContainer","assetLibraryAccountPreferences","wordBreak","ConfirmDialog","isDisplayed","errorText","confirmString","cancelString","onClickConfirm","onClickCancel","isUiBlocked","warningMsg","GenerateImageContext","GenerateImageContextProvider","generateImageExample","setGenerateImageExample","useLoadingViewStyles","backgroundRepeat","animation","backgroundPosition","LoadingIndicator","loadingViewStyles","ExamplePromptList","backgroundImageUrl","ExampleImageListWithoutStyle","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","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","prevArr","updateFilePreviewArrayUploadProgress","uploadBatchs","each","updateProgress","uploadProgressBoundary","uploadResult","errorMsg","upscaledImagesArrCount","fileCount","genericErrorMsg","newErrors","getImageValidationErrorMessage","isReachFileSizeLimit","limitMB","fileSizeMB","MaximumImageFileSizeMB","MaximumVideoFileSizeMB","getReachFileSizeLimitErrorMessage","maximumImageFileSize","maximumVideoFileSize","ccJSData","jsDataCcRest","_initCcJsData","cidFetcher","uidFetcher","appendErrorSummary","handleAjaxAuthFailure","willSupportCors","GetJsDataInfo","ClientCenterUIAPI","initCcJsData","CcJsDataContextProvider","initialJsData","ItemLayout","constructor","columnCount","itemBox","columnHeights","itemPositions","getItemPosition","positionChecked","getBox","setItemPosition","itemHeight","itemWidth","minIndex","minHeightColumn","nextColumnHeights","targetItemHeight","updateLayout","placeItems","lastUpdateIndex","getMaxHeight","heights","setItemCount","smallest","ItemBox","itemBoxes","setBox","ItemMeasurer","itemBoxChanged","itemRef","setItemRef","canceled","box","oldHeight","oldWidth","updateViewPort","debounce","borderBoxSize","blockSize","inlineSize","resizeObserver","ResizeObserver","disconnect","WrappedItem","itemLayout","itemPosition","largerThanMinItemHeight","ListItem","writingMode","GridInternal","scrollTop","windowRect","isItemBoxChanged","visibleItems","isVisible","itemTop","itemBottom","windowHeight","bufferHeight","topBorder","forceRender","List","navigationMode","columnWidthProp","rowHeightProp","topDiv","setTopDiv","topDivRect","setTopDivRect","clientHeight","clientWidth","setColumnCount","setItemBoxChanged","isItemLengthChanged","setItemLengthChanged","setOffset","useLayoutEffect","newOffset","offsetTop","offsetParent","useTopDivMetaData","wrappedScrollContainer","setScrollTop","update","setUpdate","scrollY","scrollHandler","windowScrollHandler","element","useScroll","getSize","documentElement","setWindowRect","updateSize","useWindow","itemLengthChanged","updateTopDivRect","calculatedColumnWidth","availableColumn","extendedColumnWidth","calculatedRowHeight","columnWithPadding","targetColumnWidth","indexedItems","ComponentStylesContext","useComponentStylesContext","useNoBaseStyles","withOverridableStyles","useBaseStyles","overridenClasses","defaultClasses","baseClass","finalBaseClassName","finalClasses","componentDisplayName","LocalNavigationContext","localViewStackRef","activeElementRef","updated","setUpdated","activeElement","HTMLElement","topView","viewIndex","isTopView","localRouteUpdated","selectedButtonClasses","initialClasses","inlineChart","getColor","metricName","lineChartData","MetricName","PrimaryDataPoints","ComparisonDataPoints","lineData","legend","DateTime","Value","lineOptions","strokeWidth","comparisonData","legendShape","strokeDasharray","strokeDashoffset","strokeLinecap","chartData","chartTitle","LineChart","legendsOverflowText","allowMultipleShapesForPoints","HistoryListImages","historyList","selectedIndex","listStyle","DataContext","dataPromise","setDataPromise","setData"],"sourceRoot":""}