import React from 'react';
import {
AboutPage,
AuthenticationPage,
CheckoutPage,
ContactDetailsPage,
EditListingPage,
EmailVerificationPage,
InboxPage,
LandingPage,
ListingPage,
ManageListingsPage,
NotFoundPage,
PasswordChangePage,
PasswordRecoveryPage,
PasswordResetPage,
PayoutPreferencesPage,
PrivacyPolicyPage,
ProfilePage,
ProfileSettingsPage,
SearchPage,
StyleguidePage,
TermsOfServicePage,
TransactionPage,
} from './containers';
// routeConfiguration needs to initialize containers first
// Otherwise, components will import form container eventually and
// at that point css bundling / imports will happen in wrong order.
import { NamedRedirect } from './components';
export const ACCOUNT_SETTINGS_PAGES = [
'ContactDetailsPage',
'PasswordChangePage',
'PayoutPreferencesPage',
];
// https://en.wikipedia.org/wiki/Universally_unique_identifier#Nil_UUID
const draftId = '00000000-0000-0000-0000-000000000000';
const draftSlug = 'draft';
const RedirectToLandingPage = () => ;
// Our routes are exact by default.
// See behaviour from Routes.js where Route is created.
const routeConfiguration = () => {
return [
{
path: '/',
name: 'LandingPage',
component: props => ,
},
{
path: '/about',
name: 'AboutPage',
component: AboutPage,
},
{
path: '/s',
name: 'SearchPage',
component: props => ,
loadData: SearchPage.loadData,
},
{
path: '/s/filters',
name: 'SearchFiltersPage',
component: props => ,
loadData: SearchPage.loadData,
},
{
path: '/s/listings',
name: 'SearchListingsPage',
component: props => ,
loadData: SearchPage.loadData,
},
{
path: '/s/map',
name: 'SearchMapPage',
component: props => ,
loadData: SearchPage.loadData,
},
{
path: '/l',
name: 'ListingBasePage',
component: RedirectToLandingPage,
},
{
path: '/l/:slug/:id',
name: 'ListingPage',
component: props => ,
loadData: ListingPage.loadData,
},
{
path: '/l/:slug/:id/checkout',
name: 'CheckoutPage',
auth: true,
component: props => ,
setInitialValues: CheckoutPage.setInitialValues,
},
{
path: '/l/:slug/:id/:variant',
name: 'ListingPageVariant',
auth: true,
authPage: 'LoginPage',
component: props => ,
loadData: ListingPage.loadData,
},
{
path: '/l/new',
name: 'NewListingPage',
auth: true,
component: () => (
),
},
{
path: '/l/:slug/:id/:type/:tab',
name: 'EditListingPage',
auth: true,
component: props => ,
loadData: EditListingPage.loadData,
},
// Canonical path should be after the `/l/new` path since they
// conflict and `new` is not a valid listing UUID.
{
path: '/l/:id',
name: 'ListingPageCanonical',
component: props => ,
loadData: ListingPage.loadData,
},
{
path: '/u',
name: 'ProfileBasePage',
component: RedirectToLandingPage,
},
{
path: '/u/:id',
name: 'ProfilePage',
component: props => ,
loadData: ProfilePage.loadData,
},
{
path: '/profile-settings',
name: 'ProfileSettingsPage',
auth: true,
authPage: 'LoginPage',
component: props => ,
},
{
path: '/login',
name: 'LoginPage',
component: props => ,
},
{
path: '/signup',
name: 'SignupPage',
component: props => ,
},
{
path: '/recover-password',
name: 'PasswordRecoveryPage',
component: props => ,
},
{
path: '/inbox',
name: 'InboxBasePage',
auth: true,
authPage: 'LoginPage',
component: () => ,
},
{
path: '/inbox/:tab',
name: 'InboxPage',
auth: true,
authPage: 'LoginPage',
component: props => ,
loadData: InboxPage.loadData,
},
{
path: '/order/:id',
name: 'OrderPage',
auth: true,
authPage: 'LoginPage',
component: props => ,
},
{
path: '/order/:id/details',
name: 'OrderDetailsPage',
auth: true,
authPage: 'LoginPage',
component: props => ,
loadData: TransactionPage.loadData,
setInitialValues: TransactionPage.setInitialValues,
},
{
path: '/sale/:id',
name: 'SalePage',
auth: true,
authPage: 'LoginPage',
component: props => ,
},
{
path: '/sale/:id/details',
name: 'SaleDetailsPage',
auth: true,
authPage: 'LoginPage',
component: props => ,
loadData: TransactionPage.loadData,
},
{
path: '/listings',
name: 'ManageListingsPage',
auth: true,
authPage: 'LoginPage',
component: props => ,
loadData: ManageListingsPage.loadData,
},
{
path: '/account',
name: 'AccountSettingsPage',
auth: true,
authPage: 'LoginPage',
component: () => ,
},
{
path: '/account/contact-details',
name: 'ContactDetailsPage',
auth: true,
authPage: 'LoginPage',
component: props => ,
loadData: ContactDetailsPage.loadData,
},
{
path: '/account/change-password',
name: 'PasswordChangePage',
auth: true,
authPage: 'LoginPage',
component: props => ,
},
{
path: '/account/payments',
name: 'PayoutPreferencesPage',
auth: true,
authPage: 'LoginPage',
component: props => ,
loadData: PayoutPreferencesPage.loadData,
},
{
path: '/terms-of-service',
name: 'TermsOfServicePage',
component: props => ,
},
{
path: '/privacy-policy',
name: 'PrivacyPolicyPage',
component: props => ,
},
{
path: '/styleguide',
name: 'Styleguide',
component: props => ,
},
{
path: '/styleguide/g/:group',
name: 'StyleguideGroup',
component: props => ,
},
{
path: '/styleguide/c/:component',
name: 'StyleguideComponent',
component: props => ,
},
{
path: '/styleguide/c/:component/:example',
name: 'StyleguideComponentExample',
component: props => ,
},
{
path: '/styleguide/c/:component/:example/raw',
name: 'StyleguideComponentExampleRaw',
component: props => ,
},
{
path: '/notfound',
name: 'NotFoundPage',
component: props => ,
},
// Do not change this path!
//
// The API expects that the application implements /reset-password endpoint
{
path: '/reset-password',
name: 'PasswordResetPage',
component: props => ,
},
// Do not change this path!
//
// The API expects that the application implements /verify-email endpoint
{
path: '/verify-email',
name: 'EmailVerificationPage',
auth: true,
authPage: 'LoginPage',
component: props => ,
},
];
};
export default routeConfiguration;