474 lines
12 KiB
JavaScript
474 lines
12 KiB
JavaScript
// 本文件是活动页面导航语义的唯一运行时所有者。页面只能使用路由键,
|
|
// 不得自行复制路径、父页、允许来源、参数或流程结果规则。
|
|
const defineRoute = (route) =>
|
|
Object.freeze({
|
|
...route,
|
|
parentParamMap: Object.freeze(route.parentParamMap || {}),
|
|
requiredParams: Object.freeze(route.requiredParams || []),
|
|
optionalParams: Object.freeze(route.optionalParams || []),
|
|
allowedSources: Object.freeze(route.allowedSources || []),
|
|
resultOperations: Object.freeze(route.resultOperations || []),
|
|
});
|
|
|
|
const defineNoticeTarget = (routeKey, params) =>
|
|
Object.freeze({ routeKey, params: Object.freeze(params) });
|
|
|
|
export const NOTICE_TARGETS = Object.freeze({
|
|
GENEALOGY_REVIEW: defineNoticeTarget("G10", ["genealogyId"]),
|
|
GENEALOGY_HOME: defineNoticeTarget("G01", ["genealogyId"]),
|
|
FAMILY_FEED: defineNoticeTarget("F03", ["genealogyId", "feedId"]),
|
|
MEMO_REMINDER: defineNoticeTarget("R10", ["genealogyId", "memoId"]),
|
|
CEREMONY_INVITE: defineNoticeTarget("M11", []),
|
|
});
|
|
|
|
export const ROUTES = Object.freeze({
|
|
A01: defineRoute({
|
|
path: "/pages/auth/sign-in",
|
|
kind: "auth-root",
|
|
parent: null,
|
|
resultOperations: ["password-reset"],
|
|
}),
|
|
A04: defineRoute({
|
|
path: "/pages/auth/register",
|
|
kind: "page",
|
|
parent: "A01",
|
|
allowedSources: ["A01"],
|
|
}),
|
|
A05: defineRoute({
|
|
path: "/pages/auth/reset-password",
|
|
kind: "page",
|
|
parent: "A01",
|
|
allowedSources: ["A01"],
|
|
}),
|
|
G01: defineRoute({
|
|
path: "/pages/genealogy/my-genealogies",
|
|
kind: "root",
|
|
parent: null,
|
|
optionalParams: ["genealogyId"],
|
|
resultOperations: ["genealogy-created"],
|
|
}),
|
|
G03: defineRoute({
|
|
path: "/pages/genealogy/create",
|
|
kind: "flow",
|
|
parent: "G01",
|
|
allowedSources: ["G01"],
|
|
}),
|
|
G05: defineRoute({
|
|
path: "/pages/genealogy/overview",
|
|
kind: "page",
|
|
parent: "G01",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G01", "G03", "G06", "G09"],
|
|
}),
|
|
G06: defineRoute({
|
|
path: "/pages/genealogy/search",
|
|
kind: "page",
|
|
parent: "G01",
|
|
optionalParams: ["mode"],
|
|
allowedSources: ["G01", "G03", "G09"],
|
|
}),
|
|
G08: defineRoute({
|
|
path: "/pages/genealogy/join-application",
|
|
kind: "flow",
|
|
parent: "G06",
|
|
requiredParams: ["genealogyId"],
|
|
optionalParams: ["source", "genealogyName"],
|
|
allowedSources: ["G01", "G05", "G06", "G09"],
|
|
}),
|
|
G09: defineRoute({
|
|
path: "/pages/genealogy/my-applications",
|
|
kind: "page",
|
|
parent: "G01",
|
|
optionalParams: ["status"],
|
|
allowedSources: ["G01", "G05", "G06", "G08"],
|
|
}),
|
|
G10: defineRoute({
|
|
path: "/pages/genealogy/application-review",
|
|
kind: "page",
|
|
parent: "G01",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05", "N01", "N02"],
|
|
}),
|
|
G11: defineRoute({
|
|
path: "/pages/genealogy/settings",
|
|
kind: "flow",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
G12: defineRoute({
|
|
path: "/pages/genealogy/generation-poems",
|
|
kind: "flow",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
G13: defineRoute({
|
|
path: "/pages/genealogy/members",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
G14: defineRoute({
|
|
path: "/pages/genealogy/capability-center",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
T01: defineRoute({
|
|
path: "/pages/tree/overview",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
optionalParams: ["selectedId"],
|
|
allowedSources: ["G05", "T02", "T04", "T06", "T07"],
|
|
}),
|
|
T02: defineRoute({
|
|
path: "/pages/tree/pedigree",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
optionalParams: ["selectedId"],
|
|
allowedSources: ["G05", "T01"],
|
|
}),
|
|
T03: defineRoute({
|
|
path: "/pages/tree/member-profile",
|
|
kind: "single",
|
|
parent: "T01",
|
|
parentParamMap: { selectedId: "personId" },
|
|
requiredParams: ["genealogyId", "personId"],
|
|
allowedSources: ["T01", "T02", "T07", "R02"],
|
|
resultOperations: ["member-open-requested", "member-updated"],
|
|
}),
|
|
T04: defineRoute({
|
|
path: "/pages/tree/add-relative",
|
|
kind: "flow",
|
|
parent: "T01",
|
|
parentParamMap: { selectedId: "personId" },
|
|
requiredParams: ["genealogyId"],
|
|
optionalParams: ["personId", "mode", "relationType"],
|
|
allowedSources: ["T01", "T02"],
|
|
}),
|
|
T05: defineRoute({
|
|
path: "/pages/tree/edit-member",
|
|
kind: "flow",
|
|
parent: "T03",
|
|
requiredParams: ["genealogyId", "personId"],
|
|
allowedSources: ["T01", "T02", "T03"],
|
|
}),
|
|
T06: defineRoute({
|
|
path: "/pages/tree/member-rank",
|
|
kind: "flow",
|
|
parent: "T01",
|
|
parentParamMap: { selectedId: "personId" },
|
|
requiredParams: ["genealogyId", "personId"],
|
|
optionalParams: ["mode"],
|
|
allowedSources: ["T01", "T02"],
|
|
}),
|
|
T07: defineRoute({
|
|
path: "/pages/tree/member-directory",
|
|
kind: "page",
|
|
parent: "T01",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["T01", "T02"],
|
|
}),
|
|
T08: defineRoute({
|
|
path: "/pages/tree/member-states",
|
|
kind: "page",
|
|
parent: "T03",
|
|
requiredParams: ["genealogyId", "personId"],
|
|
allowedSources: ["T03"],
|
|
}),
|
|
F01: defineRoute({
|
|
path: "/pages/family/site-home",
|
|
kind: "root",
|
|
parent: null,
|
|
}),
|
|
F02: defineRoute({
|
|
path: "/pages/family/feed-editor",
|
|
kind: "flow",
|
|
parent: "F12",
|
|
requiredParams: ["genealogyId", "mode"],
|
|
optionalParams: ["feedId"],
|
|
allowedSources: ["F12", "F03"],
|
|
}),
|
|
F03: defineRoute({
|
|
path: "/pages/family/feed-detail",
|
|
kind: "page",
|
|
parent: "F12",
|
|
requiredParams: ["genealogyId", "feedId"],
|
|
allowedSources: ["F12", "F02", "N02"],
|
|
}),
|
|
F12: defineRoute({
|
|
path: "/pages/family/feed",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
F04: defineRoute({
|
|
path: "/pages/family/articles",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05", "M01"],
|
|
}),
|
|
F05: defineRoute({
|
|
path: "/pages/family/article-detail",
|
|
kind: "page",
|
|
parent: "F04",
|
|
requiredParams: ["genealogyId", "articleId"],
|
|
allowedSources: ["F04"],
|
|
}),
|
|
F06: defineRoute({
|
|
path: "/pages/family/article-editor",
|
|
kind: "flow",
|
|
parent: "F04",
|
|
requiredParams: ["genealogyId", "mode"],
|
|
optionalParams: ["articleId"],
|
|
allowedSources: ["F04", "F05"],
|
|
}),
|
|
F07: defineRoute({
|
|
path: "/pages/family/albums",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
F08: defineRoute({
|
|
path: "/pages/family/album-detail",
|
|
kind: "page",
|
|
parent: "F07",
|
|
requiredParams: ["genealogyId", "albumId"],
|
|
allowedSources: ["F07"],
|
|
}),
|
|
F09: defineRoute({
|
|
path: "/pages/family/add-photo",
|
|
kind: "flow",
|
|
parent: "F08",
|
|
requiredParams: ["genealogyId", "albumId"],
|
|
allowedSources: ["F08"],
|
|
}),
|
|
F10: defineRoute({
|
|
path: "/pages/family/videos",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
F13: defineRoute({
|
|
path: "/pages/family/site-article-list",
|
|
kind: "page",
|
|
parent: "F01",
|
|
optionalParams: ["articleType", "title"],
|
|
allowedSources: ["F01", "M01"],
|
|
}),
|
|
R01: defineRoute({
|
|
path: "/pages/records/people",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
R02: defineRoute({
|
|
path: "/pages/records/person-detail",
|
|
kind: "flow",
|
|
parent: "R01",
|
|
requiredParams: ["genealogyId", "mode"],
|
|
optionalParams: ["personId"],
|
|
allowedSources: ["R01"],
|
|
}),
|
|
R03: defineRoute({
|
|
path: "/pages/records/relative-records",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
R04: defineRoute({
|
|
path: "/pages/records/relative-record-editor",
|
|
kind: "flow",
|
|
parent: "R03",
|
|
requiredParams: ["genealogyId", "mode"],
|
|
optionalParams: ["relativeId"],
|
|
allowedSources: ["R03"],
|
|
}),
|
|
R05: defineRoute({
|
|
path: "/pages/records/ceremonies",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
R06: defineRoute({
|
|
path: "/pages/records/ceremony-detail",
|
|
kind: "page",
|
|
parent: "R05",
|
|
requiredParams: ["genealogyId", "ceremonyId"],
|
|
allowedSources: ["R05"],
|
|
}),
|
|
R07: defineRoute({
|
|
path: "/pages/records/ceremony-editor",
|
|
kind: "flow",
|
|
parent: "R05",
|
|
requiredParams: ["genealogyId", "mode"],
|
|
optionalParams: ["ceremonyId"],
|
|
allowedSources: ["R05", "R06"],
|
|
}),
|
|
R08: defineRoute({
|
|
path: "/pages/records/growth-journal",
|
|
kind: "page",
|
|
parent: "R02",
|
|
requiredParams: ["genealogyId", "personId"],
|
|
allowedSources: ["R02", "T03"],
|
|
}),
|
|
R09: defineRoute({
|
|
path: "/pages/records/life-events",
|
|
kind: "page",
|
|
parent: "R02",
|
|
requiredParams: ["genealogyId", "personId"],
|
|
allowedSources: ["R02", "T03"],
|
|
}),
|
|
R10: defineRoute({
|
|
path: "/pages/records/memos",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
optionalParams: ["memoId", "memoType"],
|
|
allowedSources: ["G05", "N02"],
|
|
}),
|
|
R11: defineRoute({
|
|
path: "/pages/records/merit-records",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
R12: defineRoute({
|
|
path: "/pages/records/person-documents",
|
|
kind: "page",
|
|
parent: "G05",
|
|
requiredParams: ["genealogyId"],
|
|
allowedSources: ["G05"],
|
|
}),
|
|
N01: defineRoute({
|
|
path: "/pages/notification/message-center",
|
|
kind: "page",
|
|
parent: "G01",
|
|
optionalParams: ["genealogyId"],
|
|
allowedSources: ["G01", "F01", "M01"],
|
|
}),
|
|
N02: defineRoute({
|
|
path: "/pages/notification/message-detail",
|
|
kind: "page",
|
|
parent: "N01",
|
|
requiredParams: ["id"],
|
|
allowedSources: ["N01"],
|
|
}),
|
|
M01: defineRoute({
|
|
path: "/pages/profile/home",
|
|
kind: "root",
|
|
parent: null,
|
|
}),
|
|
M02: defineRoute({
|
|
path: "/pages/profile/edit-profile",
|
|
kind: "flow",
|
|
parent: "M01",
|
|
allowedSources: ["F01", "M01"],
|
|
}),
|
|
M03: defineRoute({
|
|
path: "/pages/profile/security",
|
|
kind: "page",
|
|
parent: "M01",
|
|
allowedSources: ["M01"],
|
|
}),
|
|
M04: defineRoute({
|
|
path: "/pages/profile/change-password",
|
|
kind: "flow",
|
|
parent: "M03",
|
|
allowedSources: ["M03"],
|
|
}),
|
|
M05: defineRoute({
|
|
path: "/pages/profile/change-phone",
|
|
kind: "flow",
|
|
parent: "M03",
|
|
allowedSources: ["M03"],
|
|
}),
|
|
M06: defineRoute({
|
|
path: "/pages/profile/help",
|
|
kind: "page",
|
|
parent: "M01",
|
|
allowedSources: ["F01", "M01"],
|
|
}),
|
|
M07: defineRoute({
|
|
path: "/pages/profile/feedback",
|
|
kind: "flow",
|
|
parent: "M06",
|
|
allowedSources: ["M01", "M06"],
|
|
}),
|
|
M08: defineRoute({
|
|
path: "/pages/profile/promotions",
|
|
kind: "page",
|
|
parent: "M01",
|
|
allowedSources: ["F01", "M01"],
|
|
}),
|
|
M09: defineRoute({
|
|
path: "/pages/profile/vip",
|
|
kind: "page",
|
|
parent: "M01",
|
|
allowedSources: ["F01", "M01"],
|
|
}),
|
|
M10: defineRoute({
|
|
path: "/pages/profile/settings",
|
|
kind: "page",
|
|
parent: "M01",
|
|
allowedSources: ["F01", "M01"],
|
|
}),
|
|
F11: defineRoute({
|
|
path: "/pages/family/platform-videos",
|
|
kind: "page",
|
|
parent: "F10",
|
|
optionalParams: ["placement", "videoId"],
|
|
allowedSources: ["F10"],
|
|
}),
|
|
M11: defineRoute({
|
|
path: "/pages/profile/ceremony-invitations",
|
|
kind: "page",
|
|
parent: "M01",
|
|
allowedSources: ["F01", "M01", "N02"],
|
|
}),
|
|
M12: defineRoute({
|
|
path: "/pages/profile/earnings",
|
|
kind: "page",
|
|
parent: "M01",
|
|
allowedSources: ["F01", "M01"],
|
|
}),
|
|
M13: defineRoute({
|
|
path: "/pages/profile/compliance-document",
|
|
kind: "page",
|
|
parent: "M10",
|
|
requiredParams: ["documentKey"],
|
|
allowedSources: ["A01", "A04", "M10"],
|
|
}),
|
|
});
|
|
|
|
export const ROOT_ROUTE_KEYS = Object.freeze(["A01", "G01", "F01", "M01"]);
|
|
|
|
export const getRoute = (routeKey) =>
|
|
typeof routeKey === "string" &&
|
|
Object.prototype.hasOwnProperty.call(ROUTES, routeKey)
|
|
? ROUTES[routeKey]
|
|
: null;
|
|
|
|
export const getRouteKeyByPath = (path) => {
|
|
if (typeof path !== "string") return null;
|
|
const normalizedPath = `/${path.replace(/^\/+/, "")}`;
|
|
return (
|
|
Object.keys(ROUTES).find(
|
|
(routeKey) => ROUTES[routeKey].path === normalizedPath,
|
|
) || null
|
|
);
|
|
};
|