69 lines
2.2 KiB
JavaScript
69 lines
2.2 KiB
JavaScript
// 当前两个产品选项同时决定 OpenAPI GenealogyCreate/UpdateBody 的
|
|
// visibility 与 joinMode,因此它们是“访问预设”,不是单一可见范围。
|
|
export const GENEALOGY_ACCESS_PRESET = Object.freeze({
|
|
MEMBER_ONLY: "MEMBER_ONLY",
|
|
PUBLIC_APPLY: "PUBLIC_APPLY",
|
|
});
|
|
|
|
export const GENEALOGY_VISIBILITY = Object.freeze({
|
|
PRIVATE: "0",
|
|
PUBLIC: "1",
|
|
MEMBER_ONLY: "2",
|
|
});
|
|
|
|
export const GENEALOGY_JOIN_MODE = Object.freeze({
|
|
CLOSED: "0",
|
|
REVIEW: "1",
|
|
INVITATION: "2",
|
|
});
|
|
|
|
export const GENEALOGY_ACCESS_PRESET_OPTIONS = Object.freeze([
|
|
Object.freeze({
|
|
value: GENEALOGY_ACCESS_PRESET.MEMBER_ONLY,
|
|
label: "仅成员可见",
|
|
}),
|
|
Object.freeze({
|
|
value: GENEALOGY_ACCESS_PRESET.PUBLIC_APPLY,
|
|
label: "公开可申请",
|
|
}),
|
|
]);
|
|
|
|
export const isGenealogyAccessPreset = (preset) =>
|
|
Object.values(GENEALOGY_ACCESS_PRESET).includes(preset);
|
|
|
|
export const isGenealogyVisibility = (value) =>
|
|
Object.values(GENEALOGY_VISIBILITY).includes(value);
|
|
|
|
export const isGenealogyJoinMode = (value) =>
|
|
Object.values(GENEALOGY_JOIN_MODE).includes(value);
|
|
|
|
// OpenAPI 为两个字段分别声明了 0/1/2,但当前产品只提供以下两个完整预设。
|
|
// 其他合法组合不能被悄悄改写成相近选项,页面应明确显示“访问规则待确认”。
|
|
const apiAccessByPreset = Object.freeze({
|
|
[GENEALOGY_ACCESS_PRESET.MEMBER_ONLY]: Object.freeze({
|
|
visibility: GENEALOGY_VISIBILITY.MEMBER_ONLY,
|
|
joinMode: GENEALOGY_JOIN_MODE.CLOSED,
|
|
}),
|
|
[GENEALOGY_ACCESS_PRESET.PUBLIC_APPLY]: Object.freeze({
|
|
visibility: GENEALOGY_VISIBILITY.PUBLIC,
|
|
joinMode: GENEALOGY_JOIN_MODE.REVIEW,
|
|
}),
|
|
});
|
|
|
|
export const getGenealogyAccessPresetLabel = (preset) =>
|
|
GENEALOGY_ACCESS_PRESET_OPTIONS.find((item) => item.value === preset)
|
|
?.label || "访问规则待确认";
|
|
|
|
export const toApiGenealogyAccess = (preset) => {
|
|
const access = apiAccessByPreset[preset];
|
|
return access ? { ...access } : null;
|
|
};
|
|
|
|
export const fromApiGenealogyAccess = ({ visibility, joinMode } = {}) => {
|
|
const match = Object.entries(apiAccessByPreset).find(
|
|
([, access]) =>
|
|
access.visibility === visibility && access.joinMode === joinMode,
|
|
);
|
|
return match?.[0] || null;
|
|
};
|