From 5a75befc05f1f2946bcb81f010cce877e7e3d0f0 Mon Sep 17 00:00:00 2001
From: Matiss Janis Aboltins <matiss@mja.lv>
Date: Mon, 20 Mar 2023 18:37:21 +0000
Subject: [PATCH] :sparkles: (bank-sync) expose demo-bank in the UI for DEV &
 preview builds (#790)

Depends on server change:
https://github.com/actualbudget/actual-server/pull/168
---
 .../desktop-client/src/components/manager/ConfigServer.js  | 7 ++-----
 .../src/components/modals/ManageRulesModal.js              | 7 ++-----
 packages/desktop-client/src/hooks/useFeatureFlag.js        | 7 ++-----
 packages/loot-core/src/server/main.js                      | 4 +++-
 packages/loot-design/src/components/manager/BudgetList.js  | 7 ++-----
 packages/loot-design/src/util/environment.js               | 4 ++++
 upcoming-release-notes/790.md                              | 6 ++++++
 7 files changed, 21 insertions(+), 21 deletions(-)
 create mode 100644 upcoming-release-notes/790.md

diff --git a/packages/desktop-client/src/components/manager/ConfigServer.js b/packages/desktop-client/src/components/manager/ConfigServer.js
index d00f0e563..30afb69c2 100644
--- a/packages/desktop-client/src/components/manager/ConfigServer.js
+++ b/packages/desktop-client/src/components/manager/ConfigServer.js
@@ -12,10 +12,7 @@ import {
 } from 'loot-design/src/components/common';
 import { useSetThemeColor } from 'loot-design/src/components/hooks';
 import { colors } from 'loot-design/src/style';
-import {
-  isDevelopmentEnvironment,
-  isPreviewEnvironment,
-} from 'loot-design/src/util/environment';
+import { isNonProductionEnvironment } from 'loot-design/src/util/environment';
 
 import { useServerURL, useSetServerURL } from '../ServerContext';
 
@@ -193,7 +190,7 @@ export default function ConfigServer() {
                 Don't use a server
               </Button>
 
-              {(isDevelopmentEnvironment() || isPreviewEnvironment()) && (
+              {isNonProductionEnvironment() && (
                 <Button
                   primary
                   style={{ marginLeft: 15 }}
diff --git a/packages/desktop-client/src/components/modals/ManageRulesModal.js b/packages/desktop-client/src/components/modals/ManageRulesModal.js
index 30d544f21..5d10c3557 100644
--- a/packages/desktop-client/src/components/modals/ManageRulesModal.js
+++ b/packages/desktop-client/src/components/modals/ManageRulesModal.js
@@ -2,17 +2,14 @@ import React, { useState } from 'react';
 import { useLocation } from 'react-router-dom-v5-compat';
 
 import { Modal } from 'loot-design/src/components/common';
-import {
-  isDevelopmentEnvironment,
-  isPreviewEnvironment,
-} from 'loot-design/src/util/environment';
+import { isNonProductionEnvironment } from 'loot-design/src/util/environment';
 
 import ManageRules from '../ManageRules';
 
 export default function ManageRulesModal({ modalProps, payeeId }) {
   let [loading, setLoading] = useState(true);
   let location = useLocation();
-  if (isDevelopmentEnvironment() || isPreviewEnvironment()) {
+  if (isNonProductionEnvironment()) {
     if (location.pathname !== '/payees') {
       throw new Error(
         `Possibly invalid use of ManageRulesModal, add the current url '${location.pathname}' to the allowlist if you're confident the modal can never appear on top of the '/rules' page.`,
diff --git a/packages/desktop-client/src/hooks/useFeatureFlag.js b/packages/desktop-client/src/hooks/useFeatureFlag.js
index 27920fe18..702de577c 100644
--- a/packages/desktop-client/src/hooks/useFeatureFlag.js
+++ b/packages/desktop-client/src/hooks/useFeatureFlag.js
@@ -1,12 +1,9 @@
 import { useSelector } from 'react-redux';
 
-import {
-  isDevelopmentEnvironment,
-  isPreviewEnvironment,
-} from 'loot-design/src/util/environment';
+import { isNonProductionEnvironment } from 'loot-design/src/util/environment';
 
 const DEFAULT_FEATURE_FLAG_STATE = {
-  newAutocomplete: isDevelopmentEnvironment() || isPreviewEnvironment(),
+  newAutocomplete: isNonProductionEnvironment(),
   syncAccount: false,
   goalTemplatesEnabled: false,
 };
diff --git a/packages/loot-core/src/server/main.js b/packages/loot-core/src/server/main.js
index 38f87ab22..d81348c10 100644
--- a/packages/loot-core/src/server/main.js
+++ b/packages/loot-core/src/server/main.js
@@ -1,6 +1,8 @@
 import './polyfills';
 import injectAPI from '@actual-app/api/injected';
 
+import { isNonProductionEnvironment } from 'loot-design/src/util/environment';
+
 import { createTestBudget } from '../mocks/budget';
 import { captureException, captureBreadcrumb } from '../platform/exceptions';
 import asyncStorage from '../platform/server/asyncStorage';
@@ -1265,7 +1267,7 @@ handlers['nordigen-get-banks'] = async function (country) {
 
   return post(
     getServer().NORDIGEN_SERVER + '/get-banks',
-    { country },
+    { country, showDemo: isNonProductionEnvironment() },
     {
       'X-ACTUAL-TOKEN': userToken,
     },
diff --git a/packages/loot-design/src/components/manager/BudgetList.js b/packages/loot-design/src/components/manager/BudgetList.js
index 5688dd5aa..bf9b6bd52 100644
--- a/packages/loot-design/src/components/manager/BudgetList.js
+++ b/packages/loot-design/src/components/manager/BudgetList.js
@@ -13,10 +13,7 @@ import DotsHorizontalTriple from '../../svg/v1/DotsHorizontalTriple';
 import FileDouble from '../../svg/v1/FileDouble';
 import CloudUnknown from '../../svg/v2/CloudUnknown';
 import tokens from '../../tokens';
-import {
-  isDevelopmentEnvironment,
-  isPreviewEnvironment,
-} from '../../util/environment';
+import { isNonProductionEnvironment } from '../../util/environment';
 import { View, Text, Button, Tooltip, Menu } from '../common';
 
 function getFileDescription(file) {
@@ -331,7 +328,7 @@ function BudgetList({
           Create new file
         </Button>
 
-        {(isDevelopmentEnvironment() || isPreviewEnvironment()) && (
+        {isNonProductionEnvironment() && (
           <Button
             primary
             onClick={() => onCreate({ testMode: true })}
diff --git a/packages/loot-design/src/util/environment.js b/packages/loot-design/src/util/environment.js
index 151942d90..42fa7be75 100644
--- a/packages/loot-design/src/util/environment.js
+++ b/packages/loot-design/src/util/environment.js
@@ -5,3 +5,7 @@ export function isPreviewEnvironment() {
 export function isDevelopmentEnvironment() {
   return process.env.NODE_ENV === 'development';
 }
+
+export function isNonProductionEnvironment() {
+  return isPreviewEnvironment() || isDevelopmentEnvironment();
+}
diff --git a/upcoming-release-notes/790.md b/upcoming-release-notes/790.md
new file mode 100644
index 000000000..8e12cdbd9
--- /dev/null
+++ b/upcoming-release-notes/790.md
@@ -0,0 +1,6 @@
+---
+category: Maintenance
+authors: [MatissJanis]
+---
+
+Expose demo bank for easy bank-sync testing in dev and preview builds
-- 
GitLab