Skip to content

Refactor/activity list filters grid - #1131

Open
ako3131 wants to merge 39 commits into
masterfrom
refactor/activity-list-filters-grid
Open

ako3131 wants to merge 39 commits into
masterfrom
refactor/activity-list-filters-grid

Conversation

@ako3131

@ako3131 ako3131 commented Oct 19, 2026

Copy link
Copy Markdown

ref: https://app.clickup.com/t/9014802374/86bcbg72u

UI CHANGES:

  • Activity list now uses the MUI Data Grid: sticky column headers, drag-to-resize columns, pagination above and below the grid
  • Toolbar holds everything: Edit Selected, Saved Views, Add Activity, Import (MUX or CSV, one icon menu), Columns, Filters, Export, and Search (an icon that expands)
  • Saved Views is now a dropdown: pick, search, delete, clear, or save the current filters as a view
  • Columns panel replaces the "Select data to display" dropdown; every column except Actions can be hidden
  • Hidden default columns come back on the next visit; the optional columns you pick are remembered
  • Selection Status is now an optional column, hidden by default
  • The "All" and "All Companies" shortcuts are gone but the column selector panel Show/Hide all replaces "All"
  • Long cell text is cut to one line and rows grow only while being bulk-edited
  • A third click on a column header removes the sort and goes back to the default order

@ako3131
ako3131 requested review from santipalenque and smarcet and a balanced review from Copilot October 19, 2026 18:36
@ako3131 ako3131 self-assigned this Oct 19, 2026
@coderabbitai

coderabbitai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c5a7d079-1f17-4c17-9ab3-7aa95580e240
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@ako3131

ako3131 commented Oct 19, 2026

Copy link
Copy Markdown
Author

/deploy-preview

@github-actions

Copy link
Copy Markdown

🚀 Deployed on https://pr-1131--show-admin-preview.netlify.app

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Changes recommended

Bulk-edit relationship handling and unresolved search, visibility, and keyboard interaction defects affect core activity-list workflows.

5 open issues
What changed in this PR

Migrates the activity list to MUI Data Grid and consolidates its controls into a toolbar.

Changes:

  • Adds resizable columns, bulk editing, and top/bottom pagination.
  • Introduces searchable Saved Views and optional-column persistence.
  • Adds grid and saved-view interaction tests.
File Description
yarn.lock Locks Data Grid dependencies.
src/​reducers/​events/​event-list-reducer.js Stores optional-column selections.
src/​pages/​events/​summit-event-list-page/​index.js Integrates the grid and Saved Views.
src/​pages/​events/​summit-event-list-page/​helpers.js Makes Selection Status optional.
src/​pages/​events/​__tests__/​summit-event-list-page.test.js Tests column visibility and persistence.
src/​i18n/​en.json Updates toolbar and saved-view labels.
src/​components/​mui/​bulk-edit-data-grid.js Adds the reusable bulk-edit grid.
src/​components/​mui/​__tests__/​bulk-edit-data-grid.test.js Tests grid interactions.
src/​components/​filters/​saved-views/​index.js Adds saved-view selection and management.
src/​components/​filters/​saved-views/​__tests__/​saved-views.test.js Tests saved-view workflows.
src/​actions/​event-actions.js Adds the column-selection action.
package.json Adds MUI Data Grid.

Review effort: Balanced

