{"record":{"id":"4122d06bc90104bc","repo":"marmelab/react-admin","slug":"cannot-use-alwayson-and-defaultvalue-on-a-filter-i","errorCode":null,"errorMessage":"Cannot use alwaysOn and defaultValue on a filter input. Please set the filterDefaultValues props on the <List> element instead.","messagePattern":"Cannot use alwaysOn and defaultValue on a filter input\\. Please set the filterDefaultValues props on the <List> element instead\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/ra-ui-materialui/src/list/filter/FilterForm.tsx","lineNumber":53,"sourceCode":"    );\n};\n\nexport type FilterFormProps = FilterFormBaseProps;\n\nexport const FilterFormBase = (props: FilterFormBaseProps) => {\n    const { filters } = props;\n    const resource = useResourceContext(props);\n    const {\n        displayedFilters = {},\n        filterValues,\n        hideFilter,\n    } = useListContext();\n\n    useEffect(() => {\n        if (!filters) return;\n        filters.forEach((filter: React.ReactElement) => {\n            if (filter.props.alwaysOn && filter.props.defaultValue) {\n                throw new Error(\n                    'Cannot use alwaysOn and defaultValue on a filter input. Please set the filterDefaultValues props on the <List> element instead.'\n                );\n            }\n        });\n    }, [filters]);\n\n    const getShownFilters = () => {\n        if (!filters) return [];\n        const values = filterValues;\n        return filters.filter(\n            (filterElement): filterElement is React.ReactElement => {\n                if (!React.isValidElement(filterElement)) {\n                    return false;\n                }\n\n                const filterValue = get(values, filterElement.props.source);\n                return (\n                    filterElement.props.alwaysOn ||","sourceCodeStart":35,"sourceCodeEnd":71,"githubUrl":"https://github.com/marmelab/react-admin/blob/051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0/packages/ra-ui-materialui/src/list/filter/FilterForm.tsx#L35-L71","documentation":"A filter input marked alwaysOn renders permanently and is not toggleable, so a defaultValue on it would be ignored/conflict with form initialization. react-admin mandates defaults for alwaysOn filters be given via <List filterDefaultValues> instead, and throws during a useEffect scan of filter elements.","triggerScenarios":"Declaring a filter like <TextInput source=\"q\" alwaysOn defaultValue=\"foo\" /> in a List's filters array.","commonSituations":"Migrating filter props from toggled to alwaysOn filters, or copy-pasting filter elements that retain defaultValue.","solutions":["Remove defaultValue from the alwaysOn filter input.","Move the default to <List filterDefaultValues={{ q: 'foo' }}>.","Drop alwaysOn if the filter should be toggleable with its own default."],"exampleFix":"// before\n<List filters={[<TextInput source=\"q\" alwaysOn defaultValue=\"foo\" />]}>\n// after\n<List filters={[<TextInput source=\"q\" alwaysOn />]} filterDefaultValues={{ q: 'foo' }}>","handlingStrategy":"validation","validationCode":"const invalid = filters?.some(f => f.props?.alwaysOn && f.props?.defaultValue != null);\nif (invalid) throw new Error('alwaysOn filter cannot have defaultValue; use List filterDefaultValues');","typeGuard":"const isValidFilter = (f: React.ReactElement) => !(f.props.alwaysOn === true && f.props.defaultValue !== undefined);","tryCatchPattern":"useEffect(() => { try { validateFilters(filters); } catch (e) { setError(e); } }, [filters]);","preventionTips":["Never combine alwaysOn with defaultValue.","Put defaults in <List filterDefaultValues>.","Add a unit test scanning your filters array for the invalid combination."],"tags":["react-admin","invalid-config","filters"],"backgroundTag":"invalid-props-combination","analyzedSha":"051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0","analyzedAt":"2026-08-30T02:28:14.926Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}