Skip to content

Conversation

@coder-karen
Copy link
Contributor

@coder-karen coder-karen commented Aug 7, 2025

Part of DOTCOM-14091

Proposed Changes

  • This PR brings over dataviews for site logs, and implements a very basic view functionality where clicking on the two log type tabs show data relevant to each tab.
  • No other functionality is implemented at the moment -- the PR uses dummy data in many cases (to implement views, actions, fields).
  • The primary focus of this PR apart from the dataviews addition, was bringing across the query to retrieve the site data, and to make sure the approach that has been started can be continued. Noting as well that I'm aware we can preload a version of the query as well, in the route, but I have that as a follow-up task.
  • This does not attempt to match any design specs at this stage.

Why are these changes being made?

  • This is the next step in implementing the logs page in the hosting dashboard (after the routing, now merged). This initial PR will allow a framework to then move across other components, and ensure previous functionality continues to work, as well as ensuring we use appropriate components and styles.

Testing Instructions

  • If testing locally, visit http://calypso.localhost:3000/v2/sites/your-test-site/logs, and confirm your URL will now be logs/php, and you should be seeing PHP errors for your chosen site.
  • Click on 'Web server' - the URL should now be logs/server, and you should see server logs for your site. Manually visit the logs/php and logs/server URLs and confirm that you are seeing the correct pages.

Pre-merge Checklist

  • Has the general commit checklist been followed? (PCYsg-hS-p2)
  • Have you written new tests for your changes?
  • Have you tested the feature in Simple (P9HQHe-k8-p2), Atomic (P9HQHe-jW-p2), and self-hosted Jetpack sites (PCYsg-g6b-p2)?
  • Have you checked for TypeScript, React or other console errors?
  • Have you tested accessibility for your changes? Ensure the feature remains usable with various user agents (e.g., browsers), interfaces (e.g., keyboard navigation), and assistive technologies (e.g., screen readers) (PCYsg-S3g-p2).
  • Have you used memoizing on expensive computations? More info in Memoizing with create-selector and Using memoizing selectors and Our Approach to Data
  • Have we added the "[Status] String Freeze" label as soon as any new strings were ready for translation (p4TIVU-5Jq-p2)?
    • For UI changes, have we tested the change in various languages (for example, ES, PT, FR, or DE)? The length of text and words vary significantly between languages.
  • For changes affecting Jetpack: Have we added the "[Status] Needs Privacy Updates" label if this pull request changes what data or activity we track or use (p4TIVU-aUh-p2)?

@github-actions
Copy link

github-actions bot commented Aug 7, 2025

@coder-karen
Copy link
Contributor Author

@Automattic/lego I've left this in draft for now as I want to make sure the overall approach (so far) matches what is expected. I'm open to feedback on this now though.


const { data: site } = useQuery( siteBySlugQuery( siteSlug ) );

const logType: LogType = pathname.endsWith( '/server' ) ? 'server' : 'php';
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Leaving a comment as I'm away from my computer today, but this can be updated now the routing includes the logType, to check for the logType prop directly. I can replace this in the next PR.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated this in df820d2 as I needed to fix up the expected types otherwise.

@coder-karen
Copy link
Contributor Author

Noting as well that there are several TS related errors that will need resolving before this can be merged.

'site',
siteId,
'logs',
params.logType,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can simply make the whole params as the key in the fourth position.

[ 'site', siteId, 'logs', params ]

It's because the keys are ordered hierarchically in the key array, and the params do no really have logical order within themselves.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great suggestion, added in df820d2


export async function fetchSiteLogs(
siteId: number | null | undefined,
logType: LogType,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: similarly, I think we should wrap this in an object rather than positional param so that we can't mess up.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, added in df820d2

const { data: siteLogs, isLoading, isFetching } = useQuery( siteLogsQuery( siteId, params ) );

const logs =
! siteLogs?.logs || hasLogTypeChanged( logType, siteLogs )
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm a bit confused about this hasLogTypeChanged() logic. Will it be possible / is it necessary at all? Because when logType changes, so will the result of useQuery( siteLogsQuery( siteId, params ) );, so the siteLogs will be updated accordingly (either undefined when still loading, or the logs with the correct type).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. That was copied over initially, but no it doesn't appear to be needed. Removed now.

return true;
};

