我正在使用Scaphold.io来构建我正在开发的一个小应用程序的后端,并且在尝试更新单个变更请求中的多个项目时遇到了问题。
在 Scaphold 中,当您创建新类型时,会为常见操作创建更改:创建、更新和删除。
您无法重新定义这些更改或其输入类型的架构。在我正在工作的模型类型 ( card) 中,我立即获得了这些突变:
createCard(input: CreateCardInput!): CreateCardPayload
updateCard(input: UpdateCardInput!): UpdateCardPayload
deleteCard(input: DeleteCardInput!): DeleteCardPayload
Run Code Online (Sandbox Code Playgroud)
该updateCardInput类型定义了以下字段:
listId: ID
description: Text
name: String
order: Int
id: ID!
clientMutationId: String
Run Code Online (Sandbox Code Playgroud)
有了这个,我知道如何定义一个更新order单卡的突变:
mutation updateCardOrder($card: UpdateCardInput!) {
updateCard(input: $card) {
changedCard {
id
order
}
}
}
Run Code Online (Sandbox Code Playgroud)
变量:
{
"card": {
"id": "Q2FyZDo4MzA=",
"order": "1"
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了一些使用卡片列表 ( [card]) 作为输入的指针,但我不知道如何让它工作。
理想情况下,类似于:
mutation updateCardOrder($cards: UpdateCardInput!) {
updateCard(input: $card) {
changedCard …Run Code Online (Sandbox Code Playgroud) 我正在构建一个向用户呈现多个列表的应用程序,每个列表都包含多张卡片。在列表中,用户可以对卡片重新排序。卡片也可以从一个列表移动到另一个列表,这会更改卡片的父列表以及卡片在源列表和目标列表中的顺序。
这是一个 GIF,显示了我的应用程序中的卡片/列表和重新排序的 UI。您在这里看到的都是在客户端发生的,并且更改不会持久保存到数据库中:

这是我用来构建 UI 的查询:
const foo = gql`
query foo {
getAccount(id: "xxxxx") {
cardLists {
edges {
node {
id
name
cards(orderBy: {field: order, direction: ASC}) {
edges {
node {
id
name
order
}
}
}
}
}
}
}
}
`
Run Code Online (Sandbox Code Playgroud)
这是来自 Vue Draggable 项目的 GIF,它进一步说明了我正在做的事情(注意数据中的“order”值):

我不知道如何构建突变来处理重新排序,以便正确保留移动的卡以及源列表和目标列表的排序更改。
在 Scaphold 中构建模式意味着我需要(我认为)使用它提供的突变。我没有找到将多个卡片和列表传递给单个突变的方法,以便我可以立即更新所有内容。
以下是 Scaphold.io 中示例项目的端点:https://us-west-2.api.scaphold.io/graphql/soreorderingexample
这是 Scaphold.io 生成的架构:https://d3uepj124s5rcx.cloudfront.net/items/1e1m2q3F170C2G3M0v2p/schema.json