smarter cache lookups for "do we own/want this?"
This commit is contained in:
parent
2cfafce768
commit
3ecdd265c2
2 changed files with 51 additions and 3 deletions
|
@ -198,8 +198,8 @@ function ItemPageOwnWantButtons({ itemId }) {
|
||||||
{
|
{
|
||||||
variables: { itemId },
|
variables: { itemId },
|
||||||
onCompleted: (data) => {
|
onCompleted: (data) => {
|
||||||
setCurrentUserOwnsThis(data.item.currentUserOwnsThis);
|
setCurrentUserOwnsThis(data?.item?.currentUserOwnsThis || false);
|
||||||
setCurrentUserWantsThis(data.item.currentUserWantsThis);
|
setCurrentUserWantsThis(data?.item?.currentUserWantsThis || false);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -208,6 +208,7 @@ function ItemPageOwnWantButtons({ itemId }) {
|
||||||
return <Box color="red.400">{error.message}</Box>;
|
return <Box color="red.400">{error.message}</Box>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Focus state!
|
||||||
return (
|
return (
|
||||||
<Box display="flex">
|
<Box display="flex">
|
||||||
<Skeleton isLoaded={!loading} marginRight="4">
|
<Skeleton isLoaded={!loading} marginRight="4">
|
||||||
|
@ -215,7 +216,7 @@ function ItemPageOwnWantButtons({ itemId }) {
|
||||||
<VisuallyHidden
|
<VisuallyHidden
|
||||||
as="input"
|
as="input"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
isChecked={currentUserOwnsThis}
|
checked={currentUserOwnsThis}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
setCurrentUserOwnsThis(e.target.checked);
|
setCurrentUserOwnsThis(e.target.checked);
|
||||||
toast({
|
toast({
|
||||||
|
|
|
@ -78,6 +78,53 @@ const typePolicies = {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
currentUserOwnsThis: (cachedValue, { readField }) => {
|
||||||
|
if (cachedValue != null) {
|
||||||
|
return cachedValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do we know what items this user owns? If so, scan for this item.
|
||||||
|
const currentUserRef = readField("currentUser", {
|
||||||
|
__ref: "ROOT_QUERY",
|
||||||
|
});
|
||||||
|
if (!currentUserRef) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
const thisItemId = readField("id");
|
||||||
|
const itemsTheyOwn = readField("itemsTheyOwn", currentUserRef);
|
||||||
|
if (!itemsTheyOwn) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const theyOwnThisItem = itemsTheyOwn.some(
|
||||||
|
(itemRef) => readField("id", itemRef) === thisItemId
|
||||||
|
);
|
||||||
|
return theyOwnThisItem;
|
||||||
|
},
|
||||||
|
currentUserWantsThis: (cachedValue, { readField }) => {
|
||||||
|
if (cachedValue != null) {
|
||||||
|
return cachedValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do we know what items this user owns? If so, scan for this item.
|
||||||
|
const currentUserRef = readField("currentUser", {
|
||||||
|
__ref: "ROOT_QUERY",
|
||||||
|
});
|
||||||
|
if (!currentUserRef) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
const thisItemId = readField("id");
|
||||||
|
const itemsTheyWant = readField("itemsTheyWant", currentUserRef);
|
||||||
|
if (!itemsTheyWant) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const theyWantThisItem = itemsTheyWant.some(
|
||||||
|
(itemRef) => readField("id", itemRef) === thisItemId
|
||||||
|
);
|
||||||
|
return theyWantThisItem;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue