76 lines
2.4 KiB
TypeScript
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
|
|
);
|
|
}
|