polen
Version:
A framework for delightful GraphQL developer portals
125 lines • 5.71 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { CRITICALITY_LEVELS } from '#lib/graphql-change/criticality';
import { GraphqlChange } from '#lib/graphql-change/index';
import { Box } from '@radix-ui/themes';
import { neverCase } from '@wollybeard/kit/language';
import { useMemo } from 'react';
import { CriticalitySection } from './Changelog/CriticalitySection.js';
import * as Group from './Changelog/groups/index.js';
export const renderDate = (date) => {
return date.toLocaleString(`default`, {
month: `long`,
year: `numeric`,
day: `numeric`,
timeZone: `utc`,
});
};
export const Changelog = ({ schema }) => {
return (_jsx(Box, { children: schema.versions.map(changeset => _jsx(Changeset, { changeset: changeset }, changeset.date.toISOString())) }));
};
const Changeset = ({ changeset }) => {
// Group changes by criticality level
const groupedChanges = useMemo(() => {
const groups = {};
// 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 (_jsxs(Box, { mb: '6', children: [_jsx("h1", { title: changeset.date.toISOString(), id: changeset.date.toISOString(), children: renderDate(changeset.date) }), groupedChanges.map(group => (_jsx(CriticalitySection, { level: group.level, changes: group.changes, children: group.changes.map(change => (_jsx(Change, { change: change, schema: changeset.after }, `${change.type}-${change.path || change.message}`))) }, group.level)))] }));
};
const Change = ({ change, schema }) => {
if (GraphqlChange.Group.isTypeOperation(change)) {
return _jsx(Group.TypeOperation, { change: change });
}
else if (GraphqlChange.Group.isTypeDescription(change)) {
return _jsx(Group.TypeDescription, { change: change });
}
else if (GraphqlChange.Group.isFieldOperation(change)) {
return _jsx(Group.FieldOperation, { change: change });
}
else if (GraphqlChange.Group.isFieldDescription(change)) {
return _jsx(Group.FieldDescription, { change: change });
}
else if (GraphqlChange.Group.isFieldDeprecation(change)) {
return _jsx(Group.FieldDeprecation, { change: change });
}
else if (GraphqlChange.Group.isFieldDeprecationReason(change)) {
return _jsx(Group.FieldDeprecationReason, { change: change });
}
else if (GraphqlChange.Group.isFieldArgumentOperation(change)) {
return _jsx(Group.FieldArgumentOperation, { change: change });
}
else if (GraphqlChange.Group.isFieldArgument(change)) {
return _jsx(Group.FieldArgument, { change: change });
}
else if (GraphqlChange.Group.isFieldArgumentDescription(change)) {
return _jsx(Group.FieldArgumentDescription, { change: change });
}
else if (GraphqlChange.Group.isEnumValueOperation(change)) {
return _jsx(Group.EnumValueOperation, { change: change });
}
else if (GraphqlChange.Group.isEnumValueDescription(change)) {
return _jsx(Group.EnumValueDescription, { change: change });
}
else if (GraphqlChange.Group.isEnumValueDeprecationReason(change)) {
return _jsx(Group.EnumValueDeprecationReason, { change: change });
}
else if (GraphqlChange.Group.isInputFieldOperation(change)) {
return _jsx(Group.InputFieldOperation, { change: change });
}
else if (GraphqlChange.Group.isInputFieldDescription(change)) {
return _jsx(Group.InputFieldDescription, { change: change });
}
else if (GraphqlChange.Group.isInputFieldDefaultValue(change)) {
return _jsx(Group.InputFieldDefaultValue, { change: change });
}
else if (GraphqlChange.Group.isUnionMemberOperation(change)) {
return _jsx(Group.UnionMemberOperation, { change: change });
}
else if (GraphqlChange.Group.isObjectTypeInterfaceOperation(change)) {
return _jsx(Group.ObjectTypeInterfaceOperation, { change: change });
}
else if (GraphqlChange.Group.isDirectiveOperation(change)) {
return _jsx(Group.DirectiveOperation, { change: change });
}
else if (GraphqlChange.Group.isDirectiveDescription(change)) {
return _jsx(Group.DirectiveDescription, { change: change });
}
else if (GraphqlChange.Group.isDirectiveLocationOperation(change)) {
return _jsx(Group.DirectiveLocationOperation, { change: change });
}
else if (GraphqlChange.Group.isDirectiveArgumentOperation(change)) {
return _jsx(Group.DirectiveArgumentOperation, { change: change });
}
else if (GraphqlChange.Group.isDirectiveArgument(change)) {
return _jsx(Group.DirectiveArgument, { change: change });
}
else if (GraphqlChange.Group.isDirectiveArgumentDescription(change)) {
return _jsx(Group.DirectiveArgumentDescription, { change: change });
}
else if (GraphqlChange.Group.isSchemaRootType(change)) {
return _jsx(Group.SchemaRootType, { change: change });
}
else if (GraphqlChange.Group.isDirectiveUsage(change)) {
return _jsx(Group.DirectiveUsage, { change: change });
}
else {
neverCase(change);
}
};
//# sourceMappingURL=Changelog.js.map