向导航器添加按钮以进行选择

时间:2019-11-08 13:24:28

标签: daml

导航器包含一项功能,用户可以在其中定义自己的表视图,请参见https://docs.microsoft.com/en-us/rest/api/azure/

是否可以创建一个视图,其中一栏呈现一个按钮,当单击该按钮时,该按钮立即执行选择?

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。自定义视图允许您呈现任意的React组件,因此让我们创建一个以行使选择权。

首先,从一个有效的frontend-config.js文件开始。 DAML docs for Navigator包含一个。

然后,请确保至少在文件顶部导入以下符号:

import React from 'react';
import { Button, DamlLfValue, withExercise } from '@da/ui-core';

然后,定义以下顶级值(例如,在export const version={...}下方):


// Create a React component to render a button that exercises a choice on click.
const ExerciseChoiceButtonBase = (props) => (
  <Button
    onClick={(e) => {
      props.exercise(props.contractId, props.choiceName, props.choiceArgument);
      e.stopPropagation();
    }}
  >
    {props.title}
  </Button>
)
ExerciseChoiceButtonBase.displayName = 'ExerciseChoiceButtonBase';

// Inject the `exercise` property to the props of the wrapped component.
// The value of that property is a convenience function to send a
// network request to exercise a choice.
const ExerciseChoiceButton = withExercise()(ExerciseChoiceButtonBase)
ExerciseChoiceButton.displayName = 'ExerciseChoiceButton';

最后,在表格单元格定义中使用以下代码:

{
        key: "id",
        title: "Action",
        createCell: ({rowData}) => {
          // Render our new component.
          // The contract ID and choice argument are computed from the current contract row.
          return ({
            type: "react",
            value: <ExerciseChoiceButton
              title='Transfer to issuer'
              contractId={rowData.id}
              choiceArgument={
                DamlLfValue.record(undefined, [
                  {label: 'newOwner', value: DamlLfValue.party(DamlLfValue.toJSON(rowData.argument).issuer)}
                ])
              }
              choiceName='Iou_Transfer'
            />
          });
        },
        sortable: true,
        width: 80,
        weight: 3,
        alignment: "left"
}

另一个选择是创建一个React组件,其中onClick处理程序使用fetch()发送REST API请求。通过Navigator UI进行选择时,请检查网络流量,以找出请求的格式。