chore(global) add the dapps button under a feature flag

Also add basic feature flag support that work with QML and nim

Closes #14553
This commit is contained in:
Stefan 2024-05-01 14:15:40 +02:00 committed by Stefan Dunca
parent 8d6d9c3d7c
commit 2972531766
5 changed files with 43 additions and 1 deletions

View File

@ -0,0 +1,28 @@
import NimQml
import os
const DEFAULT_FLAG_DAPPS_ENABLED = false
proc boolToEnv(defaultValue: bool): string =
return if defaultValue: "1" else: "0"
QtObject:
type FeatureFlags* = ref object of QObject
dappsEnabled: bool
proc setup(self: FeatureFlags) =
self.QObject.setup()
self.dappsEnabled = getEnv("FLAG_DAPPS_ENABLED", boolToEnv(DEFAULT_FLAG_DAPPS_ENABLED)) != "0"
proc delete*(self: FeatureFlags) =
self.QObject.delete()
proc newFeatureFlags*(): FeatureFlags =
new(result, delete)
result.setup()
proc getDappsEnabled*(self: FeatureFlags): bool {.slot.} =
return self.dappsEnabled
QtProperty[bool] dappsEnabled:
read = getDappsEnabled

View File

@ -7,6 +7,7 @@ import user_profile
import utils import utils
import global_events import global_events
import loader_deactivator import loader_deactivator
import feature_flags
export local_account_settings export local_account_settings
export local_account_sensitive_settings export local_account_sensitive_settings
@ -71,6 +72,12 @@ proc loaderDeactivator*(self: GlobalSingleton): LoaderDeactivator =
loaderDeactivator = newLoaderDeactivator() loaderDeactivator = newLoaderDeactivator()
return loaderDeactivator return loaderDeactivator
proc featureFlags*(self: GlobalSingleton): FeatureFlags =
var featureFlags {.global.}: FeatureFlags
if (featureFlags.isNil):
featureFlags = newFeatureFlags()
return featureFlags
proc delete*(self: GlobalSingleton) = proc delete*(self: GlobalSingleton) =
self.engine.delete() self.engine.delete()
self.localAccountSettings.delete() self.localAccountSettings.delete()
@ -78,3 +85,4 @@ proc delete*(self: GlobalSingleton) =
self.localAppSettings.delete() self.localAppSettings.delete()
self.userProfile.delete() self.userProfile.delete()
self.loaderDeactivator.delete() self.loaderDeactivator.delete()
self.featureFlags.delete()

View File

@ -173,6 +173,9 @@ proc mainProc() =
singletonInstance.engine.setRootContextProperty("signals", signalsManagerQVariant) singletonInstance.engine.setRootContextProperty("signals", signalsManagerQVariant)
singletonInstance.engine.setRootContextProperty("production", isProductionQVariant) singletonInstance.engine.setRootContextProperty("production", isProductionQVariant)
# Ensure we have the featureFlags instance available from the start
singletonInstance.engine.setRootContextProperty("featureFlagsRootContextProperty", newQVariant(singletonInstance.featureFlags()))
app.installEventFilter(osThemeEvent) app.installEventFilter(osThemeEvent)
app.installEventFilter(urlSchemeEvent) app.installEventFilter(urlSchemeEvent)

View File

@ -78,7 +78,7 @@ Item {
Layout.alignment: Qt.AlignTop Layout.alignment: Qt.AlignTop
spacing: 8 spacing: 8
visible: !root.walletStore.showSavedAddresses visible: !root.walletStore.showSavedAddresses && Global.featureFlags.dappsEnabled
onConnectDapp: { onConnectDapp: {
console.warn("TODO: run ConnectDappPopup...") console.warn("TODO: run ConnectDappPopup...")

View File

@ -14,6 +14,9 @@ QtObject {
property var userProfile property var userProfile
property bool appIsReady: false property bool appIsReady: false
// avoid lookup of context property in QML
readonly property var featureFlags: featureFlagsRootContextProperty
signal openPinnedMessagesPopupRequested(var store, var messageStore, var pinnedMessagesModel, string messageToPin, string chatId) signal openPinnedMessagesPopupRequested(var store, var messageStore, var pinnedMessagesModel, string messageToPin, string chatId)
signal openCommunityProfilePopupRequested(var store, var community, var chatCommunitySectionModule) signal openCommunityProfilePopupRequested(var store, var community, var chatCommunitySectionModule)