Skip to content

Commit 5e8d7ff

Browse files
authored
Merge pull request #6883 from msupply-foundation/6599-unable-to-set-prescribed-quantity-when-no-stock
6599 unable to set prescribed quantity when no stock
2 parents f5eb917 + f80676f commit 5e8d7ff

File tree

21 files changed

+866
-56
lines changed

21 files changed

+866
-56
lines changed

client/packages/common/src/types/schema.ts

+26-3
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,7 @@ export type BatchPrescriptionInput = {
748748
deletePrescriptions?: InputMaybe<Array<Scalars['String']['input']>>;
749749
insertPrescriptionLines?: InputMaybe<Array<InsertPrescriptionLineInput>>;
750750
insertPrescriptions?: InputMaybe<Array<InsertPrescriptionInput>>;
751+
setPrescribedQuantity?: InputMaybe<Array<SetPrescribedQuantityInput>>;
751752
updatePrescriptionLines?: InputMaybe<Array<UpdatePrescriptionLineInput>>;
752753
updatePrescriptions?: InputMaybe<Array<UpdatePrescriptionInput>>;
753754
};
@@ -758,6 +759,7 @@ export type BatchPrescriptionResponse = {
758759
deletePrescriptions?: Maybe<Array<DeletePrescriptionResponseWithId>>;
759760
insertPrescriptionLines?: Maybe<Array<InsertPrescriptionLineResponseWithId>>;
760761
insertPrescriptions?: Maybe<Array<InsertPrescriptionResponseWithId>>;
762+
setPrescribedQuantity?: Maybe<Array<SetPrescribedQuantityWithId>>;
761763
updatePrescriptionLines?: Maybe<Array<UpdatePrescriptionLineResponseWithId>>;
762764
updatePrescriptions?: Maybe<Array<UpdatePrescriptionResponseWithId>>;
763765
};
@@ -2323,7 +2325,7 @@ export enum ForeignKey {
23232325
StockLineId = 'stockLineId'
23242326
}
23252327

