Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop #28

Merged
merged 104 commits into from
Dec 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
bc20063
Add extra data to template
rcmenno Apr 17, 2023
c4455c4
Bump werkzeug from 2.2.2 to 2.2.3
dependabot[bot] Feb 16, 2023
d2554ae
Bump flask from 2.2.2 to 2.3.2
dependabot[bot] May 2, 2023
18f22d8
Create static.yml
elwinschmitz Nov 6, 2023
3acd0d0
fix: Comment didn't reflect reality
elwinschmitz Nov 6, 2023
c82efaf
Merge pull request #8 from rodekruis/feat-github-pages-for-prototype-…
rcmenno Nov 6, 2023
a420471
Merge branch 'main' into develop
rcmenno Nov 13, 2023
f56862d
ci: add Azure Static Web Apps workflow file
jmargutt Oct 7, 2024
68b35ca
Update pipelines so that feature branch also cause release and make s…
rcmenno Oct 7, 2024
5d49df8
#5 make sure app works offline by leveraging service workers (wip -> …
rcmenno Apr 28, 2023
5799a59
Make app work offline, work in progress
rcmenno May 17, 2024
d164f90
Remove unneeded imports
rcmenno May 17, 2024
31b1e3e
Improve readme
rcmenno May 29, 2024
cbb5db4
Make sure that after uploading of beneficiary data, the active distri…
rcmenno Jun 14, 2024
de859ab
Make sure active distributions can be stored and retrieved
rcmenno Jun 14, 2024
0d4659a
Make sure go back to main menu works when viewing beneficiary data
rcmenno Jun 14, 2024
dfbf64d
Make sure scanner entry also. works
rcmenno Jun 14, 2024
5f036db
Fix typo
rcmenno Jun 21, 2024
1c1512a
wip check who's missing
rcmenno Jun 21, 2024
4fe3111
Add empty state for empty distributions
rcmenno Aug 2, 2024
1ec3322
Make sure distributions can be created upon no distribution found
rcmenno Aug 2, 2024
209773e
Make sure check who's missing has an empty state
rcmenno Aug 2, 2024
4fe84f0
Make sure only future dates can be selected
rcmenno Aug 2, 2024
5c5a7dd
Make sure back to main menu button works from entry not found
rcmenno Aug 2, 2024
f045164
Wip
rcmenno Aug 11, 2024
d55d3bc
Wip before adding received when
rcmenno Aug 15, 2024
1ae5dde
Make sure manual entries work
rcmenno Aug 15, 2024
87f633a
Make sure data can be downloaded as excel sheet.
rcmenno Aug 15, 2024
7a8f876
Maker sure input method is remembered
rcmenno Sep 2, 2024
0e97f81
Make sure beneficiary codes are always stored as string
rcmenno Sep 2, 2024
3532b01
Make sure correct background color is shown when beneficiary isn't el…
rcmenno Sep 2, 2024
2790c59
Make sure activeDistribution container is at the expected place
rcmenno Sep 2, 2024
7c5d434
Make sure continue button and home button work
rcmenno Sep 2, 2024
2ebc0ec
Make sure the number of served benificiaries are shown
rcmenno Sep 2, 2024
ca60e30
Make sure Beneficiary is spelled correct wip
rcmenno Sep 2, 2024
1592452
Make it more clear which file is cached and wether or not is has succ…
rcmenno Sep 8, 2024
23dba49
Clean up public folder
rcmenno Sep 8, 2024
8286847
Rename incorrect spelling of beneficiary
rcmenno Sep 19, 2024
f528895
Make sure ChechWhosMissingPagehandler file has correct casing
rcmenno Sep 19, 2024
efe4ce6
Revert "Make it more clear which file is cached and wether or not is …
rcmenno Sep 19, 2024
25310ea
Add missing images to cache
rcmenno Oct 3, 2024
ff73106
Improve error logging
rcmenno Oct 7, 2024
db29ae8
turn script into module
rcmenno Oct 7, 2024
6bd833c
Fix 404 on surge
rcmenno Oct 7, 2024
9733f21
Temporarily link to other page instead of index
rcmenno Oct 7, 2024
21aa89d
Revert "Temporarily link to other page instead of index"
rcmenno Oct 7, 2024
42a95b4
Try to force load index from cache
rcmenno Oct 7, 2024
d616fc2
Update dependencies
rcmenno Oct 14, 2024
db859ee
Deploy 0.1.9
rcmenno Oct 14, 2024
8e6a7be
Leverage template for list distribution and bump to 0.1.10
rcmenno Oct 14, 2024
ba9e87d
fix mistake and bump to 0.1.11
rcmenno Oct 14, 2024
ade1da4
Make sure no benificaries message isn't shown when they have just bee…
rcmenno Oct 14, 2024
411c932
Leverage more templates bump 0.3.0
rcmenno Oct 14, 2024
c776062
Remove unused code bump to 0.4.0
rcmenno Oct 14, 2024
4b725ca
Make sure upload data page is shown when needed. Bump to 0.5.0
rcmenno Oct 14, 2024
7e8281b
Make sure template can be downloaded bump 0.5.1
rcmenno Oct 14, 2024
b8a7aa3
Stop serving template file
rcmenno Oct 14, 2024
99fae04
Make sure template is generated instead of stored
rcmenno Oct 14, 2024
08035e9
Make sure spreadsheethandler is part of known fetch event handlers bu…
rcmenno Oct 14, 2024
a3f7da6
make sure template has correct name and make it clear custom columns …
rcmenno Oct 14, 2024
4ca8768
Improve readme
rcmenno Oct 21, 2024
7fece92
Improve homepagehandler
rcmenno Oct 21, 2024
a7d309a
Make sure button isn't a form bump 0.6.0
rcmenno Oct 21, 2024
69f0f26
Remove unneeded pipeline
rcmenno Oct 21, 2024
06fe861
Make sure buttons aren't a form bump 0.6.1
rcmenno Oct 21, 2024
42a22cc
Make sure index.html is always attempted to be retrieved from cache b…
rcmenno Oct 21, 2024
8fa83fa
Make sure distribution deletion page has an empty state bump 7.0.0
rcmenno Oct 21, 2024
4be1904
Make sure there's a confirmation message before deleting a distribution
rcmenno Oct 21, 2024
ca94d62
Use correct post handler for deletion confirmation
rcmenno Oct 21, 2024
37a0eab
Make sure No properly results to home
rcmenno Oct 21, 2024
20360d4
Make sure distribution can be deleted upon confirmation
rcmenno Oct 21, 2024
109a13e
Perform database updates using cursor bump 0.8.0
rcmenno Oct 25, 2024
52cf43a
Make sure same distribution can't be added twice bump 0.9.0
rcmenno Oct 25, 2024
5cc2ab7
Make sure home is the last viewed distribution
rcmenno Oct 25, 2024
8106291
Make sure distributions routes to the distributions page bump
rcmenno Oct 25, 2024
525184f
Update readme
rcmenno Oct 25, 2024
ac46d38
Make sure only two tables are needed, and beneficiary codes only have…
rcmenno Oct 28, 2024
59b3b2a
Prevent duplicate codes bump 0.12.0
rcmenno Oct 28, 2024
80c0d99
Start shipping documentation bump 0.15.1
rcmenno Oct 28, 2024
71e27c4
Improve documentation handler 0.15.2
rcmenno Nov 4, 2024
096f241
Fix typo in filename bump 0.15.3
rcmenno Nov 4, 2024
f6c6dc9
prevent 404 because of mismatch in filename bump 0.15.4
rcmenno Nov 4, 2024
b3021a9
Improve documentation bump 0.15.5
rcmenno Nov 4, 2024
f6f819b
Fix camera select bump 0.16.0
rcmenno Nov 4, 2024
f058d32
Improve documentation
rcmenno Nov 4, 2024
911c0f6
Make sure distribution data can only be added once per distribution
rcmenno Nov 11, 2024
e99962d
Make sure everything is cached using same service bump 0.18.0
rcmenno Nov 11, 2024
9ea4aee
Fix typo
rcmenno Nov 11, 2024
a14369c
Make sure beneficiaries that belong to a deleted distribution are als…
rcmenno Nov 11, 2024
cbdd3a1
Make sure buttons fit on mobile device screen bump 0.20.0
rcmenno Nov 11, 2024
99179ad
Improve documenation and fix typo bump bump 0.21.0
rcmenno Nov 11, 2024
387d724
Merge branch 'main' into develop
rcmenno Nov 18, 2024
2a76e02
bump 0.22.0
rcmenno Nov 18, 2024
37327d9
#21 prepare for trunk based development bump 0.23.0
rcmenno Nov 18, 2024
e435546
Merge branch 'main' into develop
rcmenno Nov 25, 2024
1ba69cf
#24 revert non working attempts at getting download dialog to work on…
rcmenno Dec 2, 2024
0d625e4
#25 make sure commits from feature branches are deployed
rcmenno Dec 2, 2024
4d69d39
Simplify codes in template
rcmenno Dec 2, 2024
f917607
Bump 0.24.3
rcmenno Dec 2, 2024
1867eaa
#26 make sure simplified template code is actually compiled bump 0.24.3
rcmenno Dec 2, 2024
c39cd84
#26 Add test results for testing on iPhone 15 and Alcatel 1B
rcmenno Dec 9, 2024
3924e19
Update dependencies bump
rcmenno Dec 9, 2024
b7debda
Merge branch 'main' into develop
rcmenno Dec 15, 2024
22622bd
#26 verify that install issue is indeed minor
rcmenno Dec 15, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
49 changes: 49 additions & 0 deletions .github/workflows/azure-static-web-apps-black-stone-02fb10f03.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Azure Static Web Apps CI/CD

on:
push:
branches:
- main
- develop
- feature/*
pull_request:
types: [opened, synchronize, reopened, closed]
branches:
- main
- develop

jobs:
build_and_deploy_job:
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
runs-on: ubuntu-latest
name: Build and Deploy Job
steps:
- uses: actions/checkout@v3
with:
submodules: true
lfs: false
- name: Build And Deploy
id: builddeploy
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_BLACK_STONE_02FB10F03 }}
repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments)
action: "upload"
###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
# For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
app_location: "./PWA/public/" # App source code path
api_location: "" # Api source code path - optional
output_location: "." # Built app content directory - optional
###### End of Repository/Build Configurations ######

close_pull_request_job:
if: github.event_name == 'pull_request' && github.event.action == 'closed'
runs-on: ubuntu-latest
name: Close Pull Request Job
steps:
- name: Close Pull Request
id: closepullrequest
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_BLACK_STONE_02FB10F03 }}
action: "close"
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ __pycache__/
*.xlsx
*.csv
*.pdf
*.json

# C extensions
*.so
Expand Down
File renamed without changes.
53 changes: 53 additions & 0 deletions POC/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# ReliefBox

A simple web app for relief.
https://relief-system-webapp.azurewebsites.net/

## Description

Synopsis: a [flask python app](https://flask.palletsprojects.com/en/2.0.x/).

Workflow: upload data of beneficiaries, start distribution, check if beneficiaries are eligible, download report.

## Setup

### on Azure
1. [Deploy the web app to Azure App Service](https://learn.microsoft.com/en-us/azure/app-service/quickstart-python)
3. Add necessary keys as environmental variables. From Azure Portal, App Service > Configuration > New application setting
```
SQL_USERNAME=...
SQL_PASSWORD=...
COSMOS_KEY=...
MODE=online
```

### build as standalone app
```
pyinstaller --onefile --add-data 'templates;templates' --add-data 'static;static' --add-data 'data;data' --add-data './*.py;.' app.py
```

### on Raspberry Pi 4
1. [Create wireless access point](https://raspberrypi-guide.github.io/networking/create-wireless-access-point#start-up-the-wireless-access-point)
2. Clone this repository
```
$ git clone https://github.com/rodekruis/relief-app.git
$ cd relief-app
```
3. Set offline mode in .env
```
$ echo -n "MODE=offline" > .env
```
4. Install app dependencies and run it
```
$ sudo apt-get update
$ sudo apt-get install libatlas-base-dev libcblas-dev g++ unixodbc-dev
$ pip install -r requirements.txt
$ python app.py
```
Debug connection issues (to be improved):
```
$ sudo systemctl stop hostapd
$ sudo systemctl unmask hostapd
$ sudo systemctl enable hostapd
$ sudo systemctl start hostapd
```
File renamed without changes.
File renamed without changes.
Binary file added POC/data/data_template.xlsx
Binary file not shown.
File renamed without changes.
File renamed without changes
File renamed without changes.
File renamed without changes
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<label hidden>Result:</label>
<pre hidden><code id="result"></code></pre>

<script type="text/javascript" src="https://unpkg.com/@zxing/library@latest/umd/index.min.js"></script>
<script type="text/javascript" src=/ExternalLibraries/zxing.js"></script>
<script type="text/javascript">
window.addEventListener('load', function () {
let selectedDeviceId;
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
4 changes: 4 additions & 0 deletions PWA/.babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"presets": ["@babel/preset-env", "@babel/preset-typescript"],
"plugins": []
}
2 changes: 2 additions & 0 deletions PWA/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.idea
node_modules
254 changes: 254 additions & 0 deletions PWA/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
# Reliefbox Progressive web app
Offline version of reliefbox, built using typescript and relying heavily on service workers and IDB database. Upon installation the app works 100% offline, from this point on no backend calls are done anymore.

### During development

Make sure all terninal tabs are in the PWA directory, then run:
`npm start` to launch the local server
`tsc --watch` to make sure typescript files get compiled as you code
`npm run test -- --watch` to make sure run as you code

* All new files need to be added to `CachePathFileService`
* All new `FetchEventHandler` classes need to be added to `FetchEventHandlers`

#### Versioning
The apps version is stored in package.json and index.html current way to update this is by simply find replacing the previous version with the new one, making sure only the two files above are effected.

### Architercture / dataflow

1. HTTP requests are handled by serviceworker
2. Service worker dispatches request to `FetchEventHandlers`
3. `FetchEventHandlers` chooses which `FetchEventHander` should handle the request
4. `FetchEventHandler` handles the request and serves a new page using `ResponseTools` and using a service if there's been a need for shared or separated logic.
5. `ResponseTools` leverages the mustache templating system to render pages with the least amount of redundancy

#### Special note about templating
All pages exept index.html are rendered using template.html. The reason this isn't done for index.html is that the templating system is part of what's handled by the serviceworker, which isn't used yet when loading this first page. Because of this, there's some overlap between index.html and template.html

### IDB Database schema

* Beneficiary
* Contains all the info of a beneficary
* As provided by user from spreadsheet
* Contains the info regarding the receival of goods
* Containtains the info to which distribution the beneficiary belongs
* Distribution
* Contains all the info of a distribution

### Third party code used
* [SheetJS](https://sheetjs.com) (PWA/public/ExternalLibraries/xlsx.full.min.js)
* For handling spreadsheat files
* [Mustache](https://github.com/janl/mustache.js/) (PWA/public/ExternalLibraries/mustache.js)
* For html templating
* [Zxing](https://github.com/zxing-js/library) (PWA/public/ExternalLibraries/zxing.js)
* For barcode scanning
* [Bulma.io](https://bulma.io) (PWA/public/ExternalLibraries/bulma.css)
* For page styling styling

### Deployment
* Compiled code is found in public folder
* As configured in PWA/tsconfig.json
* Github actions is used for deployment of that folder
* on push as configured in .github/workflows/azure-static-web-apps-black-stone-02fb10f03.yml
* app will be deployed to reliefbox.510.global


### Test scripts

Codes in template:
1 Aric Norwood
2 Lira Calloway
3 Daven Morrell

Test devices
* iPhone 15
* iOS 18.1.1
* Alcatel 1B
* Android (Alcatel UI) v9L3D(11-14)
* Huawei P30 (Serverstack)
* Android

Test result legend
✅ Working as intended on tested device
🟠 Not working as intended, with workaround / non blocking
⛔️ Not working on tested device, no workaround

Installing
* App can be installed and launched from homescreen
✅ iPhone 15 (0.24.4)
✅ Huawei P30 (0.26.0)
🟠 Alcatel 1B (0.24.4)
Add to homepage stopped working on this device. It says open reliefbox instead.
Currently best known workaround: launching the app from the app launcher. Since this doesn't seem to happen on other
android devices, it may be device specific thing, where PWA data isn't removed properly.

Features & verifications:
* Creating a distribution
* Verify that:
* Distribution with same name can't be added twice
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Distribution can't have date in the past
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* All needed fields need to be entered (Donor and items distributied are optional)
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Listing a distribution
* Verify that:
* Distribution name is shown
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Distribution data is shown (location and date)
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* When no beneficary data is added yet:
* No beneficiary data found message is shown
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* When beneficiary data is added
* It shows the amount of served beneficaries
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Beneficiary data can be addded
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Distribution can be started / resumed
✅ iPhone 15 (0.24.4)
* Missing beneficiaries can be checked
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
Results in site can't be reached page
* Beneficiary can be downloaded
🟠 iPhone 15 (0.24.4)
Dialog can't be dismissed [#24](https://github.com/rodekruis/reliefbox/issues/24)
✅ Alcatel 1B (0.24.4)
* Adding beneficary data to a distribution
* Verify that:
* When adding a non supported file, a spreadsheat without a "code" column or a spreadsheat with duplicate codes
* "Data" in wrong format screen is displayed
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Data template can be downloaded
🟠 iPhone 15 (0.24.4)
Dialog can't be dismissed [#24](https://github.com/rodekruis/reliefbox/issues/24)
🟠 Alcatel 1B (0.24.4)
Very minor: when template has been downloaded before, lives in downloads and name isn't changed, app navigates straight to distribution
workaround: leveraging the already downloaded template.
* "Go back to main menu" button works
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* When adding a supported spreadsheet
* It navigates to distribution page
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Viewing beneficiary data
* Verify that:
When beneficiary data has been added
* All rows and columns from uploaded spreadsheet are displayed
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Go back to main menu button results in navigation to distribution
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
When no beneficiary data has been added
* "No beneficiary data found!" message is shown
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Go back to main menu button results in navigation to distribution
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Starting / resuming a distribution
* Verify that:
* Tapping "Using camera" button results in scanning input screen
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Tapping "By typing" button results in text input screen
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Checking code using camera
* Verify that
* Camera can be selected when there's multiple options available
✅ iPhone 15 (0.24.4)
(on iPhone there's only one option)
✅ Alcatel 1B (0.24.4)
(seemed to have only one option)
* Pointing at a code results in navigating to code verification result page
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Checking code by typing
* Verify that:
* Code can be submitted
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Viewing code verification result page
* Verify that
* When code doesn't exist, it mentions that beneficary is not found
* Continue distribution works
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Go back to main menu works
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* When code is known and isn't scanned before
* Beneficiary data is reveiled using green box
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Can be marked as recipient
* Results in code input using last used input method
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Can be ignored by pressing continue distribution
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Can be ignored by pressing go back to main menu
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* When code is already submitted
* Beneficiary data is reveiled using red box
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Checking missing beneficiaries
* Verify that:
* When there's still beneficiaries left
* Only the non served beneficiaries are shown
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* When all beneficiaries have been served
* No beneficiaries found message is shown
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Downloading beneficiary data
* Verify that:
* This results in a spreadsheet with all rows and columns from uploaded spreadsheet, but with two added columns that describe if and when the beneficiary has been marked as a recepient.
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Changing distribution
* Verify that
* They can be changed to
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* Deleting a distribution
* Verify that:
* When there's no distributions
* "No distributions found!" is shown
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* "Create new distribution" button works
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)
* When there are distributions
* Distributions are listed and can be deleted upon confirmation and deletion can be canceled upon canceling
✅ iPhone 15 (0.24.4)
✅ Alcatel 1B (0.24.4)

For extra endurance testing:
* Make sure all of the above works with multiple distributions
* Make sure all of the above works with both different and the same distribution lists

Useful tool when testing
[Online barcode generator](https://barcode.tec-it.com/en)

#### Regression observations
🟠 Huawei P30 (0.24.2), Alcatel 1B (0.24.4)
In some cases an action may result in "This site can't be reached" message. Restarting the app or going back and performing the action again, seems to resolve this. May be more stable on newer devices (currently unclear).
Loading
Loading