From 603ed6e0b372a3aa40c1f1bd9bae2c69e1bd515e Mon Sep 17 00:00:00 2001 From: Yechan Kim Date: Tue, 9 Feb 2021 14:34:58 +0900 Subject: [PATCH 01/17] Default resource limits update to follow the HollaCloud basic policy. --- settings/configmap | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/settings/configmap b/settings/configmap index 4e8675a2a4..8c8d50fd53 100644 --- a/settings/configmap +++ b/settings/configmap @@ -118,24 +118,24 @@ ENVIRONMENT_USER_HOLLAEX_CORE_IMAGE_VERSION=$ENVIRONMENT_DOCKER_IMAGE_VERSION ENVIRONMENT_USER_HOLLAEX_WEB_IMAGE_REGISTRY=bitholla/my-hollaex-web ENVIRONMENT_USER_HOLLAEX_WEB_IMAGE_VERSION=latest -ENVIRONMENT_KUBERNETES_API_CPU_LIMITS=200m +ENVIRONMENT_KUBERNETES_API_CPU_LIMITS=100m ENVIRONMENT_KUBERNETES_API_MEMORY_LIMITS=512Mi -ENVIRONMENT_KUBERNETES_API_CPU_REQUESTS=10m +ENVIRONMENT_KUBERNETES_API_CPU_REQUESTS=50m ENVIRONMENT_KUBERNETES_API_MEMORY_REQUESTS=512Mi -ENVIRONMENT_KUBERNETES_STREAM_CPU_LIMITS=200m +ENVIRONMENT_KUBERNETES_STREAM_CPU_LIMITS=100m ENVIRONMENT_KUBERNETES_STREAM_MEMORY_LIMITS=256Mi -ENVIRONMENT_KUBERNETES_STREAM_CPU_REQUESTS=10m -ENVIRONMENT_KUBERNETES_STREAM_MEMORY_REQUESTS=128Mi +ENVIRONMENT_KUBERNETES_STREAM_CPU_REQUESTS=50m +ENVIRONMENT_KUBERNETES_STREAM_MEMORY_REQUESTS=256Mi ENVIRONMENT_KUBERNETES_POSTGRESQL_CPU_LIMITS=100m -ENVIRONMENT_KUBERNETES_POSTGRESQL_MEMORY_LIMITS=200Mi -ENVIRONMENT_KUBERNETES_POSTGRESQL_CPU_REQUESTS=10m +ENVIRONMENT_KUBERNETES_POSTGRESQL_MEMORY_LIMITS=100Mi +ENVIRONMENT_KUBERNETES_POSTGRESQL_CPU_REQUESTS=100m ENVIRONMENT_KUBERNETES_POSTGRESQL_MEMORY_REQUESTS=100Mi ENVIRONMENT_KUBERNETES_REDIS_CPU_LIMITS=100m -ENVIRONMENT_KUBERNETES_REDIS_MEMORY_LIMITS=200Mi -ENVIRONMENT_KUBERNETES_REDIS_CPU_REQUESTS=10m +ENVIRONMENT_KUBERNETES_REDIS_MEMORY_LIMITS=100Mi +ENVIRONMENT_KUBERNETES_REDIS_CPU_REQUESTS=100m ENVIRONMENT_KUBERNETES_REDIS_MEMORY_REQUESTS=100Mi ENVIRONMENT_KUBERNETES_S3_BACKUP_CRONJOB_RULE='0 1 * * *' From 004e7dd2b6170c6f7539c827f2157bf048ce86c6 Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Mon, 15 Feb 2021 11:08:27 +0330 Subject: [PATCH 02/17] changes for order history columns --- .../_TransactionsHistory.scss | 25 ++ .../containers/TransactionsHistory/index.js | 7 +- .../containers/TransactionsHistory/utils.js | 273 +++++++++++++++++- web/src/index.css | 20 ++ 4 files changed, 321 insertions(+), 4 deletions(-) diff --git a/web/src/containers/TransactionsHistory/_TransactionsHistory.scss b/web/src/containers/TransactionsHistory/_TransactionsHistory.scss index 1101bed94b..7a41c93394 100644 --- a/web/src/containers/TransactionsHistory/_TransactionsHistory.scss +++ b/web/src/containers/TransactionsHistory/_TransactionsHistory.scss @@ -57,6 +57,31 @@ background-color: $history-color-buy; color: $buy-bids-text; } + + &.fullfilled .cell-wrapper { + border: 1px solid $colors-main-border; + margin: 0; + padding: 1px; + min-width: 5rem; + max-width: 7rem; + + > .cell_value-wrapper { + padding: 0 0.15rem; + position: relative; + width: 100%; + color: $trade-fill-indicator-text; + z-index: 2; + + .cell_value-bar { + position: absolute; + left: 0; + top: 0; + bottom: 0; + background-color: $trade-fill-indicator; + z-index: -1; + } + } + } } .amount_text { diff --git a/web/src/containers/TransactionsHistory/index.js b/web/src/containers/TransactionsHistory/index.js index 110fcd30ad..c1ddffe8e7 100644 --- a/web/src/containers/TransactionsHistory/index.js +++ b/web/src/containers/TransactionsHistory/index.js @@ -25,6 +25,7 @@ import { } from '../../components'; import { FLEX_CENTER_CLASSES, BASE_CURRENCY } from '../../config/constants'; import { + generateOrderHistoryHeaders, generateTradeHeaders, generateTradeHeadersMobile, generateDepositsHeaders, @@ -162,8 +163,8 @@ class TransactionsHistory extends Component { this.setState({ headers: { orders: isMobile - ? generateTradeHeadersMobile(symbol, pairs, coins, discount) - : generateTradeHeaders(symbol, pairs, coins, discount, prices), + ? generateOrderHistoryHeaders(symbol, pairs, coins, discount) + : generateOrderHistoryHeaders(symbol, pairs, coins, discount, prices), trades: isMobile ? generateTradeHeadersMobile(symbol, pairs, coins, discount) : generateTradeHeaders(symbol, pairs, coins, discount, prices), @@ -342,7 +343,7 @@ class TransactionsHistory extends Component { case 0: props.stringId = 'ORDER_HISTORY'; props.title = `${STRINGS['ORDER_HISTORY']}`; - props.headers = headers.trades; + props.headers = headers.orders; props.data = orders; props.filename = `order-history-${moment().unix()}`; props.withIcon = false; diff --git a/web/src/containers/TransactionsHistory/utils.js b/web/src/containers/TransactionsHistory/utils.js index e48c559a58..bd5401df66 100644 --- a/web/src/containers/TransactionsHistory/utils.js +++ b/web/src/containers/TransactionsHistory/utils.js @@ -15,7 +15,7 @@ import { DEFAULT_COIN_DATA, } from '../../config/constants'; import { getFormatTimestamp, isBlockchainTx } from '../../utils/utils'; -import { formatToCurrency } from '../../utils/currency'; +import { formatToCurrency, formatBaseAmount } from 'utils/currency'; notification.config({ placement: 'topLeft', @@ -58,6 +58,276 @@ const calculatePrice = (isQuick = false, price, size) => { return price; }; +export const generateOrderHistoryHeaders = ( + symbol, + pairs = {}, + coins, + discount, + prices = {} +) => { + return [ + { + stringId: 'PAIR', + label: STRINGS['PAIR'], + key: 'pair', + exportToCsv: ({ symbol }) => symbol.toUpperCase(), + renderCell: ({ symbol }, key, index) => { + return ( + + {symbol} + + ); + }, + }, + { + stringId: 'TYPE', + label: STRINGS['TYPE'], + key: 'side', + exportToCsv: ({ side = '' }) => side, + renderCell: ({ side = '' }, key, index) => { + return ( + +
+ {STRINGS[`SIDES_VALUES.${side}`]} +
+ + ); + }, + }, + { + stringId: 'SIZE', + label: STRINGS['SIZE'], + key: 'size', + exportToCsv: ({ size = 0, ...data }) => { + if (pairs[data.symbol]) { + const { pair_base, increment_size } = pairs[data.symbol]; + const { min, ...rest } = + coins[pair_base || BASE_CURRENCY] || DEFAULT_COIN_DATA; + const shortName = rest.symbol.toUpperCase(); + return STRINGS.formatString( + CURRENCY_PRICE_FORMAT, + formatToCurrency(size, increment_size), + shortName + ).join(''); + } else { + return size; + } + }, + renderCell: ({ size = 0, ...data }, key, index) => { + if (pairs[data.symbol]) { + const { pair_base, increment_size } = pairs[data.symbol]; + const { min, ...rest } = + coins[pair_base || BASE_CURRENCY] || DEFAULT_COIN_DATA; + const shortName = rest.symbol.toUpperCase(); + return ( + + {STRINGS.formatString( + CURRENCY_PRICE_FORMAT, + formatToCurrency(size, increment_size), + shortName + )} + + ); + } else { + return {size}; + } + }, + }, + { + stringId: 'PRICE', + label: STRINGS['PRICE'], + key: 'price', + exportToCsv: ({ price = 0, size = 0, quick, symbol }) => { + if (pairs[symbol]) { + const { pair_2, increment_price } = pairs[symbol]; + const { min, ...rest } = + coins[pair_2 || BASE_CURRENCY] || DEFAULT_COIN_DATA; + return STRINGS.formatString( + CURRENCY_PRICE_FORMAT, + formatToCurrency( + calculatePrice(quick, price, size), + increment_price + ), + rest.symbol.toUpperCase() + ).join(''); + } else { + return calculatePrice(quick, price, size); + } + }, + renderCell: ({ price = 0, size = 0, quick, symbol }, key, index) => { + if (pairs[symbol]) { + const { pair_2, increment_price } = pairs[symbol]; + const { min, ...rest } = + coins[pair_2 || BASE_CURRENCY] || DEFAULT_COIN_DATA; + return ( + + {STRINGS.formatString( + CURRENCY_PRICE_FORMAT, + formatToCurrency( + calculatePrice(quick, price, size), + increment_price + ), + rest.symbol.toUpperCase() + )} + + ); + } else { + return {calculatePrice(quick, price, size)}; + } + }, + }, + { + stringId: 'AMOUNT', + label: STRINGS['AMOUNT'], + key: 'amount', + exportToCsv: ({ price = 0, size = 0, quick, symbol }) => { + if (pairs[symbol]) { + const { pair_2, increment_price } = pairs[symbol]; + const { min, ...rest } = + coins[pair_2 || BASE_CURRENCY] || DEFAULT_COIN_DATA; + return STRINGS.formatString( + CURRENCY_PRICE_FORMAT, + formatToCurrency( + calculateAmount(quick, price, size), + increment_price + ), + rest.symbol.toUpperCase() + ).join(''); + } else { + return calculateAmount(quick, price, size); + } + }, + renderCell: ({ price = 0, size = 0, quick, symbol }, key, index) => { + if (pairs[symbol]) { + const { pair_2, increment_price } = pairs[symbol]; + const { min, ...rest } = + coins[pair_2 || BASE_CURRENCY] || DEFAULT_COIN_DATA; + return ( + + {STRINGS.formatString( + CURRENCY_PRICE_FORMAT, + formatToCurrency( + calculateAmount(quick, price, size), + increment_price + ), + rest.symbol.toUpperCase() + )} + + ); + } else { + return ( + + {formatToCurrency(calculateAmount(quick, price, size), 0.0001)} + + ); + } + }, + }, + { + label: '', + key: 'status', + renderCell: ({ size = 0, filled = 0 }, key, index) => { + const fullfilled = formatBaseAmount( + mathjs.chain(filled).divide(size).multiply(100).done() + ); + return ( + +
+
+ {STRINGS.formatString(STRINGS['FULLFILLED'], fullfilled)} + +
+
+ + ); + }, + }, + { + label: STRINGS['STATUS'], + key: 'status', + exportToCsv: ({ status }) => status, + renderCell: ({ status }, key, index) => { + return ( + + {status} + + ); + }, + }, + { + stringId: 'FEE,NO_FEE', + label: STRINGS['FEE'], + key: 'fee', + exportToCsv: ({ fee = 0, price = 0, size = 0, quick, symbol, side }) => { + let feeData = discount ? fee - (fee * discount) / 100 : fee; + if (!feeData) { + return calculateFeeAmount(feeData); + } + if (pairs[symbol]) { + const { pair_base, pair_2 } = pairs[symbol]; + const pair = side === 'buy' ? pair_base : pair_2; + const { min, ...rest } = + coins[pair || BASE_CURRENCY] || DEFAULT_COIN_DATA; + return STRINGS.formatString( + CURRENCY_PRICE_FORMAT, + formatToCurrency( + calculateFeeAmount(feeData, quick, price, size, side), + min + ), + rest.symbol.toUpperCase() + ).join(''); + } else { + calculateFeeAmount(feeData, quick, price, size, side); + } + }, + renderCell: ({ fee, price, size, quick, symbol, side }, key, index) => { + let feeData = discount ? fee - (fee * discount) / 100 : fee; + if (!feeData) { + return {calculateFeeAmount(feeData)}; + } + if (pairs[symbol]) { + const { pair_base, pair_2 } = pairs[symbol]; + const pair = side === 'buy' ? pair_base : pair_2; + const { min, ...rest } = + coins[pair || BASE_CURRENCY] || DEFAULT_COIN_DATA; + return ( + + {STRINGS.formatString( + CURRENCY_PRICE_FORMAT, + formatToCurrency( + calculateFeeAmount(feeData, quick, price, size, side), + min, + true + ), + rest.symbol.toUpperCase() + )} + + ); + } else { + calculateFeeAmount(feeData, quick, price, size, side); + } + }, + }, + { + stringId: 'TIME', + label: STRINGS['TIME'], + key: 'updated_at', + className: isMobile ? 'text-center' : '', + exportToCsv: ({ updated_at = '' }) => updated_at, + renderCell: ({ updated_at = '' }, key, index) => { + return ( + + {getFormatTimestamp(updated_at)} + + ); + }, + }, + ]; +}; + export const generateTradeHeaders = ( symbol, pairs, @@ -461,6 +731,7 @@ export const generateWithdrawalsHeaders = ( /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ + /*: {fee}*/ /*: {fee}*/); }, }, diff --git a/web/src/index.css b/web/src/index.css index 38ead05c49..ad1dc7d0ad 100644 --- a/web/src/index.css +++ b/web/src/index.css @@ -1441,6 +1441,26 @@ table th { background-color: var(--trading_buying-related-elements); color: var(--calculated_trading_buying-related-text); } +.cell_box-type.fullfilled .cell-wrapper { + border: 1px solid var(--calculated_important-border); + margin: 0; + padding: 1px; + min-width: 5rem; + max-width: 7rem; } + .cell_box-type.fullfilled .cell-wrapper > .cell_value-wrapper { + padding: 0 0.15rem; + position: relative; + width: 100%; + color: var(--labels_secondary-inactive-label-text-graphics); + z-index: 2; } + .cell_box-type.fullfilled .cell-wrapper > .cell_value-wrapper .cell_value-bar { + position: absolute; + left: 0; + top: 0; + bottom: 0; + background-color: var(--calculated_specials_highlight-box); + z-index: -1; } + .amount_text .positive { color: var(--specials_checks-okay-done); } From 2fd0801e21c4ce76d8b127ccec36b2589be46184 Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Mon, 15 Feb 2021 12:11:12 +0330 Subject: [PATCH 03/17] changes for fee calculation in transactions history tabs --- .../containers/TransactionsHistory/utils.js | 158 ++++-------------- 1 file changed, 32 insertions(+), 126 deletions(-) diff --git a/web/src/containers/TransactionsHistory/utils.js b/web/src/containers/TransactionsHistory/utils.js index bd5401df66..11cb56a489 100644 --- a/web/src/containers/TransactionsHistory/utils.js +++ b/web/src/containers/TransactionsHistory/utils.js @@ -22,7 +22,7 @@ notification.config({ duration: 3, }); -const calculateFeeAmount = ( +/*const calculateFeeAmount = ( fee = 0, quick = false, price = 1, @@ -40,7 +40,7 @@ const calculateFeeAmount = ( feeAmount = mathjs.chain(amount).multiply(fee).divide(100).done(); } return feeAmount; -}; +};*/ const calculateAmount = (isQuick = false, price, size) => { if (isQuick) { @@ -261,55 +261,16 @@ export const generateOrderHistoryHeaders = ( stringId: 'FEE,NO_FEE', label: STRINGS['FEE'], key: 'fee', - exportToCsv: ({ fee = 0, price = 0, size = 0, quick, symbol, side }) => { - let feeData = discount ? fee - (fee * discount) / 100 : fee; - if (!feeData) { - return calculateFeeAmount(feeData); - } - if (pairs[symbol]) { - const { pair_base, pair_2 } = pairs[symbol]; - const pair = side === 'buy' ? pair_base : pair_2; - const { min, ...rest } = - coins[pair || BASE_CURRENCY] || DEFAULT_COIN_DATA; - return STRINGS.formatString( + exportToCsv: ({ fee = 0, fee_coin = '' }) => `${fee} ${fee_coin}`, + renderCell: ({ fee = 0, fee_coin = '' }, key, index) => ( + + {STRINGS.formatString( CURRENCY_PRICE_FORMAT, - formatToCurrency( - calculateFeeAmount(feeData, quick, price, size, side), - min - ), - rest.symbol.toUpperCase() - ).join(''); - } else { - calculateFeeAmount(feeData, quick, price, size, side); - } - }, - renderCell: ({ fee, price, size, quick, symbol, side }, key, index) => { - let feeData = discount ? fee - (fee * discount) / 100 : fee; - if (!feeData) { - return {calculateFeeAmount(feeData)}; - } - if (pairs[symbol]) { - const { pair_base, pair_2 } = pairs[symbol]; - const pair = side === 'buy' ? pair_base : pair_2; - const { min, ...rest } = - coins[pair || BASE_CURRENCY] || DEFAULT_COIN_DATA; - return ( - - {STRINGS.formatString( - CURRENCY_PRICE_FORMAT, - formatToCurrency( - calculateFeeAmount(feeData, quick, price, size, side), - min, - true - ), - rest.symbol.toUpperCase() - )} - - ); - } else { - calculateFeeAmount(feeData, quick, price, size, side); - } - }, + formatToCurrency(fee, 0, true), + fee_coin.toUpperCase() + )} + + ), }, { stringId: 'TIME', @@ -493,7 +454,7 @@ export const generateTradeHeaders = ( } }, }, - { + /* { stringId: 'AMOUNT_IN', label: `${STRINGS['AMOUNT_IN']} ${BASE_CURRENCY.toUpperCase()}`, key: 'amount-in', @@ -537,60 +498,21 @@ export const generateTradeHeaders = ( ); } }, - }, + },*/ { stringId: 'FEE,NO_FEE', label: STRINGS['FEE'], key: 'fee', - exportToCsv: ({ fee = 0, price = 0, size = 0, quick, symbol, side }) => { - let feeData = discount ? fee - (fee * discount) / 100 : fee; - if (!feeData) { - return calculateFeeAmount(feeData); - } - if (pairs[symbol]) { - const { pair_base, pair_2 } = pairs[symbol]; - const pair = side === 'buy' ? pair_base : pair_2; - const { min, ...rest } = - coins[pair || BASE_CURRENCY] || DEFAULT_COIN_DATA; - return STRINGS.formatString( + exportToCsv: ({ fee = 0, fee_coin = '' }) => `${fee} ${fee_coin}`, + renderCell: ({ fee = 0, fee_coin = '' }, key, index) => ( + + {STRINGS.formatString( CURRENCY_PRICE_FORMAT, - formatToCurrency( - calculateFeeAmount(feeData, quick, price, size, side), - min - ), - rest.symbol.toUpperCase() - ).join(''); - } else { - calculateFeeAmount(feeData, quick, price, size, side); - } - }, - renderCell: ({ fee, price, size, quick, symbol, side }, key, index) => { - let feeData = discount ? fee - (fee * discount) / 100 : fee; - if (!feeData) { - return {calculateFeeAmount(feeData)}; - } - if (pairs[symbol]) { - const { pair_base, pair_2 } = pairs[symbol]; - const pair = side === 'buy' ? pair_base : pair_2; - const { min, ...rest } = - coins[pair || BASE_CURRENCY] || DEFAULT_COIN_DATA; - return ( - - {STRINGS.formatString( - CURRENCY_PRICE_FORMAT, - formatToCurrency( - calculateFeeAmount(feeData, quick, price, size, side), - min, - true - ), - rest.symbol.toUpperCase() - )} - - ); - } else { - calculateFeeAmount(feeData, quick, price, size, side); - } - }, + formatToCurrency(fee, 0, true), + fee_coin.toUpperCase() + )} + + ), }, { stringId: 'TIME', @@ -708,32 +630,16 @@ export const generateWithdrawalsHeaders = ( stringId: 'FEE,NO_FEE', label: STRINGS['FEE'], key: 'fee', - exportToCsv: ({ fee = 0 }) => fee, - renderCell: ({ fee, price, size, currency }, key, index) => { - const data = coins[currency] || DEFAULT_COIN_DATA; - if (fee === 0) { - return {calculateFeeAmount(fee)}; - } - return ( - // STRINGS[`${currency.toUpperCase()}_PRICE_FORMAT`] - // ? - - {STRINGS.formatString( - CURRENCY_PRICE_FORMAT, - fee, - data.symbol.toUpperCase() - )} - /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ /*: {fee}*/ - // : {fee} - /*: {fee}*/ - /*: {fee}*/ - /*: {fee}*/ - /*: {fee}*/ - /*: {fee}*/ - /*: {fee}*/ - /*: {fee}*/ - /*: {fee}*/); - }, + exportToCsv: ({ fee = 0, fee_coin = '' }) => `${fee} ${fee_coin}`, + renderCell: ({ fee = 0, fee_coin = '' }, key, index) => ( + + {STRINGS.formatString( + CURRENCY_PRICE_FORMAT, + formatToCurrency(fee, 0, true), + fee_coin.toUpperCase() + )} + + ), }, { stringId: 'TIME', From dccf77c9fa7e62d955e5335ca7ecb5f3a7bd7a8c Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Mon, 15 Feb 2021 12:29:24 +0330 Subject: [PATCH 04/17] Changes for copyright string in the footer section --- web/src/components/AppFooter/index.js | 3 +- web/src/config/lang/ar.js | 7 +- web/src/config/lang/de.js | 327 ++++++++++++++------------ web/src/config/lang/en.js | 1 - web/src/config/lang/es.js | 14 +- web/src/config/lang/fa.js | 7 +- web/src/config/lang/fr.js | 13 +- web/src/config/lang/id.js | 1 - web/src/config/lang/ja.js | 1 - web/src/config/lang/ko.js | 1 - web/src/config/lang/vi.js | 1 - web/src/config/lang/zh.js | 1 - 12 files changed, 203 insertions(+), 174 deletions(-) diff --git a/web/src/components/AppFooter/index.js b/web/src/components/AppFooter/index.js index afb6586b53..d5396545e4 100644 --- a/web/src/components/AppFooter/index.js +++ b/web/src/components/AppFooter/index.js @@ -1,7 +1,6 @@ import React from 'react'; import classnames from 'classnames'; import { isMobile } from 'react-device-detect'; -import STRINGS from '../../config/localizedStrings'; // import { PUBLIC_URL } from '../../config/constants'; import withConfig from 'components/ConfigProvider/withConfig'; import Image from 'components/Image'; @@ -163,7 +162,7 @@ const AppFooter = ({
-
{STRINGS['FOOTER.FOOTER_COPYRIGHT']}
+
Powered by bitHolla
); diff --git a/web/src/config/lang/ar.js b/web/src/config/lang/ar.js index 28bab5da06..1040d3e7f2 100644 --- a/web/src/config/lang/ar.js +++ b/web/src/config/lang/ar.js @@ -82,7 +82,6 @@ const nestedContent = { FOOTER: { FOOTER_LEGAL: ['با افتخار توسعه داده شده در سئول ، کره جنوبی'], FOOTER_LANGUAGE_TEXT: 'زبان', - FOOTER_COPYRIGHT: 'Powered by bitHolla', SECTIONS: { SECTION_1_TITLE: 'درباره', SECTION_1_LINK_1: 'درباره ما', @@ -645,7 +644,8 @@ const nestedContent = { WITHDRAWALS: 'برداشت ها', }, ACCOUNT_SECURITY: { - TITLE_TEXT:'Adjust the security settings for your account. From Two-factor authentication, password, API keys and other security related functions.', + TITLE_TEXT: + 'Adjust the security settings for your account. From Two-factor authentication, password, API keys and other security related functions.', OTP: { TITLE: 'رمز دو عاملی', OTP_ENABLED: 'رمز یکبار مصرف را فعال کنید', @@ -675,7 +675,8 @@ const nestedContent = { DISABLE: 'غیر فعال کردن رمز دو عاملی', SECRET_1: 'Enter yor secret key', SECRET_2: 'Please enter your secret key to confirm you wrote it down.', - SECRET_3: 'This secret key will help you recover your account if you lost access to your phone.', + SECRET_3: + 'This secret key will help you recover your account if you lost access to your phone.', INPUT_1: 'Secret Key', TITLE_2: 'Enter One-Time Password (OTP)', diff --git a/web/src/config/lang/de.js b/web/src/config/lang/de.js index cf200c5749..2425ca67bc 100644 --- a/web/src/config/lang/de.js +++ b/web/src/config/lang/de.js @@ -74,12 +74,11 @@ export default { SECTION_3_CARD_6_TITLE: 'KYC-INTEGRATION', SECTION_3_CARD_6_TEXT: 'Flexible und integrierbare Module zur Anwendung von KYC- und Benutzerverifizierungsmethoden in verschiedenen Rechtsordnungen.', - SECTION_3_BUTTON_1: 'Demo ansehen' + SECTION_3_BUTTON_1: 'Demo ansehen', }, FOOTER: { FOOTER_LEGAL: ['Proudly made in Seoul, South Korea', 'bitHolla Inc.'], FOOTER_LANGUAGE_TEXT: 'SPRACHE', - FOOTER_COPYRIGHT: 'Powered by bitHolla', SECTIONS: { SECTION_1_TITLE: 'ÜBER', SECTION_1_LINK_1: 'Über uns', @@ -123,7 +122,7 @@ export default { XHT_DESCRIPTION: 'HollaEx Kit ist eine Open-Source-Handelsplattform, die von bitHolla Inc. entwickelt wurde. Mit diesem Exchange Kit können Sie beliebige digitale Assets erstellen und auflisten und Benutzer für den Handel an Ihrer Börse einbinden. Um einfach einen selbst zu betreiben {1}.', CLICK_HERE: 'klicken Sie hier', - VISIT_HERE: 'besuchen Sie hier' + VISIT_HERE: 'besuchen Sie hier', }, ACCOUNTS: { TITLE: 'Konto', @@ -136,20 +135,22 @@ export default { TAB_SUMMARY: 'Zusammenfassung', TAB_HISTORY: 'Verlauf', TAB_API: 'API', - TAB_SIGNOUT: 'Abmelden' + TAB_SIGNOUT: 'Abmelden', }, REQUEST_XHT_ACCESS: { // new REQUEST_TITLE: 'Zugang anfordern', REQUEST_INVITE: 'Einladung anfordern', - CATEGORY_PLACEHOLDER: 'Wählen Sie die Kategorie, die am besten zu Ihrem Problem passt', + CATEGORY_PLACEHOLDER: + 'Wählen Sie die Kategorie, die am besten zu Ihrem Problem passt', INTRODUCTION_LABEL: 'Stellen Sie sich vor', INTRODUCTION_PLACEHOLDER: - 'Wo sind Sie ansässig? Sind Sie an einem Exchange interessiert?' + 'Wo sind Sie ansässig? Sind Sie an einem Exchange interessiert?', }, CONTACT_FORM: { CATEGORY_LABEL: 'Kategorie', - CATEGORY_PLACEHOLDER: 'Wählen Sie die Kategorie, die am besten zu Ihrem Problem passt', + CATEGORY_PLACEHOLDER: + 'Wählen Sie die Kategorie, die am besten zu Ihrem Problem passt', CATEGORY_OPTIONS: { OPTION_VERIFY: 'Benutzerverifizierung', OPTION_LEVEL: 'Benutzerlevel erhöhen', @@ -157,7 +158,7 @@ export default { OPTION_BUG: 'Fehler melden', // ToDo: OPTION_PERSONAL_INFO: 'Persönliche Informationen ändern', // ToDo: OPTION_BANK_TRANSFER: 'Banküberweisung', // new - OPTION_REQUEST: 'Einladung für die XIV Exchange anfordern' // new + OPTION_REQUEST: 'Einladung für die XIV Exchange anfordern', // new }, SUBJECT_LABEL: 'Betreff', SUBJECT_PLACEHOLDER: 'Geben Sie den Betreff Ihres Problems ein', @@ -169,7 +170,7 @@ export default { SUCCESS_MESSAGE: 'Die E-Mail wurde an unseren Kundensupport gesendet', SUCCESS_TITLE: 'Nachricht gesendet', SUCCESS_MESSAGE_1: 'Ihr Problem wurde an den Kundensupport weitergeleitet.', - SUCCESS_MESSAGE_2: 'Sie können in 1 bis 3 Tagen mit einer Antwort rechnen.' + SUCCESS_MESSAGE_2: 'Sie können in 1 bis 3 Tagen mit einer Antwort rechnen.', }, DEPOSIT: { CRYPTO_LABELS: { @@ -178,20 +179,20 @@ export default { MEMO: 'Ihr {0} Memo', // new BTC: 'Ihre Bitcoin-Empfangsadresse', ETH: 'Ihre Ethereum-Empfangsadresse', - BCH: 'Ihre Bitcoin Cash-Empfangsadresse' + BCH: 'Ihre Bitcoin Cash-Empfangsadresse', }, INCREASE_LIMIT: 'Möchten Sie Ihr Tageslimit erhöhen?', QR_CODE: 'Dieser QR-Code kann von der Person gescannt werden, die Ihnen Geld senden möchte', NO_DATA: 'Keine Informationen verfügbar', - FULL_MESSAGE_LIMIT: '{0}: {1} {2} {3}' // 0 -> {Daily deposit max amount}: 1 -> {50,000,000} 2 -> {T} 3 -> {(Want to increase your daily limit?)} + FULL_MESSAGE_LIMIT: '{0}: {1} {2} {3}', // 0 -> {Daily deposit max amount}: 1 -> {50,000,000} 2 -> {T} 3 -> {(Want to increase your daily limit?)} }, LOGIN: { LOGIN_TO: 'Bei {0} anmelden', - CANT_LOGIN: "Sie können sich nicht anmelden?", - NO_ACCOUNT: "Sie haben noch kein Konto?", + CANT_LOGIN: 'Sie können sich nicht anmelden?', + NO_ACCOUNT: 'Sie haben noch kein Konto?', CREATE_ACCOUNT: 'Erstellen Sie hier ein Konto', - HELP: 'Hilfe' + HELP: 'Hilfe', }, FORM_FIELDS: { EMAIL_LABEL: 'E-Mail', @@ -199,7 +200,7 @@ export default { PASSWORD_LABEL: 'Passwort', PASSWORD_PLACEHOLDER: 'Geben Sie Ihr Passwort ein', PASSWORD_REPEAT_LABEL: 'Geben Sie Ihr Passwort erneut ein', - PASSWORD_REPEAT_PLACEHOLDER: 'Geben Sie Ihr Passwort erneut ein' + PASSWORD_REPEAT_PLACEHOLDER: 'Geben Sie Ihr Passwort erneut ein', }, VALIDATIONS: { OTP_LOGIN: 'OTP-Code zur Anmeldung bereitstellen', @@ -219,11 +220,12 @@ export default { MIN_VALUE: 'Wert muss {0} oder höher sein.', MAX_VALUE: 'Wert muss {0} oder niedriger sein.', INSUFFICIENT_BALANCE: 'Unzureichende Balance', - PASSWORDS_DONT_MATCH: "Passwort stimmt nicht überein", + PASSWORDS_DONT_MATCH: 'Passwort stimmt nicht überein', USER_EXIST: 'E-Mail wurde bereits registriert', - ACCEPT_TERMS: 'Sie haben den Nutzungsbedingungen und der Datenschutzrichtlinie nicht zugestimmt', + ACCEPT_TERMS: + 'Sie haben den Nutzungsbedingungen und der Datenschutzrichtlinie nicht zugestimmt', STEP: 'Ungültiger Wert, Schritt ist {0}', - ONLY_NUMBERS: 'Wert kann nur Zahlen enthalten' + ONLY_NUMBERS: 'Wert kann nur Zahlen enthalten', }, LEGAL: { PRIVACY_POLICY: { @@ -237,8 +239,8 @@ export default { 'Die Website und das Urheberrecht an allen Texten, Grafiken, Bildern, Software und allen anderen Materialien auf der Website sind Eigentum von bitHolla, einschließlich aller Marken und anderer geistiger Eigentumsrechte in Bezug auf die Materialien und den Service auf der Website. Die Materialien auf dieser Website dürfen nur für den persönlichen Gebrauch und für nicht-kommerzielle Zwecke verwendet werden.', 'Sie dürfen Auszüge der Website nur für den oben genannten Zweck auf einem Computerbildschirm anzeigen oder ausdrucken, vorausgesetzt, dass Sie alle Urheberrechts- und sonstigen Eigentumshinweise sowie alle bitHolla-Marken oder -Logos beibehalten, wie sie auf dem ersten Ausdruck oder Download angezeigt werden, ohne sie zu ändern, hinzuzufügen oder zu löschen. Sofern nicht ausdrücklich angegeben, dürfen Sie ohne die vorherige schriftliche Genehmigung von bitHolla keine Materialien der Website verändern, modifizieren, reproduzieren, verteilen oder in einem anderen kommerziellen Kontext verwenden.', 'Sie erkennen an, dass bitHolla und das bitHolla-Logo Warenzeichen von bitHolla Inc. sind. Sie dürfen diese Warenzeichen ohne Änderungen auf dem von dieser Website heruntergeladenen Material in dem oben genehmigten Umfang wiedergeben, aber Sie dürfen sie nicht anderweitig verwenden, kopieren, anpassen oder löschen.', - 'Sie dürfen unter keinen Umständen irgendwelche Rechte über oder in Bezug auf die Website erhalten (außer den Rechten zur Nutzung der Website gemäß diesen Bedingungen und anderen Bedingungen, die einen bestimmten Dienst oder Abschnitt der Website regeln) oder sich als Inhaber solcher Rechte über oder in Bezug auf die Website ausgeben.' - ] + 'Sie dürfen unter keinen Umständen irgendwelche Rechte über oder in Bezug auf die Website erhalten (außer den Rechten zur Nutzung der Website gemäß diesen Bedingungen und anderen Bedingungen, die einen bestimmten Dienst oder Abschnitt der Website regeln) oder sich als Inhaber solcher Rechte über oder in Bezug auf die Website ausgeben.', + ], }, GENERAL_TERMS: { TITLE: 'Allgemeine Geschäftsbedingungen', @@ -251,15 +253,15 @@ export default { 'Die Website und das Urheberrecht an allen Texten, Grafiken, Bildern, Software und allen anderen Materialien auf der Website sind Eigentum von bitHolla, einschließlich aller Marken und anderer geistiger Eigentumsrechte in Bezug auf die Materialien und den Service auf der Website. Die Materialien auf dieser Website dürfen nur für den persönlichen Gebrauch und für nicht-kommerzielle Zwecke verwendet werden.', 'Sie dürfen Auszüge der Website nur für den oben genannten Zweck auf einem Computerbildschirm anzeigen oder ausdrucken, vorausgesetzt, dass Sie alle Urheberrechts- und sonstigen Eigentumshinweise sowie alle bitHolla-Marken oder -Logos beibehalten, wie sie auf dem ersten Ausdruck oder Download angezeigt werden, ohne sie zu ändern, hinzuzufügen oder zu löschen. Sofern nicht ausdrücklich angegeben, dürfen Sie ohne die vorherige schriftliche Genehmigung von bitHolla keine Materialien der Website verändern, modifizieren, reproduzieren, verteilen oder in einem anderen kommerziellen Kontext verwenden.', 'Sie erkennen an, dass bitHolla und das bitHolla-Logo Warenzeichen von bitHolla Inc. sind. Sie dürfen diese Warenzeichen ohne Änderungen auf dem von dieser Website heruntergeladenen Material in dem oben genehmigten Umfang wiedergeben, aber Sie dürfen sie nicht anderweitig verwenden, kopieren, anpassen oder löschen.', - 'Sie dürfen unter keinen Umständen irgendwelche Rechte über oder in Bezug auf die Website erhalten (außer den Rechten zur Nutzung der Website gemäß diesen Bedingungen und anderen Bedingungen, die einen bestimmten Dienst oder Abschnitt der Website regeln) oder sich als Inhaber solcher Rechte über oder in Bezug auf die Website ausgeben.' - ] - } + 'Sie dürfen unter keinen Umständen irgendwelche Rechte über oder in Bezug auf die Website erhalten (außer den Rechten zur Nutzung der Website gemäß diesen Bedingungen und anderen Bedingungen, die einen bestimmten Dienst oder Abschnitt der Website regeln) oder sich als Inhaber solcher Rechte über oder in Bezug auf die Website ausgeben.', + ], + }, }, NOTIFICATIONS: { BUTTONS: { OKAY: 'Okay', START_TRADING: 'Handel beginnen', - SEE_HISTORY: 'siehe Verlauf' + SEE_HISTORY: 'siehe Verlauf', }, DEPOSITS: { TITLE_RECEIVED: '{0} Einzahlung erhalten', @@ -269,28 +271,29 @@ export default { INFORMATION_PENDING_1: 'Ihre {0} benötigen 1 Bestätigungen, bevor Sie mit dem Handel beginnen können.', INFORMATION_PENDING_2: - 'Dies kann 10-30 Minuten dauern. Wir senden eine E-Mail, sobald Ihre {0} in der Blockchain bestätigt wurde.' - } + 'Dies kann 10-30 Minuten dauern. Wir senden eine E-Mail, sobald Ihre {0} in der Blockchain bestätigt wurde.', + }, }, REFERRAL_SUCCESS: { TITLE: 'Anfrage gesendet', - BUTTON_TEXT: 'Okay' + BUTTON_TEXT: 'Okay', }, OTP_FORM: { - OTP_FORM_TITLE: 'Geben Sie Ihren Authentifizierungscode ein, um fortzufahren', + OTP_FORM_TITLE: + 'Geben Sie Ihren Authentifizierungscode ein, um fortzufahren', OTP_LABEL: 'OTP-Code', OTP_PLACEHOLDER: 'Geben Sie den Authentifizierungscode ein', OTP_TITLE: 'Authentifizierungscode', OTP_HELP: 'Hilfe', OTP_BUTTON: 'einreichen', - ERROR_INVALID: 'Ungültiger OTP-Code' + ERROR_INVALID: 'Ungültiger OTP-Code', }, QUICK_TRADE_COMPONENT: { TITLE: 'Quick', TOTAL_COST: 'Gesamtkosten', BUTTON: 'Überprüfung {0} Auftrag', INPUT: '{0} bis {1}', - TRADE_TITLE: '{0} {1}' // quick buy + TRADE_TITLE: '{0} {1}', // quick buy }, PREVIOUS_PAGE: 'vorherige Seite', NEXT_PAGE: 'nächste Seite', @@ -302,61 +305,62 @@ export default { ORDERS_PLURAL: 'orders', ORDERS_SINGULAR: 'order', HOLD_ORDERS: - 'Sie haben {0} offen {1}, was zu einem Halt von {2} {3} auf Ihrem {4} Saldo führt' + 'Sie haben {0} offen {1}, was zu einem Halt von {2} {3} auf Ihrem {4} Saldo führt', }, REQUEST_RESET_PASSWORD: { TITLE: 'Konto-Wiederherstellung', SUBTITLE: `Stellen Sie Ihr Konto unten wieder her`, SUPPORT: 'Kontaktieren Sie den Kundendienst.', - BUTTON: 'Wiederherstellungslink senden' + BUTTON: 'Wiederherstellungslink senden', }, REQUEST_RESET_PASSWORD_SUCCESS: { TITLE: 'Passwortrücksetzung gesendet', TEXT: - 'Wenn für die E-Mail-Adresse ein Konto existiert, wurde eine E-Mail mit Anweisungen zum Zurücksetzen an diese Adresse gesendet. Bitte prüfen Sie Ihre E-Mail und klicken Sie auf den Link, um das Zurücksetzen des Passworts abzuschließen.' + 'Wenn für die E-Mail-Adresse ein Konto existiert, wurde eine E-Mail mit Anweisungen zum Zurücksetzen an diese Adresse gesendet. Bitte prüfen Sie Ihre E-Mail und klicken Sie auf den Link, um das Zurücksetzen des Passworts abzuschließen.', }, RESET_PASSWORD: { TITLE: 'Neues Passwort festlegen', SUBTITLE: 'Neues Passwort festlegen', - BUTTON: 'Neues Passwort festlegen' + BUTTON: 'Neues Passwort festlegen', }, RESET_PASSWORD_SUCCESS: { TEXT_1: 'Sie haben erfolgreich ein neues Passwort eingerichtet.', - TEXT_2: 'Klicken Sie unten auf Login, um fortzufahren.' + TEXT_2: 'Klicken Sie unten auf Login, um fortzufahren.', }, SIGN_UP: { SIGNUP_TO: 'Registrieren Sie sich bei {0}', - NO_EMAIL: "Haben Sie die E-Mail nicht erhalten?", + NO_EMAIL: 'Haben Sie die E-Mail nicht erhalten?', REQUEST_EMAIL: 'Hier ein weitere E-Mail anfordern', HAVE_ACCOUNT: 'Sie haben bereits ein Konto?', GOTO_LOGIN: 'Gehen Sie zur Anmeldeseite', AFFILIATION_CODE: 'Empfehlungscode (optional)', - AFFILIATION_CODE_PLACEHOLDER:'Geben Sie Ihren Empfehlungscode ein', + AFFILIATION_CODE_PLACEHOLDER: 'Geben Sie Ihren Empfehlungscode ein', TERMS: { terms: 'Allgemeine Bedingungen', policy: 'Datenschutzrichtlinie', - text: 'Ich habe die {0} und {1} gelesen und stimme ihnen zu.' - } + text: 'Ich habe die {0} und {1} gelesen und stimme ihnen zu.', + }, }, VERIFICATION_TEXTS: { TITLE: 'E-Mail gesendet', - TEXT_1: 'Prüfen Sie Ihre E-Mail und klicken Sie auf den Link, um Ihre E-Mail zu verifizieren.', + TEXT_1: + 'Prüfen Sie Ihre E-Mail und klicken Sie auf den Link, um Ihre E-Mail zu verifizieren.', TEXT_2: - 'If you have not received any email verification and you have checked your junk mail then you can try clicking resend below.' + 'If you have not received any email verification and you have checked your junk mail then you can try clicking resend below.', }, VERIFICATION_EMAIL_REQUEST: { TITLE: 'E-Mail-Anfrage erneut senden', - BUTTON: 'E-Mail anfordern' + BUTTON: 'E-Mail anfordern', }, VERIFICATION_EMAIL_REQUEST_SUCCESS: { TITLE: 'E-Mail erneut senden', TEXT_1: - 'Wenn Sie nach einigen Minuten immer noch keine E-Mail-Bestätigung erhalten haben, kontaktieren Sie uns bitte unten.' + 'Wenn Sie nach einigen Minuten immer noch keine E-Mail-Bestätigung erhalten haben, kontaktieren Sie uns bitte unten.', }, VERIFICATION_EMAIL: { INVALID_UUID: 'Ungültiger Code', - TEXT_1: "Sie haben Ihre E-Mail erfolgreich verifiziert.", - TEXT_2: 'Sie können nun zur Anmeldung fortfahren.' + TEXT_1: 'Sie haben Ihre E-Mail erfolgreich verifiziert.', + TEXT_2: 'Sie können nun zur Anmeldung fortfahren.', }, USER_VERIFICATION: { INFO_TXT: @@ -449,14 +453,15 @@ export default { GENDER_PLACEHOLDER: 'Geben Sie an, welches Geschlecht Sie haben', GENDER_OPTIONS: { MAN: 'Männlich', - WOMAN: 'Weiblich' + WOMAN: 'Weiblich', }, NATIONALITY_LABEL: 'Nationalität', NATIONALITY_PLACEHOLDER: 'Geben Sie ein, welche Nationalität in Ihrem Ausweisdokument steht', DOB_LABEL: 'Geburtsdatum', COUNTRY_LABEL: 'Land Ihres Wohnsitzes', - COUNTRY_PLACEHOLDER: 'Wählen Sie das Land aus, in dem Sie sich derzeit befinden.', + COUNTRY_PLACEHOLDER: + 'Wählen Sie das Land aus, in dem Sie sich derzeit befinden.', CITY_LABEL: 'Stadt', CITY_PLACEHOLDER: 'Geben Sie die Stadt ein, in der Sie wohnen', ADDRESS_LABEL: 'Adresse', @@ -464,14 +469,15 @@ export default { POSTAL_CODE_LABEL: 'Postleitzahl', POSTAL_CODE_PLACEHOLDER: 'Geben Sie Ihre Postleitzahl ein', PHONE_CODE_LABEL: 'Land', - PHONE_CODE_PLACEHOLDER: 'Wählen Sie das Land, in dem Ihr Telefon angemeldet ist', + PHONE_CODE_PLACEHOLDER: + 'Wählen Sie das Land, in dem Ihr Telefon angemeldet ist', PHONE_CODE_DISPLAY: '({0}) {1}', // 0 -> (+21) 1 -> South Korea PHONE_NUMBER_LABEL: 'Telefonnummer', PHONE_NUMBER_PLACEHOLDER: 'Geben Sie Ihre Telefonnummer ein', CONNECTING_LOADING: 'Verbinden', SMS_SEND: 'SMS senden', SMS_CODE_LABEL: 'SMS-Code', - SMS_CODE_PLACEHOLDER: 'Geben Sie Ihren SMS-Code ein' + SMS_CODE_PLACEHOLDER: 'Geben Sie Ihren SMS-Code ein', }, INFORMATION: { TEXT: @@ -483,27 +489,29 @@ export default { PHONE_VERIFICATION_TXT_1: 'Erhalten Sie Echtzeit-Updates für Ein- und Auszahlungen, indem Sie Ihre Handynummer mitteilen.', PHONE_VERIFICATION_TXT_2: - 'Beweisen Sie außerdem Ihre Identität und Adresse, indem Sie Ihre LAN-Telefonnummer angeben (optional).' - } + 'Beweisen Sie außerdem Ihre Identität und Adresse, indem Sie Ihre LAN-Telefonnummer angeben (optional).', + }, }, ID_DOCUMENTS_FORM: { VALIDATIONS: { ID_TYPE: 'Bitte wählen Sie eine Art von Ausweisdokument', ID_NUMBER: 'Bitte geben Sie Ihre Dokumentennummer ein', - ISSUED_DATE: 'Bitte wählen Sie das Datum, an dem Ihr Dokument ausgestellt wurde', + ISSUED_DATE: + 'Bitte wählen Sie das Datum, an dem Ihr Dokument ausgestellt wurde', EXPIRATION_DATE: 'Bitte wählen Sie das Datum, an dem Ihr Dokument abläuft', FRONT: 'Bitte laden Sie eine Kopie Ihres Reisepasses hoch', PROOF_OF_RESIDENCY: 'Bitte laden Sie eine Kopie des Dokuments hoch, das Ihren aktuellen Wohnsitz belegt', - SELFIE_PHOTO_ID: 'Bitte laden Sie ein Selfie mit Reisepass und Notiz hoch' + SELFIE_PHOTO_ID: + 'Bitte laden Sie ein Selfie mit Reisepass und Notiz hoch', }, FORM_FIELDS: { TYPE_LABEL: 'Dokument-ID Typ', TYPE_PLACEHOLDER: 'Art des Ausweises wählen', TYPE_OPTIONS: { ID: 'ID', - PASSPORT: 'Reisepass' + PASSPORT: 'Reisepass', }, ID_NUMBER_LABEL: 'Reisepassnummer', ID_NUMBER_PLACEHOLDER: 'Geben Sie Ihre Reisepassnummer ein', @@ -519,10 +527,11 @@ export default { PASSPORT_LABEL: 'Reisepass-Dokument', PASSPORT_PLACEHOLDER: 'Fügen Sie eine Kopie Ihres Passdokuments hinzu', POR_LABEL: 'Dokument zum Nachweis Ihrer Adresse', - POR_PLACEHOLDER: 'Fügen Sie eine Kopie eines Dokuments hinzu, das Ihre Adresse belegt', + POR_PLACEHOLDER: + 'Fügen Sie eine Kopie eines Dokuments hinzu, das Ihre Adresse belegt', SELFIE_PHOTO_ID_LABEL: 'Ihr Selfie mit Reisepass und Notiz', SELFIE_PHOTO_ID_PLACEHOLDER: - 'Fügen Sie eine Kopie Ihres Selfies mit Reisepass und Notiz hinzu' + 'Fügen Sie eine Kopie Ihres Selfies mit Reisepass und Notiz hinzu', }, INFORMATION: { IDENTITY_DOCUMENT: 'Ausweisdokument', @@ -531,14 +540,16 @@ export default { TITLE: 'Bitte stellen Sie sicher, dass Ihre eingereichten Dokumente:', LIST_ITEM_1: 'HOHE QUALITÄT (Farbbilder, 300dpi Auflösung oder höher) sind.', - LIST_ITEM_2: 'VOLLSTÄNDIG SICHTBAR (Wasserzeichen sind erlaubt) sind.', - LIST_ITEM_3: 'GÜLTIG, mit deutlich sichtbarem Gültigkeitsdatum, sind.', + LIST_ITEM_2: + 'VOLLSTÄNDIG SICHTBAR (Wasserzeichen sind erlaubt) sind.', + LIST_ITEM_3: + 'GÜLTIG, mit deutlich sichtbarem Gültigkeitsdatum, sind.', WARNING_1: 'Es wird nur ein gültiger Reisepass akzeptiert; Fotos in hoher Qualität oder gescannte Bilder dieser Dokumente sind akzeptabel:', WARNING_2: 'Stellen Sie sicher, dass Sie Ihre eigenen Dokumente hochladen. Jede Verwendung von falschen oder gefälschten Dokumenten hat rechtliche Konsequenzen und führt zur sofortigen Sperrung Ihres Kontos.', WARNING_3: - 'Reichen Sie bitte nicht den Reisepass als Wohnsitznachweis ein.' + 'Reichen Sie bitte nicht den Reisepass als Wohnsitznachweis ein.', }, POR: { SECTION_1_TEXT_1: @@ -556,7 +567,7 @@ export default { SECTION_2_LIST_ITEM_3: 'Ein von der Regierung ausgestelltes Dokument (Steuererklärung, Wohnsitzbescheinigung usw.).', WARNING: - 'Wir können die Adresse auf Ihrem eingereichten Ausweisdokument nicht als gültigen Wohnsitznachweis akzeptieren.' + 'Wir können die Adresse auf Ihrem eingereichten Ausweisdokument nicht als gültigen Wohnsitznachweis akzeptieren.', }, SELFIE: { TITLE: 'Selfie mit Reisepass und Notiz', @@ -566,12 +577,12 @@ export default { INSTRUCTION_1: 'Ihr Gesicht muss deutlich sichtbar sein', INSTRUCTION_2: 'Reisepass muss deutlich lesbar sein', INSTRUCTION_3: 'Schreiben Sie den Namen des Exchange.', - INSTRUCTION_4: "Schreiben Sie das heutige Datum", + INSTRUCTION_4: 'Schreiben Sie das heutige Datum', INSTRUCTION_5: 'Unterschreiben Sie die Notiz.', WARNING: - 'Selfie mit einem anderen Reisepass mit hochgeladenem Inhalt wird abgelehnt' - } - } + 'Selfie mit einem anderen Reisepass mit hochgeladenem Inhalt wird abgelehnt', + }, + }, }, BANK_ACCOUNT_FORM: { VALIDATIONS: { @@ -581,7 +592,7 @@ export default { 'Ihre Bankkontonummer sollte weniger als 50 Ziffern haben', ACCOUNT_NUMBER_MAX_LENGTH: 'Ihre Bankkontonummer hat ein Limit von 50 Zeichen', - CARD_NUMBER: 'Ihre Kartennummer hat ein falsches Format' + CARD_NUMBER: 'Ihre Kartennummer hat ein falsches Format', }, FORM_FIELDS: { BANK_NAME_LABEL: 'Bank Name', @@ -592,20 +603,22 @@ export default { ACCOUNT_OWNER_PLACEHOLDER: 'Type the name as on your bank account', CARD_NUMBER_LABEL: 'Bankkartennummer', CARD_NUMBER_PLACEHOLDER: - 'Geben Sie die 16-stellige Nummer ein, die sich auf der Vorderseite Ihrer Bankkarte befindet' - } + 'Geben Sie die 16-stellige Nummer ein, die sich auf der Vorderseite Ihrer Bankkarte befindet', + }, }, WARNING: { - TEXT_1: 'Durch die Verifizierung Ihrer Identität können Sie Folgendes erhalten:', + TEXT_1: + 'Durch die Verifizierung Ihrer Identität können Sie Folgendes erhalten:', LIST_ITEM_1: 'Erhöhte Abhebungslimits', LIST_ITEM_2: 'Erhöhte Einzahlungslimits', - LIST_ITEM_3: 'Niedrigere Gebühren' - } + LIST_ITEM_3: 'Niedrigere Gebühren', + }, }, USER_SETTINGS: { TITLE_TEXT_1: 'Ändern Sie die Einstellungen Ihres Kontos. Von Schnittstelle, Benachrichtigungen, Benutzername und anderen Anpassungen.', - TITLE_TEXT_2: 'Wenn Sie die Einstellungen speichern, werden die Änderungen übernommen und gespeichert.', + TITLE_TEXT_2: + 'Wenn Sie die Einstellungen speichern, werden die Änderungen übernommen und gespeichert.', TITLE_NOTIFICATION: 'Benachrichtigung', TITLE_INTERFACE: 'Interface', TITLE_LANGUAGE: 'Sprache', @@ -627,30 +640,28 @@ export default { ORDER_PORTFOLIO_LABEL: 'Prozentualer Anteil des Portfolios:', NOTIFICATION_FORM: { TRADE_POPUPS: 'Handel Pop-ups', - POPUP_ORDER_CONFIRMATION: 'Vor dem Absenden von Bestellungen um Bestätigung bitten', - POPUP_ORDER_COMPLETED: 'Pop-up anzeigen, wenn die Bestellung abgeschlossen ist', + POPUP_ORDER_CONFIRMATION: + 'Vor dem Absenden von Bestellungen um Bestätigung bitten', + POPUP_ORDER_COMPLETED: + 'Pop-up anzeigen, wenn die Bestellung abgeschlossen ist', POPUP_ORDER_PARTIALLY_FILLED: - 'Pop-up anzeigen, wenn der Auftrag teilweise gefüllt ist' + 'Pop-up anzeigen, wenn der Auftrag teilweise gefüllt ist', }, - AUDIO_CUE_FORM: { // new + AUDIO_CUE_FORM: { + // new ALL_AUDIO: 'Alle Audio-Cues', PUBLIC_TRADE_AUDIO: 'Wenn ein öffentlicher Handel stattgefunden hat', - ORDERS_PARTIAL_AUDIO: - 'Wenn einer Ihrer Aufträge teilweise erfüllt ist', - ORDERS_PLACED_AUDIO: - 'Wenn eine Bestellung aufgegeben wird', - ORDERS_CANCELED_AUDIO: - 'Wenn ein Auftrag storniert wird', + ORDERS_PARTIAL_AUDIO: 'Wenn einer Ihrer Aufträge teilweise erfüllt ist', + ORDERS_PLACED_AUDIO: 'Wenn eine Bestellung aufgegeben wird', + ORDERS_CANCELED_AUDIO: 'Wenn ein Auftrag storniert wird', ORDERS_COMPLETED_AUDIO: 'Wenn einer Ihrer Aufträge vollständig gefüllt ist', CLICK_AMOUNTS_AUDIO: 'Wenn Sie Beträge und Preise im Auftragsbuch anklicken', - GET_QUICK_TRADE_AUDIO: - 'Wenn Sie ein Angebot für das Protrading einholen', + GET_QUICK_TRADE_AUDIO: 'Wenn Sie ein Angebot für das Protrading einholen', SUCCESS_QUICK_TRADE_AUDIO: 'Wenn ein erfolgreicher Quick-Trade stattfindet', - QUICK_TRADE_TIMEOUT_AUDIO: - 'Wenn Quick-Trade-Timeout ', + QUICK_TRADE_TIMEOUT_AUDIO: 'Wenn Quick-Trade-Timeout ', }, RISK_MANAGEMENT: { INFO_TEXT: @@ -660,8 +671,8 @@ export default { TOMAN_ASSET: 'Ungefährer Wert', ADJUST: '(PROZENTSATZ ANPASSEN)', ACTIVATE_RISK_MANAGMENT: 'Aktivieren Sie das Risikomanagement', - WARNING_POP_UP: 'Warn-Pop-ups' - } + WARNING_POP_UP: 'Warn-Pop-ups', + }, }, TRANSACTION_HISTORY: { TITLE: 'Verlauf', @@ -671,7 +682,7 @@ export default { TEXT_DOWNLOAD: 'DOWNLOAD-HISTORIE', TRADES: 'Trades', DEPOSITS: 'Einzahlungen', - WITHDRAWALS: 'Abhebungen' + WITHDRAWALS: 'Abhebungen', }, ACCOUNT_SECURITY: { OTP: { @@ -680,11 +691,11 @@ export default { OTP_DISABLED: 'BITTE SCHALTEN SIE DIE 2FA FUNKTION EIN', ENABLED_TEXTS: { TEXT_1: 'OTP bei der Anmeldung verlangen', - TEXT_2: 'OTP beim Abheben von Geldern verlangen' + TEXT_2: 'OTP beim Abheben von Geldern verlangen', }, DIALOG: { SUCCESS: 'Sie haben das OTP erfolgreich aktiviert', - REVOKE: 'Sie haben Ihr OTP erfolgreich widerrufen' + REVOKE: 'Sie haben Ihr OTP erfolgreich widerrufen', }, CONTENT: { TITLE: 'Aktivieren der Zwei-Faktor-Authentifizierung', @@ -700,55 +711,59 @@ export default { WARNING: 'Wir empfehlen Ihnen dringend, die 2-Faktor-Authentifizierung (2FA) einzurichten. Dadurch wird die Sicherheit Ihrer Gelder erheblich erhöht.', ENABLE: 'Aktivieren der Zwei-Faktoren-Authentifizierung', - DISABLE: 'Zwei-Faktor-Authentifizierung deaktivieren' + DISABLE: 'Zwei-Faktor-Authentifizierung deaktivieren', }, FORM: { - PLACEHOLDER: 'Geben Sie Ihr von Google Authenticator bereitgestelltes OTP ein.', - BUTTON: '2FA aktivieren' - } + PLACEHOLDER: + 'Geben Sie Ihr von Google Authenticator bereitgestelltes OTP ein.', + BUTTON: '2FA aktivieren', + }, }, CHANGE_PASSWORD: { TITLE: 'Passwort ändern', ACTIVE: 'AKTIV', DIALOG: { - SUCCESS: 'Sie haben Ihr Passwort erfolgreich geändert' + SUCCESS: 'Sie haben Ihr Passwort erfolgreich geändert', }, FORM: { BUTTON: 'Passwort ändern', CURRENT_PASSWORD: { label: 'Aktuelles Passwort', - placeholder: 'Geben Sie Ihr aktuelles Passwort ein' + placeholder: 'Geben Sie Ihr aktuelles Passwort ein', }, NEW_PASSWORD: { label: 'Neues Passwort', - placeholder: 'Geben Sie ein neues Passwort ein' + placeholder: 'Geben Sie ein neues Passwort ein', }, NEW_PASSWORD_REPEAT: { label: 'Neues Passwort bestätigen', - placeholder: 'Geben Sie Ihr neues Passwort erneut ein' - } - } - } + placeholder: 'Geben Sie Ihr neues Passwort erneut ein', + }, + }, + }, }, CURRENCY: 'Währung', TYPE: 'Typ', TYPES_VALUES: { market: 'Markt', - limit: 'Limit' + limit: 'Limit', }, TYPES: [ { value: 'market', label: 'Markt' }, // DO NOT CHANGE value, ONLY TRANSLATE label - { value: 'limit', label: 'Limit' } // DO NOT CHANGE value, ONLY TRANSLATE label + { value: 'limit', label: 'Limit' }, // DO NOT CHANGE value, ONLY TRANSLATE label ], SIDE: 'Seite', SIDES_VALUES: { buy: 'kaufen', - sell: 'verkaufen' + sell: 'verkaufen', }, - SIDES: [{ value: 'buy', label: 'kaufen' }, { value: 'sell', label: 'verkaufen' }], // DO NOT CHANGE value, ONLY TRANSLATE label + SIDES: [ + { value: 'buy', label: 'kaufen' }, + { value: 'sell', label: 'verkaufen' }, + ], // DO NOT CHANGE value, ONLY TRANSLATE label DEFAULT_TOGGLE_OPTIONS: [ { value: true, label: 'an' }, // DO NOT CHANGE value, ONLY TRANSLATE label - { value: false, label: 'aus' } // DO NOT CHANGE value, ONLY TRANSLATE label + { value: false, label: 'aus' }, // DO NOT CHANGE value, ONLY TRANSLATE label ], SIZE: 'Größe', PRICE: 'Preis', @@ -794,7 +809,7 @@ export default { h: 'Hoch', l: 'Tief', c: 'Schließen', - v: 'Volumen' + v: 'Volumen', }, QUICK_TRADE: 'Quick trade', PRO_TRADE: 'Pro trade', @@ -825,8 +840,7 @@ export default { WITHDRAWALS_FORM_AMOUNT_LABEL: '{0} abzuhebender Betrag', WITHDRAWALS_FORM_AMOUNT_PLACEHOLDER: 'Geben Sie den Betrag von {0} ein, den Sie abheben möchten', - WITHDRAWALS_FORM_FEE_COMMON_LABEL: - 'Transaktionsgebühr', + WITHDRAWALS_FORM_FEE_COMMON_LABEL: 'Transaktionsgebühr', WITHDRAWALS_FORM_FEE_FIAT_LABEL: 'Bankabhebungsgebühr', WITHDRAWALS_FORM_FEE_PLACEHOLDER: 'Geben Sie den Betrag von {0} ein, den Sie als Gebühr für die Transaktion verwenden möchten', @@ -852,15 +866,18 @@ export default { DEPOSIT_VERIFICATION_WARNING_INFORMATION: 'Dies ist die ID des Vorgangs: "{0}", bitte teilen Sie uns diese ID mit, damit wir Ihnen helfen können.', DEPOSIT_VERIFICATION_SUCCESS: 'Zahlung verifiziert', - DEPOSIT_VERIFICATION_ERROR: 'Es ist ein Fehler bei der Verifizierung der Einzahlung aufgetreten.', - DEPOSIT_VERIFICATION_ERROR_VERIFIED: 'Die Einzahlung wurde bereits verifiziert', + DEPOSIT_VERIFICATION_ERROR: + 'Es ist ein Fehler bei der Verifizierung der Einzahlung aufgetreten.', + DEPOSIT_VERIFICATION_ERROR_VERIFIED: + 'Die Einzahlung wurde bereits verifiziert', DEPOSIT_VERIFICATION_ERROR_STATUS: 'Ungültiger Status', DEPOSIT_VERIFICATION_ERROR_USER_MATCH: 'Die Karte, mit der Sie die Einzahlung vorgenommen haben, ist nicht dieselbe wie Ihre registrierte Karte. Daher wird Ihre Einzahlung abgelehnt und Ihr Geld wird in weniger als einer Stunde zurückerstattet.', QUOTE_MESSAGE: 'Sie gehen zu {0} {1} {2} für {3} {4}', QUOTE_BUTTON: 'Akzeptieren', QUOTE_REVIEW: 'Überprüfen', - QUOTE_COUNTDOWN_MESSAGE: 'Sie haben {0} Sekunden, um den Handel durchzuführen', + QUOTE_COUNTDOWN_MESSAGE: + 'Sie haben {0} Sekunden, um den Handel durchzuführen', QUOTE_EXPIRED_TOKEN: 'Der Quote-Token ist abgelaufen.', QUOTE_SUCCESS_REVIEW_TITLE: 'Quick Trade', QUOTE_SUCCESS_REVIEW_MESSAGE: 'Sie haben erfolgreich {0} {1} {2} für {3} {4}', // you have successfully buy 1 btc from x toman @@ -879,14 +896,17 @@ export default { BASE_MESSAGE_3: 'Täglicher Abhebungs-Maximalbetragt', BASE_INCREASE_LIMIT: 'Erhöhen Sie Ihr Tageslimit', CONFIRM_VIA_EMAIL: 'Bestätigen Sie per E-Mail', - CONFIRM_VIA_EMAIL_1: 'Wir haben Ihnen eine Bestätigungs-E-Mail zur Abhebung geschickt.', + CONFIRM_VIA_EMAIL_1: + 'Wir haben Ihnen eine Bestätigungs-E-Mail zur Abhebung geschickt.', CONFIRM_VIA_EMAIL_2: 'Um den Abhebungsvorgang abzuschließen, bestätigen Sie bitte', - CONFIRM_VIA_EMAIL_3: 'die Abhebung über Ihre E-Mail innerhalb von 5 Minuten.', - WITHDRAW_CONFIRM_SUCCESS_1: 'Ihre Abhebungsanfrage ist bestätigt. Sie wird in Kürze bearbeitet.', + CONFIRM_VIA_EMAIL_3: + 'die Abhebung über Ihre E-Mail innerhalb von 5 Minuten.', + WITHDRAW_CONFIRM_SUCCESS_1: + 'Ihre Abhebungsanfrage ist bestätigt. Sie wird in Kürze bearbeitet.', WITHDRAW_CONFIRM_SUCCESS_2: 'Um Ihren Abhebungsstatus zu sehen, besuchen Sie bitte Ihre Abhebungs-Historienseite', - GO_WITHDRAWAL_HISTORY: 'Zur Abhebungsverlaufsseite gehen' + GO_WITHDRAWAL_HISTORY: 'Zur Abhebungsverlaufsseite gehen', }, WALLET_BUTTON_BASE_DEPOSIT: 'einzahlen', WALLET_BUTTON_BASE_WITHDRAW: 'abheben', @@ -925,8 +945,7 @@ export default { LOGOUT_ERROR_TOKEN_EXPIRED: 'Token ist abgelaufen', LOGOUT_ERROR_LOGIN_AGAIN: 'Erneut anmelden', // ip doesnt match LOGOUT_ERROR_INVALID_TOKEN: 'Ungültiges Token', - LOGOUT_ERROR_INACTIVE: - 'Sie wurden abgemeldet, weil Sie inaktiv waren', + LOGOUT_ERROR_INACTIVE: 'Sie wurden abgemeldet, weil Sie inaktiv waren', ORDER_ENTRY_BUTTON: '{0} {1}', // 0 -> buy/sell 1 -> btc/.. QUICK_TRADE_OUT_OF_LIMITS: 'Auftragsgröße ist außerhalb der Grenzen', QUICK_TRADE_TOKEN_USED: 'Token wurde verwendet', @@ -971,12 +990,12 @@ export default { SETTINGS_ORDERPOPUP_LABEL: 'Pop-up zur Auftragsbestätigung anzeigen', SETTINGS_ORDERPOPUP_OPTIONS: [ { value: false, label: 'NEIN' }, // DO NOT CHANGE value, ONLY TRANSLATE label - { value: true, label: 'Ja' } // DO NOT CHANGE value, ONLY TRANSLATE label + { value: true, label: 'Ja' }, // DO NOT CHANGE value, ONLY TRANSLATE label ], SETTINGS_THEME_LABEL: 'User Interface Theme', // TODO set right labels // ToDo SETTINGS_THEME_OPTIONS: [ { value: 'white', label: 'Weiß' }, // DO NOT CHANGE value, ONLY TRANSLATE label - { value: 'dark', label: 'Dunkel' } // DO NOT CHANGE value, ONLY TRANSLATE label + { value: 'dark', label: 'Dunkel' }, // DO NOT CHANGE value, ONLY TRANSLATE label ], SETTING_BUTTON: 'speichern', STRING_WITH_PARENTHESIS: '{0} ({1})', @@ -996,7 +1015,7 @@ export default { ACTIVE: 'Aktiv', INACTIVE: 'Inaktiv', INVALID_LEVEL: - 'Sie müssen Ihre Verifizierungsstufe erhöhen, um Zugriff auf diese Funktion zu haben' // TODO + 'Sie müssen Ihre Verifizierungsstufe erhöhen, um Zugriff auf diese Funktion zu haben', // TODO }, DEVELOPERS_TOKENS_POPUP: { GENERATE_TITLE: 'API-Schlüssel generieren', @@ -1014,7 +1033,7 @@ export default { CREATED_TITLE: 'Kopieren Sie Ihren API-Schlüssel', CREATED_TEXT_1: 'Bitte kopieren Sie Ihren API-Schlüssel, da dieser in Zukunft nicht mehr erreichbar sein wird.', - CREATED_TEXT_2: 'Halten Sie Ihren Schlüssel privat.' + CREATED_TEXT_2: 'Halten Sie Ihren Schlüssel privat.', }, DEVELOPERS_TOKENS_TABLE: { NAME: 'Name', @@ -1023,7 +1042,7 @@ export default { CREATED: 'Erstelltes Datum', REVOKE: 'Widerrufen', REVOKED: 'Widerrufen', - REVOKE_TOOLTIP: 'Sie müssen 2FA aktivieren, um das Token zu widerrufen' // TODO + REVOKE_TOOLTIP: 'Sie müssen 2FA aktivieren, um das Token zu widerrufen', // TODO }, CHAT: { CHAT_TEXT: 'Chat', @@ -1035,11 +1054,12 @@ export default { CHAT_MESSAGE_BOX_PLACEHOLDER: 'Mitteilungen', SIGN_UP_CHAT: 'Zum Chatten anmelden', JOIN_CHAT: 'Benutzername für den Chat festlegen', - TROLLBOX: 'Trollbox ({0})' // new + TROLLBOX: 'Trollbox ({0})', // new }, INVALID_USERNAME: 'Der Benutzername muss zwischen 3 und 15 Zeichen lang sein. Enthält nur Kleinbuchstaben, Zahlen und Unterstrich', - USERNAME_TAKEN: 'Dieser Benutzername ist bereits vergeben. Bitte versuchen Sie einen anderen.', + USERNAME_TAKEN: + 'Dieser Benutzername ist bereits vergeben. Bitte versuchen Sie einen anderen.', USERNAME_LABEL: 'Benutzername (wird für den Chat verwendet)', USERNAME_PLACEHOLDER: 'Benutzername', TAB_USERNAME: 'Benutzername', @@ -1063,7 +1083,7 @@ export default { LABEL_PAIR_MAKER_FEE: '{0} Maker Gebühr', LABEL_PAIR_TAKER_FEE: '{0} Taker Gebühr', UNLIMITED: 'Unbegrenzt', - BLOCKED: '0' + BLOCKED: '0', }, WALLET_ADDRESS_TITLE: 'Geldbörse {0} generieren', WALLET_ADDRESS_GENERATE: 'Erzeugen', @@ -1119,7 +1139,8 @@ export default { VIEW_FEE_STRUCTURE: 'Gebührenstruktur und Limits anzeigen', UPGRADE_ACCOUNT: 'Konto aktualisieren', ACTIVE_2FA_SECURITY: 'Aktive 2FA-Sicherheit', - ACCOUNT_ASSETS_TXT_1: 'Angezeigt wird eine Übersicht über alle Ihre Assets.', + ACCOUNT_ASSETS_TXT_1: + 'Angezeigt wird eine Übersicht über alle Ihre Assets.', ACCOUNT_ASSETS_TXT_2: 'Das Halten einer großen Menge an Vermögenswerten berechtigt Sie zu einem Konto-Upgrade, das ein einzigartiges Abzeichen und niedrigere Handelsgebühren beinhaltet.', TRADING_VOLUME_TXT_1: @@ -1194,15 +1215,21 @@ export default { TRADE_OVER_BTC: 'Handel über {0} BTC Wert', // new XHT_IN_WALLET: '{0} XHT in der Geldbörse', // new REWARDS_BONUS: 'Belohnungen und Prämien', // new - COMPLETE_TASK_DESC: 'Erfüllen Sie Aufgaben und verdienen Sie Prämien im Wert von über 10.000 $.', // new + COMPLETE_TASK_DESC: + 'Erfüllen Sie Aufgaben und verdienen Sie Prämien im Wert von über 10.000 $.', // new TASKS: 'Aufgaben', // new - MAKE_FIRST_DEPOSIT: 'Machen Sie Ihre erste Einzahlung und erhalten Sie 1 XHT', // new - BUY_FIRST_XHT: 'Kaufen Sie Ihr ersten XHT und erhalten Sie einen Bonus von 5 XHT', // new + MAKE_FIRST_DEPOSIT: + 'Machen Sie Ihre erste Einzahlung und erhalten Sie 1 XHT', // new + BUY_FIRST_XHT: + 'Kaufen Sie Ihr ersten XHT und erhalten Sie einen Bonus von 5 XHT', // new COMPLETE_ACC_VERIFICATION: 'Schließen Sie die Kontoverifizierung ab und erhalten Sie einen 20 XHT-Bonus', // new - INVITE_USER: 'Laden Sie Benutzer ein und genießen Sie Provisionen aus deren Handel', // new - JOIN_HAP: 'Werden Sie Mitglied bei HAP und verdienen Sie 10% für jedes verkaufte HollaEx Kit', // new - EARN_RUNNING_EXCHANGE: 'Verdienen Sie passives Einkommen durch den Betrieb Ihrer eigenen Exchange.', // new + INVITE_USER: + 'Laden Sie Benutzer ein und genießen Sie Provisionen aus deren Handel', // new + JOIN_HAP: + 'Werden Sie Mitglied bei HAP und verdienen Sie 10% für jedes verkaufte HollaEx Kit', // new + EARN_RUNNING_EXCHANGE: + 'Verdienen Sie passives Einkommen durch den Betrieb Ihrer eigenen Exchange.', // new XHT_WAVE_AUCTION: 'XHT-Wellen-Auktionsdaten', // new XHT_WAVE_DESC_1: 'Die Verteilung des HollaEx-Tokens (XHT) erfolgt über eine Wave-Auktion.', // new @@ -1214,17 +1241,19 @@ export default { LEARN_MORE_WAVE_AUCTION: 'Erfahren Sie mehr über die Wave Auktion', // new WAVE_NUMBER: 'Wellennummer', // new DISCOUNT: '( {0}% Rabatt )', // new - MY_FEES_LIMITS: ' Meine Gebühren und Limits' // new + MY_FEES_LIMITS: ' Meine Gebühren und Limits', // new }, REFERRAL_LINK: { TITLE: 'Freunde einladen', // new INFO_TEXT: 'Empfehlen Sie Ihre Freunde, indem Sie diesen Link weitergeben und erhalten Sie Vorteile, wenn Sie andere Personen einladen.', - COPY_FIELD_LABEL: 'Teilen Sie den untenstehenden Link mit Freunden und verdienen Sie Provisionen:', // new + COPY_FIELD_LABEL: + 'Teilen Sie den untenstehenden Link mit Freunden und verdienen Sie Provisionen:', // new REFERRED_USER_COUT: 'Sie haben {0} Benutzer empfohlen.', // new COPY_LINK_BUTTON: 'EMPFEHLUNGSLINK KOPIEREN', // new XHT_TITLE: 'MEINE REFERRALS', // new - XHT_INFO_TEXT: 'Verdienen Sie Provisionen, indem Sie Ihre Freunde einladen.', // new + XHT_INFO_TEXT: + 'Verdienen Sie Provisionen, indem Sie Ihre Freunde einladen.', // new XHT_INFO_TEXT_1: 'Provisionen werden periodisch an Ihre Geldbörse gezahlt', // new APPLICATION_TXT: 'Um ein HollaEx-Kit-Vertriebspartner zu werden, füllen Sie bitte einen Antrag aus.', // new @@ -1232,7 +1261,7 @@ export default { PENDING_REFERRAL: 'Ausstehende Kommissionen:', // new EARN_REFERRAL: 'Verdiente Provisionen:', // new XHT_COUNT: '{0} XHT', // new - APPLY_BUTTON: 'ANWENDEN' // new + APPLY_BUTTON: 'ANWENDEN', // new }, STAKE_TOKEN: { TITLE: 'Staken von HollaEx Token', // new @@ -1242,7 +1271,7 @@ export default { 'Sie können Ihre HollaEx-Token auf ähnliche Weise sichern und XHT verdienen, die während der Wave-Auktion nicht verkauft werden.', // new INFO_TXT3: 'Gehen Sie einfach auf dash.bitholla.com und sichern Sie sich noch heute Ihren eigenen Exchange und verdienen Sie kostenlos XHT', // new - BUTTON_TXT: 'FINDEN SIE MEHR' // new + BUTTON_TXT: 'FINDEN SIE MEHR', // new }, TERMS_OF_SERVICES: { // new @@ -1257,14 +1286,16 @@ export default { 'Zahlen Sie Geld in Ihre Geldbörse ein, um HollaEx Token (XHT) zu erhalten', READ_FAG: 'Lesen Sie HollaEx FAQ hier: {0}', READ_DOCUMENTATION: 'Lesen Sie das HollaEx Whitepaper hier: {0}', - READ_WAVES: 'Regeln für die kommende öffentliche Wellenauktion im Dezember{0}', // new + READ_WAVES: + 'Regeln für die kommende öffentliche Wellenauktion im Dezember{0}', // new DOWNLOAD_BUY_XHT: 'Laden Sie die PDF-Datei herunter, um eine visuelle Schritt-für-Schritt-Anleitung zu sehen {0}', HOW_TO_BUY: 'wie man HollaEx Token (XHT) kauft', PUBLIC_SALES: 'Öffentliche Wellen-Auktion', // new CONTACT_US: 'Für weitere Informationen und bei Problemen können Sie uns gerne eine E-Mail an {0} senden.', - VISUAL_STEP: 'Sehen Sie eine visuelle Schritt-für-Schritt-Anleitung auf {0}', // new + VISUAL_STEP: + 'Sehen Sie eine visuelle Schritt-für-Schritt-Anleitung auf {0}', // new WARNING_TXT: 'Wir werden Ihre Anfrage prüfen und Ihnen weitere Anweisungen für den Zugang zur XIV Exchange per E-Mail zusenden.', // new WARNING_TXT1: @@ -1275,7 +1306,7 @@ export default { XHT_TITLE: 'XHT', //new XHT_TRADE_TXT_1: 'Anmelden, um Ihre letzten Trades zu sehen', //new XHT_TRADE_TXT_2: 'Sie können {0}, um Ihren letzten Handelsverlauf zu sehen', //new - LOGIN_HERE: 'hier anmelden' + LOGIN_HERE: 'hier anmelden', }, WAVES: { // new @@ -1283,7 +1314,7 @@ export default { NEXT_WAVE: 'Nächste Welle', WAVE_AMOUNT: 'Menge in Welle', FLOOR: 'Etage', - LAST_WAVE: 'Letzte Wellee' + LAST_WAVE: 'Letzte Wellee', }, TYPES_OF_POSTS: { // new @@ -1291,12 +1322,13 @@ export default { ANNOUNCEMEN: 'Ankündigung', SYSTEM_UPDATE: 'System-Update', LAST_WAVE: 'Letzte Welle', - ANNOUNCEMENT_TXT: 'Kostenloses XHT wird an alle Geldbörsen verteilt, die sich für diese Funktion qualifizieren.', + ANNOUNCEMENT_TXT: + 'Kostenloses XHT wird an alle Geldbörsen verteilt, die sich für diese Funktion qualifizieren.', SYSTEM_UPDATE_TIME: 'Zeit: 12:31 PM, 19. Dezember 2019 ', SYSTEM_UPDATE_DURATION: '1 Stunde', LAST_WAVE_AMOUNT: '100, 213 XHT', LAST_WAVE_REDISTRIBUTED: ' 11, 211', - LAST_WAVE_TIME: ' 12: 31 PM, 19. Dezember 2019' + LAST_WAVE_TIME: ' 12: 31 PM, 19. Dezember 2019', }, USER_LEVEL: 'User Level', // new LIMIT_AMOUNT: 'Grenzwertbetrag', // new @@ -1326,10 +1358,11 @@ export default { 'Verdienen Sie XHT mit dem HAP-Programm, indem Sie Ihre Freunde in den Exchange einladen. {0}.', DEFAULT_ANNOUNCEMENT: 'In diesem Bereich werden Ihre öffentlichen Ankündigungen für den Exchange angezeigt!', - ANNOUNCEMENT_TXT_2: 'Kostenloses XHT wird an alle Geldbörsen verteilt, die {0}.', + ANNOUNCEMENT_TXT_2: + 'Kostenloses XHT wird an alle Geldbörsen verteilt, die {0}.', LEARN_MORE: 'Mehr erfahren', - APPLY_TODAY: 'Heute bewerben' // new + APPLY_TODAY: 'Heute bewerben', // new }, OPEN_WALLET: 'Offener Geldbeutel', // new - AGO: 'ago' // new + AGO: 'ago', // new }; diff --git a/web/src/config/lang/en.js b/web/src/config/lang/en.js index b66abb0edb..6c7ff498b2 100644 --- a/web/src/config/lang/en.js +++ b/web/src/config/lang/en.js @@ -81,7 +81,6 @@ const nestedContent = { FOOTER: { FOOTER_LEGAL: ['Proudly made in Seoul, South Korea', 'bitHolla Inc.'], FOOTER_LANGUAGE_TEXT: 'LANGUAGE', - FOOTER_COPYRIGHT: 'Powered by bitHolla', SECTIONS: { SECTION_1_TITLE: 'ABOUT', SECTION_1_LINK_1: 'About Us', diff --git a/web/src/config/lang/es.js b/web/src/config/lang/es.js index c5caf45f59..a29347a7e3 100644 --- a/web/src/config/lang/es.js +++ b/web/src/config/lang/es.js @@ -78,7 +78,6 @@ export default { FOOTER: { FOOTER_LEGAL: ['Proudly made in Seoul, South Korea', 'bitHolla Inc.'], FOOTER_LANGUAGE_TEXT: 'LANGUAGE', - FOOTER_COPYRIGHT: 'Powered by bitHolla', SECTIONS: { SECTION_1_TITLE: 'ABOUT', SECTION_1_LINK_1: 'About Us', @@ -680,7 +679,8 @@ export default { WITHDRAWALS: 'Retiros', }, ACCOUNT_SECURITY: { - TITLE_TEXT:'Adjust the security settings for your account. From Two-factor authentication, password, API keys and other security related functions.', + TITLE_TEXT: + 'Adjust the security settings for your account. From Two-factor authentication, password, API keys and other security related functions.', OTP: { TITLE: 'Autenticación de dos factores', OTP_ENABLED: 'habilitar otp', @@ -710,7 +710,8 @@ export default { DISABLE: 'Desactivar la autenticación de dos factores', SECRET_1: 'Enter yor secret key', SECRET_2: 'Please enter your secret key to confirm you wrote it down.', - SECRET_3: 'This secret key will help you recover your account if you lost access to your phone.', + SECRET_3: + 'This secret key will help you recover your account if you lost access to your phone.', INPUT_1: 'Secret Key', TITLE_2: 'Enter One-Time Password (OTP)', @@ -796,7 +797,7 @@ export default { ], // DO NOT CHANGE value, ONLY TRANSLATE label DEFAULT_TOGGLE_OPTIONS: [ { value: true, label: 'Sí' }, // DO NOT CHANGE value, ONLY TRANSLATE label - { value: false, label: 'No' } // DO NOT CHANGE value, ONLY TRANSLATE label + { value: false, label: 'No' }, // DO NOT CHANGE value, ONLY TRANSLATE label ], SIZE: 'Cantidad', PRICE: 'Precio', @@ -872,8 +873,7 @@ export default { WITHDRAWALS_FORM_AMOUNT_LABEL: 'Cantidad de {0} para retirar', WITHDRAWALS_FORM_AMOUNT_PLACEHOLDER: 'Type the amount of {0} you wish to withdraw', - WITHDRAWALS_FORM_FEE_COMMON_LABEL: - 'Tarifa de Transacción', + WITHDRAWALS_FORM_FEE_COMMON_LABEL: 'Tarifa de Transacción', WITHDRAWALS_FORM_FEE_FIAT_LABEL: 'Bank withdrawal fee', WITHDRAWALS_FORM_FEE_PLACEHOLDER: 'Type the amount of {0} you wish to use in the fee of the transaction', @@ -1023,7 +1023,7 @@ export default { SETTINGS_ORDERPOPUP_LABEL: 'Display order confirmation popup', SETTINGS_ORDERPOPUP_OPTIONS: [ { value: false, label: 'NO' }, // DO NOT CHANGE value, ONLY TRANSLATE label - { value: true, label: 'Si' } // DO NOT CHANGE value, ONLY TRANSLATE label + { value: true, label: 'Si' }, // DO NOT CHANGE value, ONLY TRANSLATE label ], SETTINGS_THEME_LABEL: 'Tema de Interface de Usuario', // TODO set right labels // ToDo SETTINGS_THEME_OPTIONS: [ diff --git a/web/src/config/lang/fa.js b/web/src/config/lang/fa.js index de0053a91e..f7de0d48a2 100644 --- a/web/src/config/lang/fa.js +++ b/web/src/config/lang/fa.js @@ -81,7 +81,6 @@ const nestedContent = { FOOTER: { FOOTER_LEGAL: ['با افتخار توسعه داده شده در سئول ، کره جنوبی'], FOOTER_LANGUAGE_TEXT: 'زبان', - FOOTER_COPYRIGHT: 'Powered by bitHolla', SECTIONS: { SECTION_1_TITLE: 'درباره', SECTION_1_LINK_1: 'درباره ما', @@ -652,7 +651,8 @@ const nestedContent = { WITHDRAWALS: 'برداشت ها', }, ACCOUNT_SECURITY: { - TITLE_TEXT:'Adjust the security settings for your account. From Two-factor authentication, password, API keys and other security related functions.', + TITLE_TEXT: + 'Adjust the security settings for your account. From Two-factor authentication, password, API keys and other security related functions.', OTP: { TITLE: 'رمز یکبار مصرف', OTP_ENABLED: 'رمز یکبار مصرف را فعال کنید', @@ -682,7 +682,8 @@ const nestedContent = { DISABLE: 'غیر فعال کردن رمز یکبار مصرف', SECRET_1: 'Enter yor secret key', SECRET_2: 'Please enter your secret key to confirm you wrote it down.', - SECRET_3: 'This secret key will help you recover your account if you lost access to your phone.', + SECRET_3: + 'This secret key will help you recover your account if you lost access to your phone.', INPUT_1: 'Secret Key', TITLE_2: 'Enter One-Time Password (OTP)', diff --git a/web/src/config/lang/fr.js b/web/src/config/lang/fr.js index 8d333fc0d0..08411bce21 100644 --- a/web/src/config/lang/fr.js +++ b/web/src/config/lang/fr.js @@ -78,7 +78,6 @@ export default { FOOTER: { FOOTER_LEGAL: ['Proudly made in Seoul, South Korea', 'bitHolla Inc.'], FOOTER_LANGUAGE_TEXT: 'LANGUES', - FOOTER_COPYRIGHT: 'Powered by bitHolla', SECTIONS: { SECTION_1_TITLE: ' À PROPOS', SECTION_1_LINK_1: 'NOTRE HISTOIRE', @@ -688,7 +687,8 @@ export default { WITHDRAWALS: 'Retraits', }, ACCOUNT_SECURITY: { - TITLE_TEXT:'Adjust the security settings for your account. From Two-factor authentication, password, API keys and other security related functions.', + TITLE_TEXT: + 'Adjust the security settings for your account. From Two-factor authentication, password, API keys and other security related functions.', OTP: { TITLE: 'Authentification à deux facteurs', OTP_ENABLED: 'otp activé', @@ -713,12 +713,13 @@ export default { MESSAGE_5: 'Manuellement', INPUT: 'Entrez votre One-Time Password (OTP)', WARNING: - 'Nous vous recommandons vivement de configurer l\'authentification à 2 facteurs (2FA). Cela augmentera considérablement la sécurité de vos fonds.', - ENABLE: 'Activer l\'authentification à deux facteurs ', - DISABLE: 'Désactiver l\'authentification à deux facteurs', + "Nous vous recommandons vivement de configurer l'authentification à 2 facteurs (2FA). Cela augmentera considérablement la sécurité de vos fonds.", + ENABLE: "Activer l'authentification à deux facteurs ", + DISABLE: "Désactiver l'authentification à deux facteurs", SECRET_1: 'Enter yor secret key', SECRET_2: 'Please enter your secret key to confirm you wrote it down.', - SECRET_3: 'This secret key will help you recover your account if you lost access to your phone.', + SECRET_3: + 'This secret key will help you recover your account if you lost access to your phone.', INPUT_1: 'Secret Key', TITLE_2: 'Enter One-Time Password (OTP)', diff --git a/web/src/config/lang/id.js b/web/src/config/lang/id.js index eafb1dedbc..661c9ba6a8 100644 --- a/web/src/config/lang/id.js +++ b/web/src/config/lang/id.js @@ -79,7 +79,6 @@ export default { FOOTER: { FOOTER_LEGAL: ['Proudly made in Seoul, South Korea', 'bitHolla Inc.'], FOOTER_LANGUAGE_TEXT: 'LANGUAGE', - FOOTER_COPYRIGHT: 'Powered by bitHolla', SECTIONS: { SECTION_1_TITLE: 'ABOUT', SECTION_1_LINK_1: 'About Us', diff --git a/web/src/config/lang/ja.js b/web/src/config/lang/ja.js index 9b335f147f..4e927721e4 100644 --- a/web/src/config/lang/ja.js +++ b/web/src/config/lang/ja.js @@ -78,7 +78,6 @@ export default { FOOTER: { FOOTER_LEGAL: ['Proudly made in Seoul, South Korea', 'bitHolla Inc.'], FOOTER_LANGUAGE_TEXT: 'LANGUAGE', - FOOTER_COPYRIGHT: 'Powered by bitHolla', SECTIONS: { SECTION_1_TITLE: 'ABOUT', SECTION_1_LINK_1: 'About Us', diff --git a/web/src/config/lang/ko.js b/web/src/config/lang/ko.js index 417794be5f..a0b2f1e6ef 100644 --- a/web/src/config/lang/ko.js +++ b/web/src/config/lang/ko.js @@ -79,7 +79,6 @@ const nestedContent = { FOOTER: { FOOTER_LEGAL: ['Proudly made in Seoul, South Korea', 'bitHolla Inc.'], FOOTER_LANGUAGE_TEXT: 'LANGUAGE', - FOOTER_COPYRIGHT: 'Powered by bitHolla', SECTIONS: { SECTION_1_TITLE: 'ABOUT', SECTION_1_LINK_1: 'About Us', diff --git a/web/src/config/lang/vi.js b/web/src/config/lang/vi.js index 9655fba70d..81c1697e30 100644 --- a/web/src/config/lang/vi.js +++ b/web/src/config/lang/vi.js @@ -79,7 +79,6 @@ export default { FOOTER: { FOOTER_LEGAL: ['Proudly made in Seoul, South Korea', 'bitHolla Inc.'], FOOTER_LANGUAGE_TEXT: 'LANGUAGE', - FOOTER_COPYRIGHT: 'Powered by bitHolla', SECTIONS: { SECTION_1_TITLE: 'ABOUT', SECTION_1_LINK_1: 'About Us', diff --git a/web/src/config/lang/zh.js b/web/src/config/lang/zh.js index 309f5f1f43..d83c12b584 100644 --- a/web/src/config/lang/zh.js +++ b/web/src/config/lang/zh.js @@ -75,7 +75,6 @@ export default { FOOTER: { FOOTER_LEGAL: ['Proudly made in Seoul, South Korea', 'bitHolla Inc.'], FOOTER_LANGUAGE_TEXT: 'LANGUAGE', - FOOTER_COPYRIGHT: 'Powered by bitHolla', SECTIONS: { SECTION_1_TITLE: 'ABOUT', SECTION_1_LINK_1: 'About Us', From 045608fbfd8204ad922a4a18e7f934f4f6c699f6 Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Mon, 15 Feb 2021 14:12:12 +0330 Subject: [PATCH 05/17] changes for referral badge section --- web/src/components/AppFooter/index.js | 17 +++++++-- web/src/config/icons/static.js | 1 + .../containers/Admin/General/Description.js | 37 +++++++++++++++++++ web/src/containers/Admin/General/index.css | 4 ++ web/src/containers/Admin/General/index.js | 17 +++++++++ web/src/containers/Admin/General/utils.js | 16 ++++++++ 6 files changed, 89 insertions(+), 3 deletions(-) diff --git a/web/src/components/AppFooter/index.js b/web/src/components/AppFooter/index.js index d5396545e4..bd6da4da40 100644 --- a/web/src/components/AppFooter/index.js +++ b/web/src/components/AppFooter/index.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { Fragment } from 'react'; import classnames from 'classnames'; import { isMobile } from 'react-device-detect'; // import { PUBLIC_URL } from '../../config/constants'; @@ -40,6 +40,7 @@ const AppFooter = ({ className, theme, constants = { description: '' }, + constants: { links = {} }, icons: ICONS, isEditMode, }) => { @@ -161,8 +162,18 @@ const AppFooter = ({
-
-
Powered by bitHolla
+ {!links.hide_referral_badge && ( + +
); diff --git a/web/src/config/icons/static.js b/web/src/config/icons/static.js index 4733163009..f41841dc73 100644 --- a/web/src/config/icons/static.js +++ b/web/src/config/icons/static.js @@ -46,6 +46,7 @@ const icons = { ADMIN_MISSING_GO_BACK: '/assets/images/missing-page-go-back-to-dash.svg', HELP_DESCRIPTION_POPUP: '/assets/images/help-popup-description.png', HELP_FOOTER_POPUP: '/assets/images/help-popup-footer.png', + HELP_REFERRAL_BADGE_POPUP: '/assets/images/help-popup-footer.png', DEPOSIT_TIERS_SECTION: '/assets/images/deposit-tier-section.svg', WITHDRAW_TIERS_SECTION: '/assets/images/withdraw-tier-section.svg', TAKER_TIERS_SECTION: '/assets/images/taker-tier-section.svg', diff --git a/web/src/containers/Admin/General/Description.js b/web/src/containers/Admin/General/Description.js index 302e66ad47..efa7bd7e83 100644 --- a/web/src/containers/Admin/General/Description.js +++ b/web/src/containers/Admin/General/Description.js @@ -7,9 +7,20 @@ import { STATIC_ICONS } from 'config/icons'; const DescriptionForm = AdminHocForm('DescriptionForm'); const FooterTextForm = AdminHocForm('FooterDescriptionForm'); +const ReferralBadgeForm = AdminHocForm('ReferralBadgeForm'); class Description extends Component { handleImg = (type) => { + if (type === 'referral_badge') { + return ( + referral badge + ); + } + return type === 'description' ? ( @@ -78,6 +91,30 @@ class Description extends Component { buttonText="Save" buttonClass="green-btn minimal-btn" /> +
+
+

+ Referral Badge{' '} + + + +

+
+

+ Edit the referral badge in the bottom left corner. This space can be + repurposed for copyright or other business related data. +

+
); } diff --git a/web/src/containers/Admin/General/index.css b/web/src/containers/Admin/General/index.css index 3010dae5fe..cb4612b25c 100644 --- a/web/src/containers/Admin/General/index.css +++ b/web/src/containers/Admin/General/index.css @@ -296,6 +296,10 @@ h2, right: 8px; bottom: 3px; } +.referral_badge_note { + bottom: 60px; + right: 7px; +} .description_footer { bottom: 60px; right: 7px; diff --git a/web/src/containers/Admin/General/index.js b/web/src/containers/Admin/General/index.js index 083b774aec..9cbcf731b1 100644 --- a/web/src/containers/Admin/General/index.js +++ b/web/src/containers/Admin/General/index.js @@ -287,6 +287,16 @@ class General extends Component { this.handleSubmitGeneral(formValues); }; + handleSubmitReferralBadge = (formProps) => { + this.handleSubmitGeneral({ + kit: { + links: { + ...formProps, + }, + }, + }); + }; + handleSubmitHelpDesk = (formProps) => { this.handleSubmitGeneral({ kit: { @@ -709,8 +719,15 @@ class General extends Component { descriptionFields={generalFields.section_5} descriptionInitialValues={{ description: kit.description }} footerFields={generalFields.section_6} + ReferralBadgeFields={generalFields.section_8} + ReferralBadgeInitialValues={{ + hide_referral_badge: initialLinkValues.hide_referral_badge, + referral_label: initialLinkValues.referral_label, + referral_link: initialLinkValues.referral_link, + }} footerInitialValues={{ description: kit.footer_description }} handleSubmitDescription={this.handleSubmitName} + handleSubmitReferralBadge={this.handleSubmitReferralBadge} />
diff --git a/web/src/containers/Admin/General/utils.js b/web/src/containers/Admin/General/utils.js index 154ada501f..b93cbbdac3 100644 --- a/web/src/containers/Admin/General/utils.js +++ b/web/src/containers/Admin/General/utils.js @@ -77,4 +77,20 @@ export const getGeneralFields = (coins) => ({ placeholder: 'http://', }, }, + section_8: { + hide_referral_badge: { + type: 'checkbox', + label: 'Hide referral badge', + }, + referral_label: { + type: 'input', + label: 'Text label', + placeholder: 'Powered by bitHolla', + }, + referral_link: { + type: 'input', + label: 'Link', + placeholder: 'https://bitholla.com/', + }, + }, }); From 0efd7d0035d1d34ada2ec9f3cce5d79bf79097b7 Mon Sep 17 00:00:00 2001 From: Brandon Kim Date: Tue, 16 Feb 2021 13:51:56 +0900 Subject: [PATCH 06/17] freeze user fix --- server/constants.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/constants.js b/server/constants.js index 0128d1b61d..38dac31ec4 100644 --- a/server/constants.js +++ b/server/constants.js @@ -54,10 +54,10 @@ subscriber.on('message', (channel, message) => { if (data.secrets) updateSecrets(data.secrets); break; case 'freezeUser': - updateFrozenUser(data, 'add'); + updateFrozenUser('add', data); break; case 'unfreezeUser': - updateFrozenUser(data, 'remove'); + updateFrozenUser('remove', data); break; case 'stop': resetAllConfig(); From 839ed8f0f14e529deb15efc9a26de96dbf45d654 Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Tue, 16 Feb 2021 09:58:56 +0330 Subject: [PATCH 07/17] changes for disabling form in admin form hoc and utils --- web/src/components/AdminForm/hoc.js | 4 +++- web/src/components/AdminForm/utils.js | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/web/src/components/AdminForm/hoc.js b/web/src/components/AdminForm/hoc.js index b66f3ef998..f8deb3ddcc 100644 --- a/web/src/components/AdminForm/hoc.js +++ b/web/src/components/AdminForm/hoc.js @@ -17,6 +17,7 @@ const Form = (name, className = '', allowPristine = false) => { small, buttonClass = '', submitOnKeyDown = false, + disableAllFields = false, }) => { return (
{ } }} > - {fields && renderFields(fields)} + {fields && renderFields(fields, disableAllFields)} {error && (
{error} @@ -40,6 +41,7 @@ const Form = (name, className = '', allowPristine = false) => { type={buttonType ? buttonType : 'primary'} onClick={handleSubmit(onSubmit)} disabled={ + disableAllFields || (allowPristine ? false : fields && pristine) || submitting || !valid || diff --git a/web/src/components/AdminForm/utils.js b/web/src/components/AdminForm/utils.js index 1322b01ed8..a580bf1a23 100644 --- a/web/src/components/AdminForm/utils.js +++ b/web/src/components/AdminForm/utils.js @@ -13,7 +13,7 @@ import { FileField } from './FileField'; import CaptchaField from './captchaField'; import Editor from './Editor'; -const renderFields = (fields) => { +const renderFields = (fields, disableAllFields) => { return ( {Object.keys(fields).map((key) => { @@ -23,6 +23,7 @@ const renderFields = (fields) => { validate: field.validate || [], name: key, key, + ...(disableAllFields ? { disabled: true } : {}), }; let component; From efa6480679f84c9dc5ad1364f032618f636154ea Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Tue, 16 Feb 2021 10:00:34 +0330 Subject: [PATCH 08/17] changes description and referral badge form --- .../containers/Admin/General/Description.js | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/web/src/containers/Admin/General/Description.js b/web/src/containers/Admin/General/Description.js index efa7bd7e83..1bb0eb9246 100644 --- a/web/src/containers/Admin/General/Description.js +++ b/web/src/containers/Admin/General/Description.js @@ -1,5 +1,6 @@ import React, { Component } from 'react'; -import { Tooltip } from 'antd'; +import { connect } from 'react-redux'; +import { Tooltip, Button } from 'antd'; import { QuestionCircleOutlined } from '@ant-design/icons'; import { AdminHocForm } from '../../../components'; @@ -44,6 +45,7 @@ class Description extends Component { footerInitialValues, ReferralBadgeFields, ReferralBadgeInitialValues, + constants: { info: { collateral_level = 'zero' } = {} } = {}, } = this.props; return (
@@ -108,16 +110,47 @@ class Description extends Component { Edit the referral badge in the bottom left corner. This space can be repurposed for copyright or other business related data.

+ + {collateral_level === 'zero' && ( +
+
+
Fully rebrand your platform
+
+ Replace the badge with your own branding. +
+
+ +
+ )} +
); } } -export default Description; +const mapStateToProps = (store) => ({ + constants: store.app.constants, +}); + +export default connect(mapStateToProps)(Description); From e7a69b5810ea492147ec478912b140fcb71872cc Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Tue, 16 Feb 2021 10:07:25 +0330 Subject: [PATCH 09/17] add TOS tooltip icon --- ...ms_of_service_and_privacy_policy-tooltip.png | Bin 0 -> 42889 bytes web/src/config/icons/static.js | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 web/public/assets/images/terms_of_service_and_privacy_policy-tooltip.png diff --git a/web/public/assets/images/terms_of_service_and_privacy_policy-tooltip.png b/web/public/assets/images/terms_of_service_and_privacy_policy-tooltip.png new file mode 100644 index 0000000000000000000000000000000000000000..136cff08bcead3bdfebfdd8424b2d0af4163cc80 GIT binary patch literal 42889 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 Date: Tue, 16 Feb 2021 10:18:39 +0330 Subject: [PATCH 10/17] changes for footer description style --- web/src/containers/Admin/General/index.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/containers/Admin/General/index.css b/web/src/containers/Admin/General/index.css index cb4612b25c..a07263f589 100644 --- a/web/src/containers/Admin/General/index.css +++ b/web/src/containers/Admin/General/index.css @@ -301,8 +301,8 @@ h2, right: 7px; } .description_footer { - bottom: 60px; - right: 7px; + bottom: 42px; + right: 4px; } .custom-form-wrapper { display: flex; From ef2973bdb3796f5a5768a5c6087302f51875fc30 Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Tue, 16 Feb 2021 11:01:58 +0330 Subject: [PATCH 11/17] changes small footer section --- web/src/containers/Admin/General/Description.js | 4 ++-- web/src/containers/Admin/General/index.js | 16 +++++++++++++++- web/src/containers/Admin/General/utils.js | 14 +++++++++----- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/web/src/containers/Admin/General/Description.js b/web/src/containers/Admin/General/Description.js index 1bb0eb9246..11137cea02 100644 --- a/web/src/containers/Admin/General/Description.js +++ b/web/src/containers/Admin/General/Description.js @@ -85,11 +85,11 @@ class Description extends Component {

-

Small text often used for copywrite or other business data

+

Add a link to your Terms of Service and Privacy Policy

diff --git a/web/src/containers/Admin/General/index.js b/web/src/containers/Admin/General/index.js index 9cbcf731b1..e9d812982b 100644 --- a/web/src/containers/Admin/General/index.js +++ b/web/src/containers/Admin/General/index.js @@ -297,6 +297,16 @@ class General extends Component { }); }; + handleSubmitTOSlinks = (formProps) => { + this.handleSubmitGeneral({ + kit: { + links: { + ...formProps, + }, + }, + }); + }; + handleSubmitHelpDesk = (formProps) => { this.handleSubmitGeneral({ kit: { @@ -725,8 +735,12 @@ class General extends Component { referral_label: initialLinkValues.referral_label, referral_link: initialLinkValues.referral_link, }} - footerInitialValues={{ description: kit.footer_description }} + footerInitialValues={{ + terms: initialLinkValues.terms, + privacy: initialLinkValues.privacy, + }} handleSubmitDescription={this.handleSubmitName} + handleSubmitFooterText={this.handleSubmitTOSlinks} handleSubmitReferralBadge={this.handleSubmitReferralBadge} />
diff --git a/web/src/containers/Admin/General/utils.js b/web/src/containers/Admin/General/utils.js index b93cbbdac3..3879595af7 100644 --- a/web/src/containers/Admin/General/utils.js +++ b/web/src/containers/Admin/General/utils.js @@ -63,11 +63,15 @@ export const getGeneralFields = (coins) => ({ }, }, section_6: { - footer_description: { - type: 'textarea', - label: 'Small text', - placeholder: 'Write your small text filler', - validate: [validateRequired], + terms: { + type: 'input', + label: 'Terms of service link', + placeholder: 'https://', + }, + privacy: { + type: 'input', + label: 'Privacy policy link', + placeholder: 'https://', }, }, section_7: { From 0225d7dbec5f59f07aaa769232419560233317a1 Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Tue, 16 Feb 2021 11:53:35 +0330 Subject: [PATCH 12/17] changes for footer row small text --- web/src/components/AppFooter/index.js | 45 ++++++++++++++++++++++----- web/src/config/lang/en.js | 2 ++ 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/web/src/components/AppFooter/index.js b/web/src/components/AppFooter/index.js index bd6da4da40..9e1c6de52d 100644 --- a/web/src/components/AppFooter/index.js +++ b/web/src/components/AppFooter/index.js @@ -1,10 +1,11 @@ -import React, { Fragment } from 'react'; +import React from 'react'; import classnames from 'classnames'; import { isMobile } from 'react-device-detect'; // import { PUBLIC_URL } from '../../config/constants'; import withConfig from 'components/ConfigProvider/withConfig'; import Image from 'components/Image'; import withEdit from 'components/EditProvider/withEdit'; +import STRINGS from 'config/localizedStrings'; const generateSectionsText = (links = {}, ICONS) => { let sectionsText = Object.keys(links) @@ -161,10 +162,16 @@ const AppFooter = ({ -
- {!links.hide_referral_badge && ( - -
+ ); diff --git a/web/src/config/lang/en.js b/web/src/config/lang/en.js index 6c7ff498b2..4850a1f505 100644 --- a/web/src/config/lang/en.js +++ b/web/src/config/lang/en.js @@ -81,6 +81,8 @@ const nestedContent = { FOOTER: { FOOTER_LEGAL: ['Proudly made in Seoul, South Korea', 'bitHolla Inc.'], FOOTER_LANGUAGE_TEXT: 'LANGUAGE', + TERMS_OF_SERVICE: 'Terms of Service', + PRIVACY_POLICY: 'Privacy Policy', SECTIONS: { SECTION_1_TITLE: 'ABOUT', SECTION_1_LINK_1: 'About Us', From 90d9503ebff21b357530c0169d61b24fae04eebd Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Wed, 17 Feb 2021 07:55:22 +0330 Subject: [PATCH 13/17] changes for fees and limits --- web/src/containers/App/App.js | 3 ++- web/src/containers/App/index.js | 1 + .../Summary/components/FeesAndLimits.js | 4 ++- .../Summary/components/FeesBlock.js | 19 ++++++++------ .../Summary/components/LimitsBlock.js | 25 ++++++++----------- 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/web/src/containers/App/App.js b/web/src/containers/App/App.js index 0d15cbbc25..94e31a5fcb 100644 --- a/web/src/containers/App/App.js +++ b/web/src/containers/App/App.js @@ -284,7 +284,7 @@ class App extends Component { }; renderDialogContent = ({ type, data }, prices = {}) => { - const { icons: ICONS } = this.props; + const { icons: ICONS, config_level } = this.props; switch (type) { case NOTIFICATIONS.ORDERS: case NOTIFICATIONS.TRADES: @@ -357,6 +357,7 @@ class App extends Component { case FEES_STRUCTURE_AND_LIMITS: return ( ({ info: store.app.info, enabledPlugins: store.app.enabledPlugins, features: store.app.features, + config_level: store.app.config_level, }); const mapDispatchToProps = (dispatch) => ({ diff --git a/web/src/containers/Summary/components/FeesAndLimits.js b/web/src/containers/Summary/components/FeesAndLimits.js index 78edca095e..20913ea0b3 100644 --- a/web/src/containers/Summary/components/FeesAndLimits.js +++ b/web/src/containers/Summary/components/FeesAndLimits.js @@ -15,6 +15,7 @@ const FeesAndLimits = ({ pairs, constants = {}, icons: ICONS, + tiers, }) => { const { verification_level, discount = 0 } = data; const LEVEL_OF_ACCOUNT = STRINGS.formatString( @@ -65,7 +66,7 @@ const FeesAndLimits = ({
- +
diff --git a/web/src/containers/Summary/components/FeesBlock.js b/web/src/containers/Summary/components/FeesBlock.js index a8c604c884..3277f2ee9b 100644 --- a/web/src/containers/Summary/components/FeesBlock.js +++ b/web/src/containers/Summary/components/FeesBlock.js @@ -6,10 +6,11 @@ import { formatPercentage } from '../../../utils/currency'; import { DEFAULT_COIN_DATA } from '../../../config/constants'; import { EditWrapper } from 'components'; -const getMakerRow = (pairs, coins, pair, level, index, discount) => { - const { pair_base, pair_2, maker_fees, taker_fees } = pairs[pair]; - const makersFee = maker_fees ? maker_fees[level] : 0; - const takersFee = taker_fees ? taker_fees[level] : 0; +const getMakerRow = (pairs, coins, pair, level, index, discount, tiers) => { + const { pair_base, pair_2 } = pairs[pair]; + const { fees: { maker, taker } = {} } = tiers[level] || {}; + const makersFee = maker ? maker[pair] : 0; + const takersFee = taker ? taker[pair] : 0; const pairBase = coins[pair_base] || DEFAULT_COIN_DATA; const pairTwo = coins[pair_2] || DEFAULT_COIN_DATA; const makersData = discount @@ -57,16 +58,18 @@ const getMakerRow = (pairs, coins, pair, level, index, discount) => { // ); // }; -const getRows = (pairs, level, coins, discount) => { +const getRows = (pairs, level, coins, discount, tiers) => { const rowData = []; Object.keys(pairs).map((pair, index) => { - rowData.push(getMakerRow(pairs, coins, pair, level, index, discount)); + rowData.push( + getMakerRow(pairs, coins, pair, level, index, discount, tiers) + ); return ''; }); return rowData; }; -const FeesBlock = ({ pairs, coins, level, discount }) => { +const FeesBlock = ({ pairs, coins, level, discount, tiers }) => { return (
@@ -97,7 +100,7 @@ const FeesBlock = ({ pairs, coins, level, discount }) => { - {getRows(pairs, level, coins, discount)} + {getRows(pairs, level, coins, discount, tiers)}
diff --git a/web/src/containers/Summary/components/LimitsBlock.js b/web/src/containers/Summary/components/LimitsBlock.js index 2a9c1b65f7..006691090f 100644 --- a/web/src/containers/Summary/components/LimitsBlock.js +++ b/web/src/containers/Summary/components/LimitsBlock.js @@ -26,14 +26,11 @@ const getLimitValue = (limit, increment_unit) => { } }; -const getDepositRow = (currency, index, coins, level) => { - const { - symbol = '', - fullname, - deposit_limits = {}, - withdrawal_limits = {}, - increment_unit, - } = coins[currency] || DEFAULT_COIN_DATA; +const getDepositRow = (currency, index, coins, level, tier) => { + const { symbol = '', fullname, increment_unit } = + coins[currency] || DEFAULT_COIN_DATA; + + const { deposit_limit, withdrawal_limit } = tier[level] || {}; // const format = currency === BASE_CURRENCY ? formatBaseAmount : formatBtcAmount; return ( @@ -44,10 +41,10 @@ const getDepositRow = (currency, index, coins, level) => { - {getLimitValue(deposit_limits[level], increment_unit)} + {getLimitValue(deposit_limit, increment_unit)} - {getLimitValue(withdrawal_limits[level], increment_unit)} + {getLimitValue(withdrawal_limit, increment_unit)} ); @@ -64,15 +61,15 @@ const getDepositRow = (currency, index, coins, level) => { // ); // }; -const getRows = (coins, level) => { +const getRows = (coins, level, tiers) => { const rowData = []; Object.keys(coins).forEach((currency, index) => { - rowData.push(getDepositRow(currency, index, coins, level)); + rowData.push(getDepositRow(currency, index, coins, level, tiers)); }); return rowData; }; -const LimitsBlock = ({ level, coins }) => { +const LimitsBlock = ({ level, coins, tiers }) => { return (
@@ -103,7 +100,7 @@ const LimitsBlock = ({ level, coins }) => { - {getRows(coins, level)} + {getRows(coins, level, tiers)}
From c8192f93d10527c15eec774d64aa4abe55d85cb8 Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Wed, 17 Feb 2021 08:07:38 +0330 Subject: [PATCH 14/17] changes for request tiers improvements --- web/src/containers/App/Socket.js | 4 ++++ web/src/containers/Summary/index.js | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/web/src/containers/App/Socket.js b/web/src/containers/App/Socket.js index b1e72c2c2a..2407ba7acc 100644 --- a/web/src/containers/App/Socket.js +++ b/web/src/containers/App/Socket.js @@ -47,6 +47,7 @@ import { requestPlugins, requestInitial, requestConstant, + requestTiers, } from '../../actions/appActions'; import { hasTheme } from 'utils/theme'; import { playBackgroundAudioNotification } from '../../utils/utils'; @@ -192,6 +193,8 @@ class Container extends Component { } }) .catch((err) => console.error(err)); + + this.props.requestTiers(); }; getUserDetails = () => { @@ -728,6 +731,7 @@ const mapDispatchToProps = (dispatch) => ({ setInfo: bindActionCreators(setInfo, dispatch), getMe: bindActionCreators(getMe, dispatch), setPlugins: bindActionCreators(setPlugins, dispatch), + requestTiers: bindActionCreators(requestTiers, dispatch), }); export default connect(mapStateToProps, mapDispatchToProps)(Container); diff --git a/web/src/containers/Summary/index.js b/web/src/containers/Summary/index.js index a976c9078c..e950d70b58 100644 --- a/web/src/containers/Summary/index.js +++ b/web/src/containers/Summary/index.js @@ -21,7 +21,6 @@ import { logoutconfirm, setNotification, NOTIFICATIONS, - requestTiers, } from '../../actions/appActions'; import { BASE_CURRENCY, @@ -47,7 +46,6 @@ class Summary extends Component { if (user.id) { this.setCurrentTradeAccount(user); this.props.getUserReferralCount(); - this.props.requestTiers(); } if (tradeVolumes.fetched) { let lastMonthVolume = getLastMonthVolume( @@ -324,7 +322,6 @@ const mapDispatchToProps = (dispatch) => ({ ), setNotification: bindActionCreators(setNotification, dispatch), getUserReferralCount: bindActionCreators(getUserReferralCount, dispatch), - requestTiers: bindActionCreators(requestTiers, dispatch), }); export default connect(mapStateToProps, mapDispatchToProps)(Summary); From 14fcadc708835c5eea37b56e1fd0d566058dc319 Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Wed, 17 Feb 2021 13:10:55 +0330 Subject: [PATCH 15/17] changes for slider mark text and corresponding style --- .../components/Form/TradeFormFields/Slider.js | 28 ++++++++++++++++--- .../TradeFormFields/_TradeFormFields.scss | 11 ++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/web/src/components/Form/TradeFormFields/Slider.js b/web/src/components/Form/TradeFormFields/Slider.js index 4e10bd5bba..cbea595653 100644 --- a/web/src/components/Form/TradeFormFields/Slider.js +++ b/web/src/components/Form/TradeFormFields/Slider.js @@ -5,10 +5,30 @@ import { Slider } from 'antd'; const marks = { 0: {}, - 25: {}, - 50: {}, - 75: {}, - 100: {}, + 25: { + label: '25%', + style: { + transform: 'translateX(-66%)', + }, + }, + 50: { + label: '50%', + style: { + transform: 'translateX(-66%)', + }, + }, + 75: { + label: '75%', + style: { + transform: 'translateX(-66%)', + }, + }, + 100: { + label: '100%', + style: { + transform: 'translateX(-66%)', + }, + }, }; const SizeSlider = (props) => { diff --git a/web/src/components/Form/TradeFormFields/_TradeFormFields.scss b/web/src/components/Form/TradeFormFields/_TradeFormFields.scss index ab0824059e..349eb8d4ec 100644 --- a/web/src/components/Form/TradeFormFields/_TradeFormFields.scss +++ b/web/src/components/Form/TradeFormFields/_TradeFormFields.scss @@ -119,3 +119,14 @@ $padding: 0.25rem; width: 35% !important; transform: translateY(1.4rem); } + +.ant-slider-mark-text { + color: $colors-black; + font-family: 'Open Sans' !important; + font-size: 0.9rem !important; +} + +.ant-slider-mark-text-active { + color: $colors-main-black; + font-weight: bold; +} From 019f6dcfb9cb8bc22b9621df136b39dd0398704c Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Wed, 17 Feb 2021 13:12:21 +0330 Subject: [PATCH 16/17] changes for order entry balance format --- web/src/containers/Trade/components/OrderEntry.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/web/src/containers/Trade/components/OrderEntry.js b/web/src/containers/Trade/components/OrderEntry.js index 1fa1b0b1eb..d9a33f6498 100644 --- a/web/src/containers/Trade/components/OrderEntry.js +++ b/web/src/containers/Trade/components/OrderEntry.js @@ -412,7 +412,15 @@ class OrderEntry extends Component { className="pointer text-uppercase blue-link" onClick={() => this.setMax()} > - {balance[`${side === 'buy' ? pair_2 : pair_base}_available`]}{' '} + {side === 'buy' + ? formatToCurrency( + balance[`${pair_2}_available`], + increment_price + ) + : formatToCurrency( + balance[`${pair_base}_available`], + increment_size + )}{' '} {side === 'buy' ? pair_2.toUpperCase() : pair_base.toUpperCase()} From 3ac85ed4980974b34ff89416e3885d307a0d20eb Mon Sep 17 00:00:00 2001 From: Amir Hossein Salar Date: Wed, 17 Feb 2021 13:36:23 +0330 Subject: [PATCH 17/17] changes for order entry advanced section --- .../components/Form/TradeFormFields/Slider.js | 2 +- web/src/config/lang/en.js | 1 + web/src/containers/Trade/_TradeContainer.scss | 2 +- .../Trade/components/OrderEntryForm.js | 26 +++++++++++++++-- .../Trade/components/_OrderEntry.scss | 11 ++++++- web/src/index.css | 29 +++++++++++++++++-- 6 files changed, 63 insertions(+), 8 deletions(-) diff --git a/web/src/components/Form/TradeFormFields/Slider.js b/web/src/components/Form/TradeFormFields/Slider.js index cbea595653..29c0deeb25 100644 --- a/web/src/components/Form/TradeFormFields/Slider.js +++ b/web/src/components/Form/TradeFormFields/Slider.js @@ -35,7 +35,7 @@ const SizeSlider = (props) => { const { onClick } = props; return ( -
+
buy/sell 1 -> btc/.. + ORDER_ENTRY_ADVANCED: 'Advanced', QUICK_TRADE_OUT_OF_LIMITS: 'Order size is out of the limits', QUICK_TRADE_TOKEN_USED: 'Token has been used', QUICK_TRADE_QUOTE_EXPIRED: 'Quote has expired', diff --git a/web/src/containers/Trade/_TradeContainer.scss b/web/src/containers/Trade/_TradeContainer.scss index 5981435674..7b181794d5 100644 --- a/web/src/containers/Trade/_TradeContainer.scss +++ b/web/src/containers/Trade/_TradeContainer.scss @@ -8,7 +8,7 @@ .trade-main_content { flex: 6; min-height: 25vh; - max-height: 67vh; + max-height: 78vh; } .trade-tabs_content { diff --git a/web/src/containers/Trade/components/OrderEntryForm.js b/web/src/containers/Trade/components/OrderEntryForm.js index 25bb4422d8..4e8c756c81 100644 --- a/web/src/containers/Trade/components/OrderEntryForm.js +++ b/web/src/containers/Trade/components/OrderEntryForm.js @@ -1,4 +1,5 @@ import React from 'react'; +import { Collapse } from 'antd'; import classnames from 'classnames'; import { connect } from 'react-redux'; import { reduxForm, formValueSelector } from 'redux-form'; @@ -51,6 +52,8 @@ const Form = ({ }) => { const fields = getFields(formValues, type, orderType); const errorText = error || outsideFormError; + const hasPostOnly = + Object.entries(fields).filter(([key]) => key === 'postOnly').length !== 0; return (
- {Object.entries(fields).map(renderFields)} + {Object.entries(fields) + .filter(([key]) => key !== 'postOnly') + .map(renderFields)} + {hasPostOnly && ( + + + {STRINGS['ORDER_ENTRY_ADVANCED']} + + } + key="1" + > + {Object.entries(fields) + .filter(([key]) => key === 'postOnly') + .map(renderFields)} + + + )} {errorText && (
{errorText} @@ -80,7 +102,7 @@ const Form = ({ currencyName ).join(' ')} disabled={submitting || !valid || !!errorText || !isLoggedIn()} - className={classnames('trade_order_entry-form-action')} + className={classnames('trade_order_entry-form-action', 'mb-1')} />
diff --git a/web/src/containers/Trade/components/_OrderEntry.scss b/web/src/containers/Trade/components/_OrderEntry.scss index 4e4a876047..4ad1897b50 100644 --- a/web/src/containers/Trade/components/_OrderEntry.scss +++ b/web/src/containers/Trade/components/_OrderEntry.scss @@ -105,7 +105,16 @@ } .trade_order_entry-form_fields-wrapper { - margin-bottom: 0.5rem !important; + margin-bottom: 0.2rem !important; + .ant-collapse-header { + text-align: right; + color: $colors-black; + padding: 0; + font-size: $font-size-mobile-txt; + } + .ant-collapse-content-box { + padding: 0; + } } } diff --git a/web/src/index.css b/web/src/index.css index ad1dc7d0ad..22b1d4f94d 100644 --- a/web/src/index.css +++ b/web/src/index.css @@ -1532,7 +1532,7 @@ table th { .trade-container .trade-col_main_wrapper .trade-main_content { flex: 6; min-height: 25vh; - max-height: 67vh; } + max-height: 78vh; } .trade-container .trade-col_main_wrapper .trade-tabs_content { flex: 3; height: 30vh; } @@ -1807,7 +1807,14 @@ table th { .trade_order_entry-wrapper.order_side-selector-sell .trade_order_entry-form_inputs-wrapper .form-error { margin: 0.5rem 0; } .trade_order_entry-wrapper.order_side-selector-sell .trade_order_entry-form_fields-wrapper { - margin-bottom: 0.5rem !important; } + margin-bottom: 0.2rem !important; } + .trade_order_entry-wrapper.order_side-selector-sell .trade_order_entry-form_fields-wrapper .ant-collapse-header { + text-align: right; + color: var(--labels_secondary-inactive-label-text-graphics); + padding: 0; + font-size: 12px; } + .trade_order_entry-wrapper.order_side-selector-sell .trade_order_entry-form_fields-wrapper .ant-collapse-content-box { + padding: 0; } .trade_order_entry-wrapper.order_side-selector-buy { flex: 1; @@ -1868,7 +1875,14 @@ table th { .trade_order_entry-wrapper.order_side-selector-buy .trade_order_entry-form_inputs-wrapper .form-error { margin: 0.5rem 0; } .trade_order_entry-wrapper.order_side-selector-buy .trade_order_entry-form_fields-wrapper { - margin-bottom: 0.5rem !important; } + margin-bottom: 0.2rem !important; } + .trade_order_entry-wrapper.order_side-selector-buy .trade_order_entry-form_fields-wrapper .ant-collapse-header { + text-align: right; + color: var(--labels_secondary-inactive-label-text-graphics); + padding: 0; + font-size: 12px; } + .trade_order_entry-wrapper.order_side-selector-buy .trade_order_entry-form_fields-wrapper .ant-collapse-content-box { + padding: 0; } .risky-trade-wrapper { width: 32rem; } @@ -6111,6 +6125,15 @@ table th { width: 35% !important; transform: translateY(1.4rem); } +.ant-slider-mark-text { + color: var(--labels_secondary-inactive-label-text-graphics); + font-family: 'Open Sans' !important; + font-size: 0.9rem !important; } + +.ant-slider-mark-text-active { + color: var(--labels_important-active-labels-text-graphics); + font-weight: bold; } + .exir-button { width: 100%; font-size: 0.9rem;