diff --git a/migration-old-backup/1714018700116-add_archived_QFRound_fields.ts b/migration-old-backup/1714018700116-add_archived_QFRound_fields.ts index b4767109a..e7263ab65 100644 --- a/migration-old-backup/1714018700116-add_archived_QFRound_fields.ts +++ b/migration-old-backup/1714018700116-add_archived_QFRound_fields.ts @@ -6,11 +6,7 @@ export class AddArchivedQFRoundFields1714018700116 public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(` ALTER TABLE "qf_round" - ADD COLUMN IF NOT EXISTS "bannerBgImage" character varying - `); - - await queryRunner.query(` - ALTER TABLE "qf_round" + ADD COLUMN IF NOT EXISTS "bannerBgImage" character varying, ADD COLUMN IF NOT EXISTS "sponsorsImgs" character varying[] DEFAULT '{}' NOT NULL `); } @@ -18,11 +14,7 @@ export class AddArchivedQFRoundFields1714018700116 public async down(queryRunner: QueryRunner): Promise { await queryRunner.query(` ALTER TABLE "qf_round" - DROP COLUMN IF EXISTS "bannerBgImage" - `); - - await queryRunner.query(` - ALTER TABLE "qf_round" + DROP COLUMN IF EXISTS "bannerBgImage", DROP COLUMN IF EXISTS "sponsorsImgs" `); } diff --git a/migration/1712853017092-UserNewRoleQfManager.ts b/migration/1712853017092-UserNewRoleQfManager.ts index 3da4baa5f..0ff47a775 100644 --- a/migration/1712853017092-UserNewRoleQfManager.ts +++ b/migration/1712853017092-UserNewRoleQfManager.ts @@ -4,22 +4,24 @@ export class UserNewRoleQfManager1712853017092 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { // add enum qfManager to user table column role await queryRunner.query( - ` - ALTER TYPE user_role_enum ADD VALUE 'qfManager'; - ALTER TABLE "user" ALTER COLUMN "role" TYPE user_role_enum USING "role"::text::user_role_enum; - ALTER TABLE "user" ALTER COLUMN "role" SET DEFAULT 'restricted'; + `DO $$ + BEGIN + IF NOT EXISTS ( + SELECT 1 + FROM pg_enum + WHERE pg_enum.enumtypid = 'user_role_enum'::regtype + AND pg_enum.enumlabel = 'qfManager' + ) THEN + BEGIN + EXECUTE 'ALTER TYPE user_role_enum ADD VALUE ''qfManager'''; + END; + END IF; + END $$; `, ); } public async down(queryRunner: QueryRunner): Promise { - // remove enum qfManager from user table column role - await queryRunner.query( - ` - ALTER TYPE user_role_enum DROP VALUE 'qfManager'; - ALTER TABLE "user" ALTER COLUMN "role" TYPE user_role_enum USING "role"::text::user_role_enum; - ALTER TABLE "user" ALTER COLUMN "role" SET DEFAULT 'restricted'; - `, - ); + await queryRunner.query(''); // no need to remove enum value } } diff --git a/src/repositories/qfRoundRepository.ts b/src/repositories/qfRoundRepository.ts index ad34d1023..bc8e6f3ac 100644 --- a/src/repositories/qfRoundRepository.ts +++ b/src/repositories/qfRoundRepository.ts @@ -199,7 +199,7 @@ export const deactivateExpiredQfRounds = async (): Promise => { export const getRelatedProjectsOfQfRound = async ( qfRoundId: number, -): Promise<{ slug: string; name: string }[]> => { +): Promise<{ slug: string; name: string; id: number }[]> => { const query = ` SELECT "p"."slug", "p"."title" , p.id FROM "project" "p" diff --git a/src/server/adminJs/tabs/components/ProjectsInQfRound.tsx b/src/server/adminJs/tabs/components/ProjectsInQfRound.tsx index dfec3613f..c5347e8ae 100644 --- a/src/server/adminJs/tabs/components/ProjectsInQfRound.tsx +++ b/src/server/adminJs/tabs/components/ProjectsInQfRound.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React from 'react'; import { withTheme } from 'styled-components'; import { Section, Label, Link } from '@adminjs/design-system'; diff --git a/src/server/adminJs/tabs/qfRoundTab.ts b/src/server/adminJs/tabs/qfRoundTab.ts index b719a1135..7ac744ff8 100644 --- a/src/server/adminJs/tabs/qfRoundTab.ts +++ b/src/server/adminJs/tabs/qfRoundTab.ts @@ -33,9 +33,19 @@ import { pinFile } from '../../../middleware/pinataUtils'; export const refreshMaterializedViews = async ( response, ): Promise> => { + const projectIds = await getRelatedProjectsOfQfRound( + response.record.params.id, + ); await refreshProjectEstimatedMatchingView(); await refreshProjectDonationSummaryView(); await refreshProjectActualMatchingView(); + response.record = { + ...response.record, + params: { + ...response.record.params, + projectIdsList: projectIds.map(project => project.id).join(','), + }, + }; return response; }; @@ -119,7 +129,7 @@ export const qfRoundTab = { resource: QfRound, options: { properties: { - addProjectIdsList: { + projectIdsList: { type: 'textarea', // projectIds separated By comma isVisible: { @@ -308,10 +318,10 @@ export const qfRoundTab = { request.payload.isActive = qfRound.isActive; } else if ( qfRound.isActive && - request?.payload?.addProjectIdsList?.split(',')?.length > 0 + request?.payload?.projectIdsList?.split(',')?.length > 0 ) { await relateManyProjectsToQfRound({ - projectIds: request.payload.addProjectIdsList.split(','), + projectIds: request.payload.projectIdsList.split(','), qfRound, add: true, });