diff --git a/packages/bot-skeleton/src/assets/images/arrow-down-white.svg b/packages/bot-skeleton/src/assets/images/arrow-down-white.svg
new file mode 100644
index 000000000000..4f474cf4b8a5
--- /dev/null
+++ b/packages/bot-skeleton/src/assets/images/arrow-down-white.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/bot-skeleton/src/assets/images/arrow-down.svg b/packages/bot-skeleton/src/assets/images/arrow-down.svg
new file mode 100644
index 000000000000..7619d38402cf
--- /dev/null
+++ b/packages/bot-skeleton/src/assets/images/arrow-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_create_with.js b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_create_with.js
index 46dc8f832666..56ba9d8a60b1 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_create_with.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_create_with.js
@@ -1,6 +1,11 @@
import { localize } from '@deriv/translations';
import { plusIconDark } from '../../images';
-import { runIrreversibleEvents, runGroupedEvents, modifyContextMenu } from '../../../utils';
+import {
+ runIrreversibleEvents,
+ runGroupedEvents,
+ modifyContextMenu,
+ replaceDropdownIconsForSafari,
+} from '../../../utils';
Blockly.Blocks.lists_create_with = {
protected_statements: ['STACK'],
@@ -61,10 +66,10 @@ Blockly.Blocks.lists_create_with = {
});
},
onchange(event) {
+ replaceDropdownIconsForSafari(this, 'VARIABLE');
if (!this.workspace || Blockly.derivWorkspace.isFlyoutVisible || this.workspace.isDragging()) {
return;
}
-
if (event.type === Blockly.Events.BLOCK_DRAG && !event.isStart) {
// Only allow "text_statement" type blocks
const blocks_in_stack = this.getBlocksInStatement('STACK');
diff --git a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_getIndex.js b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_getIndex.js
index 1138261e9b80..3afbf40e974d 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_getIndex.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_getIndex.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.lists_getIndex = {
init() {
@@ -43,6 +43,10 @@ Blockly.Blocks.lists_getIndex = {
category: Blockly.Categories.List,
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'MODE');
+ replaceDropdownIconsForSafari(this, 'WHERE');
+ },
mutationToDom() {
const container = document.createElement('mutation');
const isStatement = !this.outputConnection;
diff --git a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_getSublist.js b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_getSublist.js
index 788baa58eb04..16f8198c1eb8 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_getSublist.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_getSublist.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.lists_getSublist = {
init() {
@@ -41,6 +41,10 @@ Blockly.Blocks.lists_getSublist = {
category: Blockly.Categories.List,
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'WHERE1');
+ replaceDropdownIconsForSafari(this, 'WHERE2');
+ },
mutationToDom() {
const container = document.createElement('mutation');
const isAt1 = this.getInput('AT1').type === Blockly.INPUT_VALUE;
diff --git a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_indexOf.js b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_indexOf.js
index 2c470fe65abe..1db0bfcb8557 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_indexOf.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_indexOf.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.lists_indexOf = {
init() {
@@ -49,6 +49,9 @@ Blockly.Blocks.lists_indexOf = {
description: localize('This block gives you the position of an item in a given list.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'END');
+ },
getRequiredValueInputs() {
return {
VALUE: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_setIndex.js b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_setIndex.js
index a89ffb7d0161..8e6e3006ba1f 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_setIndex.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_setIndex.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.lists_setIndex = {
init() {
@@ -42,6 +42,10 @@ Blockly.Blocks.lists_setIndex = {
category: Blockly.Categories.List,
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'MODE');
+ replaceDropdownIconsForSafari(this, 'WHERE');
+ },
mutationToDom() {
const container = document.createElement('mutation');
const isAt = this.getInput('AT').type === Blockly.INPUT_VALUE;
diff --git a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_sort.js b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_sort.js
index 2636c36b4223..fdac9c45b0e6 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_sort.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_sort.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.lists_sort = {
init() {
@@ -52,6 +52,10 @@ Blockly.Blocks.lists_sort = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'TYPE');
+ replaceDropdownIconsForSafari(this, 'DIRECTION');
+ },
getRequiredValueInputs() {
return {
LIST: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_split.js b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_split.js
index 6b5941005529..ab1ac3970fa5 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_split.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Advanced/List/lists_split.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.lists_split = {
init() {
@@ -39,6 +39,9 @@ Blockly.Blocks.lists_split = {
category: Blockly.Categories.List,
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'MODE');
+ },
mutationToDom() {
const container = document.createElement('mutation');
container.setAttribute('mode', this.getFieldValue('MODE'));
diff --git a/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_flow_statements.js b/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_flow_statements.js
index a4558c45ebc1..66840712b36f 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_flow_statements.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_flow_statements.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.controls_flow_statements = {
init() {
@@ -41,6 +41,9 @@ Blockly.Blocks.controls_flow_statements = {
customContextMenu(menu) {
modifyContextMenu(menu);
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'FLOW');
+ },
};
Blockly.JavaScript.javascriptGenerator.forBlock.controls_flow_statements = block => {
diff --git a/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_for.js b/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_for.js
index 795166528c09..7d7621e70e9a 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_for.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_for.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.controls_for = {
init() {
@@ -65,6 +65,9 @@ Blockly.Blocks.controls_for = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'VAR');
+ },
getRequiredValueInputs() {
return {
FROM: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_forEach.js b/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_forEach.js
index aed2c690b199..cefd9f5cc721 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_forEach.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_forEach.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.controls_forEach = {
init() {
@@ -47,6 +47,9 @@ Blockly.Blocks.controls_forEach = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'VAR');
+ },
getRequiredValueInputs() {
return {
LIST: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_whileUntil.js b/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_whileUntil.js
index f7f8df6a6166..8f0b70cb316a 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_whileUntil.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Advanced/Loops/controls_whileUntil.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.controls_whileUntil = {
init() {
@@ -46,6 +46,9 @@ Blockly.Blocks.controls_whileUntil = {
description: localize('This block repeats instructions as long as a given condition is true.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'MODE');
+ },
getRequiredValueInputs() {
return {
BOOL: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/After Purchase/check_result.js b/packages/bot-skeleton/src/scratch/blocks/Binary/After Purchase/check_result.js
index beb3b524920a..d4d88517921d 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/After Purchase/check_result.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/After Purchase/check_result.js
@@ -1,6 +1,6 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../constants/config';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.contract_check_result = {
init() {
@@ -32,6 +32,7 @@ Blockly.Blocks.contract_check_result = {
};
},
onchange(event) {
+ replaceDropdownIconsForSafari(this, 'CHECK_RESULT');
if (!this.workspace || Blockly.derivWorkspace.isFlyoutVisible || this.workspace.isDragging()) {
return;
}
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/After Purchase/read_details.js b/packages/bot-skeleton/src/scratch/blocks/Binary/After Purchase/read_details.js
index ce20fc4fb82a..c761815dbece 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/After Purchase/read_details.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/After Purchase/read_details.js
@@ -1,6 +1,6 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../constants/config';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.read_details = {
init() {
@@ -31,6 +31,9 @@ Blockly.Blocks.read_details = {
description: localize('This block gives you information about your last contract.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'DETAIL_INDEX');
+ },
customContextMenu(menu) {
modifyContextMenu(menu);
},
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/check_direction.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/check_direction.js
index f7d104fa4665..6b3998a3eaea 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/check_direction.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/check_direction.js
@@ -1,6 +1,6 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../constants/config';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.check_direction = {
init() {
@@ -33,6 +33,9 @@ Blockly.Blocks.check_direction = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'CHECK_DIRECTION');
+ },
customContextMenu(menu) {
modifyContextMenu(menu);
},
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/get_ohlc.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/get_ohlc.js
index ef93048d7ca8..04f9f9dce5b0 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/get_ohlc.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/get_ohlc.js
@@ -1,6 +1,6 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../constants/config';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.get_ohlc = {
init() {
@@ -39,6 +39,9 @@ Blockly.Blocks.get_ohlc = {
description: localize('This block gives you a specific candle from within the selected time interval.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'CANDLEINTERVAL_LIST');
+ },
getRequiredValueInputs() {
return {
CANDLEINDEX: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/ohlc.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/ohlc.js
index c776841c3106..597aec1d44fe 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/ohlc.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/ohlc.js
@@ -1,6 +1,6 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../constants/config';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.ohlc = {
init() {
@@ -33,6 +33,9 @@ Blockly.Blocks.ohlc = {
description: localize('This block gives you a list of candles within a selected time interval.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'CANDLEINTERVAL_LIST');
+ },
customContextMenu(menu) {
modifyContextMenu(menu);
},
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/ohlc_values.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/ohlc_values.js
index f778ffcff0d0..28093ab48054 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/ohlc_values.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/ohlc_values.js
@@ -1,6 +1,6 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../constants/config';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.ohlc_values = {
init() {
@@ -46,6 +46,10 @@ Blockly.Blocks.ohlc_values = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'CANDLEINTERVAL_LIST');
+ replaceDropdownIconsForSafari(this, 'OHLCFIELD_LIST');
+ },
customContextMenu(menu) {
modifyContextMenu(menu);
},
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/readOhlc.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/readOhlc.js
index 64effcf3afc4..f0340b43f106 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/readOhlc.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Tick Analysis/readOhlc.js
@@ -1,6 +1,6 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../constants/config';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.read_ohlc = {
init() {
@@ -47,6 +47,10 @@ Blockly.Blocks.read_ohlc = {
description: localize('This block gives you the specified candle value for a selected time interval.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'OHLCFIELD_LIST');
+ replaceDropdownIconsForSafari(this, 'CANDLEINTERVAL_LIST');
+ },
getRequiredValueInputs() {
return {
CANDLEINDEX: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Candle/ohlc_values_in_list.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Candle/ohlc_values_in_list.js
index d7095f3eaa1b..fbd00e2e1740 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Candle/ohlc_values_in_list.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Candle/ohlc_values_in_list.js
@@ -1,6 +1,6 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../../constants/config';
-import { modifyContextMenu } from '../../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../../utils';
Blockly.Blocks.ohlc_values_in_list = {
init() {
@@ -38,6 +38,9 @@ Blockly.Blocks.ohlc_values_in_list = {
description: localize('This block gives you the selected candle value from a list of candles.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'OHLCFIELD_LIST');
+ },
getRequiredValueInputs() {
return {
OHLCLIST: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Candle/read_ohlc_obj.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Candle/read_ohlc_obj.js
index 2bfcc5e8919f..9d75a4008072 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Candle/read_ohlc_obj.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Candle/read_ohlc_obj.js
@@ -1,6 +1,6 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../../constants/config';
-import { modifyContextMenu } from '../../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../../utils';
Blockly.Blocks.read_ohlc_obj = {
init() {
@@ -38,6 +38,9 @@ Blockly.Blocks.read_ohlc_obj = {
description: localize('This block gives you the selected candle value.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'OHLCFIELD_LIST');
+ },
getRequiredValueInputs() {
return {
OHLCOBJ: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/balance.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/balance.js
index 79c95dc0b9ba..b7314588c3b5 100644
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/balance.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/balance.js
@@ -1,6 +1,6 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../../constants/config';
-import { modifyContextMenu } from '../../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../../utils';
Blockly.Blocks.balance = {
init() {
@@ -43,6 +43,9 @@ Blockly.Blocks.balance = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'BALANCE_TYPE');
+ },
customContextMenu(menu) {
modifyContextMenu(menu);
},
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/console.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/console.js
index dc7bd5fdbb6b..66c62c9f54ed 100644
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/console.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/console.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { emptyTextValidator, modifyContextMenu } from '../../../../utils';
+import { emptyTextValidator, modifyContextMenu, replaceDropdownIconsForSafari } from '../../../../utils';
Blockly.Blocks.console = {
init() {
@@ -45,6 +45,9 @@ Blockly.Blocks.console = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'CONSOLE_TYPE');
+ },
getRequiredValueInputs() {
return {
MESSAGE: emptyTextValidator,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/notify.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/notify.js
index 4d70610faa00..40a232f3ce72 100644
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/notify.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Tools/Misc/notify.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { emptyTextValidator, modifyContextMenu } from '../../../../utils';
+import { emptyTextValidator, modifyContextMenu, replaceDropdownIconsForSafari } from '../../../../utils';
import { config } from '../../../../../constants/config';
Blockly.Blocks.notify = {
@@ -53,6 +53,10 @@ Blockly.Blocks.notify = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'NOTIFICATION_TYPE');
+ replaceDropdownIconsForSafari(this, 'NOTIFICATION_SOUND');
+ },
getRequiredValueInputs() {
return {
MESSAGE: emptyTextValidator,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_candleinterval.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_candleinterval.js
index 597453f97fae..4ba5d970f1b7 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_candleinterval.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_candleinterval.js
@@ -1,6 +1,6 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../constants/config';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.trade_definition_candleinterval = {
init() {
@@ -27,6 +27,7 @@ Blockly.Blocks.trade_definition_candleinterval = {
if (!this.workspace || Blockly.derivWorkspace.isFlyoutVisible || this.workspace.isDragging()) {
return;
}
+ replaceDropdownIconsForSafari(this, 'CANDLEINTERVAL_LIST');
this.enforceLimitations();
},
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_contracttype.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_contracttype.js
index f2bea32cb5d1..1f23cd456b35 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_contracttype.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_contracttype.js
@@ -1,7 +1,7 @@
import { localize } from '@deriv/translations';
import { config } from '../../../../constants/config';
import { getContractTypeOptions } from '../../../shared';
-import { modifyContextMenu } from '../../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
Blockly.Blocks.trade_definition_contracttype = {
init() {
@@ -30,6 +30,7 @@ Blockly.Blocks.trade_definition_contracttype = {
if (!this.workspace || Blockly.derivWorkspace.isFlyoutVisible || this.workspace.isDragging()) {
return;
}
+ replaceDropdownIconsForSafari(this, 'TYPE_LIST');
this.enforceLimitations();
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_market.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_market.js
index a91fb611df78..f089e5142ce8 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_market.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_market.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { runIrreversibleEvents, modifyContextMenu } from '../../../utils';
+import { runIrreversibleEvents, modifyContextMenu, replaceDropdownIconsForSafari } from '../../../utils';
import ApiHelpers from '../../../../services/api/api-helpers';
/* eslint-disable */
@@ -54,6 +54,9 @@ Blockly.Blocks.trade_definition_market = {
) {
return;
}
+ replaceDropdownIconsForSafari(this, 'MARKET_LIST');
+ replaceDropdownIconsForSafari(this, 'SUBMARKET_LIST');
+ replaceDropdownIconsForSafari(this, 'SYMBOL_LIST');
this.enforceLimitations();
diff --git a/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_tradeoptions.js b/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_tradeoptions.js
index 79ab1dba25c0..3ced70eeabb7 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_tradeoptions.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Binary/Trade Definition/trade_definition_tradeoptions.js
@@ -1,7 +1,12 @@
import { localize } from '@deriv/translations';
import { getCurrencyDisplayCode, getDecimalPlaces } from '@deriv/shared';
import DBotStore from '../../../dbot-store';
-import { runIrreversibleEvents, runGroupedEvents, modifyContextMenu } from '../../../utils';
+import {
+ runIrreversibleEvents,
+ runGroupedEvents,
+ modifyContextMenu,
+ replaceDropdownIconsForSafari,
+} from '../../../utils';
import { config } from '../../../../constants/config';
import ApiHelpers from '../../../../services/api/api-helpers';
@@ -84,6 +89,7 @@ Blockly.Blocks.trade_definition_tradeoptions = {
input_target.setFieldValue(new_value.toString(), 'NUM');
}
});
+ replaceDropdownIconsForSafari(this, 'DURATIONTYPE_LIST');
}
if (!this.workspace || this.workspace.isDragging() || Blockly.derivWorkspace.isFlyoutVisible) {
diff --git a/packages/bot-skeleton/src/scratch/blocks/Logic/logic_boolean.js b/packages/bot-skeleton/src/scratch/blocks/Logic/logic_boolean.js
index fc55ca7213c2..080a50847582 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Logic/logic_boolean.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Logic/logic_boolean.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.logic_boolean = {
init() {
@@ -34,6 +34,9 @@ Blockly.Blocks.logic_boolean = {
description: localize('This is a single block that returns a boolean value, either true or false.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'BOOL');
+ },
customContextMenu(menu) {
modifyContextMenu(menu);
},
diff --git a/packages/bot-skeleton/src/scratch/blocks/Logic/logic_compare.js b/packages/bot-skeleton/src/scratch/blocks/Logic/logic_compare.js
index 45160dc84494..21d0414fe9e2 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Logic/logic_compare.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Logic/logic_compare.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.logic_compare = {
init() {
@@ -46,6 +46,9 @@ Blockly.Blocks.logic_compare = {
description: localize('This block compares two values and is used to build a conditional structure.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'OP');
+ },
getRequiredValueInputs() {
return {
A: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Logic/logic_operation.js b/packages/bot-skeleton/src/scratch/blocks/Logic/logic_operation.js
index 206815b55cf7..8528d5aeee97 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Logic/logic_operation.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Logic/logic_operation.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.logic_operation = {
init() {
@@ -39,6 +39,9 @@ Blockly.Blocks.logic_operation = {
customContextMenu(menu) {
modifyContextMenu(menu);
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'OP');
+ },
meta() {
return {
display_name: localize('Logic operation'),
diff --git a/packages/bot-skeleton/src/scratch/blocks/Math/math_arithmetic.js b/packages/bot-skeleton/src/scratch/blocks/Math/math_arithmetic.js
index 3f8a8fd8b6ce..fb5e7a5ab340 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Math/math_arithmetic.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Math/math_arithmetic.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.math_arithmetic = {
init() {
@@ -47,6 +47,9 @@ Blockly.Blocks.math_arithmetic = {
description: localize('This block performs arithmetic operations between two numbers.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'OP');
+ },
getRequiredValueInputs() {
return {
A: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Math/math_change.js b/packages/bot-skeleton/src/scratch/blocks/Math/math_change.js
index f376065360bf..ec06eb64ff5d 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Math/math_change.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Math/math_change.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.math_change = {
/**
@@ -62,6 +62,9 @@ Blockly.Blocks.math_change = {
customContextMenu(menu) {
modifyContextMenu(menu);
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'VAR');
+ },
};
Blockly.JavaScript.javascriptGenerator.forBlock.math_change = block => {
diff --git a/packages/bot-skeleton/src/scratch/blocks/Math/math_constant.js b/packages/bot-skeleton/src/scratch/blocks/Math/math_constant.js
index 8dea9d3aa129..1d4f8cd47a63 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Math/math_constant.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Math/math_constant.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.math_constant = {
init() {
@@ -40,6 +40,9 @@ Blockly.Blocks.math_constant = {
description: localize('This block gives you the selected constant values.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'CONSTANT');
+ },
};
Blockly.JavaScript.javascriptGenerator.forBlock.math_constant = block => {
diff --git a/packages/bot-skeleton/src/scratch/blocks/Math/math_single.js b/packages/bot-skeleton/src/scratch/blocks/Math/math_single.js
index d1716edc23b7..d8e08161832e 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Math/math_single.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Math/math_single.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.math_single = {
init() {
@@ -42,6 +42,9 @@ Blockly.Blocks.math_single = {
description: localize('This block performs the selected operations to a given number.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'OP');
+ },
getRequiredValueInputs() {
return {
NUM: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Math/math_trig.js b/packages/bot-skeleton/src/scratch/blocks/Math/math_trig.js
index 7294fa09973c..2eff4f3896ac 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Math/math_trig.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Math/math_trig.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { modifyContextMenu } from '../../utils';
+import { modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.math_trig = {
init() {
@@ -45,6 +45,9 @@ Blockly.Blocks.math_trig = {
description: localize('This block performs trigonometric functions.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'OP');
+ },
getRequiredValueInputs() {
return {
NUM: null,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Text/text_append.js b/packages/bot-skeleton/src/scratch/blocks/Text/text_append.js
index 397b4853980e..65a5ab146cdd 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Text/text_append.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Text/text_append.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { emptyTextValidator, modifyContextMenu } from '../../utils';
+import { emptyTextValidator, modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.text_append = {
init() {
@@ -37,6 +37,9 @@ Blockly.Blocks.text_append = {
description: localize('Appends a given text to a variable.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'VAR');
+ },
getRequiredValueInputs() {
return {
TEXT: emptyTextValidator,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Text/text_changeCase.js b/packages/bot-skeleton/src/scratch/blocks/Text/text_changeCase.js
index 7f81e9f24df5..a7a5c7b5293b 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Text/text_changeCase.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Text/text_changeCase.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { emptyTextValidator, modifyContextMenu } from '../../utils';
+import { emptyTextValidator, modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.text_changeCase = {
init() {
@@ -46,6 +46,9 @@ Blockly.Blocks.text_changeCase = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'CASE');
+ },
getRequiredValueInputs() {
return {
TEXT: emptyTextValidator,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Text/text_charAt.js b/packages/bot-skeleton/src/scratch/blocks/Text/text_charAt.js
index 0c2dd78fac7f..4e58c0a5dec9 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Text/text_charAt.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Text/text_charAt.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { emptyTextValidator, modifyContextMenu } from '../../utils';
+import { emptyTextValidator, modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.text_charAt = {
init() {
@@ -59,6 +59,9 @@ Blockly.Blocks.text_charAt = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'WHERE');
+ },
mutationToDom() {
const container = document.createElement('mutation');
container.setAttribute('at', !!this.isAt);
diff --git a/packages/bot-skeleton/src/scratch/blocks/Text/text_getSubstring.js b/packages/bot-skeleton/src/scratch/blocks/Text/text_getSubstring.js
index 11556acec4ef..86fceb416fe9 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Text/text_getSubstring.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Text/text_getSubstring.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { emptyTextValidator, modifyContextMenu } from '../../utils';
+import { emptyTextValidator, modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.text_getSubstring = {
init() {
@@ -73,6 +73,10 @@ Blockly.Blocks.text_getSubstring = {
description: localize('Returns a specific portion of a given string of text.'),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'WHERE1');
+ replaceDropdownIconsForSafari(this, 'WHERE2');
+ },
mutationToDom() {
const container = document.createElement('mutation');
const isAt1 = this.getInput('AT1').type === Blockly.INPUT_VALUE;
diff --git a/packages/bot-skeleton/src/scratch/blocks/Text/text_indexOf.js b/packages/bot-skeleton/src/scratch/blocks/Text/text_indexOf.js
index 6ed3b9b4ba2f..ba080f8c32e1 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Text/text_indexOf.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Text/text_indexOf.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { emptyTextValidator, modifyContextMenu } from '../../utils';
+import { emptyTextValidator, modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.text_indexOf = {
init() {
@@ -51,6 +51,9 @@ Blockly.Blocks.text_indexOf = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'END');
+ },
customContextMenu(menu) {
modifyContextMenu(menu);
},
diff --git a/packages/bot-skeleton/src/scratch/blocks/Text/text_prompt_ext.js b/packages/bot-skeleton/src/scratch/blocks/Text/text_prompt_ext.js
index 76565d8aef07..74705a51dd5f 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Text/text_prompt_ext.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Text/text_prompt_ext.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { emptyTextValidator, modifyContextMenu } from '../../utils';
+import { emptyTextValidator, modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.text_prompt_ext = {
init() {
@@ -57,6 +57,9 @@ Blockly.Blocks.text_prompt_ext = {
),
};
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'TYPE');
+ },
getRequiredValueInputs() {
return {
TEXT: emptyTextValidator,
diff --git a/packages/bot-skeleton/src/scratch/blocks/Text/text_trim.js b/packages/bot-skeleton/src/scratch/blocks/Text/text_trim.js
index 8903bf05f2b8..19933596621b 100755
--- a/packages/bot-skeleton/src/scratch/blocks/Text/text_trim.js
+++ b/packages/bot-skeleton/src/scratch/blocks/Text/text_trim.js
@@ -1,5 +1,5 @@
import { localize } from '@deriv/translations';
-import { emptyTextValidator, modifyContextMenu } from '../../utils';
+import { emptyTextValidator, modifyContextMenu, replaceDropdownIconsForSafari } from '../../utils';
Blockly.Blocks.text_trim = {
init() {
@@ -35,6 +35,9 @@ Blockly.Blocks.text_trim = {
customContextMenu(menu) {
modifyContextMenu(menu);
},
+ onchange() {
+ replaceDropdownIconsForSafari(this, 'MODE');
+ },
meta() {
return {
display_name: localize('Trim spaces'),
diff --git a/packages/bot-skeleton/src/scratch/dbot.js b/packages/bot-skeleton/src/scratch/dbot.js
index f5f65fe103a8..4ee05c5f08b5 100644
--- a/packages/bot-skeleton/src/scratch/dbot.js
+++ b/packages/bot-skeleton/src/scratch/dbot.js
@@ -9,7 +9,12 @@ import { isDbotRTL } from '../utils/workspace';
import main_xml from './xml/main.xml';
import DBotStore from './dbot-store';
-import { isAllRequiredBlocksEnabled, updateDisabledBlocks, validateErrorOnBlockDelete } from './utils';
+import {
+ isAllRequiredBlocksEnabled,
+ replaceDropdownIconsForSafari,
+ updateDisabledBlocks,
+ validateErrorOnBlockDelete,
+} from './utils';
import { loadBlockly } from './blockly';
import { forgetAccumulatorsProposalRequest } from './accumulators-proposal-handler';
@@ -36,6 +41,8 @@ class DBot {
if (!this.workspace || Blockly.derivWorkspace.isFlyoutVisible || this.workspace.isDragging()) {
return;
}
+ replaceDropdownIconsForSafari(this, 'TRADETYPECAT_LIST');
+ replaceDropdownIconsForSafari(this, 'TRADETYPE_LIST');
this.enforceLimitations();
diff --git a/packages/bot-skeleton/src/scratch/utils/index.js b/packages/bot-skeleton/src/scratch/utils/index.js
index 67814f328b43..ef9233870df0 100644
--- a/packages/bot-skeleton/src/scratch/utils/index.js
+++ b/packages/bot-skeleton/src/scratch/utils/index.js
@@ -10,6 +10,19 @@ import { LogTypes } from '../../constants/messages';
import { error_message_map } from '../../utils/error-config';
import { botNotification } from '../../../../bot-web-ui/src/components/bot-notification/bot-notification';
import { notification_message } from '../../../../bot-web-ui/src/components/bot-notification/bot-notification-utils';
+import { isSafari } from '@deriv/shared';
+
+export const replaceDropdownIconsForSafari = (block_dropdown_instance, type) => {
+ const is_safari = isSafari();
+ if (is_safari && DBotStore?.instance) {
+ const { dashboard } = DBotStore.instance;
+ const is_dark_mode = dashboard.is_dark_mode;
+ const icon = is_dark_mode ? 'arrow-down-white.svg' : 'arrow-down.svg';
+ const dropdown_bold = `${block_dropdown_instance.workspace.options.pathToMedia}${icon}`;
+ const block = block_dropdown_instance.getField(type);
+ block.svgArrow.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', dropdown_bold);
+ }
+};
export const inject_workspace_options = {
media: `${__webpack_public_path__}media/`,