diff --git a/src/index.scss b/src/index.scss index 717e4a7215..595c45146e 100644 --- a/src/index.scss +++ b/src/index.scss @@ -30,7 +30,6 @@ @import "search-modal/SearchModal"; @import "certificates/scss/Certificates"; @import "group-configurations/GroupConfigurations"; -@import "library-authoring"; // To apply the glow effect to the selected Section/Subsection, in the Course Outline div.row:has(> div > div.highlight) { diff --git a/src/library-authoring/LibraryAuthoringPage.test.tsx b/src/library-authoring/LibraryAuthoringPage.test.tsx index 0e90e222f6..cad29ffa9b 100644 --- a/src/library-authoring/LibraryAuthoringPage.test.tsx +++ b/src/library-authoring/LibraryAuthoringPage.test.tsx @@ -61,6 +61,9 @@ const libraryData: ContentLibrary = { numBlocks: 2, version: 0, lastPublished: null, + lastDraftCreated: null, + publishedBy: 'staff', + lastDraftCreatedBy: null, allowLti: false, allowPublicLearning: false, allowPublicRead: false, @@ -68,6 +71,8 @@ const libraryData: ContentLibrary = { hasUnpublishedDeletes: false, canEditLibrary: true, license: '', + created: null, + updated: null, }; const RootWrapper = () => ( diff --git a/src/library-authoring/data/api.ts b/src/library-authoring/data/api.ts index 3288a6a632..b1406b14f4 100644 --- a/src/library-authoring/data/api.ts +++ b/src/library-authoring/data/api.ts @@ -42,8 +42,8 @@ export interface ContentLibrary { hasUnpublishedDeletes: boolean; canEditLibrary: boolean; license: string; - created: Date; - updated: Date; + created: Date | null; + updated: Date | null; } export interface LibraryBlockType { diff --git a/src/library-authoring/data/apiHook.ts b/src/library-authoring/data/apiHook.ts deleted file mode 100644 index 0b2e24ea23..0000000000 --- a/src/library-authoring/data/apiHook.ts +++ /dev/null @@ -1,98 +0,0 @@ -import React from 'react'; -import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; -import { MeiliSearch } from 'meilisearch'; - -import { useContentSearchConnection, useContentSearchResults } from '../../search-modal'; -import { - createLibraryBlock, - getContentLibrary, - commitLibraryChanges, - revertLibraryChanges -} from './api'; - -export const libraryQueryKeys = { - /** - * Used in all query keys. - * You can use these key to invalidate all queries. - */ - all: ['contentLibrary'], - contentLibrary: (libraryId) => [ - libraryQueryKeys.all, libraryId, - ], -}; - -/** - * Hook to fetch a content library by its ID. - */ -export const useContentLibrary = (libraryId?: string) => ( - useQuery({ - queryKey: libraryQueryKeys.contentLibrary(libraryId), - queryFn: () => getContentLibrary(libraryId), - }) -); - -/** - * Use this mutation to create a block in a library - */ -export const useCreateLibraryBlock = () => { - const queryClient = useQueryClient(); - return useMutation({ - mutationFn: createLibraryBlock, - onSettled: (_data, _error, variables) => { - queryClient.invalidateQueries({ queryKey: libraryQueryKeys.contentLibrary(variables.libraryId) }); - queryClient.invalidateQueries({ queryKey: ['content_search'] }); - }, - }); -}; - -/** - * Hook to fetch the count of components and collections in a library. - */ -export const useLibraryComponentCount = (libraryId: string, searchKeywords: string) => { - // Meilisearch code to get Collection and Component counts - const { data: connectionDetails } = useContentSearchConnection(); - - const indexName = connectionDetails?.indexName; - const client = React.useMemo(() => { - if (connectionDetails?.apiKey === undefined || connectionDetails?.url === undefined) { - return undefined; - } - return new MeiliSearch({ host: connectionDetails.url, apiKey: connectionDetails.apiKey }); - }, [connectionDetails?.apiKey, connectionDetails?.url]); - - const libFilter = `context_key = "${libraryId}"`; - - const { totalHits: componentCount } = useContentSearchResults({ - client, - indexName, - searchKeywords, - extraFilter: [libFilter], // ToDo: Add filter for components when collection is implemented - }); - - const collectionCount = 0; // ToDo: Implement collections count - - return { - componentCount, - collectionCount, - }; -}; - -export const useCommitLibraryChanges = () => { - const queryClient = useQueryClient(); - return useMutation({ - mutationFn: commitLibraryChanges, - onSettled: (_data, _error, libraryId) => { - queryClient.invalidateQueries({ queryKey: libraryQueryKeys.contentLibrary(libraryId) }); - }, - }); -}; - -export const useRevertLibraryChanges = () => { - const queryClient = useQueryClient(); - return useMutation({ - mutationFn: revertLibraryChanges, - onSettled: (_data, _error, libraryId) => { - queryClient.invalidateQueries({ queryKey: libraryQueryKeys.contentLibrary(libraryId) }); - }, - }); -}; diff --git a/src/library-authoring/data/apiHooks.ts b/src/library-authoring/data/apiHooks.ts index fe87357efa..e7eb4d7c5c 100644 --- a/src/library-authoring/data/apiHooks.ts +++ b/src/library-authoring/data/apiHooks.ts @@ -9,6 +9,8 @@ import { getLibraryBlockTypes, createLibraryBlock, getContentLibraryV2List, + commitLibraryChanges, + revertLibraryChanges, } from './api'; export const libraryAuthoringQueryKeys = { @@ -130,3 +132,24 @@ export const useContentLibraryV2List = (customParams: GetLibrariesV2CustomParams keepPreviousData: true, }) ); + + +export const useCommitLibraryChanges = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: commitLibraryChanges, + onSettled: (_data, _error, libraryId) => { + queryClient.invalidateQueries({ queryKey: libraryAuthoringQueryKeys.contentLibrary(libraryId) }); + }, + }); +}; + +export const useRevertLibraryChanges = () => { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: revertLibraryChanges, + onSettled: (_data, _error, libraryId) => { + queryClient.invalidateQueries({ queryKey: libraryAuthoringQueryKeys.contentLibrary(libraryId) }); + }, + }); +}; \ No newline at end of file diff --git a/src/library-authoring/library-info/LibraryPublishStatus.scss b/src/library-authoring/library-info/LibraryPublishStatus.scss index d505ccddbf..7f94889290 100644 --- a/src/library-authoring/library-info/LibraryPublishStatus.scss +++ b/src/library-authoring/library-info/LibraryPublishStatus.scss @@ -10,4 +10,3 @@ border-top: 4px solid $info-400; } } - diff --git a/src/library-authoring/library-info/LibraryPublishStatus.tsx b/src/library-authoring/library-info/LibraryPublishStatus.tsx index c11c61de57..84997017b3 100644 --- a/src/library-authoring/library-info/LibraryPublishStatus.tsx +++ b/src/library-authoring/library-info/LibraryPublishStatus.tsx @@ -4,7 +4,7 @@ import { ContentLibrary } from "../data/api"; import { useIntl } from '@edx/frontend-platform/i18n'; import messages from "./messages"; import classNames from 'classnames'; -import { useCommitLibraryChanges, useRevertLibraryChanges } from "../data/apiHook"; +import { useCommitLibraryChanges, useRevertLibraryChanges } from "../data/apiHooks"; import { ToastContext } from "../../generic/toast-context"; import { convertToStringFromDateAndFormat } from "../../utils"; import { COMMA_SEPARATED_DATE_FORMAT, TIME_FORMAT } from "../../constants";