Я создал сервер graphQL со следующей схемой:
...
#charts interface
interface Chart {
id: String!
sql: String!
title: String
type: String!
display: String!
}
type Layout{
# Unique layout id
id: String
# The title displayed on the layout tab
title: String
# List of displayed charts
charts: [Chart]
}
...
На моем клиенте у меня есть компонент <SummaryLayout/>
со следующим запросом gql:
gql`{
layout(id:"summary"){
title
charts {
id,
title,
type,
display
}
}}`
При загрузке страницы компонент макета отображает все диаграммы в виде сетки на странице. Позже пользователь может добавить новую диаграмму, поэтому у меня есть 2 мутации: одна создает диаграмму, а другая добавляет новую диаграмму в макет:
const addToLayout = gql`
mutation addToLayout($layoutID: String!, $chartID: String!) {
addToLayout(layoutID: $layoutID ,chartID:$chartID){
id
charts {
id
sql
title
type
display
}
}
}`;
const addChart = gql`
mutation addChart($chartConfig:ChartConfig!) {
addChart(chartConfig:$chartConfig){
id
display
}
}`;
this.props.addChart({
variables: {chartConfig: chartConfig}
}).then((response) => {
const chartID = response.data.addChart.id;
console.log("Chart added, DB ID:", chartID);
this.props.addToLayout({
variables: {layoutID: "summary", chartID: chartID},
update: (store, data) => {
console.log("STORE:",store);
}
}).then((response) => {
appState.toggleDialog(false);
})
});
Когда я регистрируюсь в магазине, я вижу, что запись Layout:summary
обновляется, но это не отражается в пользовательском интерфейсе, еще одна вещь, которая всплывает, заключается в том, что есть еще одна запись с именем $ROOT_QUERY.layout({"id":"summary"})
, которая не обновляется новыми данными:
Что мне не хватает?