-
Notifications
You must be signed in to change notification settings - Fork 4.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Grid layout: Use numbers instead of strings for layout attributes #63112
Grid layout: Use numbers instead of strings for layout attributes #63112
Conversation
Ensure columnCount, rowCount, columnStart, rowStart, columnSpan, and rowSpan are always serialized into block attributes as a number, not a string. Previously we were inconsistent.
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.
To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
Size Change: +604 B (+0.03%) Total Size: 1.76 MB
ℹ️ View Unchanged
|
Flaky tests detected in 844dbd9. 🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/9789646523
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is generally working well, and the code looks much nicer! The only issue I'm seeing is with the range slider on the column control defaulting to mid-range when the number input is cleared:
The practical difference is that by removing the parseInt()
from the value we pass the range control, it's now receiving null
when the field is cleared, instead of NaN
which it seems to deal with better. That seems more like a bug with RangeControl, but in any case we should make sure to pass it either NaN
or 0
if columnCount
is null 😅
How's that @tellthemachines? I fixed your feedback and made it so that we're consistently unsetting the attributes when you clear the InputControl instead of setting it to an empty string or null. Definitely worth testing again, this stuff is fraught. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is working well for me now!
…rdPress#63112) * Grid layout: Use numbers instead of strings for layout attributes Ensure columnCount, rowCount, columnStart, rowStart, columnSpan, and rowSpan are always serialized into block attributes as a number, not a string. Previously we were inconsistent. * I am dumb * Update migration comment * Unset columnCount instead of setting it to null * Unset minimumColumnWidth instead of setting it to an empty string * Show slider at 0 if there is no columnCount set * Handle empty strings and invalid numbers in migration
There are several numeric grid layout attributes. Some are stable and were shipped in WP 6.6:
columnCount
,columnSpan
, androwSpan
. Some are new and behind the Grid interactivity experimental flag:rowCount
,columnStart
, androwStart
.In WP 6.6 the attributes are consistently a string even though they always contain a number, e.g.
'3'
.In the plugin, and especially with the experimental flag enabled, the attributes alternate between being a string e.g.
'3'
and being a number e.g.3
because we now frequently perform arithmetic on these values.The inconsistency leads to a terrible developer experience. It's difficult to write bug-free code. You never know what data type these values are, you frequently run into
NaN
errors, and our code ends up littered withparseInt
calls.I propose that we consistently store these attributes as numbers.
This PR:
setAttributes( ... )
a number.parseInt
calls now that we can be sure we're working with numbers.columnCount
,columnSpan
, androwSpan
attributes that are out there in the wild from string to number. (These were the ones that shipped in WP 6.6.)To test, do a complete run-through of the grid functionality (flag turned on and off) locally using
nom run dev
(so that the assertions will run) and ensure that there are no crashes. Also check that grid markup that was saved with the plugin turned off continues to work with the plugin turned back on.