-
{
- inputRef.current?.focus();
- setOpen(true);
- }}
+
-
- {
- handleSearchChange(e.target.value);
- if (!open) {
- setOpen(true);
- }
+ onClick={() => {
+ inputRef.current?.focus();
+ setOpen(true);
}}
- onFocus={() => setOpen(true)}
- onKeyDown={handleInputKeyDown}
- />
-
- {open && (
-
- {optionSource.isInitialLoad ? (
-
- Loading labels...
-
- ) : (
-
+ {
+ onToggle(slug);
+ inputRef.current?.focus();
+ }}
+ />
+ setOpen(true)}
+ onKeyDown={handleInputKeyDown}
+ onValueChange={(value) => {
+ handleSearchChange(value);
+ if (!open) {
+ setOpen(true);
+ }
+ }}
+ >
+
+
+
+
+ {open && (
+
+ {optionSource.isInitialLoad ? (
+
+ Loading labels...
+
+ ) : (
= ({
onToggle={onToggle}
/>
-
- )}
-
- )}
+ )}
+
+ )}
+
);
};
diff --git a/apps/admin/src/members/members-filtering.acceptance.test.tsx b/apps/admin/src/members/members-filtering.acceptance.test.tsx
index b20194b4b5f..8c7f9ba2e66 100644
--- a/apps/admin/src/members/members-filtering.acceptance.test.tsx
+++ b/apps/admin/src/members/members-filtering.acceptance.test.tsx
@@ -152,6 +152,8 @@ describe('Members list', () => {
await renderAdminApp('/members');
await expect(membersScreen.memberRows()).toHaveCount(2);
+ // The list doesn't wait for the definitions lookup, so let it land before counting.
+ await expect.poll(() => definitionsApi.requests.length).toBeGreaterThan(0);
const requestsBeforeFilter = definitionsApi.requests.length;
await membersScreen.addFilter('Name', 'Alice');
diff --git a/apps/admin/src/posts/analytics/components/post-analytics-header.tsx b/apps/admin/src/posts/analytics/components/post-analytics-header.tsx
index 8c26e8026d9..2650e71d75d 100644
--- a/apps/admin/src/posts/analytics/components/post-analytics-header.tsx
+++ b/apps/admin/src/posts/analytics/components/post-analytics-header.tsx
@@ -1,7 +1,7 @@
import { PageHeader } from '@tryghost/shade/patterns';
import GiftLinkModal from '@/posts/analytics/modals/gift-link-modal';
import PostShareModal from '@/shared/analytics/post-share-modal';
-import EmailSendingStatusBanner from '@/posts/analytics/email-sending-status/email-sending-status-banner';
+import PostAnalyticsEmailSendingStatus from '@/posts/analytics/email-sending-status/post-analytics-email-sending-status';
import React, { useEffect, useMemo, useRef, useState } from 'react';
import {
AlertDialog,
@@ -29,19 +29,14 @@ import {
PageMenuItem,
} from '@tryghost/shade/components';
import { H1 } from '@tryghost/shade/primitives';
-import {
- LucideIcon,
- formatDisplayDate,
- formatDisplayTime,
- formatNumber,
-} from '@tryghost/shade/utils';
+import { LucideIcon, formatNumber } from '@tryghost/shade/utils';
import { useAnalyticsData } from '@/shared/analytics/use-analytics-data';
import { useIsEmberOwnedRoute } from '@/routes';
import { usePostAnalytics } from '@/posts/analytics/providers/post-analytics-context';
import { getSiteTimezone } from '@tryghost/admin-x-framework/utils/get-site-timezone';
import { giftAccessLabel } from '@/posts/analytics/utils/gift-link';
+import { getPostPublicationSummary } from '@/posts/analytics/utils/post-publication-summary';
import {
- isEmailOnly,
isPublishedOnly,
trackEvent,
useActiveVisitors,
@@ -53,7 +48,7 @@ import {
} from '@tryghost/admin-x-framework/api/settings';
import { useCanManageGiftLink } from '@/posts/analytics/hooks/use-can-manage-gift-link';
import { postsDataType, useDeletePost } from '@tryghost/admin-x-framework/api/posts';
-import { useHandleError } from '@tryghost/admin-x-framework/hooks';
+import { useFeatureFlag, useHandleError } from '@tryghost/admin-x-framework/hooks';
import { useEmailSendingStatusContext } from '@/posts/analytics/email-sending-status/email-sending-status-context';
import { useShade } from '@tryghost/shade/app';
import { useQueryClient } from '@tanstack/react-query';
@@ -71,22 +66,25 @@ const PostAnalyticsHeader: React.FC