-
Notifications
You must be signed in to change notification settings - Fork 310
fix(grid): fix bug after refactor #3527
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
Conversation
## Walkthrough
The changes update the styling for the `.tiny-grid__empty-block` element in two theme packages by centering its text horizontally and adjust the background-position for a grid column style. A safety check was added in a keyboard-related method to prevent errors when querying DOM elements. The `cacheColumnMap` method was modified to accept external cache data instead of building it internally. No public API changes were made except for the updated method signature of `cacheColumnMap`.
## Changes
| File(s) | Change Summary |
|------------------------------------------------|----------------------------------------------------------------------------------------------------|
| packages/theme-saas/src/grid/table.less | Adjusted `.tiny-grid-body__column` background-position to `100%`; added Tailwind `text-center` to `.tiny-grid__empty-block`. |
| packages/theme/src/grid/table.less | Added `text-align: center;` to `.tiny-grid__empty-block`. |
| packages/vue/src/grid/src/keyboard/src/methods.ts | Added a null check before querying `.col__index-checked` elements to avoid errors in `_clearIndexChecked`. |
| packages/vue/src/grid/src/table/src/methods.ts | Modified `cacheColumnMap` to accept external `options` with `columnCaches` instead of internal iteration; updated method signature. |
## Poem
> In the land where empty grids reside,
> A tweak now lets their text align with pride.
> Centered words in a table’s embrace,
> Bringing symmetry to the empty space.
> Safe checks guard the keyboard’s flow,
> And caches come from places we know.
> The rabbit hops with CSS delight—
> Centered grids just feel so right!
> 🐇✨ 📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms (2)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
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.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
packages/vue/src/grid/src/table/src/methods.ts
(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*`: 用于写产品需求和开发文档的文件,需求应尽量写得简单清晰易懂。 在需求设计阶段应遵从逐步迭代的原则,早期版本可以尽量简洁。
**/*
: 用于写产品需求和开发文档的文件,需求应尽量写得简单清晰易懂。
在需求设计阶段应遵从逐步迭代的原则,早期版本可以尽量简洁。
packages/vue/src/grid/src/table/src/methods.ts
⏰ Context from checks skipped due to timeout of 90000ms (2)
- GitHub Check: PR Unit Test
- GitHub Check: PR E2E Test (pnpm test:e2e3)
🔇 Additional comments (1)
packages/vue/src/grid/src/table/src/methods.ts (1)
410-410
: Document the breaking change in method signature.The method signature change from
cacheColumnMap()
tocacheColumnMap(options)
is a breaking change that affects the public API. Ensure all call sites are updated and consider adding JSDoc comments to document the expected parameter structure.Run the following script to verify all usages of this method have been updated:
#!/bin/bash # Description: Find all usages of cacheColumnMap to ensure they pass the required options parameter # Search for method calls rg -A 3 "cacheColumnMap\(" --type ts --type js # Search for method references rg "cacheColumnMap" --type ts --type js
cacheColumnMap(options) { | ||
const { fullColumnMap } = this | ||
const fullColumnIdData = {} | ||
this.fullColumnIdData = fullColumnIdData | ||
Map.prototype.clear.apply(fullColumnMap) | ||
fullColumn.forEach((column, index) => { | ||
let colCache = { colid: column.id, column, index } | ||
fullColumnIdData[column.id] = colCache | ||
fullColumnMap.set(column, colCache) | ||
fullColumnMap.clear() | ||
|
||
options.columnCaches.forEach((cache) => { | ||
fullColumnIdData[cache.colid] = cache | ||
fullColumnMap.set(cache.column, cache) | ||
}) | ||
}, |
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.
Add input validation and error handling for robustness.
The method now accepts external cache data but lacks proper validation, which could cause runtime errors if options
or options.columnCaches
is undefined or malformed.
Apply this diff to add proper input validation:
- cacheColumnMap(options) {
+ cacheColumnMap(options) {
+ if (!options || !Array.isArray(options.columnCaches)) {
+ throw new Error('cacheColumnMap requires options.columnCaches to be an array')
+ }
+
const { fullColumnMap } = this
const fullColumnIdData = {}
this.fullColumnIdData = fullColumnIdData
fullColumnMap.clear()
options.columnCaches.forEach((cache) => {
+ if (!cache || !cache.colid || !cache.column) {
+ throw new Error('Invalid cache object: must have colid and column properties')
+ }
fullColumnIdData[cache.colid] = cache
fullColumnMap.set(cache.column, cache)
})
},
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
cacheColumnMap(options) { | |
const { fullColumnMap } = this | |
const fullColumnIdData = {} | |
this.fullColumnIdData = fullColumnIdData | |
Map.prototype.clear.apply(fullColumnMap) | |
fullColumn.forEach((column, index) => { | |
let colCache = { colid: column.id, column, index } | |
fullColumnIdData[column.id] = colCache | |
fullColumnMap.set(column, colCache) | |
fullColumnMap.clear() | |
options.columnCaches.forEach((cache) => { | |
fullColumnIdData[cache.colid] = cache | |
fullColumnMap.set(cache.column, cache) | |
}) | |
}, | |
cacheColumnMap(options) { | |
if (!options || !Array.isArray(options.columnCaches)) { | |
throw new Error('cacheColumnMap requires options.columnCaches to be an array') | |
} | |
const { fullColumnMap } = this | |
const fullColumnIdData = {} | |
this.fullColumnIdData = fullColumnIdData | |
fullColumnMap.clear() | |
options.columnCaches.forEach((cache) => { | |
if (!cache || !cache.colid || !cache.column) { | |
throw new Error('Invalid cache object: must have colid and column properties') | |
} | |
fullColumnIdData[cache.colid] = cache | |
fullColumnMap.set(cache.column, cache) | |
}) | |
}, |
🤖 Prompt for AI Agents
In packages/vue/src/grid/src/table/src/methods.ts around lines 410 to 420, the
cacheColumnMap method lacks validation for the options parameter and its
columnCaches property, which may cause runtime errors if they are undefined or
malformed. Add checks to verify that options is an object and
options.columnCaches is an array before proceeding. If validation fails, handle
the error gracefully, for example by returning early or logging a warning, to
ensure robustness.
PR
PR Checklist
Please check if your PR fulfills the following requirements:
PR Type
What kind of change does this PR introduce?
What is the current behavior?
Issue Number: N/A
What is the new behavior?
Does this PR introduce a breaking change?
Other information
Summary by CodeRabbit