Sao.common.DomainParser stringable: can not parse domain to show UserError
In console browser log: ``` TypeError: Cannot read properties of undefined (reading 'endsWith') at stringable_ (https://xxxxx.com/dist/tryton-sao.js:4394:26) at Array.every (<anonymous>) at ClassConstructor.stringable (https://xxxxx.com/dist/tryton-sao.js:4428:27) at Object.ajax_success [as success] (https://xxxxx.com/dist/tryton-sao.js:1397:43) at c (https://xxxxx.com/bower_components/jquery/dist/jquery.min.js:2:25304) at Object.fireWith [as resolveWith] (https://xxxxx.com/bower_components/jquery/dist/jquery.min.js:2:26053) at l (https://xxxxx.com/bower_components/jquery/dist/jquery.min.js:2:77782) at XMLHttpRequest.<anonymous> (https://xxxxx.com/bower_components/jquery/dist/jquery.min.js:2:80265)` ``` Can not [stringable domain in RPC UserError](https://foss.heptapod.net/tryton/tryton/-/blob/acd802ddc8fcee6890cd44a97f4da4926ccd62bc/sao/src/rpc.js#L76) Adding more information in the console browser: ``` (5) [Array(3), Array(0), Array(3), Array(3), Array(3)] (3) ['salable', '=', true] [] (3) ['company_salable', '=', true] (3) ['template.validated', '=', true] (3) ['template.id', 'in', Array(1471)] ``` See that second array item, is empty list. Domain field is: ``` >>> Line = pool.get('sale.line') >>> Line.product.domain [If(And(In(Eval('sale_state', ''), ['draft', 'quotation']), Not(Less(Eval('quantity', 0), 0, False))), ('salable', '=', True), ()), If(Not(Equal(Eval('type', ''), 'line')), ('id', '=', None), ()), ('company_salable', '=', True), ('template.validated', '=', True), If(Equal(Eval('sale_state', ''), 'draft'), ('template.id', 'in', Eval('available_products', [])), ())] ``` Stringable [can not parse this domain](https://foss.heptapod.net/tryton/tryton/-/blob/acd802ddc8fcee6890cd44a97f4da4926ccd62bc/modules/sale/sale.py?page=2#L1304): ``` If(Eval('type') != 'line', ('id', '=', None), ()), ```
issue