Skip to content

Commit 139e691

Browse files
Merge pull request #1624 from eclipse-tractusx/release/v2.5.0
build(v2.5.0): merge release into main #1624
2 parents 007e323 + a3f5a86 commit 139e691

File tree

24 files changed

+159
-151
lines changed

24 files changed

+159
-151
lines changed

CHANGELOG.md

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Changelog
22

3-
## 2.5.0-RC1
3+
## 2.5.0
44

55
### Feature
66

@@ -17,12 +17,26 @@
1717

1818
- **Company Subscription**:
1919
- fixed back button on details page returns on wrong tab [#1532](https://github.com/eclipse-tractusx/portal-frontend/pull/1532)
20+
- center aligned row cells with multi-browser friendly logic [1611](https://github.com/eclipse-tractusx/portal-frontend/pull/1611)
2021
- **Notifications**:
2122
- fixed notification to display as text and technical user creation title [#1535](https://github.com/eclipse-tractusx/portal-frontend/pull/1535)
2223
- **User Management**:
2324
- fixed app roles display and text to accurate description in user list table in app user management [#1546](https://github.com/eclipse-tractusx/portal-frontend/pull/1546)
2425
- **App/Service Release Process**:
2526
- added missing translation for consent and terms step [#1557](https://github.com/eclipse-tractusx/portal-frontend/pull/1557)
27+
- fixed user roles CSV template and read logic [#1584](https://github.com/eclipse-tractusx/portal-frontend/pull/1584)
28+
- **App & Service Admin Detail**
29+
- added missing user technical profiles on admin detail board [1615](https://github.com/eclipse-tractusx/portal-frontend/pull/1615)
30+
- **User Management | App Access Management**:
31+
- updated logic for persist user selection on navigating back from role selection [#1603](https://github.com/eclipse-tractusx/portal-frontend/pull/1603)
32+
- **Connector Registration**:
33+
- updated technical user list for new connector fetch request [1612](https://github.com/eclipse-tractusx/portal-frontend/pull/1612)
34+
- **Technical User**:
35+
- updated CSS for technical user table to span to full available width [1602](https://github.com/eclipse-tractusx/portal-frontend/pull/1602)
36+
- **IDP Management**
37+
- fixed disabled save metadata button [1604](https://github.com/eclipse-tractusx/portal-frontend/pull/1604)
38+
- **Service Marketplace**
39+
- replaced hardcoded images in service marketplace and detail [#1195](https://github.com/eclipse-tractusx/portal-frontend/issues/1195)
2640

2741
### Technical Support
2842

@@ -39,7 +53,12 @@
3953

4054
### Known Knowns
4155

42-
- please refer to the list of [open bugs] (https://github.com/eclipse-tractusx/portal-frontend/issues?q=is%3Aopen+is%3Aissue+label%3Abug)
56+
- Please refer to the [list of open bugs](https://github.com/eclipse-tractusx/portal-frontend/issues?q=is%3Aopen+is%3Aissue+label%3Abug)
57+
- Auto-setup feature for App Subscriptions: validation by ValidatingInput component is triggered on opening pop up. [#1589](https://github.com/eclipse-tractusx/portal-frontend/issues/1589)
58+
- **Note for Gaia-X Clearing House Tagus upgrade**
59+
- If a company was onboarded with ELBE clearing house, the legal person self description document is not accepted when creating a connector with newer versions of the clearing house. Portal operators are advised to create new legal person and connector self description documents for all previously onboarded companies. The portal backend will activate connector without updated legal person self description document to allow for a transition phase. The connector will not have a document until reissuance for both company and connector is triggered by operators.
60+
- Feature Support and Development for auto-setup Process Worker: there is no frontend support for the extended auto-setup process worker, specifically in terms of error handling and status transparency.
61+
- During end-to-end testing, some minor issues and in regards to system internal notifications as well as the UI were detected.
4362

4463
## 2.4.0
4564

DEPENDENCIES

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ npm/npmjs/-/array.prototype.flatmap/1.3.3, MIT, approved, #4651
3030
npm/npmjs/-/array.prototype.tosorted/1.1.4, MIT, approved, #5051
3131
npm/npmjs/-/arraybuffer.prototype.slice/1.0.3, MIT, approved, #9657
3232
npm/npmjs/-/arraybuffer.prototype.slice/1.0.4, MIT, approved, #9657
33-
npm/npmjs/-/asn1/0.2.6, MIT, approved, clearlydefined
33+
npm/npmjs/-/asn1/0.2.6, MIT, approved, #21125
3434
npm/npmjs/-/assert-plus/1.0.0, MIT, approved, clearlydefined
3535
npm/npmjs/-/astral-regex/2.0.0, MIT, approved, clearlydefined
3636
npm/npmjs/-/async/3.2.6, Apache-2.0 AND MIT, approved, #1553
@@ -41,7 +41,6 @@ npm/npmjs/-/autosuggest-highlight/3.3.4, MIT, approved, clearlydefined
4141
npm/npmjs/-/available-typed-arrays/1.0.7, MIT, approved, clearlydefined
4242
npm/npmjs/-/aws-sign2/0.7.0, Apache-2.0, approved, clearlydefined
4343
npm/npmjs/-/aws4/1.13.2, MIT, approved, clearlydefined
44-
npm/npmjs/-/axios/1.8.4, MIT, approved, #19551
4544
npm/npmjs/-/babel-jest/29.7.0, MIT, approved, clearlydefined
4645
npm/npmjs/-/babel-plugin-istanbul/6.1.1, BSD-3-Clause, approved, clearlydefined
4746
npm/npmjs/-/babel-plugin-jest-hoist/29.6.3, MIT, approved, clearlydefined
@@ -151,7 +150,7 @@ npm/npmjs/-/dom-helpers/5.2.1, MIT, approved, clearlydefined
151150
npm/npmjs/-/domexception/4.0.0, MIT, approved, clearlydefined
152151
npm/npmjs/-/dot-case/3.0.4, MIT, approved, clearlydefined
153152
npm/npmjs/-/dunder-proto/1.0.1, MIT, approved, #17824
154-
npm/npmjs/-/ecc-jsbn/0.1.2, , approved, #17389
153+
npm/npmjs/-/ecc-jsbn/0.1.2, MIT AND LicenseRef-MIT-style, approved, #17389
155154
npm/npmjs/-/ejs/3.1.10, Apache-2.0, approved, #1373
156155
npm/npmjs/-/electron-to-chromium/1.5.80, ISC, approved, #16451
157156
npm/npmjs/-/emittery/0.13.1, MIT, approved, clearlydefined
@@ -230,7 +229,6 @@ npm/npmjs/-/find-up/4.1.0, MIT, approved, clearlydefined
230229
npm/npmjs/-/find-up/5.0.0, MIT, approved, clearlydefined
231230
npm/npmjs/-/flat-cache/3.2.0, MIT, approved, clearlydefined
232231
npm/npmjs/-/flatted/3.3.1, ISC AND (ISC AND MIT), approved, #13460
233-
npm/npmjs/-/follow-redirects/1.15.9, MIT, approved, #10782
234232
npm/npmjs/-/for-each/0.3.3, MIT, approved, clearlydefined
235233
npm/npmjs/-/forever-agent/0.6.1, Apache-2.0, approved, clearlydefined
236234
npm/npmjs/-/form-data/4.0.1, MIT, approved, clearlydefined
@@ -516,7 +514,6 @@ npm/npmjs/-/process/0.11.10, MIT, approved, CQ23452
516514
npm/npmjs/-/prompts/2.4.2, MIT, approved, clearlydefined
517515
npm/npmjs/-/prop-types/15.8.1, MIT, approved, clearlydefined
518516
npm/npmjs/-/proxy-from-env/1.0.0, MIT, approved, clearlydefined
519-
npm/npmjs/-/proxy-from-env/1.1.0, MIT, approved, clearlydefined
520517
npm/npmjs/-/psl/1.9.0, MIT AND CC0-1.0, approved, #3080
521518
npm/npmjs/-/pump/3.0.2, MIT, approved, clearlydefined
522519
npm/npmjs/-/punycode/2.3.1, MIT, approved, #6373

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@catena-x/portal-frontend",
3-
"version": "v2.5.0-RC1",
3+
"version": "v2.5.0",
44
"description": "Catena-X Portal Frontend",
55
"author": "Catena-X Contributors",
66
"license": "Apache-2.0",

public/template_app_role_upload.csv

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
roles;description_en;description_de
2-
"Administrator;Administrator are able to configure the application as per the costumer need;Administratoren sind in der Lage, die Anwendung nach den Bedürfnissen der Kunden zu konfigurieren."
3-
Commercial Specialist;Commercial Specialist can approve commercial request and send them for the manager review;Der Handelsspezialist kann Handelsanfragen genehmigen und sie zur Überprüfung durch den Manager senden.
4-
Commercial Manager;Commercial Specialist can do the final approval of commercial request and trigger the payout;Der Handelsspezialist kann die endgültige Genehmigung des Handelsantrags vornehmen und die Auszahlung veranlassen.
5-
Recycler;Recycler can buy recycled material;Recycler können recyceltes Material kaufen
6-
Manager;This is only a test text in EN;Das is in Deutsch
2+
Administrator;Administrator are able to configure the application as per the costumer need.;Administratoren sind in der Lage, die Anwendung nach den Bedürfnissen der Kunden zu konfigurieren.
3+
Commercial Specialist;Commercial Specialist can approve commercial request and send them for the manager review.;Der Handelsspezialist kann Handelsanfragen genehmigen und sie zur Überprüfung durch den Manager senden.
4+
Commercial Manager;Commercial Specialist can do the final approval of commercial request and trigger the payout.;Der Handelsspezialist kann die endgültige Genehmigung des Handelsantrags vornehmen und die Auszahlung veranlassen.
5+
Recycler;Recycler can buy recycled material.;Recycler können recyceltes Material kaufen.
6+
Manager;This is only a test text in EN.;Das ist auf Deutsch.

src/components/overlays/AddAppUserRoles/AppRoles.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ export const AppRoles = () => {
3232
const dispatch = useDispatch()
3333
const { appId } = useParams()
3434
const { data } = useFetchAppRolesQuery(appId ?? '')
35+
const roles = useSelector((state: RootState) => state.admin.user.rolesToAdd)
3536

3637
const selectRole = (roleName: string, select: boolean) => {
37-
const roles = useSelector((state: RootState) => state.admin.user.rolesToAdd)
3838
const isSelected = roles.includes(roleName)
3939
if (!isSelected && select) {
4040
dispatch(setRolesToAdd([...roles, roleName]))

src/components/overlays/UpdateIDP/UpdateIDPContent.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const isWellknownMetadata = (expr: string) =>
4343
const idpToForm = (idp: IdentityProvider) => {
4444
const form: IHashMap<string> = {}
4545
form.displayName = idp.displayName ?? ''
46-
form.metadataUrl = ''
46+
form.metadataUrl = idp.oidc?.metadataUrl ?? ''
4747
form.clientId = idp.oidc?.clientId ?? ''
4848
form.secret = ''
4949
form.clientAuthMethod =
@@ -101,6 +101,7 @@ const UpdateIDPForm = ({
101101
hint={t('field.metadata.hint')}
102102
debounceTime={0}
103103
onValid={onChange}
104+
onInvalid={onChange}
104105
/>
105106
</div>
106107
<div style={{ margin: '12px 0' }}>
@@ -111,6 +112,7 @@ const UpdateIDPForm = ({
111112
hint={t('field.clientId.hint')}
112113
validate={isIDPClientID}
113114
onValid={onChange}
115+
onInvalid={onChange}
114116
/>
115117
</div>
116118
<div style={{ margin: '12px 0 30px' }}>
@@ -120,6 +122,7 @@ const UpdateIDPForm = ({
120122
hint={t('field.clientSecret.hint')}
121123
validate={isIDPClientSecret}
122124
onValid={onChange}
125+
onInvalid={onChange}
123126
/>
124127
</div>
125128
<Typography variant="label2">{t('edit.metaDataHeading')}</Typography>

src/components/pages/AdminBoardDetail/BoardTechnicalUserSetup/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ export default function BoardTechnicalUserSetup({
5757
{t('content.adminboardDetail.technicalUserSetup.message')}
5858
</Typography>
5959
{item.technicalUserProfile &&
60-
getTechnicalUserData(Object.values(item?.technicalUserProfile)[0])}
60+
getTechnicalUserData(
61+
Object.values(item?.technicalUserProfile).flat() as string[]
62+
)}
6163
</>
6264
)
6365
}

src/components/pages/AdminBoardDetail/style.scss

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,12 @@
5555
gap: 56px;
5656
}
5757

58-
.lead-image > img {
59-
border-radius: 16px;
60-
max-width: 100%;
61-
width: 412px;
58+
.lead-image {
59+
max-width: 288px;
60+
& > img {
61+
border-radius: 16px;
62+
width: 100%;
63+
}
6264
}
6365
.service-app-content {
6466
flex: 1;

src/components/pages/AppOverview/AddRolesOverlay.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ const AddRolesOverlay = ({
6464
uploadAppRoles: '',
6565
}
6666

67+
const validHeader = 'roles;description_en;description_de'
68+
6769
const {
6870
control,
6971
trigger,
@@ -91,11 +93,8 @@ const AddRolesOverlay = ({
9193
?.split('\n')
9294
.filter((item) => item !== '')
9395
.map((item) => item)
94-
95-
if (
96-
CSVCells[0] === 'roles;description\r' ||
97-
CSVCells[0] === 'roles;description'
98-
) {
96+
const header = CSVCells[0]?.trim().toLowerCase()
97+
if (header === validHeader) {
9998
const roleDescription = str
10099
?.split('\n')
101100
.filter((item) => item !== '')

src/components/pages/CompanySubscriptions/index.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,12 +200,13 @@ export default function CompanySubscriptions() {
200200
<PageLoadingTable<SubscribedActiveApps, FetchHookArgsType>
201201
sx={{
202202
'.MuiDataGrid-cell': {
203-
alignContent: 'center !important',
203+
display: 'flex',
204+
alignItems: 'center',
204205
},
205206
}}
206207
autoFocus={false}
207208
searchExpr={searchExpr}
208-
alignCell="start"
209+
alignCell="flex-start"
209210
defaultFilter={group}
210211
filterViews={filterView}
211212
toolbarVariant={'searchAndFilter'}

src/components/pages/EdcConnector/AddConnectorOverlay/index.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ const AddConnectorOverlay = ({
101101
const { data } = useFetchOfferSubscriptionsQuery()
102102
const { data: ownCompanyDetails } = useFetchOwnCompanyDetailsQuery('')
103103
const [page, setPage] = useState<number>(0)
104-
const { data: serviceAccounts } = useFetchServiceAccountUsersQuery(page)
104+
const { data: serviceAccounts, refetch } =
105+
useFetchServiceAccountUsersQuery(page)
105106
const [newTechnicalUSer, setNewTechnicalUSer] = useState(false)
106107
const [allAccounts, setAllAccounts] = useState<ServiceAccountListEntry[]>([])
107108

@@ -120,6 +121,17 @@ const AddConnectorOverlay = ({
120121

121122
const [selected, setSelected] = useState<ConnectorType>({})
122123

124+
useEffect(() => {
125+
if (openDialog) {
126+
setPage(0)
127+
setAllAccounts([])
128+
}
129+
}, [openDialog, connectorStep])
130+
131+
useEffect(() => {
132+
refetch()
133+
}, [page, refetch])
134+
123135
useEffect(() => {
124136
if (openDialog || connectorStep === 0) {
125137
reset(formFields)

src/components/pages/ServiceAdminBoardDetail/index.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ import {
2222
Button,
2323
StaticTable,
2424
Typography,
25+
Image,
2526
} from '@catena-x/portal-shared-components'
2627
import { useNavigate, useParams } from 'react-router-dom'
2728
import '../AdminBoardDetail/style.scss'
28-
import { getAssetBase } from 'services/EnvironmentService'
2929
import {
3030
type ServiceDetailsType,
3131
useFetchBoardServiceDetailsQuery,
@@ -42,6 +42,8 @@ import { Grid, Box, Divider } from '@mui/material'
4242
import { download } from 'utils/downloadUtils'
4343
import { DocumentTypeText } from 'features/apps/types'
4444
import { DocumentTypeId } from 'features/appManagement/apiSlice'
45+
import { fetchImageWithToken } from 'services/ImageService'
46+
import { getApiBase } from 'services/EnvironmentService'
4547

4648
enum TableData {
4749
SUCCESS = 'SUCCESS',
@@ -132,9 +134,10 @@ export default function ServiceAdminBoardDetail() {
132134
<Box className="service-content">
133135
<div className="service-board-header">
134136
<div className="lead-image">
135-
<img
136-
src={`${getAssetBase()}/images/content/ServiceMarketplace.png`}
137+
<Image
138+
src={`${getApiBase()}/api/services/${appId}/serviceDocuments/${serviceData?.documents?.SERVICE_LEADIMAGE?.[0].documentId}`}
137139
alt={serviceData.title}
140+
loader={fetchImageWithToken}
138141
/>
139142
</div>
140143
<Box className="service-app-content">
@@ -251,7 +254,7 @@ export default function ServiceAdminBoardDetail() {
251254

252255
{serviceData.technicalUserProfile &&
253256
getTechUserData(
254-
Object.values(serviceData?.technicalUserProfile)[0]
257+
Object.values(serviceData.technicalUserProfile).flat() as string[]
255258
)}
256259

257260
<div className="divider-height" />

src/components/pages/ServiceMarketplace/RecommendedServices.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ import { useNavigate } from 'react-router-dom'
2727
import type { ServiceRequest } from 'features/serviceMarketplace/serviceApiSlice'
2828
import './style.scss'
2929
import NoItems from '../NoItems'
30-
import { getAssetBase } from 'services/EnvironmentService'
30+
import { fetchImageWithToken } from 'services/ImageService'
31+
import { getApiBase } from 'services/EnvironmentService'
3132
import { useCallback } from 'react'
3233
import { useTranslation } from 'react-i18next'
3334
import { ServiceTypeIdsEnum } from 'features/serviceManagement/apiSlice'
@@ -73,9 +74,18 @@ export default function RecommendedServices({
7374
<CardHorizontal
7475
borderRadius={6}
7576
image={{
77+
src: `${getApiBase()}/api/services/${service.id}/serviceDocuments/${service?.leadPictureId}`,
7678
alt: 'App Card',
77-
src: `${getAssetBase()}/images/content/ServiceMarketplace.png`,
79+
style: {
80+
flex: '0 0 33.333333%',
81+
maxWidth: '33.333333%',
82+
minHeight: '200px',
83+
backgroundRepeat: 'no-repeat',
84+
backgroundSize: 'cover',
85+
backgroundPosition: 'center',
86+
},
7887
}}
88+
imageLoader={fetchImageWithToken}
7989
label={service.provider}
8090
buttonText="Details"
8191
onBtnClick={() => {

src/components/pages/ServiceMarketplace/ServicesElements.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ import { useTranslation } from 'react-i18next'
2424
import { useNavigate } from 'react-router-dom'
2525
import type { ServiceRequest } from 'features/serviceMarketplace/serviceApiSlice'
2626
import './style.scss'
27-
import { getAssetBase } from 'services/EnvironmentService'
2827
import { useCallback } from 'react'
2928
import { ServiceTypeIdsEnum } from 'features/serviceManagement/apiSlice'
29+
import { getApiBase } from 'services/EnvironmentService'
30+
import { fetchImageWithToken } from 'services/ImageService'
3031

3132
export default function ServicesElements({
3233
services,
@@ -81,9 +82,18 @@ export default function ServicesElements({
8182
<CardHorizontal
8283
borderRadius={6}
8384
image={{
85+
src: `${getApiBase()}/api/services/${service.id}/serviceDocuments/${service?.leadPictureId}`,
8486
alt: 'App Card',
85-
src: `${getAssetBase()}/images/content/ServiceMarketplace.png`,
87+
style: {
88+
flex: '0 0 33.333333%',
89+
maxWidth: '33.333333%',
90+
minHeight: '200px',
91+
backgroundRepeat: 'no-repeat',
92+
backgroundSize: 'cover',
93+
backgroundPosition: 'center',
94+
},
8695
}}
96+
imageLoader={fetchImageWithToken}
8797
label={service.provider}
8898
buttonText="Details"
8999
onBtnClick={() => {

src/components/pages/ServiceMarketplaceDetail/MarketplaceHeader/index.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,19 @@
1919
********************************************************************************/
2020

2121
import { useDispatch } from 'react-redux'
22-
import { Button, Typography } from '@catena-x/portal-shared-components'
22+
import { Button, Typography, Image } from '@catena-x/portal-shared-components'
2323
import { useTranslation } from 'react-i18next'
2424
import { useParams } from 'react-router-dom'
2525
import type { ServiceRequest } from 'features/serviceMarketplace/serviceApiSlice'
2626
import { show } from 'features/control/overlay'
2727
import { OVERLAYS, ROLES } from 'types/Constants'
2828
import './style.scss'
2929
import { setSuccessType } from 'features/serviceMarketplace/slice'
30-
import { getAssetBase } from 'services/EnvironmentService'
3130
import { Box } from '@mui/material'
3231
import { ServiceTypeIdsEnum } from 'features/serviceManagement/apiSlice'
3332
import { userHasPortalRole } from 'services/AccessService'
33+
import { getApiBase } from 'services/EnvironmentService'
34+
import { fetchImageWithToken } from 'services/ImageService'
3435

3536
export default function MarketplaceHeader({
3637
item,
@@ -88,9 +89,10 @@ export default function MarketplaceHeader({
8889
return (
8990
<div className="service-marketplace-header">
9091
<div className="lead-image">
91-
<img
92-
src={`${getAssetBase()}/images/content/ServiceMarketplace.png`}
92+
<Image
93+
src={`${getApiBase()}/api/services/${serviceId}/serviceDocuments/${item?.leadPictureId}`}
9394
alt={item.title}
95+
loader={fetchImageWithToken}
9496
/>
9597
</div>
9698
<Box className="marketplace-app-content">

0 commit comments

Comments
 (0)