From 86d688f4353011edcd196c28476ef4a633d03b11 Mon Sep 17 00:00:00 2001 From: sjschlapbach Date: Thu, 23 Jan 2025 10:35:33 +0100 Subject: [PATCH 1/3] enhance: introduce private and public preview feature flags --- .../src/components/common/Header.tsx | 48 +++++----- .../courses/CourseOverviewHeader.tsx | 2 +- .../courses/MicroLearningElement.tsx | 4 +- .../courses/PracticeQuizElement.tsx | 2 +- .../navigation/EvaluationNavigation.tsx | 7 +- .../manipulation/ElementFormErrors.tsx | 4 +- .../manipulation/ElementInformationFields.tsx | 4 +- .../manipulation/useElementTypeOptions.ts | 22 ++++- .../src/components/questions/tags/TagList.tsx | 71 ++++++++------ .../ops/QCheckFeaturePreviewAvailable.graphql | 3 - .../ops/QCheckPrivatePreviewAvailable.graphql | 3 + .../ops/QCheckPublicPreviewAvailable.graphql | 3 + .../src/graphql/ops/QUserProfile.graphql | 3 +- packages/graphql/src/ops.schema.json | 96 ++++++++++++------- packages/graphql/src/ops.ts | 28 ++++-- packages/graphql/src/public/client.json | 5 +- packages/graphql/src/public/schema.graphql | 6 +- packages/graphql/src/public/server.json | 5 +- packages/graphql/src/schema/query.ts | 12 ++- packages/graphql/src/schema/user.ts | 3 +- packages/graphql/src/services/accounts.ts | 17 +++- packages/i18n/messages/de.ts | 8 +- packages/i18n/messages/en.ts | 8 +- packages/prisma/src/data/helpers.ts | 3 +- packages/prisma/src/data/seedUsers.ts | 25 ++--- .../migration.sql | 3 + packages/prisma/src/prisma/schema/user.prisma | 3 +- 27 files changed, 251 insertions(+), 147 deletions(-) delete mode 100644 packages/graphql/src/graphql/ops/QCheckFeaturePreviewAvailable.graphql create mode 100644 packages/graphql/src/graphql/ops/QCheckPrivatePreviewAvailable.graphql create mode 100644 packages/graphql/src/graphql/ops/QCheckPublicPreviewAvailable.graphql create mode 100644 packages/prisma/src/prisma/migrations/20250123091154_multiple_preview_flags/migration.sql diff --git a/apps/frontend-manage/src/components/common/Header.tsx b/apps/frontend-manage/src/components/common/Header.tsx index ff76de2eef..ea2d8cef3e 100644 --- a/apps/frontend-manage/src/components/common/Header.tsx +++ b/apps/frontend-manage/src/components/common/Header.tsx @@ -65,28 +65,32 @@ function Header({ user }: HeaderProps): React.ReactElement { active: router.pathname == '/courses', data: { cy: 'courses' }, }, - { - type: 'button', - key: 'resources-menubar-item', - label: t('manage.general.resources'), - icon: faBolt, - onClick: () => router.push('/resources'), - active: router.pathname == '/resources', - data: { cy: 'resources' }, - className: { icon: 'text-orange-400' }, - }, - { - type: 'button', - key: 'catalog-menubar-item', - label: t('manage.general.catalog'), - icon: faBolt, - onClick: () => router.push('/catalog'), - active: router.pathname == '/catalog', - notification: pendingRequestData?.countCatalogSharingRequests !== 0, - data: { cy: 'catalog' }, - className: { icon: 'text-orange-400' }, - }, - ...(user?.featurePreview + ...(user?.privatePreview + ? ([ + { + type: 'button', + key: 'resources-menubar-item', + label: t('manage.general.resources'), + icon: faBolt, + onClick: () => router.push('/resources'), + active: router.pathname == '/resources', + data: { cy: 'resources' }, + className: { icon: 'text-orange-400' }, + }, + { + type: 'button', + key: 'catalog-menubar-item', + label: t('manage.general.catalog'), + icon: faBolt, + onClick: () => router.push('/catalog'), + active: router.pathname == '/catalog', + notification: pendingRequestData?.countCatalogSharingRequests !== 0, + data: { cy: 'catalog' }, + className: { icon: 'text-orange-400' }, + }, + ] as NavigationItemProps[]) + : []), + ...(user?.publicPreview ? [ { type: 'dropdown', diff --git a/apps/frontend-manage/src/components/courses/CourseOverviewHeader.tsx b/apps/frontend-manage/src/components/courses/CourseOverviewHeader.tsx index b7790f7d63..f88ddd7eae 100644 --- a/apps/frontend-manage/src/components/courses/CourseOverviewHeader.tsx +++ b/apps/frontend-manage/src/components/courses/CourseOverviewHeader.tsx @@ -85,7 +85,7 @@ function CourseOverviewHeader({ dataModal={{ cy: 'course-join-modal' }} dataCloseButton={{ cy: 'course-join-modal-close' }} /> - {user?.featurePreview ? ( + {user?.publicPreview ? (