import type { GrafaidOld } from '#lib/grafaid-old/index' import { CRITICALITY_LEVELS } from '#lib/graphql-change/criticality' import { GraphqlChange } from '#lib/graphql-change/index' import type { GraphqlChangeset } from '#lib/graphql-changeset/index' import type { CriticalityLevel } from '@graphql-inspector/core' import { Box } from '@radix-ui/themes' import { neverCase } from '@wollybeard/kit/language' import type React from 'react' import { useMemo } from 'react' import type { Schema as ChangelogData } from '../../api/schema/index.js' import { CriticalitySection } from './Changelog/CriticalitySection.js' import * as Group from './Changelog/groups/index.js' export const renderDate = (date: Date) => { return date.toLocaleString(`default`, { month: `long`, year: `numeric`, day: `numeric`, timeZone: `utc`, }) } export const Changelog: React.FC<{ schema: ChangelogData.Schema }> = ({ schema }) => { return ( {schema.versions.map(changeset => )} ) } const Changeset: React.FC<{ changeset: GraphqlChangeset.ChangeSet }> = ({ changeset }) => { // Group changes by criticality level const groupedChanges = useMemo(() => { const groups = {} as Record // Initialize empty arrays for each level CRITICALITY_LEVELS.forEach(level => { groups[level] = [] }) // Group changes changeset.changes.forEach(change => { const level = change.criticality.level if (groups[level]) { groups[level].push(change) } }) // Return only non-empty groups in order return CRITICALITY_LEVELS .filter(level => groups[level].length > 0) .map(level => ({ level, changes: groups[level], })) }, [changeset.changes]) return (

{renderDate(changeset.date)}

{groupedChanges.map(group => ( {group.changes.map(change => ( ))} ))}
) } const Change: React.FC<{ change: GraphqlChange.Change; schema: GrafaidOld.Schema.Schema }> = ( { change, schema }, ) => { if (GraphqlChange.Group.isTypeOperation(change)) { return } else if (GraphqlChange.Group.isTypeDescription(change)) { return } else if (GraphqlChange.Group.isFieldOperation(change)) { return } else if (GraphqlChange.Group.isFieldDescription(change)) { return } else if (GraphqlChange.Group.isFieldDeprecation(change)) { return } else if (GraphqlChange.Group.isFieldDeprecationReason(change)) { return } else if (GraphqlChange.Group.isFieldArgumentOperation(change)) { return } else if (GraphqlChange.Group.isFieldArgument(change)) { return } else if (GraphqlChange.Group.isFieldArgumentDescription(change)) { return } else if (GraphqlChange.Group.isEnumValueOperation(change)) { return } else if (GraphqlChange.Group.isEnumValueDescription(change)) { return } else if (GraphqlChange.Group.isEnumValueDeprecationReason(change)) { return } else if (GraphqlChange.Group.isInputFieldOperation(change)) { return } else if (GraphqlChange.Group.isInputFieldDescription(change)) { return } else if (GraphqlChange.Group.isInputFieldDefaultValue(change)) { return } else if (GraphqlChange.Group.isUnionMemberOperation(change)) { return } else if (GraphqlChange.Group.isObjectTypeInterfaceOperation(change)) { return } else if (GraphqlChange.Group.isDirectiveOperation(change)) { return } else if (GraphqlChange.Group.isDirectiveDescription(change)) { return } else if (GraphqlChange.Group.isDirectiveLocationOperation(change)) { return } else if (GraphqlChange.Group.isDirectiveArgumentOperation(change)) { return } else if (GraphqlChange.Group.isDirectiveArgument(change)) { return } else if (GraphqlChange.Group.isDirectiveArgumentDescription(change)) { return } else if (GraphqlChange.Group.isSchemaRootType(change)) { return } else if (GraphqlChange.Group.isDirectiveUsage(change)) { return } else { neverCase(change) } }