mirror of
https://github.com/kingomarnajjar/flex-template-web.git
synced 2026-07-26 06:47:17 +10:00
376 lines
10 KiB
JavaScript
376 lines
10 KiB
JavaScript
import * as custom from './marketplace-custom-config.js';
|
|
import defaultLocationSearches from './default-location-searches';
|
|
|
|
const env = process.env.REACT_APP_ENV;
|
|
const dev = process.env.REACT_APP_ENV === 'development';
|
|
|
|
// If you want to change the language, remember to also change the
|
|
// locale data and the messages in the app.js file.
|
|
const locale = 'en';
|
|
const i18n = {
|
|
/*
|
|
0: Sunday
|
|
1: Monday
|
|
...
|
|
6: Saturday
|
|
*/
|
|
firstDayOfWeek: 0,
|
|
};
|
|
|
|
// Should search results be ordered by distance to origin.
|
|
const sortSearchByDistance = false;
|
|
|
|
// API supports custom processes to be used in booking process.
|
|
// We need to specify it when we are initiating a new order
|
|
// (or fetching price information by calling 'initiateSpeculative' endpoint).
|
|
//
|
|
// In a way, 'processAlias' defines which transaction process (or processes)
|
|
// this particular web application is able to handle.
|
|
const bookingProcessAlias = 'preauth-with-nightly-booking/release-1';
|
|
|
|
// The transaction line item code for the main unit type in bookings.
|
|
//
|
|
// Possible values: ['line-item/night', 'line-item/day', 'line-item/units';]
|
|
//
|
|
// Note: if you change this, many of the generic translations will
|
|
// still show information about nights. Make sure to go through the
|
|
// translations when the unit is changed.
|
|
const bookingUnitType = 'line-item/night';
|
|
|
|
// Should the application fetch available time slots (currently defined as
|
|
// start and end dates) to be shown on listing page.
|
|
const fetchAvailableTimeSlots = process.env.REACT_APP_AVAILABILITY_ENABLED === 'true';
|
|
|
|
// A maximum number of days forwards during which a booking can be made.
|
|
// This is limited due to Stripe holding funds up to 90 days from the
|
|
// moment they are charged. Also note that available time slots can only
|
|
// be fetched for 180 days in the future.
|
|
const dayCountAvailableForBooking = 90;
|
|
|
|
// To pass environment variables to the client app in the build
|
|
// script, react-scripts (and the sharetribe-scripts fork of
|
|
// react-scripts) require using the REACT_APP_ prefix to avoid
|
|
// exposing server secrets to the client side.
|
|
const sdkClientId = process.env.REACT_APP_SHARETRIBE_SDK_CLIENT_ID;
|
|
const sdkBaseUrl = process.env.REACT_APP_SHARETRIBE_SDK_BASE_URL;
|
|
const sdkTransitVerbose = process.env.REACT_APP_SHARETRIBE_SDK_TRANSIT_VERBOSE === 'true';
|
|
|
|
const currency = process.env.REACT_APP_SHARETRIBE_MARKETPLACE_CURRENCY;
|
|
|
|
// Listing minimum price in currency sub units, e.g. cents.
|
|
// 0 means no restriction to the price
|
|
const listingMinimumPriceSubUnits = 0;
|
|
|
|
// Sentry DSN (Data Source Name), a client key for authenticating calls to Sentry
|
|
const sentryDsn = process.env.REACT_APP_PUBLIC_SENTRY_DSN;
|
|
|
|
// If webapp is using SSL (i.e. it's behind 'https' protocol)
|
|
const usingSSL = process.env.REACT_APP_SHARETRIBE_USING_SSL === 'true';
|
|
|
|
// Currency formatting options.
|
|
// See: https://github.com/yahoo/react-intl/wiki/API#formatnumber
|
|
//
|
|
// TODO: Remove this and hide formating within the util/currency module
|
|
const currencyConfig = {
|
|
style: 'currency',
|
|
currency,
|
|
currencyDisplay: 'symbol',
|
|
useGrouping: true,
|
|
minimumFractionDigits: 2,
|
|
maximumFractionDigits: 2,
|
|
};
|
|
|
|
const stripePublishableKey = process.env.REACT_APP_STRIPE_PUBLISHABLE_KEY;
|
|
|
|
// Stripe only supports payments in certain countries, see full list
|
|
// at https://stripe.com/global
|
|
//
|
|
// We currently only support EU countries, US, and AU.
|
|
const stripeSupportedCountries = [
|
|
{
|
|
// Australia
|
|
code: 'AU',
|
|
currency: 'AUD',
|
|
payoutAddressRequired: false,
|
|
accountConfig: {
|
|
bsb: true,
|
|
accountNumber: true,
|
|
},
|
|
},
|
|
{
|
|
// Austria
|
|
code: 'AT',
|
|
currency: 'EUR',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// Belgium
|
|
code: 'BE',
|
|
currency: 'EUR',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// Denmark
|
|
code: 'DK',
|
|
currency: 'DKK',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// Finland
|
|
code: 'FI',
|
|
currency: 'EUR',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// France
|
|
code: 'FR',
|
|
currency: 'EUR',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// Germany
|
|
code: 'DE',
|
|
currency: 'EUR',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// Ireland
|
|
code: 'IE',
|
|
currency: 'EUR',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// Italy
|
|
code: 'IT',
|
|
currency: 'EUR',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// Luxembourg
|
|
code: 'LU',
|
|
currency: 'EUR',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// Netherlands
|
|
code: 'NL',
|
|
currency: 'EUR',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// Portugal
|
|
code: 'PT',
|
|
currency: 'EUR',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// Spain
|
|
code: 'ES',
|
|
currency: 'EUR',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// Sweden
|
|
code: 'SE',
|
|
currency: 'SEK',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
iban: true,
|
|
},
|
|
},
|
|
{
|
|
// United Kingdom
|
|
code: 'GB',
|
|
currency: 'GBP',
|
|
payoutAddressRequired: true,
|
|
accountConfig: {
|
|
sortCode: true,
|
|
accountNumber: true,
|
|
},
|
|
},
|
|
{
|
|
// United States
|
|
code: 'US',
|
|
currency: 'USD',
|
|
payoutAddressRequired: false,
|
|
accountConfig: {
|
|
routingNumber: true,
|
|
accountNumber: true,
|
|
},
|
|
},
|
|
];
|
|
|
|
// Address information is used in SEO schema for Organization (http://schema.org/PostalAddress)
|
|
const addressCountry = 'FI';
|
|
const addressRegion = 'Helsinki';
|
|
const postalCode = '00100';
|
|
const streetAddress = 'Bulevardi 14';
|
|
|
|
// Canonical root url is needed in social media sharing and SEO optimization purposes.
|
|
const canonicalRootURL = process.env.REACT_APP_CANONICAL_ROOT_URL;
|
|
|
|
// Site title is needed in meta tags (bots and social media sharing reads those)
|
|
const siteTitle = 'Saunatime';
|
|
|
|
// Twitter handle is needed in meta tags (twitter:site). Start it with '@' character
|
|
const siteTwitterHandle = '@sharetribe';
|
|
|
|
// Instagram page is used in SEO schema (http://schema.org/Organization)
|
|
const siteInstagramPage = null;
|
|
|
|
// Facebook page is used in SEO schema (http://schema.org/Organization)
|
|
const siteFacebookPage = 'https://www.facebook.com/Sharetribe/';
|
|
|
|
// Facebook counts shares with app or page associated by this id
|
|
// Currently it is unset, but you can read more about fb:app_id from
|
|
// https://developers.facebook.com/docs/sharing/webmasters#basic
|
|
// You should create one to track social sharing in Facebook
|
|
const facebookAppId = null;
|
|
|
|
const maps = {
|
|
mapboxAccessToken: process.env.REACT_APP_MAPBOX_ACCESS_TOKEN,
|
|
googleMapsAPIKey: process.env.REACT_APP_GOOGLE_MAPS_API_KEY,
|
|
|
|
// The location search input can be configured to show default
|
|
// searches when the user focuses on the input and hasn't yet typed
|
|
// anything. This reduces typing and avoids too many Geolocation API
|
|
// calls for common searches.
|
|
search: {
|
|
// When enabled, the first suggestion is "Current location" that
|
|
// uses the browser Geolocation API to query the user's current
|
|
// location.
|
|
suggestCurrentLocation: process.env.REACT_APP_DEFAULT_SEARCHES_ENABLED === 'true',
|
|
|
|
// Distance in meters for calculating the bounding box around the
|
|
// current location.
|
|
currentLocationBoundsDistance: 1000,
|
|
|
|
// Example location can be edited in the
|
|
// `default-location-searches.js` file.
|
|
defaults:
|
|
process.env.REACT_APP_DEFAULT_SEARCHES_ENABLED === 'true' ? defaultLocationSearches : [],
|
|
},
|
|
|
|
// When fuzzy locations are enabled, coordinates on maps are
|
|
// obfuscated randomly around the actual location.
|
|
//
|
|
// NOTE: This only hides the locations in the UI level, the actual
|
|
// coordinates are still accessible in the HTTP requests and the
|
|
// Redux store.
|
|
fuzzy: {
|
|
enabled: false,
|
|
|
|
// Amount of maximum offset in meters that is applied to obfuscate
|
|
// the original coordinates. The actual value is random, but the
|
|
// obfuscated coordinates are withing a circle that has the same
|
|
// radius as the offset.
|
|
offset: 500,
|
|
|
|
// Default zoom level when showing a single circle on a Map. Should
|
|
// be small enough so the whole circle fits in.
|
|
defaultZoomLevel: 13,
|
|
|
|
// Color of the circle on the Map component.
|
|
circleColor: '#c0392b',
|
|
},
|
|
|
|
// Custom marker image to use in the Map component.
|
|
//
|
|
// NOTE: Not used if fuzzy locations are enabled.
|
|
customMarker: {
|
|
enabled: false,
|
|
|
|
// Publicly accessible URL for the custom marker image.
|
|
//
|
|
// The easiest place is /public/static/icons/ folder, but then the
|
|
// marker image is not available while developing through
|
|
// localhost.
|
|
url: encodeURI(`${canonicalRootURL}/static/icons/map-marker-32x32.png`),
|
|
|
|
// Dimensions of the marker image.
|
|
width: 32,
|
|
height: 32,
|
|
|
|
// Position to anchor the image in relation to the coordinates,
|
|
// ignored when using Mapbox.
|
|
anchorX: 16,
|
|
anchorY: 32,
|
|
},
|
|
};
|
|
|
|
// NOTE: only expose configuration that should be visible in the
|
|
// client side, don't add any server secrets in this file.
|
|
const config = {
|
|
env,
|
|
dev,
|
|
locale,
|
|
bookingProcessAlias,
|
|
bookingUnitType,
|
|
fetchAvailableTimeSlots,
|
|
dayCountAvailableForBooking,
|
|
i18n,
|
|
sdk: {
|
|
clientId: sdkClientId,
|
|
baseUrl: sdkBaseUrl,
|
|
transitVerbose: sdkTransitVerbose,
|
|
},
|
|
sortSearchByDistance,
|
|
currency,
|
|
listingMinimumPriceSubUnits,
|
|
currencyConfig,
|
|
stripe: { publishableKey: stripePublishableKey, supportedCountries: stripeSupportedCountries },
|
|
canonicalRootURL,
|
|
address: {
|
|
addressCountry,
|
|
addressRegion,
|
|
postalCode,
|
|
streetAddress,
|
|
},
|
|
siteTitle,
|
|
siteFacebookPage,
|
|
siteInstagramPage,
|
|
siteTwitterHandle,
|
|
facebookAppId,
|
|
sentryDsn,
|
|
usingSSL,
|
|
maps,
|
|
custom,
|
|
};
|
|
|
|
export default config;
|