diff --git a/packages/ui/src/elements/DeleteMany/index.scss b/packages/ui/src/elements/DeleteMany/index.scss index 4e3cd187446..414949b10a4 100644 --- a/packages/ui/src/elements/DeleteMany/index.scss +++ b/packages/ui/src/elements/DeleteMany/index.scss @@ -7,5 +7,21 @@ align-items: center; justify-content: center; height: 100%; + + &__toggle { + font-size: inherit; + line-height: inherit; + display: inline-flex; + background: transparent; + color: var(--theme-elevation-800); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + border: 0; + padding: 0; + align-items: center; + cursor: pointer; + text-decoration: underline; + } } } diff --git a/packages/ui/src/elements/DeleteMany/index.tsx b/packages/ui/src/elements/DeleteMany/index.tsx index bd27581c586..a7fc4451dc2 100644 --- a/packages/ui/src/elements/DeleteMany/index.tsx +++ b/packages/ui/src/elements/DeleteMany/index.tsx @@ -16,7 +16,6 @@ import { useTranslation } from '../../providers/Translation/index.js' import { requests } from '../../utilities/api.js' import { mergeListSearchAndWhere } from '../../utilities/mergeListSearchAndWhere.js' import { ConfirmationModal } from '../ConfirmationModal/index.js' -import { Pill } from '../Pill/index.js' import './index.scss' const baseClass = 'delete-documents' @@ -140,14 +139,15 @@ export const DeleteMany: React.FC = (props) => { return ( - { openModal(modalSlug) }} + type="button" > {t('general:delete')} - + = (props) => { } = props const { permissions } = useAuth() + const { openModal } = useModal() const { selectAll } = useSelection() const { t } = useTranslation() @@ -39,16 +41,17 @@ export const EditMany: React.FC = (props) => { return (
- { + openModal(drawerSlug) setSelected([]) }} - slug={drawerSlug} + type="button" > {t('general:edit')} - + = (props) => { beforeActions, collectionConfig, collectionSlug, - disableBulkDelete, - disableBulkEdit, enableColumns = true, enableSort = false, listMenuItems, @@ -148,19 +150,7 @@ export const ListControls: React.FC = (props) => { />
- {!smallBreak && ( - - {beforeActions && beforeActions} - {!disableBulkEdit && ( - - - - - - )} - {!disableBulkDelete && } - - )} + {!smallBreak && {beforeActions && beforeActions}} {enableColumns && ( = ({ label }) => { +export const ListSelection: React.FC = ({ + collectionConfig, + disableBulkDelete, + disableBulkEdit, + label, +}) => { const { count, selectAll, toggleAll, totalDocs } = useSelection() const { t } = useTranslation() @@ -21,21 +35,27 @@ export const ListSelection: React.FC = ({ label }) => { return (
- {t('general:selectedCount', { count, label })} + {t('general:selectedCount', { count, label: '' })} {selectAll !== SelectAllStatus.AllAvailable && count < totalDocs && ( + + )} + {!disableBulkEdit && !disableBulkDelete && } + {!disableBulkEdit && ( - - + + + )} + {!disableBulkDelete && }
) } diff --git a/packages/ui/src/elements/PublishMany/index.scss b/packages/ui/src/elements/PublishMany/index.scss new file mode 100644 index 00000000000..d310ebdf222 --- /dev/null +++ b/packages/ui/src/elements/PublishMany/index.scss @@ -0,0 +1,21 @@ +@import '../../scss/styles.scss'; + +@layer payload-default { + .publish-many { + &__toggle { + font-size: inherit; + line-height: inherit; + display: inline-flex; + background: transparent; + color: var(--theme-elevation-800); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + border: 0; + padding: 0; + align-items: center; + cursor: pointer; + text-decoration: underline; + } + } +} diff --git a/packages/ui/src/elements/PublishMany/index.tsx b/packages/ui/src/elements/PublishMany/index.tsx index 8bae422581f..2585ce7bd45 100644 --- a/packages/ui/src/elements/PublishMany/index.tsx +++ b/packages/ui/src/elements/PublishMany/index.tsx @@ -16,7 +16,7 @@ import { useTranslation } from '../../providers/Translation/index.js' import { requests } from '../../utilities/api.js' import { parseSearchParams } from '../../utilities/parseSearchParams.js' import { ConfirmationModal } from '../ConfirmationModal/index.js' -import { Pill } from '../Pill/index.js' +import './index.scss' export type PublishManyProps = { collection: ClientCollectionConfig @@ -133,14 +133,15 @@ export const PublishMany: React.FC = (props) => { return ( - { openModal(modalSlug) }} + type="button" > {t('version:publish')} - + = (props) => { return ( - { toggleModal(modalSlug) }} + type="button" > {t('version:unpublish')} - + = ({ className, collectionConfig, Description, + disableBulkDelete, + disableBulkEdit, hasCreatePermission, i18n, isBulkUploadEnabled, @@ -72,7 +76,12 @@ const DefaultListHeader: React.FC = ({ )} {!smallBreak && ( - + )} {Description} diff --git a/packages/ui/src/views/List/index.tsx b/packages/ui/src/views/List/index.tsx index 07dbf69a494..9a5c862541d 100644 --- a/packages/ui/src/views/List/index.tsx +++ b/packages/ui/src/views/List/index.tsx @@ -9,8 +9,6 @@ import React, { Fragment, useEffect, useState } from 'react' import { useBulkUpload } from '../../elements/BulkUpload/index.js' import { Button } from '../../elements/Button/index.js' -import { DeleteMany } from '../../elements/DeleteMany/index.js' -import { EditMany } from '../../elements/EditMany/index.js' import { Gutter } from '../../elements/Gutter/index.js' import { ListControls } from '../../elements/ListControls/index.js' import { useListDrawerContext } from '../../elements/ListDrawer/Provider.js' @@ -18,13 +16,11 @@ import { ListSelection } from '../../elements/ListSelection/index.js' import { useModal } from '../../elements/Modal/index.js' import { Pagination } from '../../elements/Pagination/index.js' import { PerPage } from '../../elements/PerPage/index.js' -import { PublishMany } from '../../elements/PublishMany/index.js' import { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js' import { SelectMany } from '../../elements/SelectMany/index.js' import { useStepNav } from '../../elements/StepNav/index.js' import { RelationshipProvider } from '../../elements/Table/RelationshipProvider/index.js' import { TableColumnsProvider } from '../../elements/TableColumns/index.js' -import { UnpublishMany } from '../../elements/UnpublishMany/index.js' import { ViewDescription } from '../../elements/ViewDescription/index.js' import { useAuth } from '../../providers/Auth/index.js' import { useConfig } from '../../providers/Config/index.js' @@ -185,6 +181,8 @@ export function DefaultListView(props: ListViewClientProps) { />
} + disableBulkDelete={disableBulkDelete} + disableBulkEdit={disableBulkEdit} hasCreatePermission={hasCreatePermission} i18n={i18n} isBulkUploadEnabled={isBulkUploadEnabled && !upload.hideFileInputOnCreate} @@ -203,8 +201,6 @@ export function DefaultListView(props: ListViewClientProps) { } collectionConfig={collectionConfig} collectionSlug={collectionSlug} - disableBulkDelete={disableBulkDelete} - disableBulkEdit={disableBulkEdit} listMenuItems={listMenuItems} renderedFilters={renderedFilters} resolvedFilterOptions={resolvedFilterOptions} @@ -267,6 +263,9 @@ export function DefaultListView(props: ListViewClientProps) { {smallBreak && (
@@ -278,14 +277,6 @@ export function DefaultListView(props: ListViewClientProps) { ] : [] : beforeActions} - {!disableBulkEdit && ( - - - - - - )} - {!disableBulkDelete && }
)} diff --git a/test/admin/e2e/general/e2e.spec.ts b/test/admin/e2e/general/e2e.spec.ts index 2da7c45f620..ec77d11e64f 100644 --- a/test/admin/e2e/general/e2e.spec.ts +++ b/test/admin/e2e/general/e2e.spec.ts @@ -12,6 +12,7 @@ import { openNav, saveDocAndAssert, saveDocHotkeyAndAssert, + // throttleTest, } from '../../../helpers.js' import { AdminUrlUtil } from '../../../helpers/adminUrlUtil.js' import { initPayloadE2ENoConfig } from '../../../helpers/initPayloadE2ENoConfig.js' @@ -51,7 +52,6 @@ let payload: PayloadTestSDK import { navigateToDoc } from 'helpers/e2e/navigateToDoc.js' import { openDocControls } from 'helpers/e2e/openDocControls.js' import path from 'path' -import { wait } from 'payload/shared' import { fileURLToPath } from 'url' import type { PayloadTestSDK } from '../../../helpers/sdk/index.js' @@ -101,6 +101,12 @@ describe('General', () => { }) beforeEach(async () => { + // await throttleTest({ + // page, + // context, + // delay: 'Fast 4G', + // }) + await reInitializeDB({ serverURL, snapshotKey: 'adminTests', @@ -735,6 +741,7 @@ describe('General', () => { await page.goto(postsUrl.list) await page.locator('#search-filter-input').fill('Post') + await page.waitForURL(/search=Post/) await expect(page.locator('.table table > tbody > tr')).toHaveCount(5) await page.locator('input#select-all').check() await page.locator('button#select-all-across-pages').click() @@ -860,9 +867,12 @@ describe('General', () => { await page.goto(postsUrl.list) await page.locator('#search-filter-input').fill('Post') + await page.waitForURL(/search=Post/) await expect(page.locator('.table table > tbody > tr')).toHaveCount(5) + await page.locator('input#select-all').check() await page.locator('button#select-all-across-pages').click() + await page.locator('.edit-many__toggle').click() await page.locator('.field-select .rs__control').click()