What do I use to replace EpiListPickerPanel?

I need this functionality in Kinetic.

1 Like

That will be a selection list in kinetic

3 Likes

This control is a complete mess.

It’s broken beyond belief.

Does anybody have this working properly with a grid in 2025.1.x ?

2 Likes

It’s pretty bad. I’ve never used it but some testing shows it only allows certain combinations of these properties and determines the bindingMode from the same.

Below is the determination of modes showing which combinations are valid.
A more user friendly way of doing this would be a mode selector which enables/disables valid properties. And some design-time validation would be nice.

Mode Target Type Source Type Required Props
1 None Code (delim) items list prop delimiter, targetCodeCol, targetTableName
1 Simple Code (delim) ? (either) [] (empty) or ["delimiter"]
2 TargetCodeDescSourceCodeDesc Code (delim) Code (delim) delimiter, sourceCodeCol, sourceDescCol, targetCodeCol, targetDescCol, tableName
3 TargetCodeSourceRows Code (delim) Rows Option 1: delimiter, sourceViewName, sourceCodeCol, sourceDescCol, targetViewName, targetCodeCol
Option 2: delimiter, sourceTableName, sourceCodeCol, sourceDescCol, targetTableName, targetCodeCol
4 TargetRowsSourceRows Rows Rows Option 1: sourceViewName, sourceCodeCol, sourceDescCol, targetViewName, targetCodeCol, parentRelatedCol, childRelatedCol
Option 2: sourceViewName, sourceCodeCol, sourceDescCol, targetViewName, targetCodeCol, relatedCol
5 TargetCodeDescSourceRows Code (delim) Rows Option 1: delimiter, sourceViewName, sourceCodeCol, sourceDescCol, targetTableName, targetCodeCol, targetDescCol
Option 2: delimiter, sourceTableName, sourceCodeCol, sourceDescCol, targetTableName, targetCodeCol, targetDescCol

here’s a working tilde field to tilde field (#2) setup (notice TableName is required):




determineMode source code
                determineMode(a) {
                    if (a.items && a.items.length) {
                        const u = this.isSimpleOrNone(a);
                        if (u)
                            return u
                    }
                    return this.isTargetCodeSourceRows(a) ? D_.TargetCodeSourceRows : this.isTargetCodeDescSourceCodeDesc(a) ? D_.TargetCodeDescSourceCodeDesc : this.isTargetCodeDescSourceRows(a) ? D_.TargetCodeDescSourceRows : this.isTargetRowsSourceRows(a) ? D_.TargetRowsSourceRows : void 0
                }
                isSimpleOrNone(a) {
                    return this.checkProps(a, ["delimiter", "targetCodeCol", "targetTableName"]) ? D_.None : this.checkProps(a, []) || this.checkProps(a, ["delimiter"]) ? D_.Simple : void 0
                }
                isTargetCodeDescSourceCodeDesc(a) {
                    return this.checkProps(a, ["delimiter", "sourceCodeCol", "sourceDescCol", "targetCodeCol", "targetDescCol", "tableName"])
                }
                isTargetCodeSourceRows(a) {
                    let u = ["delimiter", "sourceViewName", "sourceCodeCol", "sourceDescCol", "targetViewName", "targetCodeCol"];
                    return !(!this.checkProps(a, u) && (u = ["delimiter", "sourceTableName", "sourceCodeCol", "sourceDescCol", "targetTableName", "targetCodeCol"],
                    !this.checkProps(a, u)))
                }
                isTargetRowsSourceRows(a) {
                    let u = ["sourceViewName", "sourceCodeCol", "sourceDescCol", "targetViewName", "targetCodeCol", "parentRelatedCol", "childRelatedCol"];
                    return !(!this.checkProps(a, u) && (u = ["sourceViewName", "sourceCodeCol", "sourceDescCol", "targetViewName", "targetCodeCol", "relatedCol"],
                    !this.checkProps(a, u)))
                }
                isTargetCodeDescSourceRows(a) {
                    let u = ["delimiter", "sourceViewName", "sourceCodeCol", "sourceDescCol", "targetTableName", "targetCodeCol", "targetDescCol"];
                    return !(!this.checkProps(a, u) && (u = ["delimiter", "sourceTableName", "sourceCodeCol", "sourceDescCol", "targetTableName", "targetCodeCol", "targetDescCol"],
                    !this.checkProps(a, u)))
                }
                checkProps(a, u) {
                    let m = !0;
                    return this.bindingProps.forEach(A => {
                        u.indexOf(A) > -1 && !this.hasValue(a, A) && (m = !1),
                        u.indexOf(A) <= -1 && this.hasValue(a, A) && (m = !1)
                    }
                    ),
                    m
                }
                hasValue(a, u) {
                    return a[u] && a[u].length
                }

Hope this helps.