diff --git a/backend/src/schema/index.js b/backend/src/schema/index.js index 274697238..612487147 100644 --- a/backend/src/schema/index.js +++ b/backend/src/schema/index.js @@ -20,7 +20,6 @@ export default makeAugmentedSchema({ 'FILED', 'REVIEWED', 'Report', - 'Donations', ], }, mutation: false, diff --git a/backend/src/schema/resolvers/donations.js b/backend/src/schema/resolvers/donations.js index 15a1db812..d077e7bed 100644 --- a/backend/src/schema/resolvers/donations.js +++ b/backend/src/schema/resolvers/donations.js @@ -1,4 +1,32 @@ export default { + Query: { + Donations: async (_parent, _params, context, _resolveInfo) => { + const { driver } = context + let donations + const session = driver.session() + const writeTxResultPromise = session.writeTransaction(async (txc) => { + const donationsTransactionResponse = await txc.run( + ` + MATCH (donations:Donations) + WITH donations LIMIT 1 + RETURN donations + `, + {}, + ) + return donationsTransactionResponse.records.map( + (record) => record.get('donations').properties, + ) + }) + try { + const txResult = await writeTxResultPromise + if (!txResult[0]) return null + donations = txResult[0] + } finally { + session.close() + } + return donations + }, + }, Mutation: { UpdateDonations: async (_parent, params, context, _resolveInfo) => { const { driver } = context diff --git a/backend/src/schema/types/type/Donations.gql b/backend/src/schema/types/type/Donations.gql index 2186ee63a..10fb8597c 100644 --- a/backend/src/schema/types/type/Donations.gql +++ b/backend/src/schema/types/type/Donations.gql @@ -8,7 +8,7 @@ type Donations { } type Query { - Donations: [Donations] + Donations: Donations } type Mutation { diff --git a/webapp/pages/admin/donations.spec.js b/webapp/pages/admin/donations.spec.js index 9da2965b9..c80093d64 100644 --- a/webapp/pages/admin/donations.spec.js +++ b/webapp/pages/admin/donations.spec.js @@ -57,7 +57,9 @@ describe('donations.vue', () => { }) it('showDonations label', () => { - expect(wrapper.find('.show-donations-checkbox').text()).toBe('admin.donations.showDonationsCheckboxLabel') + expect(wrapper.find('.show-donations-checkbox').text()).toBe( + 'admin.donations.showDonationsCheckboxLabel', + ) }) it('donations goal label', () => { @@ -65,7 +67,9 @@ describe('donations.vue', () => { }) it('donations progress label', () => { - expect(wrapper.find('[data-test="donations-progress"]').text()).toBe('admin.donations.progress') + expect(wrapper.find('[data-test="donations-progress"]').text()).toBe( + 'admin.donations.progress', + ) }) it('save button text', () => { @@ -94,26 +98,19 @@ describe('donations.vue', () => { }) describe('showDonations', () => { - it.skip('set as default', () => { - }) + it.skip('set as default', () => {}) - it.skip('click changes value', () => { - }) + it.skip('click changes value', () => {}) }) - it.skip('XXX', () => { - }) + it.skip('XXX', () => {}) - it.skip('XXX', () => { - }) + it.skip('XXX', () => {}) - it.skip('XXX', () => { - }) + it.skip('XXX', () => {}) - it.skip('XXX', () => { - }) + it.skip('XXX', () => {}) - it.skip('XXX', () => { - }) + it.skip('XXX', () => {}) }) }) diff --git a/webapp/pages/admin/donations.vue b/webapp/pages/admin/donations.vue index 85a3c69ee..db9339baa 100644 --- a/webapp/pages/admin/donations.vue +++ b/webapp/pages/admin/donations.vue @@ -57,14 +57,25 @@ export default { methods: { submit() { const { showDonations } = this - const { goal, progress } = this.formData + let { goal, progress } = this.formData + goal = typeof goal === 'string' && goal.length > 0 ? goal : '15000' + progress = typeof progress === 'string' && progress.length > 0 ? progress : '0' this.$apollo .mutate({ mutation: UpdateDonations(), variables: { showDonations, goal: parseInt(goal), - progress: parseInt(progress), + progress: parseInt(progress) < parseInt(goal) ? parseInt(progress) : parseInt(goal), + }, + update: (_store, { data }) => { + if (!data || !data.UpdateDonations) return + const { showDonations, goal, progress } = data.UpdateDonations + this.showDonations = showDonations + this.formData = { + goal: goal.toString(10), + progress: progress < goal ? progress.toString(10) : goal.toString(10), + } }, }) .then(() => { @@ -79,12 +90,12 @@ export default { return DonationsQuery() }, update({ Donations }) { - if (!Donations[0]) return - const { showDonations, goal, progress } = Donations[0] + if (!Donations) return + const { showDonations, goal, progress } = Donations this.showDonations = showDonations this.formData = { - goal, - progress, + goal: goal.toString(10), + progress: progress < goal ? progress.toString(10) : goal.toString(10), } }, }, diff --git a/webapp/pages/index.vue b/webapp/pages/index.vue index 5e5efd5c5..fc6bf8601 100644 --- a/webapp/pages/index.vue +++ b/webapp/pages/index.vue @@ -154,11 +154,11 @@ export default { return DonationsQuery() }, update({ Donations }) { - if (!Donations[0]) return - const { showDonations, goal, progress } = Donations[0] + if (!Donations) return + const { showDonations, goal, progress } = Donations this.showDonations = showDonations this.goal = goal - this.progress = progress + this.progress = progress < goal ? progress : goal }, }, Post: {