const editField = (rowId, key, value) => {
setEditRows((current) => ({
...current,
[rowId]: { ...current[rowId], [key]: value }

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Fixed in d930c90

Comment on lines +158 to +159
const loadViews = (input) =>
queryFilterCriterias(summitId, context, input, setViews);
onChange={handleSearch}
placeholder={T.translate("general.placeholders.search")}
// the menu otherwise treats typing as item navigation
onKeyDown={(ev) => ev.stopPropagation()}

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Fixed in f632809

// its input and its clear button with nothing typed
onBlur={(ev) => {
if (ev.currentTarget.contains(ev.relatedTarget)) return;
if (!ev.currentTarget.querySelector("input").value) setExpanded(false);

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Fixed in ae71970

Comment on lines +489 to +491
field: "actions",
type: "actions",
headerName: T.translate("general.actions"),

@santipalenque santipalenque left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

hey @ako3131 good job so far!, apart from the inline comments I also found these:

  • columns selection not stored in view, search filter not stored in view. We should try to fix this without any API change
  • why is list cleared and refetch on every Saved Views dropdown open? I think we can pull in the background and avoid clearing it
  • some columns are not resizable (speakers), not sure if any more.

onSubmit: (values) =>
onSave({ id: selectedView?.id, ...values })
.then(() => onClose())
// the action's error handler reports the failure; keep the dialog

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

remove, unnecessary comment, this is our code standard behavior

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

also dialog covers API error message

};

return (
<Dialog

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

can you use uicore CustomDialog instead ? so we start standarizing dialogs

VISIBILITY_OPTION_ME
} from "../../../utils/filter-criteria-constants";

const SaveViewDialog = ({ selectedView, onSave, onClose }) => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

this should go in its own file

"& .MuiButton-startIcon": { m: 0 }
};

const renderEditor = (col, editRow, onChange) => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

please put auxiliary components in their own files following our codebase convention on directories and file org

reset();
}, [dataIds]);

const enterEditMode = () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I think we can improve UX here, wdyt about a double click in a row triggering edit mode for that row, then a blur (click outside the row) would save and escape would cancel. I think if you want to edit a single row you have to click too many times, and selecting many presentations to edit doesn't make it any easier.

onExport={handleExport}
searchProps={{
term,
placeholder: T.translate("general.placeholders.search"),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

this should not be the generic one, we had one specific for this grid

const ColumnMenu = (props) => {
const { colDef } = props;
return (
<GridColumnMenu

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

can we sort the columns alphabetically ?

name: requiredStringValidation().trim(),
visibility: requiredStringValidation()
}),
// keeps the id of the active view so saving updates it instead of

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

API doesn't allow this, please test

@ako3131

ako3131 commented Oct 22, 2026

Copy link
Copy Markdown
Author

@santipalenque I made fixes according to your suggestions. However I'd like to put the double click to edit and storing search/columns in a saved view in another PR. Let me know what you think. Thank you!

@ako3131
ako3131 requested a review from santipalenque October 22, 2026 16:13
@santipalenque

Copy link
Copy Markdown

@santipalenque I made fixes according to your suggestions. However I'd like to put the double click to edit and storing search/columns in a saved view in another PR. Let me know what you think. Thank you!

yes thats ok

@santipalenque

Copy link
Copy Markdown

@ako3131 I found new issues with the solution:

  1. Pressing Enter twice in the save dialog creates duplicate views. Enter submits through Formik's handleSubmit, which doesn't block a second submit while the first is pending.
    CustomDialog's guard only covers its own Save button. An early return if (formik.isSubmitting) in the form's submit handler would fix it.
  2. Saved-views search can show stale results. queryFilterCriterias is debounced, but nothing cancels or ignores a request that is still running. If the user opens the dropdown and types
    more than 500ms later, the initial unfiltered load can arrive after the search results and overwrite them. Low impact, but nobody has replied to Copilot about it.
  3. A failed "Apply changes" still discards the user's edits. bulkUpdateEvents catches its own error, so the promise always resolves. The grid's .then(reset) then runs anyway, and its
    .catch never fires. This comes from the existing action, but the new grid relies on it.
  4. New dependency @mui/x-data-grid (7.29.13). It's the first use in summit-admin, and uicore doesn't use it either. It's worth deciding whether you accept the dependency, and whether this
    grid should eventually move to uicore, since it replaces uicore's BulkEditTable.
  5. Behavior change: Selection Status is now hidden by default. It moved from the fixed columns to the optional ones. Users only see it after turning it on in the columns panel.
  6. Nit: at bulk-edit-data-grid/index.js:334, the "bootstrap 3 sets box-sizing…" comment sits above columnsManagement, but it explains searchInputProps further down.

@santipalenque

Copy link
Copy Markdown

@ako3131 more findings by using it:
1- When hiding ALL columns the grid only displays Action column, looks broken. Maybe show the select and the title always ?
2- Edit / Delete icons look too small compared to the rest of the admin

@ako3131
ako3131 force-pushed the refactor/activity-list-filters-grid branch from bf2c4dc to 0876d6c Compare October 23, 2026 21:52
@ako3131

ako3131 commented Oct 24, 2026

Copy link
Copy Markdown
Author

@santipalenque
I made fixes for your suggestions, let me know what you think.

In regards to the selection status change, I moved it to optional since it seemed like it was usually an empty column. Let me know if it should be added back.

I think it would be nice to see how it goes as a summit admin table, then potentially move it into core ui. The grid uses only the free version of @mui/x-data-grid and that provides the column resizing, sticky headers, and the columns panel.

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.

3 participants