2326-
export type ForeignKeyError = DeleteInboundShipmentLineErrorInterface & DeleteInboundShipmentServiceLineErrorInterface & DeleteOutboundShipmentLineErrorInterface & DeleteOutboundShipmentServiceLineErrorInterface & DeleteOutboundShipmentUnallocatedLineErrorInterface & DeletePrescriptionLineErrorInterface & DeleteResponseRequisitionLineErrorInterface & InsertInboundShipmentLineErrorInterface & InsertInboundShipmentServiceLineErrorInterface & InsertOutboundShipmentLineErrorInterface & InsertOutboundShipmentServiceLineErrorInterface & InsertOutboundShipmentUnallocatedLineErrorInterface & InsertPrescriptionLineErrorInterface & InsertRequestRequisitionLineErrorInterface & InsertResponseRequisitionLineErrorInterface & UpdateInboundShipmentLineErrorInterface & UpdateInboundShipmentServiceLineErrorInterface & UpdateOutboundShipmentLineErrorInterface & UpdateOutboundShipmentServiceLineErrorInterface & UpdateOutboundShipmentUnallocatedLineErrorInterface & UpdatePrescriptionLineErrorInterface & UpdateRequestRequisitionLineErrorInterface & UpdateResponseRequisitionLineErrorInterface & {
2328+
export type ForeignKeyError = DeleteInboundShipmentLineErrorInterface & DeleteInboundShipmentServiceLineErrorInterface & DeleteOutboundShipmentLineErrorInterface & DeleteOutboundShipmentServiceLineErrorInterface & DeleteOutboundShipmentUnallocatedLineErrorInterface & DeletePrescriptionLineErrorInterface & DeleteResponseRequisitionLineErrorInterface & InsertInboundShipmentLineErrorInterface & InsertInboundShipmentServiceLineErrorInterface & InsertOutboundShipmentLineErrorInterface & InsertOutboundShipmentServiceLineErrorInterface & InsertOutboundShipmentUnallocatedLineErrorInterface & InsertPrescriptionLineErrorInterface & InsertRequestRequisitionLineErrorInterface & InsertResponseRequisitionLineErrorInterface & SetPrescribedQuantityErrorInterface & UpdateInboundShipmentLineErrorInterface & UpdateInboundShipmentServiceLineErrorInterface & UpdateOutboundShipmentLineErrorInterface & UpdateOutboundShipmentServiceLineErrorInterface & UpdateOutboundShipmentUnallocatedLineErrorInterface & UpdatePrescriptionLineErrorInterface & UpdateRequestRequisitionLineErrorInterface & UpdateResponseRequisitionLineErrorInterface & {
23272329
__typename: 'ForeignKeyError';
23282330
description: Scalars['String']['output'];
23292331
key: ForeignKey;
@@ -3009,7 +3011,6 @@ export type InsertPrescriptionLineInput = {
30093011
invoiceId: Scalars['String']['input'];
30103012
note?: InputMaybe<Scalars['String']['input']>;
30113013
numberOfPacks: Scalars['Float']['input'];
3012-
prescribedQuantity?: InputMaybe<Scalars['Float']['input']>;
30133014
stockLineId: Scalars['String']['input'];
30143015
};
30153016

@@ -7517,6 +7518,29 @@ export type SensorSortInput = {
75177518

75187519
export type SensorsResponse = SensorConnector;
75197520

7521+
export type SetPrescribedQuantityError = {
7522+
__typename: 'SetPrescribedQuantityError';
7523+
error: SetPrescribedQuantityErrorInterface;
7524+
};
7525+
7526+
export type SetPrescribedQuantityErrorInterface = {
7527+
description: Scalars['String']['output'];
7528+
};
7529+
7530+
export type SetPrescribedQuantityInput = {
7531+
invoiceId: Scalars['String']['input'];
7532+
itemId: Scalars['String']['input'];
7533+
prescribedQuantity: Scalars['Float']['input'];
7534+
};
7535+
7536+
export type SetPrescribedQuantityResponse = InvoiceLineNode | SetPrescribedQuantityError;
7537+
7538+
export type SetPrescribedQuantityWithId = {
7539+
__typename: 'SetPrescribedQuantityWithId';
7540+
id: Scalars['String']['output'];
7541+
response: SetPrescribedQuantityResponse;
7542+
};
7543+
75207544
export type SnapshotCountCurrentCountMismatch = UpdateStocktakeErrorInterface & {
75217545
__typename: 'SnapshotCountCurrentCountMismatch';
75227546
description: Scalars['String']['output'];
@@ -8717,7 +8741,6 @@ export type UpdatePrescriptionLineInput = {
87178741
id: Scalars['String']['input'];
87188742
note?: InputMaybe<Scalars['String']['input']>;
87198743
numberOfPacks?: InputMaybe<Scalars['Float']['input']>;
8720-
prescribedQuantity?: InputMaybe<Scalars['Float']['input']>;
87218744
stockLineId?: InputMaybe<Scalars['String']['input']>;
87228745
};
87238746

client/packages/invoices/src/Prescriptions/DetailView/columns.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ export const usePrescriptionColumn = ({
278278
totalUnits += line.numberOfPacks * line.packSize;
279279
}
280280

281+
if (totalSellPrice === 0 && totalUnits === 0) return 0;
281282
return totalSellPrice / totalUnits;
282283
} else {
283284
return (rowData.sellPricePerPack ?? 0) / rowData.packSize;
@@ -295,7 +296,7 @@ export const usePrescriptionColumn = ({
295296
}
296297
},
297298
},
298-
299+
299300
{
300301
label: 'label.line-total',
301302
key: 'lineTotal',

client/packages/invoices/src/Prescriptions/LineEditView/PrescriptionLineEdit.tsx

+1-4
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,7 @@ export const PrescriptionLineEdit: React.FC<PrescriptionLineEditProps> = ({
7373
draftPrescriptionLines
7474
)(numPacks, packSize, true, prescribedQuantity);
7575

76-
// Don't make saveable (isDirty) if item is new and has no auto-allocatable
77-
// stock
78-
if (!(!item && newAllocateQuantities?.every(el => el.numberOfPacks === 0)))
79-
setIsDirty(true);
76+
setIsDirty(true);
8077
updateLines(newAllocateQuantities ?? draftPrescriptionLines);
8178
setIsAutoAllocated(autoAllocated);
8279
if (showZeroQuantityConfirmation && numPacks !== 0)

client/packages/invoices/src/Prescriptions/LineEditView/PrescriptionLineEditForm.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,6 @@ export const PrescriptionLineEditForm: React.FC<
356356
},
357357
}}
358358
onKeyDown={e => {
359-
console.log('==>', e.code, abbreviationRef);
360359
if (e.code === 'Tab') {
361360
e.preventDefault();
362361
abbreviationRef.current?.focus();

client/packages/invoices/src/Prescriptions/LineEditView/hooks/useDraftPrescriptionLines.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { DraftPrescriptionLine } from '../../../types';
1212
import {
1313
createDraftPrescriptionLine,
1414
createDraftPrescriptionLineFromStockLine,
15+
createPrescriptionPlaceholderRow,
1516
issuePrescriptionStock,
1617
updateNotes,
1718
} from '../../api/hooks/utils';
@@ -58,8 +59,13 @@ export const useDraftPrescriptionLines = (
5859

5960
const noStockLines = stockLines.length == 0;
6061

62+
const placeholderItem = createPrescriptionPlaceholderRow(
63+
invoiceId ?? '',
64+
item?.id ?? ''
65+
);
66+
6167
if (noStockLines || !item) {
62-
return updateDraftLines([]);
68+
return updateDraftLines([placeholderItem]);
6369
}
6470

6571
const rows = stockLines

client/packages/invoices/src/Prescriptions/LineEditView/hooks/usePrescriptionLineEditRows.ts

+46-28
Original file line numberDiff line numberDiff line change
@@ -14,47 +14,64 @@ export const usePrescriptionLineEditRows = (
1414
const hasNoStock = (row: DraftPrescriptionLine) =>
1515
row.stockLine?.availableNumberOfPacks === 0;
1616

17-
const { allocatableRows, wrongPackSizeRows, onHoldRows, noStockRows } =
18-
useMemo(() => {
19-
const rowsWithoutPlaceholder = rows
20-
.filter(line => !isA.placeholderLine(line))
21-
.sort(SortUtils.byExpiryAsc);
17+
const {
18+
allocatableRows,
19+
wrongPackSizeRows,
20+
onHoldRows,
21+
noStockRows,
22+
placeholderRows,
23+
} = useMemo(() => {
24+
const allocatableRows: DraftPrescriptionLine[] = [];
25+
const onHoldRows: DraftPrescriptionLine[] = [];
26+
const noStockRows: DraftPrescriptionLine[] = [];
27+
const wrongPackSizeRows: DraftPrescriptionLine[] = [];
28+
29+
const placeholderRows: DraftPrescriptionLine[] = rows.filter(line =>
30+
isA.placeholderLine(line)
31+
);
2232

23-
const allocatableRows: DraftPrescriptionLine[] = [];
24-
const onHoldRows: DraftPrescriptionLine[] = [];
25-
const noStockRows: DraftPrescriptionLine[] = [];
26-
const wrongPackSizeRows: DraftPrescriptionLine[] = [];
33+
const rowsWithoutPlaceholder = rows
34+
.filter(line => !isA.placeholderLine(line))
35+
.sort(SortUtils.byExpiryAsc);
2736

28-
rowsWithoutPlaceholder.forEach(row => {
29-
if (isOnHold(row)) {
30-
onHoldRows.push(row);
31-
return;
32-
}
37+
rowsWithoutPlaceholder.forEach(row => {
38+
if (isOnHold(row)) {
39+
onHoldRows.push(row);
40+
return;
41+
}
3342

34-
if (hasNoStock(row)) {
35-
noStockRows.push(row);
36-
return;
37-
}
43+
if (hasNoStock(row)) {
44+
noStockRows.push(row);
45+
return;
46+
}
3847

39-
allocatableRows.push(row);
40-
});
48+
allocatableRows.push(row);
49+
});
4150

42-
return {
43-
allocatableRows,
44-
onHoldRows,
45-
noStockRows,
46-
wrongPackSizeRows,
47-
};
48-
}, [rows]);
51+
return {
52+
allocatableRows,
53+
onHoldRows,
54+
noStockRows,
55+
wrongPackSizeRows,
56+
placeholderRows,
57+
};
58+
}, [rows]);
4959

5060
const orderedRows = useMemo(() => {
5161
return [
5262
...allocatableRows,
5363
...wrongPackSizeRows,
5464
...onHoldRows,
5565
...noStockRows,
66+
...placeholderRows,
5667
];
57-
}, [allocatableRows, wrongPackSizeRows, onHoldRows, noStockRows]);
68+
}, [
69+
allocatableRows,
70+
wrongPackSizeRows,
71+
onHoldRows,
72+
noStockRows,
73+
placeholderRows,
74+
]);
5875

5976
const disabledRows = useMemo(() => {
6077
if (isDisabled) return orderedRows;
@@ -72,5 +89,6 @@ export const usePrescriptionLineEditRows = (
7289
onHoldRows,
7390
noStockRows,
7491
wrongPackSizeRows,
92+
placeholderRows,
7593
};
7694
};

client/packages/invoices/src/Prescriptions/api/hooks/usePrescriptionLines.ts

+15-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
InvoiceLineNodeType,
55
RecordPatch,
66
setNullableInput,
7+
SetPrescribedQuantityInput,
78
UpdatePrescriptionLineInput,
89
useMutation,
910
} from '@openmsupply-client/common';
@@ -90,12 +91,11 @@ const useSaveLines = (id: string, invoiceNum: number) => {
9091
),
9192
updatePrescriptionLines: draftPrescriptionLines
9293
.filter(
93-
({ type, isCreated, isUpdated, numberOfPacks, prescribedQuantity }) =>
94+
({ type, isCreated, isUpdated, numberOfPacks }) =>
9495
!isCreated &&
9596
isUpdated &&
9697
type === InvoiceLineNodeType.StockOut &&
97-
numberOfPacks > 0 &&
98-
(prescribedQuantity ?? 0) >= 0
98+
numberOfPacks > 0
9999
)
100100
.map(
101101
line =>
@@ -129,6 +129,18 @@ const useSaveLines = (id: string, invoiceNum: number) => {
129129
},
130130
]
131131
: undefined,
132+
setPrescribedQuantity: draftPrescriptionLines
133+
.filter(
134+
({ invoiceId, item, prescribedQuantity }) =>
135+
invoiceId && item && (prescribedQuantity ?? 0) > 0
136+
)
137+
.map(
138+
line =>
139+
createInputObject(
140+
line,
141+
'setPrescribedQuantity'
142+
) as SetPrescribedQuantityInput
143+
),
132144
};
133145

134146
const result = await prescriptionApi.upsertPrescription({ storeId, input });

client/packages/invoices/src/Prescriptions/api/hooks/utils.tsx

+41-4
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,21 @@ export const mapStatus = (patch: RecordPatch<PrescriptionRowFragment>) => {
4646

4747
export const createInputObject = (
4848
line: DraftPrescriptionLine,
49-
type: 'insert' | 'update' | 'delete'
49+
type: 'insert' | 'update' | 'delete' | 'setPrescribedQuantity'
5050
) => {
51-
const { id, numberOfPacks, prescribedQuantity, stockLine, invoiceId, note } =
52-
line;
51+
const {
52+
id,
53+
numberOfPacks,
54+
prescribedQuantity,
55+
stockLine,
56+
invoiceId,
57+
note,
58+
item,
59+
} = line;
5360

61+
const itemId = item?.id ?? '';
5462
const stockLineId = stockLine?.id ?? '';
55-
const output = { id, numberOfPacks, stockLineId, note, prescribedQuantity };
63+
const output = { id, numberOfPacks, stockLineId, note };
5664

5765
switch (type) {
5866
case 'delete':
@@ -61,6 +69,8 @@ export const createInputObject = (
6169
return output;
6270
case 'insert':
6371
return { ...output, invoiceId };
72+
case 'setPrescribedQuantity':
73+
return { invoiceId, itemId, prescribedQuantity };
6474
}
6575
};
6676

@@ -92,6 +102,33 @@ export const createPrescriptionPlaceholderRow = (
92102
itemDirections: [],
93103
},
94104
itemName: '',
105+
stockLine: {
106+
__typename: 'StockLineNode',
107+
id: '',
108+
itemId: '',
109+
batch: '',
110+
availableNumberOfPacks: 0,
111+
totalNumberOfPacks: 0,
112+
onHold: false,
113+
sellPricePerPack: 0,
114+
costPricePerPack: 0,
115+
packSize: 0,
116+
expiryDate: null,
117+
item: {
118+
__typename: 'ItemNode',
119+
code: '',
120+
name: '',
121+
itemDirections: [
122+
{
123+
id: '',
124+
itemId,
125+
__typename: 'ItemDirectionNode',
126+
directions: '',
127+
priority: 0,
128+
},
129+
],
130+
},
131+
},
95132
});
96133

97134
export interface DraftPrescriptionLineSeeds {

client/packages/invoices/src/Prescriptions/api/operations.generated.ts

+17-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export type UpsertPrescriptionMutationVariables = Types.Exact<{
5353
}>;
5454

5555

56-
export type UpsertPrescriptionMutation = { __typename: 'Mutations', batchPrescription: { __typename: 'BatchPrescriptionResponse', deletePrescriptionLines?: Array<{ __typename: 'DeletePrescriptionLineResponseWithId', id: string, response: { __typename: 'DeletePrescriptionLineError', error: { __typename: 'CannotEditInvoice', description: string } | { __typename: 'ForeignKeyError', description: string, key: Types.ForeignKey } | { __typename: 'RecordNotFound', description: string } } | { __typename: 'DeleteResponse', id: string } }> | null, deletePrescriptions?: Array<{ __typename: 'DeletePrescriptionResponseWithId', id: string, response: { __typename: 'DeletePrescriptionError', error: { __typename: 'CannotDeleteInvoiceWithLines', description: string } | { __typename: 'CannotEditInvoice', description: string } | { __typename: 'RecordNotFound', description: string } } | { __typename: 'DeleteResponse', id: string } }> | null, insertPrescriptionLines?: Array<{ __typename: 'InsertPrescriptionLineResponseWithId', id: string, response: { __typename: 'InsertPrescriptionLineError', error: { __typename: 'CannotEditInvoice', description: string } | { __typename: 'ForeignKeyError', description: string } | { __typename: 'LocationIsOnHold', description: string } | { __typename: 'LocationNotFound', description: string } | { __typename: 'NotEnoughStockForReduction', description: string } | { __typename: 'StockLineAlreadyExistsInInvoice', description: string } | { __typename: 'StockLineIsOnHold', description: string } } | { __typename: 'InvoiceLineNode' } }> | null, insertPrescriptions?: Array<{ __typename: 'InsertPrescriptionResponseWithId', id: string }> | null, updatePrescriptionLines?: Array<{ __typename: 'UpdatePrescriptionLineResponseWithId', id: string, response: { __typename: 'InvoiceLineNode' } | { __typename: 'UpdatePrescriptionLineError', error: { __typename: 'CannotEditInvoice', description: string } | { __typename: 'ForeignKeyError', description: string, key: Types.ForeignKey } | { __typename: 'LocationIsOnHold', description: string } | { __typename: 'LocationNotFound', description: string } | { __typename: 'NotEnoughStockForReduction', description: string, batch: { __typename: 'NodeError', error: { __typename: 'DatabaseError', description: string, fullError: string } | { __typename: 'RecordNotFound', description: string } } | { __typename: 'StockLineNode' } } | { __typename: 'RecordNotFound', description: string } | { __typename: 'StockLineAlreadyExistsInInvoice', description: string } | { __typename: 'StockLineIsOnHold', description: string } } }> | null, updatePrescriptions?: Array<{ __typename: 'UpdatePrescriptionResponseWithId', id: string, response: { __typename: 'InvoiceNode' } | { __typename: 'NodeError', error: { __typename: 'DatabaseError', description: string } | { __typename: 'RecordNotFound', description: string } } | { __typename: 'UpdatePrescriptionError', error: { __typename: 'CanOnlyChangeToPickedWhenNoUnallocatedLines', description: string } | { __typename: 'CannotReverseInvoiceStatus', description: string } | { __typename: 'InvalidStockSelection', description: string } | { __typename: 'InvoiceIsNotEditable', description: string } | { __typename: 'RecordNotFound', description: string } } }> | null } };
56+
export type UpsertPrescriptionMutation = { __typename: 'Mutations', batchPrescription: { __typename: 'BatchPrescriptionResponse', deletePrescriptionLines?: Array<{ __typename: 'DeletePrescriptionLineResponseWithId', id: string, response: { __typename: 'DeletePrescriptionLineError', error: { __typename: 'CannotEditInvoice', description: string } | { __typename: 'ForeignKeyError', description: string, key: Types.ForeignKey } | { __typename: 'RecordNotFound', description: string } } | { __typename: 'DeleteResponse', id: string } }> | null, deletePrescriptions?: Array<{ __typename: 'DeletePrescriptionResponseWithId', id: string, response: { __typename: 'DeletePrescriptionError', error: { __typename: 'CannotDeleteInvoiceWithLines', description: string } | { __typename: 'CannotEditInvoice', description: string } | { __typename: 'RecordNotFound', description: string } } | { __typename: 'DeleteResponse', id: string } }> | null, insertPrescriptionLines?: Array<{ __typename: 'InsertPrescriptionLineResponseWithId', id: string, response: { __typename: 'InsertPrescriptionLineError', error: { __typename: 'CannotEditInvoice', description: string } | { __typename: 'ForeignKeyError', description: string } | { __typename: 'LocationIsOnHold', description: string } | { __typename: 'LocationNotFound', description: string } | { __typename: 'NotEnoughStockForReduction', description: string } | { __typename: 'StockLineAlreadyExistsInInvoice', description: string } | { __typename: 'StockLineIsOnHold', description: string } } | { __typename: 'InvoiceLineNode' } }> | null, insertPrescriptions?: Array<{ __typename: 'InsertPrescriptionResponseWithId', id: string }> | null, updatePrescriptionLines?: Array<{ __typename: 'UpdatePrescriptionLineResponseWithId', id: string, response: { __typename: 'InvoiceLineNode' } | { __typename: 'UpdatePrescriptionLineError', error: { __typename: 'CannotEditInvoice', description: string } | { __typename: 'ForeignKeyError', description: string, key: Types.ForeignKey } | { __typename: 'LocationIsOnHold', description: string } | { __typename: 'LocationNotFound', description: string } | { __typename: 'NotEnoughStockForReduction', description: string, batch: { __typename: 'NodeError', error: { __typename: 'DatabaseError', description: string, fullError: string } | { __typename: 'RecordNotFound', description: string } } | { __typename: 'StockLineNode' } } | { __typename: 'RecordNotFound', description: string } | { __typename: 'StockLineAlreadyExistsInInvoice', description: string } | { __typename: 'StockLineIsOnHold', description: string } } }> | null, updatePrescriptions?: Array<{ __typename: 'UpdatePrescriptionResponseWithId', id: string, response: { __typename: 'InvoiceNode' } | { __typename: 'NodeError', error: { __typename: 'DatabaseError', description: string } | { __typename: 'RecordNotFound', description: string } } | { __typename: 'UpdatePrescriptionError', error: { __typename: 'CanOnlyChangeToPickedWhenNoUnallocatedLines', description: string } | { __typename: 'CannotReverseInvoiceStatus', description: string } | { __typename: 'InvalidStockSelection', description: string } | { __typename: 'InvoiceIsNotEditable', description: string } | { __typename: 'RecordNotFound', description: string } } }> | null, setPrescribedQuantity?: Array<{ __typename: 'SetPrescribedQuantityWithId', id: string, response: { __typename: 'InvoiceLineNode' } | { __typename: 'SetPrescribedQuantityError', error: { __typename: 'ForeignKeyError', description: string, key: Types.ForeignKey } } }> | null } };
5757

5858
export type DeletePrescriptionsMutationVariables = Types.Exact<{
5959
storeId: Types.Scalars['String']['input'];
@@ -532,6 +532,22 @@ export const UpsertPrescriptionDocument = gql`
532532
}
533533
}
534534
}
535+
setPrescribedQuantity {
536+
id
537+
response {
538+
... on SetPrescribedQuantityError {
539+
__typename
540+
error {
541+
description
542+
... on ForeignKeyError {
543+
__typename
544+
description
545+
key
546+
}
547+
}
548+
}
549+
}
550+
}
535551
}
536552
}
537553
`;

0 commit comments

Comments
 (0)