export function useSiteLogsData( {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we put inline this logic in the component?

Basically we want to avoid sharing hooks like this, unless absolutely necessary.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can do, yes. Done in f0d878e. I have to wrap my head around not defaulting to separating hooks.

params.pageIndex
),
placeholderData: keepPreviousData,
enabled: !! siteId && params.start <= params.end,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nit] !! siteId will be always true.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah interesting, that's the existing logic. I've removed the siteId check in c61e39e. However I'll need to revisit anyway when looking at views, or when looking at who should be able to see data.

SERVER = 'server',
}

export interface LogQueryParams {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this type is unused? (within the scope if this PR)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's true, I've removed it for now in df820d2

}

export interface ServerLog extends ServerLogFromEndpoint {
id: string;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder why this id is for... can we just utilize the timestamp field for that?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When mapping in siteLogsQuery the returned data now matches the ServerLog / PHPLog types due to the added id (same as what is was before).
It seems like the timestamp itself wouldn't necessarily be unique 🤔

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've had to update this now anyway with further changes -- I started by using the timestamp and another identifier and it still wasn't unique enough (though likely also thanks to the current testing environment where my dummy field data has a fixed timestamp), so there are several identifiers which help ensure the data has a unique id.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see... we ideally should add this in the backend side, but we can do it later. 😄

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point I added a task for it at DOTCOM-14208

import { LogType, FilterType } from '../data/site-logs';
import type { View } from '@wordpress/dataviews';

const getFilterParamsFromView = ( view: View, fieldNames: string[] ): FilterType => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think these logic don't belong in the utils directory here. Let's move them to sites/logs/dataviews.ts instead (or sites/logs/dataviews/views.ts), along with the other dataviews-related things like fields and actions.

I think it's now becoming a pattern (in the dashboard code) that we colocate dateviews-related logic together 😄

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. I didn't see this as the core views functionality (not yet moved over) hence moving it to utils, but it still requires Dataviews so it should still be in a Dataviews directory. Moved in ebf0ae1

} from '../../data/site-logs';

