add NO_STAGE stage option + hide column by default; block empty stage in workflow UI#20344
add NO_STAGE stage option + hide column by default; block empty stage in workflow UI#20344jsdevninja wants to merge 1 commit intotwentyhq:mainfrom
Conversation
Welcome!
Hello there, congrats on your first PR! We're excited to have you contributing to this project. |
There was a problem hiding this comment.
2 issues found across 12 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="packages/twenty-front/src/modules/page-layout/components/PageLayoutTabsRenderer.tsx">
<violation number="1" location="packages/twenty-front/src/modules/page-layout/components/PageLayoutTabsRenderer.tsx:120">
P2: System-object filtering now accepts any tab with one of the allowlisted icons, so a custom tab can slip through as if it were a built-in system tab.</violation>
</file>
<file name="packages/twenty-front/src/modules/object-record/record-field/ui/form-types/components/FormSelectFieldInput.tsx">
<violation number="1" location="packages/twenty-front/src/modules/object-record/record-field/ui/form-types/components/FormSelectFieldInput.tsx:116">
P2: Required select fields can still emit an empty string when `options` is empty because the fallback value becomes `''` and is passed to `onChange`.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| SYSTEM_OBJECT_TABS.includes(tab.title), | ||
| ? tabsWithVisibleWidgets.filter( | ||
| (tab) => | ||
| (isDefined(tab.icon) && SYSTEM_OBJECT_TAB_ICONS.includes(tab.icon)) || |
There was a problem hiding this comment.
P2: System-object filtering now accepts any tab with one of the allowlisted icons, so a custom tab can slip through as if it were a built-in system tab.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/twenty-front/src/modules/page-layout/components/PageLayoutTabsRenderer.tsx, line 120:
<comment>System-object filtering now accepts any tab with one of the allowlisted icons, so a custom tab can slip through as if it were a built-in system tab.</comment>
<file context>
@@ -102,11 +102,24 @@ export const PageLayoutTabsRenderer = () => {
- SYSTEM_OBJECT_TABS.includes(tab.title),
+ ? tabsWithVisibleWidgets.filter(
+ (tab) =>
+ (isDefined(tab.icon) && SYSTEM_OBJECT_TAB_ICONS.includes(tab.icon)) ||
+ (isDefined(tab.title) &&
+ SYSTEM_OBJECT_TAB_TITLES_FALLBACK.includes(tab.title)),
</file context>
2738dfb to
f0c1313
Compare
📊 API Changes ReportGraphQL Schema ChangesGraphQL Schema Changes[error] Error: Unable to read JSON file: /home/runner/work/twenty/twenty/main-schema-introspection.json: Not valid JSON content GraphQL Metadata Schema ChangesGraphQL Metadata Schema Changes[error] Error: Unable to read JSON file: /home/runner/work/twenty/twenty/main-metadata-schema-introspection.json: Not valid JSON content REST API Analysis ErrorError OutputREST Metadata API Analysis ErrorError Output |
Summary
NO_STAGEoption to standard Opportunity › Stage.noStageview group mapped toNO_STAGEand setisVisible: falseso the column stays hidden until users explicitly show it (matches maintainer guidance to use a sentinel stage instead of nullable).NO_STAGEtoopportunity.stageoptions when missing.Closes Bug: For Non nullable fields (SELECT, MULTISELECT), do not allow workflow update / create / upsert to set "no selected" #20139
Workflow UX
Do not expose an empty / “No {field}” select option when the underlying field is not nullable (
FormFieldInput→FormSelectFieldInput). Clearing a workflow variable fallback now picks the first available option instead of trying to persist an empty/null-like state for required selects like stage.Not changing
Per review feedback we are not making
stagenullable (null), and we dropped the nullable migration.Regression / housekeeping
Remove the
stage: nullGraphQL integration expectation.