mirror of
https://github.com/filecoin-project/slate.git
synced 2024-11-22 12:24:02 +03:00
200 lines
4.2 KiB
JavaScript
200 lines
4.2 KiB
JavaScript
import * as Strings from "~/common/strings";
|
|
import * as Environment from "~/common/environment";
|
|
import * as Validations from "~/common/validations";
|
|
|
|
export const getById = (id, viewer) => {
|
|
let target;
|
|
|
|
if (id) {
|
|
target = navigation.find((each) => each.id === id);
|
|
}
|
|
if (!target) {
|
|
return { ...errorPage };
|
|
}
|
|
|
|
if (viewer && target.id === authPage.id) {
|
|
return { ...dataPage }; //NOTE(martina): authenticated users should be redirected to the home page rather than the
|
|
}
|
|
|
|
if (!viewer && !target.externalAllowed) {
|
|
return { ...authPage }; //NOTE(martina): redirect to sign in page if try to access internal page while logged out
|
|
}
|
|
|
|
return { ...target };
|
|
};
|
|
|
|
export const getByHref = (href, viewer) => {
|
|
let pathname;
|
|
|
|
if (href) {
|
|
pathname = href.split("?")[0];
|
|
}
|
|
if (!pathname) {
|
|
return { page: { ...errorPage } };
|
|
}
|
|
if (pathname === "/_") {
|
|
return { page: { ...dataPage } };
|
|
}
|
|
|
|
let page = navigation.find((each) => pathname.startsWith(each.pathname));
|
|
|
|
if (Validations.isAppRoute(pathname) && !page) {
|
|
return { page: { ...errorPage } };
|
|
}
|
|
|
|
let details;
|
|
if (page) {
|
|
page = { ...page };
|
|
if (page.id === "NAV_SLATE" || page.id === "NAV_PROFILE") {
|
|
details = {
|
|
id: pathname.replace(page.pathname, ""),
|
|
};
|
|
}
|
|
} else {
|
|
let params = pathname.slice(1).split("/");
|
|
if (params.length === 1) {
|
|
page = { ...profilePage };
|
|
details = {
|
|
username: params[0],
|
|
};
|
|
} else if (params.length === 2) {
|
|
page = { ...slatePage };
|
|
details = {
|
|
username: params[0],
|
|
slatename: params[1],
|
|
};
|
|
}
|
|
}
|
|
page.pathname = href;
|
|
|
|
let redirected = false;
|
|
|
|
if (viewer && page.id === authPage.id) {
|
|
redirected = true;
|
|
page = { ...dataPage };
|
|
}
|
|
|
|
if (!viewer && !page.externalAllowed) {
|
|
redirected = true;
|
|
page = { ...authPage }; //NOTE(martina): redirect to sign in page if try to access internal page while logged out
|
|
}
|
|
|
|
if (!page) {
|
|
window.location.replace("/_/404");
|
|
}
|
|
|
|
//NOTE(martina): to transform query params into more easily usable key value pairs in page
|
|
if (!redirected) {
|
|
let params = Strings.getParamsFromUrl(href);
|
|
page.params = params;
|
|
}
|
|
return { page, details, redirected };
|
|
};
|
|
|
|
const authPage = {
|
|
id: "NAV_SIGN_IN",
|
|
name: "Sign in",
|
|
pageTitle: "Sign in & Sign up",
|
|
pathname: "/_/auth",
|
|
ignore: true,
|
|
externalAllowed: true,
|
|
};
|
|
|
|
const dataPage = {
|
|
id: "NAV_DATA",
|
|
name: "My Slate",
|
|
pageTitle: "My Slate",
|
|
pathname: "/_/data",
|
|
mainNav: true,
|
|
};
|
|
|
|
const collectionsPage = {
|
|
id: "NAV_SLATES",
|
|
name: "Collections",
|
|
pageTitle: "Your Collections",
|
|
ignore: true,
|
|
pathname: "/_/collections",
|
|
mainNav: true,
|
|
};
|
|
|
|
const activityPage = {
|
|
id: "NAV_ACTIVITY",
|
|
name: "Activity",
|
|
pageTitle: "Activity",
|
|
ignore: true,
|
|
externalAllowed: true,
|
|
pathname: "/_/activity",
|
|
mainNav: Environment.ACTIVITY_FEATURE_FLAG,
|
|
};
|
|
|
|
const slatePage = {
|
|
id: "NAV_SLATE",
|
|
name: "Collection",
|
|
pageTitle: "A Collection",
|
|
ignore: true,
|
|
externalAllowed: true,
|
|
pathname: "/$/slate/",
|
|
};
|
|
|
|
const profilePage = {
|
|
id: "NAV_PROFILE",
|
|
name: "Profile",
|
|
pageTitle: "A Profile",
|
|
ignore: true,
|
|
externalAllowed: true,
|
|
pathname: "/$/user/",
|
|
};
|
|
|
|
const errorPage = {
|
|
id: "NAV_ERROR",
|
|
name: "404",
|
|
pageTitle: "404 Not found",
|
|
ignore: true,
|
|
externalAllowed: true,
|
|
pathname: "/_/404",
|
|
};
|
|
|
|
export const navigation = [
|
|
errorPage,
|
|
authPage,
|
|
...(Environment.ACTIVITY_FEATURE_FLAG ? [activityPage] : []),
|
|
collectionsPage,
|
|
dataPage,
|
|
// {
|
|
// id: "NAV_SEARCH",
|
|
// name: "Search",
|
|
// pageTitle: "Search Slate",
|
|
// ignore: true,
|
|
// pathname: "/_/search",
|
|
// mainNav: true,
|
|
// },
|
|
// {
|
|
// id: "NAV_DIRECTORY",
|
|
// name: "Directory",
|
|
// pageTitle: "Your Following",
|
|
// pathname: "/_/directory",
|
|
// },
|
|
slatePage,
|
|
{
|
|
id: "NAV_API",
|
|
name: "API",
|
|
pageTitle: "Developer API",
|
|
pathname: "/_/api",
|
|
},
|
|
{
|
|
id: "NAV_SETTINGS",
|
|
name: "Settings",
|
|
pageTitle: "Profile & Account Settings",
|
|
ignore: true,
|
|
pathname: "/_/settings",
|
|
},
|
|
profilePage,
|
|
// {
|
|
// id: "NAV_FILE",
|
|
// name: "File",
|
|
// pageTitle: "A File",
|
|
// ignore: true,
|
|
// externalAllowed: true,
|
|
// },
|
|
];
|