如何使用GraphQL变体对列表中的项进行重新排序并更新多个对象? 我正在使用的堆栈 作为我的GraphQL服务器 在客户端 用于处理拖放的库 我想做什么
我正在构建一个向用户显示多个列表的应用程序,每个列表都包含多张卡片。在列表中,用户可以对卡片重新排序。还可以将卡从一个列表移动到另一个列表,从而更改卡的父列表以及源列表和目标列表中的卡顺序 这是一个GIF,显示了我的应用程序中卡片/列表和重新排序的UI。您在这里看到的都是客户端发生的,更改不会持久化到数据库: 这是我用来构建UI的查询:如何使用GraphQL变体对列表中的项进行重新排序并更新多个对象? 我正在使用的堆栈 作为我的GraphQL服务器 在客户端 用于处理拖放的库 我想做什么,graphql,apollo,scaphold,Graphql,Apollo,Scaphold,我正在构建一个向用户显示多个列表的应用程序,每个列表都包含多张卡片。在列表中,用户可以对卡片重新排序。还可以将卡从一个列表移动到另一个列表,从而更改卡的父列表以及源列表和目标列表中的卡顺序 这是一个GIF,显示了我的应用程序中卡片/列表和重新排序的UI。您在这里看到的都是客户端发生的,更改不会持久化到数据库: 这是我用来构建UI的查询: const foo = gql` query foo { getAccount(id: "xxxxx") { cardLists {
const foo = gql`
query foo {
getAccount(id: "xxxxx") {
cardLists {
edges {
node {
id
name
cards(orderBy: {field: order, direction: ASC}) {
edges {
node {
id
name
order
}
}
}
}
}
}
}
}
`
下面是一个来自Vue Dragable项目的GIF,它进一步说明了我在做什么(请注意数据中的“order”值):
问题 我不知道如何构建一个变异来处理重新排序,这样移动的卡片,以及对源列表和目标列表的排序所做的更改,都能正确地持久化 在Scaphold中构建模式意味着我需要(我认为)使用它提供的突变。我看不到一种方法可以将多张卡片和列表传递给一个变种,这样我就可以一次更新所有内容 以下是Scaphold.io中示例项目的端点: 下面是Scaphold.io生成的模式:
我的问题
- 在GraphQL中持久化这样的更改的正确方式是什么
- 鉴于Scaphold的约束和固执己见的行为,我的突变应该如何进行
顺序:Float
字段,每次您要在两张其他卡片之间移动卡片时,将该字段设置为(prev.order+next.order)/2
,或者如果您移动到后面/前面,则设置为比上一张/第一张多/少
给定浮点精度,在精度下降之前,您可以在相同的两张卡之间执行53次此操作,此时您可以重新分配
顺序
字段,或手动将有问题的卡上下移动“但您可以将所有项目保留在一个数组中,您总是在一次变异中更新这些项目,或者您可以逐个更新列表项目。”-谢谢。对于新手的问题,很抱歉,但这样的查询是什么样子的?谢谢w00t,不幸的是,我似乎无法配置Scaphold变异以接受卡片输入列表。