text:
Relational DataStore cannot connect to Server

There is no check for Relational DataStore Type to open the Server Firewall.
To reproduce see the following deployment:

{
    "AllNodes":  [
                     {
                         "NodeName":  "[Machine Name 1]",
                         "DataStoreTypes":  [
                                              "Relational"
                                            ],
                         "Role":  [
                                      "DataStore"
                                  ]
                     },
                     {
                         "NodeName":  "[Machine Name 2]",
                         "Role":  [
                                    "ServerWebAdaptor",
                                    "PortalWebAdaptor",
                                    "FileShare"
                                  ]
                     },
                     {
                         "NodeName":  "[Machine Name 3]",
                         "Role":  [
                                    "Server",
                                    "Portal"
                                  ]
                     }
                 ],
    "ConfigData":  {
                       "Version":  "[Version of ArcGIS Deployment]",
                       "ServerContext":  "server",
                       "PortalContext":  "portal",
                       "FileShareLocalPath":  "[File Share Local Path]",
                       "FileShareName":  "[File Share Name]",
                       "ServerRole": "GeneralPurposeServer",
                       "Credentials":  {
                                           "PrimarySiteAdmin":  {
                                                                    "UserName":  "[PrimarySiteAdmin Username]",
                                                                    "Email":  "[PrimarySiteAdmin Email]",
                                                                    "Password":  "[PrimarySiteAdmin Password]"
                                                                },
                                           "ServiceAccount":  {
                                                                  "Password":  "[ServiceAccount Password]",
                                                                  "UserName":  "[ServiceAccount Username - Can be a Domain Account]",
                                                                  "IsDomainAccount": false
                                                              }
                                       },
                       "Server":  {
                                      "LicenseFilePath":   "[License File Path - Server ]",
                                      "Installer":  {
                                                        "Path":  "[Server Installer Path]",
                                                        "InstallDir":  "[Server Install Dir - Ex. C:\\ArcGIS\\Server]",
                                                        "InstallDirPython":  "[Python Install Dir - Ex. C:\\Python27] "
                                                    },
                                      "ServerDirectoriesRootLocation":  "\\\\[Fileshare Machine Name 1]\\[Fileshare Name]\\arcgisserver\\directories",
                                      "ConfigStoreLocation":  "\\\\[Fileshare Machine Name 1]\\[Fileshare Name]\\arcgisserver\\config-store"
                                  },
                       "Portal":  {
                                      "LicenseFilePath": "[License File Path - Portal ]",
                                      "Installer":  {
                                                        "Path":  "[Portal Installer Path]",
                                                        "InstallDir": "[Portal Install Dir - Ex. C:\\ArcGIS\\Portal]",
                                                        "ContentDir": "[Portal Content Dir for Install- Ex. C:\\portalforarcgis\\content]"
                                                    },
                                      "ContentDirectoryLocation":  "\\\\[Fileshare Machine Name 1]\\[Fileshare Name]\\portalforarcgis\\content\\arcgisportal\\content"
                                  },
                       "DataStore":  {
                                         "ContentDirectoryLocation":  "[Content Dir DataStore - C:\\arcgisdatastore]",
                                         "Installer":  {
                                                           "Path":  "[DataStore Installer Path]",
                                                           "InstallDir":  "[DataStore Install Dir - Ex. C:\\ArcGIS\\DataStore]"
                                                       }
                                     },
                       "WebAdaptor":  {
                                          "AdminAccessEnabled":  true,
                                          "Installer":  {
                                                            "Path":  "[WebAdaptor Installer Path]"
                                                        }
                                      }
                   }
}

To fix this ArcGISConfigure.ps1 should remove the check of DataStoreType SpatiotTemporal
Original:
                    $HasSpatioTemporalNodes = (($AllNodes | Where-Object { $_.Role -icontains 'DataStore' -and $_.DataStoreTypes -icontains 'SpatiotTemporal'}  | Measure-Object).Count -gt 0)

                    $OpenFirewallPorts = (-not($IsWebGIS) -or ($ConfigData.ServerEndPoint -as [ipaddress]) -or $HasSpatioTemporalNodes -or $IsMultiMachineServer)

Fixed:
                    $HasDataStoreNodes = (($AllNodes | Where-Object { $_.Role -icontains 'DataStore' }  | Measure-Object).Count -gt 0)

                    $OpenFirewallPorts = (-not($IsWebGIS) -or ($ConfigData.ServerEndPoint -as [ipaddress]) -or $HasDataStoreNodes -or $IsMultiMachineServer)

@spitzerr .. should that be and or condition
$_.Role -icontains 'DataStore' -or $_.DataStoreTypes -icontains 'SpatiotTemporal'

I think the right part should be removed at all?
Any DataStore needs to connect to Server admin? No additional check of datastoretype is needed then.
On Wed, Feb 7, 2018 at 6:59 PM +0100, "Nikhil Shampur" <notifications@github.commailto:notifications@github.com> wrote:
@spitzerrhttps://github.com/spitzerr .. should that be and or condition
$.Role -icontains 'DataStore' -or $.DataStoreTypes -icontains 'SpatiotTemporal'
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/Esri/arcgis-powershell-dsc/issues/1#issuecomment-363855208, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AihW4KfXd2y3-Uy6v529wKnHUr70A5CAks5tSeR8gaJpZM4R9Gfd.

I also see a typo in the DataStoreTypes (extra T).  We'll review.   Could you submit a PR?
Thanks

I will submit a PR
. I saw the typo as well but it will be removed by the fix anyways.

Merged.

authors: nshampur spitzerr

repo: Esri/arcgis-powershell-dsc


text:
SyntaxError line 7

When I attempt to run the tool I get this error:

How do I fix this? Thank You!

Having the same issue.  Would like to see the answer to this one.

@JohnDriz
I just tested this in ArcMap 10.7 with a freshly downloaded zip from this repo and I cannot reproduce this issue.
I tested on a new point feature class in a file geodatabase.

What type of layer are you using as the input for that tool?
What version of ArcMap?
Did you recently download the tools and extract the toolbox from the zip folder?

Thanks
-Kevin

source: gharchive/issue

authors: JohnDriz Kevin-GIS baumannscs

repo: Esri/collector-tools

license_type: permissive

license_source: github-api


text:
CAP for Victorian Bushfires

Trying to consume what I believe is a the CAP input feed, being served out over HTTPS from:
https://data.emergency.vic.gov.au/Show?pageId=getCapWarningJSON
Have added the 10.3.x adapter and created a connector:

However, when I try to create an input connector like so:

I get zero geoevents flowing through.
Was wondering if it was because the CAP feed is HTTPS only?  Any ideas on how to troubleshoot?

I can't speak to the HTTP/HTTPS transport issue (perhaps @pHill5136 or @ACueva can), but after you get over this hurdle I think the adapter does assume the format is XML (not JSON) so just ensure you use that flavor ( https://data.emergency.vic.gov.au/Show?pageId=getCapWarningXML ).
For now, until you figure out the transport issue, you could download the files and test using the file/folder test/transport method from the readme: https://github.com/Esri/solutions-geoevent-java/tree/master/solutions-geoevent/adapters/CAP-adapter

@pHill5136 please take a look.

@kengorton @csmoore
Ken do you know if the cap adapter supports https?

authors: conklinbd csmoore jakc pHill5136

repo: Esri/solutions-geoevent-java

license_source: bigquery


text:
Service Feasibility - Error solving route issues

Business Influence value is very inconsistent.  Some areas, a zero value results in an error, other places, the zero value returns results.

Error message for unsuccessful routing should be more descriptive so users know what happen.  Such as was the network service down, the influence parameter is not right, etc.

