Wire publish status and access tier toggles, list search/filtering, and hierarchy reorder APIs across content pages; switch team member adds to email invites and collapse long page descriptions. Co-authored-by: Cursor <cursoragent@cursor.com>
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import type {
|
|
GetPracticesByParentContextResponse,
|
|
ParentContextPractice,
|
|
PracticePublishStatus,
|
|
} from "../types/course.types"
|
|
import { isPublishedPublishStatus, normalizePublishStatus } from "./publishStatus"
|
|
|
|
export function unwrapPracticesList(
|
|
res: {
|
|
data?: GetPracticesByParentContextResponse & {
|
|
Data?: GetPracticesByParentContextResponse["data"]
|
|
}
|
|
},
|
|
): ParentContextPractice[] {
|
|
const body = res.data
|
|
if (!body) return []
|
|
const data = body.data ?? body.Data
|
|
const raw = data?.practices
|
|
return Array.isArray(raw) ? raw : []
|
|
}
|
|
|
|
export function practicePublishStatus(
|
|
practice: ParentContextPractice,
|
|
): PracticePublishStatus | null {
|
|
return normalizePublishStatus(practice.publish_status)
|
|
}
|
|
|
|
export function isPracticePublished(practice: ParentContextPractice): boolean {
|
|
return isPublishedPublishStatus(practice.publish_status)
|
|
}
|
|
|
|
export function isPracticeDraft(practice: ParentContextPractice): boolean {
|
|
const status = practicePublishStatus(practice)
|
|
return status === "DRAFT" || status === null
|
|
}
|
|
|
|
export function draftPracticesForParent(
|
|
practices: ParentContextPractice[],
|
|
): ParentContextPractice[] {
|
|
return practices.filter(isPracticeDraft)
|
|
}
|