Files
community-rule/lib/create/methodCardFacetMatchesPresetForId.ts
T
2026-05-08 20:32:24 -06:00

76 lines
2.4 KiB
TypeScript

import type {
CommunicationMethodDetailEntry,
ConflictManagementDetailEntry,
DecisionApproachDetailEntry,
MembershipMethodDetailEntry,
} from "../../app/(app)/create/types";
import {
communicationPresetFor,
conflictManagementPresetFor,
decisionApproachPresetFor,
membershipPresetFor,
} from "./finalReviewChipPresets";
function stringArraysEqual(a: readonly string[], b: readonly string[]): boolean {
if (a.length !== b.length) return false;
return a.every((v, i) => v === b[i]);
}
/** True when communication facet text matches {@link communicationPresetFor} for this card id. */
export function communicationMethodFacetMatchesPreset(
details: CommunicationMethodDetailEntry | undefined,
cardId: string,
): boolean {
if (!details) return true;
const p = communicationPresetFor(cardId);
return (
details.corePrinciple === p.corePrinciple &&
details.logisticsAdmin === p.logisticsAdmin &&
details.codeOfConduct === p.codeOfConduct
);
}
export function membershipMethodFacetMatchesPreset(
details: MembershipMethodDetailEntry | undefined,
cardId: string,
): boolean {
if (!details) return true;
const p = membershipPresetFor(cardId);
return (
details.eligibility === p.eligibility &&
details.joiningProcess === p.joiningProcess &&
details.expectations === p.expectations
);
}
export function decisionApproachFacetMatchesPreset(
details: DecisionApproachDetailEntry | undefined,
cardId: string,
): boolean {
if (!details) return true;
const p = decisionApproachPresetFor(cardId);
return (
details.corePrinciple === p.corePrinciple &&
stringArraysEqual(details.applicableScope, p.applicableScope) &&
stringArraysEqual(details.selectedApplicableScope, p.selectedApplicableScope) &&
details.stepByStepInstructions === p.stepByStepInstructions &&
details.consensusLevel === p.consensusLevel &&
details.objectionsDeadlocks === p.objectionsDeadlocks
);
}
export function conflictManagementFacetMatchesPreset(
details: ConflictManagementDetailEntry | undefined,
cardId: string,
): boolean {
if (!details) return true;
const p = conflictManagementPresetFor(cardId);
return (
details.corePrinciple === p.corePrinciple &&
stringArraysEqual(details.applicableScope, p.applicableScope) &&
stringArraysEqual(details.selectedApplicableScope, p.selectedApplicableScope) &&
details.processProtocol === p.processProtocol &&
details.restorationFallbacks === p.restorationFallbacks
);
}