У меня есть псевдоструктура, которая выглядит/работает примерно так:
Organization <- OrganizationType
{
TopLevelEmployees <- EmployeeType
{
id,
Name,
Pay,
Subordinates <- EmployeeType
{
id,
Name,
Pay,
Subordinates.if(variables.expanded)
}
},
Departments <- DepartmentType
{
Name,
Organization, <- OrganizationType
Employees
}
}
У меня есть элемент управления, который отображает древовидную структуру сотрудников.
<EmployeeTreeEditor Organization={organization} />
Затем у меня есть элемент управления, который редактирует отделы по отдельности.
<DepartmentEditor Department={department} />
Запрос Relay в DepartmentEditor выглядит следующим образом:
fragments: {
Department: () => Relay.QL`
fragment on Department
{
Employees
{
id,
Name,
Pay
},
Organization
{
id,
}
}
`}
В редакторе отдела есть кнопка, которая повышает оплату всех сотрудников в этом отделе на 10 % с помощью RaiseDepartmentPayMutation.
FatQuery для RaiseDepartmentPayMutation выглядит следующим образом:
fragments: {
Department: () => Relay.QL`
fragment on Department
{
Organization
}
`}
RaiseDepartmentPayMutation возвращает OrganizationPayload.
Когда кнопка «Повысить оплату» нажата в редакторе отдела, я хотел бы полностью перезагрузить сотрудников организации TopLevelEmployees, поскольку их оплата могла измениться.
Проблема в том, что сгенерированный запрос основан на запросе Department::Organization и извлекает только идентификатор организации.
Я предполагаю, что если бы я передал организацию в редактор отдела вместо отдела, то он мог бы получить TopLevelEmployees, но я не могу продолжать передавать свою организацию дочерним элементам управления.
Другое решение, которое я вижу, может заключаться в том, чтобы иметь отдельный фрагмент, который я включаю как в EmployeeTreeEditor, так и в Mutation fatQuery.
${Something.getFragment('Organization')}
Но я не уверен, как fatQueries работают с древовидными структурами, поэтому я просто хотел бы перезагрузить всю организацию.
Есть ли в этом смысл?
Спасибо!