Update projects in frontend to use slugs instead of ids

This commit is contained in:
Ramon Wenger 2022-01-29 20:11:31 +01:00
parent 6edbadda2e
commit 9cc1ab5324
5 changed files with 34 additions and 22 deletions

View File

@ -17,13 +17,13 @@
<li class="popover-links__link"> <li class="popover-links__link">
<a <a
data-cy="delete-project" data-cy="delete-project"
@click="deleteProject(id)" @click="deleteProject(slug)"
>Projekt löschen</a> >Projekt löschen</a>
</li> </li>
<li class="popover-links__link"> <li class="popover-links__link">
<a <a
data-cy="edit-project" data-cy="edit-project"
@click="editProject(id)" @click="editProject(slug)"
>Projekt bearbeiten</a> >Projekt bearbeiten</a>
</li> </li>
<li <li
@ -32,7 +32,7 @@
> >
<a <a
data-cy="share-project" data-cy="share-project"
@click="updateProjectShareState(id, true)" @click="updateProjectShareState(slug, true)"
>Projekt teilen</a> >Projekt teilen</a>
</li> </li>
<li <li
@ -41,7 +41,7 @@
> >
<a <a
data-cy="unshare-project" data-cy="unshare-project"
@click="updateProjectShareState(id, false)" @click="updateProjectShareState(slug, false)"
>Projekt nicht mehr teilen</a> >Projekt nicht mehr teilen</a>
</li> </li>
</widget-popover> </widget-popover>
@ -59,7 +59,7 @@ const Ellipses = () => import(/* webpackChunkName: "icons" */'@/components/icons
export default { export default {
props: { props: {
id: { slug: {
type: String, type: String,
default: '', default: '',
}, },
@ -90,15 +90,15 @@ export default {
toggleMenu: function () { toggleMenu: function () {
this.showMenu = !this.showMenu; this.showMenu = !this.showMenu;
}, },
editProject(id) { editProject(slug) {
this.$router.push({name: 'edit-project', params: {id}}); this.$router.push({name: 'edit-project', params: {slug}});
}, },
deleteProject(id) { deleteProject(slug) {
this.$apollo.mutate({ this.$apollo.mutate({
mutation: DELETE_PROJECT_MUTATION, mutation: DELETE_PROJECT_MUTATION,
variables: { variables: {
input: { input: {
id, slug,
}, },
}, },
update(store, {data: {deleteProject: {success}}}) { update(store, {data: {deleteProject: {success}}}) {

View File

@ -7,15 +7,27 @@ const currentFilterVar = makeVar('');
const helloEmailVar = makeVar(''); const helloEmailVar = makeVar('');
const idToRefFactory = (__typename) => (_, {args, toReference}) => { const idToRefFactory = (__typename) => (_, {args, toReference}) => {
// todo: can we log this via Vue.$log somehow? // todo: can we log this via Vue.$log somehow?
console.log(`Trying to reference ${__typename} with id ${args.id}`); console.log(`Referencing ${__typename} with ${args.id}`);
return toReference({ return toReference({
__typename, __typename,
id: args.id id: args.id
}); });
}; };
const typePolicies = { const typePolicies = {
ProjectNode: {
keyFields: ['slug']
},
InstrumentNode: {
keyFields: ['slug']
},
ModuleNode: {
keyFields: ['slug']
},
RoomEntryNode: {
keyFields: ['slug']
},
// https://www.apollographql.com/docs/react/local-state/managing-state-with-field-policies/#example // https://www.apollographql.com/docs/react/local-state/managing-state-with-field-policies/#example
Query: { Query: {
fields: { fields: {

View File

@ -22,7 +22,7 @@ export default function (uri, networkErrorCallback) {
}); });
const consoleLink = new ApolloLink((operation, forward) => { const consoleLink = new ApolloLink((operation, forward) => {
console.log('operation', operation); console.log('operation', operation.operationName);
return forward(operation).map(data => { return forward(operation).map(data => {
console.log(`returned from server for ${operation.operationName}`, data); console.log(`returned from server for ${operation.operationName}`, data);

View File

@ -3,9 +3,9 @@ import PROJECT_QUERY from '@/graphql/gql/queries/projectQuery.gql';
export default { export default {
methods: { methods: {
updateProjectShareState(id, shared) { updateProjectShareState(slug, shared) {
const input = { const input = {
id: id, slug,
shared, shared,
}; };
this.$log.debug('updateProjectShareState', input); this.$log.debug('updateProjectShareState', input);
@ -18,7 +18,7 @@ export default {
if (!errors) { if (!errors) {
const query = PROJECT_QUERY; const query = PROJECT_QUERY;
const variables = { const variables = {
id: id, slug
}; };
const {project} = store.readQuery({query, variables}); const {project} = store.readQuery({query, variables});

View File

@ -15,14 +15,14 @@
:final="project.final" :final="project.final"
data-cy="project-share-link" data-cy="project-share-link"
class="project__share" class="project__share"
@click.native="updateProjectShareState(project.id, !project.final)" @click.native="updateProjectShareState(project.slug, !project.final)"
/> />
<project-actions <project-actions
:share-buttons="false" :share-buttons="false"
class="project__more" class="project__more"
:slug="project.slug"
v-if="canEdit" v-if="canEdit"
:id="project.id"
/> />
</div> </div>