From 7298f443e9c594754bb95c0ec353e48a20d104de Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Thu, 24 Aug 2023 09:40:43 +0200 Subject: [PATCH 01/15] Add FilterBar component to Instruments page --- .../src/components/instruments/FilterBar.vue | 110 ++++++++++++++++++ client/src/pages/instrumentOverview.vue | 4 + 2 files changed, 114 insertions(+) create mode 100644 client/src/components/instruments/FilterBar.vue diff --git a/client/src/components/instruments/FilterBar.vue b/client/src/components/instruments/FilterBar.vue new file mode 100644 index 00000000..37f7ffff --- /dev/null +++ b/client/src/components/instruments/FilterBar.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/client/src/pages/instrumentOverview.vue b/client/src/pages/instrumentOverview.vue index 12a5b30b..42833775 100644 --- a/client/src/pages/instrumentOverview.vue +++ b/client/src/pages/instrumentOverview.vue @@ -10,6 +10,8 @@ v-else />
+ + Date: Thu, 24 Aug 2023 11:00:03 +0200 Subject: [PATCH 02/15] Refactoring --- .../src/components/instruments/FilterBar.vue | 77 ++++++++----------- 1 file changed, 32 insertions(+), 45 deletions(-) diff --git a/client/src/components/instruments/FilterBar.vue b/client/src/components/instruments/FilterBar.vue index 37f7ffff..8c1d2bc9 100644 --- a/client/src/components/instruments/FilterBar.vue +++ b/client/src/components/instruments/FilterBar.vue @@ -8,38 +8,40 @@ @input="debouncedUpdate" placeholder="Suchbegriff eingeben..." /> - + +
- + :selectableItems="languageOptions" + :defaultSelectedItem="initialLanguage" + class="filter-bar__language-selection" + @update:selectedItem="(item) => (selectedLanguage = item)" + /> - From 77aede3948f95f7f0d3d849ffc88972ecc2c7c65 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Fri, 25 Aug 2023 09:31:59 +0200 Subject: [PATCH 03/15] Add Search Icon --- .../src/components/icons/SearchMagnifyingGlass.vue | 12 ++++++++++++ client/src/components/instruments/FilterBar.vue | 12 ++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 client/src/components/icons/SearchMagnifyingGlass.vue diff --git a/client/src/components/icons/SearchMagnifyingGlass.vue b/client/src/components/icons/SearchMagnifyingGlass.vue new file mode 100644 index 00000000..2f145ac7 --- /dev/null +++ b/client/src/components/icons/SearchMagnifyingGlass.vue @@ -0,0 +1,12 @@ + diff --git a/client/src/components/instruments/FilterBar.vue b/client/src/components/instruments/FilterBar.vue index 8c1d2bc9..d394381c 100644 --- a/client/src/components/instruments/FilterBar.vue +++ b/client/src/components/instruments/FilterBar.vue @@ -8,7 +8,7 @@ @input="debouncedUpdate" placeholder="Suchbegriff eingeben..." /> - + import debounce from 'lodash/debounce'; - import { ref, watchEffect } from 'vue'; import NoteIcon from '@/components/icons/NoteIcon.vue'; import PillRadioButtons from '@/components/ui/PillRadioButtons.vue'; +import SearchMagnifyingGlass from "@/components/icons/SearchMagnifyingGlass.vue"; const props = defineProps({ searchText: { @@ -78,16 +78,16 @@ const debouncedUpdate = debounce((event: Event) => { padding: 1rem; border-radius: $input-border-radius; border: 1px solid $color-silver; - font-size: 1rem; + font-size: $base-font-size-pixels; } &__search-icon { position: absolute; - right: 1rem; + width: $default-icon-dimension; + height: $default-icon-dimension; + right: $medium-spacing; top: 50%; transform: translateY(-50%); - font-size: 1rem; - color: $color-silver; } &__language-selection { From ce645001a1621f98e9a48271934908f838f13f8e Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Fri, 25 Aug 2023 13:25:42 +0200 Subject: [PATCH 04/15] Add filter function --- .../src/components/instruments/FilterBar.vue | 39 +++++-------------- .../components/instruments/FilterGroup.vue | 11 +++--- client/src/pages/instrumentOverview.vue | 9 +++-- 3 files changed, 21 insertions(+), 38 deletions(-) diff --git a/client/src/components/instruments/FilterBar.vue b/client/src/components/instruments/FilterBar.vue index d394381c..20bc495c 100644 --- a/client/src/components/instruments/FilterBar.vue +++ b/client/src/components/instruments/FilterBar.vue @@ -4,9 +4,9 @@ @@ -21,43 +21,24 @@ From 020c4846c4a4709ae83a8061e692ab5d78920ee4 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Wed, 30 Aug 2023 14:24:12 +0200 Subject: [PATCH 12/15] Fix comments from PR --- client/src/__generated__/gql.ts | 5 +++ client/src/__generated__/graphql.ts | 7 ++++ .../assignment/FinalSubmission.vue | 8 ++-- .../icons/SearchMagnifyingGlass.vue | 4 +- .../src/components/instruments/FilterBar.vue | 18 +++------ .../components/instruments/FilterGroup.vue | 16 -------- .../src/components/modules/ModuleFilter.vue | 37 ++++-------------- client/src/components/ui/InfoMessage.vue | 33 ++++++++++++++++ client/src/helpers/app-flavor.constants.ts | 2 - client/src/pages/instrumentOverview.vue | 38 +++++-------------- client/src/styles/_variables.scss | 6 ++- server/schema.graphql | 1 + setup-for-tests.sh | 2 +- 13 files changed, 81 insertions(+), 96 deletions(-) create mode 100644 client/src/components/ui/InfoMessage.vue diff --git a/client/src/__generated__/gql.ts b/client/src/__generated__/gql.ts index 5dba91ed..b375014a 100644 --- a/client/src/__generated__/gql.ts +++ b/client/src/__generated__/gql.ts @@ -24,6 +24,7 @@ const documents = { "\n query ModuleEditModeQuery($slug: String) {\n module(slug: $slug) {\n inEditMode @client\n slug\n }\n }\n": types.ModuleEditModeQueryDocument, "\n query ChapterQuery($id: ID!) {\n chapter(id: $id) {\n path\n }\n }\n ": types.ChapterQueryDocument, "\n query ContentBlockQuery($id: ID!) {\n contentBlock(id: $id) {\n path\n }\n }\n ": types.ContentBlockQueryDocument, + "\n query MeLanguage {\n me {\n language @client\n }\n }\n ": types.MeLanguageDocument, "\n query ModuleSnapshotsQuery($slug: String!) {\n module(slug: $slug) {\n id\n title\n metaTitle\n slug\n topic {\n title\n }\n snapshots {\n ...SnapshotListItem\n }\n }\n }\n ": types.ModuleSnapshotsQueryDocument, "\n query ModuleSolutions($slug: String) {\n module(slug: $slug) {\n solutionsEnabled\n slug\n }\n }\n": types.ModuleSolutionsDocument, }; @@ -86,6 +87,10 @@ export function graphql(source: "\n query ChapterQuery($id: ID!) {\n cha * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function graphql(source: "\n query ContentBlockQuery($id: ID!) {\n contentBlock(id: $id) {\n path\n }\n }\n "): (typeof documents)["\n query ContentBlockQuery($id: ID!) {\n contentBlock(id: $id) {\n path\n }\n }\n "]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n query MeLanguage {\n me {\n language @client\n }\n }\n "): (typeof documents)["\n query MeLanguage {\n me {\n language @client\n }\n }\n "]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/client/src/__generated__/graphql.ts b/client/src/__generated__/graphql.ts index 849ed0d6..a8bdaf14 100644 --- a/client/src/__generated__/graphql.ts +++ b/client/src/__generated__/graphql.ts @@ -616,6 +616,7 @@ export type InstrumentNode = Node & { contents?: Maybe; id: Scalars['ID']['output']; intro: Scalars['String']['output']; + language?: Maybe; slug: Scalars['String']['output']; title: Scalars['String']['output']; type?: Maybe; @@ -2428,6 +2429,11 @@ export type ContentBlockQueryQueryVariables = Exact<{ export type ContentBlockQueryQuery = { __typename?: 'Query', contentBlock?: { __typename?: 'ContentBlockNode', path?: string | null } | null }; +export type MeLanguageQueryVariables = Exact<{ [key: string]: never; }>; + + +export type MeLanguageQuery = { __typename?: 'Query', me?: { __typename?: 'PrivateUserNode', language?: string | null } | null }; + export type ModuleSnapshotsQueryQueryVariables = Exact<{ slug: Scalars['String']['input']; }>; @@ -2456,5 +2462,6 @@ export const ModuleTitleQueryDocument = {"kind":"Document","definitions":[{"kind export const ModuleEditModeQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ModuleEditModeQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"slug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"module"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"slug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"inEditMode"},"directives":[{"kind":"Directive","name":{"kind":"Name","value":"client"}}]},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}}]} as unknown as DocumentNode; export const ChapterQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ChapterQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"chapter"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"path"}}]}}]}}]} as unknown as DocumentNode; export const ContentBlockQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ContentBlockQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"contentBlock"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"path"}}]}}]}}]} as unknown as DocumentNode; +export const MeLanguageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MeLanguage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"language"},"directives":[{"kind":"Directive","name":{"kind":"Name","value":"client"}}]}]}}]}}]} as unknown as DocumentNode; export const ModuleSnapshotsQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ModuleSnapshotsQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"slug"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"module"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"slug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"metaTitle"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"topic"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}}]}},{"kind":"Field","name":{"kind":"Name","value":"snapshots"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"SnapshotListItem"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"SnapshotListItem"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"SnapshotNode"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"shared"}}]}}]} as unknown as DocumentNode; export const ModuleSolutionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ModuleSolutions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"slug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"module"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"slug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"slug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"solutionsEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/client/src/components/content-blocks/assignment/FinalSubmission.vue b/client/src/components/content-blocks/assignment/FinalSubmission.vue index d2894db3..b01ec58d 100644 --- a/client/src/components/content-blocks/assignment/FinalSubmission.vue +++ b/client/src/components/content-blocks/assignment/FinalSubmission.vue @@ -71,7 +71,7 @@ export default { padding: 15px; font-size: toRem(17px); font-family: $sans-serif-font-family; - margin-bottom: 20px; + margin-bottom: $medium-spacing font-weight: $font-weight-regular; overflow-wrap: break-word; @@ -90,10 +90,10 @@ export default { } &__explanation-icon { - width: 40px; - height: 40px; + width: $large-icon-dimension; + height: $large-icon-dimension; fill: $color-brand; - margin-right: 8px; + margin-right: $small-spacing; } &__explanation-text { diff --git a/client/src/components/icons/SearchMagnifyingGlass.vue b/client/src/components/icons/SearchMagnifyingGlass.vue index 1ab1408b..f43a3979 100644 --- a/client/src/components/icons/SearchMagnifyingGlass.vue +++ b/client/src/components/icons/SearchMagnifyingGlass.vue @@ -1,12 +1,12 @@ - + + + diff --git a/client/src/helpers/app-flavor.constants.ts b/client/src/helpers/app-flavor.constants.ts index e4683663..1e7fa493 100644 --- a/client/src/helpers/app-flavor.constants.ts +++ b/client/src/helpers/app-flavor.constants.ts @@ -59,7 +59,6 @@ export const dhaValues: FlavorValues = Object.assign({}, myKvValues, { appLogo: 'https://skillbox-my-detailhandel-dha-prod.s3.eu-central-1.amazonaws.com/myDHA-logo.png', textAppName: 'myDHA', helloIllustration: 'HelloMyDHAIllustration', - showInstrumentSubCategories: false, }); export const dhfValues: FlavorValues = Object.assign({}, myKvValues, { @@ -69,5 +68,4 @@ export const dhfValues: FlavorValues = Object.assign({}, myKvValues, { appLogo: 'https://skillbox-my-detailhandel-dhf-prod.s3.eu-central-1.amazonaws.com/myDHF-logo.png', textAppName: 'myDHF', helloIllustration: 'HelloMyDHFIllustration', - showInstrumentSubCategories: false, }); diff --git a/client/src/pages/instrumentOverview.vue b/client/src/pages/instrumentOverview.vue index 1c58892d..ed77d0f0 100644 --- a/client/src/pages/instrumentOverview.vue +++ b/client/src/pages/instrumentOverview.vue @@ -10,19 +10,17 @@ v-else />
- -
+ + - - Für die ausgewählten Filtereinstellungen sind keine Einträge vorhanden -
+ Für die ausgewählten Filtereinstellungen sind keine Einträge vorhanden + diff --git a/client/src/styles/_variables.scss b/client/src/styles/_variables.scss index fe1456de..0fcf442f 100644 --- a/client/src/styles/_variables.scss +++ b/client/src/styles/_variables.scss @@ -83,7 +83,11 @@ $popover-default-bottom: -110px; $footer-width: 800px; $news-width: 550px; + +$medium-input-width: 380px; + $screen-width: 1200px; -$default-icon-dimension: 25px; $small-icon-dimension: 14px; +$default-icon-dimension: 25px; +$large-icon-dimension: 40px; diff --git a/server/schema.graphql b/server/schema.graphql index 5227da9c..3ec25054 100644 --- a/server/schema.graphql +++ b/server/schema.graphql @@ -559,6 +559,7 @@ type InstrumentNode implements Node { id: ID! bookmarks: [InstrumentBookmarkNode] type: InstrumentTypeNode + language: String } type InstrumentNodeConnection { diff --git a/setup-for-tests.sh b/setup-for-tests.sh index 67b912ca..017a60a0 100755 --- a/setup-for-tests.sh +++ b/setup-for-tests.sh @@ -16,4 +16,4 @@ export OAUTH_AUTHORIZE_URL=https://hepverlag-cms.grape.novu.ch/oauth/authorize export OAUTH_API_BASE_URL=https://hepverlag-cms.grape.novu.ch/ export OAUTH_LOCAL_REDIRECT_URI=http://localhost:8000/api/oauth/callback/ export NODE_OPTIONS=--max_old_space_size=3072 -pipenv install --dev --system +#pipenv install --dev --system From d059a4d82a6c7ee3a8c679ea958b4038814d5f04 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Wed, 30 Aug 2023 14:33:54 +0200 Subject: [PATCH 13/15] Add flavor for showModuleFilters --- client/src/components/modules/Module.vue | 2 +- client/src/components/modules/ModuleFilter.vue | 2 +- client/src/components/modules/ModuleTeaser.vue | 2 +- client/src/helpers/app-flavor.constants.ts | 2 ++ client/src/helpers/types.ts | 1 + 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/client/src/components/modules/Module.vue b/client/src/components/modules/Module.vue index 364a5034..29c67e1c 100644 --- a/client/src/components/modules/Module.vue +++ b/client/src/components/modules/Module.vue @@ -13,7 +13,7 @@ {{ module.metaTitle }} -
+
diff --git a/client/src/components/modules/ModuleFilter.vue b/client/src/components/modules/ModuleFilter.vue index e58305b3..ca5b0a56 100644 --- a/client/src/components/modules/ModuleFilter.vue +++ b/client/src/components/modules/ModuleFilter.vue @@ -1,6 +1,6 @@