name: instance_related
amis_schema: |-
  {
      "type": "service",
      "body": [
          {
              "type": "button",
              "label": "关联文件",
              "id": "u:instance_link",
              "onEvent": {
                  "click": {
                      "actions": [
                          {
                              "actionType": "dialog",
                              "dialog": {
                                  "type": "dialog",
                                  "title": "关联文件",
                                  "body": [
                                      {
                                          "type": "form",
                                          "data": {
                                            "initApiFinished": false,
                                            "appId": "${app_id}"
                                          },
                                          "body": [
                                            {
                                                "type": "steedos-field",
                                                "config": {
                                                  "type": "lookup",
                                                  "label": "字段1",
                                                  "name": "related_instances",
                                                  "id": "u:ff88cc3375b5",
                                                  "reference_to": "instances",
                                                  "pickerSchema": {
                                                        "rowClassNameExpr": "<%= data.__selected === true ? 'hidden' : '' %>"
                                                    },
                                                  "amis": {
                                                    "id": "u:f0273e374d19",
                                                    "embed": true,
                                                    "label": false,
                                                    "multiple": true,
                                                    "visibleOn": "initApiFinished == true",
                                                    "source": {
                                                      "method": "post",
                                                      "url": "${context.rootUrl}/graphql",
                                                      "requestAdaptor": "var searchableFilter = SteedosUI.getSearchFilter(api.data.$self) || []; const { pageNo, pageSize, keywords = '' } = api.data;\nvar keywordsFilters = SteedosUI.getKeywordsSearchFilter(api.data.$self.__keywords_lookup__related_instances__to__instances, [\"name\", \"flow_name\",\"submitter\",\"submit_date\"]);\nif (keywordsFilters && keywordsFilters.length > 0) {\n  searchableFilter.push(keywordsFilters);\n}\nconsole.log(\"===\", JSON.stringify(api.data));\napi.data = {\n    query: `\n        query{\n            rows: instances__getRelatedInstances(keywords: \"${keywords}\", top: ${pageSize || 20}, skip: ${(pageNo - 1) * pageSize}, filters: ${JSON.stringify(searchableFilter)}){\n                 _id,\n    name,\n    flow_name,\n    submit_date,\n    submitter\n    _display:_ui{\n      submit_date,\n      submitter\n    }\n            },\n            count: instances__getRelatedInstances__count(filters: ${JSON.stringify(searchableFilter)}, keywords: \"${keywords}\")\n            }\n    `\n};\nreturn api;",
                                                      "headers": {
                                                        "Authorization": "Bearer ${context.tenantId},${context.authToken}"
                                                      },
                                                      "adaptor": "payload.data.rows = payload.data.rows.concat(api.body.$self.selectedRelatedInstances || []); return payload",
                                                      "data": {
                                                        "orderBy": "${orderBy}",
                                                        "orderDir": "${orderDir}",
                                                        "pageNo": "${page}",
                                                        "pageSize": "${perPage}",
                                                        "$self": "$$",
                                                        "keywords": "${keywords}",
                                                        "ids": "${ids}"
                                                      }
                                                    }
                                                  }
                                                },
                                                "id": "u:774bdcbde030"
                                              }
                                          ],
                                          "initApi": {
                                              "method": "post",
                                              "url": "${context.rootUrl}/graphql",
                                              "requestAdaptor": "const { _id: recordId } = api.data.record;\napi.data = {\n  query:`\n            {\n              instance: instances__findOne(id:\"${recordId}\"){\n                related_instances: related_instances__expand{\n                  _id,\n                 name\n                }\n              }\n            }\n          `\n        }\n        return api;",
                                              "adaptor": "payload.data = {initApiFinished: true, \n  related_instances: _.map(payload.data.instance?.related_instances, '_id'),\n selectedRelatedInstances: _.map(payload.data.instance?.related_instances, (item)=>{item.__selected=true;return item})};console.log('====payload', payload);\nreturn payload;"
                                          }
                                      }
                                  ],
                                  "id": "u:47c202e8149b",
                                  "actions": [
                                      {
                                          "type": "button",
                                          "label": "取消",
                                          "onEvent": {
                                              "click": {
                                                  "actions": [
                                                      {
                                                          "componentId": "",
                                                          "args": {},
                                                          "actionType": "closeDialog"
                                                      }
                                                  ]
                                              }
                                          },
                                          "id": "u:d8e1e81fc42e"
                                      },
                                      {
                                          "type": "button",
                                          "label": "确定",
                                          "onEvent": {
                                              "click": {
                                                  "actions": [
                                                      {
                                                          "args": {
                                                              "api": {
                                                                  "url": "${context.rootUrl}/api/workflow/v2/instance/change/related",
                                                                  "method": "post",
                                                                  "headers": {
                                                                      "Authorization": "Bearer ${context.tenantId},${context.authToken}"
                                                                  },
                                                                  "requestAdaptor": "console.log(api);\nconst { record, related_instances } = api.data;\napi.data = {\n  id: record._id,\n  related_instances: related_instances\n};\nreturn api;",
                                                                  "data": {
                                                                      "&": "$$",
                                                                      "record": "${record}",
                                                                      "related_instances": "${related_instances}"
                                                                  }
                                                              },
                                                              "messages": {}
                                                          },
                                                          "actionType": "ajax"
                                                      },
                                                      {
                                                        "actionType": "broadcast",
                                                        "args": {
                                                            "eventName": "@data.@instanceDetail.changed"
                                                        },
                                                        "data": {

                                                        }
                                                      },
                                                      {
                                                          "componentId": "",
                                                          "args": {},
                                                          "actionType": "closeDialog"
                                                      }
                                                  ]
                                              }
                                          },
                                          "id": "u:ba9e7778f165",
                                          "level": "primary"
                                      }
                                  ],
                                  "closeOnEsc": false,
                                  "closeOnOutside": false,
                                  "showCloseButton": true,
                                  "size": "lg"
                              }
                          }
                      ],
                      "weight": 0
                  }
              },
              "hiddenOn": "!((record.box === 'draft' || record.box === 'inbox') \n  && (\n  record.step?.can_edit_main_attach \n  || record.step?.can_edit_normal_attach\n  || !record.step?.can_edit_normal_attach\n) )"
          }
      ],
      "regions": [
          "body"
      ],
      "bodyClassName": "p-0",
      "id": "u:f215e4c0c4ed",
      "messages": {}
  }
is_enable: true
label: 关联文件
'on': record_only
type: amis_button
visible: true
