112 lines
2.8 KiB
JavaScript
112 lines
2.8 KiB
JavaScript
import UPDATE_CONTENT_BOOKMARK from '@/graphql/gql/mutations/updateContentBookmark.gql';
|
|
import UPDATE_INSTRUMENT_BOOKMARK from '@/graphql/gql/mutations/updateInstrumentBookmark.gql';
|
|
import CONTENT_BLOCK_QUERY from '@/graphql/gql/contentBlockQuery.gql';
|
|
import INSTRUMENT_FRAGMENT from '@/graphql/gql/fragments/instrumentParts.gql';
|
|
|
|
const compareUuid = uuid => element => element.uuid === uuid;
|
|
|
|
export const constructContentComponentBookmarkMutation = (uuid, bookmarked, parent, root) => {
|
|
let mutation = {};
|
|
|
|
if (parent.__typename === 'ContentBlockNode') {
|
|
mutation = {
|
|
mutation: UPDATE_CONTENT_BOOKMARK,
|
|
variables: {
|
|
input: {
|
|
uuid,
|
|
contentBlock: root,
|
|
bookmarked
|
|
}
|
|
},
|
|
update: (store, response) => {
|
|
const query = CONTENT_BLOCK_QUERY;
|
|
const variables = {id: root};
|
|
const data = store.readQuery({
|
|
query,
|
|
variables
|
|
});
|
|
|
|
const bookmarks = data.contentBlock.bookmarks;
|
|
|
|
if (bookmarked) {
|
|
bookmarks.push({
|
|
note: null,
|
|
uuid,
|
|
__typename: 'ContentBlockBookmarkNode'
|
|
});
|
|
} else {
|
|
let index = bookmarks.findIndex(compareUuid(uuid));
|
|
if (index > -1) {
|
|
bookmarks.splice(index, 1);
|
|
}
|
|
}
|
|
|
|
data.contentBlock.bookmarks = bookmarks;
|
|
|
|
store.writeQuery({
|
|
data,
|
|
query,
|
|
variables
|
|
});
|
|
},
|
|
optimisticResponse: {
|
|
__typename: 'Mutation',
|
|
updateContentBookmark: {
|
|
__typename: 'UpdateContentBookmarkPayload',
|
|
success: true
|
|
}
|
|
}
|
|
};
|
|
} else {
|
|
mutation = {
|
|
mutation: UPDATE_INSTRUMENT_BOOKMARK,
|
|
variables: {
|
|
input: {
|
|
uuid,
|
|
instrument: root,
|
|
bookmarked
|
|
}
|
|
},
|
|
update: (store, response) => {
|
|
const fragment = INSTRUMENT_FRAGMENT;
|
|
const id = `InstrumentNode:${root}`;
|
|
const data = store.readFragment({
|
|
fragment,
|
|
id
|
|
});
|
|
|
|
const bookmarks = data.bookmarks;
|
|
|
|
if (bookmarked) {
|
|
bookmarks.push({
|
|
note: null,
|
|
uuid,
|
|
__typename: 'InstrumentBookmarkNode'
|
|
});
|
|
} else {
|
|
let index = bookmarks.findIndex(compareUuid(uuid));
|
|
if (index > -1) {
|
|
bookmarks.splice(index, 1);
|
|
}
|
|
}
|
|
|
|
data.bookmarks = bookmarks;
|
|
|
|
store.writeFragment({
|
|
data,
|
|
fragment,
|
|
id
|
|
});
|
|
},
|
|
optimisticResponse: {
|
|
__typename: 'Mutation',
|
|
updateInstrumentBookmark: {
|
|
__typename: 'UpdateInstrumentBookmarkPayload',
|
|
success: true
|
|
}
|
|
}
|
|
};
|
|
}
|
|
return mutation;
|
|
};
|