@MikeMillerGIS We are not able reproduce this with [this] (http://54.203.249.87:6080/arcgis/rest/services/A4TC/ServiceQualificationRoute/NAServer/Closest Facility) closest facility service used in the tryitlive link, but we are able to see this issue with AGOL routing service.
Do you also see the same behavior ?

@clareprice Can you confirm this?

@MikeMillerGIS I was not able to reproduce an error with the sample closet facility service and sample data.

@clareprice do you get the error only with the AGO routing service then?

@MikeMillerGIS When through and tested this issue again. It is very inconsistence in error messages. During this testing, I was able to reproduce an error with the try it live closest facility and not with an AGOL closest facility. Just very inconsistent and error message is very generic that it is difficult to understand why there is an error.

@CTLocalGovTeam Is there a way to improve the error messaging to help the user determine what is going wrong?

@MikeMillerGIS , @clareprice,
We were able to reproduce this error consistently with AGOL routing service only with one specific scenario. AGOL ClosestFacility service supports only 100 facilities. So, only in cases where more than 100 facilities are found in the buffer, the solve fails and displays this error message.
We have not been able to reproduce this using the tryitlive closest facility. This is most probably because the limit of facilities for an ArcGIS NAServer ClosestFacility service is much larger, like 1000.
Would you like us to display the error message that is returned by the server? Sometimes, this may get too technical for an average user to understand.

There are limits using the synchronously version of the service.
http://resources.arcgis.com/en/help/arcgis-rest-api/#/Closest_Facility_service_with_synchronous_execution/02r3000000n7000000/

@MikeMillerGIS, @clareprice,
That is correct, and the widget supports using only synchronous version of AGOL ClosestFacility service.
Please let us know if you'd you like us to display the error message that is returned by the server?

How does this sound:  You have exceeded the limit of the configured routing service.  Please include this in the NLS. @CTLocalGovTeam @clareprice

@MikeMillerGIS, @clareprice,
Implementing a custom error message may not be possible since there could be other reasons too for a failure.
Will need to check if AGOL and ArcGIS server return the same error code/message/details when limit is exceeded. Are you suggesting we handle this by trapping the error message from service and then display this custom message?

@MikeMillerGIS, @clareprice,
We checked with tryitlive closest facility service and were able to successfully solve for more than 1000 facilities. We went up to 3000 facilities and were still able to successfully solve the route.
When using the widget with tryitlive service, we are still unable to reproduce the "error solving route" message.
Please let us know how you would like us to proceed on this.
Do you want us to implement a custom error message just for AGOL service limit exceeded?

If possible, yes

@MikeMillerGIS, @clareprice,
The error message returned by AGOL when limit is exceeded is this.
{
    "error": {
        "code": 400,
        "message": "Unable to complete operation.",
        "details": [
            "The number of input locations loaded into Facilities exceeded the maximum of 100 allowed by the service."
        ]
    }
}

If we have to implement a custom error message for this, then we'd have to look at details and do an exact string match (case insensitive). Then pick the custom error message from NLS and display.
Is this ok?

Just display the details from the error

Just display the details from the error

@MikeMillerGIS, thanks for the quick confirmation. Do you want us to display the details for any error message returned by the server or only for limit exceeded by doing a string match?

All error messages
Sent from my Verizon Wireless 4G LTE DROID
On May 8, 2015 6:01 AM, CyberTech notifications@github.com wrote:
@MikeMillerGIShttps://github.com/MikeMillerGIS, thanks for the quick confirmation. Do you want us to display the details for any error message returned by the server or only for limit exceeded by doing a string match?
—
Reply to this email directly or view it on GitHubhttps://github.com/Esri/solutions-webappbuilder-widgets/issues/130#issuecomment-100180291.

@MikeMillerGIS We will display a message when any error occurs while solving the route. We suggest the contents of the message to be <message> - <details>. This is because, often error messages from server includes a message but does not include details.
For e.g. Unable to complete operation. - The number of input locations loaded into Facilities exceeded the maximum of 100 allowed by the service.

@MikeMillerGIS
We have implemented this and will be incorporating in 6/10 release.

verified

authors: CTLocalGovTeam MikeMillerGIS clareprice

repo: Esri/solutions-webappbuilder-widgets


text:
asyncHandler, second callback argument name 'b'- types of return value

In my personal project I have this usage of restless solutions:
my point of Route, method post:
route.post('/login', asyncHandler( sanitize({
    body: asObject({
      username: asString,
      password: asString,
    })
  }),
  (reqData) => {
  const {username, password} = reqData.body;
  findUser('user', username)
    .then((user: User) => {
      if(user.password === password) {
        responseOf(user, 200)
      }
      else {
        responseOf('user not found', 400)
      }
    })
    .catch(err => {
      responseOf('internal server error', 500)
    })
  }
));

TypeScript compiler error:
Type void is not assignable to type ResponseFunction | Promise<ResponseFunction>
When I change code to marked returns type like belowe
... function(reqData): ResponseFunction | Promise<ResponseFunction> { ...
I have another ts compiler warrning
Does anyone have any idea how to solve this issue?

asyncHandler expects that the last argument is a function that returns ResponseFunction | Promise<ResponseFunction>. This means that you need to use the return keyword instead of just calling responseOf.
Try this
.then((user: User) => {
  if(user.password === password) {
    return responseOf(user, 200)
  }
  else {
    return responseOf('user not found', 400)
  }
})
.catch(err => {
  return responseOf('internal server error', 500)
})

authors: mjaracz sz-piotr

repo: EthWorks/restless

license: Unlicense


text:
🛑 Lisandro Bril is down

In db45d95, Lisandro Bril (https://www.lisandrobril.com) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Lisandro Bril is back up in 9ab815e after 18 minutes.

repo: Etixen/upptime

license: MIT


text:
Reference uses different SSM acronym

The following paper:
@misc{adams2024point2ssm,
      title={Point2SSM++: Self-Supervised Learning of Anatomical Shape Models from Point Clouds},
      author={Jadie Adams and Shireen Elhabian},
      year={2024},
      eprint={2405.09707},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

does not reference state space models or Mamba but rather uses SSM as an acronym for statistical shape modeling.
Thanks!

@neeleshg23  thanks for your kind reminder. Will delete this paper.


text:
Link for the preprocessed WIDER dataset

It seems that the link to the WIDER dataset redirects to this repository. Could you kindly update the link?

We have updated the link to the preprocessed  WIDER dataset

repo: Event-AHU/OpenPAR


text:
problem with address text

I ask for a courtesy, I really struggle to find a way to write the address of a letter with the text all to the right and the space between the lines reduced to the minimum possible, is there a solution? Thanks in advance for the possible reply

Duplicate of #107

authors: PrzemyslawKlys geraluca

repo: EvotecIT/OfficeIMO


text:
Add galaxy support to contam tool

The Contamination and Overlap tool only shows contamination from stars currently. The reason is that we don't have an order 0 trace for an arbitrary galaxy to simulate. However, they pop up in observations (e.g. WASP-63b) without warning.
If we don't want to dive directly into modeling galaxy contaminants, just update the contam tool to draw a big dashed circle on the detector simulation where a galaxy order 0 is predicted to appear. This would have the relative brightness and other metadata from Gaia available on hover, like the star order 0s.
Not sure what to do about dispersed galaxy traces though. Could just use the stellar traces but they are scaled based on an estimate of the effective temperature of the star given its NIR colors. OK to use this estimate for a galaxy @nespinoza ? The correct thing to do would be to make a similar library of galaxy SEDs but then we get into galaxy classification issues as well.

I agree with using stellar traces for now, although would be good to indicate with a special flag in the contam overlap itself. We can upgrade them later once we understand the dispersed trace of galaxies in the tool.

Added in #597

repo: ExoCTK/exoctk


text:
FunctionBuilder ignores parameters annotated with GraphQLIgnore

Currently FunctionBuilder includes all parameters except those annotated with GraphQLContext and those of type DataFetchingEnvironment: https://github.com/ExpediaDotCom/graphql-kotlin/blob/9915070a96b68d36528ee7cf28ba825e1e53dd85/src/main/kotlin/com/expedia/graphql/generator/types/FunctionBuilder.kt#L38-L41
With this present change, FunctionBuilder would also ignore parameters annotated with @GraphQLIgnore.
What follows is my concrete use case in the context of a Spring app, but the change would be convenient in other situations as well.
===
The example in the repo resolves nested queries by virtue of a lateinit var field (see https://github.com/ExpediaDotCom/graphql-kotlin/blob/3132d8851d67f2147f08590207279841a74338ad/example/src/main/kotlin/com/expedia/graphql/sample/query/NestedQueries.kt), with the associated data fetcher component getting resolved from the BeanFactory via a custom SpringDataFetcherFactory. This is quite cumbersome when nested queries require parameters, as seen here: https://github.com/ExpediaDotCom/graphql-kotlin/blob/3132d8851d67f2147f08590207279841a74338ad/example/src/main/kotlin/com/expedia/graphql/sample/query/NestedQueries.kt#L44-L49
A more convenient way would be to provide the nested query as a function in the data class, with bean component parameters annotated with Spring's @Autowired. A custom AutowiringFunctionDataFetcher resolves these annotated parameters to appropriate beans retrieved from the BeanFactory. The resulting data class looks as follows (contrived to match the repo's example):
data class NestedAnimal(
        val id: Int,
        val type: String
) {
    fun details(filter: String, @Autowired @GraphQLIgnore detailsRepository: DetailsRepository): Details {
        // retrieve details via detailsRepository
    }
}

Consequently the logic of the nested query lives in the data class itself instead of a separate DataFetcher class. Note that in my project I don't actually call data repositories directly in the data classes. Instead, the business logic is encapsulated in UseCase classes and the query is merely a call to a specific UseCase or Service (usually a one-liner). In this case having the logic in the data class isn't an issue.
Unfortunately the above approach doesn't currently work due to FunctionBuilder including all parameters, including the @Autowired @GraphQLIgnore parameters. Hence my proposed change.

Nice change! I agree that it makes sense to add even without the context of needing it in Spring

@sgeb I am releasing 0.2.12 with the changes. https://github.com/ExpediaDotCom/graphql-kotlin/releases/tag/0.2.12

Great, thanks for the super quick reaction.
BTW, I have a couple of more changes which could make sense to merge upstream. For example, I'm currently working around the fact that com.expedia.graphql.execution.FunctionDataFetcher#mapParameterToValue is private by copying the whole class into my project. The function could instead be protected to allow for easy specialization via inheritance.
Not sure when I'll get to providing a PR though.

Also, the Spring DI approach for nested queries described above has proven very convenient in my project. Happy to contribute it into this repo's example project. Is that something you'd be interested in? (again, not sure when I'll get to providing a PR though).

More examples are always helpful and we would welcome any PRs made.
With the changes to FunctionDataFetcher , we intended consumers to use the DataFetcherExecutionPredicate to modify the behaviour after we have mapped the values already.
I.e. You can modify the return value used here: https://github.com/ExpediaDotCom/graphql-kotlin/blob/af9667df8fa8901e64dc11cf56147b01b0ab5dc5/src/main/kotlin/com/expedia/graphql/execution/FunctionDataFetcher.kt#L65
Is there some data that is not available to you that you need?

source: gharchive/pull-request

authors: sgeb smyrick

repo: ExpediaDotCom/graphql-kotlin


text:
[$1000] Message with special characters showing as markdown in notification received

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!

Action Performed:

Open the app & login with user A
Go to the chat with user B
send /> to user B
user B will see the notification in this format />

Expected Result:
The preview should have /> as original message
Actual Result:
The preview is showing /$gt;  instead
Workaround:
unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[ ] Android / native

Version Number: 1.2.58-2
Reproducible in staging?: y
Reproducible in production?: y
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos:

Expensify/Expensify Issue URL:
Issue reported by: @daraksha-dk
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1674475359155939
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01db990281d1661242
Upwork Job ID: 1620671261122084864
Last Price Increase: 2023-02-01

I was able to replicate:

Proposal
We can use the org.apache.commons package StringEscapeUtils to unescape the characters so they are displayed correctly. This is the standard approach to do this
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 65e233274..7d3359d50 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -330,6 +330,8 @@ dependencies {
     // Multi Dex Support: https://developer.android.com/studio/build/multidex#mdex-gradle
     implementation 'com.android.support:multidex:1.0.3'

+    implementation 'org.apache.commons:commons-lang3:3.11'
+
     // Plaid SDK
     implementation project(':react-native-plaid-link-sdk')
     // This okhttp3 dependency prevents the app from crashing - See https://github.com/plaid/react-native-plaid-link-sdk/issues/74#issuecomment-648435002
diff --git a/android/app/src/main/java/com/expensify/chat/customairshipextender/CustomNotificationProvider.java b/android/app/src/main/java/com/expensify/chat/customairshipextender/CustomNotificationProvider.java
index 9b8f64d51..3eb466759 100644
--- a/android/app/src/main/java/com/expensify/chat/customairshipextender/CustomNotificationProvider.java
+++ b/android/app/src/main/java/com/expensify/chat/customairshipextender/CustomNotificationProvider.java
@@ -42,6 +42,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
+import org.apache.commons.text.StringEscapeUtils;

 public class CustomNotificationProvider extends ReactNotificationProvider {

@@ -165,6 +166,7 @@ public class CustomNotificationProvider extends ReactNotificationProvider {
         String avatar = reportAction.get("avatar").getString();
         String accountID = Integer.toString(reportAction.get("actorAccountID").getInt(-1));
         String message = reportAction.get("message").getList().get(0).getMap().get("text").getString();
+        message = StringEscapeUtils.unescapeHtml(message);
         long time = Timestamp.valueOf(reportAction.get("created").getString(Instant.now().toString())).getTime();
         String roomName = payload.get("roomName") == null ? "" : payload.get("roomName").getString("");
         String conversationTitle = "Chat with " + name;

Proposal
As per the problem statement and screenshots, it is not clear whether the issue is happening only when the message is coming from an android device or if the message is coming from any device.
I would first investigate various platforms and see if the issue is replicated when the message is sent from Web and iOs.
a. If the issue is indeed happening when the message is sent from any platform, then I would proceed with unescaping as suggested above.
b. If the issue is happening only when the message is sent from Android, then I will inspect the code for putting the message into the data store and probably find some additional escaping implemented and remove that.
Onyx is smart enough to look after escaping the characters and this kind of issue is probably due to some extra escaping implemented by a developer.

@daraksha-dk or @kavimuru  Is this only reproducible on android?

I only tested for android and it works.. But unable to test on ios.. do development builds not have notifications on ios?

Tested it myself, looks good on
Desktop

iOS

Thanks @esh-g for the proposal but I think there might be better options, so I will wait!

@Santhosh-Sellavel Are you having doubts about using this library? Or would you like any other change in approach?

@Santhosh-Sellavel Are you having doubts about using this library? Or would you like any other change in approach?

Looking for other options, there may be solutions without using a library!

Another option is to use a custom table with all the html entities but I don't think that will be maintainable...
An alternative library (not so widely used): https://www.unbescape.org/

I too thought of having a list (custom table) for the html entities but there are so many! Like the following would be the code to replace the accent letters:
text = text.replace("Ç", "Ç");
text = text.replace("ç", "ç");
text = text.replace("Á", "Á");
text = text.replace("Â", "Â");
text = text.replace("Ã", "Ã");
text = text.replace("É", "É");
text = text.replace("Ê", "Ê");
text = text.replace("Í", "Í");
text = text.replace("Ô", "Ô");
text = text.replace("Õ", "Õ");
text = text.replace("Ó", "Ó");
text = text.replace("Ú", "Ú");
text = text.replace("á", "á");
text = text.replace("â", "â");
text = text.replace("ã", "ã");
text = text.replace("é", "é");
text = text.replace("ê", "ê");
text = text.replace("í", "í");
text = text.replace("ô", "ô");
text = text.replace("õ", "õ");
text = text.replace("ó", "ó");
text = text.replace("ú", "ú");

Many other things like greek alphabets and other utf-8 characters are still left out... And Java does not have a native method for unescaping these strings. It may have a URL decoder but that is different and cannot be used here. So that is the reason I went with the library org.apache.commons because it is very widely used and already it is a dependency of a the react-native-blob-util package. So it is already being used in every react native project out there!
+--- project :react-native-blob-util
|    +--- com.facebook.react:react-native:+ -> 0.70.4-alpha.2 (*)
|    \--- org.apache.commons:commons-lang3:3.0 -> 3.12.0

You can get the output above by running: ./gradlew app:dependencies in the android directory

Some alternatives
I think apache should be perfect but to be thorough, I can enlist a couple more alternatives

https://gmailassistant.sourceforge.net/src/org/freeshell/zs/common/HtmlManipulator.java.html
https://www.unbescape.org/

we are getting some proposals, the process is working no overdue yet

@sketchydroide @bfitzexpensify @Santhosh-Sellavel this issue was created 2 weeks ago. Are we close to approving a proposal? If not, what's blocking us from getting this issue assigned? Don't hesitate to create a thread in #expensify-open-source to align faster in real time. Thanks!

@sketchydroide @bfitzexpensify @Santhosh-Sellavel this issue was created 2 weeks ago. Are we close to approving a proposal? If not, what's blocking us from getting this issue assigned? Don't hesitate to create a thread in #expensify-open-source to align faster in real time. Thanks!

@sketchydroide @bfitzexpensify @Santhosh-Sellavel this issue was created 2 weeks ago. Are we close to approving a proposal? If not, what's blocking us from getting this issue assigned? Don't hesitate to create a thread in #expensify-open-source to align faster in real time. Thanks!

Additional Proposal
Root cause
You can see the reportAction that gets sent has the same html and text values

Solutions
Option 1:
So we can unescape the text part of the message before passing it off
This can be done easily with lodash.

Here is the java part accessing the message(unchanged)

Option 2
I'm not sure if it is meant for the text and html values to be the same here, I think the text should be unescaped and the html should be escaped. Therefore, we can fix the ExpensiMark library's html to text method being used while creating a new reportAction

We are using the ExpensiMark parser in src/libs/reportUtils.js

Will look into this Tomorrow!

Just a thing I realised for option 1, the LocalNotfication doesn't work for native platforms I think so if we want to go with option 1, we would have to escape it in the Java like in the earlier proposal..
But anyway, I think option 2 should be better

@sketchydroide @bfitzexpensify @Santhosh-Sellavel this issue is now 3 weeks old. There is one more week left before this issue breaks WAQ and will need to go internal. What needs to happen to get a PR in review this week? Please create a thread in #expensify-open-source to discuss. Thanks!

Ah on to it now!

Sorry for the delay,
@sketchydroide
This seems to be valid. What's thoughts on this option 2  here, Do '.text' & '.html' need to have the same values in reportAction?
If not we can go with this proposal option2, else we can go with this proposal.

@sketchydroide @bfitzexpensify @Santhosh-Sellavel this issue is now 3 weeks old. There is one more week left before this issue breaks WAQ and will need to go internal. What needs to happen to get a PR in review this week? Please create a thread in #expensify-open-source to discuss. Thanks!

@esh-g have you tested this one?

@Santhosh-Sellavel  Yes!. Here is the test image: https://github.com/Expensify/App/issues/14493#issuecomment-1412683660

@esh-g Any steps to test this one in development?

Actually, I had to build an apk to test that...

@bfitzexpensify Let's not double this further until @sketchydroide post his thoughts on this

Oh I thought so cool, thanks @esh-g!

To be honest I'm not completly sure, I don't think they need to be, but it has been a while since we had the conversation on what each should represent. Let's onpen a chat in slack

@Santhosh-Sellavel If you are concerned with the version being html4, I can also do the implementation with a library like unbescape which I think supports htmll5.
OR
I can make a custom class for the unescaping as well.
Here is a link the html character encodings full table along with the html version:
https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#List_of_character_entity_references_in_HTML
I can extract the data from the table above and make a custom parser, so that we can have more control.
But I think it is better if we go about unescaping in javascript with the underscore.js library as suggested in option 2.

@esh-g We can explore option 2 here.
Can explain more clearly what you are proposing.

@Santhosh-Sellavel Going with option 2 would require changes to the backend as well. As suggested in the slack conversation

@Santhosh-Sellavel Going with option 2 would require changes to the backend as well. As suggested in the slack conversation

We are fine with that can you explain resubmitting the proposal for option2 in the new template. Please avoid too much text or too many snippets, thanks!

New Proposal
Please re-state the problem that we are trying to solve in this issue
The notifications on android have escaped html characters like < instead of <
What is the root cause of that problem?
The root cause is that the text property of the reportAction is escaped to html, but it should be plain text as suggested in the slack discussion
And we are passing reportComment as a parameter, which is escaped to html characters as expected by the API. But the backend should return the text field as unescaped and html field as escaped
What changes do you think we should make in order to solve the problem?
While sending the 'AddComment' command to the API in the src/libs/actions/Report.js https://github.com/Expensify/App/blob/24456045369c409cb0741ab188d775c30358bc80/src/libs/actions/Report.js#L197
We need to change the backend code of this to properly un-escape the special characters for the text field. Although I am unaware of the backend code, if it is in javascript, I would suggest using the unescape method from underscore.js because that is the library we are using to escape the string in the first place.
Thanks!

PS Only one sippet this time 😅

Hey, I just learned that the backend is in php so the function htmlspecialchars_decode() built into php can be used to decode the reportComment parameter to be displayed in the text field. I don't think any front-end changes should be required.

Current assignee @bfitzexpensify is eligible for the External assigner, not assigning anyone new.

Current assignee @Santhosh-Sellavel is eligible for the External assigner, not assigning anyone new.

Triggered auto assignment to @tylerkaraszewski (External), see https://stackoverflow.com/c/expensify/questions/7972 for more details.

@tylerkaraszewski @bfitzexpensify @Santhosh-Sellavel this issue is now 4 weeks old and preventing us from maintaining WAQ, can you:

Decide whether any proposals currently meet our guidelines and can be approved as-is today
If no proposals meet that standard, please take this issue internal and treat it as one of your highest priorities
If you have any questions, don't hesitate to start a discussion in #expensify-open-source

Thanks!

Current assignee @Santhosh-Sellavel is eligible for the Internal assigner, not assigning anyone new.

@Santhosh-Sellavel - that proposal seem fine and straightforward to me.

Cool, can you get started on it?

📣 @Santhosh-Sellavel! 📣
Hey, it seems we don’t have your contributor details yet! You'll only have to do this once, and this is how we'll hire you on Upwork.
Please follow these steps:

Get the email address used to login to your Expensify account. If you don't already have an Expensify account, create one here. If you have multiple accounts (e.g. one for testing), please use your main account email.
Get the link to your Upwork profile. It's necessary because we only pay via Upwork. You can access it by logging in, and then clicking on your name. It'll look like this. If you don't already have an account, sign up for one here.
Copy the format below and paste it in a comment on this issue. Replace the placeholder text with your actual details.

Format:
Contributor details
Your Expensify account email: <REPLACE EMAIL HERE>
Upwork Profile Link: <REPLACE LINK HERE>

Yes, I can work on this.

Hey, I just learned that the backend is in php so the function htmlspecialchars_decode() built into php can be used to decode the reportComment parameter to be displayed in the text field. I don't think any front-end changes should be required since we are only building optimistic data there.
cc @Santhosh-Sellavel

In the proposal I mentioned using the unescape from underscore.js but
@tylerkaraszewski I think you can use the htmlspecialchars_decode() function in php as the backend is not in js....

📣 @esh-g! 📣
Hey, it seems we don’t have your contributor details yet! You'll only have to do this once, and this is how we'll hire you on Upwork.
Please follow these steps:

Get the email address used to login to your Expensify account. If you don't already have an Expensify account, create one here. If you have multiple accounts (e.g. one for testing), please use your main account email.
Get the link to your Upwork profile. It's necessary because we only pay via Upwork. You can access it by logging in, and then clicking on your name. It'll look like this. If you don't already have an account, sign up for one here.
Copy the format below and paste it in a comment on this issue. Replace the placeholder text with your actual details.

Format:
Contributor details
Your Expensify account email: <REPLACE EMAIL HERE>
Upwork Profile Link: <REPLACE LINK HERE>

Contributor details
Your Expensify account email: eshgupta1217@gmail.com
Upwork Profile Link: https://www.upwork.com/freelancers/~0186b1d7cc69656f22

✅ Contributor details stored successfully. Thank you for contributing to Expensify!

@tylerkaraszewski, @bfitzexpensify, @Santhosh-Sellavel Huh... This is 4 days overdue. Who can take care of this?

I've replicated this in my emulator and I'm working on it.

Ok, discussing this internally this is the suggested way we came up with to handle this, since I ended up doing the fix as an internal engineer:

@Santhosh-Sellavel will review my PR since it’s front-end and E/App.
@Santhosh-Sellavel gets paid the flat $1000 rate for reviewing the internal PR.
The bug reporter gets paid the $250 bug reporting bonus.

@bfitzexpensify - does that seem reasonable for this?

Would I be eligible for compensation for pointing out the root cause of text being different than html as well as proposing a fix in php with the htmlspecialchars_decode()?
cc @Santhosh-Sellavel @tylerkaraszewski

Looks like we're going to move the fix into PHP afterall.

@esh-g we won't be able to compensate you in this case — we've discussed internally, and though your suggestion wasn't incorrect, it was something that we felt was reasonably obvious as a cause

@tylerkaraszewski, @bfitzexpensify, @Santhosh-Sellavel Whoops! This issue is 2 days overdue. Let's get this updated quick!

@tylerkaraszewski, @bfitzexpensify, @Santhosh-Sellavel Still overdue 6 days?! Let's take care of this!

@tylerkaraszewski, @bfitzexpensify, @Santhosh-Sellavel 8 days overdue is a lot. Should this be a Weekly issue? If so, feel free to change it!

Re-opening so assigned BZ can handle the payment(s)

@daraksha-dk can you please apply here - https://www.upwork.com/jobs/~01ba51910e738629a1? Thank you!

All done here

authors: MelvinBot Santhosh-Sellavel bfitzexpensify esh-g kavimuru michaelhaxhiu sketchydroide swakeert tylerkaraszewski

repo: Expensify/App


text:
[HOLD] App highlights the search term on selecting one of the searches in new group search and in split bill search, app removes the search term on selecting one of the searches

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!

Action Performed:

Open the app
Click on plus
Click on Split bill
Enter any amount and click on continue
Search using any term, select any one result and observe what app does to search term
Click on plus
Click on new group
Search using any term, select any one result and observe what app does to search term

Expected Result:
Both the search pages/components are identical so they should handle processing of search term on result selection in similar manner
Actual Result:
New group search selects the search term on selecting any one result and split bill search removes the search term on click of any result
Workaround:
unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

Version Number: 1.2.87-0
Reproducible in staging?: y
Reproducible in production?: y
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos:
https://user-images.githubusercontent.com/43996225/226145435-5221ec5e-0576-4d55-96c3-6155ea4651f2.mp4
https://user-images.githubusercontent.com/43996225/226145440-ab3e62ca-6b55-43c8-8d45-c338a7635bfd.mp4
Expensify/Expensify Issue URL:
Issue reported by: @dhanashree-sawant
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1679138584874129
View all open jobs on GitHub

Triggered auto assignment to @muttmuure (Bug), see https://stackoverflow.com/c/expensify/questions/14418 for more details.

Bug0 Triage Checklist (Main S/O)

[ ] This "bug" occurs on a supported platform (ensure Platforms in OP are ✅)
[ ] This bug is not a duplicate report (check E/App issues and #expensify-bugs)

If it is, comment with a link to the original report, close the issue and add any novel details to the original issue instead

[ ] This bug is reproducible using the reproduction steps in the OP. S/O

If the reproduction steps are clear and you're unable to reproduce the bug, check with the reporter and QA first, then close the issue.
If the reproduction steps aren't clear and you determine the correct steps, please update the OP.

[ ] This issue is filled out as thoroughly and clearly as possible

Pay special attention to the title, results, platforms where the bug occurs, and if the bug happens on staging/production.

[ ] I have reviewed and subscribed to the linked Slack conversation to ensure Slack/Github stay in sync

Proposal
Please re-state the problem that we are trying to solve in this issue.
App highlights the search term on selecting one of the searches in new group search and in split bill search, app removes the search term on selecting one of the searches.
What is the root cause of that problem?
New Group Search Behaviour (Current):

When user select option, it will Keep and Highlight (focus) search terms.
When user deselect option from (selected list), it will Keep and Highlight (focus) search terms

This behaviour is due to code shown below (line 197 and 258)
https://github.com/Expensify/App/blob/c803b5ea434967cf959a0a34c2178d0037069933/src/pages/NewChatPage.js#L192-L198
https://github.com/Expensify/App/blob/c803b5ea434967cf959a0a34c2178d0037069933/src/pages/NewChatPage.js#L258
Split Bill Search Behaviour (Current):

When user select option, it will Remove (cleanup) search terms and Not Highlight.
When user deselect option from (selected list) it will Keep search terms but Not Highlight (i.e. not focus).

This behaviour is due to code shown below (line 205 )
https://github.com/Expensify/App/blob/c803b5ea434967cf959a0a34c2178d0037069933/src/pages/iou/steps/IOUParticipantsPage/IOUParticipantsSplit.js#L201-L206
There is no shouldFocusOnSelectRow props set for <OptionsSelector> component so it will not highlight search terms during option select or deselect.
https://github.com/Expensify/App/blob/c803b5ea434967cf959a0a34c2178d0037069933/src/pages/iou/steps/IOUParticipantsPage/IOUParticipantsSplit.js#L224-L238
So here different behaviour implemented for Group Search and Split Bill Search this is the root cause of this issue.
What changes do you think we should make in order to solve the problem?
So now question is, Which behaviour is proper?
Ans: As per my understanding New Group Search  behaviour is proper.  So we have to make Split Bill Search behaviour similar to New Group Search.
So we have to update code as shown below:
i.e. Within src/pages/iou/steps/IOUParticipantsPage/IOUParticipantsSplit.js Keep search terms within state during option select and deselect. Add shouldFocusOnSelectRow props  to OptionsSelector etc.
  this.setState((prevState) => {
      const {
          recentReports,
          personalDetails,
          userToInvite,
      } = OptionsListUtils.getNewChatOptions(
          this.props.reports,
          this.props.personalDetails,
          this.props.betas,
          //isOptionInList ? prevState.searchTerm : '',  // OLD CODE
          prevState.searchTerm,                          // NEW CODE
          newSelectedOptions,
          CONST.EXPENSIFY_EMAILS,
      );
      return {
          recentReports,
          personalDetails,
          userToInvite,
          //searchTerm: isOptionInList ? prevState.searchTerm : '',  // OLD CODE
          searchTerm: prevState.searchTerm,                          // NEW CODE
      };
  });

Add shouldFocusOnSelectRow props to <OptionsSelector >
 <OptionsSelector
     ...
     shouldFocusOnSelectRow
     ...
 />

Once we implement above solution, Split Bill Search behave same as New Group Search. Refer result video.
NOTE: In my proposal above, I gave solution to make Split Bill Search behaviour similar to New Group Search,
but if Expensify team think that we have make New Group Search behaviour similar to Split Bill (I will not suggest) then we have to update code within NewChatPage.js file accordingly (i.e. vice Versa) So consider this also as my proposal.
What alternative solutions did you explore? (Optional)
None

 Result
https://user-images.githubusercontent.com/7823358/226171568-c71c45ba-1c0a-445d-874c-860f98152abf.mp4

There is a predesign going on for overhauling the search functionality. I put HOLD on this issue.

this is on HOLD

Hold

Hold

Hold

Hold

I believe the search overhaul is still going. so... HOLD

Held

Held

I believe the search overhaul is still WIP. HOLD

Hold

Hold

I believe search overhaul is still going on

changing the priority to monthly

still waiting for the search feature overhaul to finish

I think the search feature overhaul is still going on

Still held

Search change was reverted but will up status of this when it's live again

I think that we should close this and a new report should be filed later. It's ancient and the split bill functionality has been moved around and changed, and we've also made changes to search. The issue OP is not comparing apples to apples with the current app.

authors: MelvinBot PrashantMangukiya hayata-suenaga kavimuru muttmuure


text:
[$500] Create a useResponsiveLayout hook

Slack context: https://expensify.slack.com/archives/C01GTK53T8Q/p1698364514493649
Problem
There are some times when we want to use the same layout on mobile devices or in the RHP on wide screens. In these cases, we can't rely on isSmallScreenWidth from useWindowDimensions to determine which layout to use, so we have hard-coded and/or different solutions we use to address the same problem.
Solution

In the navigation stack, add an isInRHP route prop to all screens in the RHP.

Write a custom hook called useResponsiveLayout that does something like this:
function useResponsiveLayout() {
    const {isSmallScreenWidth} = useWindowDimensions();
    const {params} = useRoute();
    return {
        shouldUseNarrowLayout = isSmallScreenWidth || params.isInRHP,
    };
}

Replace most layout-motivated uses of useWindowDimensions with useResponsiveLayout like so:
- const {isSmallScreenWidth} = useWindowDimensions();
+ const {shouldUseNarrowLayout} = useResponsiveLayout();

Introduce a new lint rule that prohibits using isSmallScreenWidth from useWindowDimensions, advising developers to use shouldUseNarrowLayout instead.

Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01f36dcb081cdf74b2
Upwork Job ID: 1717949899365408768
Last Price Increase: 2023-10-27

I can work on this if no one is assigned yet, or should I write proposal

Problem:
In the current application, there is a challenge when needing to use the same layout for both mobile devices and the right-hand panel (RHP) on wide screens. This problem arises because it's not always feasible to rely on the isSmallScreenWidth variable from useWindowDimensions to determine which layout to use. As a result, developers often resort to hard-coded and inconsistent solutions to address this issue.
Solution:
To address this problem, the following changes are proposed:
Route Prop for RHP Detection: In the navigation stack, it is suggested to add an isInRHP route prop to all screens within the RHP. This addition allows for easy identification of screens within the RHP.
Custom Hook - useResponsiveLayout: Create a custom hook called useResponsiveLayout to determine the appropriate layout based on the screen width and the isInRHP route prop.
function useResponsiveLayout() {
    const { isSmallScreenWidth } = useWindowDimensions();
    const { params } = useRoute();
    return {
        shouldUseNarrowLayout: isSmallScreenWidth || params.isInRHP,
    };
}

Replace useWindowDimensions with useResponsiveLayout: To ensure a consistent approach to layout handling, replace most of the current uses of useWindowDimensions with useResponsiveLayout as shown below:
// Before
const { isSmallScreenWidth } = useWindowDimensions();

// After
const { shouldUseNarrowLayout } = useResponsiveLayout();
Introduce a Lint Rule: To maintain code quality and consistency, introduce a new lint rule that discourages the use of isSmallScreenWidth from useWindowDimensions. Developers are advised to use shouldUseNarrowLayout instead.
This proposed solution aims to provide a more unified and maintainable approach to handling responsive layouts in the application. These changes simplify the management of layouts across various screen sizes and ensure a more consistent user experience.

Thanks for all the proposals everyone. At this time I've decided to move forward with the one that feels the clearest and most high-quality, which in my opinion is from @rayane-djouah here.

@rayane-djouah any updates?

can someone provide an update on the status of this issue? thanks!

Since we're splitting this up into a few PRs, @rayane-djouah, can you lay out the related PRs in sequence please?

Doubling the bounty here due to large scope

moving to daily since payment is coming up soon

@maddylewis since we are splitting the PR into multiple small PRs we should only process payment once the last PR gets merged. this is only the first one.

Agreed. Left some comments on the 2nd PR.

@rayane-djouah we're awaiting changes in the 2nd PR

Based on this comment here, this one is not ready for payment and there is an upcoming PR that needs to go to production before I can move forward with the payment process.
For now, I updated the Upwork job link:
https://www.upwork.com/jobs/~0123a7c663aaab8163
@getusha and @rayane-djouah -- please apply and we can be ready for the payment date.
Heads up, I will be offline until Tuesday, but will catch up then to identify the status of the last PR. I will not be actively watching over this GitHub during that period. If anything urgent is needed here, please ask for help in the Open Source Slack Room-- thanks!

@getusha two requests:

Please apply to the Upwork job: https://www.upwork.com/jobs/~0123a7c663aaab8163

Can we get feedback if this Deploy Blocker notice is accurate to the first PR or unrelated to this GH? Thanks!

@getusha and @roryabraham - to confirm, this one is pending one last PR, so the January 24 payment date is inaccurate - right? Thanks!

Yes, there's more than 1 outstanding PR. This should not be awaiting payment yet.
@getusha any update on when you'll be able to review this? It's not particularly high-priority, but better to not have it drag on longer than necessary. If you're currently prioritizing something else, that might be ok – just try to communicate a bit more actively. Thanks!

Thank you for confirming!

@alexpensify here is a list of PRs we should complete before payment https://github.com/Expensify/App/issues/30528#issuecomment-1868485991
@rayane-djouah @roryabraham i think we should avoid putting the issue link on upcoming PRs to make the automation stop triggering.

Thank you for this update and noted!

@rayane-djouah when do you think you'll be able to raise the next PR?

Thanks, will try to complete the review tomorrow.

@rayane-djouah @getusha just checking in here – how are we doing and what are our next steps?

needs to update https://github.com/Expensify/App/pull/34837 to resolve some merge conflicts. Anything else?

Yes, @rayane-djouah will complete the checklist & resolve conflicts.

Looks like we are making progress here!

Weekly Update: Making progress

Weekly Update: @rayane-djouah some of the PRs are still in draft mode
Can we get an update in the PR list you put together here - https://github.com/Expensify/App/issues/30528#issuecomment-1868485991

The PR listed above is still in review

Weekly Update: the PR is moving forward.

Weekly Update: The PR is going through reviews but moving along.

Weekly Update: The PR is in review to make sure testing passes.

Weekly Update: The PR went through another review process and more testing.

Weekly Update: More discussion in the PR due to recent findings

@roryabraham can I get feedback regarding which Wave or VIP to associate this one with? -- thanks!

Weekly Update: We are in a focus period, I'll check in next week.

This is a pretty old issue, and I'm not sure which wave or VIP I'd associate it with. It's basically a low-level code improvement to help avoid a semi-common mistake and make the code more consistent. Some recent discussion about it in slack here.

Thanks for the context @roryabraham!
Weekly Update: The PR is moving in review again: https://github.com/Expensify/App/pull/36292

Heads up, I will be offline until Tuesday, May 28, 2024, and will not actively watch over this GitHub during that period.
If anything urgent is needed here, please ask for help in the #expensify-open-source Slack Room-- thanks!

Catching up from being OOO, it looks like this one was on hold due to the freeze but we can carry on now.

PR merged today

Weekly Update: It looks like there was regression, but that has been addressed. I'll check again next week to confirm if we can move forward with the payment process.

Automation failed here, I need to start the payment process tomorrow since today marks 7 days in production.

@alexpensify there are still other PRs we need to get merged https://github.com/Expensify/App/issues/30528#issuecomment-1868485991

@getusha, thanks for flagging; I appreciate it. With that said, are we still striking the completed ones? If not, we should to keep a better record of what's left. For now, I'll hold on the payment process.

@rayane-djouah i think we can put the remaining changes in a single PR except the eslint-config-expensify changes

sounds good 👍🏼

@getusha and @rayane-djouah - can either of you confirm if this notice is accurate or not? Thanks!

Ok, waiting on https://github.com/Expensify/eslint-config-expensify/pull/116 to go into production

pulling in @mountiny to take over while I'm on parental leave

ESLint rule merged @rayane-djouah can you raise App PR now please?

Heads up, I will be offline until Tuesday, October 22, 2024, and will not actively watch over this GitHub during that period.
If this GitHub requires an urgent update, please ask for help in the #expensify-open-source Slack Room. If the inquiry can wait, I'll review it when I return online.

No regression tests required this is a tool for developers
The payment summary is $1000 to @rayane-djouah and to @getusha

Payouts due: 2024-10-30

[ ] Contributor: $250 @rayane-djouah
[ ] Reviewer: $250 @getusha

Upwork job is here. I had to create a new job in Upwork. Please accept and I can complete the payment process. Thanks!

🤦🏼 good catch - Upwork was right. I've updated the summary here and paid @rayane-djouah via Upwork. I'm waiting for @getusha to accept.

Status: Waiting for @getusha to accept in Upwork

Thanks for flagging! This GH is from 2023. I think it needs to be paid via Chat, but let me double-check.

I confirmed that this one is from 2023. It will need to be paid via Upwork. I will move this to weekly since I'm OOO until Tuesday. @getusha, keep me posted when you accept it in Upwork. I'll complete the process when I'm back online.

All set, everyone has been paid via Upwork: https://github.com/Expensify/App/issues/30528#issuecomment-2448951102

authors: WebflowGuru alexpensify alitoshmatov getusha maddylewis mountiny roryabraham


text:
Settings - Pressing the back button on the "Keyboard Shortcuts" page leads to a blank screen

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!

Version Number: 1.4.36-0
Reproducible in staging?: Y
Reproducible in production?: N
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers): shussain@applausemail.com
Logs: https://stackoverflow.com/c/expensify/questions/4856
Expensify/Expensify Issue URL:
Issue reported by: Applause - Internal Team
Slack conversation:
Action Performed:

Go the the Account settings > About > View keyboard shortcuts
Press back button

Expected Result:
Keyboard shortcuts modal should be closed and blank screen should not be displayed
Actual Result:
Pressing the back button on the "Keyboard Shortcuts" page leads to a blank screen
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence

https://github.com/Expensify/App/assets/78819774/94870091-de7c-4b60-bc12-787297432537
View all open jobs on GitHub

Able to reproduce

@hayata-suenaga This looks like related to goBack problems with Ideal Nav. Can you check this too?

Closing this issue to combine it with the existing issue.


text:
[$500] Domain name is not dropped when sending text with user mention from same domain

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!

Version Number: 1.4.40-0
Reproducible in staging?: y
Reproducible in production?: n
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Expensify/Expensify Issue URL:
Issue reported by: Applause internal team
Slack conversation:
Action Performed:
1.Go to staging.new.expensify.com
2. Go to any chat.
3. Send a message with mention of another user from the same private domain.
Expected Result:
The domain name is dropped because the user mention is from same domain.
Actual Result:
It shows domain name at the end of the mention in the message.
Workaround:
unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence
https://github.com/Expensify/App/assets/38435837/5300bd70-1ee3-4fc4-84d7-2e6e5d242eae

View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~0190f9efc7bd55b768
Upwork Job ID: 1757079921886003200
Last Price Increase: 2024-02-12

Not sure if this is a deploy blocker. It seems to me that backend changes caused this issue. This should be fixed once https://github.com/Expensify/App/issues/35532 gets resolved.

Great find @allroundexperts , I'll bring this to slack but 99% sure this should be a blocker

https://github.com/Expensify/App/issues/35532 is a separate issue for handling specifically the search and mention auto-fill functionality. If the domain name is not dropped from the mention itself (after sending) then there's been a regression since that functionality was added in this PR - associated issue here

@tylerkaraszewski @allroundexperts, was this reverted, and can it be closed?

No, mentions are still not shortened. I've asked if we can re-introduce the original logic from this PR as part of handling this issue since it's also tied to shortened mentions.
If the contributor working on that issue agrees, then we can close this issue out in favor of that one. If not, then we can handle re-implementing shortened mentions here

@allroundexperts, please follow up on Nikki's comment above. Thanks!

Hi @isabelastisser!
@tienifr should be able to handle this case in his PR. @tienifr please confirm and then we can close this one.

I'll take a look at this ASAP.
Sorry for the late reply

Thanks @ruben-rebelo. Please provide an update when you have a chance.

Great, thanks @ruben-rebelo!

It looks like the shortened mentions don't get rendered via the live markdown preview. Is that a bug from this PR or something we just haven't implemented yet?

This should've gone live as of the changes implemented in https://github.com/Expensify/App/pull/36697

Ah ok, I created an issue for it here: https://github.com/Expensify/App/issues/38025

authors: Beamanator NikkiWines allroundexperts isabelastisser m-natarajan puneetlath ruben-rebelo


text:
[P2P Distance] Define Default P2P Rates

Follow this plan to Define Default P2P Rates.
Here are the top 10 most common policy output currencies as of 2/27/24. Here is the CQ that was used.
outputCurrency,policyCount
USD,10610104
EUR,658901
GBP,622255
CAD,474795
INR,317091
AUD,282833
RUB,116916
BRL,92562
SGD,78368
UAH,72175

Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~011f53a654b3f174ce
Upwork Job ID: 1760072040420114432
Last Price Increase: 2024-02-20

@twisterdotcom or @trjExpensify would you be interested in doing the research part of this?

I'm afraid I can't take this one right now, Neil. Sorry!

@neil-marcellini just to make sure I understand, all you'd need me to do is get the top 10 currencies (which, I'm not sure we need to query, we could estimate USD, CAD, GBP, AUD, NZD, EUR, JPY, CHF... ZAR, MXN? Missing maybe ILS, BRL, DKK, SGD, SEK, KRW, NOK, INR but still.
And then I just need to find what that jurisdiction's default mileage rate and unit is... and then format it into json like this?
{
    "USD": {
        "rate": 0.655,
        "unit": "mi"
    },
    "GBP": {
        "rate": 0.520,
        "unit": "km"
    },
    "CAD": {
        "rate": 0.890,
        "unit": "km"
    }
}

I have a bunch of customers who operate in lots of these jurisdictions so I can kind of just check their policies to get a good idea.

Backend only, so removing C+

@twisterdotcom will you be able to come up with values for the most popular currencies in the next few days? The CQ is waiting to be run in this issue.
I'm going to get started on the cli script for generating this data soon.

{
    "USD": {
        "rate": 0.67,
        "unit": "mi"
    },
    "CAD": {
        "rate": 0.70,
        "unit": "km"
    },
    "GBP": {
        "rate": 0.45,
        "unit": "mi",
    },
    "AUD": {
        "rate": 0.85,
        "unit": "km"
    },
    "NZD": {
        "rate": 0.95,
        "unit": "km"
    },
    "EUR": {
        "rate": 0.3, // Rate for Germany, other EUR countries differ
        "unit": "varies"
    },
    "CHF": {
        "rate": 0.7,
        "unit": "km",
    },
    "ZAR": {
        "rate": 4.64,
        "unit": "km"
    },
    "MXN": {
        "rate": 0.93,
        "unit": "km"
    },
    "ILS": {
        "rate": 5.400,
        "unit": "km"
    },
    "DKK": {
        "rate": 3.79,
        "unit": "DKK/km"
    },
    "SEK": {
        "rate": 2.5,
        "unit": "km"
    },
    "NOK": {
        "rate": 3.5,
        "unit": "km"
    },
    "PLN": {
        "rate": 0.89,
        "unit": "km"
    },
}

@neil-marcellini a lot of these jurisdictions have tiered mileage rates though (as in they have a lower amount after X miles. Can we only load one default with one name for each? A lot of the currencies I named don't have specific mileage rates set by the government, so these are the ones that do.
Also, TIL that Norway a specific mileage rate for snowmobiles.

Awesome thanks so much for creating that! We got the query results too so I'm posting them in the description. I think I have everything I need to define the default rates now.
Would you please write a quick SO about how to update the mileage rates each year? It will be used when we create a chore for this issue [HOLD 36965][P2P Distance] Create the UpdateMileageRates chore. I'll assign you there. Please include instructions for how to update the existing IRS rate and how to research the new default values for the top 10 most used currencies.
I'll add on to the SO with instructions about how to generate the JSON for the rest of the mapping. I think I might create a simple supportal tool for it rather than a CLI script, so that a non-engineer can generate the full JSON.

Nice, I just tried to check for RUB and UAH and I can't see that they have a standard rate, so the rest should be covered.

please write a quick SO about how to update the mileage rates each year?

Pfffft, god it's a bit all over the place but I can. I actually got these from a mix of googling and checking Blackberry's workspaces. I wonder if we can just get the same answers from a GPT?

Can we close this and focus on that in https://github.com/Expensify/App/issues/36974#issuecomment-1968870745?

Can we close this and focus on that in #36974 (comment)?

Yeah, your work here is done @twisterdotcom, thanks! I'm going to keep this open until I finish the engineering part of it. Using chatGPT to get the rates could work, but that assumes the AI model is updated each year, which is probably not the case. Googling might be best.

Today I built the supportal tool to generate these rates, and I'm really happy with it. I need to write some test steps in the PR, and then I can easily get it up for review tomorrow.

PR is up for review! Here's a peak of what the supportal tool looks like. I'll paste the JSON into the front end issue, take it off hold, and get it moving.
https://github.com/Expensify/App/assets/26260477/a3a3b9ae-2c1f-4be2-ad92-4eb71d25d7f3

The PR has been merged to production, so this is done!


text:
Workspace - Grammar error "You\’ve got" in the guide welcome message in #admins room

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!

Version Number: 1.4.48.0
Reproducible in staging?: y
Reproducible in production?: y
Issue reported by: Applause - Internal Team
Action Performed:
Precondition: Create a Collect policy in OD with a new Gmail account

Log into ND as the admin of the workspace
Open the #admins room

Expected Result:
It should be "You’ve got".
Actual Result:
Grammar error "You\’ve got" in the guide welcome message in #admins room
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence

View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~0173a652400f6b043b
Upwork Job ID: 1767171306650935296
Last Price Increase: 2024-03-11

@sonialiap I haven't added the External label as I wasn't 100% sure about this issue. Please take a look and add the label if you agree it's a bug and can be handled by external contributors

I'd fix this myself but I'm not seeing what's wrong. The other instances of \' are rendering correctly. @kbecciv @shubham1206agra any ideas on what's causing the incorrect render?
Code
private const ASSIGNED_GUIDE_DM_MESSAGE = '
Let\'s get you setup on Expensify
Hi there 👋 , I\'m your dedicated setup specialist. I look forward to helping you explore and configure Expensify. A few important things to mention:

You\'re on a 7-day free trial, but I can help extend that if you\'re interested.

Your workspace has a ton of custom settings, just select your workspace settings to set it up.

You\’ve got more functionality to enable, like custom categories, tags, etc. Just ask me how.

Chat with me here in your #admins room or just reply to this message. You can also schedule a call if you have more in-depth questions. Talk soon!';

cc @Gonals since you were the last to update this line

The devil's in the details 😆 thanks for pointing that out

Not overdue, in process

Fixed

authors: kbecciv sonialiap


text:
[Performance] withOnyx initial state from cache

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!

Overview
We can resolve initial component state from cache instead of starting with empty and the receive a burst of updates
Related to https://github.com/Expensify/App/issues/4101
What performance issue do we need to solve?

inefficient React component rendering

What is the impact of this on end-users?

app boot time
chat switch time

List any benchmarks that show the severity of the issue

Start the web app and be on a chat
Open the dev console
Go to the Performance tab
Start capturing data
Switch to another chat
Wait a few seconds for loading to settle
Stop capturing data
Review the first long running task after renderApplication

See the `sendDataToConnection` calls that make the majority of the long running Task
We should see a reduction in the amount of time they take
Profile data (you can load this in Chrome/Performance):  https://u.pcloud.link/publink/show?code=XZCiqwXZco50EdMOjDXI1D8DhgzxGmPMTSV7
Proposed solution (if any)
Import the cache service in withOnyx
Use cache and mapOnyxToState to try and map initial state from cache
If we've mapped everything from cache we can set loading: false and render the wrapped component
Leave the existing logic that would call setState with values from storage

when the values are already in state a re-render won't be caused

List any benchmarks after implementing the changes to show impacts of the proposed solution (if any)
Note: These should be the same as the benchmarks collected before any changes.
Platform:
Where is this issue occurring?

Web
iOS
Android
Desktop App
Mobile Web

Version Number: 1.0.85-0
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
Expensify/Expensify Issue URL:
View all open jobs on Upwork

Triggered auto assignment to @TomatoToaster (Engineering), see https://stackoverflow.com/c/expensify/questions/4319 for more details.

cc @marcaaron

See the sendDataToConnection calls that make the majority of the long running Task We should see a reduction in the amount of time they take

Looks like the setState() call is blocking? Like things randomly hang up i.e. one call to setState() will maybe take 1ms but then another will take 100ms. Any ideas about why? I like the solution to minimize the calls, but also curious why this happens.
Regardless, I think we can try to pre-fill the state from the cache and then connect to anything that did not return a value.

Ah I just thought of something... I am not positive but I think some of them block more than others because the setState() includes the componentDidUpdate() and eventual rendering of the WrappedComponent e.g. check this call tree here:

First thought... I wonder if we can improve this (for any keys that are not cached) by simply setting loading: false from inside sendDataToConnection() instead of in componentDidUpdate() like this...
function sendDataToConnection(config, val, key) {
    if (config.withOnyxInstance) {
        const component = config.withOnyxInstance;
        component.setState((prevState) => {
            const requiredKeysForInit = _.chain(component.mapOnyxToState)
                .omit(c => c.initWithStoredValues === false)
                .keys()
                .value();

            const newState = {
                ...prevState,
                [config.statePropertyName]: val,
            };

            return {
                ...newState,
                // // All state keys should exist and at least have a value of null
                loading: !_.every(requiredKeysForInit, key => !_.isUndefined(newState[key])),
            };
        });
    } else if (_.isFunction(config.callback)) {
        config.callback(val, key);
    }
}

Second thought... if a call to sendDataToConnection() does include the render of the child component then it might be hard to say how much slower the setting state itself is compared to the rendering of the child component. Is the problem really that we are setting state or something about the way it's all being rendered?
Last thought... if it takes time to gather data needed to render a child component and we can only start the next process once a child component has rendered - then each child (if also wrapped in withOnyx) must wait for it's parent to complete. So, would it maybe be more efficient in some cases to load all the required keys in a parent level and then just pass them through instead of choking things up each time a new withOnyx() wrapped component appears in the tree?
I followed up on that last idea and did some quick changes where more keys were moved into context to replace some of the staggering withOnyx components. This front loading of the data seems like it led to less blocking time and seems to confirm the theory that wrapping everything in withOnyx() is not efficient.
Before removing some withOnyx() calls and replacing them with context providers

After

The difference isn't that great yet.. but I only moved a few things and 100ms dropped off the total time so seems like this is the right thread to pull on.

Hey I know some of the performance upgrade related work is its own project. Is this issue just for tracking? Or should I tag this as External so an upwork listing can be created?

It's a conversation for now. This should probably have a Planning label put on it until it's actionable and not an Engineering label.

Tested out my theory on an Android release build and startup time got worse 😄  I'm done for today...
Just confirms my feeling the web profiler can't always be trusted.

I wonder if we can improve this (for any keys that are not cached) by simply setting loading: false from inside sendDataToConnection() instead of in componentDidUpdate() like this...

Actually thanks to your input I don't think we should call setState at all
Do we really want to trigger a re-render (using setState) when loading will remain true? I don't think so
Here's a rough proposal

Onyx and particularly code that uses withOnyxInstance should not call setState directly on that instance
We should add a method like onOnyxUpdate on the withOnyxInstance - this method receives connection updates
We should drop component state in favor plain instance properties  (this is optional)
Instead of calling setState, sendDataToConnection calls onOnyxUpdate
onOnyxUpdate saves incoming data and compares it to local data, it only calls setState when all the mappings are resolved

In summary onOnyxUpdate would only trigger a re-render when loading becomes false, instead for each individual connection update
This can work purely without React state (force refreshes) or mix with local and React state - we collect local state until loading should become false at that point we call setState with everything we have for the mapping
This should allow us to drop some of the existing logic tries to manage this as well. Or restructure so that it doesn't bother React as much or at all

Last thought... if it takes time to gather data needed to render a child component and we can only start the next process once a child component has rendered - then each child (if also wrapped in withOnyx) must wait for it's parent to complete.

This is a valid point - a child can only mount when the parent is done loading, otherwise withOnyx would not render the WrappedComponent at all
This might be a problem for React as it can't compute the full App Tree - it can only see how the branch continues after loading: false and then if these are nested withOnyx components this would repeat a bunch
Thought it's likely the same thing would happen if the Children themselves don't render anything because they lack the data...
As to how to supply the data to the children instantly, yes one way would be to capture everything needed in the parent. Another would be to pre populate cache
The parent approach's PRO is it leads to less HOCs
While the hidrate approach's PRO is multi-getting everything in one go
Both can be applied together

This can work purely without React state (force refreshes) or mix with local and React state - we collect local state until loading should become false at that point we call setState with everything we have for the mapping

I like the former idea since it means we do not need to yet look into managing keyChanged() events which also setState(). Gonna open a PR with those changes so we can do some testing.

authors: MelvinBot TomatoToaster kidroca marcaaron


text:
[Search v1] Implement ApproveMoneyRequestOnSearch command

Implement this section of the doc for the Approve command only

No updates yet. I'll start working on it this week.

Bumping to keep Melvin at bay

Bumping to keep Melvin at bay

Another bump for Melv

Bumping for Melv.
@luacmartins, should we keep this at Daily?

@luacmartins are we still blocked on something?

Yes, Auth and Next steps being moved to Auth

Bumping to keep Melvin at bay 👍

On hold

Still on hold

Still on hold

Still on hold

Still on hold

Oooooh, it looks like we're off hold! 🙌

bump

Yes! Auth PR is under review.

We can close this issue. I'll handle hooking the command up in App as part of https://github.com/Expensify/App/issues/51898

authors: johncschuster lakchote luacmartins


text:
LHN- There is no LHN for sub task report with GBR

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!

Version Number: 9.0.50-0
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught on HybridApp, is this reproducible on New Expensify Standalone?: N/A
**If this was caught during regression testing, add the test name, ID and link from TestRail:**N/A
Email or phone of affected tester (no customers): testpayment935@gmail.com
Issue reported by: Applause - Internal Team
Action Performed:
Prerequisites: User A assigned sub task for user B

Navigate to https://www.staging.new.expensify.com/
Log in as user B
Navigate to the conversation with user A

Expected Result:
As their is an assigned sub task LHN should show subtask with GBR on conversation report
Actual Result:
There is no LHN for sub task report with GBR
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Standalone
[ ] Android: HybridApp
[x] Android: mWeb Chrome
[ ] iOS: Standalone
[ ] iOS: HybridApp
[ ] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos

Add any screenshot/video evidence

https://github.com/user-attachments/assets/921a22bd-be53-466d-87b1-a522455608f3
View all open jobs on GitHub

@twisterdotcom  FYI I haven't added the External label as I wasn't 100% sure about this issue. Please take a look and add the label if you agree it's a bug and can be handled by external contributors

This is expected as GBR is suppose to be shown in the chat report level instead of the task report level if the assignee can access to the chat report that the task belongs to. https://github.com/Expensify/App/pull/43927


text:
Android - Status bar changes color when the app is loading at launch

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!

Action Performed:

Force close the app
Reopen and check the status bar above

Expected Result:
Status bar should not change colors while the app is loading
Actual Result:
Status bar changes colors from grey to white while the app is loading
Workaround:
No need, visual issue.
Platform:

Where is this issue occurring?

Android

Version Number: 1.1.14-0
Reproducible in staging?: Yes
Reproducible in production?: Yes
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://user-images.githubusercontent.com/44479856/141528364-b9818a3d-6bd5-41dc-84b1-5e59c0b033a0.mp4
Expensify/Expensify Issue URL:
Issue reported by: Neyaz Ahmad
Slack conversation:
View all open jobs on GitHub
CC @mallenexpensify

Triggered auto assignment to @nkuoch (Engineering), see https://stackoverflow.com/c/expensify/questions/4319 for more details.

As requested by @isagoico

Proposal

Add new color value to android/app/src/main/res/values/colors.xml

<color name="white">#FAFAFA</color>

Add new styles to AppTheme in android/app/src/main/res/values/styles.xml

<item name="android:statusBarColor">@color/white</item>
<item name="android:windowLightStatusBar">true</item>

Remove StatusBar animation in here (the second parameter should be false)
https://github.com/Expensify/App/blob/6701446b6dd7d77049fd399dcf6a042e6d05cae1/src/components/CustomStatusBar/index.android.js#L10-L11

Result
https://user-images.githubusercontent.com/11542415/141608747-b4116825-a57f-4ee8-b794-b3ecd5d4739a.mp4

Triggered auto assignment to @trjExpensify (External), see https://stackoverflow.com/c/expensify/questions/8582 for more details.

@mallenexpensify you wanted to be tagged in this issue once created. Anything to add, or can I get this to Upwork?

@trjExpensify I've assigned myself as I'd like to review this one and test it on a few different Android versions. @kakajann's proposal looks good to me, so once this is on UpWork please hire @kakajann

@trjExpensify , please post to Upwork, thanks

Donezo! Upwork job is up here for you @kakajann: https://www.upwork.com/jobs/~01fd7b70aadc2f612c
@mdneyazahmad can you also apply, so I can pay you out the $250 for reporting the issue. 👍

Proposal

Add new color value to android/app/src/main/res/values/colors.xml

<color name="white">#FAFAFA</color>

Add new styles to AppTheme in android/app/src/main/res/values/styles.xml

<item name="android:statusBarColor">@color/white</item>
<item name="android:windowLightStatusBar">true</item>

Remove StatusBar animation in here (the second parameter should be false)
https://github.com/Expensify/App/blob/6701446b6dd7d77049fd399dcf6a042e6d05cae1/src/components/CustomStatusBar/index.android.js#L10-L11

Result
Screen_Recording_20211113-113125_New.Expensify.mp4

This solution removes the styling posibility in from react and next time you want to change the status bar theme/color you will have to fix this on android level which defeats the purpose of using react native. Also this will be a huge bottleneck if you ever decide to use darkmode or change the background color of the main body. I don't mean to be critical but I would not accept this solution as a bugfix. It will only open more problems further down the line.

@trjExpensify applied on upwork

This solution removes the styling posibility from react layer and next time you want to change the status bar theme/color you will have to fix this on android level which defeats the purpose of using react native. Hardcoding this on a lower layer is just a patch not a solution. Also this will be a huge bottleneck if you ever decide to use darkmode or change the background color of the main body. I don't mean to be critical but I would not accept this solution as a bugfix. It will only open more problems further down the line.

I don't think it removes any styling possibilities. As mentioned in the issue, the status bar color changes only when you launch the app and it is caused by https://github.com/zoontek/react-native-bootsplash.
So, you'll have to change this
<item name="android:statusBarColor">@color/white</item>
<item name="android:windowLightStatusBar">true</item>

whenever you change the splash screen.
And you can do anything you want to the status bar once the app is mounted. Here's the documentation: https://reactnative.dev/docs/next/statusbar#methods
And I really don't think the react-native is meant to be only Javascript code. You can customize the native codes as well.

@emonidi thanks for your comments, but in this case I think the native solution is fine. This status bar UI bug is a common issue in native Android dev, and fixing it here is the simplest solution IMO. We have a lot more control by setting Android styles/themes here, and not every case can be handled at the RN layer -- we often need to make changes to native code.

@emonidi thanks for your comments, but in this case I think the native solution is fine. This status bar UI bug is a common issue in native Android dev, and fixing it here is the simplest solution IMO. We have a lot more control by setting Android styles/themes here, and not every case can be handled at the RN layer -- we often need to make changes to native code.
After looking at it deeper I realized what the problem is and my criticism was out of place. @kakajann  you are right this in that case is possible the best solution.

@Julesssss PR is ready to review

Merged, awaiting payment.

Reminder)

Hi @kakajann, sorry but I now realize I set the payment date to 7 days after the merge, instead of deployment. Resetting the timer.

Actally, we have a bot for this now ❤

Reminding the Upwork again

Paid 👍

The solution for this issue has been :rocket: deployed to production :rocket: in version 1.1.17-7 and is now subject to a 7-day regression period :calendar:. Here is the list of pull requests that resolve this issue:

https://github.com/Expensify/App/pull/6387

If no regressions arise, payment will be issued on 2021-12-13. :confetti_ball:

authors: Julesssss MelvinBot botify emonidi isagoico kakajann mallenexpensify mdneyazahmad trjExpensify