diff --git a/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue index 3d1ceafb2..b61a65447 100644 --- a/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue +++ b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue @@ -136,6 +136,7 @@ export default { .then((result) => { this.$emit('get-list-contribution-messages', this.contributionId) this.$emit('update-status', this.contributionId) + this.$emit('reload-contribution', this.contributionId) this.toastSuccess(this.$t('message.request')) this.loading = false }) diff --git a/admin/src/components/ContributionMessages/ContributionMessagesList.vue b/admin/src/components/ContributionMessages/ContributionMessagesList.vue index 9dab2e4d5..c6bed086d 100644 --- a/admin/src/components/ContributionMessages/ContributionMessagesList.vue +++ b/admin/src/components/ContributionMessages/ContributionMessagesList.vue @@ -14,6 +14,7 @@ :contributionMemo="contributionMemo" @get-list-contribution-messages="$apollo.queries.Messages.refetch()" @update-status="updateStatus" + @reload-contribution="reloadContribution" /> @@ -75,6 +76,9 @@ export default { updateStatus(id) { this.$emit('update-status', id) }, + reloadContribution(id) { + this.$emit('reload-contribution', id) + }, }, } diff --git a/admin/src/components/Tables/OpenCreationsTable.vue b/admin/src/components/Tables/OpenCreationsTable.vue index 7d1b5ab84..f351fe228 100644 --- a/admin/src/components/Tables/OpenCreationsTable.vue +++ b/admin/src/components/Tables/OpenCreationsTable.vue @@ -113,6 +113,7 @@ :contributionUserId="row.item.userId" :contributionMemo="row.item.memo" @update-status="updateStatus" + @reload-contribution="reloadContribution" /> @@ -172,6 +173,9 @@ export default { updateStatus(id) { this.$emit('update-status', id) }, + reloadContribution(id) { + this.$emit('reload-contribution', id) + }, }, } diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue index bd4c58983..593603e43 100644 --- a/admin/src/pages/CreationConfirm.vue +++ b/admin/src/pages/CreationConfirm.vue @@ -49,6 +49,7 @@ :fields="fields" @show-overlay="showOverlay" @update-status="updateStatus" + @reload-contribution="reloadContribution" @update-contributions="$apollo.queries.ListAllContributions.refetch()" /> @@ -95,6 +96,33 @@ import { adminListContributions } from '../graphql/adminListContributions' import { adminDeleteContribution } from '../graphql/adminDeleteContribution' import { confirmContribution } from '../graphql/confirmContribution' import { denyContribution } from '../graphql/denyContribution' +import gql from 'graphql-tag' + +export const getContribution = gql` + query ($id: Int!) { + contribution(id: $id) { + id + firstName + lastName + amount + memo + createdAt + contributionDate + confirmedAt + confirmedBy + updatedAt + updatedBy + status + messagesCount + deniedAt + deniedBy + deletedAt + deletedBy + moderatorId + userId + } + } +` const FILTER_TAB_MAP = [ ['IN_PROGRESS', 'PENDING'], @@ -131,6 +159,22 @@ export default { }, }, methods: { + reloadContribution(id) { + this.$apollo + .query({ query: getContribution, variables: { id } }) + .then((result) => { + const contribution = result.data.contribution + this.$set( + this.items, + this.items.findIndex((obj) => obj.id === contribution.id), + contribution, + ) + }) + .catch((error) => { + this.overlay = false + this.toastError(error.message) + }) + }, swapNoHashtag() { this.query() }, diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index 3cf0119b0..cd5493230 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -45,6 +45,7 @@ import { calculateDecay } from '@/util/decay' import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' import { fullName } from '@/util/utilities' +import { findContribution } from './util/contributions' import { getUserCreation, validateContribution, getOpenCreations } from './util/creations' import { findContributions } from './util/findContributions' import { getLastTransaction } from './util/getLastTransaction' @@ -52,6 +53,16 @@ import { sendTransactionsToDltConnector } from './util/sendTransactionsToDltConn @Resolver() export class ContributionResolver { + @Authorized([RIGHTS.ADMIN_LIST_CONTRIBUTIONS]) + @Query(() => Contribution) + async contribution(@Arg('id', () => Int) id: number): Promise { + const contribution = await findContribution(id) + if (!contribution) { + throw new LogError('Contribution not found', id) + } + return new Contribution(contribution) + } + @Authorized([RIGHTS.CREATE_CONTRIBUTION]) @Mutation(() => UnconfirmedContribution) async createContribution( diff --git a/backend/src/graphql/resolver/util/contributions.ts b/backend/src/graphql/resolver/util/contributions.ts new file mode 100644 index 000000000..c4f0fb46a --- /dev/null +++ b/backend/src/graphql/resolver/util/contributions.ts @@ -0,0 +1,5 @@ +import { Contribution } from '@entity/Contribution' + +export const findContribution = async (id: number): Promise => { + return Contribution.findOne({ where: { id } }) +}