@internetarchive/collection-browser 2.7.7 → 2.7.8-alpha1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +29 -29
- package/.husky/pre-commit +4 -4
- package/LICENSE +661 -661
- package/README.md +83 -83
- package/dist/index.d.ts +13 -13
- package/dist/index.js +13 -13
- package/dist/src/app-root.d.ts +107 -99
- package/dist/src/app-root.js +539 -505
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
- package/dist/src/assets/img/icons/arrow-left.js +2 -2
- package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
- package/dist/src/assets/img/icons/arrow-right.js +2 -2
- package/dist/src/assets/img/icons/chevron.d.ts +2 -2
- package/dist/src/assets/img/icons/chevron.js +2 -2
- package/dist/src/assets/img/icons/contract.d.ts +2 -2
- package/dist/src/assets/img/icons/contract.js +2 -2
- package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
- package/dist/src/assets/img/icons/empty-query.js +2 -2
- package/dist/src/assets/img/icons/expand.d.ts +2 -2
- package/dist/src/assets/img/icons/expand.js +2 -2
- package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
- package/dist/src/assets/img/icons/eye-closed.js +2 -2
- package/dist/src/assets/img/icons/eye.d.ts +2 -2
- package/dist/src/assets/img/icons/eye.js +2 -2
- package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
- package/dist/src/assets/img/icons/favorite-filled.js +2 -2
- package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -1
- package/dist/src/assets/img/icons/favorite-unfilled.js +2 -2
- package/dist/src/assets/img/icons/filter.d.ts +2 -2
- package/dist/src/assets/img/icons/filter.js +2 -2
- package/dist/src/assets/img/icons/login-required.d.ts +1 -1
- package/dist/src/assets/img/icons/login-required.js +2 -2
- package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/account.js +2 -2
- package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
- package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
- package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/data.js +2 -2
- package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
- package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/film.js +2 -2
- package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/images.js +2 -2
- package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
- package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/search.js +2 -2
- package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/software.js +2 -2
- package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
- package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
- package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/video.js +2 -2
- package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/web.js +2 -2
- package/dist/src/assets/img/icons/null-result.d.ts +2 -2
- package/dist/src/assets/img/icons/null-result.js +2 -2
- package/dist/src/assets/img/icons/restricted.d.ts +1 -1
- package/dist/src/assets/img/icons/restricted.js +2 -2
- package/dist/src/assets/img/icons/reviews.d.ts +1 -1
- package/dist/src/assets/img/icons/reviews.js +2 -2
- package/dist/src/assets/img/icons/upload.d.ts +1 -1
- package/dist/src/assets/img/icons/upload.js +2 -2
- package/dist/src/assets/img/icons/views.d.ts +1 -1
- package/dist/src/assets/img/icons/views.js +2 -2
- package/dist/src/circular-activity-indicator.d.ts +5 -5
- package/dist/src/circular-activity-indicator.js +17 -17
- package/dist/src/collection-browser.d.ts +602 -582
- package/dist/src/collection-browser.js +1671 -1629
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/facet-row.d.ts +30 -30
- package/dist/src/collection-facets/facet-row.js +118 -118
- package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
- package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
- package/dist/src/collection-facets/facets-template.d.ts +13 -13
- package/dist/src/collection-facets/facets-template.js +44 -44
- package/dist/src/collection-facets/more-facets-content.d.ts +106 -106
- package/dist/src/collection-facets/more-facets-content.js +407 -407
- package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
- package/dist/src/collection-facets/more-facets-pagination.js +196 -196
- package/dist/src/collection-facets/smart-facets/dedupe.d.ts +10 -10
- package/dist/src/collection-facets/smart-facets/dedupe.js +33 -33
- package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.d.ts +5 -5
- package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.js +23 -23
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.d.ts +5 -5
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js +44 -44
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.d.ts +5 -5
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js +172 -172
- package/dist/src/collection-facets/smart-facets/models.d.ts +26 -26
- package/dist/src/collection-facets/smart-facets/models.js +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.d.ts +31 -31
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +240 -240
- package/dist/src/collection-facets/smart-facets/smart-facet-button.d.ts +11 -11
- package/dist/src/collection-facets/smart-facets/smart-facet-button.js +86 -86
- package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.d.ts +16 -16
- package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +100 -100
- package/dist/src/collection-facets/smart-facets/smart-facet-equals.d.ts +2 -2
- package/dist/src/collection-facets/smart-facets/smart-facet-equals.js +12 -12
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +5 -5
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +15 -15
- package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
- package/dist/src/collection-facets/toggle-switch.js +94 -94
- package/dist/src/collection-facets.d.ts +103 -103
- package/dist/src/collection-facets.js +522 -522
- package/dist/src/data-source/collection-browser-data-source-interface.d.ts +245 -241
- package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
- package/dist/src/data-source/collection-browser-data-source-interface.js.map +1 -1
- package/dist/src/data-source/collection-browser-data-source.d.ts +377 -373
- package/dist/src/data-source/collection-browser-data-source.js +995 -982
- package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
- package/dist/src/data-source/collection-browser-query-state.d.ts +44 -43
- package/dist/src/data-source/collection-browser-query-state.js +1 -1
- package/dist/src/data-source/collection-browser-query-state.js.map +1 -1
- package/dist/src/data-source/models.d.ts +28 -28
- package/dist/src/data-source/models.js +8 -8
- package/dist/src/empty-placeholder.d.ts +23 -23
- package/dist/src/empty-placeholder.js +79 -79
- package/dist/src/expanded-date-picker.d.ts +43 -43
- package/dist/src/expanded-date-picker.js +109 -109
- package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
- package/dist/src/language-code-handler/language-code-handler.js +26 -26
- package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
- package/dist/src/language-code-handler/language-code-mapping.js +562 -562
- package/dist/src/manage/manage-bar.d.ts +58 -35
- package/dist/src/manage/manage-bar.js +174 -80
- package/dist/src/manage/manage-bar.js.map +1 -1
- package/dist/src/manage/remove-items-modal-content.d.ts +9 -0
- package/dist/src/manage/remove-items-modal-content.js +104 -0
- package/dist/src/manage/remove-items-modal-content.js.map +1 -0
- package/dist/src/mediatype/mediatype-config.d.ts +3 -3
- package/dist/src/mediatype/mediatype-config.js +91 -91
- package/dist/src/models.d.ts +228 -219
- package/dist/src/models.js +401 -401
- package/dist/src/models.js.map +1 -1
- package/dist/src/restoration-state-handler.d.ts +70 -70
- package/dist/src/restoration-state-handler.js +363 -363
- package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
- package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
- package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
- package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
- package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/compact.js +2 -2
- package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/list.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
- package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/tile.js +2 -2
- package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +223 -223
- package/dist/src/sort-filter-bar/sort-filter-bar.js +697 -697
- package/dist/src/styles/ia-button.d.ts +2 -2
- package/dist/src/styles/ia-button.js +17 -17
- package/dist/src/styles/item-image-styles.d.ts +8 -8
- package/dist/src/styles/item-image-styles.js +9 -9
- package/dist/src/styles/sr-only.d.ts +1 -1
- package/dist/src/styles/sr-only.js +2 -2
- package/dist/src/tiles/base-tile-component.d.ts +19 -19
- package/dist/src/tiles/base-tile-component.js +64 -64
- package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
- package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
- package/dist/src/tiles/grid/account-tile.d.ts +18 -18
- package/dist/src/tiles/grid/account-tile.js +72 -72
- package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
- package/dist/src/tiles/grid/collection-tile.js +80 -80
- package/dist/src/tiles/grid/item-tile.d.ts +34 -34
- package/dist/src/tiles/grid/item-tile.js +158 -158
- package/dist/src/tiles/grid/search-tile.d.ts +10 -10
- package/dist/src/tiles/grid/search-tile.js +51 -51
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
- package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
- package/dist/src/tiles/grid/tile-stats.js +53 -53
- package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
- package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
- package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -18
- package/dist/src/tiles/hover/tile-hover-pane.js +69 -69
- package/dist/src/tiles/image-block.d.ts +18 -18
- package/dist/src/tiles/image-block.js +89 -89
- package/dist/src/tiles/item-image.d.ts +39 -39
- package/dist/src/tiles/item-image.js +154 -154
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
- package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
- package/dist/src/tiles/list/tile-list-compact.d.ts +19 -19
- package/dist/src/tiles/list/tile-list-compact.js +122 -122
- package/dist/src/tiles/list/tile-list.d.ts +54 -54
- package/dist/src/tiles/list/tile-list.js +323 -323
- package/dist/src/tiles/mediatype-icon.d.ts +9 -9
- package/dist/src/tiles/mediatype-icon.js +47 -47
- package/dist/src/tiles/overlay/icon-overlay.d.ts +8 -8
- package/dist/src/tiles/overlay/icon-overlay.js +25 -25
- package/dist/src/tiles/overlay/text-overlay.d.ts +9 -9
- package/dist/src/tiles/overlay/text-overlay.js +31 -31
- package/dist/src/tiles/review-block.d.ts +12 -12
- package/dist/src/tiles/review-block.js +56 -56
- package/dist/src/tiles/text-snippet-block.d.ts +27 -27
- package/dist/src/tiles/text-snippet-block.js +73 -73
- package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
- package/dist/src/tiles/tile-dispatcher.js +230 -230
- package/dist/src/tiles/tile-display-value-provider.d.ts +47 -47
- package/dist/src/tiles/tile-display-value-provider.js +94 -94
- package/dist/src/utils/analytics-events.d.ts +28 -28
- package/dist/src/utils/analytics-events.js +30 -30
- package/dist/src/utils/array-equals.d.ts +4 -4
- package/dist/src/utils/array-equals.js +10 -10
- package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -11
- package/dist/src/utils/collapse-repeated-quotes.js +13 -13
- package/dist/src/utils/facet-utils.d.ts +83 -83
- package/dist/src/utils/facet-utils.js +145 -145
- package/dist/src/utils/format-count.d.ts +7 -7
- package/dist/src/utils/format-count.js +76 -76
- package/dist/src/utils/format-date.d.ts +2 -2
- package/dist/src/utils/format-date.js +27 -27
- package/dist/src/utils/format-unit-size.d.ts +2 -2
- package/dist/src/utils/format-unit-size.js +33 -33
- package/dist/src/utils/local-date-from-utc.d.ts +9 -9
- package/dist/src/utils/local-date-from-utc.js +15 -15
- package/dist/src/utils/log.d.ts +7 -7
- package/dist/src/utils/log.js +15 -15
- package/dist/src/utils/resolve-mediatype.d.ts +8 -8
- package/dist/src/utils/resolve-mediatype.js +23 -23
- package/dist/src/utils/sha1.d.ts +2 -2
- package/dist/src/utils/sha1.js +8 -8
- package/dist/test/collection-browser.test.d.ts +1 -1
- package/dist/test/collection-browser.test.js +1309 -1293
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
- package/dist/test/collection-facets/facet-row.test.js +227 -227
- package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
- package/dist/test/collection-facets/facets-template.test.js +91 -91
- package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
- package/dist/test/collection-facets/more-facets-content.test.js +141 -141
- package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
- package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
- package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
- package/dist/test/collection-facets/toggle-switch.test.js +73 -73
- package/dist/test/collection-facets.test.d.ts +2 -2
- package/dist/test/collection-facets.test.js +690 -690
- package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -1
- package/dist/test/data-source/collection-browser-data-source.test.js +89 -89
- package/dist/test/empty-placeholder.test.d.ts +1 -1
- package/dist/test/empty-placeholder.test.js +63 -63
- package/dist/test/expanded-date-picker.test.d.ts +1 -1
- package/dist/test/expanded-date-picker.test.js +95 -95
- package/dist/test/icon-overlay.test.d.ts +1 -1
- package/dist/test/icon-overlay.test.js +24 -24
- package/dist/test/image-block.test.d.ts +1 -1
- package/dist/test/image-block.test.js +107 -107
- package/dist/test/item-image.test.d.ts +1 -1
- package/dist/test/item-image.test.js +85 -85
- package/dist/test/manage/manage-bar.test.d.ts +2 -1
- package/dist/test/manage/manage-bar.test.js +106 -91
- package/dist/test/manage/manage-bar.test.js.map +1 -1
- package/dist/test/manage/remove-items-modal-content.test.d.ts +1 -0
- package/dist/test/manage/remove-items-modal-content.test.js +66 -0
- package/dist/test/manage/remove-items-modal-content.test.js.map +1 -0
- package/dist/test/mediatype-config.test.d.ts +1 -1
- package/dist/test/mediatype-config.test.js +16 -16
- package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
- package/dist/test/mocks/mock-analytics-handler.js +15 -15
- package/dist/test/mocks/mock-search-responses.d.ts +25 -25
- package/dist/test/mocks/mock-search-responses.js +942 -942
- package/dist/test/mocks/mock-search-service.d.ts +15 -15
- package/dist/test/mocks/mock-search-service.js +54 -54
- package/dist/test/restoration-state-handler.test.d.ts +1 -1
- package/dist/test/restoration-state-handler.test.js +270 -270
- package/dist/test/review-block.test.d.ts +1 -1
- package/dist/test/review-block.test.js +44 -44
- package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
- package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
- package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
- package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
- package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js +426 -426
- package/dist/test/text-overlay.test.d.ts +1 -1
- package/dist/test/text-overlay.test.js +38 -38
- package/dist/test/text-snippet-block.test.d.ts +1 -1
- package/dist/test/text-snippet-block.test.js +57 -57
- package/dist/test/tile-stats.test.d.ts +1 -1
- package/dist/test/tile-stats.test.js +81 -81
- package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/account-tile.test.js +76 -76
- package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/collection-tile.test.js +73 -73
- package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/item-tile.test.js +312 -312
- package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/search-tile.test.js +51 -51
- package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
- package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -259
- package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
- package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -56
- package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
- package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list.test.js +297 -297
- package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
- package/dist/test/tiles/tile-dispatcher.test.js +100 -100
- package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
- package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
- package/dist/test/utils/array-equals.test.d.ts +1 -1
- package/dist/test/utils/array-equals.test.js +26 -26
- package/dist/test/utils/format-count.test.d.ts +1 -1
- package/dist/test/utils/format-count.test.js +23 -23
- package/dist/test/utils/format-date.test.d.ts +1 -1
- package/dist/test/utils/format-date.test.js +30 -30
- package/dist/test/utils/format-unit-size.test.d.ts +1 -1
- package/dist/test/utils/format-unit-size.test.js +17 -17
- package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
- package/dist/test/utils/local-date-from-utc.test.js +26 -26
- package/local.archive.org.cert +86 -86
- package/local.archive.org.key +27 -27
- package/package.json +1 -1
- package/renovate.json +6 -6
- package/src/app-root.ts +38 -4
- package/src/collection-browser.ts +66 -17
- package/src/data-source/collection-browser-data-source-interface.ts +5 -0
- package/src/data-source/collection-browser-data-source.ts +14 -0
- package/src/data-source/collection-browser-query-state.ts +1 -0
- package/src/manage/manage-bar.ts +120 -24
- package/src/manage/remove-items-modal-content.ts +102 -0
- package/src/models.ts +10 -0
- package/test/collection-browser.test.ts +23 -0
- package/test/manage/manage-bar.test.ts +41 -18
- package/test/manage/remove-items-modal-content.test.ts +82 -0
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +41 -41
|
@@ -57,7 +57,6 @@ import type {
|
|
|
57
57
|
} from './data-source/collection-browser-query-state';
|
|
58
58
|
import { FACETLESS_PAGE_ELEMENTS } from './data-source/models';
|
|
59
59
|
import type { CollectionFacets } from './collection-facets';
|
|
60
|
-
import type { ManageableItem } from './manage/manage-bar';
|
|
61
60
|
import type { CollectionBrowserDataSourceInterface } from './data-source/collection-browser-data-source-interface';
|
|
62
61
|
import {
|
|
63
62
|
analyticsActions,
|
|
@@ -66,9 +65,9 @@ import {
|
|
|
66
65
|
import chevronIcon from './assets/img/icons/chevron';
|
|
67
66
|
import { srOnlyStyle } from './styles/sr-only';
|
|
68
67
|
import { sha1 } from './utils/sha1';
|
|
69
|
-
import { formatDate } from './utils/format-date';
|
|
70
68
|
import { log } from './utils/log';
|
|
71
69
|
import type { PlaceholderType } from './empty-placeholder';
|
|
70
|
+
import type { ManageBar } from './manage/manage-bar';
|
|
72
71
|
|
|
73
72
|
import './empty-placeholder';
|
|
74
73
|
import './tiles/tile-dispatcher';
|
|
@@ -263,6 +262,12 @@ export class CollectionBrowser
|
|
|
263
262
|
@property({ type: Object }) dataSource: CollectionBrowserDataSourceInterface =
|
|
264
263
|
new CollectionBrowserDataSource(this, this.pageSize);
|
|
265
264
|
|
|
265
|
+
/**
|
|
266
|
+
* The maximum number of pages we will load when a privileged user clicks
|
|
267
|
+
* the "Manage" button on the search page. Limited to 15 pages.
|
|
268
|
+
*/
|
|
269
|
+
maxPagesToManage = 15;
|
|
270
|
+
|
|
266
271
|
/**
|
|
267
272
|
* The page that the consumer wants to load.
|
|
268
273
|
*/
|
|
@@ -299,6 +304,8 @@ export class CollectionBrowser
|
|
|
299
304
|
|
|
300
305
|
@query('collection-facets') private collectionFacets?: CollectionFacets;
|
|
301
306
|
|
|
307
|
+
@query('manage-bar') private manageBar?: ManageBar;
|
|
308
|
+
|
|
302
309
|
@property({ type: Object, attribute: false })
|
|
303
310
|
analyticsHandler?: AnalyticsManagerInterface;
|
|
304
311
|
|
|
@@ -774,20 +781,29 @@ export class CollectionBrowser
|
|
|
774
781
|
* showing the management view. This generally replaces the sort bar when present.
|
|
775
782
|
*/
|
|
776
783
|
private get manageBarTemplate(): TemplateResult {
|
|
784
|
+
const manageViewModalMsg =
|
|
785
|
+
this.profileElement === 'uploads'
|
|
786
|
+
? 'Note: it may take a few minutes for these items to stop appearing in your uploads list.'
|
|
787
|
+
: nothing;
|
|
788
|
+
|
|
777
789
|
return html`
|
|
778
790
|
<manage-bar
|
|
779
791
|
.label=${this.manageViewLabel}
|
|
780
|
-
.
|
|
792
|
+
.modalManager=${this.modalManager}
|
|
793
|
+
.selectedItems=${this.dataSource.checkedTileModels}
|
|
794
|
+
.manageViewModalMsg=${manageViewModalMsg}
|
|
781
795
|
showSelectAll
|
|
782
796
|
showUnselectAll
|
|
797
|
+
?showItemManageButton=${this.pageContext === 'search'}
|
|
783
798
|
?removeAllowed=${this.dataSource.checkedTileModels.length !== 0}
|
|
784
799
|
@removeItems=${this.handleRemoveItems}
|
|
785
|
-
@
|
|
800
|
+
@manageItems=${this.handleManageItems}
|
|
786
801
|
@selectAll=${() => this.dataSource.checkAllTiles()}
|
|
787
802
|
@unselectAll=${() => this.dataSource.uncheckAllTiles()}
|
|
788
803
|
@cancel=${() => {
|
|
789
804
|
this.isManageView = false;
|
|
790
805
|
this.dataSource.uncheckAllTiles();
|
|
806
|
+
if (this.searchResultsLoading) this.dataSource.resetPages();
|
|
791
807
|
}}
|
|
792
808
|
></manage-bar>
|
|
793
809
|
`;
|
|
@@ -799,13 +815,11 @@ export class CollectionBrowser
|
|
|
799
815
|
*/
|
|
800
816
|
private handleRemoveItems(): void {
|
|
801
817
|
this.dispatchEvent(
|
|
802
|
-
new CustomEvent<{ items:
|
|
818
|
+
new CustomEvent<{ items: String[] }>('itemRemovalRequested', {
|
|
803
819
|
detail: {
|
|
804
|
-
items: this.dataSource.checkedTileModels.map(model =>
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
return cloned as ManageableItem;
|
|
808
|
-
}),
|
|
820
|
+
items: this.dataSource.checkedTileModels.map(model =>
|
|
821
|
+
model?.identifier ? model.identifier : ''
|
|
822
|
+
),
|
|
809
823
|
},
|
|
810
824
|
})
|
|
811
825
|
);
|
|
@@ -814,19 +828,32 @@ export class CollectionBrowser
|
|
|
814
828
|
/**
|
|
815
829
|
* Handler when user request to bulk edit from /search/ page
|
|
816
830
|
*/
|
|
817
|
-
private
|
|
831
|
+
private handleManageItems(): void {
|
|
818
832
|
this.dispatchEvent(
|
|
819
|
-
new CustomEvent('itemManagerRequested', {
|
|
833
|
+
new CustomEvent<{ items: String[] }>('itemManagerRequested', {
|
|
820
834
|
detail: {
|
|
821
|
-
items: this.dataSource.checkedTileModels
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
.join(','),
|
|
835
|
+
items: this.dataSource.checkedTileModels.map(model =>
|
|
836
|
+
model?.identifier ? model.identifier : ''
|
|
837
|
+
),
|
|
825
838
|
},
|
|
826
839
|
})
|
|
827
840
|
);
|
|
828
841
|
}
|
|
829
842
|
|
|
843
|
+
/**
|
|
844
|
+
* Handler to show processing modal while removing item
|
|
845
|
+
*/
|
|
846
|
+
showRemoveItemsProcessingModal(): void {
|
|
847
|
+
this.manageBar?.showRemoveItemsProcessingModal();
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
/**
|
|
851
|
+
* Handler to show error modal when item removal failed
|
|
852
|
+
*/
|
|
853
|
+
showRemoveItemsErrorModal(): void {
|
|
854
|
+
this.manageBar?.showRemoveItemsErrorModal();
|
|
855
|
+
}
|
|
856
|
+
|
|
830
857
|
/**
|
|
831
858
|
* Removes all tile models that are currently checked & adjusts the paging
|
|
832
859
|
* of the data source to account for any new gaps in the data.
|
|
@@ -1430,7 +1457,11 @@ export class CollectionBrowser
|
|
|
1430
1457
|
}
|
|
1431
1458
|
|
|
1432
1459
|
if (changed.has('isManageView')) {
|
|
1433
|
-
if (this.isManageView)
|
|
1460
|
+
if (this.isManageView) {
|
|
1461
|
+
this.displayMode = 'grid';
|
|
1462
|
+
this.fetchManagableSearchResults();
|
|
1463
|
+
} else if (this.pageContext === 'search') this.infiniteScroller?.reload();
|
|
1464
|
+
|
|
1434
1465
|
this.infiniteScroller?.refreshAllVisibleCells();
|
|
1435
1466
|
this.emitManageModeChangedEvent();
|
|
1436
1467
|
}
|
|
@@ -2066,6 +2097,24 @@ export class CollectionBrowser
|
|
|
2066
2097
|
}
|
|
2067
2098
|
}
|
|
2068
2099
|
|
|
2100
|
+
/**
|
|
2101
|
+
* Fetches search results for privileged users when in manage view
|
|
2102
|
+
* If total results exceed the threshold, partially resets the datasource pages
|
|
2103
|
+
* and fetches the first page with a limit based on the threshold
|
|
2104
|
+
*/
|
|
2105
|
+
private fetchManagableSearchResults(): void {
|
|
2106
|
+
const maxAllowedResults = this.maxPagesToManage * this.pageSize;
|
|
2107
|
+
if (
|
|
2108
|
+
this.pageContext === 'search' &&
|
|
2109
|
+
this.dataSource.totalResults > maxAllowedResults &&
|
|
2110
|
+
!this.searchResultsLoading
|
|
2111
|
+
) {
|
|
2112
|
+
this.dataSource.resetPages();
|
|
2113
|
+
this.dataSource.fetchPage(1, this.maxPagesToManage); // will fetch 750 results
|
|
2114
|
+
this.infiniteScroller?.reload();
|
|
2115
|
+
}
|
|
2116
|
+
}
|
|
2117
|
+
|
|
2069
2118
|
static get styles() {
|
|
2070
2119
|
return [
|
|
2071
2120
|
srOnlyStyle,
|
|
@@ -155,6 +155,11 @@ export interface CollectionBrowserDataSourceInterface
|
|
|
155
155
|
*/
|
|
156
156
|
reset(): void;
|
|
157
157
|
|
|
158
|
+
/**
|
|
159
|
+
* Resets the data source to its pages.
|
|
160
|
+
*/
|
|
161
|
+
resetPages(): void;
|
|
162
|
+
|
|
158
163
|
/**
|
|
159
164
|
* Adds the given page of tile models to the data source.
|
|
160
165
|
* If the given page number already exists, that page will be overwritten.
|
|
@@ -246,6 +246,19 @@ export class CollectionBrowserDataSource
|
|
|
246
246
|
this.requestHostUpdate();
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
+
/**
|
|
250
|
+
* @inheritdoc
|
|
251
|
+
*/
|
|
252
|
+
resetPages(): void {
|
|
253
|
+
if (Object.keys(this.pages).length !== this.host.maxPagesToManage) {
|
|
254
|
+
this.pages = {};
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Invalidate any fetches in progress
|
|
258
|
+
this.fetchesInProgress.clear();
|
|
259
|
+
this.requestHostUpdate();
|
|
260
|
+
}
|
|
261
|
+
|
|
249
262
|
/**
|
|
250
263
|
* @inheritdoc
|
|
251
264
|
*/
|
|
@@ -433,6 +446,7 @@ export class CollectionBrowserDataSource
|
|
|
433
446
|
map(
|
|
434
447
|
callback: (model: TileModel, index: number, array: TileModel[]) => TileModel
|
|
435
448
|
): void {
|
|
449
|
+
if (!Object.keys(this.pages).length) return;
|
|
436
450
|
this.pages = Object.fromEntries(
|
|
437
451
|
Object.entries(this.pages).map(([page, tileModels]) => [
|
|
438
452
|
page,
|
|
@@ -38,6 +38,7 @@ export interface CollectionBrowserSearchInterface
|
|
|
38
38
|
readonly defaultSortField: SortField | null;
|
|
39
39
|
readonly facetLoadStrategy: FacetLoadStrategy;
|
|
40
40
|
readonly initialPageNumber: number;
|
|
41
|
+
readonly maxPagesToManage: number;
|
|
41
42
|
readonly currentVisiblePageNumbers: number[];
|
|
42
43
|
readonly clearResultsOnEmptyQuery?: boolean;
|
|
43
44
|
readonly dataSource?: CollectionBrowserDataSourceInterface;
|
package/src/manage/manage-bar.ts
CHANGED
|
@@ -2,13 +2,13 @@ import { msg } from '@lit/localize';
|
|
|
2
2
|
import { LitElement, html, css, TemplateResult, CSSResultGroup } from 'lit';
|
|
3
3
|
import { customElement, property } from 'lit/decorators.js';
|
|
4
4
|
import { when } from 'lit/directives/when.js';
|
|
5
|
+
import {
|
|
6
|
+
ModalConfig,
|
|
7
|
+
type ModalManagerInterface,
|
|
8
|
+
} from '@internetarchive/modal-manager';
|
|
9
|
+
import type { ManageableItem } from '../models';
|
|
5
10
|
import iaButtonStyle from '../styles/ia-button';
|
|
6
|
-
|
|
7
|
-
export interface ManageableItem {
|
|
8
|
-
identifier: string;
|
|
9
|
-
title?: string;
|
|
10
|
-
dateStr?: string;
|
|
11
|
-
}
|
|
11
|
+
import './remove-items-modal-content';
|
|
12
12
|
|
|
13
13
|
@customElement('manage-bar')
|
|
14
14
|
export class ManageBar extends LitElement {
|
|
@@ -18,9 +18,19 @@ export class ManageBar extends LitElement {
|
|
|
18
18
|
@property({ type: String }) label = msg('Select items to remove');
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
21
|
+
* The shared modal manager component for displaying modal dialogs on this page
|
|
22
22
|
*/
|
|
23
|
-
@property({ type:
|
|
23
|
+
@property({ type: Object }) modalManager?: ModalManagerInterface;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Array of items that have been selected for management
|
|
27
|
+
*/
|
|
28
|
+
@property({ type: Object }) selectedItems: Array<ManageableItem> = [];
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Message shows as note in the modal when removing items
|
|
32
|
+
*/
|
|
33
|
+
@property({ type: String }) manageViewModalMsg?: string;
|
|
24
34
|
|
|
25
35
|
/**
|
|
26
36
|
* Whether to show the "Select All" button (default false)
|
|
@@ -32,6 +42,11 @@ export class ManageBar extends LitElement {
|
|
|
32
42
|
*/
|
|
33
43
|
@property({ type: Boolean }) showUnselectAll = false;
|
|
34
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Whether to show "Item Manager the items" button (default false)
|
|
47
|
+
*/
|
|
48
|
+
@property({ type: Boolean }) showItemManageButton = false;
|
|
49
|
+
|
|
35
50
|
/**
|
|
36
51
|
* Whether to active delete button for selectable items
|
|
37
52
|
*/
|
|
@@ -48,21 +63,20 @@ export class ManageBar extends LitElement {
|
|
|
48
63
|
<button
|
|
49
64
|
class="ia-button danger"
|
|
50
65
|
?disabled=${!this.removeAllowed}
|
|
51
|
-
@click=${this.
|
|
66
|
+
@click=${this.showRemoveItemsModal}
|
|
52
67
|
>
|
|
53
|
-
${msg('Remove selected items')}
|
|
68
|
+
${msg('Remove selected items')} (${this.selectedItems.length})
|
|
54
69
|
</button>
|
|
55
|
-
${
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
: ''}
|
|
70
|
+
${when(
|
|
71
|
+
this.showItemManageButton,
|
|
72
|
+
() => html` <button
|
|
73
|
+
class="ia-button warning"
|
|
74
|
+
?disabled=${!this.removeAllowed}
|
|
75
|
+
@click=${this.manageItemsClicked}
|
|
76
|
+
>
|
|
77
|
+
${msg('Item Manager the items')} (${this.selectedItems.length})
|
|
78
|
+
</button>`
|
|
79
|
+
)}
|
|
66
80
|
<div class="selection-buttons">
|
|
67
81
|
${when(
|
|
68
82
|
this.showSelectAll,
|
|
@@ -92,12 +106,12 @@ export class ManageBar extends LitElement {
|
|
|
92
106
|
this.dispatchEvent(new CustomEvent('cancel'));
|
|
93
107
|
}
|
|
94
108
|
|
|
95
|
-
private
|
|
109
|
+
private removeItemsClicked(): void {
|
|
96
110
|
this.dispatchEvent(new CustomEvent('removeItems'));
|
|
97
111
|
}
|
|
98
112
|
|
|
99
|
-
private
|
|
100
|
-
this.dispatchEvent(new CustomEvent('
|
|
113
|
+
private manageItemsClicked(): void {
|
|
114
|
+
this.dispatchEvent(new CustomEvent('manageItems'));
|
|
101
115
|
}
|
|
102
116
|
|
|
103
117
|
private selectAllClicked(): void {
|
|
@@ -108,6 +122,88 @@ export class ManageBar extends LitElement {
|
|
|
108
122
|
this.dispatchEvent(new CustomEvent('unselectAll'));
|
|
109
123
|
}
|
|
110
124
|
|
|
125
|
+
/**
|
|
126
|
+
* Shows a modal dialog confirming the list of items to be removed
|
|
127
|
+
* @param items Which items to list in the modal
|
|
128
|
+
*/
|
|
129
|
+
private showRemoveItemsModal(): void {
|
|
130
|
+
const customModalContent = html`
|
|
131
|
+
<remove-items-modal-content
|
|
132
|
+
.items=${this.selectedItems}
|
|
133
|
+
.message=${this.manageViewModalMsg}
|
|
134
|
+
@confirm=${() => this.removeItemsClicked()}
|
|
135
|
+
></remove-items-modal-content>
|
|
136
|
+
`;
|
|
137
|
+
|
|
138
|
+
const config = new ModalConfig({
|
|
139
|
+
showProcessingIndicator: false,
|
|
140
|
+
processingImageMode: 'processing',
|
|
141
|
+
bodyColor: '#fff',
|
|
142
|
+
headerColor: '#194880',
|
|
143
|
+
showHeaderLogo: false,
|
|
144
|
+
closeOnBackdropClick: true,
|
|
145
|
+
title: html`${msg('Are you sure you want to remove these items?')}`,
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
this.modalManager?.classList.add('remove-items');
|
|
149
|
+
this.modalManager?.showModal({
|
|
150
|
+
config,
|
|
151
|
+
customModalContent,
|
|
152
|
+
userClosedModalCallback: () => {
|
|
153
|
+
this.modalManager?.classList.remove('remove-items');
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Shows a modal dialog indicating that item removal is being processed
|
|
160
|
+
*/
|
|
161
|
+
showRemoveItemsProcessingModal(): void {
|
|
162
|
+
const config = new ModalConfig({
|
|
163
|
+
showProcessingIndicator: true,
|
|
164
|
+
processingImageMode: 'processing',
|
|
165
|
+
bodyColor: '#fff',
|
|
166
|
+
headerColor: '#194880',
|
|
167
|
+
showHeaderLogo: false,
|
|
168
|
+
closeOnBackdropClick: true,
|
|
169
|
+
title: html`${msg('Removing selected items...')}`,
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
this.modalManager?.classList.add('remove-items');
|
|
173
|
+
this.modalManager?.showModal({
|
|
174
|
+
config,
|
|
175
|
+
userClosedModalCallback: () => {
|
|
176
|
+
this.modalManager?.classList.remove('remove-items');
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Shows a modal dialog indicating that an error occurred while removing items
|
|
183
|
+
*/
|
|
184
|
+
showRemoveItemsErrorModal(): void {
|
|
185
|
+
const config = new ModalConfig({
|
|
186
|
+
showProcessingIndicator: false,
|
|
187
|
+
processingImageMode: 'processing',
|
|
188
|
+
bodyColor: '#fff',
|
|
189
|
+
headerColor: '#691916',
|
|
190
|
+
showHeaderLogo: false,
|
|
191
|
+
closeOnBackdropClick: true,
|
|
192
|
+
title: html`${msg('Error: unable to remove items')}`,
|
|
193
|
+
message: html`${msg(
|
|
194
|
+
'An error occurred while removing items. Please try again in a few minutes.'
|
|
195
|
+
)}`,
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
this.modalManager?.classList.add('remove-items');
|
|
199
|
+
this.modalManager?.showModal({
|
|
200
|
+
config,
|
|
201
|
+
userClosedModalCallback: () => {
|
|
202
|
+
this.modalManager?.classList.remove('remove-items');
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
111
207
|
static get styles(): CSSResultGroup {
|
|
112
208
|
return css`
|
|
113
209
|
${iaButtonStyle}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { LitElement, html, css, nothing, TemplateResult, CSSResult } from 'lit';
|
|
2
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
3
|
+
import { msg } from '@lit/localize';
|
|
4
|
+
import { map } from 'lit/directives/map.js';
|
|
5
|
+
import type { ManageableItem } from '../models';
|
|
6
|
+
|
|
7
|
+
@customElement('remove-items-modal-content')
|
|
8
|
+
export class RemoveItemsModalContent extends LitElement {
|
|
9
|
+
@property({ type: Object }) items: ManageableItem[] = [];
|
|
10
|
+
|
|
11
|
+
@property({ type: String }) message?: string;
|
|
12
|
+
|
|
13
|
+
render(): TemplateResult {
|
|
14
|
+
return html`
|
|
15
|
+
<ul>
|
|
16
|
+
${map(
|
|
17
|
+
this.items,
|
|
18
|
+
({ title, date }) => html`
|
|
19
|
+
<li>
|
|
20
|
+
<span class="item-title">${title ?? '[untitled]'}</span>
|
|
21
|
+
<span class="item-date">${date ?? ''}</span>
|
|
22
|
+
</li>
|
|
23
|
+
`
|
|
24
|
+
)}
|
|
25
|
+
</ul>
|
|
26
|
+
${this.message ? html`<p class="message">${this.message}</p>` : nothing}
|
|
27
|
+
<div class="button-bar">
|
|
28
|
+
<button class="remove-items-btn" @click=${this.removeItemsBtnClicked}>
|
|
29
|
+
${msg('Remove items')}
|
|
30
|
+
</button>
|
|
31
|
+
</div>
|
|
32
|
+
`;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private removeItemsBtnClicked(): void {
|
|
36
|
+
this.dispatchEvent(
|
|
37
|
+
new CustomEvent<{ items: ManageableItem[] }>('confirm', {
|
|
38
|
+
detail: {
|
|
39
|
+
items: this.items,
|
|
40
|
+
},
|
|
41
|
+
})
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static get styles(): CSSResult {
|
|
46
|
+
return css`
|
|
47
|
+
ul {
|
|
48
|
+
margin: 0;
|
|
49
|
+
padding: 0 10px;
|
|
50
|
+
font-size: 1.4rem;
|
|
51
|
+
list-style-type: none;
|
|
52
|
+
max-height: min(400px, 40vh);
|
|
53
|
+
overflow-y: auto;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
li {
|
|
57
|
+
display: flex;
|
|
58
|
+
justify-content: space-between;
|
|
59
|
+
padding: 2px 0;
|
|
60
|
+
}
|
|
61
|
+
li:not(:last-of-type) {
|
|
62
|
+
border-bottom: 1px solid rgb(232, 232, 232);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.item-title {
|
|
66
|
+
word-break: break-word;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.item-date {
|
|
70
|
+
white-space: nowrap;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.message {
|
|
74
|
+
font-size: 1.4rem;
|
|
75
|
+
padding: 5px 10px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.button-bar {
|
|
79
|
+
display: flex;
|
|
80
|
+
justify-content: center;
|
|
81
|
+
margin: 10px 5px;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.remove-items-btn {
|
|
85
|
+
margin-bottom: 10px;
|
|
86
|
+
padding: 10px;
|
|
87
|
+
border: 1px solid var(--primaryErrorCTABorder, #d43f3a);
|
|
88
|
+
border-radius: 4px;
|
|
89
|
+
color: white;
|
|
90
|
+
background: var(--primaryErrorCTAFill, #d9534f);
|
|
91
|
+
appearance: none;
|
|
92
|
+
cursor: pointer;
|
|
93
|
+
}
|
|
94
|
+
.remove-items-btn:hover {
|
|
95
|
+
background: rgba(var(--primaryErrorCTAFillRGB, 229, 28, 38), 0.9);
|
|
96
|
+
}
|
|
97
|
+
.remove-items-btn:active {
|
|
98
|
+
background: rgba(var(--primaryErrorCTAFillRGB, 229, 28, 38), 0.7);
|
|
99
|
+
}
|
|
100
|
+
`;
|
|
101
|
+
}
|
|
102
|
+
}
|
package/src/models.ts
CHANGED
|
@@ -675,3 +675,13 @@ export const suppressedCollections: Record<string, boolean> = {
|
|
|
675
675
|
americana: true,
|
|
676
676
|
toronto: true,
|
|
677
677
|
};
|
|
678
|
+
|
|
679
|
+
/**
|
|
680
|
+
* A record of manageable item
|
|
681
|
+
*/
|
|
682
|
+
export interface ManageableItem {
|
|
683
|
+
identifier: string;
|
|
684
|
+
title?: string;
|
|
685
|
+
dateStr?: string;
|
|
686
|
+
date?: string;
|
|
687
|
+
}
|
|
@@ -2001,4 +2001,27 @@ describe('Collection Browser', () => {
|
|
|
2001
2001
|
const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');
|
|
2002
2002
|
expect(infiniteScroller).not.to.exist;
|
|
2003
2003
|
});
|
|
2004
|
+
|
|
2005
|
+
it('fetch larger result on search page for admin user to manage items', async () => {
|
|
2006
|
+
const resultsSpy = sinon.spy();
|
|
2007
|
+
const searchService = new MockSearchService({
|
|
2008
|
+
asyncResponse: true,
|
|
2009
|
+
resultsSpy,
|
|
2010
|
+
});
|
|
2011
|
+
|
|
2012
|
+
const el = await fixture<CollectionBrowser>(
|
|
2013
|
+
html`<collection-browser .searchService=${searchService}>
|
|
2014
|
+
</collection-browser>`
|
|
2015
|
+
);
|
|
2016
|
+
|
|
2017
|
+
const numberOfPages = 15;
|
|
2018
|
+
|
|
2019
|
+
el.baseQuery = 'jack';
|
|
2020
|
+
el.isManageView = true;
|
|
2021
|
+
await el.dataSource.fetchPage(1, numberOfPages);
|
|
2022
|
+
await el.updateComplete;
|
|
2023
|
+
|
|
2024
|
+
const initialResults = el.dataSource.getAllPages();
|
|
2025
|
+
expect(Object.keys(initialResults).length).to.deep.equal(numberOfPages);
|
|
2026
|
+
});
|
|
2004
2027
|
});
|
|
@@ -2,9 +2,14 @@
|
|
|
2
2
|
import { expect, fixture } from '@open-wc/testing';
|
|
3
3
|
import { html } from 'lit';
|
|
4
4
|
import Sinon from 'sinon';
|
|
5
|
-
import type { ManageBar } from '../../src/manage/manage-bar';
|
|
6
|
-
|
|
7
5
|
import '../../src/manage/manage-bar';
|
|
6
|
+
import {
|
|
7
|
+
ModalManager,
|
|
8
|
+
ModalManagerInterface,
|
|
9
|
+
} from '@internetarchive/modal-manager';
|
|
10
|
+
import '@internetarchive/modal-manager';
|
|
11
|
+
import { msg } from '@lit/localize';
|
|
12
|
+
import type { ManageBar } from '../../src/manage/manage-bar';
|
|
8
13
|
|
|
9
14
|
describe('Manage bar', () => {
|
|
10
15
|
it('renders basic component', async () => {
|
|
@@ -38,7 +43,7 @@ describe('Manage bar', () => {
|
|
|
38
43
|
|
|
39
44
|
it('render item manager button for /search/ page', async () => {
|
|
40
45
|
const el = await fixture<ManageBar>(
|
|
41
|
-
html`<manage-bar
|
|
46
|
+
html`<manage-bar showItemManageButton></manage-bar>`
|
|
42
47
|
);
|
|
43
48
|
expect(el.shadowRoot?.querySelector('.ia-button.warning')).to.exist;
|
|
44
49
|
});
|
|
@@ -84,21 +89,6 @@ describe('Manage bar', () => {
|
|
|
84
89
|
expect(spy.callCount).to.equal(1);
|
|
85
90
|
});
|
|
86
91
|
|
|
87
|
-
it('emits event when Remove Items button clicked', async () => {
|
|
88
|
-
const spy = Sinon.spy();
|
|
89
|
-
const el = await fixture<ManageBar>(
|
|
90
|
-
html`<manage-bar @removeItems=${spy} removeAllowed></manage-bar>`
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
const removeItemsBtn = el.shadowRoot?.querySelector(
|
|
94
|
-
'.ia-button.danger'
|
|
95
|
-
) as HTMLButtonElement;
|
|
96
|
-
expect(removeItemsBtn).to.exist;
|
|
97
|
-
|
|
98
|
-
removeItemsBtn.click();
|
|
99
|
-
expect(spy.callCount).to.equal(1);
|
|
100
|
-
});
|
|
101
|
-
|
|
102
92
|
it('emits event when Select All button clicked', async () => {
|
|
103
93
|
const spy = Sinon.spy();
|
|
104
94
|
const el = await fixture<ManageBar>(
|
|
@@ -128,4 +118,37 @@ describe('Manage bar', () => {
|
|
|
128
118
|
unselectAllBtn.click();
|
|
129
119
|
expect(spy.callCount).to.equal(1);
|
|
130
120
|
});
|
|
121
|
+
|
|
122
|
+
it('opens the remove items modal when showRemoveItemsModal is clicked', async () => {
|
|
123
|
+
const el = await fixture<ManageBar>(html`
|
|
124
|
+
<manage-bar
|
|
125
|
+
.modalManager=${new ModalManager()}
|
|
126
|
+
.selectedItems=${[{ identifier: '1', title: 'Item 1' }]}
|
|
127
|
+
removeAllowed
|
|
128
|
+
></manage-bar>
|
|
129
|
+
`);
|
|
130
|
+
await el.updateComplete;
|
|
131
|
+
|
|
132
|
+
const removeButton = el.shadowRoot?.querySelector(
|
|
133
|
+
'.ia-button.danger'
|
|
134
|
+
) as HTMLButtonElement;
|
|
135
|
+
expect(removeButton).to.exist;
|
|
136
|
+
|
|
137
|
+
const showModalSpy = Sinon.spy(
|
|
138
|
+
el.modalManager as ModalManagerInterface,
|
|
139
|
+
'showModal'
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
await el.updateComplete;
|
|
143
|
+
removeButton?.click();
|
|
144
|
+
|
|
145
|
+
console.log(showModalSpy.args[0][0].config.title?.values[0]);
|
|
146
|
+
|
|
147
|
+
expect(showModalSpy.callCount).to.equal(1);
|
|
148
|
+
expect(el.modalManager?.classList.contains('remove-items')).to.be;
|
|
149
|
+
expect(showModalSpy.args[0][0].config.title?.values[0]).to.equal(
|
|
150
|
+
msg('Are you sure you want to remove these items?')
|
|
151
|
+
);
|
|
152
|
+
expect(showModalSpy.args[0][0].customModalContent).to.exist;
|
|
153
|
+
});
|
|
131
154
|
});
|