Expression Plugin
This plugin assists with exposing custom expressions to Player content.
Usage
Define handlers for the expressions you wish to add:
import { ExpressionHandler, ExpressionContext } from '@player-ui/expression-plugin'; const customExpressionHandler: ExpressionHandler = (ctx: ExpressionContext) => { return 'Hello World!' }
Register with Player. Subsequent registrations of an expression with the same name will override previous values.
import { Player } from '@player-ui/player'; import { ExpressionPlugin } from '@player-ui/expression-plugin'; const player = new Player({ plugins: [ new ExpressionPlugin([ ['myCustomFunction', customExpressionHandler] ]) ] })
Any calls to
myCustomFunction()
within the flow will utilize the newly registered expression:{ "asset": { "id": "sample", "type": "text", "value": "@[ myCustomFunction() ]@" } }
CocoaPods
Add the subspec to your
Podfile
pod 'PlayerUI/ExpressionPlugin'
Swift Usage
The ExpressionPlugin lets you register custom expressions to run native code:
{ "id": "textAsset", "type": "text", "value": "@[ myExpression() ]@" }
let expressionPlugin = ExpressionPlugin(expressions: [ "myExpression": { _ in return "Some Value" } ])
Arguments
Arguments can be passed to custom expressions, and your handler receives the arguments as an array of Any:
{ "id": "textAsset", "type": "text", "value": "@[ myExpression('world') ]@" }
let expressionPlugin = ExpressionPlugin(expressions: [ "myExpression": { (args: [Any]) -> Any? in guard let string = args.first as? String else { return nil } return "Hello " + string } ])
The
ExpressionPlugin
enables consumers to register custom expressions in native JVM code. Simply supply a map of expression name to handler on instantiation, and the expressions will be available within the content. Handlers receive arguments are as a List<Any?>
and are permitted to return Any?
.Usage
In build.gradle
implementation "com.intuit.player.plugins:expression:$PLAYER_VERSION"
In Player constructor
import com.intuit.player.plugins.expression.ExpressionPlugin val expressionPlugin = ExpressionPlugin( "hello" to { args: List<Any?> -> when (val name = args.firstOfNull()) { null -> "goodbye" else -> "hello $name" } } ) AndroidPlayer(expressionPlugin)
In Player content
{ "id": "hello-world-text", "type": "text", "value": "@[hello('world')]@" }