{"version":3,"file":"static/js/application.async.landing~52142909.f517e2ce.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\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});\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 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 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 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","MSANV2","MSEdgeCarousel","MSANBanner","MSANRiver","MSNCarousel","MSNPartnerStripe","MSNRestoday","MSANRectangle","MSEdgeMobile","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","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","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":""}