export const siteLogsQuery = ( siteId: number, params: SiteLogsParams ) =>
queryOptions< SiteLogsAPIResponse, unknown, SiteLogsData >( {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nit[ I think we the generic types can be omitted because they can be inferred.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point, moved in df820d2

Copy link
Contributor

@fushar fushar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry -- I just realized that most of them are existing code 😄 but still, it would be great if we can try to simplify them whenever we can. 🙂

Thanks for working on it!

Copy link
Member

@p-jackson p-jackson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CleanShot.2025-08-11.at.15.50.04.mp4

These dataview option selectors are acting pretty zany. Must be something up with the logic in the dataview's view change handler.

Copy link
Member

@p-jackson p-jackson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see from your todos that you already want to clean up a few things, so apologies if I'm just flagging things you know you already want to fix up. Thank you for pinging for early feedback!

params.pageSize,
params.pageIndex
),
placeholderData: keepPreviousData,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Be careful with this. From memory this was here to make the loading feel nicer between the different pages. But it means that we continue to show old data while we're loading the new data. It means that the query object sort of lies about the data it is showing.

Since this is something we want specifically for the logging UI, but maybe not for everyone who uses this query object, this option should perhaps be defined in the view layer instead 🤔 I'm not sure, I'm just thinking out loud.

What I'm talking about is this pattern where we use the query option object in the view, but mix in our UI specific query preferences that we don't want to affect all uses of the query e.g.

// In the view.tsx
useQuery( {
  ...siteLogsQuery( /* ... */ ),
  placeholderData: keepPreviousData,
} );

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for pointing this out, that makes sense. Initial thoughts would be that it seems like the options are adding it in the view layer as you said, or allowing for another param that determines whether or not this is enabled. Seems the second would be clearer if anyone else uses the query object. What do you think?
I've moved it directly to the query call in the main component in a283414 for now though.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hadn't thought about making it an an option to the query. I'm happy going with that too. In the HD, the pattern of not abstracting the details of the query from the the component is working pretty well so far. Generally devs working in the component code are going to end up very familiar with the details of how React Query works too, so it doesn't hurt to let the component some details about the query. But I'd also say that the patterns are far from settled 😅 This might be one of those cases which is borderline. We can try out the option approach and see how that goes?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For sure - the simplest way to do that looks like passing a boolean, but it's clearer to pass that as a value with an associated type (so we're not just passing 'true'), with keepPreviousData the only option.
Which I've done here:
Though if I refactor later and end up removing the need for keepPreviousData, at that stage it would make sense to remove it from the query as well I think.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's clearer on a283414 😆 I don't think we should start this abstraction until it's absolutely necessary. This should be the responsibility of this particular Site Logs UI.

Not feeling strongly enough though so don't want to block over this 😄

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😄 I will include revisiting this with a later task.

@matticbot
Copy link
Contributor

Here is how your PR affects size of JS and CSS bundles shipped to the user's browser:

App Entrypoints (~408 bytes added 📈 [gzipped])

name                    parsed_size           gzip_size
entry-dashboard-dotcom      +3706 B  (+0.3%)     +200 B  (+0.1%)
entry-dashboard-a4a         +3706 B  (+0.3%)     +207 B  (+0.1%)
entry-subscriptions           +57 B  (+0.0%)      +33 B  (+0.0%)
entry-stepper                 +57 B  (+0.0%)      +29 B  (+0.0%)
entry-reauth-required         +57 B  (+0.0%)      +36 B  (+0.0%)
entry-main                    +57 B  (+0.0%)      +71 B  (+0.0%)
entry-login                   +57 B  (+0.0%)      +36 B  (+0.0%)
entry-domains-landing         +57 B  (+0.0%)      +33 B  (+0.0%)
entry-browsehappy             +57 B  (+0.0%)      +33 B  (+0.1%)

Common code that is always downloaded and parsed every time the app is loaded, no matter which route is used.

Sections (~2489 bytes added 📈 [gzipped])

name                parsed_size           gzip_size
site-logs              +10677 B  (+0.6%)    +2315 B  (+0.5%)
site-settings           +3662 B  (+0.2%)     +174 B  (+0.0%)
sites-dashboard         +3649 B  (+0.1%)     +174 B  (+0.0%)
site-performance        +3649 B  (+0.2%)     +174 B  (+0.0%)
site-monitoring         +3649 B  (+0.2%)     +174 B  (+0.0%)
overview                +3649 B  (+0.1%)     +174 B  (+0.0%)
hosting                 +3649 B  (+0.2%)     +174 B  (+0.0%)
github-deployments      +3649 B  (+0.2%)     +174 B  (+0.0%)

Sections contain code specific for a given set of routes. Is downloaded and parsed only when a particular route is navigated to.

Async-loaded Components (~189 bytes added 📈 [gzipped])

name                       parsed_size           gzip_size
async-load-v-2-sites-list      +3649 B  (+1.3%)     +189 B  (+0.3%)

React components that are loaded lazily, when a certain part of UI is displayed for the first time.

Legend

What is parsed and gzip size?

Parsed Size: Uncompressed size of the JS and CSS files. This much code needs to be parsed and stored in memory.
Gzip Size: Compressed size of the JS and CSS files. This much data needs to be downloaded over network.

Generated by performance advisor bot at iscalypsofastyet.com.

@coder-karen
Copy link
Contributor Author

@fushar @p-jackson thanks for the initial reviews here! Very helpful in making sure I'm on the right track for this first larger PR with the hosting dashboard logs changes.

These dataview option selectors are acting pretty zany. Must be something up with the logic in the dataview's view change handler.

@p-jackson That's correct - there is no view change handler at all at the moment. That will come later, so it's expected that functionality won't work.

@coder-karen coder-karen added [Status] Needs Review The PR is ready for review. This also triggers e2e canary tests and wp-desktop tests automatically. and removed [Status] In Progress labels Aug 11, 2025
@coder-karen coder-karen marked this pull request as ready for review August 11, 2025 12:13
@coder-karen coder-karen requested a review from a team as a code owner August 11, 2025 12:13
queryFn: () =>
fetchSiteLogs( {
siteId,
logType: params.logType,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can simply do

fetchSiteLogs( {
 ...params,
  siteId,
} );

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, good idea. Updated.

delete ( queryParams as Record< string, unknown > )[ key ]
);

const logs = await wpcom.req.get(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can simply return the data as below and then we don't need to check data.data in the query layer.

const { data } = await ...

return data;

Also, it would be better to process id and total_results in the data layer

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, that makes sense, simplifying the query layer itself. I reworked this in f5eb778

notices={
<Notice status="warning" isDismissible={ false }>
{ __( 'This is in progress: Functionality is limited.' ) }
</Notice>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need this since v2 is in progress 😅

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was inspired by the top level email page in the V2 dashboard :) I also wanted to prevent confusion with some functionality not working for testers, but I don't think it's made a difference at this stage for that, so I'm happy to remove it (removed now).

[ isFetching ]
);

const LOG_TABS = [
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be better to define it outside the component 🙂

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved out now, thanks.

callout={ <SiteLogsCallout siteSlug={ site.slug } /> }
main={ null }
/>
<TabPanel
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have to move it to the main props of the CalloutOverlay

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah gotcha, thanks for mentioning that! That's fixed now... I updated ids in the process as they weren't unique enough (in testing anyway - timestamps are the same in my testing environment given the dummy field data I'm using).

// @todo: We'll be able to remove the fallbacks once the temporary data (fields, views, actions) are removed and this component is cleaned up, as we'll return earlier if site doesn't exist.
const siteId = site?.ID ?? null;

const EMPTY_ARRAY: ( ServerLog | PHPLog )[] = [];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be better to define it outside the component to avoid re-creating the empty array on every render

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved now, thanks.

id: string;
}

export enum LogType {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'd prefer to use const object instead of enum. See p1754323932129889-slack-C0982082MSR.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for highlighting that - I've updated it.

}

export interface SiteLogsParams {
siteId: number | null | undefined;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think, siteId shouldn't be a field of SiteLogsParams. Because then it would be unnecessarily duplicated in siteLogsQuery() and its key array.

I'd suggest:

  • delete it from this type
  • modify the data layer signature to simply
function fetchSiteLogs(siteId: number, { /* rest of the params */) {

what do you think?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see, yes. The way it's set up, I'm passing in a site id in the query call within the component within the params as well as independently, so I'd agree that this change makes sense - added.

@@ -0,0 +1,142 @@
import wpcom from 'calypso/lib/wp';

export interface SiteLogsAPIResponse {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we now don't need to export this type, and all the *FromEndpoint types.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the export.

}

export interface ServerLog extends ServerLogFromEndpoint {
id: string;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see... we ideally should add this in the backend side, but we can do it later. 😄

{
id: 'timestamp',
type: 'date',
label: 'Date & time',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

labels need translation 🙂

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just dummy data (as with actions and views) until I implement those properly in later tasks -- I stripped out the translations for the dummy data so as to avoid unnecessary translations.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah okay, thanks for the context.

@matticbot
Copy link
Contributor

matticbot commented Aug 12, 2025

This PR modifies the release build for the following Calypso Apps:

For info about this notification, see here: PCYsg-OT6-p2

  • notifications
  • wpcom-block-editor

To test WordPress.com changes, run install-plugin.sh $pluginSlug add/hosting-dashboard-logs-initial-dataviews on your sandbox.

Copy link
Contributor

@fushar fushar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is good to land 👍 thanks for taking time to actually go through our comments; really appreciated.

@coder-karen coder-karen merged commit cb52244 into trunk Aug 12, 2025
11 checks passed
@coder-karen coder-karen deleted the add/hosting-dashboard-logs-initial-dataviews branch August 12, 2025 15:06
@github-actions github-actions bot removed the [Status] Needs Review The PR is ready for review. This also triggers e2e canary tests and wp-desktop tests automatically. label Aug 12, 2025
paulopmt1 added a commit that referenced this pull request Aug 21, 2025
* Created the initial structure for the the /contact-info route

* Added some initial components to the screen

* Using DataForm for domain Contact details

* Finished the first interface version

* Reading Contact information from /whois endpoint

* Validating data before saving Contact Info

* Update Contact details data using backend API

* Added isDurty state for the save button

* Added basic validation on DataForm

* Getting supported contries list from our API

* Add support to opt-out 60-day option

* Add Save contact info warning

* Add support to State selection from selected country

* Move country and state logic to inside the contact form component

* Fix re-render issue that removed the focus from text input while typing

* Add eslint rule to prevent lodash usage

* Refactor domain-supported contries and states and removed lodash usage

* Move mutate events to contact-form

* My Jetpack: Updating user connection page header and button text. (#105149)

* Substack Import: fix flow bug (#105167)

* Only display error message in the expiry column in the Site Overview (#105168)

* Enable summer special (#105169)

* Site Overview: Implement renew now action (#105160)

* Site Overview: Implement renew now action

* Fix types

* Use replaceAll

* Redirect by window.location.href

* Increase timeout between atomic transfer and redirect (#105174)

* Increase timeout between atomic transfer and redirect

* Remove unnecessary delay

* Connect Refresh: Extract Gravatar Magic Login into its own space (#104863)

* Connect Refresh: Extract Gravatar Magic Login into its own space

* whole lotta love

* migrate styles

* cleanup. fix publicToken use?

* unfix publicToken use?

* cmon. works now

* fix loginUrl

* lots of cleanup

* fix form outlines

* fix navigation to login

* extract inner components into outer scope

* extract inner components into outer scope

* cleanup. address feedback

* cleanup

* Update client/login/magic-login/gravatar/style.scss

Co-authored-by: Welly Shen <hivoid19@gmail.com>

* address feedback. progress on code-validated

* fix interval not resetting

* fix code validation transition

* Update client/login/magic-login/gravatar/index.tsx

Co-authored-by: Welly Shen <hivoid19@gmail.com>

* Update client/login/magic-login/gravatar/index.tsx

Co-authored-by: Welly Shen <hivoid19@gmail.com>

* Update client/login/magic-login/gravatar/index.tsx

Co-authored-by: Welly Shen <hivoid19@gmail.com>

* cleanup redirect

---------

Co-authored-by: Welly Shen <hivoid19@gmail.com>

* Connect Refresh: Migrate Akismet create-account to unified Signup (#105116)

* Fixes the Promote Post version check hook (#105163)

* Allow plugins upload for plans without sftp (#105176)

* Connect Refresh: Migrate VIP create-account to unified Signup (#105132)

* Remove Summer Special install plugin feature from Business and Ecommerce (#105177)

* Updating @wordpress/components and @wordpress/dataviews packages (#105142)

* Updating @wordpress/components and @wordpress/dataviews packages

* Fix plugin icon

* Fix site icon

---------

Co-authored-by: arthur <arthur.chu@automattic.com>

* Fix font size when rendering ZD HTML (#105180)

* Site settings: add missing learn more links (#105150)

* Staging Sites Redesign: Update Tooltip and checkbox disable style (#105158)

* Improve styles

* Ensure we have checkbox

* Fix both disabaled and checked

* Fix tooltip position

* Clean comments

* Update message

* Fix typo

* Break tooltip in two lines

* Allow full sync when selective sync is not disabled

---------

Co-authored-by: Kateryna Kodonenko <kateryna@automattic.com>

* Hosting Dashboard: Add site logs initial dataviews with data (#105118)

* Connect Refresh: Migrate Jetpack Cloud create-account to unified Signup (#105178)

* add null checks (#105165)

* Staging Sites: Notify syncing after completing the endpoint call (#105112)

* Staging Sites: Notify syncing after completing the endpoint call

* Add the callback to the pull action too

* Disable sync button immediately after starting syncing

* Check inflight mutations to disable Sync button

* close modal after mutation completes

---------

Co-authored-by: Gergely Csécsey <gcsecsey@gmail.com>

* Connect Refresh: Migrate Studio create-account to unified Signup (#105133)

* Components: Fix ambiguous `rem()` import (#103385)

* Domains Hosting Dashboard: Create "Add new DNS record" page (#105095)

* (WIP) Create "Add new DNS record" page to Hosting Dashboard

* Create forms to add all supported DNS record types

* Remove some console.logs and refactor some code

* Refactor code splitting the form configuration for each record type in its own file

* Fix field types and add "required" validation

* Add trailing dot automatically for fields that need to be a FQDN

* Use text area component for TXT record data

* Add description field for DNS records

* Remove empty default element from select fields

* Make placeholders translatable

* Reset form data when changing record types

* Navigate to DNS overview page when clicking on "Cancel"

* Remove query that does not belong to this PR

* Refactor DNSRecord type

* Consolidate component in /dns/add/index.tsx

* Rename `AddDNSRecordFormData` to `DNSRecordFormData` and fix form typing

* Remove `isValid` properties from DNS record configs

* Move DNS record configs to types file

* Rename `types.ts` to `dns-record-configs.ts`

* Small refactor

* Replace straight quote mark by a curly quote mark

* Do not translate DNS record types (e.g. A, ALIAS, CNAME)

* Navigate to DNS overview page after adding a record

* Remove translation from CAA tags

* Improve FQDN comment in the data transformation function

* Remove translations from SRV protocol labels

* Translate placeholder strings for DNS records

* Translate page title

* Remove `WPCOMDNSRecord` that was not being used

* Fix type error because ALIAS did not have a `name` property

* Update type names and definitions to align with #105129

* Update type names to keep consistency

* Update mutation function to a more generic one

* Update mutation function to align with #105129

* A4A > Sign up: Show Onboarding tour in WC flow (#105175)

* Jetpack Cloud: skip wpcomJetpackScanAtomicTransfer middleware on Cloud and A4A (#105189)

* Staging Sites: Add separate expand button and allow selecting nodes by clicking on them in the Jetpack Backup FileBrowser (#105161)

* Allow selecting files by clicking on them

* Add separate expand button option to file browser component

* Remove unnecessary min-width

* Correct grammar in a comment

* Fix styling

* Add RTL support for chevrons

* Improve checkbox accessibility

* Adjust accessibility

* Remove tab index from the node button only when `showFileCard` option is disabled

* Add `expandDirectoriesOnClick` prop to control directory expansion behavior in file browser

* Introduce separate `handleExpandButtonClick` handler

* Expansion directories only when `expandDirectoriesOnClick` prop is true

* Simplify checkbox change logic

* Improve contents of

---------

Co-authored-by: Kateryna Kodonenko <kateryna@automattic.com>

* Redirect from deletion banner when the staging site is deleted (#105164)

* redirect from deletion banner when the staging site is deleted

* check if query is undefined

* use calypso/state notices instead of snackbar

* clean up comments

* CalloutOverlay: Fix the overlapping issue (#105195)

* Fix section name in track events (#105196)

* Hosting Dashboard: Add domain glue records DataView (#105184)

* ZD: Fix metadata when creating a ticket (#105183)

* Packages: Add domain-search to tsconfig (#105186)

* Dashboard v2: render expiring purchase in color (#105170)

* Gravatar: Adjust login-related screens for Gravatar-owned services (#105192)

* Gravatar: Adjust login-related screens for Gravatar owned services

* Reuse one more variable

---------

Co-authored-by: Welly Shen <welly.shen@automattic.com>

* Domain Dashboard: Render registered date and renewal CTA (#105188)

* Render the header and registered date

* Render the renew now button if eligible

* Wrap domain name if it doesnt fit in the container

* Use purchase properties

* Revert callback changes

* Hosting dashboard: Add a custom empty state to the site list (#104544)

* Backups Dashboard: add back up now button (#105190)

* Add enqueue and fetch backup functions

* Add siteBackupsQuery

* Add BackupNowButton

* Render BackupNowButton as Backups page header action

* Remove backup up now button icon

* Refactor BackupNowButton: Simplify button content and tooltip handling

- Moved button content and tooltip text into a structured object for better readability and maintainability.
- Updated mutation function to set the enqueue state before calling the backup function.

* Removed unnecessary empty object from the post request

* Refactor backup data layer to entity/collection pattern

* Domains Hosting Dashboard: DNS records list (#105129)

* Add dns list placeholder

* Add basic data

* Implement data view

* Add value column

* Update section header

* Hide DataView header

* Add actions placeholders

* Add action menu placeholder

* Update dns record list - handle protected records

* Move action to a separate file

* Move fields in a separate file

* Add restore default records actions placeholders

* Add logit to enable/disable dns actions

* Work in progress

* Add delete/edit callback

* Minor fixes after rebase

* Fix edit dns route

* Implement domain restore actions

* Fine tuning

* Fix type issue

* Restore params

* Fix type error

* Restore DnsRecordType

* Fix type

* Address PR review comments

* Fix dropdown

* Address PR review comments

* Add more tracking information around creating conversations (#105199)

* Fix double login e2e (#101899)

* Site Overview: Implement change site address action (#105191)

* Site Overview: Implement change site address action

* Fix types

* Update eslint

* Address feedback

* Fix display incorrect wpcom domain

* fix(sites): prevent PreviewSizePicker crash from invalid previewSize … (#105206)

* fix(sites): prevent PreviewSizePicker crash from invalid previewSize values

* Move previewSize sanitization to existing `sanitizeView` function

* Simplify code for updating `previewSize` to a valid value

* Use `undefined` instead of `230` in order to explicitly get the default

* Check whether the previewSize is smaller than the smallest value

* Check whether the previewSize is NaN

---------

Co-authored-by: Arun <arun@arun.blog>
Co-authored-by: arthur <arthur.chu@automattic.com>

* Domains: Create name-servers component (#105062)

* Create name-servers component

* Marketplace Site Selector: Fix highlight styles within component (#105047)

* Fix styles within component

* Improve syntax

* Remove content-fade

* Cleanup comments

* Remove unnecessary overide

* Keep fade in

* Revert reader changes

* Update colors and fade in

* Improve fade in removal

* Ensure the hover state on badges remain the same

* Only apply the overrides for specific badges

* Fix unintended changes

* Fix unintended change

* Remove redundant styles

---------

Co-authored-by: Kateryna Kodonenko <kateryna@automattic.com>

* Add the hosting dashboard domain forwarding add/edit form (#105113)

The Hosting Dashboard add and edit form for Domain Forwarding rules. There are a few follow up tasks that we'll fix

* Newsletter importer: Update billing warning copy (#105203)

* Newsletter importer: Update billing warning copy.

* Connect Refresh: Fix layout issues with Woo DNA/JPC signup (create-account) form (#105156)

* Domain Search: Update experiment name (#105131)

* Domain Search: Update experiment name

* Enable eligibility only for logged in users

---------

Co-authored-by: Luis Felipe Zaguini <luisfelipezaguini@gmail.com>

* Getting supported contries list from our API

* Fix merge conflict

* Add support to State selection from selected country

* Refactor domain-supported contries and states and removed lodash usage

* Remove unnecessary code after merge

* Renamed contact-details directory to domain-contact-details

* Update domain data type and removed types file

* Use contact-form-fields to store them so the main file doesn't get too big

* Final review changes

* Removed unnecessary css files and fixed types

* Readability improvements

* Fix data types

* Improve support links usage

* Improve the usage of queries for validate mutation

* Fix unnecessary type mapping and remove older query

* Fix type error on StateFieldEdit component

* Fix render error during component update

---------

Co-authored-by: Grzegorz Chudzinski-Pawlowski <112354940+grzegorz-cp@users.noreply.github.com>
Co-authored-by: Tony Arcangelini <33258733+arcangelini@users.noreply.github.com>
Co-authored-by: Griffith Chen <griffith.chen@automattic.com>
Co-authored-by: Veselin Nikolov <veselin@automattic.com>
Co-authored-by: arthur791004 <arthur.chu@automattic.com>
Co-authored-by: Claudiu Filip <claudiu.filip@automattic.com>
Co-authored-by: Christos <chriskmnds@gmail.com>
Co-authored-by: Welly Shen <hivoid19@gmail.com>
Co-authored-by: Sebastián Barbosa <sebabarbosa@gmail.com>
Co-authored-by: Omar Alshaker <omar@omaralshaker.com>
Co-authored-by: Ashar Fuadi <ashar.fuadi@automattic.com>
Co-authored-by: katinthehatsite <katerynakodonenko@gmail.com>
Co-authored-by: Kateryna Kodonenko <kateryna@automattic.com>
Co-authored-by: Karen Attfield <karenlattfield@gmail.com>
Co-authored-by: Gergely Csécsey <gergely.csecsey@automattic.com>
Co-authored-by: Roberto Aranda <roberto.aranda@automattic.com>
Co-authored-by: Gergely Csécsey <gcsecsey@gmail.com>
Co-authored-by: Lena Morita <lena@jaguchi.com>
Co-authored-by: leonardost <leonardost@users.noreply.github.com>
Co-authored-by: Yashwin Poojary <yashwinpoojary@gmail.com>
Co-authored-by: Rafael Agostini <rafael.agostini@automattic.com>
Co-authored-by: Ivan Ottinger <ivan.ottinger@automattic.com>
Co-authored-by: Miroslav Mitev <m1r0@users.noreply.github.com>
Co-authored-by: Payton Swick <payton@automattic.com>
Co-authored-by: Welly Shen <welly.shen@automattic.com>
Co-authored-by: Luis Felipe Zaguini <26530524+zaguiini@users.noreply.github.com>
Co-authored-by: Philip Jackson <p-jackson@users.noreply.github.com>
Co-authored-by: Igor Giussani <igor.giussani@automattic.com>
Co-authored-by: Arun <arun@arun.blog>
Co-authored-by: Bogdan Nikolic <bogdan.nikolic87@gmail.com>
Co-authored-by: Kamen Stanev <kamen.stanev@automattic.com>
Co-authored-by: Allison Levine <1689238+allilevine@users.noreply.github.com>
Co-authored-by: Luis Felipe Zaguini <luisfelipezaguini@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants