211 Commits

Author SHA1 Message Date
47f06688e0 Update sge-backend/pom.xml 2025-12-17 19:35:00 +03:00
a0ec570147 Update sge-backend/pom.xml 2025-12-17 18:34:38 +03:00
7696d0f133 Update docker-compose.yml 2025-12-17 18:33:36 +03:00
e67dcea72e merge upstream 2025-12-17 18:22:57 +03:00
7a948f3b7e harbor+ 2025-12-17 18:17:53 +03:00
49ce97d394 Update sge-frontend/package.json 2025-12-14 22:01:39 +03:00
a7ba6fe3e4 Merge pull request 'test' (#13) from test into main
Reviewed-on: Abdulbari/sgeUpdated#13
2025-10-30 20:23:54 +03:00
7976d56552 Update sge-backend/src/main/java/com/sgs/SgsApplication.java 2025-10-30 20:23:13 +03:00
e3536ea6a3 Update sge-backend/pom.xml 2025-10-30 20:20:53 +03:00
66aeed7fda Merge pull request 'Update sge-frontend/package.json' (#12) from test into main
Reviewed-on: Abdulbari/sgeUpdated#12
2025-10-30 20:12:13 +03:00
fcc5edcbe2 Update sge-frontend/package.json 2025-10-30 20:11:53 +03:00
8f41ce3d51 Merge pull request 'Test branch' (#11) from test into main
Reviewed-on: Abdulbari/sgeUpdated#11
2025-10-30 20:11:09 +03:00
abdelbari
4ea1cfa9b4 Test branch 2025-10-30 17:08:40 +00:00
68835f5919 Update sge-frontend/package.json 2025-10-30 19:46:20 +03:00
ee29ecd766 Update .gitea/workflows/sgeupdated.yml 2025-10-30 19:35:34 +03:00
f4dd4a9dce Merge pull request 'Update sge-frontend/package.json' (#4) from test into main
Reviewed-on: Abdulbari/sgeUpdated#4
2025-10-30 19:31:36 +03:00
853230e742 Update sge-frontend/package.json 2025-10-30 19:30:40 +03:00
0a4462923e Update .gitea/workflows/sgeupdated.yml 2025-10-30 19:29:17 +03:00
7f56158c02 Merge pull request 'Test branch' (#3) from test into main
Reviewed-on: Abdulbari/sgeUpdated#3
2025-10-30 19:23:16 +03:00
1174707918 Update sge-frontend/src/views/DataSet/EmissionSource.js 2025-10-30 19:21:22 +03:00
93cad886d6 Update .gitea/workflows/sgeupdated.yml 2025-10-30 19:20:19 +03:00
a15f249016 Test branch 2025-10-30 16:05:38 +00:00
5c1f255c3f Merge pull request 'Update sge-backend/pom.xml' (#2) from omar/sgeUpdated:main into main
Reviewed-on: Abdulbari/sgeUpdated#2
2025-10-30 18:56:54 +03:00
453d35702c Update .gitea/workflows/sgeupdated.yml 2025-10-30 18:55:20 +03:00
cf08be1ddc Update sge-backend/pom.xml
All checks were successful
sgeUpdated CI/CD / deploy (push) Successful in 7s
2025-10-30 18:54:48 +03:00
4a9b65cc30 Update .gitea/workflows/sgeupdated.yml 2025-10-30 18:46:25 +03:00
472a5daf09 Update sge-frontend/src/views/Communication.js 2025-10-28 19:00:41 +03:00
dcdc1bf43a Update sge-frontend/src/views/Areas/Areas.js 2025-10-28 18:59:54 +03:00
c9b5ebf80e Update sge-backend/pom.xml 2025-10-28 18:56:54 +03:00
caa0549983 Update sge-frontend/package.json 2025-10-28 18:46:42 +03:00
4400572a45 Update sge-frontend/package.json 2025-10-28 18:41:04 +03:00
04ee05a96b Update sge-frontend/package.json 2025-10-28 18:20:22 +03:00
7580bf7cdb Update sge-frontend/README.md 2025-10-28 18:06:28 +03:00
0d017c0a4b Update sge-frontend/package.json 2025-10-28 18:02:59 +03:00
1eeb91c91c Update sge-backend/README.md 2025-10-28 18:02:18 +03:00
cd18444b08 Update sge-backend/pom.xml 2025-10-28 18:01:05 +03:00
1354d01878 Update sge-frontend/README.md 2025-10-28 17:14:39 +03:00
9856c1f9aa Update sge-frontend/package.json 2025-10-28 17:03:05 +03:00
b1ea7bf736 Update sge-frontend/README.md 2025-10-28 16:42:50 +03:00
8b82b44591 Update sge-backend/pom.xml 2025-10-28 16:41:26 +03:00
5c534314df Update sge-backend/README.md 2025-10-28 16:40:53 +03:00
dde5fece3b Update sge-backend/README.md 2025-10-28 16:31:43 +03:00
f3b893f05c Update sge-backend/README.md 2025-10-28 16:19:26 +03:00
08e8badae2 Update sge-backend/README.md 2025-10-28 16:02:04 +03:00
dd1083db82 Update .gitea/workflows/sgeupdated.yml 2025-10-28 15:33:14 +03:00
fad8037371 Update sgeupdated pipeline v25+ 2025-10-28 15:04:50 +03:00
61faf1bf46 Update sge-backend/README.md 2025-10-27 18:39:50 +03:00
230c4bcb6e Update sge-backend/README.md 2025-10-27 17:53:46 +03:00
cbe2660080 Update sgeupdated pipeline v25
New script to call the deploy.sh file in the server
2025-10-27 17:29:31 +03:00
cf38f431a8 Update sge-frontend/src/views/Communication.js 2025-10-25 23:53:46 +03:00
f585763563 Update .gitea/workflows/sgeupdated.yml 2025-10-25 23:52:38 +03:00
7bee15a901 Update sge-frontend/README.md 2025-10-24 18:04:13 +03:00
1ae3d76781 Update sgeupdated pipeline v22-+ 2025-10-24 18:03:14 +03:00
53d5bf2e77 Update sge-frontend/README.md 2025-10-24 17:57:15 +03:00
60e50dc9e8 Update .gitea/workflows/sgeupdated.yml 2025-10-24 17:50:36 +03:00
aaf116ca71 Update .gitea/workflows/sgeupdated.yml 2025-10-24 17:47:44 +03:00
061c0cb376 Update sgeupdated pipeline v22- 2025-10-24 17:46:55 +03:00
bd155fadb2 Update sge-backend/README.md 2025-10-24 17:32:23 +03:00
11541714f5 Update sge-frontend/README.md 2025-10-24 17:07:27 +03:00
91559134cd Update sge-backend/README.md 2025-10-24 17:03:16 +03:00
d26ca12e0c Update sgeupdated pipeline v22- 2025-10-24 15:35:57 +03:00
18c8c49a3d Update sge-frontend/README.md 2025-10-24 15:28:43 +03:00
97253a54eb Update sge-backend/README.md 2025-10-24 15:26:53 +03:00
f411f44006 Update sgeupdated pipeline v22 2025-10-24 15:21:53 +03:00
f4f4fb976b Update sgeupdated pipeline v22+ 2025-10-24 15:19:57 +03:00
385eda2132 Update sgeupdated pipeline v22 2025-10-24 15:13:23 +03:00
23a3d8252e Update sge-backend/pom.xml 2025-10-24 15:11:40 +03:00
eeda227698 Update sgeupdated pipeline v24 2025-10-24 15:09:18 +03:00
871bcf9651 Update sgeupdated pipeline v23++++ 2025-10-23 13:04:06 +03:00
614cbe8b04 Update sgeupdated pipeline v23+++ 2025-10-23 13:01:17 +03:00
ce19adb1a0 Update sgeupdated pipeline v23++ 2025-10-23 12:56:52 +03:00
5471db463f Update sgeupdated pipeline v23+ 2025-10-23 12:47:17 +03:00
845417ee49 Update sgeupdated pipeline v23 2025-10-23 12:41:49 +03:00
1c12ac1e16 Update sge-frontend/package.json 2025-10-23 12:08:16 +03:00
eb2ec01d28 Update sgeupdated pipeline v22
new script for gitea
2025-10-23 12:06:40 +03:00
4d40015fd1 Update sge-frontend/package.json 2025-10-22 19:24:33 +03:00
c55f5ce7d1 Update sge-frontend/package.json 2025-10-22 19:17:57 +03:00
07a8973b92 Update for pipeline testing Back-end + 2025-10-22 19:07:18 +03:00
54b47eee05 Update .gitea/workflows/sgeupdated.yml 2025-10-22 18:46:53 +03:00
3f0550f9f2 Update .gitea/workflows/sgeupdated.yml 2025-10-22 18:45:08 +03:00
6499c9471e Update .gitea/workflows/sgeupdated.yml 2025-10-22 18:42:07 +03:00
71e507c21b Update .gitea/workflows/sgeupdated.yml 2025-10-22 18:39:28 +03:00
737fd6da53 Update .gitea/workflows/sgeupdated.yml 2025-10-22 18:34:24 +03:00
490f3b539e Update .gitea/workflows/sgeupdated.yml 2025-10-22 18:32:24 +03:00
9c0c4c4828 Update .gitea/workflows/sgeupdated.yml 2025-10-22 18:29:51 +03:00
b28a73b4ff Update .gitea/workflows/sgeupdated.yml 2025-10-22 18:27:20 +03:00
f087b6eb88 Update .gitea/workflows/sgeupdated.yml 2025-10-22 18:23:55 +03:00
d07932cc1e Update .gitea/workflows/sgeupdated.yml 2025-10-22 18:21:17 +03:00
76d37d6038 Update .gitea/workflows/sgeupdated.yml 2025-10-22 18:11:36 +03:00
50abcab358 Update sgeupdated pipeline v21++++++++
Commented the backend section
2025-10-22 17:55:10 +03:00
445f9256a1 Update sgeupdated pipeline v21+++++++
Commented the backend section
2025-10-22 17:53:16 +03:00
4d1a82fe92 Update for pipeline testing Front-end v099 2025-10-22 17:12:00 +03:00
6d6e935b52 Update sgeupdated pipeline v21++++++
commenting the frontend dependencies installation
2025-10-22 17:10:24 +03:00
a51a81ce7c Update sgeupdated pipeline v21+++++
Paused the concurrency check temporally
2025-10-22 16:05:33 +03:00
3b6000bc40 Update sgeupdated pipeline v21++++ 2025-10-22 15:52:38 +03:00
78ed73acc6 Update .gitea/workflows/sgeupdated.yml 2025-10-22 15:47:39 +03:00
7f8a7b1bf8 Update sgeupdated pipeline v21++++ 2025-10-22 15:39:57 +03:00
8c6e37ad72 Update sgeupdated pipeline v21+++ 2025-10-22 15:38:04 +03:00
85151e536d Update sgeupdated pipeline v21++ 2025-10-22 15:08:02 +03:00
573db7fee9 Update sgeupdated pipeline v21+ 2025-10-22 14:49:07 +03:00
a11f9614ed Update sgeupdated pipeline v21
new condition to be added
2025-10-22 14:29:27 +03:00
02bd570573 Update sge-backend/pom.xml 2025-10-21 16:12:15 +03:00
5da26152a9 update to sgeupdated pipeline v20++++++ 2025-09-05 23:07:35 +03:00
4f4c2e2ce5 Update .gitea/workflows/sgeupdated.yml 2025-09-05 23:01:04 +03:00
79ddbf2207 Update docker-compose.yml 2025-09-05 22:59:28 +03:00
23d9e65a7f update to sgeupdated pipeline v20+++++ 2025-09-05 22:55:07 +03:00
c8f9abe5e9 update to sgeupdated pipeline v20+++++
changing in npm installation
2025-09-05 22:49:34 +03:00
fa96969bc7 update to sgeupdated pipeline v20++++ 2025-09-05 22:37:40 +03:00
dc67f75027 Update sge-frontend/nginx.conf 2025-09-05 22:01:33 +03:00
e22c880673 Update sge-backend/Dockerfile 2025-09-05 21:57:44 +03:00
b37ed8797b update to sgeupdated pipeline v20+++ 2025-09-01 05:14:58 +03:00
04ed88e45e Update for pipeline testing Back-end 2025-09-01 05:11:10 +03:00
5f8de8105b update to sgeupdated pipeline v21 2025-09-01 05:09:20 +03:00
8fb923a4db Update for pipeline testing Back-end 2025-09-01 05:01:57 +03:00
a088889a67 update to sgeupdated pipeline v20+++ 2025-09-01 04:50:38 +03:00
b3de688265 update to sgeupdated pipeline v20++ 2025-09-01 04:41:12 +03:00
080924f788 update to sgeupdated pipeline v20+ 2025-09-01 03:57:59 +03:00
e43199f086 Update sge-frontend/nginx.conf 2025-09-01 03:52:57 +03:00
49e2020455 update to sgeupdated pipeline v20 2025-09-01 03:33:42 +03:00
876227286c Update for pipeline testing Front-end v00 2025-09-01 03:28:59 +03:00
af518cef20 Update for pipeline testing Back-end 2025-09-01 03:27:48 +03:00
2e5bf41ed9 update to sgeupdated pipeline v19
changes the concept of rebuilding
2025-09-01 03:26:26 +03:00
f61199cedb Update for pipeline testing Front-end 2025-09-01 03:06:55 +03:00
5001a44406 Update for pipeline testing 2025-09-01 03:03:47 +03:00
87487510ce update to sgeupdated pipeline v18
added some feature to avoid failing when nothing is changed
2025-09-01 03:02:23 +03:00
547ade53ae update to sgeupdated pipeline v17 2025-09-01 02:57:34 +03:00
95afe7b877 Back to sgeupdated pipeline v16 2025-09-01 02:46:07 +03:00
ae0e112572 Delete smoke file 2025-09-01 02:41:02 +03:00
b35eac74a1 Update sgeupdated pipeline v17
a clone of the aypos yml file to test it
2025-09-01 02:40:20 +03:00
20aabd605c Update for pipeline testing Front-end 2025-08-30 21:12:44 +03:00
517d4d499b Update for pipeline testing 2025-08-30 21:12:22 +03:00
1aa745ebf5 Update sgeupdated pipeline v16 2025-08-30 21:11:03 +03:00
88a312d37c Update sgeupdated pipeline v15
forgot to add the dependencies installation
2025-08-30 21:04:54 +03:00
b1019b21cf Update for pipeline testing Front-end 2025-08-30 21:02:37 +03:00
57c28e4a90 Update for pipeline testing 2025-08-30 21:02:19 +03:00
b1cf711420 Update sgeupdated pipeline v14
multiple changes applied to make the workflows works over ssh
2025-08-30 20:58:45 +03:00
1d6b026710 Update for pipeline testing 2025-08-30 20:21:33 +03:00
02e4993c2c Update for pipeline testing Front-end 2025-08-30 20:20:37 +03:00
be71b59a3e Update for pipeline testing Front-end 2025-08-30 20:11:43 +03:00
7e5761993b Update for pipeline testing Front-end 2025-08-30 04:20:34 +03:00
66bd7b5a68 Update for pipeline testing 2025-08-30 04:20:16 +03:00
206d8a2bbf Update sgeupdated pipeline v13 2025-08-30 04:14:36 +03:00
6fbca1c29a Update for pipeline testing Front-end 2025-08-30 03:41:56 +03:00
1f6b06260c Update for pipeline testing 2025-08-30 03:38:28 +03:00
b00a8e1bf1 Update Front-End after pipeline v10 2025-08-30 03:11:38 +03:00
0f01ddefe9 Update Back-End after pipeline v12 2025-08-30 03:11:13 +03:00
2116b0f28a Update Front-End after pipeline v9 2025-08-30 03:02:45 +03:00
5161286279 Update Back-End after pipeline v11 2025-08-30 03:02:19 +03:00
29963d5388 Update sgeupdated pipeline v12 2025-08-30 03:00:47 +03:00
990b98c171 Update sgeupdated pipeline v12 2025-08-30 02:58:54 +03:00
f2d5182215 Update sgeupdated pipeline v12 2025-08-30 02:57:42 +03:00
e9a361489e Update sgeupdated pipeline v12
a new update that fixed the docker files problem, it deletes the old ones then builds the new accordingly
2025-08-30 02:56:08 +03:00
37873ad091 Update Dockerfile 2025-08-30 01:58:28 +03:00
cac67b815c Update Front-End after pipeline v8 2025-08-30 01:38:03 +03:00
28fc21e9f2 Update Back-End after pipeline v10 2025-08-30 01:37:40 +03:00
98a2515735 Update sgeupdated pipeline v11 2025-08-30 01:36:21 +03:00
4503d7c319 Update sgeupdated pipeline v11 2025-08-30 01:33:48 +03:00
e2a1b6f940 Update sgeupdated pipeline v11 2025-08-30 01:33:02 +03:00
d25a7975c7 Update sgeupdated pipeline v11 2025-08-30 01:29:50 +03:00
926c6b0b66 Update sgeupdated pipeline v11 2025-08-30 01:28:12 +03:00
986bec559b Update Front-End after pipeline v7 2025-08-30 01:14:28 +03:00
77d5c94cf7 Update Back-End after pipeline v9 2025-08-30 01:14:02 +03:00
75c2f7ff19 Update sgeupdated pipeline v10
new code updated changes in fornt-end and back-end structure
2025-08-30 01:09:38 +03:00
55577469de Update Front-End after pipeline v6 2025-08-30 01:02:15 +03:00
f50803f469 Update Back-End after pipeline v8 2025-08-30 01:01:47 +03:00
adce8cddd8 Update sgeupdated pipeline v9 2025-08-29 20:17:14 +03:00
c2ddc08802 Update Front-End after pipeline v5 2025-08-29 20:11:39 +03:00
2c79300663 Update Back-End after pipeline v7 2025-08-29 20:11:17 +03:00
a6bb799caa Update sgeupdated pipeline v8 2025-08-29 20:05:03 +03:00
a4791d6a57 Update Front-End after pipeline v4 2025-08-29 19:40:12 +03:00
168cfaa8a7 Update Back-End after pipeline v6 2025-08-29 19:39:45 +03:00
710655c1fd Update docker-compose.yml 2025-08-29 19:37:41 +03:00
6f445f205a Update sgeupdated pipeline v7 2025-08-29 19:35:49 +03:00
32b9533a33 Update docker-compose.yml 2025-08-29 19:27:28 +03:00
62829194e2 Update Front-End after pipeline v3 2025-08-29 19:24:43 +03:00
87a80f63ed Update Back-End after pipeline v5 2025-08-29 19:24:21 +03:00
f12c5cb8d4 Update sgeupdated pipeline v6
Some mistakes in directory
2025-08-29 19:20:39 +03:00
7148bdf834 Update Front-End after pipeline v2 2025-08-29 19:12:06 +03:00
9eb903a450 Update Back-End after pipeline v4 2025-08-29 19:11:38 +03:00
991aef0417 Update sgeupdated pipeline v5
working on updating the docker
2025-08-29 19:09:11 +03:00
a1c0f71fbf Update Front-End after pipeline 2025-08-29 00:21:02 +03:00
64c36cb617 Update Back-End after pipeline v3 2025-08-29 00:20:41 +03:00
0f2bf5a800 Update Front-End after pipeline 2025-08-29 00:17:33 +03:00
d6375c320a Update Back-End after pipeline v3 2025-08-29 00:17:07 +03:00
3d440798e3 Update sgeupdated pipeline v4
Made a force for rebuilding the docker
2025-08-29 00:16:07 +03:00
8cdc00f921 Update sgeupdated pipeline v3 2025-08-29 00:11:13 +03:00
593e5ceb6a Update Front-End after pipeline
problem with dockerizing
2025-08-29 00:07:10 +03:00
b2eebfce64 Update Back-End after pipeline v2
problem with not dockerizing
2025-08-29 00:06:18 +03:00
c3ed359103 Update sgeupdated pipeline v3
a typo in docker names for front-end and back-end
2025-08-29 00:02:27 +03:00
7b4143ba52 Update sgeupdated pipeline v3
problem in restarting docker
2025-08-28 23:56:54 +03:00
0322235404 Update Back-End after pipeline 2025-08-28 23:48:21 +03:00
95a344a7a6 Update Front-End after CI/CD 2025-08-28 23:45:33 +03:00
c477143b30 Update sgeupdated pipeline v2 2025-08-28 23:42:13 +03:00
6202f7ec26 Update sgeupdated pipeline 2025-08-28 23:28:23 +03:00
8eb9835e13 Update sgeupdated pipeline 2025-08-28 19:09:57 +03:00
08941cc7d5 Update sgeupdated pipeline 2025-08-28 19:01:37 +03:00
994e81b1fb Add sgeupdated pipeline 2025-08-28 18:47:24 +03:00
0c03a110e5 DELETE 2025-08-28 17:56:30 +03:00
7c5eb3a210 Delete .gitea/workflows/deploy.yml 2025-08-28 17:55:52 +03:00
a943925325 Add a Smoke test workflow 2025-08-28 17:53:33 +03:00
5bd98fb09d update a Smoke test workflow 2025-08-27 03:42:02 +03:00
cdb6d98ae7 Add a Smoke test workflow 2025-08-27 03:40:09 +03:00
243f89457f Add test workflow 2025-08-27 03:34:14 +03:00
03875dde53 Add test workflow updated name 2025-08-27 03:32:21 +03:00
e695d06f5b Add CI/CD deploy workflows 2025-08-27 03:04:15 +03:00
837353bc45 Add test workflow 2025-08-27 03:02:45 +03:00
2459ba092b Add CI/CD deploy workflow update 2025-08-27 03:00:10 +03:00
4bfd2ee1f8 Add CI/CD deploy workflow 2025-08-27 02:45:09 +03:00
95fbbc340e Add .gitea/workflows/deploy.yml 2025-08-27 02:43:00 +03:00
78ffa4fe7e Merge pull request 'multi-emission-feature' (#14) from multi-emission-feature into main
Reviewed-on: BLC/sgeUpdated#14
2025-08-19 09:26:46 +03:00
3245040274 Merge pull request 'Multi Emission Sources Feature' (#10) from multi-emission-feature into main
Reviewed-on: BLC/sgeUpdated#10
2025-08-18 08:09:49 +03:00
14 changed files with 3556 additions and 3330 deletions

View File

@@ -0,0 +1,29 @@
name: sgeUpdated CI/CD
on:
pull_request:
types:
- closed # Fires when a PR is closed (either merged or manually closed)
branches:
- main # Only when PR targets main
jobs:
deploy:
if: github.event.pull_request.merged == true # Run only if the PR was merged (not just closed)
runs-on: ubuntu-latest
steps:
- name: Setup SSH
run: |
mkdir -p ~/.ssh/
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan ${{ secrets.SERVER_HOST }} >> ~/.ssh/known_hosts
- name: Run deploy script on server
run: |
ssh ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} << 'EOF'
echo "✅ PR merged into main — running deploy script..."
cd /home/ubuntu/Bgreen/sgeUpdated
./deploy.sh
EOF

24
config.conf Normal file
View File

@@ -0,0 +1,24 @@
# SGE Application Configuration
# This file contains configuration for both backend and frontend
# Database Configuration
SPRING_DATASOURCE_URL=jdbc:postgresql://bgreen-database:5432/sge
SPRING_DATASOURCE_USERNAME=sge
SPRING_DATASOURCE_PASSWORD=147
# Server Configuration
SERVER_PORT=8080
# Mail Configuration
MAIL_HOSTNAME=mail.spacemail.com
MAIL_SMTP_PORT=465
MAIL_ADDRESS=info@blc-css.com
MAIL_PASSWORD=123456Bb@
# React Application Configuration
# API Configuration
API_PROTOCOL=http
API_HOST=bgreen-backend
# Application URLs
APP_SURVEY_BASE_URL=https://bgreen.blc-css.com

110
deploy.sh Executable file
View File

@@ -0,0 +1,110 @@
#!/bin/bash
set -euo pipefail
cd /home/ubuntu/Bgreen/sgeUpdated
# -----------------------
# Harbor settings
# -----------------------
HARBOR_REGISTRY="10.150.1.166"
HARBOR_PROJECT="bgreen"
BACKEND_IMAGE_REPO="${HARBOR_REGISTRY}/${HARBOR_PROJECT}/bgreen-backend"
FRONTEND_IMAGE_REPO="${HARBOR_REGISTRY}/${HARBOR_PROJECT}/bgreen-frontend"
# Tag images with git commit (better than latest; enables rollback)
VERSION="$(git rev-parse --short HEAD)"
echo "📦 Fetching latest changes from origin/main..."
git fetch myfork main
# Detect which files changed between local HEAD and the latest remote version
CHANGED_FILES=$(git diff --name-only HEAD myfork/main || true)
if [ -z "$CHANGED_FILES" ]; then
echo "✅ No file changes detected between HEAD and origin/main."
else
echo "🪶 Changed files:"
echo "$CHANGED_FILES"
fi
# Update to the latest version
git reset --hard myfork/main
BACKEND_CHANGED=false
FRONTEND_CHANGED=false
# Check if backend folder changed (excluding README.md)
if echo "$CHANGED_FILES" | grep "^sge-backend/" | grep -qv "README.md$"; then
BACKEND_CHANGED=true
fi
# Check if frontend folder changed (excluding README.md)
if echo "$CHANGED_FILES" | grep "^sge-frontend/" | grep -qv "README.md$"; then
FRONTEND_CHANGED=true
fi
# -----------------------
# Backend section
# -----------------------
if [ "$BACKEND_CHANGED" = true ]; then
echo "⚡ Backend changes detected."
cd sge-backend
echo "Running Maven build..."
/opt/apache-maven-3.9.11/bin/mvn clean install -DskipTests
echo "🐳 Building backend Docker image..."
docker build -t "${BACKEND_IMAGE_REPO}:${VERSION}" .
echo "📤 Pushing backend image to Harbor..."
docker push "${BACKEND_IMAGE_REPO}:${VERSION}"
echo "📥 Pulling backend image from Harbor (to ensure registry is source of truth)..."
docker pull "${BACKEND_IMAGE_REPO}:${VERSION}"
cd ..
echo "🚀 Recreating backend container using Harbor image..."
VERSION="$VERSION" docker compose up -d bgreen-backend
else
echo "✅ No backend changes."
fi
# -----------------------
# Frontend section
# -----------------------
if [ "$FRONTEND_CHANGED" = true ]; then
echo "⚡ Frontend changes detected."
cd sge-frontend
# Check if package.json or package-lock.json changed
if echo "$CHANGED_FILES" | grep -qE "^sge-frontend/(package\.json|package-lock\.json)$"; then
echo "📦 package.json changed. Running 'npm install' and 'npm run build'..."
npm install
npm run build
else
echo "📦 only code changes. Running 'npm run build'..."
npm run build
fi
echo "🐳 Building frontend Docker image..."
docker build -t "${FRONTEND_IMAGE_REPO}:${VERSION}" .
echo "📤 Pushing frontend image to Harbor..."
docker push "${FRONTEND_IMAGE_REPO}:${VERSION}"
echo "📥 Pulling frontend image from Harbor (to ensure registry is source of truth)..."
docker pull "${FRONTEND_IMAGE_REPO}:${VERSION}"
cd ..
echo "🚀 Recreating frontend container using Harbor image..."
VERSION="$VERSION" docker compose up -d bgreen-frontend
else
echo "✅ No frontend changes."
fi
echo "✅ Deployment complete."

69
deploy.sh.save Executable file
View File

@@ -0,0 +1,69 @@
#!/bin/bash
set -euo pipefail
export GIT_SSH_COMMAND="ssh -i ~/.ssh/deploy_id_rsa -o StrictHostKeyC
cd /home/ubuntu/Bgreen/sgeUpdated
echo "📦 Fetching latest changes from origin/main..."
git fetch origin main
# Detect which files changed between local HEAD and the latest remote version
CHANGED_FILES=$(git diff --name-only HEAD origin/main || true)
if [ -z "$CHANGED_FILES" ]; then
echo "✅ No file changes detected between HEAD and origin/main."
else
echo "🪶 Changed files:"
echo "$CHANGED_FILES"
fi
# Update to the latest version
git reset --hard origin/main
BACKEND_CHANGED=false
FRONTEND_CHANGED=false
# Check if backend folder changed
if echo "$CHANGED_FILES" | grep -q "^sge-backend/"; then
BACKEND_CHANGED=true
fi
# Check if frontend folder changed
if echo "$CHANGED_FILES" | grep -q "^sge-frontend/"; then
FRONTEND_CHANGED=true
fi
# -----------------------
# Backend section
# -----------------------
if [ "$BACKEND_CHANGED" = true ]; then
echo "⚡ Backend changes detected."
cd sge-backend
echo "Running Maven build..."
/opt/apache-maven-3.9.11/bin/mvn clean install -DskipTests
cd ..
echo "Rebuilding backend Docker container..."
docker compose up -d --build bgreen-backend
else
echo "✅ No backend changes."
fi
# -----------------------
# Frontend section
# -----------------------
if [ "$FRONTEND_CHANGED" = true ]; then
echo "⚡ Frontend changes detected."
cd sge-frontend
echo "Running npm build..."
npm install
npm run build
cd ..
echo "Rebuilding frontend Docker container..."
docker compose up -d --build bgreen-frontend
else
echo "✅ No frontend changes."
fi
echo "✅ Deployment complete."

View File

@@ -1,8 +1,6 @@
services:
backend:
build:
context: ./sge-backend
dockerfile: Dockerfile
bgreen-backend:
image: 10.150.1.166/bgreen/bgreen-backend:${VERSION}
ports:
- "8080:8080"
env_file:
@@ -13,10 +11,8 @@ services:
- database
restart: unless-stopped
frontend:
build:
context: ./sge-frontend
dockerfile: Dockerfile
bgreen-frontend:
image: 10.150.1.166/bgreen/bgreen-frontend:${VERSION}
ports:
- "80:80"
env_file:

1
sge-backend/README.md Normal file
View File

@@ -0,0 +1 @@
## CI/CD Pipeline Check v23

View File

@@ -6,12 +6,12 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<version>2.5.5</version>
<relativePath />
</parent>
<groupId>com.sgs</groupId>
<artifactId>sgs</artifactId>
<version>0.0.1-SNAPSHOT</version>
<version>0.0.4-SNAPSHOT</version>
<name>sgs</name>
<description>SGS project for Spring Boot</description>
<properties>

File diff suppressed because it is too large Load Diff

View File

@@ -1,104 +1,108 @@
# SGE System Frontend
## Overview
The frontend of the SGE System is a modern web application built with **React**, providing an interactive and user-friendly interface. It communicates with the backend API to deliver a seamless experience for users.
## Technology Stack
- **React** UI library
- **React Router** Routing
- **i18n** Internationalization
- **Docker** Containerization
## Repository Structure
```
SGE/
├── sge-backend/ # Backend source code
├── sge-frontend/ # Frontend source code
├── config.conf # Centralized configuration file (see below)
├── docker-compose.yml # Docker Compose file (see below)
```
## Setup and Installation
### Prerequisites
- **Node.js** (v14.0.0 required) and npm
- **Docker** (for containerized deployment)
#### Node.js Version Management
If you need to switch Node versions, use nvm:
```sh
nvm install v14.0.0
nvm use v14.0.0
unset NODE_OPTIONS
```
### Frontend Setup
#### Local Development
1. Clone the repository and navigate to the frontend directory:
```sh
git clone <repository-url>
cd SGE/sge-frontend
```
2. Ensure `config.conf` is in the project root (`SGE/`).
You can either:
- Manually set environment variables from `config.conf`
- Or configure your IDE to load variables from `config.conf`
3. Install dependencies:
```sh
npm install
```
4. Start the development server:
```sh
npm start
```
#### Docker Deployment
1. Ensure both `config.conf` and `docker-compose.yml` are in the project root (`SGE/`).
2. From the root directory, build and run the frontend (and backend) using Docker:
```sh
docker-compose up --build
```
## Configuration Management
The SGE System uses a centralized `config.conf` file for all environment variables.
**Location:** Place `config.conf` in the root directory of your project, alongside `docker-compose.yml`.
This file contains environment variables for both backend and frontend components, including:
- API connection settings
- Mail configuration
- Application URLs
When running with Docker, environment variables are automatically loaded from `config.conf` via the `env_file` directive in `docker-compose.yml`.
For local development, you can either:
- Use the same `config.conf` file and manually set the environment variables
- Configure your IDE to load these variables from the file
Refer to the backend README for more details on configuration options and structure.
## Integration with Backend
The frontend expects the backend API to be available at the host and port specified in `config.conf` (`API_PROTOCOL`, `API_HOST`, `SERVER_PORT`).
Ensure both services are configured consistently.
## License
[Insert your license information here]
# SGE System Frontend
## Overview
The frontend of the SGE System is a modern web application built with **React**, providing an interactive and user-friendly interface. It communicates with the backend API to deliver a seamless experience for users.
## Technology Stack
- **React** UI library
- **React Router** Routing
- **i18n** Internationalization
- **Docker** Containerization
## Repository Structure
```
SGE/
├── sge-backend/ # Backend source code
├── sge-frontend/ # Frontend source code
├── config.conf # Centralized configuration file (see below)
├── docker-compose.yml # Docker Compose file (see below)
```
## Setup and Installation
### Prerequisites
- **Node.js** (v14.0.0 required) and npm
- **Docker** (for containerized deployment)
#### Node.js Version Management
If you need to switch Node versions, use nvm:
```sh
nvm install v14.0.0
nvm use v14.0.0
unset NODE_OPTIONS
```
### Frontend Setup
#### Local Development
1. Clone the repository and navigate to the frontend directory:
```sh
git clone <repository-url>
cd SGE/sge-frontend
```
2. Ensure `config.conf` is in the project root (`SGE/`).
You can either:
- Manually set environment variables from `config.conf`
- Or configure your IDE to load variables from `config.conf`
3. Install dependencies:
```sh
npm install
```
4. Start the development server:
```sh
npm start
```
#### Docker Deployment
1. Ensure both `config.conf` and `docker-compose.yml` are in the project root (`SGE/`).
2. From the root directory, build and run the frontend (and backend) using Docker:
```sh
docker-compose up --build
```
## Configuration Management
The SGE System uses a centralized `config.conf` file for all environment variables.
**Location:** Place `config.conf` in the root directory of your project, alongside `docker-compose.yml`.
This file contains environment variables for both backend and frontend components, including:
- API connection settings
- Mail configuration
- Application URLs
When running with Docker, environment variables are automatically loaded from `config.conf` via the `env_file` directive in `docker-compose.yml`.
For local development, you can either:
- Use the same `config.conf` file and manually set the environment variables
- Configure your IDE to load these variables from the file
Refer to the backend README for more details on configuration options and structure.
## Integration with Backend
The frontend expects the backend API to be available at the host and port specified in `config.conf` (`API_PROTOCOL`, `API_HOST`, `SERVER_PORT`).
Ensure both services are configured consistently.
## License
[Insert your license information here]
## CI/CD Testing v20

View File

@@ -1,39 +1,32 @@
server {
listen 80;
server_name bgreen.blc-css.com;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri /index.html;
}
location /api/v1/graphql {
proxy_pass http://bgreen-backend:8080/api/v1/graphql;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /api/v1/upload {
proxy_pass http://bgreen-backend:8080/upload;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# location /api/v1/datacenter {
# proxy_pass http://backend:8080/api/v1/datacenter;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# }
# Hata durumlarında da index.html'i sun
error_page 404 /index.html;
gzip on;
gzip_vary on;
gzip_min_length 10240;
gzip_proxied any;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/json application/xml application/rss+xml application/atom+xml image/svg+xml;
gzip_comp_level 5;
}
}

View File

@@ -1,131 +1,131 @@
{
"name": "sgs-web",
"version": "1.0.0",
"private": true,
"dependencies": {
"@apollo/client": "^3.13.8",
"@casl/react": "4.0.0",
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.10.6",
"@mui/icons-material": "^5.2.4",
"@mui/material": "^5.2.4",
"animate.css": "4.1.1",
"axios": "^0.21.1",
"bootstrap": "4.5.2",
"chart.js": "^4.3.0",
"chartjs-plugin-datalabels": "^2.2.0",
"classnames": "2.2.6",
"dotenv": "^14.3.2",
"file-saver": "^2.0.5",
"graphql": "^16.11.0",
"html2canvas": "^1.4.1",
"i18next": "^22.4.14",
"i18next-browser-languagedetector": "^7.0.1",
"i18next-http-backend": "^2.2.0",
"jquery": "^3.7.1",
"jspdf": "^2.5.1",
"jwt-decode": "^3.1.2",
"leaflet": "^1.6.0",
"material-react-table": "^1.14.0",
"moment": "2.29.1",
"notistack": "^2.0.8",
"postcss-rtl": "1.5.0",
"prop-types": "15.7.2",
"react": "17.0.1",
"react-bootstrap": "^2.10.6",
"react-chartjs-2": "^5.2.0",
"react-color": "^2.19.3",
"react-data-table-component": "^7.5.0",
"react-datepicker": "^4.16.0",
"react-dom": "17.0.1",
"react-feather": "~2.0.3",
"react-i18next": "^12.2.0",
"react-intl": "6.0.5",
"react-leaflet": "^3.2.5",
"react-paginate": "8.2.0",
"react-perfect-scrollbar": "^1.5.5",
"react-redux": "7.2.2",
"react-router-dom": "^5.2.0",
"react-scroll-up": "1.3.7",
"react-select": "4.0.2",
"react-toastify": "^7.0.3",
"reactstrap": "9.2.3",
"redux": "4.0.5",
"redux-debounced": "0.5.0",
"redux-thunk": "2.3.0",
"styled-components": "^5.3.6",
"sweetalert2": "11.0.0",
"sweetalert2-react-content": "4.2.0",
"swiper": "6.0.4",
"uuid": "^9.0.0",
"web-vitals": "^1.0.1",
"websocket": "^1.0.34",
"wnumb": "1.2.0",
"xlsx": "^0.18.5",
"yarn": "1.21.1",
"yup": "0.32.8"
},
"scripts": {
"start": "react-app-rewired start",
"build:dev": "react-app-rewired build --mode development",
"build:prod": "react-app-rewired build --mode production",
"build": "react-app-rewired build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"lint": "eslint src/**/*.js src/**/*.jsx",
"lint:fix": "eslint src/**/*.js --fix"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@babel/core": "^7.27.1",
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/preset-env": "^7.27.1",
"@babel/preset-react": "^7.27.1",
"@craco/craco": "^7.1.0",
"@swc/core": "^1.11.24",
"@types/leaflet": "^1.7.5",
"@types/sortablejs": "^1.10.6",
"babel-eslint": "^10.1.0",
"babel-loader": "^10.0.0",
"babel-plugin-styled-components": "^2.1.4",
"core-js": "^3.42.0",
"eslint": "^8.48.0",
"eslint-config-react-app": "^7.0.1",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-react": "^7.33.0",
"eslint-plugin-react-hooks": "^4.6.0",
"react-app-rewire-postcss": "^3.0.2",
"react-app-rewired": "^2.2.1",
"react-error-overlay": "^6.0.9",
"react-loadable": "^5.5.0",
"react-scripts": "^5.0.1",
"sass": "^1.81.0",
"sass-loader": "^8.0.2",
"swc-loader": "^0.2.6",
"typescript": "^4.9.5",
"webpack": "^5.96.1"
},
"resolutions": {
"react-error-overlay": "6.0.9"
},
"homepage": ""
}
{
"name": "sgs-web",
"version": "1.0.2",
"private": true,
"dependencies": {
"@apollo/client": "^3.13.8",
"@casl/react": "4.0.0",
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.10.6",
"@mui/icons-material": "^5.2.4",
"@mui/material": "^5.2.4",
"animate.css": "4.1.1",
"axios": "^0.21.1",
"bootstrap": "4.5.2",
"chart.js": "^4.3.0",
"chartjs-plugin-datalabels": "^2.2.0",
"classnames": "2.2.6",
"dotenv": "^14.3.2",
"file-saver": "^2.0.5",
"graphql": "^16.11.0",
"html2canvas": "^1.4.1",
"i18next": "^22.4.14",
"i18next-browser-languagedetector": "^7.0.1",
"i18next-http-backend": "^2.2.0",
"jquery": "^3.7.1",
"jspdf": "^2.5.1",
"jwt-decode": "^3.1.2",
"leaflet": "^1.6.0",
"material-react-table": "^1.14.0",
"moment": "2.29.1",
"notistack": "^2.0.8",
"postcss-rtl": "1.5.0",
"prop-types": "15.7.2",
"react": "17.0.1",
"react-bootstrap": "^2.10.6",
"react-chartjs-2": "^5.2.0",
"react-color": "^2.19.3",
"react-data-table-component": "^7.5.0",
"react-datepicker": "^4.16.0",
"react-dom": "17.0.1",
"react-feather": "~2.0.3",
"react-i18next": "^12.2.0",
"react-intl": "6.0.5",
"react-leaflet": "^3.2.5",
"react-paginate": "8.2.0",
"react-perfect-scrollbar": "^1.5.5",
"react-redux": "7.2.2",
"react-router-dom": "^5.2.0",
"react-scroll-up": "1.3.7",
"react-select": "4.0.2",
"react-toastify": "^7.0.3",
"reactstrap": "9.2.3",
"redux": "4.0.5",
"redux-debounced": "0.5.0",
"redux-thunk": "2.3.0",
"styled-components": "^5.3.6",
"sweetalert2": "11.0.0",
"sweetalert2-react-content": "4.2.0",
"swiper": "6.0.4",
"uuid": "^9.0.0",
"web-vitals": "^1.0.1",
"websocket": "^1.0.34",
"wnumb": "1.2.0",
"xlsx": "^0.18.5",
"yarn": "1.21.1",
"yup": "0.32.8"
},
"scripts": {
"start": "react-app-rewired start",
"build:dev": "react-app-rewired build --mode development",
"build:prod": "react-app-rewired build --mode production",
"build": "react-app-rewired build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"lint": "eslint src/**/*.js src/**/*.jsx",
"lint:fix": "eslint src/**/*.js --fix"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@babel/core": "^7.27.1",
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/preset-env": "^7.27.1",
"@babel/preset-react": "^7.27.1",
"@craco/craco": "^7.1.0",
"@swc/core": "^1.11.24",
"@types/leaflet": "^1.7.5",
"@types/sortablejs": "^1.10.6",
"babel-eslint": "^10.1.0",
"babel-loader": "^10.0.0",
"babel-plugin-styled-components": "^2.1.4",
"core-js": "^3.42.0",
"eslint": "^8.48.0",
"eslint-config-react-app": "^7.0.1",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-react": "^7.33.0",
"eslint-plugin-react-hooks": "^4.6.0",
"react-app-rewire-postcss": "^3.0.2",
"react-app-rewired": "^2.2.1",
"react-error-overlay": "^6.0.9",
"react-loadable": "^5.5.0",
"react-scripts": "^5.0.1",
"sass": "^1.81.0",
"sass-loader": "^8.0.2",
"swc-loader": "^0.2.6",
"typescript": "^4.9.5",
"webpack": "^5.96.1"
},
"resolutions": {
"react-error-overlay": "6.0.9"
},
"homepage": ""
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,218 +1,218 @@
import React, { useEffect, useState } from "react";
import {
Button,
Card,
CardHeader,
CardTitle,
Col,
Modal,
ModalBody,
ModalHeader,
Row,
UncontrolledTooltip, // Add UncontrolledTooltip import
} from "reactstrap";
import { Edit, Mail, Phone, MapPin } from "react-feather"; // Import Mail, Phone, MapPin
import { useSnackbar } from "notistack";
import { useTranslation } from "react-i18next";
import { useDispatch, useSelector } from "react-redux";
import { permissionCheck } from "../components/permission-check";
import {
getMailSettings,
clearMailSuccess,
clearMailError,
} from "../redux/actions/mailSettings";
import MailSettings from "./MailSettings";
import SpinnerComponent from "../@core/components/spinner/Fallback-spinner";
// Import custom styles for the communication page
import "../assets/scss/pages/communication.scss";
function Communication() {
const { t } = useTranslation();
const dispatch = useDispatch();
const { enqueueSnackbar } = useSnackbar();
const { currentSettings, loading, success, error } = useSelector(
// Add loading to useSelector
(state) => state.mailSettings
);
const [showMailModal, setShowMailModal] = useState(false);
useEffect(() => {
// Load mail settings once when component mounts
dispatch(getMailSettings());
}, [dispatch]);
useEffect(() => {
if (success) {
enqueueSnackbar(t("Warnings.updatedSuccessfully"), {
variant: "success",
});
dispatch(clearMailSuccess());
}
}, [success, enqueueSnackbar, t, dispatch]);
useEffect(() => {
if (error) {
const errorMessage =
error?.graphQLErrors?.[0]?.message ||
error?.message ||
t("Warnings.genericUpdateFailed");
enqueueSnackbar(errorMessage, {
variant: "error",
});
dispatch(clearMailError());
}
}, [error, enqueueSnackbar, t, dispatch]);
// Get email address from settings or use default from environment variable
const defaultEmail = process.env.REACT_APP_DEFAULT_EMAIL || "";
// Use default email if currentSettings is null or emailAddress is null
const emailAddress = currentSettings?.emailAddress || defaultEmail;
const handleEmailClick = () => {
if (emailAddress) {
window.location.href = `mailto:${emailAddress}`;
}
};
const handleCloseModal = () => {
setShowMailModal(false);
};
return (
<div style={{ marginTop: "2%" }}>
{loading && !currentSettings ? (
<div
style={{
display: "flex",
justifyContent: "center",
alignItems: "center",
minHeight: 200,
}}
>
<SpinnerComponent />
</div>
) : (
<>
{permissionCheck("settings_access") && (
<>
<Modal
isOpen={showMailModal}
toggle={handleCloseModal}
className="modal-dialog-centered"
size="lg"
>
<ModalHeader toggle={handleCloseModal}>
{t("MailSettings.editMailInfo")}
</ModalHeader>
<ModalBody>
<MailSettings closeModal={handleCloseModal} />
</ModalBody>
</Modal>
</>
)}
<Card className="border-bottom">
<CardHeader className="border-bottom">
<CardTitle tag="h2" className="row ml-md-2 align-items-center">
{t("Contact.contactInfo")}
</CardTitle>
</CardHeader>
<Row>
<Col className="pl-md-5 pl-2 col-md-6 col-12">
<Row className="mx-0 mt-1">
<Col sm="6" md="5" className="mr-2">
<div className="email-container d-flex align-items-center justify-content-between">
<div>
<h4>
<Mail size={16} className="mr-1" />{" "}
{t("Contact.contactEmail")}
</h4>{" "}
{/* Add Mail icon */}
<p
style={{
color: emailAddress ? "blue" : "inherit",
textDecoration: emailAddress ? "underline" : "none",
cursor: emailAddress ? "pointer" : "default",
}}
onClick={handleEmailClick}
>
{emailAddress ||
defaultEmail ||
t("MailSettings.notConfigured")}
</p>
</div>
{permissionCheck("settings_access") && (
<>
{" "}
{/* Wrap button and tooltip in fragment */}
<Button
color="flat-primary"
className="btn-icon"
onClick={() => setShowMailModal(true)}
id="edit-email-btn" // Add id for tooltip
>
<Edit size={18} />
</Button>
<UncontrolledTooltip
placement="top"
target="edit-email-btn" // Target the button id
timeout={150} // Add timeout prop to fix the warning
>
{t("MailSettings.editMailInfo")}{" "}
{/* Tooltip text */}
</UncontrolledTooltip>
</>
)}
</div>
</Col>
<Col sm="6" md="5" className="mr-2">
<div className="telephone-container">
<h4>
<Phone size={16} className="mr-1" />{" "}
{t("Contact.contactPhoneNumber")}
</h4>{" "}
{/* Add Phone icon */}
<p>+90 507 750 00 41</p>
</div>
</Col>
</Row>
<Row className="mx-0 mt-4">
<Col sm="6" md="5" className="mr-2">
<div className="address-container">
<h4>
<MapPin size={16} className="mr-1" />{" "}
{t("Contact.contactAddress")}
</h4>{" "}
{/* Add MapPin icon */}
<address>
Central Office: 4995 sokak no:3, Alacaatlı Mahallesi,
Daire No: A2 06810 Çankaya/Ankara
</address>
</div>
</Col>
</Row>
</Col>
<Col className="pl-md-5 pl-2 col-md-6 col-12 pb-2 border-left">
<Row className="mx-0 mt-1">
<div className="address-map w-100">
<div className="responsive-map-container">
<iframe
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3063.1752741150003!2d32.658217075858445!3d39.847904971536735!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x14d33eef6ee44755%3A0x77faea5f08f32c60!2zTUVBIEfDnFpFTEJBSMOHRU0!5e0!3m2!1sen!2str!4v1741165773414!5m2!1sen!2str"
allowFullScreen=""
loading="lazy"
referrerPolicy="no-referrer-when-downgrade"
></iframe>
</div>
</div>
</Row>
</Col>
</Row>
</Card>
</>
)}
</div>
);
}
export default Communication;
import React, { useEffect, useState } from "react";
import {
Button,
Card,
CardHeader,
CardTitle,
Col,
Modal,
ModalBody,
ModalHeader,
Row,
UncontrolledTooltip, // Add UncontrolledTooltip import
} from "reactstrap";
import { Edit, Mail, Phone, MapPin } from "react-feather"; // Import Mail, Phone, MapPin
import { useSnackbar } from "notistack";
import { useTranslation } from "react-i18next";
import { useDispatch, useSelector } from "react-redux";
import { permissionCheck } from "../components/permission-check";
import {
getMailSettings,
clearMailSuccess,
clearMailError,
} from "../redux/actions/mailSettings";
import MailSettings from "./MailSettings";
import SpinnerComponent from "../@core/components/spinner/Fallback-spinner";
// Import custom styles for the communication page
import "../assets/scss/pages/communication.scss";
function Communication() {
const { t } = useTranslation();
const dispatch = useDispatch();
const { enqueueSnackbar } = useSnackbar();
const { currentSettings, loading, success, error } = useSelector(
// Add loading to useSelector
(state) => state.mailSettings
);
const [showMailModal, setShowMailModal] = useState(false);
useEffect(() => {
// Load mail settings once when component mounts
dispatch(getMailSettings());
}, [dispatch]);
useEffect(() => {
if (success) {
enqueueSnackbar(t("Warnings.updatedSuccessfully"), {
variant: "success",
});
dispatch(clearMailSuccess());
}
}, [success, enqueueSnackbar, t, dispatch]);
useEffect(() => {
if (error) {
const errorMessage =
error?.graphQLErrors?.[0]?.message ||
error?.message ||
t("Warnings.genericUpdateFailed");
enqueueSnackbar(errorMessage, {
variant: "error",
});
dispatch(clearMailError());
}
}, [error, enqueueSnackbar, t, dispatch]);
// Get email address from settings or use default from environment variable
const defaultEmail = process.env.REACT_APP_DEFAULT_EMAIL || "";
// Use default email if currentSettings is null or emailAddress is null
const emailAddress = currentSettings?.emailAddress || defaultEmail;
const handleEmailClick = () => {
if (emailAddress) {
window.location.href = `mailto:${emailAddress}`;
}
};
const handleCloseModal = () => {
setShowMailModal(false);
};
return (
<div style={{ marginTop: "2%" }}>
{loading && !currentSettings ? (
<div
style={{
display: "flex",
justifyContent: "center",
alignItems: "center",
minHeight: 200,
}}
>
<SpinnerComponent />
</div>
) : (
<>
{permissionCheck("settings_access") && (
<>
<Modal
isOpen={showMailModal}
toggle={handleCloseModal}
className="modal-dialog-centered"
size="lg"
>
<ModalHeader toggle={handleCloseModal}>
{t("MailSettings.editMailInfo")}
</ModalHeader>
<ModalBody>
<MailSettings closeModal={handleCloseModal} />
</ModalBody>
</Modal>
</>
)}
<Card className="border-bottom">
<CardHeader className="border-bottom">
<CardTitle tag="h2" className="row ml-md-2 align-items-center">
{t("Contact.contactInfo")}
</CardTitle>
</CardHeader>
<Row>
<Col className="pl-md-5 pl-2 col-md-6 col-12">
<Row className="mx-0 mt-1">
<Col sm="6" md="5" className="mr-2">
<div className="email-container d-flex align-items-center justify-content-between">
<div>
<h4>
<Mail size={16} className="mr-1" />{" "}
{t("Contact.contactEmail")}
</h4>{" "}
{/* Add Mail icon */}
<p
style={{
color: emailAddress ? "blue" : "inherit",
textDecoration: emailAddress ? "underline" : "none",
cursor: emailAddress ? "pointer" : "default",
}}
onClick={handleEmailClick}
>
{emailAddress ||
defaultEmail ||
t("MailSettings.notConfigured")}
</p>
</div>
{permissionCheck("settings_access") && (
<>
{" "}
{/* Wrap button and tooltip in fragment */}
<Button
color="flat-primary"
className="btn-icon"
onClick={() => setShowMailModal(true)}
id="edit-email-btn" // Add id for tooltip
>
<Edit size={18} />
</Button>
<UncontrolledTooltip
placement="top"
target="edit-email-btn" // Target the button id
timeout={150} // Add timeout prop to fix the warning
>
{t("MailSettings.editMailInfo")}{" "}
{/* Tooltip text */}
</UncontrolledTooltip>
</>
)}
</div>
</Col>
<Col sm="6" md="5" className="mr-2">
<div className="telephone-container">
<h4>
<Phone size={16} className="mr-1" />{" "}
{t("Contact.contactPhoneNumber")}
</h4>{" "}
{/* Add Phone icon */}
<p>+90 507 750 00 41</p>
</div>
</Col>
</Row>
<Row className="mx-0 mt-4">
<Col sm="6" md="5" className="mr-2">
<div className="address-container">
<h4>
<MapPin size={16} className="mr-1" />{" "}
{t("Contact.contactAddress")}
</h4>{" "}
{/* Add MapPin icon */}
<address>
Central Office: 4995 sokak no:3, Alacaatlı Mahallesi,
Daire No: A2 06820 Çankaya/Ankara
</address>
</div>
</Col>
</Row>
</Col>
<Col className="pl-md-5 pl-2 col-md-6 col-12 pb-2 border-left">
<Row className="mx-0 mt-1">
<div className="address-map w-100">
<div className="responsive-map-container">
<iframe
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3063.1752741150003!2d32.658217075858445!3d39.847904971536735!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x14d33eef6ee44755%3A0x77faea5f08f32c60!2zTUVBIEfDnFpFTEJBSMOHRU0!5e0!3m2!1sen!2str!4v1741165773414!5m2!1sen!2str"
allowFullScreen=""
loading="lazy"
referrerPolicy="no-referrer-when-downgrade"
></iframe>
</div>
</div>
</Row>
</Col>
</Row>
</Card>
</>
)}
</div>
);
}
export default Communication;

File diff suppressed because it is too large Load Diff